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/535] 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/535] 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/535] 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/535] 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/535] 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/535] [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/535] [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/535] [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/535] [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/535] [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/535] [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/535] [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/535] 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/535] 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/535] 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/535] 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/535] 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/535] 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/535] 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/535] 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/535] 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/535] 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/535] [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/535] [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/535] [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/535] [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/535] [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/535] [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/535] [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/535] 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/535] [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/535] [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/535] 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/535] [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/535] [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/535] 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/535] 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/535] 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/535] [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/535] [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/535] 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/535] 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/535] [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/535] [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/535] 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/535] [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/535] [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/535] 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/535] 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/535] 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/535] 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/535] 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/535] [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/535] [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/535] 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/535] [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/535] [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/535] 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/535] 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/535] 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/535] [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/535] [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/535] [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/535] [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/535] [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/535] 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/535] 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/535] 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/535] 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/535] [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/535] [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/535] 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/535] [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/535] [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/535] 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/535] [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/535] [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/535] [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/535] [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/535] [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/535] 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/535] 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/535] 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/535] 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/535] 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/535] 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/535] 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/535] 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/535] 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/535] [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/535] [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/535] 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/535] 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/535] 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/535] 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/535] 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/535] 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/535] [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/535] 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/535] [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/535] [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/535] 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/535] 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/535] 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/535] 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/535] 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/535] 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/535] 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/535] 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/535] 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/535] 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/535] 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/535] 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/535] 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/535] 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/535] 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/535] 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/535] 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/535] 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/535] [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/535] [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/535] 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/535] [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/535] [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/535] 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/535] 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/535] [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/535] [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/535] 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/535] 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/535] [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/535] 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/535] 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/535] 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/535] [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/535] [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/535] 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/535] 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/535] 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/535] 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/535] [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/535] [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/535] 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/535] [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/535] [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/535] 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/535] 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/535] 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/535] 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/535] [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/535] [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 1699d41d39a5d70e681589b3cf03b9d61d1a9a06 Mon Sep 17 00:00:00 2001 From: miconis Date: Thu, 5 Nov 2020 15:48:42 +0100 Subject: [PATCH 155/535] relations for openorgs: not it choose only one master --- .../dhp/oa/dedup/SparkPrepareOrgRels.java | 50 ++++++++++--------- 1 file changed, 26 insertions(+), 24 deletions(-) diff --git a/dhp-workflows/dhp-dedup-openaire/src/main/java/eu/dnetlib/dhp/oa/dedup/SparkPrepareOrgRels.java b/dhp-workflows/dhp-dedup-openaire/src/main/java/eu/dnetlib/dhp/oa/dedup/SparkPrepareOrgRels.java index e9933c4e5..19e6127f6 100644 --- a/dhp-workflows/dhp-dedup-openaire/src/main/java/eu/dnetlib/dhp/oa/dedup/SparkPrepareOrgRels.java +++ b/dhp-workflows/dhp-dedup-openaire/src/main/java/eu/dnetlib/dhp/oa/dedup/SparkPrepareOrgRels.java @@ -1,13 +1,9 @@ + package eu.dnetlib.dhp.oa.dedup; -import com.google.common.collect.Lists; -import eu.dnetlib.dhp.application.ArgumentApplicationParser; -import eu.dnetlib.dhp.oa.dedup.model.OrgSimRel; -import eu.dnetlib.dhp.schema.common.ModelSupport; -import eu.dnetlib.dhp.schema.oaf.Organization; -import eu.dnetlib.dhp.schema.oaf.Relation; -import eu.dnetlib.dhp.utils.ISLookupClientFactory; -import eu.dnetlib.enabling.is.lookup.rmi.ISLookUpService; +import java.io.IOException; +import java.util.*; + import org.apache.commons.io.IOUtils; import org.apache.spark.SparkConf; import org.apache.spark.api.java.function.MapFunction; @@ -17,12 +13,19 @@ import org.apache.spark.sql.SaveMode; import org.apache.spark.sql.SparkSession; import org.slf4j.Logger; import org.slf4j.LoggerFactory; + +import com.google.common.collect.Lists; + +import eu.dnetlib.dhp.application.ArgumentApplicationParser; +import eu.dnetlib.dhp.oa.dedup.model.OrgSimRel; +import eu.dnetlib.dhp.schema.common.ModelSupport; +import eu.dnetlib.dhp.schema.oaf.Organization; +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.io.IOException; -import java.util.*; - public class SparkPrepareOrgRels extends AbstractSparkAction { private static final Logger log = LoggerFactory.getLogger(SparkCreateDedupRecord.class); @@ -125,12 +128,11 @@ public class SparkPrepareOrgRels extends AbstractSparkAction { List ids = sortIds(l); List> rels = new ArrayList<>(); - for (String source : ids) { - if (source.contains("openorgs____") || ids.indexOf(source) == 0) - for (String target : ids) { - rels.add(new Tuple3<>(source, target, groupId)); - } + String source = ids.get(0); + for (String target : ids) { + rels.add(new Tuple3<>(source, target, groupId)); } + return rels.iterator(); }) .rdd(), @@ -235,14 +237,14 @@ public class SparkPrepareOrgRels extends AbstractSparkAction { .joinWith(entities, relations.col("_2").equalTo(entities.col("_1")), "inner") .map( (MapFunction, Tuple2>, OrgSimRel>) r -> new OrgSimRel( - r._1()._1(), - r._2()._2().getOriginalId().get(0), - r._2()._2().getLegalname() != null ? r._2()._2().getLegalname().getValue() : "", - r._2()._2().getLegalshortname() != null ? r._2()._2().getLegalshortname().getValue() : "", - r._2()._2().getCountry() != null ? r._2()._2().getCountry().getClassid() : "", - r._2()._2().getWebsiteurl() != null ? r._2()._2().getWebsiteurl().getValue() : "", - r._2()._2().getCollectedfrom().get(0).getValue(), - "group::" + r._1()._1()), + r._1()._1(), + r._2()._2().getOriginalId().get(0), + r._2()._2().getLegalname() != null ? r._2()._2().getLegalname().getValue() : "", + r._2()._2().getLegalshortname() != null ? r._2()._2().getLegalshortname().getValue() : "", + r._2()._2().getCountry() != null ? r._2()._2().getCountry().getClassid() : "", + r._2()._2().getWebsiteurl() != null ? r._2()._2().getWebsiteurl().getValue() : "", + r._2()._2().getCollectedfrom().get(0).getValue(), + "group::" + r._1()._1()), Encoders.bean(OrgSimRel.class)) .map( (MapFunction>) o -> new Tuple2<>(o.getLocal_id(), o), From ed0d5d3e1dc5681019eb0ef4e443a4c55a265266 Mon Sep 17 00:00:00 2001 From: miconis Date: Fri, 4 Dec 2020 15:41:31 +0100 Subject: [PATCH 156/535] 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 157/535] [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 158/535] [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 159/535] 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 160/535] 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 161/535] [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 162/535] [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 163/535] 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 164/535] 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 12749a0a776d5ca1b9f1f59f4809b8f717bac228 Mon Sep 17 00:00:00 2001 From: Antonis Lempesis Date: Fri, 26 Nov 2021 15:40:40 +0200 Subject: [PATCH 165/535] first --- .../dhp/oa/graph/stats/oozie_app/contexts.sh | 16 ++++------ .../oa/graph/stats/oozie_app/finalizedb.sh | 4 +-- .../graph/stats/oozie_app/scripts/step10.sql | 23 +++++++-------- .../graph/stats/oozie_app/scripts/step11.sql | 2 +- .../graph/stats/oozie_app/scripts/step13.sql | 10 +++---- .../graph/stats/oozie_app/scripts/step14.sql | 29 +++++-------------- .../graph/stats/oozie_app/scripts/step15.sql | 10 +++---- .../stats/oozie_app/scripts/step15_5.sql | 14 ++++----- .../scripts/step16_1-definitions.sql | 6 ++-- .../graph/stats/oozie_app/scripts/step2.sql | 16 +++++----- .../graph/stats/oozie_app/scripts/step3.sql | 16 +++++----- .../graph/stats/oozie_app/scripts/step4.sql | 16 +++++----- .../graph/stats/oozie_app/scripts/step5.sql | 16 +++++----- .../graph/stats/oozie_app/scripts/step6.sql | 8 ++--- .../graph/stats/oozie_app/scripts/step7.sql | 4 +-- .../graph/stats/oozie_app/scripts/step8.sql | 10 +++---- 16 files changed, 88 insertions(+), 112 deletions(-) diff --git a/dhp-workflows/dhp-stats-update/src/main/resources/eu/dnetlib/dhp/oa/graph/stats/oozie_app/contexts.sh b/dhp-workflows/dhp-stats-update/src/main/resources/eu/dnetlib/dhp/oa/graph/stats/oozie_app/contexts.sh index b66ab47e0..fafb45cb0 100644 --- a/dhp-workflows/dhp-stats-update/src/main/resources/eu/dnetlib/dhp/oa/graph/stats/oozie_app/contexts.sh +++ b/dhp-workflows/dhp-stats-update/src/main/resources/eu/dnetlib/dhp/oa/graph/stats/oozie_app/contexts.sh @@ -30,18 +30,14 @@ hdfs dfs -copyFromLocal concepts.csv ${TMP} hdfs dfs -chmod -R 777 ${TMP} echo "Creating and populating impala tables" -impala-shell -q "invalidate metadata" -impala-shell -d ${TARGET_DB} -q "invalidate metadata" -impala-shell -q "create table ${TARGET_DB}.context (id string, name string) row format delimited fields terminated by ','" -impala-shell -q "create table ${TARGET_DB}.category (context string, id string, name string) row format delimited fields terminated by ','" -impala-shell -q "create table ${TARGET_DB}.concept (category string, id string, name string) row format delimited fields terminated by ','" -impala-shell -d ${TARGET_DB} -q "invalidate metadata" -impala-shell -q "load data inpath '${TMP}/contexts.csv' into table ${TARGET_DB}.context" -impala-shell -q "load data inpath '${TMP}/categories.csv' into table ${TARGET_DB}.category" -impala-shell -q "load data inpath '${TMP}/concepts.csv' into table ${TARGET_DB}.concept" +hive -e "create table ${TARGET_DB}.context (id string, name string) row format delimited fields terminated by ','" +hive -e "create table ${TARGET_DB}.category (context string, id string, name string) row format delimited fields terminated by ','" +hive -e "create table ${TARGET_DB}.concept (category string, id string, name string) row format delimited fields terminated by ','" +hive -e "load data inpath '${TMP}/contexts.csv' into table ${TARGET_DB}.context" +hive -e "load data inpath '${TMP}/categories.csv' into table ${TARGET_DB}.category" +hive -e "load data inpath '${TMP}/concepts.csv' into table ${TARGET_DB}.concept" echo "Cleaning up" -hdfs dfs -rm -f -r -skipTrash ${TMP} rm concepts.csv rm categories.csv rm contexts.csv diff --git a/dhp-workflows/dhp-stats-update/src/main/resources/eu/dnetlib/dhp/oa/graph/stats/oozie_app/finalizedb.sh b/dhp-workflows/dhp-stats-update/src/main/resources/eu/dnetlib/dhp/oa/graph/stats/oozie_app/finalizedb.sh index d04c5ccfd..8eade479a 100644 --- a/dhp-workflows/dhp-stats-update/src/main/resources/eu/dnetlib/dhp/oa/graph/stats/oozie_app/finalizedb.sh +++ b/dhp-workflows/dhp-stats-update/src/main/resources/eu/dnetlib/dhp/oa/graph/stats/oozie_app/finalizedb.sh @@ -10,9 +10,7 @@ export SOURCE=$1 export SHADOW=$2 echo "Updating shadow database" -impala-shell -q "invalidate metadata" -impala-shell -d ${SOURCE} -q "invalidate metadata" -impala-shell -d ${SOURCE} -q "show tables" --delimited | sed "s/^\(.*\)/compute stats ${SOURCE}.\1;/" | impala-shell -c -f - +hive --database ${SOURCE} -e "show tables" | grep -v WARN | sed "s/^\(.*\)/analyze table ${SOURCE}.\1 compute statistics;/" | impala-shell -c -f - impala-shell -q "create database if not exists ${SHADOW}" impala-shell -d ${SHADOW} -q "show tables" --delimited | sed "s/^/drop view if exists ${SHADOW}./" | sed "s/$/;/" | impala-shell -c -f - impala-shell -d ${SOURCE} -q "show tables" --delimited | sed "s/\(.*\)/create view ${SHADOW}.\1 as select * from ${SOURCE}.\1;/" | impala-shell -c -f - 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 fc0162a9c..2808d0a3a 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 @@ -4,29 +4,28 @@ ------------------------------------------------------------------------------------------------ ------------------------------------------------------------------------------------------------ CREATE OR REPLACE VIEW ${stats_db_name}.fundref AS -SELECT * -FROM ${external_stats_db_name}.fundref; +SELECT * FROM ${external_stats_db_name}.fundref; CREATE OR REPLACE VIEW ${stats_db_name}.country AS -SELECT * -FROM ${external_stats_db_name}.country; +SELECT * FROM ${external_stats_db_name}.country; CREATE OR REPLACE VIEW ${stats_db_name}.countrygdp AS -SELECT * -FROM ${external_stats_db_name}.countrygdp; +SELECT * FROM ${external_stats_db_name}.countrygdp; CREATE OR REPLACE VIEW ${stats_db_name}.roarmap AS -SELECT * -FROM ${external_stats_db_name}.roarmap; +SELECT * FROM ${external_stats_db_name}.roarmap; CREATE OR REPLACE VIEW ${stats_db_name}.rndexpediture AS -SELECT * -FROM ${external_stats_db_name}.rndexpediture; +SELECT * FROM ${external_stats_db_name}.rndexpediture; CREATE OR REPLACE VIEW ${stats_db_name}.licenses_normalized AS -SELECT * -FROM ${external_stats_db_name}.licenses_normalized; +SELECT * FROM ${external_stats_db_name}.licenses_normalized; +create view ${stats_db_name}.rndexpenditure as +select * from stats_ext.rndexpediture; + +create view ${stats_db_name}.issn_gold_oa_dataset as +select * from stats_ext.issn_gold_oa_dataset; ------------------------------------------------------------------------------------------------ ------------------------------------------------------------------------------------------------ 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 e892da0be..280c1bb51 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 @@ -102,7 +102,7 @@ WHERE otherresearchproduct_tmp.id IN (SELECT distinct r.id AND pr.id = p.id AND to_date(r.date) - to_date(p.enddate) > 0); -CREATE OR REPLACE VIEW ${stats_db_name}.project_results_publication AS +CREATE OR REPLACE VIEW ${stats_db_name}.project_results_publication STORED AS PARQUET AS SELECT result_projects.id AS result, result_projects.project AS project_results, result.date as resultdate, 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 e4e81175c..6e63e2836 100644 --- 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,7 +5,7 @@ -- Sources related tables/views ------------------------------------------------------ ------------------------------------------------------ -CREATE TABLE IF NOT EXISTS ${stats_db_name}.publication_sources as +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 ( SELECT substr(p.id, 4) as id, substr(datasource, 4) as datasource @@ -16,7 +16,7 @@ LEFT OUTER JOIN from ${openaire_db_name}.datasource d WHERE d.datainfo.deletedbyinference=false) d on p.datasource = d.id; -CREATE TABLE IF NOT EXISTS ${stats_db_name}.dataset_sources as +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 ( SELECT substr(p.id, 4) as id, substr(datasource, 4) as datasource @@ -27,7 +27,7 @@ LEFT OUTER JOIN from ${openaire_db_name}.datasource d WHERE d.datainfo.deletedbyinference=false) d on p.datasource = d.id; -CREATE TABLE IF NOT EXISTS ${stats_db_name}.software_sources as +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 ( SELECT substr(p.id, 4) as id, substr(datasource, 4) as datasource @@ -38,7 +38,7 @@ LEFT OUTER JOIN from ${openaire_db_name}.datasource d WHERE d.datainfo.deletedbyinference=false) d on p.datasource = d.id; -CREATE TABLE IF NOT EXISTS ${stats_db_name}.otherresearchproduct_sources as +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 ( SELECT substr(p.id, 4) as id, substr(datasource, 4) as datasource @@ -59,7 +59,7 @@ UNION ALL SELECT * FROM ${stats_db_name}.otherresearchproduct_sources; -create table ${stats_db_name}.result_orcid as +create table ${stats_db_name}.result_orcid STORED AS PARQUET as select distinct res.id, regexp_replace(res.orcid, 'http://orcid.org/' ,'') as orcid from ( SELECT substr(res.id, 4) as id, auth_pid.value as orcid 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 00a6913bc..f38ad886e 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,27 +5,27 @@ -- Licences related tables/views ------------------------------------------------------ ------------------------------------------------------ -CREATE TABLE IF NOT EXISTS ${stats_db_name}.publication_licenses AS +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 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; -CREATE TABLE IF NOT EXISTS ${stats_db_name}.dataset_licenses AS +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; -CREATE TABLE IF NOT EXISTS ${stats_db_name}.software_licenses AS +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; -CREATE TABLE IF NOT EXISTS ${stats_db_name}.otherresearchproduct_licenses AS +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 where licenses.value is not null and licenses.value != '' and p.datainfo.deletedbyinference=false; -CREATE VIEW IF NOT EXISTS ${stats_db_name}.result_licenses AS +CREATE VIEW IF NOT EXISTS ${stats_db_name}.result_licenses STORED AS PARQUET AS SELECT * FROM ${stats_db_name}.publication_licenses UNION ALL SELECT * FROM ${stats_db_name}.dataset_licenses @@ -34,11 +34,11 @@ SELECT * FROM ${stats_db_name}.software_licenses UNION ALL SELECT * FROM ${stats_db_name}.otherresearchproduct_licenses; -CREATE TABLE IF NOT EXISTS ${stats_db_name}.organization_pids AS +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; -CREATE TABLE IF NOT EXISTS ${stats_db_name}.organization_sources as +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 ( SELECT substr(o.id, 4) as id, substr(instances.instance.key, 4) as datasource @@ -46,17 +46,4 @@ FROM ( LEFT OUTER JOIN ( SELECT substr(d.id, 4) id from ${openaire_db_name}.datasource d - WHERE d.datainfo.deletedbyinference=false) d on o.datasource = d.id; - --- ANALYZE TABLE ${stats_db_name}.publication_licenses COMPUTE STATISTICS; --- ANALYZE TABLE ${stats_db_name}.publication_licenses COMPUTE STATISTICS FOR COLUMNS; --- ANALYZE TABLE ${stats_db_name}.dataset_licenses COMPUTE STATISTICS; --- ANALYZE TABLE ${stats_db_name}.dataset_licenses COMPUTE STATISTICS FOR COLUMNS; --- ANALYZE TABLE ${stats_db_name}.software_licenses COMPUTE STATISTICS; --- ANALYZE TABLE ${stats_db_name}.software_licenses COMPUTE STATISTICS FOR COLUMNS; --- ANALYZE TABLE ${stats_db_name}.otherresearchproduct_licenses COMPUTE STATISTICS; --- ANALYZE TABLE ${stats_db_name}.otherresearchproduct_licenses COMPUTE STATISTICS FOR COLUMNS; --- ANALYZE TABLE ${stats_db_name}.organization_pids COMPUTE STATISTICS; --- ANALYZE TABLE ${stats_db_name}.organization_pids COMPUTE STATISTICS FOR COLUMNS; --- ANALYZE TABLE ${stats_db_name}.organization_sources COMPUTE STATISTICS; --- ANALYZE TABLE ${stats_db_name}.organization_sources COMPUTE STATISTICS FOR COLUMNS; \ No newline at end of file + WHERE d.datainfo.deletedbyinference=false) d on o.datasource = d.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/step15.sql b/dhp-workflows/dhp-stats-update/src/main/resources/eu/dnetlib/dhp/oa/graph/stats/oozie_app/scripts/step15.sql index 8e66e05c0..f293c1fd3 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,27 +6,27 @@ ------------------------------------------------------ ------------------------------------------------------ -CREATE TABLE IF NOT EXISTS ${stats_db_name}.publication_refereed as +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; -CREATE TABLE IF NOT EXISTS ${stats_db_name}.dataset_refereed as +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; -CREATE TABLE IF NOT EXISTS ${stats_db_name}.software_refereed as +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; -CREATE TABLE IF NOT EXISTS ${stats_db_name}.otherresearchproduct_refereed as +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 where r.datainfo.deletedbyinference=false; -CREATE VIEW IF NOT EXISTS ${stats_db_name}.result_refereed as +CREATE VIEW IF NOT EXISTS ${stats_db_name}.result_refereed STORED AS PARQUET as select * from ${stats_db_name}.publication_refereed union all select * from ${stats_db_name}.dataset_refereed 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 3a7d9f455..06c425dcd 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,21 +1,21 @@ ------------------------------------------- --- Extra tables, mostly used by indicators -create table ${stats_db_name}.result_projectcount as +create table ${stats_db_name}.result_projectcount STORED AS PARQUET as select r.id, count(distinct p.id) as count from ${stats_db_name}.result r 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; -create table ${stats_db_name}.result_fundercount as +create table ${stats_db_name}.result_fundercount STORED AS PARQUET as select r.id, count(distinct p.funder) as count from ${stats_db_name}.result r 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; -create table ${stats_db_name}.project_resultcount as +create table ${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 from ${stats_db_name}.project p @@ -29,8 +29,6 @@ select rcount.pid, sum(case when rcount.type='publication' then rcount.count els from rcount group by rcount.pid; -create view ${stats_db_name}.rndexpenditure as select * from stats_ext.rndexpediture; - create table ${stats_db_name}.result_instance stored as parquet as select distinct r.* from ( @@ -39,12 +37,10 @@ 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; -create table ${stats_db_name}.result_apc as +create table ${stats_db_name}.result_apc STORED AS PARQUET as select r.id, r.amount, r.currency from ( select substr(r.id, 4) as id, inst.processingchargeamount.value as amount, inst.processingchargecurrency.value as currency from ${openaire_db_name}.result r lateral view explode(r.instance) instances as inst) r join ${stats_db_name}.result res on res.id=r.id -where r.amount is not null; - -create view ${stats_db_name}.issn_gold_oa_dataset as select * from stats_ext.issn_gold_oa_dataset; \ No newline at end of file +where r.amount is not null; \ 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/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 6b4d9b1b0..5a4aecd5d 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,20 +3,20 @@ ---------------------------------------------------- -- Peer reviewed: -create table ${stats_db_name}.result_peerreviewed as +create table ${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 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: -create table ${stats_db_name}.result_greenoa as +create table ${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: -create table ${stats_db_name}.result_gold as +create table ${stats_db_name}.result_gold stored as parquet as select r.id, case when gold.gold_oa=1 then true else false end as gold from ${stats_db_name}.result r left outer join ${stats_db_name}.indi_pub_gold_oa gold on gold.id=r.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/step2.sql b/dhp-workflows/dhp-stats-update/src/main/resources/eu/dnetlib/dhp/oa/graph/stats/oozie_app/scripts/step2.sql index bb0d0ac6c..dfe6246ca 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 @@ -40,13 +40,13 @@ SELECT substr(p.id, 4) as id, from ${openaire_db_name}.publication p where p.datainfo.deletedbyinference = false; -CREATE TABLE ${stats_db_name}.publication_classifications AS +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; -CREATE TABLE ${stats_db_name}.publication_concepts AS +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 when contexts.context.id RLIKE '^[^::]+::[^::]+$' then concat(contexts.context.id, '::other') @@ -55,7 +55,7 @@ from ${openaire_db_name}.publication p LATERAL VIEW explode(p.context) contexts as context where p.datainfo.deletedbyinference = false; -CREATE TABLE ${stats_db_name}.publication_datasources as +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 ( SELECT substr(p.id, 4) as id, substr(instances.instance.hostedby.key, 4) as datasource @@ -66,30 +66,30 @@ FROM ( from ${openaire_db_name}.datasource d WHERE d.datainfo.deletedbyinference = false) d on p.datasource = d.id; -CREATE TABLE ${stats_db_name}.publication_languages AS +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; -CREATE TABLE ${stats_db_name}.publication_oids AS +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; -CREATE TABLE ${stats_db_name}.publication_pids AS +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; -CREATE TABLE ${stats_db_name}.publication_topics as +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; -CREATE TABLE ${stats_db_name}.publication_citations AS +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 lateral view explode(p.extrainfo) citations AS citation 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 953eaad6a..4841944a2 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 @@ -40,20 +40,20 @@ SELECT substr(d.id, 4) AS id, FROM ${openaire_db_name}.dataset d WHERE d.datainfo.deletedbyinference = FALSE; -CREATE TABLE ${stats_db_name}.dataset_citations AS +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 LATERAL VIEW explode(d.extrainfo) citations AS citation WHERE xpath_string(citation.value, "//citation/id[@type='openaire']/@value") != "" and d.datainfo.deletedbyinference = false; -CREATE TABLE ${stats_db_name}.dataset_classifications AS +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; -CREATE TABLE ${stats_db_name}.dataset_concepts AS +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 when contexts.context.id RLIKE '^[^::]+::[^::]+$' then concat(contexts.context.id, '::other') @@ -62,7 +62,7 @@ from ${openaire_db_name}.dataset p LATERAL VIEW explode(p.context) contexts as context where p.datainfo.deletedbyinference = false; -CREATE TABLE ${stats_db_name}.dataset_datasources AS +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 ( SELECT substr(p.id, 4) as id, substr(instances.instance.hostedby.key, 4) AS datasource @@ -74,24 +74,24 @@ FROM ( FROM ${openaire_db_name}.datasource d WHERE d.datainfo.deletedbyinference = false) d ON p.datasource = d.id; -CREATE TABLE ${stats_db_name}.dataset_languages AS +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; -CREATE TABLE ${stats_db_name}.dataset_oids AS +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; -CREATE TABLE ${stats_db_name}.dataset_pids AS +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; -CREATE TABLE ${stats_db_name}.dataset_topics AS +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 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/step4.sql b/dhp-workflows/dhp-stats-update/src/main/resources/eu/dnetlib/dhp/oa/graph/stats/oozie_app/scripts/step4.sql index 0210dc8cb..390a5e338 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 @@ -40,20 +40,20 @@ SELECT substr(s.id, 4) as id, from ${openaire_db_name}.software s where s.datainfo.deletedbyinference = false; -CREATE TABLE ${stats_db_name}.software_citations AS +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 LATERAL VIEW explode(s.extrainfo) citations as citation where xpath_string(citation.value, "//citation/id[@type='openaire']/@value") != "" and s.datainfo.deletedbyinference = false; -CREATE TABLE ${stats_db_name}.software_classifications AS +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 LATERAL VIEW explode(p.instance.instancetype) instances AS instancetype where p.datainfo.deletedbyinference = false; -CREATE TABLE ${stats_db_name}.software_concepts AS +CREATE TABLE ${stats_db_name}.software_concepts STORED AS PARQUET AS SELECT substr(p.id, 4) as id, case when contexts.context.id RLIKE '^[^::]+::[^::]+::.+$' then contexts.context.id when contexts.context.id RLIKE '^[^::]+::[^::]+$' then concat(contexts.context.id, '::other') @@ -62,7 +62,7 @@ FROM ${openaire_db_name}.software p LATERAL VIEW explode(p.context) contexts AS context where p.datainfo.deletedbyinference = false; -CREATE TABLE ${stats_db_name}.software_datasources AS +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 ( SELECT substr(p.id, 4) AS id, substr(instances.instance.hostedby.key, 4) AS datasource @@ -74,24 +74,24 @@ FROM ( FROM ${openaire_db_name}.datasource d WHERE d.datainfo.deletedbyinference = false) d ON p.datasource = d.id; -CREATE TABLE ${stats_db_name}.software_languages AS +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; -CREATE TABLE ${stats_db_name}.software_oids AS +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; -CREATE TABLE ${stats_db_name}.software_pids AS +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; -CREATE TABLE ${stats_db_name}.software_topics AS +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 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/step5.sql b/dhp-workflows/dhp-stats-update/src/main/resources/eu/dnetlib/dhp/oa/graph/stats/oozie_app/scripts/step5.sql index f7b302186..65c2f0c33 100644 --- 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 @@ -40,18 +40,18 @@ FROM ${openaire_db_name}.otherresearchproduct o WHERE o.datainfo.deletedbyinference = FALSE; -- Otherresearchproduct_citations -CREATE TABLE ${stats_db_name}.otherresearchproduct_citations AS +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 WHERE xpath_string(citation.value, "//citation/id[@type='openaire']/@value") != "" and o.datainfo.deletedbyinference = false; -CREATE TABLE ${stats_db_name}.otherresearchproduct_classifications AS +CREATE TABLE ${stats_db_name}.otherresearchproduct_classifications STORED AS PARQUET AS 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; -CREATE TABLE ${stats_db_name}.otherresearchproduct_concepts AS +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 when contexts.context.id RLIKE '^[^::]+::[^::]+$' then concat(contexts.context.id, '::other') @@ -59,7 +59,7 @@ 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; -CREATE TABLE ${stats_db_name}.otherresearchproduct_datasources AS +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 from ${openaire_db_name}.otherresearchproduct p lateral view explode(p.instance) instances as instance @@ -68,22 +68,22 @@ 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) d on p.datasource = d.id; -CREATE TABLE ${stats_db_name}.otherresearchproduct_languages AS +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; -CREATE TABLE ${stats_db_name}.otherresearchproduct_oids AS +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; -CREATE TABLE ${stats_db_name}.otherresearchproduct_pids AS +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; -CREATE TABLE ${stats_db_name}.otherresearchproduct_topics AS +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 where p.datainfo.deletedbyinference = false; \ 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/step6.sql b/dhp-workflows/dhp-stats-update/src/main/resources/eu/dnetlib/dhp/oa/graph/stats/oozie_app/scripts/step6.sql index 378e0f17b..c75659c46 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,7 +3,7 @@ -- Project table/view and Project related tables/views ------------------------------------------------------ ------------------------------------------------------ -CREATE TABLE ${stats_db_name}.project_oids AS +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; CREATE TABLE ${stats_db_name}.project_organizations AS @@ -12,13 +12,13 @@ from ${openaire_db_name}.relation r WHERE r.reltype = 'projectOrganization' and r.datainfo.deletedbyinference = false; -CREATE TABLE ${stats_db_name}.project_results AS +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.datainfo.deletedbyinference = false; -create table ${stats_db_name}.project_classification as +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 @@ -74,7 +74,7 @@ SELECT substr(p.id, 4) AS id, FROM ${openaire_db_name}.project p WHERE p.datainfo.deletedbyinference = false; -create table ${stats_db_name}.funder as +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 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 b3cbc9b41..99fa47767 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,13 +123,13 @@ UNION ALL SELECT * FROM ${stats_db_name}.otherresearchproduct_topics; -CREATE TABLE ${stats_db_name}.result_organization AS +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 WHERE r.reltype = 'resultOrganization' and r.datainfo.deletedbyinference = false; -CREATE TABLE ${stats_db_name}.result_projects AS +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 JOIN ${stats_db_name}.project_results pr ON r.id = pr.result 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 76d31eb5e..6753d8190 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 @@ -80,15 +80,15 @@ UPDATE ${stats_db_name}.datasource_tmp SET yearofvalidation=null WHERE yearofvalidation = '-1'; -CREATE TABLE ${stats_db_name}.datasource_languages AS +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; -CREATE TABLE ${stats_db_name}.datasource_oids AS +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; -CREATE TABLE ${stats_db_name}.datasource_organizations AS +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 WHERE r.reltype = 'datasourceOrganization' @@ -96,11 +96,11 @@ WHERE r.reltype = 'datasourceOrganization' -- datasource sources: -- where the datasource info have been collected from. -create table if not exists ${stats_db_name}.datasource_sources AS +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 where d.datainfo.deletedbyinference = false; -CREATE OR REPLACE VIEW ${stats_db_name}.datasource_results AS +CREATE OR REPLACE VIEW ${stats_db_name}.datasource_results STORED AS PARQUET AS SELECT datasource AS id, id AS result FROM ${stats_db_name}.result_datasources; \ No newline at end of file From d05210ba9991c9276b5cb7e5f1258379fa0834b6 Mon Sep 17 00:00:00 2001 From: Antonis Lempesis Date: Tue, 30 Nov 2021 19:01:48 +0200 Subject: [PATCH 166/535] finished migration to hive only --- .../dhp/oa/graph/stats/oozie_app/finalizedb.sh | 11 +++++++---- .../dhp/oa/graph/stats/oozie_app/indicators.sh | 6 +++--- .../dnetlib/dhp/oa/graph/stats/oozie_app/monitor.sh | 11 +++++++---- .../dhp/oa/graph/stats/oozie_app/observatory-post.sh | 12 +++++++----- .../dhp/oa/graph/stats/oozie_app/observatory-pre.sh | 7 ++++--- 5 files changed, 28 insertions(+), 19 deletions(-) diff --git a/dhp-workflows/dhp-stats-update/src/main/resources/eu/dnetlib/dhp/oa/graph/stats/oozie_app/finalizedb.sh b/dhp-workflows/dhp-stats-update/src/main/resources/eu/dnetlib/dhp/oa/graph/stats/oozie_app/finalizedb.sh index 8eade479a..60771dfa7 100644 --- a/dhp-workflows/dhp-stats-update/src/main/resources/eu/dnetlib/dhp/oa/graph/stats/oozie_app/finalizedb.sh +++ b/dhp-workflows/dhp-stats-update/src/main/resources/eu/dnetlib/dhp/oa/graph/stats/oozie_app/finalizedb.sh @@ -10,8 +10,11 @@ export SOURCE=$1 export SHADOW=$2 echo "Updating shadow database" -hive --database ${SOURCE} -e "show tables" | grep -v WARN | sed "s/^\(.*\)/analyze table ${SOURCE}.\1 compute statistics;/" | impala-shell -c -f - -impala-shell -q "create database if not exists ${SHADOW}" -impala-shell -d ${SHADOW} -q "show tables" --delimited | sed "s/^/drop view if exists ${SHADOW}./" | sed "s/$/;/" | impala-shell -c -f - -impala-shell -d ${SOURCE} -q "show tables" --delimited | sed "s/\(.*\)/create view ${SHADOW}.\1 as select * from ${SOURCE}.\1;/" | impala-shell -c -f - +hive --database ${SOURCE} -e "show tables" | grep -v WARN | sed "s/^\(.*\)/analyze table ${SOURCE}.\1 compute statistics;/" > foo +hive -f foo +hive -e "create database if not exists ${SHADOW}" +hive --database ${SHADOW} -e "show tables" | grep -v WARN | sed "s/^/drop view if exists ${SHADOW}./" | sed "s/$/;/" > foo +hive -f foo +hive --database ${SOURCE} -e "show tables" | grep -v WARN | sed "s/\(.*\)/create view ${SHADOW}.\1 as select * from ${SOURCE}.\1;/" > foo +hive -f foo echo "Shadow db ready!" \ 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/indicators.sh b/dhp-workflows/dhp-stats-update/src/main/resources/eu/dnetlib/dhp/oa/graph/stats/oozie_app/indicators.sh index 93faa43d6..72d6d8048 100644 --- a/dhp-workflows/dhp-stats-update/src/main/resources/eu/dnetlib/dhp/oa/graph/stats/oozie_app/indicators.sh +++ b/dhp-workflows/dhp-stats-update/src/main/resources/eu/dnetlib/dhp/oa/graph/stats/oozie_app/indicators.sh @@ -13,7 +13,7 @@ echo "Getting file from " $SCRIPT_PATH hdfs dfs -copyToLocal $SCRIPT_PATH echo "Creating indicators" -impala-shell -q "invalidate metadata" -impala-shell -d ${TARGET} -q "show tables" --delimited | sed "s/^\(.*\)/compute stats ${TARGET}.\1;/" | impala-shell -c -f - -cat step16-createIndicatorsTables.sql | impala-shell -d $TARGET -f - +hive --database ${TARGET} -e "show tables" | grep -v WARN | sed "s/^\(.*\)/analyze table ${TARGET}.\1 compute statistics;/" > foo +hive -f foo +hive --database ${TARGET} -f step16-createIndicatorsTables.sql echo "Indicators created" \ 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 c5bda6d39..37809652d 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 @@ -15,11 +15,14 @@ echo "Getting file from " $4 hdfs dfs -copyToLocal $4 echo "Creating monitor database" -cat step20-createMonitorDB.sql | sed s/SOURCE/$1/g | sed s/TARGET/$2/g1 | impala-shell -f - +cat step20-createMonitorDB.sql | sed s/SOURCE/$1/g | sed s/TARGET/$2/g1 > foo +hive -f foo echo "Impala shell finished" echo "Updating shadow monitor database" -impala-shell -q "create database if not exists ${SHADOW}" -impala-shell -d ${SHADOW} -q "show tables" --delimited | sed "s/^/drop view if exists ${SHADOW}./" | sed "s/$/;/" | impala-shell -f - -impala-shell -d ${TARGET} -q "show tables" --delimited | sed "s/\(.*\)/create view ${SHADOW}.\1 as select * from ${TARGET}.\1;/" | impala-shell -f - +hive -e "create database if not exists ${SHADOW}" +hive --database ${SHADOW} -e "show tables" | grep -v WARN | sed "s/^/drop view if exists ${SHADOW}./" | sed "s/$/;/" > foo +hive -f foo +hive --database ${TARGET} -e "show tables" | grep -v WARN | sed "s/\(.*\)/create view ${SHADOW}.\1 as select * from ${TARGET}.\1;/" > foo +hive -f foo echo "Shadow db ready!" \ 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/observatory-post.sh b/dhp-workflows/dhp-stats-update/src/main/resources/eu/dnetlib/dhp/oa/graph/stats/oozie_app/observatory-post.sh index db8d39af2..d074e6a55 100644 --- a/dhp-workflows/dhp-stats-update/src/main/resources/eu/dnetlib/dhp/oa/graph/stats/oozie_app/observatory-post.sh +++ b/dhp-workflows/dhp-stats-update/src/main/resources/eu/dnetlib/dhp/oa/graph/stats/oozie_app/observatory-post.sh @@ -10,12 +10,14 @@ export SOURCE=$1 export TARGET=$2 export SHADOW=$3 -impala-shell -q "invalidate metadata;" -impala-shell -d ${TARGET} -q "show tables" --delimited | sed "s/\(.*\)/compute stats ${TARGET}.\1;/" | impala-shell -f - +hive --database ${TARGET} -e "show tables" | grep -v WARN | sed "s/\(.*\)/analyze table ${TARGET}.\1 compute statistics;/" > foo +hive -f foo echo "Impala shell finished" echo "Updating shadow observatory database" -impala-shell -q "create database if not exists ${SHADOW}" -impala-shell -d ${SHADOW} -q "show tables" --delimited | sed "s/^/drop view if exists ${SHADOW}./" | sed "s/$/;/" | impala-shell -f - -impala-shell -d ${TARGET} -q "show tables" --delimited | sed "s/\(.*\)/create view ${SHADOW}.\1 as select * from ${TARGET}.\1;/" | impala-shell -f - +hive -e "create database if not exists ${SHADOW}" +hive --database ${SHADOW} -e "show tables" | grep -v WARN | sed "s/^/drop view if exists ${SHADOW}./" | sed "s/$/;/" > foo +hive -f foo +hive -d ${TARGET} -e "show tables" | grep -v WARN | sed "s/\(.*\)/create view ${SHADOW}.\1 as select * from ${TARGET}.\1;/" > foo +hive -f foo echo "Shadow db ready!" \ 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/observatory-pre.sh b/dhp-workflows/dhp-stats-update/src/main/resources/eu/dnetlib/dhp/oa/graph/stats/oozie_app/observatory-pre.sh index 55a308c50..be009cd45 100644 --- a/dhp-workflows/dhp-stats-update/src/main/resources/eu/dnetlib/dhp/oa/graph/stats/oozie_app/observatory-pre.sh +++ b/dhp-workflows/dhp-stats-update/src/main/resources/eu/dnetlib/dhp/oa/graph/stats/oozie_app/observatory-pre.sh @@ -11,6 +11,7 @@ export TARGET=$2 export SHADOW=$3 echo "Creating observatory database" -impala-shell -q "drop database if exists ${TARGET} cascade" -impala-shell -q "create database if not exists ${TARGET}" -impala-shell -d ${SOURCE} -q "show tables" --delimited | grep -iv roar | sed "s/\(.*\)/create view ${TARGET}.\1 as select * from ${SOURCE}.\1;/" | impala-shell -f - +hive -e "drop database if exists ${TARGET} cascade" +hive -e "create database if not exists ${TARGET}" +hive --database ${SOURCE} -e "show tables" | grep -v WARN | grep -iv roar | sed "s/\(.*\)/create view ${TARGET}.\1 as select * from ${SOURCE}.\1;/" > foo +hive -f foo From 915f758c82f366e45388b80e3bfd42b5388d75df Mon Sep 17 00:00:00 2001 From: Antonis Lempesis Date: Mon, 13 Dec 2021 16:26:14 +0200 Subject: [PATCH 167/535] moving data to impala cluster and creating shadow databases there --- .../oa/graph/stats/oozie_app/finalizedb.sh | 8 +---- .../dhp/oa/graph/stats/oozie_app/monitor.sh | 10 +----- .../graph/stats/oozie_app/observatory-post.sh | 10 +----- .../graph/stats/oozie_app/scripts/step8.sql | 23 +++++------- .../dhp/oa/graph/stats/oozie_app/workflow.xml | 36 +++++++++++++++++-- 5 files changed, 45 insertions(+), 42 deletions(-) diff --git a/dhp-workflows/dhp-stats-update/src/main/resources/eu/dnetlib/dhp/oa/graph/stats/oozie_app/finalizedb.sh b/dhp-workflows/dhp-stats-update/src/main/resources/eu/dnetlib/dhp/oa/graph/stats/oozie_app/finalizedb.sh index 60771dfa7..9de472955 100644 --- a/dhp-workflows/dhp-stats-update/src/main/resources/eu/dnetlib/dhp/oa/graph/stats/oozie_app/finalizedb.sh +++ b/dhp-workflows/dhp-stats-update/src/main/resources/eu/dnetlib/dhp/oa/graph/stats/oozie_app/finalizedb.sh @@ -11,10 +11,4 @@ export SHADOW=$2 echo "Updating shadow database" hive --database ${SOURCE} -e "show tables" | grep -v WARN | sed "s/^\(.*\)/analyze table ${SOURCE}.\1 compute statistics;/" > foo -hive -f foo -hive -e "create database if not exists ${SHADOW}" -hive --database ${SHADOW} -e "show tables" | grep -v WARN | sed "s/^/drop view if exists ${SHADOW}./" | sed "s/$/;/" > foo -hive -f foo -hive --database ${SOURCE} -e "show tables" | grep -v WARN | sed "s/\(.*\)/create view ${SHADOW}.\1 as select * from ${SOURCE}.\1;/" > foo -hive -f foo -echo "Shadow db ready!" \ No newline at end of file +hive -f 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/monitor.sh b/dhp-workflows/dhp-stats-update/src/main/resources/eu/dnetlib/dhp/oa/graph/stats/oozie_app/monitor.sh index 37809652d..a4e7eec57 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 @@ -17,12 +17,4 @@ hdfs dfs -copyToLocal $4 echo "Creating monitor database" cat step20-createMonitorDB.sql | sed s/SOURCE/$1/g | sed s/TARGET/$2/g1 > foo hive -f foo -echo "Impala shell finished" - -echo "Updating shadow monitor database" -hive -e "create database if not exists ${SHADOW}" -hive --database ${SHADOW} -e "show tables" | grep -v WARN | sed "s/^/drop view if exists ${SHADOW}./" | sed "s/$/;/" > foo -hive -f foo -hive --database ${TARGET} -e "show tables" | grep -v WARN | sed "s/\(.*\)/create view ${SHADOW}.\1 as select * from ${TARGET}.\1;/" > foo -hive -f foo -echo "Shadow db ready!" \ No newline at end of file +echo "Impala shell finished" \ 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/observatory-post.sh b/dhp-workflows/dhp-stats-update/src/main/resources/eu/dnetlib/dhp/oa/graph/stats/oozie_app/observatory-post.sh index d074e6a55..12315c9e8 100644 --- a/dhp-workflows/dhp-stats-update/src/main/resources/eu/dnetlib/dhp/oa/graph/stats/oozie_app/observatory-post.sh +++ b/dhp-workflows/dhp-stats-update/src/main/resources/eu/dnetlib/dhp/oa/graph/stats/oozie_app/observatory-post.sh @@ -12,12 +12,4 @@ export SHADOW=$3 hive --database ${TARGET} -e "show tables" | grep -v WARN | sed "s/\(.*\)/analyze table ${TARGET}.\1 compute statistics;/" > foo hive -f foo -echo "Impala shell finished" - -echo "Updating shadow observatory database" -hive -e "create database if not exists ${SHADOW}" -hive --database ${SHADOW} -e "show tables" | grep -v WARN | sed "s/^/drop view if exists ${SHADOW}./" | sed "s/$/;/" > foo -hive -f foo -hive -d ${TARGET} -e "show tables" | grep -v WARN | sed "s/\(.*\)/create view ${SHADOW}.\1 as select * from ${TARGET}.\1;/" > foo -hive -f foo -echo "Shadow db ready!" \ No newline at end of file +echo "Impala shell finished" \ 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/step8.sql b/dhp-workflows/dhp-stats-update/src/main/resources/eu/dnetlib/dhp/oa/graph/stats/oozie_app/scripts/step8.sql index 6753d8190..33e1e3527 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 @@ -48,12 +48,10 @@ WHERE d1.datainfo.deletedbyinference = 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'); +CREATE TABLE ${stats_db_name}.dual ( dummy CHAR(1)); + +INSERT INTO ${stats_db_name}.dual VALUES ('X'); + INSERT INTO ${stats_db_name}.datasource_tmp (`id`, `name`, `type`, `dateofvalidation`, `yearofvalidation`, `harvested`, `piwik_id`, `latitude`, `longitude`, `websiteurl`, `compatibility`, `issn_printed`, `issn_online`) SELECT 'other', @@ -73,12 +71,8 @@ FROM ${stats_db_name}.dual WHERE 'other' not in (SELECT id FROM ${stats_db_name}.datasource_tmp WHERE name = 'Unknown Repository'); 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'; +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'; CREATE TABLE ${stats_db_name}.datasource_languages STORED AS PARQUET AS SELECT substr(d.id, 4) AS id, langs.languages AS language @@ -91,8 +85,7 @@ FROM ${openaire_db_name}.datasource d LATERAL VIEW explode(d.originalid) oids AS 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 -WHERE r.reltype = 'datasourceOrganization' - and r.datainfo.deletedbyinference = false; +WHERE r.reltype = 'datasourceOrganization' and r.datainfo.deletedbyinference = false; -- datasource sources: -- where the datasource info have been collected from. @@ -101,6 +94,6 @@ 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 where d.datainfo.deletedbyinference = false; -CREATE OR REPLACE VIEW ${stats_db_name}.datasource_results STORED AS PARQUET AS +CREATE OR REPLACE VIEW ${stats_db_name}.datasource_results AS SELECT datasource AS id, id AS result FROM ${stats_db_name}.result_datasources; \ 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 08d33f4e8..7ac3cefbb 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 @@ -365,11 +365,43 @@ ${observatory_db_shadow_name} observatory-post.sh - + - + + + ${jobTracker} + ${nameNode} + copyDataToImpalaCluster.sh + ${external_stats_db_name} + ${stats_db_name} + ${monitor_db_name} + ${observatory_db_name} + copyDataToImpalaCluster.sh + + + + + + + + ${jobTracker} + ${nameNode} + finalizeImpalaCluster.sh + ${stats_db_name} + ${stats_db_shadow_name} + ${monitor_db_name} + ${monitor_db_shadow_name} + ${observatory_db_name} + ${observatory_db_shadow_name} + finalizeImpalaCluster.sh + + + + + + ${jobTracker} ${nameNode} From ddd34087c25395f135ef0c075264095c62691a67 Mon Sep 17 00:00:00 2001 From: Antonis Lempesis Date: Mon, 13 Dec 2021 23:05:00 +0200 Subject: [PATCH 168/535] removed 'stored as parquet' from views.. --- .../oozie_app/copyDataToImpalaCluster.sh | 57 +++++++++++++++++++ .../stats/oozie_app/finalizeImpalaCluster.sh | 27 +++++++++ .../graph/stats/oozie_app/scripts/step11.sql | 7 +-- .../graph/stats/oozie_app/scripts/step14.sql | 2 +- .../graph/stats/oozie_app/scripts/step15.sql | 2 +- 5 files changed, 88 insertions(+), 7 deletions(-) create mode 100644 dhp-workflows/dhp-stats-update/src/main/resources/eu/dnetlib/dhp/oa/graph/stats/oozie_app/copyDataToImpalaCluster.sh create mode 100644 dhp-workflows/dhp-stats-update/src/main/resources/eu/dnetlib/dhp/oa/graph/stats/oozie_app/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 new file mode 100644 index 000000000..9846eb66a --- /dev/null +++ b/dhp-workflows/dhp-stats-update/src/main/resources/eu/dnetlib/dhp/oa/graph/stats/oozie_app/copyDataToImpalaCluster.sh @@ -0,0 +1,57 @@ +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 copydb() { + db=$1 + + # 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-mn2.openaire.eu:8020/tmp + + # change ownership to impala + hdfs dfs -conf /etc/impala_cluster/hdfs-site.xml -chmod -R 777 /tmp/${db}.db + + # create the databases + impala-shell -i impala-cluster-dn1.openaire.eu -q "drop database if exists ${db} cascade"; + impala-shell -i impala-cluster-dn1.openaire.eu -q "create database ${db}"; + + echo "creating schema for ${db}" + 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/^"//' | impala-shell -i impala-cluster-dn1.openaire.eu -c -f - + + # run the same command twice because we may have failures in the first run (due to views pointing to the same db) + 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/^"//' | impala-shell -i impala-cluster-dn1.openaire.eu -c -f - + + # 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/${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/${db}.db +} + +STATS_DB=$1 +MONITOR_DB=$2 +OBSERVATORY_DB=$3 +EXT_DB=$4 + +copydb $EXT_DB +copydb $STATS_DB +copydb $MONITOR_DB +copydb $OBSERVATORY_DB + 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 new file mode 100644 index 000000000..31107c7ed --- /dev/null +++ b/dhp-workflows/dhp-stats-update/src/main/resources/eu/dnetlib/dhp/oa/graph/stats/oozie_app/finalizeImpalaCluster.sh @@ -0,0 +1,27 @@ +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 + + 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" | sed "s/\(.*\)/create view ${SHADOW}.\1 as select * from ${SOURCE}.\1;/" | impala-shell -i impala-cluster-dn1.openaire.eu -f - +} + +STATS_DB=$1 +STATS_DB_SHADOW=$2 +MONITOR_DB=$3 +MONITOR_DB_SHADOW=$4 +OBSERVATORY_DB=$5 +OBSERVATORY_DB_SHADOW=$6 + +createShadowDB $STATS_DB $STATS_DB_SHADOW +createShadowDB $MONITOR_DB $MONITOR_DB_SHADOW +createShadowDB $OBSERVATORY_DB $OBSERVATORY_DB_SHADOW 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 280c1bb51..d699b68c3 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 @@ -102,7 +102,7 @@ WHERE otherresearchproduct_tmp.id IN (SELECT distinct r.id AND pr.id = p.id AND to_date(r.date) - to_date(p.enddate) > 0); -CREATE OR REPLACE VIEW ${stats_db_name}.project_results_publication STORED AS PARQUET AS +CREATE OR REPLACE VIEW ${stats_db_name}.project_results_publication AS SELECT result_projects.id AS result, result_projects.project AS project_results, result.date as resultdate, @@ -113,7 +113,4 @@ FROM ${stats_db_name}.result_projects, ${stats_db_name}.project WHERE result_projects.id = result.id AND result.type = 'publication' - AND project.id = result_projects.project; - --- ANALYZE TABLE ${stats_db_name}.project COMPUTE STATISTICS; --- ANALYZE TABLE ${stats_db_name}.project COMPUTE STATISTICS FOR COLUMNS; \ No newline at end of file + AND project.id = result_projects.project; \ 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/step14.sql b/dhp-workflows/dhp-stats-update/src/main/resources/eu/dnetlib/dhp/oa/graph/stats/oozie_app/scripts/step14.sql index f38ad886e..e9c2e014c 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 @@ -25,7 +25,7 @@ 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 where licenses.value is not null and licenses.value != '' and p.datainfo.deletedbyinference=false; -CREATE VIEW IF NOT EXISTS ${stats_db_name}.result_licenses STORED AS PARQUET AS +CREATE VIEW IF NOT EXISTS ${stats_db_name}.result_licenses AS SELECT * FROM ${stats_db_name}.publication_licenses UNION ALL SELECT * FROM ${stats_db_name}.dataset_licenses 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 f293c1fd3..58e7c7c11 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 @@ -26,7 +26,7 @@ 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 where r.datainfo.deletedbyinference=false; -CREATE VIEW IF NOT EXISTS ${stats_db_name}.result_refereed STORED AS PARQUET as +CREATE VIEW IF NOT EXISTS ${stats_db_name}.result_refereed as select * from ${stats_db_name}.publication_refereed union all select * from ${stats_db_name}.dataset_refereed From a224bf70a4e312f53ac9fcd570d974c0587c4924 Mon Sep 17 00:00:00 2001 From: miconis Date: Mon, 27 Dec 2021 17:35:02 +0100 Subject: [PATCH 169/535] 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 170/535] [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 171/535] [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 172/535] 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 173/535] [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 174/535] [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 175/535] 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 176/535] [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 177/535] [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 178/535] 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 179/535] 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 180/535] [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 181/535] [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 182/535] 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 183/535] [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 184/535] [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 185/535] 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 186/535] 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 0353f93d54c948df36f01b4da4498fd2264375eb Mon Sep 17 00:00:00 2001 From: antleb Date: Fri, 29 Apr 2022 12:49:27 +0300 Subject: [PATCH 187/535] added new hive opts --- .../dnetlib/dhp/oa/graph/stats/oozie_app/indicators.sh | 9 +++++---- .../dnetlib/dhp/oa/graph/stats/oozie_app/workflow.xml | 10 +++++++--- 2 files changed, 12 insertions(+), 7 deletions(-) diff --git a/dhp-workflows/dhp-stats-update/src/main/resources/eu/dnetlib/dhp/oa/graph/stats/oozie_app/indicators.sh b/dhp-workflows/dhp-stats-update/src/main/resources/eu/dnetlib/dhp/oa/graph/stats/oozie_app/indicators.sh index 72d6d8048..fef569b59 100644 --- a/dhp-workflows/dhp-stats-update/src/main/resources/eu/dnetlib/dhp/oa/graph/stats/oozie_app/indicators.sh +++ b/dhp-workflows/dhp-stats-update/src/main/resources/eu/dnetlib/dhp/oa/graph/stats/oozie_app/indicators.sh @@ -8,12 +8,13 @@ fi export TARGET=$1 export SCRIPT_PATH=$2 +export HIVE_OPTS="-hiveconf mapred.job.queue.name=analytics -hiveconf hive.spark.client.connect.timeout=120000ms -hiveconf hive.spark.client.server.connect.timeout=300000ms" echo "Getting file from " $SCRIPT_PATH hdfs dfs -copyToLocal $SCRIPT_PATH echo "Creating indicators" -hive --database ${TARGET} -e "show tables" | grep -v WARN | sed "s/^\(.*\)/analyze table ${TARGET}.\1 compute statistics;/" > foo -hive -f foo -hive --database ${TARGET} -f step16-createIndicatorsTables.sql -echo "Indicators created" \ No newline at end of file +hive $HIVE_OPTS --database ${TARGET} -e "show tables" | grep -v WARN | sed "s/^\(.*\)/analyze table ${TARGET}.\1 compute statistics;/" > foo +hive $HIVE_OPTS -f foo +hive $HIVE_OPTS --database ${TARGET} -f step16-createIndicatorsTables.sql +echo "Indicators created" 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 7ac3cefbb..5661e1e73 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 @@ -67,10 +67,14 @@ hive.txn.timeout ${hive_timeout} + + mapred.job.queue.name + analytics + - + Action failed, error message[${wf:errorMessage(wf:lastErrorNode())}] @@ -276,7 +280,7 @@ ${wf:appPath()}/scripts/step16-createIndicatorsTables.sql indicators.sh - + @@ -414,4 +418,4 @@ - \ No newline at end of file + From 65cc736e2fb2848bef81f47715370b0f6a9064a4 Mon Sep 17 00:00:00 2001 From: "miriam.baglioni" Date: Wed, 20 Jul 2022 17:05:56 +0200 Subject: [PATCH 188/535] [Clean Country] first implementation to remove country NL from results collected from NARCIS when doi starts with mendely prefix --- .../oa/graph/clean/CleanCountrySparkJob.java | 128 +++++++++++++++++ .../graph/input_clean_country_parameters.json | 43 ++++++ .../dhp/oa/graph/clean/CleanCountryTest.java | 135 ++++++++++++++++++ .../clean/publication_clean_country.json | 7 + 4 files changed, 313 insertions(+) create mode 100644 dhp-workflows/dhp-graph-mapper/src/main/java/eu/dnetlib/dhp/oa/graph/clean/CleanCountrySparkJob.java create mode 100644 dhp-workflows/dhp-graph-mapper/src/main/resources/eu/dnetlib/dhp/oa/graph/input_clean_country_parameters.json create mode 100644 dhp-workflows/dhp-graph-mapper/src/test/java/eu/dnetlib/dhp/oa/graph/clean/CleanCountryTest.java create mode 100644 dhp-workflows/dhp-graph-mapper/src/test/resources/eu/dnetlib/dhp/oa/graph/clean/publication_clean_country.json diff --git a/dhp-workflows/dhp-graph-mapper/src/main/java/eu/dnetlib/dhp/oa/graph/clean/CleanCountrySparkJob.java b/dhp-workflows/dhp-graph-mapper/src/main/java/eu/dnetlib/dhp/oa/graph/clean/CleanCountrySparkJob.java new file mode 100644 index 000000000..ec82d385c --- /dev/null +++ b/dhp-workflows/dhp-graph-mapper/src/main/java/eu/dnetlib/dhp/oa/graph/clean/CleanCountrySparkJob.java @@ -0,0 +1,128 @@ +package eu.dnetlib.dhp.oa.graph.clean; + +/** + * @author miriam.baglioni + * @Date 20/07/22 + */ + +import com.fasterxml.jackson.databind.ObjectMapper; +import eu.dnetlib.dhp.application.ArgumentApplicationParser; +import eu.dnetlib.dhp.schema.oaf.Result; +import eu.dnetlib.dhp.schema.oaf.StructuredProperty; +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; +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 java.io.Serializable; +import java.util.Optional; +import java.util.stream.Collectors; + +import static eu.dnetlib.dhp.common.SparkSessionSupport.runWithSparkSession; + + +public class CleanCountrySparkJob implements Serializable { + private static final Logger log = LoggerFactory.getLogger(CleanCountrySparkJob.class); + + private static final ObjectMapper OBJECT_MAPPER = new ObjectMapper(); + + public static void main(String[] args) throws Exception { + + String jsonConfiguration = IOUtils + .toString( + CleanContextSparkJob.class + .getResourceAsStream( + "/eu/dnetlib/dhp/oa/graph/input_clean_country_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 workingPath = parser.get("workingPath"); + log.info("workingPath: {}", workingPath); + + String country = parser.get("country"); + log.info("country: {}", country); + + String verifyParam = parser.get("verifyParam"); + log.info("verifyParam: {}", verifyParam); + + String collectedfrom = parser.get("collectedfrom"); + log.info("collectedfrom: {}", collectedfrom); + + String graphTableClassName = parser.get("graphTableClassName"); + log.info("graphTableClassName: {}", graphTableClassName); + + Class entityClazz = (Class) Class.forName(graphTableClassName); + + SparkConf conf = new SparkConf(); + runWithSparkSession( + conf, + isSparkSessionManaged, + spark -> { + + cleanCountry(spark, country, verifyParam, inputPath, entityClazz, workingPath,collectedfrom); + }); + } + + private static void cleanCountry(SparkSession spark, String country, String verifyParam, + String inputPath, Class entityClazz, String workingPath, String collectedfrom) { + Dataset res = spark + .read() + .textFile(inputPath) + .map( + (MapFunction) value -> OBJECT_MAPPER.readValue(value, entityClazz), + Encoders.bean(entityClazz)) + ; + + res.map((MapFunction) r -> { + for(StructuredProperty p: r.getPid()){ + if (p.getQualifier().getClassid().equalsIgnoreCase("doi") && + p.getValue().startsWith(verifyParam) && r.getCollectedfrom().stream().anyMatch(cf -> cf.getValue().equalsIgnoreCase(collectedfrom))) { + + r + .setCountry( + r + .getCountry() + .stream() + .filter( + c -> !c.getClassid() + .equalsIgnoreCase(country)) + .collect(Collectors.toList())); + } + } + + return r; + }, Encoders.bean(entityClazz)) + .write() + .mode(SaveMode.Overwrite) + .option("compression", "gzip") + .json(workingPath); + + spark + .read() + .textFile(workingPath) + .map( + (MapFunction) value -> OBJECT_MAPPER.readValue(value, entityClazz), + Encoders.bean(entityClazz)) + .write() + .mode(SaveMode.Overwrite) + .option("compression", "gzip") + .json(inputPath); + } + +} + diff --git a/dhp-workflows/dhp-graph-mapper/src/main/resources/eu/dnetlib/dhp/oa/graph/input_clean_country_parameters.json b/dhp-workflows/dhp-graph-mapper/src/main/resources/eu/dnetlib/dhp/oa/graph/input_clean_country_parameters.json new file mode 100644 index 000000000..e46f7b6da --- /dev/null +++ b/dhp-workflows/dhp-graph-mapper/src/main/resources/eu/dnetlib/dhp/oa/graph/input_clean_country_parameters.json @@ -0,0 +1,43 @@ +[ + { + "paramName": "issm", + "paramLongName": "isSparkSessionManaged", + "paramDescription": "when true will stop SparkSession after job execution", + "paramRequired": false + }, + { + "paramName": "in", + "paramLongName": "inputPath", + "paramDescription": "the path to the graph data dump to read", + "paramRequired": true + }, + { + "paramName": "wp", + "paramLongName": "workingPath", + "paramDescription": "the path to store the output graph", + "paramRequired": true + }, + { + "paramName": "c", + "paramLongName": "country", + "paramDescription": "the id of the context to be removed", + "paramRequired": true + }, + { + "paramName": "class", + "paramLongName": "graphTableClassName", + "paramDescription": "class name moelling the graph table", + "paramRequired": true + },{ + "paramName": "vf", + "paramLongName": "verifyParam", + "paramDescription": "the parameter to be verified to remove the country", + "paramRequired": true +}, + { + "paramName": "cf", + "paramLongName": "collectedfrom", + "paramDescription": "the collectedfrom value for which we should apply the cleaning", + "paramRequired": true + } +] diff --git a/dhp-workflows/dhp-graph-mapper/src/test/java/eu/dnetlib/dhp/oa/graph/clean/CleanCountryTest.java b/dhp-workflows/dhp-graph-mapper/src/test/java/eu/dnetlib/dhp/oa/graph/clean/CleanCountryTest.java new file mode 100644 index 000000000..f9dad9fcf --- /dev/null +++ b/dhp-workflows/dhp-graph-mapper/src/test/java/eu/dnetlib/dhp/oa/graph/clean/CleanCountryTest.java @@ -0,0 +1,135 @@ +package eu.dnetlib.dhp.oa.graph.clean; +/** + * @author miriam.baglioni + * @Date 20/07/22 + */ + +import com.fasterxml.jackson.databind.ObjectMapper; +import eu.dnetlib.dhp.oa.graph.dump.DumpJobTest; +import eu.dnetlib.dhp.schema.oaf.Publication; +import eu.dnetlib.dhp.schema.oaf.StructuredProperty; +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.api.java.function.MapFunction; +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 java.io.IOException; +import java.nio.file.Files; +import java.nio.file.Path; +import java.util.List; + + +public class CleanCountryTest { + private static final ObjectMapper OBJECT_MAPPER = new ObjectMapper(); + + private static SparkSession spark; + + private static Path workingDir; + + private static final Logger log = LoggerFactory.getLogger(CleanContextTest.class); + + @BeforeAll + public static void beforeAll() throws IOException { + workingDir = Files.createTempDirectory(DumpJobTest.class.getSimpleName()); + log.info("using work dir {}", workingDir); + + SparkConf conf = new SparkConf(); + conf.setAppName(DumpJobTest.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(DumpJobTest.class.getSimpleName()) + .config(conf) + .getOrCreate(); + } + + @AfterAll + public static void afterAll() throws IOException { + FileUtils.deleteDirectory(workingDir.toFile()); + spark.stop(); + } + + @Test + public void testResultClean() throws Exception { + final String sourcePath = getClass() + .getResource("/eu/dnetlib/dhp/oa/graph/clean/publication_clean_country.json") + .getPath(); + final String prefix = "gcube "; + + spark + .read() + .textFile(sourcePath) + .map( + (MapFunction) r -> OBJECT_MAPPER.readValue(r, Publication.class), + Encoders.bean(Publication.class)) + .write() + .json(workingDir.toString() + "/publication"); + + CleanCountrySparkJob.main(new String[] { + "--isSparkSessionManaged", Boolean.FALSE.toString(), + "--inputPath", workingDir.toString() + "/publication", + "-graphTableClassName", Publication.class.getCanonicalName(), + "-workingPath", workingDir.toString() + "/working", + "-country", "NL", + "-verifyParam", "10.17632", + "-collectedfrom", "NARCIS" + }); + + final JavaSparkContext sc = JavaSparkContext.fromSparkContext(spark.sparkContext()); + JavaRDD tmp = sc + .textFile(workingDir.toString() + "/publication") + .map(item -> OBJECT_MAPPER.readValue(item, Publication.class)); + + Assertions.assertEquals(7, tmp.count()); + + // original result with NL country and doi starting with Mendely prefix, but not collectedfrom NARCIS + Assertions + .assertEquals( + 1, + tmp + .filter(p -> p.getId().equals("50|DansKnawCris::0224aae28af558f21768dbc6439c7a95")) + .collect() + .get(0) + .getCountry() + .size()); + + // original result with NL country and pid not starting with Mendely prefix + Assertions + .assertEquals( + 1, + tmp + .filter(p -> p.getId().equals("50|DansKnawCris::20c414a3b1c742d5dd3851f1b67df2d9")) + .collect() + .get(0) + .getCountry() + .size()); + + // original result with NL country and doi starting with Mendely prefix and collectedfrom NARCIS + Assertions + .assertEquals( + 0, + tmp + .filter(p -> p.getId().equals("50|DansKnawCris::3c81248c335f0aa07e06817ece6fa6af")) + .collect() + .get(0) + .getCountry() + .size()); + } + +} diff --git a/dhp-workflows/dhp-graph-mapper/src/test/resources/eu/dnetlib/dhp/oa/graph/clean/publication_clean_country.json b/dhp-workflows/dhp-graph-mapper/src/test/resources/eu/dnetlib/dhp/oa/graph/clean/publication_clean_country.json new file mode 100644 index 000000000..ebceecff9 --- /dev/null +++ b/dhp-workflows/dhp-graph-mapper/src/test/resources/eu/dnetlib/dhp/oa/graph/clean/publication_clean_country.json @@ -0,0 +1,7 @@ +{"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":[{"classid": "NL", "classname": "DE", "schemeid": "dnet:countries", "schemename": "dnet:countries"}],"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":[],"id":"50|DansKnawCris::0224aae28af558f21768dbc6439c7a95","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":"doi","classname":"urn","schemeid":"dnet:pid_types","schemename":"dnet:pid_types"},"value":"10.17632/daMendeley"},{"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} +{"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":[{"classid": "NL", "classname": "DE", "schemeid": "dnet:countries", "schemename": "dnet:countries"}],"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":null,"dateofcollection":"","dateoftransformation":"2020-05-25T17:03:57.761Z","description":[],"embargoenddate":null,"externalReference":[],"extraInfo":[],"format":[],"fulltext":[],"id":"50|DansKnawCris::20c414a3b1c742d5dd3851f1b67df2d9","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":null,"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":"1396"},"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":"UNKNOWN","classname":"UNKNOWN","schemeid":"dnet:languages","schemename":"dnet:languages"},"lastupdatetimestamp":1591283087415,"oaiprovenance":{"originDescription":{"altered":true,"baseURL":"http%3A%2F%2Fservices.nod.dans.knaw.nl%2Foa-cerif","datestamp":"2019-12-01T07:58:39Z","harvestDate":"2020-05-25T11:34:38.707Z","identifier":"oai:services.nod.dans.knaw.nl:Publications/rce-kb:document:800020324","metadataNamespace":""}},"originalId":["DansKnawCris::20c414a3b1c742d5dd3851f1b67df2d9"],"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":"urn","schemeid":"dnet:pid_types","schemename":"dnet:pid_types"},"value":"http://cultureelerfgoed.adlibsoft.com/dispatcher.aspx?action=search&database=ChoiceFullCatalogue&search=priref=800020324"},{"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=ChoiceFullCatalogue&search=priref=800020324"}],"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":"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":"None"}],"journal":null} +{"author":[{"affiliation":[],"fullname":"van Someren, Christian","name":"Christian","pid":[],"rank":1,"surname":"van Someren"}],"bestaccessright":{"classid":"RESTRICTED","classname":"Restricted","schemeid":"dnet:access_modes","schemename":"dnet:access_modes"},"collectedfrom":[{"dataInfo":null,"key":"10|openaire____::c6df70599aa984f16ee52b4b86d2e89f","value":"NARCIS"}],"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":[{"classid": "NL", "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":"2016-11-01"},"dateofcollection":"","dateoftransformation":"2020-05-25T17:55:32.27Z","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":"Over het Energieakkoord. In het energieakkoord voor duurzame groei is afgesproken dat in 2020 14 procent van de opwek hernieuwbaar moet zijn en in 2023 16 procent. De doelstelling is een uitdagende opgave waarbij de eerste vraag is: \"Hoeveel hernieuwbare energie wordt er op dit moment opgewekt in Nederland?\" Deze website geeft antwoord op de vraag voor de actueel opgewekte windenergie, zonne-energie en biogas."}],"embargoenddate":null,"externalReference":[],"extraInfo":[],"format":[],"fulltext":[],"id":"50|DansKnawCris::3c81248c335f0aa07e06817ece6fa6af","instance":[{"accessright":{"classid":"RESTRICTED","classname":"Restricted","schemeid":"dnet:access_modes","schemename":"dnet:access_modes"},"collectedfrom":{"dataInfo":null,"key":"10|openaire____::c6df70599aa984f16ee52b4b86d2e89f","value":"NARCIS"},"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-11-01"},"distributionlocation":"","hostedby":{"dataInfo":null,"key":"10|openaire____::c6df70599aa984f16ee52b4b86d2e89f","value":"DANS (Data Archiving and Networked Services)"},"instancetype":{"classid":"0038","classname":"Other literature type","schemeid":"dnet:publication_resource","schemename":"dnet:publication_resource"},"license":null,"processingchargeamount":null,"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":["http://energieopwek.nl/"]}],"language":{"classid":"nl","classname":"nl","schemeid":"dnet:languages","schemename":"dnet:languages"},"lastupdatetimestamp":1591282663379,"oaiprovenance":{"originDescription":{"altered":true,"baseURL":"http%3A%2F%2Fservices.nod.dans.knaw.nl%2Foa-cerif","datestamp":"2020-05-08T17:46:55Z","harvestDate":"2020-05-25T15:30:24.079Z","identifier":"oai:services.nod.dans.knaw.nl:Publications/hbo:oai:hbokennisbank.nl:hanzepure:oai:research.hanze.nl:publications/813a5dfa-4fd0-44c4-8cbf-310324dc724d","metadataNamespace":""}},"originalId":["DansKnawCris::3c81248c335f0aa07e06817ece6fa6af"],"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":"urn","schemeid":"dnet:pid_types","schemename":"dnet:pid_types"},"value":"10.17632/daMendeley"},{"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":"urn:nbn:nl:hs:18-813a5dfa-4fd0-44c4-8cbf-310324dc724d"}],"publisher":null,"relevantdate":[],"resourcetype":{"classid":"0038","classname":"0038","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":"energieproductie"},{"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":"Management"},{"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":"Monitoring"},{"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":"Policy and Law"},{"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":"Energie interventies en gedrag"},{"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":"publieke ondersteuning en communicatie"},{"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":"Professional practice & society"}],"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":"subtitle","classname":"subtitle","schemeid":"dnet:dataCite_title","schemename":"dnet:dataCite_title"},"value":"GCUBE opwek"}],"journal":null} +{"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::1"}],"contributor":[],"country":[],"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":null,"dateofcollection":"","dateoftransformation":"2020-05-25T17:55:40.568Z","description":[],"embargoenddate":null,"externalReference":[],"extraInfo":[],"format":[],"fulltext":[],"id":"50|DansKnawCris::3c9f068ddc930360bec6925488a9a97f","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":null,"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":null,"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":"UNKNOWN","classname":"UNKNOWN","schemeid":"dnet:languages","schemename":"dnet:languages"},"lastupdatetimestamp":1591282670417,"oaiprovenance":{"originDescription":{"altered":true,"baseURL":"http%3A%2F%2Fservices.nod.dans.knaw.nl%2Foa-cerif","datestamp":"2019-12-01T08:41:34Z","harvestDate":"2020-05-25T11:40:05.974Z","identifier":"oai:services.nod.dans.knaw.nl:Publications/rce:document:550052278","metadataNamespace":""}},"originalId":["DansKnawCris::3c9f068ddc930360bec6925488a9a97f"],"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=550052278"},{"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=550052278"}],"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":"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":"None GCUBE"}],"journal":null} +{"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":"dh-ch"},{"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::1"}],"contributor":[],"country":[],"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":"2010-01-01"},"dateofcollection":"","dateoftransformation":"2020-05-25T18:11:57.737Z","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":"Met lit. opg"}],"embargoenddate":null,"externalReference":[],"extraInfo":[],"format":[],"fulltext":[],"id":"50|DansKnawCris::4669a378a73661417182c208e6fdab53","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":"2010-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":null,"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":1591282758835,"oaiprovenance":{"originDescription":{"altered":true,"baseURL":"http%3A%2F%2Fservices.nod.dans.knaw.nl%2Foa-cerif","datestamp":"2019-12-01T07:36:00Z","harvestDate":"2020-05-25T11:30:47.199Z","identifier":"oai:services.nod.dans.knaw.nl:Publications/rce-kb:document:800007467","metadataNamespace":""}},"originalId":["DansKnawCris::4669a378a73661417182c208e6fdab53"],"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=ChoiceFullCatalogue&search=priref=800007467"},{"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=ChoiceFullCatalogue&search=priref=800007467"}],"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":"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":"Vlaardingen"},{"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 RAAP-rapport, ISSN 0925-6229 2089"}],"journal":null} +{"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":"dh-ch"},{"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::1"}],"contributor":[],"country":[],"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":null,"dateofcollection":"","dateoftransformation":"2020-05-25T18:18:18.049Z","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":"Met literatuuropgave"}],"embargoenddate":null,"externalReference":[],"extraInfo":[],"format":[],"fulltext":[],"id":"50|DansKnawCris::4a9152e80f860eab99072e921d74a0ff","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":null,"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":null,"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":1591283010899,"oaiprovenance":{"originDescription":{"altered":true,"baseURL":"http%3A%2F%2Fservices.nod.dans.knaw.nl%2Foa-cerif","datestamp":"2019-12-01T07:48:12Z","harvestDate":"2020-05-25T11:32:46.363Z","identifier":"oai:services.nod.dans.knaw.nl:Publications/rce-kb:document:800014509","metadataNamespace":""}},"originalId":["DansKnawCris::4a9152e80f860eab99072e921d74a0ff"],"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=ChoiceFullCatalogue&search=priref=800014509"},{"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=ChoiceFullCatalogue&search=priref=800014509"}],"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":"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":"Bladel"},{"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":"Proefsleuvenonderzoek aan de Bredasebaan 8 te Bladel"},{"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 Archeodienst rapport, ISSN 1877-2900 565"}],"journal":null} +{"author":[{"affiliation":null,"fullname":"Schubart, A.","name":"A.","pid":[],"rank":1,"surname":"Schubart"}],"bestaccessright":{"classid":"OPEN","classname":"Open Access","schemeid":"dnet:access_modes","schemename":"dnet:access_modes"},"collectedfrom":[{"dataInfo":null,"key":"10|openaire____::081b82f96300b6a6e3d282bad31cb6e2","value":"Crossref"},{"dataInfo":null,"key":"10|openaire____::8ac8380272269217cb09a928c8caa993","value":"UnpayWall"},{"dataInfo":null,"key":"10|openaire____::5f532a3fc4f1ea403f37070f59a7a53a","value":"Microsoft Academic Graph"},{"dataInfo":null,"key":"10|opendoar____::358aee4cc897452c00244351e4d91f69","value":"ZENODO"}],"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":"dh-ch"}],"contributor":[],"country":[],"coverage":[],"dataInfo":{"deletedbyinference":false,"inferenceprovenance":"decisiontree-dedup-test","inferred":true,"invisible":false,"provenanceaction":{"classid":"sysimport:dedup","classname":"sysimport:dedup","schemeid":"dnet:provenanceActions","schemename":"dnet:provenanceActions"},"trust":"0.8"},"dateofacceptance":{"dataInfo":null,"value":"1866-01-01"},"dateofcollection":"2019-02-17T01:33:44Z","dateoftransformation":null,"description":[{"dataInfo":{"deletedbyinference":false,"inferenceprovenance":"","inferred":false,"invisible":false,"provenanceaction":{"classid":"sysimport:crosswalk:repository","classname":"sysimport:crosswalk:repository","schemeid":"dnet:provenanceActions","schemename":"dnet:provenanceActions"},"trust":"0.9"},"value":"n/a"}],"embargoenddate":null,"externalReference":[],"extraInfo":[],"format":[],"fulltext":[],"id":"50|dedup_wf_001::01e6a28565ca01376b7548e530c6f6e8","instance":[{"accessright":{"classid":"RESTRICTED","classname":"Restricted","schemeid":"dnet:access_modes","schemename":"dnet:access_modes"},"collectedfrom":{"dataInfo":null,"key":"10|openaire____::081b82f96300b6a6e3d282bad31cb6e2","value":"Crossref"},"dateofacceptance":{"dataInfo":null,"value":"1866-01-01"},"distributionlocation":null,"hostedby":{"dataInfo":null,"key":"10|issn___print::4a110be99bfeda7a5e85b5e4c7e95d87","value":"Philologus"},"instancetype":{"classid":"0001","classname":"Article","schemeid":"dnet:publication_resource","schemename":"dnet:publication_resource"},"license":null,"processingchargeamount":null,"processingchargecurrency":null,"refereed":null,"url":["http://www.degruyter.com/view/j/phil.1866.24.issue-1-4/phil.1866.24.14.561/phil.1866.24.14.561.xml","http://www.degruyter.com/view/j/phil.1866.24.issue-1-4/phil.1866.24.14.561/phil.1866.24.14.561.pdf","http://dx.doi.org/10.1524/phil.1866.24.14.561"]},{"accessright":{"classid":"OPEN","classname":"Open Access","schemeid":"dnet:access_modes","schemename":"dnet:access_modes"},"collectedfrom":{"dataInfo":null,"key":"10|openaire____::8ac8380272269217cb09a928c8caa993","value":"UnpayWall"},"dateofacceptance":null,"distributionlocation":null,"hostedby":{"dataInfo":null,"key":"10|issn___print::4a110be99bfeda7a5e85b5e4c7e95d87","value":"Philologus"},"instancetype":{"classid":"0001","classname":"Article","schemeid":"dnet:publication_resource","schemename":"dnet:publication_resource"},"license":{"dataInfo":null,"value":"cc0"},"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":"2578.35"},"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":["https://zenodo.org/record/1634826/files/article.pdf"]},{"accessright":null,"collectedfrom":{"dataInfo":null,"key":"10|openaire____::5f532a3fc4f1ea403f37070f59a7a53a","value":"Microsoft Academic Graph"},"dateofacceptance":null,"distributionlocation":null,"hostedby":{"dataInfo":null,"key":"10|issn___print::4a110be99bfeda7a5e85b5e4c7e95d87","value":"Philologus"},"instancetype":{"classid":"0001","classname":"Article","schemeid":"dnet:publication_resource","schemename":"dnet:publication_resource"},"license":null,"processingchargeamount":null,"processingchargecurrency":null,"refereed":null,"url":["http://www.degruyter.com/view/j/phil.1866.24.issue-1-4/phil.1866.24.14.561/phil.1866.24.14.561.xml","https://academic.microsoft.com/#/detail/2601803436"]},{"accessright":{"classid":"OPEN","classname":"Open Access","schemeid":"dnet:access_modes","schemename":"dnet:access_modes"},"collectedfrom":{"dataInfo":null,"key":"10|opendoar____::358aee4cc897452c00244351e4d91f69","value":"ZENODO"},"dateofacceptance":{"dataInfo":{"deletedbyinference":false,"inferenceprovenance":"","inferred":false,"invisible":false,"provenanceaction":{"classid":"sysimport:crosswalk","classname":"sysimport:crosswalk","schemeid":"dnet:provenanceActions","schemename":"dnet:provenanceActions"},"trust":"0.9"},"value":"1866-01-01"},"distributionlocation":"","hostedby":{"dataInfo":null,"key":"10|opendoar____::358aee4cc897452c00244351e4d91f69","value":"ZENODO"},"instancetype":{"classid":"0038","classname":"Other literature type","schemeid":"dnet:publication_resource","schemename":"dnet:publication_resource"},"license":null,"processingchargeamount":null,"processingchargecurrency":null,"refereed":null,"url":["https://zenodo.org/record/1634826"]}],"language":null,"lastupdatetimestamp":1591290751234,"oaiprovenance":null,"originalId":["10.1524/phil.1866.24.14.561","2601803436","od______2659::f9ba286bcf8429160b58072028052325"],"pid":[{"dataInfo":null,"qualifier":{"classid":"doi","classname":"doi","schemeid":"dnet:pid_types","schemename":"dnet:pid_types"},"value":"10.1524/phil.1866.24.14.561"}],"publisher":{"dataInfo":null,"value":"Walter de Gruyter GmbH"},"relevantdate":[{"dataInfo":null,"qualifier":{"classid":"created","classname":"created","schemeid":"dnet:dataCite_date","schemename":"dnet:dataCite_date"},"value":"2017-03-26T10:09:50Z"},{"dataInfo":null,"qualifier":{"classid":"published-print","classname":"published-print","schemeid":"dnet:dataCite_date","schemename":"dnet:dataCite_date"},"value":"1866-01-01"}],"resourcetype":{"classid":"Other","classname":"Other","schemeid":"dnet:dataCite_resource","schemename":"dnet:dataCite_resource"},"resulttype":{"classid":"publication","classname":"publication","schemeid":"dnet:result_typologies","schemename":"dnet:result_typologies"},"source":[{"dataInfo":null,"value":"Crossref"},{"dataInfo":null,"value":null}],"subject":[{"dataInfo":null,"qualifier":{"classid":"keywords","classname":"keywords","schemeid":"dnet:subject_classification_typologies","schemename":"dnet:subject_classification_typologies"},"value":"Theology"},{"dataInfo":null,"qualifier":{"classid":"keywords","classname":"keywords","schemeid":"dnet:subject_classification_typologies","schemename":"dnet:subject_classification_typologies"},"value":"History"},{"dataInfo":null,"qualifier":{"classid":"keywords","classname":"keywords","schemeid":"dnet:subject_classification_typologies","schemename":"dnet:subject_classification_typologies"},"value":"Art history"}],"title":[{"dataInfo":null,"qualifier":{"classid":"alternative title","classname":"alternative title","schemeid":"dnet:dataCite_title","schemename":"dnet:dataCite_title"},"value":"XIV. Die wörter άγαλμα, είχών, ξόανον, ανδρuις und verwandte, in ihren verschiedenen beziehungen. Nach Pausanias"},{"dataInfo":null,"qualifier":{"classid":"main title","classname":"main title","schemeid":"dnet:dataCite_title","schemename":"dnet:dataCite_title"},"value":"gcube xiv die worter άγαλμα eίχών ξόανον ανδρuις und verwandte in ihren verschiedenen beziehungen nach pausanias"}],"journal":{"conferencedate":null,"conferenceplace":null,"dataInfo":null,"edition":null,"ep":null,"iss":null,"issnLinking":null,"issnOnline":"2196-7008","issnPrinted":"0031-7985","name":"Philologus","sp":null,"vol":"24"}} \ No newline at end of file From a12d28c6444616ac914d79b43e5360c4e92d714b Mon Sep 17 00:00:00 2001 From: "miriam.baglioni" Date: Fri, 22 Jul 2022 16:23:12 +0200 Subject: [PATCH 189/535] [Clean Country] added logic not to remove country from result if it exist a hosting datasource with that country. Moreover the country will be removed only if added with propagation --- .../{ => country}/CleanCountrySparkJob.java | 40 ++++++-- .../country/GetDatasourceFromCountry.java | 99 +++++++++++++++++++ .../dhp/oa/graph/clean/CleanCountryTest.java | 3 +- 3 files changed, 130 insertions(+), 12 deletions(-) rename dhp-workflows/dhp-graph-mapper/src/main/java/eu/dnetlib/dhp/oa/graph/clean/{ => country}/CleanCountrySparkJob.java (75%) create mode 100644 dhp-workflows/dhp-graph-mapper/src/main/java/eu/dnetlib/dhp/oa/graph/clean/country/GetDatasourceFromCountry.java diff --git a/dhp-workflows/dhp-graph-mapper/src/main/java/eu/dnetlib/dhp/oa/graph/clean/CleanCountrySparkJob.java b/dhp-workflows/dhp-graph-mapper/src/main/java/eu/dnetlib/dhp/oa/graph/clean/country/CleanCountrySparkJob.java similarity index 75% rename from dhp-workflows/dhp-graph-mapper/src/main/java/eu/dnetlib/dhp/oa/graph/clean/CleanCountrySparkJob.java rename to dhp-workflows/dhp-graph-mapper/src/main/java/eu/dnetlib/dhp/oa/graph/clean/country/CleanCountrySparkJob.java index ec82d385c..1af1aafc0 100644 --- a/dhp-workflows/dhp-graph-mapper/src/main/java/eu/dnetlib/dhp/oa/graph/clean/CleanCountrySparkJob.java +++ b/dhp-workflows/dhp-graph-mapper/src/main/java/eu/dnetlib/dhp/oa/graph/clean/country/CleanCountrySparkJob.java @@ -1,4 +1,4 @@ -package eu.dnetlib.dhp.oa.graph.clean; +package eu.dnetlib.dhp.oa.graph.clean.country; /** * @author miriam.baglioni @@ -7,6 +7,7 @@ package eu.dnetlib.dhp.oa.graph.clean; import com.fasterxml.jackson.databind.ObjectMapper; import eu.dnetlib.dhp.application.ArgumentApplicationParser; +import eu.dnetlib.dhp.oa.graph.clean.CleanContextSparkJob; import eu.dnetlib.dhp.schema.oaf.Result; import eu.dnetlib.dhp.schema.oaf.StructuredProperty; import org.apache.commons.io.IOUtils; @@ -21,6 +22,7 @@ import org.slf4j.Logger; import org.slf4j.LoggerFactory; import java.io.Serializable; +import java.util.List; import java.util.Optional; import java.util.stream.Collectors; @@ -54,10 +56,13 @@ public class CleanCountrySparkJob implements Serializable { String workingPath = parser.get("workingPath"); log.info("workingPath: {}", workingPath); + String datasourcePath = parser.get("datasourcePath"); + log.info("datasourcePath: {}", datasourcePath); + String country = parser.get("country"); log.info("country: {}", country); - String verifyParam = parser.get("verifyParam"); + String[] verifyParam = parser.get("verifyParam").split(";"); log.info("verifyParam: {}", verifyParam); String collectedfrom = parser.get("collectedfrom"); @@ -74,12 +79,17 @@ public class CleanCountrySparkJob implements Serializable { isSparkSessionManaged, spark -> { - cleanCountry(spark, country, verifyParam, inputPath, entityClazz, workingPath,collectedfrom); + cleanCountry(spark, country, verifyParam, inputPath, entityClazz, workingPath,collectedfrom, datasourcePath); }); } - private static void cleanCountry(SparkSession spark, String country, String verifyParam, - String inputPath, Class entityClazz, String workingPath, String collectedfrom) { + private static void cleanCountry(SparkSession spark, String country, String[] verifyParam, + String inputPath, Class entityClazz, String workingPath, String collectedfrom, String datasourcePath) { + + List hostedBy = spark.read().textFile(datasourcePath) + // .filter((FilterFunction) ds -> !ds.equals(collectedfrom)) + .collectAsList(); + Dataset res = spark .read() .textFile(inputPath) @@ -89,11 +99,14 @@ public class CleanCountrySparkJob implements Serializable { ; res.map((MapFunction) r -> { - for(StructuredProperty p: r.getPid()){ - if (p.getQualifier().getClassid().equalsIgnoreCase("doi") && - p.getValue().startsWith(verifyParam) && r.getCollectedfrom().stream().anyMatch(cf -> cf.getValue().equalsIgnoreCase(collectedfrom))) { + if(r.getInstance().stream().anyMatch(i -> hostedBy.contains(i.getHostedby().getKey())) || + !r.getCollectedfrom().stream().anyMatch(cf -> cf.getValue().equals(collectedfrom))){ + return r; + } - r + if(r.getPid().stream().anyMatch(p -> p.getQualifier().getClassid().equals("doi") && pidInParam(p.getValue(), verifyParam)) + && r.getCountry().stream().anyMatch(c -> c.getClassid().equals(country) && c.getDataInfo().getInferenceprovenance().equals("propagation"))) + { r .setCountry( r .getCountry() @@ -102,7 +115,7 @@ public class CleanCountrySparkJob implements Serializable { c -> !c.getClassid() .equalsIgnoreCase(country)) .collect(Collectors.toList())); - } + } return r; @@ -124,5 +137,12 @@ public class CleanCountrySparkJob implements Serializable { .json(inputPath); } + private static boolean pidInParam(String value, String[] verifyParam) { + for (String s : verifyParam ) + if (value.startsWith(s)) + return true; + return false; + } + } diff --git a/dhp-workflows/dhp-graph-mapper/src/main/java/eu/dnetlib/dhp/oa/graph/clean/country/GetDatasourceFromCountry.java b/dhp-workflows/dhp-graph-mapper/src/main/java/eu/dnetlib/dhp/oa/graph/clean/country/GetDatasourceFromCountry.java new file mode 100644 index 000000000..cdca96107 --- /dev/null +++ b/dhp-workflows/dhp-graph-mapper/src/main/java/eu/dnetlib/dhp/oa/graph/clean/country/GetDatasourceFromCountry.java @@ -0,0 +1,99 @@ +package eu.dnetlib.dhp.oa.graph.clean.country; + +import com.fasterxml.jackson.databind.ObjectMapper; +import eu.dnetlib.dhp.application.ArgumentApplicationParser; +import eu.dnetlib.dhp.oa.graph.clean.CleanContextSparkJob; +import eu.dnetlib.dhp.schema.common.ModelConstants; +import eu.dnetlib.dhp.schema.oaf.*; +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; +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 scala.Tuple2; + +import java.io.Serializable; +import java.util.List; +import java.util.Optional; + +import static eu.dnetlib.dhp.common.SparkSessionSupport.runWithSparkSession; + +/** + * @author miriam.baglioni + * @Date 22/07/22 + */ +public class GetDatasourceFromCountry implements Serializable { + private static final Logger log = LoggerFactory.getLogger(GetDatasourceFromCountry.class); + + private static final ObjectMapper OBJECT_MAPPER = new ObjectMapper(); + + public static void main(String[] args) throws Exception { + + String jsonConfiguration = IOUtils + .toString( + GetDatasourceFromCountry.class + .getResourceAsStream( + "/eu/dnetlib/dhp/oa/graph/input_clean_country_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 workingPath = parser.get("workingPath"); + log.info("workingPath: {}", workingPath); + + String country = parser.get("country"); + log.info("country: {}", country); + + SparkConf conf = new SparkConf(); + runWithSparkSession( + conf, + isSparkSessionManaged, + spark -> { + + getDatasourceFromCountry(spark, country, inputPath, workingPath); + }); + } + + private static void getDatasourceFromCountry(SparkSession spark, String country, String inputPath, String workingPath) { + + Dataset organization = spark.read().textFile(inputPath + "/organization") + .map( + (MapFunction) value -> OBJECT_MAPPER.readValue(value, Organization.class), + Encoders.bean(Organization.class)) + .filter( + (FilterFunction) o -> !o.getDataInfo().getDeletedbyinference() && + o.getCountry().getClassid().length() > 0 && + o.getCountry().getClassid().equals(country));; + + + // filtering of the relations taking the non deleted by inference and those with IsProvidedBy as relclass + Dataset relation = spark.read().textFile( inputPath + "/relation") + .map( + (MapFunction) value -> OBJECT_MAPPER.readValue(value, Relation.class), + Encoders.bean(Relation.class)) + .filter( + (FilterFunction) rel -> rel.getRelClass().equalsIgnoreCase(ModelConstants.IS_PROVIDED_BY) && + !rel.getDataInfo().getDeletedbyinference()); + + organization.joinWith(relation, organization.col("id").equalTo(relation.col("target")), "left") + .map((MapFunction, String>) t2 -> t2._2().getSource(), Encoders.STRING() ) + .write() + .mode(SaveMode.Overwrite) + .option("compression","gzip") + .json(workingPath); + + } +} diff --git a/dhp-workflows/dhp-graph-mapper/src/test/java/eu/dnetlib/dhp/oa/graph/clean/CleanCountryTest.java b/dhp-workflows/dhp-graph-mapper/src/test/java/eu/dnetlib/dhp/oa/graph/clean/CleanCountryTest.java index f9dad9fcf..a72093156 100644 --- a/dhp-workflows/dhp-graph-mapper/src/test/java/eu/dnetlib/dhp/oa/graph/clean/CleanCountryTest.java +++ b/dhp-workflows/dhp-graph-mapper/src/test/java/eu/dnetlib/dhp/oa/graph/clean/CleanCountryTest.java @@ -5,9 +5,9 @@ package eu.dnetlib.dhp.oa.graph.clean; */ import com.fasterxml.jackson.databind.ObjectMapper; +import eu.dnetlib.dhp.oa.graph.clean.country.CleanCountrySparkJob; import eu.dnetlib.dhp.oa.graph.dump.DumpJobTest; import eu.dnetlib.dhp.schema.oaf.Publication; -import eu.dnetlib.dhp.schema.oaf.StructuredProperty; import org.apache.commons.io.FileUtils; import org.apache.spark.SparkConf; import org.apache.spark.api.java.JavaRDD; @@ -25,7 +25,6 @@ import org.slf4j.LoggerFactory; import java.io.IOException; import java.nio.file.Files; import java.nio.file.Path; -import java.util.List; public class CleanCountryTest { From 5968ec018db3e9292d8be92552199483791d4ed5 Mon Sep 17 00:00:00 2001 From: "miriam.baglioni" Date: Fri, 22 Jul 2022 16:48:38 +0200 Subject: [PATCH 190/535] [Clean Country] modified workflow and added param file --- .../country/GetDatasourceFromCountry.java | 2 +- .../dhp/oa/graph/clean/oozie_app/workflow.xml | 175 +++++++++++++++++- .../graph/input_clean_country_parameters.json | 6 + .../input_datasource_country_parameters.json | 26 +++ 4 files changed, 204 insertions(+), 5 deletions(-) create mode 100644 dhp-workflows/dhp-graph-mapper/src/main/resources/eu/dnetlib/dhp/oa/graph/input_datasource_country_parameters.json diff --git a/dhp-workflows/dhp-graph-mapper/src/main/java/eu/dnetlib/dhp/oa/graph/clean/country/GetDatasourceFromCountry.java b/dhp-workflows/dhp-graph-mapper/src/main/java/eu/dnetlib/dhp/oa/graph/clean/country/GetDatasourceFromCountry.java index cdca96107..c255c445f 100644 --- a/dhp-workflows/dhp-graph-mapper/src/main/java/eu/dnetlib/dhp/oa/graph/clean/country/GetDatasourceFromCountry.java +++ b/dhp-workflows/dhp-graph-mapper/src/main/java/eu/dnetlib/dhp/oa/graph/clean/country/GetDatasourceFromCountry.java @@ -38,7 +38,7 @@ public class GetDatasourceFromCountry implements Serializable { .toString( GetDatasourceFromCountry.class .getResourceAsStream( - "/eu/dnetlib/dhp/oa/graph/input_clean_country_parameters.json")); + "/eu/dnetlib/dhp/oa/graph/input_datasource_country_parameters.json")); final ArgumentApplicationParser parser = new ArgumentApplicationParser(jsonConfiguration); parser.parseArgument(args); diff --git a/dhp-workflows/dhp-graph-mapper/src/main/resources/eu/dnetlib/dhp/oa/graph/clean/oozie_app/workflow.xml b/dhp-workflows/dhp-graph-mapper/src/main/resources/eu/dnetlib/dhp/oa/graph/clean/oozie_app/workflow.xml index 0cf6cdd05..2ba0a7ad7 100644 --- a/dhp-workflows/dhp-graph-mapper/src/main/resources/eu/dnetlib/dhp/oa/graph/clean/oozie_app/workflow.xml +++ b/dhp-workflows/dhp-graph-mapper/src/main/resources/eu/dnetlib/dhp/oa/graph/clean/oozie_app/workflow.xml @@ -14,8 +14,8 @@ the address of the lookUp service - shouldCleanContext - true if the context have to be cleaned + shouldClean + true if the operation of deletion of not needed values from the results have to be performed contextId @@ -30,6 +30,22 @@ It is the constrint to be verified. This time is hardcoded as gcube and it is searched for in the title. If title starts with gcube than the context sobigdata will be removed by the result if present + + verifyCountryParam + 10.17632;10.5061 + It is the constraints to be verified. This time is hardcoded as the starting doi from mendeley and dryad and it is searched for in + the pid value. If the pid value starts with one of the two prefixes, then the country may be removed + + + country + NL + It is the country to be removed from the set of countries if it is present with provenance propagation. The country will not be removed if in one of the isntances there is a datasource with country `country` + + + collectedfrom + NARCIS + the only datasource for which the country NL will be removed from the country list + sparkDriverMemory @@ -296,7 +312,7 @@ - ${wf:conf('shouldCleanContext') eq true} + ${wf:conf('shouldClean') eq true} @@ -416,7 +432,158 @@ - + + + + + + yarn + cluster + Clean publications context + eu.dnetlib.dhp.oa.graph.clean.country.GetDatasourceFromCountry + 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${graphOutputPath} + --workingPath${workingDir}/working/hostedby + --country${country} + + + + + + + + + + + + + + + yarn + cluster + Clean publications counmtry + eu.dnetlib.dhp.oa.graph.clean.country.CleanCountrySparkJob + 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${graphOutputPath}/publication + --graphTableClassNameeu.dnetlib.dhp.schema.oaf.Publication + --workingPath${workingDir}/working/publication + --country${country} + --verifyParam${verifyCountryParam} + --datasourcePath${workingDir}/working/hostedby + --collectedfrom${collectedfrom} + + + + + + + + yarn + cluster + Clean datasets Country + eu.dnetlib.dhp.oa.graph.clean.country.CleanCountrySparkJob + 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${graphOutputPath}/dataset + --graphTableClassNameeu.dnetlib.dhp.schema.oaf.Dataset + --workingPath${workingDir}/working/dataset + --country${country} + --verifyParam${verifyCountryParam} + --datasourcePath${workingDir}/working/hostedby + --collectedfrom${collectedfrom} + + + + + + + + yarn + cluster + Clean otherresearchproducts country + eu.dnetlib.dhp.oa.graph.clean.country.CleanCountrySparkJob + 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${graphOutputPath}/otherresearchproduct + --graphTableClassNameeu.dnetlib.dhp.schema.oaf.OtherResearchProduct + --workingPath${workingDir}/working/otherresearchproduct + --country${country} + --verifyParam${verifyCountryParam} + --datasourcePath${workingDir}/working/hostedby + --collectedfrom${collectedfrom} + + + + + + + + yarn + cluster + Clean softwares country + eu.dnetlib.dhp.oa.graph.clean.country.CleanCountrySparkJob + 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${graphOutputPath}/software + --graphTableClassNameeu.dnetlib.dhp.schema.oaf.Software + --workingPath${workingDir}/working/software + --country${country} + --verifyParam${verifyCountryParam} + --datasourcePath${workingDir}/working/hostedby + --collectedfrom${collectedfrom} + + + + + + \ No newline at end of file diff --git a/dhp-workflows/dhp-graph-mapper/src/main/resources/eu/dnetlib/dhp/oa/graph/input_clean_country_parameters.json b/dhp-workflows/dhp-graph-mapper/src/main/resources/eu/dnetlib/dhp/oa/graph/input_clean_country_parameters.json index e46f7b6da..318fb22f8 100644 --- a/dhp-workflows/dhp-graph-mapper/src/main/resources/eu/dnetlib/dhp/oa/graph/input_clean_country_parameters.json +++ b/dhp-workflows/dhp-graph-mapper/src/main/resources/eu/dnetlib/dhp/oa/graph/input_clean_country_parameters.json @@ -39,5 +39,11 @@ "paramLongName": "collectedfrom", "paramDescription": "the collectedfrom value for which we should apply the cleaning", "paramRequired": true + }, + { + "paramName": "hb", + "paramLongName": "hostedBy", + "paramDescription": "the set of datasources having the specified country in the graph searched for in the hostedby of the results", + "paramRequired": true } ] diff --git a/dhp-workflows/dhp-graph-mapper/src/main/resources/eu/dnetlib/dhp/oa/graph/input_datasource_country_parameters.json b/dhp-workflows/dhp-graph-mapper/src/main/resources/eu/dnetlib/dhp/oa/graph/input_datasource_country_parameters.json new file mode 100644 index 000000000..e0aa60328 --- /dev/null +++ b/dhp-workflows/dhp-graph-mapper/src/main/resources/eu/dnetlib/dhp/oa/graph/input_datasource_country_parameters.json @@ -0,0 +1,26 @@ +[ + { + "paramName": "issm", + "paramLongName": "isSparkSessionManaged", + "paramDescription": "when true will stop SparkSession after job execution", + "paramRequired": false + }, + { + "paramName": "in", + "paramLongName": "inputPath", + "paramDescription": "the path to the graph data dump to read", + "paramRequired": true + }, + { + "paramName": "wp", + "paramLongName": "workingPath", + "paramDescription": "the path to store the output graph", + "paramRequired": true + }, + { + "paramName": "c", + "paramLongName": "country", + "paramDescription": "the id of the context to be removed", + "paramRequired": true + } +] From 6fc9ef53f64ac137a51e4da11a0bd1f3ef36304b Mon Sep 17 00:00:00 2001 From: antleb Date: Fri, 29 Jul 2022 16:36:20 +0300 Subject: [PATCH 191/535] addded command line params to allow hive actions to run --- .../dhp/oa/graph/stats/oozie_app/contexts.sh | 19 ++++++++++++------- .../oa/graph/stats/oozie_app/indicators.sh | 3 ++- .../dhp/oa/graph/stats/oozie_app/workflow.xml | 4 ++-- 3 files changed, 16 insertions(+), 10 deletions(-) diff --git a/dhp-workflows/dhp-stats-update/src/main/resources/eu/dnetlib/dhp/oa/graph/stats/oozie_app/contexts.sh b/dhp-workflows/dhp-stats-update/src/main/resources/eu/dnetlib/dhp/oa/graph/stats/oozie_app/contexts.sh index fafb45cb0..0ce57e095 100644 --- a/dhp-workflows/dhp-stats-update/src/main/resources/eu/dnetlib/dhp/oa/graph/stats/oozie_app/contexts.sh +++ b/dhp-workflows/dhp-stats-update/src/main/resources/eu/dnetlib/dhp/oa/graph/stats/oozie_app/contexts.sh @@ -9,6 +9,8 @@ fi CONTEXT_API=$1 TARGET_DB=$2 +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=4831838208 -hiveconf spark.yarn.executor.memoryOverhead=450" + TMP=/tmp/stats-update-`tr -dc A-Za-z0-9 - + Action failed, error message[${wf:errorMessage(wf:lastErrorNode())}] @@ -280,7 +280,7 @@ ${wf:appPath()}/scripts/step16-createIndicatorsTables.sql indicators.sh - + From 62d2138806a9740085174e819b361ee19640366f Mon Sep 17 00:00:00 2001 From: "miriam.baglioni" Date: Mon, 8 Aug 2022 14:10:47 +0200 Subject: [PATCH 192/535] [Clean Context] changed a bit the logic. Added the check not to have result hosted by a datasource of type institutional repository from NL. Added also the check that the country should have been included in the result via propagation for it to be removed --- .../clean/country/CleanCountrySparkJob.java | 231 ++++++++++-------- .../country/GetDatasourceFromCountry.java | 139 ++++++----- .../dhp/oa/graph/clean/CleanCountryTest.java | 212 ++++++++-------- .../eu/dnetlib/dhp/oa/graph/clean/hostedBy | 0 .../clean/publication_clean_country.json | 3 +- 5 files changed, 315 insertions(+), 270 deletions(-) create mode 100644 dhp-workflows/dhp-graph-mapper/src/test/resources/eu/dnetlib/dhp/oa/graph/clean/hostedBy diff --git a/dhp-workflows/dhp-graph-mapper/src/main/java/eu/dnetlib/dhp/oa/graph/clean/country/CleanCountrySparkJob.java b/dhp-workflows/dhp-graph-mapper/src/main/java/eu/dnetlib/dhp/oa/graph/clean/country/CleanCountrySparkJob.java index 1af1aafc0..3ba84a317 100644 --- a/dhp-workflows/dhp-graph-mapper/src/main/java/eu/dnetlib/dhp/oa/graph/clean/country/CleanCountrySparkJob.java +++ b/dhp-workflows/dhp-graph-mapper/src/main/java/eu/dnetlib/dhp/oa/graph/clean/country/CleanCountrySparkJob.java @@ -1,15 +1,15 @@ + package eu.dnetlib.dhp.oa.graph.clean.country; -/** - * @author miriam.baglioni - * @Date 20/07/22 - */ +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 javax.swing.text.html.Option; -import com.fasterxml.jackson.databind.ObjectMapper; -import eu.dnetlib.dhp.application.ArgumentApplicationParser; -import eu.dnetlib.dhp.oa.graph.clean.CleanContextSparkJob; -import eu.dnetlib.dhp.schema.oaf.Result; -import eu.dnetlib.dhp.schema.oaf.StructuredProperty; import org.apache.commons.io.IOUtils; import org.apache.spark.SparkConf; import org.apache.spark.api.java.function.FilterFunction; @@ -21,128 +21,147 @@ import org.apache.spark.sql.SparkSession; import org.slf4j.Logger; import org.slf4j.LoggerFactory; -import java.io.Serializable; -import java.util.List; -import java.util.Optional; -import java.util.stream.Collectors; - -import static eu.dnetlib.dhp.common.SparkSessionSupport.runWithSparkSession; +/** + * @author miriam.baglioni + * @Date 20/07/22 + */ +import com.fasterxml.jackson.databind.ObjectMapper; +import eu.dnetlib.dhp.application.ArgumentApplicationParser; +import eu.dnetlib.dhp.oa.graph.clean.CleanContextSparkJob; +import eu.dnetlib.dhp.schema.oaf.Country; +import eu.dnetlib.dhp.schema.oaf.Result; +import eu.dnetlib.dhp.schema.oaf.StructuredProperty; public class CleanCountrySparkJob implements Serializable { - private static final Logger log = LoggerFactory.getLogger(CleanCountrySparkJob.class); + private static final Logger log = LoggerFactory.getLogger(CleanCountrySparkJob.class); - private static final ObjectMapper OBJECT_MAPPER = new ObjectMapper(); + private static final ObjectMapper OBJECT_MAPPER = new ObjectMapper(); - public static void main(String[] args) throws Exception { + public static void main(String[] args) throws Exception { - String jsonConfiguration = IOUtils - .toString( - CleanContextSparkJob.class - .getResourceAsStream( - "/eu/dnetlib/dhp/oa/graph/input_clean_country_parameters.json")); - final ArgumentApplicationParser parser = new ArgumentApplicationParser(jsonConfiguration); - parser.parseArgument(args); + String jsonConfiguration = IOUtils + .toString( + CleanContextSparkJob.class + .getResourceAsStream( + "/eu/dnetlib/dhp/oa/graph/input_clean_country_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); + 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 inputPath = parser.get("inputPath"); + log.info("inputPath: {}", inputPath); - String workingPath = parser.get("workingPath"); - log.info("workingPath: {}", workingPath); + String workingPath = parser.get("workingPath"); + log.info("workingPath: {}", workingPath); - String datasourcePath = parser.get("datasourcePath"); - log.info("datasourcePath: {}", datasourcePath); + String datasourcePath = parser.get("hostedBy"); + log.info("datasourcePath: {}", datasourcePath); - String country = parser.get("country"); - log.info("country: {}", country); + String country = parser.get("country"); + log.info("country: {}", country); - String[] verifyParam = parser.get("verifyParam").split(";"); - log.info("verifyParam: {}", verifyParam); + String[] verifyParam = parser.get("verifyParam").split(";"); + log.info("verifyParam: {}", verifyParam); - String collectedfrom = parser.get("collectedfrom"); - log.info("collectedfrom: {}", collectedfrom); + String collectedfrom = parser.get("collectedfrom"); + log.info("collectedfrom: {}", collectedfrom); - String graphTableClassName = parser.get("graphTableClassName"); - log.info("graphTableClassName: {}", graphTableClassName); + String graphTableClassName = parser.get("graphTableClassName"); + log.info("graphTableClassName: {}", graphTableClassName); - Class entityClazz = (Class) Class.forName(graphTableClassName); + Class entityClazz = (Class) Class.forName(graphTableClassName); - SparkConf conf = new SparkConf(); - runWithSparkSession( - conf, - isSparkSessionManaged, - spark -> { + SparkConf conf = new SparkConf(); + runWithSparkSession( + conf, + isSparkSessionManaged, + spark -> { - cleanCountry(spark, country, verifyParam, inputPath, entityClazz, workingPath,collectedfrom, datasourcePath); - }); - } + cleanCountry( + spark, country, verifyParam, inputPath, entityClazz, workingPath, collectedfrom, datasourcePath); + }); + } - private static void cleanCountry(SparkSession spark, String country, String[] verifyParam, - String inputPath, Class entityClazz, String workingPath, String collectedfrom, String datasourcePath) { + private static void cleanCountry(SparkSession spark, String country, String[] verifyParam, + String inputPath, Class entityClazz, String workingPath, String collectedfrom, String datasourcePath) { - List hostedBy = spark.read().textFile(datasourcePath) - // .filter((FilterFunction) ds -> !ds.equals(collectedfrom)) - .collectAsList(); + List hostedBy = spark + .read() + .textFile(datasourcePath) + // .filter((FilterFunction) ds -> !ds.equals(collectedfrom)) + .collectAsList(); - Dataset res = spark - .read() - .textFile(inputPath) - .map( - (MapFunction) value -> OBJECT_MAPPER.readValue(value, entityClazz), - Encoders.bean(entityClazz)) - ; + Dataset res = spark + .read() + .textFile(inputPath) + .map( + (MapFunction) value -> OBJECT_MAPPER.readValue(value, entityClazz), + Encoders.bean(entityClazz)); - res.map((MapFunction) r -> { - if(r.getInstance().stream().anyMatch(i -> hostedBy.contains(i.getHostedby().getKey())) || - !r.getCollectedfrom().stream().anyMatch(cf -> cf.getValue().equals(collectedfrom))){ - return r; - } + res.map((MapFunction) r -> { + if (r.getInstance().stream().anyMatch(i -> hostedBy.contains(i.getHostedby().getKey())) || + !r.getCollectedfrom().stream().anyMatch(cf -> cf.getValue().equals(collectedfrom))) { + return r; + } - if(r.getPid().stream().anyMatch(p -> p.getQualifier().getClassid().equals("doi") && pidInParam(p.getValue(), verifyParam)) - && r.getCountry().stream().anyMatch(c -> c.getClassid().equals(country) && c.getDataInfo().getInferenceprovenance().equals("propagation"))) - { r - .setCountry( - r - .getCountry() - .stream() - .filter( - c -> !c.getClassid() - .equalsIgnoreCase(country)) - .collect(Collectors.toList())); + if (r + .getPid() + .stream() + .anyMatch(p -> p.getQualifier().getClassid().equals("doi") && pidInParam(p.getValue(), verifyParam))) { + r + .setCountry( + r + .getCountry() + .stream() + .filter( + c -> toTakeCountry(c, country)) + .collect(Collectors.toList())); - } + } - return r; - }, Encoders.bean(entityClazz)) - .write() - .mode(SaveMode.Overwrite) - .option("compression", "gzip") - .json(workingPath); + return r; + }, Encoders.bean(entityClazz)) + .write() + .mode(SaveMode.Overwrite) + .option("compression", "gzip") + .json(workingPath); - spark - .read() - .textFile(workingPath) - .map( - (MapFunction) value -> OBJECT_MAPPER.readValue(value, entityClazz), - Encoders.bean(entityClazz)) - .write() - .mode(SaveMode.Overwrite) - .option("compression", "gzip") - .json(inputPath); - } + spark + .read() + .textFile(workingPath) + .map( + (MapFunction) value -> OBJECT_MAPPER.readValue(value, entityClazz), + Encoders.bean(entityClazz)) + .write() + .mode(SaveMode.Overwrite) + .option("compression", "gzip") + .json(inputPath); + } - private static boolean pidInParam(String value, String[] verifyParam) { - for (String s : verifyParam ) - if (value.startsWith(s)) - return true; - return false; - } + private static boolean pidInParam(String value, String[] verifyParam) { + for (String s : verifyParam) + if (value.startsWith(s)) + return true; + return false; + } + + private static boolean toTakeCountry(Country c, String country) { + // If dataInfo is not set, or dataInfo.inferenceprovenance is not set or not present then it cannot be + // inserted via propagation + if (!Optional.ofNullable(c.getDataInfo()).isPresent()) + return true; + if (!Optional.ofNullable(c.getDataInfo().getInferenceprovenance()).isPresent()) + return true; + return !(c + .getClassid() + .equalsIgnoreCase(country) && + c.getDataInfo().getInferenceprovenance().equals("propagation")); + } } - diff --git a/dhp-workflows/dhp-graph-mapper/src/main/java/eu/dnetlib/dhp/oa/graph/clean/country/GetDatasourceFromCountry.java b/dhp-workflows/dhp-graph-mapper/src/main/java/eu/dnetlib/dhp/oa/graph/clean/country/GetDatasourceFromCountry.java index c255c445f..dd5af6998 100644 --- a/dhp-workflows/dhp-graph-mapper/src/main/java/eu/dnetlib/dhp/oa/graph/clean/country/GetDatasourceFromCountry.java +++ b/dhp-workflows/dhp-graph-mapper/src/main/java/eu/dnetlib/dhp/oa/graph/clean/country/GetDatasourceFromCountry.java @@ -1,10 +1,12 @@ + package eu.dnetlib.dhp.oa.graph.clean.country; -import com.fasterxml.jackson.databind.ObjectMapper; -import eu.dnetlib.dhp.application.ArgumentApplicationParser; -import eu.dnetlib.dhp.oa.graph.clean.CleanContextSparkJob; -import eu.dnetlib.dhp.schema.common.ModelConstants; -import eu.dnetlib.dhp.schema.oaf.*; +import static eu.dnetlib.dhp.common.SparkSessionSupport.runWithSparkSession; + +import java.io.Serializable; +import java.util.List; +import java.util.Optional; + import org.apache.commons.io.IOUtils; import org.apache.spark.SparkConf; import org.apache.spark.api.java.function.FilterFunction; @@ -15,85 +17,92 @@ 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.oa.graph.clean.CleanContextSparkJob; +import eu.dnetlib.dhp.schema.common.ModelConstants; +import eu.dnetlib.dhp.schema.oaf.*; import scala.Tuple2; -import java.io.Serializable; -import java.util.List; -import java.util.Optional; - -import static eu.dnetlib.dhp.common.SparkSessionSupport.runWithSparkSession; - /** * @author miriam.baglioni * @Date 22/07/22 */ public class GetDatasourceFromCountry implements Serializable { - private static final Logger log = LoggerFactory.getLogger(GetDatasourceFromCountry.class); + private static final Logger log = LoggerFactory.getLogger(GetDatasourceFromCountry.class); - private static final ObjectMapper OBJECT_MAPPER = new ObjectMapper(); + private static final ObjectMapper OBJECT_MAPPER = new ObjectMapper(); - public static void main(String[] args) throws Exception { + public static void main(String[] args) throws Exception { - String jsonConfiguration = IOUtils - .toString( - GetDatasourceFromCountry.class - .getResourceAsStream( - "/eu/dnetlib/dhp/oa/graph/input_datasource_country_parameters.json")); - final ArgumentApplicationParser parser = new ArgumentApplicationParser(jsonConfiguration); - parser.parseArgument(args); + String jsonConfiguration = IOUtils + .toString( + GetDatasourceFromCountry.class + .getResourceAsStream( + "/eu/dnetlib/dhp/oa/graph/input_datasource_country_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); + 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 inputPath = parser.get("inputPath"); + log.info("inputPath: {}", inputPath); - String workingPath = parser.get("workingPath"); - log.info("workingPath: {}", workingPath); + String workingPath = parser.get("workingPath"); + log.info("workingPath: {}", workingPath); - String country = parser.get("country"); - log.info("country: {}", country); + String country = parser.get("country"); + log.info("country: {}", country); - SparkConf conf = new SparkConf(); - runWithSparkSession( - conf, - isSparkSessionManaged, - spark -> { + SparkConf conf = new SparkConf(); + runWithSparkSession( + conf, + isSparkSessionManaged, + spark -> { - getDatasourceFromCountry(spark, country, inputPath, workingPath); - }); - } + getDatasourceFromCountry(spark, country, inputPath, workingPath); + }); + } - private static void getDatasourceFromCountry(SparkSession spark, String country, String inputPath, String workingPath) { + private static void getDatasourceFromCountry(SparkSession spark, String country, String inputPath, + String workingPath) { - Dataset organization = spark.read().textFile(inputPath + "/organization") - .map( - (MapFunction) value -> OBJECT_MAPPER.readValue(value, Organization.class), - Encoders.bean(Organization.class)) - .filter( - (FilterFunction) o -> !o.getDataInfo().getDeletedbyinference() && - o.getCountry().getClassid().length() > 0 && - o.getCountry().getClassid().equals(country));; + Dataset organization = spark + .read() + .textFile(inputPath + "/organization") + .map( + (MapFunction) value -> OBJECT_MAPPER.readValue(value, Organization.class), + Encoders.bean(Organization.class)) + .filter( + (FilterFunction) o -> !o.getDataInfo().getDeletedbyinference() && + o.getCountry().getClassid().length() > 0 && + o.getCountry().getClassid().equals(country)); + ; + // filtering of the relations taking the non deleted by inference and those with IsProvidedBy as relclass + Dataset relation = spark + .read() + .textFile(inputPath + "/relation") + .map( + (MapFunction) value -> OBJECT_MAPPER.readValue(value, Relation.class), + Encoders.bean(Relation.class)) + .filter( + (FilterFunction) rel -> rel.getRelClass().equalsIgnoreCase(ModelConstants.IS_PROVIDED_BY) && + !rel.getDataInfo().getDeletedbyinference()); - // filtering of the relations taking the non deleted by inference and those with IsProvidedBy as relclass - Dataset relation = spark.read().textFile( inputPath + "/relation") - .map( - (MapFunction) value -> OBJECT_MAPPER.readValue(value, Relation.class), - Encoders.bean(Relation.class)) - .filter( - (FilterFunction) rel -> rel.getRelClass().equalsIgnoreCase(ModelConstants.IS_PROVIDED_BY) && - !rel.getDataInfo().getDeletedbyinference()); + organization + .joinWith(relation, organization.col("id").equalTo(relation.col("target")), "left") + .map((MapFunction, String>) t2 -> t2._2().getSource(), Encoders.STRING()) + .write() + .mode(SaveMode.Overwrite) + .option("compression", "gzip") + .json(workingPath); - organization.joinWith(relation, organization.col("id").equalTo(relation.col("target")), "left") - .map((MapFunction, String>) t2 -> t2._2().getSource(), Encoders.STRING() ) - .write() - .mode(SaveMode.Overwrite) - .option("compression","gzip") - .json(workingPath); - - } + } } diff --git a/dhp-workflows/dhp-graph-mapper/src/test/java/eu/dnetlib/dhp/oa/graph/clean/CleanCountryTest.java b/dhp-workflows/dhp-graph-mapper/src/test/java/eu/dnetlib/dhp/oa/graph/clean/CleanCountryTest.java index a72093156..c9f846570 100644 --- a/dhp-workflows/dhp-graph-mapper/src/test/java/eu/dnetlib/dhp/oa/graph/clean/CleanCountryTest.java +++ b/dhp-workflows/dhp-graph-mapper/src/test/java/eu/dnetlib/dhp/oa/graph/clean/CleanCountryTest.java @@ -1,13 +1,10 @@ -package eu.dnetlib.dhp.oa.graph.clean; -/** - * @author miriam.baglioni - * @Date 20/07/22 - */ -import com.fasterxml.jackson.databind.ObjectMapper; -import eu.dnetlib.dhp.oa.graph.clean.country.CleanCountrySparkJob; -import eu.dnetlib.dhp.oa.graph.dump.DumpJobTest; -import eu.dnetlib.dhp.schema.oaf.Publication; +package eu.dnetlib.dhp.oa.graph.clean; + +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; @@ -22,113 +19,132 @@ import org.junit.jupiter.api.Test; import org.slf4j.Logger; import org.slf4j.LoggerFactory; -import java.io.IOException; -import java.nio.file.Files; -import java.nio.file.Path; +/** + * @author miriam.baglioni + * @Date 20/07/22 + */ +import com.fasterxml.jackson.databind.ObjectMapper; +import eu.dnetlib.dhp.oa.graph.clean.country.CleanCountrySparkJob; +import eu.dnetlib.dhp.schema.oaf.Publication; public class CleanCountryTest { - 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 Path workingDir; - private static final Logger log = LoggerFactory.getLogger(CleanContextTest.class); + private static final Logger log = LoggerFactory.getLogger(CleanContextTest.class); - @BeforeAll - public static void beforeAll() throws IOException { - workingDir = Files.createTempDirectory(DumpJobTest.class.getSimpleName()); - log.info("using work dir {}", workingDir); + @BeforeAll + public static void beforeAll() throws IOException { + workingDir = Files.createTempDirectory(CleanCountryTest.class.getSimpleName()); + log.info("using work dir {}", workingDir); - SparkConf conf = new SparkConf(); - conf.setAppName(DumpJobTest.class.getSimpleName()); + SparkConf conf = new SparkConf(); + conf.setAppName(CleanCountryTest.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(DumpJobTest.class.getSimpleName()) - .config(conf) - .getOrCreate(); - } + spark = SparkSession + .builder() + .appName(CleanCountryTest.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 - public void testResultClean() throws Exception { - final String sourcePath = getClass() - .getResource("/eu/dnetlib/dhp/oa/graph/clean/publication_clean_country.json") - .getPath(); - final String prefix = "gcube "; + @Test + public void testResultClean() throws Exception { + final String sourcePath = getClass() + .getResource("/eu/dnetlib/dhp/oa/graph/clean/publication_clean_country.json") + .getPath(); - spark - .read() - .textFile(sourcePath) - .map( - (MapFunction) r -> OBJECT_MAPPER.readValue(r, Publication.class), - Encoders.bean(Publication.class)) - .write() - .json(workingDir.toString() + "/publication"); + spark + .read() + .textFile(sourcePath) + .map( + (MapFunction) r -> OBJECT_MAPPER.readValue(r, Publication.class), + Encoders.bean(Publication.class)) + .write() + .json(workingDir.toString() + "/publication"); - CleanCountrySparkJob.main(new String[] { - "--isSparkSessionManaged", Boolean.FALSE.toString(), - "--inputPath", workingDir.toString() + "/publication", - "-graphTableClassName", Publication.class.getCanonicalName(), - "-workingPath", workingDir.toString() + "/working", - "-country", "NL", - "-verifyParam", "10.17632", - "-collectedfrom", "NARCIS" - }); + CleanCountrySparkJob.main(new String[] { + "--isSparkSessionManaged", Boolean.FALSE.toString(), + "--inputPath", workingDir.toString() + "/publication", + "-graphTableClassName", Publication.class.getCanonicalName(), + "-workingPath", workingDir.toString() + "/working", + "-country", "NL", + "-verifyParam", "10.17632", + "-collectedfrom", "NARCIS", + "-hostedBy", getClass() + .getResource("/eu/dnetlib/dhp/oa/graph/clean/hostedBy") + .getPath() + }); - final JavaSparkContext sc = JavaSparkContext.fromSparkContext(spark.sparkContext()); - JavaRDD tmp = sc - .textFile(workingDir.toString() + "/publication") - .map(item -> OBJECT_MAPPER.readValue(item, Publication.class)); + final JavaSparkContext sc = JavaSparkContext.fromSparkContext(spark.sparkContext()); + JavaRDD tmp = sc + .textFile(workingDir.toString() + "/publication") + .map(item -> OBJECT_MAPPER.readValue(item, Publication.class)); - Assertions.assertEquals(7, tmp.count()); + Assertions.assertEquals(8, tmp.count()); - // original result with NL country and doi starting with Mendely prefix, but not collectedfrom NARCIS - Assertions - .assertEquals( - 1, - tmp - .filter(p -> p.getId().equals("50|DansKnawCris::0224aae28af558f21768dbc6439c7a95")) - .collect() - .get(0) - .getCountry() - .size()); + // original result with NL country and doi starting with Mendely prefix, but not collectedfrom NARCIS + Assertions + .assertEquals( + 1, + tmp + .filter(p -> p.getId().equals("50|DansKnawCris::0224aae28af558f21768dbc6439c7a95")) + .collect() + .get(0) + .getCountry() + .size()); - // original result with NL country and pid not starting with Mendely prefix - Assertions - .assertEquals( - 1, - tmp - .filter(p -> p.getId().equals("50|DansKnawCris::20c414a3b1c742d5dd3851f1b67df2d9")) - .collect() - .get(0) - .getCountry() - .size()); + // original result with NL country and pid not starting with Mendely prefix + Assertions + .assertEquals( + 1, + tmp + .filter(p -> p.getId().equals("50|DansKnawCris::20c414a3b1c742d5dd3851f1b67df2d9")) + .collect() + .get(0) + .getCountry() + .size()); - // original result with NL country and doi starting with Mendely prefix and collectedfrom NARCIS - Assertions - .assertEquals( - 0, - tmp - .filter(p -> p.getId().equals("50|DansKnawCris::3c81248c335f0aa07e06817ece6fa6af")) - .collect() - .get(0) - .getCountry() - .size()); - } + // original result with NL country and doi starting with Mendely prefix and collectedfrom NARCIS but not + // inserted with propagation + Assertions + .assertEquals( + 1, + tmp + .filter(p -> p.getId().equals("50|DansKnawCris::3c81248c335f0aa07e06817ece6fa6af")) + .collect() + .get(0) + .getCountry() + .size()); + + // original result with NL country and doi starting with Mendely prefix and collectedfrom NARCIS inserted with + // propagation + Assertions + .assertEquals( + 0, + tmp + .filter(p -> p.getId().equals("50|DansKnawCris::3c81248c335f0aa07e06817ece6fa6ag")) + .collect() + .get(0) + .getCountry() + .size()); + } } diff --git a/dhp-workflows/dhp-graph-mapper/src/test/resources/eu/dnetlib/dhp/oa/graph/clean/hostedBy b/dhp-workflows/dhp-graph-mapper/src/test/resources/eu/dnetlib/dhp/oa/graph/clean/hostedBy new file mode 100644 index 000000000..e69de29bb diff --git a/dhp-workflows/dhp-graph-mapper/src/test/resources/eu/dnetlib/dhp/oa/graph/clean/publication_clean_country.json b/dhp-workflows/dhp-graph-mapper/src/test/resources/eu/dnetlib/dhp/oa/graph/clean/publication_clean_country.json index ebceecff9..4916eee73 100644 --- a/dhp-workflows/dhp-graph-mapper/src/test/resources/eu/dnetlib/dhp/oa/graph/clean/publication_clean_country.json +++ b/dhp-workflows/dhp-graph-mapper/src/test/resources/eu/dnetlib/dhp/oa/graph/clean/publication_clean_country.json @@ -4,4 +4,5 @@ {"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::1"}],"contributor":[],"country":[],"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":null,"dateofcollection":"","dateoftransformation":"2020-05-25T17:55:40.568Z","description":[],"embargoenddate":null,"externalReference":[],"extraInfo":[],"format":[],"fulltext":[],"id":"50|DansKnawCris::3c9f068ddc930360bec6925488a9a97f","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":null,"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":null,"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":"UNKNOWN","classname":"UNKNOWN","schemeid":"dnet:languages","schemename":"dnet:languages"},"lastupdatetimestamp":1591282670417,"oaiprovenance":{"originDescription":{"altered":true,"baseURL":"http%3A%2F%2Fservices.nod.dans.knaw.nl%2Foa-cerif","datestamp":"2019-12-01T08:41:34Z","harvestDate":"2020-05-25T11:40:05.974Z","identifier":"oai:services.nod.dans.knaw.nl:Publications/rce:document:550052278","metadataNamespace":""}},"originalId":["DansKnawCris::3c9f068ddc930360bec6925488a9a97f"],"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=550052278"},{"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=550052278"}],"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":"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":"None GCUBE"}],"journal":null} {"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":"dh-ch"},{"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::1"}],"contributor":[],"country":[],"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":"2010-01-01"},"dateofcollection":"","dateoftransformation":"2020-05-25T18:11:57.737Z","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":"Met lit. opg"}],"embargoenddate":null,"externalReference":[],"extraInfo":[],"format":[],"fulltext":[],"id":"50|DansKnawCris::4669a378a73661417182c208e6fdab53","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":"2010-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":null,"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":1591282758835,"oaiprovenance":{"originDescription":{"altered":true,"baseURL":"http%3A%2F%2Fservices.nod.dans.knaw.nl%2Foa-cerif","datestamp":"2019-12-01T07:36:00Z","harvestDate":"2020-05-25T11:30:47.199Z","identifier":"oai:services.nod.dans.knaw.nl:Publications/rce-kb:document:800007467","metadataNamespace":""}},"originalId":["DansKnawCris::4669a378a73661417182c208e6fdab53"],"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=ChoiceFullCatalogue&search=priref=800007467"},{"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=ChoiceFullCatalogue&search=priref=800007467"}],"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":"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":"Vlaardingen"},{"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 RAAP-rapport, ISSN 0925-6229 2089"}],"journal":null} {"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":"dh-ch"},{"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::1"}],"contributor":[],"country":[],"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":null,"dateofcollection":"","dateoftransformation":"2020-05-25T18:18:18.049Z","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":"Met literatuuropgave"}],"embargoenddate":null,"externalReference":[],"extraInfo":[],"format":[],"fulltext":[],"id":"50|DansKnawCris::4a9152e80f860eab99072e921d74a0ff","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":null,"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":null,"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":1591283010899,"oaiprovenance":{"originDescription":{"altered":true,"baseURL":"http%3A%2F%2Fservices.nod.dans.knaw.nl%2Foa-cerif","datestamp":"2019-12-01T07:48:12Z","harvestDate":"2020-05-25T11:32:46.363Z","identifier":"oai:services.nod.dans.knaw.nl:Publications/rce-kb:document:800014509","metadataNamespace":""}},"originalId":["DansKnawCris::4a9152e80f860eab99072e921d74a0ff"],"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=ChoiceFullCatalogue&search=priref=800014509"},{"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=ChoiceFullCatalogue&search=priref=800014509"}],"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":"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":"Bladel"},{"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":"Proefsleuvenonderzoek aan de Bredasebaan 8 te Bladel"},{"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 Archeodienst rapport, ISSN 1877-2900 565"}],"journal":null} -{"author":[{"affiliation":null,"fullname":"Schubart, A.","name":"A.","pid":[],"rank":1,"surname":"Schubart"}],"bestaccessright":{"classid":"OPEN","classname":"Open Access","schemeid":"dnet:access_modes","schemename":"dnet:access_modes"},"collectedfrom":[{"dataInfo":null,"key":"10|openaire____::081b82f96300b6a6e3d282bad31cb6e2","value":"Crossref"},{"dataInfo":null,"key":"10|openaire____::8ac8380272269217cb09a928c8caa993","value":"UnpayWall"},{"dataInfo":null,"key":"10|openaire____::5f532a3fc4f1ea403f37070f59a7a53a","value":"Microsoft Academic Graph"},{"dataInfo":null,"key":"10|opendoar____::358aee4cc897452c00244351e4d91f69","value":"ZENODO"}],"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":"dh-ch"}],"contributor":[],"country":[],"coverage":[],"dataInfo":{"deletedbyinference":false,"inferenceprovenance":"decisiontree-dedup-test","inferred":true,"invisible":false,"provenanceaction":{"classid":"sysimport:dedup","classname":"sysimport:dedup","schemeid":"dnet:provenanceActions","schemename":"dnet:provenanceActions"},"trust":"0.8"},"dateofacceptance":{"dataInfo":null,"value":"1866-01-01"},"dateofcollection":"2019-02-17T01:33:44Z","dateoftransformation":null,"description":[{"dataInfo":{"deletedbyinference":false,"inferenceprovenance":"","inferred":false,"invisible":false,"provenanceaction":{"classid":"sysimport:crosswalk:repository","classname":"sysimport:crosswalk:repository","schemeid":"dnet:provenanceActions","schemename":"dnet:provenanceActions"},"trust":"0.9"},"value":"n/a"}],"embargoenddate":null,"externalReference":[],"extraInfo":[],"format":[],"fulltext":[],"id":"50|dedup_wf_001::01e6a28565ca01376b7548e530c6f6e8","instance":[{"accessright":{"classid":"RESTRICTED","classname":"Restricted","schemeid":"dnet:access_modes","schemename":"dnet:access_modes"},"collectedfrom":{"dataInfo":null,"key":"10|openaire____::081b82f96300b6a6e3d282bad31cb6e2","value":"Crossref"},"dateofacceptance":{"dataInfo":null,"value":"1866-01-01"},"distributionlocation":null,"hostedby":{"dataInfo":null,"key":"10|issn___print::4a110be99bfeda7a5e85b5e4c7e95d87","value":"Philologus"},"instancetype":{"classid":"0001","classname":"Article","schemeid":"dnet:publication_resource","schemename":"dnet:publication_resource"},"license":null,"processingchargeamount":null,"processingchargecurrency":null,"refereed":null,"url":["http://www.degruyter.com/view/j/phil.1866.24.issue-1-4/phil.1866.24.14.561/phil.1866.24.14.561.xml","http://www.degruyter.com/view/j/phil.1866.24.issue-1-4/phil.1866.24.14.561/phil.1866.24.14.561.pdf","http://dx.doi.org/10.1524/phil.1866.24.14.561"]},{"accessright":{"classid":"OPEN","classname":"Open Access","schemeid":"dnet:access_modes","schemename":"dnet:access_modes"},"collectedfrom":{"dataInfo":null,"key":"10|openaire____::8ac8380272269217cb09a928c8caa993","value":"UnpayWall"},"dateofacceptance":null,"distributionlocation":null,"hostedby":{"dataInfo":null,"key":"10|issn___print::4a110be99bfeda7a5e85b5e4c7e95d87","value":"Philologus"},"instancetype":{"classid":"0001","classname":"Article","schemeid":"dnet:publication_resource","schemename":"dnet:publication_resource"},"license":{"dataInfo":null,"value":"cc0"},"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":"2578.35"},"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":["https://zenodo.org/record/1634826/files/article.pdf"]},{"accessright":null,"collectedfrom":{"dataInfo":null,"key":"10|openaire____::5f532a3fc4f1ea403f37070f59a7a53a","value":"Microsoft Academic Graph"},"dateofacceptance":null,"distributionlocation":null,"hostedby":{"dataInfo":null,"key":"10|issn___print::4a110be99bfeda7a5e85b5e4c7e95d87","value":"Philologus"},"instancetype":{"classid":"0001","classname":"Article","schemeid":"dnet:publication_resource","schemename":"dnet:publication_resource"},"license":null,"processingchargeamount":null,"processingchargecurrency":null,"refereed":null,"url":["http://www.degruyter.com/view/j/phil.1866.24.issue-1-4/phil.1866.24.14.561/phil.1866.24.14.561.xml","https://academic.microsoft.com/#/detail/2601803436"]},{"accessright":{"classid":"OPEN","classname":"Open Access","schemeid":"dnet:access_modes","schemename":"dnet:access_modes"},"collectedfrom":{"dataInfo":null,"key":"10|opendoar____::358aee4cc897452c00244351e4d91f69","value":"ZENODO"},"dateofacceptance":{"dataInfo":{"deletedbyinference":false,"inferenceprovenance":"","inferred":false,"invisible":false,"provenanceaction":{"classid":"sysimport:crosswalk","classname":"sysimport:crosswalk","schemeid":"dnet:provenanceActions","schemename":"dnet:provenanceActions"},"trust":"0.9"},"value":"1866-01-01"},"distributionlocation":"","hostedby":{"dataInfo":null,"key":"10|opendoar____::358aee4cc897452c00244351e4d91f69","value":"ZENODO"},"instancetype":{"classid":"0038","classname":"Other literature type","schemeid":"dnet:publication_resource","schemename":"dnet:publication_resource"},"license":null,"processingchargeamount":null,"processingchargecurrency":null,"refereed":null,"url":["https://zenodo.org/record/1634826"]}],"language":null,"lastupdatetimestamp":1591290751234,"oaiprovenance":null,"originalId":["10.1524/phil.1866.24.14.561","2601803436","od______2659::f9ba286bcf8429160b58072028052325"],"pid":[{"dataInfo":null,"qualifier":{"classid":"doi","classname":"doi","schemeid":"dnet:pid_types","schemename":"dnet:pid_types"},"value":"10.1524/phil.1866.24.14.561"}],"publisher":{"dataInfo":null,"value":"Walter de Gruyter GmbH"},"relevantdate":[{"dataInfo":null,"qualifier":{"classid":"created","classname":"created","schemeid":"dnet:dataCite_date","schemename":"dnet:dataCite_date"},"value":"2017-03-26T10:09:50Z"},{"dataInfo":null,"qualifier":{"classid":"published-print","classname":"published-print","schemeid":"dnet:dataCite_date","schemename":"dnet:dataCite_date"},"value":"1866-01-01"}],"resourcetype":{"classid":"Other","classname":"Other","schemeid":"dnet:dataCite_resource","schemename":"dnet:dataCite_resource"},"resulttype":{"classid":"publication","classname":"publication","schemeid":"dnet:result_typologies","schemename":"dnet:result_typologies"},"source":[{"dataInfo":null,"value":"Crossref"},{"dataInfo":null,"value":null}],"subject":[{"dataInfo":null,"qualifier":{"classid":"keywords","classname":"keywords","schemeid":"dnet:subject_classification_typologies","schemename":"dnet:subject_classification_typologies"},"value":"Theology"},{"dataInfo":null,"qualifier":{"classid":"keywords","classname":"keywords","schemeid":"dnet:subject_classification_typologies","schemename":"dnet:subject_classification_typologies"},"value":"History"},{"dataInfo":null,"qualifier":{"classid":"keywords","classname":"keywords","schemeid":"dnet:subject_classification_typologies","schemename":"dnet:subject_classification_typologies"},"value":"Art history"}],"title":[{"dataInfo":null,"qualifier":{"classid":"alternative title","classname":"alternative title","schemeid":"dnet:dataCite_title","schemename":"dnet:dataCite_title"},"value":"XIV. Die wörter άγαλμα, είχών, ξόανον, ανδρuις und verwandte, in ihren verschiedenen beziehungen. Nach Pausanias"},{"dataInfo":null,"qualifier":{"classid":"main title","classname":"main title","schemeid":"dnet:dataCite_title","schemename":"dnet:dataCite_title"},"value":"gcube xiv die worter άγαλμα eίχών ξόανον ανδρuις und verwandte in ihren verschiedenen beziehungen nach pausanias"}],"journal":{"conferencedate":null,"conferenceplace":null,"dataInfo":null,"edition":null,"ep":null,"iss":null,"issnLinking":null,"issnOnline":"2196-7008","issnPrinted":"0031-7985","name":"Philologus","sp":null,"vol":"24"}} \ No newline at end of file +{"author":[{"affiliation":null,"fullname":"Schubart, A.","name":"A.","pid":[],"rank":1,"surname":"Schubart"}],"bestaccessright":{"classid":"OPEN","classname":"Open Access","schemeid":"dnet:access_modes","schemename":"dnet:access_modes"},"collectedfrom":[{"dataInfo":null,"key":"10|openaire____::081b82f96300b6a6e3d282bad31cb6e2","value":"Crossref"},{"dataInfo":null,"key":"10|openaire____::8ac8380272269217cb09a928c8caa993","value":"UnpayWall"},{"dataInfo":null,"key":"10|openaire____::5f532a3fc4f1ea403f37070f59a7a53a","value":"Microsoft Academic Graph"},{"dataInfo":null,"key":"10|opendoar____::358aee4cc897452c00244351e4d91f69","value":"ZENODO"}],"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":"dh-ch"}],"contributor":[],"country":[],"coverage":[],"dataInfo":{"deletedbyinference":false,"inferenceprovenance":"decisiontree-dedup-test","inferred":true,"invisible":false,"provenanceaction":{"classid":"sysimport:dedup","classname":"sysimport:dedup","schemeid":"dnet:provenanceActions","schemename":"dnet:provenanceActions"},"trust":"0.8"},"dateofacceptance":{"dataInfo":null,"value":"1866-01-01"},"dateofcollection":"2019-02-17T01:33:44Z","dateoftransformation":null,"description":[{"dataInfo":{"deletedbyinference":false,"inferenceprovenance":"","inferred":false,"invisible":false,"provenanceaction":{"classid":"sysimport:crosswalk:repository","classname":"sysimport:crosswalk:repository","schemeid":"dnet:provenanceActions","schemename":"dnet:provenanceActions"},"trust":"0.9"},"value":"n/a"}],"embargoenddate":null,"externalReference":[],"extraInfo":[],"format":[],"fulltext":[],"id":"50|dedup_wf_001::01e6a28565ca01376b7548e530c6f6e8","instance":[{"accessright":{"classid":"RESTRICTED","classname":"Restricted","schemeid":"dnet:access_modes","schemename":"dnet:access_modes"},"collectedfrom":{"dataInfo":null,"key":"10|openaire____::081b82f96300b6a6e3d282bad31cb6e2","value":"Crossref"},"dateofacceptance":{"dataInfo":null,"value":"1866-01-01"},"distributionlocation":null,"hostedby":{"dataInfo":null,"key":"10|issn___print::4a110be99bfeda7a5e85b5e4c7e95d87","value":"Philologus"},"instancetype":{"classid":"0001","classname":"Article","schemeid":"dnet:publication_resource","schemename":"dnet:publication_resource"},"license":null,"processingchargeamount":null,"processingchargecurrency":null,"refereed":null,"url":["http://www.degruyter.com/view/j/phil.1866.24.issue-1-4/phil.1866.24.14.561/phil.1866.24.14.561.xml","http://www.degruyter.com/view/j/phil.1866.24.issue-1-4/phil.1866.24.14.561/phil.1866.24.14.561.pdf","http://dx.doi.org/10.1524/phil.1866.24.14.561"]},{"accessright":{"classid":"OPEN","classname":"Open Access","schemeid":"dnet:access_modes","schemename":"dnet:access_modes"},"collectedfrom":{"dataInfo":null,"key":"10|openaire____::8ac8380272269217cb09a928c8caa993","value":"UnpayWall"},"dateofacceptance":null,"distributionlocation":null,"hostedby":{"dataInfo":null,"key":"10|issn___print::4a110be99bfeda7a5e85b5e4c7e95d87","value":"Philologus"},"instancetype":{"classid":"0001","classname":"Article","schemeid":"dnet:publication_resource","schemename":"dnet:publication_resource"},"license":{"dataInfo":null,"value":"cc0"},"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":"2578.35"},"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":["https://zenodo.org/record/1634826/files/article.pdf"]},{"accessright":null,"collectedfrom":{"dataInfo":null,"key":"10|openaire____::5f532a3fc4f1ea403f37070f59a7a53a","value":"Microsoft Academic Graph"},"dateofacceptance":null,"distributionlocation":null,"hostedby":{"dataInfo":null,"key":"10|issn___print::4a110be99bfeda7a5e85b5e4c7e95d87","value":"Philologus"},"instancetype":{"classid":"0001","classname":"Article","schemeid":"dnet:publication_resource","schemename":"dnet:publication_resource"},"license":null,"processingchargeamount":null,"processingchargecurrency":null,"refereed":null,"url":["http://www.degruyter.com/view/j/phil.1866.24.issue-1-4/phil.1866.24.14.561/phil.1866.24.14.561.xml","https://academic.microsoft.com/#/detail/2601803436"]},{"accessright":{"classid":"OPEN","classname":"Open Access","schemeid":"dnet:access_modes","schemename":"dnet:access_modes"},"collectedfrom":{"dataInfo":null,"key":"10|opendoar____::358aee4cc897452c00244351e4d91f69","value":"ZENODO"},"dateofacceptance":{"dataInfo":{"deletedbyinference":false,"inferenceprovenance":"","inferred":false,"invisible":false,"provenanceaction":{"classid":"sysimport:crosswalk","classname":"sysimport:crosswalk","schemeid":"dnet:provenanceActions","schemename":"dnet:provenanceActions"},"trust":"0.9"},"value":"1866-01-01"},"distributionlocation":"","hostedby":{"dataInfo":null,"key":"10|opendoar____::358aee4cc897452c00244351e4d91f69","value":"ZENODO"},"instancetype":{"classid":"0038","classname":"Other literature type","schemeid":"dnet:publication_resource","schemename":"dnet:publication_resource"},"license":null,"processingchargeamount":null,"processingchargecurrency":null,"refereed":null,"url":["https://zenodo.org/record/1634826"]}],"language":null,"lastupdatetimestamp":1591290751234,"oaiprovenance":null,"originalId":["10.1524/phil.1866.24.14.561","2601803436","od______2659::f9ba286bcf8429160b58072028052325"],"pid":[{"dataInfo":null,"qualifier":{"classid":"doi","classname":"doi","schemeid":"dnet:pid_types","schemename":"dnet:pid_types"},"value":"10.1524/phil.1866.24.14.561"}],"publisher":{"dataInfo":null,"value":"Walter de Gruyter GmbH"},"relevantdate":[{"dataInfo":null,"qualifier":{"classid":"created","classname":"created","schemeid":"dnet:dataCite_date","schemename":"dnet:dataCite_date"},"value":"2017-03-26T10:09:50Z"},{"dataInfo":null,"qualifier":{"classid":"published-print","classname":"published-print","schemeid":"dnet:dataCite_date","schemename":"dnet:dataCite_date"},"value":"1866-01-01"}],"resourcetype":{"classid":"Other","classname":"Other","schemeid":"dnet:dataCite_resource","schemename":"dnet:dataCite_resource"},"resulttype":{"classid":"publication","classname":"publication","schemeid":"dnet:result_typologies","schemename":"dnet:result_typologies"},"source":[{"dataInfo":null,"value":"Crossref"},{"dataInfo":null,"value":null}],"subject":[{"dataInfo":null,"qualifier":{"classid":"keywords","classname":"keywords","schemeid":"dnet:subject_classification_typologies","schemename":"dnet:subject_classification_typologies"},"value":"Theology"},{"dataInfo":null,"qualifier":{"classid":"keywords","classname":"keywords","schemeid":"dnet:subject_classification_typologies","schemename":"dnet:subject_classification_typologies"},"value":"History"},{"dataInfo":null,"qualifier":{"classid":"keywords","classname":"keywords","schemeid":"dnet:subject_classification_typologies","schemename":"dnet:subject_classification_typologies"},"value":"Art history"}],"title":[{"dataInfo":null,"qualifier":{"classid":"alternative title","classname":"alternative title","schemeid":"dnet:dataCite_title","schemename":"dnet:dataCite_title"},"value":"XIV. Die wörter άγαλμα, είχών, ξόανον, ανδρuις und verwandte, in ihren verschiedenen beziehungen. Nach Pausanias"},{"dataInfo":null,"qualifier":{"classid":"main title","classname":"main title","schemeid":"dnet:dataCite_title","schemename":"dnet:dataCite_title"},"value":"gcube xiv die worter άγαλμα eίχών ξόανον ανδρuις und verwandte in ihren verschiedenen beziehungen nach pausanias"}],"journal":{"conferencedate":null,"conferenceplace":null,"dataInfo":null,"edition":null,"ep":null,"iss":null,"issnLinking":null,"issnOnline":"2196-7008","issnPrinted":"0031-7985","name":"Philologus","sp":null,"vol":"24"}} +{"author":[{"affiliation":[],"fullname":"van Someren, Christian","name":"Christian","pid":[],"rank":1,"surname":"van Someren"}],"bestaccessright":{"classid":"RESTRICTED","classname":"Restricted","schemeid":"dnet:access_modes","schemename":"dnet:access_modes"},"collectedfrom":[{"dataInfo":null,"key":"10|openaire____::c6df70599aa984f16ee52b4b86d2e89f","value":"NARCIS"}],"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":[{"classid": "NL", "classname": "DE", "schemeid": "dnet:countries", "schemename": "dnet:countries","dataInfo":{"deletedbyinference":false,"inferenceprovenance":"propagation","inferred":false,"invisible":false,"provenanceaction":{"classid":"sysimport:crosswalk:datasetarchive","classname":"sysimport:crosswalk:datasetarchive","schemeid":"dnet:provenanceActions","schemename":"dnet:provenanceActions"},"trust":"0.9"}}],"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":"2016-11-01"},"dateofcollection":"","dateoftransformation":"2020-05-25T17:55:32.27Z","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":"Over het Energieakkoord. In het energieakkoord voor duurzame groei is afgesproken dat in 2020 14 procent van de opwek hernieuwbaar moet zijn en in 2023 16 procent. De doelstelling is een uitdagende opgave waarbij de eerste vraag is: \"Hoeveel hernieuwbare energie wordt er op dit moment opgewekt in Nederland?\" Deze website geeft antwoord op de vraag voor de actueel opgewekte windenergie, zonne-energie en biogas."}],"embargoenddate":null,"externalReference":[],"extraInfo":[],"format":[],"fulltext":[],"id":"50|DansKnawCris::3c81248c335f0aa07e06817ece6fa6ag","instance":[{"accessright":{"classid":"RESTRICTED","classname":"Restricted","schemeid":"dnet:access_modes","schemename":"dnet:access_modes"},"collectedfrom":{"dataInfo":null,"key":"10|openaire____::c6df70599aa984f16ee52b4b86d2e89f","value":"NARCIS"},"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-11-01"},"distributionlocation":"","hostedby":{"dataInfo":null,"key":"10|openaire____::c6df70599aa984f16ee52b4b86d2e89f","value":"DANS (Data Archiving and Networked Services)"},"instancetype":{"classid":"0038","classname":"Other literature type","schemeid":"dnet:publication_resource","schemename":"dnet:publication_resource"},"license":null,"processingchargeamount":null,"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":["http://energieopwek.nl/"]}],"language":{"classid":"nl","classname":"nl","schemeid":"dnet:languages","schemename":"dnet:languages"},"lastupdatetimestamp":1591282663379,"oaiprovenance":{"originDescription":{"altered":true,"baseURL":"http%3A%2F%2Fservices.nod.dans.knaw.nl%2Foa-cerif","datestamp":"2020-05-08T17:46:55Z","harvestDate":"2020-05-25T15:30:24.079Z","identifier":"oai:services.nod.dans.knaw.nl:Publications/hbo:oai:hbokennisbank.nl:hanzepure:oai:research.hanze.nl:publications/813a5dfa-4fd0-44c4-8cbf-310324dc724d","metadataNamespace":""}},"originalId":["DansKnawCris::3c81248c335f0aa07e06817ece6fa6af"],"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":"urn","schemeid":"dnet:pid_types","schemename":"dnet:pid_types"},"value":"10.17632/daMendeley"},{"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":"urn:nbn:nl:hs:18-813a5dfa-4fd0-44c4-8cbf-310324dc724d"}],"publisher":null,"relevantdate":[],"resourcetype":{"classid":"0038","classname":"0038","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":"energieproductie"},{"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":"Management"},{"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":"Monitoring"},{"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":"Policy and Law"},{"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":"Energie interventies en gedrag"},{"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":"publieke ondersteuning en communicatie"},{"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":"Professional practice & society"}],"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":"subtitle","classname":"subtitle","schemeid":"dnet:dataCite_title","schemename":"dnet:dataCite_title"},"value":"GCUBE opwek"}],"journal":null} From 7dbdd4a0fe9832273790a777b7bc54895b35df93 Mon Sep 17 00:00:00 2001 From: "miriam.baglioni" Date: Wed, 10 Aug 2022 15:13:10 +0200 Subject: [PATCH 193/535] [Clean Country]changes related to https://code-repo.d4science.org/D-Net/dnet-hadoop/pulls/241#issuecomment-6766 --- .../dhp/oa/graph/clean/country/CleanCountrySparkJob.java | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/dhp-workflows/dhp-graph-mapper/src/main/java/eu/dnetlib/dhp/oa/graph/clean/country/CleanCountrySparkJob.java b/dhp-workflows/dhp-graph-mapper/src/main/java/eu/dnetlib/dhp/oa/graph/clean/country/CleanCountrySparkJob.java index 3ba84a317..30991e9d7 100644 --- a/dhp-workflows/dhp-graph-mapper/src/main/java/eu/dnetlib/dhp/oa/graph/clean/country/CleanCountrySparkJob.java +++ b/dhp-workflows/dhp-graph-mapper/src/main/java/eu/dnetlib/dhp/oa/graph/clean/country/CleanCountrySparkJob.java @@ -10,6 +10,7 @@ import java.util.stream.Collectors; import javax.swing.text.html.Option; +import eu.dnetlib.dhp.schema.oaf.utils.PidType; import org.apache.commons.io.IOUtils; import org.apache.spark.SparkConf; import org.apache.spark.api.java.function.FilterFunction; @@ -94,7 +95,6 @@ public class CleanCountrySparkJob implements Serializable { List hostedBy = spark .read() .textFile(datasourcePath) - // .filter((FilterFunction) ds -> !ds.equals(collectedfrom)) .collectAsList(); Dataset res = spark @@ -113,7 +113,8 @@ public class CleanCountrySparkJob implements Serializable { if (r .getPid() .stream() - .anyMatch(p -> p.getQualifier().getClassid().equals("doi") && pidInParam(p.getValue(), verifyParam))) { + .anyMatch(p -> p.getQualifier().getClassid() + .equals(PidType.doi) && pidInParam(p.getValue(), verifyParam))) { r .setCountry( r From 5240ac3d7bdfeba3ce7f5bb2bbacab7fa8c84641 Mon Sep 17 00:00:00 2001 From: "miriam.baglioni" Date: Mon, 19 Sep 2022 11:02:18 +0200 Subject: [PATCH 194/535] [EOSC Tag] remove addition of eosc context for result with eosc if guidelines set --- .../java/eu/dnetlib/dhp/bulktag/eosc/SparkEoscBulkTag.java | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/dhp-workflows/dhp-enrichment/src/main/java/eu/dnetlib/dhp/bulktag/eosc/SparkEoscBulkTag.java b/dhp-workflows/dhp-enrichment/src/main/java/eu/dnetlib/dhp/bulktag/eosc/SparkEoscBulkTag.java index 66e0c8af4..ed2d19253 100644 --- a/dhp-workflows/dhp-enrichment/src/main/java/eu/dnetlib/dhp/bulktag/eosc/SparkEoscBulkTag.java +++ b/dhp-workflows/dhp-enrichment/src/main/java/eu/dnetlib/dhp/bulktag/eosc/SparkEoscBulkTag.java @@ -121,8 +121,7 @@ public class SparkEoscBulkTag implements Serializable { .getInstance() .stream() .anyMatch( - i -> (hostedByList.contains(i.getHostedby().getKey())) || - (value.getEoscifguidelines() != null && value.getEoscifguidelines().size() > 0)) + i -> (hostedByList.contains(i.getHostedby().getKey())) ) && !value.getContext().stream().anyMatch(c -> c.getId().equals("eosc"))) { Context context = new Context(); From 26e1baddedc95ee93ba7577ef34b29e9b09940ed Mon Sep 17 00:00:00 2001 From: Claudio Atzori Date: Mon, 19 Sep 2022 11:19:10 +0200 Subject: [PATCH 195/535] added instance.url syntactical validation, avoid creating multiple duplicated URLs --- dhp-workflows/dhp-graph-mapper/pom.xml | 5 +++ .../raw/AbstractMdRecordToOafMapper.java | 15 +++++++ .../dhp/oa/graph/raw/OafToOafMapper.java | 35 +++++++++-------- .../dhp/oa/graph/raw/OdfToOafMapper.java | 39 ++++++++++++------- .../dnetlib/dhp/oa/graph/raw/MappersTest.java | 2 +- pom.xml | 6 +++ 6 files changed, 71 insertions(+), 31 deletions(-) diff --git a/dhp-workflows/dhp-graph-mapper/pom.xml b/dhp-workflows/dhp-graph-mapper/pom.xml index 687f0de66..f579a7d2b 100644 --- a/dhp-workflows/dhp-graph-mapper/pom.xml +++ b/dhp-workflows/dhp-graph-mapper/pom.xml @@ -57,6 +57,11 @@ commons-io + + commons-validator + commons-validator + + org.apache.spark spark-core_2.11 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 5cfb22cb9..a8d09e4a7 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 @@ -10,9 +10,13 @@ import static eu.dnetlib.dhp.schema.common.ModelConstants.RESULT_PROJECT; import static eu.dnetlib.dhp.schema.common.ModelConstants.UNKNOWN; import static eu.dnetlib.dhp.schema.oaf.utils.OafMapperUtils.*; +import java.net.MalformedURLException; +import java.net.URL; import java.util.*; +import java.util.stream.Collectors; import org.apache.commons.lang3.StringUtils; +import org.apache.commons.validator.routines.UrlValidator; import org.dom4j.*; import org.slf4j.Logger; import org.slf4j.LoggerFactory; @@ -617,4 +621,15 @@ public abstract class AbstractMdRecordToOafMapper { return res; } + protected Set validateUrl(Collection url) { + UrlValidator urlValidator = UrlValidator.getInstance(); + if (Objects.isNull(url)) { + return new HashSet<>(); + } + return url + .stream() + .filter(u -> urlValidator.isValid(u)) + .collect(Collectors.toCollection(HashSet::new)); + } + } 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 9225e174d..30f3935f5 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 @@ -159,22 +159,25 @@ public class OafToOafMapper extends AbstractMdRecordToOafMapper { .setProcessingchargecurrency(field(doc.valueOf("//oaf:processingchargeamount/@currency"), info)); final List nodes = Lists.newArrayList(doc.selectNodes("//dc:identifier")); - instance - .setUrl( - nodes - .stream() - .filter(n -> StringUtils.isNotBlank(n.getText())) - .map(n -> n.getText().trim()) - .filter(u -> u.startsWith("http")) - .map(s -> { - try { - return URLDecoder.decode(s, "UTF-8"); - } catch (Throwable t) { - return s; - } - }) - .distinct() - .collect(Collectors.toCollection(ArrayList::new))); + final List url = nodes + .stream() + .filter(n -> StringUtils.isNotBlank(n.getText())) + .map(n -> n.getText().trim()) + .filter(u -> u.startsWith("http")) + .map(s -> { + try { + return URLDecoder.decode(s, "UTF-8"); + } catch (Throwable t) { + return s; + } + }) + .distinct() + .collect(Collectors.toCollection(ArrayList::new)); + final Set validUrl = validateUrl(url); + if (!validUrl.isEmpty()) { + instance.setUrl(new ArrayList<>()); + instance.getUrl().addAll(validUrl); + } return Lists.newArrayList(instance); } 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 d6bfe6714..5781988e6 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 @@ -6,11 +6,14 @@ 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; @@ -171,23 +174,31 @@ public class OdfToOafMapper extends AbstractMdRecordToOafMapper { for (final Object o : doc.selectNodes("//*[local-name()='identifier' and ./@identifierType='landingPage']")) { url.add(trimAndDecodeUrl(((Node) o).getText().trim())); } - for (final Object o : doc - .selectNodes("//*[local-name()='alternateIdentifier' and ./@alternateIdentifierType='DOI']")) { - url.add(HTTP_DOI_PREIFX + ((Node) o).getText().trim()); + + Set validUrl = validateUrl(url); + + if (validUrl.stream().noneMatch(s -> s.contains("doi.org"))) { + for (final Object o : doc + .selectNodes("//*[local-name()='alternateIdentifier' and ./@alternateIdentifierType='DOI']")) { + validUrl.add(HTTP_DOI_PREIFX + ((Node) o).getText().trim()); + } + for (final Object o : doc.selectNodes("//*[local-name()='identifier' and ./@identifierType='DOI']")) { + validUrl.add(HTTP_DOI_PREIFX + ((Node) o).getText().trim()); + } } - for (final Object o : doc.selectNodes("//*[local-name()='identifier' and ./@identifierType='DOI']")) { - url.add(HTTP_DOI_PREIFX + ((Node) o).getText().trim()); + if (validUrl.stream().noneMatch(s -> s.contains("hdl.handle.net"))) { + for (final Object o : doc + .selectNodes("//*[local-name()='alternateIdentifier' and ./@alternateIdentifierType='Handle']")) { + validUrl.add(HTTP_HANDLE_PREIFX + ((Node) o).getText().trim()); + } + for (final Object o : doc.selectNodes("//*[local-name()='identifier' and ./@identifierType='Handle']")) { + validUrl.add(HTTP_HANDLE_PREIFX + ((Node) o).getText().trim()); + } } - for (final Object o : doc - .selectNodes("//*[local-name()='alternateIdentifier' and ./@alternateIdentifierType='Handle']")) { - url.add(HTTP_HANDLE_PREIFX + ((Node) o).getText().trim()); - } - for (final Object o : doc.selectNodes("//*[local-name()='identifier' and ./@identifierType='Handle']")) { - url.add(HTTP_HANDLE_PREIFX + ((Node) o).getText().trim()); - } - if (!url.isEmpty()) { + + if (!validUrl.isEmpty()) { instance.setUrl(new ArrayList<>()); - instance.getUrl().addAll(url); + instance.getUrl().addAll(validUrl); } return Arrays.asList(instance); } 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 231d5b0ac..64b68e6af 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 @@ -950,7 +950,7 @@ class MappersTest { @Test void testNotWellFormed() throws IOException { final String xml = IOUtils - .toString(Objects.requireNonNull(getClass().getResourceAsStream("oaf_notwellformed.xml"))); + .toString(Objects.requireNonNull(getClass().getResourceAsStream("oaf_notwellformed.xml"))); final List actual = new OafToOafMapper(vocs, false, true).processMdRecord(xml); assertNotNull(actual); assertTrue(actual.isEmpty()); diff --git a/pom.xml b/pom.xml index ab59e7be3..a1b26966e 100644 --- a/pom.xml +++ b/pom.xml @@ -200,6 +200,12 @@ ${dhp.commons.lang.version} + + commons-validator + commons-validator + 1.7 + + com.github.sisyphsu dateparser From c42850328e602bc59fa7f76bcdf452215404d7a2 Mon Sep 17 00:00:00 2001 From: Claudio Atzori Date: Thu, 22 Sep 2022 16:23:25 +0200 Subject: [PATCH 196/535] fixed semantic (subreltype) for ServiceOrganization relations --- .../dhp/oa/graph/raw/MigrateDbEntitiesApplication.java | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/dhp-workflows/dhp-graph-mapper/src/main/java/eu/dnetlib/dhp/oa/graph/raw/MigrateDbEntitiesApplication.java b/dhp-workflows/dhp-graph-mapper/src/main/java/eu/dnetlib/dhp/oa/graph/raw/MigrateDbEntitiesApplication.java index f40d3d19b..2b1c257ad 100644 --- a/dhp-workflows/dhp-graph-mapper/src/main/java/eu/dnetlib/dhp/oa/graph/raw/MigrateDbEntitiesApplication.java +++ b/dhp-workflows/dhp-graph-mapper/src/main/java/eu/dnetlib/dhp/oa/graph/raw/MigrateDbEntitiesApplication.java @@ -417,12 +417,12 @@ public class MigrateDbEntitiesApplication extends AbstractMigrationApplication i final Relation r1 = OafMapperUtils .getRelation( - dsId, orgId, DATASOURCE_ORGANIZATION, PRODUCES, IS_PROVIDED_BY, collectedFrom, info, + dsId, orgId, DATASOURCE_ORGANIZATION, PROVISION, IS_PROVIDED_BY, collectedFrom, info, lastUpdateTimestamp); final Relation r2 = OafMapperUtils .getRelation( - orgId, dsId, DATASOURCE_ORGANIZATION, PRODUCES, PROVIDES, collectedFrom, info, lastUpdateTimestamp); + orgId, dsId, DATASOURCE_ORGANIZATION, PROVISION, PROVIDES, collectedFrom, info, lastUpdateTimestamp); return Arrays.asList(r1, r2); } catch (final Exception e) { From 960cb861a0ace5556213016942ca0b05039632ca Mon Sep 17 00:00:00 2001 From: "miriam.baglioni" Date: Fri, 23 Sep 2022 11:14:04 +0200 Subject: [PATCH 197/535] refactoring --- .../main/java/eu/dnetlib/dhp/bulktag/eosc/SparkEoscBulkTag.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/dhp-workflows/dhp-enrichment/src/main/java/eu/dnetlib/dhp/bulktag/eosc/SparkEoscBulkTag.java b/dhp-workflows/dhp-enrichment/src/main/java/eu/dnetlib/dhp/bulktag/eosc/SparkEoscBulkTag.java index ed2d19253..c4b2122b4 100644 --- a/dhp-workflows/dhp-enrichment/src/main/java/eu/dnetlib/dhp/bulktag/eosc/SparkEoscBulkTag.java +++ b/dhp-workflows/dhp-enrichment/src/main/java/eu/dnetlib/dhp/bulktag/eosc/SparkEoscBulkTag.java @@ -121,7 +121,7 @@ public class SparkEoscBulkTag implements Serializable { .getInstance() .stream() .anyMatch( - i -> (hostedByList.contains(i.getHostedby().getKey())) ) + i -> (hostedByList.contains(i.getHostedby().getKey()))) && !value.getContext().stream().anyMatch(c -> c.getId().equals("eosc"))) { Context context = new Context(); From 982bcc1e3535e15dcaeca2cd14551d216e9356c8 Mon Sep 17 00:00:00 2001 From: Alessia Bardi Date: Fri, 23 Sep 2022 12:06:06 +0200 Subject: [PATCH 198/535] test wrid pid and record identifier --- .../dhp/oa/graph/raw/OdfToOafMapper.java | 33 +++++++++++++++++++ .../dnetlib/dhp/oa/graph/raw/MappersTest.java | 13 ++++++-- pom.xml | 2 +- 3 files changed, 44 insertions(+), 4 deletions(-) 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 5781988e6..7d615a1f0 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 @@ -391,6 +391,39 @@ public class OdfToOafMapper extends AbstractMdRecordToOafMapper { final String docId = entity.getId(); final List res = new ArrayList<>(); + /* + /* + + https://w3id.org/ro-id/13c54585-362e-4925-a785-08afb591fa0d/resources/b4be0f3e-41d7-471f-b34e-f0bd54ff5698 + https://w3id.org/ro-id/13c54585-362e-4925-a785-08afb591fa0d/resources/5d6e575b-ef84-417a-9d76-61c6702f7cb2 + https://w3id.org/ro-id/13c54585-362e-4925-a785-08afb591fa0d/resources/35e01545-8c6d-49bd-ab98-5c152df69934 + + We could extend it to create the relationships targeting w3id, dois, pmcids and other pid types for which we know how to build the target openaire identifier "blindly". + + + + for (final Object o : doc + .selectNodes("//*[local-name()='relatedIdentifier']")) { + + final String originalId = ((Node) o).getText(); + + if (StringUtils.isNotBlank(originalId)) { + final String otherId = createOpenaireId(50, originalId, false); + final String type = ((Node) o).valueOf("@relationType"); + switch(type){ + case IS_SUPPLEMENT_TO: + break; + case SUPPLEMENT: + break; + case IS_PART_OF: + break; + case HAS_PART: + break; + + + } + + */ for (final Object o : doc .selectNodes("//*[local-name()='relatedIdentifier' and ./@relatedIdentifierType='OPENAIRE']")) { 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 64b68e6af..b163ecff3 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 @@ -912,13 +912,13 @@ class MappersTest { } @Test - void testROHub() throws IOException, DocumentException { + void testROHub() throws IOException { final String xml = IOUtils.toString(Objects.requireNonNull(getClass().getResourceAsStream("rohub.xml"))); final List list = new OdfToOafMapper(vocs, false, true).processMdRecord(xml); System.out.println("***************"); System.out.println(new ObjectMapper().writeValueAsString(list)); System.out.println("***************"); -// final Dataset p = (Dataset) list.get(0); +// final OtherResearchProduct p = (OtherResearchProduct) list.get(0); // assertValidId(p.getId()); // assertValidId(p.getCollectedfrom().get(0).getKey()); // System.out.println(p.getTitle().get(0).getValue()); @@ -926,13 +926,20 @@ class MappersTest { } @Test - void testROHub2() throws IOException, DocumentException { + void testROHub2() throws IOException { final String xml = IOUtils .toString(Objects.requireNonNull(getClass().getResourceAsStream("rohub-modified.xml"))); final List list = new OdfToOafMapper(vocs, false, true).processMdRecord(xml); System.out.println("***************"); System.out.println(new ObjectMapper().writeValueAsString(list)); System.out.println("***************"); + final OtherResearchProduct p = (OtherResearchProduct) list.get(0); + assertValidId(p.getId()); + assertValidId(p.getCollectedfrom().get(0).getKey()); + assertEquals("50|w3id________::afc7592914ae190a50570db90f55f9c2", p.getId()); + assertTrue(StringUtils.isNotBlank(p.getTitle().get(0).getValue())); + assertEquals("w3id", (p.getPid().get(0).getQualifier().getClassid())); + assertEquals("https://w3id.org/ro-id/0ab171a7-45c5-4194-82d4-850955504bca", (p.getPid().get(0).getValue())); } @Test diff --git a/pom.xml b/pom.xml index a1b26966e..55265bf55 100644 --- a/pom.xml +++ b/pom.xml @@ -807,7 +807,7 @@ 3.3.3 3.4.2 [2.12,3.0) - [3.14.0] + [3.14.0-SNAPSHOT] [4.0.3] [6.0.5] [3.1.6] From ba33ff71fdc9eaf142d329ae5430e6ef8f81474b Mon Sep 17 00:00:00 2001 From: Alessia Bardi Date: Fri, 23 Sep 2022 15:17:13 +0200 Subject: [PATCH 199/535] refactoring for the generation of relationships from related identifier of type 'OPENAIRE' --- .../raw/MigrateDbEntitiesApplication.java | 3 +- .../dhp/oa/graph/raw/OdfToOafMapper.java | 117 +++++++++--------- .../dnetlib/dhp/oa/graph/raw/MappersTest.java | 1 + .../dhp/oa/graph/raw/rohub-modified.xml | 3 + 4 files changed, 66 insertions(+), 58 deletions(-) diff --git a/dhp-workflows/dhp-graph-mapper/src/main/java/eu/dnetlib/dhp/oa/graph/raw/MigrateDbEntitiesApplication.java b/dhp-workflows/dhp-graph-mapper/src/main/java/eu/dnetlib/dhp/oa/graph/raw/MigrateDbEntitiesApplication.java index 2b1c257ad..c69a7a6ff 100644 --- a/dhp-workflows/dhp-graph-mapper/src/main/java/eu/dnetlib/dhp/oa/graph/raw/MigrateDbEntitiesApplication.java +++ b/dhp-workflows/dhp-graph-mapper/src/main/java/eu/dnetlib/dhp/oa/graph/raw/MigrateDbEntitiesApplication.java @@ -422,7 +422,8 @@ public class MigrateDbEntitiesApplication extends AbstractMigrationApplication i final Relation r2 = OafMapperUtils .getRelation( - orgId, dsId, DATASOURCE_ORGANIZATION, PROVISION, PROVIDES, collectedFrom, info, lastUpdateTimestamp); + orgId, dsId, DATASOURCE_ORGANIZATION, PROVISION, PROVIDES, collectedFrom, info, + lastUpdateTimestamp); return Arrays.asList(r1, r2); } catch (final Exception e) { 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 7d615a1f0..fc063a242 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 @@ -25,6 +25,7 @@ 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.PidType; public class OdfToOafMapper extends AbstractMdRecordToOafMapper { @@ -391,75 +392,77 @@ public class OdfToOafMapper extends AbstractMdRecordToOafMapper { final String docId = entity.getId(); final List res = new ArrayList<>(); - /* - /* - - https://w3id.org/ro-id/13c54585-362e-4925-a785-08afb591fa0d/resources/b4be0f3e-41d7-471f-b34e-f0bd54ff5698 - https://w3id.org/ro-id/13c54585-362e-4925-a785-08afb591fa0d/resources/5d6e575b-ef84-417a-9d76-61c6702f7cb2 - https://w3id.org/ro-id/13c54585-362e-4925-a785-08afb591fa0d/resources/35e01545-8c6d-49bd-ab98-5c152df69934 - - We could extend it to create the relationships targeting w3id, dois, pmcids and other pid types for which we know how to build the target openaire identifier "blindly". - - for (final Object o : doc - .selectNodes("//*[local-name()='relatedIdentifier']")) { + .selectNodes("//*[local-name()='relatedIdentifier']")) { - final String originalId = ((Node) o).getText(); + final String originalId = ((Node) o).getText().trim(); if (StringUtils.isNotBlank(originalId)) { - final String otherId = createOpenaireId(50, originalId, false); - final String type = ((Node) o).valueOf("@relationType"); - switch(type){ - case IS_SUPPLEMENT_TO: - break; - case SUPPLEMENT: - break; - case IS_PART_OF: - break; - case HAS_PART: - break; + final String idType = ((Node) o).valueOf("@relatedIdentifierType"); + final String reltype = ((Node) o).valueOf("@relationType"); + String otherId = guessRelatedIdentifier(idType, originalId); + if (StringUtils.isNotBlank(otherId)) { + if (reltype.equalsIgnoreCase(IS_SUPPLEMENT_TO)) { + res + .add( + getRelation( + docId, otherId, RESULT_RESULT, SUPPLEMENT, IS_SUPPLEMENT_TO, entity)); + res + .add( + getRelation( + otherId, docId, RESULT_RESULT, SUPPLEMENT, IS_SUPPLEMENTED_BY, entity)); + } else { + if (reltype.equalsIgnoreCase(IS_SUPPLEMENTED_BY)) { + res + .add( + getRelation( + otherId, docId, RESULT_RESULT, SUPPLEMENT, IS_SUPPLEMENT_TO, entity)); + res + .add( + getRelation( + docId, otherId, RESULT_RESULT, SUPPLEMENT, IS_SUPPLEMENTED_BY, entity)); + } else { + if (reltype.equalsIgnoreCase(IS_PART_OF)) { + res + .add( + getRelation( + docId, otherId, RESULT_RESULT, PART, IS_PART_OF, entity)); + res + .add( + getRelation( + otherId, docId, RESULT_RESULT, PART, HAS_PART, entity)); + } else { + if (reltype.equalsIgnoreCase(HAS_PART)) { + res + .add( + getRelation( + otherId, docId, RESULT_RESULT, PART, IS_PART_OF, entity)); + res + .add( + getRelation( + docId, otherId, RESULT_RESULT, PART, HAS_PART, entity)); + } + // else TODO catch more semantics + } + } + } - - } - - */ - - for (final Object o : doc - .selectNodes("//*[local-name()='relatedIdentifier' and ./@relatedIdentifierType='OPENAIRE']")) { - - final String originalId = ((Node) o).getText(); - - if (StringUtils.isNotBlank(originalId)) { - final String otherId = createOpenaireId(50, originalId, false); - final String type = ((Node) o).valueOf("@relationType"); - - if (type.equalsIgnoreCase(IS_SUPPLEMENT_TO)) { - res - .add( - getRelation( - docId, otherId, RESULT_RESULT, SUPPLEMENT, IS_SUPPLEMENT_TO, entity)); - res - .add( - getRelation( - otherId, docId, RESULT_RESULT, SUPPLEMENT, IS_SUPPLEMENTED_BY, entity)); - } else if (type.equalsIgnoreCase(IS_PART_OF)) { - res - .add( - getRelation( - docId, otherId, RESULT_RESULT, PART, IS_PART_OF, entity)); - res - .add( - getRelation( - otherId, docId, RESULT_RESULT, PART, HAS_PART, entity)); - } else { - // TODO catch more semantics } } } return res; } + protected String guessRelatedIdentifier(final String idType, final String value) { + if (StringUtils.isBlank(idType) || StringUtils.isBlank(value)) + return null; + if (idType.equalsIgnoreCase("OPENAIRE")) { + return createOpenaireId(50, value, false); + } else + return null; + } + @Override protected Qualifier prepareResourceType(final Document doc, final DataInfo info) { return prepareQualifier( 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 b163ecff3..fbfbf5af8 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 @@ -933,6 +933,7 @@ class MappersTest { System.out.println("***************"); System.out.println(new ObjectMapper().writeValueAsString(list)); System.out.println("***************"); + assertEquals(3, list.size()); final OtherResearchProduct p = (OtherResearchProduct) list.get(0); assertValidId(p.getId()); assertValidId(p.getCollectedfrom().get(0).getKey()); diff --git a/dhp-workflows/dhp-graph-mapper/src/test/resources/eu/dnetlib/dhp/oa/graph/raw/rohub-modified.xml b/dhp-workflows/dhp-graph-mapper/src/test/resources/eu/dnetlib/dhp/oa/graph/raw/rohub-modified.xml index 95d65ac8d..ce846a2cf 100644 --- a/dhp-workflows/dhp-graph-mapper/src/test/resources/eu/dnetlib/dhp/oa/graph/raw/rohub-modified.xml +++ b/dhp-workflows/dhp-graph-mapper/src/test/resources/eu/dnetlib/dhp/oa/graph/raw/rohub-modified.xml @@ -30,6 +30,9 @@ https://w3id.org/ro-id/0ab171a7-45c5-4194-82d4-850955504bca/resources/6d3427a8-352e-49f4-9796-f618c44dc16d + + fsh_____4119::afc7592914ae190a50570db90f55f9c3 + RO-crate From c86cc53520216a7890cdfa0574187ce488ac27f6 Mon Sep 17 00:00:00 2001 From: Claudio Atzori Date: Fri, 23 Sep 2022 15:19:50 +0200 Subject: [PATCH 200/535] suppressing hyper verbose spark logs during unit test execution --- .../dhp-graph-mapper/src/test/resources/log4j.properties | 9 ++++++++- 1 file changed, 8 insertions(+), 1 deletion(-) diff --git a/dhp-workflows/dhp-graph-mapper/src/test/resources/log4j.properties b/dhp-workflows/dhp-graph-mapper/src/test/resources/log4j.properties index 71255bb77..d5604dc45 100644 --- a/dhp-workflows/dhp-graph-mapper/src/test/resources/log4j.properties +++ b/dhp-workflows/dhp-graph-mapper/src/test/resources/log4j.properties @@ -5,4 +5,11 @@ log4j.rootLogger=DEBUG, stdout log4j.appender.stdout=org.apache.log4j.ConsoleAppender log4j.appender.stdout.Target=System.out log4j.appender.stdout.layout=org.apache.log4j.PatternLayout -log4j.appender.stdout.layout.ConversionPattern=%d{yyyy-MM-dd HH:mm:ss} %-5p %c{1}:%L - %m%n \ No newline at end of file +log4j.appender.stdout.layout.ConversionPattern=%d{yyyy-MM-dd HH:mm:ss} %-5p %c{1}:%L - %m%n + +# Change this to set Spark log level +log4j.logger.org.apache.spark=WARN +# Silence akka remoting +log4j.logger.Remoting=WARN +# Ignore messages below warning level from Jetty, because it's a bit verbose +log4j.logger.org.eclipse.jetty=WARN \ No newline at end of file From c5eb72217047e15fea0b8d9f0c46fb4acdae45bc Mon Sep 17 00:00:00 2001 From: Alessia Bardi Date: Fri, 23 Sep 2022 15:47:05 +0200 Subject: [PATCH 201/535] relationships from relatedIdentifier whose target id type is one of the pid type with an authority --- .../raw/AbstractMdRecordToOafMapper.java | 1206 +++++++++-------- .../dhp/oa/graph/raw/OdfToOafMapper.java | 10 +- .../dnetlib/dhp/oa/graph/raw/MappersTest.java | 17 +- 3 files changed, 630 insertions(+), 603 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 a8d09e4a7..bb5472a88 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 @@ -15,6 +15,7 @@ import java.net.URL; import java.util.*; import java.util.stream.Collectors; +import eu.dnetlib.dhp.schema.oaf.utils.PidType; import org.apache.commons.lang3.StringUtils; import org.apache.commons.validator.routines.UrlValidator; import org.dom4j.*; @@ -33,603 +34,612 @@ import eu.dnetlib.dhp.schema.oaf.utils.OafMapperUtils; public abstract class AbstractMdRecordToOafMapper { - protected final VocabularyGroup vocs; - - private final boolean invisible; - - private final boolean shouldHashId; - - private final boolean forceOriginalId; - - protected static final String DATACITE_SCHEMA_KERNEL_4 = "http://datacite.org/schema/kernel-4"; - 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 Qualifier ORCID_PID_TYPE = qualifier( - ModelConstants.ORCID_PENDING, - ModelConstants.ORCID_CLASSNAME, - DNET_PID_TYPES, DNET_PID_TYPES); - protected static final Qualifier MAG_PID_TYPE = qualifier( - "MAGIdentifier", "Microsoft Academic Graph Identifier", DNET_PID_TYPES, DNET_PID_TYPES); - - protected static final String DEFAULT_TRUST_FOR_VALIDATED_RELS = "0.999"; - - protected static final Map nsContext = new HashMap<>(); - - private static final Logger log = LoggerFactory.getLogger(AbstractMdRecordToOafMapper.class); - - static { - nsContext.put("dr", "http://www.driver-repository.eu/namespace/dr"); - nsContext.put("dri", "http://www.driver-repository.eu/namespace/dri"); - nsContext.put("oaf", "http://namespace.openaire.eu/oaf"); - nsContext.put("oai", "http://www.openarchives.org/OAI/2.0/"); - nsContext.put("prov", "http://www.openarchives.org/OAI/2.0/provenance"); - nsContext.put("dc", "http://purl.org/dc/elements/1.1/"); - nsContext.put("datacite", DATACITE_SCHEMA_KERNEL_3); - } - - protected AbstractMdRecordToOafMapper(final VocabularyGroup vocs, final boolean invisible, - final boolean shouldHashId, final boolean forceOriginalId) { - this.vocs = vocs; - this.invisible = invisible; - this.shouldHashId = shouldHashId; - this.forceOriginalId = forceOriginalId; - } - - protected AbstractMdRecordToOafMapper(final VocabularyGroup vocs, final boolean invisible, - final boolean shouldHashId) { - this.vocs = vocs; - this.invisible = invisible; - this.shouldHashId = shouldHashId; - this.forceOriginalId = false; - } - - public List processMdRecord(final String xml) { - - DocumentFactory.getInstance().setXPathNamespaceURIs(nsContext); - try { - final Document doc = DocumentHelper - .parseText( - xml - .replaceAll(DATACITE_SCHEMA_KERNEL_4, DATACITE_SCHEMA_KERNEL_3) - .replaceAll(DATACITE_SCHEMA_KERNEL_4_SLASH, DATACITE_SCHEMA_KERNEL_3) - .replaceAll(DATACITE_SCHEMA_KERNEL_3_SLASH, DATACITE_SCHEMA_KERNEL_3)); - - final KeyValue collectedFrom = getProvenanceDatasource( - doc, "//oaf:collectedFrom/@id", "//oaf:collectedFrom/@name"); - - if (collectedFrom == null) { - return Lists.newArrayList(); - } - - final KeyValue hostedBy = StringUtils.isBlank(doc.valueOf("//oaf:hostedBy/@id")) - ? collectedFrom - : getProvenanceDatasource(doc, "//oaf:hostedBy/@id", "//oaf:hostedBy/@name"); - - if (hostedBy == null) { - return Lists.newArrayList(); - } - - final DataInfo info = prepareDataInfo(doc, invisible); - final long lastUpdateTimestamp = new Date().getTime(); - - final List instances = prepareInstances(doc, info, collectedFrom, hostedBy); - - final String type = getResultType(doc, instances); - - return createOafs(doc, type, instances, collectedFrom, info, lastUpdateTimestamp); - } catch (DocumentException e) { - log.error("Error with record:\n" + xml); - return Lists.newArrayList(); - } - } - - protected String getResultType(final Document doc, final List instances) { - final String type = doc.valueOf("//dr:CobjCategory/@type"); - - if (StringUtils.isBlank(type) && vocs.vocabularyExists(ModelConstants.DNET_RESULT_TYPOLOGIES)) { - final String instanceType = instances - .stream() - .map(i -> i.getInstancetype().getClassid()) - .findFirst() - .filter(s -> !UNKNOWN.equalsIgnoreCase(s)) - .orElse("0000"); // Unknown - return Optional - .ofNullable(vocs.getSynonymAsQualifier(ModelConstants.DNET_RESULT_TYPOLOGIES, instanceType)) - .map(Qualifier::getClassid) - .orElse("0000"); - } - - return type; - } - - private KeyValue getProvenanceDatasource(final Document doc, final String xpathId, final String xpathName) { - final String dsId = doc.valueOf(xpathId); - final String dsName = doc.valueOf(xpathName); - - if (StringUtils.isBlank(dsId) || StringUtils.isBlank(dsName)) { - return null; - } - - return keyValue(createOpenaireId(10, dsId, true), dsName); - } - - protected List createOafs( - final Document doc, - final String type, - final List instances, - final KeyValue collectedFrom, - final DataInfo info, - final long lastUpdateTimestamp) { - - final OafEntity entity = createEntity(doc, type, instances, collectedFrom, info, lastUpdateTimestamp); - - final Set originalId = Sets.newHashSet(entity.getOriginalId()); - originalId.add(entity.getId()); - entity.setOriginalId(Lists.newArrayList(originalId)); - - if (!forceOriginalId) { - final String id = IdentifierFactory.createIdentifier(entity, shouldHashId); - if (!id.equals(entity.getId())) { - entity.setId(id); - } - } - - final List oafs = Lists.newArrayList(entity); - - if (!oafs.isEmpty()) { - Set rels = Sets.newHashSet(); - - rels.addAll(addProjectRels(doc, entity)); - rels.addAll(addOtherResultRels(doc, entity)); - rels.addAll(addRelations(doc, entity)); - - oafs.addAll(rels); - } - - return oafs; - } - - private OafEntity createEntity(final Document doc, - final String type, - final List instances, - final KeyValue collectedFrom, - final DataInfo info, - final long lastUpdateTimestamp) { - switch (type.toLowerCase()) { - case "publication": - final Publication p = new Publication(); - populateResultFields(p, 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); - d.setStoragedate(prepareDatasetStorageDate(doc, info)); - d.setDevice(prepareDatasetDevice(doc, info)); - d.setSize(prepareDatasetSize(doc, info)); - d.setVersion(prepareDatasetVersion(doc, info)); - d.setLastmetadataupdate(prepareDatasetLastMetadataUpdate(doc, info)); - d.setMetadataversionnumber(prepareDatasetMetadataVersionNumber(doc, info)); - d.setGeolocation(prepareDatasetGeoLocations(doc, info)); - return d; - case "software": - final Software s = new Software(); - populateResultFields(s, doc, instances, collectedFrom, info, lastUpdateTimestamp); - s.setDocumentationUrl(prepareSoftwareDocumentationUrls(doc, info)); - s.setLicense(prepareSoftwareLicenses(doc, info)); - s.setCodeRepositoryUrl(prepareSoftwareCodeRepositoryUrl(doc, info)); - s.setProgrammingLanguage(prepareSoftwareProgrammingLanguage(doc, info)); - return s; - case "": - case "otherresearchproducts": - default: - final OtherResearchProduct o = new OtherResearchProduct(); - populateResultFields(o, doc, instances, collectedFrom, info, lastUpdateTimestamp); - o.setContactperson(prepareOtherResearchProductContactPersons(doc, info)); - o.setContactgroup(prepareOtherResearchProductContactGroups(doc, info)); - o.setTool(prepareOtherResearchProductTools(doc, info)); - return o; - } - } - - private List addProjectRels( - final Document doc, - final OafEntity entity) { - - final List res = new ArrayList<>(); - - final String docId = entity.getId(); - - for (final Object o : doc.selectNodes("//oaf:projectid")) { - - final String originalId = ((Node) o).getText(); - - final String validationdDate = ((Node) o).valueOf("@validationDate"); - - if (StringUtils.isNotBlank(originalId)) { - final String projectId = createOpenaireId(40, originalId, true); - - res - .add( - OafMapperUtils - .getRelation( - docId, projectId, RESULT_PROJECT, OUTCOME, IS_PRODUCED_BY, entity, validationdDate)); - res - .add( - OafMapperUtils - .getRelation(projectId, docId, RESULT_PROJECT, OUTCOME, PRODUCES, entity, validationdDate)); - } - } - - return res; - } - - private List addRelations(Document doc, OafEntity entity) { - - final List rels = Lists.newArrayList(); - - for (Object o : doc.selectNodes("//oaf:relation")) { - Element element = (Element) o; - - final String target = StringUtils.trim(element.getText()); - final String relType = element.attributeValue("relType"); - final String subRelType = element.attributeValue("subRelType"); - final String relClass = element.attributeValue("relClass"); - - if (StringUtils.isNotBlank(target) && StringUtils.isNotBlank(relType) && StringUtils.isNotBlank(subRelType) - && StringUtils.isNotBlank(relClass)) { - - final String relClassInverse = ModelSupport - .findInverse(ModelSupport.rel(relType, subRelType, relClass)) - .getInverseRelClass(); - final String validationdDate = ((Node) o).valueOf("@validationDate"); - - if (StringUtils.isNotBlank(target)) { - final String targetType = element.attributeValue("targetType"); - if (StringUtils.isNotBlank(targetType)) { - final String targetId = createOpenaireId(targetType, target, true); - rels - .add( - OafMapperUtils - .getRelation( - entity.getId(), targetId, relType, subRelType, relClass, entity, - validationdDate)); - rels - .add( - OafMapperUtils - .getRelation( - targetId, entity.getId(), relType, subRelType, relClassInverse, entity, - validationdDate)); - } - } - } - } - return rels; - } - - protected abstract List addOtherResultRels( - final Document doc, - final OafEntity entity); - - private void populateResultFields( - final Result r, - final Document doc, - final List instances, - final KeyValue collectedFrom, - final DataInfo info, - final long lastUpdateTimestamp) { - r.setDataInfo(info); - r.setLastupdatetimestamp(lastUpdateTimestamp); - r.setId(createOpenaireId(50, doc.valueOf("//dri:objIdentifier"), false)); - r.setOriginalId(findOriginalId(doc)); - r.setCollectedfrom(Arrays.asList(collectedFrom)); - r.setPid(IdentifierFactory.getPids(prepareResultPids(doc, info), collectedFrom)); - r.setDateofcollection(doc.valueOf("//dr:dateOfCollection/text()|//dri:dateOfCollection/text()")); - r.setDateoftransformation(doc.valueOf("//dr:dateOfTransformation/text()|//dri:dateOfTransformation/text()")); - r.setExtraInfo(new ArrayList<>()); // NOT PRESENT IN MDSTORES - r.setOaiprovenance(prepareOAIprovenance(doc)); - r.setAuthor(prepareAuthors(doc, info)); - r.setLanguage(prepareLanguages(doc)); - r.setCountry(new ArrayList<>()); // NOT PRESENT IN MDSTORES - r.setSubject(prepareSubjects(doc, info)); - r.setTitle(prepareTitles(doc, info)); - r.setRelevantdate(prepareRelevantDates(doc, info)); - r.setDescription(prepareDescriptions(doc, info)); - r.setDateofacceptance(prepareField(doc, "//oaf:dateAccepted", info)); - r.setPublisher(preparePublisher(doc, info)); - r.setEmbargoenddate(prepareField(doc, "//oaf:embargoenddate", info)); - r.setSource(prepareSources(doc, info)); - r.setFulltext(prepareListFields(doc, "//oaf:fulltext", info)); - r.setFormat(prepareFormats(doc, info)); - r.setContributor(prepareContributors(doc, info)); - r.setResourcetype(prepareResourceType(doc, info)); - r.setCoverage(prepareCoverages(doc, info)); - r.setContext(prepareContexts(doc, info)); - r.setExternalReference(new ArrayList<>()); // NOT PRESENT IN MDSTORES - r - .setProcessingchargeamount(field(doc.valueOf("//oaf:processingchargeamount"), info)); - r - .setProcessingchargecurrency(field(doc.valueOf("//oaf:processingchargeamount/@currency"), info)); - - r.setInstance(instances); - r.setBestaccessright(OafMapperUtils.createBestAccessRights(instances)); - } - - protected abstract List prepareResultPids(Document doc, DataInfo info); - - private List prepareContexts(final Document doc, final DataInfo info) { - final List list = new ArrayList<>(); - for (final Object o : doc.selectNodes("//oaf:concept")) { - final String cid = ((Node) o).valueOf("@id"); - if (StringUtils.isNotBlank(cid)) { - final Context c = new Context(); - c.setId(cid); - c.setDataInfo(Arrays.asList(info)); - list.add(c); - } - } - return list; - } - - protected abstract Qualifier prepareResourceType(Document doc, DataInfo info); - - protected abstract List prepareInstances( - Document doc, - DataInfo info, - KeyValue collectedfrom, - KeyValue hostedby); - - protected abstract List> prepareSources(Document doc, DataInfo info); - - protected abstract List prepareRelevantDates(Document doc, DataInfo info); - - protected abstract List> prepareCoverages(Document doc, DataInfo info); - - protected abstract List> prepareContributors(Document doc, DataInfo info); - - protected abstract List> prepareFormats(Document doc, DataInfo info); - - protected abstract Field preparePublisher(Document doc, DataInfo info); - - protected abstract List> prepareDescriptions(Document doc, DataInfo info); - - protected abstract List prepareTitles(Document doc, DataInfo info); - - protected abstract List prepareSubjects(Document doc, DataInfo info); - - protected abstract Qualifier prepareLanguages(Document doc); - - protected abstract List prepareAuthors(Document doc, DataInfo info); - - protected abstract List> prepareOtherResearchProductTools( - Document doc, - DataInfo info); - - protected abstract List> prepareOtherResearchProductContactGroups( - Document doc, - DataInfo info); - - protected abstract List> prepareOtherResearchProductContactPersons( - Document doc, - DataInfo info); - - protected abstract Qualifier prepareSoftwareProgrammingLanguage(Document doc, DataInfo info); - - protected abstract Field prepareSoftwareCodeRepositoryUrl(Document doc, DataInfo info); - - protected abstract List prepareSoftwareLicenses(Document doc, DataInfo info); - - protected abstract List> prepareSoftwareDocumentationUrls( - Document doc, - DataInfo info); - - protected abstract List prepareDatasetGeoLocations(Document doc, DataInfo info); - - protected abstract Field prepareDatasetMetadataVersionNumber(Document doc, DataInfo info); - - protected abstract Field prepareDatasetLastMetadataUpdate(Document doc, DataInfo info); - - protected abstract Field prepareDatasetVersion(Document doc, DataInfo info); - - protected abstract Field prepareDatasetSize(Document doc, DataInfo info); - - protected abstract Field prepareDatasetDevice(Document doc, DataInfo info); - - protected abstract Field prepareDatasetStorageDate(Document doc, DataInfo info); - - private Journal prepareJournal(final Document doc, final DataInfo info) { - final Node n = doc.selectSingleNode("//oaf:journal"); - if (n != null) { - final String name = n.getText(); - final String issnPrinted = n.valueOf("@issn"); - final String issnOnline = n.valueOf("@eissn"); - final String issnLinking = n.valueOf("@lissn"); - final String ep = n.valueOf("@ep"); - final String iss = n.valueOf("@iss"); - final String sp = n.valueOf("@sp"); - final String vol = n.valueOf("@vol"); - final String edition = n.valueOf("@edition"); - if (StringUtils.isNotBlank(name)) { - return journal(name, issnPrinted, issnOnline, issnLinking, ep, iss, sp, vol, edition, null, null, info); - } - } - return null; - } - - private List findOriginalId(final Document doc) { - final Node n = doc.selectSingleNode("//*[local-name()='provenance']/*[local-name()='originDescription']"); - if (n != null) { - final String id = n.valueOf("./*[local-name()='identifier']"); - if (StringUtils.isNotBlank(id)) { - return Lists.newArrayList(id); - } - } - final List idList = doc - .selectNodes( - "normalize-space(//*[local-name()='header']/*[local-name()='identifier' or local-name()='recordIdentifier']/text())"); - final Set originalIds = Sets.newHashSet(idList); - - if (originalIds.isEmpty()) { - throw new IllegalStateException("missing originalID on " + doc.asXML()); - } - return Lists.newArrayList(originalIds); - } - - protected AccessRight prepareAccessRight(final Node node, final String xpath, final String schemeId) { - final Qualifier qualifier = prepareQualifier(node.valueOf(xpath).trim(), schemeId); - final AccessRight accessRight = new AccessRight(); - accessRight.setClassid(qualifier.getClassid()); - accessRight.setClassname(qualifier.getClassname()); - accessRight.setSchemeid(qualifier.getSchemeid()); - accessRight.setSchemename(qualifier.getSchemename()); - - // TODO set the OAStatus - - return accessRight; - } - - protected Qualifier prepareQualifier(final Node node, final String xpath, final String schemeId) { - return prepareQualifier(node.valueOf(xpath).trim(), schemeId); - } - - protected Qualifier prepareQualifier(final String classId, final String schemeId) { - return vocs.getTermAsQualifier(schemeId, classId); - } - - protected List prepareListStructPropsWithValidQualifier( - final Node node, - final String xpath, - final String xpathClassId, - final String schemeId, - final DataInfo info) { - final List res = new ArrayList<>(); - - for (final Object o : node.selectNodes(xpath)) { - final Node n = (Node) o; - final String classId = n.valueOf(xpathClassId).trim(); - if (vocs.termExists(schemeId, classId)) { - res.add(structuredProperty(n.getText(), vocs.getTermAsQualifier(schemeId, classId), info)); - } - } - return res; - } - - protected List prepareListStructProps( - final Node node, - final String xpath, - final Qualifier qualifier, - final DataInfo info) { - final List res = new ArrayList<>(); - for (final Object o : node.selectNodes(xpath)) { - final Node n = (Node) o; - res.add(structuredProperty(n.getText(), qualifier, info)); - } - return res; - } - - protected List prepareListStructProps( - final Node node, - final String xpath, - final DataInfo info) { - final List res = new ArrayList<>(); - for (final Object o : node.selectNodes(xpath)) { - final Node n = (Node) o; - res - .add( - structuredProperty( - n.getText(), n.valueOf("@classid"), n.valueOf("@classname"), n.valueOf("@schemeid"), - n.valueOf("@schemename"), info)); - } - return res; - } - - protected List prepareSubjectList( - final Node node, - final String xpath, - final DataInfo info) { - final List res = new ArrayList<>(); - for (final Object o : node.selectNodes(xpath)) { - final Node n = (Node) o; - res - .add( - subject( - n.getText(), n.valueOf("@classid"), n.valueOf("@classname"), n.valueOf("@schemeid"), - n.valueOf("@schemename"), info)); - } - return res; - } - - protected OAIProvenance prepareOAIprovenance(final Document doc) { - final Node n = doc.selectSingleNode("//*[local-name()='provenance']/*[local-name()='originDescription']"); - - if (n == null) { - return null; - } - - final String identifier = n.valueOf("./*[local-name()='identifier']"); - final String baseURL = n.valueOf("./*[local-name()='baseURL']"); - final String metadataNamespace = n.valueOf("./*[local-name()='metadataNamespace']"); - final boolean altered = n.valueOf("@altered").equalsIgnoreCase("true"); - final String datestamp = n.valueOf("./*[local-name()='datestamp']"); - final String harvestDate = n.valueOf("@harvestDate"); - - return oaiIProvenance(identifier, baseURL, metadataNamespace, altered, datestamp, harvestDate); - } - - protected DataInfo prepareDataInfo(final Document doc, final boolean invisible) { - final Node n = doc.selectSingleNode("//oaf:datainfo"); - - if (n == null) { - return dataInfo(false, null, false, invisible, REPOSITORY_PROVENANCE_ACTIONS, "0.9"); - } - - final String paClassId = n.valueOf("./oaf:provenanceaction/@classid"); - final String paClassName = n.valueOf("./oaf:provenanceaction/@classname"); - final String paSchemeId = n.valueOf("./oaf:provenanceaction/@schemeid"); - final String paSchemeName = n.valueOf("./oaf:provenanceaction/@schemename"); - - final boolean deletedbyinference = Boolean.parseBoolean(n.valueOf("./oaf:deletedbyinference")); - final String inferenceprovenance = n.valueOf("./oaf:inferenceprovenance"); - final Boolean inferred = Boolean.parseBoolean(n.valueOf("./oaf:inferred")); - final String trust = n.valueOf("./oaf:trust"); - - return dataInfo( - deletedbyinference, inferenceprovenance, inferred, invisible, - qualifier(paClassId, paClassName, paSchemeId, paSchemeName), trust); - } - - protected Field prepareField(final Node node, final String xpath, final DataInfo info) { - return field(node.valueOf(xpath), info); - } - - protected List> prepareListFields( - final Node node, - final String xpath, - final DataInfo info) { - return listFields(info, prepareListString(node, xpath)); - } - - protected List prepareListString(final Node node, final String xpath) { - final List res = new ArrayList<>(); - for (final Object o : node.selectNodes(xpath)) { - final String s = ((Node) o).getText().trim(); - if (StringUtils.isNotBlank(s)) { - res.add(s); - } - } - return res; - } - - protected Set validateUrl(Collection url) { - UrlValidator urlValidator = UrlValidator.getInstance(); - if (Objects.isNull(url)) { - return new HashSet<>(); - } - return url - .stream() - .filter(u -> urlValidator.isValid(u)) - .collect(Collectors.toCollection(HashSet::new)); - } + protected final VocabularyGroup vocs; + + private final boolean invisible; + + private final boolean shouldHashId; + + private final boolean forceOriginalId; + + protected static final String DATACITE_SCHEMA_KERNEL_4 = "http://datacite.org/schema/kernel-4"; + 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 Qualifier ORCID_PID_TYPE = qualifier( + ModelConstants.ORCID_PENDING, + ModelConstants.ORCID_CLASSNAME, + DNET_PID_TYPES, DNET_PID_TYPES); + protected static final Qualifier MAG_PID_TYPE = qualifier( + "MAGIdentifier", "Microsoft Academic Graph Identifier", DNET_PID_TYPES, DNET_PID_TYPES); + + protected static final String DEFAULT_TRUST_FOR_VALIDATED_RELS = "0.999"; + + protected static final Map nsContext = new HashMap<>(); + + private static final Logger log = LoggerFactory.getLogger(AbstractMdRecordToOafMapper.class); + + static { + nsContext.put("dr", "http://www.driver-repository.eu/namespace/dr"); + nsContext.put("dri", "http://www.driver-repository.eu/namespace/dri"); + nsContext.put("oaf", "http://namespace.openaire.eu/oaf"); + nsContext.put("oai", "http://www.openarchives.org/OAI/2.0/"); + nsContext.put("prov", "http://www.openarchives.org/OAI/2.0/provenance"); + nsContext.put("dc", "http://purl.org/dc/elements/1.1/"); + nsContext.put("datacite", DATACITE_SCHEMA_KERNEL_3); + } + + protected static final Set pidTypeWithAuthority = new HashSet<>(); + + static { + pidTypeWithAuthority.addAll(IdentifierFactory.PID_AUTHORITY.keySet().stream() + .map(PidType::toString) + .map(String::toLowerCase) + .collect(Collectors.toCollection(HashSet::new))); + } + + protected AbstractMdRecordToOafMapper(final VocabularyGroup vocs, final boolean invisible, + final boolean shouldHashId, final boolean forceOriginalId) { + this.vocs = vocs; + this.invisible = invisible; + this.shouldHashId = shouldHashId; + this.forceOriginalId = forceOriginalId; + } + + protected AbstractMdRecordToOafMapper(final VocabularyGroup vocs, final boolean invisible, + final boolean shouldHashId) { + this.vocs = vocs; + this.invisible = invisible; + this.shouldHashId = shouldHashId; + this.forceOriginalId = false; + } + + public List processMdRecord(final String xml) { + + DocumentFactory.getInstance().setXPathNamespaceURIs(nsContext); + try { + final Document doc = DocumentHelper + .parseText( + xml + .replaceAll(DATACITE_SCHEMA_KERNEL_4, DATACITE_SCHEMA_KERNEL_3) + .replaceAll(DATACITE_SCHEMA_KERNEL_4_SLASH, DATACITE_SCHEMA_KERNEL_3) + .replaceAll(DATACITE_SCHEMA_KERNEL_3_SLASH, DATACITE_SCHEMA_KERNEL_3)); + + final KeyValue collectedFrom = getProvenanceDatasource( + doc, "//oaf:collectedFrom/@id", "//oaf:collectedFrom/@name"); + + if (collectedFrom == null) { + return Lists.newArrayList(); + } + + final KeyValue hostedBy = StringUtils.isBlank(doc.valueOf("//oaf:hostedBy/@id")) + ? collectedFrom + : getProvenanceDatasource(doc, "//oaf:hostedBy/@id", "//oaf:hostedBy/@name"); + + if (hostedBy == null) { + return Lists.newArrayList(); + } + + final DataInfo info = prepareDataInfo(doc, invisible); + final long lastUpdateTimestamp = new Date().getTime(); + + final List instances = prepareInstances(doc, info, collectedFrom, hostedBy); + + final String type = getResultType(doc, instances); + + return createOafs(doc, type, instances, collectedFrom, info, lastUpdateTimestamp); + } catch (DocumentException e) { + log.error("Error with record:\n" + xml); + return Lists.newArrayList(); + } + } + + protected String getResultType(final Document doc, final List instances) { + final String type = doc.valueOf("//dr:CobjCategory/@type"); + + if (StringUtils.isBlank(type) && vocs.vocabularyExists(ModelConstants.DNET_RESULT_TYPOLOGIES)) { + final String instanceType = instances + .stream() + .map(i -> i.getInstancetype().getClassid()) + .findFirst() + .filter(s -> !UNKNOWN.equalsIgnoreCase(s)) + .orElse("0000"); // Unknown + return Optional + .ofNullable(vocs.getSynonymAsQualifier(ModelConstants.DNET_RESULT_TYPOLOGIES, instanceType)) + .map(Qualifier::getClassid) + .orElse("0000"); + } + + return type; + } + + private KeyValue getProvenanceDatasource(final Document doc, final String xpathId, final String xpathName) { + final String dsId = doc.valueOf(xpathId); + final String dsName = doc.valueOf(xpathName); + + if (StringUtils.isBlank(dsId) || StringUtils.isBlank(dsName)) { + return null; + } + + return keyValue(createOpenaireId(10, dsId, true), dsName); + } + + protected List createOafs( + final Document doc, + final String type, + final List instances, + final KeyValue collectedFrom, + final DataInfo info, + final long lastUpdateTimestamp) { + + final OafEntity entity = createEntity(doc, type, instances, collectedFrom, info, lastUpdateTimestamp); + + final Set originalId = Sets.newHashSet(entity.getOriginalId()); + originalId.add(entity.getId()); + entity.setOriginalId(Lists.newArrayList(originalId)); + + if (!forceOriginalId) { + final String id = IdentifierFactory.createIdentifier(entity, shouldHashId); + if (!id.equals(entity.getId())) { + entity.setId(id); + } + } + + final List oafs = Lists.newArrayList(entity); + + if (!oafs.isEmpty()) { + Set rels = Sets.newHashSet(); + + rels.addAll(addProjectRels(doc, entity)); + rels.addAll(addOtherResultRels(doc, entity)); + rels.addAll(addRelations(doc, entity)); + + oafs.addAll(rels); + } + + return oafs; + } + + private OafEntity createEntity(final Document doc, + final String type, + final List instances, + final KeyValue collectedFrom, + final DataInfo info, + final long lastUpdateTimestamp) { + switch (type.toLowerCase()) { + case "publication": + final Publication p = new Publication(); + populateResultFields(p, 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); + d.setStoragedate(prepareDatasetStorageDate(doc, info)); + d.setDevice(prepareDatasetDevice(doc, info)); + d.setSize(prepareDatasetSize(doc, info)); + d.setVersion(prepareDatasetVersion(doc, info)); + d.setLastmetadataupdate(prepareDatasetLastMetadataUpdate(doc, info)); + d.setMetadataversionnumber(prepareDatasetMetadataVersionNumber(doc, info)); + d.setGeolocation(prepareDatasetGeoLocations(doc, info)); + return d; + case "software": + final Software s = new Software(); + populateResultFields(s, doc, instances, collectedFrom, info, lastUpdateTimestamp); + s.setDocumentationUrl(prepareSoftwareDocumentationUrls(doc, info)); + s.setLicense(prepareSoftwareLicenses(doc, info)); + s.setCodeRepositoryUrl(prepareSoftwareCodeRepositoryUrl(doc, info)); + s.setProgrammingLanguage(prepareSoftwareProgrammingLanguage(doc, info)); + return s; + case "": + case "otherresearchproducts": + default: + final OtherResearchProduct o = new OtherResearchProduct(); + populateResultFields(o, doc, instances, collectedFrom, info, lastUpdateTimestamp); + o.setContactperson(prepareOtherResearchProductContactPersons(doc, info)); + o.setContactgroup(prepareOtherResearchProductContactGroups(doc, info)); + o.setTool(prepareOtherResearchProductTools(doc, info)); + return o; + } + } + + private List addProjectRels( + final Document doc, + final OafEntity entity) { + + final List res = new ArrayList<>(); + + final String docId = entity.getId(); + + for (final Object o : doc.selectNodes("//oaf:projectid")) { + + final String originalId = ((Node) o).getText(); + + final String validationdDate = ((Node) o).valueOf("@validationDate"); + + if (StringUtils.isNotBlank(originalId)) { + final String projectId = createOpenaireId(40, originalId, true); + + res + .add( + OafMapperUtils + .getRelation( + docId, projectId, RESULT_PROJECT, OUTCOME, IS_PRODUCED_BY, entity, validationdDate)); + res + .add( + OafMapperUtils + .getRelation(projectId, docId, RESULT_PROJECT, OUTCOME, PRODUCES, entity, validationdDate)); + } + } + + return res; + } + + private List addRelations(Document doc, OafEntity entity) { + + final List rels = Lists.newArrayList(); + + for (Object o : doc.selectNodes("//oaf:relation")) { + Element element = (Element) o; + + final String target = StringUtils.trim(element.getText()); + final String relType = element.attributeValue("relType"); + final String subRelType = element.attributeValue("subRelType"); + final String relClass = element.attributeValue("relClass"); + + if (StringUtils.isNotBlank(target) && StringUtils.isNotBlank(relType) && StringUtils.isNotBlank(subRelType) + && StringUtils.isNotBlank(relClass)) { + + final String relClassInverse = ModelSupport + .findInverse(ModelSupport.rel(relType, subRelType, relClass)) + .getInverseRelClass(); + final String validationdDate = ((Node) o).valueOf("@validationDate"); + + if (StringUtils.isNotBlank(target)) { + final String targetType = element.attributeValue("targetType"); + if (StringUtils.isNotBlank(targetType)) { + final String targetId = createOpenaireId(targetType, target, true); + rels + .add( + OafMapperUtils + .getRelation( + entity.getId(), targetId, relType, subRelType, relClass, entity, + validationdDate)); + rels + .add( + OafMapperUtils + .getRelation( + targetId, entity.getId(), relType, subRelType, relClassInverse, entity, + validationdDate)); + } + } + } + } + return rels; + } + + protected abstract List addOtherResultRels( + final Document doc, + final OafEntity entity); + + private void populateResultFields( + final Result r, + final Document doc, + final List instances, + final KeyValue collectedFrom, + final DataInfo info, + final long lastUpdateTimestamp) { + r.setDataInfo(info); + r.setLastupdatetimestamp(lastUpdateTimestamp); + r.setId(createOpenaireId(50, doc.valueOf("//dri:objIdentifier"), false)); + r.setOriginalId(findOriginalId(doc)); + r.setCollectedfrom(Arrays.asList(collectedFrom)); + r.setPid(IdentifierFactory.getPids(prepareResultPids(doc, info), collectedFrom)); + r.setDateofcollection(doc.valueOf("//dr:dateOfCollection/text()|//dri:dateOfCollection/text()")); + r.setDateoftransformation(doc.valueOf("//dr:dateOfTransformation/text()|//dri:dateOfTransformation/text()")); + r.setExtraInfo(new ArrayList<>()); // NOT PRESENT IN MDSTORES + r.setOaiprovenance(prepareOAIprovenance(doc)); + r.setAuthor(prepareAuthors(doc, info)); + r.setLanguage(prepareLanguages(doc)); + r.setCountry(new ArrayList<>()); // NOT PRESENT IN MDSTORES + r.setSubject(prepareSubjects(doc, info)); + r.setTitle(prepareTitles(doc, info)); + r.setRelevantdate(prepareRelevantDates(doc, info)); + r.setDescription(prepareDescriptions(doc, info)); + r.setDateofacceptance(prepareField(doc, "//oaf:dateAccepted", info)); + r.setPublisher(preparePublisher(doc, info)); + r.setEmbargoenddate(prepareField(doc, "//oaf:embargoenddate", info)); + r.setSource(prepareSources(doc, info)); + r.setFulltext(prepareListFields(doc, "//oaf:fulltext", info)); + r.setFormat(prepareFormats(doc, info)); + r.setContributor(prepareContributors(doc, info)); + r.setResourcetype(prepareResourceType(doc, info)); + r.setCoverage(prepareCoverages(doc, info)); + r.setContext(prepareContexts(doc, info)); + r.setExternalReference(new ArrayList<>()); // NOT PRESENT IN MDSTORES + r + .setProcessingchargeamount(field(doc.valueOf("//oaf:processingchargeamount"), info)); + r + .setProcessingchargecurrency(field(doc.valueOf("//oaf:processingchargeamount/@currency"), info)); + + r.setInstance(instances); + r.setBestaccessright(OafMapperUtils.createBestAccessRights(instances)); + } + + protected abstract List prepareResultPids(Document doc, DataInfo info); + + private List prepareContexts(final Document doc, final DataInfo info) { + final List list = new ArrayList<>(); + for (final Object o : doc.selectNodes("//oaf:concept")) { + final String cid = ((Node) o).valueOf("@id"); + if (StringUtils.isNotBlank(cid)) { + final Context c = new Context(); + c.setId(cid); + c.setDataInfo(Arrays.asList(info)); + list.add(c); + } + } + return list; + } + + protected abstract Qualifier prepareResourceType(Document doc, DataInfo info); + + protected abstract List prepareInstances( + Document doc, + DataInfo info, + KeyValue collectedfrom, + KeyValue hostedby); + + protected abstract List> prepareSources(Document doc, DataInfo info); + + protected abstract List prepareRelevantDates(Document doc, DataInfo info); + + protected abstract List> prepareCoverages(Document doc, DataInfo info); + + protected abstract List> prepareContributors(Document doc, DataInfo info); + + protected abstract List> prepareFormats(Document doc, DataInfo info); + + protected abstract Field preparePublisher(Document doc, DataInfo info); + + protected abstract List> prepareDescriptions(Document doc, DataInfo info); + + protected abstract List prepareTitles(Document doc, DataInfo info); + + protected abstract List prepareSubjects(Document doc, DataInfo info); + + protected abstract Qualifier prepareLanguages(Document doc); + + protected abstract List prepareAuthors(Document doc, DataInfo info); + + protected abstract List> prepareOtherResearchProductTools( + Document doc, + DataInfo info); + + protected abstract List> prepareOtherResearchProductContactGroups( + Document doc, + DataInfo info); + + protected abstract List> prepareOtherResearchProductContactPersons( + Document doc, + DataInfo info); + + protected abstract Qualifier prepareSoftwareProgrammingLanguage(Document doc, DataInfo info); + + protected abstract Field prepareSoftwareCodeRepositoryUrl(Document doc, DataInfo info); + + protected abstract List prepareSoftwareLicenses(Document doc, DataInfo info); + + protected abstract List> prepareSoftwareDocumentationUrls( + Document doc, + DataInfo info); + + protected abstract List prepareDatasetGeoLocations(Document doc, DataInfo info); + + protected abstract Field prepareDatasetMetadataVersionNumber(Document doc, DataInfo info); + + protected abstract Field prepareDatasetLastMetadataUpdate(Document doc, DataInfo info); + + protected abstract Field prepareDatasetVersion(Document doc, DataInfo info); + + protected abstract Field prepareDatasetSize(Document doc, DataInfo info); + + protected abstract Field prepareDatasetDevice(Document doc, DataInfo info); + + protected abstract Field prepareDatasetStorageDate(Document doc, DataInfo info); + + private Journal prepareJournal(final Document doc, final DataInfo info) { + final Node n = doc.selectSingleNode("//oaf:journal"); + if (n != null) { + final String name = n.getText(); + final String issnPrinted = n.valueOf("@issn"); + final String issnOnline = n.valueOf("@eissn"); + final String issnLinking = n.valueOf("@lissn"); + final String ep = n.valueOf("@ep"); + final String iss = n.valueOf("@iss"); + final String sp = n.valueOf("@sp"); + final String vol = n.valueOf("@vol"); + final String edition = n.valueOf("@edition"); + if (StringUtils.isNotBlank(name)) { + return journal(name, issnPrinted, issnOnline, issnLinking, ep, iss, sp, vol, edition, null, null, info); + } + } + return null; + } + + private List findOriginalId(final Document doc) { + final Node n = doc.selectSingleNode("//*[local-name()='provenance']/*[local-name()='originDescription']"); + if (n != null) { + final String id = n.valueOf("./*[local-name()='identifier']"); + if (StringUtils.isNotBlank(id)) { + return Lists.newArrayList(id); + } + } + final List idList = doc + .selectNodes( + "normalize-space(//*[local-name()='header']/*[local-name()='identifier' or local-name()='recordIdentifier']/text())"); + final Set originalIds = Sets.newHashSet(idList); + + if (originalIds.isEmpty()) { + throw new IllegalStateException("missing originalID on " + doc.asXML()); + } + return Lists.newArrayList(originalIds); + } + + protected AccessRight prepareAccessRight(final Node node, final String xpath, final String schemeId) { + final Qualifier qualifier = prepareQualifier(node.valueOf(xpath).trim(), schemeId); + final AccessRight accessRight = new AccessRight(); + accessRight.setClassid(qualifier.getClassid()); + accessRight.setClassname(qualifier.getClassname()); + accessRight.setSchemeid(qualifier.getSchemeid()); + accessRight.setSchemename(qualifier.getSchemename()); + + // TODO set the OAStatus + + return accessRight; + } + + protected Qualifier prepareQualifier(final Node node, final String xpath, final String schemeId) { + return prepareQualifier(node.valueOf(xpath).trim(), schemeId); + } + + protected Qualifier prepareQualifier(final String classId, final String schemeId) { + return vocs.getTermAsQualifier(schemeId, classId); + } + + protected List prepareListStructPropsWithValidQualifier( + final Node node, + final String xpath, + final String xpathClassId, + final String schemeId, + final DataInfo info) { + final List res = new ArrayList<>(); + + for (final Object o : node.selectNodes(xpath)) { + final Node n = (Node) o; + final String classId = n.valueOf(xpathClassId).trim(); + if (vocs.termExists(schemeId, classId)) { + res.add(structuredProperty(n.getText(), vocs.getTermAsQualifier(schemeId, classId), info)); + } + } + return res; + } + + protected List prepareListStructProps( + final Node node, + final String xpath, + final Qualifier qualifier, + final DataInfo info) { + final List res = new ArrayList<>(); + for (final Object o : node.selectNodes(xpath)) { + final Node n = (Node) o; + res.add(structuredProperty(n.getText(), qualifier, info)); + } + return res; + } + + protected List prepareListStructProps( + final Node node, + final String xpath, + final DataInfo info) { + final List res = new ArrayList<>(); + for (final Object o : node.selectNodes(xpath)) { + final Node n = (Node) o; + res + .add( + structuredProperty( + n.getText(), n.valueOf("@classid"), n.valueOf("@classname"), n.valueOf("@schemeid"), + n.valueOf("@schemename"), info)); + } + return res; + } + + protected List prepareSubjectList( + final Node node, + final String xpath, + final DataInfo info) { + final List res = new ArrayList<>(); + for (final Object o : node.selectNodes(xpath)) { + final Node n = (Node) o; + res + .add( + subject( + n.getText(), n.valueOf("@classid"), n.valueOf("@classname"), n.valueOf("@schemeid"), + n.valueOf("@schemename"), info)); + } + return res; + } + + protected OAIProvenance prepareOAIprovenance(final Document doc) { + final Node n = doc.selectSingleNode("//*[local-name()='provenance']/*[local-name()='originDescription']"); + + if (n == null) { + return null; + } + + final String identifier = n.valueOf("./*[local-name()='identifier']"); + final String baseURL = n.valueOf("./*[local-name()='baseURL']"); + final String metadataNamespace = n.valueOf("./*[local-name()='metadataNamespace']"); + final boolean altered = n.valueOf("@altered").equalsIgnoreCase("true"); + final String datestamp = n.valueOf("./*[local-name()='datestamp']"); + final String harvestDate = n.valueOf("@harvestDate"); + + return oaiIProvenance(identifier, baseURL, metadataNamespace, altered, datestamp, harvestDate); + } + + protected DataInfo prepareDataInfo(final Document doc, final boolean invisible) { + final Node n = doc.selectSingleNode("//oaf:datainfo"); + + if (n == null) { + return dataInfo(false, null, false, invisible, REPOSITORY_PROVENANCE_ACTIONS, "0.9"); + } + + final String paClassId = n.valueOf("./oaf:provenanceaction/@classid"); + final String paClassName = n.valueOf("./oaf:provenanceaction/@classname"); + final String paSchemeId = n.valueOf("./oaf:provenanceaction/@schemeid"); + final String paSchemeName = n.valueOf("./oaf:provenanceaction/@schemename"); + + final boolean deletedbyinference = Boolean.parseBoolean(n.valueOf("./oaf:deletedbyinference")); + final String inferenceprovenance = n.valueOf("./oaf:inferenceprovenance"); + final Boolean inferred = Boolean.parseBoolean(n.valueOf("./oaf:inferred")); + final String trust = n.valueOf("./oaf:trust"); + + return dataInfo( + deletedbyinference, inferenceprovenance, inferred, invisible, + qualifier(paClassId, paClassName, paSchemeId, paSchemeName), trust); + } + + protected Field prepareField(final Node node, final String xpath, final DataInfo info) { + return field(node.valueOf(xpath), info); + } + + protected List> prepareListFields( + final Node node, + final String xpath, + final DataInfo info) { + return listFields(info, prepareListString(node, xpath)); + } + + protected List prepareListString(final Node node, final String xpath) { + final List res = new ArrayList<>(); + for (final Object o : node.selectNodes(xpath)) { + final String s = ((Node) o).getText().trim(); + if (StringUtils.isNotBlank(s)) { + res.add(s); + } + } + return res; + } + + protected Set validateUrl(Collection url) { + UrlValidator urlValidator = UrlValidator.getInstance(); + if (Objects.isNull(url)) { + return new HashSet<>(); + } + return url + .stream() + .filter(u -> urlValidator.isValid(u)) + .collect(Collectors.toCollection(HashSet::new)); + } } 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 fc063a242..304ec8f99 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 @@ -457,10 +457,12 @@ public class OdfToOafMapper extends AbstractMdRecordToOafMapper { protected String guessRelatedIdentifier(final String idType, final String value) { if (StringUtils.isBlank(idType) || StringUtils.isBlank(value)) return null; - if (idType.equalsIgnoreCase("OPENAIRE")) { - return createOpenaireId(50, value, false); - } else - return null; + if (idType.equalsIgnoreCase("OPENAIRE")) return createOpenaireId(50, value, false); + if(pidTypeWithAuthority.contains(idType.toLowerCase())){ + return IdentifierFactory.idFromPid("50", idType, value, true); + } + return null; + } @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 fbfbf5af8..32b23e42f 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 @@ -933,7 +933,7 @@ class MappersTest { System.out.println("***************"); System.out.println(new ObjectMapper().writeValueAsString(list)); System.out.println("***************"); - assertEquals(3, list.size()); + assertEquals(7, list.size()); final OtherResearchProduct p = (OtherResearchProduct) list.get(0); assertValidId(p.getId()); assertValidId(p.getCollectedfrom().get(0).getKey()); @@ -941,6 +941,21 @@ class MappersTest { assertTrue(StringUtils.isNotBlank(p.getTitle().get(0).getValue())); assertEquals("w3id", (p.getPid().get(0).getQualifier().getClassid())); assertEquals("https://w3id.org/ro-id/0ab171a7-45c5-4194-82d4-850955504bca", (p.getPid().get(0).getValue())); + + assertEquals(1, list.stream().filter(o -> o instanceof OtherResearchProduct).count()); + assertEquals(6, list.stream().filter(o -> o instanceof Relation).count()); + + for(Oaf oaf : list){ + if(oaf instanceof Relation){ + String source = ((Relation) oaf).getSource(); + String target = ((Relation) oaf).getTarget(); + assertNotEquals(source, target); + assertTrue(source.equals(p.getId()) || target.equals(p.getId())); + assertNotNull(((Relation) oaf).getSubRelType()); + assertNotNull( ((Relation) oaf).getRelClass()); + assertNotNull(((Relation) oaf).getRelType()); + } + } } @Test From 55da4d871509f5f1e71c5939298d49eac9d9d92b Mon Sep 17 00:00:00 2001 From: "miriam.baglioni" Date: Fri, 23 Sep 2022 16:02:19 +0200 Subject: [PATCH 202/535] [BulkTagging] modifying code to represent constraints horizontally on all the results. Added subject to the set of field used to express the constraint. Modified resorces to test the new approach. Modified test calss --- .../dhp/bulktag/community/Community.java | 10 ++ .../community/CommunityConfiguration.java | 14 +++ .../CommunityConfigurationFactory.java | 12 ++ .../dhp/bulktag/community/Constraint.java | 9 ++ .../dhp/bulktag/community/ResultTagger.java | 107 +++++++----------- .../bulktag/community/TaggingConstants.java | 2 + .../dnetlib/dhp/bulktag/BulkTagJobTest.java | 37 ++++-- .../communityconfiguration/tagging_conf.xml | 5 +- .../dataset_10.json | 10 ++ .../dataset_10.json.gz | Bin 6883 -> 0 bytes 10 files changed, 134 insertions(+), 72 deletions(-) create mode 100644 dhp-workflows/dhp-enrichment/src/test/resources/eu/dnetlib/dhp/bulktag/sample/dataset/update_datasourcewithconstraints/dataset_10.json delete mode 100644 dhp-workflows/dhp-enrichment/src/test/resources/eu/dnetlib/dhp/bulktag/sample/dataset/update_datasourcewithconstraints/dataset_10.json.gz 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 8e76b5778..c5feb8d3f 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 @@ -6,6 +6,7 @@ import java.util.ArrayList; import java.util.List; import com.google.gson.Gson; +import org.apache.avro.generic.GenericData; /** Created by miriam on 01/08/2018. */ public class Community implements Serializable { @@ -14,6 +15,7 @@ public class Community implements Serializable { private List subjects = new ArrayList<>(); private List providers = new ArrayList<>(); private List zenodoCommunities = new ArrayList<>(); + private SelectionConstraints constraints = new SelectionConstraints(); public String toJson() { final Gson g = new Gson(); @@ -57,4 +59,12 @@ public class Community implements Serializable { public void setZenodoCommunities(List zenodoCommunities) { this.zenodoCommunities = zenodoCommunities; } + + public SelectionConstraints getConstraints() { + return constraints; + } + + public void setConstraints(SelectionConstraints constraints) { + this.constraints = constraints; + } } 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 5d92f5ab6..8e34ccebf 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 @@ -24,6 +24,8 @@ public class CommunityConfiguration implements Serializable { private Map>> datasourceMap = new HashMap<>(); // map zenodocommunityid -> communityid private Map>> zenodocommunityMap = new HashMap<>(); + // map communityid -> selectionconstraints + private Map selectionConstraintsMap = new HashMap<>(); public Map>> getSubjectMap() { return subjectMap; @@ -51,6 +53,14 @@ public class CommunityConfiguration implements Serializable { this.zenodocommunityMap = zenodocommunityMap; } + public Map getSelectionConstraintsMap() { + return selectionConstraintsMap; + } + + public void setSelectionConstraintsMap(Map selectionConstraintsMap) { + this.selectionConstraintsMap = selectionConstraintsMap; + } + CommunityConfiguration(final Map communities) { this.communities = communities; init(); @@ -67,6 +77,9 @@ public class CommunityConfiguration implements Serializable { if (zenodocommunityMap == null) { zenodocommunityMap = Maps.newHashMap(); } + if(selectionConstraintsMap == null){ + selectionConstraintsMap = Maps.newHashMap(); + } for (Community c : getCommunities().values()) { // get subjects @@ -87,6 +100,7 @@ public class CommunityConfiguration implements Serializable { new Pair<>(id, zc.getSelCriteria()), 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 822d35078..7a43ca476 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 @@ -85,9 +85,21 @@ public class CommunityConfigurationFactory { c.setSubjects(parseSubjects(node)); c.setProviders(parseDatasources(node)); c.setZenodoCommunities(parseZenodoCommunities(node)); + c.setConstraints(parseConstrains(node)); return c; } + private static SelectionConstraints parseConstrains(Node node) { + Node aconstraints = node.selectSingleNode("./advancedConstraints"); + if(aconstraints == null){ + return null; + } + SelectionConstraints selectionConstraints = new Gson().fromJson(aconstraints.getText(), SelectionConstraints.class); + + selectionConstraints.setSelection(resolver); + return selectionConstraints; + } + private static List parseSubjects(final Node node) { final List subjects = Lists.newArrayList(); 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 9002e718f..ed58cc14d 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 @@ -11,6 +11,7 @@ public class Constraint implements Serializable { private String verb; private String field; private String value; +// private String element; private Selection selection; public String getVerb() { @@ -50,4 +51,12 @@ public class Constraint implements Serializable { public boolean verifyCriteria(String metadata) { 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/ResultTagger.java b/dhp-workflows/dhp-enrichment/src/main/java/eu/dnetlib/dhp/bulktag/community/ResultTagger.java index 71a2b3525..ccb69a97d 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 @@ -9,6 +9,9 @@ import java.util.*; import java.util.stream.Collectors; import java.util.stream.Stream; +import eu.dnetlib.dhp.schema.common.ModelConstants; +import eu.dnetlib.dhp.schema.common.ModelSupport; +import eu.dnetlib.dhp.schema.oaf.utils.OafMapperUtils; import org.apache.commons.lang3.StringUtils; import com.google.gson.Gson; @@ -95,13 +98,6 @@ public class ResultTagger implements Serializable { } -// result -// .getInstance() -// .stream() -// .map(i -> new Pair<>(i.getCollectedfrom().getKey(), i.getHostedby().getKey())) -// .flatMap(p -> Stream.of(p.getFst(), p.getSnd())) -// .map(s -> StringUtils.substringAfter(s, "|")) -// .collect(Collectors.toCollection(HashSet::new)) tmp .forEach( dsId -> datasources @@ -135,6 +131,19 @@ public class ResultTagger implements Serializable { communities.addAll(czenodo); + /* Tagging for Advanced Constraints */ + final Set aconstraints = new HashSet<>(); + + conf.getSelectionConstraintsMap().keySet() + .forEach(communityId -> { + if(conf.getSelectionConstraintsMap().get(communityId) != null && + conf.getSelectionConstraintsMap().get(communityId) + .getCriteria().stream().anyMatch(crit -> crit.verifyCriteria(param))) + aconstraints.add(communityId); + }); + + communities.addAll(aconstraints); + clearContext(result); /* Verify if there is something to bulktag */ @@ -152,30 +161,24 @@ public class ResultTagger implements Serializable { dataInfoList = new ArrayList<>(); c.setDataInfo(dataInfoList); } - if (subjects.contains(c.getId())) + if (subjects.contains(c)) dataInfoList - .add( - getDataInfo( - BULKTAG_DATA_INFO_TYPE, - CLASS_ID_SUBJECT, - CLASS_NAME_BULKTAG_SUBJECT, - TAGGING_TRUST)); - if (datasources.contains(c.getId())) + .add(OafMapperUtils.dataInfo(false, BULKTAG_DATA_INFO_TYPE, true, false, + OafMapperUtils.qualifier(CLASS_ID_SUBJECT, CLASS_NAME_BULKTAG_SUBJECT, DNET_PROVENANCE_ACTIONS, DNET_PROVENANCE_ACTIONS), TAGGING_TRUST)); + if (datasources.contains(c)) dataInfoList - .add( - getDataInfo( - BULKTAG_DATA_INFO_TYPE, - CLASS_ID_DATASOURCE, - CLASS_NAME_BULKTAG_DATASOURCE, - TAGGING_TRUST)); - if (czenodo.contains(c.getId())) + .add(OafMapperUtils.dataInfo(false, BULKTAG_DATA_INFO_TYPE, true, false, + OafMapperUtils.qualifier(CLASS_ID_DATASOURCE, CLASS_NAME_BULKTAG_DATASOURCE, DNET_PROVENANCE_ACTIONS, DNET_PROVENANCE_ACTIONS), TAGGING_TRUST)); + if (czenodo.contains(c)) dataInfoList - .add( - getDataInfo( - BULKTAG_DATA_INFO_TYPE, - CLASS_ID_CZENODO, - CLASS_NAME_BULKTAG_ZENODO, - TAGGING_TRUST)); + .add(OafMapperUtils.dataInfo(false, BULKTAG_DATA_INFO_TYPE, true, false, + OafMapperUtils.qualifier(CLASS_ID_CZENODO, CLASS_NAME_BULKTAG_ZENODO, DNET_PROVENANCE_ACTIONS, DNET_PROVENANCE_ACTIONS), TAGGING_TRUST)); + if (aconstraints.contains(c)) + dataInfoList + .add( + OafMapperUtils.dataInfo(false, BULKTAG_DATA_INFO_TYPE, true, false, + OafMapperUtils.qualifier(CLASS_ID_ADVANCED_CONSTRAINT, CLASS_NAME_BULKTAG_ADVANCED_CONSTRAINT, DNET_PROVENANCE_ACTIONS, DNET_PROVENANCE_ACTIONS), TAGGING_TRUST)); + } }); @@ -195,28 +198,22 @@ public class ResultTagger implements Serializable { List dataInfoList = new ArrayList<>(); if (subjects.contains(c)) dataInfoList - .add( - getDataInfo( - BULKTAG_DATA_INFO_TYPE, - CLASS_ID_SUBJECT, - CLASS_NAME_BULKTAG_SUBJECT, - TAGGING_TRUST)); + .add(OafMapperUtils.dataInfo(false, BULKTAG_DATA_INFO_TYPE, true, false, + OafMapperUtils.qualifier(CLASS_ID_SUBJECT, CLASS_NAME_BULKTAG_SUBJECT, DNET_PROVENANCE_ACTIONS, DNET_PROVENANCE_ACTIONS), TAGGING_TRUST)); if (datasources.contains(c)) dataInfoList - .add( - getDataInfo( - BULKTAG_DATA_INFO_TYPE, - CLASS_ID_DATASOURCE, - CLASS_NAME_BULKTAG_DATASOURCE, - TAGGING_TRUST)); + .add(OafMapperUtils.dataInfo(false, BULKTAG_DATA_INFO_TYPE, true, false, + OafMapperUtils.qualifier(CLASS_ID_DATASOURCE, CLASS_NAME_BULKTAG_DATASOURCE, DNET_PROVENANCE_ACTIONS, DNET_PROVENANCE_ACTIONS), TAGGING_TRUST)); if (czenodo.contains(c)) dataInfoList - .add( - getDataInfo( - BULKTAG_DATA_INFO_TYPE, - CLASS_ID_CZENODO, - CLASS_NAME_BULKTAG_ZENODO, - TAGGING_TRUST)); + .add(OafMapperUtils.dataInfo(false, BULKTAG_DATA_INFO_TYPE, true, false, + OafMapperUtils.qualifier(CLASS_ID_CZENODO, CLASS_NAME_BULKTAG_ZENODO, DNET_PROVENANCE_ACTIONS, DNET_PROVENANCE_ACTIONS), TAGGING_TRUST)); + if (aconstraints.contains(c)) + dataInfoList + .add( + OafMapperUtils.dataInfo(false, BULKTAG_DATA_INFO_TYPE, true, false, + OafMapperUtils.qualifier(CLASS_ID_ADVANCED_CONSTRAINT, CLASS_NAME_BULKTAG_ADVANCED_CONSTRAINT, DNET_PROVENANCE_ACTIONS, DNET_PROVENANCE_ACTIONS), TAGGING_TRUST)); + context.setDataInfo(dataInfoList); return context; }) @@ -226,22 +223,4 @@ public class ResultTagger implements Serializable { return result; } - public static DataInfo getDataInfo( - String inference_provenance, String inference_class_id, String inference_class_name, String trust) { - DataInfo di = new DataInfo(); - di.setInferred(true); - di.setInferenceprovenance(inference_provenance); - di.setProvenanceaction(getQualifier(inference_class_id, inference_class_name)); - di.setTrust(trust); - return di; - } - - public static Qualifier getQualifier(String inference_class_id, String inference_class_name) { - Qualifier pa = new Qualifier(); - pa.setClassid(inference_class_id); - pa.setClassname(inference_class_name); - pa.setSchemeid(DNET_PROVENANCE_ACTIONS); - pa.setSchemename(DNET_PROVENANCE_ACTIONS); - return pa; - } } diff --git a/dhp-workflows/dhp-enrichment/src/main/java/eu/dnetlib/dhp/bulktag/community/TaggingConstants.java b/dhp-workflows/dhp-enrichment/src/main/java/eu/dnetlib/dhp/bulktag/community/TaggingConstants.java index 8274e26c9..aea21f8e5 100644 --- a/dhp-workflows/dhp-enrichment/src/main/java/eu/dnetlib/dhp/bulktag/community/TaggingConstants.java +++ b/dhp-workflows/dhp-enrichment/src/main/java/eu/dnetlib/dhp/bulktag/community/TaggingConstants.java @@ -11,12 +11,14 @@ public class TaggingConstants { public static final String CLASS_ID_SUBJECT = "community:subject"; public static final String CLASS_ID_DATASOURCE = "community:datasource"; public static final String CLASS_ID_CZENODO = "community:zenodocommunity"; + public static final String CLASS_ID_ADVANCED_CONSTRAINT = "community:advconstraint"; public static final String ZENODO_COMMUNITY_INDICATOR = "zenodo.org/communities/"; public static final String CLASS_NAME_BULKTAG_SUBJECT = "Bulktagging for Community - Subject"; public static final String CLASS_NAME_BULKTAG_DATASOURCE = "Bulktagging for Community - Datasource"; public static final String CLASS_NAME_BULKTAG_ZENODO = "Bulktagging for Community - Zenodo"; + public static final String CLASS_NAME_BULKTAG_ADVANCED_CONSTRAINT = "Bulktagging for Community - Advanced Constraints"; public static final String TAGGING_TRUST = "0.8"; } 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 07299f01a..0212f4a49 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,16 @@ 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.ArrayList; +import java.util.HashMap; +import java.util.List; +import java.util.Map; +import com.google.gson.Gson; +import com.jayway.jsonpath.DocumentContext; +import com.jayway.jsonpath.JsonPath; +import eu.dnetlib.dhp.bulktag.community.ProtoMap; +import eu.dnetlib.dhp.schema.oaf.*; import org.apache.commons.io.FileUtils; import org.apache.commons.io.IOUtils; import org.apache.spark.SparkConf; @@ -24,11 +33,6 @@ import org.slf4j.LoggerFactory; import com.fasterxml.jackson.databind.ObjectMapper; -import eu.dnetlib.dhp.schema.oaf.Dataset; -import eu.dnetlib.dhp.schema.oaf.OtherResearchProduct; -import eu.dnetlib.dhp.schema.oaf.Publication; -import eu.dnetlib.dhp.schema.oaf.Software; - public class BulkTagJobTest { private static final ObjectMapper OBJECT_MAPPER = new ObjectMapper(); @@ -39,7 +43,8 @@ public class BulkTagJobTest { + " \"title\" : \"$['title'][*]['value']\"," + " \"orcid\" : \"$['author'][*]['pid'][*][?(@['key']=='ORCID')]['value']\"," + " \"contributor\" : \"$['contributor'][*]['value']\"," - + " \"description\" : \"$['description'][*]['value']\"}"; + + " \"description\" : \"$['description'][*]['value']\", " + +" \"subject\" :\"$['subject'][*]['value']\" }"; private static SparkSession spark; @@ -763,10 +768,28 @@ public class BulkTagJobTest { org.apache.spark.sql.Dataset idExplodeCommunity = spark.sql(query); idExplodeCommunity.show(false); - Assertions.assertEquals(3, idExplodeCommunity.count()); + Assertions.assertEquals(4, idExplodeCommunity.count()); Assertions .assertEquals( 3, idExplodeCommunity.filter("provenance = 'community:datasource'").count()); + Assertions + .assertEquals( + 1, idExplodeCommunity.filter("provenance = 'community:advconstraint'").count()); } + +// @Test +// void test1(){ +// ProtoMap params = new Gson().fromJson(pathMap, ProtoMap.class); +// HashMap param = new HashMap<>(); +// for (String key : params.keySet()) { +// try { +// param.put(key, jsonContext.read(params.get(key))); +// } catch (com.jayway.jsonpath.PathNotFoundException e) { +// param.put(key, new ArrayList<>()); +// } +// } +// return param; +// } +// } } diff --git a/dhp-workflows/dhp-enrichment/src/test/resources/eu/dnetlib/dhp/bulktag/communityconfiguration/tagging_conf.xml b/dhp-workflows/dhp-enrichment/src/test/resources/eu/dnetlib/dhp/bulktag/communityconfiguration/tagging_conf.xml index d4c83438b..06c57511d 100644 --- a/dhp-workflows/dhp-enrichment/src/test/resources/eu/dnetlib/dhp/bulktag/communityconfiguration/tagging_conf.xml +++ b/dhp-workflows/dhp-enrichment/src/test/resources/eu/dnetlib/dhp/bulktag/communityconfiguration/tagging_conf.xml @@ -1193,6 +1193,9 @@ + {"criteria":[{"constraint":[{"verb":"equals_ignorecase","field":"subject","value":"ciencias de la comunicación"}, + {"verb":"equals","field":"subject","value":"Miriam"}]}, + {"constraint":[{"verb":"equals","field":"subject","value":"miriam"}]}]} Sustainability-oriented science policy STI policies @@ -1316,7 +1319,7 @@ opendoar____::358aee4cc897452c00244351e4d91f69 {"criteria":[{"constraint":[{"verb":"contains_ignorecase","field":"title","value":"COVID-19"}]}, {"constraint":[{"verb":"contains_ignorecase","field":"title","value":"SARS-CoV-2"}]}, - {"constraint":[{"verb":"contains_ignorecase","field":"title","value":"2019-nCoV"}]}]} + {"constraint":[{"verb":"contains_ignorecase","field":"title","value":"2019-nCoV"}}]} 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_10.json new file mode 100644 index 000000000..168343401 --- /dev/null +++ b/dhp-workflows/dhp-enrichment/src/test/resources/eu/dnetlib/dhp/bulktag/sample/dataset/update_datasourcewithconstraints/dataset_10.json @@ -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":"Miriam","qualifier":{"classid":"","classname":"","schemeid":"","schemename":""},"dataInfo":{"invisible":false,"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 SARS-CoV-2 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":"10|opendoar____::358aee4cc897452c00244351e4d91f69","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 covid 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":"10|re3data_____::7b0ad08687b2c960d5aeef06f811d5e6","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 sars-cov-2 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, DARIAH 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":"10|re3data_____::7b0ad08687b2c960d5aeef06f811d5e6","value":"Depósito Digital e-UCJC","dataInfo":null},"url":["http://hdl.handle.net/20.500.12020/802"],"distributionlocation":"","collectedfrom":{"key":"10|opendoar____::7e7757b1e12abcb736ab9a754ffb617a","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 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":"Miriam","qualifier":{"classid":"","classname":"","schemeid":"","schemename":""},"dataInfo":{"invisible":false,"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":[]} diff --git a/dhp-workflows/dhp-enrichment/src/test/resources/eu/dnetlib/dhp/bulktag/sample/dataset/update_datasourcewithconstraints/dataset_10.json.gz b/dhp-workflows/dhp-enrichment/src/test/resources/eu/dnetlib/dhp/bulktag/sample/dataset/update_datasourcewithconstraints/dataset_10.json.gz deleted file mode 100644 index 2eb33c5a49a7c5e59ed47771793657eb2d55f6e7..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 6883 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 From 3e6b0f58bb511c36a02fc297d92946499f727564 Mon Sep 17 00:00:00 2001 From: "miriam.baglioni" Date: Fri, 23 Sep 2022 16:47:19 +0200 Subject: [PATCH 203/535] [BulkTagging] changed the query to the IS to get also the information for the advancedConstraint from the profile --- .../dnetlib/dhp/bulktag/community/QueryInformationSystem.java | 3 +++ 1 file changed, 3 insertions(+) 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 index 89cf5beff..cde8d7d11 100644 --- 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 @@ -61,6 +61,9 @@ public class QueryInformationSystem { + " " + " } " + " " + + "" + +"{$x//CONFIGURATION/context/param[./@name='advancedConstaint']/text()} " + + "" + " "; public static CommunityConfiguration getCommunityConfiguration(final String isLookupUrl) From ca216a92ad8db5bd658e45c72f93ed861f27a7cb Mon Sep 17 00:00:00 2001 From: "miriam.baglioni" Date: Fri, 23 Sep 2022 17:06:07 +0200 Subject: [PATCH 204/535] [BulkTagging] changed the query to the IS to insert values for FOS and SDG as subject in the configuration used for the tagging --- .../dhp/bulktag/community/QueryInformationSystem.java | 10 +++++++++- 1 file changed, 9 insertions(+), 1 deletion(-) 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 index cde8d7d11..9803c5e63 100644 --- 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 @@ -18,6 +18,8 @@ public class QueryInformationSystem { + " 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' " @@ -28,6 +30,12 @@ public class QueryInformationSystem { + " {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 " @@ -62,7 +70,7 @@ public class QueryInformationSystem { + " } " + " " + "" - +"{$x//CONFIGURATION/context/param[./@name='advancedConstaint']/text()} " + +"{$x//CONFIGURATION/context/param[./@name='advancedConstraint']/text()} " + "" + " "; From fd63e9bfac41a4ec508dd9cb66880db46a1cb1b5 Mon Sep 17 00:00:00 2001 From: Alessia Bardi Date: Mon, 26 Sep 2022 11:24:13 +0200 Subject: [PATCH 205/535] Mapping all relationships supported in ModelConstants and ModelSupport --- .../raw/AbstractMdRecordToOafMapper.java | 14 ++-- .../dhp/oa/graph/raw/OdfToOafMapper.java | 78 +++++++------------ .../dnetlib/dhp/oa/graph/raw/MappersTest.java | 26 ++++++- .../dnetlib/dhp/oa/graph/raw/odf_dataset.xml | 1 - .../dnetlib/dhp/oa/graph/raw/odf_software.xml | 2 +- 5 files changed, 59 insertions(+), 62 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 bb5472a88..5f185444f 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 @@ -69,14 +69,16 @@ public abstract class AbstractMdRecordToOafMapper { nsContext.put("datacite", DATACITE_SCHEMA_KERNEL_3); } - protected static final Set pidTypeWithAuthority = new HashSet<>(); + // lowercase pidTypes as keys, normal casing for the values + protected static final Map pidTypeWithAuthority = new HashMap<>(); static { - pidTypeWithAuthority.addAll(IdentifierFactory.PID_AUTHORITY.keySet().stream() - .map(PidType::toString) - .map(String::toLowerCase) - .collect(Collectors.toCollection(HashSet::new))); - } + IdentifierFactory.PID_AUTHORITY + .keySet() + .stream() + .forEach(entry -> pidTypeWithAuthority.put(entry.toString().toLowerCase(), entry.toString())); + + } protected AbstractMdRecordToOafMapper(final VocabularyGroup vocs, final boolean invisible, final boolean shouldHashId, final boolean forceOriginalId) { 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 304ec8f99..a25bcd47e 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 @@ -22,6 +22,8 @@ import com.google.common.collect.Lists; import eu.dnetlib.dhp.common.PacePerson; import eu.dnetlib.dhp.common.vocabulary.VocabularyGroup; +import eu.dnetlib.dhp.schema.common.ModelSupport; +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; @@ -400,55 +402,12 @@ public class OdfToOafMapper extends AbstractMdRecordToOafMapper { if (StringUtils.isNotBlank(originalId)) { final String idType = ((Node) o).valueOf("@relatedIdentifierType"); - final String reltype = ((Node) o).valueOf("@relationType"); + final String relType = ((Node) o).valueOf("@relationType"); String otherId = guessRelatedIdentifier(idType, originalId); if (StringUtils.isNotBlank(otherId)) { - if (reltype.equalsIgnoreCase(IS_SUPPLEMENT_TO)) { - res - .add( - getRelation( - docId, otherId, RESULT_RESULT, SUPPLEMENT, IS_SUPPLEMENT_TO, entity)); - res - .add( - getRelation( - otherId, docId, RESULT_RESULT, SUPPLEMENT, IS_SUPPLEMENTED_BY, entity)); - } else { - if (reltype.equalsIgnoreCase(IS_SUPPLEMENTED_BY)) { - res - .add( - getRelation( - otherId, docId, RESULT_RESULT, SUPPLEMENT, IS_SUPPLEMENT_TO, entity)); - res - .add( - getRelation( - docId, otherId, RESULT_RESULT, SUPPLEMENT, IS_SUPPLEMENTED_BY, entity)); - } else { - if (reltype.equalsIgnoreCase(IS_PART_OF)) { - res - .add( - getRelation( - docId, otherId, RESULT_RESULT, PART, IS_PART_OF, entity)); - res - .add( - getRelation( - otherId, docId, RESULT_RESULT, PART, HAS_PART, entity)); - } else { - if (reltype.equalsIgnoreCase(HAS_PART)) { - res - .add( - getRelation( - otherId, docId, RESULT_RESULT, PART, IS_PART_OF, entity)); - res - .add( - getRelation( - docId, otherId, RESULT_RESULT, PART, HAS_PART, entity)); - } - // else TODO catch more semantics - } - } - } - + res.addAll(getRelations(relType, docId, otherId, entity)); } + } } return res; @@ -457,14 +416,33 @@ public class OdfToOafMapper extends AbstractMdRecordToOafMapper { protected String guessRelatedIdentifier(final String idType, final String value) { if (StringUtils.isBlank(idType) || StringUtils.isBlank(value)) return null; - if (idType.equalsIgnoreCase("OPENAIRE")) return createOpenaireId(50, value, false); - if(pidTypeWithAuthority.contains(idType.toLowerCase())){ - return IdentifierFactory.idFromPid("50", idType, value, true); - } + if (idType.equalsIgnoreCase("OPENAIRE")) + return createOpenaireId(50, value, false); + if (pidTypeWithAuthority.containsKey(idType.toLowerCase())) { + return IdentifierFactory.idFromPid("50", pidTypeWithAuthority.get(idType.toLowerCase()), value, true); + } return null; } + protected List getRelations(final String reltype, final String entityId, final String otherId, + final OafEntity entity) { + 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)); + res + .add( + getRelation( + otherId, entityId, rel.getRelType(), rel.getSubReltype(), rel.getInverseRelClass(), entity)); + + } + return res; + } + @Override protected Qualifier prepareResourceType(final Document doc, final DataInfo info) { return prepareQualifier( 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 32b23e42f..7552d1789 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 @@ -579,8 +579,10 @@ class MappersTest { final List list = new OdfToOafMapper(vocs, false, true).processMdRecord(xml); - assertEquals(1, list.size()); + assertEquals(3, list.size()); assertTrue(list.get(0) instanceof Software); + assertTrue(list.get(1) instanceof Relation); + assertTrue(list.get(2) instanceof Relation); final Software s = (Software) list.get(0); @@ -590,6 +592,22 @@ class MappersTest { assertTrue(s.getAuthor().size() > 0); assertTrue(s.getSubject().size() > 0); assertTrue(s.getInstance().size() > 0); + + final Relation r1 = (Relation) list.get(1); + final Relation r2 = (Relation) list.get(2); + + assertEquals(s.getId(), r1.getSource()); + assertEquals("50|doi_________::b453e7b4b2130ace57ff0c3db470a982", r1.getTarget()); + assertEquals(ModelConstants.RESULT_RESULT, r1.getRelType()); + assertEquals(ModelConstants.RELATIONSHIP, r1.getSubRelType()); + assertEquals(ModelConstants.IS_REFERENCED_BY, r1.getRelClass()); + + assertEquals(s.getId(), r2.getTarget()); + assertEquals("50|doi_________::b453e7b4b2130ace57ff0c3db470a982", r2.getSource()); + assertEquals(ModelConstants.RESULT_RESULT, r2.getRelType()); + assertEquals(ModelConstants.RELATIONSHIP, r2.getSubRelType()); + assertEquals(ModelConstants.REFERENCES, r2.getRelClass()); + } @Test @@ -945,14 +963,14 @@ class MappersTest { assertEquals(1, list.stream().filter(o -> o instanceof OtherResearchProduct).count()); assertEquals(6, list.stream().filter(o -> o instanceof Relation).count()); - for(Oaf oaf : list){ - if(oaf instanceof Relation){ + for (Oaf oaf : list) { + if (oaf instanceof Relation) { String source = ((Relation) oaf).getSource(); String target = ((Relation) oaf).getTarget(); assertNotEquals(source, target); assertTrue(source.equals(p.getId()) || target.equals(p.getId())); assertNotNull(((Relation) oaf).getSubRelType()); - assertNotNull( ((Relation) oaf).getRelClass()); + assertNotNull(((Relation) oaf).getRelClass()); assertNotNull(((Relation) oaf).getRelType()); } } diff --git a/dhp-workflows/dhp-graph-mapper/src/test/resources/eu/dnetlib/dhp/oa/graph/raw/odf_dataset.xml b/dhp-workflows/dhp-graph-mapper/src/test/resources/eu/dnetlib/dhp/oa/graph/raw/odf_dataset.xml index 4f41ee6ea..4633d62c3 100644 --- a/dhp-workflows/dhp-graph-mapper/src/test/resources/eu/dnetlib/dhp/oa/graph/raw/odf_dataset.xml +++ b/dhp-workflows/dhp-graph-mapper/src/test/resources/eu/dnetlib/dhp/oa/graph/raw/odf_dataset.xml @@ -69,7 +69,6 @@ - 10.5281/zenodo.3234525 https://zenodo.org/communities/epfl 1.0.0 diff --git a/dhp-workflows/dhp-graph-mapper/src/test/resources/eu/dnetlib/dhp/oa/graph/raw/odf_software.xml b/dhp-workflows/dhp-graph-mapper/src/test/resources/eu/dnetlib/dhp/oa/graph/raw/odf_software.xml index 6a9170ce1..387b1ee86 100644 --- a/dhp-workflows/dhp-graph-mapper/src/test/resources/eu/dnetlib/dhp/oa/graph/raw/odf_software.xml +++ b/dhp-workflows/dhp-graph-mapper/src/test/resources/eu/dnetlib/dhp/oa/graph/raw/odf_software.xml @@ -20,7 +20,7 @@ bio.tools http://maplab.imppc.org/chainy/ - 10.1093/bioinformatics/btw839 + 10.1093/bioinformatics/btw839 https://bio.tools/ From 57dbeb08d2e07bacd2ba7c559e2f8fc9dace0ee1 Mon Sep 17 00:00:00 2001 From: Claudio Atzori Date: Tue, 27 Sep 2022 14:55:10 +0200 Subject: [PATCH 206/535] code formatting --- .../dhp/bulktag/community/Community.java | 3 +- .../community/CommunityConfiguration.java | 2 +- .../CommunityConfigurationFactory.java | 5 +- .../community/QueryInformationSystem.java | 22 ++-- .../dhp/bulktag/community/ResultTagger.java | 116 +++++++++++++----- .../dnetlib/dhp/bulktag/BulkTagJobTest.java | 17 +-- .../clean/country/CleanCountrySparkJob.java | 7 +- .../raw/MigrateDbEntitiesApplication.java | 3 +- 8 files changed, 121 insertions(+), 54 deletions(-) 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 c5feb8d3f..3db584c76 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 @@ -5,9 +5,10 @@ import java.io.Serializable; import java.util.ArrayList; import java.util.List; -import com.google.gson.Gson; import org.apache.avro.generic.GenericData; +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/CommunityConfiguration.java b/dhp-workflows/dhp-enrichment/src/main/java/eu/dnetlib/dhp/bulktag/community/CommunityConfiguration.java index 8e34ccebf..66407a4b3 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 @@ -77,7 +77,7 @@ public class CommunityConfiguration implements Serializable { if (zenodocommunityMap == null) { zenodocommunityMap = Maps.newHashMap(); } - if(selectionConstraintsMap == null){ + if (selectionConstraintsMap == null) { selectionConstraintsMap = Maps.newHashMap(); } 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 7a43ca476..52ca606fc 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 @@ -91,10 +91,11 @@ public class CommunityConfigurationFactory { private static SelectionConstraints parseConstrains(Node node) { Node aconstraints = node.selectSingleNode("./advancedConstraints"); - if(aconstraints == null){ + if (aconstraints == null) { return null; } - SelectionConstraints selectionConstraints = new Gson().fromJson(aconstraints.getText(), SelectionConstraints.class); + SelectionConstraints selectionConstraints = new Gson() + .fromJson(aconstraints.getText(), SelectionConstraints.class); selectionConstraints.setSelection(resolver); return selectionConstraints; 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 index 9803c5e63..f06c0d47a 100644 --- 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 @@ -18,8 +18,8 @@ public class QueryInformationSystem { + " 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 $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' " @@ -30,12 +30,12 @@ public class QueryInformationSystem { + " {for $y in tokenize($subj,',') " + " return " + " {$y}} " - + " {for $y in tokenize($fos,',') " - + " return " - + " {$y}} " - + " {for $y in tokenize($sdg,',') " - + " return " - + " {$y}} " + + " {for $y in tokenize($fos,',') " + + " return " + + " {$y}} " + + " {for $y in tokenize($sdg,',') " + + " return " + + " {$y}} " + " " + " " + " {for $d in $datasources " @@ -69,9 +69,9 @@ public class QueryInformationSystem { + " " + " } " + " " - + "" - +"{$x//CONFIGURATION/context/param[./@name='advancedConstraint']/text()} " - + "" + + "" + + "{$x//CONFIGURATION/context/param[./@name='advancedConstraint']/text()} " + + "" + " "; public static CommunityConfiguration getCommunityConfiguration(final String isLookupUrl) 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 ccb69a97d..ee75bf955 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 @@ -9,16 +9,16 @@ import java.util.*; import java.util.stream.Collectors; import java.util.stream.Stream; -import eu.dnetlib.dhp.schema.common.ModelConstants; -import eu.dnetlib.dhp.schema.common.ModelSupport; -import eu.dnetlib.dhp.schema.oaf.utils.OafMapperUtils; import org.apache.commons.lang3.StringUtils; import com.google.gson.Gson; import com.jayway.jsonpath.DocumentContext; import com.jayway.jsonpath.JsonPath; +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; /** Created by miriam on 02/08/2018. */ public class ResultTagger implements Serializable { @@ -134,13 +134,19 @@ public class ResultTagger implements Serializable { /* Tagging for Advanced Constraints */ final Set aconstraints = new HashSet<>(); - conf.getSelectionConstraintsMap().keySet() - .forEach(communityId -> { - if(conf.getSelectionConstraintsMap().get(communityId) != null && - conf.getSelectionConstraintsMap().get(communityId) - .getCriteria().stream().anyMatch(crit -> crit.verifyCriteria(param))) - aconstraints.add(communityId); - }); + conf + .getSelectionConstraintsMap() + .keySet() + .forEach(communityId -> { + if (conf.getSelectionConstraintsMap().get(communityId) != null && + conf + .getSelectionConstraintsMap() + .get(communityId) + .getCriteria() + .stream() + .anyMatch(crit -> crit.verifyCriteria(param))) + aconstraints.add(communityId); + }); communities.addAll(aconstraints); @@ -163,21 +169,48 @@ public class ResultTagger implements Serializable { } if (subjects.contains(c)) dataInfoList - .add(OafMapperUtils.dataInfo(false, BULKTAG_DATA_INFO_TYPE, true, false, - OafMapperUtils.qualifier(CLASS_ID_SUBJECT, CLASS_NAME_BULKTAG_SUBJECT, DNET_PROVENANCE_ACTIONS, DNET_PROVENANCE_ACTIONS), TAGGING_TRUST)); + .add( + OafMapperUtils + .dataInfo( + false, BULKTAG_DATA_INFO_TYPE, true, false, + OafMapperUtils + .qualifier( + CLASS_ID_SUBJECT, CLASS_NAME_BULKTAG_SUBJECT, DNET_PROVENANCE_ACTIONS, + DNET_PROVENANCE_ACTIONS), + TAGGING_TRUST)); if (datasources.contains(c)) dataInfoList - .add(OafMapperUtils.dataInfo(false, BULKTAG_DATA_INFO_TYPE, true, false, - OafMapperUtils.qualifier(CLASS_ID_DATASOURCE, CLASS_NAME_BULKTAG_DATASOURCE, DNET_PROVENANCE_ACTIONS, DNET_PROVENANCE_ACTIONS), TAGGING_TRUST)); + .add( + OafMapperUtils + .dataInfo( + false, BULKTAG_DATA_INFO_TYPE, true, false, + OafMapperUtils + .qualifier( + CLASS_ID_DATASOURCE, CLASS_NAME_BULKTAG_DATASOURCE, DNET_PROVENANCE_ACTIONS, + DNET_PROVENANCE_ACTIONS), + TAGGING_TRUST)); if (czenodo.contains(c)) dataInfoList - .add(OafMapperUtils.dataInfo(false, BULKTAG_DATA_INFO_TYPE, true, false, - OafMapperUtils.qualifier(CLASS_ID_CZENODO, CLASS_NAME_BULKTAG_ZENODO, DNET_PROVENANCE_ACTIONS, DNET_PROVENANCE_ACTIONS), TAGGING_TRUST)); + .add( + OafMapperUtils + .dataInfo( + false, BULKTAG_DATA_INFO_TYPE, true, false, + OafMapperUtils + .qualifier( + CLASS_ID_CZENODO, CLASS_NAME_BULKTAG_ZENODO, DNET_PROVENANCE_ACTIONS, + DNET_PROVENANCE_ACTIONS), + TAGGING_TRUST)); if (aconstraints.contains(c)) dataInfoList - .add( - OafMapperUtils.dataInfo(false, BULKTAG_DATA_INFO_TYPE, true, false, - OafMapperUtils.qualifier(CLASS_ID_ADVANCED_CONSTRAINT, CLASS_NAME_BULKTAG_ADVANCED_CONSTRAINT, DNET_PROVENANCE_ACTIONS, DNET_PROVENANCE_ACTIONS), TAGGING_TRUST)); + .add( + OafMapperUtils + .dataInfo( + false, BULKTAG_DATA_INFO_TYPE, true, false, + OafMapperUtils + .qualifier( + CLASS_ID_ADVANCED_CONSTRAINT, CLASS_NAME_BULKTAG_ADVANCED_CONSTRAINT, + DNET_PROVENANCE_ACTIONS, DNET_PROVENANCE_ACTIONS), + TAGGING_TRUST)); } }); @@ -198,21 +231,48 @@ public class ResultTagger implements Serializable { List dataInfoList = new ArrayList<>(); if (subjects.contains(c)) dataInfoList - .add(OafMapperUtils.dataInfo(false, BULKTAG_DATA_INFO_TYPE, true, false, - OafMapperUtils.qualifier(CLASS_ID_SUBJECT, CLASS_NAME_BULKTAG_SUBJECT, DNET_PROVENANCE_ACTIONS, DNET_PROVENANCE_ACTIONS), TAGGING_TRUST)); + .add( + OafMapperUtils + .dataInfo( + false, BULKTAG_DATA_INFO_TYPE, true, false, + OafMapperUtils + .qualifier( + CLASS_ID_SUBJECT, CLASS_NAME_BULKTAG_SUBJECT, DNET_PROVENANCE_ACTIONS, + DNET_PROVENANCE_ACTIONS), + TAGGING_TRUST)); if (datasources.contains(c)) dataInfoList - .add(OafMapperUtils.dataInfo(false, BULKTAG_DATA_INFO_TYPE, true, false, - OafMapperUtils.qualifier(CLASS_ID_DATASOURCE, CLASS_NAME_BULKTAG_DATASOURCE, DNET_PROVENANCE_ACTIONS, DNET_PROVENANCE_ACTIONS), TAGGING_TRUST)); + .add( + OafMapperUtils + .dataInfo( + false, BULKTAG_DATA_INFO_TYPE, true, false, + OafMapperUtils + .qualifier( + CLASS_ID_DATASOURCE, CLASS_NAME_BULKTAG_DATASOURCE, + DNET_PROVENANCE_ACTIONS, DNET_PROVENANCE_ACTIONS), + TAGGING_TRUST)); if (czenodo.contains(c)) dataInfoList - .add(OafMapperUtils.dataInfo(false, BULKTAG_DATA_INFO_TYPE, true, false, - OafMapperUtils.qualifier(CLASS_ID_CZENODO, CLASS_NAME_BULKTAG_ZENODO, DNET_PROVENANCE_ACTIONS, DNET_PROVENANCE_ACTIONS), TAGGING_TRUST)); + .add( + OafMapperUtils + .dataInfo( + false, BULKTAG_DATA_INFO_TYPE, true, false, + OafMapperUtils + .qualifier( + CLASS_ID_CZENODO, CLASS_NAME_BULKTAG_ZENODO, DNET_PROVENANCE_ACTIONS, + DNET_PROVENANCE_ACTIONS), + TAGGING_TRUST)); if (aconstraints.contains(c)) dataInfoList - .add( - OafMapperUtils.dataInfo(false, BULKTAG_DATA_INFO_TYPE, true, false, - OafMapperUtils.qualifier(CLASS_ID_ADVANCED_CONSTRAINT, CLASS_NAME_BULKTAG_ADVANCED_CONSTRAINT, DNET_PROVENANCE_ACTIONS, DNET_PROVENANCE_ACTIONS), TAGGING_TRUST)); + .add( + OafMapperUtils + .dataInfo( + false, BULKTAG_DATA_INFO_TYPE, true, false, + OafMapperUtils + .qualifier( + CLASS_ID_ADVANCED_CONSTRAINT, CLASS_NAME_BULKTAG_ADVANCED_CONSTRAINT, + DNET_PROVENANCE_ACTIONS, DNET_PROVENANCE_ACTIONS), + TAGGING_TRUST)); context.setDataInfo(dataInfoList); return context; 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 0212f4a49..def524156 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 @@ -11,11 +11,6 @@ import java.util.HashMap; import java.util.List; import java.util.Map; -import com.google.gson.Gson; -import com.jayway.jsonpath.DocumentContext; -import com.jayway.jsonpath.JsonPath; -import eu.dnetlib.dhp.bulktag.community.ProtoMap; -import eu.dnetlib.dhp.schema.oaf.*; import org.apache.commons.io.FileUtils; import org.apache.commons.io.IOUtils; import org.apache.spark.SparkConf; @@ -32,6 +27,12 @@ import org.slf4j.Logger; import org.slf4j.LoggerFactory; import com.fasterxml.jackson.databind.ObjectMapper; +import com.google.gson.Gson; +import com.jayway.jsonpath.DocumentContext; +import com.jayway.jsonpath.JsonPath; + +import eu.dnetlib.dhp.bulktag.community.ProtoMap; +import eu.dnetlib.dhp.schema.oaf.*; public class BulkTagJobTest { @@ -44,7 +45,7 @@ public class BulkTagJobTest { + " \"orcid\" : \"$['author'][*]['pid'][*][?(@['key']=='ORCID')]['value']\"," + " \"contributor\" : \"$['contributor'][*]['value']\"," + " \"description\" : \"$['description'][*]['value']\", " - +" \"subject\" :\"$['subject'][*]['value']\" }"; + + " \"subject\" :\"$['subject'][*]['value']\" }"; private static SparkSession spark; @@ -774,8 +775,8 @@ public class BulkTagJobTest { .assertEquals( 3, idExplodeCommunity.filter("provenance = 'community:datasource'").count()); Assertions - .assertEquals( - 1, idExplodeCommunity.filter("provenance = 'community:advconstraint'").count()); + .assertEquals( + 1, idExplodeCommunity.filter("provenance = 'community:advconstraint'").count()); } // @Test diff --git a/dhp-workflows/dhp-graph-mapper/src/main/java/eu/dnetlib/dhp/oa/graph/clean/country/CleanCountrySparkJob.java b/dhp-workflows/dhp-graph-mapper/src/main/java/eu/dnetlib/dhp/oa/graph/clean/country/CleanCountrySparkJob.java index 30991e9d7..c150c63df 100644 --- a/dhp-workflows/dhp-graph-mapper/src/main/java/eu/dnetlib/dhp/oa/graph/clean/country/CleanCountrySparkJob.java +++ b/dhp-workflows/dhp-graph-mapper/src/main/java/eu/dnetlib/dhp/oa/graph/clean/country/CleanCountrySparkJob.java @@ -10,7 +10,6 @@ import java.util.stream.Collectors; import javax.swing.text.html.Option; -import eu.dnetlib.dhp.schema.oaf.utils.PidType; import org.apache.commons.io.IOUtils; import org.apache.spark.SparkConf; import org.apache.spark.api.java.function.FilterFunction; @@ -33,6 +32,7 @@ import eu.dnetlib.dhp.oa.graph.clean.CleanContextSparkJob; import eu.dnetlib.dhp.schema.oaf.Country; import eu.dnetlib.dhp.schema.oaf.Result; import eu.dnetlib.dhp.schema.oaf.StructuredProperty; +import eu.dnetlib.dhp.schema.oaf.utils.PidType; public class CleanCountrySparkJob implements Serializable { private static final Logger log = LoggerFactory.getLogger(CleanCountrySparkJob.class); @@ -113,7 +113,10 @@ public class CleanCountrySparkJob implements Serializable { if (r .getPid() .stream() - .anyMatch(p -> p.getQualifier().getClassid() + .anyMatch( + p -> p + .getQualifier() + .getClassid() .equals(PidType.doi) && pidInParam(p.getValue(), verifyParam))) { r .setCountry( diff --git a/dhp-workflows/dhp-graph-mapper/src/main/java/eu/dnetlib/dhp/oa/graph/raw/MigrateDbEntitiesApplication.java b/dhp-workflows/dhp-graph-mapper/src/main/java/eu/dnetlib/dhp/oa/graph/raw/MigrateDbEntitiesApplication.java index 2b1c257ad..c69a7a6ff 100644 --- a/dhp-workflows/dhp-graph-mapper/src/main/java/eu/dnetlib/dhp/oa/graph/raw/MigrateDbEntitiesApplication.java +++ b/dhp-workflows/dhp-graph-mapper/src/main/java/eu/dnetlib/dhp/oa/graph/raw/MigrateDbEntitiesApplication.java @@ -422,7 +422,8 @@ public class MigrateDbEntitiesApplication extends AbstractMigrationApplication i final Relation r2 = OafMapperUtils .getRelation( - orgId, dsId, DATASOURCE_ORGANIZATION, PROVISION, PROVIDES, collectedFrom, info, lastUpdateTimestamp); + orgId, dsId, DATASOURCE_ORGANIZATION, PROVISION, PROVIDES, collectedFrom, info, + lastUpdateTimestamp); return Arrays.asList(r1, r2); } catch (final Exception e) { From 3f90d159e3efc63529f5a51ae03c2410230869b4 Mon Sep 17 00:00:00 2001 From: Claudio Atzori Date: Tue, 27 Sep 2022 15:08:00 +0200 Subject: [PATCH 207/535] code formatting --- .../raw/AbstractMdRecordToOafMapper.java | 1188 ++++++++--------- pom.xml | 2 +- 2 files changed, 595 insertions(+), 595 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 5f185444f..c157be51a 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 @@ -15,7 +15,6 @@ import java.net.URL; import java.util.*; import java.util.stream.Collectors; -import eu.dnetlib.dhp.schema.oaf.utils.PidType; import org.apache.commons.lang3.StringUtils; import org.apache.commons.validator.routines.UrlValidator; import org.dom4j.*; @@ -31,617 +30,618 @@ import eu.dnetlib.dhp.schema.common.ModelSupport; import eu.dnetlib.dhp.schema.oaf.*; import eu.dnetlib.dhp.schema.oaf.utils.IdentifierFactory; import eu.dnetlib.dhp.schema.oaf.utils.OafMapperUtils; +import eu.dnetlib.dhp.schema.oaf.utils.PidType; public abstract class AbstractMdRecordToOafMapper { - protected final VocabularyGroup vocs; + protected final VocabularyGroup vocs; - private final boolean invisible; + private final boolean invisible; - private final boolean shouldHashId; + private final boolean shouldHashId; - private final boolean forceOriginalId; + private final boolean forceOriginalId; - protected static final String DATACITE_SCHEMA_KERNEL_4 = "http://datacite.org/schema/kernel-4"; - 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 Qualifier ORCID_PID_TYPE = qualifier( - ModelConstants.ORCID_PENDING, - ModelConstants.ORCID_CLASSNAME, - DNET_PID_TYPES, DNET_PID_TYPES); - protected static final Qualifier MAG_PID_TYPE = qualifier( - "MAGIdentifier", "Microsoft Academic Graph Identifier", DNET_PID_TYPES, DNET_PID_TYPES); + protected static final String DATACITE_SCHEMA_KERNEL_4 = "http://datacite.org/schema/kernel-4"; + 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 Qualifier ORCID_PID_TYPE = qualifier( + ModelConstants.ORCID_PENDING, + ModelConstants.ORCID_CLASSNAME, + DNET_PID_TYPES, DNET_PID_TYPES); + protected static final Qualifier MAG_PID_TYPE = qualifier( + "MAGIdentifier", "Microsoft Academic Graph Identifier", DNET_PID_TYPES, DNET_PID_TYPES); - protected static final String DEFAULT_TRUST_FOR_VALIDATED_RELS = "0.999"; + protected static final String DEFAULT_TRUST_FOR_VALIDATED_RELS = "0.999"; - protected static final Map nsContext = new HashMap<>(); + protected static final Map nsContext = new HashMap<>(); - private static final Logger log = LoggerFactory.getLogger(AbstractMdRecordToOafMapper.class); + private static final Logger log = LoggerFactory.getLogger(AbstractMdRecordToOafMapper.class); - static { - nsContext.put("dr", "http://www.driver-repository.eu/namespace/dr"); - nsContext.put("dri", "http://www.driver-repository.eu/namespace/dri"); - nsContext.put("oaf", "http://namespace.openaire.eu/oaf"); - nsContext.put("oai", "http://www.openarchives.org/OAI/2.0/"); - nsContext.put("prov", "http://www.openarchives.org/OAI/2.0/provenance"); - nsContext.put("dc", "http://purl.org/dc/elements/1.1/"); - nsContext.put("datacite", DATACITE_SCHEMA_KERNEL_3); - } + static { + nsContext.put("dr", "http://www.driver-repository.eu/namespace/dr"); + nsContext.put("dri", "http://www.driver-repository.eu/namespace/dri"); + nsContext.put("oaf", "http://namespace.openaire.eu/oaf"); + nsContext.put("oai", "http://www.openarchives.org/OAI/2.0/"); + nsContext.put("prov", "http://www.openarchives.org/OAI/2.0/provenance"); + nsContext.put("dc", "http://purl.org/dc/elements/1.1/"); + nsContext.put("datacite", DATACITE_SCHEMA_KERNEL_3); + } // lowercase pidTypes as keys, normal casing for the values protected static final Map pidTypeWithAuthority = new HashMap<>(); - static { + static { IdentifierFactory.PID_AUTHORITY - .keySet() - .stream() - .forEach(entry -> pidTypeWithAuthority.put(entry.toString().toLowerCase(), entry.toString())); + .keySet() + .stream() + .forEach(entry -> pidTypeWithAuthority.put(entry.toString().toLowerCase(), entry.toString())); } - protected AbstractMdRecordToOafMapper(final VocabularyGroup vocs, final boolean invisible, - final boolean shouldHashId, final boolean forceOriginalId) { - this.vocs = vocs; - this.invisible = invisible; - this.shouldHashId = shouldHashId; - this.forceOriginalId = forceOriginalId; - } - - protected AbstractMdRecordToOafMapper(final VocabularyGroup vocs, final boolean invisible, - final boolean shouldHashId) { - this.vocs = vocs; - this.invisible = invisible; - this.shouldHashId = shouldHashId; - this.forceOriginalId = false; - } - - public List processMdRecord(final String xml) { - - DocumentFactory.getInstance().setXPathNamespaceURIs(nsContext); - try { - final Document doc = DocumentHelper - .parseText( - xml - .replaceAll(DATACITE_SCHEMA_KERNEL_4, DATACITE_SCHEMA_KERNEL_3) - .replaceAll(DATACITE_SCHEMA_KERNEL_4_SLASH, DATACITE_SCHEMA_KERNEL_3) - .replaceAll(DATACITE_SCHEMA_KERNEL_3_SLASH, DATACITE_SCHEMA_KERNEL_3)); - - final KeyValue collectedFrom = getProvenanceDatasource( - doc, "//oaf:collectedFrom/@id", "//oaf:collectedFrom/@name"); - - if (collectedFrom == null) { - return Lists.newArrayList(); - } - - final KeyValue hostedBy = StringUtils.isBlank(doc.valueOf("//oaf:hostedBy/@id")) - ? collectedFrom - : getProvenanceDatasource(doc, "//oaf:hostedBy/@id", "//oaf:hostedBy/@name"); - - if (hostedBy == null) { - return Lists.newArrayList(); - } - - final DataInfo info = prepareDataInfo(doc, invisible); - final long lastUpdateTimestamp = new Date().getTime(); - - final List instances = prepareInstances(doc, info, collectedFrom, hostedBy); - - final String type = getResultType(doc, instances); - - return createOafs(doc, type, instances, collectedFrom, info, lastUpdateTimestamp); - } catch (DocumentException e) { - log.error("Error with record:\n" + xml); - return Lists.newArrayList(); - } - } - - protected String getResultType(final Document doc, final List instances) { - final String type = doc.valueOf("//dr:CobjCategory/@type"); - - if (StringUtils.isBlank(type) && vocs.vocabularyExists(ModelConstants.DNET_RESULT_TYPOLOGIES)) { - final String instanceType = instances - .stream() - .map(i -> i.getInstancetype().getClassid()) - .findFirst() - .filter(s -> !UNKNOWN.equalsIgnoreCase(s)) - .orElse("0000"); // Unknown - return Optional - .ofNullable(vocs.getSynonymAsQualifier(ModelConstants.DNET_RESULT_TYPOLOGIES, instanceType)) - .map(Qualifier::getClassid) - .orElse("0000"); - } - - return type; - } - - private KeyValue getProvenanceDatasource(final Document doc, final String xpathId, final String xpathName) { - final String dsId = doc.valueOf(xpathId); - final String dsName = doc.valueOf(xpathName); - - if (StringUtils.isBlank(dsId) || StringUtils.isBlank(dsName)) { - return null; - } - - return keyValue(createOpenaireId(10, dsId, true), dsName); - } - - protected List createOafs( - final Document doc, - final String type, - final List instances, - final KeyValue collectedFrom, - final DataInfo info, - final long lastUpdateTimestamp) { - - final OafEntity entity = createEntity(doc, type, instances, collectedFrom, info, lastUpdateTimestamp); - - final Set originalId = Sets.newHashSet(entity.getOriginalId()); - originalId.add(entity.getId()); - entity.setOriginalId(Lists.newArrayList(originalId)); - - if (!forceOriginalId) { - final String id = IdentifierFactory.createIdentifier(entity, shouldHashId); - if (!id.equals(entity.getId())) { - entity.setId(id); - } - } - - final List oafs = Lists.newArrayList(entity); - - if (!oafs.isEmpty()) { - Set rels = Sets.newHashSet(); - - rels.addAll(addProjectRels(doc, entity)); - rels.addAll(addOtherResultRels(doc, entity)); - rels.addAll(addRelations(doc, entity)); - - oafs.addAll(rels); - } - - return oafs; - } - - private OafEntity createEntity(final Document doc, - final String type, - final List instances, - final KeyValue collectedFrom, - final DataInfo info, - final long lastUpdateTimestamp) { - switch (type.toLowerCase()) { - case "publication": - final Publication p = new Publication(); - populateResultFields(p, 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); - d.setStoragedate(prepareDatasetStorageDate(doc, info)); - d.setDevice(prepareDatasetDevice(doc, info)); - d.setSize(prepareDatasetSize(doc, info)); - d.setVersion(prepareDatasetVersion(doc, info)); - d.setLastmetadataupdate(prepareDatasetLastMetadataUpdate(doc, info)); - d.setMetadataversionnumber(prepareDatasetMetadataVersionNumber(doc, info)); - d.setGeolocation(prepareDatasetGeoLocations(doc, info)); - return d; - case "software": - final Software s = new Software(); - populateResultFields(s, doc, instances, collectedFrom, info, lastUpdateTimestamp); - s.setDocumentationUrl(prepareSoftwareDocumentationUrls(doc, info)); - s.setLicense(prepareSoftwareLicenses(doc, info)); - s.setCodeRepositoryUrl(prepareSoftwareCodeRepositoryUrl(doc, info)); - s.setProgrammingLanguage(prepareSoftwareProgrammingLanguage(doc, info)); - return s; - case "": - case "otherresearchproducts": - default: - final OtherResearchProduct o = new OtherResearchProduct(); - populateResultFields(o, doc, instances, collectedFrom, info, lastUpdateTimestamp); - o.setContactperson(prepareOtherResearchProductContactPersons(doc, info)); - o.setContactgroup(prepareOtherResearchProductContactGroups(doc, info)); - o.setTool(prepareOtherResearchProductTools(doc, info)); - return o; - } - } - - private List addProjectRels( - final Document doc, - final OafEntity entity) { - - final List res = new ArrayList<>(); - - final String docId = entity.getId(); - - for (final Object o : doc.selectNodes("//oaf:projectid")) { - - final String originalId = ((Node) o).getText(); - - final String validationdDate = ((Node) o).valueOf("@validationDate"); - - if (StringUtils.isNotBlank(originalId)) { - final String projectId = createOpenaireId(40, originalId, true); - - res - .add( - OafMapperUtils - .getRelation( - docId, projectId, RESULT_PROJECT, OUTCOME, IS_PRODUCED_BY, entity, validationdDate)); - res - .add( - OafMapperUtils - .getRelation(projectId, docId, RESULT_PROJECT, OUTCOME, PRODUCES, entity, validationdDate)); - } - } - - return res; - } - - private List addRelations(Document doc, OafEntity entity) { - - final List rels = Lists.newArrayList(); - - for (Object o : doc.selectNodes("//oaf:relation")) { - Element element = (Element) o; - - final String target = StringUtils.trim(element.getText()); - final String relType = element.attributeValue("relType"); - final String subRelType = element.attributeValue("subRelType"); - final String relClass = element.attributeValue("relClass"); - - if (StringUtils.isNotBlank(target) && StringUtils.isNotBlank(relType) && StringUtils.isNotBlank(subRelType) - && StringUtils.isNotBlank(relClass)) { - - final String relClassInverse = ModelSupport - .findInverse(ModelSupport.rel(relType, subRelType, relClass)) - .getInverseRelClass(); - final String validationdDate = ((Node) o).valueOf("@validationDate"); - - if (StringUtils.isNotBlank(target)) { - final String targetType = element.attributeValue("targetType"); - if (StringUtils.isNotBlank(targetType)) { - final String targetId = createOpenaireId(targetType, target, true); - rels - .add( - OafMapperUtils - .getRelation( - entity.getId(), targetId, relType, subRelType, relClass, entity, - validationdDate)); - rels - .add( - OafMapperUtils - .getRelation( - targetId, entity.getId(), relType, subRelType, relClassInverse, entity, - validationdDate)); - } - } - } - } - return rels; - } - - protected abstract List addOtherResultRels( - final Document doc, - final OafEntity entity); - - private void populateResultFields( - final Result r, - final Document doc, - final List instances, - final KeyValue collectedFrom, - final DataInfo info, - final long lastUpdateTimestamp) { - r.setDataInfo(info); - r.setLastupdatetimestamp(lastUpdateTimestamp); - r.setId(createOpenaireId(50, doc.valueOf("//dri:objIdentifier"), false)); - r.setOriginalId(findOriginalId(doc)); - r.setCollectedfrom(Arrays.asList(collectedFrom)); - r.setPid(IdentifierFactory.getPids(prepareResultPids(doc, info), collectedFrom)); - r.setDateofcollection(doc.valueOf("//dr:dateOfCollection/text()|//dri:dateOfCollection/text()")); - r.setDateoftransformation(doc.valueOf("//dr:dateOfTransformation/text()|//dri:dateOfTransformation/text()")); - r.setExtraInfo(new ArrayList<>()); // NOT PRESENT IN MDSTORES - r.setOaiprovenance(prepareOAIprovenance(doc)); - r.setAuthor(prepareAuthors(doc, info)); - r.setLanguage(prepareLanguages(doc)); - r.setCountry(new ArrayList<>()); // NOT PRESENT IN MDSTORES - r.setSubject(prepareSubjects(doc, info)); - r.setTitle(prepareTitles(doc, info)); - r.setRelevantdate(prepareRelevantDates(doc, info)); - r.setDescription(prepareDescriptions(doc, info)); - r.setDateofacceptance(prepareField(doc, "//oaf:dateAccepted", info)); - r.setPublisher(preparePublisher(doc, info)); - r.setEmbargoenddate(prepareField(doc, "//oaf:embargoenddate", info)); - r.setSource(prepareSources(doc, info)); - r.setFulltext(prepareListFields(doc, "//oaf:fulltext", info)); - r.setFormat(prepareFormats(doc, info)); - r.setContributor(prepareContributors(doc, info)); - r.setResourcetype(prepareResourceType(doc, info)); - r.setCoverage(prepareCoverages(doc, info)); - r.setContext(prepareContexts(doc, info)); - r.setExternalReference(new ArrayList<>()); // NOT PRESENT IN MDSTORES - r - .setProcessingchargeamount(field(doc.valueOf("//oaf:processingchargeamount"), info)); - r - .setProcessingchargecurrency(field(doc.valueOf("//oaf:processingchargeamount/@currency"), info)); - - r.setInstance(instances); - r.setBestaccessright(OafMapperUtils.createBestAccessRights(instances)); - } - - protected abstract List prepareResultPids(Document doc, DataInfo info); - - private List prepareContexts(final Document doc, final DataInfo info) { - final List list = new ArrayList<>(); - for (final Object o : doc.selectNodes("//oaf:concept")) { - final String cid = ((Node) o).valueOf("@id"); - if (StringUtils.isNotBlank(cid)) { - final Context c = new Context(); - c.setId(cid); - c.setDataInfo(Arrays.asList(info)); - list.add(c); - } - } - return list; - } - - protected abstract Qualifier prepareResourceType(Document doc, DataInfo info); - - protected abstract List prepareInstances( - Document doc, - DataInfo info, - KeyValue collectedfrom, - KeyValue hostedby); - - protected abstract List> prepareSources(Document doc, DataInfo info); - - protected abstract List prepareRelevantDates(Document doc, DataInfo info); - - protected abstract List> prepareCoverages(Document doc, DataInfo info); - - protected abstract List> prepareContributors(Document doc, DataInfo info); - - protected abstract List> prepareFormats(Document doc, DataInfo info); - - protected abstract Field preparePublisher(Document doc, DataInfo info); - - protected abstract List> prepareDescriptions(Document doc, DataInfo info); - - protected abstract List prepareTitles(Document doc, DataInfo info); - - protected abstract List prepareSubjects(Document doc, DataInfo info); - - protected abstract Qualifier prepareLanguages(Document doc); - - protected abstract List prepareAuthors(Document doc, DataInfo info); - - protected abstract List> prepareOtherResearchProductTools( - Document doc, - DataInfo info); - - protected abstract List> prepareOtherResearchProductContactGroups( - Document doc, - DataInfo info); - - protected abstract List> prepareOtherResearchProductContactPersons( - Document doc, - DataInfo info); - - protected abstract Qualifier prepareSoftwareProgrammingLanguage(Document doc, DataInfo info); - - protected abstract Field prepareSoftwareCodeRepositoryUrl(Document doc, DataInfo info); - - protected abstract List prepareSoftwareLicenses(Document doc, DataInfo info); - - protected abstract List> prepareSoftwareDocumentationUrls( - Document doc, - DataInfo info); - - protected abstract List prepareDatasetGeoLocations(Document doc, DataInfo info); - - protected abstract Field prepareDatasetMetadataVersionNumber(Document doc, DataInfo info); - - protected abstract Field prepareDatasetLastMetadataUpdate(Document doc, DataInfo info); - - protected abstract Field prepareDatasetVersion(Document doc, DataInfo info); - - protected abstract Field prepareDatasetSize(Document doc, DataInfo info); - - protected abstract Field prepareDatasetDevice(Document doc, DataInfo info); - - protected abstract Field prepareDatasetStorageDate(Document doc, DataInfo info); - - private Journal prepareJournal(final Document doc, final DataInfo info) { - final Node n = doc.selectSingleNode("//oaf:journal"); - if (n != null) { - final String name = n.getText(); - final String issnPrinted = n.valueOf("@issn"); - final String issnOnline = n.valueOf("@eissn"); - final String issnLinking = n.valueOf("@lissn"); - final String ep = n.valueOf("@ep"); - final String iss = n.valueOf("@iss"); - final String sp = n.valueOf("@sp"); - final String vol = n.valueOf("@vol"); - final String edition = n.valueOf("@edition"); - if (StringUtils.isNotBlank(name)) { - return journal(name, issnPrinted, issnOnline, issnLinking, ep, iss, sp, vol, edition, null, null, info); - } - } - return null; - } - - private List findOriginalId(final Document doc) { - final Node n = doc.selectSingleNode("//*[local-name()='provenance']/*[local-name()='originDescription']"); - if (n != null) { - final String id = n.valueOf("./*[local-name()='identifier']"); - if (StringUtils.isNotBlank(id)) { - return Lists.newArrayList(id); - } - } - final List idList = doc - .selectNodes( - "normalize-space(//*[local-name()='header']/*[local-name()='identifier' or local-name()='recordIdentifier']/text())"); - final Set originalIds = Sets.newHashSet(idList); - - if (originalIds.isEmpty()) { - throw new IllegalStateException("missing originalID on " + doc.asXML()); - } - return Lists.newArrayList(originalIds); - } - - protected AccessRight prepareAccessRight(final Node node, final String xpath, final String schemeId) { - final Qualifier qualifier = prepareQualifier(node.valueOf(xpath).trim(), schemeId); - final AccessRight accessRight = new AccessRight(); - accessRight.setClassid(qualifier.getClassid()); - accessRight.setClassname(qualifier.getClassname()); - accessRight.setSchemeid(qualifier.getSchemeid()); - accessRight.setSchemename(qualifier.getSchemename()); - - // TODO set the OAStatus - - return accessRight; - } - - protected Qualifier prepareQualifier(final Node node, final String xpath, final String schemeId) { - return prepareQualifier(node.valueOf(xpath).trim(), schemeId); - } - - protected Qualifier prepareQualifier(final String classId, final String schemeId) { - return vocs.getTermAsQualifier(schemeId, classId); - } - - protected List prepareListStructPropsWithValidQualifier( - final Node node, - final String xpath, - final String xpathClassId, - final String schemeId, - final DataInfo info) { - final List res = new ArrayList<>(); - - for (final Object o : node.selectNodes(xpath)) { - final Node n = (Node) o; - final String classId = n.valueOf(xpathClassId).trim(); - if (vocs.termExists(schemeId, classId)) { - res.add(structuredProperty(n.getText(), vocs.getTermAsQualifier(schemeId, classId), info)); - } - } - return res; - } - - protected List prepareListStructProps( - final Node node, - final String xpath, - final Qualifier qualifier, - final DataInfo info) { - final List res = new ArrayList<>(); - for (final Object o : node.selectNodes(xpath)) { - final Node n = (Node) o; - res.add(structuredProperty(n.getText(), qualifier, info)); - } - return res; - } - - protected List prepareListStructProps( - final Node node, - final String xpath, - final DataInfo info) { - final List res = new ArrayList<>(); - for (final Object o : node.selectNodes(xpath)) { - final Node n = (Node) o; - res - .add( - structuredProperty( - n.getText(), n.valueOf("@classid"), n.valueOf("@classname"), n.valueOf("@schemeid"), - n.valueOf("@schemename"), info)); - } - return res; - } - - protected List prepareSubjectList( - final Node node, - final String xpath, - final DataInfo info) { - final List res = new ArrayList<>(); - for (final Object o : node.selectNodes(xpath)) { - final Node n = (Node) o; - res - .add( - subject( - n.getText(), n.valueOf("@classid"), n.valueOf("@classname"), n.valueOf("@schemeid"), - n.valueOf("@schemename"), info)); - } - return res; - } - - protected OAIProvenance prepareOAIprovenance(final Document doc) { - final Node n = doc.selectSingleNode("//*[local-name()='provenance']/*[local-name()='originDescription']"); - - if (n == null) { - return null; - } - - final String identifier = n.valueOf("./*[local-name()='identifier']"); - final String baseURL = n.valueOf("./*[local-name()='baseURL']"); - final String metadataNamespace = n.valueOf("./*[local-name()='metadataNamespace']"); - final boolean altered = n.valueOf("@altered").equalsIgnoreCase("true"); - final String datestamp = n.valueOf("./*[local-name()='datestamp']"); - final String harvestDate = n.valueOf("@harvestDate"); - - return oaiIProvenance(identifier, baseURL, metadataNamespace, altered, datestamp, harvestDate); - } - - protected DataInfo prepareDataInfo(final Document doc, final boolean invisible) { - final Node n = doc.selectSingleNode("//oaf:datainfo"); - - if (n == null) { - return dataInfo(false, null, false, invisible, REPOSITORY_PROVENANCE_ACTIONS, "0.9"); - } - - final String paClassId = n.valueOf("./oaf:provenanceaction/@classid"); - final String paClassName = n.valueOf("./oaf:provenanceaction/@classname"); - final String paSchemeId = n.valueOf("./oaf:provenanceaction/@schemeid"); - final String paSchemeName = n.valueOf("./oaf:provenanceaction/@schemename"); - - final boolean deletedbyinference = Boolean.parseBoolean(n.valueOf("./oaf:deletedbyinference")); - final String inferenceprovenance = n.valueOf("./oaf:inferenceprovenance"); - final Boolean inferred = Boolean.parseBoolean(n.valueOf("./oaf:inferred")); - final String trust = n.valueOf("./oaf:trust"); - - return dataInfo( - deletedbyinference, inferenceprovenance, inferred, invisible, - qualifier(paClassId, paClassName, paSchemeId, paSchemeName), trust); - } - - protected Field prepareField(final Node node, final String xpath, final DataInfo info) { - return field(node.valueOf(xpath), info); - } - - protected List> prepareListFields( - final Node node, - final String xpath, - final DataInfo info) { - return listFields(info, prepareListString(node, xpath)); - } - - protected List prepareListString(final Node node, final String xpath) { - final List res = new ArrayList<>(); - for (final Object o : node.selectNodes(xpath)) { - final String s = ((Node) o).getText().trim(); - if (StringUtils.isNotBlank(s)) { - res.add(s); - } - } - return res; - } - - protected Set validateUrl(Collection url) { - UrlValidator urlValidator = UrlValidator.getInstance(); - if (Objects.isNull(url)) { - return new HashSet<>(); - } - return url - .stream() - .filter(u -> urlValidator.isValid(u)) - .collect(Collectors.toCollection(HashSet::new)); - } + protected AbstractMdRecordToOafMapper(final VocabularyGroup vocs, final boolean invisible, + final boolean shouldHashId, final boolean forceOriginalId) { + this.vocs = vocs; + this.invisible = invisible; + this.shouldHashId = shouldHashId; + this.forceOriginalId = forceOriginalId; + } + + protected AbstractMdRecordToOafMapper(final VocabularyGroup vocs, final boolean invisible, + final boolean shouldHashId) { + this.vocs = vocs; + this.invisible = invisible; + this.shouldHashId = shouldHashId; + this.forceOriginalId = false; + } + + public List processMdRecord(final String xml) { + + DocumentFactory.getInstance().setXPathNamespaceURIs(nsContext); + try { + final Document doc = DocumentHelper + .parseText( + xml + .replaceAll(DATACITE_SCHEMA_KERNEL_4, DATACITE_SCHEMA_KERNEL_3) + .replaceAll(DATACITE_SCHEMA_KERNEL_4_SLASH, DATACITE_SCHEMA_KERNEL_3) + .replaceAll(DATACITE_SCHEMA_KERNEL_3_SLASH, DATACITE_SCHEMA_KERNEL_3)); + + final KeyValue collectedFrom = getProvenanceDatasource( + doc, "//oaf:collectedFrom/@id", "//oaf:collectedFrom/@name"); + + if (collectedFrom == null) { + return Lists.newArrayList(); + } + + final KeyValue hostedBy = StringUtils.isBlank(doc.valueOf("//oaf:hostedBy/@id")) + ? collectedFrom + : getProvenanceDatasource(doc, "//oaf:hostedBy/@id", "//oaf:hostedBy/@name"); + + if (hostedBy == null) { + return Lists.newArrayList(); + } + + final DataInfo info = prepareDataInfo(doc, invisible); + final long lastUpdateTimestamp = new Date().getTime(); + + final List instances = prepareInstances(doc, info, collectedFrom, hostedBy); + + final String type = getResultType(doc, instances); + + return createOafs(doc, type, instances, collectedFrom, info, lastUpdateTimestamp); + } catch (DocumentException e) { + log.error("Error with record:\n" + xml); + return Lists.newArrayList(); + } + } + + protected String getResultType(final Document doc, final List instances) { + final String type = doc.valueOf("//dr:CobjCategory/@type"); + + if (StringUtils.isBlank(type) && vocs.vocabularyExists(ModelConstants.DNET_RESULT_TYPOLOGIES)) { + final String instanceType = instances + .stream() + .map(i -> i.getInstancetype().getClassid()) + .findFirst() + .filter(s -> !UNKNOWN.equalsIgnoreCase(s)) + .orElse("0000"); // Unknown + return Optional + .ofNullable(vocs.getSynonymAsQualifier(ModelConstants.DNET_RESULT_TYPOLOGIES, instanceType)) + .map(Qualifier::getClassid) + .orElse("0000"); + } + + return type; + } + + private KeyValue getProvenanceDatasource(final Document doc, final String xpathId, final String xpathName) { + final String dsId = doc.valueOf(xpathId); + final String dsName = doc.valueOf(xpathName); + + if (StringUtils.isBlank(dsId) || StringUtils.isBlank(dsName)) { + return null; + } + + return keyValue(createOpenaireId(10, dsId, true), dsName); + } + + protected List createOafs( + final Document doc, + final String type, + final List instances, + final KeyValue collectedFrom, + final DataInfo info, + final long lastUpdateTimestamp) { + + final OafEntity entity = createEntity(doc, type, instances, collectedFrom, info, lastUpdateTimestamp); + + final Set originalId = Sets.newHashSet(entity.getOriginalId()); + originalId.add(entity.getId()); + entity.setOriginalId(Lists.newArrayList(originalId)); + + if (!forceOriginalId) { + final String id = IdentifierFactory.createIdentifier(entity, shouldHashId); + if (!id.equals(entity.getId())) { + entity.setId(id); + } + } + + final List oafs = Lists.newArrayList(entity); + + if (!oafs.isEmpty()) { + Set rels = Sets.newHashSet(); + + rels.addAll(addProjectRels(doc, entity)); + rels.addAll(addOtherResultRels(doc, entity)); + rels.addAll(addRelations(doc, entity)); + + oafs.addAll(rels); + } + + return oafs; + } + + private OafEntity createEntity(final Document doc, + final String type, + final List instances, + final KeyValue collectedFrom, + final DataInfo info, + final long lastUpdateTimestamp) { + switch (type.toLowerCase()) { + case "publication": + final Publication p = new Publication(); + populateResultFields(p, 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); + d.setStoragedate(prepareDatasetStorageDate(doc, info)); + d.setDevice(prepareDatasetDevice(doc, info)); + d.setSize(prepareDatasetSize(doc, info)); + d.setVersion(prepareDatasetVersion(doc, info)); + d.setLastmetadataupdate(prepareDatasetLastMetadataUpdate(doc, info)); + d.setMetadataversionnumber(prepareDatasetMetadataVersionNumber(doc, info)); + d.setGeolocation(prepareDatasetGeoLocations(doc, info)); + return d; + case "software": + final Software s = new Software(); + populateResultFields(s, doc, instances, collectedFrom, info, lastUpdateTimestamp); + s.setDocumentationUrl(prepareSoftwareDocumentationUrls(doc, info)); + s.setLicense(prepareSoftwareLicenses(doc, info)); + s.setCodeRepositoryUrl(prepareSoftwareCodeRepositoryUrl(doc, info)); + s.setProgrammingLanguage(prepareSoftwareProgrammingLanguage(doc, info)); + return s; + case "": + case "otherresearchproducts": + default: + final OtherResearchProduct o = new OtherResearchProduct(); + populateResultFields(o, doc, instances, collectedFrom, info, lastUpdateTimestamp); + o.setContactperson(prepareOtherResearchProductContactPersons(doc, info)); + o.setContactgroup(prepareOtherResearchProductContactGroups(doc, info)); + o.setTool(prepareOtherResearchProductTools(doc, info)); + return o; + } + } + + private List addProjectRels( + final Document doc, + final OafEntity entity) { + + final List res = new ArrayList<>(); + + final String docId = entity.getId(); + + for (final Object o : doc.selectNodes("//oaf:projectid")) { + + final String originalId = ((Node) o).getText(); + + final String validationdDate = ((Node) o).valueOf("@validationDate"); + + if (StringUtils.isNotBlank(originalId)) { + final String projectId = createOpenaireId(40, originalId, true); + + res + .add( + OafMapperUtils + .getRelation( + docId, projectId, RESULT_PROJECT, OUTCOME, IS_PRODUCED_BY, entity, validationdDate)); + res + .add( + OafMapperUtils + .getRelation(projectId, docId, RESULT_PROJECT, OUTCOME, PRODUCES, entity, validationdDate)); + } + } + + return res; + } + + private List addRelations(Document doc, OafEntity entity) { + + final List rels = Lists.newArrayList(); + + for (Object o : doc.selectNodes("//oaf:relation")) { + Element element = (Element) o; + + final String target = StringUtils.trim(element.getText()); + final String relType = element.attributeValue("relType"); + final String subRelType = element.attributeValue("subRelType"); + final String relClass = element.attributeValue("relClass"); + + if (StringUtils.isNotBlank(target) && StringUtils.isNotBlank(relType) && StringUtils.isNotBlank(subRelType) + && StringUtils.isNotBlank(relClass)) { + + final String relClassInverse = ModelSupport + .findInverse(ModelSupport.rel(relType, subRelType, relClass)) + .getInverseRelClass(); + final String validationdDate = ((Node) o).valueOf("@validationDate"); + + if (StringUtils.isNotBlank(target)) { + final String targetType = element.attributeValue("targetType"); + if (StringUtils.isNotBlank(targetType)) { + final String targetId = createOpenaireId(targetType, target, true); + rels + .add( + OafMapperUtils + .getRelation( + entity.getId(), targetId, relType, subRelType, relClass, entity, + validationdDate)); + rels + .add( + OafMapperUtils + .getRelation( + targetId, entity.getId(), relType, subRelType, relClassInverse, entity, + validationdDate)); + } + } + } + } + return rels; + } + + protected abstract List addOtherResultRels( + final Document doc, + final OafEntity entity); + + private void populateResultFields( + final Result r, + final Document doc, + final List instances, + final KeyValue collectedFrom, + final DataInfo info, + final long lastUpdateTimestamp) { + r.setDataInfo(info); + r.setLastupdatetimestamp(lastUpdateTimestamp); + r.setId(createOpenaireId(50, doc.valueOf("//dri:objIdentifier"), false)); + r.setOriginalId(findOriginalId(doc)); + r.setCollectedfrom(Arrays.asList(collectedFrom)); + r.setPid(IdentifierFactory.getPids(prepareResultPids(doc, info), collectedFrom)); + r.setDateofcollection(doc.valueOf("//dr:dateOfCollection/text()|//dri:dateOfCollection/text()")); + r.setDateoftransformation(doc.valueOf("//dr:dateOfTransformation/text()|//dri:dateOfTransformation/text()")); + r.setExtraInfo(new ArrayList<>()); // NOT PRESENT IN MDSTORES + r.setOaiprovenance(prepareOAIprovenance(doc)); + r.setAuthor(prepareAuthors(doc, info)); + r.setLanguage(prepareLanguages(doc)); + r.setCountry(new ArrayList<>()); // NOT PRESENT IN MDSTORES + r.setSubject(prepareSubjects(doc, info)); + r.setTitle(prepareTitles(doc, info)); + r.setRelevantdate(prepareRelevantDates(doc, info)); + r.setDescription(prepareDescriptions(doc, info)); + r.setDateofacceptance(prepareField(doc, "//oaf:dateAccepted", info)); + r.setPublisher(preparePublisher(doc, info)); + r.setEmbargoenddate(prepareField(doc, "//oaf:embargoenddate", info)); + r.setSource(prepareSources(doc, info)); + r.setFulltext(prepareListFields(doc, "//oaf:fulltext", info)); + r.setFormat(prepareFormats(doc, info)); + r.setContributor(prepareContributors(doc, info)); + r.setResourcetype(prepareResourceType(doc, info)); + r.setCoverage(prepareCoverages(doc, info)); + r.setContext(prepareContexts(doc, info)); + r.setExternalReference(new ArrayList<>()); // NOT PRESENT IN MDSTORES + r + .setProcessingchargeamount(field(doc.valueOf("//oaf:processingchargeamount"), info)); + r + .setProcessingchargecurrency(field(doc.valueOf("//oaf:processingchargeamount/@currency"), info)); + + r.setInstance(instances); + r.setBestaccessright(OafMapperUtils.createBestAccessRights(instances)); + } + + protected abstract List prepareResultPids(Document doc, DataInfo info); + + private List prepareContexts(final Document doc, final DataInfo info) { + final List list = new ArrayList<>(); + for (final Object o : doc.selectNodes("//oaf:concept")) { + final String cid = ((Node) o).valueOf("@id"); + if (StringUtils.isNotBlank(cid)) { + final Context c = new Context(); + c.setId(cid); + c.setDataInfo(Arrays.asList(info)); + list.add(c); + } + } + return list; + } + + protected abstract Qualifier prepareResourceType(Document doc, DataInfo info); + + protected abstract List prepareInstances( + Document doc, + DataInfo info, + KeyValue collectedfrom, + KeyValue hostedby); + + protected abstract List> prepareSources(Document doc, DataInfo info); + + protected abstract List prepareRelevantDates(Document doc, DataInfo info); + + protected abstract List> prepareCoverages(Document doc, DataInfo info); + + protected abstract List> prepareContributors(Document doc, DataInfo info); + + protected abstract List> prepareFormats(Document doc, DataInfo info); + + protected abstract Field preparePublisher(Document doc, DataInfo info); + + protected abstract List> prepareDescriptions(Document doc, DataInfo info); + + protected abstract List prepareTitles(Document doc, DataInfo info); + + protected abstract List prepareSubjects(Document doc, DataInfo info); + + protected abstract Qualifier prepareLanguages(Document doc); + + protected abstract List prepareAuthors(Document doc, DataInfo info); + + protected abstract List> prepareOtherResearchProductTools( + Document doc, + DataInfo info); + + protected abstract List> prepareOtherResearchProductContactGroups( + Document doc, + DataInfo info); + + protected abstract List> prepareOtherResearchProductContactPersons( + Document doc, + DataInfo info); + + protected abstract Qualifier prepareSoftwareProgrammingLanguage(Document doc, DataInfo info); + + protected abstract Field prepareSoftwareCodeRepositoryUrl(Document doc, DataInfo info); + + protected abstract List prepareSoftwareLicenses(Document doc, DataInfo info); + + protected abstract List> prepareSoftwareDocumentationUrls( + Document doc, + DataInfo info); + + protected abstract List prepareDatasetGeoLocations(Document doc, DataInfo info); + + protected abstract Field prepareDatasetMetadataVersionNumber(Document doc, DataInfo info); + + protected abstract Field prepareDatasetLastMetadataUpdate(Document doc, DataInfo info); + + protected abstract Field prepareDatasetVersion(Document doc, DataInfo info); + + protected abstract Field prepareDatasetSize(Document doc, DataInfo info); + + protected abstract Field prepareDatasetDevice(Document doc, DataInfo info); + + protected abstract Field prepareDatasetStorageDate(Document doc, DataInfo info); + + private Journal prepareJournal(final Document doc, final DataInfo info) { + final Node n = doc.selectSingleNode("//oaf:journal"); + if (n != null) { + final String name = n.getText(); + final String issnPrinted = n.valueOf("@issn"); + final String issnOnline = n.valueOf("@eissn"); + final String issnLinking = n.valueOf("@lissn"); + final String ep = n.valueOf("@ep"); + final String iss = n.valueOf("@iss"); + final String sp = n.valueOf("@sp"); + final String vol = n.valueOf("@vol"); + final String edition = n.valueOf("@edition"); + if (StringUtils.isNotBlank(name)) { + return journal(name, issnPrinted, issnOnline, issnLinking, ep, iss, sp, vol, edition, null, null, info); + } + } + return null; + } + + private List findOriginalId(final Document doc) { + final Node n = doc.selectSingleNode("//*[local-name()='provenance']/*[local-name()='originDescription']"); + if (n != null) { + final String id = n.valueOf("./*[local-name()='identifier']"); + if (StringUtils.isNotBlank(id)) { + return Lists.newArrayList(id); + } + } + final List idList = doc + .selectNodes( + "normalize-space(//*[local-name()='header']/*[local-name()='identifier' or local-name()='recordIdentifier']/text())"); + final Set originalIds = Sets.newHashSet(idList); + + if (originalIds.isEmpty()) { + throw new IllegalStateException("missing originalID on " + doc.asXML()); + } + return Lists.newArrayList(originalIds); + } + + protected AccessRight prepareAccessRight(final Node node, final String xpath, final String schemeId) { + final Qualifier qualifier = prepareQualifier(node.valueOf(xpath).trim(), schemeId); + final AccessRight accessRight = new AccessRight(); + accessRight.setClassid(qualifier.getClassid()); + accessRight.setClassname(qualifier.getClassname()); + accessRight.setSchemeid(qualifier.getSchemeid()); + accessRight.setSchemename(qualifier.getSchemename()); + + // TODO set the OAStatus + + return accessRight; + } + + protected Qualifier prepareQualifier(final Node node, final String xpath, final String schemeId) { + return prepareQualifier(node.valueOf(xpath).trim(), schemeId); + } + + protected Qualifier prepareQualifier(final String classId, final String schemeId) { + return vocs.getTermAsQualifier(schemeId, classId); + } + + protected List prepareListStructPropsWithValidQualifier( + final Node node, + final String xpath, + final String xpathClassId, + final String schemeId, + final DataInfo info) { + final List res = new ArrayList<>(); + + for (final Object o : node.selectNodes(xpath)) { + final Node n = (Node) o; + final String classId = n.valueOf(xpathClassId).trim(); + if (vocs.termExists(schemeId, classId)) { + res.add(structuredProperty(n.getText(), vocs.getTermAsQualifier(schemeId, classId), info)); + } + } + return res; + } + + protected List prepareListStructProps( + final Node node, + final String xpath, + final Qualifier qualifier, + final DataInfo info) { + final List res = new ArrayList<>(); + for (final Object o : node.selectNodes(xpath)) { + final Node n = (Node) o; + res.add(structuredProperty(n.getText(), qualifier, info)); + } + return res; + } + + protected List prepareListStructProps( + final Node node, + final String xpath, + final DataInfo info) { + final List res = new ArrayList<>(); + for (final Object o : node.selectNodes(xpath)) { + final Node n = (Node) o; + res + .add( + structuredProperty( + n.getText(), n.valueOf("@classid"), n.valueOf("@classname"), n.valueOf("@schemeid"), + n.valueOf("@schemename"), info)); + } + return res; + } + + protected List prepareSubjectList( + final Node node, + final String xpath, + final DataInfo info) { + final List res = new ArrayList<>(); + for (final Object o : node.selectNodes(xpath)) { + final Node n = (Node) o; + res + .add( + subject( + n.getText(), n.valueOf("@classid"), n.valueOf("@classname"), n.valueOf("@schemeid"), + n.valueOf("@schemename"), info)); + } + return res; + } + + protected OAIProvenance prepareOAIprovenance(final Document doc) { + final Node n = doc.selectSingleNode("//*[local-name()='provenance']/*[local-name()='originDescription']"); + + if (n == null) { + return null; + } + + final String identifier = n.valueOf("./*[local-name()='identifier']"); + final String baseURL = n.valueOf("./*[local-name()='baseURL']"); + final String metadataNamespace = n.valueOf("./*[local-name()='metadataNamespace']"); + final boolean altered = n.valueOf("@altered").equalsIgnoreCase("true"); + final String datestamp = n.valueOf("./*[local-name()='datestamp']"); + final String harvestDate = n.valueOf("@harvestDate"); + + return oaiIProvenance(identifier, baseURL, metadataNamespace, altered, datestamp, harvestDate); + } + + protected DataInfo prepareDataInfo(final Document doc, final boolean invisible) { + final Node n = doc.selectSingleNode("//oaf:datainfo"); + + if (n == null) { + return dataInfo(false, null, false, invisible, REPOSITORY_PROVENANCE_ACTIONS, "0.9"); + } + + final String paClassId = n.valueOf("./oaf:provenanceaction/@classid"); + final String paClassName = n.valueOf("./oaf:provenanceaction/@classname"); + final String paSchemeId = n.valueOf("./oaf:provenanceaction/@schemeid"); + final String paSchemeName = n.valueOf("./oaf:provenanceaction/@schemename"); + + final boolean deletedbyinference = Boolean.parseBoolean(n.valueOf("./oaf:deletedbyinference")); + final String inferenceprovenance = n.valueOf("./oaf:inferenceprovenance"); + final Boolean inferred = Boolean.parseBoolean(n.valueOf("./oaf:inferred")); + final String trust = n.valueOf("./oaf:trust"); + + return dataInfo( + deletedbyinference, inferenceprovenance, inferred, invisible, + qualifier(paClassId, paClassName, paSchemeId, paSchemeName), trust); + } + + protected Field prepareField(final Node node, final String xpath, final DataInfo info) { + return field(node.valueOf(xpath), info); + } + + protected List> prepareListFields( + final Node node, + final String xpath, + final DataInfo info) { + return listFields(info, prepareListString(node, xpath)); + } + + protected List prepareListString(final Node node, final String xpath) { + final List res = new ArrayList<>(); + for (final Object o : node.selectNodes(xpath)) { + final String s = ((Node) o).getText().trim(); + if (StringUtils.isNotBlank(s)) { + res.add(s); + } + } + return res; + } + + protected Set validateUrl(Collection url) { + UrlValidator urlValidator = UrlValidator.getInstance(); + if (Objects.isNull(url)) { + return new HashSet<>(); + } + return url + .stream() + .filter(u -> urlValidator.isValid(u)) + .collect(Collectors.toCollection(HashSet::new)); + } } diff --git a/pom.xml b/pom.xml index 55265bf55..9b60b9078 100644 --- a/pom.xml +++ b/pom.xml @@ -807,7 +807,7 @@ 3.3.3 3.4.2 [2.12,3.0) - [3.14.0-SNAPSHOT] + [3.15.0] [4.0.3] [6.0.5] [3.1.6] From f3f7604e6c342a4ec931ec5d1e5fb7370da029c3 Mon Sep 17 00:00:00 2001 From: Claudio Atzori Date: Tue, 27 Sep 2022 15:21:37 +0200 Subject: [PATCH 208/535] trying to fix a test that fails only on Jenkins --- .../test/scala/eu/dnetlib/dhp/datacite/DataciteToOAFTest.scala | 3 +++ 1 file changed, 3 insertions(+) diff --git a/dhp-workflows/dhp-aggregation/src/test/scala/eu/dnetlib/dhp/datacite/DataciteToOAFTest.scala b/dhp-workflows/dhp-aggregation/src/test/scala/eu/dnetlib/dhp/datacite/DataciteToOAFTest.scala index 48da049da..01ef3ba54 100644 --- a/dhp-workflows/dhp-aggregation/src/test/scala/eu/dnetlib/dhp/datacite/DataciteToOAFTest.scala +++ b/dhp-workflows/dhp-aggregation/src/test/scala/eu/dnetlib/dhp/datacite/DataciteToOAFTest.scala @@ -54,6 +54,9 @@ class DataciteToOAFTest extends AbstractVocabularyTest { val path = getClass.getResource("/eu/dnetlib/dhp/actionmanager/datacite/dataset").getPath val conf = new SparkConf() + conf.set("spark.driver.host", "localhost") + conf.set("spark.ui.enabled", "false") + val spark: SparkSession = SparkSession .builder() .config(conf) From 1cb79719a7295bd3fb0f145bc9bc9217d8f116bf Mon Sep 17 00:00:00 2001 From: "miriam.baglioni" Date: Wed, 28 Sep 2022 11:44:55 +0200 Subject: [PATCH 209/535] [BulkTag] fixed issues --- .../dhp/bulktag/community/ResultTagger.java | 11 ++++++----- .../eu/dnetlib/dhp/bulktag/BulkTagJobTest.java | 15 +-------------- .../update_subject_datasource/dataset_10.json | 10 ++++++++++ .../update_subject_datasource/dataset_10.json.gz | Bin 6968 -> 0 bytes 4 files changed, 17 insertions(+), 19 deletions(-) create mode 100644 dhp-workflows/dhp-enrichment/src/test/resources/eu/dnetlib/dhp/bulktag/sample/dataset/update_subject_datasource/dataset_10.json delete mode 100644 dhp-workflows/dhp-enrichment/src/test/resources/eu/dnetlib/dhp/bulktag/sample/dataset/update_subject_datasource/dataset_10.json.gz 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 ccb69a97d..9286c7385 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 @@ -152,7 +152,8 @@ public class ResultTagger implements Serializable { } result.getContext().forEach(c -> { - if (communities.contains(c.getId())) { + String cId = c.getId(); + if (communities.contains(cId)) { Optional> opt_dataInfoList = Optional.ofNullable(c.getDataInfo()); List dataInfoList; if (opt_dataInfoList.isPresent()) @@ -161,19 +162,19 @@ public class ResultTagger implements Serializable { dataInfoList = new ArrayList<>(); c.setDataInfo(dataInfoList); } - if (subjects.contains(c)) + if (subjects.contains(cId)) dataInfoList .add(OafMapperUtils.dataInfo(false, BULKTAG_DATA_INFO_TYPE, true, false, OafMapperUtils.qualifier(CLASS_ID_SUBJECT, CLASS_NAME_BULKTAG_SUBJECT, DNET_PROVENANCE_ACTIONS, DNET_PROVENANCE_ACTIONS), TAGGING_TRUST)); - if (datasources.contains(c)) + if (datasources.contains(cId)) dataInfoList .add(OafMapperUtils.dataInfo(false, BULKTAG_DATA_INFO_TYPE, true, false, OafMapperUtils.qualifier(CLASS_ID_DATASOURCE, CLASS_NAME_BULKTAG_DATASOURCE, DNET_PROVENANCE_ACTIONS, DNET_PROVENANCE_ACTIONS), TAGGING_TRUST)); - if (czenodo.contains(c)) + if (czenodo.contains(cId)) dataInfoList .add(OafMapperUtils.dataInfo(false, BULKTAG_DATA_INFO_TYPE, true, false, OafMapperUtils.qualifier(CLASS_ID_CZENODO, CLASS_NAME_BULKTAG_ZENODO, DNET_PROVENANCE_ACTIONS, DNET_PROVENANCE_ACTIONS), TAGGING_TRUST)); - if (aconstraints.contains(c)) + if (aconstraints.contains(cId)) dataInfoList .add( OafMapperUtils.dataInfo(false, BULKTAG_DATA_INFO_TYPE, true, false, 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 0212f4a49..30d9a43b2 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 @@ -21,6 +21,7 @@ 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.ForeachFunction; import org.apache.spark.sql.Encoders; import org.apache.spark.sql.Row; import org.apache.spark.sql.SparkSession; @@ -778,18 +779,4 @@ public class BulkTagJobTest { 1, idExplodeCommunity.filter("provenance = 'community:advconstraint'").count()); } -// @Test -// void test1(){ -// ProtoMap params = new Gson().fromJson(pathMap, ProtoMap.class); -// HashMap param = new HashMap<>(); -// for (String key : params.keySet()) { -// try { -// param.put(key, jsonContext.read(params.get(key))); -// } catch (com.jayway.jsonpath.PathNotFoundException e) { -// param.put(key, new ArrayList<>()); -// } -// } -// return param; -// } -// } } diff --git a/dhp-workflows/dhp-enrichment/src/test/resources/eu/dnetlib/dhp/bulktag/sample/dataset/update_subject_datasource/dataset_10.json b/dhp-workflows/dhp-enrichment/src/test/resources/eu/dnetlib/dhp/bulktag/sample/dataset/update_subject_datasource/dataset_10.json new file mode 100644 index 000000000..210719e29 --- /dev/null +++ b/dhp-workflows/dhp-enrichment/src/test/resources/eu/dnetlib/dhp/bulktag/sample/dataset/update_subject_datasource/dataset_10.json @@ -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":"10|doajarticles::8cec81178926caaca531afbd8eb5d64c","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":"10|opendoar____::1a551829d50f1400b0dab21fdd969c04","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, 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":[]} diff --git a/dhp-workflows/dhp-enrichment/src/test/resources/eu/dnetlib/dhp/bulktag/sample/dataset/update_subject_datasource/dataset_10.json.gz b/dhp-workflows/dhp-enrichment/src/test/resources/eu/dnetlib/dhp/bulktag/sample/dataset/update_subject_datasource/dataset_10.json.gz deleted file mode 100644 index fdc76a04c8b66fa7d14e03e25f67e7715b7e5843..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 6968 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 KBST|kQ~?0ZJb}sp From f1d7d45cf7b210c43d8af9635220bc710fce2341 Mon Sep 17 00:00:00 2001 From: "miriam.baglioni" Date: Wed, 28 Sep 2022 12:01:43 +0200 Subject: [PATCH 210/535] [BulkTag] fixed issue --- .../dnetlib/dhp/bulktag/community/ResultTagger.java | 11 ++++++----- 1 file changed, 6 insertions(+), 5 deletions(-) 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 ee75bf955..0452a6ebf 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 @@ -158,7 +158,8 @@ public class ResultTagger implements Serializable { } result.getContext().forEach(c -> { - if (communities.contains(c.getId())) { + final String cId = c.getId(); + if (communities.contains(cId)) { Optional> opt_dataInfoList = Optional.ofNullable(c.getDataInfo()); List dataInfoList; if (opt_dataInfoList.isPresent()) @@ -167,7 +168,7 @@ public class ResultTagger implements Serializable { dataInfoList = new ArrayList<>(); c.setDataInfo(dataInfoList); } - if (subjects.contains(c)) + if (subjects.contains(cId)) dataInfoList .add( OafMapperUtils @@ -178,7 +179,7 @@ public class ResultTagger implements Serializable { CLASS_ID_SUBJECT, CLASS_NAME_BULKTAG_SUBJECT, DNET_PROVENANCE_ACTIONS, DNET_PROVENANCE_ACTIONS), TAGGING_TRUST)); - if (datasources.contains(c)) + if (datasources.contains(cId)) dataInfoList .add( OafMapperUtils @@ -189,7 +190,7 @@ public class ResultTagger implements Serializable { CLASS_ID_DATASOURCE, CLASS_NAME_BULKTAG_DATASOURCE, DNET_PROVENANCE_ACTIONS, DNET_PROVENANCE_ACTIONS), TAGGING_TRUST)); - if (czenodo.contains(c)) + if (czenodo.contains(cId)) dataInfoList .add( OafMapperUtils @@ -200,7 +201,7 @@ public class ResultTagger implements Serializable { CLASS_ID_CZENODO, CLASS_NAME_BULKTAG_ZENODO, DNET_PROVENANCE_ACTIONS, DNET_PROVENANCE_ACTIONS), TAGGING_TRUST)); - if (aconstraints.contains(c)) + if (aconstraints.contains(cId)) dataInfoList .add( OafMapperUtils From b5b5a4c1928679ab308bcfe70d7969f0c1b99664 Mon Sep 17 00:00:00 2001 From: "miriam.baglioni" Date: Wed, 28 Sep 2022 12:42:51 +0200 Subject: [PATCH 211/535] [CleanCountry] fixed issue --- .../dhp/oa/graph/clean/country/CleanCountrySparkJob.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/dhp-workflows/dhp-graph-mapper/src/main/java/eu/dnetlib/dhp/oa/graph/clean/country/CleanCountrySparkJob.java b/dhp-workflows/dhp-graph-mapper/src/main/java/eu/dnetlib/dhp/oa/graph/clean/country/CleanCountrySparkJob.java index c150c63df..cd77f342e 100644 --- a/dhp-workflows/dhp-graph-mapper/src/main/java/eu/dnetlib/dhp/oa/graph/clean/country/CleanCountrySparkJob.java +++ b/dhp-workflows/dhp-graph-mapper/src/main/java/eu/dnetlib/dhp/oa/graph/clean/country/CleanCountrySparkJob.java @@ -117,7 +117,7 @@ public class CleanCountrySparkJob implements Serializable { p -> p .getQualifier() .getClassid() - .equals(PidType.doi) && pidInParam(p.getValue(), verifyParam))) { + .equals(PidType.doi.toString()) && pidInParam(p.getValue(), verifyParam))) { r .setCountry( r From 49360770d71d8930838240866a1cbc3ea06b465d Mon Sep 17 00:00:00 2001 From: Alessia Bardi Date: Wed, 28 Sep 2022 14:16:39 +0200 Subject: [PATCH 212/535] map w3id as instance url --- .../dhp/oa/graph/raw/OdfToOafMapper.java | 3 ++ .../dnetlib/dhp/oa/graph/raw/MappersTest.java | 17 +++++++---- .../eu/dnetlib/dhp/oa/graph/raw/rohub.xml | 30 ++++++++----------- 3 files changed, 27 insertions(+), 23 deletions(-) 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 a25bcd47e..39c77bd37 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 @@ -177,6 +177,9 @@ public class OdfToOafMapper extends AbstractMdRecordToOafMapper { for (final Object o : doc.selectNodes("//*[local-name()='identifier' and ./@identifierType='landingPage']")) { url.add(trimAndDecodeUrl(((Node) o).getText().trim())); } + for (final Object o : doc.selectNodes("//*[local-name()='identifier' and ./@identifierType='w3id']")) { + url.add(trimAndDecodeUrl(((Node) o).getText().trim())); + } Set validUrl = validateUrl(url); 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 7552d1789..f0eadbd0d 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 @@ -936,11 +936,18 @@ class MappersTest { System.out.println("***************"); System.out.println(new ObjectMapper().writeValueAsString(list)); System.out.println("***************"); -// final OtherResearchProduct p = (OtherResearchProduct) list.get(0); -// assertValidId(p.getId()); -// assertValidId(p.getCollectedfrom().get(0).getKey()); -// System.out.println(p.getTitle().get(0).getValue()); -// assertTrue(StringUtils.isNotBlank(p.getTitle().get(0).getValue())); + assertEquals(5, list.size()); + final OtherResearchProduct p = (OtherResearchProduct) list.get(0); + assertValidId(p.getId()); + assertTrue(p.getId().startsWith("50|w3id")); + assertValidId(p.getCollectedfrom().get(0).getKey()); + assertTrue(StringUtils.isNotBlank(p.getTitle().get(0).getValue())); + assertEquals(1, p.getInstance().size()); + assertEquals("https://w3id.org/ro-id/0ab171a7-45c5-4194-82d4-850955504bca", p.getPid().get(0).getValue()); + Instance inst = p.getInstance().get(0); + assertEquals("https://w3id.org/ro-id/0ab171a7-45c5-4194-82d4-850955504bca", inst.getPid().get(0).getValue()); + assertEquals("https://w3id.org/ro-id/0ab171a7-45c5-4194-82d4-850955504bca", inst.getUrl().get(0)); + } @Test diff --git a/dhp-workflows/dhp-graph-mapper/src/test/resources/eu/dnetlib/dhp/oa/graph/raw/rohub.xml b/dhp-workflows/dhp-graph-mapper/src/test/resources/eu/dnetlib/dhp/oa/graph/raw/rohub.xml index c85b55786..e1e30c3de 100644 --- a/dhp-workflows/dhp-graph-mapper/src/test/resources/eu/dnetlib/dhp/oa/graph/raw/rohub.xml +++ b/dhp-workflows/dhp-graph-mapper/src/test/resources/eu/dnetlib/dhp/oa/graph/raw/rohub.xml @@ -21,15 +21,13 @@ - https://w3id.org/ro-id/0ab171a7-45c5-4194-82d4-850955504bca - + https://w3id.org/ro-id/0ab171a7-45c5-4194-82d4-850955504bca + + https://w3id.org/ro-id/0ab171a7-45c5-4194-82d4-850955504bca + - - https://w3id.org/ro-id/0ab171a7-45c5-4194-82d4-850955504bca/resources/24fae96f-f986-46e1-bfd0-a21ca20ff0ce - - - https://w3id.org/ro-id/0ab171a7-45c5-4194-82d4-850955504bca/resources/6d3427a8-352e-49f4-9796-f618c44dc16d - + https://w3id.org/ro-id/0ab171a7-45c5-4194-82d4-850955504bca/resources/24fae96f-f986-46e1-bfd0-a21ca20ff0ce + https://w3id.org/ro-id/0ab171a7-45c5-4194-82d4-850955504bca/resources/6d3427a8-352e-49f4-9796-f618c44dc16d RO-crate @@ -43,21 +41,17 @@ Poznań Supercomputing and Networking Center - - - Generation Service - + + Generation Service - - CNR-ISMAR - + CNR-ISMAR - 2018-06-20T11:21:46Z + 2018-06-20T11:21:46Z The use of biological effects tools offer enormous potential to meet the challenges outlined by the European Union Marine Strategy Framework Directive (MSFD) whereby Member States are required to develop a robust set of tools for defining 11 qualitative descriptors of Good Environmental Status (GES), such as demonstrating that "Concentrations of contaminants are at levels not giving rise to pollution effects" (GES Descriptor 8). This paper discusses the combined approach of monitoring chemical contaminant levels, along side biological effect measurements relating to the effect of pollutants, for undertaking assessments of GES across European marine regions. We outline the minimum standards that biological effects tools should meet if they are to be used for defining GES in relation to Descriptor 8 and describe the current international initiatives underway to develop assessment criteria for these biological effects techniques. Crown Copyright (C) 2010 Published by Elsevier Ltd. All rights reserved. @@ -74,9 +68,9 @@ EOSC::RO-crate - https://w3id.org/ro-id/0ab171a7-45c5-4194-82d4-850955504bca + https://w3id.org/ro-id/0ab171a7-45c5-4194-82d4-850955504bca other research product - + 2018-06-20 OPEN From 188f25eefae15d23eb92dbd977d6e41fd78af157 Mon Sep 17 00:00:00 2001 From: "miriam.baglioni" Date: Mon, 3 Oct 2022 12:42:52 +0200 Subject: [PATCH 213/535] [BipFinder] Fixed issue for wrong escaped char in doi --- .../createunresolvedentities/PrepareBipFinder.java | 6 ++++-- .../actionmanager/createunresolvedentities/PrepareTest.java | 5 ++++- .../dhp/actionmanager/createunresolvedentities/bip/bip.json | 3 ++- 3 files changed, 10 insertions(+), 4 deletions(-) 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..a4f5c22bc 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 @@ -11,6 +11,7 @@ import java.util.List; import java.util.Optional; import java.util.stream.Collectors; +import com.fasterxml.jackson.core.JsonParser; import org.apache.commons.io.IOUtils; import org.apache.spark.SparkConf; import org.apache.spark.api.java.JavaRDD; @@ -40,7 +41,6 @@ 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 { @@ -82,9 +82,11 @@ public class PrepareBipFinder implements Serializable { final JavaSparkContext sc = JavaSparkContext.fromSparkContext(spark.sparkContext()); + ObjectMapper mapper = new ObjectMapper() + .configure(JsonParser.Feature.ALLOW_BACKSLASH_ESCAPING_ANY_CHARACTER, true); JavaRDD bipDeserializeJavaRDD = sc .textFile(inputPath) - .map(item -> OBJECT_MAPPER.readValue(item, BipDeserialize.class)); + .map(item -> mapper.readValue(item, BipDeserialize.class)); spark .createDataset(bipDeserializeJavaRDD.flatMap(entry -> entry.keySet().stream().map(key -> { 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..d0ce69043 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 @@ -88,7 +88,7 @@ public class PrepareTest { .textFile(workingDir.toString() + "/work/bip") .map(item -> OBJECT_MAPPER.readValue(item, Result.class)); - Assertions.assertEquals(86, tmp.count()); + Assertions.assertEquals(87, tmp.count()); String doi1 = "unresolved::10.0000/096020199389707::doi"; @@ -151,6 +151,9 @@ public class PrepareTest { 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()); + tmp.filter(r -> r.getId().startsWith("unresolved::10.2111/1551-5028(2004)057")) + .foreach(r -> System.out.println(OBJECT_MAPPER.writeValueAsString(r))); + } @Test diff --git a/dhp-workflows/dhp-aggregation/src/test/resources/eu/dnetlib/dhp/actionmanager/createunresolvedentities/bip/bip.json b/dhp-workflows/dhp-aggregation/src/test/resources/eu/dnetlib/dhp/actionmanager/createunresolvedentities/bip/bip.json index 03cef4be1..3a077ab5c 100644 --- a/dhp-workflows/dhp-aggregation/src/test/resources/eu/dnetlib/dhp/actionmanager/createunresolvedentities/bip/bip.json +++ b/dhp-workflows/dhp-aggregation/src/test/resources/eu/dnetlib/dhp/actionmanager/createunresolvedentities/bip/bip.json @@ -83,4 +83,5 @@ {"10.0000/hoplos.v4i7.41295": [{"id": "influence", "unit": [{"value": "5.91019644836e-09", "key": "score"}]}, {"id": "popularity_alt", "unit": [{"value": "0.0", "key": "score"}]}, {"id": "popularity", "unit": [{"value": "8.48190886761e-09", "key": "score"}]}]} {"10.0000/hoplos.v4i7.42830": [{"id": "influence", "unit": [{"value": "5.91019644836e-09", "key": "score"}]}, {"id": "popularity_alt", "unit": [{"value": "0.0", "key": "score"}]}, {"id": "popularity", "unit": [{"value": "8.48190886761e-09", "key": "score"}]}]} {"10.0000/hoplos.v4i7.42861": [{"id": "influence", "unit": [{"value": "5.91019644836e-09", "key": "score"}]}, {"id": "popularity_alt", "unit": [{"value": "0.0", "key": "score"}]}, {"id": "popularity", "unit": [{"value": "8.48190886761e-09", "key": "score"}]}]} -{"10.0000/hoplos.v4i7.43096": [{"id": "influence", "unit": [{"value": "5.91019644836e-09", "key": "score"}]}, {"id": "popularity_alt", "unit": [{"value": "0.0", "key": "score"}]}, {"id": "popularity", "unit": [{"value": "8.48190886761e-09", "key": "score"}]}]} \ No newline at end of file +{"10.0000/hoplos.v4i7.43096": [{"id": "influence", "unit": [{"value": "5.91019644836e-09", "key": "score"}]}, {"id": "popularity_alt", "unit": [{"value": "0.0", "key": "score"}]}, {"id": "popularity", "unit": [{"value": "8.48190886761e-09", "key": "score"}]}]} +{"10.2111/1551-5028(2004)057\[0539:sdsocg\]2.0.co;2": [{"id":"influence", "unit":[{"key":"score","value":"6.3290875E-9"},{"key":"class","value":"C"}]}, {"id":"popularity", "unit":[{"key":"score","value":"6.576763E-9"},{"key":"class","value":"C"}]}, {"id":"influence_alt", "unit":[{"key":"score","value":"11"},{"key":"class","value":"C"}]}, {"id":"popularity_alt", "unit":[{"key":"score","value":"1.0142108"},{"key":"class","value":"C"}]}, {"id":"impulse", "unit":[{"key":"score","value":"1"},{"key":"class","value":"C"}]}]} \ No newline at end of file From 28dc317350d792e75a843e8d4c9d6b2ea5735a2c Mon Sep 17 00:00:00 2001 From: "miriam.baglioni" Date: Tue, 4 Oct 2022 09:47:27 +0200 Subject: [PATCH 214/535] [BipFinder] refactoring --- .../createunresolvedentities/PrepareBipFinder.java | 4 ++-- .../actionmanager/createunresolvedentities/PrepareTest.java | 5 +++-- 2 files changed, 5 insertions(+), 4 deletions(-) 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 a4f5c22bc..2d2633e0f 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 @@ -11,7 +11,6 @@ import java.util.List; import java.util.Optional; import java.util.stream.Collectors; -import com.fasterxml.jackson.core.JsonParser; import org.apache.commons.io.IOUtils; import org.apache.spark.SparkConf; import org.apache.spark.api.java.JavaRDD; @@ -23,6 +22,7 @@ import org.apache.spark.sql.SparkSession; import org.slf4j.Logger; import org.slf4j.LoggerFactory; +import com.fasterxml.jackson.core.JsonParser; import com.fasterxml.jackson.databind.ObjectMapper; import eu.dnetlib.dhp.actionmanager.bipmodel.BipDeserialize; @@ -83,7 +83,7 @@ public class PrepareBipFinder implements Serializable { final JavaSparkContext sc = JavaSparkContext.fromSparkContext(spark.sparkContext()); ObjectMapper mapper = new ObjectMapper() - .configure(JsonParser.Feature.ALLOW_BACKSLASH_ESCAPING_ANY_CHARACTER, true); + .configure(JsonParser.Feature.ALLOW_BACKSLASH_ESCAPING_ANY_CHARACTER, true); JavaRDD bipDeserializeJavaRDD = sc .textFile(inputPath) .map(item -> mapper.readValue(item, BipDeserialize.class)); 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 d0ce69043..6ae1f246d 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 @@ -151,8 +151,9 @@ public class PrepareTest { 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()); - tmp.filter(r -> r.getId().startsWith("unresolved::10.2111/1551-5028(2004)057")) - .foreach(r -> System.out.println(OBJECT_MAPPER.writeValueAsString(r))); + tmp + .filter(r -> r.getId().startsWith("unresolved::10.2111/1551-5028(2004)057")) + .foreach(r -> System.out.println(OBJECT_MAPPER.writeValueAsString(r))); } From 7324853a1720821fc7d2ce4f1db94cd5f9892932 Mon Sep 17 00:00:00 2001 From: "miriam.baglioni" Date: Tue, 4 Oct 2022 14:29:39 +0200 Subject: [PATCH 215/535] Revert "[BipFinder] refactoring" This reverts commit 28dc317350d792e75a843e8d4c9d6b2ea5735a2c. --- .../createunresolvedentities/PrepareBipFinder.java | 4 ++-- .../actionmanager/createunresolvedentities/PrepareTest.java | 5 ++--- 2 files changed, 4 insertions(+), 5 deletions(-) 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 2d2633e0f..a4f5c22bc 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 @@ -11,6 +11,7 @@ import java.util.List; import java.util.Optional; import java.util.stream.Collectors; +import com.fasterxml.jackson.core.JsonParser; import org.apache.commons.io.IOUtils; import org.apache.spark.SparkConf; import org.apache.spark.api.java.JavaRDD; @@ -22,7 +23,6 @@ import org.apache.spark.sql.SparkSession; import org.slf4j.Logger; import org.slf4j.LoggerFactory; -import com.fasterxml.jackson.core.JsonParser; import com.fasterxml.jackson.databind.ObjectMapper; import eu.dnetlib.dhp.actionmanager.bipmodel.BipDeserialize; @@ -83,7 +83,7 @@ public class PrepareBipFinder implements Serializable { final JavaSparkContext sc = JavaSparkContext.fromSparkContext(spark.sparkContext()); ObjectMapper mapper = new ObjectMapper() - .configure(JsonParser.Feature.ALLOW_BACKSLASH_ESCAPING_ANY_CHARACTER, true); + .configure(JsonParser.Feature.ALLOW_BACKSLASH_ESCAPING_ANY_CHARACTER, true); JavaRDD bipDeserializeJavaRDD = sc .textFile(inputPath) .map(item -> mapper.readValue(item, BipDeserialize.class)); 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 6ae1f246d..d0ce69043 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 @@ -151,9 +151,8 @@ public class PrepareTest { 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()); - tmp - .filter(r -> r.getId().startsWith("unresolved::10.2111/1551-5028(2004)057")) - .foreach(r -> System.out.println(OBJECT_MAPPER.writeValueAsString(r))); + tmp.filter(r -> r.getId().startsWith("unresolved::10.2111/1551-5028(2004)057")) + .foreach(r -> System.out.println(OBJECT_MAPPER.writeValueAsString(r))); } From 4d8339614b5e1240243e4a139d494e1988f6746e Mon Sep 17 00:00:00 2001 From: "miriam.baglioni" Date: Tue, 4 Oct 2022 14:29:47 +0200 Subject: [PATCH 216/535] Revert "[BipFinder] Fixed issue for wrong escaped char in doi" This reverts commit 188f25eefae15d23eb92dbd977d6e41fd78af157. --- .../createunresolvedentities/PrepareBipFinder.java | 6 ++---- .../actionmanager/createunresolvedentities/PrepareTest.java | 5 +---- .../dhp/actionmanager/createunresolvedentities/bip/bip.json | 3 +-- 3 files changed, 4 insertions(+), 10 deletions(-) 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 a4f5c22bc..80573c71a 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 @@ -11,7 +11,6 @@ import java.util.List; import java.util.Optional; import java.util.stream.Collectors; -import com.fasterxml.jackson.core.JsonParser; import org.apache.commons.io.IOUtils; import org.apache.spark.SparkConf; import org.apache.spark.api.java.JavaRDD; @@ -41,6 +40,7 @@ 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 { @@ -82,11 +82,9 @@ public class PrepareBipFinder implements Serializable { final JavaSparkContext sc = JavaSparkContext.fromSparkContext(spark.sparkContext()); - ObjectMapper mapper = new ObjectMapper() - .configure(JsonParser.Feature.ALLOW_BACKSLASH_ESCAPING_ANY_CHARACTER, true); JavaRDD bipDeserializeJavaRDD = sc .textFile(inputPath) - .map(item -> mapper.readValue(item, BipDeserialize.class)); + .map(item -> OBJECT_MAPPER.readValue(item, BipDeserialize.class)); spark .createDataset(bipDeserializeJavaRDD.flatMap(entry -> entry.keySet().stream().map(key -> { 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 d0ce69043..cc8108bde 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 @@ -88,7 +88,7 @@ public class PrepareTest { .textFile(workingDir.toString() + "/work/bip") .map(item -> OBJECT_MAPPER.readValue(item, Result.class)); - Assertions.assertEquals(87, tmp.count()); + Assertions.assertEquals(86, tmp.count()); String doi1 = "unresolved::10.0000/096020199389707::doi"; @@ -151,9 +151,6 @@ public class PrepareTest { 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()); - tmp.filter(r -> r.getId().startsWith("unresolved::10.2111/1551-5028(2004)057")) - .foreach(r -> System.out.println(OBJECT_MAPPER.writeValueAsString(r))); - } @Test diff --git a/dhp-workflows/dhp-aggregation/src/test/resources/eu/dnetlib/dhp/actionmanager/createunresolvedentities/bip/bip.json b/dhp-workflows/dhp-aggregation/src/test/resources/eu/dnetlib/dhp/actionmanager/createunresolvedentities/bip/bip.json index 3a077ab5c..03cef4be1 100644 --- a/dhp-workflows/dhp-aggregation/src/test/resources/eu/dnetlib/dhp/actionmanager/createunresolvedentities/bip/bip.json +++ b/dhp-workflows/dhp-aggregation/src/test/resources/eu/dnetlib/dhp/actionmanager/createunresolvedentities/bip/bip.json @@ -83,5 +83,4 @@ {"10.0000/hoplos.v4i7.41295": [{"id": "influence", "unit": [{"value": "5.91019644836e-09", "key": "score"}]}, {"id": "popularity_alt", "unit": [{"value": "0.0", "key": "score"}]}, {"id": "popularity", "unit": [{"value": "8.48190886761e-09", "key": "score"}]}]} {"10.0000/hoplos.v4i7.42830": [{"id": "influence", "unit": [{"value": "5.91019644836e-09", "key": "score"}]}, {"id": "popularity_alt", "unit": [{"value": "0.0", "key": "score"}]}, {"id": "popularity", "unit": [{"value": "8.48190886761e-09", "key": "score"}]}]} {"10.0000/hoplos.v4i7.42861": [{"id": "influence", "unit": [{"value": "5.91019644836e-09", "key": "score"}]}, {"id": "popularity_alt", "unit": [{"value": "0.0", "key": "score"}]}, {"id": "popularity", "unit": [{"value": "8.48190886761e-09", "key": "score"}]}]} -{"10.0000/hoplos.v4i7.43096": [{"id": "influence", "unit": [{"value": "5.91019644836e-09", "key": "score"}]}, {"id": "popularity_alt", "unit": [{"value": "0.0", "key": "score"}]}, {"id": "popularity", "unit": [{"value": "8.48190886761e-09", "key": "score"}]}]} -{"10.2111/1551-5028(2004)057\[0539:sdsocg\]2.0.co;2": [{"id":"influence", "unit":[{"key":"score","value":"6.3290875E-9"},{"key":"class","value":"C"}]}, {"id":"popularity", "unit":[{"key":"score","value":"6.576763E-9"},{"key":"class","value":"C"}]}, {"id":"influence_alt", "unit":[{"key":"score","value":"11"},{"key":"class","value":"C"}]}, {"id":"popularity_alt", "unit":[{"key":"score","value":"1.0142108"},{"key":"class","value":"C"}]}, {"id":"impulse", "unit":[{"key":"score","value":"1"},{"key":"class","value":"C"}]}]} \ No newline at end of file +{"10.0000/hoplos.v4i7.43096": [{"id": "influence", "unit": [{"value": "5.91019644836e-09", "key": "score"}]}, {"id": "popularity_alt", "unit": [{"value": "0.0", "key": "score"}]}, {"id": "popularity", "unit": [{"value": "8.48190886761e-09", "key": "score"}]}]} \ No newline at end of file From a653e1b3eac653c758cb10d089f6d8eb37101261 Mon Sep 17 00:00:00 2001 From: "miriam.baglioni" Date: Tue, 4 Oct 2022 15:01:28 +0200 Subject: [PATCH 217/535] [Enrichment - result to community through organization] reimplementation of the data preparation step using spark --- .../PrepareResultCommunitySet.java | 47 +++++++++++-------- 1 file changed, 27 insertions(+), 20 deletions(-) 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 1a008797d..19b985964 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 @@ -9,7 +9,9 @@ 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.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; @@ -70,28 +72,33 @@ public class PrepareResultCommunitySet { String outputPath, OrganizationMap organizationMap) { - Dataset relation = readPath(spark, inputPath, Relation.class); - relation.createOrReplaceTempView("relation"); + Dataset relationAffiliation = readPath(spark, inputPath, Relation.class) + .filter( + (FilterFunction) r -> !r.getDataInfo().getDeletedbyinference() && + r.getRelClass().equalsIgnoreCase(ModelConstants.HAS_AUTHOR_INSTITUTION)); - String query = "SELECT result_organization.source resultId, result_organization.target orgId, org_set merges " - + "FROM (SELECT source, target " - + " FROM relation " - + " WHERE datainfo.deletedbyinference = false " - + " AND lower(relClass) = '" - + ModelConstants.HAS_AUTHOR_INSTITUTION.toLowerCase() - + "') result_organization " - + "LEFT JOIN (SELECT source, collect_set(target) org_set " - + " FROM relation " - + " WHERE datainfo.deletedbyinference = false " - + " AND lower(relClass) = '" - + ModelConstants.MERGES.toLowerCase() - + "' " - + " GROUP BY source) organization_organization " - + "ON result_organization.target = organization_organization.source "; + Dataset relationOrganization = readPath(spark, inputPath, Relation.class) + .filter( + (FilterFunction) r -> !r.getDataInfo().getDeletedbyinference() && + r.getRelClass().equalsIgnoreCase(ModelConstants.MERGES)); - Dataset result_organizationset = spark - .sql(query) - .as(Encoders.bean(ResultOrganizations.class)); + Dataset result_organizationset = relationAffiliation + .joinWith( + relationOrganization, + relationAffiliation.col("target").equalTo(relationOrganization.col("source")), + "left") + .groupByKey((MapFunction, String>) t2 -> t2._2().getSource(), Encoders.STRING()) + .mapGroups((MapGroupsFunction, ResultOrganizations>) (k, it) -> { + ResultOrganizations rOrgs = new ResultOrganizations(); + rOrgs.setOrgId(k); + Tuple2 first = it.next(); + rOrgs.setResultId(first._1().getSource()); + ArrayList merges = new ArrayList<>(); + merges.add(first._2().getTarget()); + it.forEachRemaining(t -> merges.add(t._2().getTarget())); + rOrgs.setMerges(merges); + return rOrgs; + }, Encoders.bean(ResultOrganizations.class)); result_organizationset .map(mapResultCommunityFn(organizationMap), Encoders.bean(ResultCommunityList.class)) From 8d97949316a93884a123746cec0d60f6c34b2a2e Mon Sep 17 00:00:00 2001 From: Claudio Atzori Date: Fri, 7 Oct 2022 09:52:45 +0200 Subject: [PATCH 218/535] [cleaning] fixed loop in wf nodes --- .../eu/dnetlib/dhp/oa/graph/clean/oozie_app/workflow.xml | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/dhp-workflows/dhp-graph-mapper/src/main/resources/eu/dnetlib/dhp/oa/graph/clean/oozie_app/workflow.xml b/dhp-workflows/dhp-graph-mapper/src/main/resources/eu/dnetlib/dhp/oa/graph/clean/oozie_app/workflow.xml index 2ba0a7ad7..08e74a5e5 100644 --- a/dhp-workflows/dhp-graph-mapper/src/main/resources/eu/dnetlib/dhp/oa/graph/clean/oozie_app/workflow.xml +++ b/dhp-workflows/dhp-graph-mapper/src/main/resources/eu/dnetlib/dhp/oa/graph/clean/oozie_app/workflow.xml @@ -492,7 +492,7 @@ --datasourcePath${workingDir}/working/hostedby --collectedfrom${collectedfrom} - + @@ -521,7 +521,7 @@ --datasourcePath${workingDir}/working/hostedby --collectedfrom${collectedfrom} - + @@ -550,7 +550,7 @@ --datasourcePath${workingDir}/working/hostedby --collectedfrom${collectedfrom} - + From ece40adc09b5124386fb4f28391f7b151ea0ceea Mon Sep 17 00:00:00 2001 From: Claudio Atzori Date: Tue, 11 Oct 2022 10:10:20 +0200 Subject: [PATCH 219/535] [cleaning] fixing NPE in the country cleaning phase --- .../dhp/oa/graph/clean/country/GetDatasourceFromCountry.java | 4 +--- 1 file changed, 1 insertion(+), 3 deletions(-) diff --git a/dhp-workflows/dhp-graph-mapper/src/main/java/eu/dnetlib/dhp/oa/graph/clean/country/GetDatasourceFromCountry.java b/dhp-workflows/dhp-graph-mapper/src/main/java/eu/dnetlib/dhp/oa/graph/clean/country/GetDatasourceFromCountry.java index dd5af6998..d3741d3e8 100644 --- a/dhp-workflows/dhp-graph-mapper/src/main/java/eu/dnetlib/dhp/oa/graph/clean/country/GetDatasourceFromCountry.java +++ b/dhp-workflows/dhp-graph-mapper/src/main/java/eu/dnetlib/dhp/oa/graph/clean/country/GetDatasourceFromCountry.java @@ -65,7 +65,6 @@ public class GetDatasourceFromCountry implements Serializable { conf, isSparkSessionManaged, spark -> { - getDatasourceFromCountry(spark, country, inputPath, workingPath); }); } @@ -83,7 +82,6 @@ public class GetDatasourceFromCountry implements Serializable { (FilterFunction) o -> !o.getDataInfo().getDeletedbyinference() && o.getCountry().getClassid().length() > 0 && o.getCountry().getClassid().equals(country)); - ; // filtering of the relations taking the non deleted by inference and those with IsProvidedBy as relclass Dataset relation = spark @@ -97,7 +95,7 @@ public class GetDatasourceFromCountry implements Serializable { !rel.getDataInfo().getDeletedbyinference()); organization - .joinWith(relation, organization.col("id").equalTo(relation.col("target")), "left") + .joinWith(relation, organization.col("id").equalTo(relation.col("target"))) .map((MapFunction, String>) t2 -> t2._2().getSource(), Encoders.STRING()) .write() .mode(SaveMode.Overwrite) From b301e9fdfffa4da0240981f97e0bd3bb5dbbfcdc Mon Sep 17 00:00:00 2001 From: Claudio Atzori Date: Tue, 11 Oct 2022 11:08:52 +0200 Subject: [PATCH 220/535] [cleaning] renamed action name/description --- .../eu/dnetlib/dhp/oa/graph/clean/oozie_app/workflow.xml | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/dhp-workflows/dhp-graph-mapper/src/main/resources/eu/dnetlib/dhp/oa/graph/clean/oozie_app/workflow.xml b/dhp-workflows/dhp-graph-mapper/src/main/resources/eu/dnetlib/dhp/oa/graph/clean/oozie_app/workflow.xml index 08e74a5e5..19e1b2a02 100644 --- a/dhp-workflows/dhp-graph-mapper/src/main/resources/eu/dnetlib/dhp/oa/graph/clean/oozie_app/workflow.xml +++ b/dhp-workflows/dhp-graph-mapper/src/main/resources/eu/dnetlib/dhp/oa/graph/clean/oozie_app/workflow.xml @@ -432,14 +432,14 @@ - + - + yarn cluster - Clean publications context + Select datasource ID from country eu.dnetlib.dhp.oa.graph.clean.country.GetDatasourceFromCountry dhp-graph-mapper-${projectVersion}.jar From 6163ecbf63858f5a3b34cffa19b63fa59f851d9a Mon Sep 17 00:00:00 2001 From: Claudio Atzori Date: Tue, 11 Oct 2022 11:20:03 +0200 Subject: [PATCH 221/535] [cleaning] renamed parameters in wf action --- .../dhp/oa/graph/clean/oozie_app/workflow.xml | 16 ++++++++-------- 1 file changed, 8 insertions(+), 8 deletions(-) diff --git a/dhp-workflows/dhp-graph-mapper/src/main/resources/eu/dnetlib/dhp/oa/graph/clean/oozie_app/workflow.xml b/dhp-workflows/dhp-graph-mapper/src/main/resources/eu/dnetlib/dhp/oa/graph/clean/oozie_app/workflow.xml index 19e1b2a02..6435d5131 100644 --- a/dhp-workflows/dhp-graph-mapper/src/main/resources/eu/dnetlib/dhp/oa/graph/clean/oozie_app/workflow.xml +++ b/dhp-workflows/dhp-graph-mapper/src/main/resources/eu/dnetlib/dhp/oa/graph/clean/oozie_app/workflow.xml @@ -471,7 +471,7 @@ yarn cluster - Clean publications counmtry + Clean publication country eu.dnetlib.dhp.oa.graph.clean.country.CleanCountrySparkJob dhp-graph-mapper-${projectVersion}.jar @@ -489,7 +489,7 @@ --workingPath${workingDir}/working/publication --country${country} --verifyParam${verifyCountryParam} - --datasourcePath${workingDir}/working/hostedby + --hostedBy${workingDir}/working/hostedby --collectedfrom${collectedfrom} @@ -500,7 +500,7 @@ yarn cluster - Clean datasets Country + Clean dataset country eu.dnetlib.dhp.oa.graph.clean.country.CleanCountrySparkJob dhp-graph-mapper-${projectVersion}.jar @@ -518,7 +518,7 @@ --workingPath${workingDir}/working/dataset --country${country} --verifyParam${verifyCountryParam} - --datasourcePath${workingDir}/working/hostedby + --hostedBy${workingDir}/working/hostedby --collectedfrom${collectedfrom} @@ -529,7 +529,7 @@ yarn cluster - Clean otherresearchproducts country + Clean otherresearchproduct country eu.dnetlib.dhp.oa.graph.clean.country.CleanCountrySparkJob dhp-graph-mapper-${projectVersion}.jar @@ -547,7 +547,7 @@ --workingPath${workingDir}/working/otherresearchproduct --country${country} --verifyParam${verifyCountryParam} - --datasourcePath${workingDir}/working/hostedby + --hostedBy${workingDir}/working/hostedby --collectedfrom${collectedfrom} @@ -558,7 +558,7 @@ yarn cluster - Clean softwares country + Clean software country eu.dnetlib.dhp.oa.graph.clean.country.CleanCountrySparkJob dhp-graph-mapper-${projectVersion}.jar @@ -576,7 +576,7 @@ --workingPath${workingDir}/working/software --country${country} --verifyParam${verifyCountryParam} - --datasourcePath${workingDir}/working/hostedby + --hostedBy${workingDir}/working/hostedby --collectedfrom${collectedfrom} From b47aaf4dd17b9446bd423637391fbe83aab80775 Mon Sep 17 00:00:00 2001 From: Claudio Atzori Date: Thu, 13 Oct 2022 11:23:43 +0200 Subject: [PATCH 222/535] [cleaning] subjects declared as belonging to specific vocabularies whose values are not found in the vocab are set to type keyword --- .../oaf/utils/GraphCleaningFunctions.java | 2 +- .../dhp/oa/graph/clean/CleaningRuleMap.java | 37 ++++++++++--------- .../clean/country/CleanCountrySparkJob.java | 2 +- .../clean/GraphCleaningFunctionsTest.java | 10 +++++ .../eu/dnetlib/dhp/oa/graph/clean/result.json | 22 +++++++++++ 5 files changed, 54 insertions(+), 19 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 775f228eb..363f95423 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 @@ -211,7 +211,7 @@ public class GraphCleaningFunctions extends CleaningFunctions { .orElse(s.getValue()), Function.identity(), (s1, s2) -> Collections - .min(Lists.newArrayList(s1, s1), new SubjectProvenanceComparator()))) + .min(Lists.newArrayList(s1, s2), new SubjectProvenanceComparator()))) .values()); r.setSubject(subjects); } diff --git a/dhp-workflows/dhp-graph-mapper/src/main/java/eu/dnetlib/dhp/oa/graph/clean/CleaningRuleMap.java b/dhp-workflows/dhp-graph-mapper/src/main/java/eu/dnetlib/dhp/oa/graph/clean/CleaningRuleMap.java index 147e26699..5f3b4e1ca 100644 --- a/dhp-workflows/dhp-graph-mapper/src/main/java/eu/dnetlib/dhp/oa/graph/clean/CleaningRuleMap.java +++ b/dhp-workflows/dhp-graph-mapper/src/main/java/eu/dnetlib/dhp/oa/graph/clean/CleaningRuleMap.java @@ -3,6 +3,7 @@ package eu.dnetlib.dhp.oa.graph.clean; import java.io.Serializable; import java.util.HashMap; +import java.util.Objects; import java.util.concurrent.atomic.AtomicReference; import org.apache.commons.lang3.SerializationUtils; @@ -10,6 +11,7 @@ import org.apache.commons.lang3.StringUtils; import eu.dnetlib.dhp.common.FunctionalInterfaceSupport.SerializableConsumer; 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.oaf.*; @@ -31,29 +33,30 @@ public class CleaningRuleMap extends HashMap, SerializableConsumer modified = new AtomicReference<>(false); + vocabularies.find(vocabularyId).ifPresent(vocabulary -> { - if (!ModelConstants.DNET_SUBJECT_KEYWORD.equalsIgnoreCase(subject.getQualifier().getClassid())) { - return; - } - Qualifier newValue = vocabulary.lookup(subject.getValue()); - if (!ModelConstants.UNKNOWN.equals(newValue.getClassid())) { - subject.setValue(newValue.getClassid()); - subject.getQualifier().setClassid(vocabularyId); - subject.getQualifier().setClassname(vocabulary.getName()); - modified.set(true); + if (ModelConstants.DNET_SUBJECT_KEYWORD.equalsIgnoreCase(subject.getQualifier().getClassid())) { + Qualifier newValue = vocabulary.lookup(subject.getValue()); + if (!ModelConstants.UNKNOWN.equals(newValue.getClassid())) { + subject.setValue(newValue.getClassid()); + subject.getQualifier().setClassid(vocabularyId); + subject.getQualifier().setClassname(vocabulary.getName()); + } + } else if (vocabularyId.equals(subject.getQualifier().getClassid())) { + Qualifier syn = vocabulary.getSynonymAsQualifier(subject.getValue()); + VocabularyTerm term = vocabulary.getTerm(subject.getValue()); + if (Objects.isNull(syn) && Objects.isNull(term)) { + subject.getQualifier().setClassid(ModelConstants.DNET_SUBJECT_KEYWORD); + subject.getQualifier().setClassname(ModelConstants.DNET_SUBJECT_KEYWORD); + } } }); - return modified.get(); } private static void cleanRelation(VocabularyGroup vocabularies, Relation r) { diff --git a/dhp-workflows/dhp-graph-mapper/src/main/java/eu/dnetlib/dhp/oa/graph/clean/country/CleanCountrySparkJob.java b/dhp-workflows/dhp-graph-mapper/src/main/java/eu/dnetlib/dhp/oa/graph/clean/country/CleanCountrySparkJob.java index cd77f342e..45590f789 100644 --- a/dhp-workflows/dhp-graph-mapper/src/main/java/eu/dnetlib/dhp/oa/graph/clean/country/CleanCountrySparkJob.java +++ b/dhp-workflows/dhp-graph-mapper/src/main/java/eu/dnetlib/dhp/oa/graph/clean/country/CleanCountrySparkJob.java @@ -43,7 +43,7 @@ public class CleanCountrySparkJob implements Serializable { String jsonConfiguration = IOUtils .toString( - CleanContextSparkJob.class + CleanCountrySparkJob.class .getResourceAsStream( "/eu/dnetlib/dhp/oa/graph/input_clean_country_parameters.json")); final ArgumentApplicationParser parser = new ArgumentApplicationParser(jsonConfiguration); 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 6c43da832..4035307e5 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 @@ -278,6 +278,16 @@ public class GraphCleaningFunctionsTest { s -> "0102 computer and information sciences".equals(s.getValue()) & ModelConstants.DNET_SUBJECT_FOS_CLASSID.equals(s.getQualifier().getClassid()))); + List s1 = p_cleaned + .getSubject() + .stream() + .filter(s -> s.getValue().equals("In Situ Hybridization")) + .collect(Collectors.toList()); + assertNotNull(s1); + assertEquals(1, s1.size()); + assertEquals(ModelConstants.DNET_SUBJECT_KEYWORD, s1.get(0).getQualifier().getClassid()); + assertEquals(ModelConstants.DNET_SUBJECT_KEYWORD, s1.get(0).getQualifier().getClassname()); + // TODO add more assertions to verity the cleaned values System.out.println(MAPPER.writeValueAsString(p_cleaned)); } 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 8e4fc4545..84ff35c08 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 @@ -706,6 +706,28 @@ "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, From a1f94530a3a170b8095de027660df0c2d4a35b09 Mon Sep 17 00:00:00 2001 From: Sandro La Bruzzo Date: Thu, 13 Oct 2022 11:47:11 +0200 Subject: [PATCH 223/535] added documentation --- .../DataciteToOAFTransformation.scala | 122 +++++++++++------- 1 file changed, 74 insertions(+), 48 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 c29614d33..29f5cb99c 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 @@ -24,11 +24,11 @@ import scala.io.Source object DataciteToOAFTransformation { case class HostedByMapType( - openaire_id: String, - datacite_name: String, - official_name: String, - similarity: Option[Float] - ) {} + openaire_id: String, + datacite_name: String, + official_name: String, + similarity: Option[Float] + ) {} val mapper = new ObjectMapper() @@ -47,12 +47,12 @@ object DataciteToOAFTransformation { } /** This method should skip record if json contains invalid text - * defined in file datacite_filter - * - * @param record : unparsed datacite record - * @param json : parsed record - * @return True if the record should be skipped - */ + * defined in file datacite_filter + * + * @param record : not parsed Datacite record + * @param json : parsed record + * @return True if the record should be skipped + */ def skip_record(record: String, json: org.json4s.JValue): Boolean = { implicit lazy val formats: DefaultFormats.type = org.json4s.DefaultFormats datacite_filter.exists(f => record.contains(f)) || (json \\ "publisher") @@ -98,6 +98,11 @@ object DataciteToOAFTransformation { } + /** + * This utility method indicates whether the embargo date has been reached + * @param embargo_end_date + * @return True if the embargo date has been reached, false otherwise + */ def embargo_end(embargo_end_date: String): Boolean = { val dt = LocalDate.parse(embargo_end_date, DateTimeFormatter.ofPattern("[yyyy-MM-dd]")) val td = LocalDate.now() @@ -142,12 +147,27 @@ object DataciteToOAFTransformation { } } + /*** + * Use the vocabulary dnet:publication_resource to find a synonym to one of these terms and get the instance.type. + * Using the dnet:result_typologies vocabulary, we look up the instance.type synonym + * to generate one of the following main entities: + * - publication + * - dataset + * - software + * - otherresearchproduct + + * @param resourceType + * @param resourceTypeGeneral + * @param schemaOrg + * @param vocabularies + * @return + */ def getTypeQualifier( - resourceType: String, - resourceTypeGeneral: String, - schemaOrg: String, - vocabularies: VocabularyGroup - ): (Qualifier, Qualifier) = { + resourceType: String, + resourceTypeGeneral: String, + schemaOrg: String, + vocabularies: VocabularyGroup + ): (Qualifier, Qualifier) = { if (resourceType != null && resourceType.nonEmpty) { val typeQualifier = vocabularies.getSynonymAsQualifier(ModelConstants.DNET_PUBLICATION_RESOURCE, resourceType) @@ -192,11 +212,11 @@ object DataciteToOAFTransformation { } def getResult( - resourceType: String, - resourceTypeGeneral: String, - schemaOrg: String, - vocabularies: VocabularyGroup - ): Result = { + resourceType: String, + resourceTypeGeneral: String, + schemaOrg: String, + vocabularies: VocabularyGroup + ): Result = { val typeQualifiers: (Qualifier, Qualifier) = getTypeQualifier(resourceType, resourceTypeGeneral, schemaOrg, vocabularies) if (typeQualifiers == null) @@ -238,11 +258,11 @@ object DataciteToOAFTransformation { } /** As describe in ticket #6377 - * when the result come from figshare we need to remove subject - * and set Access rights OPEN. - * - * @param r - */ + * when the result come from figshare we need to remove subject + * and set Access rights OPEN. + * + * @param r + */ def fix_figshare(r: Result): Unit = { if (r.getInstance() != null) { @@ -269,12 +289,12 @@ object DataciteToOAFTransformation { } def generateRelation( - sourceId: String, - targetId: String, - relClass: String, - cf: KeyValue, - di: DataInfo - ): Relation = { + sourceId: String, + targetId: String, + relClass: String, + cf: KeyValue, + di: DataInfo + ): Relation = { val r = new Relation r.setSource(sourceId) @@ -303,12 +323,12 @@ object DataciteToOAFTransformation { } def generateOAF( - input: String, - ts: Long, - dateOfCollection: Long, - vocabularies: VocabularyGroup, - exportLinks: Boolean - ): List[Oaf] = { + input: String, + ts: Long, + dateOfCollection: Long, + vocabularies: VocabularyGroup, + exportLinks: Boolean + ): List[Oaf] = { implicit lazy val formats: DefaultFormats.type = org.json4s.DefaultFormats lazy val json = parse(input) @@ -330,6 +350,7 @@ object DataciteToOAFTransformation { if (result == null) return List() + // DOI is mapped on a PID inside a Instance object val doi_q = OafMapperUtils.qualifier( "doi", "doi", @@ -338,6 +359,8 @@ object DataciteToOAFTransformation { ) val pid = OafMapperUtils.structuredProperty(doi, doi_q, dataInfo) result.setPid(List(pid).asJava) + + // This identifiere will be replaced in a second moment using the PID logic generation result.setId(OafMapperUtils.createOpenaireId(50, s"datacite____::$doi", true)) result.setOriginalId(List(doi).asJava) @@ -386,6 +409,11 @@ object DataciteToOAFTransformation { a } + if (authors == null || authors.isEmpty || !authors.exists(a => a != null)) + return List() + result.setAuthor(authors.asJava) + + val titles: List[TitleType] = (json \\ "titles").extractOrElse[List[TitleType]](List()) result.setTitle( @@ -409,9 +437,7 @@ object DataciteToOAFTransformation { .asJava ) - if (authors == null || authors.isEmpty || !authors.exists(a => a != null)) - return List() - result.setAuthor(authors.asJava) + val dates = (json \\ "dates").extract[List[DateType]] val publication_year = (json \\ "publicationYear").extractOrElse[String](null) @@ -619,16 +645,16 @@ object DataciteToOAFTransformation { } private def generateRelations( - rels: List[RelatedIdentifierType], - id: String, - date: String - ): List[Relation] = { + rels: List[RelatedIdentifierType], + id: String, + date: String + ): List[Relation] = { rels .filter(r => subRelTypeMapping .contains(r.relationType) && (r.relatedIdentifierType.equalsIgnoreCase("doi") || - r.relatedIdentifierType.equalsIgnoreCase("pmid") || - r.relatedIdentifierType.equalsIgnoreCase("arxiv")) + r.relatedIdentifierType.equalsIgnoreCase("pmid") || + r.relatedIdentifierType.equalsIgnoreCase("arxiv")) ) .map(r => { val rel = new Relation @@ -660,4 +686,4 @@ object DataciteToOAFTransformation { s"10|$b::${DHPUtils.md5(a)}" } -} +} \ No newline at end of file From ae7cd0735a8528cd419ce2863077d436bd34cd0d Mon Sep 17 00:00:00 2001 From: Claudio Atzori Date: Fri, 14 Oct 2022 15:47:58 +0200 Subject: [PATCH 224/535] [graph2hive] more partitions --- .../eu/dnetlib/dhp/oa/graph/hive/oozie_app/workflow.xml | 7 +++++++ 1 file changed, 7 insertions(+) diff --git a/dhp-workflows/dhp-graph-mapper/src/main/resources/eu/dnetlib/dhp/oa/graph/hive/oozie_app/workflow.xml b/dhp-workflows/dhp-graph-mapper/src/main/resources/eu/dnetlib/dhp/oa/graph/hive/oozie_app/workflow.xml index ba5f4f375..4468382be 100644 --- a/dhp-workflows/dhp-graph-mapper/src/main/resources/eu/dnetlib/dhp/oa/graph/hive/oozie_app/workflow.xml +++ b/dhp-workflows/dhp-graph-mapper/src/main/resources/eu/dnetlib/dhp/oa/graph/hive/oozie_app/workflow.xml @@ -126,6 +126,7 @@ --hiveDbName${hiveDbName} --classNameeu.dnetlib.dhp.schema.oaf.Publication --hiveMetastoreUris${hiveMetastoreUris} + --numPartitions8000 @@ -152,6 +153,7 @@ --hiveDbName${hiveDbName} --classNameeu.dnetlib.dhp.schema.oaf.Dataset --hiveMetastoreUris${hiveMetastoreUris} + --numPartitions4000 @@ -178,6 +180,7 @@ --hiveDbName${hiveDbName} --classNameeu.dnetlib.dhp.schema.oaf.OtherResearchProduct --hiveMetastoreUris${hiveMetastoreUris} + --numPartitions3000 @@ -204,6 +207,7 @@ --hiveDbName${hiveDbName} --classNameeu.dnetlib.dhp.schema.oaf.Software --hiveMetastoreUris${hiveMetastoreUris} + --numPartitions300 @@ -230,6 +234,7 @@ --hiveDbName${hiveDbName} --classNameeu.dnetlib.dhp.schema.oaf.Datasource --hiveMetastoreUris${hiveMetastoreUris} + --numPartitions100 @@ -256,6 +261,7 @@ --hiveDbName${hiveDbName} --classNameeu.dnetlib.dhp.schema.oaf.Organization --hiveMetastoreUris${hiveMetastoreUris} + --numPartitions400 @@ -309,6 +315,7 @@ --hiveDbName${hiveDbName} --classNameeu.dnetlib.dhp.schema.oaf.Relation --hiveMetastoreUris${hiveMetastoreUris} + --numPartitions10000 From 72f0d88d6ce9536a2577b24b8c5d7242b5dc6e39 Mon Sep 17 00:00:00 2001 From: Sandro La Bruzzo Date: Wed, 19 Oct 2022 14:18:42 +0200 Subject: [PATCH 225/535] formatted code --- .../DataciteToOAFTransformation.scala | 132 +++++++++--------- 1 file changed, 64 insertions(+), 68 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 29f5cb99c..a7ad9e2d6 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 @@ -24,11 +24,11 @@ import scala.io.Source object DataciteToOAFTransformation { case class HostedByMapType( - openaire_id: String, - datacite_name: String, - official_name: String, - similarity: Option[Float] - ) {} + openaire_id: String, + datacite_name: String, + official_name: String, + similarity: Option[Float] + ) {} val mapper = new ObjectMapper() @@ -47,12 +47,12 @@ object DataciteToOAFTransformation { } /** This method should skip record if json contains invalid text - * defined in file datacite_filter - * - * @param record : not parsed Datacite record - * @param json : parsed record - * @return True if the record should be skipped - */ + * defined in file datacite_filter + * + * @param record : not parsed Datacite record + * @param json : parsed record + * @return True if the record should be skipped + */ def skip_record(record: String, json: org.json4s.JValue): Boolean = { implicit lazy val formats: DefaultFormats.type = org.json4s.DefaultFormats datacite_filter.exists(f => record.contains(f)) || (json \\ "publisher") @@ -98,11 +98,10 @@ object DataciteToOAFTransformation { } - /** - * This utility method indicates whether the embargo date has been reached - * @param embargo_end_date - * @return True if the embargo date has been reached, false otherwise - */ + /** This utility method indicates whether the embargo date has been reached + * @param embargo_end_date + * @return True if the embargo date has been reached, false otherwise + */ def embargo_end(embargo_end_date: String): Boolean = { val dt = LocalDate.parse(embargo_end_date, DateTimeFormatter.ofPattern("[yyyy-MM-dd]")) val td = LocalDate.now() @@ -147,27 +146,27 @@ object DataciteToOAFTransformation { } } - /*** - * Use the vocabulary dnet:publication_resource to find a synonym to one of these terms and get the instance.type. - * Using the dnet:result_typologies vocabulary, we look up the instance.type synonym - * to generate one of the following main entities: - * - publication - * - dataset - * - software - * - otherresearchproduct - - * @param resourceType - * @param resourceTypeGeneral - * @param schemaOrg - * @param vocabularies - * @return - */ + /** * + * Use the vocabulary dnet:publication_resource to find a synonym to one of these terms and get the instance.type. + * Using the dnet:result_typologies vocabulary, we look up the instance.type synonym + * to generate one of the following main entities: + * - publication + * - dataset + * - software + * - otherresearchproduct + * + * @param resourceType + * @param resourceTypeGeneral + * @param schemaOrg + * @param vocabularies + * @return + */ def getTypeQualifier( - resourceType: String, - resourceTypeGeneral: String, - schemaOrg: String, - vocabularies: VocabularyGroup - ): (Qualifier, Qualifier) = { + resourceType: String, + resourceTypeGeneral: String, + schemaOrg: String, + vocabularies: VocabularyGroup + ): (Qualifier, Qualifier) = { if (resourceType != null && resourceType.nonEmpty) { val typeQualifier = vocabularies.getSynonymAsQualifier(ModelConstants.DNET_PUBLICATION_RESOURCE, resourceType) @@ -212,11 +211,11 @@ object DataciteToOAFTransformation { } def getResult( - resourceType: String, - resourceTypeGeneral: String, - schemaOrg: String, - vocabularies: VocabularyGroup - ): Result = { + resourceType: String, + resourceTypeGeneral: String, + schemaOrg: String, + vocabularies: VocabularyGroup + ): Result = { val typeQualifiers: (Qualifier, Qualifier) = getTypeQualifier(resourceType, resourceTypeGeneral, schemaOrg, vocabularies) if (typeQualifiers == null) @@ -258,11 +257,11 @@ object DataciteToOAFTransformation { } /** As describe in ticket #6377 - * when the result come from figshare we need to remove subject - * and set Access rights OPEN. - * - * @param r - */ + * when the result come from figshare we need to remove subject + * and set Access rights OPEN. + * + * @param r + */ def fix_figshare(r: Result): Unit = { if (r.getInstance() != null) { @@ -289,12 +288,12 @@ object DataciteToOAFTransformation { } def generateRelation( - sourceId: String, - targetId: String, - relClass: String, - cf: KeyValue, - di: DataInfo - ): Relation = { + sourceId: String, + targetId: String, + relClass: String, + cf: KeyValue, + di: DataInfo + ): Relation = { val r = new Relation r.setSource(sourceId) @@ -323,12 +322,12 @@ object DataciteToOAFTransformation { } def generateOAF( - input: String, - ts: Long, - dateOfCollection: Long, - vocabularies: VocabularyGroup, - exportLinks: Boolean - ): List[Oaf] = { + input: String, + ts: Long, + dateOfCollection: Long, + vocabularies: VocabularyGroup, + exportLinks: Boolean + ): List[Oaf] = { implicit lazy val formats: DefaultFormats.type = org.json4s.DefaultFormats lazy val json = parse(input) @@ -413,7 +412,6 @@ object DataciteToOAFTransformation { return List() result.setAuthor(authors.asJava) - val titles: List[TitleType] = (json \\ "titles").extractOrElse[List[TitleType]](List()) result.setTitle( @@ -437,8 +435,6 @@ object DataciteToOAFTransformation { .asJava ) - - val dates = (json \\ "dates").extract[List[DateType]] val publication_year = (json \\ "publicationYear").extractOrElse[String](null) @@ -645,16 +641,16 @@ object DataciteToOAFTransformation { } private def generateRelations( - rels: List[RelatedIdentifierType], - id: String, - date: String - ): List[Relation] = { + rels: List[RelatedIdentifierType], + id: String, + date: String + ): List[Relation] = { rels .filter(r => subRelTypeMapping .contains(r.relationType) && (r.relatedIdentifierType.equalsIgnoreCase("doi") || - r.relatedIdentifierType.equalsIgnoreCase("pmid") || - r.relatedIdentifierType.equalsIgnoreCase("arxiv")) + r.relatedIdentifierType.equalsIgnoreCase("pmid") || + r.relatedIdentifierType.equalsIgnoreCase("arxiv")) ) .map(r => { val rel = new Relation @@ -686,4 +682,4 @@ object DataciteToOAFTransformation { s"10|$b::${DHPUtils.md5(a)}" } -} \ No newline at end of file +} From bca4a61710ed7d394937a28973f44018d99aa2be Mon Sep 17 00:00:00 2001 From: Claudio Atzori Date: Wed, 19 Oct 2022 15:20:58 +0200 Subject: [PATCH 226/535] suppressing hyper verbose spark logs during unit test execution --- .../src/test/resources/log4j.properties | 25 +++++++++++++++++++ 1 file changed, 25 insertions(+) create mode 100644 dhp-workflows/dhp-enrichment/src/test/resources/log4j.properties diff --git a/dhp-workflows/dhp-enrichment/src/test/resources/log4j.properties b/dhp-workflows/dhp-enrichment/src/test/resources/log4j.properties new file mode 100644 index 000000000..ce37270c6 --- /dev/null +++ b/dhp-workflows/dhp-enrichment/src/test/resources/log4j.properties @@ -0,0 +1,25 @@ +# Root logger option +log4j.rootLogger=DEBUG, stdout + +# Direct log messages to stdout +log4j.appender.stdout=org.apache.log4j.ConsoleAppender +log4j.appender.stdout.Target=System.out +log4j.appender.stdout.layout=org.apache.log4j.PatternLayout +log4j.appender.stdout.layout.ConversionPattern=%d{yyyy-MM-dd HH:mm:ss} %-5p %c{1}:%L - %m%n + +# Change this to set Spark log level +log4j.logger.org.apache.spark=ERROR +log4j.rootCategory=WARN + +# Silence akka remoting +log4j.logger.Remoting=WARN + +# Ignore messages below warning level from Jetty, because it's a bit verbose +log4j.logger.org.eclipse.jetty=WARN + +log4j.logger.org.apache.hadoop.mapreduce.lib.output.FileOutputCommitterFactory=WARN +log4j.logger.org.apache.hadoop.mapreduce.lib.output.FileOutputCommitter=WARN +log4j.logger.org.apache.parquet.hadoop.ParquetOutputFormat=WARN +log4j.logger.org.apache.parquet.hadoop.InternalParquetRecordWriter=WARN +log4j.logger.org.apache.hadoop.io.compress.CodecPool=WARN +log4j.logger.org.apache.parquet.hadoop.codec.CodecConfig=WARN \ No newline at end of file From 31a10f000b200d047ad50be1c0a376a7316d8be9 Mon Sep 17 00:00:00 2001 From: Alessia Bardi Date: Sun, 23 Oct 2022 18:05:37 +0200 Subject: [PATCH 227/535] Map the field oaf:eoscifguidelines from mdstores. Currently we can find it in ROHub metadata --- .../raw/AbstractMdRecordToOafMapper.java | 20 +++++++++++++++++++ .../dnetlib/dhp/oa/graph/raw/MappersTest.java | 1 + .../eu/dnetlib/dhp/oa/graph/raw/rohub.xml | 5 ++++- 3 files changed, 25 insertions(+), 1 deletion(-) 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 c157be51a..a33a04be3 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 @@ -366,6 +366,7 @@ public abstract class AbstractMdRecordToOafMapper { r.setInstance(instances); r.setBestaccessright(OafMapperUtils.createBestAccessRights(instances)); + r.setEoscifguidelines(prepareEOSCIfGuidelines(doc, info)); } protected abstract List prepareResultPids(Document doc, DataInfo info); @@ -384,6 +385,25 @@ public abstract class AbstractMdRecordToOafMapper { return list; } + private List prepareEOSCIfGuidelines(Document doc, DataInfo info){ + final Set set = Sets.newHashSet(); + for (final Object o : doc.selectNodes("//oaf:eoscifguidelines")) { + final String code = ((Node) o).valueOf("@code"); + final String label = ((Node) o).valueOf("@label"); + final String url = ((Node) o).valueOf("@url"); + final String semrel = ((Node) o).valueOf("@semrel"); + if (StringUtils.isNotBlank(code)) { + final EoscIfGuidelines eig = new EoscIfGuidelines(); + eig.setCode(code); + eig.setLabel(label); + eig.setUrl(url); + eig.setSemanticRelation(semrel); + set.add(eig); + } + } + return Lists.newArrayList(set); + } + protected abstract Qualifier prepareResourceType(Document doc, DataInfo info); protected abstract List prepareInstances( 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 f0eadbd0d..8c9b3caba 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 @@ -947,6 +947,7 @@ class MappersTest { Instance inst = p.getInstance().get(0); assertEquals("https://w3id.org/ro-id/0ab171a7-45c5-4194-82d4-850955504bca", inst.getPid().get(0).getValue()); assertEquals("https://w3id.org/ro-id/0ab171a7-45c5-4194-82d4-850955504bca", inst.getUrl().get(0)); + assertEquals(1, p.getEoscifguidelines().size()); } diff --git a/dhp-workflows/dhp-graph-mapper/src/test/resources/eu/dnetlib/dhp/oa/graph/raw/rohub.xml b/dhp-workflows/dhp-graph-mapper/src/test/resources/eu/dnetlib/dhp/oa/graph/raw/rohub.xml index e1e30c3de..18f637ecc 100644 --- a/dhp-workflows/dhp-graph-mapper/src/test/resources/eu/dnetlib/dhp/oa/graph/raw/rohub.xml +++ b/dhp-workflows/dhp-graph-mapper/src/test/resources/eu/dnetlib/dhp/oa/graph/raw/rohub.xml @@ -65,7 +65,6 @@ Ecology - EOSC::RO-crate https://w3id.org/ro-id/0ab171a7-45c5-4194-82d4-850955504bca @@ -75,5 +74,9 @@ + \ No newline at end of file From ee759ac92da0116f2f6c0c8b11aacce98e5a55a3 Mon Sep 17 00:00:00 2001 From: Alessia Bardi Date: Sun, 23 Oct 2022 18:09:47 +0200 Subject: [PATCH 228/535] file format after mvn compile --- .../dnetlib/dhp/oa/graph/raw/AbstractMdRecordToOafMapper.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) 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 a33a04be3..02b1e7e7c 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 @@ -385,7 +385,7 @@ public abstract class AbstractMdRecordToOafMapper { return list; } - private List prepareEOSCIfGuidelines(Document doc, DataInfo info){ + private List prepareEOSCIfGuidelines(Document doc, DataInfo info) { final Set set = Sets.newHashSet(); for (final Object o : doc.selectNodes("//oaf:eoscifguidelines")) { final String code = ((Node) o).valueOf("@code"); From 208ed323153a0b19189f6ddf65776f67a6df2e67 Mon Sep 17 00:00:00 2001 From: Alessia Bardi Date: Sun, 23 Oct 2022 18:18:13 +0200 Subject: [PATCH 229/535] fixed xpath for semantic relation --- .../dnetlib/dhp/oa/graph/raw/AbstractMdRecordToOafMapper.java | 2 +- .../test/java/eu/dnetlib/dhp/oa/graph/raw/MappersTest.java | 4 ++++ 2 files changed, 5 insertions(+), 1 deletion(-) 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 02b1e7e7c..7aa40cb8a 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 @@ -391,7 +391,7 @@ public abstract class AbstractMdRecordToOafMapper { final String code = ((Node) o).valueOf("@code"); final String label = ((Node) o).valueOf("@label"); final String url = ((Node) o).valueOf("@url"); - final String semrel = ((Node) o).valueOf("@semrel"); + final String semrel = ((Node) o).valueOf("@semanticrelation"); if (StringUtils.isNotBlank(code)) { final EoscIfGuidelines eig = new EoscIfGuidelines(); eig.setCode(code); 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 8c9b3caba..ad733bec0 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 @@ -948,6 +948,10 @@ class MappersTest { assertEquals("https://w3id.org/ro-id/0ab171a7-45c5-4194-82d4-850955504bca", inst.getPid().get(0).getValue()); assertEquals("https://w3id.org/ro-id/0ab171a7-45c5-4194-82d4-850955504bca", inst.getUrl().get(0)); assertEquals(1, p.getEoscifguidelines().size()); + assertEquals("EOSC::RO-crate", p.getEoscifguidelines().get(0).getCode()); + assertEquals("EOSC::RO-crate", p.getEoscifguidelines().get(0).getLabel()); + assertEquals("", p.getEoscifguidelines().get(0).getUrl()); + assertEquals("compliesWith", p.getEoscifguidelines().get(0).getSemanticRelation()); } From 2b9a20a4a378d887d801df3eb6958bd20b079276 Mon Sep 17 00:00:00 2001 From: Sandro La Bruzzo Date: Mon, 24 Oct 2022 12:53:47 +0200 Subject: [PATCH 230/535] Changed the way Scholexplorer filter the relationships, I found that filter all relation coming from openCitation is wrong, because we loose a lot of relation than intersect OpenCitation, but they don't come only from there --- .../sx/graph/SparkConvertRDDtoDataset.scala | 77 ++++++++----------- 1 file changed, 34 insertions(+), 43 deletions(-) diff --git a/dhp-workflows/dhp-graph-mapper/src/main/scala/eu/dnetlib/dhp/sx/graph/SparkConvertRDDtoDataset.scala b/dhp-workflows/dhp-graph-mapper/src/main/scala/eu/dnetlib/dhp/sx/graph/SparkConvertRDDtoDataset.scala index 556106180..362cb2028 100644 --- a/dhp-workflows/dhp-graph-mapper/src/main/scala/eu/dnetlib/dhp/sx/graph/SparkConvertRDDtoDataset.scala +++ b/dhp-workflows/dhp-graph-mapper/src/main/scala/eu/dnetlib/dhp/sx/graph/SparkConvertRDDtoDataset.scala @@ -116,54 +116,45 @@ object SparkConvertRDDtoDataset { .map(s => mapper.readValue(s, classOf[Relation])) .filter(r => r.getDataInfo != null && !r.getDataInfo.getDeletedbyinference) .filter(r => r.getSource.startsWith("50") && r.getTarget.startsWith("50")) - .filter(r => filterRelations(subRelTypeFilter, relClassFilter, r)) - //filter OpenCitations relations - .filter(r => - r.getDataInfo.getProvenanceaction != null && - !"sysimport:crosswalk:opencitations".equals(r.getDataInfo.getProvenanceaction.getClassid) - ) + .filter(r => filterRelations(r)) + //filter OpenCitations relations +// .filter(r => +// r.getDataInfo.getProvenanceaction != null && +// !"sysimport:crosswalk:opencitations".equals(r.getDataInfo.getProvenanceaction.getClassid) +// ) spark.createDataset(rddRelation).as[Relation].write.mode(SaveMode.Overwrite).save(s"$relPath") } - private def filterRelations(subRelTypeFilter: String, relClassFilter: List[String], r: Relation): Boolean = { - if (StringUtils.isNotBlank(subRelTypeFilter)) { - subRelTypeFilter.equalsIgnoreCase(r.getSubRelType) - } else { - !relClassFilter.exists(k => k.equalsIgnoreCase(r.getRelClass)) + private def filterRelations(r: Relation): Boolean = { + + /** * + * We filter relation generated by dedups + * and all the relation that have one single collectedFrom OpenCitation + */ + + val relClassFilter = List( + ModelConstants.MERGES, + ModelConstants.IS_MERGED_IN, + ModelConstants.HAS_AMONG_TOP_N_SIMILAR_DOCS, + ModelConstants.IS_AMONG_TOP_N_SIMILAR_DOCS + ) + if (relClassFilter.exists(k => k.equalsIgnoreCase(r.getRelClass))) + false + else { + if (r.getCollectedfrom == null || r.getCollectedfrom.size() == 0) + false + else if (r.getCollectedfrom.size() > 1) + true + else if ( + r.getCollectedfrom.size() == 1 && r.getCollectedfrom.get(0) != null && "OpenCitations".equalsIgnoreCase( + r.getCollectedfrom.get(0).getValue + ) + ) + false + else + true } } - /* - //TODO: finalise implementation - private def processResult[T<: Result]( - implicit ct: ClassTag[T], - log: Logger, - spark: SparkSession, - sourcePath: String, - entityPath: String, - clazz: Class[T] - ): Unit = { - val entityType = clazz.getSimpleName.toLowerCase - - log.info(s"Converting $entityType") - - val mapper = new ObjectMapper() with ScalaObjectMapper - mapper.registerModule(DefaultScalaModule) - - val rdd = spark.sparkContext - .textFile(s"$sourcePath/$entityType") - .map(s => mapper.readValue(s, clazz)) - .filter(r => r.getDataInfo != null && !r.getDataInfo.getDeletedbyinference); - - implicit val encoder: Encoder[T] = Encoders.kryo(clazz) - spark - .createDataset(rdd) - .as[T] - .write - .mode(SaveMode.Overwrite) - .save(s"$entityPath/$entityType") - } - */ - } From 5af5a8ae42c5c3303bad4f0eeaccee518ef0480f Mon Sep 17 00:00:00 2001 From: Claudio Atzori Date: Wed, 9 Nov 2022 14:20:59 +0100 Subject: [PATCH 231/535] added IdentifierComparator --- .../dhp/oa/dedup/DedupRecordFactory.java | 21 ++++- .../eu/dnetlib/dhp/oa/dedup/IdGenerator.java | 4 + .../dhp/oa/dedup/IdentifierComparator.java | 81 +++++++++++++++++++ .../dhp/oa/dedup/model/Identifier.java | 53 +----------- .../dhp/oa/dedup/SparkOpenorgsDedupTest.java | 4 +- .../dnetlib/dhp/oa/dedup/SparkStatsTest.java | 4 +- .../src/test/resources/log4j.properties | 25 ++++++ 7 files changed, 134 insertions(+), 58 deletions(-) create mode 100644 dhp-workflows/dhp-dedup-openaire/src/main/java/eu/dnetlib/dhp/oa/dedup/IdentifierComparator.java create mode 100644 dhp-workflows/dhp-dedup-openaire/src/test/resources/log4j.properties 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 d345cf98f..c3b6751ba 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,8 +2,10 @@ package eu.dnetlib.dhp.oa.dedup; import java.util.Collection; +import java.util.Comparator; import java.util.Iterator; import java.util.List; +import java.util.stream.Collectors; import org.apache.spark.api.java.function.MapFunction; import org.apache.spark.api.java.function.MapGroupsFunction; @@ -13,11 +15,14 @@ import org.apache.spark.sql.SparkSession; import com.fasterxml.jackson.databind.DeserializationFeature; import com.fasterxml.jackson.databind.ObjectMapper; +import com.google.common.collect.Iterators; import com.google.common.collect.Lists; +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.utils.IdentifierFactory; import scala.Tuple2; public class DedupRecordFactory { @@ -82,11 +87,19 @@ public class DedupRecordFactory { final Collection dates = Lists.newArrayList(); final List> authors = Lists.newArrayList(); - entities - .forEachRemaining( - t -> { - T duplicate = t._2(); + final Comparator> idComparator = new IdentifierComparator().reversed(); + final List entityList = Lists + .newArrayList(entities) + .stream() + .map(t -> Identifier.newInstance(t._2())) + .sorted(idComparator) + .map(Identifier::getEntity) + .collect(Collectors.toList()); + + entityList + .forEach( + duplicate -> { entity.mergeFrom(duplicate); if (ModelSupport.isSubClass(duplicate, Result.class)) { Result r1 = (Result) duplicate; 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 81cd30f88..7e0d66062 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 @@ -18,6 +18,10 @@ public class IdGenerator implements Serializable { if (pids == null || pids.isEmpty()) return defaultID; + return generateId(pids); + } + + private static String generateId(List> pids) { Identifier bp = pids .stream() .min(Identifier::compareTo) diff --git a/dhp-workflows/dhp-dedup-openaire/src/main/java/eu/dnetlib/dhp/oa/dedup/IdentifierComparator.java b/dhp-workflows/dhp-dedup-openaire/src/main/java/eu/dnetlib/dhp/oa/dedup/IdentifierComparator.java new file mode 100644 index 000000000..ba4e31128 --- /dev/null +++ b/dhp-workflows/dhp-dedup-openaire/src/main/java/eu/dnetlib/dhp/oa/dedup/IdentifierComparator.java @@ -0,0 +1,81 @@ + +package eu.dnetlib.dhp.oa.dedup; + +import java.util.Comparator; +import java.util.List; +import java.util.Optional; +import java.util.Set; +import java.util.stream.Collectors; + +import com.google.common.collect.Sets; + +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.oaf.DataInfo; +import eu.dnetlib.dhp.schema.oaf.KeyValue; +import eu.dnetlib.dhp.schema.oaf.OafEntity; +import eu.dnetlib.dhp.schema.oaf.StructuredProperty; +import eu.dnetlib.dhp.schema.oaf.utils.OafMapperUtils; +import eu.dnetlib.dhp.schema.oaf.utils.PidComparator; +import eu.dnetlib.dhp.schema.oaf.utils.PidType; + +public class IdentifierComparator implements Comparator> { + + public static int compareIdentifiers(Identifier left, Identifier right) { + return new IdentifierComparator<>().compare(left, right); + } + + @Override + public int compare(Identifier left, Identifier i) { + // priority in comparisons: 1) pidtype, 2) collectedfrom (depending on the entity type) , 3) date 4) + // alphabetical order of the originalID + + Set lKeys = Optional + .ofNullable(left.getCollectedFrom()) + .map(c -> c.stream().map(KeyValue::getKey).collect(Collectors.toSet())) + .orElse(Sets.newHashSet()); + + final Optional> cf = Optional.ofNullable(i.getCollectedFrom()); + Set rKeys = cf + .map(c -> c.stream().map(KeyValue::getKey).collect(Collectors.toSet())) + .orElse(Sets.newHashSet()); + + if (left.getPidType().compareTo(i.getPidType()) == 0) { // same type + if (left.getEntityType() == EntityType.publication) { + if (isFromDatasourceID(lKeys, ModelConstants.CROSSREF_ID) + && !isFromDatasourceID(rKeys, ModelConstants.CROSSREF_ID)) + return -1; + if (isFromDatasourceID(rKeys, ModelConstants.CROSSREF_ID) + && !isFromDatasourceID(lKeys, ModelConstants.CROSSREF_ID)) + return 1; + } + if (left.getEntityType() == EntityType.dataset) { + if (isFromDatasourceID(lKeys, ModelConstants.DATACITE_ID) + && !isFromDatasourceID(rKeys, ModelConstants.DATACITE_ID)) + return -1; + if (isFromDatasourceID(rKeys, ModelConstants.DATACITE_ID) + && !isFromDatasourceID(lKeys, ModelConstants.DATACITE_ID)) + return 1; + } + + if (left.getDate().compareTo(i.getDate()) == 0) {// same date + // we need to take the alphabetically lower id + return left.getOriginalID().compareTo(i.getOriginalID()); + } else + // we need to take the elder date + return left.getDate().compareTo(i.getDate()); + } else { + return new PidComparator<>(left.getEntity()).compare(toSP(left.getPidType()), toSP(i.getPidType())); + } + } + + public boolean isFromDatasourceID(Set collectedFrom, String dsId) { + return collectedFrom.contains(dsId); + } + + private StructuredProperty toSP(PidType pidType) { + return OafMapperUtils.structuredProperty("", pidType.toString(), pidType.toString(), "", "", new DataInfo()); + } + +} 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 a25a853ef..0cba4fc3b 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 @@ -11,6 +11,7 @@ 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; @@ -83,60 +84,12 @@ public class Identifier implements Serializable, Comparable return entity.getId(); } - private PidType getPidType() { + public PidType getPidType() { return PidType.tryValueOf(StringUtils.substringBefore(StringUtils.substringAfter(entity.getId(), "|"), "_")); } @Override public int compareTo(Identifier i) { - // priority in comparisons: 1) pidtype, 2) collectedfrom (depending on the entity type) , 3) date 4) - // alphabetical order of the originalID - - Set lKeys = Optional - .ofNullable(getCollectedFrom()) - .map(c -> c.stream().map(KeyValue::getKey).collect(Collectors.toSet())) - .orElse(Sets.newHashSet()); - - final Optional> cf = Optional.ofNullable(i.getCollectedFrom()); - Set rKeys = cf - .map(c -> c.stream().map(KeyValue::getKey).collect(Collectors.toSet())) - .orElse(Sets.newHashSet()); - - if (this.getPidType().compareTo(i.getPidType()) == 0) { // same type - if (getEntityType() == EntityType.publication) { - if (isFromDatasourceID(lKeys, ModelConstants.CROSSREF_ID) - && !isFromDatasourceID(rKeys, ModelConstants.CROSSREF_ID)) - return -1; - if (isFromDatasourceID(rKeys, ModelConstants.CROSSREF_ID) - && !isFromDatasourceID(lKeys, ModelConstants.CROSSREF_ID)) - return 1; - } - if (getEntityType() == EntityType.dataset) { - if (isFromDatasourceID(lKeys, ModelConstants.DATACITE_ID) - && !isFromDatasourceID(rKeys, ModelConstants.DATACITE_ID)) - return -1; - if (isFromDatasourceID(rKeys, ModelConstants.DATACITE_ID) - && !isFromDatasourceID(lKeys, ModelConstants.DATACITE_ID)) - return 1; - } - - if (this.getDate().compareTo(i.getDate()) == 0) {// same date - // we need to take the alphabetically lower id - return this.getOriginalID().compareTo(i.getOriginalID()); - } else - // we need to take the elder date - return this.getDate().compareTo(i.getDate()); - } else { - return new PidComparator<>(getEntity()).compare(toSP(getPidType()), toSP(i.getPidType())); - } - - } - - private StructuredProperty toSP(PidType pidType) { - return OafMapperUtils.structuredProperty("", pidType.toString(), pidType.toString(), "", "", new DataInfo()); - } - - public boolean isFromDatasourceID(Set collectedFrom, String dsId) { - return collectedFrom.contains(dsId); + return IdentifierComparator.compareIdentifiers(this, i); } } 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 9312d83b1..88c28ab2f 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(288, orgs_simrel); + assertEquals(290, orgs_simrel); } @Test @@ -172,7 +172,7 @@ public class SparkOpenorgsDedupTest implements Serializable { .load(DedupUtility.createSimRelPath(testOutputBasePath, testActionSetId, "organization")) .count(); - assertEquals(324, orgs_simrel); + assertEquals(326, orgs_simrel); } @Test 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 1ba2c717c..b33b627e7 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 @@ -168,11 +168,11 @@ public class SparkStatsTest implements Serializable { .textFile(testOutputBasePath + "/" + testActionSetId + "/otherresearchproduct_blockstats") .count(); - assertEquals(477, orgs_blocks); + assertEquals(480, orgs_blocks); assertEquals(295, pubs_blocks); assertEquals(122, sw_blocks); assertEquals(191, ds_blocks); - assertEquals(171, orp_blocks); + assertEquals(178, orp_blocks); } @AfterAll diff --git a/dhp-workflows/dhp-dedup-openaire/src/test/resources/log4j.properties b/dhp-workflows/dhp-dedup-openaire/src/test/resources/log4j.properties new file mode 100644 index 000000000..ce37270c6 --- /dev/null +++ b/dhp-workflows/dhp-dedup-openaire/src/test/resources/log4j.properties @@ -0,0 +1,25 @@ +# Root logger option +log4j.rootLogger=DEBUG, stdout + +# Direct log messages to stdout +log4j.appender.stdout=org.apache.log4j.ConsoleAppender +log4j.appender.stdout.Target=System.out +log4j.appender.stdout.layout=org.apache.log4j.PatternLayout +log4j.appender.stdout.layout.ConversionPattern=%d{yyyy-MM-dd HH:mm:ss} %-5p %c{1}:%L - %m%n + +# Change this to set Spark log level +log4j.logger.org.apache.spark=ERROR +log4j.rootCategory=WARN + +# Silence akka remoting +log4j.logger.Remoting=WARN + +# Ignore messages below warning level from Jetty, because it's a bit verbose +log4j.logger.org.eclipse.jetty=WARN + +log4j.logger.org.apache.hadoop.mapreduce.lib.output.FileOutputCommitterFactory=WARN +log4j.logger.org.apache.hadoop.mapreduce.lib.output.FileOutputCommitter=WARN +log4j.logger.org.apache.parquet.hadoop.ParquetOutputFormat=WARN +log4j.logger.org.apache.parquet.hadoop.InternalParquetRecordWriter=WARN +log4j.logger.org.apache.hadoop.io.compress.CodecPool=WARN +log4j.logger.org.apache.parquet.hadoop.codec.CodecConfig=WARN \ No newline at end of file From ddff0e8999b392bdec7b9d6263e5c53e16a6bf59 Mon Sep 17 00:00:00 2001 From: Claudio Atzori Date: Fri, 11 Nov 2022 16:10:25 +0100 Subject: [PATCH 232/535] merging duplicates using IdentifierComparator --- .../dhp/oa/dedup/DedupRecordFactory.java | 35 +- .../dhp/oa/dedup/EntityMergerTest.java | 15 +- .../oa/dedup/SparkDedupPublicationTest.java | 389 ++++++++++++++++++ .../dnetlib/dhp/oa/dedup/SparkDedupTest.java | 210 ++++++---- .../dedup/entities/publication/publication.gz | Bin 578793 -> 581926 bytes .../entities2/publication/publication.gz | Bin 0 -> 9056 bytes .../mock_orchestrator_publication.xml | 24 ++ .../src/test/resources/log4j.properties | 28 +- 8 files changed, 590 insertions(+), 111 deletions(-) create mode 100644 dhp-workflows/dhp-dedup-openaire/src/test/java/eu/dnetlib/dhp/oa/dedup/SparkDedupPublicationTest.java create mode 100644 dhp-workflows/dhp-dedup-openaire/src/test/resources/eu/dnetlib/dhp/dedup/entities2/publication/publication.gz create mode 100644 dhp-workflows/dhp-dedup-openaire/src/test/resources/eu/dnetlib/dhp/dedup/profiles/mock_orchestrator_publication.xml 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 c3b6751ba..f9fc8a21a 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,12 +1,12 @@ package eu.dnetlib.dhp.oa.dedup; -import java.util.Collection; -import java.util.Comparator; -import java.util.Iterator; -import java.util.List; +import java.lang.reflect.InvocationTargetException; +import java.util.*; import java.util.stream.Collectors; +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.sql.Dataset; @@ -15,14 +15,12 @@ import org.apache.spark.sql.SparkSession; import com.fasterxml.jackson.databind.DeserializationFeature; import com.fasterxml.jackson.databind.ObjectMapper; -import com.google.common.collect.Iterators; import com.google.common.collect.Lists; 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.utils.IdentifierFactory; import scala.Tuple2; public class DedupRecordFactory { @@ -79,23 +77,25 @@ public class DedupRecordFactory { public static T entityMerger( String id, Iterator> entities, long ts, DataInfo dataInfo, Class clazz) - throws IllegalAccessException, InstantiationException { + throws IllegalAccessException, InstantiationException, InvocationTargetException { - T entity = clazz.newInstance(); - entity.setDataInfo(dataInfo); + final Comparator> idComparator = new IdentifierComparator<>(); - final Collection dates = Lists.newArrayList(); - final List> authors = Lists.newArrayList(); - - final Comparator> idComparator = new IdentifierComparator().reversed(); - - final List entityList = Lists + final LinkedList entityList = Lists .newArrayList(entities) .stream() .map(t -> Identifier.newInstance(t._2())) .sorted(idComparator) .map(Identifier::getEntity) - .collect(Collectors.toList()); + .collect(Collectors.toCollection(LinkedList::new)); + + final T entity = clazz.newInstance(); + final T first = entityList.removeFirst(); + + BeanUtils.copyProperties(entity, first); + + final Collection dates = Lists.newArrayList(); + final List> authors = Lists.newArrayList(); entityList .forEach( @@ -103,12 +103,11 @@ public class DedupRecordFactory { entity.mergeFrom(duplicate); if (ModelSupport.isSubClass(duplicate, Result.class)) { Result r1 = (Result) duplicate; - if (r1.getAuthor() != null && !r1.getAuthor().isEmpty()) + if (r1.getAuthor() != null && StringUtils.isNotBlank(r1.getDateofacceptance().getValue())) authors.add(r1.getAuthor()); if (r1.getDateofacceptance() != null) dates.add(r1.getDateofacceptance().getValue()); } - }); // set authors and date 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 aa3722ce5..c9cfb8cb2 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 @@ -7,6 +7,7 @@ import java.io.BufferedReader; import java.io.FileReader; import java.io.IOException; import java.io.Serializable; +import java.lang.reflect.InvocationTargetException; import java.nio.file.Paths; import java.util.*; import java.util.stream.Collectors; @@ -54,7 +55,7 @@ class EntityMergerTest implements Serializable { } @Test - void softwareMergerTest() throws InstantiationException, IllegalAccessException { + void softwareMergerTest() throws InstantiationException, IllegalAccessException, InvocationTargetException { List> softwares = readSample( testEntityBasePath + "/software_merge.json", Software.class); @@ -69,7 +70,7 @@ class EntityMergerTest implements Serializable { } @Test - void publicationMergerTest() throws InstantiationException, IllegalAccessException { + void publicationMergerTest() throws InstantiationException, IllegalAccessException, InvocationTargetException { Publication pub_merged = DedupRecordFactory .entityMerger(dedupId, publications.iterator(), 0, dataInfo, Publication.class); @@ -134,7 +135,7 @@ class EntityMergerTest implements Serializable { } @Test - void publicationMergerTest2() throws InstantiationException, IllegalAccessException { + void publicationMergerTest2() throws InstantiationException, IllegalAccessException, InvocationTargetException { Publication pub_merged = DedupRecordFactory .entityMerger(dedupId, publications2.iterator(), 0, dataInfo, Publication.class); @@ -146,7 +147,7 @@ class EntityMergerTest implements Serializable { } @Test - void publicationMergerTest3() throws InstantiationException, IllegalAccessException { + void publicationMergerTest3() throws InstantiationException, IllegalAccessException, InvocationTargetException { Publication pub_merged = DedupRecordFactory .entityMerger(dedupId, publications3.iterator(), 0, dataInfo, Publication.class); @@ -156,7 +157,8 @@ class EntityMergerTest implements Serializable { } @Test - void publicationMergerTest4() throws InstantiationException, IllegalStateException, IllegalAccessException { + void publicationMergerTest4() + throws InstantiationException, IllegalStateException, IllegalAccessException, InvocationTargetException { Publication pub_merged = DedupRecordFactory .entityMerger(dedupId, publications4.iterator(), 0, dataInfo, Publication.class); @@ -166,7 +168,8 @@ class EntityMergerTest implements Serializable { } @Test - void publicationMergerTest5() throws InstantiationException, IllegalStateException, IllegalAccessException { + void publicationMergerTest5() + throws InstantiationException, IllegalStateException, IllegalAccessException, InvocationTargetException { System.out .println( diff --git a/dhp-workflows/dhp-dedup-openaire/src/test/java/eu/dnetlib/dhp/oa/dedup/SparkDedupPublicationTest.java b/dhp-workflows/dhp-dedup-openaire/src/test/java/eu/dnetlib/dhp/oa/dedup/SparkDedupPublicationTest.java new file mode 100644 index 000000000..c657d1865 --- /dev/null +++ b/dhp-workflows/dhp-dedup-openaire/src/test/java/eu/dnetlib/dhp/oa/dedup/SparkDedupPublicationTest.java @@ -0,0 +1,389 @@ + +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 java.io.File; +import java.io.IOException; +import java.io.Serializable; +import java.net.URISyntaxException; +import java.nio.file.Paths; +import java.util.*; +import java.util.stream.Collectors; + +import com.fasterxml.jackson.core.JsonProcessingException; +import org.apache.commons.io.FileUtils; +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.FilterFunction; +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.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; + +@ExtendWith(MockitoExtension.class) +@TestMethodOrder(MethodOrderer.OrderAnnotation.class) +public class SparkDedupPublicationTest implements Serializable { + + @Mock(serializable = true) + ISLookUpService isLookUpService; + + private static SparkSession spark; + private static JavaSparkContext jsc; + + private static String testGraphBasePath; + private static String testOutputBasePath; + private static String testDedupGraphBasePath; + private static final String testActionSetId = "test-orchestrator"; + + @BeforeAll + public static void cleanUp() throws IOException, URISyntaxException { + + testGraphBasePath = Paths + .get(SparkDedupPublicationTest.class.getResource("/eu/dnetlib/dhp/dedup/entities2").toURI()) + .toFile() + .getAbsolutePath(); + testOutputBasePath = createTempDirectory(SparkDedupPublicationTest.class.getSimpleName() + "-") + .toAbsolutePath() + .toString(); + + testDedupGraphBasePath = createTempDirectory(SparkDedupPublicationTest.class.getSimpleName() + "-") + .toAbsolutePath() + .toString(); + + FileUtils.deleteDirectory(new File(testOutputBasePath)); + FileUtils.deleteDirectory(new File(testDedupGraphBasePath)); + + final SparkConf conf = new SparkConf(); + conf.set("spark.sql.shuffle.partitions", "10"); + spark = SparkSession + .builder() + .appName(SparkDedupPublicationTest.class.getSimpleName()) + .master("local[*]") + .config(conf) + .getOrCreate(); + + jsc = JavaSparkContext.fromSparkContext(spark.sparkContext()); + + } + + @BeforeEach + public void setUp() throws IOException, ISLookUpException { + + lenient() + .when(isLookUpService.getResourceProfileByQuery(Mockito.contains(testActionSetId))) + .thenReturn(classPathResourceAsString("/eu/dnetlib/dhp/dedup/profiles/mock_orchestrator_publication.xml")); + + lenient() + .when(isLookUpService.getResourceProfileByQuery(Mockito.contains("publication"))) + .thenReturn(classPathResourceAsString("/eu/dnetlib/dhp/dedup/conf/pub.curr.conf.json")); + } + + @Test + @Order(1) + void createSimRelsTest() throws Exception { + + ArgumentApplicationParser parser = new ArgumentApplicationParser( + classPathResourceAsString("/eu/dnetlib/dhp/oa/dedup/createSimRels_parameters.json")); + + parser + .parseArgument( + new String[] { + "--graphBasePath", testGraphBasePath, + "--actionSetId", testActionSetId, + "--isLookUpUrl", "lookupurl", + "--workingPath", testOutputBasePath, + "--numPartitions", "5" + }); + + new SparkCreateSimRels(parser, spark).run(isLookUpService); + + long pubs_simrel = spark + .read() + .load(DedupUtility.createSimRelPath(testOutputBasePath, testActionSetId, "publication")) + .count(); + + assertEquals(62, pubs_simrel); + } + + @Test + @Order(2) + void cutMergeRelsTest() throws Exception { + + ArgumentApplicationParser parser = new ArgumentApplicationParser( + classPathResourceAsString("/eu/dnetlib/dhp/oa/dedup/createCC_parameters.json")); + + parser + .parseArgument( + new String[] { + "--graphBasePath", testGraphBasePath, + "--actionSetId", testActionSetId, + "--isLookUpUrl", "lookupurl", + "--workingPath", testOutputBasePath, + "--cutConnectedComponent", "3" + }); + + new SparkCreateMergeRels(parser, spark).run(isLookUpService); + + long pubs_mergerel = spark + .read() + .load(testOutputBasePath + "/" + testActionSetId + "/publication_mergerel") + .as(Encoders.bean(Relation.class)) + .filter((FilterFunction) r -> r.getRelClass().equalsIgnoreCase("merges")) + .groupBy("source") + .agg(count("target").alias("cnt")) + .select("source", "cnt") + .where("cnt > 3") + .count(); + + assertEquals(0, pubs_mergerel); + + FileUtils.deleteDirectory(new File(testOutputBasePath + "/" + testActionSetId + "/publication_mergerel")); + } + + @Test + @Order(3) + void createMergeRelsTest() throws Exception { + + ArgumentApplicationParser parser = new ArgumentApplicationParser( + classPathResourceAsString("/eu/dnetlib/dhp/oa/dedup/createCC_parameters.json")); + + parser + .parseArgument( + new String[] { + "--graphBasePath", testGraphBasePath, + "--actionSetId", testActionSetId, + "--isLookUpUrl", "lookupurl", + "--workingPath", testOutputBasePath + }); + + new SparkCreateMergeRels(parser, spark).run(isLookUpService); + + final Dataset pubs = spark + .read() + .load(testOutputBasePath + "/" + testActionSetId + "/publication_mergerel") + .as(Encoders.bean(Relation.class)); + + final List merges = pubs + .filter("source == '50|doi_dedup___::d5021b53204e4fdeab6ff5d5bc468032'") + .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|doi_dedup___::d5021b53204e4fdeab6ff5d5bc468032'") + .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(24, pubs.count()); + } + + @Test + @Order(4) + void createDedupRecordTest() throws Exception { + + ArgumentApplicationParser parser = new ArgumentApplicationParser( + classPathResourceAsString("/eu/dnetlib/dhp/oa/dedup/createDedupRecord_parameters.json")); + parser + .parseArgument( + new String[] { + "--graphBasePath", testGraphBasePath, + "--actionSetId", testActionSetId, + "--isLookUpUrl", "lookupurl", + "--workingPath", testOutputBasePath + }); + + new SparkCreateDedupRecord(parser, spark).run(isLookUpService); + + final ObjectMapper mapper = new ObjectMapper() + .configure(DeserializationFeature.FAIL_ON_UNKNOWN_PROPERTIES, false); + + final Dataset roots = spark + .read() + .textFile(testOutputBasePath + "/" + testActionSetId + "/publication_deduprecord") + .map( + (MapFunction) value -> mapper.readValue(value, Publication.class), + Encoders.bean(Publication.class)); + + assertEquals(2, roots.count()); + + final Dataset pubs = spark + .read() + .textFile(DedupUtility.createEntityPath(testGraphBasePath, "publication")) + .map( + (MapFunction) value -> mapper.readValue(value, Publication.class), + Encoders.bean(Publication.class)); + + verifyRoot_case_1(roots, pubs); + verifyRoot_case_2(roots, pubs); + } + + private static void verifyRoot_case_1(Dataset roots, Dataset pubs) { + Publication root = roots + .filter("id = '50|doi_dedup___::d5021b53204e4fdeab6ff5d5bc468032'") + .first(); + assertNotNull(root); + + Publication crossref_duplicate = pubs + .filter("id = '50|doi_________::d5021b53204e4fdeab6ff5d5bc468032'") + .collectAsList() + .get(0); + + assertEquals(crossref_duplicate.getJournal().getName(), root.getJournal().getName()); + assertEquals(crossref_duplicate.getJournal().getIssnPrinted(), root.getJournal().getIssnPrinted()); + assertEquals(crossref_duplicate.getPublisher().getValue(), root.getPublisher().getValue()); + + Set rootPids = root + .getPid() + .stream() + .map(StructuredProperty::getValue) + .collect(Collectors.toCollection(HashSet::new)); + Set dupPids = crossref_duplicate + .getPid() + .stream() + .map(StructuredProperty::getValue) + .collect(Collectors.toCollection(HashSet::new)); + + assertFalse(Sets.intersection(rootPids, dupPids).isEmpty()); + assertTrue(rootPids.contains("10.1109/jstqe.2022.3205716")); + + Optional instance_cr = root + .getInstance() + .stream() + .filter(i -> i.getCollectedfrom().getValue().equals("Crossref")) + .findFirst(); + assertTrue(instance_cr.isPresent()); + assertEquals("OPEN", instance_cr.get().getAccessright().getClassid()); + assertEquals("Open Access", instance_cr.get().getAccessright().getClassname()); + assertEquals(OpenAccessRoute.hybrid, instance_cr.get().getAccessright().getOpenAccessRoute()); + assertEquals( + "IEEE Journal of Selected Topics in Quantum Electronics", instance_cr.get().getHostedby().getValue()); + assertEquals("0001", instance_cr.get().getInstancetype().getClassid()); + assertEquals("Article", instance_cr.get().getInstancetype().getClassname()); + } + + private void verifyRoot_case_2(Dataset roots, Dataset pubs) throws JsonProcessingException { + Publication root = roots + .filter("id = '50|doi_dedup___::18aff3b55fb6876466a5d4bd82434885'") + .first(); + assertNotNull(root); + + Publication crossref_duplicate = pubs + .filter("id = '50|doi_________::18aff3b55fb6876466a5d4bd82434885'") + .first(); + + //System.err.println(new ObjectMapper().writeValueAsString(root)); + + assertEquals(crossref_duplicate.getJournal().getName(), root.getJournal().getName()); + assertEquals(crossref_duplicate.getJournal().getIssnOnline(), root.getJournal().getIssnOnline()); + assertEquals(crossref_duplicate.getJournal().getVol(), root.getJournal().getVol()); + + assertEquals(crossref_duplicate.getPublisher().getValue(), root.getPublisher().getValue()); + + Set dups_cf = pubs + .collectAsList() + .stream() + .flatMap(p -> p.getCollectedfrom().stream()) + .map(KeyValue::getValue) + .collect(Collectors.toCollection(HashSet::new)); + + Set root_cf = root + .getCollectedfrom() + .stream() + .map(KeyValue::getValue) + .collect(Collectors.toCollection(HashSet::new)); + + assertTrue(Sets.difference(root_cf, dups_cf).isEmpty()); + } + + @Test + @Order(6) + void updateEntityTest() throws Exception { + + ArgumentApplicationParser parser = new ArgumentApplicationParser( + classPathResourceAsString("/eu/dnetlib/dhp/oa/dedup/updateEntity_parameters.json")); + parser + .parseArgument( + new String[] { + "-i", testGraphBasePath, "-w", testOutputBasePath, "-o", testDedupGraphBasePath + }); + + new SparkUpdateEntity(parser, spark).run(isLookUpService); + + long publications = jsc.textFile(testDedupGraphBasePath + "/publication").count(); + + long mergedPubs = spark + .read() + .load(testOutputBasePath + "/" + testActionSetId + "/publication_mergerel") + .as(Encoders.bean(Relation.class)) + .where("relClass=='merges'") + .javaRDD() + .map(Relation::getTarget) + .distinct() + .count(); + + assertEquals(14, publications); + + long deletedPubs = jsc + .textFile(testDedupGraphBasePath + "/publication") + .filter(this::isDeletedByInference) + .count(); + + assertEquals(mergedPubs, deletedPubs); + } + + @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"); + } + + private static String classPathResourceAsString(String path) throws IOException { + return IOUtils + .toString( + SparkDedupPublicationTest.class + .getResourceAsStream(path)); + } + +} 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 9c9ec43d5..3de14f577 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 @@ -4,8 +4,7 @@ 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.assertEquals; -import static org.junit.jupiter.api.Assertions.assertTrue; +import static org.junit.jupiter.api.Assertions.*; import static org.mockito.Mockito.lenient; import java.io.File; @@ -14,7 +13,11 @@ 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; @@ -35,10 +38,13 @@ 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.oaf.Relation; +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; @@ -105,57 +111,27 @@ public class SparkDedupTest implements Serializable { lenient() .when(isLookUpService.getResourceProfileByQuery(Mockito.contains(testActionSetId))) - .thenReturn( - IOUtils - .toString( - SparkDedupTest.class - .getResourceAsStream( - "/eu/dnetlib/dhp/dedup/profiles/mock_orchestrator.xml"))); + .thenReturn(classPathResourceAsString("/eu/dnetlib/dhp/dedup/profiles/mock_orchestrator.xml")); lenient() .when(isLookUpService.getResourceProfileByQuery(Mockito.contains("organization"))) - .thenReturn( - IOUtils - .toString( - SparkDedupTest.class - .getResourceAsStream( - "/eu/dnetlib/dhp/dedup/conf/org.curr.conf.json"))); + .thenReturn(classPathResourceAsString("/eu/dnetlib/dhp/dedup/conf/org.curr.conf.json")); lenient() .when(isLookUpService.getResourceProfileByQuery(Mockito.contains("publication"))) - .thenReturn( - IOUtils - .toString( - SparkDedupTest.class - .getResourceAsStream( - "/eu/dnetlib/dhp/dedup/conf/pub.curr.conf.json"))); + .thenReturn(classPathResourceAsString("/eu/dnetlib/dhp/dedup/conf/pub.curr.conf.json")); lenient() .when(isLookUpService.getResourceProfileByQuery(Mockito.contains("software"))) - .thenReturn( - IOUtils - .toString( - SparkDedupTest.class - .getResourceAsStream( - "/eu/dnetlib/dhp/dedup/conf/sw.curr.conf.json"))); + .thenReturn(classPathResourceAsString("/eu/dnetlib/dhp/dedup/conf/sw.curr.conf.json")); lenient() .when(isLookUpService.getResourceProfileByQuery(Mockito.contains("dataset"))) - .thenReturn( - IOUtils - .toString( - SparkDedupTest.class - .getResourceAsStream( - "/eu/dnetlib/dhp/dedup/conf/ds.curr.conf.json"))); + .thenReturn(classPathResourceAsString("/eu/dnetlib/dhp/dedup/conf/ds.curr.conf.json")); lenient() .when(isLookUpService.getResourceProfileByQuery(Mockito.contains("otherresearchproduct"))) - .thenReturn( - IOUtils - .toString( - SparkDedupTest.class - .getResourceAsStream( - "/eu/dnetlib/dhp/dedup/conf/orp.curr.conf.json"))); + .thenReturn(classPathResourceAsString("/eu/dnetlib/dhp/dedup/conf/orp.curr.conf.json")); } @Test @@ -163,11 +139,7 @@ public class SparkDedupTest implements Serializable { void createSimRelsTest() throws Exception { ArgumentApplicationParser parser = new ArgumentApplicationParser( - IOUtils - .toString( - SparkCreateSimRels.class - .getResourceAsStream( - "/eu/dnetlib/dhp/oa/dedup/createSimRels_parameters.json"))); + classPathResourceAsString("/eu/dnetlib/dhp/oa/dedup/createSimRels_parameters.json")); parser .parseArgument( @@ -207,7 +179,7 @@ public class SparkDedupTest implements Serializable { .count(); assertEquals(3076, orgs_simrel); - assertEquals(7040, pubs_simrel); + assertEquals(7046, pubs_simrel); assertEquals(336, sw_simrel); assertEquals(442, ds_simrel); assertEquals(6784, orp_simrel); @@ -223,11 +195,7 @@ public class SparkDedupTest implements Serializable { void whitelistSimRelsTest() throws Exception { ArgumentApplicationParser parser = new ArgumentApplicationParser( - IOUtils - .toString( - SparkWhitelistSimRels.class - .getResourceAsStream( - "/eu/dnetlib/dhp/oa/dedup/whitelistSimRels_parameters.json"))); + classPathResourceAsString("/eu/dnetlib/dhp/oa/dedup/whitelistSimRels_parameters.json")); parser .parseArgument( @@ -264,7 +232,7 @@ public class SparkDedupTest implements Serializable { // entities simrels supposed to be equal to the number of previous step (no rels in whitelist) assertEquals(3076, orgs_simrel); - assertEquals(7040, pubs_simrel); + assertEquals(7046, pubs_simrel); assertEquals(442, ds_simrel); assertEquals(6784, orp_simrel); // System.out.println("orgs_simrel = " + orgs_simrel); @@ -306,11 +274,7 @@ public class SparkDedupTest implements Serializable { void cutMergeRelsTest() throws Exception { ArgumentApplicationParser parser = new ArgumentApplicationParser( - IOUtils - .toString( - SparkCreateMergeRels.class - .getResourceAsStream( - "/eu/dnetlib/dhp/oa/dedup/createCC_parameters.json"))); + classPathResourceAsString("/eu/dnetlib/dhp/oa/dedup/createCC_parameters.json")); parser .parseArgument( @@ -402,11 +366,7 @@ public class SparkDedupTest implements Serializable { void createMergeRelsTest() throws Exception { ArgumentApplicationParser parser = new ArgumentApplicationParser( - IOUtils - .toString( - SparkCreateMergeRels.class - .getResourceAsStream( - "/eu/dnetlib/dhp/oa/dedup/createCC_parameters.json"))); + classPathResourceAsString("/eu/dnetlib/dhp/oa/dedup/createCC_parameters.json")); parser .parseArgument( @@ -427,10 +387,10 @@ public class SparkDedupTest implements Serializable { .read() .load(testOutputBasePath + "/" + testActionSetId + "/organization_mergerel") .count(); - long pubs_mergerel = spark + final Dataset pubs = spark .read() .load(testOutputBasePath + "/" + testActionSetId + "/publication_mergerel") - .count(); + .as(Encoders.bean(Relation.class)); long sw_mergerel = spark .read() .load(testOutputBasePath + "/" + testActionSetId + "/software_mergerel") @@ -445,8 +405,35 @@ public class SparkDedupTest implements Serializable { .load(testOutputBasePath + "/" + testActionSetId + "/otherresearchproduct_mergerel") .count(); + final List merges = pubs + .filter("source == '50|doi_dedup___::d5021b53204e4fdeab6ff5d5bc468032'") + .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|doi_dedup___::d5021b53204e4fdeab6ff5d5bc468032'") + .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(1444, pubs_mergerel); + assertEquals(1450, pubs.count()); assertEquals(286, sw_mergerel); assertEquals(472, ds_mergerel); assertEquals(738, orp_mergerel); @@ -463,11 +450,7 @@ public class SparkDedupTest implements Serializable { void createDedupRecordTest() throws Exception { ArgumentApplicationParser parser = new ArgumentApplicationParser( - IOUtils - .toString( - SparkCreateDedupRecord.class - .getResourceAsStream( - "/eu/dnetlib/dhp/oa/dedup/createDedupRecord_parameters.json"))); + classPathResourceAsString("/eu/dnetlib/dhp/oa/dedup/createDedupRecord_parameters.json")); parser .parseArgument( new String[] { @@ -483,12 +466,18 @@ public class SparkDedupTest implements Serializable { new SparkCreateDedupRecord(parser, spark).run(isLookUpService); + final ObjectMapper mapper = new ObjectMapper() + .configure(DeserializationFeature.FAIL_ON_UNKNOWN_PROPERTIES, false); + + final Dataset pubs = spark + .read() + .textFile(testOutputBasePath + "/" + testActionSetId + "/publication_deduprecord") + .map( + (MapFunction) value -> mapper.readValue(value, Publication.class), + Encoders.bean(Publication.class)); long orgs_deduprecord = jsc .textFile(testOutputBasePath + "/" + testActionSetId + "/organization_deduprecord") .count(); - long pubs_deduprecord = jsc - .textFile(testOutputBasePath + "/" + testActionSetId + "/publication_deduprecord") - .count(); long sw_deduprecord = jsc .textFile(testOutputBasePath + "/" + testActionSetId + "/software_deduprecord") .count(); @@ -499,11 +488,13 @@ public class SparkDedupTest implements Serializable { .count(); assertEquals(86, orgs_deduprecord); - assertEquals(67, pubs_deduprecord); + assertEquals(68, pubs.count()); assertEquals(49, sw_deduprecord); assertEquals(97, ds_deduprecord); assertEquals(92, orp_deduprecord); + verifyRoot_1(mapper, pubs); + // System.out.println("orgs_deduprecord = " + orgs_deduprecord); // System.out.println("pubs_deduprecord = " + pubs_deduprecord); // System.out.println("sw_deduprecord = " + sw_deduprecord); @@ -511,16 +502,63 @@ public class SparkDedupTest implements Serializable { // System.out.println("orp_deduprecord = " + orp_deduprecord); } + private static void verifyRoot_1(ObjectMapper mapper, Dataset pubs) { + Publication root = pubs + .filter("id = '50|doi_dedup___::d5021b53204e4fdeab6ff5d5bc468032'") + .first(); + assertNotNull(root); + + final Dataset publication = spark + .read() + .textFile(DedupUtility.createEntityPath(testGraphBasePath, "publication")); + + Publication crossref_duplicate = publication + .map( + (MapFunction) value -> mapper.readValue(value, Publication.class), + Encoders.bean(Publication.class)) + .filter("id = '50|doi_________::d5021b53204e4fdeab6ff5d5bc468032'") + .collectAsList() + .get(0); + + assertEquals(crossref_duplicate.getJournal().getName(), root.getJournal().getName()); + assertEquals(crossref_duplicate.getJournal().getIssnPrinted(), root.getJournal().getIssnPrinted()); + assertEquals(crossref_duplicate.getPublisher().getValue(), root.getPublisher().getValue()); + + Set rootPids = root + .getPid() + .stream() + .map(StructuredProperty::getValue) + .collect(Collectors.toCollection(HashSet::new)); + Set dupPids = crossref_duplicate + .getPid() + .stream() + .map(StructuredProperty::getValue) + .collect(Collectors.toCollection(HashSet::new)); + + assertFalse(Sets.intersection(rootPids, dupPids).isEmpty()); + assertTrue(rootPids.contains("10.1109/jstqe.2022.3205716")); + + Optional instance_cr = root + .getInstance() + .stream() + .filter(i -> i.getCollectedfrom().getValue().equals("Crossref")) + .findFirst(); + assertTrue(instance_cr.isPresent()); + assertEquals("OPEN", instance_cr.get().getAccessright().getClassid()); + assertEquals("Open Access", instance_cr.get().getAccessright().getClassname()); + assertEquals(OpenAccessRoute.hybrid, instance_cr.get().getAccessright().getOpenAccessRoute()); + assertEquals( + "IEEE Journal of Selected Topics in Quantum Electronics", instance_cr.get().getHostedby().getValue()); + assertEquals("0001", instance_cr.get().getInstancetype().getClassid()); + assertEquals("Article", instance_cr.get().getInstancetype().getClassname()); + } + @Test @Order(6) void updateEntityTest() throws Exception { ArgumentApplicationParser parser = new ArgumentApplicationParser( - IOUtils - .toString( - SparkUpdateEntity.class - .getResourceAsStream( - "/eu/dnetlib/dhp/oa/dedup/updateEntity_parameters.json"))); + classPathResourceAsString("/eu/dnetlib/dhp/oa/dedup/updateEntity_parameters.json")); parser .parseArgument( new String[] { @@ -587,7 +625,7 @@ public class SparkDedupTest implements Serializable { .distinct() .count(); - assertEquals(898, publications); + assertEquals(902, publications); assertEquals(839, organizations); assertEquals(100, projects); assertEquals(100, datasource); @@ -640,11 +678,7 @@ public class SparkDedupTest implements Serializable { void propagateRelationTest() throws Exception { ArgumentApplicationParser parser = new ArgumentApplicationParser( - IOUtils - .toString( - SparkPropagateRelation.class - .getResourceAsStream( - "/eu/dnetlib/dhp/oa/dedup/propagateRelation_parameters.json"))); + classPathResourceAsString("/eu/dnetlib/dhp/oa/dedup/propagateRelation_parameters.json")); parser .parseArgument( new String[] { @@ -714,4 +748,12 @@ public class SparkDedupTest implements Serializable { public boolean isDeletedByInference(String s) { return s.contains("\"deletedbyinference\":true"); } + + private static String classPathResourceAsString(String path) throws IOException { + return IOUtils + .toString( + SparkDedupTest.class + .getResourceAsStream(path)); + } + } diff --git a/dhp-workflows/dhp-dedup-openaire/src/test/resources/eu/dnetlib/dhp/dedup/entities/publication/publication.gz b/dhp-workflows/dhp-dedup-openaire/src/test/resources/eu/dnetlib/dhp/dedup/entities/publication/publication.gz index cf513d7302bda81e6bdae0dbb430f5852a91307f..a7457063bcbe59481e11c944d4dff7a3244e4831 100644 GIT binary patch delta 24067 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 Wyp`9}P;sD;*Uv8sZ#9~4YJ>o6NS#9f delta 20910 zcmXt9WmFtNwjSKw-F?vD?he6&yK4v@q;dBU+#$FV+@0Vq0Rq9@T_4%q_p46ds_r>c z-F54eTSdK82c=Z-WKr<&j_Fy30q`O45Fzl8A@EQk@X#UfFd^`;A@Fbw@bHkqz>4?c z?x3@U!Bw^KW8ZNH6+KRm01kVt#LkzLv)fwz`SLrBeuVg7ur_vHUsU-#)=?Lls64k@ zJ-x1$YUQ!^sKuzOxM^VX_LZf0g=K9OjAU_kRa){{YQT{VqehJ&Z%;@p3JT=Ylh86F zQG9sbDE+9KmT}b@nLSrxn3Yfj5TWlncaky1!{bbI^x4pyx(Fy(NqswUF^1_zB&TRH zQC^9~+i$gK3602V^6WX1>PGU%OWKk_J%`+YA?rpW^b1cmapUYbDI08K2q@Ay`#3qT zR375?V$|T=BY|s$ahMQ3iu=83Ibdbb;b9+20u)*!2nUkz$2RyO9_bhZgwTBsrgaX6 z%TR$85;ID8TU_+{h1w@me`R&!ESXwluk9^L*veP`Ogwbc>^B0jT^ich7| zb&`6I8=2s6P>`A|$hlQDoud{bZlJi}{o=G9EcHq9bj6O-*xu1tzO5BZ+eclE*yj6T zch|B?4vd>_^^Lx4IaD(b1y>5%cOs?gm2E6PS6bk9*IikLD)bdVUXG{hjOSjyTK_k`K!E*g-Dh1xtGqOCmOh3bji)+^UtCuVue8f>_!~G& zbMYir01o}X2XD#}3#|oxdHWvuck@IrpKquT(maC?ZyfYZ$eYb;t+x}0w)hQDKj9;6 zQ!&D3oKcfn-JEIyAWtc0$lJy zgdz(z1-WG#NL1zklIhe3YH_+tQbDzcM}!C{ zS}NIZ?RU7w>k|t0c-BVsV>$x|&qJ$LGDx>vqiV$-P#eP3@X1iIG4km49IJrcL20{Y za{kX;<`?MWE}P>wLBetOS8j5HbzGx*=u24qNgM``OW!W^!G9g-D#PMDP; z|9AmVFY`u`>d?QTmVnH$Nr#|Xs-wkaUV`1!>$ye~L7yBl(#`m}3$aPX&z9*5FZ7RZ z4D1hm*EyB49z&%{90X#eVhLtA??2OBT+^ndDkqSsJMYw|qD9^dH5VhC<{gl4#<3Hi zbu*)U84d53NRO=Ky?n4vlB%~s(x1b}i}3;yM^Mbb?nob;0)X@_vRX5=l6yh0vM8d8 zCgK#y`9l!Q$ANTQ1I${`n^I{h@~{JAi8;bBf4m#{(fF6&3*UW66uvVuSvc@-v?>W1 zyLTU3Z018)!j1VMr>=b#2wiThAlZgGd~9QHBhJwK@_FJ+tYDHr=xumcdmoJQ|Gfs$M91|{vB~T3A6X2o9|avP#3E* ztp7R%j7n)LWV2&SY3{lf%cphiS;%ZB!faqeM2>j407{h>jU@5PkG!v7R{uIR%+vT`w^7~t9kMd)=an~13>k zS!Dld^G&<2$aXoo_)w}Ll8WY6SlVf^$;yux+3|U8j3J(oOXT|86Y=BCMNtW>WPCW2o$G;F*)~`3H zMSaVtaBLCh_cl=xQ~wZk@?B4NO*$m_7LLOl_?F{V@rl04N3H-Di)fMN$cj3@Co^;- zu~3ftSEwB|^!E`Kg$%^64bYg7@#y}+xjM=#9DHQuRRw88YDI=Dkn^AtSaLox4JfiI z!h0Ci!$X_LqTk$ZR&b9HS8I->QObHmK?b{p`~M?@t99`ojAgv;p6J0p-6{9hs*Y9NRiOz1Em_AmAT+ z`}8f@VbP|g(NM(Z0SyyClcTk3-M#5iU{h*TaA1HyH}Kkzy0BYgUdnuKxaPd4h(l*7M~e%iWQ>>A(5{K*BS73Ch3qPIm-8jX5D3Sn7yN6E9)a z6tC43ue8l(>{xGUAKUl~%%5gu*zFLaYOUqJ{vFY6i9#|G{pg=PLLmb;g_T>3Ci-!_ zJl@Vtqr;(Dz*y<@X)X{a=j%(OM17#!79QjcLn6j zKF>BuwrN~La#%80$tAu!!LlNEZ!2TI$F6zv9RoG_80 zt|)lyWRK`wIuj$}%Uy+Kzp!H(anU!db~?b69Ypf=;)(#;zF}oWFm4WLEa#4vDP6>q);Caj~Sb>-wD zG_t8}sVM`3o4vnnp6+zA3XWpY@@q;C^L}&6LbHCA6rFnxzY-v?`tzJ;5$Eg{wb9Kv z*4^X2-WR*Kk9txbaCpOo=zJp)RenTnz3!s@k{C>}C6SFx(289T(?3s9g?f`jxcig& zh@rIcyrAJPC?zF|yb-n5jkg=d^hk!zc5y!Tu#p6C!0T~4S?h7r8n{b+27 zI0KV@c$Ku(UgXg`OTf^pd(P_r=#xq{+oIR-DoRw)yXVPO)}6-56;nK&!d5X@k{X9 zxD$-=5)>rHXT_n{`t;2U?PLTy1Iq$c+!(*`H&@M+xA3*U@p&HzrJy&D(XGOGz56m7 zEhyO4>j#2fZbSEPD8uU|GD-gRiL{#2ji08vuk;A;vizxWch+y8uhZNzYUn#&8%m9s zRG{QEzreCdxYwz&=mm#>+5t!iPxx+$ky#e??A_!vq$4@_8XksjVIjS(bg73@68f<> zg5j&bXZITs^@VP7{m~ehm^+KM3)dfi@9*Hpo!WCJSa~3Sdk&BLL+v->K*Nbt2Vd)- z$laQBu?&tPz{s-Zkh6A1;YWK2m$ae0CEP57n~-*xE7)R}Nl{Jy!2lpd1Ws7z2xD|xwGri)EF0RRnNgZ6ZbEn^9cZ?dorbH0;CU~~#5-oNASprepLC{zu z((IQv{xzNCM4qH5TKQySwD{CmOw@{!v~f-!Py|6+5{Xb1v80S9=Z7uprAJ@zD6eFz zQkOQ_+YRTB1|qXgp9LDXp+aM7&CE`egwMZVoI`9t?T{zH`hf1cWzGY356^2CRI?hn z=BK*iu$S7%VcbW1Lp3w7ea;LGvkTf5*Bt8-(T!K2WmQBWkF~oI78D`65kyO>HP8%K#jW{Xd1Qsrt2~vRfr zN|P1LjehCF*!?iY*$EA~1FNg&QF1Uip|~sUR<6AI_E!Qi3tscTS9kvx6)d2LOLn}3 z`cW|N@H=D0=YPMuldRRWsj*)j#GcY*>kVu{ZqbA4&Odfrh@D)uL|jb~}>= zY^5hx73h&jIApZeL&5Kz?%GotJbxnUec@wFcB#c58{qL(AXU2--Lm3m*y8PDh5-1A z`?tmlV85ip3ObGxg9IJZhHjQ4Wq&7JH4`Fz+;CRfbWZV!=ioF}M2$;3Z}g0U{*eYv z2u@(&f_9rq!zcT|i4avI#`tQ=A^3GGk@ZNbU{~?`yBy*H)hC`ag zqC0p+rINA?4%D#RVFiG`+lKB_WIL+lV^)5Y+tBIUDyyno@$+K><&vU{elKU(D8_j> zctak^*e$;$^v}27rhEG^j7|OOhw#P1#kIVtC_s5LSnAD%Wim0+=Eno>1eS&E>(%9Qi8D*%bRuVE?6GpZou78_&XN|;o%5SDA z@-foIV<)!1RG-E(6AdHohu)wm1-tjb7CyR4#4ehUcOfRfo4&Y%5uhnFi3W*w$Gm=3 z>Qt5ttFbv%5)2X6=M+FQG5ndL=g>E-5AQaKE3D7x%7$N#+E3ugT^NVHx=@$MKp&4V z?r+Wgry^(^SiJR!Oz&aw*%b3N)ia#r=c|g zF+v|r2bXnE)PdW8!uv=7Mdv8JkfD$VVjps9p0n6N&tZy#WaziXjfFc#4YRSHiUa!6 zf=qp-5t&x0p|{HHO5@?FzgOCsrD22WrwG#yjtb0fep^47a{y5ui6zG9Gqh@p>&8Nq ztp7))z>ikZsP|YgD!oJYNi-6Pf>9{K1iwUKZ1YqTpcPQkI;n+?{74?0x)q;#730;e zCuJFWLmwkzbDlpUXlbe|mNZ6i;c-Nw=3gBrta(+PsxZS_8@CW5Jp1z&6|1kg)Od^? zD>rWxYb$|$!-1KjF2v~=D|I;DLIPBR8hd(N4&U0Z#+yW+m0a{ckW%rPg@1&dR4gFI zN=(2*-%jxS5}nPbXcMljNt#tm_>3GenMS(RH*1~}Z(1Kc2vtjX-ot}(853O)N{x#I z=}gyaI*WK}6YU*JO*Sg(sf|f$I?K)l)mF7z<|TDFPYLu_VW%fCtVC#EVa5%yCZy@= z_Mgr_{9;INYM{U7CkP)ZTfMd#k+D0h`ZPthyNgX7bFD?cExnW6dA^TfFvrTwI>uma zXiz56FXEu31QIb^n3X8{_1s|RnDYnA1@9U826DCq@~JRN(bD%O}LBvoG-hh z&cEG93j>vo4S{o?E!D)-B@}Wr1*fnQ$9Qz;wVgAojtX(E!_@ooO@5&u>Wxlh+FD@M zNpmVl?+CoURg#H1oqe20Incg1^idJ5ILE5(->aPr6ihL~d228a?yy*{TBvi-V-0OP zj2wQ-jG=y56whQ@zfT0H2t%njSZQ{s>UL`@RDeT2OI5LutN~oI%`Q2PO!d82j6~za z;O)Kizs2G|o=P=gI(|cv(C>?SJM+pd_88mYGE` ziJ>8Wo#OM2NBOEU73Akn`qQ~VSrKfPm5P5RdS}zowGfd<#H_#-`Jwd)Ui4#qY8*qv zlmS3W!89+x_v^_v52fKMwyh9#TtOp95PLh1dsxBiIBXC?HLW-CDl1ISg zt31?4lJH`-g?AeNmjR0iU*CDWe8)GFL>6ld z#CGRn0#n5eIH&qV4Sp8!IgCR2*8sL=<7on*{g^0GI4FL6-YYm)HnOUq2bkboTN=*t z0viX3dH39K=R8b8S%Y*By$$>vsQ6aSRyEysEUY1Kmq=JZmvV~j%c{XHJH|U{dMxp2 zjcBgmqJBw?hGZ^g>ZJZT;#E>ahhNl#bHa*+PcBDZZ?-}RUCX})G8jh*AF#WnugFa; zp{0q9AQ559?EGuCI2YYr=qu8NLtep4j|ho=uObN3UdB<~n%ZAqcszZaamn36Bvsd{ z>)=mwymv5D@LV2fdD~dbfrGx_fjeTkx`TZ^zRM(94u>g(VJzJ3bfxYX5HGH z=S5pZrp`_fDdM|ndMPgGM~(3$kV7WNJ3gyKhiFQ50eauGhOvNe)}Ur zAb+l^ozppd`O>j>Ri$1lmdfIOo3BKJJ>8T+J+Cjy#`^d-n;}FaY!nfx_jD+zk-%vf1S7`OX*8I&;Z9A8mBn zmUkjS+)E&Jn;jd6cYliMW_7Hy9a!zUDo%QYa;1SSLz{Ur!VGovB!)9b7ndaye?*^g zitlSgIyh>LtUWZ{tBij=l0u&ei}&N}-xB>dfb4z5s+W1_H2ZjCzzIq4X_iOW=>W=% zUaLBAU9QXi>`1LR3+=nxi!^4n??LzrP^k5t)hAdRVkUunM&B?ZeWB=H$M1Q~gSp?+ z%0n7efPFxSktKRu^GE;gQ>EOE(eT_ z?Q+#Gb!4O`yXj&s5FEy(IaKU5H0?9#1pgLXc(T}B%CmF>>b8eGhKh_OY(MG$Hs>Fw zrL45kUSLrirB~$c4Kp+D51`8Oi_Sp&!2KtODKL+mw}kLy2E7xiVSdpCh#|Xximh-3 zX4|hrQ@@jK+l@9LO4D*ztv4J3fY}CA(U$3LwW#m78A#>wDo&g-9TzKm(IElR8drXX zmd>cG)NiWLHR{ROQW#btm>5iv9LjRj0QEjyT-g4e{{s|fY-wt)wOVKXSfXgnbkf{} zQQ1Ck8Jyt8sLekg=!qQ3T-5y}^&h@2MJjh-NO*Ex?{JJdSan>9-2#614!yyiC|-F_ zkT!hiw7X%r)$g0rADXe>BYG9xROk0R6cw}}euo~4d1lGT z1GhoJrb;>f|K`{acZVl4SXLTc{QXai2u+$k$@YgO%20Uro8>Jj2L6+`ach%shSY{D zeGv&W$_O)9T{!{Vm=yLQn2(n^b_n)Gx7bN~IvR_s3G4)ynWhL<;|KPROYvdBbme+g zx%E0VSq%FF+nX!RQdZQ+Ej0#ya5-CY7veE48bI4iT-txg7?AD_<`|9a3>80AKEZFrVb}!tTXZaf6t0JX3&v zsbamuzxJScTYl+a-*RQ}5p`RhaR0k#^<4W(onJ6q2j>3wq`RbVtjq$7EF9n4=bn${ zr#QG2MuYv@QgV%PBa$PFG%-}D1tqthmli|riLk#di|zTBU6Kdc407)}5JZO>e4FaT zfd=~XL(4O=caJ318E#8b))C`-h|%kYWWtZpX4TU}d(^}JGI$ofPyEERS6Pp7*WJnK z_3K@^)1J{(U(?g%dX=)1vT~2uxbxKA%2U`ZkQa73zR2`hv5(lr@5^tf9L^!SVxHnV zqc{7TQ{|7Or(Fg?cIjK`ku4RKpJyv} z@QzKfJB%IUSNp?1Wao}SUm_}|xqHO_uf4%QEE~+)vha9!OZj(EUDbC{CoX`QpUFin z0|sSOxvkAF?!at^cvBZut%&H(OV8SJPRG?Z!#@^C5jc%kp@`qV|J}aPEfQy{xA>J4 zt7T`=ym0O4ziR8u4{E^~u1p&LQqFIu60gA}r{Lb>r=-2=35>|u-FVaD3;fo0^| zwxHW3wv*()gt{lWFBW5JgP{^yk>g#ky9%maK6C6|@Wa&v_Y~w^#PMgWi>s&AEG@pA z5D)TEQz7%T(Ayc<@oygr!5D3C0ZZ@fKN0?dJt|+{g;!2pULC&cj46sB{|Mc{NzK)O z$A0`uap(v40U)q++?IOZX!+Dy+=^}>@^im6!XdosjH}g8X(lO8Bvoch2EJ0l+LtHq z=0D1KNUt^}F?{*rNmj=ES)*e!tou4*d6yxyi5q-*N&yo~@H|C@pO1-K-=VeTimOL% zNYlkr!+EPsLrv9Nxx4lYMN~cfjcmU~)W}Mn+qey2rgJ{&AQ4SsdOTVW>R%$lGFx9s z{OaBFv@oh1Ud_YM>Gx}sZie#W!xqVPx3#Ehe-6ADD~0=o)A~r4WJw5%+}Mvv1 zY+zI;J+fQ}JL2Sn7p>gL6qZ=uaoVqHD$HWZF)4-swwKP{YZZHJ$g3`1wll))wMDo2 zYj8gBE+yTOWTD5Em6eJczfM73d9?_^kDaOCD(kSnNpso?eWq=6hBjbLS!luTN;Ga? z-Cs^u6UK==9vfrWw{NLjaBKN)S8G1JJ~PtDIJcTcU|o5y{fXL_)}^x2rnuL{zJ-~l z%L~K{`Yd`X`feDLY^%6c{4RTPKkYt}0`UQ$FQTU)(O4>`iy(or<({v4pWZ1v3Q4Rq zl>K!33S=n+oIi7VCZUQIJHmdx+alN*km0XB$73ZF+)x1W_#6=-*di%n%e<;p9V`>Hwoimb^LIT4Mm5+iM5Xv}* z@kq3^rVA1HBD1k2bQG=W_hdi${-GDoYNFud|c#BF2^LLxM+C<7s^3sEESwLn6pqZE&xmz3jNy@f6x$y zpz?hk6GT^$Sm4A+oAy7DMWQkwhoe0NT0QQkQTyR0;?qz~%t8=aM5N9qeC$JyRbLWY zEE}|rG?U*w9U+NOKOm30qS$1|Bqc58%^Isx~)!EH-j?dFd@9 zmM->MW;W6-TP!7miNv#MzNPLk9L;%-bOoB{mYL@c4Vrb56Evgiz3J1vPZeAJyFZ8O zZweYvF{$B0UBSgXN;WaI?;u&oFo2H7CwET6(FR38U;-d&;PpmqEb<(`jbzQS1j8I+Gn( zq($D2_Sbh9$}V}f5&43s$e|o|;m>M7hdwlgAN)m%gfL<7Jw^W;1jXy%PJqekbXH^8 zDS48}0K^$T_pp0r^5LcjF_A{Ft#zt`r8FS5W0Pcg5Fb-lh<(9o5&U;^EN)pxT!!R! zs1-HgjcXPp`AUTK;N-rrbZhr9{FR5{5g1(l;Dzw`jSe%CF005|7VcZ#^KL}0XJV{2 zxDk0132P7pcg(bil>dT$@-{#1XX{lYb<;f$Hp0IsjbYB=MQz9zoHWlTr!fs%6Q~ArJ@BBPD53f2(FVkD{vWt5Bit#VL z)0_(B34K1yzJalJY~Ac2AdpKn*me+JMD%rZPG3JGRv&xN;&J%Es7^AWT`gJgFd;tq zV3>)R-8n7BClT#U6$(=wO1RDvAO#86jmhkPxsR)geI!94EB#4ppzQ-mW`j%i5TO=} z$sRzSGa&UM@OL0Qj@BCgA_waAstY0wIenFzW2d{-P5! z=IR+JD=c|Qk+}XY=cVl%ue4Sk5~+BMy+%?RQd>2wmv?^J65f@rr!Yqwh)#xO62BGdJSz?c zqsVcROWaC!3n*Qp#^fAO=T7@aDM5J_*<{Og(~LX+GQI>0Ya2e}z3d(TLa=COe`GyZ zcX{T-W(vRnL#OZJv^S_*yv-c{F4SRV&s&i*FVIku zTS_to6+jAq4T!#%ku;`tq?g(JE*kr@ER_ofDTHo*8%Vlea3k849j!TeKcK6pKJIZ8 zta$Rm(Dk4cR6p(xhEM+k7Y`){>*U1)i=$jV64Iz|&Zsx#5|7KJr0dFuv?^&WxkaHs zhw$|;Y#sKYf<7l^%61PAt$Gl{er&9&2lQdeF4_lg4WKKvi1b<$?yh!gv$J$%j;qwk z*hBzLFYs}vW{y?Gzy3?}tJ>;#e3FNSP;d4j+!2yDB4dSU390xEdYRLE22fmcbM33M zx9@C-dPi9QqO4(#itzIiC9kOxH|g`!bBz{60`T*C=w)FlzW-d!i~rpFsm%P=v1=Fz zKKCx@J$oQX{`Ql1goC-vBS!n;gFOAFz3h%2`9*v^Ck?c`(`l}V22%Uc#Ee0U(g0hu z_}}r=LLEib*AxLm3I=pXkz5mtxWDd0{mEzP$#&(8Zd^mX0aE&Xja+^HpP&AQto${v zgStp6`lr}t+GASwfvbZcm2HyL_hkXg(E#=Itt5)5oJ)uI_iU1l@%|+Q(-x?9&PPR& zkTsW@ILh~He3Oz;R>y65aB z0MiPAgH)m|Ixv$&VIIc_;O0Ms77<8Nb)LY+9%|bfN13eF`?7Z7Y%TsG;gHtsO5iQJzP+!yUha;IXVQ42EQB4b|bAl>tKSl^_)CEP4vP?h{q(rUbi=Zc6rJ_kKgjJHhROU`x;f+NbhuN{X>dB z`wt>Ip4f8cC6J8LFQqxUJE#3Mu(?ETGyf_Cose)=&^#g6s#k>@Upy`I1tHqcS56G3 zP#TUi_gK|-uF2KlO2g=r&{<#N?!;&eMsPlC_8KC%+%=_oi?NZsbXws~9GMyi4EP!pa zF~J1(%cRHs_veC|pYjIQ+$v1q+drYS-^qesgOho**4$4%Kh32Fwo0YTmga?lN!1%w z=3NZbfA1C<9#`5PN26IMq4vkt&n-1^#T;Z1dDj-_I)TtZ7~Sk7yAa^V}pH85dk$glLP_(?{4L`C4YiK_A)3Va%68}c?;vLu5Y)?+jqyt7^_nLXI8CzOp6X3n72)v|^N-UtMwF(j;# zP{P1qO}CY@EJXYb>1)CZJ6CoDIJXS;veiL)%KhxR@cA|i%aFL- z#CdcVm(;8QbeVkSA0L{)=v@St6eJdX!5B&CiA6r$I^>ND(D0+3@KLtlI1*L`*#0Q| z+t?IsM7HlxgekWp8jvzq{hy$`g;DMMZd~VUpfdJ_*}hAdF{Uq#0TAk?x^vc>5fp_# zKeQ!2cbCOjeO((v6S?Nf+U2M>YsP&17S~g7AoSIuQy~@e4 z93Sd?qjGfA^@GCWB#j(0-XSXKHWbFQi!L>RQ5t9N4EcZ=8a>&Nfg;;~*q6GRYhBG& zzhuaRRkZs}mt}$b6A&<}coK1|)zC=rqMeb!OA@Pf?^ti+U4P&`lFb`WO)e*z_^*uU zW7|}%tpE%6pWoZ>S%4ZrR*kRD8YBmqcnv{)@Cllmv6gC8bsUv@CA~E&2_J3=qo!bY zE%}B@u!c%DqO>(#Uz;0}$QG06kwdRPsxv8iKp)SFDk$uwW{D z+n|eJ_?(4`d3O-=iate7)YQLXMG>LHZ-c{`kE736!vCmF+^vpsmsDhOK4;>Im|YrlkpxxK z#(4ZXp_8Yi|dm@vDyx16^A+79H-gBfMZ*gXAdW5CH!>2Y3{PG70?PbRQD7> zS|T}LYLk}ydkB~7rF;5O`rY2i72qYm1l*%rp)P8|rKD@FDdel)7{fBN+{va6#uu+L zW=ZdV@cA8Nt^0KF!^Ck8QK4BC-z_#7y|y11=HztO&yY_(`#qiPD%|~jzJ*<#A#ciD zfA;eRvYud8XNa4wU)wu{eVgB~d}gR~u1S@vd#J`QhRK@lQgYEN%Fx^QOhk9Dfq>#3 zDjju#=Ep>Oa8 zi=W^-b#YFV9hecYyi&ccTUL)#Fch{Bbm^2T$Z<0XHK)qoz254GeTE&au6nk@{kzAq zp8qcEMo*c(B-VxHzk-wqUjgk|TN(-z6HT$|MqItlVQczK6%Cg3j(hJvgCmyZ*2wQn zPy_$B;jev-htEu!iFgm}#6Mt97gj}@M&K|Sv44td{x+N5THTr=s`=br1jf|j;rULa zF*Sz_&ncGMf)%iPvUV^&!`wnL3*VncMmI6%Cey%7)HZW}oxf4--VNwv48`UA$rWy) zM{rFqcY4AYan+x)2~@tqcTF$)-Q%d|a{lC&9{TE-Rb;8{IO;b3$UiQgDkn}2>nRQ7 zPkNy-Q>Qx$vtnb8ucE2P&`tonx^9+vj8MM2kpX1aX))7Qrw(ErmE11#`Bx|34?^AO z>3K2=R|Roi@fN8r*nxWSpY)m;8m<_^+1tJ2@TzW)^`b@P>|?>r%Ec5U|4vSP-T~u#WDz9g|HY__ zd+2@RJWUaQTkG0p*w}Gzy&3(2J%~LQ5-$?`oJTA1UPHHYF$WY`rafNsE{)@fRgjs! z?8L{R*7}9tkV#Y+)eD5K4Yqa!X}>+ir?iE z#wMNZ$vpDlgPEi{wkT4hw4sVk_60+UlL!%1F=|hIN9I-rsIy}gKnOC;>duTN@pWQ#t0cQ zvxPHtYT%LOMJ}IQiu$NP#540N*dFGgpX$dgM9ee-SxkM>VC8y*i0okPJt7^y||-r1KLLVZ<$76J6*QobUWigiUknf$=wEqbB{u{#H2WCyA() z3{!!NGb$!A_mb@Y+Ui7tZs^&)+HfD=3%vnFC75=799EGj>+XM5^JV4AyiY~M4##!$ z9@fm~nHiHf`X;ZMVl6EIYw`zk6K*iiqo_1Bt=(jNRlG=YhQ?HR-T=3^eg9tKys~L> zA(*l}qe7*by{RM@Paul<&qPW@v~EXqm1Bi??Vz3xNgZ45(gaObcGKnMV0KjVXP^=? zriBY;hZ|Rqk*BUT0I>m|b-5(;FXB9|calsT0z8T6K1e+5-LV;c7VGO_$+C{!#sCwyt6KmV#Fzea1Z2}h&TxQXzF*?$O(}0b3;2-($9om&M zVIZqYPLkBdPt=Mhvi}svK)n|D8$pV5tpj%7rhL}r4Y>~j=h-l7Rcnnp3Y?firj=1$ zdUtvf{(Qc*mcp2Q0!4-oFhF5r#FTO@nM+A#xiQjHrWb~LqF;>(DV1m-{X8}G@)%Hj z{T}_J`R{ROQ0u-VBa$wiPO4>Xs^?c5Tt(48pfC}#(b<;bz8p=Nm%>({sQjq)H!fBk zIO^|VD9oM+ndIGa!EpbL{h{h8qR;4|U8s_#=|i%-+vv!h6*&hVwP$gF>tAERoqryj z4`traeSAE${tSIev^hSa&kS)6bqjJpNK30w5!AVoix1W}D}oP247@-1lqoRs*zdH( z)v3V|891?*R`Bg}>cZgU@hwua8j~ZLY zc)QkFgdrIS??O4hvmT)s=Sed#iv$7^4Hk44=OC*o3>!HH%#OF_&eL7mQWj198LqP2 z!QfFW^CxcGxGub>G1IoRoD|AR=8?>^0l% znZ0M0`2-&z2hn3dFp<&;Gav2{jk4t|ZJVS)xmFmZXL!SM|q@2T_W#1G(f_SHGz! zS)C6s;yjONc$q7cg7VcEv+HxTB3`J;F#y2Bwh9s;rv5cf7Iw=hhpO?d_2;^W>&JSx zK&Vx^^qR6hFD^JbS1yYkx?DzY!K&TB`1j**qzE#K90cKe5`tum&77k)E7_oGyD~cm z{&p9449N?MNHn@`3GBE1{QLA-_MhB?0=#9Ga3Oj%Cc4ZL^+z%nPRsF#d*NKdtT3kv zCQoX>)F1xC+?QidQuyUQi1Q4I+m{{c=hs8xXR5N!x)(yM{7a?Ck-PiUm^x?_FJ8)o zrTc=OZ9Y5|RIJc!ct$_?o!WEP_)Ap6$h7$3`Ym-1z_4BIS$;L_AZKhMA;o3IOmTZI z4HHJ_o3&_v*ybjr@+(pP_1iZ6i>lDjQ|T;V+S>Y3Dw5COu4!Ltl*>O#;hHX#AK!_~ zn;kda8KCsL7@sIWiTP0N<02@8m=KX~@DPkL@o<5UH~RZsklgsb>p5Umn-fAUy^%5a zP&7H9MlQ88PtjaNP=yhsBT_)IZOSuDSFAHOq+uVAbs^X9nC_`~+SwyD?u_ACRGJO6 z9RBgK@jc4Q|F&|}HXC*ocC|uu{?X<6>fyQZre#IoWrkmBCpxE8^CtAmYoRlM}pi8JA~@-EU8`>yu8(XOkbjH&S<{*`z{x4x;yP(MiF)En(k3YVyfTMD@=8@*F$q9 z^C$W#H<_8#hd!DuqoweNO1o*YUB~qw`!g56gPNI$bqwmtbMfrrrJ!{rRd6bRcYC0b zG4&+9E;Ed?vyO2o5m!$5EMDs8t{+)m1+i^_7_MqZ*iLs{xMBmv`;JP_Pk_!IA)VhgLTR{H z;7nin!>fVyI^Xy4IloSdG{MVJP`nF|zxU~2EHnHpd~Q9L)m1W|T#QZ~!@BBMKw&=M zs5X7v66%w(8!PoR=5ZmIk}h2PvvZfQ6(=>;!YC6-`KG_#t`gfL$ z2#RXO?t7yErp3ORqHpwKw=~ZF;ty@%JU!ftcGy)J@@k}P6u#CmX|q}_C{bvC_>nQL zF`E@JN=+9Ml%pkjv3wpD$oF^&F$3p6b^LJ;igHyoCbqQ6VEn5HMcp5?aLzTGmLju7 zSjjbZFG?E5V52-0fB?ZpW<1y*zLH=s0A9?O?}so>x}FOQm<8gE6X9+3BDI)$TSrt% zfSOc2J)a^%T`nL#RXjh5I+*5CAJ3oLJBWMm^6Hgijmj{1)T3Qd4YW=?rClfDv(;jm z!(S!MHG7A$hDxk76hLq-C&C7?PE3f+M$-vFs}h5t|B?3n{3Er9pLtmo|3eGY59Wom z`&>KJuxfuq#1$_XEgNmIkd}eeSA*mThYQnD>PXomJFsQ{Z|c7THP$WWrxK~XCu|fq z{!$@|>6_-n?{u=+xy+p+MX=H~8vG8Bb&Em|wblveK%C4lH1%09DQi)l3-- z0JnbegOpWo3vgu}@3rp^&IY`4rW^JNDO!s+gRYiR(iqX8A}2y-`xR-b$v2yfCZ-Xb zE>c8VPYPzqncR^#e@p(%IHSazi-DYL6Asxr06eCOK^~w}>)(b}P^bIq`A3ZG%<2Wn zCaTi{B=a6_l}-Zw0;rfCqKzYBo+A)!nmCFE@)puwNWKXuVRqUoFu30{-uaO^#*F@# zTW}mCn8$;#s!~deCgR`n4aq_?QC_50($OCB{C?=b*`@BE3F3qJVw*JED50GGx48`;bC=X=S(M@BW$T z!I_=?ih@T7l&b!Mm_v%MbBZV~`xF{{-Ln`?iGsV)!;GQvk-ShlTk{ZHVdT zSKtB7IXuXGajT<>Ri()m_s^>X);H2N9m{%ncvdjS9uVaKN{_AN#(% ztU^W1bK}1Gezi4QdoOU|TKVGcSg!pk=GI7x9+lp(USR5#KD!#W_3z`73rX$xR4oqr zQ2yK<*D23=z^l;-Gqev4FMJS# z@2@ZYUw}FRbsoz@x+m1BW6k+=b=t*_W*Cm~mnJ;x0OUM`uCqVL8EBTJd18V$^+3a> zZ~MC8+D@NXIxfzD1;}|oprlYAYw${^<)k}XZ;3U9F%CRvEI0))J7(ifI9m$ucrw>C%T`t8-V6COvHZs#AFbpOja!rJn$%G!1{IToL4nH_doT zeS!kY&@+2xZPXKUDM4dS6DD3}60bxIokv5GpR;`Q2<5#UqPc_w!uHJ{N%k1Fcd?;q zHgTxt$YW*trr~0O`?_nJ9)#@=Eo`p~Z$j99uVMR3F`tg|laq!FEoV>MiEUh3DS4vG zF-f_xJa=NDncu0*3!i^$W=-Nrg*2DKm}q7>>EtsJb40nBufghOD&)81wiNXB%Tg;h z6OYD^SijWwiLz`)O%QJ=YkJuNXqS8*UxMzj43Pnz;_m>WZ~4Tbq(2@8=9G0 z)l@g^i|1=GyXtC9W6tKrUJWYfYN@#|Vvk9pxoV6zYua)*w>5vYrl6bU{w>->c)3=uPXs~mP2W$EGv>#l37N;%7^Jq2}_+v3TP zM$Z|q^ua0&6fXu>eX+KNM>qUP+SAnjU!{`psRiLZKKvzwzV_0q7adtpg&3DsPO~ZQ2G2NVV*2+S= z%I`h;!ibmB1pVLWGzz$QKha_aT8=HI323T0C5ZB;JQ?k1VXBSw>Ae7&x;PC0O@#zB znSfSfZ3#fMNkH@u9uJXN?2B%Y7u1YdGL%VW0VU}`*3f?xw(?*60R??CvS)OjYeq zuI=bLb}hp)F#g{dQqB&cnZ`KnM0h$27~0ip;HMSQp@qPd5Q8fr&Z+pe~Y zCJBw94@+J$;0$MfZhT04&@Cp94@*=_V}vhqw3_{RC2prb#94cuJ#` z6-9q{&t&*awD%xJfe|0eAQJP@=Q1Sd$X}wd{AH3H~}>TROUUF zr*>Z=3Elm4;`FXntT|2>^bv>9XZEL$pdPkdLa}M%KCxZXv4g-Nj@Gw`nk#)lA8|{x$q zQn&fFI{-HTZUEc>xE);$b4!|iPyT?fI`{O@-Rjy_=L-lN5vY#OEG-8-4 z^-WBH{~R9w!N7m2@}HZ@{}C;u<&9Z)R*1P4{+Sw7P+EU$3)Rgh+amBI$Xj{$fGgdv9^?Us{b5 zg5b>`CiWHt*HqQP7QvpT+Kzu?X?>!bfuXyB?c=2&I0RR#1y@hy`;Rzq{u<+lF4ptXL;;vpH$9s6`g)40CQerixbg_*_n7B>?0ibD;!_hF@>LXsuu zi-Z?31f?M;4b_?&=Co~fE>2xGI2-M z+ZMKV5T$aUOHewXNcKb| zJ40TWDU@{y9#Kd!Z3Qf<{XbzN(V zso7{dj^Ww{lwmrA-m`x{0)bVG`-W#YzT;UM!Fpc{0$asIQ*C2`K>QQ$^gm37Z(5UU>yx}+IFl%RV~vpRBV=5$6}3~bxSM& z9{@heVKEcH2Y`={03S`OmZLcx(`;L=vjf~=zZ-YRvAHD&=h}bV<2;hp3Gz2eLUbmE zbRJL8J$+{M=Sn7m0g4n*q|hS+7FjX=0~P@+qExJ$vu=f{$11xu^m(pc2%pD7k4;%M6;*-gnifLIjZMftQMC(!1T3U;g{)HEUe0r_}l$W z=e+m%rsLX9%QbP!c8r#d-Ifk0<`8<)9#M>;286hl;aPv0YG}S;Q4RaL?mL0w0E#(0 z6k`=x72v7Hd&kTYmfttrz;!ScQv=18hh3ZKE})+S1Pb`**pGNxeu}lt(uXL${;NEa@Py^RAmEke zcx5t3DNAzlk^+9Kir@ZVVKSVnG5A2^0c&;TUQMZq;|ik+DwzWQ1^f&6SF@b99skm7 z$HIT6j;*%>5w8~k{{sG1j+I)#zkq*z1pjJU)|%>cG`Hcf&MWj_JC! zVc10;flO#5Hp&4{DQclV#LAM2HxT+sb z9vNjc1W^l!T0qp&FsE&M2Bl+brjBumDJ;}wUJ9duvIUeaWtxdW*#gRzV^Fr3YDah4 zw!Q;li}8M8i)olG)3x;cCeoI(*o#RW5#fLGNx~9Y zN?CkDkD{1{EdPBvLE@bRte@Y2l#viU(ugAZ*Ep6dCmx|B%>qUf^pm9nlni*BA|A3w z9%W*=z*81bMBlC*F|01NGuj|)hy~QwX+1E zuGc`J3W#RPpRSi0`5f|*4Em?#hVIs+3Ri$MFZL94*WLV)F4lac3e0BukuH`Rxt{9@ zcVb)i<430IsuRw>S>2|!xlLg#_gh$0^toQXpPM^}y}6nDqDav2weElL zo^peyYwo7AxyhM11)VMv%9st4q*xTZIPP(EQ|{)bX6A(Nz5;RsVOML^qtwv~gZI?y(tZO1^{bhTsZ^3c8=;I{Xleu`aPYgw9FAGh6!nHAke z6#XZapE>3c^Z#o#LZg3{qd7*2qS;4H(Ey>X8T|pFEhDtLALW1%S*4Zc!jckDSffxF zjT3n&wnSa>WYK_0P9(8cN`|uHNS{T482Sm>4?n1`%5-LpVw#wDu`o#{P-)da-#~G znp%1?5Js*>Jcf$GA#Xb74?Hg_*_nzB87JZd-2eHVoP7<|^oAruGz+TUl(a zmy&>G$=od^@tS|uDu`yL_LTh4>1Cw{57~nEMr&?l1=)z6d1e7BUbJ~{55zP{7WEnH?IS90BFXKVLb5JF3ya zdRup_cPmGBpc^p_w`EUzRqZrw^dR4E(Vr5;BXq)IKVyGslGDQ8M67H^2|7RTpwl8J z4tpb@u}#(64so`QXK(?z#qF#yOLEmbF9SS;pS^o52gY4zCSh#=u;%ETa%CsqId MP?9@ueh~tM00Q_}dH?_b diff --git a/dhp-workflows/dhp-dedup-openaire/src/test/resources/eu/dnetlib/dhp/dedup/entities2/publication/publication.gz b/dhp-workflows/dhp-dedup-openaire/src/test/resources/eu/dnetlib/dhp/dedup/entities2/publication/publication.gz new file mode 100644 index 0000000000000000000000000000000000000000..96dd218174dbb1fa6ab55da289dc116bbceb9963 GIT binary patch literal 9056 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 S(Trx%jQ<63B6;BU&H(_01)C@U literal 0 HcmV?d00001 diff --git a/dhp-workflows/dhp-dedup-openaire/src/test/resources/eu/dnetlib/dhp/dedup/profiles/mock_orchestrator_publication.xml b/dhp-workflows/dhp-dedup-openaire/src/test/resources/eu/dnetlib/dhp/dedup/profiles/mock_orchestrator_publication.xml new file mode 100644 index 000000000..b47d99b92 --- /dev/null +++ b/dhp-workflows/dhp-dedup-openaire/src/test/resources/eu/dnetlib/dhp/dedup/profiles/mock_orchestrator_publication.xml @@ -0,0 +1,24 @@ + +
+ + + + + +
+ + + + + + + + + + + + + + SECURITY_PARAMETERS + +
\ No newline at end of file diff --git a/dhp-workflows/dhp-dedup-openaire/src/test/resources/log4j.properties b/dhp-workflows/dhp-dedup-openaire/src/test/resources/log4j.properties index ce37270c6..d3e717dfa 100644 --- a/dhp-workflows/dhp-dedup-openaire/src/test/resources/log4j.properties +++ b/dhp-workflows/dhp-dedup-openaire/src/test/resources/log4j.properties @@ -19,7 +19,29 @@ log4j.logger.org.eclipse.jetty=WARN log4j.logger.org.apache.hadoop.mapreduce.lib.output.FileOutputCommitterFactory=WARN log4j.logger.org.apache.hadoop.mapreduce.lib.output.FileOutputCommitter=WARN -log4j.logger.org.apache.parquet.hadoop.ParquetOutputFormat=WARN -log4j.logger.org.apache.parquet.hadoop.InternalParquetRecordWriter=WARN +#log4j.logger.org.apache.parquet.hadoop.ParquetOutputFormat=WARN +#log4j.logger.org.apache.parquet.hadoop.InternalParquetRecordWriter=WARN log4j.logger.org.apache.hadoop.io.compress.CodecPool=WARN -log4j.logger.org.apache.parquet.hadoop.codec.CodecConfig=WARN \ No newline at end of file +#log4j.logger.org.apache.hadoop.io.compress=WARN +#log4j.logger.org.apache.parquet.hadoop.codec.CodecConfig=WARN +log4j.logger.parquet.hadoop.ColumnChunkPageWriteStore=ERROR +log4j.logger.com.jayway.jsonpath.internal.path.CompiledPath=WARN +log4j.logger.org.apache.parquet.hadoop.ParquetRecordReader=ERROR +log4j.logger.parquet.hadoop=WARN +log4j.logger.org.eclipse.jetty.server.handler.ContextHandlerCollection=WARN +log4j.logger.org.spark_project.jetty.util.component.ContainerLifeCycle=WARN +log4j.logger.org.apache.hadoop.mapred.FileInputFormat=WARN +log4j.logger.org.spark_project.jetty.servlet.ServletHandler=WARN +log4j.logger.org.apache.commons.beanutils.converters.BooleanConverter=WARN +log4j.logger.org.apache.commons.beanutils.converters.StringConverter=WARN +log4j.logger.org.apache.commons.beanutils.converters.LongConverter=WARN +log4j.logger.org.apache.commons.beanutils.converters.ArrayConverter=WARN +log4j.logger.org.apache.commons.beanutils.converters.FloatConverter=WARN +log4j.logger.org.apache.commons.beanutils.converters.IntegerConverter=WARN +log4j.logger.org.apache.commons.beanutils.converters.DoubleConverter=WARN +log4j.logger.org.apache.commons.beanutils.converters.CharacterConverter=WARN +log4j.logger.org.apache.commons.beanutils.converters.ByteConverter=WARN +log4j.logger.org.apache.commons.beanutils.converters.BigIntegerConverter=WARN +log4j.logger.org.apache.commons.beanutils.converters.BigDecimalConverter=WARN +log4j.logger.org.apache.commons.beanutils.converters.ShortConverter=WARN +log4j.logger.org.apache.commons.beanutils.BeanUtils=WARN From 3dbc637d3e8e8a5a8c775821998b1991e10690bc Mon Sep 17 00:00:00 2001 From: Claudio Atzori Date: Thu, 17 Nov 2022 09:55:41 +0100 Subject: [PATCH 233/535] code formatting --- .../oa/dedup/SparkDedupPublicationTest.java | 19 ++++++++++--------- 1 file changed, 10 insertions(+), 9 deletions(-) diff --git a/dhp-workflows/dhp-dedup-openaire/src/test/java/eu/dnetlib/dhp/oa/dedup/SparkDedupPublicationTest.java b/dhp-workflows/dhp-dedup-openaire/src/test/java/eu/dnetlib/dhp/oa/dedup/SparkDedupPublicationTest.java index c657d1865..773de65fa 100644 --- a/dhp-workflows/dhp-dedup-openaire/src/test/java/eu/dnetlib/dhp/oa/dedup/SparkDedupPublicationTest.java +++ b/dhp-workflows/dhp-dedup-openaire/src/test/java/eu/dnetlib/dhp/oa/dedup/SparkDedupPublicationTest.java @@ -15,7 +15,6 @@ import java.nio.file.Paths; import java.util.*; import java.util.stream.Collectors; -import com.fasterxml.jackson.core.JsonProcessingException; import org.apache.commons.io.FileUtils; import org.apache.commons.io.IOUtils; import org.apache.spark.SparkConf; @@ -32,6 +31,7 @@ import org.mockito.Mock; import org.mockito.Mockito; import org.mockito.junit.jupiter.MockitoExtension; +import com.fasterxml.jackson.core.JsonProcessingException; import com.fasterxml.jackson.databind.DeserializationFeature; import com.fasterxml.jackson.databind.ObjectMapper; import com.google.common.collect.Sets; @@ -299,17 +299,18 @@ public class SparkDedupPublicationTest implements Serializable { assertEquals("Article", instance_cr.get().getInstancetype().getClassname()); } - private void verifyRoot_case_2(Dataset roots, Dataset pubs) throws JsonProcessingException { + private void verifyRoot_case_2(Dataset roots, Dataset pubs) + throws JsonProcessingException { Publication root = roots .filter("id = '50|doi_dedup___::18aff3b55fb6876466a5d4bd82434885'") .first(); assertNotNull(root); Publication crossref_duplicate = pubs - .filter("id = '50|doi_________::18aff3b55fb6876466a5d4bd82434885'") - .first(); + .filter("id = '50|doi_________::18aff3b55fb6876466a5d4bd82434885'") + .first(); - //System.err.println(new ObjectMapper().writeValueAsString(root)); + // System.err.println(new ObjectMapper().writeValueAsString(root)); assertEquals(crossref_duplicate.getJournal().getName(), root.getJournal().getName()); assertEquals(crossref_duplicate.getJournal().getIssnOnline(), root.getJournal().getIssnOnline()); @@ -325,10 +326,10 @@ public class SparkDedupPublicationTest implements Serializable { .collect(Collectors.toCollection(HashSet::new)); Set root_cf = root - .getCollectedfrom() - .stream() - .map(KeyValue::getValue) - .collect(Collectors.toCollection(HashSet::new)); + .getCollectedfrom() + .stream() + .map(KeyValue::getValue) + .collect(Collectors.toCollection(HashSet::new)); assertTrue(Sets.difference(root_cf, dups_cf).isEmpty()); } From 0aa725083f66875b4eef7ad6513b24bf557eb5ec Mon Sep 17 00:00:00 2001 From: Claudio Atzori Date: Thu, 17 Nov 2022 16:13:43 +0100 Subject: [PATCH 234/535] extended dedup testing --- .../dhp/oa/dedup/DedupRecordFactory.java | 2 +- ...st.java => SparkPublicationRootsTest.java} | 283 +++++++++--------- .../oa/dedup/SparkPublicationRootsTest2.java | 251 ++++++++++++++++ .../entities2/publication/publication.gz | Bin 9056 -> 0 bytes .../alterations/publication/publication_1.gz | Bin 0 -> 1488 bytes .../entities/publication/publication_0.gz | Bin 0 -> 10874 bytes 6 files changed, 400 insertions(+), 136 deletions(-) rename dhp-workflows/dhp-dedup-openaire/src/test/java/eu/dnetlib/dhp/oa/dedup/{SparkDedupPublicationTest.java => SparkPublicationRootsTest.java} (57%) create mode 100644 dhp-workflows/dhp-dedup-openaire/src/test/java/eu/dnetlib/dhp/oa/dedup/SparkPublicationRootsTest2.java delete mode 100644 dhp-workflows/dhp-dedup-openaire/src/test/resources/eu/dnetlib/dhp/dedup/entities2/publication/publication.gz create mode 100644 dhp-workflows/dhp-dedup-openaire/src/test/resources/eu/dnetlib/dhp/dedup/root/alterations/publication/publication_1.gz create mode 100644 dhp-workflows/dhp-dedup-openaire/src/test/resources/eu/dnetlib/dhp/dedup/root/entities/publication/publication_0.gz 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 f9fc8a21a..82bf87cca 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 @@ -112,7 +112,7 @@ public class DedupRecordFactory { // set authors and date if (ModelSupport.isSubClass(entity, Result.class)) { - ((Result) entity).setDateofacceptance(DatePicker.pick(dates)); + // ((Result) entity).setDateofacceptance(DatePicker.pick(dates)); ((Result) entity).setAuthor(AuthorMerger.merge(authors)); } diff --git a/dhp-workflows/dhp-dedup-openaire/src/test/java/eu/dnetlib/dhp/oa/dedup/SparkDedupPublicationTest.java b/dhp-workflows/dhp-dedup-openaire/src/test/java/eu/dnetlib/dhp/oa/dedup/SparkPublicationRootsTest.java similarity index 57% rename from dhp-workflows/dhp-dedup-openaire/src/test/java/eu/dnetlib/dhp/oa/dedup/SparkDedupPublicationTest.java rename to dhp-workflows/dhp-dedup-openaire/src/test/java/eu/dnetlib/dhp/oa/dedup/SparkPublicationRootsTest.java index 773de65fa..3cff836eb 100644 --- a/dhp-workflows/dhp-dedup-openaire/src/test/java/eu/dnetlib/dhp/oa/dedup/SparkDedupPublicationTest.java +++ b/dhp-workflows/dhp-dedup-openaire/src/test/java/eu/dnetlib/dhp/oa/dedup/SparkPublicationRootsTest.java @@ -11,16 +11,17 @@ import java.io.File; import java.io.IOException; import java.io.Serializable; import java.net.URISyntaxException; +import java.nio.file.Path; import java.nio.file.Paths; import java.util.*; import java.util.stream.Collectors; +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.JavaSparkContext; import org.apache.spark.api.java.function.FilterFunction; -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; @@ -31,7 +32,6 @@ import org.mockito.Mock; import org.mockito.Mockito; import org.mockito.junit.jupiter.MockitoExtension; -import com.fasterxml.jackson.core.JsonProcessingException; import com.fasterxml.jackson.databind.DeserializationFeature; import com.fasterxml.jackson.databind.ObjectMapper; import com.google.common.collect.Sets; @@ -44,48 +44,52 @@ import eu.dnetlib.enabling.is.lookup.rmi.ISLookUpService; @ExtendWith(MockitoExtension.class) @TestMethodOrder(MethodOrderer.OrderAnnotation.class) -public class SparkDedupPublicationTest implements Serializable { +public class SparkPublicationRootsTest implements Serializable { @Mock(serializable = true) ISLookUpService isLookUpService; private static SparkSession spark; - private static JavaSparkContext jsc; + private static String workingPath; - private static String testGraphBasePath; - private static String testOutputBasePath; - private static String testDedupGraphBasePath; + private static String graphInputPath; + private static String graphOutputPath; private static final String testActionSetId = "test-orchestrator"; + private static Path testBaseTmpPath; + + private static final ObjectMapper MAPPER = new ObjectMapper() + .configure(DeserializationFeature.FAIL_ON_UNKNOWN_PROPERTIES, false); + @BeforeAll - public static void cleanUp() throws IOException, URISyntaxException { + public static void init() throws IOException, URISyntaxException { - testGraphBasePath = Paths - .get(SparkDedupPublicationTest.class.getResource("/eu/dnetlib/dhp/dedup/entities2").toURI()) - .toFile() - .getAbsolutePath(); - testOutputBasePath = createTempDirectory(SparkDedupPublicationTest.class.getSimpleName() + "-") - .toAbsolutePath() - .toString(); + testBaseTmpPath = createTempDirectory(SparkPublicationRootsTest.class.getSimpleName() + "-"); - testDedupGraphBasePath = createTempDirectory(SparkDedupPublicationTest.class.getSimpleName() + "-") - .toAbsolutePath() - .toString(); + final File entitiesSources = Paths + .get(SparkPublicationRootsTest.class.getResource("/eu/dnetlib/dhp/dedup/root").toURI()) + .toFile(); - FileUtils.deleteDirectory(new File(testOutputBasePath)); - FileUtils.deleteDirectory(new File(testDedupGraphBasePath)); + FileUtils + .copyDirectory( + entitiesSources, + testBaseTmpPath.resolve("input").toFile()); + + workingPath = testBaseTmpPath.resolve("workingPath").toString(); + graphInputPath = testBaseTmpPath.resolve("input").resolve("entities").toString(); + graphOutputPath = testBaseTmpPath.resolve("output").toString(); + + FileUtils.deleteDirectory(new File(workingPath)); + FileUtils.deleteDirectory(new File(graphOutputPath)); final SparkConf conf = new SparkConf(); conf.set("spark.sql.shuffle.partitions", "10"); spark = SparkSession .builder() - .appName(SparkDedupPublicationTest.class.getSimpleName()) + .appName(SparkPublicationRootsTest.class.getSimpleName()) .master("local[*]") .config(conf) .getOrCreate(); - - jsc = JavaSparkContext.fromSparkContext(spark.sparkContext()); - } @BeforeEach @@ -100,55 +104,51 @@ public class SparkDedupPublicationTest implements Serializable { .thenReturn(classPathResourceAsString("/eu/dnetlib/dhp/dedup/conf/pub.curr.conf.json")); } + @AfterAll + public static void tearDown() throws IOException { + FileUtils.deleteDirectory(testBaseTmpPath.toFile()); + spark.close(); + } + @Test @Order(1) void createSimRelsTest() throws Exception { - - ArgumentApplicationParser parser = new ArgumentApplicationParser( - classPathResourceAsString("/eu/dnetlib/dhp/oa/dedup/createSimRels_parameters.json")); - - parser - .parseArgument( - new String[] { - "--graphBasePath", testGraphBasePath, - "--actionSetId", testActionSetId, - "--isLookUpUrl", "lookupurl", - "--workingPath", testOutputBasePath, - "--numPartitions", "5" - }); - - new SparkCreateSimRels(parser, spark).run(isLookUpService); + new SparkCreateSimRels(args( + "/eu/dnetlib/dhp/oa/dedup/createSimRels_parameters.json", + new String[] { + "--graphBasePath", graphInputPath, + "--actionSetId", testActionSetId, + "--isLookUpUrl", "lookupurl", + "--workingPath", workingPath, + "--numPartitions", "5" + }), spark) + .run(isLookUpService); long pubs_simrel = spark .read() - .load(DedupUtility.createSimRelPath(testOutputBasePath, testActionSetId, "publication")) + .load(DedupUtility.createSimRelPath(workingPath, testActionSetId, "publication")) .count(); - assertEquals(62, pubs_simrel); + assertEquals(74, pubs_simrel); } @Test @Order(2) void cutMergeRelsTest() throws Exception { - - ArgumentApplicationParser parser = new ArgumentApplicationParser( - classPathResourceAsString("/eu/dnetlib/dhp/oa/dedup/createCC_parameters.json")); - - parser - .parseArgument( - new String[] { - "--graphBasePath", testGraphBasePath, - "--actionSetId", testActionSetId, - "--isLookUpUrl", "lookupurl", - "--workingPath", testOutputBasePath, - "--cutConnectedComponent", "3" - }); - - new SparkCreateMergeRels(parser, spark).run(isLookUpService); + new SparkCreateMergeRels(args( + "/eu/dnetlib/dhp/oa/dedup/createCC_parameters.json", + new String[] { + "--graphBasePath", graphInputPath, + "--actionSetId", testActionSetId, + "--isLookUpUrl", "lookupurl", + "--workingPath", workingPath, + "--cutConnectedComponent", "3" + }), spark) + .run(isLookUpService); long pubs_mergerel = spark .read() - .load(testOutputBasePath + "/" + testActionSetId + "/publication_mergerel") + .load(workingPath + "/" + testActionSetId + "/publication_mergerel") .as(Encoders.bean(Relation.class)) .filter((FilterFunction) r -> r.getRelClass().equalsIgnoreCase("merges")) .groupBy("source") @@ -159,49 +159,44 @@ public class SparkDedupPublicationTest implements Serializable { assertEquals(0, pubs_mergerel); - FileUtils.deleteDirectory(new File(testOutputBasePath + "/" + testActionSetId + "/publication_mergerel")); + FileUtils.deleteDirectory(new File(workingPath + "/" + testActionSetId + "/publication_mergerel")); } @Test @Order(3) void createMergeRelsTest() throws Exception { + new SparkCreateMergeRels(args( + "/eu/dnetlib/dhp/oa/dedup/createCC_parameters.json", + new String[] { + "--graphBasePath", graphInputPath, + "--actionSetId", testActionSetId, + "--isLookUpUrl", "lookupurl", + "--workingPath", workingPath + }), spark) + .run(isLookUpService); - ArgumentApplicationParser parser = new ArgumentApplicationParser( - classPathResourceAsString("/eu/dnetlib/dhp/oa/dedup/createCC_parameters.json")); - - parser - .parseArgument( - new String[] { - "--graphBasePath", testGraphBasePath, - "--actionSetId", testActionSetId, - "--isLookUpUrl", "lookupurl", - "--workingPath", testOutputBasePath - }); - - new SparkCreateMergeRels(parser, spark).run(isLookUpService); - - final Dataset pubs = spark + final Dataset merges = spark .read() - .load(testOutputBasePath + "/" + testActionSetId + "/publication_mergerel") + .load(workingPath + "/" + testActionSetId + "/publication_mergerel") .as(Encoders.bean(Relation.class)); - final List merges = pubs + final List mergeList = merges .filter("source == '50|doi_dedup___::d5021b53204e4fdeab6ff5d5bc468032'") .collectAsList(); - assertEquals(3, merges.size()); + assertEquals(3, mergeList.size()); Set dups = Sets .newHashSet( "50|doi_________::3b1d0d8e8f930826665df9d6b82fbb73", "50|doi_________::d5021b53204e4fdeab6ff5d5bc468032", "50|arXiv_______::c93aeb433eb90ed7a86e29be00791b7c"); - merges.forEach(r -> { + mergeList.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 + final List mergedIn = merges .filter("target == '50|doi_dedup___::d5021b53204e4fdeab6ff5d5bc468032'") .collectAsList(); assertEquals(3, mergedIn.size()); @@ -212,47 +207,37 @@ public class SparkDedupPublicationTest implements Serializable { assertTrue(dups.contains(r.getSource())); }); - assertEquals(24, pubs.count()); + assertEquals(32, merges.count()); } @Test @Order(4) void createDedupRecordTest() throws Exception { - - ArgumentApplicationParser parser = new ArgumentApplicationParser( - classPathResourceAsString("/eu/dnetlib/dhp/oa/dedup/createDedupRecord_parameters.json")); - parser - .parseArgument( - new String[] { - "--graphBasePath", testGraphBasePath, - "--actionSetId", testActionSetId, - "--isLookUpUrl", "lookupurl", - "--workingPath", testOutputBasePath - }); - - new SparkCreateDedupRecord(parser, spark).run(isLookUpService); - - final ObjectMapper mapper = new ObjectMapper() - .configure(DeserializationFeature.FAIL_ON_UNKNOWN_PROPERTIES, false); + new SparkCreateDedupRecord(args( + "/eu/dnetlib/dhp/oa/dedup/createDedupRecord_parameters.json", + new String[] { + "--graphBasePath", graphInputPath, + "--actionSetId", testActionSetId, + "--isLookUpUrl", "lookupurl", + "--workingPath", workingPath + }), spark) + .run(isLookUpService); final Dataset roots = spark .read() - .textFile(testOutputBasePath + "/" + testActionSetId + "/publication_deduprecord") - .map( - (MapFunction) value -> mapper.readValue(value, Publication.class), - Encoders.bean(Publication.class)); + .textFile(workingPath + "/" + testActionSetId + "/publication_deduprecord") + .map(asEntity(Publication.class), Encoders.bean(Publication.class)); - assertEquals(2, roots.count()); + assertEquals(3, roots.count()); final Dataset pubs = spark .read() - .textFile(DedupUtility.createEntityPath(testGraphBasePath, "publication")) - .map( - (MapFunction) value -> mapper.readValue(value, Publication.class), - Encoders.bean(Publication.class)); + .textFile(DedupUtility.createEntityPath(graphInputPath, "publication")) + .map(asEntity(Publication.class), Encoders.bean(Publication.class)); verifyRoot_case_1(roots, pubs); verifyRoot_case_2(roots, pubs); + verifyRoot_case_3(roots, pubs); } private static void verifyRoot_case_1(Dataset roots, Dataset pubs) { @@ -299,8 +284,7 @@ public class SparkDedupPublicationTest implements Serializable { assertEquals("Article", instance_cr.get().getInstancetype().getClassname()); } - private void verifyRoot_case_2(Dataset roots, Dataset pubs) - throws JsonProcessingException { + private void verifyRoot_case_2(Dataset roots, Dataset pubs) { Publication root = roots .filter("id = '50|doi_dedup___::18aff3b55fb6876466a5d4bd82434885'") .first(); @@ -334,57 +318,86 @@ public class SparkDedupPublicationTest implements Serializable { assertTrue(Sets.difference(root_cf, dups_cf).isEmpty()); } + private void verifyRoot_case_3(Dataset roots, Dataset pubs) { + Publication root = roots + .filter("id = '50|dedup_wf_001::31ca734cc22181b704c4aa8fd050062a'") + .first(); + assertNotNull(root); + + Publication pivot_duplicate = pubs + .filter("id = '50|od_______166::31ca734cc22181b704c4aa8fd050062a'") + .first(); + + assertEquals(pivot_duplicate.getPublisher().getValue(), root.getPublisher().getValue()); + + Set dups_cf = pubs + .collectAsList() + .stream() + .flatMap(p -> p.getCollectedfrom().stream()) + .map(KeyValue::getValue) + .collect(Collectors.toCollection(HashSet::new)); + + Set root_cf = root + .getCollectedfrom() + .stream() + .map(KeyValue::getValue) + .collect(Collectors.toCollection(HashSet::new)); + + assertTrue(Sets.difference(root_cf, dups_cf).isEmpty()); + } + @Test @Order(6) void updateEntityTest() throws Exception { + new SparkUpdateEntity(args( + "/eu/dnetlib/dhp/oa/dedup/updateEntity_parameters.json", + new String[] { + "--graphBasePath", graphInputPath, + "--workingPath", workingPath, + "--dedupGraphPath", graphOutputPath + }), spark) + .run(isLookUpService); - ArgumentApplicationParser parser = new ArgumentApplicationParser( - classPathResourceAsString("/eu/dnetlib/dhp/oa/dedup/updateEntity_parameters.json")); - parser - .parseArgument( - new String[] { - "-i", testGraphBasePath, "-w", testOutputBasePath, "-o", testDedupGraphBasePath - }); - - new SparkUpdateEntity(parser, spark).run(isLookUpService); - - long publications = jsc.textFile(testDedupGraphBasePath + "/publication").count(); + long publications = spark.read().textFile(graphOutputPath + "/publication").count(); long mergedPubs = spark .read() - .load(testOutputBasePath + "/" + testActionSetId + "/publication_mergerel") + .load(workingPath + "/" + testActionSetId + "/publication_mergerel") .as(Encoders.bean(Relation.class)) .where("relClass=='merges'") - .javaRDD() - .map(Relation::getTarget) + .map((MapFunction) Relation::getTarget, Encoders.STRING()) .distinct() .count(); - assertEquals(14, publications); + assertEquals(19, publications); // 16 originals + 3 roots - long deletedPubs = jsc - .textFile(testDedupGraphBasePath + "/publication") - .filter(this::isDeletedByInference) + long deletedPubs = spark + .read() + .textFile(graphOutputPath + "/publication") + .map(asEntity(Publication.class), Encoders.bean(Publication.class)) + .filter("datainfo.deletedbyinference == true") + .map((MapFunction) OafEntity::getId, Encoders.STRING()) + .distinct() .count(); assertEquals(mergedPubs, deletedPubs); } - @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"); - } - private static String classPathResourceAsString(String path) throws IOException { return IOUtils .toString( - SparkDedupPublicationTest.class + SparkPublicationRootsTest.class .getResourceAsStream(path)); } + private static MapFunction asEntity(Class clazz) { + return value -> MAPPER.readValue(value, clazz); + } + + private ArgumentApplicationParser args(String paramSpecs, String[] args) throws IOException, ParseException { + ArgumentApplicationParser parser = new ArgumentApplicationParser(classPathResourceAsString(paramSpecs)); + parser.parseArgument(args); + return parser; + } + } diff --git a/dhp-workflows/dhp-dedup-openaire/src/test/java/eu/dnetlib/dhp/oa/dedup/SparkPublicationRootsTest2.java b/dhp-workflows/dhp-dedup-openaire/src/test/java/eu/dnetlib/dhp/oa/dedup/SparkPublicationRootsTest2.java new file mode 100644 index 000000000..9afe1e34b --- /dev/null +++ b/dhp-workflows/dhp-dedup-openaire/src/test/java/eu/dnetlib/dhp/oa/dedup/SparkPublicationRootsTest2.java @@ -0,0 +1,251 @@ + +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 java.io.File; +import java.io.IOException; +import java.io.Serializable; +import java.net.URISyntaxException; +import java.nio.file.Path; +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.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.JavaSparkContext; +import org.apache.spark.api.java.function.FilterFunction; +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.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; + +@ExtendWith(MockitoExtension.class) +@TestMethodOrder(MethodOrderer.OrderAnnotation.class) +public class SparkPublicationRootsTest2 implements Serializable { + + @Mock(serializable = true) + ISLookUpService isLookUpService; + private static SparkSession spark; + + private static String workingPath; + + private static String graphInputPath; + + private static String graphOutputPath; + + private static final String testActionSetId = "test-orchestrator"; + + private static Path testBaseTmpPath; + + private static final ObjectMapper MAPPER = new ObjectMapper() + .configure(DeserializationFeature.FAIL_ON_UNKNOWN_PROPERTIES, false); + + @BeforeAll + public static void init() throws IOException, URISyntaxException { + + testBaseTmpPath = createTempDirectory(SparkPublicationRootsTest2.class.getSimpleName() + "-"); + + final File entitiesSources = Paths + .get(SparkPublicationRootsTest2.class.getResource("/eu/dnetlib/dhp/dedup/root").toURI()) + .toFile(); + + FileUtils + .copyDirectory( + entitiesSources, + testBaseTmpPath.resolve("input").toFile()); + + FileUtils + .copyFileToDirectory( + Paths + .get( + SparkPublicationRootsTest2.class + .getResource( + "/eu/dnetlib/dhp/dedup/root/alterations/publication/publication_1.gz") + .toURI()) + .toFile(), + testBaseTmpPath.resolve("input").resolve("entities").resolve("publication").toFile()); + + workingPath = testBaseTmpPath.resolve("workingPath").toString(); + graphInputPath = testBaseTmpPath.resolve("input").resolve("entities").toString(); + graphOutputPath = testBaseTmpPath.resolve("output").toString(); + + final SparkConf conf = new SparkConf(); + conf.set("spark.sql.shuffle.partitions", "10"); + spark = SparkSession + .builder() + .appName(SparkPublicationRootsTest2.class.getSimpleName()) + .master("local[*]") + .config(conf) + .getOrCreate(); + } + + @BeforeEach + public void setUp() throws IOException, ISLookUpException { + + lenient() + .when(isLookUpService.getResourceProfileByQuery(Mockito.contains(testActionSetId))) + .thenReturn(classPathResourceAsString("/eu/dnetlib/dhp/dedup/profiles/mock_orchestrator_publication.xml")); + + lenient() + .when(isLookUpService.getResourceProfileByQuery(Mockito.contains("publication"))) + .thenReturn(classPathResourceAsString("/eu/dnetlib/dhp/dedup/conf/pub.curr.conf.json")); + } + + @AfterAll + public static void tearDown() throws IOException { + FileUtils.deleteDirectory(testBaseTmpPath.toFile()); + } + + @Test + @Order(7) + void dedupAlteredDatasetTest() throws Exception { + + new SparkCreateSimRels(args( + "/eu/dnetlib/dhp/oa/dedup/createSimRels_parameters.json", + new String[] { + "--graphBasePath", graphInputPath, + "--actionSetId", testActionSetId, + "--isLookUpUrl", "lookupurl", + "--workingPath", workingPath, + "--numPartitions", "5" + }), spark) + .run(isLookUpService); + + new SparkCreateMergeRels(args( + "/eu/dnetlib/dhp/oa/dedup/createCC_parameters.json", + new String[] { + "--graphBasePath", graphInputPath, + "--actionSetId", testActionSetId, + "--isLookUpUrl", "lookupurl", + "--workingPath", workingPath + }), spark) + .run(isLookUpService); + + final Dataset merges = spark + .read() + .load(workingPath + "/" + testActionSetId + "/publication_mergerel") + .as(Encoders.bean(Relation.class)); + + assertEquals( + 3, merges + .filter("relclass == 'isMergedIn'") + .map((MapFunction) Relation::getTarget, Encoders.STRING()) + .distinct() + .count()); + assertEquals( + 4, merges + .filter("source == '50|doi_dedup___::b3aec7985136e36827176aaa1dd5082d'") + .count()); + + new SparkCreateDedupRecord(args( + "/eu/dnetlib/dhp/oa/dedup/createDedupRecord_parameters.json", + new String[] { + "--graphBasePath", graphInputPath, + "--actionSetId", testActionSetId, + "--isLookUpUrl", "lookupurl", + "--workingPath", workingPath + }), spark) + .run(isLookUpService); + + final Dataset roots = spark + .read() + .textFile(workingPath + "/" + testActionSetId + "/publication_deduprecord") + .map(asEntity(Publication.class), Encoders.bean(Publication.class)); + + assertEquals(3, roots.count()); + + final Dataset pubs = spark + .read() + .textFile(DedupUtility.createEntityPath(graphInputPath, "publication")) + .map(asEntity(Publication.class), Encoders.bean(Publication.class)); + + Publication root = roots + .filter("id = '50|doi_dedup___::b3aec7985136e36827176aaa1dd5082d'") + .first(); + assertNotNull(root); + + Publication crossref_duplicate = pubs + .filter("id = '50|doi_________::b3aec7985136e36827176aaa1dd5082d'") + .collectAsList() + .get(0); + + assertEquals(crossref_duplicate.getDateofacceptance().getValue(), root.getDateofacceptance().getValue()); + assertEquals(crossref_duplicate.getJournal().getName(), root.getJournal().getName()); + assertEquals(crossref_duplicate.getJournal().getIssnPrinted(), root.getJournal().getIssnPrinted()); + assertEquals(crossref_duplicate.getPublisher().getValue(), root.getPublisher().getValue()); + + Set rootPids = root + .getPid() + .stream() + .map(StructuredProperty::getValue) + .collect(Collectors.toCollection(HashSet::new)); + Set dupPids = crossref_duplicate + .getPid() + .stream() + .map(StructuredProperty::getValue) + .collect(Collectors.toCollection(HashSet::new)); + + assertFalse(Sets.intersection(rootPids, dupPids).isEmpty()); + assertTrue(rootPids.contains("10.1109/jstqe.2022.3205716")); + assertTrue(rootPids.contains("10.1109/jstqe.2023.9999999")); + + Optional instance_cr = root + .getInstance() + .stream() + .filter(i -> i.getCollectedfrom().getValue().equals("Crossref")) + .findFirst(); + assertTrue(instance_cr.isPresent()); + assertEquals("OPEN", instance_cr.get().getAccessright().getClassid()); + assertEquals("Open Access", instance_cr.get().getAccessright().getClassname()); + assertEquals(OpenAccessRoute.hybrid, instance_cr.get().getAccessright().getOpenAccessRoute()); + assertEquals( + "IEEE Journal of Selected Topics in Quantum Electronics", instance_cr.get().getHostedby().getValue()); + assertEquals("0001", instance_cr.get().getInstancetype().getClassid()); + assertEquals("Article", instance_cr.get().getInstancetype().getClassname()); + + } + + private static String classPathResourceAsString(String path) throws IOException { + return IOUtils + .toString( + SparkPublicationRootsTest2.class + .getResourceAsStream(path)); + } + + private static MapFunction asEntity(Class clazz) { + return value -> MAPPER.readValue(value, clazz); + } + + private ArgumentApplicationParser args(String paramSpecs, String[] args) throws IOException, ParseException { + ArgumentApplicationParser parser = new ArgumentApplicationParser(classPathResourceAsString(paramSpecs)); + parser.parseArgument(args); + return parser; + } + +} diff --git a/dhp-workflows/dhp-dedup-openaire/src/test/resources/eu/dnetlib/dhp/dedup/entities2/publication/publication.gz b/dhp-workflows/dhp-dedup-openaire/src/test/resources/eu/dnetlib/dhp/dedup/entities2/publication/publication.gz deleted file mode 100644 index 96dd218174dbb1fa6ab55da289dc116bbceb9963..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 9056 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 S(Trx%jQ<63B6;BU&H(_01)C@U diff --git a/dhp-workflows/dhp-dedup-openaire/src/test/resources/eu/dnetlib/dhp/dedup/root/alterations/publication/publication_1.gz b/dhp-workflows/dhp-dedup-openaire/src/test/resources/eu/dnetlib/dhp/dedup/root/alterations/publication/publication_1.gz new file mode 100644 index 0000000000000000000000000000000000000000..89ed9671e145d630b3093b97cd8b5c86065e1fbc GIT binary patch literal 1488 zcmV;>1uyy^iwFo9Lv~{T18{X>Y-wX*bZKvHUoimfSZ#0HHW2^({z^ zC0!SHNneH)MLq@Y{zo!04;(o!>Vs0@5qPu^6-v#4wsdNKedy5 z`h4JIOtZ5pmrio$h-xkxkrv=2IV&1CaB3yzP_c>w<66kdNb!O-jmVtDX%>wrYpHb7 z%{HK&gKoZJC9dL}GBt-rLx$rGpFs&$F{?l)_iG<_+H0Am@*b(L2aZ;4gZLeKI6@^+ z<)9Squ|l0e0k~(nurq+VPJ$|cnhF}(Dh_&4L;o<8Qf~|WvC@L0HFjWc(?W1&09~z? z+zo%1AmXUaTA%KmKU!9ZT!89>$)woA@=8pFW(Ap~*T6M7%b?Po;tq5oyD|sdW6||2 z;+V6dH8UPP^gKE`x^DCzaOhJ%I2?7K^A)4Sgp3kttEK9~CPl9@&Y@|Pn9g(`{p9WV zd<*`hhKd|pg&lyqm99#e?ZMm=ux>11&MJ-33y;~6D_~vpZGyQU-3DT^;Y4V-vJ3A* z(wEqB#kb9Ni1Z#zQlM%&nEEw$tU|?9&1aT#6XIrAvzfBMGux$J z%oy{sETTi-I=Hp@(giJATDP^aix#B`;IeiSFOI{QQa_~rAUtqbt7kUI@0K}=dU;zE zt2AW!BFo6+7Ap4~ZadOy)hfz2hkF|MuUK`1+ZofWvj6`=zIF;#_auc>961T2Boozi z7jaxb156=2MOc-QlY2HI7$8qVfJpz;HFtm;2VU$(ejM2-ei|2XlNh(GxJe9c>xF`; zXtY}V;~w*#(q+%dRsA%5Et^@($c0Qn=?49>nWdYfJ^6K#`ahENStn`WhT$l1N1-2Y zd;S+>_iJ(r*BR?MeKoQvw)S`M!{5)^-#+>~9J(VKgg;36d6RO_RsGaFuC%O#B&V&? zER+58T#xmI*C`s>GO)s;%~}HU6zfd1i?P^N8%MWH@c#Vg^U25a9p_Xq7jS!py#y4y z&)S#3^Uh>ry<&DW!^kQJF7Mp2ZH_6eFZEwUJ zxGYNywnM3=M@#YMC|w+dhxDj`DJwX(Q)aDJ6=>15J{H+l=aHW9^M9^`HC4aNO&?h= zL+Ea2XY`;kdg8vw`TnliY~TG{$W~jAFH$9T@zOUp)T_+;ci%I9du_OEG(2;4$8sL^aHTUL6cvKc>IkGtYPC zBzjvG2CT{NrZ#IETF2ccRUs-HqER$-!zeVN0ak(<+n2zQ2+h~fdE=WH45OfU^jWNA7{r}a->|)jy>Cx_ft`;}oyZ0~|8)8n zxxf>Ub7+xQrK)FwleaTzu6a%_YjJ~hrk%x*JqLX&)eZS5^o%faiBkoT4`7Ig748X} qW4%T$TZQ%jcU%gsjrJSXV2ShM!^!3N%}X@e*S`TS+)w`P761UD_u|6< literal 0 HcmV?d00001 diff --git a/dhp-workflows/dhp-dedup-openaire/src/test/resources/eu/dnetlib/dhp/dedup/root/entities/publication/publication_0.gz b/dhp-workflows/dhp-dedup-openaire/src/test/resources/eu/dnetlib/dhp/dedup/root/entities/publication/publication_0.gz new file mode 100644 index 0000000000000000000000000000000000000000..85706bc31f8d9816f211cb79173864c530081e30 GIT binary patch literal 10874 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 L#g!=;4CMa+cETas literal 0 HcmV?d00001 From 9fee2ed611258909087bc80293f817d9ee3069d9 Mon Sep 17 00:00:00 2001 From: "michele.debonis" Date: Mon, 21 Nov 2022 14:35:46 +0100 Subject: [PATCH 235/535] 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 2687fc9f73733d2b8486f44bbdba6b8130359551 Mon Sep 17 00:00:00 2001 From: Alessia Bardi Date: Tue, 22 Nov 2022 17:30:56 +0100 Subject: [PATCH 236/535] tests for EOSC Future review - ROhub --- .../dnetlib/dhp/oa/graph/raw/MappersTest.java | 11 ++ .../oa/graph/raw/photic-zone-transformed.xml | 108 +++++++++++++++++ .../dhp/oa/provision/EOSCFuture_Test.java | 88 ++++++++++++++ .../eosc-future/photic-zone-transformed.xml | 98 +++++++++++++++ .../oa/provision/eosc-future/photic-zone.json | 1 + .../eu/dnetlib/dhp/oa/provision/fields.xml | 112 ++++++++---------- 6 files changed, 357 insertions(+), 61 deletions(-) create mode 100644 dhp-workflows/dhp-graph-mapper/src/test/resources/eu/dnetlib/dhp/oa/graph/raw/photic-zone-transformed.xml create mode 100644 dhp-workflows/dhp-graph-provision/src/test/java/eu/dnetlib/dhp/oa/provision/EOSCFuture_Test.java create mode 100644 dhp-workflows/dhp-graph-provision/src/test/resources/eu/dnetlib/dhp/oa/provision/eosc-future/photic-zone-transformed.xml create mode 100644 dhp-workflows/dhp-graph-provision/src/test/resources/eu/dnetlib/dhp/oa/provision/eosc-future/photic-zone.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 f0eadbd0d..184383f92 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 @@ -995,6 +995,17 @@ class MappersTest { } + @Test + void testEOSCFuture_ROHub() throws IOException { + final String xml = IOUtils.toString(Objects.requireNonNull(getClass().getResourceAsStream("photic-zone-transformed.xml"))); + final List list = new OdfToOafMapper(vocs, false, true).processMdRecord(xml); + final OtherResearchProduct rocrate = (OtherResearchProduct) list.get(0); + assertNotNull(rocrate.getEoscifguidelines()); + System.out.println("***************"); + System.out.println(new ObjectMapper().writeValueAsString(rocrate)); + 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/photic-zone-transformed.xml b/dhp-workflows/dhp-graph-mapper/src/test/resources/eu/dnetlib/dhp/oa/graph/raw/photic-zone-transformed.xml new file mode 100644 index 000000000..22bf0577e --- /dev/null +++ b/dhp-workflows/dhp-graph-mapper/src/test/resources/eu/dnetlib/dhp/oa/graph/raw/photic-zone-transformed.xml @@ -0,0 +1,108 @@ + + +
+ fsh_____4119::68126da991bd76d8be494bddfbf7a1bb + https://w3id.org/ro-id/28499bdf-a0c6-46aa-a96f-50bd9490b8be + + + + + + 2022-11-15T12:29:19Z + 2022-11-15T12:29:19Z + fsh_____4119 + https://w3id.org/ro-id/28499bdf-a0c6-46aa-a96f-50bd9490b8be + 2022-11-15T12:29:19Z + rohub_data + ro-crate_data +
+ + + https://w3id.org/ro-id/28499bdf-a0c6-46aa-a96f-50bd9490b8be + + https://w3id.org/ro-id/28499bdf-a0c6-46aa-a96f-50bd9490b8be + + + https://w3id.org/ro-id/28499bdf-a0c6-46aa-a96f-50bd9490b8be/resources/b1b617b2-6b79-4bae-9fa6-b76945645626 + https://w3id.org/ro-id/28499bdf-a0c6-46aa-a96f-50bd9490b8be/resources/78103994-30be-4875-bf89-5acd752b5c3d + https://w3id.org/ro-id/28499bdf-a0c6-46aa-a96f-50bd9490b8be/resources/18fd1c70-249b-4c67-80ee-539f801a0da7 + https://w3id.org/ro-id/28499bdf-a0c6-46aa-a96f-50bd9490b8be/resources/32faa2eb-4cc8-401f-ac5c-bec2849b70e1 + https://w3id.org/ro-id/28499bdf-a0c6-46aa-a96f-50bd9490b8be/resources/4c253f5a-d427-40c2-9e9f-6063ae087239 + https://w3id.org/ro-id/28499bdf-a0c6-46aa-a96f-50bd9490b8be/resources/371b1957-078c-472b-a195-af7bce152c10 + https://w3id.org/ro-id/28499bdf-a0c6-46aa-a96f-50bd9490b8be/resources/82f9e4b8-01b4-4e50-9e27-ec9d337c8d74 + + RO-crate + + Creative Commons Attribution 4.0 International + open access + + + Mapping the photic zone of the Mediterranean Sea + + + Estimating the penetration of light along the water column from satellite data to map the photic zone in the Mediterranean Sea + + CNR-ISMAR + + + Giorgio Castellan + + + Lorenzo Angeletti + + + Paolo Montagna + + + Marco Taviani + + + + 2022-11-14T16:32:45Z + + + Estimating the penetration of light along the water column from satellite data to map the photic zone in the Mediterranean Sea + + 2022 + + open access + + + 813.478 KB + + + Earth sciences + Ecology + Optics + + + https://w3id.org/ro-id/28499bdf-a0c6-46aa-a96f-50bd9490b8be + 0048 + 2022-11-14 + OPEN + https://creativecommons.org/licenses/by/4.0/legalcode + + + + + + + +
\ No newline at end of file diff --git a/dhp-workflows/dhp-graph-provision/src/test/java/eu/dnetlib/dhp/oa/provision/EOSCFuture_Test.java b/dhp-workflows/dhp-graph-provision/src/test/java/eu/dnetlib/dhp/oa/provision/EOSCFuture_Test.java new file mode 100644 index 000000000..08bf19fe4 --- /dev/null +++ b/dhp-workflows/dhp-graph-provision/src/test/java/eu/dnetlib/dhp/oa/provision/EOSCFuture_Test.java @@ -0,0 +1,88 @@ +package eu.dnetlib.dhp.oa.provision; + +import com.fasterxml.jackson.databind.DeserializationFeature; +import com.fasterxml.jackson.databind.ObjectMapper; +import eu.dnetlib.dhp.oa.provision.model.JoinedEntity; +import eu.dnetlib.dhp.oa.provision.utils.ContextMapper; +import eu.dnetlib.dhp.oa.provision.utils.StreamingInputDocumentFactory; +import eu.dnetlib.dhp.oa.provision.utils.XmlRecordFactory; +import eu.dnetlib.dhp.schema.oaf.OtherResearchProduct; +import eu.dnetlib.dhp.utils.saxon.SaxonTransformerFactory; +import org.apache.commons.io.IOUtils; +import org.apache.solr.client.solrj.util.ClientUtils; +import org.apache.solr.common.SolrInputDocument; +import org.dom4j.Document; +import org.dom4j.DocumentException; +import org.dom4j.io.SAXReader; +import org.junit.jupiter.api.Assertions; +import org.junit.jupiter.api.BeforeEach; +import org.junit.jupiter.api.Test; + +import javax.xml.transform.Transformer; +import javax.xml.transform.TransformerException; +import java.io.IOException; +import java.io.StringReader; + +import static org.junit.jupiter.api.Assertions.assertNotNull; + +public class EOSCFuture_Test { + + public static ObjectMapper OBJECT_MAPPER = new ObjectMapper() + .configure(DeserializationFeature.FAIL_ON_UNKNOWN_PROPERTIES, false); + + public static final String VERSION = "2021-04-15T10:05:53Z"; + public static final String DSID = "b9ee796a-c49f-4473-a708-e7d67b84c16d_SW5kZXhEU1Jlc291cmNlcy9JbmRleERTUmVzb3VyY2VUeXBl"; + + private ContextMapper contextMapper; + + @BeforeEach + public void setUp() { + contextMapper = new ContextMapper(); + } + + + @Test + public void testEOSC_ROHub() throws IOException, DocumentException, TransformerException { + + final ContextMapper contextMapper = new ContextMapper(); + + final XmlRecordFactory xmlRecordFactory = new XmlRecordFactory(contextMapper, false, + XmlConverterJob.schemaLocation); + + final OtherResearchProduct p = OBJECT_MAPPER + .readValue(IOUtils.toString(getClass().getResourceAsStream("eosc-future/photic-zone.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()); + + + testRecordTransformation(xml); + } + + + private void 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")); + + final String transformer = XmlIndexingJob.getLayoutTransformer("DMF", fields, xslt); + + final Transformer tr = SaxonTransformerFactory.newInstance(transformer); + + final String indexRecordXML = XmlIndexingJob.toIndexRecord(tr, record); + + final SolrInputDocument solrDoc = new StreamingInputDocumentFactory(VERSION, DSID) + .parseDocument(indexRecordXML); + + final String xmlDoc = ClientUtils.toXML(solrDoc); + + Assertions.assertNotNull(xmlDoc); + System.out.println(xmlDoc); + } + +} diff --git a/dhp-workflows/dhp-graph-provision/src/test/resources/eu/dnetlib/dhp/oa/provision/eosc-future/photic-zone-transformed.xml b/dhp-workflows/dhp-graph-provision/src/test/resources/eu/dnetlib/dhp/oa/provision/eosc-future/photic-zone-transformed.xml new file mode 100644 index 000000000..79830b0f7 --- /dev/null +++ b/dhp-workflows/dhp-graph-provision/src/test/resources/eu/dnetlib/dhp/oa/provision/eosc-future/photic-zone-transformed.xml @@ -0,0 +1,98 @@ + + +
+ https://w3id.org/ro-id/28499bdf-a0c6-46aa-a96f-50bd9490b8be + 2022-11-15T12:29:19Z + rohub_data + ro-crate_data +
+ + + https://w3id.org/ro-id/28499bdf-a0c6-46aa-a96f-50bd9490b8be + + https://w3id.org/ro-id/28499bdf-a0c6-46aa-a96f-50bd9490b8be + + + https://w3id.org/ro-id/28499bdf-a0c6-46aa-a96f-50bd9490b8be/resources/b1b617b2-6b79-4bae-9fa6-b76945645626 + https://w3id.org/ro-id/28499bdf-a0c6-46aa-a96f-50bd9490b8be/resources/78103994-30be-4875-bf89-5acd752b5c3d + https://w3id.org/ro-id/28499bdf-a0c6-46aa-a96f-50bd9490b8be/resources/18fd1c70-249b-4c67-80ee-539f801a0da7 + https://w3id.org/ro-id/28499bdf-a0c6-46aa-a96f-50bd9490b8be/resources/32faa2eb-4cc8-401f-ac5c-bec2849b70e1 + https://w3id.org/ro-id/28499bdf-a0c6-46aa-a96f-50bd9490b8be/resources/4c253f5a-d427-40c2-9e9f-6063ae087239 + https://w3id.org/ro-id/28499bdf-a0c6-46aa-a96f-50bd9490b8be/resources/371b1957-078c-472b-a195-af7bce152c10 + https://w3id.org/ro-id/28499bdf-a0c6-46aa-a96f-50bd9490b8be/resources/82f9e4b8-01b4-4e50-9e27-ec9d337c8d74 + + RO-crate + + Creative Commons Attribution 4.0 International + open access + + + Mapping the photic zone of the Mediterranean Sea + + + Estimating the penetration of light along the water column from satellite data to map the photic zone in the Mediterranean Sea + + CNR-ISMAR + + + Giorgio Castellan + + + Lorenzo Angeletti + + + Paolo Montagna + + + Marco Taviani + + + + 2022-11-14T16:32:45Z + + + Estimating the penetration of light along the water column from satellite data to map the photic zone in the Mediterranean Sea + + 2022 + + open access + + + 813.478 KB + + + Earth sciences + Ecology + Optics + + + https://w3id.org/ro-id/28499bdf-a0c6-46aa-a96f-50bd9490b8be + 0048 + 2022-11-14 + OPEN + https://creativecommons.org/licenses/by/4.0/legalcode + + + + + + + +
\ No newline at end of file diff --git a/dhp-workflows/dhp-graph-provision/src/test/resources/eu/dnetlib/dhp/oa/provision/eosc-future/photic-zone.json b/dhp-workflows/dhp-graph-provision/src/test/resources/eu/dnetlib/dhp/oa/provision/eosc-future/photic-zone.json new file mode 100644 index 000000000..ffef2740a --- /dev/null +++ b/dhp-workflows/dhp-graph-provision/src/test/resources/eu/dnetlib/dhp/oa/provision/eosc-future/photic-zone.json @@ -0,0 +1 @@ +{"collectedfrom":[{"key":"10|fairsharing_::1b69ebedb522700034547abc5652ffac","value":"ROHub","dataInfo":null}],"dataInfo":{"invisible":false,"inferred":false,"deletedbyinference":false,"trust":"0.9","inferenceprovenance":null,"provenanceaction":{"classid":"sysimport:crosswalk:repository","classname":"sysimport:crosswalk:repository","schemeid":"dnet:provenanceActions","schemename":"dnet:provenanceActions"}},"lastupdatetimestamp":1669132109711,"id":"50|w3id________::68126da991bd76d8be494bddfbf7a1bb","originalId":["50|fsh_____4119::68126da991bd76d8be494bddfbf7a1bb","https://w3id.org/ro-id/28499bdf-a0c6-46aa-a96f-50bd9490b8be"],"pid":[{"value":"https://w3id.org/ro-id/28499bdf-a0c6-46aa-a96f-50bd9490b8be","qualifier":{"classid":"w3id","classname":"w3id.org","schemeid":"dnet:pid_types","schemename":"dnet:pid_types"},"dataInfo":{"invisible":false,"inferred":false,"deletedbyinference":false,"trust":"0.9","inferenceprovenance":null,"provenanceaction":{"classid":"sysimport:crosswalk:repository","classname":"sysimport:crosswalk:repository","schemeid":"dnet:provenanceActions","schemename":"dnet:provenanceActions"}}}],"dateofcollection":"2022-11-15T12:29:19Z","dateoftransformation":"2022-11-15T12:29:19Z","extraInfo":[],"oaiprovenance":null,"processingchargeamount":null,"processingchargecurrency":null,"measures":null,"author":[{"fullname":"Giorgio Castellan","name":"","surname":"","rank":1,"pid":[],"affiliation":[]},{"fullname":"Lorenzo Angeletti","name":"","surname":"","rank":2,"pid":[],"affiliation":[]},{"fullname":"Paolo Montagna","name":"","surname":"","rank":3,"pid":[],"affiliation":[]},{"fullname":"Marco Taviani","name":"","surname":"","rank":4,"pid":[],"affiliation":[]}],"resulttype":{"classid":"other","classname":"other","schemeid":"dnet:result_typologies","schemename":"dnet:result_typologies"},"language":{"classid":"UNKNOWN","classname":"Unknown","schemeid":"dnet:languages","schemename":"dnet:languages"},"country":[],"subject":[{"value":"Earth sciences","qualifier":{"classid":"","classname":"","schemeid":"","schemename":""},"dataInfo":{"invisible":false,"inferred":false,"deletedbyinference":false,"trust":"0.9","inferenceprovenance":null,"provenanceaction":{"classid":"sysimport:crosswalk:repository","classname":"sysimport:crosswalk:repository","schemeid":"dnet:provenanceActions","schemename":"dnet:provenanceActions"}}},{"value":"Ecology","qualifier":{"classid":"","classname":"","schemeid":"","schemename":""},"dataInfo":{"invisible":false,"inferred":false,"deletedbyinference":false,"trust":"0.9","inferenceprovenance":null,"provenanceaction":{"classid":"sysimport:crosswalk:repository","classname":"sysimport:crosswalk:repository","schemeid":"dnet:provenanceActions","schemename":"dnet:provenanceActions"}}},{"value":"Optics","qualifier":{"classid":"","classname":"","schemeid":"","schemename":""},"dataInfo":{"invisible":false,"inferred":false,"deletedbyinference":false,"trust":"0.9","inferenceprovenance":null,"provenanceaction":{"classid":"sysimport:crosswalk:repository","classname":"sysimport:crosswalk:repository","schemeid":"dnet:provenanceActions","schemename":"dnet:provenanceActions"}}}],"title":[{"value":"Mapping the photic zone of the Mediterranean Sea","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":null,"provenanceaction":{"classid":"sysimport:crosswalk:repository","classname":"sysimport:crosswalk:repository","schemeid":"dnet:provenanceActions","schemename":"dnet:provenanceActions"}}}],"relevantdate":[{"value":"2022-11-14T16:32:45Z","qualifier":{"classid":"Issued","classname":"Issued","schemeid":"dnet:dataCite_date","schemename":"dnet:dataCite_date"},"dataInfo":{"invisible":false,"inferred":false,"deletedbyinference":false,"trust":"0.9","inferenceprovenance":null,"provenanceaction":{"classid":"sysimport:crosswalk:repository","classname":"sysimport:crosswalk:repository","schemeid":"dnet:provenanceActions","schemename":"dnet:provenanceActions"}}}],"description":[{"value":"Estimating the penetration of light along the water column from satellite data to map the photic zone in the Mediterranean Sea","dataInfo":{"invisible":false,"inferred":false,"deletedbyinference":false,"trust":"0.9","inferenceprovenance":null,"provenanceaction":{"classid":"sysimport:crosswalk:repository","classname":"sysimport:crosswalk:repository","schemeid":"dnet:provenanceActions","schemename":"dnet:provenanceActions"}}}],"dateofacceptance":{"value":"2022-11-14","dataInfo":{"invisible":false,"inferred":false,"deletedbyinference":false,"trust":"0.9","inferenceprovenance":null,"provenanceaction":{"classid":"sysimport:crosswalk:repository","classname":"sysimport:crosswalk:repository","schemeid":"dnet:provenanceActions","schemename":"dnet:provenanceActions"}}},"publisher":{"value":"CNR-ISMAR","dataInfo":{"invisible":false,"inferred":false,"deletedbyinference":false,"trust":"0.9","inferenceprovenance":null,"provenanceaction":{"classid":"sysimport:crosswalk:repository","classname":"sysimport:crosswalk:repository","schemeid":"dnet:provenanceActions","schemename":"dnet:provenanceActions"}}},"embargoenddate":null,"source":[],"fulltext":[],"format":[],"contributor":[],"resourcetype":{"classid":"RO-crate","classname":"RO-crate","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":"https://creativecommons.org/licenses/by/4.0/legalcode","dataInfo":{"invisible":false,"inferred":false,"deletedbyinference":false,"trust":"0.9","inferenceprovenance":null,"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","openAccessRoute":null},"instancetype":{"classid":"0048","classname":"Research Object","schemeid":"dnet:publication_resource","schemename":"dnet:publication_resource"},"hostedby":{"key":"10|fairsharing_::1b69ebedb522700034547abc5652ffac","value":"ROHub","dataInfo":null},"url":["https://w3id.org/ro-id/28499bdf-a0c6-46aa-a96f-50bd9490b8be"],"distributionlocation":null,"collectedfrom":{"key":"10|fairsharing_::1b69ebedb522700034547abc5652ffac","value":"ROHub","dataInfo":null},"pid":[{"value":"https://w3id.org/ro-id/28499bdf-a0c6-46aa-a96f-50bd9490b8be","qualifier":{"classid":"w3id","classname":"w3id.org","schemeid":"dnet:pid_types","schemename":"dnet:pid_types"},"dataInfo":{"invisible":false,"inferred":false,"deletedbyinference":false,"trust":"0.9","inferenceprovenance":null,"provenanceaction":{"classid":"sysimport:crosswalk:repository","classname":"sysimport:crosswalk:repository","schemeid":"dnet:provenanceActions","schemename":"dnet:provenanceActions"}}}],"alternateIdentifier":[],"dateofacceptance":{"value":"2022-11-14","dataInfo":{"invisible":false,"inferred":false,"deletedbyinference":false,"trust":"0.9","inferenceprovenance":null,"provenanceaction":{"classid":"sysimport:crosswalk:repository","classname":"sysimport:crosswalk:repository","schemeid":"dnet:provenanceActions","schemename":"dnet:provenanceActions"}}},"processingchargeamount":null,"processingchargecurrency":null,"refereed":{"classid":"UNKNOWN","classname":"Unknown","schemeid":"dnet:review_levels","schemename":"dnet:review_levels"},"measures":null}],"eoscifguidelines":null,"contactperson":[],"contactgroup":[],"tool":[]} 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 910a366f6..be2ee7b98 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 @@ -2,11 +2,11 @@ - - - - - + + + + + @@ -14,17 +14,16 @@ - - - - + + + - - - - - - + + + + + + @@ -34,18 +33,17 @@ - - - + + - - - + + + - + - + @@ -54,35 +52,36 @@ - + - + - + - - + + - + - - + + + - - - + + + @@ -94,26 +93,29 @@ - + - - + + + + + - - + + - + - + - - + + - + @@ -132,13 +134,15 @@ + - + + - + @@ -156,20 +160,6 @@ - - - - - - - - - - - - - - - + \ No newline at end of file From 14f6346676752061cc9c7590b8bd07ac96ba6b7d Mon Sep 17 00:00:00 2001 From: "michele.debonis" Date: Tue, 22 Nov 2022 17:48:34 +0100 Subject: [PATCH 237/535] 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 2832117f232b682e1b20e8bd7854b95bee306a36 Mon Sep 17 00:00:00 2001 From: Alessia Bardi Date: Tue, 22 Nov 2022 18:01:12 +0100 Subject: [PATCH 238/535] added eoscifguidelines in test --- .../eosc-future/photic-zone-transformed.xml | 98 ------------------- .../oa/provision/eosc-future/photic-zone.json | 2 +- 2 files changed, 1 insertion(+), 99 deletions(-) delete mode 100644 dhp-workflows/dhp-graph-provision/src/test/resources/eu/dnetlib/dhp/oa/provision/eosc-future/photic-zone-transformed.xml diff --git a/dhp-workflows/dhp-graph-provision/src/test/resources/eu/dnetlib/dhp/oa/provision/eosc-future/photic-zone-transformed.xml b/dhp-workflows/dhp-graph-provision/src/test/resources/eu/dnetlib/dhp/oa/provision/eosc-future/photic-zone-transformed.xml deleted file mode 100644 index 79830b0f7..000000000 --- a/dhp-workflows/dhp-graph-provision/src/test/resources/eu/dnetlib/dhp/oa/provision/eosc-future/photic-zone-transformed.xml +++ /dev/null @@ -1,98 +0,0 @@ - - -
- https://w3id.org/ro-id/28499bdf-a0c6-46aa-a96f-50bd9490b8be - 2022-11-15T12:29:19Z - rohub_data - ro-crate_data -
- - - https://w3id.org/ro-id/28499bdf-a0c6-46aa-a96f-50bd9490b8be - - https://w3id.org/ro-id/28499bdf-a0c6-46aa-a96f-50bd9490b8be - - - https://w3id.org/ro-id/28499bdf-a0c6-46aa-a96f-50bd9490b8be/resources/b1b617b2-6b79-4bae-9fa6-b76945645626 - https://w3id.org/ro-id/28499bdf-a0c6-46aa-a96f-50bd9490b8be/resources/78103994-30be-4875-bf89-5acd752b5c3d - https://w3id.org/ro-id/28499bdf-a0c6-46aa-a96f-50bd9490b8be/resources/18fd1c70-249b-4c67-80ee-539f801a0da7 - https://w3id.org/ro-id/28499bdf-a0c6-46aa-a96f-50bd9490b8be/resources/32faa2eb-4cc8-401f-ac5c-bec2849b70e1 - https://w3id.org/ro-id/28499bdf-a0c6-46aa-a96f-50bd9490b8be/resources/4c253f5a-d427-40c2-9e9f-6063ae087239 - https://w3id.org/ro-id/28499bdf-a0c6-46aa-a96f-50bd9490b8be/resources/371b1957-078c-472b-a195-af7bce152c10 - https://w3id.org/ro-id/28499bdf-a0c6-46aa-a96f-50bd9490b8be/resources/82f9e4b8-01b4-4e50-9e27-ec9d337c8d74 - - RO-crate - - Creative Commons Attribution 4.0 International - open access - - - Mapping the photic zone of the Mediterranean Sea - - - Estimating the penetration of light along the water column from satellite data to map the photic zone in the Mediterranean Sea - - CNR-ISMAR - - - Giorgio Castellan - - - Lorenzo Angeletti - - - Paolo Montagna - - - Marco Taviani - - - - 2022-11-14T16:32:45Z - - - Estimating the penetration of light along the water column from satellite data to map the photic zone in the Mediterranean Sea - - 2022 - - open access - - - 813.478 KB - - - Earth sciences - Ecology - Optics - - - https://w3id.org/ro-id/28499bdf-a0c6-46aa-a96f-50bd9490b8be - 0048 - 2022-11-14 - OPEN - https://creativecommons.org/licenses/by/4.0/legalcode - - - - - - - -
\ No newline at end of file diff --git a/dhp-workflows/dhp-graph-provision/src/test/resources/eu/dnetlib/dhp/oa/provision/eosc-future/photic-zone.json b/dhp-workflows/dhp-graph-provision/src/test/resources/eu/dnetlib/dhp/oa/provision/eosc-future/photic-zone.json index ffef2740a..9729c6051 100644 --- a/dhp-workflows/dhp-graph-provision/src/test/resources/eu/dnetlib/dhp/oa/provision/eosc-future/photic-zone.json +++ b/dhp-workflows/dhp-graph-provision/src/test/resources/eu/dnetlib/dhp/oa/provision/eosc-future/photic-zone.json @@ -1 +1 @@ -{"collectedfrom":[{"key":"10|fairsharing_::1b69ebedb522700034547abc5652ffac","value":"ROHub","dataInfo":null}],"dataInfo":{"invisible":false,"inferred":false,"deletedbyinference":false,"trust":"0.9","inferenceprovenance":null,"provenanceaction":{"classid":"sysimport:crosswalk:repository","classname":"sysimport:crosswalk:repository","schemeid":"dnet:provenanceActions","schemename":"dnet:provenanceActions"}},"lastupdatetimestamp":1669132109711,"id":"50|w3id________::68126da991bd76d8be494bddfbf7a1bb","originalId":["50|fsh_____4119::68126da991bd76d8be494bddfbf7a1bb","https://w3id.org/ro-id/28499bdf-a0c6-46aa-a96f-50bd9490b8be"],"pid":[{"value":"https://w3id.org/ro-id/28499bdf-a0c6-46aa-a96f-50bd9490b8be","qualifier":{"classid":"w3id","classname":"w3id.org","schemeid":"dnet:pid_types","schemename":"dnet:pid_types"},"dataInfo":{"invisible":false,"inferred":false,"deletedbyinference":false,"trust":"0.9","inferenceprovenance":null,"provenanceaction":{"classid":"sysimport:crosswalk:repository","classname":"sysimport:crosswalk:repository","schemeid":"dnet:provenanceActions","schemename":"dnet:provenanceActions"}}}],"dateofcollection":"2022-11-15T12:29:19Z","dateoftransformation":"2022-11-15T12:29:19Z","extraInfo":[],"oaiprovenance":null,"processingchargeamount":null,"processingchargecurrency":null,"measures":null,"author":[{"fullname":"Giorgio Castellan","name":"","surname":"","rank":1,"pid":[],"affiliation":[]},{"fullname":"Lorenzo Angeletti","name":"","surname":"","rank":2,"pid":[],"affiliation":[]},{"fullname":"Paolo Montagna","name":"","surname":"","rank":3,"pid":[],"affiliation":[]},{"fullname":"Marco Taviani","name":"","surname":"","rank":4,"pid":[],"affiliation":[]}],"resulttype":{"classid":"other","classname":"other","schemeid":"dnet:result_typologies","schemename":"dnet:result_typologies"},"language":{"classid":"UNKNOWN","classname":"Unknown","schemeid":"dnet:languages","schemename":"dnet:languages"},"country":[],"subject":[{"value":"Earth sciences","qualifier":{"classid":"","classname":"","schemeid":"","schemename":""},"dataInfo":{"invisible":false,"inferred":false,"deletedbyinference":false,"trust":"0.9","inferenceprovenance":null,"provenanceaction":{"classid":"sysimport:crosswalk:repository","classname":"sysimport:crosswalk:repository","schemeid":"dnet:provenanceActions","schemename":"dnet:provenanceActions"}}},{"value":"Ecology","qualifier":{"classid":"","classname":"","schemeid":"","schemename":""},"dataInfo":{"invisible":false,"inferred":false,"deletedbyinference":false,"trust":"0.9","inferenceprovenance":null,"provenanceaction":{"classid":"sysimport:crosswalk:repository","classname":"sysimport:crosswalk:repository","schemeid":"dnet:provenanceActions","schemename":"dnet:provenanceActions"}}},{"value":"Optics","qualifier":{"classid":"","classname":"","schemeid":"","schemename":""},"dataInfo":{"invisible":false,"inferred":false,"deletedbyinference":false,"trust":"0.9","inferenceprovenance":null,"provenanceaction":{"classid":"sysimport:crosswalk:repository","classname":"sysimport:crosswalk:repository","schemeid":"dnet:provenanceActions","schemename":"dnet:provenanceActions"}}}],"title":[{"value":"Mapping the photic zone of the Mediterranean Sea","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":null,"provenanceaction":{"classid":"sysimport:crosswalk:repository","classname":"sysimport:crosswalk:repository","schemeid":"dnet:provenanceActions","schemename":"dnet:provenanceActions"}}}],"relevantdate":[{"value":"2022-11-14T16:32:45Z","qualifier":{"classid":"Issued","classname":"Issued","schemeid":"dnet:dataCite_date","schemename":"dnet:dataCite_date"},"dataInfo":{"invisible":false,"inferred":false,"deletedbyinference":false,"trust":"0.9","inferenceprovenance":null,"provenanceaction":{"classid":"sysimport:crosswalk:repository","classname":"sysimport:crosswalk:repository","schemeid":"dnet:provenanceActions","schemename":"dnet:provenanceActions"}}}],"description":[{"value":"Estimating the penetration of light along the water column from satellite data to map the photic zone in the Mediterranean Sea","dataInfo":{"invisible":false,"inferred":false,"deletedbyinference":false,"trust":"0.9","inferenceprovenance":null,"provenanceaction":{"classid":"sysimport:crosswalk:repository","classname":"sysimport:crosswalk:repository","schemeid":"dnet:provenanceActions","schemename":"dnet:provenanceActions"}}}],"dateofacceptance":{"value":"2022-11-14","dataInfo":{"invisible":false,"inferred":false,"deletedbyinference":false,"trust":"0.9","inferenceprovenance":null,"provenanceaction":{"classid":"sysimport:crosswalk:repository","classname":"sysimport:crosswalk:repository","schemeid":"dnet:provenanceActions","schemename":"dnet:provenanceActions"}}},"publisher":{"value":"CNR-ISMAR","dataInfo":{"invisible":false,"inferred":false,"deletedbyinference":false,"trust":"0.9","inferenceprovenance":null,"provenanceaction":{"classid":"sysimport:crosswalk:repository","classname":"sysimport:crosswalk:repository","schemeid":"dnet:provenanceActions","schemename":"dnet:provenanceActions"}}},"embargoenddate":null,"source":[],"fulltext":[],"format":[],"contributor":[],"resourcetype":{"classid":"RO-crate","classname":"RO-crate","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":"https://creativecommons.org/licenses/by/4.0/legalcode","dataInfo":{"invisible":false,"inferred":false,"deletedbyinference":false,"trust":"0.9","inferenceprovenance":null,"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","openAccessRoute":null},"instancetype":{"classid":"0048","classname":"Research Object","schemeid":"dnet:publication_resource","schemename":"dnet:publication_resource"},"hostedby":{"key":"10|fairsharing_::1b69ebedb522700034547abc5652ffac","value":"ROHub","dataInfo":null},"url":["https://w3id.org/ro-id/28499bdf-a0c6-46aa-a96f-50bd9490b8be"],"distributionlocation":null,"collectedfrom":{"key":"10|fairsharing_::1b69ebedb522700034547abc5652ffac","value":"ROHub","dataInfo":null},"pid":[{"value":"https://w3id.org/ro-id/28499bdf-a0c6-46aa-a96f-50bd9490b8be","qualifier":{"classid":"w3id","classname":"w3id.org","schemeid":"dnet:pid_types","schemename":"dnet:pid_types"},"dataInfo":{"invisible":false,"inferred":false,"deletedbyinference":false,"trust":"0.9","inferenceprovenance":null,"provenanceaction":{"classid":"sysimport:crosswalk:repository","classname":"sysimport:crosswalk:repository","schemeid":"dnet:provenanceActions","schemename":"dnet:provenanceActions"}}}],"alternateIdentifier":[],"dateofacceptance":{"value":"2022-11-14","dataInfo":{"invisible":false,"inferred":false,"deletedbyinference":false,"trust":"0.9","inferenceprovenance":null,"provenanceaction":{"classid":"sysimport:crosswalk:repository","classname":"sysimport:crosswalk:repository","schemeid":"dnet:provenanceActions","schemename":"dnet:provenanceActions"}}},"processingchargeamount":null,"processingchargecurrency":null,"refereed":{"classid":"UNKNOWN","classname":"Unknown","schemeid":"dnet:review_levels","schemename":"dnet:review_levels"},"measures":null}],"eoscifguidelines":null,"contactperson":[],"contactgroup":[],"tool":[]} +{"collectedfrom":[{"key":"10|fairsharing_::1b69ebedb522700034547abc5652ffac","value":"ROHub","dataInfo":null}],"dataInfo":{"invisible":false,"inferred":false,"deletedbyinference":false,"trust":"0.9","inferenceprovenance":null,"provenanceaction":{"classid":"sysimport:crosswalk:repository","classname":"sysimport:crosswalk:repository","schemeid":"dnet:provenanceActions","schemename":"dnet:provenanceActions"}},"lastupdatetimestamp":1669134693781,"id":"50|w3id________::68126da991bd76d8be494bddfbf7a1bb","originalId":["50|fsh_____4119::68126da991bd76d8be494bddfbf7a1bb","https://w3id.org/ro-id/28499bdf-a0c6-46aa-a96f-50bd9490b8be"],"pid":[{"value":"https://w3id.org/ro-id/28499bdf-a0c6-46aa-a96f-50bd9490b8be","qualifier":{"classid":"w3id","classname":"w3id.org","schemeid":"dnet:pid_types","schemename":"dnet:pid_types"},"dataInfo":{"invisible":false,"inferred":false,"deletedbyinference":false,"trust":"0.9","inferenceprovenance":null,"provenanceaction":{"classid":"sysimport:crosswalk:repository","classname":"sysimport:crosswalk:repository","schemeid":"dnet:provenanceActions","schemename":"dnet:provenanceActions"}}}],"dateofcollection":"2022-11-15T12:29:19Z","dateoftransformation":"2022-11-15T12:29:19Z","extraInfo":[],"oaiprovenance":null,"processingchargeamount":null,"processingchargecurrency":null,"measures":null,"author":[{"fullname":"Giorgio Castellan","name":"","surname":"","rank":1,"pid":[],"affiliation":[]},{"fullname":"Lorenzo Angeletti","name":"","surname":"","rank":2,"pid":[],"affiliation":[]},{"fullname":"Paolo Montagna","name":"","surname":"","rank":3,"pid":[],"affiliation":[]},{"fullname":"Marco Taviani","name":"","surname":"","rank":4,"pid":[],"affiliation":[]}],"resulttype":{"classid":"other","classname":"other","schemeid":"dnet:result_typologies","schemename":"dnet:result_typologies"},"language":{"classid":"UNKNOWN","classname":"Unknown","schemeid":"dnet:languages","schemename":"dnet:languages"},"country":[],"subject":[{"value":"Earth sciences","qualifier":{"classid":"","classname":"","schemeid":"","schemename":""},"dataInfo":{"invisible":false,"inferred":false,"deletedbyinference":false,"trust":"0.9","inferenceprovenance":null,"provenanceaction":{"classid":"sysimport:crosswalk:repository","classname":"sysimport:crosswalk:repository","schemeid":"dnet:provenanceActions","schemename":"dnet:provenanceActions"}}},{"value":"Ecology","qualifier":{"classid":"","classname":"","schemeid":"","schemename":""},"dataInfo":{"invisible":false,"inferred":false,"deletedbyinference":false,"trust":"0.9","inferenceprovenance":null,"provenanceaction":{"classid":"sysimport:crosswalk:repository","classname":"sysimport:crosswalk:repository","schemeid":"dnet:provenanceActions","schemename":"dnet:provenanceActions"}}},{"value":"Optics","qualifier":{"classid":"","classname":"","schemeid":"","schemename":""},"dataInfo":{"invisible":false,"inferred":false,"deletedbyinference":false,"trust":"0.9","inferenceprovenance":null,"provenanceaction":{"classid":"sysimport:crosswalk:repository","classname":"sysimport:crosswalk:repository","schemeid":"dnet:provenanceActions","schemename":"dnet:provenanceActions"}}}],"title":[{"value":"Mapping the photic zone of the Mediterranean Sea","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":null,"provenanceaction":{"classid":"sysimport:crosswalk:repository","classname":"sysimport:crosswalk:repository","schemeid":"dnet:provenanceActions","schemename":"dnet:provenanceActions"}}}],"relevantdate":[{"value":"2022-11-14T16:32:45Z","qualifier":{"classid":"Issued","classname":"Issued","schemeid":"dnet:dataCite_date","schemename":"dnet:dataCite_date"},"dataInfo":{"invisible":false,"inferred":false,"deletedbyinference":false,"trust":"0.9","inferenceprovenance":null,"provenanceaction":{"classid":"sysimport:crosswalk:repository","classname":"sysimport:crosswalk:repository","schemeid":"dnet:provenanceActions","schemename":"dnet:provenanceActions"}}}],"description":[{"value":"Estimating the penetration of light along the water column from satellite data to map the photic zone in the Mediterranean Sea","dataInfo":{"invisible":false,"inferred":false,"deletedbyinference":false,"trust":"0.9","inferenceprovenance":null,"provenanceaction":{"classid":"sysimport:crosswalk:repository","classname":"sysimport:crosswalk:repository","schemeid":"dnet:provenanceActions","schemename":"dnet:provenanceActions"}}}],"dateofacceptance":{"value":"2022-11-14","dataInfo":{"invisible":false,"inferred":false,"deletedbyinference":false,"trust":"0.9","inferenceprovenance":null,"provenanceaction":{"classid":"sysimport:crosswalk:repository","classname":"sysimport:crosswalk:repository","schemeid":"dnet:provenanceActions","schemename":"dnet:provenanceActions"}}},"publisher":{"value":"CNR-ISMAR","dataInfo":{"invisible":false,"inferred":false,"deletedbyinference":false,"trust":"0.9","inferenceprovenance":null,"provenanceaction":{"classid":"sysimport:crosswalk:repository","classname":"sysimport:crosswalk:repository","schemeid":"dnet:provenanceActions","schemename":"dnet:provenanceActions"}}},"embargoenddate":null,"source":[],"fulltext":[],"format":[],"contributor":[],"resourcetype":{"classid":"RO-crate","classname":"RO-crate","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":"https://creativecommons.org/licenses/by/4.0/legalcode","dataInfo":{"invisible":false,"inferred":false,"deletedbyinference":false,"trust":"0.9","inferenceprovenance":null,"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","openAccessRoute":null},"instancetype":{"classid":"0048","classname":"Research Object","schemeid":"dnet:publication_resource","schemename":"dnet:publication_resource"},"hostedby":{"key":"10|fairsharing_::1b69ebedb522700034547abc5652ffac","value":"ROHub","dataInfo":null},"url":["https://w3id.org/ro-id/28499bdf-a0c6-46aa-a96f-50bd9490b8be"],"distributionlocation":null,"collectedfrom":{"key":"10|fairsharing_::1b69ebedb522700034547abc5652ffac","value":"ROHub","dataInfo":null},"pid":[{"value":"https://w3id.org/ro-id/28499bdf-a0c6-46aa-a96f-50bd9490b8be","qualifier":{"classid":"w3id","classname":"w3id.org","schemeid":"dnet:pid_types","schemename":"dnet:pid_types"},"dataInfo":{"invisible":false,"inferred":false,"deletedbyinference":false,"trust":"0.9","inferenceprovenance":null,"provenanceaction":{"classid":"sysimport:crosswalk:repository","classname":"sysimport:crosswalk:repository","schemeid":"dnet:provenanceActions","schemename":"dnet:provenanceActions"}}}],"alternateIdentifier":[],"dateofacceptance":{"value":"2022-11-14","dataInfo":{"invisible":false,"inferred":false,"deletedbyinference":false,"trust":"0.9","inferenceprovenance":null,"provenanceaction":{"classid":"sysimport:crosswalk:repository","classname":"sysimport:crosswalk:repository","schemeid":"dnet:provenanceActions","schemename":"dnet:provenanceActions"}}},"processingchargeamount":null,"processingchargecurrency":null,"refereed":{"classid":"UNKNOWN","classname":"Unknown","schemeid":"dnet:review_levels","schemename":"dnet:review_levels"},"measures":null}],"eoscifguidelines":[{"code":"EOSC::Jupyter Notebook","label":"EOSC::Jupyter Notebook","url":"","semanticRelation":"compliesWith"},{"code":"EOSC::Data Cube","label":"EOSC::Data Cube","url":"","semanticRelation":"compliesWith"},{"code":"EOSC::RO-crate","label":"EOSC::RO-crate","url":"","semanticRelation":"compliesWith"}],"contactperson":[],"contactgroup":[],"tool":[]} \ No newline at end of file From a79c47522dbdd5e4af90fda3aaf52cb03de9a7f0 Mon Sep 17 00:00:00 2001 From: Claudio Atzori Date: Wed, 23 Nov 2022 10:17:49 +0100 Subject: [PATCH 239/535] updated ORCID datasource identifier --- .../eu/dnetlib/doiboost/orcidnodoi/oaf/PublicationToOaf.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/dhp-workflows/dhp-doiboost/src/main/java/eu/dnetlib/doiboost/orcidnodoi/oaf/PublicationToOaf.java b/dhp-workflows/dhp-doiboost/src/main/java/eu/dnetlib/doiboost/orcidnodoi/oaf/PublicationToOaf.java index f92040c24..ba7c7dd01 100644 --- a/dhp-workflows/dhp-doiboost/src/main/java/eu/dnetlib/doiboost/orcidnodoi/oaf/PublicationToOaf.java +++ b/dhp-workflows/dhp-doiboost/src/main/java/eu/dnetlib/doiboost/orcidnodoi/oaf/PublicationToOaf.java @@ -554,7 +554,7 @@ public class PublicationToOaf implements Serializable { private KeyValue createCollectedFrom() { KeyValue cf = new KeyValue(); cf.setValue(ModelConstants.ORCID.toUpperCase()); - cf.setKey("10|" + OPENAIRE_PREFIX + SEPARATOR + "806360c771262b4d6770e7cdf04b5c5a"); + cf.setKey("10|" + OPENAIRE_PREFIX + SEPARATOR + "cd0f74b5955dc87fd0605745c4b49ee8"); return cf; } From 0e3edc501897bfdac52bfeda6316181b9c4d5ce3 Mon Sep 17 00:00:00 2001 From: "miriam.baglioni" Date: Wed, 23 Nov 2022 11:26:36 +0100 Subject: [PATCH 240/535] [Bulk Tag] fixed issue in verb name --- .../criteria/ContainsVerbIgnoreCase.java | 2 +- .../bulktag/criteria/EqualVerbIgnoreCase.java | 2 +- .../criteria/NotContainsVerbIgnoreCase.java | 2 +- .../criteria/NotEqualVerbIgnoreCase.java | 2 +- .../communityconfiguration/tagging_conf.xml | 66 +++++++++---------- 5 files changed, 37 insertions(+), 37 deletions(-) diff --git a/dhp-workflows/dhp-enrichment/src/main/java/eu/dnetlib/dhp/bulktag/criteria/ContainsVerbIgnoreCase.java b/dhp-workflows/dhp-enrichment/src/main/java/eu/dnetlib/dhp/bulktag/criteria/ContainsVerbIgnoreCase.java index a4a6f5663..501eb51b9 100644 --- a/dhp-workflows/dhp-enrichment/src/main/java/eu/dnetlib/dhp/bulktag/criteria/ContainsVerbIgnoreCase.java +++ b/dhp-workflows/dhp-enrichment/src/main/java/eu/dnetlib/dhp/bulktag/criteria/ContainsVerbIgnoreCase.java @@ -3,7 +3,7 @@ package eu.dnetlib.dhp.bulktag.criteria; import java.io.Serializable; -@VerbClass("contains_ignorecase") +@VerbClass("contains_caseinsensitive") public class ContainsVerbIgnoreCase implements Selection, Serializable { private String param; diff --git a/dhp-workflows/dhp-enrichment/src/main/java/eu/dnetlib/dhp/bulktag/criteria/EqualVerbIgnoreCase.java b/dhp-workflows/dhp-enrichment/src/main/java/eu/dnetlib/dhp/bulktag/criteria/EqualVerbIgnoreCase.java index c5f0ce070..1cd07755c 100644 --- a/dhp-workflows/dhp-enrichment/src/main/java/eu/dnetlib/dhp/bulktag/criteria/EqualVerbIgnoreCase.java +++ b/dhp-workflows/dhp-enrichment/src/main/java/eu/dnetlib/dhp/bulktag/criteria/EqualVerbIgnoreCase.java @@ -3,7 +3,7 @@ package eu.dnetlib.dhp.bulktag.criteria; import java.io.Serializable; -@VerbClass("equals_ignorecase") +@VerbClass("equals_caseinsensitive") public class EqualVerbIgnoreCase implements Selection, Serializable { private String param; diff --git a/dhp-workflows/dhp-enrichment/src/main/java/eu/dnetlib/dhp/bulktag/criteria/NotContainsVerbIgnoreCase.java b/dhp-workflows/dhp-enrichment/src/main/java/eu/dnetlib/dhp/bulktag/criteria/NotContainsVerbIgnoreCase.java index b21be83f0..e12b65a27 100644 --- a/dhp-workflows/dhp-enrichment/src/main/java/eu/dnetlib/dhp/bulktag/criteria/NotContainsVerbIgnoreCase.java +++ b/dhp-workflows/dhp-enrichment/src/main/java/eu/dnetlib/dhp/bulktag/criteria/NotContainsVerbIgnoreCase.java @@ -3,7 +3,7 @@ package eu.dnetlib.dhp.bulktag.criteria; import java.io.Serializable; -@VerbClass("not_contains_ignorecase") +@VerbClass("not_contains_caseinsensitive") public class NotContainsVerbIgnoreCase implements Selection, Serializable { private String param; diff --git a/dhp-workflows/dhp-enrichment/src/main/java/eu/dnetlib/dhp/bulktag/criteria/NotEqualVerbIgnoreCase.java b/dhp-workflows/dhp-enrichment/src/main/java/eu/dnetlib/dhp/bulktag/criteria/NotEqualVerbIgnoreCase.java index c6958a641..c1749621e 100644 --- a/dhp-workflows/dhp-enrichment/src/main/java/eu/dnetlib/dhp/bulktag/criteria/NotEqualVerbIgnoreCase.java +++ b/dhp-workflows/dhp-enrichment/src/main/java/eu/dnetlib/dhp/bulktag/criteria/NotEqualVerbIgnoreCase.java @@ -3,7 +3,7 @@ package eu.dnetlib.dhp.bulktag.criteria; import java.io.Serializable; -@VerbClass("not_equals_ignorecase") +@VerbClass("not_equals_caseinsensitive") public class NotEqualVerbIgnoreCase implements Selection, Serializable { private String param; diff --git a/dhp-workflows/dhp-enrichment/src/test/resources/eu/dnetlib/dhp/bulktag/communityconfiguration/tagging_conf.xml b/dhp-workflows/dhp-enrichment/src/test/resources/eu/dnetlib/dhp/bulktag/communityconfiguration/tagging_conf.xml index 06c57511d..4e580edf5 100644 --- a/dhp-workflows/dhp-enrichment/src/test/resources/eu/dnetlib/dhp/bulktag/communityconfiguration/tagging_conf.xml +++ b/dhp-workflows/dhp-enrichment/src/test/resources/eu/dnetlib/dhp/bulktag/communityconfiguration/tagging_conf.xml @@ -1193,7 +1193,7 @@ - {"criteria":[{"constraint":[{"verb":"equals_ignorecase","field":"subject","value":"ciencias de la comunicación"}, + {"criteria":[{"constraint":[{"verb":"equals_caseinsensitive","field":"subject","value":"ciencias de la comunicación"}, {"verb":"equals","field":"subject","value":"Miriam"}]}, {"constraint":[{"verb":"equals","field":"subject","value":"miriam"}]}]} @@ -1317,81 +1317,81 @@ opendoar____::358aee4cc897452c00244351e4d91f69 - {"criteria":[{"constraint":[{"verb":"contains_ignorecase","field":"title","value":"COVID-19"}]}, - {"constraint":[{"verb":"contains_ignorecase","field":"title","value":"SARS-CoV-2"}]}, - {"constraint":[{"verb":"contains_ignorecase","field":"title","value":"2019-nCoV"}}]} + {"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 - {"criteria":[{"constraint":[{"verb":"contains_ignorecase","field":"title","value":"COVID-19"}]}, - {"constraint":[{"verb":"contains_ignorecase","field":"title","value":"SARS-CoV-2"}]}, - {"constraint":[{"verb":"contains_ignorecase","field":"title","value":"2019-nCoV"}]}]} + {"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 - {"criteria":[{"constraint":[{"verb":"contains_ignorecase","field":"title","value":"COVID-19"}]}, - {"constraint":[{"verb":"contains_ignorecase","field":"title","value":"SARS-CoV-2"}]}, - {"constraint":[{"verb":"contains_ignorecase","field":"title","value":"2019-nCoV"}]}]} + {"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 - {"criteria":[{"constraint":[{"verb":"contains_ignorecase","field":"title","value":"COVID-19"}]}, - {"constraint":[{"verb":"contains_ignorecase","field":"title","value":"SARS-CoV-2"}]}, - {"constraint":[{"verb":"contains_ignorecase","field":"title","value":"2019-nCoV"}]}]} + {"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 - {"criteria":[{"constraint":[{"verb":"contains_ignorecase","field":"title","value":"COVID-19"}]}, - {"constraint":[{"verb":"contains_ignorecase","field":"title","value":"SARS-CoV-2"}]}, - {"constraint":[{"verb":"contains_ignorecase","field":"title","value":"2019-nCoV"}]}]} + {"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 - {"criteria":[{"constraint":[{"verb":"contains_ignorecase","field":"title","value":"COVID-19"}]}, - {"constraint":[{"verb":"contains_ignorecase","field":"title","value":"SARS-CoV-2"}]}, - {"constraint":[{"verb":"contains_ignorecase","field":"title","value":"2019-nCoV"}]}]} + {"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 - {"criteria":[{"constraint":[{"verb":"contains_ignorecase","field":"title","value":"COVID-19"}]}, - {"constraint":[{"verb":"contains_ignorecase","field":"title","value":"SARS-CoV-2"}]}, - {"constraint":[{"verb":"contains_ignorecase","field":"title","value":"2019-nCoV"}]}]} + {"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 - {"criteria":[{"constraint":[{"verb":"contains_ignorecase","field":"title","value":"COVID-19"}]}, - {"constraint":[{"verb":"contains_ignorecase","field":"title","value":"SARS-CoV-2"}]}, - {"constraint":[{"verb":"contains_ignorecase","field":"title","value":"2019-nCoV"}]}]} + {"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 - {"criteria":[{"constraint":[{"verb":"contains_ignorecase","field":"title","value":"COVID-19"}]}, - {"constraint":[{"verb":"contains_ignorecase","field":"title","value":"SARS-CoV-2"}]}, - {"constraint":[{"verb":"contains_ignorecase","field":"title","value":"2019-nCoV"}]}]} + {"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 - {"criteria":[{"constraint":[{"verb":"contains_ignorecase","field":"title","value":"COVID-19"}]}, - {"constraint":[{"verb":"contains_ignorecase","field":"title","value":"SARS-CoV-2"}]}, - {"constraint":[{"verb":"contains_ignorecase","field":"title","value":"2019-nCoV"}]}]} + {"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 - {"criteria":[{"constraint":[{"verb":"contains_ignorecase","field":"title","value":"SARS-CoV-2"}]},{"constraint":[{"verb":"contains_ignorecase","field":"title","value":"COVID-19"}]},{"constraint":[{"verb":"contains_ignorecase","field":"title","value":"2019-nCov"}]}]} + {"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 - {"criteria":[{"constraint":[{"verb":"contains_ignorecase","field":"title","value":"SARS-CoV-2"}]},{"constraint":[{"verb":"contains_ignorecase","field":"title","value":"COVID-19"}]},{"constraint":[{"verb":"contains_ignorecase","field":"title","value":"2019-nCov"}]}]} + {"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 90c8f9cb6178cc7d257d4f3000e48d734a6c2b5d Mon Sep 17 00:00:00 2001 From: Alessia Bardi Date: Wed, 23 Nov 2022 12:18:44 +0100 Subject: [PATCH 241/535] tests for EOSC Future --- .../provision/IndexRecordTransformerTest.java | 14 + .../eosc-future/software-justthink-claim.xml | 305 +++++++++++++ .../eosc-future/software-justthink.xml | 429 ++++++++++++++++++ 3 files changed, 748 insertions(+) create mode 100644 dhp-workflows/dhp-graph-provision/src/test/resources/eu/dnetlib/dhp/oa/provision/eosc-future/software-justthink-claim.xml create mode 100644 dhp-workflows/dhp-graph-provision/src/test/resources/eu/dnetlib/dhp/oa/provision/eosc-future/software-justthink.xml 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 e0fbb2a2f..17c3cdb30 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 @@ -128,6 +128,20 @@ public class IndexRecordTransformerTest { testRecordTransformation(record); } + @Test + public void testForEOSCFutureSoftwareNotebook() throws IOException, TransformerException { + final String record = IOUtils + .toString(getClass().getResourceAsStream("eosc-future/software-justthink.xml")); + testRecordTransformation(record); + } + + @Test + public void testForEOSCFutureSoftwareNotebookClaim() throws IOException, TransformerException { + final String record = IOUtils + .toString(getClass().getResourceAsStream("eosc-future/software-justthink-claim.xml")); + testRecordTransformation(record); + } + @Test void testDoiUrlNormalization() throws MalformedURLException { diff --git a/dhp-workflows/dhp-graph-provision/src/test/resources/eu/dnetlib/dhp/oa/provision/eosc-future/software-justthink-claim.xml b/dhp-workflows/dhp-graph-provision/src/test/resources/eu/dnetlib/dhp/oa/provision/eosc-future/software-justthink-claim.xml new file mode 100644 index 000000000..02089bb30 --- /dev/null +++ b/dhp-workflows/dhp-graph-provision/src/test/resources/eu/dnetlib/dhp/oa/provision/eosc-future/software-justthink-claim.xml @@ -0,0 +1,305 @@ + + +
+ od______2659::3801993ea8f970cfc991277160edf277 + 2022-08-08T03:06:13Z + under curation + +
+ + + + JUSThink + Alignment Analysis + Norman, Utku + Dinkar, Tanvi + Bruno, Barbara + Clavel, Chloé + + + + +

+ 1. Description +

+

This repository contains tools to automatically analyse how + participants align their use of task-specific referents in their + dialogue and actions for a collaborative learning activity, and how + it relates to the task success (i.e. their learning + outcomes and task performance).

+
+

In brief:

+
    +
  1. JUSThink Dialogue and Actions Corpus contains + transcripts, event logs, and test responses of children aged 9 + through 12, as they participate in the JUSThink activity [1, 2] + in pairs of two, to solve a problem on graphs together.
  2. +
  3. The JUSThink activity and its study is first + described in [1], and elaborated with findings concerning the link + between children's learning, performance in the activity, and + perception of self, the other and the robot in [2].
  4. +
  5. Alignment analysis in our work [3] studies the participants' use of + expressions that are related to the task at hand, their follow up + actions of these expressions, and how it links to task success.
  6. +
+

+ 2. Publications +

+

If you use this work in an academic context, please cite the following + publications:

+
    +
  • +

    Norman*, U., Dinkar*, T., Bruno, B., & Clavel, C. (2022). + Studying Alignment in a Collaborative Learning Activity via + Automatic Methods: The Link Between What We Say and Do. Dialogue + & Discourse, 13(2), 1 - ;48. *Contributed equally to this + work. https://doi.org/10.5210/dad.2022.201

    +
  • +
  • +

    Norman, U., Dinkar, T., Bruno, B., & Clavel, C. (2021). + JUSThink Alignment Analysis. In Dialogue & Discourse + (v1.0.0, Vol. 13, Number 2, pp. 1 - ;48). Zenodo. https://doi.org/10.5281/zenodo.4675070

    +
  • +
+

+ 3. Content +

+

The tools provided in this repository consists of 7 Jupyter Notebooks + written in Python 3, and two additional external tools utilised by the + notebooks.

+

+ 3.1. Jupyter Notebooks +

+

We highlight that the notebooks up until the last (i.e. to test the + hypotheses (tools/7_test_the_hypotheses.ipynb)) present a general + pipeline to process event logs, test responses and transcripts to + extract measures of task performance, learning outcomes, and measures of + alignment.

+
    +
  1. Extract task performance (and other features) from the logs + (tools/1_extract_performance_and_other_features_from_logs.ipynb): + Extracts various measures of task behaviour from the logs, at + varying granularities of the activity (i.e. the whole corpus, task, + attempt, and turn levels). In later notebooks, we focus on one of + the features to estimate the task performance of a team: (minimum) + error.
  2. +
  3. Extract learning outcomes from the test responses + (tools/2_extract_learning_gain_from_test_responses.ipynb): Extracts + measures of learning outcomes from the responses to the pre-test and + the post-test. In later notebooks, we focus on one of the features + to estimate the learning outcome of a team: relative learning gain + [4]
  4. +
  5. Select and visualise a subset of teams for + transcription + (tools/3_visualise_transcribed_teams.ipynb): Visualises the + transcribed teams among the other teams in the feature space spanned + by task performance and learning outcome, as well as the + distribution of their number of attempts and turns.
  6. +
  7. Extract routines from transcripts + (tools/4_extract_routines_from_transcripts.ipynb) (uses dialign to + extract routines): Extracts routines of referring expressions that + are "fixed", i.e. become shared or established amongst + interlocutors.
  8. +
  9. Combine transcripts with logs + (tools/5_construct_the_corpus_by_combining_transcripts_with_logs.ipynb): + Merges transcripts with event logs to have a combined dialogue and + actions corpus, to be processed e.g. to detect follow-up + actions.
  10. +
  11. Recognise instructions and detect follow-up actions + (tools/6_recognise_instructions_detect_follow-up_actions.ipynb): + Extracts verbalised instruction such as "connect Mount Basel to + Montreux", and pairs them with the follow-up action that may + match (e.g. if the other connects Basel to Montreux) or + mismatch (e.g. if the other connects Basel to + Neuchatel) with the instruction.
  12. +
  13. Test the hypotheses in [3] (tools/7_test_the_hypotheses.ipynb) (uses + effsize to estimate effect size, specifically + Cliff's Delta): Considers each research questions and hypotheses + studied in [3] and generates the results in [3].
  14. +
+

+ 3.2. External Tools +

+
    +
  1. dialign + tool to extract routines, specifically Release 1.0 from dialign-1.0.zip:\n It extracts routine expressions that are + "shared" among the participants from transcripts. \n It is + used as an external module (in accordance with its CeCILL-B License, + see License).
  2. +
  3. effsize tool to compute estimators of effect + size.\n We specifically use it to compute Cliff's Delta, which + quantifies the amount difference between two groups of observations, + by computing the Cliff's Delta statistic.\n It is taken from + project DABEST (see License).
  4. +
+

+ 4. Research Questions and Hypotheses in [3] +

+
    +
  • RQ1 Lexical alignment: How do the interlocutors + use expressions related to the task? Is this associated + with task success?
      +
    • H1.1: Task-specific referents become + routine early for more successful teams.
    • +
    • H1.2: Hesitation phenomena are more likely + to occur in the vicinity of priming and establishment of + task-specific referents for more successful teams.
    • +
    +
  • +
  • RQ2 Behavioural alignment: How do the interlocutors + follow up these expressions with actions? Is this + associated with task success?
      +
    • H2.1: Instructions are more likely to be + followed by a corresponding action early in the dialogue for + more successful teams.
    • +
    • H2.2: When instructions are followed by a + corresponding or a different action, the action is more + likely to be in the vicinity of information management + phenomena for more successful teams.
    • +
    +
  • +
+

The RQs and Hs are addressed in the notebook for testing the hypotheses + (i.e. tools/7_test_the_hypotheses.ipynb).

+

+ Acknowledgements +

+

This project has received funding from the European Union's Horizon + 2020 research and innovation programme under grant agreement No 765955. + Namely, the ANIMATAS Project.

+

+ License +

+

The whole package is under MIT License, see the LICENSE + file.

+

Classes under the tools/effsize package were taken from + project DABEST, Copyright 2016-2020 Joses W. Ho. + These classes are licensed under the BSD 3-Clause Clear License. See + tools/effsize/LICENSE file for additional + details.

+

Classes under the tools/dialign-1.0 package were taken + from project dialign. These classes are licensed under the + CeCILL-B License. This package is used as an "external + module", see tools/dialign-1.0/LICENSE.txt for + additional details.

+ + + + + Zenodo + + + + + + + + + + + + + + + + + + + oai:zenodo.org:4675070 + + oai:zenodo.org:4675070 + 10.5281/zenodo.4675070 + + + + false + false + 0.9 + + + + + + corda__h2020::c4515ebef538a734cf11f795347f5dac + 765955 + ANIMATAS + Advancing intuitive human-machine interaction with human-like + social capabilities for education in schools + + + + ec__________::EC::H2020 + + + + + + + + + + + + + https://zenodo.org/record/4675070 + + + + + + + + diff --git a/dhp-workflows/dhp-graph-provision/src/test/resources/eu/dnetlib/dhp/oa/provision/eosc-future/software-justthink.xml b/dhp-workflows/dhp-graph-provision/src/test/resources/eu/dnetlib/dhp/oa/provision/eosc-future/software-justthink.xml new file mode 100644 index 000000000..9c0f4ea7d --- /dev/null +++ b/dhp-workflows/dhp-graph-provision/src/test/resources/eu/dnetlib/dhp/oa/provision/eosc-future/software-justthink.xml @@ -0,0 +1,429 @@ + + +
+ doi_dedup___::c054151b6a8c4f41c7acf160651a6503 + 2022-10-13T00:15:44+0000 + 2022-10-13T07:44:29.152Z +
+ + + + + + oai:zenodo.org:4675070 + 50|od______2659::3801993ea8f970cfc991277160edf277 + oai:zenodo.org:6974562 + 50|od______2659::9c87ff4a5e7710052b873088e7265072 + 10.5281/zenodo.4675069 + 10.5281/zenodo.4675070 + 10.5281/zenodo.6974562 + 10.5281/zenodo.4675069 + + + + + + JUSThink Alignment + Analysis + + Norman, Utku + Dinkar, Tanvi + Bruno, Barbara + Clavel, Chloé + 2022-08-08 + &lt;strong>1. Description&lt;/strong> This repository + contains&lt;strong> tools to automatically analyse how participants align + their use of task-specific referents in their dialogue and actions for a + collaborative learning activity, and how it relates to the task + success&lt;/strong> (i.e. their learning outcomes and task performance). As + a use case, it processes data from a collaborative problem solving activity + named JUSThink [1, 2], i.e. JUSThink Dialogue and Actions Corpus data set that + is available from the Zenodo Repository, DOI: 10.5281/zenodo.4627104, and + reproduces the results and figures in [3]. In brief: &lt;strong>JUSThink + Dialogue and Actions Corpus&lt;/strong> contains transcripts, event logs, + and test responses of children aged 9 through 12, as they participate in the + JUSThink activity [1, 2] in pairs of two, to solve a problem on graphs together. + &lt;strong>The JUSThink activity and its study&lt;/strong> is first + described in [1], and elaborated with findings concerning the link between + children's learning, performance in the activity, and perception of self, the + other and the robot in [2]. &lt;strong>Alignment analysis in our work + [3]&lt;/strong> studies the participants' use of expressions that are + related to the task at hand, their follow up actions of these expressions, and + how it links to task success. &lt;strong>Changes in Release + v1.1.0:&lt;/strong> updated with the publication information, finalized + paper structure, research questions and hypotheses as in the published article: + U. Norman*&lt;em>, &lt;/em>T. Dinkar*, B. Bruno, and C. Clavel, + "Studying Alignment in a Collaborative Learning Activity via Automatic Methods: + The Link Between What We Say and Do," Dialogue &amp;amp; Discourse, 13(2), + 1–48. *Contributed equally to this work. 10.5210/dad.2022.201. + &lt;strong>Full Changelog:&lt;/strong> + https://github.com/chili-epfl/justhink-alignment-analysis/compare/v1.0.0...v1.1.0 + &lt;strong>2. Publications&lt;/strong> If you use this work in an + academic context, please cite the following publications: Norman*, U., Dinkar*, + T., Bruno, B., &amp;amp; Clavel, C. (2022). Studying Alignment in a + Collaborative Learning Activity via Automatic Methods: The Link Between What We + Say and Do. Dialogue &amp;amp; Discourse, 13(2), 1–48. *Contributed equally + to this work. https://doi.org/10.5210/dad.2022.201 Norman, U., Dinkar, T., + Bruno, B., &amp;amp; Clavel, C. (2021). JUSThink Alignment Analysis. In + Dialogue &amp;amp; Discourse (v1.1.0, Vol. 13, Number 2, pp. 1–48). Zenodo. + https://doi.org/10.5281/zenodo.6974562 &lt;strong>3. Content&lt;/strong> + The tools provided in this repository consists of 7 Jupyter Notebooks written in + Python 3, and two additional external tools utilised by the notebooks. + &lt;strong>3.1. Jupyter Notebooks&lt;/strong> We highlight that the + notebooks up until the last (i.e. to test the hypotheses + (tools/7_test_the_hypotheses.ipynb)) present a general pipeline to process event + logs, test responses and transcripts to extract measures of task performance, + learning outcomes, and measures of alignment. &lt;strong>Extract task + performance (and other features) from the logs + &lt;/strong>(tools/1_extract_performance_and_other_features_from_logs.ipynb): + Extracts various measures of task behaviour from the logs, at varying + granularities of the activity (i.e. the whole corpus, task, attempt, and turn + levels). In later notebooks, we focus on one of the features to estimate the + task performance of a team: (minimum) error. &lt;strong>Extract learning + outcomes from the test responses&lt;/strong> + (tools/2_extract_learning_gain_from_test_responses.ipynb): Extracts measures of + learning outcomes from the responses to the pre-test and the post-test. In later + notebooks, we focus on one of the features to estimate the learning outcome of a + team: relative learning gain [4] &lt;strong>Select and visualise a subset of + teams for transcription&lt;/strong> + (tools/3_visualise_transcribed_teams.ipynb): Visualises the transcribed teams + among the other teams in the feature space spanned by task performance and + learning outcome, as well as the distribution of their number of attempts and + turns. &lt;strong>Extract routines from transcripts&lt;/strong> + (tools/4_extract_routines_from_transcripts.ipynb) (uses dialign to extract + routines): Extracts routines of referring expressions that are "fixed", i.e. + become shared or established amongst interlocutors. &lt;strong>Combine + transcripts with logs&lt;/strong> + (tools/5_construct_the_corpus_by_combining_transcripts_with_logs.ipynb): Merges + transcripts with event logs to have a combined dialogue and actions corpus, to + be processed e.g. to detect follow-up actions. &lt;strong>Recognise + instructions and detect follow-up actions&lt;/strong> + (tools/6_recognise_instructions_detect_follow-up_actions.ipynb): Extracts + verbalised instruction such as "connect Mount Basel to Montreux", and pairs them + with the follow-up action that may &lt;em>match&lt;/em> (e.g. if the + other connects Basel to Montreux) or &lt;em>mismatch&lt;/em> (e.g. if + the other connects Basel to Neuchatel) with the instruction. &lt;strong>Test + the hypotheses &lt;/strong>in [3] (tools/7_test_the_hypotheses.ipynb) (uses + &lt;strong>effsize&lt;/strong> to estimate effect size, specifically + Cliff's Delta): Considers each research questions and hypotheses studied in [3] + and generates the results in [3]. &lt;strong>3.2. External + Tools&lt;/strong> &lt;strong>dialign tool&lt;/strong> to extract + routines, specifically Release 1.0 from dialign-1.0.zip:&lt;br> It extracts + routine expressions that are "shared" among the participants from transcripts. + &lt;br> It is used as an external module (in accordance with its CeCILL-B + License, see &lt;strong>License&lt;/strong>). &lt;strong>effsize + tool&lt;/strong> to compute estimators of effect size.&lt;br> We + specifically use it to compute Cliff's Delta, which quantifies the amount + difference between two groups of observations, by computing the Cliff's Delta + statistic.&lt;br> It is taken from project DABEST (see + &lt;strong>License&lt;/strong>). &lt;strong>4. Research Questions + and Hypotheses in [3]&lt;/strong> &lt;strong>RQ1 Lexical + alignment&lt;/strong>: How do the interlocutors &lt;em>use&lt;/em> + expressions related to the task? Is this associated with task success? + &lt;strong>H1.1&lt;/strong>: Task-specific referents become routine + early for more successful teams. &lt;strong>H1.2&lt;/strong>: Hesitation + phenomena are more likely to occur in the vicinity of priming and establishment + of task-specific referents for more successful teams. &lt;strong>RQ2 + Behavioural alignment&lt;/strong>: How do the interlocutors + &lt;em>follow up&lt;/em> these expressions with actions? Is this + associated with task success? &lt;strong>H2.1&lt;/strong>: Instructions + are more likely to be followed by a corresponding action early in the dialogue + for more successful teams. &lt;strong>H2.2&lt;/strong>: When + instructions are followed by a corresponding or a different action, the action + is more likely to be in the vicinity of information management phenomena for + more successful teams. The RQs and Hs are addressed in the notebook for testing + the hypotheses (i.e. tools/7_test_the_hypotheses.ipynb). + &lt;strong>Acknowledgements&lt;/strong> This project has received + funding from the European Union's Horizon 2020 research and innovation programme + under grant agreement No 765955. Namely, the ANIMATAS Project. + &lt;strong>License&lt;/strong> The whole package is under MIT License, + see the &lt;strong>LICENSE&lt;/strong> file. Classes under the + &lt;strong>tools/effsize&lt;/strong> package were taken from project + &lt;strong>DABEST&lt;/strong>, Copyright 2016-2020 Joses W. Ho. These + classes are licensed under the BSD 3-Clause Clear License. See + &lt;strong>tools/effsize/LICENSE&lt;/strong> file for additional + details. Classes under the &lt;strong>tools/dialign-1.0&lt;/strong> + package were taken from project &lt;strong>dialign&lt;/strong>. These + classes are licensed under the CeCILL-B License. This package is used as an + "external module", see&lt;strong> + tools/dialign-1.0/LICENSE.txt&lt;/strong> for additional + details. + {"references": ["[1] J. Nasir, U. Norman, B. Bruno, and P. Dillenbourg, + \"You Tell, I Do, and We Swap until we Connect All the Gold Mines!,\" ERCIM + News, vol. 2020, no. 120, 2020, [Online]. Available: + https://ercim-news.ercim.eu/en120/special/you-tell-i-do-and-we-swap-until-we-connect-all-the-gold-mines", + "[2] J. Nasir*, U. Norman*, B. Bruno, and P. Dillenbourg, \"When Positive + Perception of the Robot Has No Effect on Learning,\" in 2020 29th IEEE + International Conference on Robot and Human Interactive Communication (RO-MAN), + Aug. 2020, pp. 313\u2013320, doi: 10.1109/RO-MAN47096.2020.9223343", "[3] U. + Norman*, T. Dinkar*, B. Bruno, and C. Clavel, \"Studying Alignment in a + Collaborative Learning Activity via Automatic Methods: The Link Between What We + Say and Do,\" Dialogue &amp;amp; Discourse, vol. 13, no. 2, pp. 1\u201348, + Aug. 2022, doi: 10.5210/dad.2022.201.", "[4] M. Sangin, G. Molinari, M.-A. + N\u00fcssli, and P. Dillenbourg, \"Facilitating peer knowledge modeling: Effects + of a knowledge awareness tool on collaborative learning outcomes and + processes,\"\" Computers in Human Behavior, vol. 27, no. 3, pp. 1059\u20131067, + May 2011, doi: 10.1016/j.chb.2010.05.032."]} + alignment + situated + dialogue + collaborative + learning + spontaneous + speech + disfluency + mutual + understanding + + 2021-04-09 + 2022-08-08 + Zenodo + + + + + + + + + + + true + false + 0.8 + dedup-result-decisiontree-v3 + + + + + doi_dedup___::ae235765bbc422195a6c9f632b2d77eb + + 2104.04429 + + arXiv + + 2022-08-05 + Studying + Alignment in a Collaborative Learning Activity via Automatic Methods: + The Link Between What We Say and Do + + + 10.48550/arxiv.2104.04429 + 10.5210/dad.2022.201 + + + corda__h2020::c4515ebef538a734cf11f795347f5dac + Advancing intuitive human-machine interaction with human-like social + capabilities for education in schools + 765955 + + + ec__________::EC::H2020 + ec__________::EC::H2020::MSCA-ITN-ETN + + ANIMATAS + + + doi_dedup___::0a6314b0ed275d915f5b57a259375691 + 2021-03-22 + Zenodo + 10.5281/zenodo.4627104 + JUSThink Dialogue and Actions Corpus + 10.5281/zenodo.4627103 + + + + + + + Zenodo + 10.5281/zenodo.4675070 + JUSThink Alignment Analysis + 2021-04-09 + + + + 2022-08-08 + Zenodo + 10.5281/zenodo.6974562 + + JUSThink Alignment Analysis (v1.1.0) + + + JUSThink + Alignment Analysis (v1.1.0) + 2022-08-08 + Zenodo + 10.5281/zenodo.4675069 + + + + + + + 2022-08-08 + + 10.5281/zenodo.4675069 + + https://opensource.org/licenses/MIT + + https://doi.org/10.5281/zenodo.4675069 + + + + + + + 2022-08-08 + + 10.5281/zenodo.6974562 + + https://opensource.org/licenses/MIT + + https://doi.org/10.5281/zenodo.6974562 + + + + + + + 2021-04-09 + + 10.5281/zenodo.4675070 + + https://opensource.org/licenses/MIT + + https://doi.org/10.5281/zenodo.4675070 + + + + + + +
+
From 24ef301cc1d962cd2c613be6ad23e6634ebaa4f4 Mon Sep 17 00:00:00 2001 From: Claudio Atzori Date: Mon, 28 Nov 2022 09:53:23 +0100 Subject: [PATCH 242/535] [graph cleaning] patch the result's collectedfrom and hostedby identifiers according to the datasource master-duplicate mapping --- .../ReadDatasourceMasterDuplicateFromDB.java | 76 +++++++ .../common/action/model/MasterDuplicate.java | 29 +++ .../oa/graph/clean/MasterDuplicateAction.java | 45 ++++ .../graph/clean/cfhb/CleanCfHbSparkJob.java | 207 ++++++++++++++++++ .../oa/graph/clean/cfhb/IdCfHbMapping.java | 44 ++++ .../dhp/oa/graph/clean/oozie_app/workflow.xml | 202 ++++++++++++++++- .../oa/graph/datasourcemaster_parameters.json | 32 +++ .../oa/graph/input_clean_cfhb_parameters.json | 32 +++ .../dnetlib/dhp/oa/graph/raw/MappersTest.java | 3 +- .../dhp/oa/provision/EOSCFuture_Test.java | 105 ++++----- 10 files changed, 719 insertions(+), 56 deletions(-) create mode 100644 dhp-common/src/main/java/eu/dnetlib/dhp/common/action/ReadDatasourceMasterDuplicateFromDB.java create mode 100644 dhp-common/src/main/java/eu/dnetlib/dhp/common/action/model/MasterDuplicate.java create mode 100644 dhp-workflows/dhp-graph-mapper/src/main/java/eu/dnetlib/dhp/oa/graph/clean/MasterDuplicateAction.java create mode 100644 dhp-workflows/dhp-graph-mapper/src/main/java/eu/dnetlib/dhp/oa/graph/clean/cfhb/CleanCfHbSparkJob.java create mode 100644 dhp-workflows/dhp-graph-mapper/src/main/java/eu/dnetlib/dhp/oa/graph/clean/cfhb/IdCfHbMapping.java create mode 100644 dhp-workflows/dhp-graph-mapper/src/main/resources/eu/dnetlib/dhp/oa/graph/datasourcemaster_parameters.json create mode 100644 dhp-workflows/dhp-graph-mapper/src/main/resources/eu/dnetlib/dhp/oa/graph/input_clean_cfhb_parameters.json diff --git a/dhp-common/src/main/java/eu/dnetlib/dhp/common/action/ReadDatasourceMasterDuplicateFromDB.java b/dhp-common/src/main/java/eu/dnetlib/dhp/common/action/ReadDatasourceMasterDuplicateFromDB.java new file mode 100644 index 000000000..d9e8ced85 --- /dev/null +++ b/dhp-common/src/main/java/eu/dnetlib/dhp/common/action/ReadDatasourceMasterDuplicateFromDB.java @@ -0,0 +1,76 @@ + +package eu.dnetlib.dhp.common.action; + +import java.io.BufferedWriter; +import java.io.IOException; +import java.io.OutputStreamWriter; +import java.nio.charset.StandardCharsets; +import java.sql.ResultSet; +import java.sql.SQLException; + +import org.apache.commons.lang3.StringUtils; +import org.apache.hadoop.conf.Configuration; +import org.apache.hadoop.fs.FSDataOutputStream; +import org.apache.hadoop.fs.FileSystem; +import org.apache.hadoop.fs.Path; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; + +import com.fasterxml.jackson.databind.ObjectMapper; + +import eu.dnetlib.dhp.common.DbClient; +import eu.dnetlib.dhp.common.action.model.MasterDuplicate; +import eu.dnetlib.dhp.schema.oaf.utils.OafMapperUtils; + +public class ReadDatasourceMasterDuplicateFromDB { + + private static final Logger log = LoggerFactory.getLogger(ReadDatasourceMasterDuplicateFromDB.class); + + private static final ObjectMapper OBJECT_MAPPER = new ObjectMapper(); + + private static final String QUERY = "SELECT id as master, duplicate FROM dsm_dedup_services;"; + + public static int execute(String dbUrl, String dbUser, String dbPassword, String hdfsPath, String hdfsNameNode) + throws IOException { + int count = 0; + try (DbClient dbClient = new DbClient(dbUrl, dbUser, dbPassword)) { + Configuration conf = new Configuration(); + conf.set("fs.defaultFS", hdfsNameNode); + FileSystem fileSystem = FileSystem.get(conf); + FSDataOutputStream fos = fileSystem.create(new Path(hdfsPath)); + + log.info("running query: {}", QUERY); + log.info("storing results in: {}", hdfsPath); + + try (BufferedWriter writer = new BufferedWriter(new OutputStreamWriter(fos, StandardCharsets.UTF_8))) { + dbClient.processResults(QUERY, rs -> writeMap(datasourceMasterMap(rs), writer)); + count++; + } + } + return count; + } + + private static MasterDuplicate datasourceMasterMap(ResultSet rs) { + try { + MasterDuplicate md = new MasterDuplicate(); + final String master = rs.getString("master"); + final String duplicate = rs.getString("duplicate"); + md.setMaster(OafMapperUtils.createOpenaireId(10, master, true)); + md.setDuplicate(OafMapperUtils.createOpenaireId(10, duplicate, true)); + + return md; + } catch (final SQLException e) { + throw new RuntimeException(e); + } + } + + private static void writeMap(final MasterDuplicate dm, final BufferedWriter writer) { + try { + writer.write(OBJECT_MAPPER.writeValueAsString(dm)); + writer.newLine(); + } catch (final IOException e) { + throw new RuntimeException(e); + } + } + +} diff --git a/dhp-common/src/main/java/eu/dnetlib/dhp/common/action/model/MasterDuplicate.java b/dhp-common/src/main/java/eu/dnetlib/dhp/common/action/model/MasterDuplicate.java new file mode 100644 index 000000000..b3e0d2aaa --- /dev/null +++ b/dhp-common/src/main/java/eu/dnetlib/dhp/common/action/model/MasterDuplicate.java @@ -0,0 +1,29 @@ + +package eu.dnetlib.dhp.common.action.model; + +import java.io.Serializable; + +/** + * @author miriam.baglioni + * @Date 21/07/22 + */ +public class MasterDuplicate implements Serializable { + private String duplicate; + private String master; + + public String getDuplicate() { + return duplicate; + } + + public void setDuplicate(String duplicate) { + this.duplicate = duplicate; + } + + public String getMaster() { + return master; + } + + public void setMaster(String master) { + this.master = master; + } +} diff --git a/dhp-workflows/dhp-graph-mapper/src/main/java/eu/dnetlib/dhp/oa/graph/clean/MasterDuplicateAction.java b/dhp-workflows/dhp-graph-mapper/src/main/java/eu/dnetlib/dhp/oa/graph/clean/MasterDuplicateAction.java new file mode 100644 index 000000000..8bf36ff82 --- /dev/null +++ b/dhp-workflows/dhp-graph-mapper/src/main/java/eu/dnetlib/dhp/oa/graph/clean/MasterDuplicateAction.java @@ -0,0 +1,45 @@ + +package eu.dnetlib.dhp.oa.graph.clean; + +import org.apache.commons.io.IOUtils; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; + +import eu.dnetlib.dhp.application.ArgumentApplicationParser; +import eu.dnetlib.dhp.common.action.ReadDatasourceMasterDuplicateFromDB; + +public class MasterDuplicateAction { + + private static final Logger log = LoggerFactory.getLogger(MasterDuplicateAction.class); + + public static void main(final String[] args) throws Exception { + final ArgumentApplicationParser parser = new ArgumentApplicationParser( + IOUtils + .toString( + MasterDuplicateAction.class + .getResourceAsStream( + "/eu/dnetlib/dhp/oa/graph/datasourcemaster_parameters.json"))); + + parser.parseArgument(args); + + final String dbUrl = parser.get("postgresUrl"); + log.info("postgresUrl: {}", dbUrl); + + final String dbUser = parser.get("postgresUser"); + log.info("postgresUser: {}", dbUser); + + final String dbPassword = parser.get("postgresPassword"); + log.info("postgresPassword: {}", dbPassword); + + final String hdfsPath = parser.get("hdfsPath"); + log.info("hdfsPath: {}", hdfsPath); + + final String hdfsNameNode = parser.get("hdfsNameNode"); + log.info("hdfsNameNode: {}", hdfsNameNode); + + int rows = ReadDatasourceMasterDuplicateFromDB.execute(dbUrl, dbUser, dbPassword, hdfsPath, hdfsNameNode); + + log.info("written {} rows", rows); + } + +} diff --git a/dhp-workflows/dhp-graph-mapper/src/main/java/eu/dnetlib/dhp/oa/graph/clean/cfhb/CleanCfHbSparkJob.java b/dhp-workflows/dhp-graph-mapper/src/main/java/eu/dnetlib/dhp/oa/graph/clean/cfhb/CleanCfHbSparkJob.java new file mode 100644 index 000000000..ad7e252f6 --- /dev/null +++ b/dhp-workflows/dhp-graph-mapper/src/main/java/eu/dnetlib/dhp/oa/graph/clean/cfhb/CleanCfHbSparkJob.java @@ -0,0 +1,207 @@ + +package eu.dnetlib.dhp.oa.graph.clean.cfhb; + +import static eu.dnetlib.dhp.common.SparkSessionSupport.runWithSparkSession; + +import java.util.Objects; +import java.util.Optional; +import java.util.stream.Stream; + +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.api.java.function.MapFunction; +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.ObjectMapper; + +import eu.dnetlib.dhp.application.ArgumentApplicationParser; +import eu.dnetlib.dhp.common.action.model.MasterDuplicate; +import eu.dnetlib.dhp.oa.graph.clean.country.CleanCountrySparkJob; +import eu.dnetlib.dhp.schema.oaf.Instance; +import eu.dnetlib.dhp.schema.oaf.KeyValue; +import eu.dnetlib.dhp.schema.oaf.Result; +import scala.Tuple2; + +public class CleanCfHbSparkJob { + + private static final Logger log = LoggerFactory.getLogger(CleanCfHbSparkJob.class); + + private static final ObjectMapper OBJECT_MAPPER = new ObjectMapper(); + + public static void main(String[] args) throws Exception { + + String jsonConfiguration = IOUtils + .toString( + CleanCountrySparkJob.class + .getResourceAsStream( + "/eu/dnetlib/dhp/oa/graph/input_clean_cfhb_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 workingPath = parser.get("workingPath"); + log.info("workingPath: {}", workingPath); + + String outputPath = parser.get("outputPath"); + log.info("outputPath: {}", outputPath); + + String masterDuplicatePath = parser.get("masterDuplicatePath"); + log.info("masterDuplicatePath: {}", masterDuplicatePath); + + String graphTableClassName = parser.get("graphTableClassName"); + log.info("graphTableClassName: {}", graphTableClassName); + + Class entityClazz = (Class) Class.forName(graphTableClassName); + + SparkConf conf = new SparkConf(); + runWithSparkSession( + conf, + isSparkSessionManaged, + spark -> { + cleanCfHb( + spark, inputPath, entityClazz, workingPath, masterDuplicatePath, outputPath); + }); + } + + private static void cleanCfHb(SparkSession spark, String inputPath, Class entityClazz, + String workingPath, String masterDuplicatePath, String outputPath) { + // read the master-duplicate tuples + Dataset md = spark + .read() + .textFile(masterDuplicatePath) + .map(as(MasterDuplicate.class), Encoders.bean(MasterDuplicate.class)); + + // read the result table + Dataset res = spark + .read() + .textFile(inputPath) + .map(as(entityClazz), Encoders.bean(entityClazz)); + + // prepare the resolved CF|HB references with the corresponding EMPTY master ID + Dataset resolved = res + .flatMap( + (FlatMapFunction) r -> Stream + .concat( + r.getCollectedfrom().stream().map(KeyValue::getKey), + Stream + .concat( + r.getInstance().stream().map(Instance::getHostedby).map(KeyValue::getKey), + r.getInstance().stream().map(Instance::getCollectedfrom).map(KeyValue::getKey))) + .distinct() + .map(s -> asIdCfHbMapping(r.getId(), s)) + .iterator(), + Encoders.bean(IdCfHbMapping.class)); + + final String resolvedPath = workingPath + "/cfHbResolved"; + + // set the EMPTY master ID and save it aside + resolved + .joinWith(md, resolved.col("cfhb").equalTo(md.col("duplicate"))) + .map((MapFunction, IdCfHbMapping>) t -> { + t._1().setMaster(t._2().getMaster()); + return t._1(); + }, Encoders.bean(IdCfHbMapping.class)) + .write() + .mode(SaveMode.Overwrite) + .parquet(resolvedPath); + + // read again the resolved CF|HB mapping + Dataset resolvedDS = spark + .read() + .load(resolvedPath) + .as(Encoders.bean(IdCfHbMapping.class)); + + // Join the results with the resolved CF|HB mapping, apply the mapping and save it + res + .joinWith(resolvedDS, res.col("id").equalTo(resolved.col("resultId")), "left") + .groupByKey((MapFunction, String>) t -> t._1().getId(), Encoders.STRING()) + .agg(new IdCfHbMappingAggregator(entityClazz).toColumn()) + .write() + .mode(SaveMode.Overwrite) + .option("compression", "gzip") + .json(outputPath); + } + + public static class IdCfHbMappingAggregator extends Aggregator { + + private final Class entityClazz; + + public IdCfHbMappingAggregator(Class entityClazz) { + this.entityClazz = entityClazz; + } + + @Override + public T zero() { + try { + return entityClazz.newInstance(); + } catch (InstantiationException | IllegalAccessException e) { + throw new RuntimeException(e); + } + } + + @Override + public T reduce(T r, IdCfHbMapping a) { + if (Objects.isNull(a) && StringUtils.isBlank(a.getMaster())) { + return r; + } + r.getCollectedfrom().forEach(kv -> updateKey(kv, a)); + r.getInstance().forEach(i -> { + updateKey(i.getHostedby(), a); + updateKey(i.getCollectedfrom(), a); + }); + return r; + } + + @Override + public T merge(T b1, T b2) { + if (Objects.isNull(b1.getId())) { + return b2; + } + return b1; + } + + @Override + public T finish(T r) { + return r; + } + + private void updateKey(final KeyValue kv, final IdCfHbMapping a) { + if (kv.getKey().equals(a.getCfhb())) { + kv.setKey(a.getMaster()); + } + } + + @Override + public Encoder bufferEncoder() { + return Encoders.bean(entityClazz); + } + + @Override + public Encoder outputEncoder() { + return Encoders.bean(entityClazz); + } + } + + private static IdCfHbMapping asIdCfHbMapping(String resultId, String cfHb) { + IdCfHbMapping m = new IdCfHbMapping(resultId); + m.setCfhb(cfHb); + return m; + } + + private static MapFunction as(Class clazz) { + return s -> OBJECT_MAPPER.readValue(s, clazz); + } +} diff --git a/dhp-workflows/dhp-graph-mapper/src/main/java/eu/dnetlib/dhp/oa/graph/clean/cfhb/IdCfHbMapping.java b/dhp-workflows/dhp-graph-mapper/src/main/java/eu/dnetlib/dhp/oa/graph/clean/cfhb/IdCfHbMapping.java new file mode 100644 index 000000000..16d1a2613 --- /dev/null +++ b/dhp-workflows/dhp-graph-mapper/src/main/java/eu/dnetlib/dhp/oa/graph/clean/cfhb/IdCfHbMapping.java @@ -0,0 +1,44 @@ + +package eu.dnetlib.dhp.oa.graph.clean.cfhb; + +import java.io.Serializable; + +public class IdCfHbMapping implements Serializable { + + private String resultid; + + private String cfhb; + + private String master; + + public IdCfHbMapping() { + } + + public IdCfHbMapping(String id) { + this.resultid = id; + } + + public String getResultid() { + return resultid; + } + + public void setResultid(String resultid) { + this.resultid = resultid; + } + + public String getCfhb() { + return cfhb; + } + + public void setCfhb(String cfhb) { + this.cfhb = cfhb; + } + + public String getMaster() { + return master; + } + + public void setMaster(String master) { + this.master = master; + } +} diff --git a/dhp-workflows/dhp-graph-mapper/src/main/resources/eu/dnetlib/dhp/oa/graph/clean/oozie_app/workflow.xml b/dhp-workflows/dhp-graph-mapper/src/main/resources/eu/dnetlib/dhp/oa/graph/clean/oozie_app/workflow.xml index 6435d5131..e717fac0f 100644 --- a/dhp-workflows/dhp-graph-mapper/src/main/resources/eu/dnetlib/dhp/oa/graph/clean/oozie_app/workflow.xml +++ b/dhp-workflows/dhp-graph-mapper/src/main/resources/eu/dnetlib/dhp/oa/graph/clean/oozie_app/workflow.xml @@ -317,13 +317,13 @@ - + yarn @@ -434,7 +434,6 @@ - yarn @@ -460,13 +459,13 @@ - + yarn @@ -583,7 +582,202 @@ - + + + + + ${wf:conf('shouldClean') eq true} + + + + + + + eu.dnetlib.dhp.oa.graph.clean.MasterDuplicateAction + --postgresUrl${postgresURL} + --postgresUser${postgresUser} + --postgresPassword${postgresPassword} + --hdfsPath${workingDir}/masterduplicate + --hdfsNameNode${nameNode} + + + + + + + + + + + + + + + yarn + cluster + patch publication cfhb + eu.dnetlib.dhp.oa.graph.clean.cfhb.CleanCfHbSparkJob + 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${graphOutputPath}/publication + --outputPath${workingPath}/cfHbPatched/publication + --graphTableClassNameeu.dnetlib.dhp.schema.oaf.Publication + --workingDir${workingDir}/working/publication + --masterDuplicatePath${workingDir}/masterduplicate + + + + + + + + yarn + cluster + patch dataset cfhb + eu.dnetlib.dhp.oa.graph.clean.cfhb.CleanCfHbSparkJob + 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${graphOutputPath}/dataset + --outputPath${workingPath}/cfHbPatched/dataset + --graphTableClassNameeu.dnetlib.dhp.schema.oaf.Dataset + --workingDir${workingDir}/working/dataset + --masterDuplicatePath${workingDir}/masterduplicate + + + + + + + + yarn + cluster + patch otherresearchproduct cfhb + eu.dnetlib.dhp.oa.graph.clean.cfhb.CleanCfHbSparkJob + 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${graphOutputPath}/otherresearchproduct + --outputPath${workingPath}/cfHbPatched/otherresearchproduct + --graphTableClassNameeu.dnetlib.dhp.schema.oaf.OtherResearchProduct + --workingDir${workingDir}/working/otherresearchproduct + --masterDuplicatePath${workingDir}/masterduplicate + + + + + + + + yarn + cluster + patch software cfhb + eu.dnetlib.dhp.oa.graph.clean.cfhb.CleanCfHbSparkJob + 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${graphOutputPath}/software + --outputPath${workingPath}/cfHbPatched/software + --graphTableClassNameeu.dnetlib.dhp.schema.oaf.Software + --workingDir${workingDir}/working/software + --masterDuplicatePath${workingDir}/masterduplicate + + + + + + + + + + + + + + + + + + + + ${workingPath}/cfHbPatched/publication + ${graphOutputPath}/publication + + + + + + + + + + + ${workingPath}/cfHbPatched/dataset + ${graphOutputPath}/dataset + + + + + + + + + + + ${workingPath}/cfHbPatched/otherresearchproduct + ${graphOutputPath}/otherresearchproduct + + + + + + + + + + + ${workingPath}/cfHbPatched/software + ${graphOutputPath}/software + + + + + + + \ No newline at end of file diff --git a/dhp-workflows/dhp-graph-mapper/src/main/resources/eu/dnetlib/dhp/oa/graph/datasourcemaster_parameters.json b/dhp-workflows/dhp-graph-mapper/src/main/resources/eu/dnetlib/dhp/oa/graph/datasourcemaster_parameters.json new file mode 100644 index 000000000..fbe2cca10 --- /dev/null +++ b/dhp-workflows/dhp-graph-mapper/src/main/resources/eu/dnetlib/dhp/oa/graph/datasourcemaster_parameters.json @@ -0,0 +1,32 @@ +[ + { + "paramName": "pu", + "paramLongName": "postgresUrl", + "paramDescription": "the jdbc url to the postgres", + "paramRequired": true + }, + { + "paramName": "uid", + "paramLongName": "postgresUser", + "paramDescription": "the postgres user", + "paramRequired": true + }, + { + "paramName": "pwd", + "paramLongName": "postgresPassword", + "paramDescription": "the postgres password=", + "paramRequired": true + }, + { + "paramName": "p", + "paramLongName": "hdfsPath", + "paramDescription": "the target path on HDFS", + "paramRequired": true + }, + { + "paramName": "nn", + "paramLongName": "hdfsNameNode", + "paramDescription": "the HDFS nameNode", + "paramRequired": true + } +] \ No newline at end of file diff --git a/dhp-workflows/dhp-graph-mapper/src/main/resources/eu/dnetlib/dhp/oa/graph/input_clean_cfhb_parameters.json b/dhp-workflows/dhp-graph-mapper/src/main/resources/eu/dnetlib/dhp/oa/graph/input_clean_cfhb_parameters.json new file mode 100644 index 000000000..8b8a5f70e --- /dev/null +++ b/dhp-workflows/dhp-graph-mapper/src/main/resources/eu/dnetlib/dhp/oa/graph/input_clean_cfhb_parameters.json @@ -0,0 +1,32 @@ +[ + { + "paramName": "issm", + "paramLongName": "isSparkSessionManaged", + "paramDescription": "when true will stop SparkSession after job execution", + "paramRequired": false + }, + { + "paramName": "in", + "paramLongName": "inputPath", + "paramDescription": "the path to the graph data dump to read", + "paramRequired": true + }, + { + "paramName": "out", + "paramLongName": "outputPath", + "paramDescription": "the path to store the output graph", + "paramRequired": true + }, + { + "paramName": "class", + "paramLongName": "graphTableClassName", + "paramDescription": "class name moelling the graph table", + "paramRequired": true + }, + { + "paramName": "md", + "paramLongName": "datasourceMasterDuplicate", + "paramDescription": "path to the file on HDFS holding the datasource id tuples [master, duplicate]", + "paramRequired": true + } +] 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 3e35021c8..ad6ceef54 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 @@ -1002,7 +1002,8 @@ class MappersTest { @Test void testEOSCFuture_ROHub() throws IOException { - final String xml = IOUtils.toString(Objects.requireNonNull(getClass().getResourceAsStream("photic-zone-transformed.xml"))); + final String xml = IOUtils + .toString(Objects.requireNonNull(getClass().getResourceAsStream("photic-zone-transformed.xml"))); final List list = new OdfToOafMapper(vocs, false, true).processMdRecord(xml); final OtherResearchProduct rocrate = (OtherResearchProduct) list.get(0); assertNotNull(rocrate.getEoscifguidelines()); diff --git a/dhp-workflows/dhp-graph-provision/src/test/java/eu/dnetlib/dhp/oa/provision/EOSCFuture_Test.java b/dhp-workflows/dhp-graph-provision/src/test/java/eu/dnetlib/dhp/oa/provision/EOSCFuture_Test.java index 08bf19fe4..3e1a501d1 100644 --- a/dhp-workflows/dhp-graph-provision/src/test/java/eu/dnetlib/dhp/oa/provision/EOSCFuture_Test.java +++ b/dhp-workflows/dhp-graph-provision/src/test/java/eu/dnetlib/dhp/oa/provision/EOSCFuture_Test.java @@ -1,13 +1,14 @@ + package eu.dnetlib.dhp.oa.provision; -import com.fasterxml.jackson.databind.DeserializationFeature; -import com.fasterxml.jackson.databind.ObjectMapper; -import eu.dnetlib.dhp.oa.provision.model.JoinedEntity; -import eu.dnetlib.dhp.oa.provision.utils.ContextMapper; -import eu.dnetlib.dhp.oa.provision.utils.StreamingInputDocumentFactory; -import eu.dnetlib.dhp.oa.provision.utils.XmlRecordFactory; -import eu.dnetlib.dhp.schema.oaf.OtherResearchProduct; -import eu.dnetlib.dhp.utils.saxon.SaxonTransformerFactory; +import static org.junit.jupiter.api.Assertions.assertNotNull; + +import java.io.IOException; +import java.io.StringReader; + +import javax.xml.transform.Transformer; +import javax.xml.transform.TransformerException; + import org.apache.commons.io.IOUtils; import org.apache.solr.client.solrj.util.ClientUtils; import org.apache.solr.common.SolrInputDocument; @@ -18,71 +19,73 @@ import org.junit.jupiter.api.Assertions; import org.junit.jupiter.api.BeforeEach; import org.junit.jupiter.api.Test; -import javax.xml.transform.Transformer; -import javax.xml.transform.TransformerException; -import java.io.IOException; -import java.io.StringReader; +import com.fasterxml.jackson.databind.DeserializationFeature; +import com.fasterxml.jackson.databind.ObjectMapper; -import static org.junit.jupiter.api.Assertions.assertNotNull; +import eu.dnetlib.dhp.oa.provision.model.JoinedEntity; +import eu.dnetlib.dhp.oa.provision.utils.ContextMapper; +import eu.dnetlib.dhp.oa.provision.utils.StreamingInputDocumentFactory; +import eu.dnetlib.dhp.oa.provision.utils.XmlRecordFactory; +import eu.dnetlib.dhp.schema.oaf.OtherResearchProduct; +import eu.dnetlib.dhp.utils.saxon.SaxonTransformerFactory; public class EOSCFuture_Test { - public static ObjectMapper OBJECT_MAPPER = new ObjectMapper() - .configure(DeserializationFeature.FAIL_ON_UNKNOWN_PROPERTIES, false); + public static ObjectMapper OBJECT_MAPPER = new ObjectMapper() + .configure(DeserializationFeature.FAIL_ON_UNKNOWN_PROPERTIES, false); - public static final String VERSION = "2021-04-15T10:05:53Z"; - public static final String DSID = "b9ee796a-c49f-4473-a708-e7d67b84c16d_SW5kZXhEU1Jlc291cmNlcy9JbmRleERTUmVzb3VyY2VUeXBl"; + public static final String VERSION = "2021-04-15T10:05:53Z"; + public static final String DSID = "b9ee796a-c49f-4473-a708-e7d67b84c16d_SW5kZXhEU1Jlc291cmNlcy9JbmRleERTUmVzb3VyY2VUeXBl"; - private ContextMapper contextMapper; + private ContextMapper contextMapper; - @BeforeEach - public void setUp() { - contextMapper = new ContextMapper(); - } + @BeforeEach + public void setUp() { + contextMapper = new ContextMapper(); + } + @Test + public void testEOSC_ROHub() throws IOException, DocumentException, TransformerException { - @Test - public void testEOSC_ROHub() throws IOException, DocumentException, TransformerException { + final ContextMapper contextMapper = new ContextMapper(); - final ContextMapper contextMapper = new ContextMapper(); + final XmlRecordFactory xmlRecordFactory = new XmlRecordFactory(contextMapper, false, + XmlConverterJob.schemaLocation); - final XmlRecordFactory xmlRecordFactory = new XmlRecordFactory(contextMapper, false, - XmlConverterJob.schemaLocation); + final OtherResearchProduct p = OBJECT_MAPPER + .readValue( + IOUtils.toString(getClass().getResourceAsStream("eosc-future/photic-zone.json")), + OtherResearchProduct.class); - final OtherResearchProduct p = OBJECT_MAPPER - .readValue(IOUtils.toString(getClass().getResourceAsStream("eosc-future/photic-zone.json")), OtherResearchProduct.class); + final String xml = xmlRecordFactory.build(new JoinedEntity<>(p)); - final String xml = xmlRecordFactory.build(new JoinedEntity<>(p)); + assertNotNull(xml); - assertNotNull(xml); + final Document doc = new SAXReader().read(new StringReader(xml)); - final Document doc = new SAXReader().read(new StringReader(xml)); + assertNotNull(doc); + System.out.println(doc.asXML()); - assertNotNull(doc); - System.out.println(doc.asXML()); + testRecordTransformation(xml); + } + private void 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")); - testRecordTransformation(xml); - } + final String transformer = XmlIndexingJob.getLayoutTransformer("DMF", fields, xslt); + final Transformer tr = SaxonTransformerFactory.newInstance(transformer); - private void 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")); + final String indexRecordXML = XmlIndexingJob.toIndexRecord(tr, record); - final String transformer = XmlIndexingJob.getLayoutTransformer("DMF", fields, xslt); + final SolrInputDocument solrDoc = new StreamingInputDocumentFactory(VERSION, DSID) + .parseDocument(indexRecordXML); - final Transformer tr = SaxonTransformerFactory.newInstance(transformer); + final String xmlDoc = ClientUtils.toXML(solrDoc); - final String indexRecordXML = XmlIndexingJob.toIndexRecord(tr, record); - - final SolrInputDocument solrDoc = new StreamingInputDocumentFactory(VERSION, DSID) - .parseDocument(indexRecordXML); - - final String xmlDoc = ClientUtils.toXML(solrDoc); - - Assertions.assertNotNull(xmlDoc); - System.out.println(xmlDoc); - } + Assertions.assertNotNull(xmlDoc); + System.out.println(xmlDoc); + } } From 11695ba649f778646ea7811f8888993532230169 Mon Sep 17 00:00:00 2001 From: Claudio Atzori Date: Mon, 28 Nov 2022 10:18:43 +0100 Subject: [PATCH 243/535] [graph cleaning] patch also the result's collectedfrom and hostedby datasource name according to the datasource master-duplicate mapping --- .../ReadDatasourceMasterDuplicateFromDB.java | 19 +++++++----- .../common/action/model/MasterDuplicate.java | 29 ++++++++++++------- .../graph/clean/cfhb/CleanCfHbSparkJob.java | 16 +++++----- .../oa/graph/clean/cfhb/IdCfHbMapping.java | 20 +++++++++---- 4 files changed, 55 insertions(+), 29 deletions(-) diff --git a/dhp-common/src/main/java/eu/dnetlib/dhp/common/action/ReadDatasourceMasterDuplicateFromDB.java b/dhp-common/src/main/java/eu/dnetlib/dhp/common/action/ReadDatasourceMasterDuplicateFromDB.java index d9e8ced85..5d39216f1 100644 --- a/dhp-common/src/main/java/eu/dnetlib/dhp/common/action/ReadDatasourceMasterDuplicateFromDB.java +++ b/dhp-common/src/main/java/eu/dnetlib/dhp/common/action/ReadDatasourceMasterDuplicateFromDB.java @@ -8,7 +8,6 @@ import java.nio.charset.StandardCharsets; import java.sql.ResultSet; import java.sql.SQLException; -import org.apache.commons.lang3.StringUtils; import org.apache.hadoop.conf.Configuration; import org.apache.hadoop.fs.FSDataOutputStream; import org.apache.hadoop.fs.FileSystem; @@ -28,7 +27,9 @@ public class ReadDatasourceMasterDuplicateFromDB { private static final ObjectMapper OBJECT_MAPPER = new ObjectMapper(); - private static final String QUERY = "SELECT id as master, duplicate FROM dsm_dedup_services;"; + private static final String QUERY = "SELECT distinct dd.id as masterId, d.officialname as masterName, dd.duplicate as duplicateId " + + + "FROM dsm_dedup_services dd join dsm_services d on (dd.id = d.id);"; public static int execute(String dbUrl, String dbUser, String dbPassword, String hdfsPath, String hdfsNameNode) throws IOException { @@ -52,11 +53,15 @@ public class ReadDatasourceMasterDuplicateFromDB { private static MasterDuplicate datasourceMasterMap(ResultSet rs) { try { - MasterDuplicate md = new MasterDuplicate(); - final String master = rs.getString("master"); - final String duplicate = rs.getString("duplicate"); - md.setMaster(OafMapperUtils.createOpenaireId(10, master, true)); - md.setDuplicate(OafMapperUtils.createOpenaireId(10, duplicate, true)); + final MasterDuplicate md = new MasterDuplicate(); + + final String duplicateId = rs.getString("duplicateId"); + final String masterId = rs.getString("masterId"); + final String masterName = rs.getString("masterName"); + + md.setDuplicateId(OafMapperUtils.createOpenaireId(10, duplicateId, true)); + md.setMasterId(OafMapperUtils.createOpenaireId(10, masterId, true)); + md.setMasterName(masterName); return md; } catch (final SQLException e) { diff --git a/dhp-common/src/main/java/eu/dnetlib/dhp/common/action/model/MasterDuplicate.java b/dhp-common/src/main/java/eu/dnetlib/dhp/common/action/model/MasterDuplicate.java index b3e0d2aaa..12a4407c4 100644 --- a/dhp-common/src/main/java/eu/dnetlib/dhp/common/action/model/MasterDuplicate.java +++ b/dhp-common/src/main/java/eu/dnetlib/dhp/common/action/model/MasterDuplicate.java @@ -8,22 +8,31 @@ import java.io.Serializable; * @Date 21/07/22 */ public class MasterDuplicate implements Serializable { - private String duplicate; - private String master; + private String duplicateId; + private String masterId; + private String masterName; - public String getDuplicate() { - return duplicate; + public String getDuplicateId() { + return duplicateId; } - public void setDuplicate(String duplicate) { - this.duplicate = duplicate; + public void setDuplicateId(String duplicateId) { + this.duplicateId = duplicateId; } - public String getMaster() { - return master; + public String getMasterId() { + return masterId; } - public void setMaster(String master) { - this.master = master; + public void setMasterId(String masterId) { + this.masterId = masterId; + } + + public String getMasterName() { + return masterName; + } + + public void setMasterName(String masterName) { + this.masterName = masterName; } } diff --git a/dhp-workflows/dhp-graph-mapper/src/main/java/eu/dnetlib/dhp/oa/graph/clean/cfhb/CleanCfHbSparkJob.java b/dhp-workflows/dhp-graph-mapper/src/main/java/eu/dnetlib/dhp/oa/graph/clean/cfhb/CleanCfHbSparkJob.java index ad7e252f6..d35dbc7c1 100644 --- a/dhp-workflows/dhp-graph-mapper/src/main/java/eu/dnetlib/dhp/oa/graph/clean/cfhb/CleanCfHbSparkJob.java +++ b/dhp-workflows/dhp-graph-mapper/src/main/java/eu/dnetlib/dhp/oa/graph/clean/cfhb/CleanCfHbSparkJob.java @@ -78,6 +78,7 @@ public class CleanCfHbSparkJob { private static void cleanCfHb(SparkSession spark, String inputPath, Class entityClazz, String workingPath, String masterDuplicatePath, String outputPath) { + // read the master-duplicate tuples Dataset md = spark .read() @@ -111,7 +112,7 @@ public class CleanCfHbSparkJob { resolved .joinWith(md, resolved.col("cfhb").equalTo(md.col("duplicate"))) .map((MapFunction, IdCfHbMapping>) t -> { - t._1().setMaster(t._2().getMaster()); + t._1().setMasterId(t._2().getMasterId()); return t._1(); }, Encoders.bean(IdCfHbMapping.class)) .write() @@ -154,13 +155,13 @@ public class CleanCfHbSparkJob { @Override public T reduce(T r, IdCfHbMapping a) { - if (Objects.isNull(a) && StringUtils.isBlank(a.getMaster())) { + if (Objects.isNull(a) && StringUtils.isBlank(a.getMasterId())) { return r; } - r.getCollectedfrom().forEach(kv -> updateKey(kv, a)); + r.getCollectedfrom().forEach(kv -> updateKeyValue(kv, a)); r.getInstance().forEach(i -> { - updateKey(i.getHostedby(), a); - updateKey(i.getCollectedfrom(), a); + updateKeyValue(i.getHostedby(), a); + updateKeyValue(i.getCollectedfrom(), a); }); return r; } @@ -178,9 +179,10 @@ public class CleanCfHbSparkJob { return r; } - private void updateKey(final KeyValue kv, final IdCfHbMapping a) { + private void updateKeyValue(final KeyValue kv, final IdCfHbMapping a) { if (kv.getKey().equals(a.getCfhb())) { - kv.setKey(a.getMaster()); + kv.setKey(a.getMasterId()); + kv.setValue(a.getMasterName()); } } diff --git a/dhp-workflows/dhp-graph-mapper/src/main/java/eu/dnetlib/dhp/oa/graph/clean/cfhb/IdCfHbMapping.java b/dhp-workflows/dhp-graph-mapper/src/main/java/eu/dnetlib/dhp/oa/graph/clean/cfhb/IdCfHbMapping.java index 16d1a2613..cb4e1b5e6 100644 --- a/dhp-workflows/dhp-graph-mapper/src/main/java/eu/dnetlib/dhp/oa/graph/clean/cfhb/IdCfHbMapping.java +++ b/dhp-workflows/dhp-graph-mapper/src/main/java/eu/dnetlib/dhp/oa/graph/clean/cfhb/IdCfHbMapping.java @@ -9,7 +9,9 @@ public class IdCfHbMapping implements Serializable { private String cfhb; - private String master; + private String masterId; + + private String masterName; public IdCfHbMapping() { } @@ -34,11 +36,19 @@ public class IdCfHbMapping implements Serializable { this.cfhb = cfhb; } - public String getMaster() { - return master; + public String getMasterId() { + return masterId; } - public void setMaster(String master) { - this.master = master; + public void setMasterId(String masterId) { + this.masterId = masterId; + } + + public String getMasterName() { + return masterName; + } + + public void setMasterName(String masterName) { + this.masterName = masterName; } } From 9c70c5dbd636fc2139943610b5838075f071ebec Mon Sep 17 00:00:00 2001 From: "miriam.baglioni" Date: Mon, 28 Nov 2022 14:51:20 +0100 Subject: [PATCH 244/535] [Bulk Tag horizontal] added new path in definition of constraint (to recognize fos subjects) - changed test and resource class to test this new aspect --- .../community/QueryInformationSystem.java | 3 + .../dnetlib/dhp/bulktag/BulkTagJobTest.java | 8 +- .../communityconfiguration/tagging_conf.xml | 85 +++++++++++++++++++ .../dataset_10.json | 4 +- 4 files changed, 95 insertions(+), 5 deletions(-) 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 index f06c0d47a..ec89edc63 100644 --- 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 @@ -26,6 +26,9 @@ public class QueryInformationSystem { + " return " + " " + " { $x//CONFIGURATION/context/@id} " + + " " + + "{$x//CONFIGURATION/context/param[./@name='advancedConstraints']/text() }" + + "" + " " + " {for $y in tokenize($subj,',') " + " return " 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 eaf34c824..364e53376 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 @@ -46,7 +46,9 @@ public class BulkTagJobTest { + " \"orcid\" : \"$['author'][*]['pid'][*][?(@['key']=='ORCID')]['value']\"," + " \"contributor\" : \"$['contributor'][*]['value']\"," + " \"description\" : \"$['description'][*]['value']\", " - + " \"subject\" :\"$['subject'][*]['value']\" }"; + + " \"subject\" :\"$['subject'][*]['value']\" , " + + + "\"fos\" : \"$['subject'][?(@['qualifier']['classid']=='subject:fos')].value\"} "; private static SparkSession spark; @@ -770,14 +772,14 @@ public class BulkTagJobTest { org.apache.spark.sql.Dataset idExplodeCommunity = spark.sql(query); idExplodeCommunity.show(false); - Assertions.assertEquals(4, idExplodeCommunity.count()); + Assertions.assertEquals(5, idExplodeCommunity.count()); Assertions .assertEquals( 3, idExplodeCommunity.filter("provenance = 'community:datasource'").count()); Assertions .assertEquals( - 1, idExplodeCommunity.filter("provenance = 'community:advconstraint'").count()); + 2, idExplodeCommunity.filter("provenance = 'community:advconstraint'").count()); } } diff --git a/dhp-workflows/dhp-enrichment/src/test/resources/eu/dnetlib/dhp/bulktag/communityconfiguration/tagging_conf.xml b/dhp-workflows/dhp-enrichment/src/test/resources/eu/dnetlib/dhp/bulktag/communityconfiguration/tagging_conf.xml index 4e580edf5..b2e33df12 100644 --- a/dhp-workflows/dhp-enrichment/src/test/resources/eu/dnetlib/dhp/bulktag/communityconfiguration/tagging_conf.xml +++ b/dhp-workflows/dhp-enrichment/src/test/resources/eu/dnetlib/dhp/bulktag/communityconfiguration/tagging_conf.xml @@ -844,6 +844,89 @@ + + { + "criteria": [ + { + "constraint": [ + { + "verb": "equals_caseinsensitive", + "field": "subject", + "value": "North America" + }, + { + "verb": "contains", + "field": "fos", + "value": "05" + } + ] + }, + { + "constraint": [ + { + "verb": "equals_caseinsensitive", + "field": "subject", + "value": "North America" + }, + { + "verb": "contains", + "field": "fos", + "value": "06" + } + ] + }, + { + "constraint": [ + { + "verb": "equals_caseinsensitive", + "field": "subject", + "value": "Mexico" + }, + { + "verb": "equals_caseinsensitive", + "field": "subject", + "value": "United States" + }, + { + "verb": "equals_caseinsensitive", + "field": "subject", + "value": "Canada" + }, + { + "verb": "contains", + "field": "fos", + "value": "05" + } + ] + }, + { + "constraint": [ + { + "verb": "equals_caseinsensitive", + "field": "subject", + "value": "Mexico" + }, + { + "verb": "equals_caseinsensitive", + "field": "subject", + "value": "United States" + }, + { + "verb": "equals_caseinsensitive", + "field": "subject", + "value": "Canada" + }, + { + "verb": "contains", + "field": "fos", + "value": "06" + } + ] + } + ] + } + + @@ -1174,7 +1257,9 @@ + + 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_10.json index 168343401..17553eb83 100644 --- 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_10.json @@ -6,5 +6,5 @@ {"dataInfo":{"invisible":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":"Miriam","qualifier":{"classid":"","classname":"","schemeid":"","schemename":""},"dataInfo":{"invisible":false,"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":[]} +{"dataInfo":{"invisible":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":"North America","qualifier":{"classid":"","classname":"","schemeid":"","schemename":""},"dataInfo":{"invisible":false,"inferred":false,"deletedbyinference":false,"trust":"0.9","inferenceprovenance":"","provenanceaction":{"classid":"sysimport:crosswalk:repository","classname":"sysimport:crosswalk:repository","schemeid":"dnet:provenanceActions","schemename":"dnet:provenanceActions"}}},{"value":"0501 fake fos","qualifier":{"classid":"subject:fos","classname":"","schemeid":"","schemename":""},"dataInfo":{"invisible":false,"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":"Miriam","qualifier":{"classid":"","classname":"","schemeid":"","schemename":""},"dataInfo":{"invisible":false,"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 From 58c05731f9d3b3d472b828a092c73f6aa78703ff Mon Sep 17 00:00:00 2001 From: Claudio Atzori Date: Tue, 29 Nov 2022 11:21:51 +0100 Subject: [PATCH 245/535] [graph cleaning] WIP: testing the collectedfron and hostedby patch procedure --- .../oa/graph/clean/CleanContextSparkJob.java | 12 +- .../graph/clean/cfhb/CleanCfHbSparkJob.java | 151 ++++++++---------- .../oa/graph/clean/cfhb/IdCfHbMapping.java | 12 +- .../clean/country/CleanCountrySparkJob.java | 12 +- .../country/GetDatasourceFromCountry.java | 8 +- .../dhp/oa/graph/clean/oozie_app/workflow.xml | 34 ++-- .../oa/graph/input_clean_cfhb_parameters.json | 6 + .../graph/input_clean_context_parameters.json | 4 +- .../graph/input_clean_country_parameters.json | 4 +- .../input_datasource_country_parameters.json | 4 +- .../clean/cfhb/CleanCfHbSparkJobTest.java | 118 ++++++++++++++ .../clean/cfhb/entities/dataset/dataset.json | 3 + .../oa/graph/clean/cfhb/masterduplicate.json | 4 + 13 files changed, 243 insertions(+), 129 deletions(-) create mode 100644 dhp-workflows/dhp-graph-mapper/src/test/java/eu/dnetlib/dhp/oa/graph/clean/cfhb/CleanCfHbSparkJobTest.java create mode 100644 dhp-workflows/dhp-graph-mapper/src/test/resources/eu/dnetlib/dhp/oa/graph/clean/cfhb/entities/dataset/dataset.json create mode 100644 dhp-workflows/dhp-graph-mapper/src/test/resources/eu/dnetlib/dhp/oa/graph/clean/cfhb/masterduplicate.json diff --git a/dhp-workflows/dhp-graph-mapper/src/main/java/eu/dnetlib/dhp/oa/graph/clean/CleanContextSparkJob.java b/dhp-workflows/dhp-graph-mapper/src/main/java/eu/dnetlib/dhp/oa/graph/clean/CleanContextSparkJob.java index 55fdbac59..10a3d4465 100644 --- a/dhp-workflows/dhp-graph-mapper/src/main/java/eu/dnetlib/dhp/oa/graph/clean/CleanContextSparkJob.java +++ b/dhp-workflows/dhp-graph-mapper/src/main/java/eu/dnetlib/dhp/oa/graph/clean/CleanContextSparkJob.java @@ -47,8 +47,8 @@ public class CleanContextSparkJob implements Serializable { String inputPath = parser.get("inputPath"); log.info("inputPath: {}", inputPath); - String workingPath = parser.get("workingPath"); - log.info("workingPath: {}", workingPath); + String workingDir = parser.get("workingDir"); + log.info("workingDir: {}", workingDir); String contextId = parser.get("contextId"); log.info("contextId: {}", contextId); @@ -67,12 +67,12 @@ public class CleanContextSparkJob implements Serializable { isSparkSessionManaged, spark -> { - cleanContext(spark, contextId, verifyParam, inputPath, entityClazz, workingPath); + cleanContext(spark, contextId, verifyParam, inputPath, entityClazz, workingDir); }); } private static void cleanContext(SparkSession spark, String contextId, String verifyParam, - String inputPath, Class entityClazz, String workingPath) { + String inputPath, Class entityClazz, String workingDir) { Dataset res = spark .read() .textFile(inputPath) @@ -106,11 +106,11 @@ public class CleanContextSparkJob implements Serializable { .write() .mode(SaveMode.Overwrite) .option("compression", "gzip") - .json(workingPath); + .json(workingDir); spark .read() - .textFile(workingPath) + .textFile(workingDir) .map( (MapFunction) value -> OBJECT_MAPPER.readValue(value, entityClazz), Encoders.bean(entityClazz)) diff --git a/dhp-workflows/dhp-graph-mapper/src/main/java/eu/dnetlib/dhp/oa/graph/clean/cfhb/CleanCfHbSparkJob.java b/dhp-workflows/dhp-graph-mapper/src/main/java/eu/dnetlib/dhp/oa/graph/clean/cfhb/CleanCfHbSparkJob.java index d35dbc7c1..b4678cc6c 100644 --- a/dhp-workflows/dhp-graph-mapper/src/main/java/eu/dnetlib/dhp/oa/graph/clean/cfhb/CleanCfHbSparkJob.java +++ b/dhp-workflows/dhp-graph-mapper/src/main/java/eu/dnetlib/dhp/oa/graph/clean/cfhb/CleanCfHbSparkJob.java @@ -3,8 +3,11 @@ package eu.dnetlib.dhp.oa.graph.clean.cfhb; import static eu.dnetlib.dhp.common.SparkSessionSupport.runWithSparkSession; +import java.util.Iterator; +import java.util.List; import java.util.Objects; import java.util.Optional; +import java.util.stream.Collectors; import java.util.stream.Stream; import org.apache.commons.io.IOUtils; @@ -12,8 +15,10 @@ import org.apache.commons.lang3.StringUtils; import org.apache.spark.SparkConf; 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.sql.*; import org.apache.spark.sql.expressions.Aggregator; +import org.jetbrains.annotations.NotNull; import org.slf4j.Logger; import org.slf4j.LoggerFactory; @@ -52,14 +57,14 @@ public class CleanCfHbSparkJob { String inputPath = parser.get("inputPath"); log.info("inputPath: {}", inputPath); - String workingPath = parser.get("workingPath"); - log.info("workingPath: {}", workingPath); + String resolvedPath = parser.get("resolvedPath"); + log.info("resolvedPath: {}", resolvedPath); String outputPath = parser.get("outputPath"); log.info("outputPath: {}", outputPath); - String masterDuplicatePath = parser.get("masterDuplicatePath"); - log.info("masterDuplicatePath: {}", masterDuplicatePath); + String dsMasterDuplicatePath = parser.get("datasourceMasterDuplicate"); + log.info("datasourceMasterDuplicate: {}", dsMasterDuplicatePath); String graphTableClassName = parser.get("graphTableClassName"); log.info("graphTableClassName: {}", graphTableClassName); @@ -72,12 +77,12 @@ public class CleanCfHbSparkJob { isSparkSessionManaged, spark -> { cleanCfHb( - spark, inputPath, entityClazz, workingPath, masterDuplicatePath, outputPath); + spark, inputPath, entityClazz, resolvedPath, dsMasterDuplicatePath, outputPath); }); } private static void cleanCfHb(SparkSession spark, String inputPath, Class entityClazz, - String workingPath, String masterDuplicatePath, String outputPath) { + String resolvedPath, String masterDuplicatePath, String outputPath) { // read the master-duplicate tuples Dataset md = spark @@ -85,116 +90,94 @@ public class CleanCfHbSparkJob { .textFile(masterDuplicatePath) .map(as(MasterDuplicate.class), Encoders.bean(MasterDuplicate.class)); - // read the result table - Dataset res = spark - .read() - .textFile(inputPath) - .map(as(entityClazz), Encoders.bean(entityClazz)); - // prepare the resolved CF|HB references with the corresponding EMPTY master ID - Dataset resolved = res - .flatMap( - (FlatMapFunction) r -> Stream - .concat( - r.getCollectedfrom().stream().map(KeyValue::getKey), - Stream + Dataset resolved = spark + .read() + .textFile(inputPath) + .map(as(entityClazz), Encoders.bean(entityClazz)) + .flatMap( + (FlatMapFunction) r -> { + final List list = Stream .concat( - r.getInstance().stream().map(Instance::getHostedby).map(KeyValue::getKey), - r.getInstance().stream().map(Instance::getCollectedfrom).map(KeyValue::getKey))) - .distinct() - .map(s -> asIdCfHbMapping(r.getId(), s)) - .iterator(), + r.getCollectedfrom().stream().map(KeyValue::getKey), + Stream + .concat( + r.getInstance().stream().map(Instance::getHostedby).map(KeyValue::getKey), + r.getInstance().stream().map(Instance::getCollectedfrom).map(KeyValue::getKey))) + .distinct() + .map(s -> asIdCfHbMapping(r.getId(), s)) + .collect(Collectors.toList()); + return list.iterator(); + }, Encoders.bean(IdCfHbMapping.class)); - final String resolvedPath = workingPath + "/cfHbResolved"; - - // set the EMPTY master ID and save it aside + // set the EMPTY master ID/NAME and save it resolved - .joinWith(md, resolved.col("cfhb").equalTo(md.col("duplicate"))) + .joinWith(md, resolved.col("cfhb").equalTo(md.col("duplicateId"))) .map((MapFunction, IdCfHbMapping>) t -> { t._1().setMasterId(t._2().getMasterId()); + t._1().setMasterName(t._2().getMasterName()); return t._1(); }, Encoders.bean(IdCfHbMapping.class)) .write() .mode(SaveMode.Overwrite) - .parquet(resolvedPath); + .json(resolvedPath); // read again the resolved CF|HB mapping Dataset resolvedDS = spark .read() - .load(resolvedPath) - .as(Encoders.bean(IdCfHbMapping.class)); + .textFile(resolvedPath) + .map(as(IdCfHbMapping.class), Encoders.bean(IdCfHbMapping.class)); + + // read the result table + Dataset res = spark + .read() + .textFile(inputPath) + .map(as(entityClazz), Encoders.bean(entityClazz)); // Join the results with the resolved CF|HB mapping, apply the mapping and save it res - .joinWith(resolvedDS, res.col("id").equalTo(resolved.col("resultId")), "left") + .joinWith(resolvedDS, res.col("id").equalTo(resolvedDS.col("resultId")), "left") .groupByKey((MapFunction, String>) t -> t._1().getId(), Encoders.STRING()) - .agg(new IdCfHbMappingAggregator(entityClazz).toColumn()) + .mapGroups(getMapGroupsFunction(), Encoders.bean(entityClazz)) + //.agg(new IdCfHbMappingAggregator(entityClazz).toColumn()) .write() .mode(SaveMode.Overwrite) .option("compression", "gzip") .json(outputPath); } - public static class IdCfHbMappingAggregator extends Aggregator { + @NotNull + private static MapGroupsFunction, T> getMapGroupsFunction() { + return new MapGroupsFunction, T>() { + @Override + public T call(String key, Iterator> values) throws Exception { + final Tuple2 first = values.next(); + final T res = first._1(); - private final Class entityClazz; - - public IdCfHbMappingAggregator(Class entityClazz) { - this.entityClazz = entityClazz; - } - - @Override - public T zero() { - try { - return entityClazz.newInstance(); - } catch (InstantiationException | IllegalAccessException e) { - throw new RuntimeException(e); + updateResult(res, first._2()); + values.forEachRemaining(t -> updateResult(res, t._2())); + return res; } - } - @Override - public T reduce(T r, IdCfHbMapping a) { - if (Objects.isNull(a) && StringUtils.isBlank(a.getMasterId())) { - return r; + private void updateResult(T res, IdCfHbMapping m) { + if (Objects.nonNull(m)) { + res.getCollectedfrom().forEach(kv -> updateKeyValue(kv, m)); + res.getInstance().forEach(i -> { + updateKeyValue(i.getHostedby(), m); + updateKeyValue(i.getCollectedfrom(), m); + }); + } } - r.getCollectedfrom().forEach(kv -> updateKeyValue(kv, a)); - r.getInstance().forEach(i -> { - updateKeyValue(i.getHostedby(), a); - updateKeyValue(i.getCollectedfrom(), a); - }); - return r; - } - @Override - public T merge(T b1, T b2) { - if (Objects.isNull(b1.getId())) { - return b2; + private void updateKeyValue(final KeyValue kv, final IdCfHbMapping a) { + if (kv.getKey().equals(a.getCfhb())) { + kv.setKey(a.getMasterId()); + kv.setValue(a.getMasterName()); + } } - return b1; - } - @Override - public T finish(T r) { - return r; - } - - private void updateKeyValue(final KeyValue kv, final IdCfHbMapping a) { - if (kv.getKey().equals(a.getCfhb())) { - kv.setKey(a.getMasterId()); - kv.setValue(a.getMasterName()); - } - } - - @Override - public Encoder bufferEncoder() { - return Encoders.bean(entityClazz); - } - - @Override - public Encoder outputEncoder() { - return Encoders.bean(entityClazz); - } + }; } private static IdCfHbMapping asIdCfHbMapping(String resultId, String cfHb) { diff --git a/dhp-workflows/dhp-graph-mapper/src/main/java/eu/dnetlib/dhp/oa/graph/clean/cfhb/IdCfHbMapping.java b/dhp-workflows/dhp-graph-mapper/src/main/java/eu/dnetlib/dhp/oa/graph/clean/cfhb/IdCfHbMapping.java index cb4e1b5e6..fad1129c5 100644 --- a/dhp-workflows/dhp-graph-mapper/src/main/java/eu/dnetlib/dhp/oa/graph/clean/cfhb/IdCfHbMapping.java +++ b/dhp-workflows/dhp-graph-mapper/src/main/java/eu/dnetlib/dhp/oa/graph/clean/cfhb/IdCfHbMapping.java @@ -5,7 +5,7 @@ import java.io.Serializable; public class IdCfHbMapping implements Serializable { - private String resultid; + private String resultId; private String cfhb; @@ -17,15 +17,15 @@ public class IdCfHbMapping implements Serializable { } public IdCfHbMapping(String id) { - this.resultid = id; + this.resultId = id; } - public String getResultid() { - return resultid; + public String getResultId() { + return resultId; } - public void setResultid(String resultid) { - this.resultid = resultid; + public void setResultId(String resultId) { + this.resultId = resultId; } public String getCfhb() { diff --git a/dhp-workflows/dhp-graph-mapper/src/main/java/eu/dnetlib/dhp/oa/graph/clean/country/CleanCountrySparkJob.java b/dhp-workflows/dhp-graph-mapper/src/main/java/eu/dnetlib/dhp/oa/graph/clean/country/CleanCountrySparkJob.java index 45590f789..d8d803458 100644 --- a/dhp-workflows/dhp-graph-mapper/src/main/java/eu/dnetlib/dhp/oa/graph/clean/country/CleanCountrySparkJob.java +++ b/dhp-workflows/dhp-graph-mapper/src/main/java/eu/dnetlib/dhp/oa/graph/clean/country/CleanCountrySparkJob.java @@ -58,8 +58,8 @@ public class CleanCountrySparkJob implements Serializable { String inputPath = parser.get("inputPath"); log.info("inputPath: {}", inputPath); - String workingPath = parser.get("workingPath"); - log.info("workingPath: {}", workingPath); + String workingDir = parser.get("workingDir"); + log.info("workingDir: {}", workingDir); String datasourcePath = parser.get("hostedBy"); log.info("datasourcePath: {}", datasourcePath); @@ -85,12 +85,12 @@ public class CleanCountrySparkJob implements Serializable { spark -> { cleanCountry( - spark, country, verifyParam, inputPath, entityClazz, workingPath, collectedfrom, datasourcePath); + spark, country, verifyParam, inputPath, entityClazz, workingDir, collectedfrom, datasourcePath); }); } private static void cleanCountry(SparkSession spark, String country, String[] verifyParam, - String inputPath, Class entityClazz, String workingPath, String collectedfrom, String datasourcePath) { + String inputPath, Class entityClazz, String workingDir, String collectedfrom, String datasourcePath) { List hostedBy = spark .read() @@ -134,11 +134,11 @@ public class CleanCountrySparkJob implements Serializable { .write() .mode(SaveMode.Overwrite) .option("compression", "gzip") - .json(workingPath); + .json(workingDir); spark .read() - .textFile(workingPath) + .textFile(workingDir) .map( (MapFunction) value -> OBJECT_MAPPER.readValue(value, entityClazz), Encoders.bean(entityClazz)) diff --git a/dhp-workflows/dhp-graph-mapper/src/main/java/eu/dnetlib/dhp/oa/graph/clean/country/GetDatasourceFromCountry.java b/dhp-workflows/dhp-graph-mapper/src/main/java/eu/dnetlib/dhp/oa/graph/clean/country/GetDatasourceFromCountry.java index d3741d3e8..598fccdd7 100644 --- a/dhp-workflows/dhp-graph-mapper/src/main/java/eu/dnetlib/dhp/oa/graph/clean/country/GetDatasourceFromCountry.java +++ b/dhp-workflows/dhp-graph-mapper/src/main/java/eu/dnetlib/dhp/oa/graph/clean/country/GetDatasourceFromCountry.java @@ -54,8 +54,8 @@ public class GetDatasourceFromCountry implements Serializable { String inputPath = parser.get("inputPath"); log.info("inputPath: {}", inputPath); - String workingPath = parser.get("workingPath"); - log.info("workingPath: {}", workingPath); + String workingPath = parser.get("workingDir"); + log.info("workingDir: {}", workingPath); String country = parser.get("country"); log.info("country: {}", country); @@ -70,7 +70,7 @@ public class GetDatasourceFromCountry implements Serializable { } private static void getDatasourceFromCountry(SparkSession spark, String country, String inputPath, - String workingPath) { + String workingDir) { Dataset organization = spark .read() @@ -100,7 +100,7 @@ public class GetDatasourceFromCountry implements Serializable { .write() .mode(SaveMode.Overwrite) .option("compression", "gzip") - .json(workingPath); + .json(workingDir); } } diff --git a/dhp-workflows/dhp-graph-mapper/src/main/resources/eu/dnetlib/dhp/oa/graph/clean/oozie_app/workflow.xml b/dhp-workflows/dhp-graph-mapper/src/main/resources/eu/dnetlib/dhp/oa/graph/clean/oozie_app/workflow.xml index e717fac0f..e756840bd 100644 --- a/dhp-workflows/dhp-graph-mapper/src/main/resources/eu/dnetlib/dhp/oa/graph/clean/oozie_app/workflow.xml +++ b/dhp-workflows/dhp-graph-mapper/src/main/resources/eu/dnetlib/dhp/oa/graph/clean/oozie_app/workflow.xml @@ -343,7 +343,7 @@ --inputPath${graphOutputPath}/publication --graphTableClassNameeu.dnetlib.dhp.schema.oaf.Publication - --workingPath${workingDir}/working/publication + --workingDir${workingDir}/working/publication --contextId${contextId} --verifyParam${verifyParam} @@ -370,7 +370,7 @@ --inputPath${graphOutputPath}/dataset --graphTableClassNameeu.dnetlib.dhp.schema.oaf.Dataset - --workingPath${workingDir}/working/dataset + --workingDir${workingDir}/working/dataset --contextId${contextId} --verifyParam${verifyParam} @@ -397,7 +397,7 @@ --inputPath${graphOutputPath}/otherresearchproduct --graphTableClassNameeu.dnetlib.dhp.schema.oaf.OtherResearchProduct - --workingPath${workingDir}/working/otherresearchproduct + --workingDir${workingDir}/working/otherresearchproduct --contextId${contextId} --verifyParam${verifyParam} @@ -424,7 +424,7 @@ --inputPath${graphOutputPath}/software --graphTableClassNameeu.dnetlib.dhp.schema.oaf.Software - --workingPath${workingDir}/working/software + --workingDir${workingDir}/working/software --contextId${contextId} --verifyParam${verifyParam} @@ -452,7 +452,7 @@ --conf spark.sql.shuffle.partitions=7680 --inputPath${graphOutputPath} - --workingPath${workingDir}/working/hostedby + --workingDir${workingDir}/working/hostedby --country${country} @@ -485,7 +485,7 @@ --inputPath${graphOutputPath}/publication --graphTableClassNameeu.dnetlib.dhp.schema.oaf.Publication - --workingPath${workingDir}/working/publication + --workingDir${workingDir}/working/publication --country${country} --verifyParam${verifyCountryParam} --hostedBy${workingDir}/working/hostedby @@ -514,7 +514,7 @@ --inputPath${graphOutputPath}/dataset --graphTableClassNameeu.dnetlib.dhp.schema.oaf.Dataset - --workingPath${workingDir}/working/dataset + --workingDir${workingDir}/working/dataset --country${country} --verifyParam${verifyCountryParam} --hostedBy${workingDir}/working/hostedby @@ -543,7 +543,7 @@ --inputPath${graphOutputPath}/otherresearchproduct --graphTableClassNameeu.dnetlib.dhp.schema.oaf.OtherResearchProduct - --workingPath${workingDir}/working/otherresearchproduct + --workingDir${workingDir}/working/otherresearchproduct --country${country} --verifyParam${verifyCountryParam} --hostedBy${workingDir}/working/hostedby @@ -572,7 +572,7 @@ --inputPath${graphOutputPath}/software --graphTableClassNameeu.dnetlib.dhp.schema.oaf.Software - --workingPath${workingDir}/working/software + --workingDir${workingDir}/working/software --country${country} --verifyParam${verifyCountryParam} --hostedBy${workingDir}/working/hostedby @@ -629,9 +629,9 @@ --conf spark.sql.shuffle.partitions=7680 --inputPath${graphOutputPath}/publication + --resolvedPath${workingDir}/cfHbResolved/publication --outputPath${workingPath}/cfHbPatched/publication --graphTableClassNameeu.dnetlib.dhp.schema.oaf.Publication - --workingDir${workingDir}/working/publication --masterDuplicatePath${workingDir}/masterduplicate @@ -656,9 +656,9 @@ --conf spark.sql.shuffle.partitions=7680 --inputPath${graphOutputPath}/dataset + --resolvedPath${workingDir}/cfHbResolved/dataset --outputPath${workingPath}/cfHbPatched/dataset --graphTableClassNameeu.dnetlib.dhp.schema.oaf.Dataset - --workingDir${workingDir}/working/dataset --masterDuplicatePath${workingDir}/masterduplicate @@ -683,9 +683,9 @@ --conf spark.sql.shuffle.partitions=7680 --inputPath${graphOutputPath}/otherresearchproduct + --resolvedPath${workingDir}/cfHbResolved/otherresearchproduct --outputPath${workingPath}/cfHbPatched/otherresearchproduct --graphTableClassNameeu.dnetlib.dhp.schema.oaf.OtherResearchProduct - --workingDir${workingDir}/working/otherresearchproduct --masterDuplicatePath${workingDir}/masterduplicate @@ -710,9 +710,9 @@ --conf spark.sql.shuffle.partitions=7680 --inputPath${graphOutputPath}/software + --resolvedPath${workingDir}/cfHbResolved/software --outputPath${workingPath}/cfHbPatched/software --graphTableClassNameeu.dnetlib.dhp.schema.oaf.Software - --workingDir${workingDir}/working/software --masterDuplicatePath${workingDir}/masterduplicate @@ -733,7 +733,7 @@ - ${workingPath}/cfHbPatched/publication + ${workingDir}/cfHbPatched/publication ${graphOutputPath}/publication @@ -745,7 +745,7 @@ - ${workingPath}/cfHbPatched/dataset + ${workingDir}/cfHbPatched/dataset ${graphOutputPath}/dataset @@ -757,7 +757,7 @@ - ${workingPath}/cfHbPatched/otherresearchproduct + ${workingDir}/cfHbPatched/otherresearchproduct ${graphOutputPath}/otherresearchproduct @@ -769,7 +769,7 @@ - ${workingPath}/cfHbPatched/software + ${workingDir}/cfHbPatched/software ${graphOutputPath}/software diff --git a/dhp-workflows/dhp-graph-mapper/src/main/resources/eu/dnetlib/dhp/oa/graph/input_clean_cfhb_parameters.json b/dhp-workflows/dhp-graph-mapper/src/main/resources/eu/dnetlib/dhp/oa/graph/input_clean_cfhb_parameters.json index 8b8a5f70e..934d173b5 100644 --- a/dhp-workflows/dhp-graph-mapper/src/main/resources/eu/dnetlib/dhp/oa/graph/input_clean_cfhb_parameters.json +++ b/dhp-workflows/dhp-graph-mapper/src/main/resources/eu/dnetlib/dhp/oa/graph/input_clean_cfhb_parameters.json @@ -11,6 +11,12 @@ "paramDescription": "the path to the graph data dump to read", "paramRequired": true }, + { + "paramName": "rp", + "paramLongName": "resolvedPath", + "paramDescription": "the path to store the resolved records", + "paramRequired": true + }, { "paramName": "out", "paramLongName": "outputPath", diff --git a/dhp-workflows/dhp-graph-mapper/src/main/resources/eu/dnetlib/dhp/oa/graph/input_clean_context_parameters.json b/dhp-workflows/dhp-graph-mapper/src/main/resources/eu/dnetlib/dhp/oa/graph/input_clean_context_parameters.json index e3d31d69f..8be6496d8 100644 --- a/dhp-workflows/dhp-graph-mapper/src/main/resources/eu/dnetlib/dhp/oa/graph/input_clean_context_parameters.json +++ b/dhp-workflows/dhp-graph-mapper/src/main/resources/eu/dnetlib/dhp/oa/graph/input_clean_context_parameters.json @@ -12,8 +12,8 @@ "paramRequired": true }, { - "paramName": "wp", - "paramLongName": "workingPath", + "paramName": "wd", + "paramLongName": "workingDir", "paramDescription": "the path to store the output graph", "paramRequired": true }, diff --git a/dhp-workflows/dhp-graph-mapper/src/main/resources/eu/dnetlib/dhp/oa/graph/input_clean_country_parameters.json b/dhp-workflows/dhp-graph-mapper/src/main/resources/eu/dnetlib/dhp/oa/graph/input_clean_country_parameters.json index 318fb22f8..b38b5ac9f 100644 --- a/dhp-workflows/dhp-graph-mapper/src/main/resources/eu/dnetlib/dhp/oa/graph/input_clean_country_parameters.json +++ b/dhp-workflows/dhp-graph-mapper/src/main/resources/eu/dnetlib/dhp/oa/graph/input_clean_country_parameters.json @@ -12,8 +12,8 @@ "paramRequired": true }, { - "paramName": "wp", - "paramLongName": "workingPath", + "paramName": "wd", + "paramLongName": "workingDir", "paramDescription": "the path to store the output graph", "paramRequired": true }, diff --git a/dhp-workflows/dhp-graph-mapper/src/main/resources/eu/dnetlib/dhp/oa/graph/input_datasource_country_parameters.json b/dhp-workflows/dhp-graph-mapper/src/main/resources/eu/dnetlib/dhp/oa/graph/input_datasource_country_parameters.json index e0aa60328..01aa2e7b0 100644 --- a/dhp-workflows/dhp-graph-mapper/src/main/resources/eu/dnetlib/dhp/oa/graph/input_datasource_country_parameters.json +++ b/dhp-workflows/dhp-graph-mapper/src/main/resources/eu/dnetlib/dhp/oa/graph/input_datasource_country_parameters.json @@ -12,8 +12,8 @@ "paramRequired": true }, { - "paramName": "wp", - "paramLongName": "workingPath", + "paramName": "wd", + "paramLongName": "workingDir", "paramDescription": "the path to store the output graph", "paramRequired": true }, diff --git a/dhp-workflows/dhp-graph-mapper/src/test/java/eu/dnetlib/dhp/oa/graph/clean/cfhb/CleanCfHbSparkJobTest.java b/dhp-workflows/dhp-graph-mapper/src/test/java/eu/dnetlib/dhp/oa/graph/clean/cfhb/CleanCfHbSparkJobTest.java new file mode 100644 index 000000000..680d1ff64 --- /dev/null +++ b/dhp-workflows/dhp-graph-mapper/src/test/java/eu/dnetlib/dhp/oa/graph/clean/cfhb/CleanCfHbSparkJobTest.java @@ -0,0 +1,118 @@ +package eu.dnetlib.dhp.oa.graph.clean.cfhb; + +import com.fasterxml.jackson.databind.ObjectMapper; +import eu.dnetlib.dhp.schema.oaf.Dataset; +import eu.dnetlib.dhp.schema.oaf.Publication; +import org.apache.commons.io.FileUtils; +import org.apache.spark.SparkConf; +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.SparkSession; +import org.junit.jupiter.api.*; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; + +import java.io.File; +import java.io.IOException; +import java.net.URISyntaxException; +import java.nio.file.Files; +import java.nio.file.Path; +import java.nio.file.Paths; + +public class CleanCfHbSparkJobTest { + + private static final Logger log = LoggerFactory.getLogger(CleanCfHbSparkJobTest.class); + + private static final ObjectMapper OBJECT_MAPPER = new ObjectMapper(); + + private static SparkSession spark; + + private static Path testBaseTmpPath; + + private static String resolvedPath; + + private static String graphInputPath; + + private static String graphOutputPath; + + private static String dsMasterDuplicatePath; + + @BeforeAll + public static void beforeAll() throws IOException, URISyntaxException { + + testBaseTmpPath = Files.createTempDirectory(CleanCfHbSparkJobTest.class.getSimpleName()); + log.info("using test base path {}", testBaseTmpPath); + + final File entitiesSources = Paths + .get(CleanCfHbSparkJobTest.class.getResource("/eu/dnetlib/dhp/oa/graph/clean/cfhb/entities").toURI()) + .toFile(); + + FileUtils + .copyDirectory( + entitiesSources, + testBaseTmpPath.resolve("input").resolve("entities").toFile()); + + FileUtils + .copyFileToDirectory( + Paths + .get(CleanCfHbSparkJobTest.class.getResource("/eu/dnetlib/dhp/oa/graph/clean/cfhb/masterduplicate.json").toURI()) + .toFile(), + testBaseTmpPath.resolve("workingDir").resolve("masterduplicate").toFile()); + + + graphInputPath = testBaseTmpPath.resolve("input").resolve("entities").toString(); + resolvedPath = testBaseTmpPath.resolve("workingDir").resolve("cfHbResolved").toString(); + graphOutputPath = testBaseTmpPath.resolve("workingDir").resolve("cfHbPatched").toString(); + dsMasterDuplicatePath = testBaseTmpPath.resolve("workingDir").resolve("masterduplicate").toString(); + + SparkConf conf = new SparkConf(); + conf.setAppName(CleanCfHbSparkJobTest.class.getSimpleName()); + + conf.setMaster("local[*]"); + conf.set("spark.driver.host", "localhost"); + conf.set("spark.ui.enabled", "false"); + + spark = SparkSession + .builder() + .appName(CleanCfHbSparkJobTest.class.getSimpleName()) + .config(conf) + .getOrCreate(); + } + + @AfterAll + public static void afterAll() throws IOException { + FileUtils.deleteDirectory(testBaseTmpPath.toFile()); + spark.stop(); + } + + @Test + void testCleanCfHbSparkJob() throws Exception { + final String outputPath = graphOutputPath + "/dataset"; + CleanCfHbSparkJob + .main( + new String[] { + "--isSparkSessionManaged", Boolean.FALSE.toString(), + "--inputPath", graphInputPath + "/dataset", + "--outputPath", outputPath, + "--resolvedPath", resolvedPath + "/dataset", + "--graphTableClassName", Dataset.class.getCanonicalName(), + "--datasourceMasterDuplicate", dsMasterDuplicatePath + }); + + //final JavaSparkContext sc = JavaSparkContext.fromSparkContext(spark.sparkContext()); + + Assertions.assertTrue(Files.exists(Paths.get(graphOutputPath, "dataset"))); + + final org.apache.spark.sql.Dataset d = spark + .read() + .textFile(outputPath) + .map(as(Dataset.class), Encoders.bean(Dataset.class)); + Assertions.assertEquals(3, d.count()); + + } + + private static MapFunction as(Class clazz) { + return s -> OBJECT_MAPPER.readValue(s, clazz); + } +} diff --git a/dhp-workflows/dhp-graph-mapper/src/test/resources/eu/dnetlib/dhp/oa/graph/clean/cfhb/entities/dataset/dataset.json b/dhp-workflows/dhp-graph-mapper/src/test/resources/eu/dnetlib/dhp/oa/graph/clean/cfhb/entities/dataset/dataset.json new file mode 100644 index 000000000..bf2f2d963 --- /dev/null +++ b/dhp-workflows/dhp-graph-mapper/src/test/resources/eu/dnetlib/dhp/oa/graph/clean/cfhb/entities/dataset/dataset.json @@ -0,0 +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|re3data_____::4c4416659cb74c2e0e891a883a047cbc","value":"Bacterial Protein Interaction Database - DUP"}],"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|re3data_____::4c4416659cb74c2e0e891a883a047cbc","value":"Bacterial Protein Interaction Database - DUP"},"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|opendoar____::788b4ac1e172d8e520c2b9461c0a3d35","value":"FILUR DATA - DUP"}],"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|opendoar____::788b4ac1e172d8e520c2b9461c0a3d35","value":"FILUR DATA - DUP"},"hostedby":{"key":"10|re3data_____::6ffd7bc058f762912dc494cd9c175341","value":"depositar - DUP"},"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 diff --git a/dhp-workflows/dhp-graph-mapper/src/test/resources/eu/dnetlib/dhp/oa/graph/clean/cfhb/masterduplicate.json b/dhp-workflows/dhp-graph-mapper/src/test/resources/eu/dnetlib/dhp/oa/graph/clean/cfhb/masterduplicate.json new file mode 100644 index 000000000..b63cfe6b3 --- /dev/null +++ b/dhp-workflows/dhp-graph-mapper/src/test/resources/eu/dnetlib/dhp/oa/graph/clean/cfhb/masterduplicate.json @@ -0,0 +1,4 @@ +{ "duplicateId" : "10|re3data_____::4c4416659cb74c2e0e891a883a047cbc", "masterId" : "10|fairsharing_::a29d1598024f9e87beab4b98411d48ce", "masterName" : "Bacterial Protein Interaction Database" } +{ "duplicateId" : "10|opendoar____::788b4ac1e172d8e520c2b9461c0a3d35", "masterId" : "10|re3data_____::fc1db64b3964826913b1e9eafe830490", "masterName" : "FULIR Data" } +{ "duplicateId" : "10|re3data_____::6ffd7bc058f762912dc494cd9c175341", "masterId" : "10|fairsharing_::3f647cadf56541fb9513cb63ec370187", "masterName" : "depositar" } +{ "duplicateId" : "10|scindeksserb::07022f78a8cc6d1171092454ecdbb47c", "masterId" : "10|doajarticles::07022f78a8cc6d1171092454ecdbb47c", "masterName" : "Artefact" } \ No newline at end of file From 8e3edba318b7573f24bcf9300a2c115bf2074e34 Mon Sep 17 00:00:00 2001 From: Claudio Atzori Date: Tue, 29 Nov 2022 16:07:09 +0100 Subject: [PATCH 246/535] [graph cleaning] testing the collectedfron and hostedby patch procedure --- .../graph/clean/cfhb/CleanCfHbSparkJob.java | 63 +++-- .../clean/cfhb/CleanCfHbSparkJobTest.java | 253 ++++++++++++------ 2 files changed, 208 insertions(+), 108 deletions(-) diff --git a/dhp-workflows/dhp-graph-mapper/src/main/java/eu/dnetlib/dhp/oa/graph/clean/cfhb/CleanCfHbSparkJob.java b/dhp-workflows/dhp-graph-mapper/src/main/java/eu/dnetlib/dhp/oa/graph/clean/cfhb/CleanCfHbSparkJob.java index b4678cc6c..122e27dec 100644 --- a/dhp-workflows/dhp-graph-mapper/src/main/java/eu/dnetlib/dhp/oa/graph/clean/cfhb/CleanCfHbSparkJob.java +++ b/dhp-workflows/dhp-graph-mapper/src/main/java/eu/dnetlib/dhp/oa/graph/clean/cfhb/CleanCfHbSparkJob.java @@ -25,11 +25,13 @@ 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.common.action.model.MasterDuplicate; import eu.dnetlib.dhp.oa.graph.clean.country.CleanCountrySparkJob; import eu.dnetlib.dhp.schema.oaf.Instance; import eu.dnetlib.dhp.schema.oaf.KeyValue; import eu.dnetlib.dhp.schema.oaf.Result; +import eu.dnetlib.dhp.utils.DHPUtils; import scala.Tuple2; public class CleanCfHbSparkJob { @@ -76,6 +78,8 @@ public class CleanCfHbSparkJob { conf, isSparkSessionManaged, spark -> { + HdfsSupport.remove(outputPath, spark.sparkContext().hadoopConfiguration()); + HdfsSupport.remove(resolvedPath, spark.sparkContext().hadoopConfiguration()); cleanCfHb( spark, inputPath, entityClazz, resolvedPath, dsMasterDuplicatePath, outputPath); }); @@ -92,33 +96,15 @@ public class CleanCfHbSparkJob { // prepare the resolved CF|HB references with the corresponding EMPTY master ID Dataset resolved = spark - .read() - .textFile(inputPath) - .map(as(entityClazz), Encoders.bean(entityClazz)) - .flatMap( - (FlatMapFunction) r -> { - final List list = Stream - .concat( - r.getCollectedfrom().stream().map(KeyValue::getKey), - Stream - .concat( - r.getInstance().stream().map(Instance::getHostedby).map(KeyValue::getKey), - r.getInstance().stream().map(Instance::getCollectedfrom).map(KeyValue::getKey))) - .distinct() - .map(s -> asIdCfHbMapping(r.getId(), s)) - .collect(Collectors.toList()); - return list.iterator(); - }, - Encoders.bean(IdCfHbMapping.class)); + .read() + .textFile(inputPath) + .map(as(entityClazz), Encoders.bean(entityClazz)) + .flatMap(flattenCfHbFn(), Encoders.bean(IdCfHbMapping.class)); // set the EMPTY master ID/NAME and save it resolved .joinWith(md, resolved.col("cfhb").equalTo(md.col("duplicateId"))) - .map((MapFunction, IdCfHbMapping>) t -> { - t._1().setMasterId(t._2().getMasterId()); - t._1().setMasterName(t._2().getMasterName()); - return t._1(); - }, Encoders.bean(IdCfHbMapping.class)) + .map(asIdCfHbMapping(), Encoders.bean(IdCfHbMapping.class)) .write() .mode(SaveMode.Overwrite) .json(resolvedPath); @@ -131,27 +117,46 @@ public class CleanCfHbSparkJob { // read the result table Dataset res = spark - .read() - .textFile(inputPath) - .map(as(entityClazz), Encoders.bean(entityClazz)); + .read() + .textFile(inputPath) + .map(as(entityClazz), Encoders.bean(entityClazz)); // Join the results with the resolved CF|HB mapping, apply the mapping and save it res .joinWith(resolvedDS, res.col("id").equalTo(resolvedDS.col("resultId")), "left") .groupByKey((MapFunction, String>) t -> t._1().getId(), Encoders.STRING()) .mapGroups(getMapGroupsFunction(), Encoders.bean(entityClazz)) - //.agg(new IdCfHbMappingAggregator(entityClazz).toColumn()) .write() .mode(SaveMode.Overwrite) .option("compression", "gzip") .json(outputPath); } - @NotNull + private static MapFunction, IdCfHbMapping> asIdCfHbMapping() { + return t -> { + t._1().setMasterId(t._2().getMasterId()); + t._1().setMasterName(t._2().getMasterName()); + return t._1(); + }; + } + + private static FlatMapFunction flattenCfHbFn() { + return r -> Stream + .concat( + r.getCollectedfrom().stream().map(KeyValue::getKey), + Stream + .concat( + r.getInstance().stream().map(Instance::getHostedby).map(KeyValue::getKey), + r.getInstance().stream().map(Instance::getCollectedfrom).map(KeyValue::getKey))) + .distinct() + .map(s -> asIdCfHbMapping(r.getId(), s)) + .iterator(); + } + private static MapGroupsFunction, T> getMapGroupsFunction() { return new MapGroupsFunction, T>() { @Override - public T call(String key, Iterator> values) throws Exception { + public T call(String key, Iterator> values) { final Tuple2 first = values.next(); final T res = first._1(); diff --git a/dhp-workflows/dhp-graph-mapper/src/test/java/eu/dnetlib/dhp/oa/graph/clean/cfhb/CleanCfHbSparkJobTest.java b/dhp-workflows/dhp-graph-mapper/src/test/java/eu/dnetlib/dhp/oa/graph/clean/cfhb/CleanCfHbSparkJobTest.java index 680d1ff64..b0097ed6f 100644 --- a/dhp-workflows/dhp-graph-mapper/src/test/java/eu/dnetlib/dhp/oa/graph/clean/cfhb/CleanCfHbSparkJobTest.java +++ b/dhp-workflows/dhp-graph-mapper/src/test/java/eu/dnetlib/dhp/oa/graph/clean/cfhb/CleanCfHbSparkJobTest.java @@ -1,8 +1,16 @@ + package eu.dnetlib.dhp.oa.graph.clean.cfhb; -import com.fasterxml.jackson.databind.ObjectMapper; -import eu.dnetlib.dhp.schema.oaf.Dataset; -import eu.dnetlib.dhp.schema.oaf.Publication; +import static org.junit.jupiter.api.Assertions.assertEquals; +import static org.junit.jupiter.api.Assertions.assertTrue; + +import java.io.File; +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.JavaSparkContext; @@ -13,106 +21,193 @@ import org.junit.jupiter.api.*; import org.slf4j.Logger; import org.slf4j.LoggerFactory; -import java.io.File; -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.ObjectMapper; + +import eu.dnetlib.dhp.schema.oaf.Dataset; +import eu.dnetlib.dhp.schema.oaf.Publication; public class CleanCfHbSparkJobTest { - private static final Logger log = LoggerFactory.getLogger(CleanCfHbSparkJobTest.class); + private static final Logger log = LoggerFactory.getLogger(CleanCfHbSparkJobTest.class); - 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 testBaseTmpPath; + private static Path testBaseTmpPath; - private static String resolvedPath; + private static String resolvedPath; - private static String graphInputPath; + private static String graphInputPath; - private static String graphOutputPath; + private static String graphOutputPath; - private static String dsMasterDuplicatePath; + private static String dsMasterDuplicatePath; - @BeforeAll - public static void beforeAll() throws IOException, URISyntaxException { + @BeforeAll + public static void beforeAll() throws IOException, URISyntaxException { - testBaseTmpPath = Files.createTempDirectory(CleanCfHbSparkJobTest.class.getSimpleName()); - log.info("using test base path {}", testBaseTmpPath); + testBaseTmpPath = Files.createTempDirectory(CleanCfHbSparkJobTest.class.getSimpleName()); + log.info("using test base path {}", testBaseTmpPath); - final File entitiesSources = Paths - .get(CleanCfHbSparkJobTest.class.getResource("/eu/dnetlib/dhp/oa/graph/clean/cfhb/entities").toURI()) - .toFile(); + final File entitiesSources = Paths + .get(CleanCfHbSparkJobTest.class.getResource("/eu/dnetlib/dhp/oa/graph/clean/cfhb/entities").toURI()) + .toFile(); - FileUtils - .copyDirectory( - entitiesSources, - testBaseTmpPath.resolve("input").resolve("entities").toFile()); + FileUtils + .copyDirectory( + entitiesSources, + testBaseTmpPath.resolve("input").resolve("entities").toFile()); - FileUtils - .copyFileToDirectory( - Paths - .get(CleanCfHbSparkJobTest.class.getResource("/eu/dnetlib/dhp/oa/graph/clean/cfhb/masterduplicate.json").toURI()) - .toFile(), - testBaseTmpPath.resolve("workingDir").resolve("masterduplicate").toFile()); + FileUtils + .copyFileToDirectory( + Paths + .get( + CleanCfHbSparkJobTest.class + .getResource("/eu/dnetlib/dhp/oa/graph/clean/cfhb/masterduplicate.json") + .toURI()) + .toFile(), + testBaseTmpPath.resolve("workingDir").resolve("masterduplicate").toFile()); + graphInputPath = testBaseTmpPath.resolve("input").resolve("entities").toString(); + resolvedPath = testBaseTmpPath.resolve("workingDir").resolve("cfHbResolved").toString(); + graphOutputPath = testBaseTmpPath.resolve("workingDir").resolve("cfHbPatched").toString(); + dsMasterDuplicatePath = testBaseTmpPath.resolve("workingDir").resolve("masterduplicate").toString(); - graphInputPath = testBaseTmpPath.resolve("input").resolve("entities").toString(); - resolvedPath = testBaseTmpPath.resolve("workingDir").resolve("cfHbResolved").toString(); - graphOutputPath = testBaseTmpPath.resolve("workingDir").resolve("cfHbPatched").toString(); - dsMasterDuplicatePath = testBaseTmpPath.resolve("workingDir").resolve("masterduplicate").toString(); + SparkConf conf = new SparkConf(); + conf.setAppName(CleanCfHbSparkJobTest.class.getSimpleName()); - SparkConf conf = new SparkConf(); - conf.setAppName(CleanCfHbSparkJobTest.class.getSimpleName()); + conf.setMaster("local[*]"); + conf.set("spark.driver.host", "localhost"); + conf.set("spark.ui.enabled", "false"); - conf.setMaster("local[*]"); - conf.set("spark.driver.host", "localhost"); - conf.set("spark.ui.enabled", "false"); + spark = SparkSession + .builder() + .appName(CleanCfHbSparkJobTest.class.getSimpleName()) + .config(conf) + .getOrCreate(); + } - spark = SparkSession - .builder() - .appName(CleanCfHbSparkJobTest.class.getSimpleName()) - .config(conf) - .getOrCreate(); - } + @AfterAll + public static void afterAll() throws IOException { + FileUtils.deleteDirectory(testBaseTmpPath.toFile()); + spark.stop(); + } - @AfterAll - public static void afterAll() throws IOException { - FileUtils.deleteDirectory(testBaseTmpPath.toFile()); - spark.stop(); - } + @Test + void testCleanCfHbSparkJob() throws Exception { + final String outputPath = graphOutputPath + "/dataset"; + final String inputPath = graphInputPath + "/dataset"; - @Test - void testCleanCfHbSparkJob() throws Exception { - final String outputPath = graphOutputPath + "/dataset"; - CleanCfHbSparkJob - .main( - new String[] { - "--isSparkSessionManaged", Boolean.FALSE.toString(), - "--inputPath", graphInputPath + "/dataset", - "--outputPath", outputPath, - "--resolvedPath", resolvedPath + "/dataset", - "--graphTableClassName", Dataset.class.getCanonicalName(), - "--datasourceMasterDuplicate", dsMasterDuplicatePath - }); + org.apache.spark.sql.Dataset records = read(spark, inputPath, Dataset.class); + Dataset d = records + .filter("id = '50|doi_________::09821844208a5cd6300b2bfb13bca1b9'") + .first(); + assertEquals("10|re3data_____::4c4416659cb74c2e0e891a883a047cbc", d.getCollectedfrom().get(0).getKey()); + assertEquals("Bacterial Protein Interaction Database - DUP", d.getCollectedfrom().get(0).getValue()); + assertEquals( + "10|re3data_____::4c4416659cb74c2e0e891a883a047cbc", d.getInstance().get(0).getCollectedfrom().getKey()); + assertEquals( + "Bacterial Protein Interaction Database - DUP", d.getInstance().get(0).getCollectedfrom().getValue()); - //final JavaSparkContext sc = JavaSparkContext.fromSparkContext(spark.sparkContext()); + d = records + .filter("id = '50|DansKnawCris::0dd644304b7116e8e58da3a5e3adc37a'") + .first(); + assertEquals("10|opendoar____::788b4ac1e172d8e520c2b9461c0a3d35", d.getCollectedfrom().get(0).getKey()); + assertEquals("FILUR DATA - DUP", d.getCollectedfrom().get(0).getValue()); + assertEquals( + "10|opendoar____::788b4ac1e172d8e520c2b9461c0a3d35", d.getInstance().get(0).getCollectedfrom().getKey()); + assertEquals("FILUR DATA - DUP", d.getInstance().get(0).getCollectedfrom().getValue()); + assertEquals( + "10|re3data_____::6ffd7bc058f762912dc494cd9c175341", d.getInstance().get(0).getHostedby().getKey()); + assertEquals("depositar - DUP", d.getInstance().get(0).getHostedby().getValue()); - Assertions.assertTrue(Files.exists(Paths.get(graphOutputPath, "dataset"))); + d = records + .filter("id = '50|DansKnawCris::203a27996ddc0fd1948258e5b7dec61c'") + .first(); + assertEquals("10|openaire____::c6df70599aa984f16ee52b4b86d2e89f", d.getCollectedfrom().get(0).getKey()); + assertEquals("DANS (Data Archiving and Networked Services)", d.getCollectedfrom().get(0).getValue()); + assertEquals( + "10|openaire____::c6df70599aa984f16ee52b4b86d2e89f", d.getInstance().get(0).getCollectedfrom().getKey()); + assertEquals( + "DANS (Data Archiving and Networked Services)", d.getInstance().get(0).getCollectedfrom().getValue()); + assertEquals( + "10|openaire____::c6df70599aa984f16ee52b4b86d2e89f", d.getInstance().get(0).getHostedby().getKey()); + assertEquals("DANS (Data Archiving and Networked Services)", d.getInstance().get(0).getHostedby().getValue()); - final org.apache.spark.sql.Dataset d = spark - .read() - .textFile(outputPath) - .map(as(Dataset.class), Encoders.bean(Dataset.class)); - Assertions.assertEquals(3, d.count()); - - } + CleanCfHbSparkJob + .main( + new String[] { + "--isSparkSessionManaged", Boolean.FALSE.toString(), + "--inputPath", inputPath, + "--outputPath", outputPath, + "--resolvedPath", resolvedPath + "/dataset", + "--graphTableClassName", Dataset.class.getCanonicalName(), + "--datasourceMasterDuplicate", dsMasterDuplicatePath + }); - private static MapFunction as(Class clazz) { - return s -> OBJECT_MAPPER.readValue(s, clazz); - } + assertTrue(Files.exists(Paths.get(graphOutputPath, "dataset"))); + + records = read(spark, outputPath, Dataset.class); + + assertEquals(3, records.count()); + + d = records + .filter("id = '50|doi_________::09821844208a5cd6300b2bfb13bca1b9'") + .first(); + assertEquals("10|fairsharing_::a29d1598024f9e87beab4b98411d48ce", d.getCollectedfrom().get(0).getKey()); + assertEquals("Bacterial Protein Interaction Database", d.getCollectedfrom().get(0).getValue()); + assertEquals( + "10|fairsharing_::a29d1598024f9e87beab4b98411d48ce", d.getInstance().get(0).getCollectedfrom().getKey()); + assertEquals("Bacterial Protein Interaction Database", d.getInstance().get(0).getCollectedfrom().getValue()); + + d = records + .filter("id = '50|DansKnawCris::0dd644304b7116e8e58da3a5e3adc37a'") + .first(); + assertEquals("10|re3data_____::fc1db64b3964826913b1e9eafe830490", d.getCollectedfrom().get(0).getKey()); + assertEquals("FULIR Data", d.getCollectedfrom().get(0).getValue()); + assertEquals( + "10|re3data_____::fc1db64b3964826913b1e9eafe830490", d.getInstance().get(0).getCollectedfrom().getKey()); + assertEquals("FULIR Data", d.getInstance().get(0).getCollectedfrom().getValue()); + assertEquals( + "10|fairsharing_::3f647cadf56541fb9513cb63ec370187", d.getInstance().get(0).getHostedby().getKey()); + assertEquals("depositar", d.getInstance().get(0).getHostedby().getValue()); + + d = records + .filter("id = '50|DansKnawCris::203a27996ddc0fd1948258e5b7dec61c'") + .first(); + assertEquals("10|openaire____::c6df70599aa984f16ee52b4b86d2e89f", d.getCollectedfrom().get(0).getKey()); + assertEquals("DANS (Data Archiving and Networked Services)", d.getCollectedfrom().get(0).getValue()); + assertEquals( + "10|openaire____::c6df70599aa984f16ee52b4b86d2e89f", d.getInstance().get(0).getCollectedfrom().getKey()); + assertEquals( + "DANS (Data Archiving and Networked Services)", d.getInstance().get(0).getCollectedfrom().getValue()); + assertEquals( + "10|openaire____::c6df70599aa984f16ee52b4b86d2e89f", d.getInstance().get(0).getHostedby().getKey()); + assertEquals("DANS (Data Archiving and Networked Services)", d.getInstance().get(0).getHostedby().getValue()); + + d = records + .filter("id = '50|DansKnawCris::203a27996ddc0fd1948258e5b7dec61c'") + .first(); + assertEquals("10|openaire____::c6df70599aa984f16ee52b4b86d2e89f", d.getCollectedfrom().get(0).getKey()); + assertEquals("DANS (Data Archiving and Networked Services)", d.getCollectedfrom().get(0).getValue()); + assertEquals( + "10|openaire____::c6df70599aa984f16ee52b4b86d2e89f", d.getInstance().get(0).getCollectedfrom().getKey()); + assertEquals( + "DANS (Data Archiving and Networked Services)", d.getInstance().get(0).getCollectedfrom().getValue()); + assertEquals( + "10|openaire____::c6df70599aa984f16ee52b4b86d2e89f", d.getInstance().get(0).getHostedby().getKey()); + assertEquals("DANS (Data Archiving and Networked Services)", d.getInstance().get(0).getHostedby().getValue()); + } + + private org.apache.spark.sql.Dataset read(SparkSession spark, String path, Class clazz) { + return spark + .read() + .textFile(path) + .map(as(clazz), Encoders.bean(clazz)); + } + + private static MapFunction as(Class clazz) { + return s -> OBJECT_MAPPER.readValue(s, clazz); + } } From bb0ddc1c4455a85acf6b896d243192f996835ff0 Mon Sep 17 00:00:00 2001 From: "miriam.baglioni" Date: Wed, 30 Nov 2022 09:56:24 +0100 Subject: [PATCH 247/535] [BulkTag] adding verb starts_with --- .../dhp/bulktag/criteria/StartsWithVerb.java | 30 +++++++++++++++++++ 1 file changed, 30 insertions(+) create mode 100644 dhp-workflows/dhp-enrichment/src/main/java/eu/dnetlib/dhp/bulktag/criteria/StartsWithVerb.java diff --git a/dhp-workflows/dhp-enrichment/src/main/java/eu/dnetlib/dhp/bulktag/criteria/StartsWithVerb.java b/dhp-workflows/dhp-enrichment/src/main/java/eu/dnetlib/dhp/bulktag/criteria/StartsWithVerb.java new file mode 100644 index 000000000..f22e1a864 --- /dev/null +++ b/dhp-workflows/dhp-enrichment/src/main/java/eu/dnetlib/dhp/bulktag/criteria/StartsWithVerb.java @@ -0,0 +1,30 @@ + +package eu.dnetlib.dhp.bulktag.criteria; + +import java.io.Serializable; + +@VerbClass("starts_with") +public class StartsWithVerb implements Selection, Serializable { + + private String param; + + public StartsWithVerb() { + } + + public StartsWithVerb(final String param) { + this.param = param; + } + + @Override + public boolean apply(String value) { + return value.startsWith(param); + } + + public String getParam() { + return param; + } + + public void setParam(String param) { + this.param = param; + } +} From ce020f2c837207bc7e2f6b9062d56d07196f0cd5 Mon Sep 17 00:00:00 2001 From: "miriam.baglioni" Date: Wed, 30 Nov 2022 09:57:30 +0100 Subject: [PATCH 248/535] [EOSC FUTURE] added resources and test for review --- .../provision/IndexRecordTransformerTest.java | 20 ++++ .../provision/eosc-future/zenodo7351221.xml | 99 +++++++++++++++++ .../provision/eosc-future/zenodo7351393.xml | 100 ++++++++++++++++++ .../provision/eosc-future/zenodo7353841.xml | 85 +++++++++++++++ 4 files changed, 304 insertions(+) create mode 100644 dhp-workflows/dhp-graph-provision/src/test/resources/eu/dnetlib/dhp/oa/provision/eosc-future/zenodo7351221.xml create mode 100644 dhp-workflows/dhp-graph-provision/src/test/resources/eu/dnetlib/dhp/oa/provision/eosc-future/zenodo7351393.xml create mode 100644 dhp-workflows/dhp-graph-provision/src/test/resources/eu/dnetlib/dhp/oa/provision/eosc-future/zenodo7353841.xml 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 17c3cdb30..d9dc609d8 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 @@ -142,6 +142,26 @@ public class IndexRecordTransformerTest { testRecordTransformation(record); } + @Test + public void testForEOSCFutureZenodo7353841() throws IOException, TransformerException { + final String record = IOUtils + .toString(getClass().getResourceAsStream("eosc-future/zenodo7353841.xml")); + testRecordTransformation(record); + } + + @Test + public void testForEOSCFutureZenodo7351393() throws IOException, TransformerException { + final String record = IOUtils + .toString(getClass().getResourceAsStream("eosc-future/zenodo7351393.xml")); + testRecordTransformation(record); + } + + @Test + public void testForEOSCFutureZenodo7351221() throws IOException, TransformerException { + final String record = IOUtils + .toString(getClass().getResourceAsStream("eosc-future/zenodo7351221.xml")); + testRecordTransformation(record); + } @Test void testDoiUrlNormalization() throws MalformedURLException { diff --git a/dhp-workflows/dhp-graph-provision/src/test/resources/eu/dnetlib/dhp/oa/provision/eosc-future/zenodo7351221.xml b/dhp-workflows/dhp-graph-provision/src/test/resources/eu/dnetlib/dhp/oa/provision/eosc-future/zenodo7351221.xml new file mode 100644 index 000000000..7f1e66dac --- /dev/null +++ b/dhp-workflows/dhp-graph-provision/src/test/resources/eu/dnetlib/dhp/oa/provision/eosc-future/zenodo7351221.xml @@ -0,0 +1,99 @@ + + +
+ doi_________::9cb0664d4c891c4baaf73f007c0c9de0 + 2022-11-25T12:55:13Z + under curation + +
+ + + + + COVID-19 Knowledge Graph: A semantic resource embedding biological and chemical entities + Karki, Reagon + + + +

A Knowledge graph representation of compounds and associated biological entities in the BY-COVID and EOSC Future project.

Current status

  • Number of Nodes: 35952
  • Number of Edges: 279462
  • Human Proteins: 1347
  • Assay: 15835
  • Chemical/Compound: 4096
  • Mechanism of Action: 739
  • Pathway: 1513
  • Disease: 1585
  • SideEffect: 7420
  • Biological Process: 2085
  • Molecular Function: 1332

Please check the BY_COVID_update_August.ipynb for understanding step wise process of KG generation and KG statistics. The KG has been exported to formats such as graphml, sif and so on for visualizations in other platforms. For example, the graphml file can be imported to Cytoscape directly. These files are located in 'data\export' folder.

+ + + + Zenodo + + + + + + + + + + + + + + + + + + + oai:zenodo.org:7351221 + + oai:zenodo.org:7351221 + 10.5281/zenodo.7351221 + + + + false + false + 0.9 + + + + + + corda__h2020::256485716fdb9f5ca69007b7ca5a072b + 101017536 + EOSC Future + EOSC Future + + + + ec__________::EC::H2020 + + + + + corda__h2020::4a3254eac2997eee0a9dcb7a7daedb81 + 101046203 + BY-COVID + Beyond COVID + + + + ec__________::EC::Horizon Europe Framework Programme - HORIZON-RIA\HORIZON Action Grant Budget-Based + + + + + + + + + + + + + https://zenodo.org/record/7351221 + + + +
+
+
+
+
\ No newline at end of file diff --git a/dhp-workflows/dhp-graph-provision/src/test/resources/eu/dnetlib/dhp/oa/provision/eosc-future/zenodo7351393.xml b/dhp-workflows/dhp-graph-provision/src/test/resources/eu/dnetlib/dhp/oa/provision/eosc-future/zenodo7351393.xml new file mode 100644 index 000000000..21b656d2c --- /dev/null +++ b/dhp-workflows/dhp-graph-provision/src/test/resources/eu/dnetlib/dhp/oa/provision/eosc-future/zenodo7351393.xml @@ -0,0 +1,100 @@ + + +
+ doi_________::07fdccabd77830e3caccf0b33c083f1b + 2022-11-25T01:08:31Z + under curation + +
+ + + + Monkeypox Knowledge Graph: A semantic resource embedding biological and chemical entities + Karki, Reagon + Andrea, Zaliani + Gadiya, Yojana + Gribbon, Philip + + + +

The Monkeypox KG is built using viral and human proteins reported in different resources. Additionally, the KG represents chemicals tested against Monkeypox and their targets, associated biological processes, molecular functions, diseases and side effects.

KG status

Version 1 stats:

  • Number of Nodes: 8235
  • Number of Edges: 40422

Version 2 stats (2nd September) :

  • Number of Nodes: 9129
  • Number of Edges: 44568

Please check the graph.ipynb for understanding step wise process of KG generation and KG statistics. The KG has been exported to formats such as graphml, sif and so on for visualizations in other platforms. For example, the graphml file can be imported to Cytoscape directly. These files are located in 'data\export' folder.

+ + + + Zenodo + + + + + + + + + + + + + + + + + + + oai:zenodo.org:7351393 + + oai:zenodo.org:7351393 + 10.5281/zenodo.7351393 + + + false + false + 0.9 + + + + + + corda__h2020::256485716fdb9f5ca69007b7ca5a072b + 101017536 + EOSC Future + EOSC Future + + + + ec__________::EC::H2020 + + + + + corda__h2020::4a3254eac2997eee0a9dcb7a7daedb81 + 101046203 + BY-COVID + Beyond COVID + + + + ec__________::EC::Horizon Europe Framework Programme - HORIZON-RIA\HORIZON Action Grant Budget-Based + + + + + + + + + + + + + https://zenodo.org/record/7351393 + + + +
+
+
+
+
\ No newline at end of file diff --git a/dhp-workflows/dhp-graph-provision/src/test/resources/eu/dnetlib/dhp/oa/provision/eosc-future/zenodo7353841.xml b/dhp-workflows/dhp-graph-provision/src/test/resources/eu/dnetlib/dhp/oa/provision/eosc-future/zenodo7353841.xml new file mode 100644 index 000000000..4bd287e50 --- /dev/null +++ b/dhp-workflows/dhp-graph-provision/src/test/resources/eu/dnetlib/dhp/oa/provision/eosc-future/zenodo7353841.xml @@ -0,0 +1,85 @@ + + +
+ doi_________::93d39dd7edef016928788c3500e149f1 + 2022-11-24T08:41:37Z + under curation + +
+ + + + ENVRI SP - Dashboard State of the Environment - Ocean Indicators + Tjerk Krijger + + + +

The attached .yaml file is used as input to the Dashboard State of the Environment, which is a science project of the ENVRI-FAIR science cluster within EOSC-FUTURE. The contents of the file enable the visualization of Ocean indicators on the dashboard. It is possible to download the attached file and change the contents to include indicators from different domains such as atmosphere or biodiversity.

+ + + + Zenodo + + + + + + + + + + + + + + + + + + + oai:zenodo.org:7353841 + + oai:zenodo.org:7353841 + 10.5281/zenodo.7353841 + + + false + false + 0.9 + + + + + + corda__h2020::256485716fdb9f5ca69007b7ca5a072b + 101017536 + EOSC Future + EOSC Future + + + + ec__________::EC::H2020 + + + + + + + + + + + + + https://zenodo.org/record/7353841 + + + +
+
+
+
+
From 5a48a2fb1819fe4eeee5a09c50447c600f7ae6d9 Mon Sep 17 00:00:00 2001 From: Sandro La Bruzzo Date: Thu, 1 Dec 2022 11:34:43 +0100 Subject: [PATCH 249/535] implemented synch for single mdstore --- .../eu/dnetlib/dhp/common/MDStoreInfo.java | 100 ++++++++++ .../eu/dnetlib/dhp/common/MdstoreClient.java | 38 +++- .../dnetlib/dhp/common/MdStoreClientTest.java | 36 ++++ .../raw/MigrateMongoMdstoresApplication.java | 183 ++++++++++++++++-- .../common/AbstractMigrationApplication.java | 15 +- .../migrate_mongo_mstores_parameters.json | 6 + .../oa/graph/raw_all/oozie_app/workflow.xml | 3 + .../oa/graph/raw_step1/oozie_app/workflow.xml | 61 +----- 8 files changed, 349 insertions(+), 93 deletions(-) create mode 100644 dhp-common/src/main/java/eu/dnetlib/dhp/common/MDStoreInfo.java create mode 100644 dhp-common/src/test/java/eu/dnetlib/dhp/common/MdStoreClientTest.java diff --git a/dhp-common/src/main/java/eu/dnetlib/dhp/common/MDStoreInfo.java b/dhp-common/src/main/java/eu/dnetlib/dhp/common/MDStoreInfo.java new file mode 100644 index 000000000..bd1ccca50 --- /dev/null +++ b/dhp-common/src/main/java/eu/dnetlib/dhp/common/MDStoreInfo.java @@ -0,0 +1,100 @@ + +package eu.dnetlib.dhp.common; + +/** + * This utility represent the Metadata Store information + * needed during the migration from mongo to HDFS to store + */ +public class MDStoreInfo { + private String mdstore; + private String currentId; + private Long latestTimestamp; + + /** + * Instantiates a new Md store info. + */ + public MDStoreInfo() { + } + + /** + * Instantiates a new Md store info. + * + * @param mdstore the mdstore + * @param currentId the current id + * @param latestTimestamp the latest timestamp + */ + public MDStoreInfo(String mdstore, String currentId, Long latestTimestamp) { + this.mdstore = mdstore; + this.currentId = currentId; + this.latestTimestamp = latestTimestamp; + } + + /** + * Gets mdstore. + * + * @return the mdstore + */ + public String getMdstore() { + return mdstore; + } + + /** + * Sets mdstore. + * + * @param mdstore the mdstore + * @return the mdstore + */ + public MDStoreInfo setMdstore(String mdstore) { + this.mdstore = mdstore; + return this; + } + + /** + * Gets current id. + * + * @return the current id + */ + public String getCurrentId() { + return currentId; + } + + /** + * Sets current id. + * + * @param currentId the current id + * @return the current id + */ + public MDStoreInfo setCurrentId(String currentId) { + this.currentId = currentId; + return this; + } + + /** + * Gets latest timestamp. + * + * @return the latest timestamp + */ + public Long getLatestTimestamp() { + return latestTimestamp; + } + + /** + * Sets latest timestamp. + * + * @param latestTimestamp the latest timestamp + * @return the latest timestamp + */ + public MDStoreInfo setLatestTimestamp(Long latestTimestamp) { + this.latestTimestamp = latestTimestamp; + return this; + } + + @Override + public String toString() { + return "MDStoreInfo{" + + "mdstore='" + mdstore + '\'' + + ", currentId='" + currentId + '\'' + + ", latestTimestamp=" + latestTimestamp + + '}'; + } +} diff --git a/dhp-common/src/main/java/eu/dnetlib/dhp/common/MdstoreClient.java b/dhp-common/src/main/java/eu/dnetlib/dhp/common/MdstoreClient.java index d06544ae1..34aa37be5 100644 --- a/dhp-common/src/main/java/eu/dnetlib/dhp/common/MdstoreClient.java +++ b/dhp-common/src/main/java/eu/dnetlib/dhp/common/MdstoreClient.java @@ -1,12 +1,12 @@ package eu.dnetlib.dhp.common; +import static com.mongodb.client.model.Sorts.descending; + import java.io.Closeable; import java.io.IOException; -import java.util.ArrayList; -import java.util.HashMap; -import java.util.Map; -import java.util.Optional; +import java.util.*; +import java.util.stream.Collectors; import java.util.stream.StreamSupport; import org.apache.commons.lang3.StringUtils; @@ -38,6 +38,26 @@ public class MdstoreClient implements Closeable { this.db = getDb(client, dbName); } + private Long parseTimestamp(Document f) { + if (f == null || !f.containsKey("timestamp")) + return null; + + Object ts = f.get("timestamp"); + + return Long.parseLong(ts.toString()); + } + + public Long getLatestTimestamp(final String collectionId) { + MongoCollection collection = db.getCollection(collectionId); + FindIterable result = collection.find().sort(descending("timestamp")).limit(1); + if (result == null) { + return null; + } + + Document f = result.first(); + return parseTimestamp(f); + } + public MongoCollection mdStore(final String mdId) { BasicDBObject query = (BasicDBObject) QueryBuilder.start("mdId").is(mdId).get(); @@ -54,6 +74,16 @@ public class MdstoreClient implements Closeable { return getColl(db, currentId, true); } + public List mdStoreWithTimestamp(final String mdFormat, final String mdLayout, + final String mdInterpretation) { + Map res = validCollections(mdFormat, mdLayout, mdInterpretation); + return res + .entrySet() + .stream() + .map(e -> new MDStoreInfo(e.getKey(), e.getValue(), getLatestTimestamp(e.getValue()))) + .collect(Collectors.toList()); + } + public Map validCollections( final String mdFormat, final String mdLayout, final String mdInterpretation) { 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 new file mode 100644 index 000000000..f38d04979 --- /dev/null +++ b/dhp-common/src/test/java/eu/dnetlib/dhp/common/MdStoreClientTest.java @@ -0,0 +1,36 @@ + +package eu.dnetlib.dhp.common; + +import java.io.IOException; +import java.nio.charset.StandardCharsets; +import java.nio.file.Files; +import java.nio.file.Path; +import java.nio.file.Paths; +import java.util.List; + +import org.junit.jupiter.api.Test; + +import com.fasterxml.jackson.core.JsonProcessingException; +import com.fasterxml.jackson.databind.ObjectMapper; + +public class MdStoreClientTest { + + @Test + public void testMongoCollection() throws IOException { + final MdstoreClient client = new MdstoreClient("mongodb://localhost:27017", "mdstore"); + + final ObjectMapper mapper = new ObjectMapper(); + + final List infos = client.mdStoreWithTimestamp("ODF", "store", "cleaned"); + + infos.forEach(System.out::println); + + final String s = mapper.writeValueAsString(infos); + + Path fileName = Paths.get("/Users/sandro/mdstore_info.json"); + + // Writing into the file + Files.write(fileName, s.getBytes(StandardCharsets.UTF_8)); + + } +} diff --git a/dhp-workflows/dhp-graph-mapper/src/main/java/eu/dnetlib/dhp/oa/graph/raw/MigrateMongoMdstoresApplication.java b/dhp-workflows/dhp-graph-mapper/src/main/java/eu/dnetlib/dhp/oa/graph/raw/MigrateMongoMdstoresApplication.java index 6dbab96cb..57ca9b4c4 100644 --- a/dhp-workflows/dhp-graph-mapper/src/main/java/eu/dnetlib/dhp/oa/graph/raw/MigrateMongoMdstoresApplication.java +++ b/dhp-workflows/dhp-graph-mapper/src/main/java/eu/dnetlib/dhp/oa/graph/raw/MigrateMongoMdstoresApplication.java @@ -1,31 +1,87 @@ package eu.dnetlib.dhp.oa.graph.raw; +import static eu.dnetlib.dhp.utils.DHPUtils.getHadoopConfiguration; + import java.io.Closeable; import java.io.IOException; +import java.util.HashMap; +import java.util.List; import java.util.Map; -import java.util.Map.Entry; +import java.util.Objects; +import java.util.function.Consumer; 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; +import eu.dnetlib.dhp.common.MDStoreInfo; import eu.dnetlib.dhp.common.MdstoreClient; import eu.dnetlib.dhp.oa.graph.raw.common.AbstractMigrationApplication; public class MigrateMongoMdstoresApplication extends AbstractMigrationApplication implements Closeable { private static final Logger log = LoggerFactory.getLogger(MigrateMongoMdstoresApplication.class); - private final MdstoreClient mdstoreClient; + private static List snapshotsMDStores(final MdstoreClient client, + final String format, + final String layout, + final String interpretation) { + return client.mdStoreWithTimestamp(format, layout, interpretation); + } + + private static MDStoreInfo extractPath(final String path, final String basePath) { + int res = path.indexOf(basePath); + if (res > 0) { + String[] split = path.substring(res).split("/"); + if (split.length > 2) { + final String ts = split[split.length - 1]; + final String mdStore = split[split.length - 2]; + return new MDStoreInfo(mdStore, null, Long.parseLong(ts)); + } + } + return null; + } + + private static Map hdfsMDStoreInfo(FileSystem fs, final String basePath) throws IOException { + final Map hdfs_store = new HashMap<>(); + final Path p = new Path(basePath); + final RemoteIterator ls = fs.listFiles(p, true); + while (ls.hasNext()) { + + String current = ls.next().getPath().toString(); + + final MDStoreInfo info = extractPath(current, basePath); + if (info != null) { + hdfs_store.put(info.getMdstore(), info); + } + } + return hdfs_store; + } + + private static String createMDStoreDir(final String basePath, final String mdStoreId) { + if (basePath.endsWith("/")) { + return basePath + mdStoreId; + } else { + return String.format("%s/%s", basePath, mdStoreId); + } + } + public static void main(final String[] args) throws Exception { final ArgumentApplicationParser parser = new ArgumentApplicationParser( IOUtils .toString( - MigrateMongoMdstoresApplication.class - .getResourceAsStream("/eu/dnetlib/dhp/oa/graph/migrate_mongo_mstores_parameters.json"))); + Objects + .requireNonNull( + MigrateMongoMdstoresApplication.class + .getResourceAsStream( + "/eu/dnetlib/dhp/oa/graph/migrate_mongo_mstores_parameters.json")))); parser.parseArgument(args); final String mongoBaseUrl = parser.get("mongoBaseUrl"); @@ -36,30 +92,115 @@ public class MigrateMongoMdstoresApplication extends AbstractMigrationApplicatio final String mdInterpretation = parser.get("mdInterpretation"); final String hdfsPath = parser.get("hdfsPath"); + final String nameNode = parser.get("nameNode"); - try (MigrateMongoMdstoresApplication app = new MigrateMongoMdstoresApplication(hdfsPath, mongoBaseUrl, - mongoDb)) { - app.execute(mdFormat, mdLayout, mdInterpretation); - } + final FileSystem fileSystem = FileSystem.get(getHadoopConfiguration(nameNode)); + + final MdstoreClient mdstoreClient = new MdstoreClient(mongoBaseUrl, mongoDb); + + final List mongoMDStores = snapshotsMDStores(mdstoreClient, mdFormat, mdLayout, mdInterpretation); + + final Map hdfsMDStores = hdfsMDStoreInfo(fileSystem, hdfsPath); + + mongoMDStores + .stream() + .filter(currentMDStore -> currentMDStore.getLatestTimestamp() != null) + .forEach( + consumeMDStore( + mdFormat, mdLayout, mdInterpretation, hdfsPath, fileSystem, mongoBaseUrl, mongoDb, hdfsMDStores)); } - public MigrateMongoMdstoresApplication( - final String hdfsPath, final String mongoBaseUrl, final String mongoDb) throws Exception { + /** + * This method is responsible to synch only the mongoMDStore that changed since last time + * @param mdFormat the MDStore's format + * @param mdLayout the MDStore'slayout + * @param mdInterpretation the MDStore's interpretation + * @param hdfsPath the basePath into hdfs where all MD-stores are stored + * @param fileSystem The Hadoop File system client + * @param hdfsMDStores A Map containing as Key the mdstore ID and as value the @{@link MDStoreInfo} + * @return + */ + private static Consumer consumeMDStore(String mdFormat, String mdLayout, String mdInterpretation, + String hdfsPath, FileSystem fileSystem, final String mongoBaseUrl, final String mongoDb, + Map hdfsMDStores) { + return currentMDStore -> { + // If the key is missing it means that the mdstore is not present in hdfs + // that is the hdfs path basePath/MDSTOREID/timestamp is missing + // So we have to synch it + if (!hdfsMDStores.containsKey(currentMDStore.getMdstore())) { + log.info("Adding store " + currentMDStore.getMdstore()); + try { + synchMDStoreIntoHDFS( + mdFormat, mdLayout, mdInterpretation, hdfsPath, fileSystem, mongoBaseUrl, mongoDb, + currentMDStore); + } catch (IOException e) { + throw new RuntimeException(e); + } + } else { + final MDStoreInfo current = hdfsMDStores.get(currentMDStore.getMdstore()); + // IF the key is present it means that in hdfs we have a path + // basePath/MDSTOREID/timestamp but the timestamp on hdfs is older that the + // new one in mongo so we have to synch the new mdstore and delete the old one + if (currentMDStore.getLatestTimestamp() > current.getLatestTimestamp()) { + log.info("Updating MDStore " + currentMDStore.getMdstore()); + final String mdstoreDir = createMDStoreDir(hdfsPath, currentMDStore.getMdstore()); + final String rmPath = createMDStoreDir(mdstoreDir, current.getLatestTimestamp().toString()); + try { + synchMDStoreIntoHDFS( + mdFormat, mdLayout, mdInterpretation, hdfsPath, fileSystem, mongoBaseUrl, mongoDb, + currentMDStore); + log.info("deleting " + rmPath); + // DELETE THE OLD MDSTORE + fileSystem.delete(new Path(rmPath), true); + } catch (IOException e) { + throw new RuntimeException("Unable to synch and remove path " + rmPath, e); + } + } + } + }; + } + + /** + *This methos store into hdfs all the mongo record of a single mdstore + * + * @param mdFormat the MDStore's format + * @param mdLayout the MDStore'slayout + * @param mdInterpretation the MDStore's interpretation + * @param hdfsPath the basePath into hdfs where all MD-stores are stored + * @param fileSystem The Hadoop File system client + * @param currentMDStore The current Mongo MDStore ID + * @throws IOException + */ + private static void synchMDStoreIntoHDFS(String mdFormat, String mdLayout, String mdInterpretation, String hdfsPath, + FileSystem fileSystem, final String mongoBaseUrl, final String mongoDb, MDStoreInfo currentMDStore) + throws IOException { + // FIRST CREATE the directory basePath/MDSTOREID + final String mdstoreDir = createMDStoreDir(hdfsPath, currentMDStore.getMdstore()); + fileSystem.mkdirs(new Path(mdstoreDir)); + // Then synch all the records into basePath/MDSTOREID/timestamp + final String currentIdDir = createMDStoreDir(mdstoreDir, currentMDStore.getLatestTimestamp().toString()); + try (MigrateMongoMdstoresApplication app = new MigrateMongoMdstoresApplication(mongoBaseUrl, mongoDb, + currentIdDir)) { + app.execute(currentMDStore.getCurrentId(), mdFormat, mdLayout, mdInterpretation); + } catch (Exception e) { + throw new RuntimeException( + String + .format("Error on sync mdstore with ID %s into path %s", currentMDStore.getMdstore(), currentIdDir), + e); + } + log.info(String.format("Synchronized mdStore id : %s into path %s", currentMDStore.getMdstore(), currentIdDir)); + } + + public MigrateMongoMdstoresApplication(final String mongoBaseUrl, final String mongoDb, final String hdfsPath) + throws Exception { super(hdfsPath); this.mdstoreClient = new MdstoreClient(mongoBaseUrl, mongoDb); } - public void execute(final String format, final String layout, final String interpretation) { - final Map colls = mdstoreClient.validCollections(format, layout, interpretation); - log.info("Found {} mdstores", colls.size()); - - for (final Entry entry : colls.entrySet()) { - log.info("Processing mdstore {} (collection: {})", entry.getKey(), entry.getValue()); - final String currentColl = entry.getValue(); - - for (final String xml : mdstoreClient.listRecords(currentColl)) { - emit(xml, String.format("%s-%s-%s", format, layout, interpretation)); - } + public void execute(final String currentColl, final String format, final String layout, + final String interpretation) { + for (final String xml : mdstoreClient.listRecords(currentColl)) { + emit(xml, String.format("%s-%s-%s", format, layout, interpretation)); } } diff --git a/dhp-workflows/dhp-graph-mapper/src/main/java/eu/dnetlib/dhp/oa/graph/raw/common/AbstractMigrationApplication.java b/dhp-workflows/dhp-graph-mapper/src/main/java/eu/dnetlib/dhp/oa/graph/raw/common/AbstractMigrationApplication.java index 6f63e9327..b0dc7d7e7 100644 --- a/dhp-workflows/dhp-graph-mapper/src/main/java/eu/dnetlib/dhp/oa/graph/raw/common/AbstractMigrationApplication.java +++ b/dhp-workflows/dhp-graph-mapper/src/main/java/eu/dnetlib/dhp/oa/graph/raw/common/AbstractMigrationApplication.java @@ -3,33 +3,20 @@ package eu.dnetlib.dhp.oa.graph.raw.common; import java.io.Closeable; import java.io.IOException; -import java.util.Arrays; -import java.util.List; import java.util.Set; import java.util.concurrent.atomic.AtomicInteger; -import java.util.stream.Collectors; -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 org.apache.hadoop.conf.Configuration; import org.apache.hadoop.fs.Path; import org.apache.hadoop.io.SequenceFile; import org.apache.hadoop.io.Text; -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 com.fasterxml.jackson.core.JsonProcessingException; import com.fasterxml.jackson.databind.ObjectMapper; -import eu.dnetlib.dhp.common.vocabulary.VocabularyGroup; -import eu.dnetlib.dhp.oa.graph.raw.OafToOafMapper; -import eu.dnetlib.dhp.oa.graph.raw.OdfToOafMapper; -import eu.dnetlib.dhp.schema.mdstore.MDStoreWithInfo; -import eu.dnetlib.dhp.schema.oaf.*; +import eu.dnetlib.dhp.schema.oaf.Oaf; import eu.dnetlib.dhp.utils.DHPUtils; public class AbstractMigrationApplication implements Closeable { diff --git a/dhp-workflows/dhp-graph-mapper/src/main/resources/eu/dnetlib/dhp/oa/graph/migrate_mongo_mstores_parameters.json b/dhp-workflows/dhp-graph-mapper/src/main/resources/eu/dnetlib/dhp/oa/graph/migrate_mongo_mstores_parameters.json index ee1a6ac4e..b505b7fe0 100644 --- a/dhp-workflows/dhp-graph-mapper/src/main/resources/eu/dnetlib/dhp/oa/graph/migrate_mongo_mstores_parameters.json +++ b/dhp-workflows/dhp-graph-mapper/src/main/resources/eu/dnetlib/dhp/oa/graph/migrate_mongo_mstores_parameters.json @@ -5,6 +5,12 @@ "paramDescription": "the path where storing the sequential file", "paramRequired": true }, + { + "paramName": "n", + "paramLongName": "nameNode", + "paramDescription": "the hdfs Name node url", + "paramRequired": true + }, { "paramName": "mongourl", "paramLongName": "mongoBaseUrl", diff --git a/dhp-workflows/dhp-graph-mapper/src/main/resources/eu/dnetlib/dhp/oa/graph/raw_all/oozie_app/workflow.xml b/dhp-workflows/dhp-graph-mapper/src/main/resources/eu/dnetlib/dhp/oa/graph/raw_all/oozie_app/workflow.xml index 8262c6923..069dd09f7 100644 --- a/dhp-workflows/dhp-graph-mapper/src/main/resources/eu/dnetlib/dhp/oa/graph/raw_all/oozie_app/workflow.xml +++ b/dhp-workflows/dhp-graph-mapper/src/main/resources/eu/dnetlib/dhp/oa/graph/raw_all/oozie_app/workflow.xml @@ -301,6 +301,7 @@ --mdFormatODF --mdLayoutstore --mdInterpretationcleaned + --nameNode${nameNode} @@ -326,6 +327,7 @@ --mdFormatOAF --mdLayoutstore --mdInterpretationcleaned + --nameNode${nameNode} @@ -343,6 +345,7 @@ --mdFormatOAF --mdLayoutstore --mdInterpretationintersection + --nameNode${nameNode} diff --git a/dhp-workflows/dhp-graph-mapper/src/main/resources/eu/dnetlib/dhp/oa/graph/raw_step1/oozie_app/workflow.xml b/dhp-workflows/dhp-graph-mapper/src/main/resources/eu/dnetlib/dhp/oa/graph/raw_step1/oozie_app/workflow.xml index 9b68cfb05..c57371560 100644 --- a/dhp-workflows/dhp-graph-mapper/src/main/resources/eu/dnetlib/dhp/oa/graph/raw_step1/oozie_app/workflow.xml +++ b/dhp-workflows/dhp-graph-mapper/src/main/resources/eu/dnetlib/dhp/oa/graph/raw_step1/oozie_app/workflow.xml @@ -4,18 +4,6 @@ migrationPathStep1 the base path to store hdfs file - - postgresURL - the postgres URL to access to the database - - - postgresUser - the user postgres - - - postgresPassword - the password postgres - mongoURL mongoDB url, example: mongodb://[username:password@]host[:port] @@ -24,27 +12,6 @@ mongoDb mongo database - - isLookupUrl - the address of the lookUp service - - - nsPrefixBlacklist - - a blacklist of nsprefixes (comma separeted) - - - sparkDriverMemory - memory for driver process - - - sparkExecutorMemory - memory for individual executor - - - sparkExecutorCores - number of cores used by single executor - @@ -58,37 +25,22 @@ - - -
- - - - ${jobTracker} - ${nameNode} - eu.dnetlib.dhp.migration.step1.MigrateDbEntitiesApplication - -p${migrationPathStep1}/db_records - -pgurl${postgresURL} - -pguser${postgresUser} - -pgpasswd${postgresPassword} - -islookup${isLookupUrl} - --nsPrefixBlacklist${nsPrefixBlacklist} - - ${jobTracker} ${nameNode} - eu.dnetlib.dhp.migration.step1.MigrateMongoMdstoresApplication - -p${migrationPathStep1}/odf_records + eu.dnetlib.dhp.oa.graph.raw.MigrateMongoMdstoresApplication + -p${migrationPathStep1} -mongourl${mongoURL} -mongodb${mongoDb} -fODF -lstore -icleaned + --nameNode${nameNode} + @@ -98,13 +50,14 @@ ${jobTracker} ${nameNode} - eu.dnetlib.dhp.migration.step1.MigrateMongoMdstoresApplication - -p${migrationPathStep1}/oaf_records + eu.dnetlib.dhp.oa.graph.raw.MigrateMongoMdstoresApplication + -p${migrationPathStep1} -mongourl${mongoURL} -mongodb${mongoDb} -fOAF -lstore -icleaned + --nameNode${nameNode} From 062abfd669fbb70ede939ba0e65fa44a59ef49ac Mon Sep 17 00:00:00 2001 From: Claudio Atzori Date: Tue, 6 Dec 2022 12:04:00 +0100 Subject: [PATCH 250/535] fixed NPE, removed unused stuff --- .../java/eu/dnetlib/dhp/oa/dedup/DedupRecordFactory.java | 9 +++------ 1 file changed, 3 insertions(+), 6 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 82bf87cca..7637cde93 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 @@ -94,7 +94,6 @@ public class DedupRecordFactory { BeanUtils.copyProperties(entity, first); - final Collection dates = Lists.newArrayList(); final List> authors = Lists.newArrayList(); entityList @@ -103,16 +102,14 @@ public class DedupRecordFactory { entity.mergeFrom(duplicate); if (ModelSupport.isSubClass(duplicate, Result.class)) { Result r1 = (Result) duplicate; - if (r1.getAuthor() != null && StringUtils.isNotBlank(r1.getDateofacceptance().getValue())) - authors.add(r1.getAuthor()); - if (r1.getDateofacceptance() != null) - dates.add(r1.getDateofacceptance().getValue()); + Optional + .ofNullable(r1.getAuthor()) + .ifPresent(a -> authors.add(a)); } }); // set authors and date if (ModelSupport.isSubClass(entity, Result.class)) { - // ((Result) entity).setDateofacceptance(DatePicker.pick(dates)); ((Result) entity).setAuthor(AuthorMerger.merge(authors)); } From cd1b58483ec457cd5624bf176c71e8ff45af9e2a Mon Sep 17 00:00:00 2001 From: Claudio Atzori Date: Wed, 7 Dec 2022 10:38:42 +0100 Subject: [PATCH 251/535] [bulk tag] fixed Community configuration parsing to void NPE --- .../CommunityConfigurationFactory.java | 6 +- .../CommunityConfigurationFactoryTest.java | 32 + .../community_configuration_selcrit2.xml | 4459 +++++++++++++++++ 3 files changed, 4494 insertions(+), 3 deletions(-) create mode 100644 dhp-workflows/dhp-enrichment/src/test/resources/eu/dnetlib/dhp/bulktag/communityconfiguration/community_configuration_selcrit2.xml 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 52ca606fc..ae1deaa73 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 @@ -90,12 +90,12 @@ public class CommunityConfigurationFactory { } private static SelectionConstraints parseConstrains(Node node) { - Node aconstraints = node.selectSingleNode("./advancedConstraints"); - if (aconstraints == null) { + Node advConstsNode = node.selectSingleNode("./advancedConstraints"); + if (advConstsNode == null || StringUtils.isBlank(StringUtils.trim(advConstsNode.getText()))) { return null; } SelectionConstraints selectionConstraints = new Gson() - .fromJson(aconstraints.getText(), SelectionConstraints.class); + .fromJson(advConstsNode.getText(), SelectionConstraints.class); selectionConstraints.setSelection(resolver); return selectionConstraints; 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 861546adb..e3a660835 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 @@ -83,4 +83,36 @@ class CommunityConfigurationFactoryTest { Assertions.assertEquals("dariah", comm.get(0)); } + @Test + void loadSelCriteriaTest2() throws DocumentException, IOException, SAXException { + String xml = IOUtils + .toString( + getClass() + .getResourceAsStream( + "/eu/dnetlib/dhp/bulktag/communityconfiguration/community_configuration_selcrit2.xml")); + final CommunityConfiguration cc = CommunityConfigurationFactory.newInstance(xml); + Map> param = new HashMap<>(); + param.put("author", new ArrayList<>(Collections.singletonList("Pippo Pippi"))); + param + .put( + "description", + new ArrayList<>( + Collections + .singletonList( + "This work has been partially supported by DARIAH-EU infrastructure"))); + param + .put( + "contributor", + new ArrayList<>( + Collections + .singletonList( + "Author X helped to write the paper. X works for DARIAH"))); + List comm = cc + .getCommunityForDatasource( + "openaire____::1cfdb2e14977f31a98e0118283401f32", param); + + //TODO add more assertions + Assertions.assertEquals(0, comm.size()); + } + } diff --git a/dhp-workflows/dhp-enrichment/src/test/resources/eu/dnetlib/dhp/bulktag/communityconfiguration/community_configuration_selcrit2.xml b/dhp-workflows/dhp-enrichment/src/test/resources/eu/dnetlib/dhp/bulktag/communityconfiguration/community_configuration_selcrit2.xml new file mode 100644 index 000000000..b2b62e314 --- /dev/null +++ b/dhp-workflows/dhp-enrichment/src/test/resources/eu/dnetlib/dhp/bulktag/communityconfiguration/community_configuration_selcrit2.xml @@ -0,0 +1,4459 @@ + + + + + + + orp_________::9b49c76cf40a93f89944889678b741f9 + + + + + + egi + + + + + + + + + Ocean mapping + Multibeam Backscatter + Bathymetry + Seabed classification + Submarine Geomorphology + Underwater Photogrammetry + + + + issn___print::aedc6f1e34247e464bc8b45270e4b972 + {"criteria":[{"constraint":[{"verb":"contains_caseinsensitive","field":"title","value":"bathymetry"}]},{"constraint":[{"verb":"contains_caseinsensitive","field":"description","value":"bathymetry"}]},{"constraint":[{"verb":"contains_caseinsensitive","field":"description","value":"backscatter"}]},{"constraint":[{"verb":"contains_caseinsensitive","field":"description","value":"photogrammetry"},{"verb":"contains_caseinsensitive","field":"description","value":"underwater"}]},{"constraint":[{"verb":"contains_caseinsensitive","field":"description","value":"multibeam"}]},{"constraint":[{"verb":"contains_caseinsensitive","field":"description","value":"bathymetric"}]}]} + + + issn___print::ed5a370152cb6cafc3d5bff280a94c88 + {"criteria":[{"constraint":[{"verb":"equals_caseinsensitive","field":"title","value":"submarine geomorphology"}]},{"constraint":[{"verb":"contains_caseinsensitive","field":"description","value":"bathymetry"}]},{"constraint":[{"verb":"contains_caseinsensitive","field":"description","value":"marine"}]},{"constraint":[{"verb":"contains_caseinsensitive","field":"description","value":"photogrammetry"},{"verb":"contains_caseinsensitive","field":"description","value":"underwater"}]},{"constraint":[{"verb":"contains_caseinsensitive","field":"description","value":"backscatter"}]},{"constraint":[{"verb":"contains_caseinsensitive","field":"description","value":"multibeam"}]},{"constraint":[{"verb":"contains_caseinsensitive","field":"description","value":"bathymetric"}]}]} + + + opendoar____::99f59c0842e83c808dd1813b48a37c6a + {"criteria":[{"constraint":[{"verb":"contains_caseinsensitive","field":"description","value":"bathymetry"}]},{"constraint":[{"verb":"contains_caseinsensitive","field":"title","value":"bathymetry"}]},{"constraint":[{"verb":"contains_caseinsensitive","field":"description","value":"photogrammetry"},{"verb":"contains_caseinsensitive","field":"description","value":"underwater"}]},{"constraint":[{"verb":"contains_caseinsensitive","field":"description","value":"backscatter"}]},{"constraint":[{"verb":"contains_caseinsensitive","field":"description","value":"multibeam"}]},{"constraint":[{"verb":"contains_caseinsensitive","field":"description","value":"bathymetric"}]},{"constraint":[{"verb":"contains_caseinsensitive","field":"description","value":"bathymetric"}]}]} + + + opendoar____::8f14e45fceea167a5a36dedd4bea2543 + {"criteria":[{"constraint":[{"verb":"contains_caseinsensitive","field":"description","value":"bathymetry"}]},{"constraint":[{"verb":"contains_caseinsensitive","field":"description","value":"backscatter"}]},{"constraint":[{"verb":"contains_caseinsensitive","field":"title","value":"bathymetry"}]},{"constraint":[{"verb":"contains_caseinsensitive","field":"description","value":"photogrammetry"},{"verb":"contains_caseinsensitive","field":"description","value":"underwater"}]},{"constraint":[{"verb":"contains_caseinsensitive","field":"description","value":"multibeam"}]},{"constraint":[{"verb":"contains_caseinsensitive","field":"description","value":"bathymetric"}]}]} + + + issn___print::d143b63af2b83be033d45d82f741761b + {"criteria":[{"constraint":[{"verb":"contains_caseinsensitive","field":"description","value":"bathymetry"}]},{"constraint":[{"verb":"contains_caseinsensitive","field":"description","value":"backscatter"}]},{"constraint":[{"verb":"contains_caseinsensitive","field":"description","value":"photogrammetry"},{"verb":"contains_caseinsensitive","field":"description","value":"underwater"},{"verb":"contains_caseinsensitive","field":"description","value":"marine"}]},{"constraint":[{"verb":"contains_caseinsensitive","field":"description","value":"underwater"}]},{"constraint":[{"verb":"contains_caseinsensitive","field":"description","value":"marine"}]}]} + + + issn___print::780e93f1de06f8b0eb4e98606dfc7197 + {"criteria":[{"constraint":[{"verb":"contains_caseinsensitive","field":"description","value":"underwater"}]},{"constraint":[{"verb":"contains_caseinsensitive","field":"title","value":"bathymetric"}]},{"constraint":[{"verb":"contains_caseinsensitive","field":"description","value":"backscatter"}]},{"constraint":[{"verb":"contains_caseinsensitive","field":"title","value":"bathymetry"}]},{"constraint":[{"verb":"contains_caseinsensitive","field":"description","value":"photogrammetry"},{"verb":"contains_caseinsensitive","field":"description","value":"underwater"}]},{"constraint":[{"verb":"contains_caseinsensitive","field":"description","value":"multibeam"}]}]} + + + doajarticles::be08e041165577d36a805b13cd7d2ba7 + {"criteria":[{"constraint":[{"verb":"contains_caseinsensitive","field":"title","value":"underwater"}]},{"constraint":[{"verb":"contains_caseinsensitive","field":"description","value":"bathymetry"}]},{"constraint":[{"verb":"contains_caseinsensitive","field":"description","value":"backscatter"}]},{"constraint":[{"verb":"contains_caseinsensitive","field":"description","value":"photogrammetry"},{"verb":"contains_caseinsensitive","field":"description","value":"underwater"}]},{"constraint":[{"verb":"contains_caseinsensitive","field":"title","value":"submarine"}]},{"constraint":[{"verb":"contains_caseinsensitive","field":"description","value":"multibeam"}]}]} + + + opendoar____::ea119a40c1592979f51819b0bd38d39d + {"criteria":[{"constraint":[{"verb":"contains_caseinsensitive","field":"description","value":"bathymetry"}]},{"constraint":[{"verb":"contains_caseinsensitive","field":"description","value":"backscatter"}]},{"constraint":[{"verb":"contains_caseinsensitive","field":"title","value":"submarine"}]},{"constraint":[{"verb":"contains_caseinsensitive","field":"title","value":"underwater"}]},{"constraint":[{"verb":"contains_caseinsensitive","field":"description","value":"backscatter"}]},{"constraint":[{"verb":"contains_caseinsensitive","field":"description","value":"photogrammetry"},{"verb":"contains_caseinsensitive","field":"description","value":"underwater"}]}]} + + + doajarticles::795b5787c6d1515629042fd2f398dd0e + {"criteria":[{"constraint":[{"verb":"contains_caseinsensitive","field":"title","value":"submarine"}]},{"constraint":[{"verb":"contains_caseinsensitive","field":"description","value":"bathymetry"}]},{"constraint":[{"verb":"contains_caseinsensitive","field":"description","value":"backscatter"}]},{"constraint":[{"verb":"contains_caseinsensitive","field":"description","value":"underwater"}]},{"constraint":[{"verb":"contains_caseinsensitive","field":"description","value":"photogrammetry"},{"verb":"contains_caseinsensitive","field":"description","value":"underwater"}]}]} + + + issn___print::bfcfaf0f496b008f5ab4381976a78743 + {"criteria":[{"constraint":[{"verb":"contains_caseinsensitive","field":"title","value":"submarine"}]},{"constraint":[{"verb":"contains_caseinsensitive","field":"description","value":"bathymetry"}]},{"constraint":[{"verb":"contains_caseinsensitive","field":"description","value":"bathymetric"}]},{"constraint":[{"verb":"contains_caseinsensitive","field":"description","value":"underwater"}]},{"constraint":[{"verb":"contains_caseinsensitive","field":"description","value":"marine"}]},{"constraint":[{"verb":"contains_caseinsensitive","field":"description","value":"multibeam"}]},{"constraint":[{"verb":"contains_caseinsensitive","field":"description","value":"backscatter"}]},{"constraint":[{"verb":"contains_caseinsensitive","field":"description","value":"photogrammetry"},{"verb":"contains_caseinsensitive","field":"description","value":"underwater"}]}]} + + + re3data_____::9633d1e8c4309c833c2c442abeb0cfeb + {"criteria":[{"constraint":[{"verb":"contains_caseinsensitive","field":"title","value":"bathymetry"}]},{"constraint":[{"verb":"contains_caseinsensitive","field":"title","value":"multibeam"}]},{"constraint":[{"verb":"contains_caseinsensitive","field":"title","value":"backscatter"}]},{"constraint":[{"verb":"contains_caseinsensitive","field":"description","value":"bathymetry"}]},{"constraint":[{"verb":"contains_caseinsensitive","field":"description","value":"backscatter"}]}]} + + + + + obsea + + + + openearth + + + + bermudabream + + + + marxiv + + + + meditmarsci + + + + sail + + + + greenmardata + + + + bluecloud + + + + emso-eric + + + + atlas + + + + medship-goship + + + + + + + + + + + + re3data_____::a507cdacc5bbcc08761c92185dee5cab + + + + + + oac_clarin + + + + + + + + + + + + rda-related + + + rda + + + + + + + + + + SDG13 - Climate action + SDG8 - Decent work and economic + growth + SDG15 - Life on land + SDG2 - Zero hunger + SDG17 - Partnerships for the + goals + SDG10 - Reduced inequalities + SDG5 - Gender equality + SDG12 - Responsible + consumption and production + SDG14 - Life below water + SDG6 - Clean water and + sanitation + SDG11 - Sustainable cities and communities + SDG1 - No poverty + SDG3 - + Good health and well being + SDG7 - Affordable and clean energy + SDG4 - Quality + education + SDG9 - Industry innovation and infrastructure + SDG16 - Peace justice + and strong institutions + + + + + oac_sdsn-greece + + + + + + + + + modern art + monuments + europeana data model + field walking + frescoes + LIDO metadata schema + art history + excavation + Arts and Humanities General + coins + temples + numismatics + lithics + environmental archaeology + digital cultural heritage + archaeological reports + history + CRMba + churches + cultural heritage + archaeological stratigraphy + religious art + digital humanities + archaeological sites + linguistic studies + bioarchaeology + architectural orders + palaeoanthropology + fine arts + europeana + CIDOC CRM + decorations + classic art + stratigraphy + digital archaeology + intangible cultural heritage + walls + chapels + CRMtex + Language and Literature + paintings + archaeology + mosaics + burials + medieval art + castles + CARARE metadata schema + statues + natural language processing + inscriptions + CRMsci + vaults + contemporary art + Arts and Humanities + CRMarchaeo + pottery + + + + re3data_____::9ebe127e5f3a0bf401875690f3bb6b81 + + + + doajarticles::c6cd4b532e12868c1d760a8d7cda6815 + + + + doajarticles::a6de4499bb87bf3c01add0a9e2c9ed0b + + + + doajarticles::6eb31d13b12bc06bbac06aef63cf33c9 + + + + doajarticles::0da84e9dfdc8419576169e027baa8028 + + + + re3data_____::a48f09c562b247a9919acfe195549b47 + + + + doajarticles::2899208a99aa7d142646e0a80bfeef05 + + + + issn___print::9c2ffbdfdc48f6df69a6a3e6a280fae1 + + + + issn___print::72d240a2d51f2c2d77326e010cf22b17 + + + + issn__online::92e1d78d81161cd33f11e8224a57c8b9 + + + + issn___print::0a35021b9120f06d707698476b7e1882 + + + + issn__online::fb8a8d9129fd90ab209688cf42f9baa7 + + + + re3data_____::69162d0a40bab7cc80b40ec90da874b9 + + + + doajarticles::cdccbf32233ba16782875c757ababf11 + + + + doajarticles::b451f47924a84a65fa51bc82516993ce + + + + openaire____::ec63975d4da67750eede546e4aac955c + + + + re3data_____::2201b9b181a9f8361b3d3fbf496d18d7 + + + + issn___print::9519433d216b7ef0c292a355a99d0fb7 + + + + issn___print::7e7ed6b3beb5404bbd9354b6809fc903 + + + + doajarticles::e7d82763b1b210e769fd10d6648504ea + + + + issn___print::b8cdab13c697a46c6c1c243d57bce3fe + + + + re3data_____::f52792889d64d1a688b43ed989f6464a + + + + re3data_____::a507cdacc5bbcc08761c92185dee5cab + + + + re3data_____::fe0d76581a60e1287a93e2ed2cb29339 + + + + re3data_____::d9b253653defb9c50dbf5eed44f68c73 + + + + re3data_____::b47b4a53d7ad3c7d1e60d5a6fbb8c640 + + + + re3data_____::0d863103c89be7344eb200475aca0647 + + + + re3data_____::afc322a1da36b057851bbd025e9b0115 + + + + + + oac_dh-ch + + + storm + + + + crosscult + + + + wholodance_eu + + + + digcur2013 + + + + gravitate + + + + dipp2014 + + + + digitalhumanities + + + + dimpo + + + + adho + + + + chc + + + + wahr + + + + ibe + + + + ariadne + + + + parthenos-hub + + + + parthenos-training + + + + gandhara + + + + cmsouthasia + + + + nilgirihills + + + + shamsa_mustecio + + + + bodhgaya + + + + + + + + + + brain mapping + brain imaging + electroencephalography + arterial spin labelling + brain fingerprinting + brain + neuroimaging + Multimodal Brain Image Analysis + fMRI + neuroinformatics + fetal brain + brain ultrasonic imaging + topographic brain mapping + diffusion tensor imaging + computerized knowledge assessment + connectome mapping + brain magnetic resonance imaging + brain abnormalities + + + + re3data_____::5b9bf9171d92df854cf3c520692e9122 + + + + doajarticles::c7d3de67dc77af72f6747157441252ec + + + + re3data_____::8515794670370f49c1d176c399c714f5 + + + + doajarticles::d640648c84b10d425f96f11c3de468f3 + + + + doajarticles::0c0e74daa5d95504eade9c81ebbd5b8a + + + + rest________::fb1a3d4523c95e63496e3bc7ba36244b + + + + issn___print::3a700379401534d8f70b632d72d05f9c + + + + + + oac_ni + + + neuroinformatics + + + + hbp + + + + from_neuroscience_to_machine_learning + + + + ci2c + + + + opensourcebrain + + + + brainspeak + + + + braincom + + + + nextgenvis + + + + meso-brain + + + + neuroplasticity-workshop + + + + bionics + + + + brainmattrain-676408 + + + + repronim + + + + affectiveneuro + + + + con + + + + lab_neurol_sperim_irfmn_irccs_milano_it + + + + + + + + + + marine + ocean + fish + aqua + sea + + + + opendoar____::8f14e45fceea167a5a36dedd4bea2543 + + + + opendoar____::ea119a40c1592979f51819b0bd38d39d + + + + opendoar____::35d02fef7d9a24e237057162abab82b7 + + + + doajarticles::e5934203928262dca69c4fc3e3e95ead + + + + issn___print::90b2464d021b3b394af968bc90ef660b + + + + openaire____::c739f47b413c0ca5f8577b9f6a5c35ce + + + + + + oac_mes + + + adriplan + + + + devotes-project + + + + euro-basin + + + + naclim + + + + discardless + + + + assisibf + + + + meece + + + + facts + + + + proeel + + + + aquatrace + + + + myfish + + + + atlas + + + + blue-actionh2020 + + + + sponges + + + + merces_project + + + + bigdataocean + + + + columbus + + + + h2020-aquainvad-ed + + + + aquarius + + + + southern-ocean-observing-system + + + + eawag + + + + mossco + + + + onc + + + + oceanbiogeochemistry + + + + oceanliteracy + + + + openearth + + + + ocean + + + + calcifierraman + + + + bermudabream + + + + brcorp1 + + + + mce + + + + biogeochem + + + + ecc2014 + + + + fisheries + + + + sedinstcjfas + + + + umr-entropie + + + + farfish2020 + + + + primefish + + + + zf-ilcs + + + + climefish + + + + afrimed_eu + + + + spi-ace + + + + cice-consortium + + + + nemo-ocean + + + + mesopp-h2020 + + + + marxiv + + + + + + + + + + + + + oac_instruct + + + instruct + + + + west-life + + + + + + + + + + + + + oaa_elixir-gr + + + + + + + + + + + opendoar____::7e7757b1e12abcb736ab9a754ffb617a + {"criteria":[{"constraint":[{"verb":"contains","field":"contributor","value":"DARIAH"}]}]} + + + opendoar____::96da2f590cd7246bbde0051047b0d6f7 + {"criteria":[{"constraint":[{"verb":"contains","field":"contributor","value":"DARIAH"}]}]} + + + re3data_____::f52792889d64d1a688b43ed989f6464a + {"criteria":[{"constraint":[{"verb":"equals","field":"contributor","value":"Architrave"}]},{"constraint":[{"verb":"equals","field":"contributor","value":"Fontane Notizbücher"}]},{"constraint":[{"verb":"equals","field":"contributor","value":"FreiDi"}]},{"constraint":[{"verb":"equals","field":"contributor","value":"Virtuelles Skriptorium St. Matthias"}]},{"constraint":[{"verb":"equals","field":"contributor","value":"ePoetics"}]}]} + + + + + dariah + + + dimpo + + + + + + + + + + + + + risis + + + + + + + + + + + + + + + + + Green Transport + City mobility systems + Vulnerable road users + Traffic engineering + Transport electrification + Intermodal freight transport + Clean vehicle fleets + Intelligent mobility + Inflight refueling + District mobility systems + Navigation and control systems for optimised planning and routing + European Space Technology Platform + European Transport networks + Green cars + Inter-modality infrastructures + Advanced Take Off and Landing Ideas + Sustainable urban systems + port-area railway networks + Innovative forms of urban transport + Alliance for Logistics Innovation through Collaboration in Europe + Advisory Council for Aeronautics Research in Europe + Mobility services for people and goods + Guidance and traffic management + Passenger mobility + Smart mobility and services + transport innovation + high-speed railway + Vehicle design + Inland shipping + public transportation + aviation’s climate impact + Road transport + On-demand public transport + Personal Air Transport + Pipeline transport + European Association of Aviation Training and Education Organisations + Defrosting of railway infrastructure + Inclusive and affordable transport + River Information Services + jel:L92 + Increased use of public transport + Seamless mobility + STRIA + trolleybus transport + Intelligent Transport System + Low-emission alternative energy for transport + Shared mobility for people and goods + Business model for urban mobility + Interoperability of transport systems + Cross-border train slot booking + Air transport + Transport pricing + Sustainable transport + European Rail Transport Research Advisory Council + Alternative aircraft configurations + Railways applications + urban transport + Environmental impact of transport + urban freight delivery systems + Automated Road Transport + Alternative fuels in public transport + Active LIDAR-sensor for GHG-measurements + Autonomous logistics operations + Rational use of motorised transport + Network and traffic management systems + electrification of railway wagons + Single European Sky + Electrified road systems + Railway dynamics + Motorway of the Sea + smart railway communications + Maritime transport + Environmental- friendly transport + Combined transport + Connected automated driving technology + Innovative freight logistics services + automated and shared vehicles + Alternative Aircraft Systems + Land-use and transport interaction + Public transport system + Business plan for shared mobility + Shared mobility + Growing of mobility demand + European Road Transport Research Advisory Council + WATERBORNE ETP + Effective transport management system + Short Sea Shipping + air traffic management + Sea hubs and the motorways of the sea + Urban mobility solutions + Smart city planning + Maritime spatial planning + EUropean rail Research Network of Excellence + ENERGY CONSUMPTION BY THE TRANSPORT SECTOR + Integrated urban plan + inland waterway services + European Conference of Transport Research Institutes + air vehicles + E-freight + Automated Driving + Automated ships + pricing for cross-border passenger transport + Vehicle efficiency + Railway transport + Electric vehicles + Road traffic monitoring + Deep sea shipping + Circular economy in transport + Traffic congestion + air transport system + Urban logistics + Rail transport + OpenStreetMap + high speed rail + Transportation engineering + Intermodal travel information + Flight Data Recorders + Advanced driver assistance systems + long distance freight transport + Inland waterway transport + Smart mobility + Mobility integration + Personal Rapid Transit system + Safety measures & requirements for roads + Green rail transport + Vehicle manufacturing + Future Airport Layout + Rail technologies + European Intermodal Research Advisory Council + inland navigation + Automated urban vehicles + ECSS-standards + Traveller services + Polluting transport + Air Traffic Control + Cooperative and connected and automated transport + Innovative powertrains + Quality of transport system and services + door-to- door logistics chain + Inter-modal aspects of urban mobility + Innovative freight delivery systems + urban freight delivery infrastructures + + + + doajarticles::1c5bdf8fca58937894ad1441cca99b76 + + + + doajarticles::b37a634324a45c821687e6e80e6f53b4 + + + + doajarticles::4bf64f2a104040e4e055cd9594b2d77c + + + + doajarticles::479ca537c12755d1868bbf02938a900c + + + + doajarticles::55f31df96a60e2309f45b7c265fcf7a2 + + + + doajarticles::c52a09891a5301f9986ebbfe3761810c + + + + doajarticles::379807bc7f6c71a227ef1651462c414c + + + + doajarticles::36069db531a00b85a2e8fb301f4bdc19 + + + + doajarticles::b6a898da311ded96fabf49c520b80d5d + + + + doajarticles::d0753d9180b35a271d8b4a31f449749f + + + + doajarticles::172050a92511838393a3fe237ae47e31 + + + + doajarticles::301ed96c62abb160a3e29796efe5c95c + + + + doajarticles::0f4f805b3d842f2c7f1b077c3426fa59 + + + + doajarticles::ba73728b84437b8d48ae287b867c7215 + + + + doajarticles::86faef424d804309ccf45f692523aa48 + + + + doajarticles::73bd758fa41671de70964c3ecba013af + + + + doajarticles::e661fc0bdb24af42b740a08f0ddc6cf4 + + + + doajarticles::a6d3052047d5dbfbd43d95b4afb0f3d7 + + + + doajarticles::ca61df07089acc53a1569bde6673d82a + + + + doajarticles::237dd6f1606600459d0297abd8ed9976 + + + + doajarticles::fba6191177ede7c51ea1cdf58eae7f8b + + + + opendoar____::65a31da7ede4dc9b03fb5bbf8f442ce9 + + + + issn___print::5620fb341e160a153c489fcfab8a01ce + + + + + + be-open-transport + + + jsdtl + + + + utc-martrec + + + + utc-uti + + + + stp + + + + c2smart + + + + stride-utc + + + + crowd4roads + + + + lemo + + + + imov3d + + + + tra2018 + + + + optimum + + + + stars + + + + iecteim + + + + iccpt2019 + + + + + + + + + + citizen science + + + + + + + + + + Sustainability-oriented science policy + STI policies + science—society relations + Science & Technology Policy + Innovation policy + science policy + Policy and Law + + + + doajarticles::c6f0ed5fa41e98863e7c73501fe4bd6d + + + + doajarticles::ae4c7286c79590f19fdca670156ce816 + + + + doajarticles::0f664bce92ce953e0c7a92068c46bfb3 + + + + doajarticles::00017183dc4c858fb77541985323a4ef + + + + doajarticles::93b306f458cce3d7aaaf58c0a725f4f9 + + + + doajarticles::9dbf8fbf3e9fe0fe1fc01e55fbd90bfc + + + + doajarticles::a2bda8785c863279bba4b8f34827b4c9 + + + + doajarticles::019a1fcb42c3fea1c1b689df76330b58 + + + + doajarticles::0daa8281938831e9c82bfed8b55a2975 + + + + doajarticles::f67ad6d268162079b3abd51a24468744 + + + + doajarticles::c6f0ed5fa41e98863e7c73501fe4bd6d + + + + doajarticles::ad114356e196a4a3d84dda59c720dacd + + + + doajarticles::01e8a54fdecaaf354c67a2dd74ae7d4f + + + + doajarticles::449305f096b10a9464449ff2d0e10e06 + + + + doajarticles::982c0c0ac378256254cce2fa6572bb6c + + + + doajarticles::49d6ed47138884566ce93cf0ccb12c02 + + + + doajarticles::a98e820dbc2e8ee0fc84ab66f263267c + + + + doajarticles::50b1ce37427b36368f8f0f1317e47f83 + + + + doajarticles::f0ec29b7450b2ac5d0ad45327eeb531a + + + + doajarticles::d8d421d3b0349a7aaa93758b27a54e84 + + + + doajarticles::7ffc35ac5133da01d421ccf8af5b70bc + + + + + + risis + + + + + + + + + + COVID19 + SARS-CoV + HCoV-19 + mesh:C000657245 + MERS-CoV + Síndrome Respiratorio Agudo Severo + mesh:COVID-19 + COVID2019 + COVID-19 + SARS-CoV-2 + 2019 novel coronavirus + severe acute respiratory syndrome coronavirus 2 + Orthocoronavirinae + Coronaviridae + mesh:D045169 + coronavirus + SARS + coronaviruses + coronavirus disease-19 + sars cov 2 + Middle East Respiratory Syndrome + Severe acute respiratory syndrome coronavirus 2 + Severe Acute Respiratory Syndrome + coronavirus disease 2019 + 2019-nCoV + fos1 + fos2 + sdg1 + sdg2 + + + + opendoar____::358aee4cc897452c00244351e4d91f69 + {"criteria":[{"constraint":[{"verb":"contains","field":"title","value":"COVID-19"}]}, + {"constraint":[{"verb":"contains","field":"title","value":"SARS-CoV-2"}]}, + {"constraint":[{"verb":"contains","field":"title","value":"2019-nCoV"}]}]} + + + + re3data_____::7b0ad08687b2c960d5aeef06f811d5e6 + {"criteria":[{"constraint":[{"verb":"contains","field":"title","value":"COVID-19"}]}, + {"constraint":[{"verb":"contains","field":"title","value":"SARS-CoV-2"}]}, + {"constraint":[{"verb":"contains","field":"title","value":"2019-nCoV"}]}]} + + + + driver______::bee53aa31dc2cbb538c10c2b65fa5824 + {"criteria":[{"constraint":[{"verb":"contains","field":"title","value":"COVID-19"}]}, + {"constraint":[{"verb":"contains","field":"title","value":"SARS-CoV-2"}]}, + {"constraint":[{"verb":"contains","field":"title","value":"2019-nCoV"}]}]} + + + + openaire____::437f4b072b1aa198adcbc35910ff3b98 + {"criteria":[{"constraint":[{"verb":"contains","field":"title","value":"COVID-19"}]}, + {"constraint":[{"verb":"contains","field":"title","value":"SARS-CoV-2"}]}, + {"constraint":[{"verb":"contains","field":"title","value":"2019-nCoV"}]}]} + + + + openaire____::081b82f96300b6a6e3d282bad31cb6e2 + {"criteria":[{"constraint":[{"verb":"contains","field":"title","value":"COVID-19"}]}, + {"constraint":[{"verb":"contains","field":"title","value":"SARS-CoV-2"}]}, + {"constraint":[{"verb":"contains","field":"title","value":"2019-nCoV"}]}]} + + + + openaire____::9e3be59865b2c1c335d32dae2fe7b254 + {"criteria":[{"constraint":[{"verb":"contains","field":"title","value":"COVID-19"}]}, + {"constraint":[{"verb":"contains","field":"title","value":"SARS-CoV-2"}]}, + {"constraint":[{"verb":"contains","field":"title","value":"2019-nCoV"}]}]} + + + + opendoar____::8b6dd7db9af49e67306feb59a8bdc52c + {"criteria":[{"constraint":[{"verb":"contains","field":"title","value":"COVID-19"}]},{"constraint":[{"verb":"contains","field":"title","value":"SARS-CoV-2"}]},{"constraint":[{"verb":"contains","field":"title","value":"2019-nCoV"}]},{"constraint":[{"verb":"contains","field":"title","value":"2019nCoV"}]},{"constraint":[{"verb":"contains","field":"title","value":"coronavirus"}]},{"constraint":[{"verb":"contains","field":"title","value":"Corona virus"}]},{"constraint":[{"verb":"contains","field":"title","value":"corona-virus"}]},{"constraint":[{"verb":"contains","field":"title","value":"corona viruses"}]},{"constraint":[{"verb":"contains","field":"title","value":"coronaviruses"}]},{"constraint":[{"verb":"contains","field":"title","value":"SARS-CoV"}]},{"constraint":[{"verb":"contains","field":"title","value":"Orthocoronavirinae"}]},{"constraint":[{"verb":"contains","field":"title","value":"MERS-CoV"}]},{"constraint":[{"verb":"contains","field":"title","value":"Severe Acute Respiratory Syndrome"}]},{"constraint":[{"verb":"contains","field":"title","value":"Middle East Respiratory Syndrome"}]},{"constraint":[{"verb":"contains","field":"title","value":"SARS"},{"verb":"contains","field":"title","value":"virus"}]},{"constraint":[{"verb":"contains","field":"title","value":"soluble ACE2"}]},{"constraint":[{"verb":"contains","field":"title","value":"ACE2"},{"verb":"contains","field":"title","value":"virus"}]},{"constraint":[{"verb":"contains","field":"title","value":"ARDS"},{"verb":"contains","field":"title","value":"virus"}]},{"constraint":[{"verb":"contains","field":"title","value":"virus"},{"verb":"contains","field":"title","value":"angiotensin-converting enzyme 2"}]},{"constraint":[{"verb":"contains","field":"description","value":"angiotensin-converting enzyme 2"},{"verb":"contains","field":"description","value":"virus"}]},{"constraint":[{"verb":"contains","field":"description","value":"ARDS"},{"verb":"contains","field":"description","value":"virus"}]},{"constraint":[{"verb":"contains","field":"description","value":"soluble ACE2"}]},{"constraint":[{"verb":"contains","field":"description","value":"ACE2"},{"verb":"contains","field":"description","value":"virus"}]},{"constraint":[{"verb":"contains","field":"description","value":"SARS"},{"verb":"contains","field":"description","value":"virus"}]},{"constraint":[{"verb":"contains","field":"description","value":"Orthocoronavirinae"}]},{"constraint":[{"verb":"contains","field":"description","value":"Severe Acute Respiratory Syndrome"}]},{"constraint":[{"verb":"contains","field":"description","value":"Middle East Respiratory Syndrome"}]}]} + + + share_______::4719356ec8d7d55d3feb384ce879ad6c + {"criteria":[{"constraint":[{"verb":"contains","field":"title","value":"COVID-19"}]}, + {"constraint":[{"verb":"contains","field":"title","value":"SARS-CoV-2"}]}, + {"constraint":[{"verb":"contains","field":"title","value":"2019-nCoV"}]}]} + + + + share_______::bbd802baad85d1fd440f32a7a3a2c2b1 + {"criteria":[{"constraint":[{"verb":"contains","field":"title","value":"COVID-19"}]}, + {"constraint":[{"verb":"contains","field":"title","value":"SARS-CoV-2"}]}, + {"constraint":[{"verb":"contains","field":"title","value":"2019-nCoV"}]}]} + + + + opendoar____::6f4922f45568161a8cdf4ad2299f6d23 + {"criteria":[{"constraint":[{"verb":"contains","field":"title","value":"COVID-19"}]}, + {"constraint":[{"verb":"contains","field":"title","value":"SARS-CoV-2"}]}, + {"constraint":[{"verb":"contains","field":"title","value":"2019-nCoV"}]}]} + + + + re3data_____::7980778c78fb4cf0fab13ce2159030dc + {"criteria":[{"constraint":[{"verb":"contains","field":"title","value":"SARS-CoV-2"}]},{"constraint":[{"verb":"contains","field":"title","value":"COVID-19"}]},{"constraint":[{"verb":"contains","field":"title","value":"2019-nCov"}]}]} + + + re3data_____::978378def740bbf2bfb420de868c460b + {"criteria":[{"constraint":[{"verb":"contains","field":"title","value":"SARS-CoV-2"}]},{"constraint":[{"verb":"contains","field":"title","value":"COVID-19"}]},{"constraint":[{"verb":"contains","field":"title","value":"2019-nCov"}]}]} + + + opendoar____::eda80a3d5b344bc40f3bc04f65b7a357 + {"criteria":[{"constraint":[{"verb":"contains","field":"title","value":"COVID-19"}]},{"constraint":[{"verb":"contains","field":"title","value":"SARS-CoV-2"}]},{"constraint":[{"verb":"contains","field":"title","value":"2019-nCoV"}]},{"constraint":[{"verb":"contains","field":"title","value":"2019nCoV"}]},{"constraint":[{"verb":"contains","field":"title","value":"coronavirus"}]},{"constraint":[{"verb":"contains","field":"title","value":"Corona virus"}]},{"constraint":[{"verb":"contains","field":"title","value":"corona-virus"}]},{"constraint":[{"verb":"contains","field":"title","value":"corona viruses"}]},{"constraint":[{"verb":"contains","field":"title","value":"coronaviruses"}]},{"constraint":[{"verb":"contains","field":"title","value":"SARS-CoV"}]},{"constraint":[{"verb":"contains","field":"title","value":"Orthocoronavirinae"}]},{"constraint":[{"verb":"contains","field":"title","value":"MERS-CoV"}]},{"constraint":[{"verb":"contains","field":"title","value":"Severe Acute Respiratory Syndrome"}]},{"constraint":[{"verb":"contains","field":"title","value":"Middle East Respiratory Syndrome"}]},{"constraint":[{"verb":"contains","field":"title","value":"SARS"},{"verb":"contains","field":"title","value":"virus"}]},{"constraint":[{"verb":"contains","field":"title","value":"soluble ACE2"}]},{"constraint":[{"verb":"contains","field":"title","value":"ACE2"},{"verb":"contains","field":"title","value":"virus"}]},{"constraint":[{"verb":"contains","field":"title","value":"ARDS"},{"verb":"contains","field":"title","value":"virus"}]},{"constraint":[{"verb":"contains","field":"title","value":"virus"},{"verb":"contains","field":"title","value":"angiotensin-converting enzyme 2"}]},{"constraint":[{"verb":"contains","field":"description","value":"angiotensin-converting enzyme 2"},{"verb":"contains","field":"description","value":"virus"}]},{"constraint":[{"verb":"contains","field":"description","value":"ARDS"},{"verb":"contains","field":"description","value":"virus"}]},{"constraint":[{"verb":"contains","field":"description","value":"soluble ACE2"}]},{"constraint":[{"verb":"contains","field":"description","value":"ACE2"},{"verb":"contains","field":"description","value":"virus"}]},{"constraint":[{"verb":"contains","field":"description","value":"SARS"},{"verb":"contains","field":"description","value":"virus"}]},{"constraint":[{"verb":"contains","field":"description","value":"Orthocoronavirinae"}]},{"constraint":[{"verb":"contains","field":"description","value":"Severe Acute Respiratory Syndrome"}]},{"constraint":[{"verb":"contains","field":"description","value":"Middle East Respiratory Syndrome"}]}]} + + + opendoar____::7e7757b1e12abcb736ab9a754ffb617a + {"criteria":[{"constraint":[{"verb":"contains","field":"description","value":"covid-19"}]},{"constraint":[{"verb":"contains","field":"description","value":"SARS-CoV-2"}]},{"constraint":[{"verb":"contains","field":"description","value":"coronavirus"}]},{"constraint":[{"verb":"contains","field":"title","value":"covid-19"}]},{"constraint":[{"verb":"contains","field":"title","value":"coronavirus"}]},{"constraint":[{"verb":"contains","field":"title","value":"SARS-CoV-2"}]}]} + + + openaire____::5992569aa739819f41881a6fb910faa6 + + + + opendoar____::a03fa30821986dff10fc66647c84c9c3 + {"criteria":[{"constraint":[{"verb":"contains","field":"description","value":"mers"}]},{"constraint":[{"verb":"contains","field":"description","value":"sars"}]},{"constraint":[{"verb":"contains","field":"description","value":"covid"}]},{"constraint":[{"verb":"contains","field":"description","value":"pandemic"}]}]} + + + issn___print::ae3b15bfdf009101df89bab7f4cdbf9d + + + + issn___print::8dcb493279954d297336f12cea63b59f + + + + + + covid-19 + + + chicago-covid-19 + + + + covid-19-tx-rct-stats-review + + + + covid_19_senacyt_abc_panama + + + + covid-nma + + + + cd2h-covid + + + + covid-19-centralamerica + + + + {"constraint":[{"criteria":[{"field":"field","verb":"verb","value","value}]}]} + + + + + + + + + + + + + + Capacitive energy storage + Total energy + Energy informatics + Water-energy nexus + Energy charge + Energy efficient algorithms + Energy impact + Wireless energy harvesting + Energy efficient architecture + Fuel efficiency + Energy efficient clustering + Dual energy + Energy demand management + Reduced energy expenditure + Intermittent energy source + Magnetic energy + Energy flow + Variable renewable energy + Water energy + Maximum energy capture + Energy cycle + Energy per instruction + High energy accelerator + Building energy needs + Electric potential energy + Energy Saving Module + energy diversification + Excessive energy + measurement_unit.energy_unit + Energy modeling + Specific energy + Energy structure + Energy reduction + Specific potential energy + Energy tax + Renewable energy storage + Energy consumption + Förster resonance energy transfer + Energy Management + Energy component + Energy transport + Moist static energy + Alternative energy + Energy estimation + Energy development + Renewable energy supply + Maximal energy + Energy harvesting + Net energy + Energy metrics + Smart energy systems + World energy consumption + Clean Energy Project + Energy requirement + Energy resources + Energy leakage + Solar Renewable Energy Certificate + Energy Fraction + Energy applications of nanotechnology + Renewable energy in the Philippines + Energy assessment + Sustainable building + bioethanol + Energy harvesting wireless sensor networks + Integrated energy system + Available energy + Random energy model + Acoustic energy + Mechanical energy storage + Energy policy + Energy products + Solar panel + Low energy + sustainable energy action plan + Cooling energy + Specific energy consumption + Electrochemical energy conversion + Renewable thermal energy + CO2 emissions + Battery energy storage + Energy efficient distillation + Dynamic energy budget + High energy irradiation + 100% renewable energy + building energy performance simulation + price of energy + Energy community + Thermal energy recovery + wind energy + German Renewable Energy Sources Act + Leakage energy + Photovoltaic solar energy + Renewable energy investment + Cebu Declaration on East Asian Energy Security + Energy equipartition + SECAP + Fusion energy gain factor + Direct energy conversion + energy market + Isotropic energy + energy efficiency + gross floor area + Energy regeneration + European Union energy policy + Energy harvester + Geothermal energy + Final energy + Thermoelectric energy harvesting + Energy taxis + Energy balance + Renewable energy penetration + Battery energy storage system + tidal power + Renewable energy in the European Union + Tidal current energy + Energy storage + Energy-efficient driving + Energy index + Environmental impact of the energy industry + Energy-plus-house + Waste-to-energy + Energy efficiency gap + Energy load + Energy rate + energy use + Energy management system + Energy users + High/low voltage + Solar energy conversion efficiency + Energy consumption optimization + Energy Security Act + energy regulations + carbon taxes + Energy efficient routing protocol + Gibbs free energy + power industry + waste of energy + District heating network + Solar thermal + photovoltaic + green fuel + heat recovery + Mechanical energy + Renewable energy in Argentina + Forms of energy + Surface energy flux + National Appliance Energy Conservation Act + Net energy gain + Transient energy function + Energy modulation + National Renewable Energy Action Plan + Harvesting lightning energy + Minimum total potential energy principle + Sustainable energy + Thermal activation energy + Decreased energy + Net energy value + Field energy + Graph energy + fossil fuel + Energy based + Home energy rating + Energy pricing + Kinetic energy recovery system + Linear energy transfer + Nuclear energy + Energy dose + Wind energy + energy statistics + Greenhouse gas + Energy infrastructure + International Framework for Nuclear Energy Cooperation + Renewable energy consumption + Visible energy + Energy control + greenhouse gas emissions + Domestic energy consumption + Nuclear energy policy + Energy auditing + Energy Tax Act + Operating energy + Wind energy conversion + Bottom-up energy modelling + jel:Q4 + Characteristic energy + Atomic Energy Act + Standard Gibbs free energy of formation + wind power + Energy efficient transmission + Energy independence + Excess energy + local climate action + energy conservation + energy distribution + Energy landscape + Positive energy theorem + Minimum free energy + Ocean thermal energy conversion + Pulse energy density + energy crisis + Energy method + Natural energy + Supercapacitor energy storage + Energy efficient scheduling + Renewable energy law + Solar thermal energy + ethanol + Potential energy surface + Energy management unit + energy sector + Energy productivity + Thermal energy storage system + substitute fuel + Energy aware scheduling + Aquifer thermal energy storage + Energy system design + Energy failure + Solar energy storage + Transportation energy + Clean energy + Energy behavior + Global energy + Rotational energy + Tidal stream energy + Convective available potential energy + Energy drift + emission abatement + Energy conservation measure + Renewable energy in China + Flywheel energy storage system + wave energy + Urban building energy modeling + Energy service + Impact energy absorption + sustainable urban mobility plan + Units of energy + Energy hub + Energy technology + Energy gradient + Energy management controller + Primary energy + Magnetic field energy + Boundary energy + Conservation of energy + energy recovery + Energy management + Statistical energy analysis + Energy materials + Energy integration + biomethane + geothermal energy + Embodied energy + Offshore renewable energy + Spectral energy distribution + waste to energy + Energy-Generating Resources + solar heat + Energy budget + Energy sector + energy storage + Atomic energy commission + Energy equivalent + Entropy (energy dispersal) + Joint Dark Energy Mission + Energy security + energy transport + Energy derivative + Secondary Energy Resource + Energy data + Energy sustainability + Energy balance equation + cost of energy + sustainability + National Energy Act + Specific surface energy + Seasonal thermal energy storage + Electric energy consumption + Binding energy + Energy company + Dual energy absorptiometry + Solar energy + Energy economics + Light energy + Energy cannibalism + coal + Energy balancing + Energy management software + energy conversion + Energy supply and demand + Energy transfer + renewable energy source + energy grid + Bio-energy with carbon capture and storage + Energy cost + Energy indicators + Energy trading + Free energy profile + Energy system + Balance energy + Energy Policy Act of 1992 + Energy level + Low-energy house + Energy retention + SEAP/SECAP + Energy performance indicators + Energy conservation in the United States + European Union energy label + High Energy Density Matter + Kinetic energy operator + Wind turbine + Zero-energy universe + Climate Change and Sustainable Energy Act 2006 + Energy forecasting + Energy transfer rate + Critical energy + Energy feedback + biogas + Energy density + Energy recovery + EU energy strategy + power sector + European Energy Charter + Gravitational energy + energy saving + Energy rate density + Energy supplementation + Energy characterization + Energy deficit + Energy information + Home energy monitor + Renewable energy system + Energy storage efficiency + Mass energy + Energy hierarchy + Energy margin + Energy storage sizing + Deep energy retrofit + Electric energy storage + Specific energy absorption + energy site + Electron kinetic energy + Bioenergy village + Energy amplifier + PV + Energy function minimization + Lower energy + Energy performance + Energy rationing + Power2gas + Energy collision + Energy scheduling + Minimum energy control + Energy loss + climate finance data + energy supply + Power2X + Heating energy + Wave energy converter + Bioenergy + Strain energy density function + Energy measure + External energy + Grid energy storage + Compressed air energy storage + Sound energy density + Renewable energy policy + heat demand estimation + Energy spectrum + Energy factor + Energy subsidies + alternative energy + Energy cascade + Energy accounting + building efficiency + Building energy + Energy distribution + Energy law + Energy returned on energy invested + SEAP + Energy consumption wireless sensor networks + solar radiation + Energy plan + electrical supply + Internal energy + Thermodynamic free energy + green energy + Seasonal energy efficiency ratio + Renewable energy + Gibbs energy minimization + Powerplants + Specific mechanical energy + Electric energy + Heat energy + Energy density functional + Thermoelectric energy conversion + energy research + carbon tax + Energy migration + Power lines + Renewable energy technology + Bioelectric Energy Sources + Dual Work Exchanger Energy Recovery + Energy allocation + Solar hydrogen energy cycle + Wireless sensor networks energy harvesting + Energy preservation + Zero-energy building + High-Energy Shock Waves + Energy intensity + Energy supply chain + Negative energy + World energy resources + Energy supply + Primary Energy Resources + Energy conservation + Operational energy + High kinetic energy + Distributed energy efficient clustering + Energy Slave + Energy system optimization + Electron energy loss spectroscopy + Primary energy consumption + EU energy policy + biomass + Excess heat + Vibrational energy + bioenergy + energy transition + Energy awareness + Energy simulation + Energy source + Energy converter + Energy transfer upconversion + Radiant energy + Renewable energy sources + High energy + Conservation energy + Energy demand + Hybrid energy + Minimal free energy + low-carbon energy + Surface energy balance + Energy absorbing + Energy exchange + non-renewable energy + Thermal energy harvesting + Energy dispatch + Wireless sensor networks energy conservation + Ionization energy + Energy conversion devices + Energy carrier + Positive energy + Energy particle + Activation energy + energy consumption + Potential energy + Surface energy transfer + Energy analyser + Normalized energy deviation + Energy pathways + Energy inequality + Energy efficient transformer + National Energy Modeling System + Stored energy + Renewable energy commercialization + Energy efficient computation + Intermediate energy + Energy operator + Aircraft specific energy + Heat storage + Energy interval + Low energy level + Efficient energy use + Zeeman energy + Energy absorption + Residential energy + Energy efficiency implementation + Energy metering + Turbulent energy dissipation + Marine energy + Renewable energy in Brazil + Energy consumption minimization + Threshold energy + Nonlinear energy operator + Worldwide energy supply + Energy and environmental engineering + Photovoltaic + Energy variation + Helmholtz free energy + sustainable energy and climate action plan + Photovoltaic energy conversion + Electrochemical energy storage + Turbulence kinetic energy + Energy distance + Energy shaping + Kinetic energy + United States energy independence + Renewable energy credit + Hydro energy + Secondary energy + Adsorption energy + energy legislation + Energy expenditure + Energy mix + Specific kinetic energy + Energy policy of the United States + Urban energy Planning + Bloom Energy + nuclear energy + Energy Policy + Renewable energy in Denmark + jel:Q - Agricultural and Natural Resource Economics • Environmental and Ecological Economics/Q.Q4 - Energy/Q.Q4.Q41 - Demand and Supply • Prices + State of energy + energy industry + Energy efficient lighting + Energy delivery + Energy statistics + Energy monitoring and targeting + energy requirements + Accumulator (energy) + World Energy Outlook + Energy dynamics + Cyber physical energy systems + Renewable Energy Certificate + Decarbonization + Thermal energy storage + thermal energy + clean energy + Energy minimization + Food energy + Energy deficiency + Energy reserves + Energy flow analysis + Energy plant + energy needs + Building energy simulation + sustainable energy + Energy sharing + Energy in the United States + biodiesel + Energy analysis + energy audit + biofuel + tidal energy + Energy planning + Battery energy + Total energy expenditure + Thermal energy + United States Department of Energy International Energy Storage Database + Energy shift + energy law + energy retrofit + energy network + Translational energy + Energy engineering + Recommended energy intake + Regenerative energy + Energy Planning + Energy-coupling factor transporter + Energy conservation training + Energy absorbers + Effective energy + Energy investment + Mandatory renewable energy target + Impact energy + solar energy + Energy Policy Act of 2005 + Energy liberalisation + Energy regulation + Energy matching + Specific orbital energy + energy union + European Green Deal + mesh:Energy Transfer* + Solar Energy Generating Systems + Thermal Energy Evaluation + Potential energy landscape + Low-energy transfer + Energy quality + Storage energy + Energy Policy and Conservation Act + Energy efficient routing + Plasma energy + heating and cooling planning + Weighted energy + PV system + PVGIS + Wind energy penetration + Core energy + Sustainable Energy Utility + Energy market + Chemical energy + Nuclear power + Abnormal energy expenditure + Hydropower + Energy efficient resource allocation + energy dependence + House Energy Rating + Waste-to-energy plant + Electrical energy consumption + Superconducting magnetic energy storage + Minimum ignition energy + Ambient energy + Energy policy of the European Union + Specific energy density + Energy transition + Earth's energy budget + Overall Energy Level + Energy poverty + Residual energy + jel:Q47 + Energy transformation + Reaction energy + European Union energy strategy + energy technology + jel:Q48 + energy production + Building energy analysis + Energy conservation behaviour + jel:Q43 + jel:Q42 + jel:Q41 + Photovoltaics + climate change + jel:Q40 + Flywheel energy storage + Energy profile + Energy policy of India + Life-cycle greenhouse-gas emissions of energy sources + renewable energy resource + Energy maximization + Energy recycling + fuel cell + sump + Elastic energy + Electrical energy storage + Sound energy flux + Radio frequency energy + Creative Energy Homes + Latent internal energy + Cryogenic energy storage + Radiant energy density + Energy conversion efficiency + Global Energy and Water Cycle Experiment + Energy agency + Vegetable oils as alternative energy + Energy conservation in the United Kingdom + Energy consulting + Reactive energy + EU energy label + Triple energy window + smart grids + UBEM + Renewable energy debate + Business Energy Investment Tax Credit + Missing energy + energy management + Clean Energy Trends + Energy constraint + Energy efficiency in transportation + Energy flux + Energy Independence and Security Act of 2007 + Wireless sensor networks energy consumption + Energy depletion + Energy diagram + energy policy + Energy education + Principle of minimum energy + Solar energy harvesting + Energy equation + Energy facilities + Solar energy conversion + Energy constrained + nuclear power + Energy value of coal + energy demand + Energy strategy + + + + doajarticles::378f23393289afc1485dbf50951c83bc + + + + issn___print::794931c2e2a944f232b7be048a992b7e + + + + doajarticles::4ddab50f556e87f404a9c41771b21479 + + + + issn___print::4f3d67374523bd3cf9b4dc4d2fba0672 + + + + issn___print::a1d71ded7373fb0b17d3196e6648290d + + + + issn___print::3009447f36554f46207c65c6cd4d000e + + + + issn___print::f40e59279254118b8544abbd1562e6f8 + + + + issn___print::734dc9d0e7999dfd18a7a9235dc78ffa + + + + issn___print::3bc84c65a7d16107f92244ebea08e4f9 + + + + issn___print::20ff108cff2d59f8653d07141080e6ba + + + + issn___print::f131339240ced03aeff0d31e8643d108 + + + + issn___print::0433c40c181250e613a006798787b334 + + + + issn___print::f311391ea17e0fa88440973e96ce5e4e + + + + issn___print::a5dfd3cdcc1765e4c70f991726ac519e + + + + doajarticles::4c271c9709234a3e7f4fc8a8c812cf71 + + + + issn___print::dddc76f0b0250dda4d77b4bed5f56d8e + + + + issn___print::55d5cd7ed8dc9ef5c11d3a3112cba74e + + + + issn___print::707c5a454e5578f5c2d2304b87585870 + + + + issn___print::5302a312bead62b4e2fa914414ca5f7a + + + + issn___print::ae3fd2a3f41c973b9399d5efe27a8903 + + + + doajarticles::6112fa00eb096757ee4ba4b09b781afa + + + + issn___print::f5ef2bab7971bf15d253f9a4bbe68edf + + + + issn___print::8f7a02b5ac5b9332fc594021e5a8ee72 + + + + issn___print::ea183a877f51df643ebb3305790f920f + + + + issn___print::a4057017e6ae6a2781ac080d833e7a71 + + + + issn___print::65d14890631b4ca90562e9b3615ab8a7 + + + + issn__online::ad1e1198fc25091286d16344572d39ad + + + + issn___print::39576b4c76a915e71e6b5d50ef858202 + + + + issn___print::7fae073a8c08f94615666cc1189b5619 + + + + issn___print::cbf922bd81163e87b0299d820ff04c68 + + + + issn___print::b68729533f73b9381026fdd14f2b59ce + + + + issn___print::c757da83f7a2e20f959fd2548cd374d8 + + + + issn___print::3cbc82f7988a09373a4af62661301d86 + + + + doajarticles::2fd197d7b76958a30f7629c628c198eb + + + + issn___print::2a802416595959a8c42a64a340a10a8b + + + + issn___print::10adbb6219626bcac6a7184a35ca610e + + + + issn___print::87c44cf55137e275bc8cfc2b401d712e + + + + doajarticles::4a953db632cb88557a5fa7001ede9366 + + + + doajarticles::770bcb69b29a456276deaab74370b38a + + + + doajarticles::e8cfe9ddf73f0bc47382651e47d402db + + + + doajarticles::588d3e297135b04fa55b7d4b7e63f293 + + + + issn___print::6692d48a9483d39eb00ea58ad4597ffd + + + + issn___print::5b7c3922839ccc57dd188c6beba4c81f + + + + doajarticles::2d249ee2a411ca1e7a279ed653f458ec + + + + doajarticles::977b478b26b90576200354fc469ba5b5 + + + + issn___print::0f30459db45ba1ac1494d356569b06fb + + + + doajarticles::0c64460df9954f5c37fa47266537e798 + + + + doajarticles::9383bdade5a94867881e9d98787469c1 + + + + issn___print::d9f859569d45a8321ff9c0907da24ad6 + + + + issn___print::0e5b45589090fc6b4d77e4d8e65ea744 + + + + doajarticles::1a4aa2b8e7809faf59a093f995ff5a82 + + + + copernicuspu::8e2e4026271bad083cc89686372b2a8d + + + + issn__online::b263a67ae761555fc70d90836abc2a8d + + + + issn___print::32431f247401d2f88ad0759f6d1c63f1 + + + + doajarticles::fc3a4a0ad9276fda3a214cd02a066625 + + + + doajarticles::9522fef66cf1a56de16f3e8318407611 + + + + doajarticles::4a953db632cb88557a5fa7001ede9366 + + + + doajarticles::588d3e297135b04fa55b7d4b7e63f293 + + + + issn___print::12ac046ec8c15629dc2b0810008613f3 + + + + issn___print::6e17d958aa518b30e0652ddf152f968b + + + + issn___print::fd1162ed87cb335b3d5eae943d0628dd + + + + issn___print::bd751f82aa675ad78b7562eb3a2e1f35 + + + + issn__online::84486f003e22f1fac66278cd8952938a + + + + doajarticles::b7dc652e21b36af079b53757691a6ca3 + + + + issn___print::6952d8022c8e9ec9f28a24e6d85acf19 + + + + issn___print::6952d8022c8e9ec9f28a24e6d85acf19 + + + + issn___print::7d15320423e2b5ed4801a4e1bcaae4dd + + + + issn__online::c8d63ee31388444322f445a6e89e59ec + + + + issn___print::dde724dc5252fa5c6e8200a029cccad4 + + + + issn___print::c99ce8ba549c4913378e385ba052cc7a + + + + doajarticles::af6f6a030aeb9a5d1c6195a78468326c + + + + doajarticles::231dbb771e41d40fb6b91fa0af500e15 + + + + doajarticles::16658d94a8c89cc2de136a0c30dd4def + + + + doajarticles::331251e4f5658b99ca627cd24bb77d44 + + + + doajarticles::0a2af36b18a10daa66e0b73b55979d69 + + + + doajarticles::c9ad3a2c992c8d8103b94005c1468bc4 + + + + doajarticles::49800a108346cfdb181cb2538815a215 + + + + doajarticles::f9fc16b1bf50973c0199e41af447fa47 + + + + doajarticles::833c821df765a78f000a771fbda16689 + + + + doajarticles::25557f1fa59bf7f45023ed5cda6df7d3 + + + + doajarticles::73792ee5f8e7261a56758942b94a4d50 + + + + doajarticles::b857adcf9f4e0115d43f63f88e4d678b + + + + issn___print::ed3f742b855d4a14483a269a42a4ec1a + + + + issn___print::d372096053db20adbf14023d422b8030 + + + + issn___print::f98cc04c0bfc1432e6d93fad91267b09 + + + + issn___print::3cca5d1e8d44126cd469a8bc5c3bd333 + + + + doajarticles::9bc8218a1bc1678a8c1a73862b12fe0c + + + + doajarticles::bfd3191c8fae0a88d32521892c8651e0 + + + + issn___print::e3e9eade2907c7cfa1b3cafd838883fb + + + + issn___print::5d82328f0122a7fabd4330a1e14e0f64 + + + + issn___print::24c3f8a2279b3d0b430618ac78f7f2ac + + + + issn__online::6546671a5c9a7b6411283fd57e039685 + + + + issn___print::34f3d766efd56c71453a66a050e997d0 + + + + issn___print::017e6ef3fe7d88724647f4d3246cbc65 + + + + issn___print::3e6ff3a23f843d6d1549f170c2c46972 + + + + issn___print::cbfc2b5d7b9a611b46a9ef75829d2a16 + + + + issn___print::c7c8c62925a18ccd1bd015c879523310 + + + + issn__online::46d9370aed9253c69ffe06c68ea65356 + + + + issn___print::d2af1baa408b67ddb0a144af9b3ee54b + + + + doajarticles::3d4e46c7afb9b633c89a4a6e04257c21 + + + + issn__online::db9d9c777170ba862898687da15b6f29 + + + + issn___print::0d8adb8fd67d14dbea8f6624e94c1aa5 + + + + issn___print::b1a8b119646d5707b8d698d5623488a8 + + + + issn__online::1035ba503d08dfebe72237f85666063e + + + + doajarticles::0db98bbf059a52fa5a186d6be1926254 + + + + issn__online::9660682282432dcb5fb0740c8689d360 + + + + issn___print::86ad3a4f2db1739d529ed0449256f0da + + + + issn__online::f9563fbac77fd2606d9f8d9e4c7f54b4 + + + + issn___print::637c479c49692a2a7d20e507b573ef65 + + + + doajarticles::12028c7a20214a8fe089f6ce43bcc672 + + + + issn___print::175614e57be1e97bc85bb62d35a7817c + + + + doajarticles::5117b0f68c38ec4c9bb29236dbde4427 + + + + issn___print::c48b8ae541e158d805902e7d5226be7e + + + + doajarticles::bfd3191c8fae0a88d32521892c8651e0 + + + + openaire____::991a5beae43cd80ee579843834857837 + + + + issn___print::f658aedd001a34c147068b44bf22e3d8 + + + + issn___print::b6d4b7ac7b55734e304b6839399d3a39 + + + + issn___print::114113dad4c775f0a8de2cecca02170a + + + + issn___print::1d3f43512c48f0c917ac2ea2704e8164 + + + + issn___print::693cd4e37de2c2191193bc3e8e2faa67 + + + + issn___print::0b4dd23f592ab65e3e4210876aa5a766 + + + + + + wind_energy + + + + water-energy_challenges + + + + oswec + + + + jet + + + + amadeus-737054 + + + + hit2gap + + + + energy_data + + + + sedinstcjre + + + + res + + + + brcorp2 + + + + temoa + + + + cabriss + + + + ensystra + + + + greensoul + + + + photovoltaic + + + + greco-787289 + + + + sunrise + + + + smartchp + + + + gunam-odak + + + + a-leaf + + + + friendship-eu-project + + + + astep + + + + wesc2019 + + + + wakebench + + + + iec_61400-15 + + + + ieawindtask32 + + + + iea_wind_task_43 + + + + setwind + + + + eerajpwind + + + + geogrsure-msu-labres + + + + vn-energy-system + + + + flexi-sync + + + + s3c + + + + h2020-greencharge + + + + res4build-project + + + + epanacea-project + + + + drop-it + + + + superpv + + + + mosaic-csp-h2020 + + + + next-csp + + + + solartwins + + + + polyphem + + + + powertac + + + + solarpanel + + + + chpm2030 + + + + selfie + + + + reflect-project + + + + geofit + + + + orc-plus + + + + geothermal-innovations + + + + + + + + + + Forest composition + Digitilization + unmanned vehicle + ALS + Digital Transformation + Brazil-nut forests + Biomass + Digitilization methods + Digital forest + Canopy dynamics + soil nutrients + Bartlett Experimental Forest + Internet of things + Forest-environmental policy + Aerial images + Aero-triangulation + digitization + optimal resource management + Environmental modeling + Beech + Biomass modelling + Forest height + Forest inventory + Forest Cover + angular sampling + Canopy openings + Forest classification + Classification and Regression Trees (CART) + Digital soil mapping + Airborne laser scanning (ALS) + Forest land register + remote sensing + Canopy height + Canopy gap + Deciduous forest phenology + digitisation + canopy radiative transfer + Geographic information system + Biomass estimation + Forest operations + Dendrometry + Change detection + Forest landscape + robotics + digital terrain data + Canopy cover imagery + rural area + weed control + digitilisation + Forested area + agriculture + ALOS + precision agriculture + AutoCAD Map + Canopy structure + Digital aerial photogrammetry (DAP) + Ecosystem services + Forest phenology + Advanced Land Observing Satellite (ALOS) + precision farming + weed detection + ArcGIS + Ecological complexity + Atmospheric correction + Forest Road Management + Digital Farming + forest canopy density + Canopy greenness + Floodplain forest + Chain homotopy + virtual agriculture system + Digital forest eco-station + Canopy height model + C-fixation + soil analysis + Fire detection + Forest density + Forest inventory data + digitilized forestry + Forest reserves + forestry + Color infrared photography + Leaf area index + + + + doajarticles::5ee3d790a128c78123fa09c0253dce88 + + + + doajarticles::5aaf3ad8c1e030c358fca3aa4ac549e5 + + + + + + egene3 + + + + solace + + + + pa17 + + + + smartakis + + + + phenology_camera + + + + desira + + + + diverfarming + + + + + + + + + + + + + + + + + + + + rest________::b8e502674c3c3499d5374e9b2ea6d8d5 + {"criteria":[{"constraint":[{"verb":"contains_caseinsensitive","field":"description","value":"Galaxy"}]}]} + + + + + galaxy-training + + + + + + + + + + + + + + + + + + + + + + + + + + + + doajarticles::a33380c4a2f88a95b33dfa3dce5b6e36 + {"criteria":[{"constraint":[{"verb":"contains_caseinsensitive","field":"description","value":"IPERION HS"}]}]} + + + doajarticles::31ead5598158eb984a066a2c02f73def + {"criteria":[{"constraint":[{"verb":"contains_caseinsensitive","field":"description","value":"IPERION HS"}]}]} + + + issn___print::c7bb369a18cbba7542bafaf9cefe158d + {"criteria":[{"constraint":[{"verb":"contains_caseinsensitive","field":"description","value":"IPERION HS"}]}]} + + + doajarticles::5c079f7714af5449e0bcfc45b26e24c6 + {"criteria":[{"constraint":[{"verb":"contains_caseinsensitive","field":"description","value":"IPERION HS"}]}]} + + + issn___print::a3a89a312094156d8c5cad74dce0e179 + {"criteria":[{"constraint":[{"verb":"contains_caseinsensitive","field":"description","value":"IPERION HS"}]}]} + + + issn___print::f1929e666e12d044929f6fc0584d7afc + {"criteria":[{"constraint":[{"verb":"contains_caseinsensitive","field":"description","value":"IPERION HS"}]}]} + + + issn__online::57c54e53351c958c789b2492ef1f07f0 + {"criteria":[{"constraint":[{"verb":"contains_caseinsensitive","field":"description","value":"IPERION HS"}]}]} + + + issn___print::ded98f749c3f184f163a2625a72fce24 + {"criteria":[{"constraint":[{"verb":"contains_caseinsensitive","field":"description","value":"IPERION HS"}]}]} + + + issn__online::1b36744601154b071569d18229c837e6 + {"criteria":[{"constraint":[{"verb":"contains_caseinsensitive","field":"description","value":"IPERION HS"}]}]} + + + doajarticles::3d2c5259d756c2543239586527e4597e + {"criteria":[{"constraint":[{"verb":"contains_caseinsensitive","field":"description","value":"IPERION HS"}]}]} + + + fairsharing_::c46482dd5d39742f0bfd417b492d0e8e + {"criteria":[{"constraint":[{"verb":"contains_caseinsensitive","field":"description","value":"IPERION HS"}]}]} + + + driver______::d90775d3c9c1f9069b98af3df0f2349d + {"criteria":[{"constraint":[{"verb":"contains_caseinsensitive","field":"description","value":"IPERION HS"}]}]} + + + + + 871034 + + + + + + + + {"criteria":[{"constraint":[{"verb":"equals_caseinsensitive","field":"subject","value":"North America"},{"verb":"starts_with","field":"fos","value":"05"}]},{"constraint":[{"verb":"equals_caseinsensitive","field":"subject","value":"North America"},{"verb":"starts_with","field":"fos","value":"06"}]},{"constraint":[{"verb":"equals_caseinsensitive","field":"subject","value":"Mexico"},{"verb":"equals_caseinsensitive","field":"subject","value":"United States"},{"verb":"equals_caseinsensitive","field":"subject","value":"Canada"},{"verb":"starts_with","field":"fos","value":"05"}]},{"constraint":[{"verb":"equals_caseinsensitive","field":"subject","value":"Mexico"},{"verb":"equals_caseinsensitive","field":"subject","value":"United States"},{"verb":"equals_caseinsensitive","field":"subject","value":"Canada"},{"verb":"starts_with","field":"fos","value":"06"}]}]} + + Franklin + Gabrielle Roy + Canadian history + order international + religious freedom in the United States + Subnational Dynamics in North America + T-MEC + canadian + black nationalism + american + transnational organized crime + chicana poetry + asylum + american political science + visitas presidenciales de Estados Unidos a México + Mexico-United States border studies + American culture + Canadian cultural industries + Cannabis in the United States + United Nations’s Sustainable Development Goals + international migration + DREAM Act + American politics + United States and Canada and + immigration diplomacy in the United States + northern border + fundamentalisms + Mexico-U.S + canadian conservatism + Seasonal Agricultural Worker Program (SAWP) + night studies + Latino studies + Monroe doctrine + Homelessness in Canada + Cannabis in Canada + Donald Trump + bilateral relations and mexico and canada + American political science + American indigenous people + American politicanl science + immigration reform + chicano movie + US politics + Justin Trudeau + nocturnality + Law and Migrations + Mexican-Americans + Obama + American Propaganda + Jefferson + Joe Biden + nearshoring + bilateral relations mexico and united states + David Thoreau + Us -Mexico transboundary + Canadian public policy + social responsability in Canada + return migration + Science Policy Network from Latin America + americanism + chicano writers + mexican american + section 232 + IEEPA + ACAAN + MIKTA + DACA + cannabis workforce in Canada + American history + Canadian economics + Asylum system in the United States + migrant hospitality + financial geography + North America + immigration diplomacy in north america + Mexican cultural industries + Canada-Mexico relatios + Mexicans in Canada + Unites Nations Organizations + East Los Angeles + Canadian foreig policy + elections in the United States + critical sociocybernetics + Indigenous people in Mexico + IEA + American cultural industries + United States legislative agenda + american writers + pachucos + American sociology + U.S. elections + BlackLivesMatter + Indigenous peoples in Canada + Texas + Latino vote + American republicanism + American studies + US New Republic + cross-border studies + North American trade + Alanis Obomsawin + paradiplomacy + Mexico's national security agenda + Women in politics–United States + social responsability in the United States + U. S. Fed Rate + NAFTA + international cooperation + TLC + mexicanamerican + Kikapoo + third generation + american and mexican + Asylum system in Canada + NAFTA renegotiation + Border Cinema + immigration diplomacy in Mexico + USMCA + Cannabis in Mexico + Indigenous people in the United States + Mexico and United States and Canada + immigration diplomacy in Canada + Canadian documentary + african americans + Canadian political sciences + Obamacare + North American cultural industries + poesía chicana + Henry Thoreau + transbordern ethnic groups + United States-Mexico relations + armed forces in Mexico + cannabis workforce in the United States + Mexico-U.S. relations + Stephen Harper + Tijuana + bilateral relations canada and unites states + Biden administration + chicanos + TLCAN + Margaret Atwood + + + + opendoar____::1f187c8bc462403c4646ab271007edf4 + + + + issn___print::c81d1f92a13f46699b2706637518cd9d + + + + doajarticles::9e96ff35e9133ac652729510d4f458ae + + + + issn__online::dc9d3d191fa53003ad74da96d7c54081 + + + + issn___print::2a8223a02fe37659f1f41a936c58ba22 + + + + opendoar____::4fe5149039b52765bde64beb9f674940 + + + + issn___print::7963590588867473a2a288e7a8128a95 + + + + opendoar____::6855456e2fe46a9d49d3d3af4f57443d + + + + doajarticles::4169cb398ae09bf655681e3d63b85626 + + + + opendoar____::df438e5206f31600e6ae4af72f2725f1 + + + + doajarticles::e6e06c5ebc78077c8c9216a9dd339012 + + + + doajarticles::667fa8e87e3227492a459d40d7c3cbf8 + + + + doajarticles::8ceb968ff21b816cf07d226e62215990 + + + + doajarticles::73c5a0fc8bb4e2c403d34c24d19abd0c + + + + doajarticles::cc8c9387487bf0a9e96b61471c8c1674 + + + + re3data_____::5344264969b5c22913258ed1472940b7 + + + + issn___print::59c809b5d64c5c9d90887bb2432631e7 + + + + issn___print::04ffbf14e41d8291490e6fabd8ba25a5 + + + + issn___print::b3f6915e2a42405432018c218e2bc046 + + + + issn___print::cbddedbee3f3125938475200d5c33ac4 + + + + issn___print::96284ccfa45a84adc6bbb53c93f60c6d + + + + issn___print::f81291a280159d7849f0b61c0b7b0a27 + + + + issn___print::9cfa23b1eaa9896ea47d3519677b83b4 + + + + issn___print::514dfefae9831c3162a726d513331407 + + + + issn___print::d3e8755e33cf8ebd641745bfbe31eb80 + + + + issn___print::d5666ff1d3049974db0f609c1d74f736 + + + + issn___print::71c973dede04b0bffe227a3ca03cc5bf + + + + tubitakulakb::1ab7ee9ef829b9639b04526fbdb67a0e + + + + issn___print::de72ede8f67d5994fdb7060a3cda653e + + + + issn___print::3d336235ea23bf401dc92652b5f6c7a6 + + + + issn__online::8daebf70fb06ae3ed8f7383b9ba60fb8 + + + + issn___print::4c33b45c2a9ca6f2cfc4658d53523d8b + + + + issn___print::71fb26a669071c88ccc12bbc63bae902 + + + + issn___print::cdfec9183456fd7e6b9548249db1e379 + + + + issn___print::653866dc426bbb54434b782984923309 + + + + issn__online::aac9e676c34557de2e080fb461adca0e + + + + doajarticles::1cc79af440f0bba958fa35457a72baae + + + + issn__online::f84153234b72a096c2fc4bacc113453b + + + + issn___print::be3e12e8b0c99b809ae9cbdf7947aa53 + + + + issn___print::be3e12e8b0c99b809ae9cbdf7947aa53 + + + + issn___print::047a33fd18c9c7dbdde67f23287d2584 + + + + issn___print::4c6e60d44b493f1ea39671953bf57329 + + + + issn___print::8f6cf08aa643f71c14f58d92d37cf683 + + + + issn___print::9eaf704faab839cb43f38865979d031f + + + + issn___print::e14c88ad57d8426462a83c4b2c7a3d40 + + + + issn___print::1ef7c3685ce95f9ce0c9face671c1951 + + + + doajarticles::d2d1ce3a698df45486cbaa82aadbafcb + + + + doajarticles::054c07862a1425b07ea9c081bafa3985 + + + + doajarticles::6e2713a56e3dbe9191b4c2e04fdf599d + + + + doajarticles::66a9f6b27c0b0615896a0260fbdf3802 + + + + doajarticles::c3ec1beabcac28888d8d8fb1c0280f79 + + + + doajarticles::e3fe4e335bdf842807cddce5cc703b3e + + + + doajarticles::ef2c5dea0942cb1bfd5a57f36f637172 + + + + doajarticles::979c00c48a5ab319c27e2c2810520c5c + + + + doajarticles::37edd95a65636941dc48b8cb9b5a23c2 + + + + issn___print::72526861bd8daeaec41489d261df2b57 + + + + issn___print::89ac5f035df502a919d6481ea0f33df7 + + + + issn___print::33732d354f733342d78c88bcf88b8901 + + + + doajarticles::94fecc336b91c2f331b51740c8b42b50 + + + + issn___print::456da728c4210e7cfc9f7d390cd977c4 + + + + issn___print::e7bb39dc0ee73a76bee9f5de850c60c9 + + + + issn___print::fd1daded9e0aec3a6ac0ee7c41920775 + + + + issn___print::d4c451ae1c6f53814d3f31cc87a483f2 + + + + issn___print::84fdb48273b057287632a2716ebf0f40 + + + + issn___print::6b366c0dc2610d8e7e4350a0478fdd93 + + + + issn___print::2872324f81bd594a2e58c70960c87997 + + + + issn___print::abb513951560ba217896b3c3a11d8b9d + + + + doajarticles::b38923a0d8506ce7437162b3c3b99563 + + + + issn___print::6078b5609585f38bdcb679b84d4492f7 + + + + doajarticles::60b38bb04ec29b11a49e7b09561f139b + + + + issn___print::d90393e6784b81ac99b8b452dc6c6975 + + + + issn___print::d5ebe5e2efb6d4bd8000133a23c7c827 + + + + issn___print::478e407e430c267fd194a371a4b1cfbd + + + + issn___print::2c057b67956171db90e8383022823fd3 + + + + doajarticles::495a79be381509d144f7d4a4c92045c2 + + + + doajarticles::a0daf7d82967289b3a714ef0ec5d5ec8 + + + + issn___print::8795129abef8a4171a31172b82a5a154 + + + + doajarticles::f2aa57067b762baf9afd073783a07dff + + + + issn___print::44fbe50e48676c8d1425184cc746c735 + + + + issn___print::03715da1f69598f16d81fd205db4137b + + + + issn___print::28df3da83c03afe50979c2b718c1f031 + + + + issn___print::8668f3ec3f9ec98ec219ab5b915ce678 + + + + issn__online::d74a3b16f0f0c0946fcf6dde03382511 + + + + re3data_____::41f4ba2e210456c34bb26379d31ccffa + + + + re3data_____::ab5614004545931e59b747b4d3e01c35 + + + + re3data_____::f4bd51a04130e202ba61e46e485b0ff2 + + + + re3data_____::466f33717784c3be75c0ace1b4ae5c27 + + + + issn___print::f8d4bd706f820783eb6c896c879129ca + + + + issn__online::e359aa89935a92ef8e53d619c3935ad2 + + + + issn__online::f0ede569837b192ff090564f3f62fc95 + + + + issn___print::7d75a1706f95cd0af199f9ce148cafb1 + + + + doajarticles::947924312d932d2b7bab2a9cd153d24f + + + + issn___print::fd0a88805302f01ebfbaffc4a545acbc + + + + issn___print::7fce3dcfa53c60ad5cd043bf6a300359 + + + + issn___print::0d7dd9cfa89dc0f942b1faee95b3fc91 + + + + doajarticles::7215b846a137c298fc4c49049eae0a71 + + + + issn___print::f1da156437488bfb87ba28070923fb40 + + + + issn___print::47407663ad0e1d2923061e4a310e8378 + + + + issn___print::4429459053c2de5d0b71f8292735adf6 + + + + issn___print::6529eee69518785d190ccb2da5bef1c4 + + + + issn___print::5302a312bead62b4e2fa914414ca5f7a + + + + doajarticles::ecbebb577e63b6828e2f45e425709709 + + + + doajarticles::6b4754031be51e96afde788f9ab73b55 + + + + issn___print::1d3f43512c48f0c917ac2ea2704e8164 + + + + issn___print::92dd258c61077f12a507336d81d01c43 + + + + fairsharing_::582967e09f1b30ca2539968da0a174fa + + + + re3data_____::a5a47ec6d164c349a85343941a3c8df0 + + + + issn___print::2a17544dfe84de7372691e63e4060d1f + + + + issn___print::353e8c2c5c0d1d685f6840448caa0f22 + + + + issn___print::5185aeee99b5034543585e2df1b8aa55 + + + + issn___print::1f22adb40cf9ddda811f3dc94292124f + + + + issn___print::d911bdaf1ec51773dc299690d4d68668 + + + + issn___print::cd5de33eca81dcfcdbccc93131882f33 + + + + issn___print::ae1184d94e4d05628b07f58c41299217 + + + + doajarticles::2f9e138d3533252d0f927fb4c18e7ac7 + + + + doajarticles::4de11cf8024a72b61fe40a8d42233260 + + + + issn___print::0baff25ba18e72569586d9bb3d0d94f6 + + + + issn___print::89a3c620da346604515bff5eeadd4373 + + + + issn___print::76a4f76a7b6edb734a2feffbf569c312 + + + + issn___print::d640f84798f12e7b5cbdfb116e7016e9 + + + + issn___print::5ad6d5fae485d52279363a40b1a74b33 + + + + issn___print::9613ce105702ba484673ff768538887b + + + + issn___print::6e85e9494dbb6383174c25f890e76f6a + + + + issn___print::e084ba197764f259e12007692bcab2a0 + + + + issn___print::1c4febc7278f33506bc5c53415f6df94 + + + + issn___print::1648ec387ad0c64cedecc07c9efe8a69 + + + + issn___print::a1d39d2cf6306e0e47a30e539ac078ba + + + + issn___print::6f352f8d35638ebc7f9374450701c258 + + + + issn___print::d095a26b9039b91de446f1ca30b52fb8 + + + + issn___print::dde9939a66c680250b50e6167069f50e + + + + issn__online::8dd7b83b8e0de9c808185b47d60690bb + + + + doajarticles::81f495a74205fa1828ef69c73024d745 + + + + openaire____::3db634fc5446f389d0b826ea400a5da6 + + + + issn___print::26fb8ee35b0f016107407199f7caab8d + + + + issn___print::74fdbacf680dc2f894aff1f4aa86a033 + + + + issn__online::4074709fc410b3be61ea1769634ae8ff + + + + issn___print::528df3ad854f35905888312e67ab289c + + + + doajarticles::e0291a282bb60fbd7f1ed66eddd2dcd8 + + + + doajarticles::b20f009c8f772e5dbbfab8ef6112054a + + + + issn___print::59f48c33cbd0709bded62e11fb7fe7a6 + + + + doajarticles::e645826d355b95b452670a396ed5f1b6 + + + + doajarticles::26d1013e02712d468ffc673e973a94a4 + + + + issn___print::ff3375dbae7402eed827de6f9bc1dae7 + + + + doajarticles::8eb6a8ea9965381966de4e26b6df871d + + + + issn___print::6109e0b510a6f80b7f23ae2e9128bdb5 + + + + issn___print::4a286da974a11ee41bec3530c3087fe9 + + + + issn___print::89fa6b45b969f7a47000b6f4825cc317 + + + + issn___print::02c4ee5a5f50d46270d8a3c661751acc + + + + eurocrisdris::2c3c70ce4b8fac2cb2a644c8b09d6541 + + + + issn___print::01369779af4b50c35e0253a392a29f87 + + + + issn___print::c00b835ccece66bf64d18f45b4b35299 + + + + issn___print::77368c4ff3b22b665fd0f3d186cd34a0 + + + + issn___print::424781735140fd8adae8ac53cbeb46ce + + + + issn___print::b757ff8a198e2536db54d7660a75147f + + + + issn__online::fbf71200b9dc415cc77036429a39d415 + + + + issn___print::19cdd04d0918bc0b2e05854d4924d722 + + + + issn___print::b6aad0b1eb044e0a5d0f46743ed30412 + + + + issn___print::4960d8d70c93d5ec0ada530e783b7ccc + + + + issn___print::ef9470623c47db1489374825451be76a + + + + issn___print::268f6edcb8f52aff568ef5bf454a396b + + + + doajarticles::a3834c6b341698561729771fdb264ba8 + + + + doajarticles::10960937f086496a32324c9eeb1cf380 + + + + doajarticles::268f6edcb8f52aff568ef5bf454a396b + + + + doajarticles::8436515900e91b3177adbcd464b7a4fa + + + + doajarticles::0ebea7e81ff7eb8b49f5855869bf5510 + + + + issn___print::32b2935535a795cad2ac4d97ede8c9aa + + + + issn___print::c29800a010f18cc1cbfe5dfa8aff0101 + + + + issn___print::5cd28af4e630273b0f388fecee1642f2 + + + + issn__online::462ee7d3bfd901f543cc26dfd7b3f017 + + + + issn__online::3a1e9abdc733c2b4231e8d96b6eccb78 + + + + issn___print::ed0abeccd797edd7a4b88450e8834c7b + + + + issn___print::f733506374a5bb0ec8758f790d365bdd + + + + issn__online::bef3388f967015ba2a32c01c11872fec + + + + issn___print::a023d120ee80e5276337d6248f495e43 + + + + issn___print::d0cc53ffc712679bebc0500ed13ed2e9 + + + + doajarticles::154dc946bcecfd68e883ecd325e7a52e + + + + issn___print::806d0032b4709e91453b483347226887 + + + + doajarticles::a9b551c31e21ef34170ce17a8f0e7835 + + + + doajarticles::06ba084aa9240cb03d24c47c9c0652b1 + + + + issn___print::909bfe752bee4560f16ad0f8d5afdc89 + + + + doajarticles::ee4f1f49569f4fbb76f8f34dc7a5f7fe + + + + issn___print::2f1188253ef383b3c1b0e747639468bd + + + + issn___print::5be037642dfc13f2ba256f3b437c52cf + + + + tubitakulakb::154dc946bcecfd68e883ecd325e7a52e + + + + issn___print::7e05f77d163a1df1167892b2d7695f62 + + + + issn___print::ec7a7b0b0fa49b08a97ef3f6f4580849 + + + + doajarticles::0e79708049fc8aba865a72aef296675f + + + + issn___print::8bbe434f556cd8f473ec31870e90dceb + + + + issn___print::19d13e8ec06550805ad45ab6c39a6f5c + + + + doajarticles::42a2923544e8b4e3333cdbad12bf8e62 + + + + doajarticles::c2d19e06a2378a996a656e77621ad231 + + + + doajarticles::1745fdadf3fb137715761516836c86fe + + + + issn___print::edb440c3f196345083f5b6b93fa3f109 + + + + doajarticles::ffda7cfa7049bcee60eb3661f1fc6302 + + + + doajarticles::1ef9c362652cb36c1afae5de6efcf064 + + + + issn___print::e42314b3ca2fd1dc8e2069fcff7c9340 + + + + tubitakulakb::4c4a3f21e09817f9b52025982c5ad422 + + + + doajarticles::ce3bd037d3a68073789b81ee2f6db026 + + + + issn___print::488496b2b983a2e4fc84e0fdbe75bab9 + + + + issn___print::d2ef11cbb7657d6ca546f2f65ae27139 + + + + doajarticles::05ca952a7f3b9fdb6b25ad583eaf936e + + + + issn___print::d0cbb94a74ad1929fdce41df87f74ca8 + + + + issn___print::5156aa509e9a536fe0647609c2745ae1 + + + + issn___print::89726c9e90bfbc1dc1b2a23a7461542b + + + + issn___print::30a19d27491936692c9494d975738104 + + + + issn___print::85b683372b35b0ac1ffc3f005fbb5e64 + + + + issn___print::f2f417f07e0dac5721b81791ddb6e8e3 + + + + issn___print::028b2f5ff1f6e88f7ab301198eb439ee + + + + issn___print::d8a99c28771772da62fcce7732c856f9 + + + + doajarticles::539f5377e4c54415583f30f3b3d554a6 + + + + issn___print::ea4548e7a7c10e10ef00cd2a72c3a5ae + + + + issn___print::e33d602ec5bd0d2acae7c14491f2fed8 + + + + issn___print::732726ab6c58c5c242171a80337a63ee + + + + issn__online::53c59f6626ac8e0a55eeaeb90c5d424d + + + + issn___print::d90e317a3bb16d775b33a323955b3f4b + + + + issn___print::973b136a768ef3a79a6c3787444b7609 + + + + doajarticles::854b113d606bbd642b17319a439749d5 + + + + doajarticles::c0b2fa19ade5a8271beabbfea37b2f05 + + + + doajarticles::28006895efd68dbea8d01c41a9071f52 + + + + doajarticles::89ee434c803ac2cf40aa3061e04f8bd1 + + + + doajarticles::1f661b8c3323574bfd3afc0ad25b5d21 + + + + issn___print::ae5f7491d5fdd5d1fdbde58dd07bcb1d + + + + issn___print::17bb1eb108ebf498b7c46f21c1db0d65 + + + + issn___print::1f661b8c3323574bfd3afc0ad25b5d21 + + + + issn___print::bdaa0d91208602d95f66594b823b83b2 + + + + issn___print::9e8d02dd9ace5b0ffa75d88c9cf6fd0d + + + + ekt_journals::623ccc04b6662ad72270cdb48991ecfb + + + + issn__online::71d84e7b1644ae6cfe9bc38bbd401597 + + + + issn___print::74474623c6a870657b26b66ab88497d1 + + + + issn___print::541e430d092ac2733170a924818798ce + + + + issn___print::4594784eb987db460440f12f23b5e6f0 + + + + issn___print::9f8fcf4c8052a20c92b9e95e3be83bdd + + + + issn___print::0f1a67be184f30adcb7333645de30730 + + + + issn___print::098017da85509a583a1126589da11fbf + + + + issn___print::cf88f2df9b3d1031f07c02c43d92990f + + + + issn___print::ad6000958091232ca347c1f3fc2870cf + + + + issn___print::2da390ac801273ff8c74df019664bb06 + + + + issn___print::2ea05670ed9dafc3d3a5f2f9a278c787 + + + + issn___print::3d84cb4da9dd9ce42dafb4bd41749bc7 + + + + doajarticles::88dad2df202124b4e8efdf26279f9e08 + + + + doajarticles::50b1ce37427b36368f8f0f1317e47f83 + + + + issn___print::efc4f03c620f90768d85d846606842ba + + + + doajarticles::cf4dc68e46453154a9036d43e11ec1d2 + + + + doajarticles::da91a401ff7bcd79a593f89d2900b97c + + + + issn___print::c700c35cd16f0a1f5f19ea8634398997 + + + + issn__online::5706336ed60abf977e639ed00b507f6b + + + + issn__online::5ade1f356f78826b9f7f9eefc283ec75 + + + + opendoar____::aa495e18c7e3a21a4e48923b92048a61 + + + + issn___print::b9a1ad63db8612bfd4dcbf16be9e710c + + + + issn___print::6a673d2212466f53a4832f0b3d4d9800 + + + + issn__online::0ac3874fe35f4feec07071114b3bfcce + + + + issn__online::83a0220ed6b7ff03dea7aa1648b0a6dd + + + + issn___print::bd8e077363a889231b4c073865ccfd49 + + + + issn___print::2dd67b38137b33a088c57ea46c11e09b + + + + tubitakulakb::29a5b78ea8e203022df9a4397fc15f7c + + + + issn___print::a17503821e6d40aa794881d68b43de4e + + + + issn___print::2684a5315eede2aac88298275a56a7a3 + + + + doajarticles::cf84ce362f9a9fcdf92cc7caba6659d0 + + + + issn___print::d66d935ed1d9193cb4adce9d69b5e5e1 + + + + issn___print::7052e29d1c1ccda6fca247bd7f5220cc + + + + issn___print::39470625e1320f5443bb9734d3ed9754 + + + + issn___print::4175b388ddd0c0dc989a24e5607afeea + + + + issn___print::23057503007ed8003ee76b85092af050 + + + + issn___print::0fda292655c5449f877c78a3be38e658 + + + + issn___print::4d52f987747b37fbccf77d30457a0241 + + + + issn___print::2bf07566da78630b8c5d77ed67747694 + + + + issn___print::2122489d407b48ebfdffbb6aa6db1d0b + + + + issn__online::168e882916d55c390f44107654dedff0 + + + + doajarticles::f9c97816a124bdd3e60bd18f8f19fd90 + + + + issn___print::dfd198025502e93e11725d1ac2cf1487 + + + + issn___print::cbad7267197177d842dfe235bb69f693 + + + + issn___print::6bbac92b6e326f0679e324f92e90af92 + + + + issn___print::8334a639c2701e4c759c82a994b12cf0 + + + + issn___print::6f6844f1fb537c8f1551951792b4e470 + + + + issn___print::1cea83dbe32f464d7ca655d58d696e0f + + + + issn___print::a10b5ce7fc7f619b8fe22a38c26ba6d0 + + + + doajarticles::6f6844f1fb537c8f1551951792b4e470 + + + + doajarticles::ed28f28d0d5b17fde968103818b26690 + + + + re3data_____::5b66ed0a185464738b430fcf8a09b506 + + + + issn___print::037d6c2ed4579b18d7527e0b369e5c45 + + + + issn___print::42069521324683ae1f056757824569fa + + + + issn___print::f0892f57d532ed07583f13855e3c0c3b + + + + issn___print::75a8347b12cdc64eb16a466d2492108f + + + + issn__online::e6891a26e0a3a1e6cb95950778f8b4cb + + + + doajarticles::90e8756fd9d4ac0cc6e9f24c1220279c + + + + issn___print::607e56b055572145f31db7b6fa0bc34e + + + + issn___print::948e2b12b0a56f2c848f7cb58fbe2d05 + + + + issn___print::6ce6dc085cdafc874d3cdb38431a362a + + + + issn__online::110f84a256d463653f23e8a14f80a0e7 + + + + issn___print::8b8d184c5bdfa7f3f2b4ddb61e07d23f + + + + issn___print::44b81ba692f3a0df7c9de3a77e469d74 + + + + issn___print::f0bbd9395d0586c4983fa064beb29c71 + + + + issn___print::274b36b0d01c2d879c8135db0427ca3f + + + + issn___print::c270b488c67141597da83d9e32fba4d5 + + + + issn__online::a84ac9fb564bb124f1f7fca5e1d04063 + + + + issn__online::fd2bd37b60a4a7476df36978d4fe17a8 + + + + issn___print::05205fcd55e5e5aed7d6dd82440cece4 + + + + issn___print::9c2034c426356ed2d895b803871bcd96 + + + + issn___print::b0d55c4ecb17d1e2cbdc9840901eabd4 + + + + issn___print::2318cdcb2fb44038656517cfad49e21c + + + + issn___print::42dda4018b67d583260b9f959452d69c + + + + issn__online::534fe5f57bd789f86bda34deb92ae7d4 + + + + doajarticles::8affbbabd9f0f0130b2a80b4e11f1b8e + + + + issn__online::5510f64693d829a3de38c9dd79d8cace + + + + + + naddi + + + + + + From 1b8488976b5d02b39aff35195741b41c963f6e00 Mon Sep 17 00:00:00 2001 From: Claudio Atzori Date: Wed, 7 Dec 2022 10:45:38 +0100 Subject: [PATCH 252/535] code formatting --- .../community/QueryInformationSystem.java | 6 +-- .../dhp/bulktag/community/ResultTagger.java | 6 +-- .../dnetlib/dhp/bulktag/BulkTagJobTest.java | 2 +- .../CommunityConfigurationFactoryTest.java | 38 +++++++++---------- .../provision/IndexRecordTransformerTest.java | 11 +++--- 5 files changed, 32 insertions(+), 31 deletions(-) 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 index ec89edc63..678b270a0 100644 --- 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 @@ -26,9 +26,9 @@ public class QueryInformationSystem { + " return " + " " + " { $x//CONFIGURATION/context/@id} " - + " " + - "{$x//CONFIGURATION/context/param[./@name='advancedConstraints']/text() }" + - "" + + " " + + "{$x//CONFIGURATION/context/param[./@name='advancedConstraints']/text() }" + + "" + " " + " {for $y in tokenize($subj,',') " + " return " 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 d6498e942..0452a6ebf 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 @@ -9,16 +9,16 @@ import java.util.*; import java.util.stream.Collectors; import java.util.stream.Stream; -import eu.dnetlib.dhp.schema.common.ModelConstants; -import eu.dnetlib.dhp.schema.common.ModelSupport; -import eu.dnetlib.dhp.schema.oaf.utils.OafMapperUtils; import org.apache.commons.lang3.StringUtils; import com.google.gson.Gson; import com.jayway.jsonpath.DocumentContext; import com.jayway.jsonpath.JsonPath; +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; /** Created by miriam on 02/08/2018. */ public class ResultTagger implements Serializable { 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 364e53376..2af3cdb2e 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 @@ -48,7 +48,7 @@ public class BulkTagJobTest { + " \"description\" : \"$['description'][*]['value']\", " + " \"subject\" :\"$['subject'][*]['value']\" , " + - "\"fos\" : \"$['subject'][?(@['qualifier']['classid']=='subject:fos')].value\"} "; + "\"fos\" : \"$['subject'][?(@['qualifier']['classid']=='subject:fos')].value\"} "; private static SparkSession spark; 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 e3a660835..c8fd62c8e 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 @@ -86,32 +86,32 @@ class CommunityConfigurationFactoryTest { @Test void loadSelCriteriaTest2() throws DocumentException, IOException, SAXException { String xml = IOUtils - .toString( - getClass() - .getResourceAsStream( - "/eu/dnetlib/dhp/bulktag/communityconfiguration/community_configuration_selcrit2.xml")); + .toString( + getClass() + .getResourceAsStream( + "/eu/dnetlib/dhp/bulktag/communityconfiguration/community_configuration_selcrit2.xml")); final CommunityConfiguration cc = CommunityConfigurationFactory.newInstance(xml); Map> param = new HashMap<>(); param.put("author", new ArrayList<>(Collections.singletonList("Pippo Pippi"))); param - .put( - "description", - new ArrayList<>( - Collections - .singletonList( - "This work has been partially supported by DARIAH-EU infrastructure"))); + .put( + "description", + new ArrayList<>( + Collections + .singletonList( + "This work has been partially supported by DARIAH-EU infrastructure"))); param - .put( - "contributor", - new ArrayList<>( - Collections - .singletonList( - "Author X helped to write the paper. X works for DARIAH"))); + .put( + "contributor", + new ArrayList<>( + Collections + .singletonList( + "Author X helped to write the paper. X works for DARIAH"))); List comm = cc - .getCommunityForDatasource( - "openaire____::1cfdb2e14977f31a98e0118283401f32", param); + .getCommunityForDatasource( + "openaire____::1cfdb2e14977f31a98e0118283401f32", param); - //TODO add more assertions + // TODO add more assertions Assertions.assertEquals(0, comm.size()); } 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 d9dc609d8..cd5e08426 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 @@ -131,37 +131,38 @@ public class IndexRecordTransformerTest { @Test public void testForEOSCFutureSoftwareNotebook() throws IOException, TransformerException { final String record = IOUtils - .toString(getClass().getResourceAsStream("eosc-future/software-justthink.xml")); + .toString(getClass().getResourceAsStream("eosc-future/software-justthink.xml")); testRecordTransformation(record); } @Test public void testForEOSCFutureSoftwareNotebookClaim() throws IOException, TransformerException { final String record = IOUtils - .toString(getClass().getResourceAsStream("eosc-future/software-justthink-claim.xml")); + .toString(getClass().getResourceAsStream("eosc-future/software-justthink-claim.xml")); testRecordTransformation(record); } @Test public void testForEOSCFutureZenodo7353841() throws IOException, TransformerException { final String record = IOUtils - .toString(getClass().getResourceAsStream("eosc-future/zenodo7353841.xml")); + .toString(getClass().getResourceAsStream("eosc-future/zenodo7353841.xml")); testRecordTransformation(record); } @Test public void testForEOSCFutureZenodo7351393() throws IOException, TransformerException { final String record = IOUtils - .toString(getClass().getResourceAsStream("eosc-future/zenodo7351393.xml")); + .toString(getClass().getResourceAsStream("eosc-future/zenodo7351393.xml")); testRecordTransformation(record); } @Test public void testForEOSCFutureZenodo7351221() throws IOException, TransformerException { final String record = IOUtils - .toString(getClass().getResourceAsStream("eosc-future/zenodo7351221.xml")); + .toString(getClass().getResourceAsStream("eosc-future/zenodo7351221.xml")); testRecordTransformation(record); } + @Test void testDoiUrlNormalization() throws MalformedURLException { From 3d99b78d94a21e1bf4d74532ead853a968cffbec Mon Sep 17 00:00:00 2001 From: "miriam.baglioni" Date: Thu, 8 Dec 2022 10:25:02 +0100 Subject: [PATCH 253/535] [Cleaning] fixed error in parameter (workingPath to workingDir) --- .../src/main/resources/eu/dnetlib/dhp/bulktag/query.xq | 0 .../eu/dnetlib/dhp/oa/graph/clean/oozie_app/workflow.xml | 8 ++++---- 2 files changed, 4 insertions(+), 4 deletions(-) create mode 100644 dhp-workflows/dhp-enrichment/src/main/resources/eu/dnetlib/dhp/bulktag/query.xq 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 new file mode 100644 index 000000000..e69de29bb diff --git a/dhp-workflows/dhp-graph-mapper/src/main/resources/eu/dnetlib/dhp/oa/graph/clean/oozie_app/workflow.xml b/dhp-workflows/dhp-graph-mapper/src/main/resources/eu/dnetlib/dhp/oa/graph/clean/oozie_app/workflow.xml index e756840bd..683c2417b 100644 --- a/dhp-workflows/dhp-graph-mapper/src/main/resources/eu/dnetlib/dhp/oa/graph/clean/oozie_app/workflow.xml +++ b/dhp-workflows/dhp-graph-mapper/src/main/resources/eu/dnetlib/dhp/oa/graph/clean/oozie_app/workflow.xml @@ -630,7 +630,7 @@ --inputPath${graphOutputPath}/publication --resolvedPath${workingDir}/cfHbResolved/publication - --outputPath${workingPath}/cfHbPatched/publication + --outputPath${workingDir}/cfHbPatched/publication --graphTableClassNameeu.dnetlib.dhp.schema.oaf.Publication --masterDuplicatePath${workingDir}/masterduplicate @@ -657,7 +657,7 @@ --inputPath${graphOutputPath}/dataset --resolvedPath${workingDir}/cfHbResolved/dataset - --outputPath${workingPath}/cfHbPatched/dataset + --outputPath${workingDir}/cfHbPatched/dataset --graphTableClassNameeu.dnetlib.dhp.schema.oaf.Dataset --masterDuplicatePath${workingDir}/masterduplicate @@ -684,7 +684,7 @@ --inputPath${graphOutputPath}/otherresearchproduct --resolvedPath${workingDir}/cfHbResolved/otherresearchproduct - --outputPath${workingPath}/cfHbPatched/otherresearchproduct + --outputPath${workingDir}/cfHbPatched/otherresearchproduct --graphTableClassNameeu.dnetlib.dhp.schema.oaf.OtherResearchProduct --masterDuplicatePath${workingDir}/masterduplicate @@ -711,7 +711,7 @@ --inputPath${graphOutputPath}/software --resolvedPath${workingDir}/cfHbResolved/software - --outputPath${workingPath}/cfHbPatched/software + --outputPath${workingDir}/cfHbPatched/software --graphTableClassNameeu.dnetlib.dhp.schema.oaf.Software --masterDuplicatePath${workingDir}/masterduplicate From a485a94956782293d4be3470e366dfb114221755 Mon Sep 17 00:00:00 2001 From: "miriam.baglioni" Date: Thu, 8 Dec 2022 16:59:34 +0100 Subject: [PATCH 254/535] [Cleaning] fixed parameter name in property file --- .../eu/dnetlib/dhp/oa/graph/input_clean_cfhb_parameters.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/dhp-workflows/dhp-graph-mapper/src/main/resources/eu/dnetlib/dhp/oa/graph/input_clean_cfhb_parameters.json b/dhp-workflows/dhp-graph-mapper/src/main/resources/eu/dnetlib/dhp/oa/graph/input_clean_cfhb_parameters.json index 934d173b5..859350bbb 100644 --- a/dhp-workflows/dhp-graph-mapper/src/main/resources/eu/dnetlib/dhp/oa/graph/input_clean_cfhb_parameters.json +++ b/dhp-workflows/dhp-graph-mapper/src/main/resources/eu/dnetlib/dhp/oa/graph/input_clean_cfhb_parameters.json @@ -31,7 +31,7 @@ }, { "paramName": "md", - "paramLongName": "datasourceMasterDuplicate", + "paramLongName": "masterDuplicatePath", "paramDescription": "path to the file on HDFS holding the datasource id tuples [master, duplicate]", "paramRequired": true } From 2094fa6db0dda60222ae3e6c0bd5037d39a60e84 Mon Sep 17 00:00:00 2001 From: Claudio Atzori Date: Thu, 8 Dec 2022 17:22:26 +0100 Subject: [PATCH 255/535] [cleaning] align wf parameter names --- .../eu/dnetlib/dhp/oa/graph/clean/cfhb/CleanCfHbSparkJob.java | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/dhp-workflows/dhp-graph-mapper/src/main/java/eu/dnetlib/dhp/oa/graph/clean/cfhb/CleanCfHbSparkJob.java b/dhp-workflows/dhp-graph-mapper/src/main/java/eu/dnetlib/dhp/oa/graph/clean/cfhb/CleanCfHbSparkJob.java index 122e27dec..eb7325af5 100644 --- a/dhp-workflows/dhp-graph-mapper/src/main/java/eu/dnetlib/dhp/oa/graph/clean/cfhb/CleanCfHbSparkJob.java +++ b/dhp-workflows/dhp-graph-mapper/src/main/java/eu/dnetlib/dhp/oa/graph/clean/cfhb/CleanCfHbSparkJob.java @@ -65,8 +65,8 @@ public class CleanCfHbSparkJob { String outputPath = parser.get("outputPath"); log.info("outputPath: {}", outputPath); - String dsMasterDuplicatePath = parser.get("datasourceMasterDuplicate"); - log.info("datasourceMasterDuplicate: {}", dsMasterDuplicatePath); + String dsMasterDuplicatePath = parser.get("masterDuplicatePath"); + log.info("masterDuplicatePath: {}", dsMasterDuplicatePath); String graphTableClassName = parser.get("graphTableClassName"); log.info("graphTableClassName: {}", graphTableClassName); From 730228d73dbd6058cb0b2283412d9f3238dddc7a Mon Sep 17 00:00:00 2001 From: Claudio Atzori Date: Thu, 8 Dec 2022 18:40:22 +0100 Subject: [PATCH 256/535] [cleaning] align wf parameter names in test --- .../dnetlib/dhp/oa/graph/clean/cfhb/CleanCfHbSparkJobTest.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/clean/cfhb/CleanCfHbSparkJobTest.java b/dhp-workflows/dhp-graph-mapper/src/test/java/eu/dnetlib/dhp/oa/graph/clean/cfhb/CleanCfHbSparkJobTest.java index b0097ed6f..9096180ef 100644 --- a/dhp-workflows/dhp-graph-mapper/src/test/java/eu/dnetlib/dhp/oa/graph/clean/cfhb/CleanCfHbSparkJobTest.java +++ b/dhp-workflows/dhp-graph-mapper/src/test/java/eu/dnetlib/dhp/oa/graph/clean/cfhb/CleanCfHbSparkJobTest.java @@ -143,7 +143,7 @@ public class CleanCfHbSparkJobTest { "--outputPath", outputPath, "--resolvedPath", resolvedPath + "/dataset", "--graphTableClassName", Dataset.class.getCanonicalName(), - "--datasourceMasterDuplicate", dsMasterDuplicatePath + "--masterDuplicatePath", dsMasterDuplicatePath }); assertTrue(Files.exists(Paths.get(graphOutputPath, "dataset"))); From 389dd25430c3fa193d93f74523f61a204fe4f50f Mon Sep 17 00:00:00 2001 From: Claudio Atzori Date: Thu, 8 Dec 2022 18:40:48 +0100 Subject: [PATCH 257/535] [cleaning] avoid NPE --- .../dhp/oa/graph/clean/cfhb/CleanCfHbSparkJob.java | 14 +++++++++++--- 1 file changed, 11 insertions(+), 3 deletions(-) diff --git a/dhp-workflows/dhp-graph-mapper/src/main/java/eu/dnetlib/dhp/oa/graph/clean/cfhb/CleanCfHbSparkJob.java b/dhp-workflows/dhp-graph-mapper/src/main/java/eu/dnetlib/dhp/oa/graph/clean/cfhb/CleanCfHbSparkJob.java index eb7325af5..f48226d71 100644 --- a/dhp-workflows/dhp-graph-mapper/src/main/java/eu/dnetlib/dhp/oa/graph/clean/cfhb/CleanCfHbSparkJob.java +++ b/dhp-workflows/dhp-graph-mapper/src/main/java/eu/dnetlib/dhp/oa/graph/clean/cfhb/CleanCfHbSparkJob.java @@ -13,6 +13,7 @@ import java.util.stream.Stream; 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.FlatMapFunction; import org.apache.spark.api.java.function.MapFunction; import org.apache.spark.api.java.function.MapGroupsFunction; @@ -105,6 +106,7 @@ public class CleanCfHbSparkJob { resolved .joinWith(md, resolved.col("cfhb").equalTo(md.col("duplicateId"))) .map(asIdCfHbMapping(), Encoders.bean(IdCfHbMapping.class)) + .filter((FilterFunction) m -> Objects.nonNull(m.getMasterId())) .write() .mode(SaveMode.Overwrite) .json(resolvedPath); @@ -134,9 +136,15 @@ public class CleanCfHbSparkJob { private static MapFunction, IdCfHbMapping> asIdCfHbMapping() { return t -> { - t._1().setMasterId(t._2().getMasterId()); - t._1().setMasterName(t._2().getMasterName()); - return t._1(); + final IdCfHbMapping mapping = t._1(); + Optional + .ofNullable(t._2()) + .ifPresent(t2 -> { + mapping.setMasterId(t2.getMasterId()); + mapping.setMasterName(t2.getMasterName()); + + }); + return mapping; }; } From 8b44afe5e547612c5922e8a76dbf2f1ade5ceb23 Mon Sep 17 00:00:00 2001 From: Claudio Atzori Date: Fri, 9 Dec 2022 15:44:57 +0100 Subject: [PATCH 258/535] [cleaning] avoid NPE --- .../eu/dnetlib/dhp/oa/graph/clean/cfhb/CleanCfHbSparkJob.java | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/dhp-workflows/dhp-graph-mapper/src/main/java/eu/dnetlib/dhp/oa/graph/clean/cfhb/CleanCfHbSparkJob.java b/dhp-workflows/dhp-graph-mapper/src/main/java/eu/dnetlib/dhp/oa/graph/clean/cfhb/CleanCfHbSparkJob.java index f48226d71..7cc26745b 100644 --- a/dhp-workflows/dhp-graph-mapper/src/main/java/eu/dnetlib/dhp/oa/graph/clean/cfhb/CleanCfHbSparkJob.java +++ b/dhp-workflows/dhp-graph-mapper/src/main/java/eu/dnetlib/dhp/oa/graph/clean/cfhb/CleanCfHbSparkJob.java @@ -157,7 +157,8 @@ public class CleanCfHbSparkJob { r.getInstance().stream().map(Instance::getHostedby).map(KeyValue::getKey), r.getInstance().stream().map(Instance::getCollectedfrom).map(KeyValue::getKey))) .distinct() - .map(s -> asIdCfHbMapping(r.getId(), s)) + .filter(StringUtils::isNotBlank) + .map(cfHb -> asIdCfHbMapping(r.getId(), cfHb)) .iterator(); } From c18b8048c378963641801caaff73cd708bfce5de Mon Sep 17 00:00:00 2001 From: Claudio Atzori Date: Sat, 10 Dec 2022 11:41:38 +0100 Subject: [PATCH 259/535] [cleaning] avoid NPE --- .../graph/clean/cfhb/CleanCfHbSparkJob.java | 27 ++++++++++++++++--- 1 file changed, 24 insertions(+), 3 deletions(-) diff --git a/dhp-workflows/dhp-graph-mapper/src/main/java/eu/dnetlib/dhp/oa/graph/clean/cfhb/CleanCfHbSparkJob.java b/dhp-workflows/dhp-graph-mapper/src/main/java/eu/dnetlib/dhp/oa/graph/clean/cfhb/CleanCfHbSparkJob.java index 7cc26745b..531b415ed 100644 --- a/dhp-workflows/dhp-graph-mapper/src/main/java/eu/dnetlib/dhp/oa/graph/clean/cfhb/CleanCfHbSparkJob.java +++ b/dhp-workflows/dhp-graph-mapper/src/main/java/eu/dnetlib/dhp/oa/graph/clean/cfhb/CleanCfHbSparkJob.java @@ -151,11 +151,32 @@ public class CleanCfHbSparkJob { private static FlatMapFunction flattenCfHbFn() { return r -> Stream .concat( - r.getCollectedfrom().stream().map(KeyValue::getKey), + Optional + .ofNullable(r.getCollectedfrom()) + .map(cf -> cf.stream().map(KeyValue::getKey)) + .orElse(Stream.empty()), Stream .concat( - r.getInstance().stream().map(Instance::getHostedby).map(KeyValue::getKey), - r.getInstance().stream().map(Instance::getCollectedfrom).map(KeyValue::getKey))) + Optional + .ofNullable(r.getInstance()) + .map( + instances -> instances + .stream() + .map(i -> Optional.ofNullable(i.getHostedby()).map(KeyValue::getKey).orElse(""))) + .orElse(Stream.empty()) + .filter(StringUtils::isNotBlank), + Optional + .ofNullable(r.getInstance()) + .map( + instances -> instances + .stream() + .map( + i -> Optional + .ofNullable(i.getCollectedfrom()) + .map(KeyValue::getKey) + .orElse(""))) + .orElse(Stream.empty()) + .filter(StringUtils::isNotBlank))) .distinct() .filter(StringUtils::isNotBlank) .map(cfHb -> asIdCfHbMapping(r.getId(), cfHb)) From 5e4866d03312ba524aa9eb30f1fe337f97aad740 Mon Sep 17 00:00:00 2001 From: Sandro La Bruzzo Date: Mon, 12 Dec 2022 11:29:46 +0100 Subject: [PATCH 260/535] implemented synch for single mdstore --- .../dhp/oa/graph/raw/MigrateMongoMdstoresApplication.java | 3 +++ 1 file changed, 3 insertions(+) diff --git a/dhp-workflows/dhp-graph-mapper/src/main/java/eu/dnetlib/dhp/oa/graph/raw/MigrateMongoMdstoresApplication.java b/dhp-workflows/dhp-graph-mapper/src/main/java/eu/dnetlib/dhp/oa/graph/raw/MigrateMongoMdstoresApplication.java index 57ca9b4c4..0c8903672 100644 --- a/dhp-workflows/dhp-graph-mapper/src/main/java/eu/dnetlib/dhp/oa/graph/raw/MigrateMongoMdstoresApplication.java +++ b/dhp-workflows/dhp-graph-mapper/src/main/java/eu/dnetlib/dhp/oa/graph/raw/MigrateMongoMdstoresApplication.java @@ -108,6 +108,9 @@ public class MigrateMongoMdstoresApplication extends AbstractMigrationApplicatio .forEach( consumeMDStore( mdFormat, mdLayout, mdInterpretation, hdfsPath, fileSystem, mongoBaseUrl, mongoDb, hdfsMDStores)); + + // TODO: DELETE MDStORE FOLDER NOT PRESENT IN MONGO + } /** From b8bafab8a0f380befb8544d2ffe44f898b89ffab Mon Sep 17 00:00:00 2001 From: Claudio Atzori Date: Mon, 12 Dec 2022 14:43:03 +0100 Subject: [PATCH 261/535] [cleaning] improved vocabulary based mapping, specialization for the strict vocab cleaning --- .../dhp/common/vocabulary/Vocabulary.java | 27 ++++++++++++++----- .../oaf/utils/GraphCleaningFunctions.java | 2 +- .../dhp/oa/graph/clean/CleaningRuleMap.java | 2 +- .../dhp/oa/graph/clean/CleanContextTest.java | 8 +++--- .../dhp/oa/graph/clean/CleanCountryTest.java | 12 ++++----- .../clean/GraphCleaningFunctionsTest.java | 24 ++++++++++------- .../dnetlib/dhp/oa/graph/raw/MappersTest.java | 21 ++++++++++++--- .../eu/dnetlib/dhp/oa/graph/clean/result.json | 15 +++++------ 8 files changed, 71 insertions(+), 40 deletions(-) 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 3a8df5c9e..2ab23bda6 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 @@ -4,6 +4,7 @@ package eu.dnetlib.dhp.common.vocabulary; import java.io.Serializable; import java.util.HashMap; import java.util.Map; +import java.util.Objects; import java.util.Optional; import org.apache.commons.lang3.StringUtils; @@ -66,27 +67,39 @@ public class Vocabulary implements Serializable { } public Qualifier getTermAsQualifier(final String termId) { - if (StringUtils.isBlank(termId)) { + return getTermAsQualifier(termId, false); + } + + public Qualifier getTermAsQualifier(final String termId, boolean strict) { + final VocabularyTerm term = getTerm(termId); + if (Objects.nonNull(term)) { + return OafMapperUtils.qualifier(term.getId(), term.getName(), getId(), getName()); + } else if (Objects.isNull(term) && strict) { return OafMapperUtils.unknown(getId(), getName()); - } else if (termExists(termId)) { - final VocabularyTerm t = getTerm(termId); - return OafMapperUtils.qualifier(t.getId(), t.getName(), getId(), getName()); } else { return OafMapperUtils.qualifier(termId, termId, getId(), getName()); } } public Qualifier getSynonymAsQualifier(final String syn) { + return getSynonymAsQualifier(syn, false); + } + + public Qualifier getSynonymAsQualifier(final String syn, boolean strict) { return Optional .ofNullable(getTermBySynonym(syn)) - .map(term -> getTermAsQualifier(term.getId())) + .map(term -> getTermAsQualifier(term.getId(), strict)) .orElse(null); } public Qualifier lookup(String id) { + return lookup(id, false); + } + + public Qualifier lookup(String id, boolean strict) { return Optional - .ofNullable(getSynonymAsQualifier(id)) - .orElse(getTermAsQualifier(id)); + .ofNullable(getSynonymAsQualifier(id, strict)) + .orElse(getTermAsQualifier(id, strict)); } } 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 363f95423..347d3eb20 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 @@ -333,7 +333,7 @@ public class GraphCleaningFunctions extends CleaningFunctions { if (Objects.isNull(i.getHostedby()) || StringUtils.isBlank(i.getHostedby().getKey())) { i.setHostedby(ModelConstants.UNKNOWN_REPOSITORY); } - if (Objects.isNull(i.getRefereed())) { + if (Objects.isNull(i.getRefereed()) || StringUtils.isBlank(i.getRefereed().getClassid())) { i.setRefereed(qualifier("0000", "Unknown", ModelConstants.DNET_REVIEW_LEVELS)); } if (Objects.nonNull(i.getDateofacceptance())) { diff --git a/dhp-workflows/dhp-graph-mapper/src/main/java/eu/dnetlib/dhp/oa/graph/clean/CleaningRuleMap.java b/dhp-workflows/dhp-graph-mapper/src/main/java/eu/dnetlib/dhp/oa/graph/clean/CleaningRuleMap.java index 5f3b4e1ca..3d501bb27 100644 --- a/dhp-workflows/dhp-graph-mapper/src/main/java/eu/dnetlib/dhp/oa/graph/clean/CleaningRuleMap.java +++ b/dhp-workflows/dhp-graph-mapper/src/main/java/eu/dnetlib/dhp/oa/graph/clean/CleaningRuleMap.java @@ -42,7 +42,7 @@ public class CleaningRuleMap extends HashMap, SerializableConsumer { if (ModelConstants.DNET_SUBJECT_KEYWORD.equalsIgnoreCase(subject.getQualifier().getClassid())) { - Qualifier newValue = vocabulary.lookup(subject.getValue()); + Qualifier newValue = vocabulary.lookup(subject.getValue(), true); if (!ModelConstants.UNKNOWN.equals(newValue.getClassid())) { subject.setValue(newValue.getClassid()); subject.getQualifier().setClassid(vocabularyId); diff --git a/dhp-workflows/dhp-graph-mapper/src/test/java/eu/dnetlib/dhp/oa/graph/clean/CleanContextTest.java b/dhp-workflows/dhp-graph-mapper/src/test/java/eu/dnetlib/dhp/oa/graph/clean/CleanContextTest.java index e206c7c5a..91094f534 100644 --- a/dhp-workflows/dhp-graph-mapper/src/test/java/eu/dnetlib/dhp/oa/graph/clean/CleanContextTest.java +++ b/dhp-workflows/dhp-graph-mapper/src/test/java/eu/dnetlib/dhp/oa/graph/clean/CleanContextTest.java @@ -82,10 +82,10 @@ public class CleanContextTest { CleanContextSparkJob.main(new String[] { "--isSparkSessionManaged", Boolean.FALSE.toString(), "--inputPath", workingDir.toString() + "/publication", - "-graphTableClassName", Publication.class.getCanonicalName(), - "-workingPath", workingDir.toString() + "/working", - "-contextId", "sobigdata", - "-verifyParam", "gCube " + "--graphTableClassName", Publication.class.getCanonicalName(), + "--workingDir", workingDir.toString() + "/working", + "--contextId", "sobigdata", + "--verifyParam", "gCube " }); final JavaSparkContext sc = JavaSparkContext.fromSparkContext(spark.sparkContext()); diff --git a/dhp-workflows/dhp-graph-mapper/src/test/java/eu/dnetlib/dhp/oa/graph/clean/CleanCountryTest.java b/dhp-workflows/dhp-graph-mapper/src/test/java/eu/dnetlib/dhp/oa/graph/clean/CleanCountryTest.java index c9f846570..caf19c21c 100644 --- a/dhp-workflows/dhp-graph-mapper/src/test/java/eu/dnetlib/dhp/oa/graph/clean/CleanCountryTest.java +++ b/dhp-workflows/dhp-graph-mapper/src/test/java/eu/dnetlib/dhp/oa/graph/clean/CleanCountryTest.java @@ -83,12 +83,12 @@ public class CleanCountryTest { CleanCountrySparkJob.main(new String[] { "--isSparkSessionManaged", Boolean.FALSE.toString(), "--inputPath", workingDir.toString() + "/publication", - "-graphTableClassName", Publication.class.getCanonicalName(), - "-workingPath", workingDir.toString() + "/working", - "-country", "NL", - "-verifyParam", "10.17632", - "-collectedfrom", "NARCIS", - "-hostedBy", getClass() + "--graphTableClassName", Publication.class.getCanonicalName(), + "--workingDir", workingDir.toString() + "/working", + "--country", "NL", + "--verifyParam", "10.17632", + "--collectedfrom", "NARCIS", + "--hostedBy", getClass() .getResource("/eu/dnetlib/dhp/oa/graph/clean/hostedBy") .getPath() }); 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 4035307e5..fc7c6e5f1 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 @@ -7,6 +7,7 @@ import static org.mockito.Mockito.lenient; import java.io.IOException; import java.util.Collection; import java.util.List; +import java.util.Optional; import java.util.Set; import java.util.stream.Collectors; import java.util.stream.Stream; @@ -278,20 +279,25 @@ public class GraphCleaningFunctionsTest { s -> "0102 computer and information sciences".equals(s.getValue()) & ModelConstants.DNET_SUBJECT_FOS_CLASSID.equals(s.getQualifier().getClassid()))); - List s1 = p_cleaned - .getSubject() - .stream() - .filter(s -> s.getValue().equals("In Situ Hybridization")) - .collect(Collectors.toList()); - assertNotNull(s1); - assertEquals(1, s1.size()); - assertEquals(ModelConstants.DNET_SUBJECT_KEYWORD, s1.get(0).getQualifier().getClassid()); - assertEquals(ModelConstants.DNET_SUBJECT_KEYWORD, s1.get(0).getQualifier().getClassname()); + verify_keyword(p_cleaned, "In Situ Hybridization"); + verify_keyword(p_cleaned, "Avicennia"); // TODO add more assertions to verity the cleaned values System.out.println(MAPPER.writeValueAsString(p_cleaned)); } + private static void verify_keyword(Publication p_cleaned, String subject) { + Optional s1 = p_cleaned + .getSubject() + .stream() + .filter(s -> s.getValue().equals(subject)) + .findFirst(); + + assertTrue(s1.isPresent()); + assertEquals(ModelConstants.DNET_SUBJECT_KEYWORD, s1.get().getQualifier().getClassid()); + assertEquals(ModelConstants.DNET_SUBJECT_KEYWORD, s1.get().getQualifier().getClassname()); + } + private Stream getAuthorPidTypes(Result pub) { return pub .getAuthor() 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 ad6ceef54..d08545388 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 @@ -26,6 +26,7 @@ import com.fasterxml.jackson.databind.ObjectMapper; import eu.dnetlib.dhp.common.vocabulary.VocabularyGroup; 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; @@ -238,7 +239,11 @@ class MappersTest { assertNotNull(i.getAccessright()); assertEquals("OPEN", i.getAccessright().getClassid()); }); - assertEquals("UNKNOWN", p.getInstance().get(0).getRefereed().getClassid()); + + Publication p_cleaned = cleanup(p, vocs); + assertEquals("0000", p_cleaned.getInstance().get(0).getRefereed().getClassid()); + assertEquals("Unknown", p_cleaned.getInstance().get(0).getRefereed().getClassname()); + assertNotNull(p.getInstance().get(0).getPid()); assertEquals(2, p.getInstance().get(0).getPid().size()); @@ -453,7 +458,10 @@ class MappersTest { assertNotNull(i.getAccessright()); assertEquals("OPEN", i.getAccessright().getClassid()); }); - assertEquals("UNKNOWN", p.getInstance().get(0).getRefereed().getClassid()); + + Publication p_cleaned = cleanup(p, vocs); + assertEquals("0000", p_cleaned.getInstance().get(0).getRefereed().getClassid()); + assertEquals("Unknown", p_cleaned.getInstance().get(0).getRefereed().getClassname()); } @Test @@ -570,7 +578,9 @@ class MappersTest { assertTrue(i.getUrl().contains("http://apps.who.int/trialsearch/Trial3.aspx?trialid=NCT02321059")); assertTrue(i.getUrl().contains("https://clinicaltrials.gov/ct2/show/NCT02321059")); - assertEquals("UNKNOWN", i.getRefereed().getClassid()); + Dataset d_cleaned = cleanup(d, vocs); + assertEquals("0000", d_cleaned.getInstance().get(0).getRefereed().getClassid()); + assertEquals("Unknown", d_cleaned.getInstance().get(0).getRefereed().getClassname()); } @Test @@ -871,7 +881,10 @@ class MappersTest { assertNotNull(i.getAccessright()); assertEquals("UNKNOWN", i.getAccessright().getClassid()); }); - assertEquals("UNKNOWN", p.getInstance().get(0).getRefereed().getClassid()); + + Dataset p_cleaned = cleanup(p, vocs); + assertEquals("0000", p_cleaned.getInstance().get(0).getRefereed().getClassid()); + assertEquals("Unknown", p_cleaned.getInstance().get(0).getRefereed().getClassname()); } @Test 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 84ff35c08..8f35470e1 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 @@ -907,24 +907,23 @@ { "dataInfo": { "deletedbyinference": false, - "inferenceprovenance": "", "inferred": false, "invisible": false, "provenanceaction": { - "classid": "sysimport:crosswalk:datasetarchive", - "classname": "sysimport:crosswalk:datasetarchive", + "classid": "sysimport:actionset", + "classname": "Harvested", "schemeid": "dnet:provenanceActions", "schemename": "dnet:provenanceActions" }, "trust": "0.9" }, "qualifier": { - "classid": "", - "classname": "", - "schemeid": "", - "schemename": "" + "classid": "FOS", + "classname": "Fields of Science and Technology classification", + "schemeid": "dnet:subject_classification_typologies", + "schemename": "dnet:subject_classification_typologies" }, - "value": "doped silicon" + "value": "Avicennia" }, { "dataInfo": { From 7b80b24f8268b5283a56867feee02753f5fd516b Mon Sep 17 00:00:00 2001 From: Claudio Atzori Date: Thu, 15 Dec 2022 14:49:04 +0100 Subject: [PATCH 262/535] [cleaning] country cleaning must use both PID and AlternateIdentifier fields --- .../clean/country/CleanCountrySparkJob.java | 44 ++++++++++++++++++- 1 file changed, 42 insertions(+), 2 deletions(-) diff --git a/dhp-workflows/dhp-graph-mapper/src/main/java/eu/dnetlib/dhp/oa/graph/clean/country/CleanCountrySparkJob.java b/dhp-workflows/dhp-graph-mapper/src/main/java/eu/dnetlib/dhp/oa/graph/clean/country/CleanCountrySparkJob.java index d8d803458..37e693de9 100644 --- a/dhp-workflows/dhp-graph-mapper/src/main/java/eu/dnetlib/dhp/oa/graph/clean/country/CleanCountrySparkJob.java +++ b/dhp-workflows/dhp-graph-mapper/src/main/java/eu/dnetlib/dhp/oa/graph/clean/country/CleanCountrySparkJob.java @@ -4,9 +4,12 @@ package eu.dnetlib.dhp.oa.graph.clean.country; import static eu.dnetlib.dhp.common.SparkSessionSupport.runWithSparkSession; import java.io.Serializable; +import java.util.Collection; import java.util.List; import java.util.Optional; +import java.util.function.Function; import java.util.stream.Collectors; +import java.util.stream.Stream; import javax.swing.text.html.Option; @@ -30,6 +33,7 @@ import com.fasterxml.jackson.databind.ObjectMapper; import eu.dnetlib.dhp.application.ArgumentApplicationParser; import eu.dnetlib.dhp.oa.graph.clean.CleanContextSparkJob; import eu.dnetlib.dhp.schema.oaf.Country; +import eu.dnetlib.dhp.schema.oaf.Instance; import eu.dnetlib.dhp.schema.oaf.Result; import eu.dnetlib.dhp.schema.oaf.StructuredProperty; import eu.dnetlib.dhp.schema.oaf.utils.PidType; @@ -110,8 +114,8 @@ public class CleanCountrySparkJob implements Serializable { return r; } - if (r - .getPid() + List ids = getPidsAndAltIds(r).collect(Collectors.toList()); + if (ids .stream() .anyMatch( p -> p @@ -148,6 +152,42 @@ public class CleanCountrySparkJob implements Serializable { .json(inputPath); } + private static Stream getPidsAndAltIds(T r) { + final Stream resultPids = Optional + .ofNullable(r.getPid()) + .map(Collection::stream) + .orElse(Stream.empty()); + + final Stream instancePids = Optional + .ofNullable(r.getInstance()) + .map( + instance -> instance + .stream() + .flatMap( + i -> Optional + .ofNullable(i.getPid()) + .map(Collection::stream) + .orElse(Stream.empty()))) + .orElse(Stream.empty()); + + final Stream instanceAltIds = Optional + .ofNullable(r.getInstance()) + .map( + instance -> instance + .stream() + .flatMap( + i -> Optional + .ofNullable(i.getAlternateIdentifier()) + .map(Collection::stream) + .orElse(Stream.empty()))) + .orElse(Stream.empty()); + + return Stream + .concat( + Stream.concat(resultPids, instancePids), + instanceAltIds); + } + private static boolean pidInParam(String value, String[] verifyParam) { for (String s : verifyParam) if (value.startsWith(s)) From d791840b8202a587ca5e7193e18d1ec9de576ebc Mon Sep 17 00:00:00 2001 From: "miriam.baglioni" Date: Fri, 16 Dec 2022 13:18:29 +0100 Subject: [PATCH 263/535] [Clean Country] added test to verify remove of country: --- .../dhp/oa/graph/clean/CleanCountryTest.java | 39 +++++++++++++++++++ .../oa/graph/clean/dataset_clean_country.json | 0 2 files changed, 39 insertions(+) create mode 100644 dhp-workflows/dhp-graph-mapper/src/test/resources/eu/dnetlib/dhp/oa/graph/clean/dataset_clean_country.json diff --git a/dhp-workflows/dhp-graph-mapper/src/test/java/eu/dnetlib/dhp/oa/graph/clean/CleanCountryTest.java b/dhp-workflows/dhp-graph-mapper/src/test/java/eu/dnetlib/dhp/oa/graph/clean/CleanCountryTest.java index c9f846570..c964a3e41 100644 --- a/dhp-workflows/dhp-graph-mapper/src/test/java/eu/dnetlib/dhp/oa/graph/clean/CleanCountryTest.java +++ b/dhp-workflows/dhp-graph-mapper/src/test/java/eu/dnetlib/dhp/oa/graph/clean/CleanCountryTest.java @@ -5,6 +5,7 @@ import java.io.IOException; import java.nio.file.Files; import java.nio.file.Path; +import eu.dnetlib.dhp.schema.oaf.Dataset; import org.apache.commons.io.FileUtils; import org.apache.spark.SparkConf; import org.apache.spark.api.java.JavaRDD; @@ -147,4 +148,42 @@ public class CleanCountryTest { .size()); } + @Test + public void testDatasetClean() throws Exception { + final String sourcePath = getClass() + .getResource("/eu/dnetlib/dhp/oa/graph/clean/dataset_clean_country.json") + .getPath(); + + spark + .read() + .textFile(sourcePath) + .map( + (MapFunction) r -> OBJECT_MAPPER.readValue(r, Dataset.class), + Encoders.bean(Dataset.class)) + .write() + .json(workingDir.toString() + "/dataset"); + + CleanCountrySparkJob.main(new String[] { + "--isSparkSessionManaged", Boolean.FALSE.toString(), + "--inputPath", workingDir.toString() + "/dataset", + "-graphTableClassName", Dataset.class.getCanonicalName(), + "-workingPath", workingDir.toString() + "/working", + "-country", "NL", + "-verifyParam", "10.17632", + "-collectedfrom", "NARCIS", + "-hostedBy", getClass() + .getResource("/eu/dnetlib/dhp/oa/graph/clean/hostedBy") + .getPath() + }); + + final JavaSparkContext sc = JavaSparkContext.fromSparkContext(spark.sparkContext()); + JavaRDD tmp = sc + .textFile(workingDir.toString() + "/dataset") + .map(item -> OBJECT_MAPPER.readValue(item, Dataset.class)); + + Assertions.assertEquals(1, tmp.count()); + + + } + } diff --git a/dhp-workflows/dhp-graph-mapper/src/test/resources/eu/dnetlib/dhp/oa/graph/clean/dataset_clean_country.json b/dhp-workflows/dhp-graph-mapper/src/test/resources/eu/dnetlib/dhp/oa/graph/clean/dataset_clean_country.json new file mode 100644 index 000000000..e69de29bb From 8685eaa7064809e0ce13466b86973e76df353c49 Mon Sep 17 00:00:00 2001 From: "miriam.baglioni" Date: Fri, 16 Dec 2022 15:31:25 +0100 Subject: [PATCH 264/535] [Clean Country] added test to verify remove of country --- .../java/eu/dnetlib/dhp/oa/graph/clean/CleanCountryTest.java | 4 +++- .../eu/dnetlib/dhp/oa/graph/clean/dataset_clean_country.json | 1 + 2 files changed, 4 insertions(+), 1 deletion(-) diff --git a/dhp-workflows/dhp-graph-mapper/src/test/java/eu/dnetlib/dhp/oa/graph/clean/CleanCountryTest.java b/dhp-workflows/dhp-graph-mapper/src/test/java/eu/dnetlib/dhp/oa/graph/clean/CleanCountryTest.java index 651047b83..de9e4fc90 100644 --- a/dhp-workflows/dhp-graph-mapper/src/test/java/eu/dnetlib/dhp/oa/graph/clean/CleanCountryTest.java +++ b/dhp-workflows/dhp-graph-mapper/src/test/java/eu/dnetlib/dhp/oa/graph/clean/CleanCountryTest.java @@ -167,7 +167,7 @@ public class CleanCountryTest { "--isSparkSessionManaged", Boolean.FALSE.toString(), "--inputPath", workingDir.toString() + "/dataset", "-graphTableClassName", Dataset.class.getCanonicalName(), - "-workingPath", workingDir.toString() + "/working", + "-workingDir", workingDir.toString() + "/working", "-country", "NL", "-verifyParam", "10.17632", "-collectedfrom", "NARCIS", @@ -183,6 +183,8 @@ public class CleanCountryTest { Assertions.assertEquals(1, tmp.count()); + Assertions.assertEquals(0, tmp.first().getCountry().size()); + } diff --git a/dhp-workflows/dhp-graph-mapper/src/test/resources/eu/dnetlib/dhp/oa/graph/clean/dataset_clean_country.json b/dhp-workflows/dhp-graph-mapper/src/test/resources/eu/dnetlib/dhp/oa/graph/clean/dataset_clean_country.json index e69de29bb..f5c1fc334 100644 --- a/dhp-workflows/dhp-graph-mapper/src/test/resources/eu/dnetlib/dhp/oa/graph/clean/dataset_clean_country.json +++ b/dhp-workflows/dhp-graph-mapper/src/test/resources/eu/dnetlib/dhp/oa/graph/clean/dataset_clean_country.json @@ -0,0 +1 @@ +{"geolocation": [], "dataInfo": {"provenanceaction": {"classid": "sysimport:dedup", "classname": "sysimport:dedup", "schemeid": "dnet:provenanceActions", "schemename": "dnet:provenanceActions"}, "deletedbyinference": false, "inferred": true, "inferenceprovenance": "dedup-result-decisiontree-v3", "invisible": false, "trust": "0.8"}, "resourcetype": {"classid": "dataset", "classname": "dataset", "schemeid": "dnet:dataCite_resource", "schemename": "dnet:dataCite_resource"}, "pid": [{"dataInfo": {"invisible": false, "provenanceaction": {"classid": "sysimport:actionset", "classname": "Harvested", "schemeid": "dnet:provenanceActions", "schemename": "dnet:provenanceActions"}, "trust": "0.9", "inferred": false, "deletedbyinference": false}, "qualifier": {"classid": "doi", "classname": "Digital Object Identifier", "schemeid": "dnet:pid_types", "schemename": "dnet:pid_types"}, "value": "10.17632/v6cgs4jpbk.2"}, {"dataInfo": {"invisible": false, "provenanceaction": {"classid": "sysimport:actionset", "classname": "Harvested", "schemeid": "dnet:provenanceActions", "schemename": "dnet:provenanceActions"}, "trust": "0.9", "inferred": false, "deletedbyinference": false}, "qualifier": {"classid": "doi", "classname": "Digital Object Identifier", "schemeid": "dnet:pid_types", "schemename": "dnet:pid_types"}, "value": "10.17632/v6cgs4jpbk.3"}, {"dataInfo": {"invisible": false, "provenanceaction": {"classid": "sysimport:actionset", "classname": "Harvested", "schemeid": "dnet:provenanceActions", "schemename": "dnet:provenanceActions"}, "trust": "0.9", "inferred": false, "deletedbyinference": false}, "qualifier": {"classid": "doi", "classname": "Digital Object Identifier", "schemeid": "dnet:pid_types", "schemename": "dnet:pid_types"}, "value": "10.17632/v6cgs4jpbk"}, {"dataInfo": {"invisible": false, "provenanceaction": {"classid": "sysimport:actionset", "classname": "Harvested", "schemeid": "dnet:provenanceActions", "schemename": "dnet:provenanceActions"}, "trust": "0.9", "inferred": false, "deletedbyinference": false}, "qualifier": {"classid": "doi", "classname": "Digital Object Identifier", "schemeid": "dnet:pid_types", "schemename": "dnet:pid_types"}, "value": "10.17632/v6cgs4jpbk.1"}], "contributor": [{"dataInfo": {"invisible": false, "provenanceaction": {"classid": "sysimport:crosswalk:repository", "classname": "Harvested", "schemeid": "dnet:provenanceActions", "schemename": "dnet:provenanceActions"}, "trust": "0.9", "inferred": false, "deletedbyinference": false}, "value": "somok bhowmik"}], "bestaccessright": {"classid": "OPEN", "classname": "Open Access", "schemeid": "dnet:access_modes", "schemename": "dnet:access_modes"}, "relevantdate": [{"qualifier": {"classid": "issued", "classname": "issued", "schemeid": "dnet:dataCite_date", "schemename": "dnet:dataCite_date"}, "value": "2022-08-16"}, {"qualifier": {"classid": "available", "classname": "available", "schemeid": "dnet:dataCite_date", "schemename": "dnet:dataCite_date"}, "value": "2023-08-23"}, {"dataInfo": {"invisible": false, "provenanceaction": {"classid": "sysimport:crosswalk:repository", "classname": "Harvested", "schemeid": "dnet:provenanceActions", "schemename": "dnet:provenanceActions"}, "trust": "0.9", "inferred": false, "deletedbyinference": false}, "qualifier": {"classid": "UNKNOWN", "classname": "UNKNOWN", "schemeid": "dnet:dataCite_date", "schemename": "dnet:dataCite_date"}, "value": "2022-08-16"}, {"dataInfo": {"invisible": false, "provenanceaction": {"classid": "sysimport:crosswalk:repository", "classname": "Harvested", "schemeid": "dnet:provenanceActions", "schemename": "dnet:provenanceActions"}, "trust": "0.9", "inferred": false, "deletedbyinference": false}, "qualifier": {"classid": "available", "classname": "available", "schemeid": "dnet:dataCite_date", "schemename": "dnet:dataCite_date"}, "value": "2022-08-16"}], "collectedfrom": [{"key": "10|openaire____::9e3be59865b2c1c335d32dae2fe7b254", "value": "Datacite"}, {"key": "10|openaire____::c6df70599aa984f16ee52b4b86d2e89f", "value": "DANS (Data Archiving and Networked Services)"}, {"key": "10|eurocrisdris::fe4903425d9040f680d8610d9079ea14", "value": "NARCIS"}, {"key": "10|re3data_____::84e123776089ce3c7a33db98d9cd15a8", "value": "EASY"}], "id": "50|doi_dedup___::e04c8cbefb6f0b8378a04c57e6edbd82", "subject": [{"dataInfo": {"provenanceaction": {"classid": "sysimport:crosswalk:datasetarchive", "classname": "Harvested", "schemeid": "dnet:provenanceActions", "schemename": "dnet:provenanceActions"}, "deletedbyinference": false, "inferred": false, "inferenceprovenance": "", "invisible": false, "trust": "0.9"}, "qualifier": {"classid": "keyword", "classname": "keyword", "schemeid": "dnet:subject_classification_typologies", "schemename": "dnet:subject_classification_typologies"}, "value": "Interdisciplinary sciences"}], "lastupdatetimestamp": 1670362508719, "author": [{"surname": "Bhowmik", "name": "S.", "pid": [], "rank": 1, "affiliation": [{"dataInfo": {"invisible": false, "provenanceaction": {"classid": "sysimport:crosswalk:repository", "classname": "Harvested", "schemeid": "dnet:provenanceActions", "schemename": "dnet:provenanceActions"}, "trust": "0.9", "inferred": false, "deletedbyinference": false}, "value": "via Mendeley Data"}], "fullname": "bhowmik, S"}], "instance": [{"refereed": {"classid": "0000", "classname": "Unknown", "schemeid": "dnet:review_levels", "schemename": "dnet:review_levels"}, "hostedby": {"key": "10|re3data_____::db814dc656a911b556dba42a331cebe9", "value": "Mendeley Data"}, "license": {"value": "https://creativecommons.org/licenses/by/4.0/legalcode"}, "url": ["https://dx.doi.org/10.17632/v6cgs4jpbk.2"], "pid": [{"dataInfo": {"invisible": false, "provenanceaction": {"classid": "sysimport:actionset", "classname": "Harvested", "schemeid": "dnet:provenanceActions", "schemename": "dnet:provenanceActions"}, "trust": "0.9", "inferred": false, "deletedbyinference": false}, "qualifier": {"classid": "doi", "classname": "Digital Object Identifier", "schemeid": "dnet:pid_types", "schemename": "dnet:pid_types"}, "value": "10.17632/v6cgs4jpbk.2"}], "dateofacceptance": {"value": "2022-08-16"}, "collectedfrom": {"key": "10|openaire____::9e3be59865b2c1c335d32dae2fe7b254", "value": "Datacite"}, "accessright": {"classid": "UNKNOWN", "classname": "not available", "schemeid": "dnet:access_modes", "schemename": "dnet:access_modes"}, "instancetype": {"classid": "0021", "classname": "Dataset", "schemeid": "dnet:publication_resource", "schemename": "dnet:publication_resource"}}, {"refereed": {"classid": "0000", "classname": "Unknown", "schemeid": "dnet:review_levels", "schemename": "dnet:review_levels"}, "hostedby": {"key": "10|re3data_____::db814dc656a911b556dba42a331cebe9", "value": "Mendeley Data"}, "url": ["https://dx.doi.org/10.17632/v6cgs4jpbk.3"], "pid": [{"dataInfo": {"invisible": false, "provenanceaction": {"classid": "sysimport:actionset", "classname": "Harvested", "schemeid": "dnet:provenanceActions", "schemename": "dnet:provenanceActions"}, "trust": "0.9", "inferred": false, "deletedbyinference": false}, "qualifier": {"classid": "doi", "classname": "Digital Object Identifier", "schemeid": "dnet:pid_types", "schemename": "dnet:pid_types"}, "value": "10.17632/v6cgs4jpbk.3"}], "dateofacceptance": {"value": "2023-01-01"}, "collectedfrom": {"key": "10|openaire____::9e3be59865b2c1c335d32dae2fe7b254", "value": "Datacite"}, "accessright": {"classid": "UNKNOWN", "classname": "not available", "schemeid": "dnet:access_modes", "schemename": "dnet:access_modes"}, "instancetype": {"classid": "0021", "classname": "Dataset", "schemeid": "dnet:publication_resource", "schemename": "dnet:publication_resource"}}, {"refereed": {"classid": "0000", "classname": "Unknown", "schemeid": "dnet:review_levels", "schemename": "dnet:review_levels"}, "hostedby": {"key": "10|re3data_____::db814dc656a911b556dba42a331cebe9", "value": "Mendeley Data"}, "url": ["https://dx.doi.org/10.17632/v6cgs4jpbk"], "pid": [{"dataInfo": {"invisible": false, "provenanceaction": {"classid": "sysimport:actionset", "classname": "Harvested", "schemeid": "dnet:provenanceActions", "schemename": "dnet:provenanceActions"}, "trust": "0.9", "inferred": false, "deletedbyinference": false}, "qualifier": {"classid": "doi", "classname": "Digital Object Identifier", "schemeid": "dnet:pid_types", "schemename": "dnet:pid_types"}, "value": "10.17632/v6cgs4jpbk"}], "dateofacceptance": {"value": "2023-01-01"}, "collectedfrom": {"key": "10|openaire____::9e3be59865b2c1c335d32dae2fe7b254", "value": "Datacite"}, "accessright": {"classid": "UNKNOWN", "classname": "not available", "schemeid": "dnet:access_modes", "schemename": "dnet:access_modes"}, "instancetype": {"classid": "0021", "classname": "Dataset", "schemeid": "dnet:publication_resource", "schemename": "dnet:publication_resource"}}, {"refereed": {"classid": "0000", "classname": "Unknown", "schemeid": "dnet:review_levels", "schemename": "dnet:review_levels"}, "hostedby": {"key": "10|re3data_____::db814dc656a911b556dba42a331cebe9", "value": "Mendeley Data"}, "url": ["https://dx.doi.org/10.17632/v6cgs4jpbk.1"], "pid": [{"dataInfo": {"invisible": false, "provenanceaction": {"classid": "sysimport:actionset", "classname": "Harvested", "schemeid": "dnet:provenanceActions", "schemename": "dnet:provenanceActions"}, "trust": "0.9", "inferred": false, "deletedbyinference": false}, "qualifier": {"classid": "doi", "classname": "Digital Object Identifier", "schemeid": "dnet:pid_types", "schemename": "dnet:pid_types"}, "value": "10.17632/v6cgs4jpbk.1"}], "dateofacceptance": {"value": "2023-01-01"}, "collectedfrom": {"key": "10|openaire____::9e3be59865b2c1c335d32dae2fe7b254", "value": "Datacite"}, "accessright": {"classid": "UNKNOWN", "classname": "not available", "schemeid": "dnet:access_modes", "schemename": "dnet:access_modes"}, "instancetype": {"classid": "0021", "classname": "Dataset", "schemeid": "dnet:publication_resource", "schemename": "dnet:publication_resource"}}, {"refereed": {"classid": "0000", "classname": "UNKNOWN", "schemeid": "dnet:review_levels", "schemename": "dnet:review_levels"}, "hostedby": {"key": "10|openaire____::c6df70599aa984f16ee52b4b86d2e89f", "value": "DANS (Data Archiving and Networked Services)"}, "url": ["https://doi.org/10.17632/v6cgs4jpbk.2"], "pid": [], "alternateIdentifier": [{"dataInfo": {"provenanceaction": {"classid": "sysimport:crosswalk:datasetarchive", "classname": "Harvested", "schemeid": "dnet:provenanceActions", "schemename": "dnet:provenanceActions"}, "deletedbyinference": false, "inferred": false, "inferenceprovenance": "", "invisible": false, "trust": "0.9"}, "qualifier": {"classid": "urn", "classname": "urn", "schemeid": "dnet:pid_types", "schemename": "dnet:pid_types"}, "value": "urn:nbn:nl:ui:13-q1-3218"}, {"dataInfo": {"provenanceaction": {"classid": "sysimport:crosswalk:datasetarchive", "classname": "Harvested", "schemeid": "dnet:provenanceActions", "schemename": "dnet:provenanceActions"}, "deletedbyinference": false, "inferred": false, "inferenceprovenance": "", "invisible": false, "trust": "0.9"}, "qualifier": {"classid": "doi", "classname": "Digital Object Identifier", "schemeid": "dnet:pid_types", "schemename": "dnet:pid_types"}, "value": "10.17632/v6cgs4jpbk.2"}], "collectedfrom": {"key": "10|openaire____::c6df70599aa984f16ee52b4b86d2e89f", "value": "DANS (Data Archiving and Networked Services)"}, "accessright": {"classid": "UNKNOWN", "classname": "not available", "schemeid": "dnet:access_modes", "schemename": "dnet:access_modes"}, "instancetype": {"classid": "0021", "classname": "Dataset", "schemeid": "dnet:publication_resource", "schemename": "dnet:publication_resource"}}, {"refereed": {"classid": "0000", "classname": "UNKNOWN", "schemeid": "dnet:review_levels", "schemename": "dnet:review_levels"}, "hostedby": {"key": "10|eurocrisdris::fe4903425d9040f680d8610d9079ea14", "value": "NARCIS"}, "url": ["https://doi.org/10.17632/v6cgs4jpbk.2"], "pid": [], "alternateIdentifier": [{"dataInfo": {"provenanceaction": {"classid": "sysimport:crosswalk:datasetarchive", "classname": "Harvested", "schemeid": "dnet:provenanceActions", "schemename": "dnet:provenanceActions"}, "deletedbyinference": false, "inferred": false, "inferenceprovenance": "", "invisible": false, "trust": "0.9"}, "qualifier": {"classid": "urn", "classname": "urn", "schemeid": "dnet:pid_types", "schemename": "dnet:pid_types"}, "value": "urn:nbn:nl:ui:13-q1-3218"}, {"dataInfo": {"provenanceaction": {"classid": "sysimport:crosswalk:datasetarchive", "classname": "Harvested", "schemeid": "dnet:provenanceActions", "schemename": "dnet:provenanceActions"}, "deletedbyinference": false, "inferred": false, "inferenceprovenance": "", "invisible": false, "trust": "0.9"}, "qualifier": {"classid": "doi", "classname": "Digital Object Identifier", "schemeid": "dnet:pid_types", "schemename": "dnet:pid_types"}, "value": "10.17632/v6cgs4jpbk.2"}], "collectedfrom": {"key": "10|eurocrisdris::fe4903425d9040f680d8610d9079ea14", "value": "NARCIS"}, "accessright": {"classid": "OPEN", "classname": "Open Access", "schemeid": "dnet:access_modes", "schemename": "dnet:access_modes"}, "instancetype": {"classid": "0021", "classname": "Dataset", "schemeid": "dnet:publication_resource", "schemename": "dnet:publication_resource"}}, {"refereed": {"classid": "0000", "classname": "UNKNOWN", "schemeid": "dnet:review_levels", "schemename": "dnet:review_levels"}, "hostedby": {"key": "10|re3data_____::84e123776089ce3c7a33db98d9cd15a8", "value": "EASY"}, "license": {"dataInfo": {"invisible": false, "provenanceaction": {"classid": "sysimport:crosswalk:repository", "classname": "Harvested", "schemeid": "dnet:provenanceActions", "schemename": "dnet:provenanceActions"}, "trust": "0.9", "inferred": false, "deletedbyinference": false}, "value": "http://creativecommons.org/licenses/by/4.0"}, "url": ["https://doi.org/10.17632/v6cgs4jpbk.2"], "pid": [], "alternateIdentifier": [{"dataInfo": {"invisible": false, "provenanceaction": {"classid": "sysimport:crosswalk:repository", "classname": "Harvested", "schemeid": "dnet:provenanceActions", "schemename": "dnet:provenanceActions"}, "trust": "0.9", "inferred": false, "deletedbyinference": false}, "qualifier": {"classid": "urn", "classname": "urn", "schemeid": "dnet:pid_types", "schemename": "dnet:pid_types"}, "value": "urn:nbn:nl:ui:13-q1-3218"}, {"dataInfo": {"invisible": false, "provenanceaction": {"classid": "sysimport:crosswalk:repository", "classname": "Harvested", "schemeid": "dnet:provenanceActions", "schemename": "dnet:provenanceActions"}, "trust": "0.9", "inferred": false, "deletedbyinference": false}, "qualifier": {"classid": "doi", "classname": "Digital Object Identifier", "schemeid": "dnet:pid_types", "schemename": "dnet:pid_types"}, "value": "10.17632/v6cgs4jpbk.2"}], "dateofacceptance": {"dataInfo": {"invisible": false, "provenanceaction": {"classid": "sysimport:crosswalk:repository", "classname": "Harvested", "schemeid": "dnet:provenanceActions", "schemename": "dnet:provenanceActions"}, "trust": "0.9", "inferred": false, "deletedbyinference": false}, "value": "2022-01-01"}, "collectedfrom": {"key": "10|re3data_____::84e123776089ce3c7a33db98d9cd15a8", "value": "EASY"}, "accessright": {"classid": "OPEN", "classname": "Open Access", "schemeid": "dnet:access_modes", "schemename": "dnet:access_modes"}, "instancetype": {"classid": "0021", "classname": "Dataset", "schemeid": "dnet:publication_resource", "schemename": "dnet:publication_resource"}}], "dateofcollection": "2022-08-17T20:06:53+0000", "fulltext": [], "dateoftransformation": "2022-08-17T20:06:53+0000", "description": [{"dataInfo": {"provenanceaction": {"classid": "sysimport:crosswalk:datasetarchive", "classname": "Harvested", "schemeid": "dnet:provenanceActions", "schemename": "dnet:provenanceActions"}, "deletedbyinference": false, "inferred": false, "inferenceprovenance": "", "invisible": false, "trust": "0.9"}, "value": "Unprocessed images for: Acinetobacter baumannii defends against oxidative stress through a Mn2+-dependent small RNA-mediated repression of type VI secretion system"}], "format": [], "measures": [{"id": "influence", "unit": [{"dataInfo": {"provenanceaction": {"classid": "measure:bip", "classname": "Inferred by OpenAIRE", "schemeid": "dnet:provenanceActions", "schemename": "dnet:provenanceActions"}, "deletedbyinference": false, "inferred": true, "inferenceprovenance": "update", "invisible": false, "trust": ""}, "key": "score", "value": "4.842839E-9"}, {"dataInfo": {"provenanceaction": {"classid": "measure:bip", "classname": "Inferred by OpenAIRE", "schemeid": "dnet:provenanceActions", "schemename": "dnet:provenanceActions"}, "deletedbyinference": false, "inferred": true, "inferenceprovenance": "update", "invisible": false, "trust": ""}, "key": "class", "value": "C"}]}, {"id": "popularity", "unit": [{"dataInfo": {"provenanceaction": {"classid": "measure:bip", "classname": "Inferred by OpenAIRE", "schemeid": "dnet:provenanceActions", "schemename": "dnet:provenanceActions"}, "deletedbyinference": false, "inferred": true, "inferenceprovenance": "update", "invisible": false, "trust": ""}, "key": "score", "value": "7.705171E-9"}, {"dataInfo": {"provenanceaction": {"classid": "measure:bip", "classname": "Inferred by OpenAIRE", "schemeid": "dnet:provenanceActions", "schemename": "dnet:provenanceActions"}, "deletedbyinference": false, "inferred": true, "inferenceprovenance": "update", "invisible": false, "trust": ""}, "key": "class", "value": "C"}]}, {"id": "influence_alt", "unit": [{"dataInfo": {"provenanceaction": {"classid": "measure:bip", "classname": "Inferred by OpenAIRE", "schemeid": "dnet:provenanceActions", "schemename": "dnet:provenanceActions"}, "deletedbyinference": false, "inferred": true, "inferenceprovenance": "update", "invisible": false, "trust": ""}, "key": "score", "value": "0"}, {"dataInfo": {"provenanceaction": {"classid": "measure:bip", "classname": "Inferred by OpenAIRE", "schemeid": "dnet:provenanceActions", "schemename": "dnet:provenanceActions"}, "deletedbyinference": false, "inferred": true, "inferenceprovenance": "update", "invisible": false, "trust": ""}, "key": "class", "value": "C"}]}, {"id": "popularity_alt", "unit": [{"dataInfo": {"provenanceaction": {"classid": "measure:bip", "classname": "Inferred by OpenAIRE", "schemeid": "dnet:provenanceActions", "schemename": "dnet:provenanceActions"}, "deletedbyinference": false, "inferred": true, "inferenceprovenance": "update", "invisible": false, "trust": ""}, "key": "score", "value": "0.0"}, {"dataInfo": {"provenanceaction": {"classid": "measure:bip", "classname": "Inferred by OpenAIRE", "schemeid": "dnet:provenanceActions", "schemename": "dnet:provenanceActions"}, "deletedbyinference": false, "inferred": true, "inferenceprovenance": "update", "invisible": false, "trust": ""}, "key": "class", "value": "C"}]}, {"id": "impulse", "unit": [{"dataInfo": {"provenanceaction": {"classid": "measure:bip", "classname": "Inferred by OpenAIRE", "schemeid": "dnet:provenanceActions", "schemename": "dnet:provenanceActions"}, "deletedbyinference": false, "inferred": true, "inferenceprovenance": "update", "invisible": false, "trust": ""}, "key": "score", "value": "0"}, {"dataInfo": {"provenanceaction": {"classid": "measure:bip", "classname": "Inferred by OpenAIRE", "schemeid": "dnet:provenanceActions", "schemename": "dnet:provenanceActions"}, "deletedbyinference": false, "inferred": true, "inferenceprovenance": "update", "invisible": false, "trust": ""}, "key": "class", "value": "C"}]}], "coverage": [], "externalReference": [], "publisher": {"value": "Mendeley"}, "context": [], "eoscifguidelines": [], "language": {"classid": "und", "classname": "Undetermined", "schemeid": "dnet:languages", "schemename": "dnet:languages"}, "resulttype": {"classid": "dataset", "classname": "dataset", "schemeid": "dnet:result_typologies", "schemename": "dnet:result_typologies"}, "country": [{"classid": "NL", "classname": "Netherlands", "dataInfo": {"provenanceaction": {"classid": "country:instrepos", "classname": "Propagation of country to result collected from datasources of type institutional repositories", "schemeid": "dnet:provenanceActions", "schemename": "dnet:provenanceActions"}, "deletedbyinference": false, "inferred": true, "inferenceprovenance": "propagation", "invisible": false, "trust": "0.85"}, "schemeid": "dnet:countries", "schemename": "dnet:countries"}], "extraInfo": [], "originalId": ["50|datacite____::e04c8cbefb6f0b8378a04c57e6edbd82", "10.17632/v6cgs4jpbk.2", "50|datacite____::1544eab177367edbc4d9d56517d482df", "10.17632/v6cgs4jpbk.3", "50|datacite____::f02e8a3c923d8e120e1cdc5d2dcda3ff", "10.17632/v6cgs4jpbk", "50|datacite____::fce3b034f047504961bc4baab3515295", "10.17632/v6cgs4jpbk.1", "50|DansKnawCris::3b86948c475d0efbde049b72579feb50", "oai:services.nod.dans.knaw.nl:Products/dans:oai:easy.dans.knaw.nl:easy-dataset:254617", "50|dris___00893::3b86948c475d0efbde049b72579feb50", "oai:easy.dans.knaw.nl:easy-dataset:254617", "50|r384e1237760::673150ea2ae00b606fd8c39897dfa3d7"], "source": [], "dateofacceptance": {"value": "2022-08-16"}, "title": [{"qualifier": {"classid": "main title", "classname": "main title", "schemeid": "dnet:dataCite_title", "schemename": "dnet:dataCite_title"}, "value": "Unprocessed images for: Acinetobacter baumannii defends against oxidative stress through a Mn2+-dependent small RNA-mediated repression of type VI secretion system"}]} \ No newline at end of file From f37113a9419114d6481689a592341cef380c4d34 Mon Sep 17 00:00:00 2001 From: "miriam.baglioni" Date: Fri, 16 Dec 2022 15:32:26 +0100 Subject: [PATCH 265/535] [BulkTag] moving xquery to get community configuration in dedicated file --- .../community/QueryInformationSystem.java | 75 +++---------------- .../resources/eu/dnetlib/dhp/bulktag/query.xq | 58 ++++++++++++++ 2 files changed, 68 insertions(+), 65 deletions(-) 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 index 678b270a0..5fe3cf81f 100644 --- 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 @@ -1,8 +1,10 @@ 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; @@ -13,74 +15,17 @@ import eu.dnetlib.enabling.is.lookup.rmi.ISLookUpException; import eu.dnetlib.enabling.is.lookup.rmi.ISLookUpService; public class QueryInformationSystem { - private static final String XQUERY = "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='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()} " - + " " - + " } " - + " " - + "" - + "{$x//CONFIGURATION/context/param[./@name='advancedConstraint']/text()} " - + "" - + " "; public static CommunityConfiguration getCommunityConfiguration(final String isLookupUrl) - throws ISLookUpException, DocumentException, SAXException { + throws ISLookUpException, DocumentException, SAXException, IOException { ISLookUpService isLookUp = ISLookupClientFactory.getLookUpService(isLookupUrl); - final List res = isLookUp.quickSearchProfile(XQUERY); + final List res = isLookUp + .quickSearchProfile( + IOUtils + .toString( + QueryInformationSystem.class + .getResourceAsStream( + "/eu/dnetlib/dhp/bulktag/query.xq"))); final String xmlConf = "" + Joiner.on(" ").join(res) + ""; 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 index e69de29bb..6fbd74c8f 100644 --- 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 @@ -0,0 +1,58 @@ +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='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 From 6674cccb9478d9a4d9cef15aa239c3593f8f39f2 Mon Sep 17 00:00:00 2001 From: "miriam.baglioni" Date: Fri, 16 Dec 2022 15:33:20 +0100 Subject: [PATCH 266/535] [BulkTag] description of parameters more comprehensive for those who do not implement it --- .../eu/dnetlib/dhp/bulktag/input_bulkTag_parameters.json | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) 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 a37d7d168..a8be7c32e 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 @@ -38,13 +38,13 @@ { "paramName": "test", "paramLongName": "isTest", - "paramDescription": "true if the spark session is managed, false otherwise", + "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": "true if the spark session is managed, false otherwise", + "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 } From 9cf0a98699d161d298db16641b3d3658e0ea3346 Mon Sep 17 00:00:00 2001 From: Claudio Atzori Date: Tue, 20 Dec 2022 10:17:33 +0100 Subject: [PATCH 267/535] [cleaning] set the common subject classid/name --- .../oaf/utils/GraphCleaningFunctions.java | 9 ++ .../dhp/oa/merge/AuthorMergerTest.java | 100 ------------------ .../oa/merge/publications_with_authors.json | 3 - 3 files changed, 9 insertions(+), 103 deletions(-) delete mode 100644 dhp-common/src/test/java/eu/dnetlib/dhp/oa/merge/AuthorMergerTest.java delete mode 100644 dhp-common/src/test/resources/eu/dnetlib/dhp/oa/merge/publications_with_authors.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 347d3eb20..b24daaa5d 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 @@ -23,6 +23,8 @@ 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 org.apache.spark.api.java.function.MapFunction; +import org.apache.spark.sql.Encoders; public class GraphCleaningFunctions extends CleaningFunctions { @@ -201,6 +203,13 @@ public class GraphCleaningFunctions extends CleaningFunctions { .filter(sp -> StringUtils.isNotBlank(sp.getValue())) .filter(sp -> Objects.nonNull(sp.getQualifier())) .filter(sp -> StringUtils.isNotBlank(sp.getQualifier().getClassid())) + .map(s -> { + if ("dnet:result_subject".equals(s.getQualifier().getClassid())) { + s.getQualifier().setClassid(ModelConstants.DNET_SUBJECT_TYPOLOGIES); + s.getQualifier().setClassname(ModelConstants.DNET_SUBJECT_TYPOLOGIES); + } + return s; + }) .map(GraphCleaningFunctions::cleanValue) .collect( Collectors diff --git a/dhp-common/src/test/java/eu/dnetlib/dhp/oa/merge/AuthorMergerTest.java b/dhp-common/src/test/java/eu/dnetlib/dhp/oa/merge/AuthorMergerTest.java deleted file mode 100644 index 3a7a41a1b..000000000 --- a/dhp-common/src/test/java/eu/dnetlib/dhp/oa/merge/AuthorMergerTest.java +++ /dev/null @@ -1,100 +0,0 @@ - -package eu.dnetlib.dhp.oa.merge; - -import java.io.BufferedReader; -import java.io.FileReader; -import java.io.IOException; -import java.nio.file.Paths; -import java.util.ArrayList; -import java.util.List; -import java.util.stream.Collectors; - -import org.junit.jupiter.api.Assertions; -import org.junit.jupiter.api.BeforeEach; -import org.junit.jupiter.api.Test; - -import com.fasterxml.jackson.databind.ObjectMapper; - -import eu.dnetlib.dhp.schema.oaf.Author; -import eu.dnetlib.dhp.schema.oaf.Publication; -import eu.dnetlib.dhp.schema.oaf.StructuredProperty; -import eu.dnetlib.pace.util.MapDocumentUtil; -import scala.Tuple2; - -class AuthorMergerTest { - - private String publicationsBasePath; - - private List> authors; - - @BeforeEach - public void setUp() throws Exception { - - publicationsBasePath = Paths - .get(AuthorMergerTest.class.getResource("/eu/dnetlib/dhp/oa/merge").toURI()) - .toFile() - .getAbsolutePath(); - - authors = readSample(publicationsBasePath + "/publications_with_authors.json", Publication.class) - .stream() - .map(p -> p._2().getAuthor()) - .collect(Collectors.toList()); - - } - - @Test - void mergeTest() { // used in the dedup: threshold set to 0.95 - - for (List authors1 : authors) { - System.out.println("List " + (authors.indexOf(authors1) + 1)); - for (Author author : authors1) { - System.out.println(authorToString(author)); - } - } - - List merge = AuthorMerger.merge(authors); - - System.out.println("Merge "); - for (Author author : merge) { - System.out.println(authorToString(author)); - } - - Assertions.assertEquals(7, merge.size()); - - } - - public List> readSample(String path, Class clazz) { - List> res = new ArrayList<>(); - BufferedReader reader; - try { - reader = new BufferedReader(new FileReader(path)); - String line = reader.readLine(); - while (line != null) { - res - .add( - new Tuple2<>( - MapDocumentUtil.getJPathString("$.id", line), - new ObjectMapper().readValue(line, clazz))); - // read next line - line = reader.readLine(); - } - reader.close(); - } catch (IOException e) { - e.printStackTrace(); - } - - return res; - } - - public String authorToString(Author a) { - - String print = "Fullname = "; - print += a.getFullname() + " pid = ["; - if (a.getPid() != null) - for (StructuredProperty sp : a.getPid()) { - print += sp.toComparableString() + " "; - } - print += "]"; - return print; - } -} diff --git a/dhp-common/src/test/resources/eu/dnetlib/dhp/oa/merge/publications_with_authors.json b/dhp-common/src/test/resources/eu/dnetlib/dhp/oa/merge/publications_with_authors.json deleted file mode 100644 index 600181ba5..000000000 --- a/dhp-common/src/test/resources/eu/dnetlib/dhp/oa/merge/publications_with_authors.json +++ /dev/null @@ -1,3 +0,0 @@ -{ "journal":{ "dataInfo":null, "conferenceplace":null, "issnPrinted":"0009-9260", "issnOnline":null, "issnLinking":null, "ep":"636", "iss":null, "sp":"632", "vol":"55", "edition":null, "conferencedate":null, "name":"Clinical Radiology" }, "measures":null, "author":[ { "rank":null, "fullname":"KARL TURETSCHEK", "affiliation":null, "pid":null, "surname":"TURETSCHEK", "name":"KARL" }, { "rank":null, "fullname":"WOLFGANG EBNER", "affiliation":null, "pid":null, "surname":"EBNER", "name":"WOLFGANG" }, { "rank":null, "fullname":"DOMINIK FLEISCHMANN", "affiliation":null, "pid":null, "surname":"FLEISCHMANN", "name":"DOMINIK" }, { "rank":null, "fullname":"PATRICK WUNDERBALDINGER", "affiliation":null, "pid":null, "surname":"WUNDERBALDINGER", "name":"PATRICK" }, { "rank":null, "fullname":"LUDWIG ERLACHER", "affiliation":null, "pid":null, "surname":"ERLACHER", "name":"LUDWIG" }, { "rank":null, "fullname":"THOMAS ZONTSICH", "affiliation":null, "pid":null, "surname":"ZONTSICH", "name":"THOMAS" }, { "rank":null, "fullname":"ALEXANDER A. BANKIER", "affiliation":null, "pid":null, "surname":"BANKIER", "name":"ALEXANDER A." } ], "resulttype":{ "classid":"publication", "schemeid":"dnet:result_typologies", "schemename":"dnet:result_typologies", "classname":"publication"}, "title":[ { "qualifier":{ "classid":"main title", "schemeid":"dnet:dataCite_title", "schemename":"dnet:dataCite_title", "classname":"main title" }, "dataInfo":null, "value":"Early Pulmonary Involvement in Ankylosing Spondylitis: Assessment With Thin-section CT" } ], "relevantdate":[ { "qualifier":{ "classid":"created", "schemeid":"dnet:dataCite_date", "schemename":"dnet:dataCite_date", "classname":"created" }, "dataInfo":null, "value":"2002-09-19T13:54:50Z" } ], "dateofacceptance":{ "dataInfo":null, "value":"2002-09-19T13:54:50Z" }, "publisher":{ "dataInfo":null, "value":"Elsevier BV" }, "embargoenddate":null, "fulltext":null, "contributor":null, "resourcetype":{ "classid":"0001", "schemeid":"dnet:dataCite_resource", "schemename":"dnet:dataCite_resource", "classname":"0001"}, "coverage":null, "bestaccessright":null, "externalReference":null, "format":null, "description":[ ], "source":[ { "dataInfo":null, "value":"Crossref" } ], "subject":[ { "qualifier":{ "classid":"keywords", "schemeid":"dnet:subject_classification_typologies", "schemename":"dnet:subject_classification_typologies", "classname":"keywords" }, "dataInfo":null, "value":"Radiology Nuclear Medicine and imaging" }, { "qualifier":{ "classid":"keywords", "schemeid":"dnet:subject_classification_typologies", "schemename":"dnet:subject_classification_typologies", "classname":"keywords" }, "dataInfo":null, "value":"General Medicine" } ], "language":null, "instance":[ { "processingchargecurrency":null, "refereed":null, "instancetype":{ "classid":"0001", "schemeid":"dnet:publication_resource", "schemename":"dnet:publication_resource", "classname":"Article" }, "hostedby":null, "distributionlocation":null, "processingchargeamount":null, "license":{ "dataInfo":null, "value":"https://www.elsevier.com/tdm/userlicense/1.0/" }, "accessright":{ "classid":"RESTRICTED", "schemeid":"dnet:access_modes", "schemename":"dnet:access_modes", "classname":"Restricted" }, "dateofacceptance":{ "dataInfo":null, "value":"2002-09-19T13:54:50Z" }, "collectedfrom":{ "dataInfo":null, "value":"Crossref", "key":"10|openaire____::081b82f96300b6a6e3d282bad31cb6e2" }, "url":[ "https://api.elsevier.com/content/article/PII:S0009926000904987?httpAccept=text/xml", "https://api.elsevier.com/content/article/PII:S0009926000904987?httpAccept=text/plain", "http://dx.doi.org/10.1053/crad.2000.0498" ] } ], "context":null, "country":null, "originalId":[ "S0009926000904987", "10.1053/crad.2000.0498" ], "pid":[ { "qualifier":{ "classid":"doi", "schemeid":"dnet:pid_types", "schemename":"dnet:pid_types", "classname":"doi" }, "dataInfo":null, "value":"10.1053/crad.2000.0498" } ], "dateofcollection":"2020-02-06T20:40:22Z", "dateoftransformation":null, "oaiprovenance":null, "extraInfo":null, "id":"50|doiboost____::994b7e47b9e225ab6d5e14841cb45a7f", "collectedfrom":[ { "dataInfo":null, "value":"Crossref", "key":"10|openaire____::081b82f96300b6a6e3d282bad31cb6e2" } ], "dataInfo":{ "trust":"0.9", "invisible":false, "inferred":false, "deletedbyinference":false, "inferenceprovenance":null, "provenanceaction":{ "classid":"sysimport:actionset", "schemeid":"dnet:provenanceActions", "schemename":"dnet:provenanceActions", "classname":"sysimport:actionset" } }, "lastupdatetimestamp":1581021622595 } -{ "journal":null, "measures":null, "author":[ { "rank":null, "fullname":"Dominik Fleischmann", "affiliation":null, "pid":[ { "qualifier":{ "classid":"ORCID", "schemeid":"dnet:pid_types", "schemename":"dnet:pid_types", "classname":"ORCID" }, "dataInfo":{ "trust":"0.91", "invisible":false, "inferred":false, "deletedbyinference":false, "inferenceprovenance":null, "provenanceaction":{ "classid":"sysimport:crosswalk:entityregistry", "schemeid":"dnet:provenanceActions", "schemename":"dnet:provenanceActions", "classname":"Harvested"} }, "value":"0000-0003-0715-0952" } ], "surname":"Fleischmann", "name":"Dominik" } ], "resulttype":{ "classid":"publication", "schemeid":"dnet:result_typologies", "schemename":"dnet:result_typologies", "classname":"publication"}, "title":[ ], "relevantdate":[ ], "dateofacceptance":null, "publisher":null, "embargoenddate":null, "fulltext":[ ], "contributor":[ ], "resourcetype":null, "coverage":[ ], "bestaccessright":null, "externalReference":[ ], "format":[ ], "description":null, "source":[ ], "subject":[ ], "language":null, "instance":[ ], "context":[ ], "country":[ ], "originalId":[ ], "pid":[ { "qualifier":{ "classid":"doi", "schemeid":"dnet:pid_types", "schemename":"dnet:pid_types", "classname":"doi"}, "dataInfo":null, "value":"10.1053/crad.2000.0498" } ], "dateofcollection":null, "dateoftransformation":null, "oaiprovenance":null, "extraInfo":[ ], "id":"50|doiboost____::994b7e47b9e225ab6d5e14841cb45a7f", "collectedfrom":[ { "dataInfo":null, "value":"ORCID", "key":"10|openaire____::806360c771262b4d6770e7cdf04b5c5a" } ], "dataInfo":{ "trust":"0.9", "invisible":false, "inferred":false, "deletedbyinference":false, "inferenceprovenance":null, "provenanceaction":{ "classid":"sysimport:actionset", "schemeid":"dnet:provenanceActions", "schemename":"dnet:provenanceActions", "classname":"sysimport:actionset" } }, "lastupdatetimestamp":null } -{ "journal":{ "dataInfo":null, "conferenceplace":null, "issnPrinted":"0009-9260", "issnOnline":null, "issnLinking":null, "ep":"636", "iss":"8", "sp":"632", "vol":"55", "edition":null, "conferencedate":null, "name":"Clinical Radiology" }, "measures":null, "author":[ { "rank":null, "fullname":"T. Zontsich", "affiliation":[ { "dataInfo":null, "value":"University of Vienna" } ], "pid":[ { "qualifier":{ "classid":"URL", "schemeid":"dnet:pid_types", "schemename":"dnet:pid_types", "classname":"URL"}, "dataInfo":null, "value":"https://academic.microsoft.com/#/detail/1966908432" } ], "surname":null, "name":null }, { "rank":null, "fullname":"L Erlacher", "affiliation":[ { "dataInfo":null, "value":"University of Vienna" } ], "pid":[ { "qualifier":{ "classid":"URL", "schemeid":"dnet:pid_types", "schemename":"dnet:pid_types", "classname":"URL"}, "dataInfo":null, "value":"https://academic.microsoft.com/#/detail/687931320" } ], "surname":null, "name":null }, { "rank":null, "fullname":"Dominik Fleischmann", "affiliation":[ { "dataInfo":null, "value":"University of Vienna" } ], "pid":[ { "qualifier":{ "classid":"URL", "schemeid":"dnet:pid_types", "schemename":"dnet:pid_types", "classname":"URL"}, "dataInfo":null, "value":"https://academic.microsoft.com/#/detail/2156559961" } ], "surname":null, "name":null }, { "rank":null, "fullname":"Alexander A. Bankier", "affiliation":[ { "dataInfo":null, "value":"University of Vienna" } ], "pid":[ { "qualifier":{ "classid":"URL", "schemeid":"dnet:pid_types", "schemename":"dnet:pid_types", "classname":"URL"}, "dataInfo":null, "value":"https://academic.microsoft.com/#/detail/1107971609" } ], "surname":null, "name":null }, { "rank":null, "fullname":"Patrick Wunderbaldinger", "affiliation":[ { "dataInfo":null, "value":"University of Vienna" } ], "pid":[ { "qualifier":{ "classid":"URL", "schemeid":"dnet:pid_types", "schemename":"dnet:pid_types", "classname":"URL" }, "dataInfo":null, "value":"https://academic.microsoft.com/#/detail/2422340537" } ], "surname":null, "name":null }, { "rank":null, "fullname":"Wolfgang Ebner", "affiliation":null, "pid":[ { "qualifier":{ "classid":"URL", "schemeid":"dnet:pid_types", "schemename":"dnet:pid_types", "classname":"URL" }, "dataInfo":null, "value":"https://academic.microsoft.com/#/detail/2186462571" } ], "surname":null, "name":null }, { "rank":null, "fullname":"K. Turetschek", "affiliation":[ { "dataInfo":null, "value":"University of Vienna" } ], "pid":[ { "qualifier":{ "classid":"URL", "schemeid":"dnet:pid_types", "schemename":"dnet:pid_types", "classname":"URL" }, "dataInfo":null, "value":"https://academic.microsoft.com/#/detail/321765676" } ], "surname":null, "name":null } ], "resulttype":{ "classid":"publication", "schemeid":"dnet:result_typologies", "schemename":"dnet:result_typologies", "classname":"publication" }, "title":[ { "qualifier":{ "classid":"main title", "schemeid":"dnet:dataCite_title", "schemename":"dnet:dataCite_title", "classname":"main title" }, "dataInfo":null, "value":"early pulmonary involvement in ankylosing spondylitis assessment with thin section ct" }, { "qualifier":{ "classid":"alternative title", "schemeid":"dnet:dataCite_title", "schemename":"dnet:dataCite_title", "classname":"alternative title" }, "dataInfo":null, "value":"Early pulmonary involvement in ankylosing spondylitis: assessment with thin-section CT." } ], "relevantdate":null, "dateofacceptance":{ "dataInfo":null, "value":"2000-08-01" }, "publisher":{ "dataInfo":null, "value":"Elsevier" }, "embargoenddate":null, "fulltext":null, "contributor":null, "resourcetype":null, "coverage":null, "bestaccessright":null, "externalReference":null, "format":null, "description":[ { "dataInfo":null, "value":"Abstract AIM: To determine the frequency and the distribution of early pulmonary lesions in patients with ankylosing spondylitis (AS) and a normal chest X-ray on thin-section CT and to correlate the CT findings with the results of pulmonary function tests and clinical data. MATERIALS AND METHODS: Twenty-five patients with clinically proven AS and no history of smoking underwent clinical examinations, pulmonary function tests (PFT), chest radiography, and thin-section CT. Four of 25 patients (16%), who had obvious signs on plain films suggestive of pre-existing disorders unrelated to AS were excluded. RESULTS: Fifteen of 21 patients (71%) had abnormalities on thin-section CT. The most frequent abnormalities were thickening of the interlobular septa in seven of 21 patients (33%), mild bronchial wall thickening in (6/21, 29%), pleural thickening and pleuropulmonary irregularities (both 29%) and linear septal thickening (6/21, 29%). In six patients there were no signs of pleuropulmonary involvement. Eight of 15 patients (53%) with abnormal and four of six patients (67%) with normal CT findings revealed mild restrictive lung function impairment. CONCLUSION: Patients with AS but a normal chest radiograph frequently have abnormalities on thin-section CT. As these abnormalities are usually subtle and their extent does not correlate with functional and clinical data, the overall routine impact of thin-section CT in the diagnosis of AS is limited. Turetschek, K , (2000) Clinical Radiology53, 632–636." } ], "source":[ { "dataInfo":null, "value":null } ], "subject":[ { "qualifier":{ "classid":"MAG", "schemeid":"dnet:subject_classification_typologies", "schemename":"dnet:subject_classification_typologies", "classname":"Microsoft Academic Graph classification" }, "dataInfo":null, "value":"Complication" }, { "qualifier":{ "classid":"MAG", "schemeid":"dnet:subject_classification_typologies", "schemename":"dnet:subject_classification_typologies", "classname":"Microsoft Academic Graph classification" }, "dataInfo":null, "value":"Chest radiograph" }, { "qualifier":{ "classid":"MAG", "schemeid":"dnet:subject_classification_typologies", "schemename":"dnet:subject_classification_typologies", "classname":"Microsoft Academic Graph classification" }, "dataInfo":{ "trust":"0.580897", "invisible":false, "inferred":false, "deletedbyinference":false, "inferenceprovenance":null, "provenanceaction":{ "classid":"sysimport:actionset", "schemeid":"dnet:provenanceActions", "schemename":"dnet:provenanceActions", "classname":"sysimport:actionset" } }, "value":"medicine.diagnostic_test" }, { "qualifier":{ "classid":"MAG", "schemeid":"dnet:subject_classification_typologies", "schemename":"dnet:subject_classification_typologies", "classname":"Microsoft Academic Graph classification" }, "dataInfo":{ "trust":"0.580897", "invisible":false, "inferred":false, "deletedbyinference":false, "inferenceprovenance":null, "provenanceaction":{ "classid":"sysimport:actionset", "schemeid":"dnet:provenanceActions", "schemename":"dnet:provenanceActions", "classname":"sysimport:actionset" } }, "value":"medicine" }, { "qualifier":{ "classid":"MAG", "schemeid":"dnet:subject_classification_typologies", "schemename":"dnet:subject_classification_typologies", "classname":"Microsoft Academic Graph classification" }, "dataInfo":null, "value":"In patient" }, { "qualifier":{ "classid":"MAG", "schemeid":"dnet:subject_classification_typologies", "schemename":"dnet:subject_classification_typologies", "classname":"Microsoft Academic Graph classification" }, "dataInfo":null, "value":"Radiography" }, { "qualifier":{ "classid":"MAG", "schemeid":"dnet:subject_classification_typologies", "schemename":"dnet:subject_classification_typologies", "classname":"Microsoft Academic Graph classification" }, "dataInfo":{ "trust":"0.4582326", "invisible":false, "inferred":false, "deletedbyinference":false, "inferenceprovenance":null, "provenanceaction":{ "classid":"sysimport:actionset", "schemeid":"dnet:provenanceActions", "schemename":"dnet:provenanceActions", "classname":"sysimport:actionset" } }, "value":"business.industry" }, { "qualifier":{ "classid":"MAG", "schemeid":"dnet:subject_classification_typologies", "schemename":"dnet:subject_classification_typologies", "classname":"Microsoft Academic Graph classification" }, "dataInfo":{ "trust":"0.4582326", "invisible":false, "inferred":false, "deletedbyinference":false, "inferenceprovenance":null, "provenanceaction":{ "classid":"sysimport:actionset", "schemeid":"dnet:provenanceActions", "schemename":"dnet:provenanceActions", "classname":"sysimport:actionset" } }, "value":"business" }, { "qualifier":{ "classid":"MAG", "schemeid":"dnet:subject_classification_typologies", "schemename":"dnet:subject_classification_typologies", "classname":"Microsoft Academic Graph classification" }, "dataInfo":null, "value":"Thin section ct" }, { "qualifier":{ "classid":"MAG", "schemeid":"dnet:subject_classification_typologies", "schemename":"dnet:subject_classification_typologies", "classname":"Microsoft Academic Graph classification" }, "dataInfo":null, "value":"Respiratory disease" }, { "qualifier":{ "classid":"MAG", "schemeid":"dnet:subject_classification_typologies", "schemename":"dnet:subject_classification_typologies", "classname":"Microsoft Academic Graph classification" }, "dataInfo":{ "trust":"0.49358836", "invisible":false, "inferred":false, "deletedbyinference":false, "inferenceprovenance":null, "provenanceaction":{ "classid":"sysimport:actionset", "schemeid":"dnet:provenanceActions", "schemename":"dnet:provenanceActions", "classname":"sysimport:actionset" } }, "value":"medicine.disease" }, { "qualifier":{ "classid":"MAG", "schemeid":"dnet:subject_classification_typologies", "schemename":"dnet:subject_classification_typologies", "classname":"Microsoft Academic Graph classification" }, "dataInfo":{ "trust":"0.49358836", "invisible":false, "inferred":false, "deletedbyinference":false, "inferenceprovenance":null, "provenanceaction":{ "classid":"sysimport:actionset", "schemeid":"dnet:provenanceActions", "schemename":"dnet:provenanceActions", "classname":"sysimport:actionset" } }, "value":"medicine" }, { "qualifier":{ "classid":"MAG", "schemeid":"dnet:subject_classification_typologies", "schemename":"dnet:subject_classification_typologies", "classname":"Microsoft Academic Graph classification" }, "dataInfo":null, "value":"Ankylosing spondylitis" }, { "qualifier":{ "classid":"MAG", "schemeid":"dnet:subject_classification_typologies", "schemename":"dnet:subject_classification_typologies", "classname":"Microsoft Academic Graph classification" }, "dataInfo":{ "trust":"0.49937168", "invisible":false, "inferred":false, "deletedbyinference":false, "inferenceprovenance":null, "provenanceaction":{ "classid":"sysimport:actionset", "schemeid":"dnet:provenanceActions", "schemename":"dnet:provenanceActions", "classname":"sysimport:actionset" } }, "value":"medicine.disease" }, { "qualifier":{ "classid":"MAG", "schemeid":"dnet:subject_classification_typologies", "schemename":"dnet:subject_classification_typologies", "classname":"Microsoft Academic Graph classification" }, "dataInfo":{ "trust":"0.49937168", "invisible":false, "inferred":false, "deletedbyinference":false, "inferenceprovenance":null, "provenanceaction":{ "classid":"sysimport:actionset", "schemeid":"dnet:provenanceActions", "schemename":"dnet:provenanceActions", "classname":"sysimport:actionset" } }, "value":"medicine" }, { "qualifier":{ "classid":"MAG", "schemeid":"dnet:subject_classification_typologies", "schemename":"dnet:subject_classification_typologies", "classname":"Microsoft Academic Graph classification" }, "dataInfo":null, "value":"Radiology" }, { "qualifier":{ "classid":"MAG", "schemeid":"dnet:subject_classification_typologies", "schemename":"dnet:subject_classification_typologies", "classname":"Microsoft Academic Graph classification" }, "dataInfo":{ "trust":"0.4573571", "invisible":false, "inferred":false, "deletedbyinference":false, "inferenceprovenance":null, "provenanceaction":{ "classid":"sysimport:actionset", "schemeid":"dnet:provenanceActions", "schemename":"dnet:provenanceActions", "classname":"sysimport:actionset" } }, "value":"medicine.medical_specialty" }, { "qualifier":{ "classid":"MAG", "schemeid":"dnet:subject_classification_typologies", "schemename":"dnet:subject_classification_typologies", "classname":"Microsoft Academic Graph classification" }, "dataInfo":{ "trust":"0.4573571", "invisible":false, "inferred":false, "deletedbyinference":false, "inferenceprovenance":null, "provenanceaction":{ "classid":"sysimport:actionset", "schemeid":"dnet:provenanceActions", "schemename":"dnet:provenanceActions", "classname":"sysimport:actionset" } }, "value":"medicine" }, { "qualifier":{ "classid":"MAG", "schemeid":"dnet:subject_classification_typologies", "schemename":"dnet:subject_classification_typologies", "classname":"Microsoft Academic Graph classification" }, "dataInfo":null, "value":"Medicine" }, { "qualifier":{ "classid":"MAG", "schemeid":"dnet:subject_classification_typologies", "schemename":"dnet:subject_classification_typologies", "classname":"Microsoft Academic Graph classification" }, "dataInfo":{ "trust":"0.40295774", "invisible":false, "inferred":false, "deletedbyinference":false, "inferenceprovenance":null, "provenanceaction":{ "classid":"sysimport:actionset", "schemeid":"dnet:provenanceActions", "schemename":"dnet:provenanceActions", "classname":"sysimport:actionset" } }, "value":"business.industry" }, { "qualifier":{ "classid":"MAG", "schemeid":"dnet:subject_classification_typologies", "schemename":"dnet:subject_classification_typologies", "classname":"Microsoft Academic Graph classification" }, "dataInfo":{ "trust":"0.40295774", "invisible":false, "inferred":false, "deletedbyinference":false, "inferenceprovenance":null, "provenanceaction":{ "classid":"sysimport:actionset", "schemeid":"dnet:provenanceActions", "schemename":"dnet:provenanceActions", "classname":"sysimport:actionset" } }, "value":"business" }, { "qualifier":{ "classid":"MAG", "schemeid":"dnet:subject_classification_typologies", "schemename":"dnet:subject_classification_typologies", "classname":"Microsoft Academic Graph classification" }, "dataInfo":null, "value":"Pulmonary function testing" } ], "language":null, "instance":[ { "processingchargecurrency":null, "refereed":null, "instancetype":null, "hostedby":null, "distributionlocation":null, "processingchargeamount":null, "license":null, "accessright":null, "dateofacceptance":null, "collectedfrom":{ "dataInfo":null, "value":"Microsoft Academic Graph", "key":"10|openaire____::5f532a3fc4f1ea403f37070f59a7a53a" }, "url":[ "https://www.ncbi.nlm.nih.gov/pubmed/10964736", "https://www.sciencedirect.com/science/article/pii/S0009926000904987", "https://academic.microsoft.com/#/detail/1990704599" ] } ], "context":null, "country":null, "originalId":[ "1990704599", "10.1053/crad.2000.0498" ], "pid":[ { "qualifier":{ "classid":"doi", "schemeid":"dnet:pid_types", "schemename":"dnet:pid_types", "classname":"doi" }, "dataInfo":null, "value":"10.1053/crad.2000.0498" } ], "dateofcollection":null, "dateoftransformation":null, "oaiprovenance":null, "extraInfo":null, "id":"50|doiboost____::994b7e47b9e225ab6d5e14841cb45a7f", "collectedfrom":[ { "dataInfo":null, "value":"Microsoft Academic Graph", "key":"10|openaire____::5f532a3fc4f1ea403f37070f59a7a53a" } ], "dataInfo":{ "trust":"0.9", "invisible":false, "inferred":false, "deletedbyinference":false, "inferenceprovenance":null, "provenanceaction":{ "classid":"sysimport:actionset", "schemeid":"dnet:provenanceActions", "schemename":"dnet:provenanceActions", "classname":"sysimport:actionset"} }, "lastupdatetimestamp":null } \ No newline at end of file From 6aa91204a5950ae8b26844760e875833315c6388 Mon Sep 17 00:00:00 2001 From: Claudio Atzori Date: Tue, 20 Dec 2022 14:15:46 +0100 Subject: [PATCH 268/535] [orcid propagation] skip empty directories --- .../java/eu/dnetlib/dhp/PropagationConstant.java | 13 +++++++++---- 1 file changed, 9 insertions(+), 4 deletions(-) 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 02fdcb09b..36361a09e 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 @@ -228,10 +228,15 @@ public class PropagationConstant { 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)); + + if (HdfsSupport.exists(inputPath, spark.sparkContext().hadoopConfiguration())) { + return spark + .read() + .textFile(inputPath) + .map((MapFunction) value -> OBJECT_MAPPER.readValue(value, clazz), Encoders.bean(clazz)); + } else { + return spark.emptyDataset(Encoders.bean(clazz)); + } } } From 3c9826f18620eba9c3500831680f7275c76395bb Mon Sep 17 00:00:00 2001 From: Sandro La Bruzzo Date: Wed, 21 Dec 2022 11:21:17 +0100 Subject: [PATCH 269/535] updated lines function to it's implementation linesWithSeparators.map(l => l.stripLineEnd) in this way we force scala plugin compiler to consider this pipeline scala code and not java.string.lines() pipeline --- .../bio/ebi/SparkCreateBaselineDataFrame.scala | 2 +- .../eu/dnetlib/dhp/sx/bio/BioScholixTest.scala | 18 +++++++++--------- .../crossref/CrossrefMappingTest.scala | 4 ++-- .../doiboost/orcid/MappingORCIDToOAFTest.scala | 2 +- .../dhp/doiboost/uw/UnpayWallMappingTest.scala | 4 ++-- .../graph/resolution/ResolveEntitiesTest.scala | 6 +++--- .../sx/graph/scholix/ScholixGraphTest.scala | 4 ++-- 7 files changed, 20 insertions(+), 20 deletions(-) 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 9c55ec7be..87116f00a 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 @@ -27,7 +27,7 @@ object SparkCreateBaselineDataFrame { def requestBaseLineUpdatePage(maxFile: String): List[(String, String)] = { val data = requestPage("https://ftp.ncbi.nlm.nih.gov/pubmed/updatefiles/") - val result = data.lines + val result = data.linesWithSeparators.map(l =>l.stripLineEnd) .filter(l => l.startsWith("") diff --git a/dhp-workflows/dhp-aggregation/src/test/scala/eu/dnetlib/dhp/sx/bio/BioScholixTest.scala b/dhp-workflows/dhp-aggregation/src/test/scala/eu/dnetlib/dhp/sx/bio/BioScholixTest.scala index 827d23e72..24caaa553 100644 --- a/dhp-workflows/dhp-aggregation/src/test/scala/eu/dnetlib/dhp/sx/bio/BioScholixTest.scala +++ b/dhp-workflows/dhp-aggregation/src/test/scala/eu/dnetlib/dhp/sx/bio/BioScholixTest.scala @@ -63,7 +63,7 @@ class BioScholixTest extends AbstractVocabularyTest { val records: String = Source .fromInputStream(getClass.getResourceAsStream("/eu/dnetlib/dhp/sx/graph/bio/pubmed_dump")) .mkString - val r: List[Oaf] = records.lines.toList + val r: List[Oaf] = records.linesWithSeparators.map(l =>l.stripLineEnd).toList .map(s => mapper.readValue(s, classOf[PMArticle])) .map(a => PubMedToOaf.convert(a, vocabularies)) assertEquals(10, r.size) @@ -173,9 +173,9 @@ class BioScholixTest extends AbstractVocabularyTest { val records: String = Source .fromInputStream(getClass.getResourceAsStream("/eu/dnetlib/dhp/sx/graph/bio/pdb_dump")) .mkString - records.lines.foreach(s => assertTrue(s.nonEmpty)) + records.linesWithSeparators.map(l =>l.stripLineEnd).foreach(s => assertTrue(s.nonEmpty)) - val result: List[Oaf] = records.lines.toList.flatMap(o => BioDBToOAF.pdbTOOaf(o)) + val result: List[Oaf] = records.linesWithSeparators.map(l =>l.stripLineEnd).toList.flatMap(o => BioDBToOAF.pdbTOOaf(o)) assertTrue(result.nonEmpty) result.foreach(r => assertNotNull(r)) @@ -194,9 +194,9 @@ class BioScholixTest extends AbstractVocabularyTest { val records: String = Source .fromInputStream(getClass.getResourceAsStream("/eu/dnetlib/dhp/sx/graph/bio/uniprot_dump")) .mkString - records.lines.foreach(s => assertTrue(s.nonEmpty)) + records.linesWithSeparators.map(l =>l.stripLineEnd).foreach(s => assertTrue(s.nonEmpty)) - val result: List[Oaf] = records.lines.toList.flatMap(o => BioDBToOAF.uniprotToOAF(o)) + val result: List[Oaf] = records.linesWithSeparators.map(l =>l.stripLineEnd).toList.flatMap(o => BioDBToOAF.uniprotToOAF(o)) assertTrue(result.nonEmpty) result.foreach(r => assertNotNull(r)) @@ -239,9 +239,9 @@ class BioScholixTest extends AbstractVocabularyTest { val records: String = Source .fromInputStream(getClass.getResourceAsStream("/eu/dnetlib/dhp/sx/graph/bio/crossref_links")) .mkString - records.lines.foreach(s => assertTrue(s.nonEmpty)) + records.linesWithSeparators.map(l =>l.stripLineEnd).foreach(s => assertTrue(s.nonEmpty)) - val result: List[Oaf] = records.lines.map(s => BioDBToOAF.crossrefLinksToOaf(s)).toList + val result: List[Oaf] = records.linesWithSeparators.map(l =>l.stripLineEnd).map(s => BioDBToOAF.crossrefLinksToOaf(s)).toList assertNotNull(result) assertTrue(result.nonEmpty) @@ -276,11 +276,11 @@ class BioScholixTest extends AbstractVocabularyTest { getClass.getResourceAsStream("/eu/dnetlib/dhp/sx/graph/bio/scholix_resolved") ) .mkString - records.lines.foreach(s => assertTrue(s.nonEmpty)) + records.linesWithSeparators.map(l =>l.stripLineEnd).foreach(s => assertTrue(s.nonEmpty)) implicit lazy val formats: DefaultFormats.type = org.json4s.DefaultFormats - val l: List[ScholixResolved] = records.lines.map { input => + val l: List[ScholixResolved] = records.linesWithSeparators.map(l =>l.stripLineEnd).map { input => lazy val json = parse(input) json.extract[ScholixResolved] }.toList 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 98b5b708e..aba8cee12 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 @@ -31,13 +31,13 @@ class CrossrefMappingTest { .fromInputStream(getClass.getResourceAsStream("/eu/dnetlib/doiboost/crossref/funder_doi")) .mkString - for (line <- funder_doi.lines) { + for (line <- funder_doi.linesWithSeparators.map(l =>l.stripLineEnd)) { val json = template.replace("%s", line) val resultList: List[Oaf] = Crossref2Oaf.convert(json) assertTrue(resultList.nonEmpty) checkRelation(resultList) } - for (line <- funder_name.lines) { + for (line <- funder_name.linesWithSeparators.map(l =>l.stripLineEnd)) { val json = template.replace("%s", line) val resultList: List[Oaf] = Crossref2Oaf.convert(json) assertTrue(resultList.nonEmpty) diff --git a/dhp-workflows/dhp-doiboost/src/test/scala/eu/dnetlib/dhp/doiboost/orcid/MappingORCIDToOAFTest.scala b/dhp-workflows/dhp-doiboost/src/test/scala/eu/dnetlib/dhp/doiboost/orcid/MappingORCIDToOAFTest.scala index e5bf1bd5f..d7a6a94a5 100644 --- a/dhp-workflows/dhp-doiboost/src/test/scala/eu/dnetlib/dhp/doiboost/orcid/MappingORCIDToOAFTest.scala +++ b/dhp-workflows/dhp-doiboost/src/test/scala/eu/dnetlib/dhp/doiboost/orcid/MappingORCIDToOAFTest.scala @@ -25,7 +25,7 @@ class MappingORCIDToOAFTest { .mkString assertNotNull(json) assertFalse(json.isEmpty) - json.lines.foreach(s => { + json.linesWithSeparators.map(l =>l.stripLineEnd).foreach(s => { assertNotNull(ORCIDToOAF.extractValueFromInputString(s)) }) } diff --git a/dhp-workflows/dhp-doiboost/src/test/scala/eu/dnetlib/dhp/doiboost/uw/UnpayWallMappingTest.scala b/dhp-workflows/dhp-doiboost/src/test/scala/eu/dnetlib/dhp/doiboost/uw/UnpayWallMappingTest.scala index 542faa8ad..7fe0e9935 100644 --- a/dhp-workflows/dhp-doiboost/src/test/scala/eu/dnetlib/dhp/doiboost/uw/UnpayWallMappingTest.scala +++ b/dhp-workflows/dhp-doiboost/src/test/scala/eu/dnetlib/dhp/doiboost/uw/UnpayWallMappingTest.scala @@ -22,7 +22,7 @@ class UnpayWallMappingTest { .mkString var i: Int = 0 - for (line <- Ilist.lines) { + for (line <- Ilist.linesWithSeparators.map(l =>l.stripLineEnd)) { val p = UnpayWallToOAF.convertToOAF(line) if (p != null) { @@ -43,7 +43,7 @@ class UnpayWallMappingTest { i = i + 1 } - val l = Ilist.lines.next() + val l = Ilist.linesWithSeparators.map(l =>l.stripLineEnd).next() val item = UnpayWallToOAF.convertToOAF(l) diff --git a/dhp-workflows/dhp-graph-mapper/src/test/scala/eu/dnetlib/dhp/oa/graph/resolution/ResolveEntitiesTest.scala b/dhp-workflows/dhp-graph-mapper/src/test/scala/eu/dnetlib/dhp/oa/graph/resolution/ResolveEntitiesTest.scala index e333da1aa..d415b7fc9 100644 --- a/dhp-workflows/dhp-graph-mapper/src/test/scala/eu/dnetlib/dhp/oa/graph/resolution/ResolveEntitiesTest.scala +++ b/dhp-workflows/dhp-graph-mapper/src/test/scala/eu/dnetlib/dhp/oa/graph/resolution/ResolveEntitiesTest.scala @@ -53,7 +53,7 @@ class ResolveEntitiesTest extends Serializable { def generateUpdates(spark: SparkSession): Unit = { val template = Source.fromInputStream(this.getClass.getResourceAsStream("updates")).mkString - val pids: List[String] = template.lines + val pids: List[String] = template.linesWithSeparators.map(l =>l.stripLineEnd) .map { id => val r = new Result r.setId(id.toLowerCase.trim) @@ -127,7 +127,7 @@ class ResolveEntitiesTest extends Serializable { entities.foreach { e => val template = Source.fromInputStream(this.getClass.getResourceAsStream(s"$e")).mkString spark - .createDataset(spark.sparkContext.parallelize(template.lines.toList)) + .createDataset(spark.sparkContext.parallelize(template.linesWithSeparators.map(l =>l.stripLineEnd).toList)) .as[String] .write .option("compression", "gzip") @@ -264,7 +264,7 @@ class ResolveEntitiesTest extends Serializable { Source .fromInputStream(this.getClass.getResourceAsStream(s"publication")) .mkString - .lines + .linesWithSeparators.map(l =>l.stripLineEnd) .next(), classOf[Publication] ) diff --git a/dhp-workflows/dhp-graph-mapper/src/test/scala/eu/dnetlib/dhp/sx/graph/scholix/ScholixGraphTest.scala b/dhp-workflows/dhp-graph-mapper/src/test/scala/eu/dnetlib/dhp/sx/graph/scholix/ScholixGraphTest.scala index e92f36896..0ea908290 100644 --- a/dhp-workflows/dhp-graph-mapper/src/test/scala/eu/dnetlib/dhp/sx/graph/scholix/ScholixGraphTest.scala +++ b/dhp-workflows/dhp-graph-mapper/src/test/scala/eu/dnetlib/dhp/sx/graph/scholix/ScholixGraphTest.scala @@ -47,7 +47,7 @@ class ScholixGraphTest extends AbstractVocabularyTest { val inputRelations = Source .fromInputStream(getClass.getResourceAsStream("/eu/dnetlib/dhp/sx/graph/oaf_to_summary")) .mkString - val items = inputRelations.lines.toList + val items = inputRelations.linesWithSeparators.map(l =>l.stripLineEnd).toList assertNotNull(items) items.foreach(i => assertTrue(i.nonEmpty)) val result = @@ -69,7 +69,7 @@ class ScholixGraphTest extends AbstractVocabularyTest { getClass.getResourceAsStream("/eu/dnetlib/dhp/sx/graph/merge_result_scholix") ) .mkString - val result: List[(Relation, ScholixSummary)] = inputRelations.lines + val result: List[(Relation, ScholixSummary)] = inputRelations.linesWithSeparators.map(l =>l.stripLineEnd) .sliding(2) .map(s => (s.head, s(1))) .map(p => (mapper.readValue(p._1, classOf[Relation]), mapper.readValue(p._2, classOf[ScholixSummary]))) From e84dd5fe2668d9b45998a5b77798a56c7252a704 Mon Sep 17 00:00:00 2001 From: Antonis Lempesis Date: Fri, 26 Nov 2021 15:40:40 +0200 Subject: [PATCH 270/535] first --- .../dhp/oa/graph/stats/oozie_app/contexts.sh | 16 ++++++---------- .../dhp/oa/graph/stats/oozie_app/finalizedb.sh | 4 +--- .../oa/graph/stats/oozie_app/scripts/step11.sql | 2 +- .../oa/graph/stats/oozie_app/scripts/step15.sql | 2 +- .../graph/stats/oozie_app/scripts/step15_5.sql | 8 ++------ .../oa/graph/stats/oozie_app/scripts/step8.sql | 2 +- 6 files changed, 12 insertions(+), 22 deletions(-) diff --git a/dhp-workflows/dhp-stats-update/src/main/resources/eu/dnetlib/dhp/oa/graph/stats/oozie_app/contexts.sh b/dhp-workflows/dhp-stats-update/src/main/resources/eu/dnetlib/dhp/oa/graph/stats/oozie_app/contexts.sh index b66ab47e0..fafb45cb0 100644 --- a/dhp-workflows/dhp-stats-update/src/main/resources/eu/dnetlib/dhp/oa/graph/stats/oozie_app/contexts.sh +++ b/dhp-workflows/dhp-stats-update/src/main/resources/eu/dnetlib/dhp/oa/graph/stats/oozie_app/contexts.sh @@ -30,18 +30,14 @@ hdfs dfs -copyFromLocal concepts.csv ${TMP} hdfs dfs -chmod -R 777 ${TMP} echo "Creating and populating impala tables" -impala-shell -q "invalidate metadata" -impala-shell -d ${TARGET_DB} -q "invalidate metadata" -impala-shell -q "create table ${TARGET_DB}.context (id string, name string) row format delimited fields terminated by ','" -impala-shell -q "create table ${TARGET_DB}.category (context string, id string, name string) row format delimited fields terminated by ','" -impala-shell -q "create table ${TARGET_DB}.concept (category string, id string, name string) row format delimited fields terminated by ','" -impala-shell -d ${TARGET_DB} -q "invalidate metadata" -impala-shell -q "load data inpath '${TMP}/contexts.csv' into table ${TARGET_DB}.context" -impala-shell -q "load data inpath '${TMP}/categories.csv' into table ${TARGET_DB}.category" -impala-shell -q "load data inpath '${TMP}/concepts.csv' into table ${TARGET_DB}.concept" +hive -e "create table ${TARGET_DB}.context (id string, name string) row format delimited fields terminated by ','" +hive -e "create table ${TARGET_DB}.category (context string, id string, name string) row format delimited fields terminated by ','" +hive -e "create table ${TARGET_DB}.concept (category string, id string, name string) row format delimited fields terminated by ','" +hive -e "load data inpath '${TMP}/contexts.csv' into table ${TARGET_DB}.context" +hive -e "load data inpath '${TMP}/categories.csv' into table ${TARGET_DB}.category" +hive -e "load data inpath '${TMP}/concepts.csv' into table ${TARGET_DB}.concept" echo "Cleaning up" -hdfs dfs -rm -f -r -skipTrash ${TMP} rm concepts.csv rm categories.csv rm contexts.csv diff --git a/dhp-workflows/dhp-stats-update/src/main/resources/eu/dnetlib/dhp/oa/graph/stats/oozie_app/finalizedb.sh b/dhp-workflows/dhp-stats-update/src/main/resources/eu/dnetlib/dhp/oa/graph/stats/oozie_app/finalizedb.sh index d04c5ccfd..8eade479a 100644 --- a/dhp-workflows/dhp-stats-update/src/main/resources/eu/dnetlib/dhp/oa/graph/stats/oozie_app/finalizedb.sh +++ b/dhp-workflows/dhp-stats-update/src/main/resources/eu/dnetlib/dhp/oa/graph/stats/oozie_app/finalizedb.sh @@ -10,9 +10,7 @@ export SOURCE=$1 export SHADOW=$2 echo "Updating shadow database" -impala-shell -q "invalidate metadata" -impala-shell -d ${SOURCE} -q "invalidate metadata" -impala-shell -d ${SOURCE} -q "show tables" --delimited | sed "s/^\(.*\)/compute stats ${SOURCE}.\1;/" | impala-shell -c -f - +hive --database ${SOURCE} -e "show tables" | grep -v WARN | sed "s/^\(.*\)/analyze table ${SOURCE}.\1 compute statistics;/" | impala-shell -c -f - impala-shell -q "create database if not exists ${SHADOW}" impala-shell -d ${SHADOW} -q "show tables" --delimited | sed "s/^/drop view if exists ${SHADOW}./" | sed "s/$/;/" | impala-shell -c -f - impala-shell -d ${SOURCE} -q "show tables" --delimited | sed "s/\(.*\)/create view ${SHADOW}.\1 as select * from ${SOURCE}.\1;/" | impala-shell -c -f - 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..122947050 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 @@ -104,7 +104,7 @@ WHERE otherresearchproduct_tmp.id IN (SELECT distinct r.id AND pr.id = p.id AND to_date(r.date) - to_date(p.enddate) > 0); -CREATE OR REPLACE VIEW ${stats_db_name}.project_results_publication AS +CREATE OR REPLACE VIEW ${stats_db_name}.project_results_publication STORED AS PARQUET AS SELECT result_projects.id AS result, result_projects.project AS project_results, result.date as resultdate, 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 cec22cd3e..9b5c6ec06 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 @@ -26,7 +26,7 @@ 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 where r.datainfo.deletedbyinference=false and r.datainfo.invisible = FALSE; -CREATE VIEW IF NOT EXISTS ${stats_db_name}.result_refereed as +CREATE VIEW IF NOT EXISTS ${stats_db_name}.result_refereed STORED AS PARQUET as select * from ${stats_db_name}.publication_refereed union all select * from ${stats_db_name}.dataset_refereed 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 86ead4a2c..9b2630286 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 @@ -29,8 +29,6 @@ select rcount.pid, sum(case when rcount.type='publication' then rcount.count els from rcount group by rcount.pid; -create view ${stats_db_name}.rndexpenditure as select * from stats_ext.rndexpediture; - create table ${stats_db_name}.result_instance stored as parquet as select distinct r.* from ( @@ -39,12 +37,10 @@ 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; -create table ${stats_db_name}.result_apc as +create table ${stats_db_name}.result_apc STORED AS PARQUET as select r.id, r.amount, r.currency from ( select substr(r.id, 4) as id, cast(inst.processingchargeamount.value as float) as amount, inst.processingchargecurrency.value as currency from ${openaire_db_name}.result r lateral view explode(r.instance) instances as inst) r join ${stats_db_name}.result res on res.id=r.id -where r.amount is not null; - -create view ${stats_db_name}.issn_gold_oa_dataset as select * from stats_ext.issn_gold_oa_dataset; \ No newline at end of file +where r.amount is not null; \ 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/step8.sql b/dhp-workflows/dhp-stats-update/src/main/resources/eu/dnetlib/dhp/oa/graph/stats/oozie_app/scripts/step8.sql index 01bed17cc..f089693fc 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 @@ -102,6 +102,6 @@ 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 where d.datainfo.deletedbyinference = false and d.datainfo.invisible=false; -CREATE OR REPLACE VIEW ${stats_db_name}.datasource_results AS +CREATE OR REPLACE VIEW ${stats_db_name}.datasource_results STORED AS PARQUET AS SELECT datasource AS id, id AS result FROM ${stats_db_name}.result_datasources; \ No newline at end of file From 778a1a724f9b5f129c629d8dc77cd0e81c40c30d Mon Sep 17 00:00:00 2001 From: Antonis Lempesis Date: Tue, 30 Nov 2021 19:01:48 +0200 Subject: [PATCH 271/535] finished migration to hive only --- .../dhp/oa/graph/stats/oozie_app/finalizedb.sh | 11 +++++++---- .../dhp/oa/graph/stats/oozie_app/indicators.sh | 6 +++--- .../dnetlib/dhp/oa/graph/stats/oozie_app/monitor.sh | 11 +++++++---- .../dhp/oa/graph/stats/oozie_app/observatory-post.sh | 12 +++++++----- .../dhp/oa/graph/stats/oozie_app/observatory-pre.sh | 7 ++++--- 5 files changed, 28 insertions(+), 19 deletions(-) diff --git a/dhp-workflows/dhp-stats-update/src/main/resources/eu/dnetlib/dhp/oa/graph/stats/oozie_app/finalizedb.sh b/dhp-workflows/dhp-stats-update/src/main/resources/eu/dnetlib/dhp/oa/graph/stats/oozie_app/finalizedb.sh index 8eade479a..60771dfa7 100644 --- a/dhp-workflows/dhp-stats-update/src/main/resources/eu/dnetlib/dhp/oa/graph/stats/oozie_app/finalizedb.sh +++ b/dhp-workflows/dhp-stats-update/src/main/resources/eu/dnetlib/dhp/oa/graph/stats/oozie_app/finalizedb.sh @@ -10,8 +10,11 @@ export SOURCE=$1 export SHADOW=$2 echo "Updating shadow database" -hive --database ${SOURCE} -e "show tables" | grep -v WARN | sed "s/^\(.*\)/analyze table ${SOURCE}.\1 compute statistics;/" | impala-shell -c -f - -impala-shell -q "create database if not exists ${SHADOW}" -impala-shell -d ${SHADOW} -q "show tables" --delimited | sed "s/^/drop view if exists ${SHADOW}./" | sed "s/$/;/" | impala-shell -c -f - -impala-shell -d ${SOURCE} -q "show tables" --delimited | sed "s/\(.*\)/create view ${SHADOW}.\1 as select * from ${SOURCE}.\1;/" | impala-shell -c -f - +hive --database ${SOURCE} -e "show tables" | grep -v WARN | sed "s/^\(.*\)/analyze table ${SOURCE}.\1 compute statistics;/" > foo +hive -f foo +hive -e "create database if not exists ${SHADOW}" +hive --database ${SHADOW} -e "show tables" | grep -v WARN | sed "s/^/drop view if exists ${SHADOW}./" | sed "s/$/;/" > foo +hive -f foo +hive --database ${SOURCE} -e "show tables" | grep -v WARN | sed "s/\(.*\)/create view ${SHADOW}.\1 as select * from ${SOURCE}.\1;/" > foo +hive -f foo echo "Shadow db ready!" \ 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/indicators.sh b/dhp-workflows/dhp-stats-update/src/main/resources/eu/dnetlib/dhp/oa/graph/stats/oozie_app/indicators.sh index 93faa43d6..72d6d8048 100644 --- a/dhp-workflows/dhp-stats-update/src/main/resources/eu/dnetlib/dhp/oa/graph/stats/oozie_app/indicators.sh +++ b/dhp-workflows/dhp-stats-update/src/main/resources/eu/dnetlib/dhp/oa/graph/stats/oozie_app/indicators.sh @@ -13,7 +13,7 @@ echo "Getting file from " $SCRIPT_PATH hdfs dfs -copyToLocal $SCRIPT_PATH echo "Creating indicators" -impala-shell -q "invalidate metadata" -impala-shell -d ${TARGET} -q "show tables" --delimited | sed "s/^\(.*\)/compute stats ${TARGET}.\1;/" | impala-shell -c -f - -cat step16-createIndicatorsTables.sql | impala-shell -d $TARGET -f - +hive --database ${TARGET} -e "show tables" | grep -v WARN | sed "s/^\(.*\)/analyze table ${TARGET}.\1 compute statistics;/" > foo +hive -f foo +hive --database ${TARGET} -f step16-createIndicatorsTables.sql echo "Indicators created" \ 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 c5bda6d39..37809652d 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 @@ -15,11 +15,14 @@ echo "Getting file from " $4 hdfs dfs -copyToLocal $4 echo "Creating monitor database" -cat step20-createMonitorDB.sql | sed s/SOURCE/$1/g | sed s/TARGET/$2/g1 | impala-shell -f - +cat step20-createMonitorDB.sql | sed s/SOURCE/$1/g | sed s/TARGET/$2/g1 > foo +hive -f foo echo "Impala shell finished" echo "Updating shadow monitor database" -impala-shell -q "create database if not exists ${SHADOW}" -impala-shell -d ${SHADOW} -q "show tables" --delimited | sed "s/^/drop view if exists ${SHADOW}./" | sed "s/$/;/" | impala-shell -f - -impala-shell -d ${TARGET} -q "show tables" --delimited | sed "s/\(.*\)/create view ${SHADOW}.\1 as select * from ${TARGET}.\1;/" | impala-shell -f - +hive -e "create database if not exists ${SHADOW}" +hive --database ${SHADOW} -e "show tables" | grep -v WARN | sed "s/^/drop view if exists ${SHADOW}./" | sed "s/$/;/" > foo +hive -f foo +hive --database ${TARGET} -e "show tables" | grep -v WARN | sed "s/\(.*\)/create view ${SHADOW}.\1 as select * from ${TARGET}.\1;/" > foo +hive -f foo echo "Shadow db ready!" \ 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/observatory-post.sh b/dhp-workflows/dhp-stats-update/src/main/resources/eu/dnetlib/dhp/oa/graph/stats/oozie_app/observatory-post.sh index db8d39af2..d074e6a55 100644 --- a/dhp-workflows/dhp-stats-update/src/main/resources/eu/dnetlib/dhp/oa/graph/stats/oozie_app/observatory-post.sh +++ b/dhp-workflows/dhp-stats-update/src/main/resources/eu/dnetlib/dhp/oa/graph/stats/oozie_app/observatory-post.sh @@ -10,12 +10,14 @@ export SOURCE=$1 export TARGET=$2 export SHADOW=$3 -impala-shell -q "invalidate metadata;" -impala-shell -d ${TARGET} -q "show tables" --delimited | sed "s/\(.*\)/compute stats ${TARGET}.\1;/" | impala-shell -f - +hive --database ${TARGET} -e "show tables" | grep -v WARN | sed "s/\(.*\)/analyze table ${TARGET}.\1 compute statistics;/" > foo +hive -f foo echo "Impala shell finished" echo "Updating shadow observatory database" -impala-shell -q "create database if not exists ${SHADOW}" -impala-shell -d ${SHADOW} -q "show tables" --delimited | sed "s/^/drop view if exists ${SHADOW}./" | sed "s/$/;/" | impala-shell -f - -impala-shell -d ${TARGET} -q "show tables" --delimited | sed "s/\(.*\)/create view ${SHADOW}.\1 as select * from ${TARGET}.\1;/" | impala-shell -f - +hive -e "create database if not exists ${SHADOW}" +hive --database ${SHADOW} -e "show tables" | grep -v WARN | sed "s/^/drop view if exists ${SHADOW}./" | sed "s/$/;/" > foo +hive -f foo +hive -d ${TARGET} -e "show tables" | grep -v WARN | sed "s/\(.*\)/create view ${SHADOW}.\1 as select * from ${TARGET}.\1;/" > foo +hive -f foo echo "Shadow db ready!" \ 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/observatory-pre.sh b/dhp-workflows/dhp-stats-update/src/main/resources/eu/dnetlib/dhp/oa/graph/stats/oozie_app/observatory-pre.sh index 55a308c50..be009cd45 100644 --- a/dhp-workflows/dhp-stats-update/src/main/resources/eu/dnetlib/dhp/oa/graph/stats/oozie_app/observatory-pre.sh +++ b/dhp-workflows/dhp-stats-update/src/main/resources/eu/dnetlib/dhp/oa/graph/stats/oozie_app/observatory-pre.sh @@ -11,6 +11,7 @@ export TARGET=$2 export SHADOW=$3 echo "Creating observatory database" -impala-shell -q "drop database if exists ${TARGET} cascade" -impala-shell -q "create database if not exists ${TARGET}" -impala-shell -d ${SOURCE} -q "show tables" --delimited | grep -iv roar | sed "s/\(.*\)/create view ${TARGET}.\1 as select * from ${SOURCE}.\1;/" | impala-shell -f - +hive -e "drop database if exists ${TARGET} cascade" +hive -e "create database if not exists ${TARGET}" +hive --database ${SOURCE} -e "show tables" | grep -v WARN | grep -iv roar | sed "s/\(.*\)/create view ${TARGET}.\1 as select * from ${SOURCE}.\1;/" > foo +hive -f foo From 2754c3dd62e2c7bf60ebd00cdc7a0ec9ab9a80c1 Mon Sep 17 00:00:00 2001 From: Antonis Lempesis Date: Mon, 13 Dec 2021 16:26:14 +0200 Subject: [PATCH 272/535] moving data to impala cluster and creating shadow databases there --- .../oa/graph/stats/oozie_app/finalizedb.sh | 8 +---- .../dhp/oa/graph/stats/oozie_app/monitor.sh | 10 +----- .../graph/stats/oozie_app/observatory-post.sh | 10 +----- .../dhp/oa/graph/stats/oozie_app/workflow.xml | 36 +++++++++++++++++-- 4 files changed, 37 insertions(+), 27 deletions(-) diff --git a/dhp-workflows/dhp-stats-update/src/main/resources/eu/dnetlib/dhp/oa/graph/stats/oozie_app/finalizedb.sh b/dhp-workflows/dhp-stats-update/src/main/resources/eu/dnetlib/dhp/oa/graph/stats/oozie_app/finalizedb.sh index 60771dfa7..9de472955 100644 --- a/dhp-workflows/dhp-stats-update/src/main/resources/eu/dnetlib/dhp/oa/graph/stats/oozie_app/finalizedb.sh +++ b/dhp-workflows/dhp-stats-update/src/main/resources/eu/dnetlib/dhp/oa/graph/stats/oozie_app/finalizedb.sh @@ -11,10 +11,4 @@ export SHADOW=$2 echo "Updating shadow database" hive --database ${SOURCE} -e "show tables" | grep -v WARN | sed "s/^\(.*\)/analyze table ${SOURCE}.\1 compute statistics;/" > foo -hive -f foo -hive -e "create database if not exists ${SHADOW}" -hive --database ${SHADOW} -e "show tables" | grep -v WARN | sed "s/^/drop view if exists ${SHADOW}./" | sed "s/$/;/" > foo -hive -f foo -hive --database ${SOURCE} -e "show tables" | grep -v WARN | sed "s/\(.*\)/create view ${SHADOW}.\1 as select * from ${SOURCE}.\1;/" > foo -hive -f foo -echo "Shadow db ready!" \ No newline at end of file +hive -f 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/monitor.sh b/dhp-workflows/dhp-stats-update/src/main/resources/eu/dnetlib/dhp/oa/graph/stats/oozie_app/monitor.sh index 37809652d..a4e7eec57 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 @@ -17,12 +17,4 @@ hdfs dfs -copyToLocal $4 echo "Creating monitor database" cat step20-createMonitorDB.sql | sed s/SOURCE/$1/g | sed s/TARGET/$2/g1 > foo hive -f foo -echo "Impala shell finished" - -echo "Updating shadow monitor database" -hive -e "create database if not exists ${SHADOW}" -hive --database ${SHADOW} -e "show tables" | grep -v WARN | sed "s/^/drop view if exists ${SHADOW}./" | sed "s/$/;/" > foo -hive -f foo -hive --database ${TARGET} -e "show tables" | grep -v WARN | sed "s/\(.*\)/create view ${SHADOW}.\1 as select * from ${TARGET}.\1;/" > foo -hive -f foo -echo "Shadow db ready!" \ No newline at end of file +echo "Impala shell finished" \ 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/observatory-post.sh b/dhp-workflows/dhp-stats-update/src/main/resources/eu/dnetlib/dhp/oa/graph/stats/oozie_app/observatory-post.sh index d074e6a55..12315c9e8 100644 --- a/dhp-workflows/dhp-stats-update/src/main/resources/eu/dnetlib/dhp/oa/graph/stats/oozie_app/observatory-post.sh +++ b/dhp-workflows/dhp-stats-update/src/main/resources/eu/dnetlib/dhp/oa/graph/stats/oozie_app/observatory-post.sh @@ -12,12 +12,4 @@ export SHADOW=$3 hive --database ${TARGET} -e "show tables" | grep -v WARN | sed "s/\(.*\)/analyze table ${TARGET}.\1 compute statistics;/" > foo hive -f foo -echo "Impala shell finished" - -echo "Updating shadow observatory database" -hive -e "create database if not exists ${SHADOW}" -hive --database ${SHADOW} -e "show tables" | grep -v WARN | sed "s/^/drop view if exists ${SHADOW}./" | sed "s/$/;/" > foo -hive -f foo -hive -d ${TARGET} -e "show tables" | grep -v WARN | sed "s/\(.*\)/create view ${SHADOW}.\1 as select * from ${TARGET}.\1;/" > foo -hive -f foo -echo "Shadow db ready!" \ No newline at end of file +echo "Impala shell finished" \ 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 08d33f4e8..7ac3cefbb 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 @@ -365,11 +365,43 @@ ${observatory_db_shadow_name} observatory-post.sh - + - + + + ${jobTracker} + ${nameNode} + copyDataToImpalaCluster.sh + ${external_stats_db_name} + ${stats_db_name} + ${monitor_db_name} + ${observatory_db_name} + copyDataToImpalaCluster.sh + + + + + + + + ${jobTracker} + ${nameNode} + finalizeImpalaCluster.sh + ${stats_db_name} + ${stats_db_shadow_name} + ${monitor_db_name} + ${monitor_db_shadow_name} + ${observatory_db_name} + ${observatory_db_shadow_name} + finalizeImpalaCluster.sh + + + + + + ${jobTracker} ${nameNode} From 1ddea4f4423011568195e41f67863fd1a1140059 Mon Sep 17 00:00:00 2001 From: Antonis Lempesis Date: Mon, 13 Dec 2021 23:05:00 +0200 Subject: [PATCH 273/535] removed 'stored as parquet' from views.. --- .../oozie_app/copyDataToImpalaCluster.sh | 57 +++++++++++++++++++ .../stats/oozie_app/finalizeImpalaCluster.sh | 27 +++++++++ .../graph/stats/oozie_app/scripts/step11.sql | 2 +- .../graph/stats/oozie_app/scripts/step15.sql | 2 +- 4 files changed, 86 insertions(+), 2 deletions(-) create mode 100644 dhp-workflows/dhp-stats-update/src/main/resources/eu/dnetlib/dhp/oa/graph/stats/oozie_app/copyDataToImpalaCluster.sh create mode 100644 dhp-workflows/dhp-stats-update/src/main/resources/eu/dnetlib/dhp/oa/graph/stats/oozie_app/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 new file mode 100644 index 000000000..9846eb66a --- /dev/null +++ b/dhp-workflows/dhp-stats-update/src/main/resources/eu/dnetlib/dhp/oa/graph/stats/oozie_app/copyDataToImpalaCluster.sh @@ -0,0 +1,57 @@ +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 copydb() { + db=$1 + + # 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-mn2.openaire.eu:8020/tmp + + # change ownership to impala + hdfs dfs -conf /etc/impala_cluster/hdfs-site.xml -chmod -R 777 /tmp/${db}.db + + # create the databases + impala-shell -i impala-cluster-dn1.openaire.eu -q "drop database if exists ${db} cascade"; + impala-shell -i impala-cluster-dn1.openaire.eu -q "create database ${db}"; + + echo "creating schema for ${db}" + 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/^"//' | impala-shell -i impala-cluster-dn1.openaire.eu -c -f - + + # run the same command twice because we may have failures in the first run (due to views pointing to the same db) + 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/^"//' | impala-shell -i impala-cluster-dn1.openaire.eu -c -f - + + # 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/${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/${db}.db +} + +STATS_DB=$1 +MONITOR_DB=$2 +OBSERVATORY_DB=$3 +EXT_DB=$4 + +copydb $EXT_DB +copydb $STATS_DB +copydb $MONITOR_DB +copydb $OBSERVATORY_DB + 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 new file mode 100644 index 000000000..31107c7ed --- /dev/null +++ b/dhp-workflows/dhp-stats-update/src/main/resources/eu/dnetlib/dhp/oa/graph/stats/oozie_app/finalizeImpalaCluster.sh @@ -0,0 +1,27 @@ +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 + + 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" | sed "s/\(.*\)/create view ${SHADOW}.\1 as select * from ${SOURCE}.\1;/" | impala-shell -i impala-cluster-dn1.openaire.eu -f - +} + +STATS_DB=$1 +STATS_DB_SHADOW=$2 +MONITOR_DB=$3 +MONITOR_DB_SHADOW=$4 +OBSERVATORY_DB=$5 +OBSERVATORY_DB_SHADOW=$6 + +createShadowDB $STATS_DB $STATS_DB_SHADOW +createShadowDB $MONITOR_DB $MONITOR_DB_SHADOW +createShadowDB $OBSERVATORY_DB $OBSERVATORY_DB_SHADOW 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 122947050..41c3ed751 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 @@ -104,7 +104,7 @@ WHERE otherresearchproduct_tmp.id IN (SELECT distinct r.id AND pr.id = p.id AND to_date(r.date) - to_date(p.enddate) > 0); -CREATE OR REPLACE VIEW ${stats_db_name}.project_results_publication STORED AS PARQUET AS +CREATE OR REPLACE VIEW ${stats_db_name}.project_results_publication AS SELECT result_projects.id AS result, result_projects.project AS project_results, result.date as resultdate, 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 9b5c6ec06..cec22cd3e 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 @@ -26,7 +26,7 @@ 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 where r.datainfo.deletedbyinference=false and r.datainfo.invisible = FALSE; -CREATE VIEW IF NOT EXISTS ${stats_db_name}.result_refereed STORED AS PARQUET as +CREATE VIEW IF NOT EXISTS ${stats_db_name}.result_refereed as select * from ${stats_db_name}.publication_refereed union all select * from ${stats_db_name}.dataset_refereed From 028873cc512de8d528a3cc5dd52de028b66f809c Mon Sep 17 00:00:00 2001 From: antleb Date: Fri, 29 Apr 2022 12:49:27 +0300 Subject: [PATCH 274/535] added new hive opts --- .../dnetlib/dhp/oa/graph/stats/oozie_app/indicators.sh | 9 +++++---- .../dnetlib/dhp/oa/graph/stats/oozie_app/workflow.xml | 10 +++++++--- 2 files changed, 12 insertions(+), 7 deletions(-) diff --git a/dhp-workflows/dhp-stats-update/src/main/resources/eu/dnetlib/dhp/oa/graph/stats/oozie_app/indicators.sh b/dhp-workflows/dhp-stats-update/src/main/resources/eu/dnetlib/dhp/oa/graph/stats/oozie_app/indicators.sh index 72d6d8048..fef569b59 100644 --- a/dhp-workflows/dhp-stats-update/src/main/resources/eu/dnetlib/dhp/oa/graph/stats/oozie_app/indicators.sh +++ b/dhp-workflows/dhp-stats-update/src/main/resources/eu/dnetlib/dhp/oa/graph/stats/oozie_app/indicators.sh @@ -8,12 +8,13 @@ fi export TARGET=$1 export SCRIPT_PATH=$2 +export HIVE_OPTS="-hiveconf mapred.job.queue.name=analytics -hiveconf hive.spark.client.connect.timeout=120000ms -hiveconf hive.spark.client.server.connect.timeout=300000ms" echo "Getting file from " $SCRIPT_PATH hdfs dfs -copyToLocal $SCRIPT_PATH echo "Creating indicators" -hive --database ${TARGET} -e "show tables" | grep -v WARN | sed "s/^\(.*\)/analyze table ${TARGET}.\1 compute statistics;/" > foo -hive -f foo -hive --database ${TARGET} -f step16-createIndicatorsTables.sql -echo "Indicators created" \ No newline at end of file +hive $HIVE_OPTS --database ${TARGET} -e "show tables" | grep -v WARN | sed "s/^\(.*\)/analyze table ${TARGET}.\1 compute statistics;/" > foo +hive $HIVE_OPTS -f foo +hive $HIVE_OPTS --database ${TARGET} -f step16-createIndicatorsTables.sql +echo "Indicators created" 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 7ac3cefbb..5661e1e73 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 @@ -67,10 +67,14 @@ hive.txn.timeout ${hive_timeout} + + mapred.job.queue.name + analytics + - + Action failed, error message[${wf:errorMessage(wf:lastErrorNode())}] @@ -276,7 +280,7 @@ ${wf:appPath()}/scripts/step16-createIndicatorsTables.sql indicators.sh - + @@ -414,4 +418,4 @@ - \ No newline at end of file + From c8309fe18ecb09a1a223c43e61804429d8f1f779 Mon Sep 17 00:00:00 2001 From: antleb Date: Fri, 29 Jul 2022 16:36:20 +0300 Subject: [PATCH 275/535] addded command line params to allow hive actions to run --- .../dhp/oa/graph/stats/oozie_app/contexts.sh | 19 ++++++++++++------- .../oa/graph/stats/oozie_app/indicators.sh | 3 ++- .../dhp/oa/graph/stats/oozie_app/workflow.xml | 4 ++-- 3 files changed, 16 insertions(+), 10 deletions(-) diff --git a/dhp-workflows/dhp-stats-update/src/main/resources/eu/dnetlib/dhp/oa/graph/stats/oozie_app/contexts.sh b/dhp-workflows/dhp-stats-update/src/main/resources/eu/dnetlib/dhp/oa/graph/stats/oozie_app/contexts.sh index fafb45cb0..0ce57e095 100644 --- a/dhp-workflows/dhp-stats-update/src/main/resources/eu/dnetlib/dhp/oa/graph/stats/oozie_app/contexts.sh +++ b/dhp-workflows/dhp-stats-update/src/main/resources/eu/dnetlib/dhp/oa/graph/stats/oozie_app/contexts.sh @@ -9,6 +9,8 @@ fi CONTEXT_API=$1 TARGET_DB=$2 +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=4831838208 -hiveconf spark.yarn.executor.memoryOverhead=450" + TMP=/tmp/stats-update-`tr -dc A-Za-z0-9 - + Action failed, error message[${wf:errorMessage(wf:lastErrorNode())}] @@ -280,7 +280,7 @@ ${wf:appPath()}/scripts/step16-createIndicatorsTables.sql indicators.sh - + From 6449ff42073979226d1c02c08ee608173657bbef Mon Sep 17 00:00:00 2001 From: dimitrispie Date: Thu, 22 Dec 2022 10:18:21 +0200 Subject: [PATCH 276/535] 1. Added a decision node to enables the workflow to make a selection on the execution path to follow 2. Added new organization 3. Added 5 new tables from Eurostast --- .../oa/graph/stats/oozie_app/scripts/step15_5.sql | 5 +++++ .../oozie_app/scripts/step20-createMonitorDB.sql | 8 +++++++- .../dhp/oa/graph/stats/oozie_app/workflow.xml | 13 ++++++++++++- 3 files changed, 24 insertions(+), 2 deletions(-) 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 86ead4a2c..584de0a56 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 @@ -30,6 +30,11 @@ from rcount group by rcount.pid; create view ${stats_db_name}.rndexpenditure as select * from stats_ext.rndexpediture; +create view ${stats_db_name}.rndgdpexpenditure as select * from stats_ext.rndgdpexpenditure; +create view ${stats_db_name}.doctoratestudents as select * from stats_ext.doctoratestudents; +create view ${stats_db_name}.totalresearchers as select * from stats_ext.totalresearchers; +create view ${stats_db_name}.totalresearchersft as select * from stats_ext.totalresearchersft; +create view ${stats_db_name}.hrrst as select * from stats_ext.hrrst; create table ${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/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 98dca7129..3e69ff58d 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 @@ -10,6 +10,11 @@ create view if not exists TARGET.creation_date as select * from SOURCE.creation_ 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 ( @@ -54,7 +59,8 @@ create table TARGET.result stored as parquet as '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____::db7686f30f22cbe73a4fde872ce812a6', -- University of Milan + 'openorgs____::b8b8ca674452579f3f593d9f5e557483' -- University College Cork ) )) foo; compute stats TARGET.result; 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 08d33f4e8..17dcd1fdd 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 @@ -70,7 +70,18 @@ - + + + + + ${wf:conf('resumeFrom') eq 'Step1'} + ${wf:conf('resumeFrom') eq 'step20-createMonitorDB'} + ${wf:conf('resumeFrom') eq 'step21-createObservatoryDB-pre'} + ${wf:conf('resumeFrom') eq 'step21-createObservatoryDB'} + + + + Action failed, error message[${wf:errorMessage(wf:lastErrorNode())}] From 592013d5ddf1bac85dee76bb84931b4a31ad36b0 Mon Sep 17 00:00:00 2001 From: dimitrispie Date: Fri, 23 Dec 2022 09:43:16 +0200 Subject: [PATCH 277/535] Added more steps in decision node --- .../dhp/oa/graph/stats/oozie_app/workflow.xml | 22 +++++++++++++++++++ 1 file changed, 22 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 17dcd1fdd..c68ae46ca 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 @@ -75,9 +75,31 @@ ${wf:conf('resumeFrom') eq 'Step1'} + ${wf:conf('resumeFrom') eq 'Step2'} + ${wf:conf('resumeFrom') eq 'Step3'} + ${wf:conf('resumeFrom') eq 'Step4'} + ${wf:conf('resumeFrom') eq 'Step5'} + ${wf:conf('resumeFrom') eq 'Step6'} + ${wf:conf('resumeFrom') eq 'Step7'} + ${wf:conf('resumeFrom') eq 'Step8'} + ${wf:conf('resumeFrom') eq 'Step9'} + ${wf:conf('resumeFrom') eq 'Step10'} + ${wf:conf('resumeFrom') eq 'Step11'} + ${wf:conf('resumeFrom') eq 'Step12'} + ${wf:conf('resumeFrom') eq 'Step13'} + ${wf:conf('resumeFrom') eq 'Step14'} + ${wf:conf('resumeFrom') eq 'Step15'} + ${wf:conf('resumeFrom') eq 'Step15_5'} + ${wf:conf('resumeFrom') eq 'Contexts'} + ${wf:conf('resumeFrom') eq 'Step16-createIndicatorsTables'} + ${wf:conf('resumeFrom') eq 'Step16_1-definitions'} + ${wf:conf('resumeFrom') eq 'Step16_5'} + ${wf:conf('resumeFrom') eq 'Step19-finalize'} ${wf:conf('resumeFrom') eq 'step20-createMonitorDB'} ${wf:conf('resumeFrom') eq 'step21-createObservatoryDB-pre'} ${wf:conf('resumeFrom') eq 'step21-createObservatoryDB'} + ${wf:conf('resumeFrom') eq 'step21-createObservatoryDB-post'} + ${wf:conf('resumeFrom') eq 'Step22'} From dcb958e1467bf53761d826d74e7bc107f6ab6d91 Mon Sep 17 00:00:00 2001 From: dimitrispie Date: Wed, 4 Jan 2023 11:39:01 +0200 Subject: [PATCH 278/535] Changes to execute the stats wf only in hive --- .../dhp/oa/graph/stats/oozie_app/contexts.sh | 4 +- .../oa/graph/stats/oozie_app/finalizedb.sh | 6 +- .../oa/graph/stats/oozie_app/indicators.sh | 4 +- .../dhp/oa/graph/stats/oozie_app/monitor.sh | 15 +- .../graph/stats/oozie_app/observatory-post.sh | 2 +- .../stats/oozie_app/scripts/step15_5.sql | 11 +- .../scripts/step16-createIndicatorsTables.sql | 693 +++++++----------- .../scripts/step20-createMonitorDB.sql | 105 +-- .../scripts/step21-createObservatoryDB.sql | 40 +- .../graph/stats/oozie_app/scripts/step8.sql | 2 +- .../dhp/oa/graph/stats/oozie_app/workflow.xml | 144 ++-- 11 files changed, 472 insertions(+), 554 deletions(-) diff --git a/dhp-workflows/dhp-stats-update/src/main/resources/eu/dnetlib/dhp/oa/graph/stats/oozie_app/contexts.sh b/dhp-workflows/dhp-stats-update/src/main/resources/eu/dnetlib/dhp/oa/graph/stats/oozie_app/contexts.sh index 0ce57e095..e152eb1ee 100644 --- a/dhp-workflows/dhp-stats-update/src/main/resources/eu/dnetlib/dhp/oa/graph/stats/oozie_app/contexts.sh +++ b/dhp-workflows/dhp-stats-update/src/main/resources/eu/dnetlib/dhp/oa/graph/stats/oozie_app/contexts.sh @@ -31,8 +31,8 @@ hdfs dfs -copyFromLocal categories.csv ${TMP} hdfs dfs -copyFromLocal concepts.csv ${TMP} hdfs dfs -chmod -R 777 ${TMP} -export HADOOP_USER="antonis.lempesis" -export HADOOP_USER_NAME="antonis.lempesis" +export HADOOP_USER="dimitris.pierrakos" +export HADOOP_USER_NAME="dimitris.pierrakos" echo "Creating and populating impala tables" hive $HIVE_OPTS -e "create table ${TARGET_DB}.context (id string, name string) row format delimited fields terminated by ','" diff --git a/dhp-workflows/dhp-stats-update/src/main/resources/eu/dnetlib/dhp/oa/graph/stats/oozie_app/finalizedb.sh b/dhp-workflows/dhp-stats-update/src/main/resources/eu/dnetlib/dhp/oa/graph/stats/oozie_app/finalizedb.sh index 9de472955..011cfcc28 100644 --- a/dhp-workflows/dhp-stats-update/src/main/resources/eu/dnetlib/dhp/oa/graph/stats/oozie_app/finalizedb.sh +++ b/dhp-workflows/dhp-stats-update/src/main/resources/eu/dnetlib/dhp/oa/graph/stats/oozie_app/finalizedb.sh @@ -8,7 +8,9 @@ fi export SOURCE=$1 export SHADOW=$2 +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 "Updating shadow database" -hive --database ${SOURCE} -e "show tables" | grep -v WARN | sed "s/^\(.*\)/analyze table ${SOURCE}.\1 compute statistics;/" > foo -hive -f foo \ No newline at end of file +hive $HIVE_OPTS --database ${SOURCE} -e "show tables" | grep -v WARN | sed "s/^\(.*\)/analyze table ${SOURCE}.\1 compute statistics;/" > foo +hive $HIVE_OPTS -f 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/indicators.sh b/dhp-workflows/dhp-stats-update/src/main/resources/eu/dnetlib/dhp/oa/graph/stats/oozie_app/indicators.sh index fd95c8514..6c76e35f2 100644 --- a/dhp-workflows/dhp-stats-update/src/main/resources/eu/dnetlib/dhp/oa/graph/stats/oozie_app/indicators.sh +++ b/dhp-workflows/dhp-stats-update/src/main/resources/eu/dnetlib/dhp/oa/graph/stats/oozie_app/indicators.sh @@ -8,8 +8,8 @@ fi export TARGET=$1 export SCRIPT_PATH=$2 -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=4831838208 -hiveconf spark.yarn.executor.memoryOverhead=450" -export HADOOP_USER="antonis.lempesis" +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 " $SCRIPT_PATH hdfs dfs -copyToLocal $SCRIPT_PATH 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 a4e7eec57..25095f4d3 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 @@ -11,10 +11,15 @@ export TARGET=$2 export SHADOW=$3 export SCRIPT_PATH=$4 -echo "Getting file from " $4 -hdfs dfs -copyToLocal $4 +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 " $SCRIPT_PATH +hdfs dfs -copyToLocal $SCRIPT_PATH + echo "Creating monitor database" -cat step20-createMonitorDB.sql | sed s/SOURCE/$1/g | sed s/TARGET/$2/g1 > foo -hive -f foo -echo "Impala shell finished" \ No newline at end of file +#cat step20-createMonitorDB.sql | sed s/SOURCE/$1/g | sed s/TARGET/$2/g1 > foo +cat step20-createMonitorDB.sql | sed "s/TARGET/${TARGET}/g" | sed "s/SOURCE/${SOURCE}/g" > foo +hive $HIVE_OPTS -f foo +echo "Hive shell finished" diff --git a/dhp-workflows/dhp-stats-update/src/main/resources/eu/dnetlib/dhp/oa/graph/stats/oozie_app/observatory-post.sh b/dhp-workflows/dhp-stats-update/src/main/resources/eu/dnetlib/dhp/oa/graph/stats/oozie_app/observatory-post.sh index 12315c9e8..fafafe59a 100644 --- a/dhp-workflows/dhp-stats-update/src/main/resources/eu/dnetlib/dhp/oa/graph/stats/oozie_app/observatory-post.sh +++ b/dhp-workflows/dhp-stats-update/src/main/resources/eu/dnetlib/dhp/oa/graph/stats/oozie_app/observatory-post.sh @@ -12,4 +12,4 @@ export SHADOW=$3 hive --database ${TARGET} -e "show tables" | grep -v WARN | sed "s/\(.*\)/analyze table ${TARGET}.\1 compute statistics;/" > foo hive -f foo -echo "Impala shell finished" \ No newline at end of file +echo "Hive shell finished" 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 9b2630286..1ae856355 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 @@ -29,6 +29,13 @@ select rcount.pid, sum(case when rcount.type='publication' then rcount.count els from rcount group by rcount.pid; +create view ${stats_db_name}.rndexpenditure as select * from stats_ext.rndexpediture; +create view ${stats_db_name}.rndgdpexpenditure as select * from stats_ext.rndgdpexpenditure; +create view ${stats_db_name}.doctoratestudents as select * from stats_ext.doctoratestudents; +create view ${stats_db_name}.totalresearchers as select * from stats_ext.totalresearchers; +create view ${stats_db_name}.totalresearchersft as select * from stats_ext.totalresearchersft; +create view ${stats_db_name}.hrrst as select * from stats_ext.hrrst; + create table ${stats_db_name}.result_instance stored as parquet as select distinct r.* from ( @@ -43,4 +50,6 @@ from ( select substr(r.id, 4) as id, cast(inst.processingchargeamount.value as float) as amount, inst.processingchargecurrency.value as currency from ${openaire_db_name}.result r lateral view explode(r.instance) instances as inst) r join ${stats_db_name}.result res on res.id=r.id -where r.amount is not null; \ No newline at end of file +where r.amount is not null; + +create view ${stats_db_name}.issn_gold_oa_dataset as select * from stats_ext.issn_gold_oa_dataset; \ 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/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 1bda07629..ac4d4202a 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 ---- -create table indi_pub_green_oa stored as parquet as +create table if not exists indi_pub_green_oa stored as parquet as select distinct p.id, coalesce(green_oa, 0) as green_oa from publication p left outer join ( @@ -12,9 +12,9 @@ from publication p or ri.accessright = 'Embargo' or ri.accessright = 'Open Source')) tmp on p.id= tmp.id; -compute stats indi_pub_green_oa; +ANALYZE TABLE indi_pub_green_oa COMPUTE STATISTICS; -create table indi_pub_grey_lit stored as parquet as +create table if not exists indi_pub_grey_lit stored as parquet as select distinct p.id, coalesce(grey_lit, 0) as grey_lit from publication p left outer join ( @@ -25,9 +25,9 @@ from publication p not exists (select 1 from result_classifications rc where type ='Other literature type' and rc.id=p.id)) tmp on p.id=tmp.id; -compute stats indi_pub_grey_lit; +ANALYZE TABLE indi_pub_grey_lit COMPUTE STATISTICS; -create table indi_pub_doi_from_crossref stored as parquet as +create table if not exists 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 left outer join @@ -36,10 +36,10 @@ from publication p where pidtype='Digital Object Identifier' and d.name ='Crossref') tmp on tmp.id=p.id; -compute stats indi_pub_doi_from_crossref; +ANALYZE TABLE indi_pub_doi_from_crossref COMPUTE STATISTICS; -- Sprint 2 ---- -create table indi_result_has_cc_licence stored as parquet as +create table if not exists 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 @@ -47,9 +47,9 @@ from result r where lower(license.type) LIKE '%creativecommons.org%' OR lower(license.type) LIKE '%cc-%') tmp on r.id= tmp.id; -compute stats indi_result_has_cc_licence; +ANALYZE TABLE indi_result_has_cc_licence COMPUTE STATISTICS; -create table indi_result_has_cc_licence_url stored as parquet as +create table if not exists 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 left outer join (select r.id, lower(parse_url(license.type, "HOST")) as lic_host @@ -58,31 +58,31 @@ from result r WHERE lower(parse_url(license.type, "HOST")) = "creativecommons.org") tmp on r.id= tmp.id; -compute stats indi_result_has_cc_licence_url; +ANALYZE TABLE indi_result_has_cc_licence_url COMPUTE STATISTICS; -create table indi_pub_has_abstract stored as parquet as -select distinct publication.id, coalesce(abstract, 1) has_abstract +create table if not exists indi_pub_has_abstract stored as parquet as +select distinct publication.id, cast(coalesce(abstract, true) as int) has_abstract from publication; -compute stats indi_pub_has_abstract; +ANALYZE TABLE indi_pub_has_abstract COMPUTE STATISTICS; -create table indi_result_with_orcid stored as parquet as +create table if not exists 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 on r.id= tmp.id; -compute stats indi_result_with_orcid; +ANALYZE TABLE indi_result_with_orcid COMPUTE STATISTICS; ---- Sprint 3 ---- -create table indi_funded_result_with_fundref stored as parquet as +create table if not exists 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 where provenance='Harvested') tmp on r.result= tmp.result; -compute stats indi_funded_result_with_fundref; +ANALYZE TABLE 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,77 +92,59 @@ compute stats indi_funded_result_with_fundref; -- -- compute stats indi_result_org_collab; -- -create table indi_result_org_collab stored as parquet as -with tmp as ( -select distinct ro.organization organization, ro.id from result_organization ro -join organization o on o.id=ro.organization where o.name is not null) +create TEMPORARY TABLE tmp AS SELECT ro.organization organization, ro.id from result_organization ro +join 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 select o1.organization org1, o2.organization org2, count(o1.id) as collaborations from tmp as o1 -join tmp as o2 on o1.id=o2.id and o1.organization!=o2.organization -group by org1, org2; +join tmp as o2 where o1.id=o2.id and o1.organization!=o2.organization +group by o1.organization, o2.organization; -compute stats indi_result_org_collab; +drop table tmp purge; --- create table indi_result_org_country_collab stored as parquet as --- with tmp as --- (select o.id as id, o.country , ro.id as result,r.type from organization o --- join result_organization ro on o.id=ro.organization --- join result r on r.id=ro.id where o.country <> 'UNKNOWN') --- select o1.id org1,o2.country country2, o1.type, count(distinct o1.result) as collaborations --- from tmp as o1 --- join tmp as o2 on o1.result=o2.result --- where o1.id<>o2.id and o1.country<>o2.country --- group by o1.id, o1.type,o2.country; --- --- compute stats indi_result_org_country_collab; --- -create table indi_result_org_country_collab stored as parquet as -with tmp as -(select distinct ro.organization organization, ro.id, o.country from result_organization ro -join organization o on o.id=ro.organization where country <> 'UNKNOWN' and o.name is not null) +ANALYZE TABLE indi_result_org_collab COMPUTE STATISTICS; + +create TEMPORARY TABLE tmp AS +select distinct ro.organization organization, ro.id, o.country from result_organization ro +join 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 select o1.organization org1,o2.country country2, count(o1.id) as collaborations 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, o2.country; -compute stats indi_result_org_country_collab; +drop table tmp purge; --- create table indi_result_org_collab stored as parquet as --- with tmp as --- (select o.id, ro.id as result,r.type from organization o --- join result_organization ro on o.id=ro.organization --- join result r on r.id=ro.id) --- select o1.id org1,o2.id org2, o1.type, count(distinct o1.result) as collaborations --- from tmp as o1 --- join tmp as o2 on o1.result=o2.result --- where o1.id<>o2.id --- group by o1.id, o2.id, o1.type; --- --- compute stats indi_result_org_collab; --- -create table indi_project_collab_org stored as parquet as +ANALYZE TABLE indi_result_org_country_collab COMPUTE STATISTICS; + +create table if not exists indi_project_collab_org stored as parquet as select o1.id org1,o2.id org2, count(distinct o1.project) as collaborations from organization_projects as o1 join organization_projects as o2 on o1.project=o2.project where o1.id!=o2.id group by o1.id, o2.id; -compute stats indi_project_collab_org; +ANALYZE TABLE indi_project_collab_org COMPUTE STATISTICS; -create table indi_project_collab_org_country stored as parquet as - with tmp as - (select o.id organization, o.country , ro.project as project from organization o +create TEMPORARY TABLE tmp AS +select o.id organization, o.country , ro.project as project from organization o join organization_projects ro on o.id=ro.id - and o.country <> 'UNKNOWN') + and o.country <> 'UNKNOWN'; + +create table if not exists indi_project_collab_org_country stored as parquet as select o1.organization org1,o2.country country2, count(distinct o1.project) as collaborations 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; -compute stats indi_project_collab_org_country; +drop table tmp purge; -create table indi_funder_country_collab stored as parquet as +ANALYZE TABLE 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 @@ -173,36 +155,26 @@ from tmp as f1 where f1.country<>f2.country group by f1.funder, f2.country, f1.country; -compute stats indi_funder_country_collab; --- --- create table indi_result_country_collab stored as parquet as --- with tmp as --- (select country, ro.id as result,r.type from organization o --- join result_organization ro on o.id=ro.organization --- join result r on r.id=ro.id where country <> 'UNKNOWN') --- select o1.country country1, o2.country country2, o1.type, count(distinct o1.result) as collaborations --- from tmp as o1 --- join tmp as o2 on o1.result=o2.result --- where o1.country<>o2.country --- group by o1.country, o2.country, o1.type; --- --- compute stats indi_result_country_collab; +ANALYZE TABLE indi_funder_country_collab COMPUTE STATISTICS; -create table indi_result_country_collab stored as parquet as -with tmp as - (select distinct country, ro.id as result from organization o +create TEMPORARY TABLE tmp AS +select distinct country, ro.id as result from organization o join 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; + +create table if not exists 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 where o1.country<>o2.country group by o1.country, o2.country; -compute stats indi_result_country_collab; +drop table tmp purge; + +ANALYZE TABLE indi_result_country_collab COMPUTE STATISTICS; ---- Sprint 4 ---- -create table indi_pub_diamond stored as parquet as +create table if not exists indi_pub_diamond stored as parquet as select distinct pd.id, coalesce(in_diamond_journal, 0) as in_diamond_journal from publication_datasources pd left outer join ( @@ -212,21 +184,9 @@ from 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; -compute stats indi_pub_diamond; +ANALYZE TABLE indi_pub_diamond COMPUTE STATISTICS; ---create table indi_pub_hybrid stored as parquet as ---select distinct pd.id, coalesce(is_hybrid, 0) as is_hybrid ---from 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 --- 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=false and ps.journal_is_oa=false)) tmp --- on pd.id=tmp.id; --- ---compute stats indi_pub_hybrid; - -create table indi_pub_in_transformative stored as parquet as +create table if not exists indi_pub_in_transformative stored as parquet as select distinct pd.id, coalesce(is_transformative, 0) as is_transformative from publication pd left outer join ( @@ -236,9 +196,9 @@ from publication pd and ps.is_transformative_journal=true) tmp on pd.id=tmp.id; -compute stats indi_pub_in_transformative; +ANALYZE TABLE indi_pub_in_transformative COMPUTE STATISTICS; -create table indi_pub_closed_other_open stored as parquet as +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 left outer join (select ri.id, 1 as pub_closed_other_open from result_instance ri @@ -248,180 +208,16 @@ 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; -compute stats indi_pub_closed_other_open; +ANALYZE TABLE indi_pub_closed_other_open COMPUTE STATISTICS; ---- Sprint 5 ---- -create table indi_result_no_of_copies stored as parquet as +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; -compute stats indi_result_no_of_copies; +ANALYZE TABLE indi_result_no_of_copies COMPUTE STATISTICS; ---- Sprint 6 ---- ---create table 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 datasource WHERE issn_printed IS NOT NULL --- UNION --- 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_gold, 0) as is_gold ---FROM publication_datasources pd ---LEFT OUTER JOIN ( --- SELECT pd.id, 1 as is_gold FROM 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; - ---compute stats indi_pub_gold_oa; --- ---create table indi_datasets_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 datasource --- WHERE issn_printed IS NOT NULL --- UNION --- 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_gold, 0) as is_gold ---FROM dataset_datasources pd ---LEFT OUTER JOIN ( --- SELECT pd.id, 1 as is_gold FROM dataset_datasources pd --- JOIN issn on issn.id=pd.datasource --- JOIN gold_oa on issn.issn = gold_oa.issn) tmp ON pd.id=tmp.id; --- ---compute stats indi_datasets_gold_oa; - ---create table indi_software_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 datasource --- WHERE issn_printed IS NOT NULL --- UNION --- 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_gold, 0) as is_gold ---FROM software_datasources pd ---LEFT OUTER JOIN ( --- SELECT pd.id, 1 as is_gold FROM software_datasources pd --- JOIN issn on issn.id=pd.datasource --- JOIN gold_oa on issn.issn = gold_oa.issn) tmp ON pd.id=tmp.id; --- ---compute stats indi_software_gold_oa; - ---create table indi_org_findable stored as parquet as ---with 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 --- group by ro.organization), ---result_has_abstract as ( --- select ro.organization organization, count(distinct rp.id) no_result_with_abstract from result_organization ro --- join result rp on rp.id=ro.id where rp.abstract=true --- group by ro.organization), ---allresults as ( --- select organization, count(distinct id) no_allresults from result_organization --- group by organization), ---result_with_pid_share as ( --- select allresults.organization, result_with_pid.no_result_with_pid/allresults.no_allresults pid_share --- from allresults --- join result_with_pid on result_with_pid.organization=allresults.organization), ---result_with_abstract_share as ( --- select allresults.organization, result_has_abstract.no_result_with_abstract/allresults.no_allresults abstract_share --- from allresults --- join result_has_abstract on result_has_abstract.organization=allresults.organization) ---select allresults.organization, coalesce((pid_share+abstract_share)/2,pid_share) org_findable ---from allresults ---join result_with_pid_share on result_with_pid_share.organization=allresults.organization ---left outer join ( --- select organization, abstract_share from result_with_abstract_share) tmp on tmp.organization=allresults.organization; --- ---compute stats indi_org_findable; --- ---create table indi_org_openess stored as parquet as ---WITH datasets_oa as ( --- SELECT ro.organization, count(dg.id) no_oadatasets FROM indi_datasets_gold_oa dg --- join result_organization ro on dg.id=ro.id --- join dataset ds on dg.id=ds.id --- WHERE dg.is_gold=1 --- group by ro.organization), ---software_oa as ( --- SELECT ro.organization, count(dg.id) no_oasoftware FROM indi_software_gold_oa dg --- join result_organization ro on dg.id=ro.id --- join software ds on dg.id=ds.id --- WHERE dg.is_gold=1 --- group by ro.organization), ---pubs_oa as ( --- SELECT ro.organization, count(dg.id) no_oapubs FROM indi_pub_gold_oa dg --- join result_organization ro on dg.id=ro.id --- join publication ds on dg.id=ds.id --- where dg.is_gold=1 --- group by ro.organization), ---allpubs as ( --- SELECT ro.organization organization, count(ro.id) no_allpubs FROM result_organization ro --- join publication ps on ps.id=ro.id --- group by ro.organization), ---alldatasets as ( --- SELECT ro.organization organization, count(ro.id) no_alldatasets FROM result_organization ro --- join dataset ps on ps.id=ro.id --- group by ro.organization), ---allsoftware as ( --- SELECT ro.organization organization, count(ro.id) no_allsoftware FROM result_organization ro --- join software ps on ps.id=ro.id --- group by ro.organization), ---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), ---alldatasetssshare as ( --- select datasets_oa.organization, datasets_oa.no_oadatasets/alldatasets.no_alldatasets c --- from alldatasets --- join datasets_oa on alldatasets.organization=datasets_oa.organization), ---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) ---select allpubsshare.organization, coalesce((c+p+s)/3, p) org_openess ---FROM allpubsshare ---left outer join ( --- select organization,c from --- alldatasetssshare) tmp on tmp.organization=allpubsshare.organization ---left outer join ( --- select organization,s from allsoftwaresshare) tmp1 on tmp1.organization=allpubsshare.organization; --- ---compute stats indi_org_openess; --- -create table indi_pub_hybrid_oa_with_cc stored as parquet as +create table if not exists 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 @@ -436,7 +232,7 @@ create table indi_pub_hybrid_oa_with_cc stored as parquet as SELECT id, issn_printed as issn FROM datasource WHERE issn_printed IS NOT NULL - UNION + UNION ALL SELECT id,issn_online as issn FROM datasource WHERE issn_online IS NOT NULL ) as issn @@ -451,45 +247,44 @@ FROM publication_datasources pd JOIN indi_result_has_cc_licence cc on pd.id=cc.id where cc.has_cc_license=1) tmp on pd.id=tmp.id; -compute stats indi_pub_hybrid_oa_with_cc; +ANALYZE TABLE indi_pub_hybrid_oa_with_cc COMPUTE STATISTICS; -create table indi_pub_downloads stored as parquet as +create table if not exists 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 where downloads>0 GROUP BY result_id order by no_downloads desc; -compute stats indi_pub_downloads; +ANALYZE TABLE indi_pub_downloads COMPUTE STATISTICS; -create table indi_pub_downloads_datasource stored as parquet as +create table if not exists 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 where downloads>0 GROUP BY result_id, repository_id order by result_id; -compute stats indi_pub_downloads_datasource; +ANALYZE TABLE indi_pub_downloads_datasource COMPUTE STATISTICS; -create table 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 -GROUP BY result_id, `year` -order by `year` asc; +create table if not exists 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 +GROUP BY result_id, substring(us.`date`, 1,4); -compute stats indi_pub_downloads_year; +ANALYZE TABLE indi_pub_downloads_year COMPUTE STATISTICS; -create table indi_pub_downloads_datasource_year stored as parquet as +create table if not exists 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 publication on result_id=id where downloads>0 -GROUP BY result_id, repository_id, `year` -order by `year` asc, result_id; +GROUP BY result_id, repository_id, substring(us.`date`, 1,4); -compute stats indi_pub_downloads_datasource_year; +ANALYZE TABLE indi_pub_downloads_datasource_year COMPUTE STATISTICS; ---- Sprint 7 ---- -create table indi_pub_gold_oa stored as parquet as +create table if not exists indi_pub_gold_oa stored as parquet as WITH gold_oa AS ( SELECT issn_l, journal_is_in_doaj, @@ -518,7 +313,7 @@ create table indi_pub_gold_oa stored as parquet as datasource WHERE issn_printed IS NOT NULL - UNION + UNION ALL SELECT id, issn_online as issn @@ -538,9 +333,9 @@ FROM JOIN gold_oa on issn.issn = gold_oa.issn) tmp on pd.id=tmp.id; -compute stats indi_pub_gold_oa; +ANALYZE TABLE indi_pub_gold_oa COMPUTE STATISTICS; -create table indi_pub_hybrid stored as parquet as +create table if not exists indi_pub_hybrid stored as parquet as WITH gold_oa AS ( SELECT issn_l, journal_is_in_doaj, @@ -571,7 +366,7 @@ create table indi_pub_hybrid stored as parquet as datasource WHERE issn_printed IS NOT NULL - UNION + UNION ALL SELECT id, issn_online as issn @@ -591,15 +386,15 @@ from publication_datasources pd where (gold_oa.journal_is_in_doaj=false or gold_oa.journal_is_oa=false))tmp on pd.id=tmp.id; -compute stats indi_pub_hybrid; +ANALYZE TABLE indi_pub_hybrid COMPUTE STATISTICS; -create table indi_org_fairness stored as parquet as +create table if not exists 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 --join result_pids rp on r.id=rp.id - where (title is not null) and (publisher is not null) and (abstract is true) and (year is not null) and (authors>0) and cast(year as int)>2003 + 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 @@ -611,16 +406,16 @@ select allresults.organization, result_fair.no_result_fair/allresults.no_allresu from allresults join result_fair on result_fair.organization=allresults.organization; -compute stats indi_org_fairness; +ANALYZE TABLE indi_org_fairness COMPUTE STATISTICS; -create table indi_org_fairness_pub_pr stored as parquet as +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 - where (title is not null) and (publisher is not null) and (abstract is true) and (year is not null) + 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 @@ -632,150 +427,180 @@ select allresults.organization, result_fair.no_result_fair/allresults.no_allresu from allresults join result_fair on result_fair.organization=allresults.organization; -compute stats indi_org_fairness_pub_pr; +ANALYZE TABLE indi_org_fairness_pub_pr COMPUTE STATISTICS; -create table indi_org_fairness_pub_year stored as parquet as - with result_fair as - (select year, ro.organization organization, count(distinct ro.id) no_result_fair from result_organization ro - join publication p on p.id=ro.id - where (title is not null) and (publisher is not null) and (abstract is true) and (year is not null) and (authors>0) and cast(year as int)>2003 - group by ro.organization, year), - allresults as (select year, organization, count(distinct ro.id) no_allresults from result_organization ro - join publication p on p.id=ro.id +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 + 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 where cast(year as int)>2003 - group by organization, year) + group by organization, year; + +create table if not exists 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; -compute stats indi_org_fairness_pub_year; +DROP table result_fair purge; +DROP table allresults purge; -create table indi_org_fairness_pub 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 - where (title is not null) and (publisher is not null) and (abstract is true) and (year is not null) - and (authors>0) and cast(year as int)>2003 - 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 - where cast(year as int)>2003 - group by organization) +ANALYZE TABLE indi_org_fairness_pub_year COMPUTE STATISTICS; + +CREATE TEMPORARY TABLE 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 + 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 + where cast(year as int)>2003 + group by 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; +from allresults join result_fair on result_fair.organization=allresults.organization; -compute stats indi_org_fairness_pub; +DROP table result_fair purge; +DROP table allresults purge; -create table indi_org_fairness_year stored as parquet as - with result_fair as - (select year, ro.organization organization, count(distinct ro.id) no_result_fair from result_organization ro +ANALYZE TABLE 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 - where (title is not null) and (publisher is not null) and (abstract is true) and (year is not null) and (authors>0) and cast(year as int)>2003 - group by ro.organization, year), - allresults as (select year, organization, count(distinct ro.id) no_allresults from result_organization ro + 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 where cast(year as int)>2003 - group by organization, year) ---return results_fair/all_results -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; + group by organization, year; -compute stats indi_org_fairness_year; +create table if not exists 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; -create table indi_org_findable_year stored as parquet as ---return results with PIDs group by organization,year - with result_with_pid as - (select year, ro.organization organization, count(distinct rp.id) no_result_with_pid from result_organization ro +DROP table result_fair purge; +DROP table allresults purge; + +ANALYZE TABLE 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 where cast(year as int) >2003 - group by ro.organization, year), ---return all results group by organization,year - allresults as (select year, organization, count(distinct ro.id) no_allresults from result_organization ro + 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 where cast(year as int) >2003 - group by organization, year) ---return results_with_pid/all_results + group by organization, year; + +create table if not exists 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; -compute stats indi_org_findable_year; +DROP table result_with_pid purge; +DROP table allresults purge; -create table indi_org_findable stored as parquet as ---return results with PIDs group by organization - with result_with_pid as - (select ro.organization organization, count(distinct rp.id) no_result_with_pid from result_organization ro +ANALYZE TABLE 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 where 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 + 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 where cast(year as int) >2003 - group by organization) ---return results_with_pid/all_results + group by organization; + +create table if not exists 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; -compute stats indi_org_findable; +DROP table result_with_pid purge; +DROP table allresults purge; -create table indi_org_openess stored as parquet as - WITH pubs_oa as ( - SELECT ro.organization, count(distinct r.id) no_oapubs FROM publication r +ANALYZE TABLE 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 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), - datasets_oa as ( - SELECT ro.organization, count(distinct r.id) no_oadatasets FROM dataset r + 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 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), - software_oa as ( - SELECT ro.organization, count(distinct r.id) no_oasoftware FROM software r + 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 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), - allpubs as ( - SELECT ro.organization organization, count(ro.id) no_allpubs FROM result_organization ro + 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 where cast(ps.year as int)>2003 - group by ro.organization), - alldatasets as ( - SELECT ro.organization organization, count(ro.id) no_alldatasets FROM result_organization ro + 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 where cast(ps.year as int)>2003 - group by ro.organization), - allsoftware as ( - SELECT ro.organization organization, count(ro.id) no_allsoftware FROM result_organization ro + 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 where cast(ps.year as int)>2003 - group by ro.organization), - 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), - alldatasetssshare as ( - select datasets_oa.organization, datasets_oa.no_oadatasets/alldatasets.no_alldatasets d + 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 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), - allsoftwaresshare as ( - select software_oa.organization, software_oa.no_oasoftware/allsoftware.no_allsoftware s + join datasets_oa on alldatasets.organization=datasets_oa.organization; + +CREATE TEMPORARY TABLE 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) + join software_oa on allsoftware.organization=software_oa.organization; + +create table if not exists indi_org_openess stored as parquet as select allpubsshare.organization, - (p+isnull(s,0)+isnull(d,0))/(1+(case when s is null then 0 else 1 end) + (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 left outer join (select organization,d from @@ -785,55 +610,75 @@ select allpubsshare.organization, allsoftwaresshare) tmp2 on tmp2.organization=allpubsshare.organization; -compute stats indi_org_openess; +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; -create table indi_org_openess_year stored as parquet as - WITH pubs_oa as ( - SELECT r.year, ro.organization, count(distinct r.id) no_oapubs FROM publication r +ANALYZE TABLE 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 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), - datasets_oa as ( - SELECT r.year,ro.organization, count(distinct r.id) no_oadatasets FROM dataset r + 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 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), - software_oa as ( - SELECT r.year,ro.organization, count(distinct r.id) no_oasoftware FROM software r + 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 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), - allpubs as ( - SELECT p.year,ro.organization organization, count(ro.id) no_allpubs FROM result_organization ro + 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 - group by ro.organization, p.year), - alldatasets as ( - SELECT d.year, ro.organization organization, count(ro.id) no_alldatasets FROM result_organization ro + 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 - group by ro.organization, d.year), - allsoftware as ( - SELECT s.year,ro.organization organization, count(ro.id) no_allsoftware FROM result_organization ro + 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 - group by ro.organization, s.year), - 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)), - alldatasetssshare as ( - select alldatasets.year, datasets_oa.organization, datasets_oa.no_oadatasets/alldatasets.no_alldatasets d + 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 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)), - allsoftwaresshare as ( - select allsoftware.year, software_oa.organization, software_oa.no_oasoftware/allsoftware.no_allsoftware s + join 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 +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)) + join 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 select allpubsshare.year, allpubsshare.organization, - (p+isnull(s,0)+isnull(d,0))/(1+(case when s is null then 0 else 1 end) + (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 left outer join (select year, organization,d from @@ -843,9 +688,19 @@ select allpubsshare.year, allpubsshare.organization, allsoftwaresshare) tmp2 on tmp2.organization=allpubsshare.organization and tmp2.year=allpubsshare.year; -compute stats indi_org_openess_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; -create table indi_pub_has_preprint stored as parquet as +ANALYZE TABLE indi_org_openess_year COMPUTE STATISTICS; + +create table if not exists indi_pub_has_preprint stored as parquet as select distinct p.id, coalesce(has_preprint, 0) as has_preprint from publication_classifications p left outer join ( @@ -854,9 +709,9 @@ from publication_classifications p where p.type='Preprint') tmp on p.id= tmp.id; -compute stats indi_pub_has_preprint; +ANALYZE TABLE indi_pub_has_preprint COMPUTE STATISTICS; -create table indi_pub_in_subscribed stored as parquet as +create table if not exists indi_pub_in_subscribed stored as parquet as select distinct p.id, coalesce(is_subscription, 0) as is_subscription from publication p left outer join( @@ -867,9 +722,9 @@ from publication p where g.is_gold=0 and h.is_hybrid=0 and t.is_transformative=0) tmp on p.id=tmp.id; -compute stats indi_pub_in_subscribed; +ANALYZE TABLE indi_pub_in_subscribed COMPUTE STATISTICS; -create table indi_result_with_pid as +create table if not exists indi_result_with_pid as select distinct p.id, coalesce(result_with_pid, 0) as result_with_pid from result p left outer join ( @@ -877,4 +732,4 @@ from result p from result_pids p) tmp on p.id= tmp.id; -compute stats indi_result_with_pid; \ No newline at end of file +ANALYZE TABLE indi_result_with_pid COMPUTE STATISTICS; 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 98dca7129..195836480 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 @@ -10,6 +10,11 @@ create view if not exists TARGET.creation_date as select * from SOURCE.creation_ 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 ( @@ -54,84 +59,87 @@ create table TARGET.result stored as parquet as '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____::db7686f30f22cbe73a4fde872ce812a6', -- University of Milan + 'openorgs____::b8b8ca674452579f3f593d9f5e557483' -- University College Cork ) )) foo; -compute stats TARGET.result; + +ANALYZE TABLE TARGET.result COMPUTE STATISTICS; 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); -compute stats TARGET.result_citations; +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); -compute stats TARGET.result_references_oc; +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); -compute stats TARGET.result_citations_oc; +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); -compute stats TARGET.result_classifications; +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); -compute stats TARGET.result_apc; +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); -compute stats TARGET.result_concepts; +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); -compute stats TARGET.result_datasources; +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); -compute stats TARGET.result_fundercount; +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); -compute stats TARGET.result_gold; +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); -compute stats TARGET.result_greenoa; +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); -compute stats TARGET.result_languages; +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); -compute stats TARGET.result_licenses; +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); -compute stats TARGET.result_oids; +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); -compute stats TARGET.result_organization; +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); -compute stats TARGET.result_peerreviewed; +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); -compute stats TARGET.result_pids; +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); -compute stats TARGET.result_projectcount; +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); -compute stats TARGET.result_projects; +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); -compute stats TARGET.result_refereed; +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); -compute stats TARGET.result_sources; +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); -compute stats TARGET.result_topics; +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); -compute stats TARGET.result_fos; +ANALYZE TABLE TARGET.result_fos 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; -compute stats TARGET.result_result; +ANALYZE TABLE TARGET.result_result COMPUTE STATISTICS; -- datasources create view if not exists TARGET.datasource as select * from SOURCE.datasource; @@ -140,7 +148,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; -compute stats TARGET.datasource_results; +ANALYZE TABLE TARGET.datasource_results COMPUTE STATISTICS; -- organizations create view if not exists TARGET.organization as select * from SOURCE.organization; @@ -157,28 +165,28 @@ create view if not exists TARGET.project_resultcount as select * from SOURCE.pro create view if not exists TARGET.project_classification as select * from SOURCE.project_classification; create table TARGET.project_results stored as parquet as select id as result, project as id from TARGET.result_projects; -compute stats TARGET.project_results; +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); -compute stats TARGET.indi_pub_green_oa; +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); -compute stats TARGET.indi_pub_grey_lit; +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); -compute stats TARGET.indi_pub_doi_from_crossref; +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); -compute stats TARGET.indi_result_has_cc_licence; +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); -compute stats TARGET.indi_result_has_cc_licence_url; +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); -compute stats TARGET.indi_pub_has_abstract; +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); -compute stats TARGET.indi_result_with_orcid; +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); -compute stats TARGET.indi_funded_result_with_fundref; +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; @@ -187,30 +195,30 @@ 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); -compute stats TARGET.indi_pub_diamond; +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); -compute stats TARGET.indi_pub_in_transformative; +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); -compute stats TARGET.indi_pub_closed_other_open; +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); -compute stats TARGET.indi_result_no_of_copies; +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); -compute stats TARGET.indi_pub_hybrid_oa_with_cc; +ANALYZE TABLE TARGET.indi_pub_hybrid_oa_with_cc 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); -compute stats TARGET.indi_pub_downloads; +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); -compute stats TARGET.indi_pub_downloads_datasource; +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); -compute stats TARGET.indi_pub_downloads_year; +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); -compute stats TARGET.indi_pub_downloads_datasource_year; +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); -compute stats TARGET.indi_pub_gold_oa; +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); -compute stats TARGET.indi_pub_hybrid; +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; @@ -221,11 +229,12 @@ 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_datasets_gold_oa stored as parquet as select * from SOURCE.indi_datasets_gold_oa orig where exists (select 1 from TARGET.result r where r.id=orig.id); --compute stats TARGET.indi_datasets_gold_oa; --create table TARGET.indi_software_gold_oa stored as parquet as select * from SOURCE.indi_software_gold_oa orig where exists (select 1 from TARGET.result r where r.id=orig.id); --compute stats TARGET.indi_software_gold_oa; - 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 e24370e7d..2d7d572b3 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,6 +8,8 @@ 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 count(distinct r.id) as total, @@ -37,6 +39,8 @@ 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 count(distinct r.id) as total, @@ -66,6 +70,8 @@ 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 count(distinct r.id) as total, @@ -95,6 +101,8 @@ 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 count(distinct r.id) as total, @@ -126,6 +134,8 @@ 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, @@ -157,6 +167,8 @@ 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, @@ -186,6 +198,8 @@ 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, @@ -215,6 +229,8 @@ 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, @@ -246,6 +262,8 @@ 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, @@ -277,6 +295,8 @@ 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, @@ -308,6 +328,8 @@ 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, @@ -339,6 +361,8 @@ 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 count(distinct r.id) as total, @@ -370,6 +394,8 @@ 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, @@ -401,6 +427,8 @@ 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, @@ -432,6 +460,8 @@ 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, @@ -463,6 +493,8 @@ 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, @@ -494,6 +526,8 @@ 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, @@ -527,6 +561,8 @@ 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, @@ -558,4 +594,6 @@ from ${stats_db_name}.result r left outer join ${stats_db_name}.result_fundercount rfc on rfc.id=r.id 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; \ No newline at end of file + 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/step8.sql b/dhp-workflows/dhp-stats-update/src/main/resources/eu/dnetlib/dhp/oa/graph/stats/oozie_app/scripts/step8.sql index 131f96df9..248716b36 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 @@ -96,6 +96,6 @@ 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 where d.datainfo.deletedbyinference = false and d.datainfo.invisible=false; -CREATE OR REPLACE VIEW ${stats_db_name}.datasource_results STORED AS PARQUET AS +CREATE OR REPLACE VIEW ${stats_db_name}.datasource_results AS SELECT datasource AS id, id AS result FROM ${stats_db_name}.result_datasources; 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 81da11903..9976b8455 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 @@ -74,7 +74,7 @@ - + Action failed, error message[${wf:errorMessage(wf:lastErrorNode())}] @@ -302,22 +302,22 @@ stats_db_name=${stats_db_name} openaire_db_name=${openaire_db_name} - - - - - - - ${jobTracker} - ${nameNode} - finalizedb.sh - ${stats_db_name} - ${stats_db_shadow_name} - finalizedb.sh - + + + + + + + + + + + + + @@ -355,67 +355,67 @@ stats_db_name=${stats_db_name} observatory_db_name=${observatory_db_name} - - - - - - - ${jobTracker} - ${nameNode} - observatory-post.sh - ${stats_db_name} - ${observatory_db_name} - ${observatory_db_shadow_name} - observatory-post.sh - - - - - - - - ${jobTracker} - ${nameNode} - copyDataToImpalaCluster.sh - ${external_stats_db_name} - ${stats_db_name} - ${monitor_db_name} - ${observatory_db_name} - copyDataToImpalaCluster.sh - - - - - - - - ${jobTracker} - ${nameNode} - finalizeImpalaCluster.sh - ${stats_db_name} - ${stats_db_shadow_name} - ${monitor_db_name} - ${monitor_db_shadow_name} - ${observatory_db_name} - ${observatory_db_shadow_name} - finalizeImpalaCluster.sh - - - - - - - - ${jobTracker} - ${nameNode} - updateCache.sh - ${stats_tool_api_url} - updateCache.sh - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + From becb242c1797b3ba40e5e92b4dd263248d59b14d Mon Sep 17 00:00:00 2001 From: dimitrispie Date: Wed, 4 Jan 2023 16:50:29 +0200 Subject: [PATCH 279/535] Monitor DB only Workflow --- dhp-workflows/dhp-monitor-update/pom.xml | 32 +++ .../monitor/oozie_app/config-default.xml | 34 +++ .../graph/monitor/oozie_app/monitor-post.sh | 21 ++ .../dhp/oa/graph/monitor/oozie_app/monitor.sh | 24 ++ .../oozie_app/scripts/createMonitorDB.sql | 241 ++++++++++++++++++ .../oa/graph/monitor/oozie_app/updateCache.sh | 4 + .../oa/graph/monitor/oozie_app/workflow.xml | 105 ++++++++ 7 files changed, 461 insertions(+) create mode 100644 dhp-workflows/dhp-monitor-update/pom.xml create mode 100644 dhp-workflows/dhp-monitor-update/src/main/resources/eu/dnetlib/dhp/oa/graph/monitor/oozie_app/config-default.xml create mode 100644 dhp-workflows/dhp-monitor-update/src/main/resources/eu/dnetlib/dhp/oa/graph/monitor/oozie_app/monitor-post.sh create mode 100644 dhp-workflows/dhp-monitor-update/src/main/resources/eu/dnetlib/dhp/oa/graph/monitor/oozie_app/monitor.sh create mode 100644 dhp-workflows/dhp-monitor-update/src/main/resources/eu/dnetlib/dhp/oa/graph/monitor/oozie_app/scripts/createMonitorDB.sql create mode 100644 dhp-workflows/dhp-monitor-update/src/main/resources/eu/dnetlib/dhp/oa/graph/monitor/oozie_app/updateCache.sh create mode 100644 dhp-workflows/dhp-monitor-update/src/main/resources/eu/dnetlib/dhp/oa/graph/monitor/oozie_app/workflow.xml diff --git a/dhp-workflows/dhp-monitor-update/pom.xml b/dhp-workflows/dhp-monitor-update/pom.xml new file mode 100644 index 000000000..ca0bb9837 --- /dev/null +++ b/dhp-workflows/dhp-monitor-update/pom.xml @@ -0,0 +1,32 @@ + + + + dhp-workflows + eu.dnetlib.dhp + 1.2.4-SNAPSHOT + + 4.0.0 + dhp-monitor-update + + + org.apache.spark + spark-core_2.11 + + + org.apache.spark + spark-sql_2.11 + + + + + + pl.project13.maven + git-commit-id-plugin + 2.1.11 + + false + + + + + diff --git a/dhp-workflows/dhp-monitor-update/src/main/resources/eu/dnetlib/dhp/oa/graph/monitor/oozie_app/config-default.xml b/dhp-workflows/dhp-monitor-update/src/main/resources/eu/dnetlib/dhp/oa/graph/monitor/oozie_app/config-default.xml new file mode 100644 index 000000000..63fc84d75 --- /dev/null +++ b/dhp-workflows/dhp-monitor-update/src/main/resources/eu/dnetlib/dhp/oa/graph/monitor/oozie_app/config-default.xml @@ -0,0 +1,34 @@ + + + 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=19166291558;spark.yarn.executor.memoryOverhead=3225;spark.driver.memory=11596411699;spark.yarn.driver.memoryOverhead=1228 + + + oozie.wf.workflow.notification.url + {serviceUrl}/v1/oozieNotification/jobUpdate?jobId=$jobId%26status=$status + + + stats_tool_api_url + ${stats_tool_api_url} + + \ No newline at end of file diff --git a/dhp-workflows/dhp-monitor-update/src/main/resources/eu/dnetlib/dhp/oa/graph/monitor/oozie_app/monitor-post.sh b/dhp-workflows/dhp-monitor-update/src/main/resources/eu/dnetlib/dhp/oa/graph/monitor/oozie_app/monitor-post.sh new file mode 100644 index 000000000..b8c71681a --- /dev/null +++ b/dhp-workflows/dhp-monitor-update/src/main/resources/eu/dnetlib/dhp/oa/graph/monitor/oozie_app/monitor-post.sh @@ -0,0 +1,21 @@ +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 + +impala-shell -q "invalidate metadata;" +impala-shell -d ${TARGET} -q "show tables" --delimited | sed "s/\(.*\)/compute stats ${TARGET}.\1;/" | impala-shell -f - +echo "Impala shell finished" + +echo "Updating shadow monitor database" +impala-shell -q "create database if not exists ${SHADOW}" +impala-shell -d ${SHADOW} -q "show tables" --delimited | sed "s/^/drop view if exists ${SHADOW}./" | sed "s/$/;/" | impala-shell -f - +impala-shell -d ${TARGET} -q "show tables" --delimited | sed "s/\(.*\)/create view ${SHADOW}.\1 as select * from ${TARGET}.\1;/" | impala-shell -f - +echo "Shadow db ready!" \ No newline at end of file diff --git a/dhp-workflows/dhp-monitor-update/src/main/resources/eu/dnetlib/dhp/oa/graph/monitor/oozie_app/monitor.sh b/dhp-workflows/dhp-monitor-update/src/main/resources/eu/dnetlib/dhp/oa/graph/monitor/oozie_app/monitor.sh new file mode 100644 index 000000000..f39bf4893 --- /dev/null +++ b/dhp-workflows/dhp-monitor-update/src/main/resources/eu/dnetlib/dhp/oa/graph/monitor/oozie_app/monitor.sh @@ -0,0 +1,24 @@ +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 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 " $SCRIPT_PATH +hdfs dfs -copyToLocal $SCRIPT_PATH + +echo "Creating monitor database" +#cat step20-createMonitorDB.sql | sed s/SOURCE/$1/g | sed s/TARGET/$2/g1 > foo +cat createMonitorDB.sql | sed "s/TARGET/${TARGET}/g" | sed "s/SOURCE/${SOURCE}/g" > foo +hive $HIVE_OPTS -f foo +echo "Hive shell finished" \ No newline at end of file diff --git a/dhp-workflows/dhp-monitor-update/src/main/resources/eu/dnetlib/dhp/oa/graph/monitor/oozie_app/scripts/createMonitorDB.sql b/dhp-workflows/dhp-monitor-update/src/main/resources/eu/dnetlib/dhp/oa/graph/monitor/oozie_app/scripts/createMonitorDB.sql new file mode 100644 index 000000000..e9e460cb0 --- /dev/null +++ b/dhp-workflows/dhp-monitor-update/src/main/resources/eu/dnetlib/dhp/oa/graph/monitor/oozie_app/scripts/createMonitorDB.sql @@ -0,0 +1,241 @@ +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 + ) )) foo; + +ANALYZE TABLE TARGET.result COMPUTE STATISTICS; + +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 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 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_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_datasets_gold_oa stored as parquet as select * from SOURCE.indi_datasets_gold_oa orig where exists (select 1 from TARGET.result r where r.id=orig.id); +--compute stats TARGET.indi_datasets_gold_oa; +--create table TARGET.indi_software_gold_oa stored as parquet as select * from SOURCE.indi_software_gold_oa orig where exists (select 1 from TARGET.result r where r.id=orig.id); +--compute stats TARGET.indi_software_gold_oa; + diff --git a/dhp-workflows/dhp-monitor-update/src/main/resources/eu/dnetlib/dhp/oa/graph/monitor/oozie_app/updateCache.sh b/dhp-workflows/dhp-monitor-update/src/main/resources/eu/dnetlib/dhp/oa/graph/monitor/oozie_app/updateCache.sh new file mode 100644 index 000000000..03aa535e1 --- /dev/null +++ b/dhp-workflows/dhp-monitor-update/src/main/resources/eu/dnetlib/dhp/oa/graph/monitor/oozie_app/updateCache.sh @@ -0,0 +1,4 @@ +#!/usr/bin/env bash + +curl --request GET $1/cache/updateCache +sleep 6h \ No newline at end of file diff --git a/dhp-workflows/dhp-monitor-update/src/main/resources/eu/dnetlib/dhp/oa/graph/monitor/oozie_app/workflow.xml b/dhp-workflows/dhp-monitor-update/src/main/resources/eu/dnetlib/dhp/oa/graph/monitor/oozie_app/workflow.xml new file mode 100644 index 000000000..2bcff70ac --- /dev/null +++ b/dhp-workflows/dhp-monitor-update/src/main/resources/eu/dnetlib/dhp/oa/graph/monitor/oozie_app/workflow.xml @@ -0,0 +1,105 @@ + + + + stats_db_name + the target stats database name + + + stats_db_shadow_name + the name of the shadow schema + + + monitor_db_name + the target monitor db name + + + monitor_db_shadow_name + the name of the shadow monitor db + + + stats_tool_api_url + The url of the API of the stats tool. Is used to trigger the cache update. + + + 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. + + + context_api_url + the base url of the context api (https://services.openaire.eu/openaire) + + + + + ${jobTracker} + ${nameNode} + + + hive.metastore.uris + ${hive_metastore_uris} + + + hive.txn.timeout + ${hive_timeout} + + + + + + + + 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/createMonitorDB.sql + monitor.sh + + + + + + + + + ${jobTracker} + ${nameNode} + monitor-post.sh + ${stats_db_name} + ${monitor_db_name} + ${monitor_db_shadow_name} + monitor-post.sh + + + + + + + + ${jobTracker} + ${nameNode} + updateCache.sh + ${stats_tool_api_url} + updateCache.sh + + + + + + + \ No newline at end of file From 7b7520850bca9d9707cfb8e04331292d0fcbeb86 Mon Sep 17 00:00:00 2001 From: "michele.artini" Date: Wed, 11 Jan 2023 08:35:53 +0100 Subject: [PATCH 280/535] fixed an invalid char --- .../test/resources/eu/dnetlib/dhp/transform/cnr_explora_tr.xslt | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/dhp-workflows/dhp-aggregation/src/test/resources/eu/dnetlib/dhp/transform/cnr_explora_tr.xslt b/dhp-workflows/dhp-aggregation/src/test/resources/eu/dnetlib/dhp/transform/cnr_explora_tr.xslt index 78b167fde..33770ce47 100644 --- a/dhp-workflows/dhp-aggregation/src/test/resources/eu/dnetlib/dhp/transform/cnr_explora_tr.xslt +++ b/dhp-workflows/dhp-aggregation/src/test/resources/eu/dnetlib/dhp/transform/cnr_explora_tr.xslt @@ -130,7 +130,7 @@ - + From 91b845f611e109b41a7941892ecac2b13f682ca9 Mon Sep 17 00:00:00 2001 From: "michele.artini" Date: Wed, 11 Jan 2023 09:37:34 +0100 Subject: [PATCH 281/535] Considering instance pids and alteternative identifiers --- .../dhp/broker/oa/util/ConversionUtils.java | 117 ++++++++---------- .../broker/oa/util/ConversionUtilsTest.java | 92 ++++++++++++++ 2 files changed, 141 insertions(+), 68 deletions(-) create mode 100644 dhp-workflows/dhp-broker-events/src/test/java/eu/dnetlib/dhp/broker/oa/util/ConversionUtilsTest.java diff --git a/dhp-workflows/dhp-broker-events/src/main/java/eu/dnetlib/dhp/broker/oa/util/ConversionUtils.java b/dhp-workflows/dhp-broker-events/src/main/java/eu/dnetlib/dhp/broker/oa/util/ConversionUtils.java index 5e7adec79..1b28c4064 100644 --- a/dhp-workflows/dhp-broker-events/src/main/java/eu/dnetlib/dhp/broker/oa/util/ConversionUtils.java +++ b/dhp-workflows/dhp-broker-events/src/main/java/eu/dnetlib/dhp/broker/oa/util/ConversionUtils.java @@ -2,7 +2,10 @@ package eu.dnetlib.dhp.broker.oa.util; import java.util.ArrayList; +import java.util.Collection; +import java.util.HashMap; import java.util.List; +import java.util.Map; import java.util.Objects; import java.util.function.Function; import java.util.stream.Collectors; @@ -26,19 +29,29 @@ import eu.dnetlib.broker.objects.OaBrokerRelatedPublication; import eu.dnetlib.broker.objects.OaBrokerRelatedSoftware; import eu.dnetlib.broker.objects.OaBrokerTypedValue; import eu.dnetlib.dhp.schema.common.ModelConstants; -import eu.dnetlib.dhp.schema.oaf.*; +import eu.dnetlib.dhp.schema.oaf.Author; +import eu.dnetlib.dhp.schema.oaf.Dataset; +import eu.dnetlib.dhp.schema.oaf.Datasource; +import eu.dnetlib.dhp.schema.oaf.ExternalReference; +import eu.dnetlib.dhp.schema.oaf.Field; +import eu.dnetlib.dhp.schema.oaf.Instance; +import eu.dnetlib.dhp.schema.oaf.Journal; +import eu.dnetlib.dhp.schema.oaf.KeyValue; +import eu.dnetlib.dhp.schema.oaf.Project; +import eu.dnetlib.dhp.schema.oaf.Publication; +import eu.dnetlib.dhp.schema.oaf.Qualifier; +import eu.dnetlib.dhp.schema.oaf.Result; +import eu.dnetlib.dhp.schema.oaf.Software; +import eu.dnetlib.dhp.schema.oaf.StructuredProperty; public class ConversionUtils { private static final Logger log = LoggerFactory.getLogger(ConversionUtils.class); - private ConversionUtils() { - } + private ConversionUtils() {} public static List oafInstanceToBrokerInstances(final Instance i) { - if (i == null) { - return new ArrayList<>(); - } + if (i == null) { return new ArrayList<>(); } return mappedList(i.getUrl(), url -> { final OaBrokerInstance res = new OaBrokerInstance(); @@ -58,35 +71,27 @@ public class ConversionUtils { return sp != null ? new OaBrokerTypedValue(classId(sp.getQualifier()), sp.getValue()) : null; } - public static OaBrokerTypedValue oafSubjectToBrokerTypedValue(final Subject sp) { - return sp != null ? new OaBrokerTypedValue(classId(sp.getQualifier()), sp.getValue()) : null; - } - public static OaBrokerRelatedDataset oafDatasetToBrokerDataset(final Dataset d) { - if (d == null) { - return null; - } + if (d == null) { return null; } final OaBrokerRelatedDataset res = new OaBrokerRelatedDataset(); res.setOpenaireId(cleanOpenaireId(d.getId())); res.setOriginalId(first(d.getOriginalId())); res.setTitle(structPropValue(d.getTitle())); - res.setPids(mappedList(d.getPid(), ConversionUtils::oafPidToBrokerPid)); + res.setPids(allResultPids(d)); res.setInstances(flatMappedList(d.getInstance(), ConversionUtils::oafInstanceToBrokerInstances)); res.setCollectedFrom(mappedFirst(d.getCollectedfrom(), KeyValue::getValue)); return res; } public static OaBrokerRelatedPublication oafPublicationToBrokerPublication(final Publication p) { - if (p == null) { - return null; - } + if (p == null) { return null; } final OaBrokerRelatedPublication res = new OaBrokerRelatedPublication(); res.setOpenaireId(cleanOpenaireId(p.getId())); res.setOriginalId(first(p.getOriginalId())); res.setTitle(structPropValue(p.getTitle())); - res.setPids(mappedList(p.getPid(), ConversionUtils::oafPidToBrokerPid)); + res.setPids(allResultPids(p)); res.setInstances(flatMappedList(p.getInstance(), ConversionUtils::oafInstanceToBrokerInstances)); res.setCollectedFrom(mappedFirst(p.getCollectedfrom(), KeyValue::getValue)); @@ -94,9 +99,7 @@ public class ConversionUtils { } public static OaBrokerMainEntity oafResultToBrokerResult(final Result result) { - if (result == null) { - return null; - } + if (result == null) { return null; } final OaBrokerMainEntity res = new OaBrokerMainEntity(); @@ -106,16 +109,15 @@ public class ConversionUtils { res.setTitles(structPropList(result.getTitle())); res.setAbstracts(fieldList(result.getDescription())); res.setLanguage(classId(result.getLanguage())); - res.setSubjects(subjectList(result.getSubject())); + res.setSubjects(structPropTypedList(result.getSubject())); res.setCreators(mappedList(result.getAuthor(), ConversionUtils::oafAuthorToBrokerAuthor)); res.setPublicationdate(fieldValue(result.getDateofacceptance())); res.setPublisher(fieldValue(result.getPublisher())); res.setEmbargoenddate(fieldValue(result.getEmbargoenddate())); res.setContributor(fieldList(result.getContributor())); res - .setJournal( - result instanceof Publication ? oafJournalToBrokerJournal(((Publication) result).getJournal()) : null); - res.setPids(mappedList(result.getPid(), ConversionUtils::oafPidToBrokerPid)); + .setJournal(result instanceof Publication ? oafJournalToBrokerJournal(((Publication) result).getJournal()) : null); + res.setPids(allResultPids(result)); res.setInstances(flatMappedList(result.getInstance(), ConversionUtils::oafInstanceToBrokerInstances)); res .setExternalReferences(mappedList(result.getExternalReference(), ConversionUtils::oafExtRefToBrokerExtRef)); @@ -123,14 +125,23 @@ public class ConversionUtils { return res; } + protected static List allResultPids(final Result result) { + final Map map = new HashMap<>(); + result.getPid().forEach(sp -> map.put(sp.getValue(), sp)); + result.getInstance().forEach(i -> { + i.getPid().forEach(sp -> map.put(sp.getValue(), sp)); + i.getAlternateIdentifier().forEach(sp -> map.put(sp.getValue(), sp)); + }); + final List pids = mappedList(map.values(), ConversionUtils::oafPidToBrokerPid); + return pids; + } + public static String cleanOpenaireId(final String id) { return id.contains("|") ? StringUtils.substringAfter(id, "|") : id; } private static OaBrokerAuthor oafAuthorToBrokerAuthor(final Author author) { - if (author == null) { - return null; - } + if (author == null) { return null; } final String pids = author.getPid() != null ? author .getPid() @@ -154,9 +165,7 @@ public class ConversionUtils { } private static OaBrokerJournal oafJournalToBrokerJournal(final Journal journal) { - if (journal == null) { - return null; - } + if (journal == null) { return null; } final OaBrokerJournal res = new OaBrokerJournal(); res.setName(journal.getName()); @@ -168,9 +177,7 @@ public class ConversionUtils { } private static OaBrokerExternalReference oafExtRefToBrokerExtRef(final ExternalReference ref) { - if (ref == null) { - return null; - } + if (ref == null) { return null; } final OaBrokerExternalReference res = new OaBrokerExternalReference(); res.setRefidentifier(ref.getRefidentifier()); @@ -181,9 +188,7 @@ public class ConversionUtils { } public static OaBrokerProject oafProjectToBrokerProject(final Project p) { - if (p == null) { - return null; - } + if (p == null) { return null; } final OaBrokerProject res = new OaBrokerProject(); res.setOpenaireId(cleanOpenaireId(p.getId())); @@ -207,9 +212,7 @@ public class ConversionUtils { } public static OaBrokerRelatedSoftware oafSoftwareToBrokerSoftware(final Software sw) { - if (sw == null) { - return null; - } + if (sw == null) { return null; } final OaBrokerRelatedSoftware res = new OaBrokerRelatedSoftware(); res.setOpenaireId(cleanOpenaireId(sw.getId())); @@ -222,9 +225,7 @@ public class ConversionUtils { } public static OaBrokerRelatedDatasource oafDatasourceToBrokerDatasource(final Datasource ds) { - if (ds == null) { - return null; - } + if (ds == null) { return null; } final OaBrokerRelatedDatasource res = new OaBrokerRelatedDatasource(); res.setName(StringUtils.defaultIfBlank(fieldValue(ds.getOfficialname()), fieldValue(ds.getEnglishname()))); @@ -284,9 +285,7 @@ public class ConversionUtils { } private static List structPropTypedList(final List list) { - if (list == null) { - return new ArrayList<>(); - } + if (list == null) { return new ArrayList<>(); } return list .stream() @@ -295,22 +294,8 @@ public class ConversionUtils { .collect(Collectors.toList()); } - private static List subjectList(final List list) { - if (list == null) { - return new ArrayList<>(); - } - - return list - .stream() - .map(ConversionUtils::oafSubjectToBrokerTypedValue) - .filter(Objects::nonNull) - .collect(Collectors.toList()); - } - - private static List mappedList(final List list, final Function func) { - if (list == null) { - return new ArrayList<>(); - } + private static List mappedList(final Collection list, final Function func) { + if (list == null) { return new ArrayList<>(); } return list .stream() @@ -321,9 +306,7 @@ public class ConversionUtils { } private static List flatMappedList(final List list, final Function> func) { - if (list == null) { - return new ArrayList<>(); - } + if (list == null) { return new ArrayList<>(); } return list .stream() @@ -335,9 +318,7 @@ public class ConversionUtils { } private static T mappedFirst(final List list, final Function func) { - if (list == null) { - return null; - } + if (list == null) { return null; } return list .stream() diff --git a/dhp-workflows/dhp-broker-events/src/test/java/eu/dnetlib/dhp/broker/oa/util/ConversionUtilsTest.java b/dhp-workflows/dhp-broker-events/src/test/java/eu/dnetlib/dhp/broker/oa/util/ConversionUtilsTest.java new file mode 100644 index 000000000..fb5454c34 --- /dev/null +++ b/dhp-workflows/dhp-broker-events/src/test/java/eu/dnetlib/dhp/broker/oa/util/ConversionUtilsTest.java @@ -0,0 +1,92 @@ +package eu.dnetlib.dhp.broker.oa.util; + +import static org.junit.jupiter.api.Assertions.assertEquals; + +import java.util.ArrayList; +import java.util.List; + +import org.junit.jupiter.api.BeforeEach; +import org.junit.jupiter.api.Test; + +import eu.dnetlib.broker.objects.OaBrokerTypedValue; +import eu.dnetlib.dhp.schema.oaf.Instance; +import eu.dnetlib.dhp.schema.oaf.Qualifier; +import eu.dnetlib.dhp.schema.oaf.Result; +import eu.dnetlib.dhp.schema.oaf.StructuredProperty; + +class ConversionUtilsTest { + + @BeforeEach + void setUp() throws Exception {} + + @Test + void testAllResultPids() { + final Qualifier qf = new Qualifier(); + qf.setClassid("test"); + qf.setClassname("test"); + qf.setSchemeid("test"); + qf.setSchemename("test"); + + final StructuredProperty sp1 = new StructuredProperty(); + sp1.setValue("1"); + sp1.setQualifier(qf); + + final StructuredProperty sp2 = new StructuredProperty(); + sp2.setValue("2"); + sp2.setQualifier(qf); + + final StructuredProperty sp3 = new StructuredProperty(); + sp3.setValue("3"); + sp3.setQualifier(qf); + + final StructuredProperty sp4a = new StructuredProperty(); + sp4a.setValue("4"); + sp4a.setQualifier(qf); + + final StructuredProperty sp4b = new StructuredProperty(); + sp4b.setValue("4"); + sp4b.setQualifier(qf); + + final StructuredProperty sp5 = new StructuredProperty(); + sp5.setValue("5"); + sp5.setQualifier(qf); + + final StructuredProperty sp6a = new StructuredProperty(); + sp6a.setValue("6"); + sp6a.setQualifier(qf); + + final StructuredProperty sp6b = new StructuredProperty(); + sp6b.setValue("6"); + sp6b.setQualifier(qf); + + final Result oaf = new Result(); + oaf.setPid(new ArrayList<>()); + oaf.getPid().add(sp1); + oaf.getPid().add(sp2); + oaf.getPid().add(sp4a); + + final Instance instance1 = new Instance(); + instance1.setPid(new ArrayList<>()); + instance1.setAlternateIdentifier(new ArrayList<>()); + instance1.getPid().add(sp3); + instance1.getPid().add(sp4b); + instance1.getAlternateIdentifier().add(sp5); + instance1.getAlternateIdentifier().add(sp6a); + + final Instance instance2 = new Instance(); + instance2.setPid(new ArrayList<>()); + instance2.setAlternateIdentifier(new ArrayList<>()); + instance2.getPid().add(sp6b); + + oaf.setInstance(new ArrayList<>()); + oaf.getInstance().add(instance1); + oaf.getInstance().add(instance2); + + final List list = ConversionUtils.allResultPids(oaf); + + // list.forEach(x -> System.out.println(x.getValue())); + + assertEquals(6, list.size()); + } + +} From 04cb96001cec0ea5bb62e94003bb3101ea2a887f Mon Sep 17 00:00:00 2001 From: Claudio Atzori Date: Wed, 11 Jan 2023 10:10:12 +0100 Subject: [PATCH 282/535] [broker] d40e20f437b3e89c952f08d5f5d8c4fc51e74ee6 adapted to the beta graph model --- .../dhp/broker/oa/util/ConversionUtils.java | 95 +++++++++++++------ .../broker/oa/util/ConversionUtilsTest.java | 4 +- 2 files changed, 67 insertions(+), 32 deletions(-) diff --git a/dhp-workflows/dhp-broker-events/src/main/java/eu/dnetlib/dhp/broker/oa/util/ConversionUtils.java b/dhp-workflows/dhp-broker-events/src/main/java/eu/dnetlib/dhp/broker/oa/util/ConversionUtils.java index 1b28c4064..9b5a5036d 100644 --- a/dhp-workflows/dhp-broker-events/src/main/java/eu/dnetlib/dhp/broker/oa/util/ConversionUtils.java +++ b/dhp-workflows/dhp-broker-events/src/main/java/eu/dnetlib/dhp/broker/oa/util/ConversionUtils.java @@ -29,29 +29,19 @@ import eu.dnetlib.broker.objects.OaBrokerRelatedPublication; import eu.dnetlib.broker.objects.OaBrokerRelatedSoftware; import eu.dnetlib.broker.objects.OaBrokerTypedValue; import eu.dnetlib.dhp.schema.common.ModelConstants; -import eu.dnetlib.dhp.schema.oaf.Author; -import eu.dnetlib.dhp.schema.oaf.Dataset; -import eu.dnetlib.dhp.schema.oaf.Datasource; -import eu.dnetlib.dhp.schema.oaf.ExternalReference; -import eu.dnetlib.dhp.schema.oaf.Field; -import eu.dnetlib.dhp.schema.oaf.Instance; -import eu.dnetlib.dhp.schema.oaf.Journal; -import eu.dnetlib.dhp.schema.oaf.KeyValue; -import eu.dnetlib.dhp.schema.oaf.Project; -import eu.dnetlib.dhp.schema.oaf.Publication; -import eu.dnetlib.dhp.schema.oaf.Qualifier; -import eu.dnetlib.dhp.schema.oaf.Result; -import eu.dnetlib.dhp.schema.oaf.Software; -import eu.dnetlib.dhp.schema.oaf.StructuredProperty; +import eu.dnetlib.dhp.schema.oaf.*; public class ConversionUtils { private static final Logger log = LoggerFactory.getLogger(ConversionUtils.class); - private ConversionUtils() {} + private ConversionUtils() { + } public static List oafInstanceToBrokerInstances(final Instance i) { - if (i == null) { return new ArrayList<>(); } + if (i == null) { + return new ArrayList<>(); + } return mappedList(i.getUrl(), url -> { final OaBrokerInstance res = new OaBrokerInstance(); @@ -71,8 +61,14 @@ public class ConversionUtils { return sp != null ? new OaBrokerTypedValue(classId(sp.getQualifier()), sp.getValue()) : null; } + public static OaBrokerTypedValue oafSubjectToBrokerTypedValue(final Subject sp) { + return sp != null ? new OaBrokerTypedValue(classId(sp.getQualifier()), sp.getValue()) : null; + } + public static OaBrokerRelatedDataset oafDatasetToBrokerDataset(final Dataset d) { - if (d == null) { return null; } + if (d == null) { + return null; + } final OaBrokerRelatedDataset res = new OaBrokerRelatedDataset(); res.setOpenaireId(cleanOpenaireId(d.getId())); @@ -85,7 +81,9 @@ public class ConversionUtils { } public static OaBrokerRelatedPublication oafPublicationToBrokerPublication(final Publication p) { - if (p == null) { return null; } + if (p == null) { + return null; + } final OaBrokerRelatedPublication res = new OaBrokerRelatedPublication(); res.setOpenaireId(cleanOpenaireId(p.getId())); @@ -99,7 +97,9 @@ public class ConversionUtils { } public static OaBrokerMainEntity oafResultToBrokerResult(final Result result) { - if (result == null) { return null; } + if (result == null) { + return null; + } final OaBrokerMainEntity res = new OaBrokerMainEntity(); @@ -109,14 +109,15 @@ public class ConversionUtils { res.setTitles(structPropList(result.getTitle())); res.setAbstracts(fieldList(result.getDescription())); res.setLanguage(classId(result.getLanguage())); - res.setSubjects(structPropTypedList(result.getSubject())); + res.setSubjects(subjectList(result.getSubject())); res.setCreators(mappedList(result.getAuthor(), ConversionUtils::oafAuthorToBrokerAuthor)); res.setPublicationdate(fieldValue(result.getDateofacceptance())); res.setPublisher(fieldValue(result.getPublisher())); res.setEmbargoenddate(fieldValue(result.getEmbargoenddate())); res.setContributor(fieldList(result.getContributor())); res - .setJournal(result instanceof Publication ? oafJournalToBrokerJournal(((Publication) result).getJournal()) : null); + .setJournal( + result instanceof Publication ? oafJournalToBrokerJournal(((Publication) result).getJournal()) : null); res.setPids(allResultPids(result)); res.setInstances(flatMappedList(result.getInstance(), ConversionUtils::oafInstanceToBrokerInstances)); res @@ -141,7 +142,9 @@ public class ConversionUtils { } private static OaBrokerAuthor oafAuthorToBrokerAuthor(final Author author) { - if (author == null) { return null; } + if (author == null) { + return null; + } final String pids = author.getPid() != null ? author .getPid() @@ -165,7 +168,9 @@ public class ConversionUtils { } private static OaBrokerJournal oafJournalToBrokerJournal(final Journal journal) { - if (journal == null) { return null; } + if (journal == null) { + return null; + } final OaBrokerJournal res = new OaBrokerJournal(); res.setName(journal.getName()); @@ -177,7 +182,9 @@ public class ConversionUtils { } private static OaBrokerExternalReference oafExtRefToBrokerExtRef(final ExternalReference ref) { - if (ref == null) { return null; } + if (ref == null) { + return null; + } final OaBrokerExternalReference res = new OaBrokerExternalReference(); res.setRefidentifier(ref.getRefidentifier()); @@ -188,7 +195,9 @@ public class ConversionUtils { } public static OaBrokerProject oafProjectToBrokerProject(final Project p) { - if (p == null) { return null; } + if (p == null) { + return null; + } final OaBrokerProject res = new OaBrokerProject(); res.setOpenaireId(cleanOpenaireId(p.getId())); @@ -212,7 +221,9 @@ public class ConversionUtils { } public static OaBrokerRelatedSoftware oafSoftwareToBrokerSoftware(final Software sw) { - if (sw == null) { return null; } + if (sw == null) { + return null; + } final OaBrokerRelatedSoftware res = new OaBrokerRelatedSoftware(); res.setOpenaireId(cleanOpenaireId(sw.getId())); @@ -225,7 +236,9 @@ public class ConversionUtils { } public static OaBrokerRelatedDatasource oafDatasourceToBrokerDatasource(final Datasource ds) { - if (ds == null) { return null; } + if (ds == null) { + return null; + } final OaBrokerRelatedDatasource res = new OaBrokerRelatedDatasource(); res.setName(StringUtils.defaultIfBlank(fieldValue(ds.getOfficialname()), fieldValue(ds.getEnglishname()))); @@ -284,8 +297,22 @@ public class ConversionUtils { : new ArrayList<>(); } + private static List subjectList(final List list) { + if (list == null) { + return new ArrayList<>(); + } + + return list + .stream() + .map(ConversionUtils::oafSubjectToBrokerTypedValue) + .filter(Objects::nonNull) + .collect(Collectors.toList()); + } + private static List structPropTypedList(final List list) { - if (list == null) { return new ArrayList<>(); } + if (list == null) { + return new ArrayList<>(); + } return list .stream() @@ -295,7 +322,9 @@ public class ConversionUtils { } private static List mappedList(final Collection list, final Function func) { - if (list == null) { return new ArrayList<>(); } + if (list == null) { + return new ArrayList<>(); + } return list .stream() @@ -306,7 +335,9 @@ public class ConversionUtils { } private static List flatMappedList(final List list, final Function> func) { - if (list == null) { return new ArrayList<>(); } + if (list == null) { + return new ArrayList<>(); + } return list .stream() @@ -318,7 +349,9 @@ public class ConversionUtils { } private static T mappedFirst(final List list, final Function func) { - if (list == null) { return null; } + if (list == null) { + return null; + } return list .stream() diff --git a/dhp-workflows/dhp-broker-events/src/test/java/eu/dnetlib/dhp/broker/oa/util/ConversionUtilsTest.java b/dhp-workflows/dhp-broker-events/src/test/java/eu/dnetlib/dhp/broker/oa/util/ConversionUtilsTest.java index fb5454c34..fc630df05 100644 --- a/dhp-workflows/dhp-broker-events/src/test/java/eu/dnetlib/dhp/broker/oa/util/ConversionUtilsTest.java +++ b/dhp-workflows/dhp-broker-events/src/test/java/eu/dnetlib/dhp/broker/oa/util/ConversionUtilsTest.java @@ -1,3 +1,4 @@ + package eu.dnetlib.dhp.broker.oa.util; import static org.junit.jupiter.api.Assertions.assertEquals; @@ -17,7 +18,8 @@ import eu.dnetlib.dhp.schema.oaf.StructuredProperty; class ConversionUtilsTest { @BeforeEach - void setUp() throws Exception {} + void setUp() throws Exception { + } @Test void testAllResultPids() { From 0a58bc7ba7b4aa200aaeadd27aa461416af8c9ac Mon Sep 17 00:00:00 2001 From: Claudio Atzori Date: Wed, 11 Jan 2023 14:44:14 +0100 Subject: [PATCH 283/535] [broker] prevent NPEs --- .../dhp/broker/oa/util/ConversionUtils.java | 23 +++++++++++++------ 1 file changed, 16 insertions(+), 7 deletions(-) diff --git a/dhp-workflows/dhp-broker-events/src/main/java/eu/dnetlib/dhp/broker/oa/util/ConversionUtils.java b/dhp-workflows/dhp-broker-events/src/main/java/eu/dnetlib/dhp/broker/oa/util/ConversionUtils.java index 9b5a5036d..4bf4d3341 100644 --- a/dhp-workflows/dhp-broker-events/src/main/java/eu/dnetlib/dhp/broker/oa/util/ConversionUtils.java +++ b/dhp-workflows/dhp-broker-events/src/main/java/eu/dnetlib/dhp/broker/oa/util/ConversionUtils.java @@ -128,13 +128,22 @@ public class ConversionUtils { protected static List allResultPids(final Result result) { final Map map = new HashMap<>(); - result.getPid().forEach(sp -> map.put(sp.getValue(), sp)); - result.getInstance().forEach(i -> { - i.getPid().forEach(sp -> map.put(sp.getValue(), sp)); - i.getAlternateIdentifier().forEach(sp -> map.put(sp.getValue(), sp)); - }); - final List pids = mappedList(map.values(), ConversionUtils::oafPidToBrokerPid); - return pids; + + if (result.getPid() != null) { + result.getPid().forEach(sp -> map.put(sp.getValue(), sp)); + } + + if (result.getInstance() != null) { + result.getInstance().forEach(i -> { + if (i.getPid() != null) { + i.getPid().forEach(sp -> map.put(sp.getValue(), sp)); + } + if (i.getAlternateIdentifier() != null) { + i.getAlternateIdentifier().forEach(sp -> map.put(sp.getValue(), sp)); + } + }); + } + return mappedList(map.values(), ConversionUtils::oafPidToBrokerPid); } public static String cleanOpenaireId(final String id) { From 686580a22068b6437ff4e8dafccbf919d06e2a77 Mon Sep 17 00:00:00 2001 From: dimitrispie Date: Thu, 12 Jan 2023 11:18:03 +0200 Subject: [PATCH 284/535] - New Monitor DB workflow - New Organization added --- .../graph/monitor/oozie_app/monitor-post.sh | 21 -- .../dhp/oa/graph/monitor/oozie_app/monitor.sh | 16 +- .../oozie_app/scripts/createMonitorDB.sql | 293 ++++++------------ .../oa/graph/monitor/oozie_app/updateCache.sh | 4 - .../oa/graph/monitor/oozie_app/workflow.xml | 28 -- .../scripts/step20-createMonitorDB.sql | 3 +- 6 files changed, 107 insertions(+), 258 deletions(-) delete mode 100644 dhp-workflows/dhp-monitor-update/src/main/resources/eu/dnetlib/dhp/oa/graph/monitor/oozie_app/monitor-post.sh delete mode 100644 dhp-workflows/dhp-monitor-update/src/main/resources/eu/dnetlib/dhp/oa/graph/monitor/oozie_app/updateCache.sh diff --git a/dhp-workflows/dhp-monitor-update/src/main/resources/eu/dnetlib/dhp/oa/graph/monitor/oozie_app/monitor-post.sh b/dhp-workflows/dhp-monitor-update/src/main/resources/eu/dnetlib/dhp/oa/graph/monitor/oozie_app/monitor-post.sh deleted file mode 100644 index b8c71681a..000000000 --- a/dhp-workflows/dhp-monitor-update/src/main/resources/eu/dnetlib/dhp/oa/graph/monitor/oozie_app/monitor-post.sh +++ /dev/null @@ -1,21 +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 - -impala-shell -q "invalidate metadata;" -impala-shell -d ${TARGET} -q "show tables" --delimited | sed "s/\(.*\)/compute stats ${TARGET}.\1;/" | impala-shell -f - -echo "Impala shell finished" - -echo "Updating shadow monitor database" -impala-shell -q "create database if not exists ${SHADOW}" -impala-shell -d ${SHADOW} -q "show tables" --delimited | sed "s/^/drop view if exists ${SHADOW}./" | sed "s/$/;/" | impala-shell -f - -impala-shell -d ${TARGET} -q "show tables" --delimited | sed "s/\(.*\)/create view ${SHADOW}.\1 as select * from ${TARGET}.\1;/" | impala-shell -f - -echo "Shadow db ready!" \ No newline at end of file diff --git a/dhp-workflows/dhp-monitor-update/src/main/resources/eu/dnetlib/dhp/oa/graph/monitor/oozie_app/monitor.sh b/dhp-workflows/dhp-monitor-update/src/main/resources/eu/dnetlib/dhp/oa/graph/monitor/oozie_app/monitor.sh index f39bf4893..36cfcd325 100644 --- a/dhp-workflows/dhp-monitor-update/src/main/resources/eu/dnetlib/dhp/oa/graph/monitor/oozie_app/monitor.sh +++ b/dhp-workflows/dhp-monitor-update/src/main/resources/eu/dnetlib/dhp/oa/graph/monitor/oozie_app/monitor.sh @@ -8,17 +8,11 @@ fi export SOURCE=$1 export TARGET=$2 -export SHADOW=$3 -export SCRIPT_PATH=$4 +export SCRIPT_PATH=$3 -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 " $SCRIPT_PATH -hdfs dfs -copyToLocal $SCRIPT_PATH +echo "Getting file from " $3 +hdfs dfs -copyToLocal $3 echo "Creating monitor database" -#cat step20-createMonitorDB.sql | sed s/SOURCE/$1/g | sed s/TARGET/$2/g1 > foo -cat createMonitorDB.sql | sed "s/TARGET/${TARGET}/g" | sed "s/SOURCE/${SOURCE}/g" > foo -hive $HIVE_OPTS -f foo -echo "Hive shell finished" \ No newline at end of file +cat createMonitorDB.sql | sed s/SOURCE/$1/g | sed s/TARGET/$2/g1 | impala-shell -f - +echo "Impala shell finished" diff --git a/dhp-workflows/dhp-monitor-update/src/main/resources/eu/dnetlib/dhp/oa/graph/monitor/oozie_app/scripts/createMonitorDB.sql b/dhp-workflows/dhp-monitor-update/src/main/resources/eu/dnetlib/dhp/oa/graph/monitor/oozie_app/scripts/createMonitorDB.sql index e9e460cb0..2c46082fa 100644 --- a/dhp-workflows/dhp-monitor-update/src/main/resources/eu/dnetlib/dhp/oa/graph/monitor/oozie_app/scripts/createMonitorDB.sql +++ b/dhp-workflows/dhp-monitor-update/src/main/resources/eu/dnetlib/dhp/oa/graph/monitor/oozie_app/scripts/createMonitorDB.sql @@ -1,241 +1,148 @@ -drop database if exists TARGET cascade; -create database if not exists TARGET; +DROP TABLE IF EXISTS TARGET.result_new; -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 +create table TARGET.result_new 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____::b8b8ca674452579f3f593d9f5e557483', -- University College Cork + 'openorgs____::38d7097854736583dde879d12dacafca' -- Brown University ) )) foo; -ANALYZE TABLE TARGET.result COMPUTE STATISTICS; +COMPUTE STATS TARGET.result_new; -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; +INSERT INTO TARGET.result select * from TARGET.result_new; -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; +INSERT INTO TARGET.result_citations select * from TARGET.result_citations orig where exists (select 1 from TARGET.result_new r where r.id=orig.id); +COMPUTE STATS TARGET.result_citations; -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; +INSERT INTO TARGET.result_references_oc select * from TARGET.result_references_oc orig where exists (select 1 from TARGET.result_new r where r.id=orig.id); +COMPUTE STATS TARGET.result_references_oc; -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; +INSERT INTO TARGET.result_citations_oc select * from TARGET.result_citations_oc orig where exists (select 1 from TARGET.result_new r where r.id=orig.id); +COMPUTE STATS TARGET.result_citations_oc; -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; +INSERT INTO TARGET.result_classifications select * from TARGET.result_classifications orig where exists (select 1 from TARGET.result_new r where r.id=orig.id); +COMPUTE STATS TARGET.result_classifications; -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; +INSERT INTO TARGET.result_apc select * from TARGET.result_apc orig where exists (select 1 from TARGET.result_new r where r.id=orig.id); +COMPUTE STATS TARGET.result_apc; -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; +INSERT INTO TARGET.result_concepts select * from TARGET.result_concepts orig where exists (select 1 from TARGET.result_new r where r.id=orig.id); +COMPUTE STATS TARGET.result_concepts; -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; +INSERT INTO TARGET.result_datasources select * from TARGET.result_datasources orig where exists (select 1 from TARGET.result_new r where r.id=orig.id); +COMPUTE STATS TARGET.result_datasources; -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; +INSERT INTO TARGET.result_fundercount select * from TARGET.result_fundercount orig where exists (select 1 from TARGET.result_new r where r.id=orig.id); +COMPUTE STATS TARGET.result_fundercount; -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; +INSERT INTO TARGET.result_gold select * from TARGET.result_gold orig where exists (select 1 from TARGET.result_new r where r.id=orig.id); +COMPUTE STATS TARGET.result_gold; -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; +INSERT INTO TARGET.result_greenoa select * from TARGET.result_greenoa orig where exists (select 1 from TARGET.result_new r where r.id=orig.id); +COMPUTE STATS TARGET.result_greenoa; -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; +INSERT INTO TARGET.result_languages select * from TARGET.result_languages orig where exists (select 1 from TARGET.result_new r where r.id=orig.id); +COMPUTE STATS TARGET.result_languages; -create table TARGET.licenses_normalized STORED AS PARQUET as select * from SOURCE.licenses_normalized; -ANALYZE TABLE TARGET.licenses_normalized COMPUTE STATISTICS; +INSERT INTO TARGET.result_licenses select * from TARGET.result_licenses orig where exists (select 1 from TARGET.result_new r where r.id=orig.id); +COMPUTE STATS TARGET.result_licenses; -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; +INSERT INTO TARGET.result_oids select * from TARGET.result_oids orig where exists (select 1 from TARGET.result_new r where r.id=orig.id); +COMPUTE STATS TARGET.result_oids; -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; +INSERT INTO TARGET.result_organization select * from TARGET.result_organization orig where exists (select 1 from TARGET.result_new r where r.id=orig.id); +COMPUTE STATS TARGET.result_organization; -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; +INSERT INTO TARGET.result_peerreviewed select * from TARGET.result_peerreviewed orig where exists (select 1 from TARGET.result_new r where r.id=orig.id); +COMPUTE STATS TARGET.result_peerreviewed; -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; +INSERT INTO TARGET.result_pids select * from TARGET.result_pids orig where exists (select 1 from TARGET.result_new r where r.id=orig.id); +COMPUTE STATS TARGET.result_pids; -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; +INSERT INTO TARGET.result_projectcount select * from TARGET.result_projectcount orig where exists (select 1 from TARGET.result_new r where r.id=orig.id); +COMPUTE STATS TARGET.result_projectcount; -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; +INSERT INTO TARGET.result_projects select * from TARGET.result_projects orig where exists (select 1 from TARGET.result_new r where r.id=orig.id); +COMPUTE STATS TARGET.result_projects; -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; +INSERT INTO TARGET.result_refereed select * from TARGET.result_refereed orig where exists (select 1 from TARGET.result_new r where r.id=orig.id); +COMPUTE STATS TARGET.result_refereed; -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; +INSERT INTO TARGET.result_sources select * from TARGET.result_sources orig where exists (select 1 from TARGET.result_new r where r.id=orig.id); +COMPUTE STATS TARGET.result_sources; -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; +INSERT INTO TARGET.result_topics select * from TARGET.result_topics orig where exists (select 1 from TARGET.result_new r where r.id=orig.id); +COMPUTE STATS TARGET.result_topics; -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; +INSERT INTO TARGET.result_fos select * from TARGET.result_fos orig where exists (select 1 from TARGET.result_new r where r.id=orig.id); +COMPUTE STATS TARGET.result_fos; -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; +create view TARGET.foo1 as select * from TARGET.result_result rr where rr.source in (select id from TARGET.result_new); +create view TARGET.foo2 as select * from TARGET.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; - --- 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 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; +COMPUTE STATS TARGET.result_result; -- 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; +INSERT INTO TARGET.indi_pub_green_oa select * from TARGET.indi_pub_green_oa orig where exists (select 1 from TARGET.result_new r where r.id=orig.id); +COMPUTE STATS TARGET.indi_pub_green_oa; +INSERT INTO TARGET.indi_pub_grey_lit select * from TARGET.indi_pub_grey_lit orig where exists (select 1 from TARGET.result_new r where r.id=orig.id); +COMPUTE STATS TARGET.indi_pub_grey_lit; +INSERT INTO TARGET.indi_pub_doi_from_crossref select * from TARGET.indi_pub_doi_from_crossref orig where exists (select 1 from TARGET.result_new r where r.id=orig.id); +COMPUTE STATS TARGET.indi_pub_doi_from_crossref; -- 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; +INSERT INTO TARGET.indi_result_has_cc_licence select * from TARGET.indi_result_has_cc_licence orig where exists (select 1 from TARGET.result_new r where r.id=orig.id); +COMPUTE STATS TARGET.indi_result_has_cc_licence; +INSERT INTO TARGET.indi_result_has_cc_licence_url select * from TARGET.indi_result_has_cc_licence_url orig where exists (select 1 from TARGET.result_new r where r.id=orig.id); +COMPUTE STATS TARGET.indi_result_has_cc_licence_url; +INSERT INTO TARGET.indi_pub_has_abstract select * from TARGET.indi_pub_has_abstract orig where exists (select 1 from TARGET.result_new r where r.id=orig.id); +COMPUTE STATS TARGET.indi_pub_has_abstract; +INSERT INTO TARGET.indi_result_with_orcid select * from TARGET.indi_result_with_orcid orig where exists (select 1 from TARGET.result_new r where r.id=orig.id); +COMPUTE STATS TARGET.indi_result_with_orcid; ---- 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; +INSERT INTO TARGET.indi_funded_result_with_fundref select * from TARGET.indi_funded_result_with_fundref orig where exists (select 1 from TARGET.result_new r where r.id=orig.id); +COMPUTE STATS TARGET.indi_funded_result_with_fundref; ---- 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; +INSERT INTO TARGET.indi_pub_diamond select * from TARGET.indi_pub_diamond orig where exists (select 1 from TARGET.result_new r where r.id=orig.id); +COMPUTE STATS TARGET.indi_pub_diamond; +INSERT INTO TARGET.indi_pub_in_transformative select * from TARGET.indi_pub_in_transformative orig where exists (select 1 from TARGET.result_new r where r.id=orig.id); +COMPUTE STATS TARGET.indi_pub_in_transformative; +INSERT INTO TARGET.indi_pub_closed_other_open select * from TARGET.indi_pub_closed_other_open orig where exists (select 1 from TARGET.result_new r where r.id=orig.id); +COMPUTE STATS TARGET.indi_pub_closed_other_open; ---- 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; +INSERT INTO TARGET.indi_result_no_of_copies select * from TARGET.indi_result_no_of_copies orig where exists (select 1 from TARGET.result_new r where r.id=orig.id); +COMPUTE STATS TARGET.indi_result_no_of_copies; ---- 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_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; +INSERT INTO TARGET.indi_pub_hybrid_oa_with_cc select * from TARGET.indi_pub_hybrid_oa_with_cc orig where exists (select 1 from TARGET.result_new r where r.id=orig.id); +COMPUTE STATS TARGET.indi_pub_hybrid_oa_with_cc; +INSERT INTO TARGET.indi_pub_downloads select * from TARGET.indi_pub_downloads orig where exists (select 1 from TARGET.result_new r where r.id=orig.result_id); +COMPUTE STATS TARGET.indi_pub_downloads; +INSERT INTO TARGET.indi_pub_downloads_datasource select * from TARGET.indi_pub_downloads_datasource orig where exists (select 1 from TARGET.result_new r where r.id=orig.result_id); +COMPUTE STATS TARGET.indi_pub_downloads_datasource; +INSERT INTO TARGET.indi_pub_downloads_year select * from TARGET.indi_pub_downloads_year orig where exists (select 1 from TARGET.result_new r where r.id=orig.result_id); +COMPUTE STATS TARGET.indi_pub_downloads_year; +INSERT INTO TARGET.indi_pub_downloads_datasource_year select * from TARGET.indi_pub_downloads_datasource_year orig where exists (select 1 from TARGET.result_new r where r.id=orig.result_id); +COMPUTE STATS TARGET.indi_pub_downloads_datasource_year; ---- 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; +INSERT INTO TARGET.indi_pub_gold_oa select * from TARGET.indi_pub_gold_oa orig where exists (select 1 from TARGET.result_new r where r.id=orig.id); +COMPUTE STATS TARGET.indi_pub_gold_oa; +INSERT INTO TARGET.indi_pub_hybrid select * from TARGET.indi_pub_hybrid orig where exists (select 1 from TARGET.result_new r where r.id=orig.id); +COMPUTE STATS TARGET.indi_pub_hybrid; + +INSERT INTO TARGET.indi_pub_has_preprint select * from TARGET.indi_pub_has_preprint orig where exists (select 1 from TARGET.result_new r where r.id=orig.id); +COMPUTE STATS TARGET.indi_pub_has_preprint; +INSERT INTO TARGET.indi_pub_in_subscribed select * from TARGET.indi_pub_in_subscribed orig where exists (select 1 from TARGET.result_new r where r.id=orig.id); +COMPUTE STATS TARGET.indi_pub_in_subscribed; +INSERT INTO TARGET.indi_result_with_pid select * from TARGET.indi_result_with_pid orig where exists (select 1 from TARGET.result_new r where r.id=orig.id); +COMPUTE STATS TARGET.indi_result_with_pid; --create table TARGET.indi_datasets_gold_oa stored as parquet as select * from SOURCE.indi_datasets_gold_oa orig where exists (select 1 from TARGET.result r where r.id=orig.id); --compute stats TARGET.indi_datasets_gold_oa; --create table TARGET.indi_software_gold_oa stored as parquet as select * from SOURCE.indi_software_gold_oa orig where exists (select 1 from TARGET.result r where r.id=orig.id); --compute stats TARGET.indi_software_gold_oa; - +DROP TABLE TARGET.result_new; diff --git a/dhp-workflows/dhp-monitor-update/src/main/resources/eu/dnetlib/dhp/oa/graph/monitor/oozie_app/updateCache.sh b/dhp-workflows/dhp-monitor-update/src/main/resources/eu/dnetlib/dhp/oa/graph/monitor/oozie_app/updateCache.sh deleted file mode 100644 index 03aa535e1..000000000 --- a/dhp-workflows/dhp-monitor-update/src/main/resources/eu/dnetlib/dhp/oa/graph/monitor/oozie_app/updateCache.sh +++ /dev/null @@ -1,4 +0,0 @@ -#!/usr/bin/env bash - -curl --request GET $1/cache/updateCache -sleep 6h \ No newline at end of file diff --git a/dhp-workflows/dhp-monitor-update/src/main/resources/eu/dnetlib/dhp/oa/graph/monitor/oozie_app/workflow.xml b/dhp-workflows/dhp-monitor-update/src/main/resources/eu/dnetlib/dhp/oa/graph/monitor/oozie_app/workflow.xml index 2bcff70ac..dda645d8f 100644 --- a/dhp-workflows/dhp-monitor-update/src/main/resources/eu/dnetlib/dhp/oa/graph/monitor/oozie_app/workflow.xml +++ b/dhp-workflows/dhp-monitor-update/src/main/resources/eu/dnetlib/dhp/oa/graph/monitor/oozie_app/workflow.xml @@ -66,37 +66,9 @@ monitor.sh ${stats_db_name} ${monitor_db_name} - ${monitor_db_shadow_name} ${wf:appPath()}/scripts/createMonitorDB.sql monitor.sh - - - - - - - - ${jobTracker} - ${nameNode} - monitor-post.sh - ${stats_db_name} - ${monitor_db_name} - ${monitor_db_shadow_name} - monitor-post.sh - - - - - - - - ${jobTracker} - ${nameNode} - updateCache.sh - ${stats_tool_api_url} - updateCache.sh - 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 3e69ff58d..885f7e4f7 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 @@ -60,7 +60,8 @@ create table TARGET.result stored as parquet as '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 ) )) foo; compute stats TARGET.result; From 43f6d4f2965204a760bef5db453285aaf90c818e Mon Sep 17 00:00:00 2001 From: dimitrispie Date: Thu, 12 Jan 2023 11:26:47 +0200 Subject: [PATCH 285/535] -Monitor DB workflow --- .../monitor/oozie_app/config-default.xml | 34 ++++++ .../graph/monitor/oozie_app/monitor-post.sh | 21 ++++ .../dhp/oa/graph/monitor/oozie_app/monitor.sh | 24 ++++ .../oa/graph/monitor/oozie_app/workflow.xml | 105 ++++++++++++++++++ 4 files changed, 184 insertions(+) create mode 100644 dhp-workflows/dhp-monitor-update/src/main/resources/eu/dnetlib/dhp/oa/graph/monitor/oozie_app/config-default.xml create mode 100644 dhp-workflows/dhp-monitor-update/src/main/resources/eu/dnetlib/dhp/oa/graph/monitor/oozie_app/monitor-post.sh create mode 100644 dhp-workflows/dhp-monitor-update/src/main/resources/eu/dnetlib/dhp/oa/graph/monitor/oozie_app/monitor.sh create mode 100644 dhp-workflows/dhp-monitor-update/src/main/resources/eu/dnetlib/dhp/oa/graph/monitor/oozie_app/workflow.xml diff --git a/dhp-workflows/dhp-monitor-update/src/main/resources/eu/dnetlib/dhp/oa/graph/monitor/oozie_app/config-default.xml b/dhp-workflows/dhp-monitor-update/src/main/resources/eu/dnetlib/dhp/oa/graph/monitor/oozie_app/config-default.xml new file mode 100644 index 000000000..63fc84d75 --- /dev/null +++ b/dhp-workflows/dhp-monitor-update/src/main/resources/eu/dnetlib/dhp/oa/graph/monitor/oozie_app/config-default.xml @@ -0,0 +1,34 @@ + + + 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=19166291558;spark.yarn.executor.memoryOverhead=3225;spark.driver.memory=11596411699;spark.yarn.driver.memoryOverhead=1228 + + + oozie.wf.workflow.notification.url + {serviceUrl}/v1/oozieNotification/jobUpdate?jobId=$jobId%26status=$status + + + stats_tool_api_url + ${stats_tool_api_url} + + \ No newline at end of file diff --git a/dhp-workflows/dhp-monitor-update/src/main/resources/eu/dnetlib/dhp/oa/graph/monitor/oozie_app/monitor-post.sh b/dhp-workflows/dhp-monitor-update/src/main/resources/eu/dnetlib/dhp/oa/graph/monitor/oozie_app/monitor-post.sh new file mode 100644 index 000000000..b8c71681a --- /dev/null +++ b/dhp-workflows/dhp-monitor-update/src/main/resources/eu/dnetlib/dhp/oa/graph/monitor/oozie_app/monitor-post.sh @@ -0,0 +1,21 @@ +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 + +impala-shell -q "invalidate metadata;" +impala-shell -d ${TARGET} -q "show tables" --delimited | sed "s/\(.*\)/compute stats ${TARGET}.\1;/" | impala-shell -f - +echo "Impala shell finished" + +echo "Updating shadow monitor database" +impala-shell -q "create database if not exists ${SHADOW}" +impala-shell -d ${SHADOW} -q "show tables" --delimited | sed "s/^/drop view if exists ${SHADOW}./" | sed "s/$/;/" | impala-shell -f - +impala-shell -d ${TARGET} -q "show tables" --delimited | sed "s/\(.*\)/create view ${SHADOW}.\1 as select * from ${TARGET}.\1;/" | impala-shell -f - +echo "Shadow db ready!" \ No newline at end of file diff --git a/dhp-workflows/dhp-monitor-update/src/main/resources/eu/dnetlib/dhp/oa/graph/monitor/oozie_app/monitor.sh b/dhp-workflows/dhp-monitor-update/src/main/resources/eu/dnetlib/dhp/oa/graph/monitor/oozie_app/monitor.sh new file mode 100644 index 000000000..f39bf4893 --- /dev/null +++ b/dhp-workflows/dhp-monitor-update/src/main/resources/eu/dnetlib/dhp/oa/graph/monitor/oozie_app/monitor.sh @@ -0,0 +1,24 @@ +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 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 " $SCRIPT_PATH +hdfs dfs -copyToLocal $SCRIPT_PATH + +echo "Creating monitor database" +#cat step20-createMonitorDB.sql | sed s/SOURCE/$1/g | sed s/TARGET/$2/g1 > foo +cat createMonitorDB.sql | sed "s/TARGET/${TARGET}/g" | sed "s/SOURCE/${SOURCE}/g" > foo +hive $HIVE_OPTS -f foo +echo "Hive shell finished" \ No newline at end of file diff --git a/dhp-workflows/dhp-monitor-update/src/main/resources/eu/dnetlib/dhp/oa/graph/monitor/oozie_app/workflow.xml b/dhp-workflows/dhp-monitor-update/src/main/resources/eu/dnetlib/dhp/oa/graph/monitor/oozie_app/workflow.xml new file mode 100644 index 000000000..7e4cfc759 --- /dev/null +++ b/dhp-workflows/dhp-monitor-update/src/main/resources/eu/dnetlib/dhp/oa/graph/monitor/oozie_app/workflow.xml @@ -0,0 +1,105 @@ + + + + stats_db_name + the target stats database name + + + stats_db_shadow_name + the name of the shadow schema + + + monitor_db_name + the target monitor db name + + + monitor_db_shadow_name + the name of the shadow monitor db + + + stats_tool_api_url + The url of the API of the stats tool. Is used to trigger the cache update. + + + 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. + + + context_api_url + the base url of the context api (https://services.openaire.eu/openaire) + + + + + ${jobTracker} + ${nameNode} + + + hive.metastore.uris + ${hive_metastore_uris} + + + hive.txn.timeout + ${hive_timeout} + + + + + + + + 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/createMonitorDB.sql + monitor.sh + + + + + + + + + ${jobTracker} + ${nameNode} + monitor-post.sh + ${stats_db_name} + ${monitor_db_name} + ${monitor_db_shadow_name} + monitor-post.sh + + + + + + + + ${jobTracker} + ${nameNode} + updateCache.sh + ${stats_tool_api_url} + updateCache.sh + + + + + + + \ No newline at end of file From 34d4bf727ce668c08cb658d87229ca1bc95d6704 Mon Sep 17 00:00:00 2001 From: dimitrispie Date: Thu, 12 Jan 2023 11:28:37 +0200 Subject: [PATCH 286/535] Bug fixes --- .../graph/monitor/oozie_app/monitor-post.sh | 16 +- .../oozie_app/scripts/createMonitorDB.sql | 149 ++++++++++++++++++ .../oa/graph/monitor/oozie_app/workflow.xml | 12 -- 3 files changed, 157 insertions(+), 20 deletions(-) create mode 100644 dhp-workflows/dhp-monitor-update/src/main/resources/eu/dnetlib/dhp/oa/graph/monitor/oozie_app/scripts/createMonitorDB.sql diff --git a/dhp-workflows/dhp-monitor-update/src/main/resources/eu/dnetlib/dhp/oa/graph/monitor/oozie_app/monitor-post.sh b/dhp-workflows/dhp-monitor-update/src/main/resources/eu/dnetlib/dhp/oa/graph/monitor/oozie_app/monitor-post.sh index b8c71681a..dd82310e0 100644 --- a/dhp-workflows/dhp-monitor-update/src/main/resources/eu/dnetlib/dhp/oa/graph/monitor/oozie_app/monitor-post.sh +++ b/dhp-workflows/dhp-monitor-update/src/main/resources/eu/dnetlib/dhp/oa/graph/monitor/oozie_app/monitor-post.sh @@ -11,11 +11,11 @@ export TARGET=$2 export SHADOW=$3 impala-shell -q "invalidate metadata;" -impala-shell -d ${TARGET} -q "show tables" --delimited | sed "s/\(.*\)/compute stats ${TARGET}.\1;/" | impala-shell -f - -echo "Impala shell finished" - -echo "Updating shadow monitor database" -impala-shell -q "create database if not exists ${SHADOW}" -impala-shell -d ${SHADOW} -q "show tables" --delimited | sed "s/^/drop view if exists ${SHADOW}./" | sed "s/$/;/" | impala-shell -f - -impala-shell -d ${TARGET} -q "show tables" --delimited | sed "s/\(.*\)/create view ${SHADOW}.\1 as select * from ${TARGET}.\1;/" | impala-shell -f - -echo "Shadow db ready!" \ No newline at end of file +#impala-shell -d ${TARGET} -q "show tables" --delimited | sed "s/\(.*\)/compute stats ${TARGET}.\1;/" | impala-shell -f - +#echo "Impala shell finished" +# +#echo "Updating shadow monitor database" +#impala-shell -q "create database if not exists ${SHADOW}" +#impala-shell -d ${SHADOW} -q "show tables" --delimited | sed "s/^/drop view if exists ${SHADOW}./" | sed "s/$/;/" | impala-shell -f - +#impala-shell -d ${TARGET} -q "show tables" --delimited | sed "s/\(.*\)/create view ${SHADOW}.\1 as select * from ${TARGET}.\1;/" | impala-shell -f - +#echo "Shadow db ready!" \ No newline at end of file diff --git a/dhp-workflows/dhp-monitor-update/src/main/resources/eu/dnetlib/dhp/oa/graph/monitor/oozie_app/scripts/createMonitorDB.sql b/dhp-workflows/dhp-monitor-update/src/main/resources/eu/dnetlib/dhp/oa/graph/monitor/oozie_app/scripts/createMonitorDB.sql new file mode 100644 index 000000000..7a27b0ea5 --- /dev/null +++ b/dhp-workflows/dhp-monitor-update/src/main/resources/eu/dnetlib/dhp/oa/graph/monitor/oozie_app/scripts/createMonitorDB.sql @@ -0,0 +1,149 @@ +DROP TABLE IF EXISTS TARGET.result_new; + +create table TARGET.result_new 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____::b8b8ca674452579f3f593d9f5e557483', -- University College Cork + 'openorgs____::38d7097854736583dde879d12dacafca' -- Brown University + ) )) foo; + +ANALYZE TABLE TARGET.result_new COMPUTE STATISTICS; + +INSERT INTO TARGET.result select * from TARGET.result_new; + +INSERT INTO TARGET.result_citations select * from TARGET.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 TARGET.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_citations_oc select * from TARGET.result_citations_oc orig where exists (select 1 from TARGET.result_new r where r.id=orig.id); +ANALYZE TABLE TARGET.result_citations_oc COMPUTE STATISTICS; + +INSERT INTO TARGET.result_classifications select * from TARGET.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 TARGET.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 TARGET.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 TARGET.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 TARGET.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 TARGET.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 TARGET.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 TARGET.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 TARGET.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 TARGET.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 TARGET.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 TARGET.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 TARGET.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 TARGET.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 TARGET.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 TARGET.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 TARGET.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 TARGET.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 TARGET.result_fos orig where exists (select 1 from TARGET.result_new r where r.id=orig.id); +ANALYZE TABLE TARGET.result_fos COMPUTE STATISTICS; + +create view TARGET.foo1 as select * from TARGET.result_result rr where rr.source in (select id from TARGET.result_new); +create view TARGET.foo2 as select * from TARGET.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 TARGET.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 TARGET.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 TARGET.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 TARGET.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 TARGET.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 TARGET.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 TARGET.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 TARGET.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 TARGET.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 TARGET.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 TARGET.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 TARGET.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 TARGET.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_downloads select * from TARGET.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 TARGET.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 TARGET.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 TARGET.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 TARGET.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 TARGET.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 TARGET.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 TARGET.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 TARGET.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; +--create table TARGET.indi_datasets_gold_oa stored as parquet as select * from SOURCE.indi_datasets_gold_oa orig where exists (select 1 from TARGET.result r where r.id=orig.id); +--compute stats TARGET.indi_datasets_gold_oa; +--create table TARGET.indi_software_gold_oa stored as parquet as select * from SOURCE.indi_software_gold_oa orig where exists (select 1 from TARGET.result r where r.id=orig.id); +--compute stats TARGET.indi_software_gold_oa; +DROP TABLE TARGET.result_new; diff --git a/dhp-workflows/dhp-monitor-update/src/main/resources/eu/dnetlib/dhp/oa/graph/monitor/oozie_app/workflow.xml b/dhp-workflows/dhp-monitor-update/src/main/resources/eu/dnetlib/dhp/oa/graph/monitor/oozie_app/workflow.xml index 7e4cfc759..ab51931b6 100644 --- a/dhp-workflows/dhp-monitor-update/src/main/resources/eu/dnetlib/dhp/oa/graph/monitor/oozie_app/workflow.xml +++ b/dhp-workflows/dhp-monitor-update/src/main/resources/eu/dnetlib/dhp/oa/graph/monitor/oozie_app/workflow.xml @@ -89,17 +89,5 @@ - - - ${jobTracker} - ${nameNode} - updateCache.sh - ${stats_tool_api_url} - updateCache.sh - - - - - \ No newline at end of file From 51f7ab5864ca80023b1cc7d350e4dda38dd1cd99 Mon Sep 17 00:00:00 2001 From: dimitrispie Date: Thu, 12 Jan 2023 17:15:06 +0200 Subject: [PATCH 287/535] Bug fixes --- .../oa/graph/monitor/oozie_app/scripts/createMonitorDB.sql | 6 +----- 1 file changed, 1 insertion(+), 5 deletions(-) diff --git a/dhp-workflows/dhp-monitor-update/src/main/resources/eu/dnetlib/dhp/oa/graph/monitor/oozie_app/scripts/createMonitorDB.sql b/dhp-workflows/dhp-monitor-update/src/main/resources/eu/dnetlib/dhp/oa/graph/monitor/oozie_app/scripts/createMonitorDB.sql index 2c46082fa..7e1333f92 100644 --- a/dhp-workflows/dhp-monitor-update/src/main/resources/eu/dnetlib/dhp/oa/graph/monitor/oozie_app/scripts/createMonitorDB.sql +++ b/dhp-workflows/dhp-monitor-update/src/main/resources/eu/dnetlib/dhp/oa/graph/monitor/oozie_app/scripts/createMonitorDB.sql @@ -2,11 +2,7 @@ DROP TABLE IF EXISTS TARGET.result_new; create table TARGET.result_new 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 ( + select * from result r where exists (select 1 from result_organization ro where ro.id=r.id and ro.organization in ( -- 'openorgs____::b8b8ca674452579f3f593d9f5e557483', -- University College Cork 'openorgs____::38d7097854736583dde879d12dacafca' -- Brown University ) )) foo; From dd70c32ad7ab3fccc38dd6c42c04b6ca2c6d15b1 Mon Sep 17 00:00:00 2001 From: dimitrispie Date: Thu, 12 Jan 2023 17:18:05 +0200 Subject: [PATCH 288/535] Bug fixes --- .../dhp/oa/graph/monitor/oozie_app/scripts/createMonitorDB.sql | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/dhp-workflows/dhp-monitor-update/src/main/resources/eu/dnetlib/dhp/oa/graph/monitor/oozie_app/scripts/createMonitorDB.sql b/dhp-workflows/dhp-monitor-update/src/main/resources/eu/dnetlib/dhp/oa/graph/monitor/oozie_app/scripts/createMonitorDB.sql index 7e1333f92..2eb95294a 100644 --- a/dhp-workflows/dhp-monitor-update/src/main/resources/eu/dnetlib/dhp/oa/graph/monitor/oozie_app/scripts/createMonitorDB.sql +++ b/dhp-workflows/dhp-monitor-update/src/main/resources/eu/dnetlib/dhp/oa/graph/monitor/oozie_app/scripts/createMonitorDB.sql @@ -2,7 +2,7 @@ DROP TABLE IF EXISTS TARGET.result_new; create table TARGET.result_new stored as parquet as select distinct * from ( - select * from result r where exists (select 1 from result_organization ro where ro.id=r.id and ro.organization in ( + select * from SOURCE.result r where exists (select 1 from SOURCE.result_organization ro where ro.id=r.id and ro.organization in ( -- 'openorgs____::b8b8ca674452579f3f593d9f5e557483', -- University College Cork 'openorgs____::38d7097854736583dde879d12dacafca' -- Brown University ) )) foo; From 4d7553c9f1df96349a00f682d2348423b8a28db8 Mon Sep 17 00:00:00 2001 From: dimitrispie Date: Thu, 12 Jan 2023 17:19:19 +0200 Subject: [PATCH 289/535] Bug fixes --- .../oa/graph/monitor/oozie_app/scripts/createMonitorDB.sql | 4 ---- 1 file changed, 4 deletions(-) diff --git a/dhp-workflows/dhp-monitor-update/src/main/resources/eu/dnetlib/dhp/oa/graph/monitor/oozie_app/scripts/createMonitorDB.sql b/dhp-workflows/dhp-monitor-update/src/main/resources/eu/dnetlib/dhp/oa/graph/monitor/oozie_app/scripts/createMonitorDB.sql index 7a27b0ea5..63085e7a1 100644 --- a/dhp-workflows/dhp-monitor-update/src/main/resources/eu/dnetlib/dhp/oa/graph/monitor/oozie_app/scripts/createMonitorDB.sql +++ b/dhp-workflows/dhp-monitor-update/src/main/resources/eu/dnetlib/dhp/oa/graph/monitor/oozie_app/scripts/createMonitorDB.sql @@ -2,10 +2,6 @@ DROP TABLE IF EXISTS TARGET.result_new; create table TARGET.result_new 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____::b8b8ca674452579f3f593d9f5e557483', -- University College Cork 'openorgs____::38d7097854736583dde879d12dacafca' -- Brown University From ecd398fe51cefa9a7f55ff4695cf4ce03c4a4138 Mon Sep 17 00:00:00 2001 From: "miriam.baglioni" Date: Fri, 20 Jan 2023 14:23:45 +0100 Subject: [PATCH 290/535] refactoring --- .../src/main/java/eu/dnetlib/dhp/PropagationConstant.java | 6 +++--- .../resources/eu/dnetlib/dhp/bulktag/oozie_app/workflow.xml | 2 +- 2 files changed, 4 insertions(+), 4 deletions(-) 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 36361a09e..2139a7a75 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 @@ -231,9 +231,9 @@ public class PropagationConstant { if (HdfsSupport.exists(inputPath, spark.sparkContext().hadoopConfiguration())) { return spark - .read() - .textFile(inputPath) - .map((MapFunction) value -> OBJECT_MAPPER.readValue(value, clazz), Encoders.bean(clazz)); + .read() + .textFile(inputPath) + .map((MapFunction) value -> OBJECT_MAPPER.readValue(value, clazz), Encoders.bean(clazz)); } else { return spark.emptyDataset(Encoders.bean(clazz)); } 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 9c1bbdf72..d8f1946bb 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 @@ -219,7 +219,7 @@ - + From 505867bce9c0abfd3d387ac3e0c117634ffff8d8 Mon Sep 17 00:00:00 2001 From: Claudio Atzori Date: Fri, 20 Jan 2023 16:11:26 +0100 Subject: [PATCH 291/535] [bulk tagging] better node naming --- .../dhp/bulktag/oozie_app/workflow.xml | 24 +++++++++---------- 1 file changed, 12 insertions(+), 12 deletions(-) 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 9c1bbdf72..08a507c89 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 @@ -105,13 +105,13 @@ - - - - + + + + - + yarn-cluster cluster @@ -138,7 +138,7 @@ - + yarn-cluster cluster @@ -165,7 +165,7 @@ - + yarn-cluster cluster @@ -192,7 +192,7 @@ - + yarn-cluster cluster @@ -269,7 +269,7 @@ yarn-cluster cluster - EOSC_tagging + EOSC tagging publication eu.dnetlib.dhp.bulktag.eosc.SparkEoscBulkTag dhp-enrichment-${projectVersion}.jar @@ -295,7 +295,7 @@ yarn-cluster cluster - EOSC_tagging + EOSC tagging dataset eu.dnetlib.dhp.bulktag.eosc.SparkEoscBulkTag dhp-enrichment-${projectVersion}.jar @@ -320,7 +320,7 @@ yarn-cluster cluster - EOSC_tagging + EOSC tagging software eu.dnetlib.dhp.bulktag.eosc.SparkEoscBulkTag dhp-enrichment-${projectVersion}.jar @@ -345,7 +345,7 @@ yarn-cluster cluster - EOSC_tagging + EOSC tagging ORP eu.dnetlib.dhp.bulktag.eosc.SparkEoscBulkTag dhp-enrichment-${projectVersion}.jar From db7d625ba9b436060e8be56452215945d80efca6 Mon Sep 17 00:00:00 2001 From: dimitrispie Date: Wed, 25 Jan 2023 12:22:21 +0200 Subject: [PATCH 292/535] =?UTF-8?q?Addedd=20Arts=20et=20M=C3=A9tiers=20Par?= =?UTF-8?q?isTech=20organization?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../eu/dnetlib/dhp/oa/graph/monitor/oozie_app/monitor.sh | 2 +- .../oa/graph/monitor/oozie_app/scripts/createMonitorDB.sql | 6 ++++-- .../stats/oozie_app/scripts/step20-createMonitorDB.sql | 3 ++- 3 files changed, 7 insertions(+), 4 deletions(-) diff --git a/dhp-workflows/dhp-monitor-update/src/main/resources/eu/dnetlib/dhp/oa/graph/monitor/oozie_app/monitor.sh b/dhp-workflows/dhp-monitor-update/src/main/resources/eu/dnetlib/dhp/oa/graph/monitor/oozie_app/monitor.sh index 36cfcd325..10c1ed4ca 100644 --- a/dhp-workflows/dhp-monitor-update/src/main/resources/eu/dnetlib/dhp/oa/graph/monitor/oozie_app/monitor.sh +++ b/dhp-workflows/dhp-monitor-update/src/main/resources/eu/dnetlib/dhp/oa/graph/monitor/oozie_app/monitor.sh @@ -13,6 +13,6 @@ export SCRIPT_PATH=$3 echo "Getting file from " $3 hdfs dfs -copyToLocal $3 -echo "Creating monitor database" +echo "Updating monitor database" cat createMonitorDB.sql | sed s/SOURCE/$1/g | sed s/TARGET/$2/g1 | impala-shell -f - echo "Impala shell finished" diff --git a/dhp-workflows/dhp-monitor-update/src/main/resources/eu/dnetlib/dhp/oa/graph/monitor/oozie_app/scripts/createMonitorDB.sql b/dhp-workflows/dhp-monitor-update/src/main/resources/eu/dnetlib/dhp/oa/graph/monitor/oozie_app/scripts/createMonitorDB.sql index 2eb95294a..265610e90 100644 --- a/dhp-workflows/dhp-monitor-update/src/main/resources/eu/dnetlib/dhp/oa/graph/monitor/oozie_app/scripts/createMonitorDB.sql +++ b/dhp-workflows/dhp-monitor-update/src/main/resources/eu/dnetlib/dhp/oa/graph/monitor/oozie_app/scripts/createMonitorDB.sql @@ -1,15 +1,17 @@ DROP TABLE IF EXISTS TARGET.result_new; -create table TARGET.result_new stored as parquet as +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____::b8b8ca674452579f3f593d9f5e557483', -- University College Cork - 'openorgs____::38d7097854736583dde879d12dacafca' -- Brown University +-- 'openorgs____::38d7097854736583dde879d12dacafca' -- Brown University + 'openorgs____::57784c9e047e826fefdb1ef816120d92' --Arts et Métiers ParisTech ) )) foo; COMPUTE STATS TARGET.result_new; INSERT INTO TARGET.result select * from TARGET.result_new; +COMPUTE STATS TARGET.result; INSERT INTO TARGET.result_citations select * from TARGET.result_citations orig where exists (select 1 from TARGET.result_new r where r.id=orig.id); COMPUTE STATS TARGET.result_citations; 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 885f7e4f7..c6b7d8ae2 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 @@ -61,7 +61,8 @@ 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 ) )) foo; compute stats TARGET.result; From cf58e4a5e47d631811c6459241cdc03bea46684f Mon Sep 17 00:00:00 2001 From: dimitrispie Date: Wed, 25 Jan 2023 16:03:16 +0200 Subject: [PATCH 293/535] =?UTF-8?q?Added=20Arts=20et=20M=C3=A9tiers=20Pari?= =?UTF-8?q?sTech?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../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 195836480..6c0dd92f0 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 @@ -61,6 +61,8 @@ 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____::57784c9e047e826fefdb1ef816120d92' --Arts et Métiers ParisTech ) )) foo; ANALYZE TABLE TARGET.result COMPUTE STATISTICS; From b254a0375f415508e5f3541e75f39b965c80b5cd Mon Sep 17 00:00:00 2001 From: "miriam.baglioni" Date: Thu, 26 Jan 2023 16:51:20 +0100 Subject: [PATCH 294/535] [Affiliation from institutionalrepo] changed the field to check to verify the datasource type. Now it is in the field jurisdiction --- .../src/main/java/eu/dnetlib/dhp/PropagationConstant.java | 2 +- .../PrepareResultInstRepoAssociation.java | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) 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 2139a7a75..89bdf0982 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 @@ -44,7 +44,7 @@ public class PropagationConstant { public final static String NULL = "NULL"; - public static final String INSTITUTIONAL_REPO_TYPE = "pubsrepository::institutional"; + public static final String INSTITUTIONAL_REPO_TYPE = "institutional"; public static final String PROPAGATION_DATA_INFO_TYPE = "propagation"; 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 50ab997b6..1663afb32 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 @@ -102,7 +102,7 @@ public class PrepareResultInstRepoAssociation { String query = "SELECT source datasourceId, target organizationId " + "FROM ( SELECT id " + "FROM datasource " - + "WHERE datasourcetype.classid = '" + + "WHERE lower(jurisdiction.classid) = '" + INSTITUTIONAL_REPO_TYPE + "' " + "AND datainfo.deletedbyinference = false " + blacklisted + " ) d " From e82e009b46dff8449c3a62534aecef9ce1b0241a Mon Sep 17 00:00:00 2001 From: "miriam.baglioni" Date: Tue, 31 Jan 2023 10:19:34 +0100 Subject: [PATCH 295/535] added missing close tag for XML produced by the xquery to get information for the community from the IS --- .../src/main/resources/eu/dnetlib/dhp/bulktag/query.xq | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) 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 index 6fbd74c8f..a9c0d9e3f 100644 --- 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 @@ -55,4 +55,5 @@ return {$zc/param[./@name='selcriteria']/text()} } - \ No newline at end of file + + \ No newline at end of file From 6a6c266dde6f9097c82696c8011677955ac8e479 Mon Sep 17 00:00:00 2001 From: miconis Date: Tue, 31 Jan 2023 11:53:10 +0100 Subject: [PATCH 296/535] 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 973d78a4d64718dbeb16ca4857f99419bdfade18 Mon Sep 17 00:00:00 2001 From: dimitrispie Date: Thu, 2 Feb 2023 08:03:54 +0200 Subject: [PATCH 297/535] Update step15_5.sql Added unpaywalls open access colors --- .../dnetlib/dhp/oa/graph/stats/oozie_app/scripts/step15_5.sql | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) 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 584de0a56..753d61ca0 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 @@ -39,7 +39,7 @@ create view ${stats_db_name}.hrrst as select * from stats_ext.hrrst; create table ${stats_db_name}.result_instance stored as parquet as select distinct r.* from ( - select substr(r.id, 4) as id, inst.accessright.classname as accessright, substr(inst.collectedfrom.key, 4) as collectedfrom, + select substr(r.id, 4) as id, inst.accessright.classname as accessright, inst.accessright.openaccessroute as accessright_uw, substr(inst.collectedfrom.key, 4) as collectedfrom, substr(inst.hostedby.key, 4) as hostedby, inst.dateofacceptance.value as dateofacceptance, inst.license.value as license, p.qualifier.classname as pidtype, p.value as pid 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; From 2dc6d47270072c061b4cb36a070bd5dd29ad8a8d Mon Sep 17 00:00:00 2001 From: dimitrispie Date: Mon, 6 Feb 2023 13:18:53 +0200 Subject: [PATCH 298/535] Changes 06022023 --- .../oozie_app/copyDataToImpalaCluster.sh | 10 +- .../stats/oozie_app/finalizeImpalaCluster.sh | 5 +- .../oa/graph/stats/oozie_app/finalizedb.sh | 7 +- .../oa/graph/stats/oozie_app/indicators.sh | 2 +- .../dhp/oa/graph/stats/oozie_app/monitor.sh | 5 +- .../graph/stats/oozie_app/observatory-post.sh | 7 +- .../graph/stats/oozie_app/observatory-pre.sh | 5 +- .../scripts/step20-createMonitorDB.sql | 6 +- .../dhp/oa/graph/stats/oozie_app/workflow.xml | 155 +++++++++++------- 9 files changed, 127 insertions(+), 75 deletions(-) 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 9846eb66a..4a3010867 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,13 +6,16 @@ then ln -sfn ${PYTHON_EGG_CACHE}${link_folder} ${link_folder} fi +#export HADOOP_USER_NAME="dimitris.pierrakos" +export HADOOP_USER_NAME=$4 + function copydb() { db=$1 # 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-mn2.openaire.eu:8020/tmp + hadoop distcp -Dmapreduce.map.memory.mb=6144 -pb hdfs://nameservice1/user/hive/warehouse/${db}.db hdfs://impala-cluster-mn1.openaire.eu:8020/tmp # change ownership to impala hdfs dfs -conf /etc/impala_cluster/hdfs-site.xml -chmod -R 777 /tmp/${db}.db @@ -48,9 +51,10 @@ function copydb() { STATS_DB=$1 MONITOR_DB=$2 OBSERVATORY_DB=$3 -EXT_DB=$4 +HADOOP_USER_NAME=$4 +#EXT_DB=$4 -copydb $EXT_DB +#copydb $EXT_DB copydb $STATS_DB copydb $MONITOR_DB copydb $OBSERVATORY_DB 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 31107c7ed..fedfa00af 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 @@ -10,9 +10,10 @@ function createShadowDB() { SOURCE=$1 SHADOW=$2 + 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" | sed "s/\(.*\)/create view ${SHADOW}.\1 as select * from ${SOURCE}.\1;/" | impala-shell -i impala-cluster-dn1.openaire.eu -f - +# 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 - } STATS_DB=$1 diff --git a/dhp-workflows/dhp-stats-update/src/main/resources/eu/dnetlib/dhp/oa/graph/stats/oozie_app/finalizedb.sh b/dhp-workflows/dhp-stats-update/src/main/resources/eu/dnetlib/dhp/oa/graph/stats/oozie_app/finalizedb.sh index 011cfcc28..5863625a1 100644 --- a/dhp-workflows/dhp-stats-update/src/main/resources/eu/dnetlib/dhp/oa/graph/stats/oozie_app/finalizedb.sh +++ b/dhp-workflows/dhp-stats-update/src/main/resources/eu/dnetlib/dhp/oa/graph/stats/oozie_app/finalizedb.sh @@ -12,5 +12,8 @@ export HIVE_OPTS="-hiveconf mapred.job.queue.name=analytics -hiveconf hive.spark export HADOOP_USER_NAME="oozie" echo "Updating shadow database" -hive $HIVE_OPTS --database ${SOURCE} -e "show tables" | grep -v WARN | sed "s/^\(.*\)/analyze table ${SOURCE}.\1 compute statistics;/" > foo -hive $HIVE_OPTS -f foo \ No newline at end of file +hive -e "drop database if exists ${SHADOW} cascade" +hive -e "create database if not exists ${SHADOW}" +hive $HIVE_OPTS --database ${SOURCE} -e "show tables" | grep -v WARN | sed "s/\(.*\)/create view ${SHADOW}.\1 as select * from ${SOURCE}.\1;/" > foo +hive -f foo +echo "Updated shadow database" \ 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/indicators.sh b/dhp-workflows/dhp-stats-update/src/main/resources/eu/dnetlib/dhp/oa/graph/stats/oozie_app/indicators.sh index 6c76e35f2..473864315 100644 --- a/dhp-workflows/dhp-stats-update/src/main/resources/eu/dnetlib/dhp/oa/graph/stats/oozie_app/indicators.sh +++ b/dhp-workflows/dhp-stats-update/src/main/resources/eu/dnetlib/dhp/oa/graph/stats/oozie_app/indicators.sh @@ -8,7 +8,7 @@ fi export TARGET=$1 export SCRIPT_PATH=$2 -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 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 -hiveconf hive.auto.convert.join=false" export HADOOP_USER_NAME="oozie" echo "Getting file from " $SCRIPT_PATH 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 25095f4d3..db0aa3485 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 @@ -17,9 +17,8 @@ export HADOOP_USER_NAME="oozie" echo "Getting file from " $SCRIPT_PATH hdfs dfs -copyToLocal $SCRIPT_PATH - echo "Creating monitor database" #cat step20-createMonitorDB.sql | sed s/SOURCE/$1/g | sed s/TARGET/$2/g1 > foo -cat step20-createMonitorDB.sql | sed "s/TARGET/${TARGET}/g" | sed "s/SOURCE/${SOURCE}/g" > foo +cat step20-createMonitorDB.sql | sed "s/TARGET/${TARGET}/g" | sed "s/SOURCE/${SOURCE}/g1" > foo hive $HIVE_OPTS -f foo -echo "Hive shell finished" +echo "Hive shell finished" \ 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/observatory-post.sh b/dhp-workflows/dhp-stats-update/src/main/resources/eu/dnetlib/dhp/oa/graph/stats/oozie_app/observatory-post.sh index fafafe59a..a7412ceee 100644 --- a/dhp-workflows/dhp-stats-update/src/main/resources/eu/dnetlib/dhp/oa/graph/stats/oozie_app/observatory-post.sh +++ b/dhp-workflows/dhp-stats-update/src/main/resources/eu/dnetlib/dhp/oa/graph/stats/oozie_app/observatory-post.sh @@ -10,6 +10,9 @@ export SOURCE=$1 export TARGET=$2 export SHADOW=$3 -hive --database ${TARGET} -e "show tables" | grep -v WARN | sed "s/\(.*\)/analyze table ${TARGET}.\1 compute statistics;/" > foo -hive -f foo +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" + +hive $HIVE_OPTS --database ${TARGET} -e "show tables" | grep -v WARN | sed "s/\(.*\)/analyze table ${TARGET}.\1 compute statistics;/" > foo +hive $HIVE_OPTS -f foo echo "Hive shell finished" diff --git a/dhp-workflows/dhp-stats-update/src/main/resources/eu/dnetlib/dhp/oa/graph/stats/oozie_app/observatory-pre.sh b/dhp-workflows/dhp-stats-update/src/main/resources/eu/dnetlib/dhp/oa/graph/stats/oozie_app/observatory-pre.sh index be009cd45..37671cce8 100644 --- a/dhp-workflows/dhp-stats-update/src/main/resources/eu/dnetlib/dhp/oa/graph/stats/oozie_app/observatory-pre.sh +++ b/dhp-workflows/dhp-stats-update/src/main/resources/eu/dnetlib/dhp/oa/graph/stats/oozie_app/observatory-pre.sh @@ -10,8 +10,11 @@ export SOURCE=$1 export TARGET=$2 export SHADOW=$3 +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 "Creating observatory database" hive -e "drop database if exists ${TARGET} cascade" hive -e "create database if not exists ${TARGET}" -hive --database ${SOURCE} -e "show tables" | grep -v WARN | grep -iv roar | sed "s/\(.*\)/create view ${TARGET}.\1 as select * from ${SOURCE}.\1;/" > foo +hive $HIVE_OPTS --database ${SOURCE} -e "show tables" | grep -v WARN | grep -iv roar | sed "s/\(.*\)/create view ${TARGET}.\1 as select * from ${SOURCE}.\1;/" > foo hive -f foo 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 6c0dd92f0..b545ee637 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 @@ -60,9 +60,9 @@ create table TARGET.result stored as parquet as '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____::b8b8ca674452579f3f593d9f5e557483', -- University College Cork + 'openorgs____::38d7097854736583dde879d12dacafca' -- Brown University +-- 'openorgs____::57784c9e047e826fefdb1ef816120d92' --Arts et Métiers ParisTech ) )) foo; ANALYZE TABLE TARGET.result COMPUTE STATISTICS; 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 9976b8455..80a353cc9 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 @@ -1,4 +1,4 @@ - + stats_db_name @@ -53,6 +53,10 @@ context_api_url the base url of the context api (https://services.openaire.eu/openaire) + + hadoop_user_name + user name of the wf owner + @@ -74,7 +78,40 @@ - + + + + + ${wf:conf('resumeFrom') eq 'Step1'} + ${wf:conf('resumeFrom') eq 'Step2'} + ${wf:conf('resumeFrom') eq 'Step3'} + ${wf:conf('resumeFrom') eq 'Step4'} + ${wf:conf('resumeFrom') eq 'Step5'} + ${wf:conf('resumeFrom') eq 'Step6'} + ${wf:conf('resumeFrom') eq 'Step7'} + ${wf:conf('resumeFrom') eq 'Step8'} + ${wf:conf('resumeFrom') eq 'Step9'} + ${wf:conf('resumeFrom') eq 'Step10'} + ${wf:conf('resumeFrom') eq 'Step11'} + ${wf:conf('resumeFrom') eq 'Step12'} + ${wf:conf('resumeFrom') eq 'Step13'} + ${wf:conf('resumeFrom') eq 'Step14'} + ${wf:conf('resumeFrom') eq 'Step15'} + ${wf:conf('resumeFrom') eq 'Step15_5'} + ${wf:conf('resumeFrom') eq 'Contexts'} + ${wf:conf('resumeFrom') eq 'Step16-createIndicatorsTables'} + ${wf:conf('resumeFrom') eq 'Step16_1-definitions'} + ${wf:conf('resumeFrom') eq 'Step16_5'} + ${wf:conf('resumeFrom') eq 'Step19-finalize'} + ${wf:conf('resumeFrom') eq 'step20-createMonitorDB'} + ${wf:conf('resumeFrom') eq 'step21-createObservatoryDB-pre'} + ${wf:conf('resumeFrom') eq 'step21-createObservatoryDB'} + ${wf:conf('resumeFrom') eq 'step21-createObservatoryDB-post'} + ${wf:conf('resumeFrom') eq 'step22-copyDataToImpalaCluster'} + ${wf:conf('resumeFrom') eq 'step23-finalizeImpalaCluster'} + + + Action failed, error message[${wf:errorMessage(wf:lastErrorNode())}] @@ -302,22 +339,22 @@ stats_db_name=${stats_db_name} openaire_db_name=${openaire_db_name} + + + + + + + ${jobTracker} + ${nameNode} + finalizedb.sh + ${stats_db_name} + ${stats_db_shadow_name} + finalizedb.sh + - - - - - - - - - - - - - @@ -355,55 +392,57 @@ stats_db_name=${stats_db_name} observatory_db_name=${observatory_db_name} - + - - - - - - - - - - - - - + + + ${jobTracker} + ${nameNode} + observatory-post.sh + ${stats_db_name} + ${observatory_db_name} + ${observatory_db_shadow_name} + observatory-post.sh + + + + - - - - - + + + ${jobTracker} + ${nameNode} + copyDataToImpalaCluster.sh + - - - - - - - - + ${stats_db_name} + ${monitor_db_name} + ${observatory_db_name} + ${hadoop_user_name} + copyDataToImpalaCluster.sh + + + + - - - - - - - - - - - - - - - - + + + ${jobTracker} + ${nameNode} + finalizeImpalaCluster.sh + ${stats_db_name} + ${stats_db_shadow_name} + ${monitor_db_name} + ${monitor_db_shadow_name} + ${observatory_db_name} + ${observatory_db_shadow_name} + finalizeImpalaCluster.sh + + + + From 98c34263ed54655ca028753552a496392198795d Mon Sep 17 00:00:00 2001 From: dimitrispie Date: Tue, 7 Feb 2023 08:14:48 +0200 Subject: [PATCH 299/535] Update step20-createMonitorDB.sql Add University of Cape Town organization --- .../graph/stats/oozie_app/scripts/step20-createMonitorDB.sql | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) 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 c6b7d8ae2..237f68fae 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 @@ -62,8 +62,9 @@ create table TARGET.result stored as parquet as 'openorgs____::db7686f30f22cbe73a4fde872ce812a6', -- University of Milan 'openorgs____::b8b8ca674452579f3f593d9f5e557483', -- University College Cork 'openorgs____::38d7097854736583dde879d12dacafca', -- Brown University - 'openorgs____::57784c9e047e826fefdb1ef816120d92' --Arts et Métiers ParisTech - ) )) foo; + 'openorgs____::57784c9e047e826fefdb1ef816120d92', --Arts et Métiers ParisTech + 'openorgs____::2530baca8a15936ba2e3297f2bce2e7e' -- University of Cape Town + ))) foo; compute stats TARGET.result; 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); From 3ba11d64a18a936d3f82bf363498561091add89e Mon Sep 17 00:00:00 2001 From: dimitrispie Date: Tue, 7 Feb 2023 12:53:51 +0200 Subject: [PATCH 300/535] Changes 07022023 --- .../graph/stats/oozie_app/scripts/step20-createMonitorDB.sql | 3 ++- .../eu/dnetlib/dhp/oa/graph/stats/oozie_app/workflow.xml | 1 - 2 files changed, 2 insertions(+), 2 deletions(-) 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 b545ee637..02c798a8d 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 @@ -62,7 +62,8 @@ create table TARGET.result stored as parquet as 'openorgs____::db7686f30f22cbe73a4fde872ce812a6', -- University of Milan 'openorgs____::b8b8ca674452579f3f593d9f5e557483', -- University College Cork 'openorgs____::38d7097854736583dde879d12dacafca' -- Brown University --- 'openorgs____::57784c9e047e826fefdb1ef816120d92' --Arts et Métiers ParisTech + 'openorgs____::57784c9e047e826fefdb1ef816120d92', --Arts et Métiers ParisTech + 'openorgs____::b8b8ca674452579f3f593d9f5e557483' -- University College Cork ) )) foo; ANALYZE TABLE TARGET.result COMPUTE STATISTICS; 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 80a353cc9..0ce429145 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 @@ -79,7 +79,6 @@ - ${wf:conf('resumeFrom') eq 'Step1'} From 0b9819f1ab4ad4f28f124e853ad793e601930ded Mon Sep 17 00:00:00 2001 From: Sandro La Bruzzo Date: Wed, 8 Feb 2023 10:32:33 +0100 Subject: [PATCH 301/535] Code formatted --- .../oaf/utils/GraphCleaningFunctions.java | 4 +-- .../ebi/SparkCreateBaselineDataFrame.scala | 3 +- .../dnetlib/dhp/sx/bio/BioScholixTest.scala | 32 ++++++++++++------- 3 files changed, 24 insertions(+), 15 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 b24daaa5d..fc515b5b1 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,6 +13,8 @@ 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.github.sisyphsu.dateparser.DateParserUtils; import com.google.common.collect.Lists; @@ -23,8 +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 org.apache.spark.api.java.function.MapFunction; -import org.apache.spark.sql.Encoders; public class GraphCleaningFunctions extends CleaningFunctions { 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 87116f00a..8ac8b00bf 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 @@ -27,7 +27,8 @@ object SparkCreateBaselineDataFrame { def requestBaseLineUpdatePage(maxFile: String): List[(String, String)] = { val data = requestPage("https://ftp.ncbi.nlm.nih.gov/pubmed/updatefiles/") - val result = data.linesWithSeparators.map(l =>l.stripLineEnd) + val result = data.linesWithSeparators + .map(l => l.stripLineEnd) .filter(l => l.startsWith("") diff --git a/dhp-workflows/dhp-aggregation/src/test/scala/eu/dnetlib/dhp/sx/bio/BioScholixTest.scala b/dhp-workflows/dhp-aggregation/src/test/scala/eu/dnetlib/dhp/sx/bio/BioScholixTest.scala index 24caaa553..d1611300d 100644 --- a/dhp-workflows/dhp-aggregation/src/test/scala/eu/dnetlib/dhp/sx/bio/BioScholixTest.scala +++ b/dhp-workflows/dhp-aggregation/src/test/scala/eu/dnetlib/dhp/sx/bio/BioScholixTest.scala @@ -63,7 +63,9 @@ class BioScholixTest extends AbstractVocabularyTest { val records: String = Source .fromInputStream(getClass.getResourceAsStream("/eu/dnetlib/dhp/sx/graph/bio/pubmed_dump")) .mkString - val r: List[Oaf] = records.linesWithSeparators.map(l =>l.stripLineEnd).toList + val r: List[Oaf] = records.linesWithSeparators + .map(l => l.stripLineEnd) + .toList .map(s => mapper.readValue(s, classOf[PMArticle])) .map(a => PubMedToOaf.convert(a, vocabularies)) assertEquals(10, r.size) @@ -173,9 +175,10 @@ class BioScholixTest extends AbstractVocabularyTest { val records: String = Source .fromInputStream(getClass.getResourceAsStream("/eu/dnetlib/dhp/sx/graph/bio/pdb_dump")) .mkString - records.linesWithSeparators.map(l =>l.stripLineEnd).foreach(s => assertTrue(s.nonEmpty)) + records.linesWithSeparators.map(l => l.stripLineEnd).foreach(s => assertTrue(s.nonEmpty)) - val result: List[Oaf] = records.linesWithSeparators.map(l =>l.stripLineEnd).toList.flatMap(o => BioDBToOAF.pdbTOOaf(o)) + val result: List[Oaf] = + records.linesWithSeparators.map(l => l.stripLineEnd).toList.flatMap(o => BioDBToOAF.pdbTOOaf(o)) assertTrue(result.nonEmpty) result.foreach(r => assertNotNull(r)) @@ -194,9 +197,10 @@ class BioScholixTest extends AbstractVocabularyTest { val records: String = Source .fromInputStream(getClass.getResourceAsStream("/eu/dnetlib/dhp/sx/graph/bio/uniprot_dump")) .mkString - records.linesWithSeparators.map(l =>l.stripLineEnd).foreach(s => assertTrue(s.nonEmpty)) + records.linesWithSeparators.map(l => l.stripLineEnd).foreach(s => assertTrue(s.nonEmpty)) - val result: List[Oaf] = records.linesWithSeparators.map(l =>l.stripLineEnd).toList.flatMap(o => BioDBToOAF.uniprotToOAF(o)) + val result: List[Oaf] = + records.linesWithSeparators.map(l => l.stripLineEnd).toList.flatMap(o => BioDBToOAF.uniprotToOAF(o)) assertTrue(result.nonEmpty) result.foreach(r => assertNotNull(r)) @@ -239,9 +243,10 @@ class BioScholixTest extends AbstractVocabularyTest { val records: String = Source .fromInputStream(getClass.getResourceAsStream("/eu/dnetlib/dhp/sx/graph/bio/crossref_links")) .mkString - records.linesWithSeparators.map(l =>l.stripLineEnd).foreach(s => assertTrue(s.nonEmpty)) + records.linesWithSeparators.map(l => l.stripLineEnd).foreach(s => assertTrue(s.nonEmpty)) - val result: List[Oaf] = records.linesWithSeparators.map(l =>l.stripLineEnd).map(s => BioDBToOAF.crossrefLinksToOaf(s)).toList + val result: List[Oaf] = + records.linesWithSeparators.map(l => l.stripLineEnd).map(s => BioDBToOAF.crossrefLinksToOaf(s)).toList assertNotNull(result) assertTrue(result.nonEmpty) @@ -276,14 +281,17 @@ class BioScholixTest extends AbstractVocabularyTest { getClass.getResourceAsStream("/eu/dnetlib/dhp/sx/graph/bio/scholix_resolved") ) .mkString - records.linesWithSeparators.map(l =>l.stripLineEnd).foreach(s => assertTrue(s.nonEmpty)) + records.linesWithSeparators.map(l => l.stripLineEnd).foreach(s => assertTrue(s.nonEmpty)) implicit lazy val formats: DefaultFormats.type = org.json4s.DefaultFormats - val l: List[ScholixResolved] = records.linesWithSeparators.map(l =>l.stripLineEnd).map { input => - lazy val json = parse(input) - json.extract[ScholixResolved] - }.toList + val l: List[ScholixResolved] = records.linesWithSeparators + .map(l => l.stripLineEnd) + .map { input => + lazy val json = parse(input) + json.extract[ScholixResolved] + } + .toList val result: List[Oaf] = l.map(s => BioDBToOAF.scholixResolvedToOAF(s)) From 8920932dd8a9428f1875451069154267733e33e5 Mon Sep 17 00:00:00 2001 From: Sandro La Bruzzo Date: Wed, 8 Feb 2023 11:34:18 +0100 Subject: [PATCH 302/535] Code formatted --- .../crossref/CrossrefMappingTest.scala | 4 +- .../orcid/MappingORCIDToOAFTest.scala | 8 ++-- .../doiboost/uw/UnpayWallMappingTest.scala | 4 +- .../raw/MigrateMongoMdstoresApplication.java | 4 +- .../dhp/oa/graph/clean/CleanCountryTest.java | 41 +++++++++---------- .../resolution/ResolveEntitiesTest.scala | 8 ++-- .../sx/graph/scholix/ScholixGraphTest.scala | 5 ++- 7 files changed, 39 insertions(+), 35 deletions(-) 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 aba8cee12..12a61454d 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 @@ -31,13 +31,13 @@ class CrossrefMappingTest { .fromInputStream(getClass.getResourceAsStream("/eu/dnetlib/doiboost/crossref/funder_doi")) .mkString - for (line <- funder_doi.linesWithSeparators.map(l =>l.stripLineEnd)) { + for (line <- funder_doi.linesWithSeparators.map(l => l.stripLineEnd)) { val json = template.replace("%s", line) val resultList: List[Oaf] = Crossref2Oaf.convert(json) assertTrue(resultList.nonEmpty) checkRelation(resultList) } - for (line <- funder_name.linesWithSeparators.map(l =>l.stripLineEnd)) { + for (line <- funder_name.linesWithSeparators.map(l => l.stripLineEnd)) { val json = template.replace("%s", line) val resultList: List[Oaf] = Crossref2Oaf.convert(json) assertTrue(resultList.nonEmpty) diff --git a/dhp-workflows/dhp-doiboost/src/test/scala/eu/dnetlib/dhp/doiboost/orcid/MappingORCIDToOAFTest.scala b/dhp-workflows/dhp-doiboost/src/test/scala/eu/dnetlib/dhp/doiboost/orcid/MappingORCIDToOAFTest.scala index d7a6a94a5..8033f02fb 100644 --- a/dhp-workflows/dhp-doiboost/src/test/scala/eu/dnetlib/dhp/doiboost/orcid/MappingORCIDToOAFTest.scala +++ b/dhp-workflows/dhp-doiboost/src/test/scala/eu/dnetlib/dhp/doiboost/orcid/MappingORCIDToOAFTest.scala @@ -25,9 +25,11 @@ class MappingORCIDToOAFTest { .mkString assertNotNull(json) assertFalse(json.isEmpty) - json.linesWithSeparators.map(l =>l.stripLineEnd).foreach(s => { - assertNotNull(ORCIDToOAF.extractValueFromInputString(s)) - }) + json.linesWithSeparators + .map(l => l.stripLineEnd) + .foreach(s => { + assertNotNull(ORCIDToOAF.extractValueFromInputString(s)) + }) } @Test diff --git a/dhp-workflows/dhp-doiboost/src/test/scala/eu/dnetlib/dhp/doiboost/uw/UnpayWallMappingTest.scala b/dhp-workflows/dhp-doiboost/src/test/scala/eu/dnetlib/dhp/doiboost/uw/UnpayWallMappingTest.scala index 7fe0e9935..30001acb5 100644 --- a/dhp-workflows/dhp-doiboost/src/test/scala/eu/dnetlib/dhp/doiboost/uw/UnpayWallMappingTest.scala +++ b/dhp-workflows/dhp-doiboost/src/test/scala/eu/dnetlib/dhp/doiboost/uw/UnpayWallMappingTest.scala @@ -22,7 +22,7 @@ class UnpayWallMappingTest { .mkString var i: Int = 0 - for (line <- Ilist.linesWithSeparators.map(l =>l.stripLineEnd)) { + for (line <- Ilist.linesWithSeparators.map(l => l.stripLineEnd)) { val p = UnpayWallToOAF.convertToOAF(line) if (p != null) { @@ -43,7 +43,7 @@ class UnpayWallMappingTest { i = i + 1 } - val l = Ilist.linesWithSeparators.map(l =>l.stripLineEnd).next() + val l = Ilist.linesWithSeparators.map(l => l.stripLineEnd).next() val item = UnpayWallToOAF.convertToOAF(l) diff --git a/dhp-workflows/dhp-graph-mapper/src/main/java/eu/dnetlib/dhp/oa/graph/raw/MigrateMongoMdstoresApplication.java b/dhp-workflows/dhp-graph-mapper/src/main/java/eu/dnetlib/dhp/oa/graph/raw/MigrateMongoMdstoresApplication.java index 0c8903672..4949cc627 100644 --- a/dhp-workflows/dhp-graph-mapper/src/main/java/eu/dnetlib/dhp/oa/graph/raw/MigrateMongoMdstoresApplication.java +++ b/dhp-workflows/dhp-graph-mapper/src/main/java/eu/dnetlib/dhp/oa/graph/raw/MigrateMongoMdstoresApplication.java @@ -114,7 +114,7 @@ public class MigrateMongoMdstoresApplication extends AbstractMigrationApplicatio } /** - * This method is responsible to synch only the mongoMDStore that changed since last time + * This method is responsible to sync only the stores that have been changed since last time * @param mdFormat the MDStore's format * @param mdLayout the MDStore'slayout * @param mdInterpretation the MDStore's interpretation @@ -164,7 +164,7 @@ public class MigrateMongoMdstoresApplication extends AbstractMigrationApplicatio } /** - *This methos store into hdfs all the mongo record of a single mdstore + *This method store into hdfs all the MONGO record of a single mdstore into the HDFS File * * @param mdFormat the MDStore's format * @param mdLayout the MDStore'slayout diff --git a/dhp-workflows/dhp-graph-mapper/src/test/java/eu/dnetlib/dhp/oa/graph/clean/CleanCountryTest.java b/dhp-workflows/dhp-graph-mapper/src/test/java/eu/dnetlib/dhp/oa/graph/clean/CleanCountryTest.java index de9e4fc90..3bc69cfd1 100644 --- a/dhp-workflows/dhp-graph-mapper/src/test/java/eu/dnetlib/dhp/oa/graph/clean/CleanCountryTest.java +++ b/dhp-workflows/dhp-graph-mapper/src/test/java/eu/dnetlib/dhp/oa/graph/clean/CleanCountryTest.java @@ -5,7 +5,6 @@ import java.io.IOException; import java.nio.file.Files; import java.nio.file.Path; -import eu.dnetlib.dhp.schema.oaf.Dataset; import org.apache.commons.io.FileUtils; import org.apache.spark.SparkConf; import org.apache.spark.api.java.JavaRDD; @@ -27,6 +26,7 @@ import org.slf4j.LoggerFactory; import com.fasterxml.jackson.databind.ObjectMapper; import eu.dnetlib.dhp.oa.graph.clean.country.CleanCountrySparkJob; +import eu.dnetlib.dhp.schema.oaf.Dataset; import eu.dnetlib.dhp.schema.oaf.Publication; public class CleanCountryTest { @@ -151,41 +151,40 @@ public class CleanCountryTest { @Test public void testDatasetClean() throws Exception { final String sourcePath = getClass() - .getResource("/eu/dnetlib/dhp/oa/graph/clean/dataset_clean_country.json") - .getPath(); + .getResource("/eu/dnetlib/dhp/oa/graph/clean/dataset_clean_country.json") + .getPath(); spark - .read() - .textFile(sourcePath) - .map( - (MapFunction) r -> OBJECT_MAPPER.readValue(r, Dataset.class), - Encoders.bean(Dataset.class)) - .write() - .json(workingDir.toString() + "/dataset"); + .read() + .textFile(sourcePath) + .map( + (MapFunction) r -> OBJECT_MAPPER.readValue(r, Dataset.class), + Encoders.bean(Dataset.class)) + .write() + .json(workingDir.toString() + "/dataset"); CleanCountrySparkJob.main(new String[] { - "--isSparkSessionManaged", Boolean.FALSE.toString(), - "--inputPath", workingDir.toString() + "/dataset", - "-graphTableClassName", Dataset.class.getCanonicalName(), - "-workingDir", workingDir.toString() + "/working", - "-country", "NL", - "-verifyParam", "10.17632", - "-collectedfrom", "NARCIS", - "-hostedBy", getClass() + "--isSparkSessionManaged", Boolean.FALSE.toString(), + "--inputPath", workingDir.toString() + "/dataset", + "-graphTableClassName", Dataset.class.getCanonicalName(), + "-workingDir", workingDir.toString() + "/working", + "-country", "NL", + "-verifyParam", "10.17632", + "-collectedfrom", "NARCIS", + "-hostedBy", getClass() .getResource("/eu/dnetlib/dhp/oa/graph/clean/hostedBy") .getPath() }); 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(1, tmp.count()); Assertions.assertEquals(0, tmp.first().getCountry().size()); - } } diff --git a/dhp-workflows/dhp-graph-mapper/src/test/scala/eu/dnetlib/dhp/oa/graph/resolution/ResolveEntitiesTest.scala b/dhp-workflows/dhp-graph-mapper/src/test/scala/eu/dnetlib/dhp/oa/graph/resolution/ResolveEntitiesTest.scala index d415b7fc9..022168de5 100644 --- a/dhp-workflows/dhp-graph-mapper/src/test/scala/eu/dnetlib/dhp/oa/graph/resolution/ResolveEntitiesTest.scala +++ b/dhp-workflows/dhp-graph-mapper/src/test/scala/eu/dnetlib/dhp/oa/graph/resolution/ResolveEntitiesTest.scala @@ -53,7 +53,8 @@ class ResolveEntitiesTest extends Serializable { def generateUpdates(spark: SparkSession): Unit = { val template = Source.fromInputStream(this.getClass.getResourceAsStream("updates")).mkString - val pids: List[String] = template.linesWithSeparators.map(l =>l.stripLineEnd) + val pids: List[String] = template.linesWithSeparators + .map(l => l.stripLineEnd) .map { id => val r = new Result r.setId(id.toLowerCase.trim) @@ -127,7 +128,7 @@ class ResolveEntitiesTest extends Serializable { entities.foreach { e => val template = Source.fromInputStream(this.getClass.getResourceAsStream(s"$e")).mkString spark - .createDataset(spark.sparkContext.parallelize(template.linesWithSeparators.map(l =>l.stripLineEnd).toList)) + .createDataset(spark.sparkContext.parallelize(template.linesWithSeparators.map(l => l.stripLineEnd).toList)) .as[String] .write .option("compression", "gzip") @@ -264,7 +265,8 @@ class ResolveEntitiesTest extends Serializable { Source .fromInputStream(this.getClass.getResourceAsStream(s"publication")) .mkString - .linesWithSeparators.map(l =>l.stripLineEnd) + .linesWithSeparators + .map(l => l.stripLineEnd) .next(), classOf[Publication] ) diff --git a/dhp-workflows/dhp-graph-mapper/src/test/scala/eu/dnetlib/dhp/sx/graph/scholix/ScholixGraphTest.scala b/dhp-workflows/dhp-graph-mapper/src/test/scala/eu/dnetlib/dhp/sx/graph/scholix/ScholixGraphTest.scala index 0ea908290..b838ae065 100644 --- a/dhp-workflows/dhp-graph-mapper/src/test/scala/eu/dnetlib/dhp/sx/graph/scholix/ScholixGraphTest.scala +++ b/dhp-workflows/dhp-graph-mapper/src/test/scala/eu/dnetlib/dhp/sx/graph/scholix/ScholixGraphTest.scala @@ -47,7 +47,7 @@ class ScholixGraphTest extends AbstractVocabularyTest { val inputRelations = Source .fromInputStream(getClass.getResourceAsStream("/eu/dnetlib/dhp/sx/graph/oaf_to_summary")) .mkString - val items = inputRelations.linesWithSeparators.map(l =>l.stripLineEnd).toList + val items = inputRelations.linesWithSeparators.map(l => l.stripLineEnd).toList assertNotNull(items) items.foreach(i => assertTrue(i.nonEmpty)) val result = @@ -69,7 +69,8 @@ class ScholixGraphTest extends AbstractVocabularyTest { getClass.getResourceAsStream("/eu/dnetlib/dhp/sx/graph/merge_result_scholix") ) .mkString - val result: List[(Relation, ScholixSummary)] = inputRelations.linesWithSeparators.map(l =>l.stripLineEnd) + val result: List[(Relation, ScholixSummary)] = inputRelations.linesWithSeparators + .map(l => l.stripLineEnd) .sliding(2) .map(s => (s.head, s(1))) .map(p => (mapper.readValue(p._1, classOf[Relation]), mapper.readValue(p._2, classOf[ScholixSummary]))) From 35ba8bb32873147291c959da21422eddfa91f3f6 Mon Sep 17 00:00:00 2001 From: dimitrispie Date: Thu, 9 Feb 2023 12:57:57 +0200 Subject: [PATCH 303/535] Bug fixes --- .../dhp/oa/graph/stats/oozie_app/copyDataToImpalaCluster.sh | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) 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 4a3010867..b5209b04d 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 @@ -28,13 +28,13 @@ function copydb() { 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/^"//' | impala-shell -i impala-cluster-dn1.openaire.eu -c -f - + done | sed 's/"$/;/' | sed 's/^"//' | sed 's/[[:space:]]\date[[:space:]]/`date`/g' | impala-shell -i impala-cluster-dn1.openaire.eu -c -f - # run the same command twice because we may have failures in the first run (due to views pointing to the same db) 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/^"//' | impala-shell -i impala-cluster-dn1.openaire.eu -c -f - + done | sed 's/"$/;/' | sed 's/^"//' | sed 's/[[:space:]]\date[[:space:]]/`date`/g' | impala-shell -i impala-cluster-dn1.openaire.eu -c -f - # load the data from /tmp in the respective tables echo "copying data in tables and computing stats" From d71f5672d319f89e33e43693a5f109a5c5994a2f Mon Sep 17 00:00:00 2001 From: dimitrispie Date: Thu, 9 Feb 2023 13:44:14 +0200 Subject: [PATCH 304/535] Add monitor post step --- .../oa/graph/stats/oozie_app/monitor-post.sh | 19 +++++++++++++++++++ .../dhp/oa/graph/stats/oozie_app/monitor.sh | 3 ++- .../graph/stats/oozie_app/observatory-post.sh | 13 +++++++------ .../dhp/oa/graph/stats/oozie_app/workflow.xml | 15 ++++++++++++++- 4 files changed, 42 insertions(+), 8 deletions(-) create mode 100644 dhp-workflows/dhp-stats-update/src/main/resources/eu/dnetlib/dhp/oa/graph/stats/oozie_app/monitor-post.sh diff --git a/dhp-workflows/dhp-stats-update/src/main/resources/eu/dnetlib/dhp/oa/graph/stats/oozie_app/monitor-post.sh b/dhp-workflows/dhp-stats-update/src/main/resources/eu/dnetlib/dhp/oa/graph/stats/oozie_app/monitor-post.sh new file mode 100644 index 000000000..5863625a1 --- /dev/null +++ b/dhp-workflows/dhp-stats-update/src/main/resources/eu/dnetlib/dhp/oa/graph/stats/oozie_app/monitor-post.sh @@ -0,0 +1,19 @@ +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 SHADOW=$2 +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 "Updating shadow database" +hive -e "drop database if exists ${SHADOW} cascade" +hive -e "create database if not exists ${SHADOW}" +hive $HIVE_OPTS --database ${SOURCE} -e "show tables" | grep -v WARN | sed "s/\(.*\)/create view ${SHADOW}.\1 as select * from ${SOURCE}.\1;/" > foo +hive -f foo +echo "Updated shadow database" \ 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 db0aa3485..440aac770 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 @@ -21,4 +21,5 @@ echo "Creating monitor database" #cat step20-createMonitorDB.sql | sed s/SOURCE/$1/g | sed s/TARGET/$2/g1 > foo cat step20-createMonitorDB.sql | sed "s/TARGET/${TARGET}/g" | sed "s/SOURCE/${SOURCE}/g1" > foo hive $HIVE_OPTS -f foo -echo "Hive shell finished" \ No newline at end of file +echo "Hive shell finished" + diff --git a/dhp-workflows/dhp-stats-update/src/main/resources/eu/dnetlib/dhp/oa/graph/stats/oozie_app/observatory-post.sh b/dhp-workflows/dhp-stats-update/src/main/resources/eu/dnetlib/dhp/oa/graph/stats/oozie_app/observatory-post.sh index a7412ceee..5863625a1 100644 --- a/dhp-workflows/dhp-stats-update/src/main/resources/eu/dnetlib/dhp/oa/graph/stats/oozie_app/observatory-post.sh +++ b/dhp-workflows/dhp-stats-update/src/main/resources/eu/dnetlib/dhp/oa/graph/stats/oozie_app/observatory-post.sh @@ -7,12 +7,13 @@ then fi export SOURCE=$1 -export TARGET=$2 -export SHADOW=$3 - +export SHADOW=$2 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" -hive $HIVE_OPTS --database ${TARGET} -e "show tables" | grep -v WARN | sed "s/\(.*\)/analyze table ${TARGET}.\1 compute statistics;/" > foo -hive $HIVE_OPTS -f foo -echo "Hive shell finished" +echo "Updating shadow database" +hive -e "drop database if exists ${SHADOW} cascade" +hive -e "create database if not exists ${SHADOW}" +hive $HIVE_OPTS --database ${SOURCE} -e "show tables" | grep -v WARN | sed "s/\(.*\)/create view ${SHADOW}.\1 as select * from ${SOURCE}.\1;/" > foo +hive -f foo +echo "Updated shadow database" \ 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 0ce429145..5d2e3799e 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 @@ -366,6 +366,20 @@ ${wf:appPath()}/scripts/step20-createMonitorDB.sql monitor.sh + + + + + + + ${jobTracker} + ${nameNode} + monitor-post.sh + ${monitor_db_name} + ${monitor_db_shadow_name} + ${wf:appPath()}/scripts/step20-createMonitorDB.sql + monitor.sh + @@ -400,7 +414,6 @@ ${jobTracker} ${nameNode} observatory-post.sh - ${stats_db_name} ${observatory_db_name} ${observatory_db_shadow_name} observatory-post.sh From 85e53fad004386fe295751caebe43ad0b7777830 Mon Sep 17 00:00:00 2001 From: "miriam.baglioni" Date: Thu, 9 Feb 2023 18:59:45 +0100 Subject: [PATCH 305/535] [UsageCount] addition of usagecount for Projects and datasources. Extention of the action set created for the results with new entities for projects and datasources. Extention of the resource set and modification of the testing class --- .../usagestats/SparkAtomicActionUsageJob.java | 103 +++++++++++++----- .../usagestats/UsageStatsModel.java | 10 +- .../usagestats/oozie_app/workflow.xml | 2 +- .../SparkAtomicActionCountJobTest.java | 45 +++++--- .../dhp/actionmanager/usagestats/datasourceDb | 12 ++ .../dhp/actionmanager/usagestats/projectDb | 12 ++ .../dhp/actionmanager/usagestats/usageDb | 12 ++ .../dhp/actionmanager/usagestats/usagestatsdb | 12 -- pom.xml | 2 +- 9 files changed, 143 insertions(+), 67 deletions(-) create mode 100644 dhp-workflows/dhp-aggregation/src/test/resources/eu/dnetlib/dhp/actionmanager/usagestats/datasourceDb create mode 100644 dhp-workflows/dhp-aggregation/src/test/resources/eu/dnetlib/dhp/actionmanager/usagestats/projectDb create mode 100644 dhp-workflows/dhp-aggregation/src/test/resources/eu/dnetlib/dhp/actionmanager/usagestats/usageDb delete mode 100644 dhp-workflows/dhp-aggregation/src/test/resources/eu/dnetlib/dhp/actionmanager/usagestats/usagestatsdb 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 5f099b8f2..3dbda3788 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 @@ -9,6 +9,8 @@ import java.util.Arrays; import java.util.List; import java.util.Optional; +import eu.dnetlib.dhp.schema.common.MainEntityType; +import eu.dnetlib.dhp.schema.oaf.*; import org.apache.commons.io.IOUtils; import org.apache.hadoop.io.Text; import org.apache.hadoop.mapred.SequenceFileOutputFormat; @@ -28,9 +30,6 @@ 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.DataInfo; -import eu.dnetlib.dhp.schema.oaf.Measure; -import eu.dnetlib.dhp.schema.oaf.Result; import eu.dnetlib.dhp.schema.oaf.utils.OafMapperUtils; import scala.Tuple2; @@ -76,41 +75,37 @@ public class SparkAtomicActionUsageJob implements Serializable { isSparkSessionManaged, spark -> { removeOutputDir(spark, outputPath); - prepareResults(dbname, spark, workingPath); + prepareData(dbname, spark, workingPath + "/usageDb", "usage_stats"); + prepareData(dbname, spark, workingPath + "/projectDb", "project_stats"); + prepareData(dbname, spark, workingPath + "/datasourceDb", "datasource_stats"); writeActionSet(spark, workingPath, outputPath); }); } - public static void prepareResults(String db, SparkSession spark, String workingPath) { + private static void prepareData(String dbname, SparkSession spark, String workingPath, String tableName) { spark - .sql( - "Select result_id, downloads, views " + - "from " + db + ".usage_stats") - .as(Encoders.bean(UsageStatsModel.class)) - .write() - .mode(SaveMode.Overwrite) - .option("compression", "gzip") - .json(workingPath); + .sql( + "Select result_id, downloads, views " + + "from " + dbname + "." + tableName) + .as(Encoders.bean(UsageStatsModel.class)) + .write() + .mode(SaveMode.Overwrite) + .option("compression", "gzip") + .json(workingPath); } + + public static void writeActionSet(SparkSession spark, String inputPath, String outputPath) { - readPath(spark, inputPath, UsageStatsModel.class) - .groupByKey((MapFunction) us -> us.getResult_id(), Encoders.STRING()) - .mapGroups((MapGroupsFunction) (k, it) -> { - UsageStatsModel first = it.next(); - it.forEachRemaining(us -> { - first.setDownloads(first.getDownloads() + us.getDownloads()); - first.setViews(first.getViews() + us.getViews()); - }); - - Result res = new Result(); - res.setId("50|" + k); - - res.setMeasures(getMeasure(first.getDownloads(), first.getViews())); - return res; - }, Encoders.bean(Result.class)) - .toJavaRDD() - .map(p -> new AtomicAction(p.getClass(), p)) + getFinalIndicatorsResult(spark, inputPath+ "/usageDb"). + toJavaRDD(). + map(p -> new AtomicAction(p.getClass(),p)) + .union(getFinalIndicatorsProject(spark, inputPath + "/projectDb") + .toJavaRDD() + .map(p -> new AtomicAction(p.getClass(), p ))) + .union(getFinalIndicatorsDatasource(spark, inputPath + "/datasourceDb") + .toJavaRDD() + .map(p -> new AtomicAction(p.getClass(), p))) .mapToPair( aa -> new Tuple2<>(new Text(aa.getClazz().getCanonicalName()), new Text(OBJECT_MAPPER.writeValueAsString(aa)))) @@ -118,6 +113,54 @@ public class SparkAtomicActionUsageJob implements Serializable { } + private static Dataset getFinalIndicatorsResult(SparkSession spark, String inputPath) { + + return getUsageStatsModelDataset(spark, inputPath) + .map((MapFunction) usm -> { + Result r = new Result(); + r.setId("50|" + usm.getId()); + r.setMeasures(getMeasure(usm.getDownloads(), usm.getViews())); + return r; + }, Encoders.bean(Result.class)); + } + + private static Dataset getFinalIndicatorsProject(SparkSession spark, String inputPath) { + + return getUsageStatsModelDataset(spark, inputPath) + .map((MapFunction) usm -> { + Project r = new Project(); + r.setId("40|" + usm.getId()); + r.setMeasures(getMeasure(usm.getDownloads(), usm.getViews())); + return r; + }, Encoders.bean(Project.class)); + } + + private static Dataset getFinalIndicatorsDatasource(SparkSession spark, String inputPath) { + + return getUsageStatsModelDataset(spark, inputPath) + .map((MapFunction) usm -> { + Datasource r = new Datasource(); + r.setId("10|" + usm.getId()); + r.setMeasures(getMeasure(usm.getDownloads(), usm.getViews())); + return r; + }, Encoders.bean(Datasource.class)); + } + + private static Dataset getUsageStatsModelDataset(SparkSession spark, String inputPath) { + return readPath(spark, inputPath, UsageStatsModel.class) + .groupByKey((MapFunction) us -> us.getId(), Encoders.STRING()) + .mapGroups((MapGroupsFunction) (k, it) -> { + UsageStatsModel first = it.next(); + it.forEachRemaining(us -> { + first.setDownloads(first.getDownloads() + us.getDownloads()); + first.setViews(first.getViews() + us.getViews()); + }); + first.setId(k); + return first; + + }, Encoders.bean(UsageStatsModel.class)); + } + private static List getMeasure(Long downloads, Long views) { DataInfo dataInfo = OafMapperUtils .dataInfo( diff --git a/dhp-workflows/dhp-aggregation/src/main/java/eu/dnetlib/dhp/actionmanager/usagestats/UsageStatsModel.java b/dhp-workflows/dhp-aggregation/src/main/java/eu/dnetlib/dhp/actionmanager/usagestats/UsageStatsModel.java index df8a77eb6..07f69b0bb 100644 --- a/dhp-workflows/dhp-aggregation/src/main/java/eu/dnetlib/dhp/actionmanager/usagestats/UsageStatsModel.java +++ b/dhp-workflows/dhp-aggregation/src/main/java/eu/dnetlib/dhp/actionmanager/usagestats/UsageStatsModel.java @@ -4,16 +4,16 @@ package eu.dnetlib.dhp.actionmanager.usagestats; import java.io.Serializable; public class UsageStatsModel implements Serializable { - private String result_id; + private String id; private Long downloads; private Long views; - public String getResult_id() { - return result_id; + public String getId() { + return id; } - public void setResult_id(String result_id) { - this.result_id = result_id; + public void setId(String id) { + this.id = id; } public Long getDownloads() { diff --git a/dhp-workflows/dhp-aggregation/src/main/resources/eu/dnetlib/dhp/actionmanager/usagestats/oozie_app/workflow.xml b/dhp-workflows/dhp-aggregation/src/main/resources/eu/dnetlib/dhp/actionmanager/usagestats/oozie_app/workflow.xml index d94cf7d53..de188718a 100644 --- a/dhp-workflows/dhp-aggregation/src/main/resources/eu/dnetlib/dhp/actionmanager/usagestats/oozie_app/workflow.xml +++ b/dhp-workflows/dhp-aggregation/src/main/resources/eu/dnetlib/dhp/actionmanager/usagestats/oozie_app/workflow.xml @@ -89,7 +89,7 @@ --hive_metastore_uris${hiveMetastoreUris} --outputPath${outputPath} --usagestatsdb${usagestatsdb} - --workingPath${workingDir}/usageDb + --workingPath${workingDir} diff --git a/dhp-workflows/dhp-aggregation/src/test/java/eu/dnetlib/dhp/actionmanager/usagestats/SparkAtomicActionCountJobTest.java b/dhp-workflows/dhp-aggregation/src/test/java/eu/dnetlib/dhp/actionmanager/usagestats/SparkAtomicActionCountJobTest.java index 8aa718bae..8ff3c36f7 100644 --- a/dhp-workflows/dhp-aggregation/src/test/java/eu/dnetlib/dhp/actionmanager/usagestats/SparkAtomicActionCountJobTest.java +++ b/dhp-workflows/dhp-aggregation/src/test/java/eu/dnetlib/dhp/actionmanager/usagestats/SparkAtomicActionCountJobTest.java @@ -8,6 +8,7 @@ import java.nio.file.Files; import java.nio.file.Path; import java.util.stream.Collectors; +import eu.dnetlib.dhp.schema.oaf.OafEntity; import org.apache.commons.io.FileUtils; import org.apache.hadoop.io.Text; import org.apache.spark.SparkConf; @@ -68,24 +69,26 @@ public class SparkAtomicActionCountJobTest { @Test void testMatch() { String usageScoresPath = getClass() - .getResource("/eu/dnetlib/dhp/actionmanager/usagestats/usagestatsdb") + .getResource("/eu/dnetlib/dhp/actionmanager/usagestats") .getPath(); SparkAtomicActionUsageJob.writeActionSet(spark, usageScoresPath, workingDir.toString() + "/actionSet"); final JavaSparkContext sc = new JavaSparkContext(spark.sparkContext()); - JavaRDD tmp = sc + JavaRDD tmp = sc .sequenceFile(workingDir.toString() + "/actionSet", Text.class, Text.class) - .map(usm -> OBJECT_MAPPER.readValue(usm._2.getBytes(), AtomicAction.class)) - .map(aa -> (Result) aa.getPayload()); + .map(usm -> OBJECT_MAPPER.readValue(usm._2.getBytes(), AtomicAction.class)); + //.map(aa -> (Result) aa.getPayload()); - Assertions.assertEquals(9, tmp.count()); + Assertions.assertEquals(9,tmp.filter(aa -> ((OafEntity) aa.getPayload()).getId().startsWith("50|")).count()); + Assertions.assertEquals(9,tmp.filter(aa -> ((OafEntity) aa.getPayload()).getId().startsWith("10|")).count()); + Assertions.assertEquals(9,tmp.filter(aa -> ((OafEntity) aa.getPayload()).getId().startsWith("40|")).count()); - tmp.foreach(r -> Assertions.assertEquals(2, r.getMeasures().size())); + tmp.foreach(r -> Assertions.assertEquals(2, ((OafEntity)r.getPayload()).getMeasures().size())); tmp .foreach( - r -> r + r -> ((OafEntity)r.getPayload()) .getMeasures() .stream() .forEach( @@ -95,14 +98,14 @@ public class SparkAtomicActionCountJobTest { .forEach(u -> Assertions.assertFalse(u.getDataInfo().getDeletedbyinference())))); tmp .foreach( - r -> r + r -> ((OafEntity)r.getPayload()) .getMeasures() .stream() .forEach( m -> m.getUnit().stream().forEach(u -> Assertions.assertTrue(u.getDataInfo().getInferred())))); tmp .foreach( - r -> r + r -> ((OafEntity)r.getPayload()) .getMeasures() .stream() .forEach( @@ -113,7 +116,7 @@ public class SparkAtomicActionCountJobTest { tmp .foreach( - r -> r + r -> ((OafEntity)r.getPayload()) .getMeasures() .stream() .forEach( @@ -127,7 +130,7 @@ public class SparkAtomicActionCountJobTest { u.getDataInfo().getProvenanceaction().getClassid())))); tmp .foreach( - r -> r + r -> ((OafEntity)r.getPayload()) .getMeasures() .stream() .forEach( @@ -142,7 +145,7 @@ public class SparkAtomicActionCountJobTest { tmp .foreach( - r -> r + r -> ((OafEntity)r.getPayload()) .getMeasures() .stream() .forEach( @@ -157,12 +160,13 @@ public class SparkAtomicActionCountJobTest { Assertions .assertEquals( - 1, tmp.filter(r -> r.getId().equals("50|dedup_wf_001::53575dc69e9ace947e02d47ecd54a7a6")).count()); + 1, tmp.filter(r -> ((OafEntity)r.getPayload()).getId().equals("50|dedup_wf_001::53575dc69e9ace947e02d47ecd54a7a6")).count()); Assertions .assertEquals( "0", tmp + .map(r -> ((OafEntity)r.getPayload())) .filter(r -> r.getId().equals("50|dedup_wf_001::53575dc69e9ace947e02d47ecd54a7a6")) .collect() .get(0) @@ -178,7 +182,8 @@ public class SparkAtomicActionCountJobTest { .assertEquals( "5", tmp - .filter(r -> r.getId().equals("50|dedup_wf_001::53575dc69e9ace947e02d47ecd54a7a6")) + .map(r -> ((OafEntity)r.getPayload())) + .filter(r -> r.getId().equals("50|dedup_wf_001::53575dc69e9ace947e02d47ecd54a7a6")) .collect() .get(0) .getMeasures() @@ -194,7 +199,8 @@ public class SparkAtomicActionCountJobTest { .assertEquals( "0", tmp - .filter(r -> r.getId().equals("50|doi_________::17eda2ff77407538fbe5d3d719b9d1c0")) + .map(r -> ((OafEntity)r.getPayload())) + .filter(r -> r.getId().equals("50|doi_________::17eda2ff77407538fbe5d3d719b9d1c0")) .collect() .get(0) .getMeasures() @@ -209,7 +215,8 @@ public class SparkAtomicActionCountJobTest { .assertEquals( "1", tmp - .filter(r -> r.getId().equals("50|doi_________::17eda2ff77407538fbe5d3d719b9d1c0")) + .map(r -> ((OafEntity)r.getPayload())) + .filter(r -> r.getId().equals("50|doi_________::17eda2ff77407538fbe5d3d719b9d1c0")) .collect() .get(0) .getMeasures() @@ -225,7 +232,8 @@ public class SparkAtomicActionCountJobTest { .assertEquals( "2", tmp - .filter(r -> r.getId().equals("50|doi_________::3085e4c6e051378ca6157fe7f0430c1f")) + .map(r -> ((OafEntity)r.getPayload())) + .filter(r -> r.getId().equals("50|doi_________::3085e4c6e051378ca6157fe7f0430c1f")) .collect() .get(0) .getMeasures() @@ -240,7 +248,8 @@ public class SparkAtomicActionCountJobTest { .assertEquals( "6", tmp - .filter(r -> r.getId().equals("50|doi_________::3085e4c6e051378ca6157fe7f0430c1f")) + .map(r -> ((OafEntity)r.getPayload())) + .filter(r -> r.getId().equals("50|doi_________::3085e4c6e051378ca6157fe7f0430c1f")) .collect() .get(0) .getMeasures() diff --git a/dhp-workflows/dhp-aggregation/src/test/resources/eu/dnetlib/dhp/actionmanager/usagestats/datasourceDb b/dhp-workflows/dhp-aggregation/src/test/resources/eu/dnetlib/dhp/actionmanager/usagestats/datasourceDb new file mode 100644 index 000000000..7337ba3e2 --- /dev/null +++ b/dhp-workflows/dhp-aggregation/src/test/resources/eu/dnetlib/dhp/actionmanager/usagestats/datasourceDb @@ -0,0 +1,12 @@ +{"id":"d1__________::53575dc69e9ace947e02d47ecd54a7a6","downloads":0,"views":4} +{"id":"d1__________::53575dc69e9ace947e02d47ecd54a7a6","downloads":0,"views":1} +{"id":"d11_________::17eda2ff77407538fbe5d3d719b9d1c0","downloads":0,"views":1} +{"id":"d11_________::1d4dc08605fd0a2be1105d30c63bfea1","downloads":1,"views":3} +{"id":"d11_________::2e3527822854ca9816f6dfea5bff61a8","downloads":1,"views":1} +{"id":"d12_________::3085e4c6e051378ca6157fe7f0430c1f","downloads":2,"views":3} +{"id":"d12_________::3085e4c6e051378ca6157fe7f0430c1f","downloads":0,"views":3} +{"id":"d12_________::33f710e6dd30cc5e67e35b371ddc33cf","downloads":0,"views":1} +{"id":"d12_________::39738ebf10654732dd3a7af9f24655f8","downloads":1,"views":3} +{"id":"d13_________::3c3b65f07c1a06c7894397eda1d11bbf","downloads":1,"views":8} +{"id":"d13_________::3c3b65f07c1a06c7894397eda1d11bbf","downloads":0,"views":2} +{"id":"d13_________::4938a71a884dd481d329657aa543b850","downloads":0,"views":3} \ No newline at end of file diff --git a/dhp-workflows/dhp-aggregation/src/test/resources/eu/dnetlib/dhp/actionmanager/usagestats/projectDb b/dhp-workflows/dhp-aggregation/src/test/resources/eu/dnetlib/dhp/actionmanager/usagestats/projectDb new file mode 100644 index 000000000..0ecab2a82 --- /dev/null +++ b/dhp-workflows/dhp-aggregation/src/test/resources/eu/dnetlib/dhp/actionmanager/usagestats/projectDb @@ -0,0 +1,12 @@ +{"id":"f1__________::53575dc69e9ace947e02d47ecd54a7a6","downloads":0,"views":4} +{"id":"f1__________::53575dc69e9ace947e02d47ecd54a7a6","downloads":0,"views":1} +{"id":"f11_________::17eda2ff77407538fbe5d3d719b9d1c0","downloads":0,"views":1} +{"id":"f11_________::1d4dc08605fd0a2be1105d30c63bfea1","downloads":1,"views":3} +{"id":"f11_________::2e3527822854ca9816f6dfea5bff61a8","downloads":1,"views":1} +{"id":"f12_________::3085e4c6e051378ca6157fe7f0430c1f","downloads":2,"views":3} +{"id":"f12_________::3085e4c6e051378ca6157fe7f0430c1f","downloads":0,"views":3} +{"id":"f12_________::33f710e6dd30cc5e67e35b371ddc33cf","downloads":0,"views":1} +{"id":"f12_________::39738ebf10654732dd3a7af9f24655f8","downloads":1,"views":3} +{"id":"f13_________::3c3b65f07c1a06c7894397eda1d11bbf","downloads":1,"views":8} +{"id":"f13_________::3c3b65f07c1a06c7894397eda1d11bbf","downloads":0,"views":2} +{"id":"f13_________::4938a71a884dd481d329657aa543b850","downloads":0,"views":3} \ No newline at end of file diff --git a/dhp-workflows/dhp-aggregation/src/test/resources/eu/dnetlib/dhp/actionmanager/usagestats/usageDb b/dhp-workflows/dhp-aggregation/src/test/resources/eu/dnetlib/dhp/actionmanager/usagestats/usageDb new file mode 100644 index 000000000..eb3290eda --- /dev/null +++ b/dhp-workflows/dhp-aggregation/src/test/resources/eu/dnetlib/dhp/actionmanager/usagestats/usageDb @@ -0,0 +1,12 @@ +{"id":"dedup_wf_001::53575dc69e9ace947e02d47ecd54a7a6","downloads":0,"views":4} +{"id":"dedup_wf_001::53575dc69e9ace947e02d47ecd54a7a6","downloads":0,"views":1} +{"id":"doi_________::17eda2ff77407538fbe5d3d719b9d1c0","downloads":0,"views":1} +{"id":"doi_________::1d4dc08605fd0a2be1105d30c63bfea1","downloads":1,"views":3} +{"id":"doi_________::2e3527822854ca9816f6dfea5bff61a8","downloads":1,"views":1} +{"id":"doi_________::3085e4c6e051378ca6157fe7f0430c1f","downloads":2,"views":3} +{"id":"doi_________::3085e4c6e051378ca6157fe7f0430c1f","downloads":0,"views":3} +{"id":"doi_________::33f710e6dd30cc5e67e35b371ddc33cf","downloads":0,"views":1} +{"id":"doi_________::39738ebf10654732dd3a7af9f24655f8","downloads":1,"views":3} +{"id":"doi_________::3c3b65f07c1a06c7894397eda1d11bbf","downloads":1,"views":8} +{"id":"doi_________::3c3b65f07c1a06c7894397eda1d11bbf","downloads":0,"views":2} +{"id":"doi_________::4938a71a884dd481d329657aa543b850","downloads":0,"views":3} \ No newline at end of file diff --git a/dhp-workflows/dhp-aggregation/src/test/resources/eu/dnetlib/dhp/actionmanager/usagestats/usagestatsdb b/dhp-workflows/dhp-aggregation/src/test/resources/eu/dnetlib/dhp/actionmanager/usagestats/usagestatsdb deleted file mode 100644 index fee74f697..000000000 --- a/dhp-workflows/dhp-aggregation/src/test/resources/eu/dnetlib/dhp/actionmanager/usagestats/usagestatsdb +++ /dev/null @@ -1,12 +0,0 @@ -{"result_id":"dedup_wf_001::53575dc69e9ace947e02d47ecd54a7a6","downloads":0,"views":4} -{"result_id":"dedup_wf_001::53575dc69e9ace947e02d47ecd54a7a6","downloads":0,"views":1} -{"result_id":"doi_________::17eda2ff77407538fbe5d3d719b9d1c0","downloads":0,"views":1} -{"result_id":"doi_________::1d4dc08605fd0a2be1105d30c63bfea1","downloads":1,"views":3} -{"result_id":"doi_________::2e3527822854ca9816f6dfea5bff61a8","downloads":1,"views":1} -{"result_id":"doi_________::3085e4c6e051378ca6157fe7f0430c1f","downloads":2,"views":3} -{"result_id":"doi_________::3085e4c6e051378ca6157fe7f0430c1f","downloads":0,"views":3} -{"result_id":"doi_________::33f710e6dd30cc5e67e35b371ddc33cf","downloads":0,"views":1} -{"result_id":"doi_________::39738ebf10654732dd3a7af9f24655f8","downloads":1,"views":3} -{"result_id":"doi_________::3c3b65f07c1a06c7894397eda1d11bbf","downloads":1,"views":8} -{"result_id":"doi_________::3c3b65f07c1a06c7894397eda1d11bbf","downloads":0,"views":2} -{"result_id":"doi_________::4938a71a884dd481d329657aa543b850","downloads":0,"views":3} \ No newline at end of file diff --git a/pom.xml b/pom.xml index 9b60b9078..839188a62 100644 --- a/pom.xml +++ b/pom.xml @@ -807,7 +807,7 @@ 3.3.3 3.4.2 [2.12,3.0) - [3.15.0] + [3.15.1-SNAPSHOT] [4.0.3] [6.0.5] [3.1.6] From bb5bba51b33bec386270170f0af6eadc7734ae57 Mon Sep 17 00:00:00 2001 From: "miriam.baglioni" Date: Thu, 9 Feb 2023 19:08:30 +0100 Subject: [PATCH 306/535] [UsageCount] extended test --- .../SparkAtomicActionCountJobTest.java | 200 ++++++++++++++++++ 1 file changed, 200 insertions(+) diff --git a/dhp-workflows/dhp-aggregation/src/test/java/eu/dnetlib/dhp/actionmanager/usagestats/SparkAtomicActionCountJobTest.java b/dhp-workflows/dhp-aggregation/src/test/java/eu/dnetlib/dhp/actionmanager/usagestats/SparkAtomicActionCountJobTest.java index 8ff3c36f7..1512f9cf8 100644 --- a/dhp-workflows/dhp-aggregation/src/test/java/eu/dnetlib/dhp/actionmanager/usagestats/SparkAtomicActionCountJobTest.java +++ b/dhp-workflows/dhp-aggregation/src/test/java/eu/dnetlib/dhp/actionmanager/usagestats/SparkAtomicActionCountJobTest.java @@ -260,6 +260,206 @@ public class SparkAtomicActionCountJobTest { .getUnit() .get(0) .getValue()); + + + Assertions + .assertEquals( + "0", + tmp + .map(r -> ((OafEntity)r.getPayload())) + .filter(r -> r.getId().equals("40|f1__________::53575dc69e9ace947e02d47ecd54a7a6")) + .collect() + .get(0) + .getMeasures() + .stream() + .filter(m -> m.getId().equals("downloads")) + .collect(Collectors.toList()) + .get(0) + .getUnit() + .get(0) + .getValue()); + Assertions + .assertEquals( + "5", + tmp + .map(r -> ((OafEntity)r.getPayload())) + .filter(r -> r.getId().equals("40|f1__________::53575dc69e9ace947e02d47ecd54a7a6")) + .collect() + .get(0) + .getMeasures() + .stream() + .filter(m -> m.getId().equals("views")) + .collect(Collectors.toList()) + .get(0) + .getUnit() + .get(0) + .getValue()); + + Assertions + .assertEquals( + "0", + tmp + .map(r -> ((OafEntity)r.getPayload())) + .filter(r -> r.getId().equals("40|f11_________::17eda2ff77407538fbe5d3d719b9d1c0")) + .collect() + .get(0) + .getMeasures() + .stream() + .filter(m -> m.getId().equals("downloads")) + .collect(Collectors.toList()) + .get(0) + .getUnit() + .get(0) + .getValue()); + Assertions + .assertEquals( + "1", + tmp + .map(r -> ((OafEntity)r.getPayload())) + .filter(r -> r.getId().equals("40|f11_________::17eda2ff77407538fbe5d3d719b9d1c0")) + .collect() + .get(0) + .getMeasures() + .stream() + .filter(m -> m.getId().equals("views")) + .collect(Collectors.toList()) + .get(0) + .getUnit() + .get(0) + .getValue()); + + Assertions + .assertEquals( + "2", + tmp + .map(r -> ((OafEntity)r.getPayload())) + .filter(r -> r.getId().equals("40|f12_________::3085e4c6e051378ca6157fe7f0430c1f")) + .collect() + .get(0) + .getMeasures() + .stream() + .filter(m -> m.getId().equals("downloads")) + .collect(Collectors.toList()) + .get(0) + .getUnit() + .get(0) + .getValue()); + Assertions + .assertEquals( + "6", + tmp + .map(r -> ((OafEntity)r.getPayload())) + .filter(r -> r.getId().equals("40|f12_________::3085e4c6e051378ca6157fe7f0430c1f")) + .collect() + .get(0) + .getMeasures() + .stream() + .filter(m -> m.getId().equals("views")) + .collect(Collectors.toList()) + .get(0) + .getUnit() + .get(0) + .getValue()); + + + Assertions + .assertEquals( + "0", + tmp + .map(r -> ((OafEntity)r.getPayload())) + .filter(r -> r.getId().equals("10|d1__________::53575dc69e9ace947e02d47ecd54a7a6")) + .collect() + .get(0) + .getMeasures() + .stream() + .filter(m -> m.getId().equals("downloads")) + .collect(Collectors.toList()) + .get(0) + .getUnit() + .get(0) + .getValue()); + Assertions + .assertEquals( + "5", + tmp + .map(r -> ((OafEntity)r.getPayload())) + .filter(r -> r.getId().equals("10|d1__________::53575dc69e9ace947e02d47ecd54a7a6")) + .collect() + .get(0) + .getMeasures() + .stream() + .filter(m -> m.getId().equals("views")) + .collect(Collectors.toList()) + .get(0) + .getUnit() + .get(0) + .getValue()); + + Assertions + .assertEquals( + "0", + tmp + .map(r -> ((OafEntity)r.getPayload())) + .filter(r -> r.getId().equals("10|d11_________::17eda2ff77407538fbe5d3d719b9d1c0")) + .collect() + .get(0) + .getMeasures() + .stream() + .filter(m -> m.getId().equals("downloads")) + .collect(Collectors.toList()) + .get(0) + .getUnit() + .get(0) + .getValue()); + Assertions + .assertEquals( + "1", + tmp + .map(r -> ((OafEntity)r.getPayload())) + .filter(r -> r.getId().equals("10|d11_________::17eda2ff77407538fbe5d3d719b9d1c0")) + .collect() + .get(0) + .getMeasures() + .stream() + .filter(m -> m.getId().equals("views")) + .collect(Collectors.toList()) + .get(0) + .getUnit() + .get(0) + .getValue()); + + Assertions + .assertEquals( + "2", + tmp + .map(r -> ((OafEntity)r.getPayload())) + .filter(r -> r.getId().equals("10|d12_________::3085e4c6e051378ca6157fe7f0430c1f")) + .collect() + .get(0) + .getMeasures() + .stream() + .filter(m -> m.getId().equals("downloads")) + .collect(Collectors.toList()) + .get(0) + .getUnit() + .get(0) + .getValue()); + Assertions + .assertEquals( + "6", + tmp + .map(r -> ((OafEntity)r.getPayload())) + .filter(r -> r.getId().equals("10|d12_________::3085e4c6e051378ca6157fe7f0430c1f")) + .collect() + .get(0) + .getMeasures() + .stream() + .filter(m -> m.getId().equals("views")) + .collect(Collectors.toList()) + .get(0) + .getUnit() + .get(0) + .getValue()); } } From f803530df6785c8366bbf32943cc5b17a579bac7 Mon Sep 17 00:00:00 2001 From: "miriam.baglioni" Date: Fri, 10 Feb 2023 15:50:56 +0100 Subject: [PATCH 307/535] [UsageCount] fixed query --- .../usagestats/SparkAtomicActionUsageJob.java | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) 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 3dbda3788..f99f84265 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,17 +75,17 @@ public class SparkAtomicActionUsageJob implements Serializable { isSparkSessionManaged, spark -> { removeOutputDir(spark, outputPath); - prepareData(dbname, spark, workingPath + "/usageDb", "usage_stats"); - prepareData(dbname, spark, workingPath + "/projectDb", "project_stats"); - prepareData(dbname, spark, workingPath + "/datasourceDb", "datasource_stats"); + 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"); writeActionSet(spark, workingPath, outputPath); }); } - private static void prepareData(String dbname, SparkSession spark, String workingPath, String tableName) { + private static void prepareData(String dbname, SparkSession spark, String workingPath, String tableName, String attribute_name) { spark .sql( - "Select result_id, downloads, views " + + "Select " + attribute_name + " as id, downloads, views " + "from " + dbname + "." + tableName) .as(Encoders.bean(UsageStatsModel.class)) .write() From 5cf902a2b098185cc013fd6065366725351b5d02 Mon Sep 17 00:00:00 2001 From: "miriam.baglioni" Date: Fri, 10 Feb 2023 16:16:37 +0100 Subject: [PATCH 308/535] [UsageCount] changed query to make the sum be computed via sql instead of grouping --- .../usagestats/SparkAtomicActionUsageJob.java | 28 +++++-------------- .../dhp/actionmanager/usagestats/datasourceDb | 9 ++---- .../actionmanager/usagestats/datasourceDb_old | 12 ++++++++ .../dhp/actionmanager/usagestats/projectDb | 9 ++---- .../actionmanager/usagestats/projectDb_old | 12 ++++++++ .../dhp/actionmanager/usagestats/usageDb | 9 ++---- .../dhp/actionmanager/usagestats/usageDb_old | 12 ++++++++ 7 files changed, 52 insertions(+), 39 deletions(-) create mode 100644 dhp-workflows/dhp-aggregation/src/test/resources/eu/dnetlib/dhp/actionmanager/usagestats/datasourceDb_old create mode 100644 dhp-workflows/dhp-aggregation/src/test/resources/eu/dnetlib/dhp/actionmanager/usagestats/projectDb_old create mode 100644 dhp-workflows/dhp-aggregation/src/test/resources/eu/dnetlib/dhp/actionmanager/usagestats/usageDb_old 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 f99f84265..d7ca00708 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 @@ -8,15 +8,13 @@ import java.io.Serializable; import java.util.Arrays; import java.util.List; import java.util.Optional; - -import eu.dnetlib.dhp.schema.common.MainEntityType; import eu.dnetlib.dhp.schema.oaf.*; 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; @@ -85,8 +83,9 @@ public class SparkAtomicActionUsageJob implements Serializable { private static void prepareData(String dbname, SparkSession spark, String workingPath, String tableName, String attribute_name) { spark .sql( - "Select " + attribute_name + " as id, downloads, views " + - "from " + dbname + "." + tableName) + "Select " + attribute_name + " as id, sum(downloads) as downloads, sum(views) as views " + + "from " + dbname + "." + tableName + + "group by " + attribute_name) .as(Encoders.bean(UsageStatsModel.class)) .write() .mode(SaveMode.Overwrite) @@ -115,7 +114,7 @@ public class SparkAtomicActionUsageJob implements Serializable { private static Dataset getFinalIndicatorsResult(SparkSession spark, String inputPath) { - return getUsageStatsModelDataset(spark, inputPath) + return readPath(spark, inputPath, UsageStatsModel.class) .map((MapFunction) usm -> { Result r = new Result(); r.setId("50|" + usm.getId()); @@ -126,7 +125,7 @@ public class SparkAtomicActionUsageJob implements Serializable { private static Dataset getFinalIndicatorsProject(SparkSession spark, String inputPath) { - return getUsageStatsModelDataset(spark, inputPath) + return readPath(spark, inputPath, UsageStatsModel.class) .map((MapFunction) usm -> { Project r = new Project(); r.setId("40|" + usm.getId()); @@ -137,7 +136,7 @@ public class SparkAtomicActionUsageJob implements Serializable { private static Dataset getFinalIndicatorsDatasource(SparkSession spark, String inputPath) { - return getUsageStatsModelDataset(spark, inputPath) + return readPath(spark, inputPath, UsageStatsModel.class) .map((MapFunction) usm -> { Datasource r = new Datasource(); r.setId("10|" + usm.getId()); @@ -146,20 +145,7 @@ public class SparkAtomicActionUsageJob implements Serializable { }, Encoders.bean(Datasource.class)); } - private static Dataset getUsageStatsModelDataset(SparkSession spark, String inputPath) { - return readPath(spark, inputPath, UsageStatsModel.class) - .groupByKey((MapFunction) us -> us.getId(), Encoders.STRING()) - .mapGroups((MapGroupsFunction) (k, it) -> { - UsageStatsModel first = it.next(); - it.forEachRemaining(us -> { - first.setDownloads(first.getDownloads() + us.getDownloads()); - first.setViews(first.getViews() + us.getViews()); - }); - first.setId(k); - return first; - }, Encoders.bean(UsageStatsModel.class)); - } private static List getMeasure(Long downloads, Long views) { DataInfo dataInfo = OafMapperUtils diff --git a/dhp-workflows/dhp-aggregation/src/test/resources/eu/dnetlib/dhp/actionmanager/usagestats/datasourceDb b/dhp-workflows/dhp-aggregation/src/test/resources/eu/dnetlib/dhp/actionmanager/usagestats/datasourceDb index 7337ba3e2..efbb4cfbd 100644 --- a/dhp-workflows/dhp-aggregation/src/test/resources/eu/dnetlib/dhp/actionmanager/usagestats/datasourceDb +++ b/dhp-workflows/dhp-aggregation/src/test/resources/eu/dnetlib/dhp/actionmanager/usagestats/datasourceDb @@ -1,12 +1,9 @@ -{"id":"d1__________::53575dc69e9ace947e02d47ecd54a7a6","downloads":0,"views":4} -{"id":"d1__________::53575dc69e9ace947e02d47ecd54a7a6","downloads":0,"views":1} +{"id":"d1__________::53575dc69e9ace947e02d47ecd54a7a6","downloads":0,"views":5} {"id":"d11_________::17eda2ff77407538fbe5d3d719b9d1c0","downloads":0,"views":1} {"id":"d11_________::1d4dc08605fd0a2be1105d30c63bfea1","downloads":1,"views":3} {"id":"d11_________::2e3527822854ca9816f6dfea5bff61a8","downloads":1,"views":1} -{"id":"d12_________::3085e4c6e051378ca6157fe7f0430c1f","downloads":2,"views":3} -{"id":"d12_________::3085e4c6e051378ca6157fe7f0430c1f","downloads":0,"views":3} +{"id":"d12_________::3085e4c6e051378ca6157fe7f0430c1f","downloads":2,"views":6} {"id":"d12_________::33f710e6dd30cc5e67e35b371ddc33cf","downloads":0,"views":1} {"id":"d12_________::39738ebf10654732dd3a7af9f24655f8","downloads":1,"views":3} -{"id":"d13_________::3c3b65f07c1a06c7894397eda1d11bbf","downloads":1,"views":8} -{"id":"d13_________::3c3b65f07c1a06c7894397eda1d11bbf","downloads":0,"views":2} +{"id":"d13_________::3c3b65f07c1a06c7894397eda1d11bbf","downloads":1,"views":10} {"id":"d13_________::4938a71a884dd481d329657aa543b850","downloads":0,"views":3} \ No newline at end of file diff --git a/dhp-workflows/dhp-aggregation/src/test/resources/eu/dnetlib/dhp/actionmanager/usagestats/datasourceDb_old b/dhp-workflows/dhp-aggregation/src/test/resources/eu/dnetlib/dhp/actionmanager/usagestats/datasourceDb_old new file mode 100644 index 000000000..7337ba3e2 --- /dev/null +++ b/dhp-workflows/dhp-aggregation/src/test/resources/eu/dnetlib/dhp/actionmanager/usagestats/datasourceDb_old @@ -0,0 +1,12 @@ +{"id":"d1__________::53575dc69e9ace947e02d47ecd54a7a6","downloads":0,"views":4} +{"id":"d1__________::53575dc69e9ace947e02d47ecd54a7a6","downloads":0,"views":1} +{"id":"d11_________::17eda2ff77407538fbe5d3d719b9d1c0","downloads":0,"views":1} +{"id":"d11_________::1d4dc08605fd0a2be1105d30c63bfea1","downloads":1,"views":3} +{"id":"d11_________::2e3527822854ca9816f6dfea5bff61a8","downloads":1,"views":1} +{"id":"d12_________::3085e4c6e051378ca6157fe7f0430c1f","downloads":2,"views":3} +{"id":"d12_________::3085e4c6e051378ca6157fe7f0430c1f","downloads":0,"views":3} +{"id":"d12_________::33f710e6dd30cc5e67e35b371ddc33cf","downloads":0,"views":1} +{"id":"d12_________::39738ebf10654732dd3a7af9f24655f8","downloads":1,"views":3} +{"id":"d13_________::3c3b65f07c1a06c7894397eda1d11bbf","downloads":1,"views":8} +{"id":"d13_________::3c3b65f07c1a06c7894397eda1d11bbf","downloads":0,"views":2} +{"id":"d13_________::4938a71a884dd481d329657aa543b850","downloads":0,"views":3} \ No newline at end of file diff --git a/dhp-workflows/dhp-aggregation/src/test/resources/eu/dnetlib/dhp/actionmanager/usagestats/projectDb b/dhp-workflows/dhp-aggregation/src/test/resources/eu/dnetlib/dhp/actionmanager/usagestats/projectDb index 0ecab2a82..0b8cd1d70 100644 --- a/dhp-workflows/dhp-aggregation/src/test/resources/eu/dnetlib/dhp/actionmanager/usagestats/projectDb +++ b/dhp-workflows/dhp-aggregation/src/test/resources/eu/dnetlib/dhp/actionmanager/usagestats/projectDb @@ -1,12 +1,9 @@ -{"id":"f1__________::53575dc69e9ace947e02d47ecd54a7a6","downloads":0,"views":4} -{"id":"f1__________::53575dc69e9ace947e02d47ecd54a7a6","downloads":0,"views":1} +{"id":"f1__________::53575dc69e9ace947e02d47ecd54a7a6","downloads":0,"views":5} {"id":"f11_________::17eda2ff77407538fbe5d3d719b9d1c0","downloads":0,"views":1} {"id":"f11_________::1d4dc08605fd0a2be1105d30c63bfea1","downloads":1,"views":3} {"id":"f11_________::2e3527822854ca9816f6dfea5bff61a8","downloads":1,"views":1} -{"id":"f12_________::3085e4c6e051378ca6157fe7f0430c1f","downloads":2,"views":3} -{"id":"f12_________::3085e4c6e051378ca6157fe7f0430c1f","downloads":0,"views":3} +{"id":"f12_________::3085e4c6e051378ca6157fe7f0430c1f","downloads":2,"views":6} {"id":"f12_________::33f710e6dd30cc5e67e35b371ddc33cf","downloads":0,"views":1} {"id":"f12_________::39738ebf10654732dd3a7af9f24655f8","downloads":1,"views":3} -{"id":"f13_________::3c3b65f07c1a06c7894397eda1d11bbf","downloads":1,"views":8} -{"id":"f13_________::3c3b65f07c1a06c7894397eda1d11bbf","downloads":0,"views":2} +{"id":"f13_________::3c3b65f07c1a06c7894397eda1d11bbf","downloads":1,"views":10} {"id":"f13_________::4938a71a884dd481d329657aa543b850","downloads":0,"views":3} \ No newline at end of file diff --git a/dhp-workflows/dhp-aggregation/src/test/resources/eu/dnetlib/dhp/actionmanager/usagestats/projectDb_old b/dhp-workflows/dhp-aggregation/src/test/resources/eu/dnetlib/dhp/actionmanager/usagestats/projectDb_old new file mode 100644 index 000000000..0ecab2a82 --- /dev/null +++ b/dhp-workflows/dhp-aggregation/src/test/resources/eu/dnetlib/dhp/actionmanager/usagestats/projectDb_old @@ -0,0 +1,12 @@ +{"id":"f1__________::53575dc69e9ace947e02d47ecd54a7a6","downloads":0,"views":4} +{"id":"f1__________::53575dc69e9ace947e02d47ecd54a7a6","downloads":0,"views":1} +{"id":"f11_________::17eda2ff77407538fbe5d3d719b9d1c0","downloads":0,"views":1} +{"id":"f11_________::1d4dc08605fd0a2be1105d30c63bfea1","downloads":1,"views":3} +{"id":"f11_________::2e3527822854ca9816f6dfea5bff61a8","downloads":1,"views":1} +{"id":"f12_________::3085e4c6e051378ca6157fe7f0430c1f","downloads":2,"views":3} +{"id":"f12_________::3085e4c6e051378ca6157fe7f0430c1f","downloads":0,"views":3} +{"id":"f12_________::33f710e6dd30cc5e67e35b371ddc33cf","downloads":0,"views":1} +{"id":"f12_________::39738ebf10654732dd3a7af9f24655f8","downloads":1,"views":3} +{"id":"f13_________::3c3b65f07c1a06c7894397eda1d11bbf","downloads":1,"views":8} +{"id":"f13_________::3c3b65f07c1a06c7894397eda1d11bbf","downloads":0,"views":2} +{"id":"f13_________::4938a71a884dd481d329657aa543b850","downloads":0,"views":3} \ No newline at end of file diff --git a/dhp-workflows/dhp-aggregation/src/test/resources/eu/dnetlib/dhp/actionmanager/usagestats/usageDb b/dhp-workflows/dhp-aggregation/src/test/resources/eu/dnetlib/dhp/actionmanager/usagestats/usageDb index eb3290eda..495ae0fc5 100644 --- a/dhp-workflows/dhp-aggregation/src/test/resources/eu/dnetlib/dhp/actionmanager/usagestats/usageDb +++ b/dhp-workflows/dhp-aggregation/src/test/resources/eu/dnetlib/dhp/actionmanager/usagestats/usageDb @@ -1,12 +1,9 @@ -{"id":"dedup_wf_001::53575dc69e9ace947e02d47ecd54a7a6","downloads":0,"views":4} -{"id":"dedup_wf_001::53575dc69e9ace947e02d47ecd54a7a6","downloads":0,"views":1} +{"id":"dedup_wf_001::53575dc69e9ace947e02d47ecd54a7a6","downloads":0,"views":5} {"id":"doi_________::17eda2ff77407538fbe5d3d719b9d1c0","downloads":0,"views":1} {"id":"doi_________::1d4dc08605fd0a2be1105d30c63bfea1","downloads":1,"views":3} {"id":"doi_________::2e3527822854ca9816f6dfea5bff61a8","downloads":1,"views":1} -{"id":"doi_________::3085e4c6e051378ca6157fe7f0430c1f","downloads":2,"views":3} -{"id":"doi_________::3085e4c6e051378ca6157fe7f0430c1f","downloads":0,"views":3} +{"id":"doi_________::3085e4c6e051378ca6157fe7f0430c1f","downloads":2,"views":6} {"id":"doi_________::33f710e6dd30cc5e67e35b371ddc33cf","downloads":0,"views":1} {"id":"doi_________::39738ebf10654732dd3a7af9f24655f8","downloads":1,"views":3} -{"id":"doi_________::3c3b65f07c1a06c7894397eda1d11bbf","downloads":1,"views":8} -{"id":"doi_________::3c3b65f07c1a06c7894397eda1d11bbf","downloads":0,"views":2} +{"id":"doi_________::3c3b65f07c1a06c7894397eda1d11bbf","downloads":1,"views":10} {"id":"doi_________::4938a71a884dd481d329657aa543b850","downloads":0,"views":3} \ No newline at end of file diff --git a/dhp-workflows/dhp-aggregation/src/test/resources/eu/dnetlib/dhp/actionmanager/usagestats/usageDb_old b/dhp-workflows/dhp-aggregation/src/test/resources/eu/dnetlib/dhp/actionmanager/usagestats/usageDb_old new file mode 100644 index 000000000..eb3290eda --- /dev/null +++ b/dhp-workflows/dhp-aggregation/src/test/resources/eu/dnetlib/dhp/actionmanager/usagestats/usageDb_old @@ -0,0 +1,12 @@ +{"id":"dedup_wf_001::53575dc69e9ace947e02d47ecd54a7a6","downloads":0,"views":4} +{"id":"dedup_wf_001::53575dc69e9ace947e02d47ecd54a7a6","downloads":0,"views":1} +{"id":"doi_________::17eda2ff77407538fbe5d3d719b9d1c0","downloads":0,"views":1} +{"id":"doi_________::1d4dc08605fd0a2be1105d30c63bfea1","downloads":1,"views":3} +{"id":"doi_________::2e3527822854ca9816f6dfea5bff61a8","downloads":1,"views":1} +{"id":"doi_________::3085e4c6e051378ca6157fe7f0430c1f","downloads":2,"views":3} +{"id":"doi_________::3085e4c6e051378ca6157fe7f0430c1f","downloads":0,"views":3} +{"id":"doi_________::33f710e6dd30cc5e67e35b371ddc33cf","downloads":0,"views":1} +{"id":"doi_________::39738ebf10654732dd3a7af9f24655f8","downloads":1,"views":3} +{"id":"doi_________::3c3b65f07c1a06c7894397eda1d11bbf","downloads":1,"views":8} +{"id":"doi_________::3c3b65f07c1a06c7894397eda1d11bbf","downloads":0,"views":2} +{"id":"doi_________::4938a71a884dd481d329657aa543b850","downloads":0,"views":3} \ No newline at end of file From 7b78b15c81eaa19f57132831a8d027ee78790eac Mon Sep 17 00:00:00 2001 From: dimitrispie Date: Mon, 13 Feb 2023 09:27:00 +0200 Subject: [PATCH 309/535] Changes for copying to Impala Cluster --- .../dhp/oa/graph/stats/oozie_app/copyDataToImpalaCluster.sh | 1 + .../eu/dnetlib/dhp/oa/graph/stats/oozie_app/workflow.xml | 4 ++-- 2 files changed, 3 insertions(+), 2 deletions(-) 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 b5209b04d..a2424a351 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,6 +24,7 @@ function copydb() { impala-shell -i impala-cluster-dn1.openaire.eu -q "drop database if exists ${db} cascade"; impala-shell -i impala-cluster-dn1.openaire.eu -q "create database ${db}"; + impala-shell -q "INVALIDATE METADATA" echo "creating schema for ${db}" for i in `impala-shell -d ${db} --delimited -q "show tables"`; do 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 5d2e3799e..558b9544f 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 @@ -103,6 +103,7 @@ ${wf:conf('resumeFrom') eq 'Step16_5'} ${wf:conf('resumeFrom') eq 'Step19-finalize'} ${wf:conf('resumeFrom') eq 'step20-createMonitorDB'} + ${wf:conf('resumeFrom') eq 'step20-createMonitorDB-post'} ${wf:conf('resumeFrom') eq 'step21-createObservatoryDB-pre'} ${wf:conf('resumeFrom') eq 'step21-createObservatoryDB'} ${wf:conf('resumeFrom') eq 'step21-createObservatoryDB-post'} @@ -377,8 +378,7 @@ monitor-post.sh ${monitor_db_name} ${monitor_db_shadow_name} - ${wf:appPath()}/scripts/step20-createMonitorDB.sql - monitor.sh + monitor-post.sh From 935db0ab256bfb70c66b38b97c925cbc80443a7f Mon Sep 17 00:00:00 2001 From: dimitrispie Date: Mon, 13 Feb 2023 09:29:09 +0200 Subject: [PATCH 310/535] Added organizations for Monitor --- .../graph/stats/oozie_app/scripts/step20-createMonitorDB.sql | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) 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 02c798a8d..0f4bb1330 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,7 +63,10 @@ create table TARGET.result stored as parquet as 'openorgs____::b8b8ca674452579f3f593d9f5e557483', -- University College Cork 'openorgs____::38d7097854736583dde879d12dacafca' -- Brown University 'openorgs____::57784c9e047e826fefdb1ef816120d92', --Arts et Métiers ParisTech - 'openorgs____::b8b8ca674452579f3f593d9f5e557483' -- University College Cork + 'openorgs____::b8b8ca674452579f3f593d9f5e557483', -- University College Cork + 'openorgs____::38d7097854736583dde879d12dacafca', -- Brown University + 'openorgs____::57784c9e047e826fefdb1ef816120d92', --Arts et Métiers ParisTech + 'openorgs____::2530baca8a15936ba2e3297f2bce2e7e' -- University of Cape Town ) )) foo; ANALYZE TABLE TARGET.result COMPUTE STATISTICS; From 3400133c2f21b6809dc961c4cf411b6e06680795 Mon Sep 17 00:00:00 2001 From: dimitrispie Date: Mon, 13 Feb 2023 09:44:00 +0200 Subject: [PATCH 311/535] Bug fix --- .../oa/graph/stats/oozie_app/copyDataToImpalaCluster.sh | 8 ++++---- .../eu/dnetlib/dhp/oa/graph/stats/oozie_app/workflow.xml | 1 + 2 files changed, 5 insertions(+), 4 deletions(-) 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 a2424a351..5b6752398 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 @@ -7,7 +7,7 @@ then fi #export HADOOP_USER_NAME="dimitris.pierrakos" -export HADOOP_USER_NAME=$4 +export HADOOP_USER_NAME=$5 function copydb() { db=$1 @@ -52,10 +52,10 @@ function copydb() { STATS_DB=$1 MONITOR_DB=$2 OBSERVATORY_DB=$3 -HADOOP_USER_NAME=$4 -#EXT_DB=$4 +EXT_DB=$4 +HADOOP_USER_NAME=$5 -#copydb $EXT_DB +copydb $EXT_DB copydb $STATS_DB copydb $MONITOR_DB copydb $OBSERVATORY_DB 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 558b9544f..31a7a17c5 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 @@ -432,6 +432,7 @@ ${stats_db_name} ${monitor_db_name} ${observatory_db_name} + ${stats_ext} ${hadoop_user_name} copyDataToImpalaCluster.sh From 554df257abfdf5a979bb733f8e25c3231c5ddf01 Mon Sep 17 00:00:00 2001 From: "michele.artini" Date: Mon, 13 Feb 2023 16:05:58 +0100 Subject: [PATCH 312/535] null values in date range conditions --- .../dhp/broker/oa/util/SubscriptionUtils.java | 18 +++++++++++++++--- .../broker/oa/util/SubscriptionUtilsTest.java | 12 ++++++++++++ 2 files changed, 27 insertions(+), 3 deletions(-) diff --git a/dhp-workflows/dhp-broker-events/src/main/java/eu/dnetlib/dhp/broker/oa/util/SubscriptionUtils.java b/dhp-workflows/dhp-broker-events/src/main/java/eu/dnetlib/dhp/broker/oa/util/SubscriptionUtils.java index cf3562193..4792a7719 100644 --- a/dhp-workflows/dhp-broker-events/src/main/java/eu/dnetlib/dhp/broker/oa/util/SubscriptionUtils.java +++ b/dhp-workflows/dhp-broker-events/src/main/java/eu/dnetlib/dhp/broker/oa/util/SubscriptionUtils.java @@ -37,12 +37,24 @@ public class SubscriptionUtils { } public static boolean verifyDateRange(final long date, final String min, final String max) { + + long from = 0; + long to = Long.MAX_VALUE; + try { - return date >= DateUtils.parseDate(min, "yyyy-MM-dd").getTime() - && date < DateUtils.parseDate(max, "yyyy-MM-dd").getTime() + ONE_DAY; + from = min != null ? DateUtils.parseDate(min, "yyyy-MM-dd").getTime() : 0; } catch (final ParseException e) { - return false; + from = 0; } + + try { + to = max != null ? DateUtils.parseDate(max, "yyyy-MM-dd").getTime() + ONE_DAY : Long.MAX_VALUE; + } catch (final ParseException e) { + to = Long.MAX_VALUE; + } + + return date >= from && date < to; + } public static boolean verifyExact(final String s1, final String s2) { diff --git a/dhp-workflows/dhp-broker-events/src/test/java/eu/dnetlib/dhp/broker/oa/util/SubscriptionUtilsTest.java b/dhp-workflows/dhp-broker-events/src/test/java/eu/dnetlib/dhp/broker/oa/util/SubscriptionUtilsTest.java index d93390e4a..63b49d362 100644 --- a/dhp-workflows/dhp-broker-events/src/test/java/eu/dnetlib/dhp/broker/oa/util/SubscriptionUtilsTest.java +++ b/dhp-workflows/dhp-broker-events/src/test/java/eu/dnetlib/dhp/broker/oa/util/SubscriptionUtilsTest.java @@ -41,6 +41,18 @@ public class SubscriptionUtilsTest { assertTrue(SubscriptionUtils.verifyDateRange(date, "2010-01-01", "2011-01-01")); assertFalse(SubscriptionUtils.verifyDateRange(date, "2020-01-01", "2021-01-01")); + + assertTrue(SubscriptionUtils.verifyDateRange(date, "2010-01-01", "NULL")); + assertTrue(SubscriptionUtils.verifyDateRange(date, "2010-01-01", null)); + assertTrue(SubscriptionUtils.verifyDateRange(date, "NULL", "2011-01-01")); + assertTrue(SubscriptionUtils.verifyDateRange(date, null, "2011-01-01")); + assertTrue(SubscriptionUtils.verifyDateRange(date, "NULL", "NULL")); + assertTrue(SubscriptionUtils.verifyDateRange(date, null, null)); + + assertFalse(SubscriptionUtils.verifyDateRange(date, "2020-01-01", null)); + assertFalse(SubscriptionUtils.verifyDateRange(date, "2020-01-01", "NULL")); + assertFalse(SubscriptionUtils.verifyDateRange(date, null, "2005-01-01")); + assertFalse(SubscriptionUtils.verifyDateRange(date, "NULL", "2005-01-01")); } @Test From 9a03f71db1ab600743ed34f05d5fe4d4f750ca26 Mon Sep 17 00:00:00 2001 From: Claudio Atzori Date: Mon, 13 Feb 2023 16:25:47 +0100 Subject: [PATCH 313/535] code formatting --- .../oaf/utils/GraphCleaningFunctions.java | 4 +- .../ebi/SparkCreateBaselineDataFrame.scala | 3 +- .../dnetlib/dhp/sx/bio/BioScholixTest.scala | 32 +++++++++------ .../crossref/CrossrefMappingTest.scala | 4 +- .../orcid/MappingORCIDToOAFTest.scala | 8 ++-- .../doiboost/uw/UnpayWallMappingTest.scala | 4 +- .../dhp/oa/graph/clean/CleanCountryTest.java | 41 +++++++++---------- .../resolution/ResolveEntitiesTest.scala | 8 ++-- .../sx/graph/scholix/ScholixGraphTest.scala | 5 ++- 9 files changed, 61 insertions(+), 48 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 b24daaa5d..fc515b5b1 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,6 +13,8 @@ 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.github.sisyphsu.dateparser.DateParserUtils; import com.google.common.collect.Lists; @@ -23,8 +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 org.apache.spark.api.java.function.MapFunction; -import org.apache.spark.sql.Encoders; public class GraphCleaningFunctions extends CleaningFunctions { 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 87116f00a..8ac8b00bf 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 @@ -27,7 +27,8 @@ object SparkCreateBaselineDataFrame { def requestBaseLineUpdatePage(maxFile: String): List[(String, String)] = { val data = requestPage("https://ftp.ncbi.nlm.nih.gov/pubmed/updatefiles/") - val result = data.linesWithSeparators.map(l =>l.stripLineEnd) + val result = data.linesWithSeparators + .map(l => l.stripLineEnd) .filter(l => l.startsWith("") diff --git a/dhp-workflows/dhp-aggregation/src/test/scala/eu/dnetlib/dhp/sx/bio/BioScholixTest.scala b/dhp-workflows/dhp-aggregation/src/test/scala/eu/dnetlib/dhp/sx/bio/BioScholixTest.scala index 24caaa553..d1611300d 100644 --- a/dhp-workflows/dhp-aggregation/src/test/scala/eu/dnetlib/dhp/sx/bio/BioScholixTest.scala +++ b/dhp-workflows/dhp-aggregation/src/test/scala/eu/dnetlib/dhp/sx/bio/BioScholixTest.scala @@ -63,7 +63,9 @@ class BioScholixTest extends AbstractVocabularyTest { val records: String = Source .fromInputStream(getClass.getResourceAsStream("/eu/dnetlib/dhp/sx/graph/bio/pubmed_dump")) .mkString - val r: List[Oaf] = records.linesWithSeparators.map(l =>l.stripLineEnd).toList + val r: List[Oaf] = records.linesWithSeparators + .map(l => l.stripLineEnd) + .toList .map(s => mapper.readValue(s, classOf[PMArticle])) .map(a => PubMedToOaf.convert(a, vocabularies)) assertEquals(10, r.size) @@ -173,9 +175,10 @@ class BioScholixTest extends AbstractVocabularyTest { val records: String = Source .fromInputStream(getClass.getResourceAsStream("/eu/dnetlib/dhp/sx/graph/bio/pdb_dump")) .mkString - records.linesWithSeparators.map(l =>l.stripLineEnd).foreach(s => assertTrue(s.nonEmpty)) + records.linesWithSeparators.map(l => l.stripLineEnd).foreach(s => assertTrue(s.nonEmpty)) - val result: List[Oaf] = records.linesWithSeparators.map(l =>l.stripLineEnd).toList.flatMap(o => BioDBToOAF.pdbTOOaf(o)) + val result: List[Oaf] = + records.linesWithSeparators.map(l => l.stripLineEnd).toList.flatMap(o => BioDBToOAF.pdbTOOaf(o)) assertTrue(result.nonEmpty) result.foreach(r => assertNotNull(r)) @@ -194,9 +197,10 @@ class BioScholixTest extends AbstractVocabularyTest { val records: String = Source .fromInputStream(getClass.getResourceAsStream("/eu/dnetlib/dhp/sx/graph/bio/uniprot_dump")) .mkString - records.linesWithSeparators.map(l =>l.stripLineEnd).foreach(s => assertTrue(s.nonEmpty)) + records.linesWithSeparators.map(l => l.stripLineEnd).foreach(s => assertTrue(s.nonEmpty)) - val result: List[Oaf] = records.linesWithSeparators.map(l =>l.stripLineEnd).toList.flatMap(o => BioDBToOAF.uniprotToOAF(o)) + val result: List[Oaf] = + records.linesWithSeparators.map(l => l.stripLineEnd).toList.flatMap(o => BioDBToOAF.uniprotToOAF(o)) assertTrue(result.nonEmpty) result.foreach(r => assertNotNull(r)) @@ -239,9 +243,10 @@ class BioScholixTest extends AbstractVocabularyTest { val records: String = Source .fromInputStream(getClass.getResourceAsStream("/eu/dnetlib/dhp/sx/graph/bio/crossref_links")) .mkString - records.linesWithSeparators.map(l =>l.stripLineEnd).foreach(s => assertTrue(s.nonEmpty)) + records.linesWithSeparators.map(l => l.stripLineEnd).foreach(s => assertTrue(s.nonEmpty)) - val result: List[Oaf] = records.linesWithSeparators.map(l =>l.stripLineEnd).map(s => BioDBToOAF.crossrefLinksToOaf(s)).toList + val result: List[Oaf] = + records.linesWithSeparators.map(l => l.stripLineEnd).map(s => BioDBToOAF.crossrefLinksToOaf(s)).toList assertNotNull(result) assertTrue(result.nonEmpty) @@ -276,14 +281,17 @@ class BioScholixTest extends AbstractVocabularyTest { getClass.getResourceAsStream("/eu/dnetlib/dhp/sx/graph/bio/scholix_resolved") ) .mkString - records.linesWithSeparators.map(l =>l.stripLineEnd).foreach(s => assertTrue(s.nonEmpty)) + records.linesWithSeparators.map(l => l.stripLineEnd).foreach(s => assertTrue(s.nonEmpty)) implicit lazy val formats: DefaultFormats.type = org.json4s.DefaultFormats - val l: List[ScholixResolved] = records.linesWithSeparators.map(l =>l.stripLineEnd).map { input => - lazy val json = parse(input) - json.extract[ScholixResolved] - }.toList + val l: List[ScholixResolved] = records.linesWithSeparators + .map(l => l.stripLineEnd) + .map { input => + lazy val json = parse(input) + json.extract[ScholixResolved] + } + .toList val result: List[Oaf] = l.map(s => BioDBToOAF.scholixResolvedToOAF(s)) 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 aba8cee12..12a61454d 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 @@ -31,13 +31,13 @@ class CrossrefMappingTest { .fromInputStream(getClass.getResourceAsStream("/eu/dnetlib/doiboost/crossref/funder_doi")) .mkString - for (line <- funder_doi.linesWithSeparators.map(l =>l.stripLineEnd)) { + for (line <- funder_doi.linesWithSeparators.map(l => l.stripLineEnd)) { val json = template.replace("%s", line) val resultList: List[Oaf] = Crossref2Oaf.convert(json) assertTrue(resultList.nonEmpty) checkRelation(resultList) } - for (line <- funder_name.linesWithSeparators.map(l =>l.stripLineEnd)) { + for (line <- funder_name.linesWithSeparators.map(l => l.stripLineEnd)) { val json = template.replace("%s", line) val resultList: List[Oaf] = Crossref2Oaf.convert(json) assertTrue(resultList.nonEmpty) diff --git a/dhp-workflows/dhp-doiboost/src/test/scala/eu/dnetlib/dhp/doiboost/orcid/MappingORCIDToOAFTest.scala b/dhp-workflows/dhp-doiboost/src/test/scala/eu/dnetlib/dhp/doiboost/orcid/MappingORCIDToOAFTest.scala index d7a6a94a5..8033f02fb 100644 --- a/dhp-workflows/dhp-doiboost/src/test/scala/eu/dnetlib/dhp/doiboost/orcid/MappingORCIDToOAFTest.scala +++ b/dhp-workflows/dhp-doiboost/src/test/scala/eu/dnetlib/dhp/doiboost/orcid/MappingORCIDToOAFTest.scala @@ -25,9 +25,11 @@ class MappingORCIDToOAFTest { .mkString assertNotNull(json) assertFalse(json.isEmpty) - json.linesWithSeparators.map(l =>l.stripLineEnd).foreach(s => { - assertNotNull(ORCIDToOAF.extractValueFromInputString(s)) - }) + json.linesWithSeparators + .map(l => l.stripLineEnd) + .foreach(s => { + assertNotNull(ORCIDToOAF.extractValueFromInputString(s)) + }) } @Test diff --git a/dhp-workflows/dhp-doiboost/src/test/scala/eu/dnetlib/dhp/doiboost/uw/UnpayWallMappingTest.scala b/dhp-workflows/dhp-doiboost/src/test/scala/eu/dnetlib/dhp/doiboost/uw/UnpayWallMappingTest.scala index 7fe0e9935..30001acb5 100644 --- a/dhp-workflows/dhp-doiboost/src/test/scala/eu/dnetlib/dhp/doiboost/uw/UnpayWallMappingTest.scala +++ b/dhp-workflows/dhp-doiboost/src/test/scala/eu/dnetlib/dhp/doiboost/uw/UnpayWallMappingTest.scala @@ -22,7 +22,7 @@ class UnpayWallMappingTest { .mkString var i: Int = 0 - for (line <- Ilist.linesWithSeparators.map(l =>l.stripLineEnd)) { + for (line <- Ilist.linesWithSeparators.map(l => l.stripLineEnd)) { val p = UnpayWallToOAF.convertToOAF(line) if (p != null) { @@ -43,7 +43,7 @@ class UnpayWallMappingTest { i = i + 1 } - val l = Ilist.linesWithSeparators.map(l =>l.stripLineEnd).next() + val l = Ilist.linesWithSeparators.map(l => l.stripLineEnd).next() val item = UnpayWallToOAF.convertToOAF(l) diff --git a/dhp-workflows/dhp-graph-mapper/src/test/java/eu/dnetlib/dhp/oa/graph/clean/CleanCountryTest.java b/dhp-workflows/dhp-graph-mapper/src/test/java/eu/dnetlib/dhp/oa/graph/clean/CleanCountryTest.java index de9e4fc90..3bc69cfd1 100644 --- a/dhp-workflows/dhp-graph-mapper/src/test/java/eu/dnetlib/dhp/oa/graph/clean/CleanCountryTest.java +++ b/dhp-workflows/dhp-graph-mapper/src/test/java/eu/dnetlib/dhp/oa/graph/clean/CleanCountryTest.java @@ -5,7 +5,6 @@ import java.io.IOException; import java.nio.file.Files; import java.nio.file.Path; -import eu.dnetlib.dhp.schema.oaf.Dataset; import org.apache.commons.io.FileUtils; import org.apache.spark.SparkConf; import org.apache.spark.api.java.JavaRDD; @@ -27,6 +26,7 @@ import org.slf4j.LoggerFactory; import com.fasterxml.jackson.databind.ObjectMapper; import eu.dnetlib.dhp.oa.graph.clean.country.CleanCountrySparkJob; +import eu.dnetlib.dhp.schema.oaf.Dataset; import eu.dnetlib.dhp.schema.oaf.Publication; public class CleanCountryTest { @@ -151,41 +151,40 @@ public class CleanCountryTest { @Test public void testDatasetClean() throws Exception { final String sourcePath = getClass() - .getResource("/eu/dnetlib/dhp/oa/graph/clean/dataset_clean_country.json") - .getPath(); + .getResource("/eu/dnetlib/dhp/oa/graph/clean/dataset_clean_country.json") + .getPath(); spark - .read() - .textFile(sourcePath) - .map( - (MapFunction) r -> OBJECT_MAPPER.readValue(r, Dataset.class), - Encoders.bean(Dataset.class)) - .write() - .json(workingDir.toString() + "/dataset"); + .read() + .textFile(sourcePath) + .map( + (MapFunction) r -> OBJECT_MAPPER.readValue(r, Dataset.class), + Encoders.bean(Dataset.class)) + .write() + .json(workingDir.toString() + "/dataset"); CleanCountrySparkJob.main(new String[] { - "--isSparkSessionManaged", Boolean.FALSE.toString(), - "--inputPath", workingDir.toString() + "/dataset", - "-graphTableClassName", Dataset.class.getCanonicalName(), - "-workingDir", workingDir.toString() + "/working", - "-country", "NL", - "-verifyParam", "10.17632", - "-collectedfrom", "NARCIS", - "-hostedBy", getClass() + "--isSparkSessionManaged", Boolean.FALSE.toString(), + "--inputPath", workingDir.toString() + "/dataset", + "-graphTableClassName", Dataset.class.getCanonicalName(), + "-workingDir", workingDir.toString() + "/working", + "-country", "NL", + "-verifyParam", "10.17632", + "-collectedfrom", "NARCIS", + "-hostedBy", getClass() .getResource("/eu/dnetlib/dhp/oa/graph/clean/hostedBy") .getPath() }); 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(1, tmp.count()); Assertions.assertEquals(0, tmp.first().getCountry().size()); - } } diff --git a/dhp-workflows/dhp-graph-mapper/src/test/scala/eu/dnetlib/dhp/oa/graph/resolution/ResolveEntitiesTest.scala b/dhp-workflows/dhp-graph-mapper/src/test/scala/eu/dnetlib/dhp/oa/graph/resolution/ResolveEntitiesTest.scala index d415b7fc9..022168de5 100644 --- a/dhp-workflows/dhp-graph-mapper/src/test/scala/eu/dnetlib/dhp/oa/graph/resolution/ResolveEntitiesTest.scala +++ b/dhp-workflows/dhp-graph-mapper/src/test/scala/eu/dnetlib/dhp/oa/graph/resolution/ResolveEntitiesTest.scala @@ -53,7 +53,8 @@ class ResolveEntitiesTest extends Serializable { def generateUpdates(spark: SparkSession): Unit = { val template = Source.fromInputStream(this.getClass.getResourceAsStream("updates")).mkString - val pids: List[String] = template.linesWithSeparators.map(l =>l.stripLineEnd) + val pids: List[String] = template.linesWithSeparators + .map(l => l.stripLineEnd) .map { id => val r = new Result r.setId(id.toLowerCase.trim) @@ -127,7 +128,7 @@ class ResolveEntitiesTest extends Serializable { entities.foreach { e => val template = Source.fromInputStream(this.getClass.getResourceAsStream(s"$e")).mkString spark - .createDataset(spark.sparkContext.parallelize(template.linesWithSeparators.map(l =>l.stripLineEnd).toList)) + .createDataset(spark.sparkContext.parallelize(template.linesWithSeparators.map(l => l.stripLineEnd).toList)) .as[String] .write .option("compression", "gzip") @@ -264,7 +265,8 @@ class ResolveEntitiesTest extends Serializable { Source .fromInputStream(this.getClass.getResourceAsStream(s"publication")) .mkString - .linesWithSeparators.map(l =>l.stripLineEnd) + .linesWithSeparators + .map(l => l.stripLineEnd) .next(), classOf[Publication] ) diff --git a/dhp-workflows/dhp-graph-mapper/src/test/scala/eu/dnetlib/dhp/sx/graph/scholix/ScholixGraphTest.scala b/dhp-workflows/dhp-graph-mapper/src/test/scala/eu/dnetlib/dhp/sx/graph/scholix/ScholixGraphTest.scala index 0ea908290..b838ae065 100644 --- a/dhp-workflows/dhp-graph-mapper/src/test/scala/eu/dnetlib/dhp/sx/graph/scholix/ScholixGraphTest.scala +++ b/dhp-workflows/dhp-graph-mapper/src/test/scala/eu/dnetlib/dhp/sx/graph/scholix/ScholixGraphTest.scala @@ -47,7 +47,7 @@ class ScholixGraphTest extends AbstractVocabularyTest { val inputRelations = Source .fromInputStream(getClass.getResourceAsStream("/eu/dnetlib/dhp/sx/graph/oaf_to_summary")) .mkString - val items = inputRelations.linesWithSeparators.map(l =>l.stripLineEnd).toList + val items = inputRelations.linesWithSeparators.map(l => l.stripLineEnd).toList assertNotNull(items) items.foreach(i => assertTrue(i.nonEmpty)) val result = @@ -69,7 +69,8 @@ class ScholixGraphTest extends AbstractVocabularyTest { getClass.getResourceAsStream("/eu/dnetlib/dhp/sx/graph/merge_result_scholix") ) .mkString - val result: List[(Relation, ScholixSummary)] = inputRelations.linesWithSeparators.map(l =>l.stripLineEnd) + val result: List[(Relation, ScholixSummary)] = inputRelations.linesWithSeparators + .map(l => l.stripLineEnd) .sliding(2) .map(s => (s.head, s(1))) .map(p => (mapper.readValue(p._1, classOf[Relation]), mapper.readValue(p._2, classOf[ScholixSummary]))) From f3aaff36884d68746f0d2b6a05370468c74aa4c0 Mon Sep 17 00:00:00 2001 From: dimitrispie Date: Tue, 14 Feb 2023 09:48:36 +0200 Subject: [PATCH 314/535] Remove duplicate orgs --- .../graph/stats/oozie_app/scripts/step20-createMonitorDB.sql | 3 --- 1 file changed, 3 deletions(-) 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 0f4bb1330..628af519a 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,9 +63,6 @@ create table TARGET.result stored as parquet as 'openorgs____::b8b8ca674452579f3f593d9f5e557483', -- University College Cork 'openorgs____::38d7097854736583dde879d12dacafca' -- Brown University 'openorgs____::57784c9e047e826fefdb1ef816120d92', --Arts et Métiers ParisTech - 'openorgs____::b8b8ca674452579f3f593d9f5e557483', -- University College Cork - 'openorgs____::38d7097854736583dde879d12dacafca', -- Brown University - 'openorgs____::57784c9e047e826fefdb1ef816120d92', --Arts et Métiers ParisTech 'openorgs____::2530baca8a15936ba2e3297f2bce2e7e' -- University of Cape Town ) )) foo; From 595192d5105adf54e7034b86ec56dfd2d8c87d4c Mon Sep 17 00:00:00 2001 From: dimitrispie Date: Tue, 14 Feb 2023 16:24:08 +0200 Subject: [PATCH 315/535] Bug fix --- .../eu/dnetlib/dhp/oa/graph/stats/oozie_app/workflow.xml | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) 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 31a7a17c5..e23bd0aa3 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 @@ -10,7 +10,6 @@ external_stats_db_name - stats_ext the external stats that should be added since they are not included in the graph database @@ -432,7 +431,7 @@ ${stats_db_name} ${monitor_db_name} ${observatory_db_name} - ${stats_ext} + ${external_stats_db_name} ${hadoop_user_name} copyDataToImpalaCluster.sh From a8ac79fa25636a5a7995c148f5536d342feafbc6 Mon Sep 17 00:00:00 2001 From: Sandro La Bruzzo Date: Wed, 15 Feb 2023 10:29:13 +0100 Subject: [PATCH 316/535] Added citation relation on crossref Mapping --- .../doiboost/crossref/Crossref2Oaf.scala | 49 + .../crossref/publication_license_embargo.json | 3006 ++++++++--------- .../crossref/CrossrefMappingTest.scala | 43 + 3 files changed, 1564 insertions(+), 1534 deletions(-) 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 7fb10863f..a271f4c33 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 @@ -309,6 +309,8 @@ case object Crossref2Oaf { result } + + def generateAuhtor(given: String, family: String, orcid: String, index: Int): Author = { val a = new Author a.setName(given) @@ -370,10 +372,57 @@ case object Crossref2Oaf { case dataset: Dataset => convertDataset(dataset) } + + val doisReference:List[String] = for { + JObject(reference_json) <- json \ "reference" + JField("DOI", JString(doi_json)) <- reference_json + } yield doi_json + + + + if (doisReference!= null && doisReference.nonEmpty) { + val citation_relations:List[Relation] = generateCitationRelations(doisReference, result) + resultList = resultList ::: citation_relations + } resultList = resultList ::: List(result) resultList } + + + private def createCiteRelation(source:Result, targetPid:String, targetPidType:String) :List[Relation] = { + + + val targetId = IdentifierFactory.idFromPid("50",targetPidType, targetPid, true) + + val from = new Relation + from.setSource(source.getId) + from.setTarget(targetId) + from.setRelType(ModelConstants.RESULT_RESULT) + from.setRelClass(ModelConstants.CITES) + from.setSubRelType(ModelConstants.CITATION) + from.setCollectedfrom(source.getCollectedfrom) + from.setDataInfo(source.getDataInfo) + from.setLastupdatetimestamp(source.getLastupdatetimestamp) + + + val to = new Relation + to.setTarget(source.getId) + to.setSource(targetId) + to.setRelType(ModelConstants.RESULT_RESULT) + to.setRelClass(ModelConstants.IS_CITED_BY) + to.setSubRelType(ModelConstants.CITATION) + to.setCollectedfrom(source.getCollectedfrom) + to.setDataInfo(source.getDataInfo) + to.setLastupdatetimestamp(source.getLastupdatetimestamp) + + List(from,to) + } + + def generateCitationRelations(dois:List[String], result:Result):List[Relation] = { + dois.flatMap(d => createCiteRelation(result, d, "doi")) + } + def mappingFunderToRelations( funders: List[mappingFunder], sourceId: String, diff --git a/dhp-workflows/dhp-doiboost/src/test/resources/eu/dnetlib/doiboost/crossref/publication_license_embargo.json b/dhp-workflows/dhp-doiboost/src/test/resources/eu/dnetlib/doiboost/crossref/publication_license_embargo.json index 788946fea..b66147b2d 100644 --- a/dhp-workflows/dhp-doiboost/src/test/resources/eu/dnetlib/doiboost/crossref/publication_license_embargo.json +++ b/dhp-workflows/dhp-doiboost/src/test/resources/eu/dnetlib/doiboost/crossref/publication_license_embargo.json @@ -1,1537 +1,1475 @@ { -"indexed": { -"date-parts": [ -[ -2021, -7, -2 -] -], -"date-time": "2021-07-02T07:30:10Z", -"timestamp": 1625211010708 -}, -"reference-count": 83, -"publisher": "Springer Science and Business Media LLC", -"issue": "5", -"license": [ -{ -"URL": "https://www.springer.com/tdm", -"start": { -"date-parts": [ -[ -2021, -2, -22 -] -], -"date-time": "2021-02-22T00:00:00Z", -"timestamp": 1613952000000 -}, -"delay-in-days": 0, -"content-version": "tdm" -}, -{ -"URL": "https://academic.oup.com/journals/pages/open_access/funder_policies/chorus/standard_publication_model", -"start": { -"date-parts": [ -[ -2021, -2, -22 -] -], -"date-time": "2021-02-22T00:00:00Z", -"timestamp": 1613952000000 -}, -"delay-in-days": 0, -"content-version": "vor" -} -], -"content-domain": { -"domain": [ -"link.springer.com" -], -"crossmark-restriction": false -}, -"short-container-title": [ -"Nat Astron" -], -"published-print": { -"date-parts": [ -[ -2021, -5 -] -] -}, -"DOI": "10.1038/s41550-020-01295-8", -"type": "journal-article", -"created": { -"date-parts": [ -[ -2021, -2, -22 -] -], -"date-time": "2021-02-22T17:03:42Z", -"timestamp": 1614013422000 -}, -"page": "510-518", -"update-policy": "http://dx.doi.org/10.1007/springer_crossmark_policy", -"source": "Crossref", -"is-referenced-by-count": 6, -"title": [ -"A tidal disruption event coincident with a high-energy neutrino" -], -"prefix": "10.1038", -"volume": "5", -"author": [ -{ -"ORCID": "http://orcid.org/0000-0003-2434-0387", -"authenticated-orcid": false, -"given": "Robert", -"family": "Stein", -"sequence": "first", -"affiliation": [ - -] -}, -{ -"ORCID": "http://orcid.org/0000-0002-3859-8074", -"authenticated-orcid": false, -"given": "Sjoert van", -"family": "Velzen", -"sequence": "additional", -"affiliation": [ - -] -}, -{ -"ORCID": "http://orcid.org/0000-0001-8594-8666", -"authenticated-orcid": false, -"given": "Marek", -"family": "Kowalski", -"sequence": "additional", -"affiliation": [ - -] -}, -{ -"given": "Anna", -"family": "Franckowiak", -"sequence": "additional", -"affiliation": [ - -] -}, -{ -"ORCID": "http://orcid.org/0000-0003-3703-5154", -"authenticated-orcid": false, -"given": "Suvi", -"family": "Gezari", -"sequence": "additional", -"affiliation": [ - -] -}, -{ -"ORCID": "http://orcid.org/0000-0003-3124-2814", -"authenticated-orcid": false, -"given": "James C. A.", -"family": "Miller-Jones", -"sequence": "additional", -"affiliation": [ - -] -}, -{ -"given": "Sara", -"family": "Frederick", -"sequence": "additional", -"affiliation": [ - -] -}, -{ -"ORCID": "http://orcid.org/0000-0003-0466-3779", -"authenticated-orcid": false, -"given": "Itai", -"family": "Sfaradi", -"sequence": "additional", -"affiliation": [ - -] -}, -{ -"given": "Michael F.", -"family": "Bietenholz", -"sequence": "additional", -"affiliation": [ - -] -}, -{ -"ORCID": "http://orcid.org/0000-0002-5936-1156", -"authenticated-orcid": false, -"given": "Assaf", -"family": "Horesh", -"sequence": "additional", -"affiliation": [ - -] -}, -{ -"given": "Rob", -"family": "Fender", -"sequence": "additional", -"affiliation": [ - -] -}, -{ -"ORCID": "http://orcid.org/0000-0003-2403-4582", -"authenticated-orcid": false, -"given": "Simone", -"family": "Garrappa", -"sequence": "additional", -"affiliation": [ - -] -}, -{ -"ORCID": "http://orcid.org/0000-0002-2184-6430", -"authenticated-orcid": false, -"given": "Tomás", -"family": "Ahumada", -"sequence": "additional", -"affiliation": [ - -] -}, -{ -"given": "Igor", -"family": "Andreoni", -"sequence": "additional", -"affiliation": [ - -] -}, -{ -"given": "Justin", -"family": "Belicki", -"sequence": "additional", -"affiliation": [ - -] -}, -{ -"ORCID": "http://orcid.org/0000-0001-8018-5348", -"authenticated-orcid": false, -"given": "Eric C.", -"family": "Bellm", -"sequence": "additional", -"affiliation": [ - -] -}, -{ -"given": "Markus", -"family": "Böttcher", -"sequence": "additional", -"affiliation": [ - -] -}, -{ -"given": "Valery", -"family": "Brinnel", -"sequence": "additional", -"affiliation": [ - -] -}, -{ -"given": "Rick", -"family": "Burruss", -"sequence": "additional", -"affiliation": [ - -] -}, -{ -"ORCID": "http://orcid.org/0000-0003-1673-970X", -"authenticated-orcid": false, -"given": "S. Bradley", -"family": "Cenko", -"sequence": "additional", -"affiliation": [ - -] -}, -{ -"ORCID": "http://orcid.org/0000-0002-8262-2924", -"authenticated-orcid": false, -"given": "Michael W.", -"family": "Coughlin", -"sequence": "additional", -"affiliation": [ - -] -}, -{ -"ORCID": "http://orcid.org/0000-0003-2292-0441", -"authenticated-orcid": false, -"given": "Virginia", -"family": "Cunningham", -"sequence": "additional", -"affiliation": [ - -] -}, -{ -"given": "Andrew", -"family": "Drake", -"sequence": "additional", -"affiliation": [ - -] -}, -{ -"given": "Glennys R.", -"family": "Farrar", -"sequence": "additional", -"affiliation": [ - -] -}, -{ -"given": "Michael", -"family": "Feeney", -"sequence": "additional", -"affiliation": [ - -] -}, -{ -"given": "Ryan J.", -"family": "Foley", -"sequence": "additional", -"affiliation": [ - -] -}, -{ -"ORCID": "http://orcid.org/0000-0002-3653-5598", -"authenticated-orcid": false, -"given": "Avishay", -"family": "Gal-Yam", -"sequence": "additional", -"affiliation": [ - -] -}, -{ -"given": "V. Zach", -"family": "Golkhou", -"sequence": "additional", -"affiliation": [ - -] -}, -{ -"ORCID": "http://orcid.org/0000-0002-4163-4996", -"authenticated-orcid": false, -"given": "Ariel", -"family": "Goobar", -"sequence": "additional", -"affiliation": [ - -] -}, -{ -"ORCID": "http://orcid.org/0000-0002-3168-0139", -"authenticated-orcid": false, -"given": "Matthew J.", -"family": "Graham", -"sequence": "additional", -"affiliation": [ - -] -}, -{ -"given": "Erica", -"family": "Hammerstein", -"sequence": "additional", -"affiliation": [ - -] -}, -{ -"ORCID": "http://orcid.org/0000-0003-3367-3415", -"authenticated-orcid": false, -"given": "George", -"family": "Helou", -"sequence": "additional", -"affiliation": [ - -] -}, -{ -"ORCID": "http://orcid.org/0000-0002-9878-7889", -"authenticated-orcid": false, -"given": "Tiara", -"family": "Hung", -"sequence": "additional", -"affiliation": [ - -] -}, -{ -"given": "Mansi M.", -"family": "Kasliwal", -"sequence": "additional", -"affiliation": [ - -] -}, -{ -"ORCID": "http://orcid.org/0000-0002-5740-7747", -"authenticated-orcid": false, -"given": "Charles D.", -"family": "Kilpatrick", -"sequence": "additional", -"affiliation": [ - -] -}, -{ -"ORCID": "http://orcid.org/0000-0002-5105-344X", -"authenticated-orcid": false, -"given": "Albert K. H.", -"family": "Kong", -"sequence": "additional", -"affiliation": [ - -] -}, -{ -"ORCID": "http://orcid.org/0000-0002-6540-1484", -"authenticated-orcid": false, -"given": "Thomas", -"family": "Kupfer", -"sequence": "additional", -"affiliation": [ - -] -}, -{ -"ORCID": "http://orcid.org/0000-0003-2451-5482", -"authenticated-orcid": false, -"given": "Russ R.", -"family": "Laher", -"sequence": "additional", -"affiliation": [ - -] -}, -{ -"ORCID": "http://orcid.org/0000-0003-2242-0244", -"authenticated-orcid": false, -"given": "Ashish A.", -"family": "Mahabal", -"sequence": "additional", -"affiliation": [ - -] -}, -{ -"ORCID": "http://orcid.org/0000-0002-8532-9395", -"authenticated-orcid": false, -"given": "Frank J.", -"family": "Masci", -"sequence": "additional", -"affiliation": [ - -] -}, -{ -"ORCID": "http://orcid.org/0000-0003-0280-7484", -"authenticated-orcid": false, -"given": "Jannis", -"family": "Necker", -"sequence": "additional", -"affiliation": [ - -] -}, -{ -"ORCID": "http://orcid.org/0000-0001-8342-6274", -"authenticated-orcid": false, -"given": "Jakob", -"family": "Nordin", -"sequence": "additional", -"affiliation": [ - -] -}, -{ -"given": "Daniel A.", -"family": "Perley", -"sequence": "additional", -"affiliation": [ - -] -}, -{ -"ORCID": "http://orcid.org/0000-0002-8121-2560", -"authenticated-orcid": false, -"given": "Mickael", -"family": "Rigault", -"sequence": "additional", -"affiliation": [ - -] -}, -{ -"ORCID": "http://orcid.org/0000-0002-7788-628X", -"authenticated-orcid": false, -"given": "Simeon", -"family": "Reusch", -"sequence": "additional", -"affiliation": [ - -] -}, -{ -"given": "Hector", -"family": "Rodriguez", -"sequence": "additional", -"affiliation": [ - -] -}, -{ -"ORCID": "http://orcid.org/0000-0002-7559-315X", -"authenticated-orcid": false, -"given": "César", -"family": "Rojas-Bravo", -"sequence": "additional", -"affiliation": [ - -] -}, -{ -"ORCID": "http://orcid.org/0000-0001-7648-4142", -"authenticated-orcid": false, -"given": "Ben", -"family": "Rusholme", -"sequence": "additional", -"affiliation": [ - -] -}, -{ -"ORCID": "http://orcid.org/0000-0003-4401-0430", -"authenticated-orcid": false, -"given": "David L.", -"family": "Shupe", -"sequence": "additional", -"affiliation": [ - -] -}, -{ -"ORCID": "http://orcid.org/0000-0001-9898-5597", -"authenticated-orcid": false, -"given": "Leo P.", -"family": "Singer", -"sequence": "additional", -"affiliation": [ - -] -}, -{ -"ORCID": "http://orcid.org/0000-0003-1546-6615", -"authenticated-orcid": false, -"given": "Jesper", -"family": "Sollerman", -"sequence": "additional", -"affiliation": [ - -] -}, -{ -"given": "Maayane T.", -"family": "Soumagnac", -"sequence": "additional", -"affiliation": [ - -] -}, -{ -"given": "Daniel", -"family": "Stern", -"sequence": "additional", -"affiliation": [ - -] -}, -{ -"given": "Kirsty", -"family": "Taggart", -"sequence": "additional", -"affiliation": [ - -] -}, -{ -"given": "Jakob", -"family": "van Santen", -"sequence": "additional", -"affiliation": [ - -] -}, -{ -"given": "Charlotte", -"family": "Ward", -"sequence": "additional", -"affiliation": [ - -] -}, -{ -"given": "Patrick", -"family": "Woudt", -"sequence": "additional", -"affiliation": [ - -] -}, -{ -"ORCID": "http://orcid.org/0000-0001-6747-8509", -"authenticated-orcid": false, -"given": "Yuhan", -"family": "Yao", -"sequence": "additional", -"affiliation": [ - -] -} -], -"member": "297", -"published-online": { -"date-parts": [ -[ -2021, -2, -22 -] -] -}, -"reference": [ -{ -"key": "1295_CR1", -"doi-asserted-by": "crossref", -"first-page": "P03012", -"DOI": "10.1088/1748-0221/12/03/P03012", -"volume": "12", -"author": "MG Aartsen", -"year": "2017", -"unstructured": "Aartsen, M. G. et al. The IceCube Neutrino Observatory: instrumentation and online systems. J. Instrum. 12, P03012 (2017).", -"journal-title": "J. Instrum." -}, -{ -"key": "1295_CR2", -"unstructured": "Stein, R. IceCube-191001A—IceCube observation of a high-energy neutrino candidate event. GCN Circ. 25913 (2019)." -}, -{ -"key": "1295_CR3", -"doi-asserted-by": "crossref", -"first-page": "018002", -"DOI": "10.1088/1538-3873/aaecbe", -"volume": "131", -"author": "EC Bellm", -"year": "2019", -"unstructured": "Bellm, E. C. et al. The Zwicky Transient Facility: system overview, performance, and first results. Publ. Astron. Soc. Pac. 131, 018002 (2019).", -"journal-title": "Publ. Astron. Soc. Pac." -}, -{ -"key": "1295_CR4", -"doi-asserted-by": "crossref", -"first-page": "533", -"DOI": "10.1016/j.astropartphys.2007.03.005", -"volume": "27", -"author": "M Kowalski", -"year": "2007", -"unstructured": "Kowalski, M. & Mohr, A. Detecting neutrino transients with optical follow-up observations. Astropart. Phys. 27, 533–538 (2007).", -"journal-title": "Astropart. Phys." -}, -{ -"key": "1295_CR5", -"doi-asserted-by": "crossref", -"first-page": "329", -"DOI": "10.1088/0004-637X/693/1/329", -"volume": "693", -"author": "GR Farrar", -"year": "2009", -"unstructured": "Farrar, G. R. & Gruzinov, A. Giant AGN flares and cosmic ray bursts. Astrophys. J. 693, 329–332 (2009).", -"journal-title": "Astrophys. J." -}, -{ -"key": "1295_CR6", -"doi-asserted-by": "crossref", -"first-page": "1354", -"DOI": "10.1093/mnras/stx863", -"volume": "469", -"author": "L Dai", -"year": "2017", -"unstructured": "Dai, L. & Fang, K. Can tidal disruption events produce the IceCube neutrinos? Mon. Not. R. Astron. Soc. 469, 1354–1359 (2017).", -"journal-title": "Mon. Not. R. Astron. Soc." -}, -{ -"key": "1295_CR7", -"doi-asserted-by": "crossref", -"first-page": "114", -"DOI": "10.3847/1538-4357/ab44ca", -"volume": "886", -"author": "K Hayasaki", -"year": "2019", -"unstructured": "Hayasaki, K. & Yamazaki, R. Neutrino emissions from tidal disruption remnants. Astrophys. J. 886, 114 (2019).", -"journal-title": "Astrophys. J." -}, -{ -"key": "1295_CR8", -"unstructured": "Farrar, G. R. & Piran, T. Tidal disruption jets as the source of Ultra-High Energy Cosmic Rays. Preprint at https://arxiv.org/abs/1411.0704 (2014)." -}, -{ -"key": "1295_CR9", -"doi-asserted-by": "crossref", -"first-page": "3", -"DOI": "10.3847/1538-4357/aa6344", -"volume": "838", -"author": "N Senno", -"year": "2017", -"unstructured": "Senno, N., Murase, K. & Mészáros, P. High-energy neutrino flares from X-ray bright and dark tidal disruption events. Astrophys. J. 838, 3 (2017).", -"journal-title": "Astrophys. J." -}, -{ -"key": "1295_CR10", -"doi-asserted-by": "crossref", -"first-page": "083005", -"DOI": "10.1103/PhysRevD.93.083005", -"volume": "93", -"author": "XY Wang", -"year": "2016", -"unstructured": "Wang, X. Y. & Liu, R. Y. Tidal disruption jets of supermassive black holes as hidden sources of cosmic rays: explaining the IceCube TeV–PeV neutrinos. Phys. Rev. D 93, 083005 (2016).", -"journal-title": "Phys. Rev. D" -}, -{ -"key": "1295_CR11", -"doi-asserted-by": "crossref", -"first-page": "123001", -"DOI": "10.1103/PhysRevD.95.123001", -"volume": "95", -"author": "C Lunardini", -"year": "2017", -"unstructured": "Lunardini, C. & Winter, W. High energy neutrinos from the tidal disruption of stars. Phys. Rev. D 95, 123001 (2017).", -"journal-title": "Phys. Rev. D" -}, -{ -"key": "1295_CR12", -"unstructured": "Stein, R., Franckowiak, A., Necker, J., Gezari, S. & Velzen, S. V. Candidate counterparts to IceCube-191001A with ZTF. Astron. Telegr. 13160 (2019)." -}, -{ -"key": "1295_CR13", -"doi-asserted-by": "crossref", -"first-page": "078001", -"DOI": "10.1088/1538-3873/ab006c", -"volume": "131", -"author": "MJ Graham", -"year": "2019", -"unstructured": "Graham, M. J. et al. The Zwicky Transient Facility: science objectives. Publ. Astron. Soc. Pac. 131, 078001 (2019).", -"journal-title": "Publ. Astron. Soc. Pac." -}, -{ -"key": "1295_CR14", -"unstructured": "Nordin, J. et al. TNS Astronomical Transient Report 33340 (2019)." -}, -{ -"key": "1295_CR15", -"unstructured": "Nicholl, M. et al. ePESSTO+ classification of optical transients. Astron. Telegr. 12752 (2019)." -}, -{ -"key": "1295_CR16", -"unstructured": "van Velzen, S. et al. Seventeen tidal disruption events from the first half of ZTF survey observations: entering a new era of population studies. Preprint at https://arxiv.org/abs/2001.01409 (2020)." -}, -{ -"key": "1295_CR17", -"doi-asserted-by": "crossref", -"first-page": "82", -"DOI": "10.3847/1538-4357/ab1844", -"volume": "878", -"author": "S van Velzen", -"year": "2019", -"unstructured": "van Velzen, S. et al. Late-time UV observations of tidal disruption flares reveal unobscured, compact accretion disks. Astrophys. J. 878, 82 (2019).", -"journal-title": "Astrophys. J." -}, -{ -"key": "1295_CR18", -"doi-asserted-by": "crossref", -"first-page": "5655", -"DOI": "10.1093/mnras/staa192", -"volume": "492", -"author": "A Mummery", -"year": "2020", -"unstructured": "Mummery, A. & Balbus, S. A. The spectral evolution of disc dominated tidal disruption events. Mon. Not. R. Astron. Soc. 492, 5655–5674 (2020).", -"journal-title": "Mon. Not. R. Astron. Soc." -}, -{ -"key": "1295_CR19", -"doi-asserted-by": "crossref", -"first-page": "184", -"DOI": "10.1088/0004-637X/764/2/184", -"volume": "764", -"author": "NJ McConnell", -"year": "2013", -"unstructured": "McConnell, N. J. & Ma, C. P. Revisiting the scaling relations of black hole masses and host galaxy properties. Astrophys. J. 764, 184 (2013).", -"journal-title": "Astrophys. J." -}, -{ -"key": "1295_CR20", -"doi-asserted-by": "crossref", -"first-page": "149", -"DOI": "10.3847/1538-4357/aa633b", -"volume": "838", -"author": "K Auchettl", -"year": "2017", -"unstructured": "Auchettl, K., Guillochon, J. & Ramirez-Ruiz, E. New physical insights about tidal disruption events from a comprehensive observational inventory at X-ray wavelengths. Astrophys. J. 838, 149 (2017).", -"journal-title": "Astrophys. J." -}, -{ -"key": "1295_CR21", -"doi-asserted-by": "crossref", -"first-page": "4136", -"DOI": "10.1093/mnras/stz1602", -"volume": "487", -"author": "T Wevers", -"year": "2019", -"unstructured": "Wevers, T. et al. Black hole masses of tidal disruption event host galaxies II. Mon. Not. R. Astron. Soc. 487, 4136–4152 (2019).", -"journal-title": "Mon. Not. R. Astron. Soc." -}, -{ -"key": "1295_CR22", -"doi-asserted-by": "crossref", -"first-page": "198", -"DOI": "10.3847/1538-4357/aafe0c", -"volume": "872", -"author": "S van Velzen", -"year": "2019", -"unstructured": "van Velzen, S. et al. The first tidal disruption flare in ZTF: from photometric selection to multi-wavelength characterization. Astrophys. J. 872, 198 (2019).", -"journal-title": "Astrophys. J." -}, -{ -"key": "1295_CR23", -"doi-asserted-by": "crossref", -"first-page": "A81", -"DOI": "10.1051/0004-6361/201117855", -"volume": "538", -"author": "G Morlino", -"year": "2012", -"unstructured": "Morlino, G. & Caprioli, D. Strong evidence for hadron acceleration in Tycho’s supernova remnant. Astron. Astrophys. 538, A81 (2012).", -"journal-title": "Astron. Astrophys." -}, -{ -"key": "1295_CR24", -"doi-asserted-by": "crossref", -"first-page": "86", -"DOI": "10.3847/1538-4357/aaa8e0", -"volume": "854", -"author": "T Eftekhari", -"year": "2018", -"unstructured": "Eftekhari, T., Berger, E., Zauderer, B. A., Margutti, R. & Alexander, K. D. Radio monitoring of the tidal disruption event Swift J164449.3+573451. III. Late-time jet energetics and a deviation from equipartition. Astrophys. J. 854, 86 (2018).", -"journal-title": "Astrophys. J." -}, -{ -"key": "1295_CR25", -"doi-asserted-by": "crossref", -"first-page": "1258", -"DOI": "10.1093/mnras/stt1645", -"volume": "436", -"author": "A Horesh", -"year": "2013", -"unstructured": "Horesh, A. et al. An early and comprehensive millimetre and centimetre wave and X-ray study of SN 2011dh: a non-equipartition blast wave expanding into a massive stellar wind. Mon. Not. R. Astron. Soc. 436, 1258–1267 (2013).", -"journal-title": "Mon. Not. R. Astron. Soc." -}, -{ -"key": "1295_CR26", -"doi-asserted-by": "crossref", -"first-page": "78", -"DOI": "10.1088/0004-637X/772/1/78", -"volume": "772", -"author": "R Barniol Duran", -"year": "2013", -"unstructured": "Barniol Duran, R., Nakar, E. & Piran, T. Radius constraints and minimal equipartition energy of relativistically moving synchrotron sources. Astrophys. J. 772, 78 (2013).", -"journal-title": "Astrophys. J." -}, -{ -"key": "1295_CR27", -"doi-asserted-by": "crossref", -"first-page": "69", -"DOI": "10.1071/AS02053", -"volume": "20", -"author": "AG Polatidis", -"year": "2003", -"unstructured": "Polatidis, A. G. & Conway, J. E. Proper motions in compact symmetric objects. Publ. Astron. Soc. Aust. 20, 69–74 (2003).", -"journal-title": "Publ. Astron. Soc. Aust." -}, -{ -"key": "1295_CR28", -"doi-asserted-by": "crossref", -"first-page": "L25", -"DOI": "10.3847/2041-8205/819/2/L25", -"volume": "819", -"author": "KD Alexander", -"year": "2016", -"unstructured": "Alexander, K. D., Berger, E., Guillochon, J., Zauderer, B. A. & Williams, P. K. G. Discovery of an outflow from radio observations of the tidal disruption event ASASSN-14li. Astrophys. J. Lett. 819, L25 (2016).", -"journal-title": "Astrophys. J. Lett." -}, -{ -"key": "1295_CR29", -"doi-asserted-by": "crossref", -"first-page": "127", -"DOI": "10.3847/0004-637X/827/2/127", -"volume": "827", -"author": "J Krolik", -"year": "2016", -"unstructured": "Krolik, J., Piran, T., Svirski, G. & Cheng, R. M. ASASSN-14li: a model tidal disruption event. Astrophys. J. 827, 127 (2016).", -"journal-title": "Astrophys. J." -}, -{ -"key": "1295_CR30", -"doi-asserted-by": "crossref", -"first-page": "1", -"DOI": "10.3847/1538-4357/aab361", -"volume": "856", -"author": "DR Pasham", -"year": "2018", -"unstructured": "Pasham, D. R. & van Velzen, S. Discovery of a time lag between the soft X-ray and radio emission of the tidal disruption flare ASASSN-14li: evidence for linear disk–jet coupling. Astrophys. J. 856, 1 (2018).", -"journal-title": "Astrophys. J." -}, -{ -"key": "1295_CR31", -"doi-asserted-by": "crossref", -"first-page": "L9", -"DOI": "10.1051/0004-6361/201834750", -"volume": "622", -"author": "NL Strotjohann", -"year": "2019", -"unstructured": "Strotjohann, N. L., Kowalski, M. & Franckowiak, A. Eddington bias for cosmic neutrino sources. Astron. Astrophys. 622, L9 (2019).", -"journal-title": "Astron. Astrophys." -}, -{ -"key": "1295_CR32", -"doi-asserted-by": "crossref", -"first-page": "425", -"DOI": "10.1146/annurev.aa.22.090184.002233", -"volume": "22", -"author": "AM Hillas", -"year": "1984", -"unstructured": "Hillas, A. M. The origin of ultra-high-energy cosmic rays. Annu. Rev. Astron. Astrophys. 22, 425–444 (1984).", -"journal-title": "Annu. Rev. Astron. Astrophys." -}, -{ -"key": "1295_CR33", -"doi-asserted-by": "crossref", -"first-page": "eaat1378", -"DOI": "10.1126/science.aat1378", -"volume": "361", -"author": "IceCube Collaboration", -"year": "2018", -"unstructured": "IceCube Collaboration et al. Multimessenger observations of a flaring blazar coincident with high-energy neutrino IceCube-170922A. Science 361, eaat1378 (2018).", -"journal-title": "Science" -}, -{ -"key": "1295_CR34", -"unstructured": "Blaufuss, E., Kintscher, T., Lu, L. & Tung, C. F. The next generation of IceCube real-time neutrino alerts. In Proc. 36th International Cosmic Ray Conference (ICRC2019) 1021 (PoS, 2019)." -}, -{ -"key": "1295_CR35", -"doi-asserted-by": "crossref", -"first-page": "071101", -"DOI": "10.1103/PhysRevLett.116.071101", -"volume": "116", -"author": "K Murase", -"year": "2016", -"unstructured": "Murase, K., Guetta, D. & Ahlers, M. Hidden cosmic-ray accelerators as an origin of TeV–PeV cosmic neutrinos. Phys. Rev. Lett. 116, 071101 (2016).", -"journal-title": "Phys. Rev. Lett." -}, -{ -"key": "1295_CR36", -"unstructured": "Stein, R. Search for neutrinos from populations of optical transients. In Proc. 36th International Cosmic Ray Conference (ICRC2019) 1016 (PoS, 2019).", -"DOI": "10.22323/1.358.1016", -"doi-asserted-by": "crossref" -}, -{ -"key": "1295_CR37", -"doi-asserted-by": "crossref", -"first-page": "048001", -"DOI": "10.1088/1538-3873/aaff99", -"volume": "131", -"author": "MW Coughlin", -"year": "2019", -"unstructured": "Coughlin, M. W. et al. 2900 square degree search for the optical counterpart of short gamma-ray burst GRB 180523B with the Zwicky Transient Facility. Publ. Astron. Soc. Pac. 131, 048001 (2019).", -"journal-title": "Publ. Astron. Soc. Pac." -}, -{ -"key": "1295_CR38", -"unstructured": "Stein, R. IceCube-200107A: IceCube observation of a high-energy neutrino candidate event. GCN Circ. 26655 (2020)." -}, -{ -"key": "1295_CR39", -"doi-asserted-by": "crossref", -"first-page": "018003", -"DOI": "10.1088/1538-3873/aae8ac", -"volume": "131", -"author": "FJ Masci", -"year": "2019", -"unstructured": "Masci, F. J. et al. The Zwicky Transient Facility: data processing, products, and archive. Publ. Astron. Soc. Pac. 131, 018003 (2019).", -"journal-title": "Publ. Astron. Soc. Pac." -}, -{ -"key": "1295_CR40", -"doi-asserted-by": "crossref", -"first-page": "018001", -"DOI": "10.1088/1538-3873/aae904", -"volume": "131", -"author": "MT Patterson", -"year": "2019", -"unstructured": "Patterson, M. T. et al. The Zwicky Transient Facility Alert Distribution System. Publ. Astron. Soc. Pac. 131, 018001 (2019).", -"journal-title": "Publ. Astron. Soc. Pac." -}, -{ -"key": "1295_CR41", -"unstructured": "Stein, R. & Reusch, S. robertdstein/ampel_followup_pipeline: V1.1 Release (Zenodo, 2020); https://doi.org/10.5281/zenodo.4048336", -"DOI": "10.5281/zenodo.4048336", -"doi-asserted-by": "publisher" -}, -{ -"key": "1295_CR42", -"doi-asserted-by": "crossref", -"first-page": "A147", -"DOI": "10.1051/0004-6361/201935634", -"volume": "631", -"author": "J Nordin", -"year": "2019", -"unstructured": "Nordin, J. et al. Transient processing and analysis using AMPEL: alert management, photometry, and evaluation of light curves. Astron. Astrophys. 631, A147 (2019).", -"journal-title": "Astron. Astrophys." -}, -{ -"key": "1295_CR43", -"doi-asserted-by": "crossref", -"first-page": "038002", -"DOI": "10.1088/1538-3873/aaf3fa", -"volume": "131", -"author": "A Mahabal", -"year": "2019", -"unstructured": "Mahabal, A. et al. Machine learning for the Zwicky Transient Facility. Publ. Astron. Soc. Pac. 131, 038002 (2019).", -"journal-title": "Publ. Astron. Soc. Pac." -}, -{ -"key": "1295_CR44", -"doi-asserted-by": "crossref", -"first-page": "075002", -"DOI": "10.1088/1538-3873/aac410", -"volume": "130", -"author": "MT Soumagnac", -"year": "2018", -"unstructured": "Soumagnac, M. T. & Ofek, E. O. catsHTM: a tool for fast accessing and cross-matching large astronomical catalogs. Publ. Astron. Soc. Pac. 130, 075002 (2018).", -"journal-title": "Publ. Astron. Soc. Pac." -}, -{ -"key": "1295_CR45", -"doi-asserted-by": "crossref", -"first-page": "A1", -"DOI": "10.1051/0004-6361/201833051", -"volume": "616", -"author": "Gaia Collaboration", -"year": "2018", -"unstructured": "Gaia Collaboration et al. Gaia Data Release 2. Summary of the contents and survey properties. Astron. Astrophys. 616, A1 (2018).", -"journal-title": "Astron. Astrophys." -}, -{ -"key": "1295_CR46", -"doi-asserted-by": "crossref", -"first-page": "128001", -"DOI": "10.1088/1538-3873/aae3d9", -"volume": "130", -"author": "Y Tachibana", -"year": "2018", -"unstructured": "Tachibana, Y. & Miller, A. A. A morphological classification model to identify unresolved PanSTARRS1 sources: application in the ZTF real-time pipeline. Publ. Astron. Soc. Pac. 130, 128001 (2018).", -"journal-title": "Publ. Astron. Soc. Pac." -}, -{ -"key": "1295_CR47", -"unstructured": "Chambers, K. C. et al. The Pan-STARRS1 Surveys. Preprint at https://arxiv.org/abs/1612.05560 (2016)." -}, -{ -"key": "1295_CR48", -"doi-asserted-by": "crossref", -"first-page": "1868", -"DOI": "10.1088/0004-6256/140/6/1868", -"volume": "140", -"author": "EL Wright", -"year": "2010", -"unstructured": "Wright, E. L. et al. The Wide-field Infrared Survey Explorer (WISE): mission description and initial on-orbit performance. Astron. J. 140, 1868–1881 (2010).", -"journal-title": "Astron. J." -}, -{ -"key": "1295_CR49", -"doi-asserted-by": "crossref", -"first-page": "051103", -"DOI": "10.1103/PhysRevLett.124.051103", -"volume": "124", -"author": "MG Aartsen", -"year": "2020", -"unstructured": "Aartsen, M. G. et al. Time-integrated neutrino source searches with 10 years of IceCube data. Phys. Rev. Lett. 124, 051103 (2020).", -"journal-title": "Phys. Rev. Lett." -}, -{ -"key": "1295_CR50", -"unstructured": "Steele, I. A. et al. The Liverpool Telescope: performance and first results. Proc. SPIE 5489, https://doi.org/10.1117/12.551456 (2004).", -"DOI": "10.1117/12.551456", -"doi-asserted-by": "publisher" -}, -{ -"key": "1295_CR51", -"doi-asserted-by": "crossref", -"first-page": "035003", -"DOI": "10.1088/1538-3873/aaa53f", -"volume": "130", -"author": "N Blagorodnova", -"year": "2018", -"unstructured": "Blagorodnova, N. et al. The SED Machine: a robotic spectrograph for fast transient classification. Publ. Astron. Soc. Pac. 130, 035003 (2018).", -"journal-title": "Publ. Astron. Soc. Pac." -}, -{ -"key": "1295_CR52", -"doi-asserted-by": "crossref", -"first-page": "A115", -"DOI": "10.1051/0004-6361/201935344", -"volume": "627", -"author": "M Rigault", -"year": "2019", -"unstructured": "Rigault, M. et al. Fully automated integral field spectrograph pipeline for the SEDMachine: pysedm. Astron. Astrophys. 627, A115 (2019).", -"journal-title": "Astron. Astrophys." -}, -{ -"key": "1295_CR53", -"doi-asserted-by": "crossref", -"first-page": "A68", -"DOI": "10.1051/0004-6361/201628275", -"volume": "593", -"author": "C Fremling", -"year": "2016", -"unstructured": "Fremling, C. et al. PTF12os and iPTF13bvn. Two stripped-envelope supernovae from low-mass progenitors in NGC 5806. Astron. Astrophys. 593, A68 (2016).", -"journal-title": "Astron. Astrophys." -}, -{ -"key": "1295_CR54", -"doi-asserted-by": "crossref", -"first-page": "72", -"DOI": "10.3847/1538-4357/aa998e", -"volume": "852", -"author": "S van Velzen", -"year": "2018", -"unstructured": "van Velzen, S. On the mass and luminosity functions of tidal disruption flares: rate suppression due to black hole event horizons. Astrophys. J. 852, 72 (2018).", -"journal-title": "Astrophys. J." -}, -{ -"key": "1295_CR55", -"doi-asserted-by": "crossref", -"first-page": "95", -"DOI": "10.1007/s11214-005-5095-4", -"volume": "120", -"author": "PWA Roming", -"year": "2005", -"unstructured": "Roming, P. W. A. et al. The Swift Ultra-Violet/Optical Telescope. Space Sci. Rev. 120, 95–142 (2005).", -"journal-title": "Space Sci. Rev." -}, -{ -"key": "1295_CR56", -"doi-asserted-by": "crossref", -"first-page": "1005", -"DOI": "10.1086/422091", -"volume": "611", -"author": "N Gehrels", -"year": "2004", -"unstructured": "Gehrels, N. et al. The Swift Gamma-Ray Burst Mission. Astrophys. J. 611, 1005–1020 (2004).", -"journal-title": "Astrophys. J." -}, -{ -"key": "1295_CR57", -"doi-asserted-by": "crossref", -"first-page": "19", -"DOI": "10.3847/0004-637X/829/1/19", -"volume": "829", -"author": "S van Velzen", -"year": "2016", -"unstructured": "van Velzen, S., Mendez, A. J., Krolik, J. H. & Gorjian, V. Discovery of transient infrared emission from dust heated by stellar tidal disruption flares. Astrophys. J. 829, 19 (2016).", -"journal-title": "Astrophys. J." -}, -{ -"key": "1295_CR58", -"doi-asserted-by": "crossref", -"first-page": "575", -"DOI": "10.1093/mnras/stw307", -"volume": "458", -"author": "W Lu", -"year": "2016", -"unstructured": "Lu, W., Kumar, P. & Evans, N. J. Infrared emission from tidal disruption events—probing the pc-scale dust content around galactic nuclei. Mon. Not. R. Astron. Soc. 458, 575–581 (2016).", -"journal-title": "Mon. Not. R. Astron. Soc." -}, -{ -"key": "1295_CR59", -"unstructured": "Miller, J. S. & Stone, R. P. S. The Kast Double Spectrograph. Technical Report No. 66 (Lick Observatory, 1993)." -}, -{ -"key": "1295_CR60", -"doi-asserted-by": "crossref", -"first-page": "375", -"DOI": "10.1086/133562", -"volume": "107", -"author": "JB Oke", -"year": "1995", -"unstructured": "Oke, J. B. et al. The Keck Low-Resolution Imaging Spectrometer. Publ. Astron. Soc. Pac. 107, 375–385 (1995).", -"journal-title": "Publ. Astron. Soc. Pac." -}, -{ -"key": "1295_CR61", -"doi-asserted-by": "crossref", -"first-page": "765", -"DOI": "10.1111/j.1365-2966.2005.08957.x", -"volume": "359", -"author": "A Garcia-Rissmann", -"year": "2005", -"unstructured": "Garcia-Rissmann, A. et al. An atlas of calcium triplet spectra of active galaxies. Mon. Not. R. Astron. Soc. 359, 765–780 (2005).", -"journal-title": "Mon. Not. R. Astron. Soc." -}, -{ -"key": "1295_CR62", -"doi-asserted-by": "crossref", -"first-page": "165", -"DOI": "10.1007/s11214-005-5097-2", -"volume": "120", -"author": "DN Burrows", -"year": "2005", -"unstructured": "Burrows, D. N. et al. The Swift X-Ray Telescope. Space Sci. Rev. 120, 165–195 (2005).", -"journal-title": "Space Sci. Rev." -}, -{ -"key": "1295_CR63", -"doi-asserted-by": "crossref", -"first-page": "L1", -"DOI": "10.1051/0004-6361:20000036", -"volume": "365", -"author": "F Jansen", -"year": "2001", -"unstructured": "Jansen, F. et al. XMM-Newton Observatory. I. The spacecraft and operations. Astron. Astrophys. 365, L1–L6 (2001).", -"journal-title": "Astron. Astrophys." -}, -{ -"key": "1295_CR64", -"unstructured": "HI4PI Collaboration et al. HI4PI: a full-sky H i survey based on EBHIS and GASS. Astron. Astrophys. 594, A116 (2016).", -"DOI": "10.1051/0004-6361/201629178", -"doi-asserted-by": "crossref" -}, -{ -"key": "1295_CR65", -"unstructured": "Arnaud, K. A. in Astronomical Data Analysis Software and Systems V (eds Jacoby, G. H. & Barnes, J.) 17 (Astronomical Society of the Pacific, 1996)." -}, -{ -"key": "1295_CR66", -"doi-asserted-by": "crossref", -"first-page": "1545", -"DOI": "10.1111/j.1365-2966.2008.13953.x", -"volume": "391", -"author": "JTL Zwart", -"year": "2008", -"unstructured": "Zwart, J. T. L. et al. The Arcminute Microkelvin Imager. Mon. Not. R. Astron. Soc. 391, 1545–1558 (2008).", -"journal-title": "Mon. Not. R. Astron. Soc." -}, -{ -"key": "1295_CR67", -"doi-asserted-by": "crossref", -"first-page": "5677", -"DOI": "10.1093/mnras/sty074", -"volume": "475", -"author": "J Hickish", -"year": "2018", -"unstructured": "Hickish, J. et al. A digital correlator upgrade for the Arcminute MicroKelvin Imager. Mon. Not. R. Astron. Soc. 475, 5677–5687 (2018).", -"journal-title": "Mon. Not. R. Astron. Soc." -}, -{ -"key": "1295_CR68", -"doi-asserted-by": "crossref", -"first-page": "1396", -"DOI": "10.1093/mnras/stv1728", -"volume": "453", -"author": "YC Perrott", -"year": "2015", -"unstructured": "Perrott, Y. C. et al. AMI galactic plane survey at 16 GHz—II. Full data release with extended coverage and improved processing. Mon. Not. R. Astron. Soc. 453, 1396–1403 (2015).", -"journal-title": "Mon. Not. R. Astron. Soc." -}, -{ -"key": "1295_CR69", -"unstructured": "McMullin, J. P., Waters, B., Schiebel, D., Young, W. & Golap, K. in Astronomical Data Analysis Software and Systems XVI (eds Shaw, R. A. et al.) 127 (Astronomical Society of the Pacific, 2007)." -}, -{ -"key": "1295_CR70", -"doi-asserted-by": "crossref", -"first-page": "1071", -"DOI": "10.1088/0004-637X/697/2/1071", -"volume": "697", -"author": "WB Atwood", -"year": "2009", -"unstructured": "Atwood, W. B. et al. The Large Area Telescope on the Fermi Gamma-ray Space Telescope mission. Astrophys. J. 697, 1071–1102 (2009).", -"journal-title": "Astrophys. J." -}, -{ -"key": "1295_CR71", -"unstructured": "Wood, M. et al. Fermipy: an open-source Python package for analysis of Fermi-LAT Data. In Proc. 35th International Cosmic Ray Conference (ICRC2017) 824 (PoS, 2017).", -"DOI": "10.22323/1.301.0824", -"doi-asserted-by": "crossref" -}, -{ -"key": "1295_CR72", -"unstructured": "Garrappa, S. & Buson, S. Fermi-LAT gamma-ray observations of IceCube-191001A. GCN Circ. 25932 (2019)." -}, -{ -"key": "1295_CR73", -"unstructured": "The Fermi-LAT collaboration. Fermi Large Area Telescope Fourth Source Catalog. Astrophys. J. Suppl. Ser. 247, 33 (2020)." -}, -{ -"key": "1295_CR74", -"doi-asserted-by": "crossref", -"first-page": "14", -"DOI": "10.1088/0004-637X/767/1/14", -"volume": "767", -"author": "T Pursimo", -"year": "2013", -"unstructured": "Pursimo, T. et al. The Micro-Arcsecond Scintillation-Induced Variability (MASIV) survey. III. Optical identifications and new redshifts. Astrophys. J. 767, 14 (2013).", -"journal-title": "Astrophys. J." -}, -{ -"key": "1295_CR75", -"unstructured": "Garrappa, S., Buson, S. & Fermi-LAT Collaboration. Fermi-LAT gamma-ray observations of IceCube-191001A. GCN Circ. 25932 (2019)." -}, -{ -"key": "1295_CR76", -"doi-asserted-by": "crossref", -"first-page": "133", -"DOI": "10.1088/0004-637X/802/2/133", -"volume": "802", -"author": "C Diltz", -"year": "2015", -"unstructured": "Diltz, C., Böttcher, M. & Fossati, G. Time dependent hadronic modeling of flat spectrum radio quasars. Astrophys. J. 802, 133 (2015).", -"journal-title": "Astrophys. J." -}, -{ -"key": "1295_CR77", -"doi-asserted-by": "crossref", -"first-page": "88", -"DOI": "10.1038/s41550-018-0610-1", -"volume": "3", -"author": "S Gao", -"year": "2019", -"unstructured": "Gao, S., Fedynitch, A., Winter, W. & Pohl, M. Modelling the coincident observation of a high-energy neutrino and a bright blazar flare. Nat. Astron. 3, 88–92 (2019).", -"journal-title": "Nat. Astron." -}, -{ -"key": "1295_CR78", -"unstructured": "Ayala, H. IceCube-191001A: HAWC follow-up. GCN Circ. 25936 (2019)." -}, -{ -"key": "1295_CR79", -"doi-asserted-by": "crossref", -"first-page": "62", -"DOI": "10.1126/science.aad1182", -"volume": "351", -"author": "S van Velzen", -"year": "2016", -"unstructured": "van Velzen, S. et al. A radio jet from the optical and x-ray bright stellar tidal disruption flare ASASSN-14li. Science 351, 62–65 (2016).", -"journal-title": "Science" -}, -{ -"key": "1295_CR80", -"doi-asserted-by": "crossref", -"first-page": "306", -"DOI": "10.1086/670067", -"volume": "125", -"author": "D Foreman-Mackey", -"year": "2013", -"unstructured": "Foreman-Mackey, D., Hogg, D. W., Lang, D. & Goodman, J. emcee: the MCMC Hammer. Publ. Astron. Soc. Pac. 125, 306 (2013).", -"journal-title": "Publ. Astron. Soc. Pac." -}, -{ -"key": "1295_CR81", -"doi-asserted-by": "crossref", -"first-page": "6", -"DOI": "10.3847/1538-4365/aab761", -"volume": "236", -"author": "J Guillochon", -"year": "2018", -"unstructured": "Guillochon, J. et al. MOSFiT: Modular Open Source Fitter for Transients. Astrophys. J. Suppl. Ser. 236, 6 (2018).", -"journal-title": "Astrophys. J. Suppl. Ser." -}, -{ -"key": "1295_CR82", -"doi-asserted-by": "crossref", -"first-page": "e008", -"DOI": "10.1017/pasa.2013.44", -"volume": "31", -"author": "J Granot", -"year": "2014", -"unstructured": "Granot, J. & van der Horst, A. J. Gamma-ray burst jets and their radio observations. Publ. Astron. Soc. Aust. 31, e008 (2014).", -"journal-title": "Publ. Astron. Soc. Aust." -}, -{ -"key": "1295_CR83", -"doi-asserted-by": "crossref", -"first-page": "102", -"DOI": "10.1088/0004-637X/815/2/102", -"volume": "815", -"author": "W Fong", -"year": "2015", -"unstructured": "Fong, W., Berger, E., Margutti, R. & Zauderer, B. A. A decade of short-duration gamma-ray burst broadband afterglows: energetics, circumburst densities, and jet opening angles. Astrophys. J. 815, 102 (2015).", -"journal-title": "Astrophys. J." -} -], -"container-title": [ -"Nature Astronomy" -], -"original-title": [ - -], -"language": "en", -"link": [ -{ -"URL": "http://www.nature.com/articles/s41550-020-01295-8.pdf", -"content-type": "application/pdf", -"content-version": "vor", -"intended-application": "text-mining" -}, -{ -"URL": "http://www.nature.com/articles/s41550-020-01295-8", -"content-type": "text/html", -"content-version": "vor", -"intended-application": "text-mining" -}, -{ -"URL": "http://www.nature.com/articles/s41550-020-01295-8.pdf", -"content-type": "application/pdf", -"content-version": "vor", -"intended-application": "similarity-checking" -} -], -"deposited": { -"date-parts": [ -[ -2021, -5, -17 -] -], -"date-time": "2021-05-17T15:08:12Z", -"timestamp": 1621264092000 -}, -"score": 1.0, -"subtitle": [ - -], -"short-title": [ - -], -"issued": { -"date-parts": [ -[ -3021, -2, -22 -] -] -}, -"references-count": 83, -"journal-issue": { -"published-print": { -"date-parts": [ -[ -2021, -5 -] -] -}, -"issue": "5" -}, -"alternative-id": [ -"1295" -], -"URL": "http://dx.doi.org/10.1038/s41550-020-01295-8", -"relation": { -"cites": [ - -] -}, -"ISSN": [ -"2397-3366" -], -"issn-type": [ -{ -"value": "2397-3366", -"type": "electronic" -} -], -"assertion": [ -{ -"value": "21 July 2020", -"order": 1, -"name": "received", -"label": "Received", -"group": { -"name": "ArticleHistory", -"label": "Article History" -} -}, -{ -"value": "16 December 2020", -"order": 2, -"name": "accepted", -"label": "Accepted", -"group": { -"name": "ArticleHistory", -"label": "Article History" -} -}, -{ -"value": "22 February 2021", -"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" -} -} -] + "indexed": { + "date-parts": [ + [ + 2021, + 7, + 2 + ] + ], + "date-time": "2021-07-02T07:30:10Z", + "timestamp": 1625211010708 + }, + "reference-count": 83, + "publisher": "Springer Science and Business Media LLC", + "issue": "5", + "license": [ + { + "URL": "https://www.springer.com/tdm", + "start": { + "date-parts": [ + [ + 2021, + 2, + 22 + ] + ], + "date-time": "2021-02-22T00:00:00Z", + "timestamp": 1613952000000 + }, + "delay-in-days": 0, + "content-version": "tdm" + }, + { + "URL": "https://academic.oup.com/journals/pages/open_access/funder_policies/chorus/standard_publication_model", + "start": { + "date-parts": [ + [ + 2021, + 2, + 22 + ] + ], + "date-time": "2021-02-22T00:00:00Z", + "timestamp": 1613952000000 + }, + "delay-in-days": 0, + "content-version": "vor" + } + ], + "content-domain": { + "domain": [ + "link.springer.com" + ], + "crossmark-restriction": false + }, + "short-container-title": [ + "Nat Astron" + ], + "published-print": { + "date-parts": [ + [ + 2021, + 5 + ] + ] + }, + "DOI": "10.1038/s41550-020-01295-8", + "type": "journal-article", + "created": { + "date-parts": [ + [ + 2021, + 2, + 22 + ] + ], + "date-time": "2021-02-22T17:03:42Z", + "timestamp": 1614013422000 + }, + "page": "510-518", + "update-policy": "http://dx.doi.org/10.1007/springer_crossmark_policy", + "source": "Crossref", + "is-referenced-by-count": 6, + "title": [ + "A tidal disruption event coincident with a high-energy neutrino" + ], + "prefix": "10.1038", + "volume": "5", + "author": [ + { + "ORCID": "http://orcid.org/0000-0003-2434-0387", + "authenticated-orcid": false, + "given": "Robert", + "family": "Stein", + "sequence": "first", + "affiliation": [ + ] + }, + { + "ORCID": "http://orcid.org/0000-0002-3859-8074", + "authenticated-orcid": false, + "given": "Sjoert van", + "family": "Velzen", + "sequence": "additional", + "affiliation": [ + ] + }, + { + "ORCID": "http://orcid.org/0000-0001-8594-8666", + "authenticated-orcid": false, + "given": "Marek", + "family": "Kowalski", + "sequence": "additional", + "affiliation": [ + ] + }, + { + "given": "Anna", + "family": "Franckowiak", + "sequence": "additional", + "affiliation": [ + ] + }, + { + "ORCID": "http://orcid.org/0000-0003-3703-5154", + "authenticated-orcid": false, + "given": "Suvi", + "family": "Gezari", + "sequence": "additional", + "affiliation": [ + ] + }, + { + "ORCID": "http://orcid.org/0000-0003-3124-2814", + "authenticated-orcid": false, + "given": "James C. A.", + "family": "Miller-Jones", + "sequence": "additional", + "affiliation": [ + ] + }, + { + "given": "Sara", + "family": "Frederick", + "sequence": "additional", + "affiliation": [ + ] + }, + { + "ORCID": "http://orcid.org/0000-0003-0466-3779", + "authenticated-orcid": false, + "given": "Itai", + "family": "Sfaradi", + "sequence": "additional", + "affiliation": [ + ] + }, + { + "given": "Michael F.", + "family": "Bietenholz", + "sequence": "additional", + "affiliation": [ + ] + }, + { + "ORCID": "http://orcid.org/0000-0002-5936-1156", + "authenticated-orcid": false, + "given": "Assaf", + "family": "Horesh", + "sequence": "additional", + "affiliation": [ + ] + }, + { + "given": "Rob", + "family": "Fender", + "sequence": "additional", + "affiliation": [ + ] + }, + { + "ORCID": "http://orcid.org/0000-0003-2403-4582", + "authenticated-orcid": false, + "given": "Simone", + "family": "Garrappa", + "sequence": "additional", + "affiliation": [ + ] + }, + { + "ORCID": "http://orcid.org/0000-0002-2184-6430", + "authenticated-orcid": false, + "given": "Tomás", + "family": "Ahumada", + "sequence": "additional", + "affiliation": [ + ] + }, + { + "given": "Igor", + "family": "Andreoni", + "sequence": "additional", + "affiliation": [ + ] + }, + { + "given": "Justin", + "family": "Belicki", + "sequence": "additional", + "affiliation": [ + ] + }, + { + "ORCID": "http://orcid.org/0000-0001-8018-5348", + "authenticated-orcid": false, + "given": "Eric C.", + "family": "Bellm", + "sequence": "additional", + "affiliation": [ + ] + }, + { + "given": "Markus", + "family": "Böttcher", + "sequence": "additional", + "affiliation": [ + ] + }, + { + "given": "Valery", + "family": "Brinnel", + "sequence": "additional", + "affiliation": [ + ] + }, + { + "given": "Rick", + "family": "Burruss", + "sequence": "additional", + "affiliation": [ + ] + }, + { + "ORCID": "http://orcid.org/0000-0003-1673-970X", + "authenticated-orcid": false, + "given": "S. Bradley", + "family": "Cenko", + "sequence": "additional", + "affiliation": [ + ] + }, + { + "ORCID": "http://orcid.org/0000-0002-8262-2924", + "authenticated-orcid": false, + "given": "Michael W.", + "family": "Coughlin", + "sequence": "additional", + "affiliation": [ + ] + }, + { + "ORCID": "http://orcid.org/0000-0003-2292-0441", + "authenticated-orcid": false, + "given": "Virginia", + "family": "Cunningham", + "sequence": "additional", + "affiliation": [ + ] + }, + { + "given": "Andrew", + "family": "Drake", + "sequence": "additional", + "affiliation": [ + ] + }, + { + "given": "Glennys R.", + "family": "Farrar", + "sequence": "additional", + "affiliation": [ + ] + }, + { + "given": "Michael", + "family": "Feeney", + "sequence": "additional", + "affiliation": [ + ] + }, + { + "given": "Ryan J.", + "family": "Foley", + "sequence": "additional", + "affiliation": [ + ] + }, + { + "ORCID": "http://orcid.org/0000-0002-3653-5598", + "authenticated-orcid": false, + "given": "Avishay", + "family": "Gal-Yam", + "sequence": "additional", + "affiliation": [ + ] + }, + { + "given": "V. Zach", + "family": "Golkhou", + "sequence": "additional", + "affiliation": [ + ] + }, + { + "ORCID": "http://orcid.org/0000-0002-4163-4996", + "authenticated-orcid": false, + "given": "Ariel", + "family": "Goobar", + "sequence": "additional", + "affiliation": [ + ] + }, + { + "ORCID": "http://orcid.org/0000-0002-3168-0139", + "authenticated-orcid": false, + "given": "Matthew J.", + "family": "Graham", + "sequence": "additional", + "affiliation": [ + ] + }, + { + "given": "Erica", + "family": "Hammerstein", + "sequence": "additional", + "affiliation": [ + ] + }, + { + "ORCID": "http://orcid.org/0000-0003-3367-3415", + "authenticated-orcid": false, + "given": "George", + "family": "Helou", + "sequence": "additional", + "affiliation": [ + ] + }, + { + "ORCID": "http://orcid.org/0000-0002-9878-7889", + "authenticated-orcid": false, + "given": "Tiara", + "family": "Hung", + "sequence": "additional", + "affiliation": [ + ] + }, + { + "given": "Mansi M.", + "family": "Kasliwal", + "sequence": "additional", + "affiliation": [ + ] + }, + { + "ORCID": "http://orcid.org/0000-0002-5740-7747", + "authenticated-orcid": false, + "given": "Charles D.", + "family": "Kilpatrick", + "sequence": "additional", + "affiliation": [ + ] + }, + { + "ORCID": "http://orcid.org/0000-0002-5105-344X", + "authenticated-orcid": false, + "given": "Albert K. H.", + "family": "Kong", + "sequence": "additional", + "affiliation": [ + ] + }, + { + "ORCID": "http://orcid.org/0000-0002-6540-1484", + "authenticated-orcid": false, + "given": "Thomas", + "family": "Kupfer", + "sequence": "additional", + "affiliation": [ + ] + }, + { + "ORCID": "http://orcid.org/0000-0003-2451-5482", + "authenticated-orcid": false, + "given": "Russ R.", + "family": "Laher", + "sequence": "additional", + "affiliation": [ + ] + }, + { + "ORCID": "http://orcid.org/0000-0003-2242-0244", + "authenticated-orcid": false, + "given": "Ashish A.", + "family": "Mahabal", + "sequence": "additional", + "affiliation": [ + ] + }, + { + "ORCID": "http://orcid.org/0000-0002-8532-9395", + "authenticated-orcid": false, + "given": "Frank J.", + "family": "Masci", + "sequence": "additional", + "affiliation": [ + ] + }, + { + "ORCID": "http://orcid.org/0000-0003-0280-7484", + "authenticated-orcid": false, + "given": "Jannis", + "family": "Necker", + "sequence": "additional", + "affiliation": [ + ] + }, + { + "ORCID": "http://orcid.org/0000-0001-8342-6274", + "authenticated-orcid": false, + "given": "Jakob", + "family": "Nordin", + "sequence": "additional", + "affiliation": [ + ] + }, + { + "given": "Daniel A.", + "family": "Perley", + "sequence": "additional", + "affiliation": [ + ] + }, + { + "ORCID": "http://orcid.org/0000-0002-8121-2560", + "authenticated-orcid": false, + "given": "Mickael", + "family": "Rigault", + "sequence": "additional", + "affiliation": [ + ] + }, + { + "ORCID": "http://orcid.org/0000-0002-7788-628X", + "authenticated-orcid": false, + "given": "Simeon", + "family": "Reusch", + "sequence": "additional", + "affiliation": [ + ] + }, + { + "given": "Hector", + "family": "Rodriguez", + "sequence": "additional", + "affiliation": [ + ] + }, + { + "ORCID": "http://orcid.org/0000-0002-7559-315X", + "authenticated-orcid": false, + "given": "César", + "family": "Rojas-Bravo", + "sequence": "additional", + "affiliation": [ + ] + }, + { + "ORCID": "http://orcid.org/0000-0001-7648-4142", + "authenticated-orcid": false, + "given": "Ben", + "family": "Rusholme", + "sequence": "additional", + "affiliation": [ + ] + }, + { + "ORCID": "http://orcid.org/0000-0003-4401-0430", + "authenticated-orcid": false, + "given": "David L.", + "family": "Shupe", + "sequence": "additional", + "affiliation": [ + ] + }, + { + "ORCID": "http://orcid.org/0000-0001-9898-5597", + "authenticated-orcid": false, + "given": "Leo P.", + "family": "Singer", + "sequence": "additional", + "affiliation": [ + ] + }, + { + "ORCID": "http://orcid.org/0000-0003-1546-6615", + "authenticated-orcid": false, + "given": "Jesper", + "family": "Sollerman", + "sequence": "additional", + "affiliation": [ + ] + }, + { + "given": "Maayane T.", + "family": "Soumagnac", + "sequence": "additional", + "affiliation": [ + ] + }, + { + "given": "Daniel", + "family": "Stern", + "sequence": "additional", + "affiliation": [ + ] + }, + { + "given": "Kirsty", + "family": "Taggart", + "sequence": "additional", + "affiliation": [ + ] + }, + { + "given": "Jakob", + "family": "van Santen", + "sequence": "additional", + "affiliation": [ + ] + }, + { + "given": "Charlotte", + "family": "Ward", + "sequence": "additional", + "affiliation": [ + ] + }, + { + "given": "Patrick", + "family": "Woudt", + "sequence": "additional", + "affiliation": [ + ] + }, + { + "ORCID": "http://orcid.org/0000-0001-6747-8509", + "authenticated-orcid": false, + "given": "Yuhan", + "family": "Yao", + "sequence": "additional", + "affiliation": [ + ] + } + ], + "member": "297", + "published-online": { + "date-parts": [ + [ + 2021, + 2, + 22 + ] + ] + }, + "reference": [ + { + "key": "1295_CR1", + "doi-asserted-by": "crossref", + "first-page": "P03012", + "DOI": "10.1088/1748-0221/12/03/P03012", + "volume": "12", + "author": "MG Aartsen", + "year": "2017", + "unstructured": "Aartsen, M. G. et al. The IceCube Neutrino Observatory: instrumentation and online systems. J. Instrum. 12, P03012 (2017).", + "journal-title": "J. Instrum." + }, + { + "key": "1295_CR2", + "unstructured": "Stein, R. IceCube-191001A—IceCube observation of a high-energy neutrino candidate event. GCN Circ. 25913 (2019)." + }, + { + "key": "1295_CR3", + "doi-asserted-by": "crossref", + "first-page": "018002", + "DOI": "10.1088/1538-3873/aaecbe", + "volume": "131", + "author": "EC Bellm", + "year": "2019", + "unstructured": "Bellm, E. C. et al. The Zwicky Transient Facility: system overview, performance, and first results. Publ. Astron. Soc. Pac. 131, 018002 (2019).", + "journal-title": "Publ. Astron. Soc. Pac." + }, + { + "key": "1295_CR4", + "doi-asserted-by": "crossref", + "first-page": "533", + "DOI": "10.1016/j.astropartphys.2007.03.005", + "volume": "27", + "author": "M Kowalski", + "year": "2007", + "unstructured": "Kowalski, M. & Mohr, A. Detecting neutrino transients with optical follow-up observations. Astropart. Phys. 27, 533–538 (2007).", + "journal-title": "Astropart. Phys." + }, + { + "key": "1295_CR5", + "doi-asserted-by": "crossref", + "first-page": "329", + "DOI": "10.1088/0004-637X/693/1/329", + "volume": "693", + "author": "GR Farrar", + "year": "2009", + "unstructured": "Farrar, G. R. & Gruzinov, A. Giant AGN flares and cosmic ray bursts. Astrophys. J. 693, 329–332 (2009).", + "journal-title": "Astrophys. J." + }, + { + "key": "1295_CR6", + "doi-asserted-by": "crossref", + "first-page": "1354", + "DOI": "10.1093/mnras/stx863", + "volume": "469", + "author": "L Dai", + "year": "2017", + "unstructured": "Dai, L. & Fang, K. Can tidal disruption events produce the IceCube neutrinos? Mon. Not. R. Astron. Soc. 469, 1354–1359 (2017).", + "journal-title": "Mon. Not. R. Astron. Soc." + }, + { + "key": "1295_CR7", + "doi-asserted-by": "crossref", + "first-page": "114", + "DOI": "10.3847/1538-4357/ab44ca", + "volume": "886", + "author": "K Hayasaki", + "year": "2019", + "unstructured": "Hayasaki, K. & Yamazaki, R. Neutrino emissions from tidal disruption remnants. Astrophys. J. 886, 114 (2019).", + "journal-title": "Astrophys. J." + }, + { + "key": "1295_CR8", + "unstructured": "Farrar, G. R. & Piran, T. Tidal disruption jets as the source of Ultra-High Energy Cosmic Rays. Preprint at https://arxiv.org/abs/1411.0704 (2014)." + }, + { + "key": "1295_CR9", + "doi-asserted-by": "crossref", + "first-page": "3", + "DOI": "10.3847/1538-4357/aa6344", + "volume": "838", + "author": "N Senno", + "year": "2017", + "unstructured": "Senno, N., Murase, K. & Mészáros, P. High-energy neutrino flares from X-ray bright and dark tidal disruption events. Astrophys. J. 838, 3 (2017).", + "journal-title": "Astrophys. J." + }, + { + "key": "1295_CR10", + "doi-asserted-by": "crossref", + "first-page": "083005", + "DOI": "10.1103/PhysRevD.93.083005", + "volume": "93", + "author": "XY Wang", + "year": "2016", + "unstructured": "Wang, X. Y. & Liu, R. Y. Tidal disruption jets of supermassive black holes as hidden sources of cosmic rays: explaining the IceCube TeV–PeV neutrinos. Phys. Rev. D 93, 083005 (2016).", + "journal-title": "Phys. Rev. D" + }, + { + "key": "1295_CR11", + "doi-asserted-by": "crossref", + "first-page": "123001", + "DOI": "10.1103/PhysRevD.95.123001", + "volume": "95", + "author": "C Lunardini", + "year": "2017", + "unstructured": "Lunardini, C. & Winter, W. High energy neutrinos from the tidal disruption of stars. Phys. Rev. D 95, 123001 (2017).", + "journal-title": "Phys. Rev. D" + }, + { + "key": "1295_CR12", + "unstructured": "Stein, R., Franckowiak, A., Necker, J., Gezari, S. & Velzen, S. V. Candidate counterparts to IceCube-191001A with ZTF. Astron. Telegr. 13160 (2019)." + }, + { + "key": "1295_CR13", + "doi-asserted-by": "crossref", + "first-page": "078001", + "DOI": "10.1088/1538-3873/ab006c", + "volume": "131", + "author": "MJ Graham", + "year": "2019", + "unstructured": "Graham, M. J. et al. The Zwicky Transient Facility: science objectives. Publ. Astron. Soc. Pac. 131, 078001 (2019).", + "journal-title": "Publ. Astron. Soc. Pac." + }, + { + "key": "1295_CR14", + "unstructured": "Nordin, J. et al. TNS Astronomical Transient Report 33340 (2019)." + }, + { + "key": "1295_CR15", + "unstructured": "Nicholl, M. et al. ePESSTO+ classification of optical transients. Astron. Telegr. 12752 (2019)." + }, + { + "key": "1295_CR16", + "unstructured": "van Velzen, S. et al. Seventeen tidal disruption events from the first half of ZTF survey observations: entering a new era of population studies. Preprint at https://arxiv.org/abs/2001.01409 (2020)." + }, + { + "key": "1295_CR17", + "doi-asserted-by": "crossref", + "first-page": "82", + "DOI": "10.3847/1538-4357/ab1844", + "volume": "878", + "author": "S van Velzen", + "year": "2019", + "unstructured": "van Velzen, S. et al. Late-time UV observations of tidal disruption flares reveal unobscured, compact accretion disks. Astrophys. J. 878, 82 (2019).", + "journal-title": "Astrophys. J." + }, + { + "key": "1295_CR18", + "doi-asserted-by": "crossref", + "first-page": "5655", + "DOI": "10.1093/mnras/staa192", + "volume": "492", + "author": "A Mummery", + "year": "2020", + "unstructured": "Mummery, A. & Balbus, S. A. The spectral evolution of disc dominated tidal disruption events. Mon. Not. R. Astron. Soc. 492, 5655–5674 (2020).", + "journal-title": "Mon. Not. R. Astron. Soc." + }, + { + "key": "1295_CR19", + "doi-asserted-by": "crossref", + "first-page": "184", + "DOI": "10.1088/0004-637X/764/2/184", + "volume": "764", + "author": "NJ McConnell", + "year": "2013", + "unstructured": "McConnell, N. J. & Ma, C. P. Revisiting the scaling relations of black hole masses and host galaxy properties. Astrophys. J. 764, 184 (2013).", + "journal-title": "Astrophys. J." + }, + { + "key": "1295_CR20", + "doi-asserted-by": "crossref", + "first-page": "149", + "DOI": "10.3847/1538-4357/aa633b", + "volume": "838", + "author": "K Auchettl", + "year": "2017", + "unstructured": "Auchettl, K., Guillochon, J. & Ramirez-Ruiz, E. New physical insights about tidal disruption events from a comprehensive observational inventory at X-ray wavelengths. Astrophys. J. 838, 149 (2017).", + "journal-title": "Astrophys. J." + }, + { + "key": "1295_CR21", + "doi-asserted-by": "crossref", + "first-page": "4136", + "DOI": "10.1093/mnras/stz1602", + "volume": "487", + "author": "T Wevers", + "year": "2019", + "unstructured": "Wevers, T. et al. Black hole masses of tidal disruption event host galaxies II. Mon. Not. R. Astron. Soc. 487, 4136–4152 (2019).", + "journal-title": "Mon. Not. R. Astron. Soc." + }, + { + "key": "1295_CR22", + "doi-asserted-by": "crossref", + "first-page": "198", + "DOI": "10.3847/1538-4357/aafe0c", + "volume": "872", + "author": "S van Velzen", + "year": "2019", + "unstructured": "van Velzen, S. et al. The first tidal disruption flare in ZTF: from photometric selection to multi-wavelength characterization. Astrophys. J. 872, 198 (2019).", + "journal-title": "Astrophys. J." + }, + { + "key": "1295_CR23", + "doi-asserted-by": "crossref", + "first-page": "A81", + "DOI": "10.1051/0004-6361/201117855", + "volume": "538", + "author": "G Morlino", + "year": "2012", + "unstructured": "Morlino, G. & Caprioli, D. Strong evidence for hadron acceleration in Tycho’s supernova remnant. Astron. Astrophys. 538, A81 (2012).", + "journal-title": "Astron. Astrophys." + }, + { + "key": "1295_CR24", + "doi-asserted-by": "crossref", + "first-page": "86", + "DOI": "10.3847/1538-4357/aaa8e0", + "volume": "854", + "author": "T Eftekhari", + "year": "2018", + "unstructured": "Eftekhari, T., Berger, E., Zauderer, B. A., Margutti, R. & Alexander, K. D. Radio monitoring of the tidal disruption event Swift J164449.3+573451. III. Late-time jet energetics and a deviation from equipartition. Astrophys. J. 854, 86 (2018).", + "journal-title": "Astrophys. J." + }, + { + "key": "1295_CR25", + "doi-asserted-by": "crossref", + "first-page": "1258", + "DOI": "10.1093/mnras/stt1645", + "volume": "436", + "author": "A Horesh", + "year": "2013", + "unstructured": "Horesh, A. et al. An early and comprehensive millimetre and centimetre wave and X-ray study of SN 2011dh: a non-equipartition blast wave expanding into a massive stellar wind. Mon. Not. R. Astron. Soc. 436, 1258–1267 (2013).", + "journal-title": "Mon. Not. R. Astron. Soc." + }, + { + "key": "1295_CR26", + "doi-asserted-by": "crossref", + "first-page": "78", + "DOI": "10.1088/0004-637X/772/1/78", + "volume": "772", + "author": "R Barniol Duran", + "year": "2013", + "unstructured": "Barniol Duran, R., Nakar, E. & Piran, T. Radius constraints and minimal equipartition energy of relativistically moving synchrotron sources. Astrophys. J. 772, 78 (2013).", + "journal-title": "Astrophys. J." + }, + { + "key": "1295_CR27", + "doi-asserted-by": "crossref", + "first-page": "69", + "DOI": "10.1071/AS02053", + "volume": "20", + "author": "AG Polatidis", + "year": "2003", + "unstructured": "Polatidis, A. G. & Conway, J. E. Proper motions in compact symmetric objects. Publ. Astron. Soc. Aust. 20, 69–74 (2003).", + "journal-title": "Publ. Astron. Soc. Aust." + }, + { + "key": "1295_CR28", + "doi-asserted-by": "crossref", + "first-page": "L25", + "DOI": "10.3847/2041-8205/819/2/L25", + "volume": "819", + "author": "KD Alexander", + "year": "2016", + "unstructured": "Alexander, K. D., Berger, E., Guillochon, J., Zauderer, B. A. & Williams, P. K. G. Discovery of an outflow from radio observations of the tidal disruption event ASASSN-14li. Astrophys. J. Lett. 819, L25 (2016).", + "journal-title": "Astrophys. J. Lett." + }, + { + "key": "1295_CR29", + "doi-asserted-by": "crossref", + "first-page": "127", + "DOI": "10.3847/0004-637X/827/2/127", + "volume": "827", + "author": "J Krolik", + "year": "2016", + "unstructured": "Krolik, J., Piran, T., Svirski, G. & Cheng, R. M. ASASSN-14li: a model tidal disruption event. Astrophys. J. 827, 127 (2016).", + "journal-title": "Astrophys. J." + }, + { + "key": "1295_CR30", + "doi-asserted-by": "crossref", + "first-page": "1", + "DOI": "10.3847/1538-4357/aab361", + "volume": "856", + "author": "DR Pasham", + "year": "2018", + "unstructured": "Pasham, D. R. & van Velzen, S. Discovery of a time lag between the soft X-ray and radio emission of the tidal disruption flare ASASSN-14li: evidence for linear disk–jet coupling. Astrophys. J. 856, 1 (2018).", + "journal-title": "Astrophys. J." + }, + { + "key": "1295_CR31", + "doi-asserted-by": "crossref", + "first-page": "L9", + "DOI": "10.1051/0004-6361/201834750", + "volume": "622", + "author": "NL Strotjohann", + "year": "2019", + "unstructured": "Strotjohann, N. L., Kowalski, M. & Franckowiak, A. Eddington bias for cosmic neutrino sources. Astron. Astrophys. 622, L9 (2019).", + "journal-title": "Astron. Astrophys." + }, + { + "key": "1295_CR32", + "doi-asserted-by": "crossref", + "first-page": "425", + "DOI": "10.1146/annurev.aa.22.090184.002233", + "volume": "22", + "author": "AM Hillas", + "year": "1984", + "unstructured": "Hillas, A. M. The origin of ultra-high-energy cosmic rays. Annu. Rev. Astron. Astrophys. 22, 425–444 (1984).", + "journal-title": "Annu. Rev. Astron. Astrophys." + }, + { + "key": "1295_CR33", + "doi-asserted-by": "crossref", + "first-page": "eaat1378", + "DOI": "10.1126/science.aat1378", + "volume": "361", + "author": "IceCube Collaboration", + "year": "2018", + "unstructured": "IceCube Collaboration et al. Multimessenger observations of a flaring blazar coincident with high-energy neutrino IceCube-170922A. Science 361, eaat1378 (2018).", + "journal-title": "Science" + }, + { + "key": "1295_CR34", + "unstructured": "Blaufuss, E., Kintscher, T., Lu, L. & Tung, C. F. The next generation of IceCube real-time neutrino alerts. In Proc. 36th International Cosmic Ray Conference (ICRC2019) 1021 (PoS, 2019)." + }, + { + "key": "1295_CR35", + "doi-asserted-by": "crossref", + "first-page": "071101", + "DOI": "10.1103/PhysRevLett.116.071101", + "volume": "116", + "author": "K Murase", + "year": "2016", + "unstructured": "Murase, K., Guetta, D. & Ahlers, M. Hidden cosmic-ray accelerators as an origin of TeV–PeV cosmic neutrinos. Phys. Rev. Lett. 116, 071101 (2016).", + "journal-title": "Phys. Rev. Lett." + }, + { + "key": "1295_CR36", + "unstructured": "Stein, R. Search for neutrinos from populations of optical transients. In Proc. 36th International Cosmic Ray Conference (ICRC2019) 1016 (PoS, 2019).", + "DOI": "10.22323/1.358.1016", + "doi-asserted-by": "crossref" + }, + { + "key": "1295_CR37", + "doi-asserted-by": "crossref", + "first-page": "048001", + "DOI": "10.1088/1538-3873/aaff99", + "volume": "131", + "author": "MW Coughlin", + "year": "2019", + "unstructured": "Coughlin, M. W. et al. 2900 square degree search for the optical counterpart of short gamma-ray burst GRB 180523B with the Zwicky Transient Facility. Publ. Astron. Soc. Pac. 131, 048001 (2019).", + "journal-title": "Publ. Astron. Soc. Pac." + }, + { + "key": "1295_CR38", + "unstructured": "Stein, R. IceCube-200107A: IceCube observation of a high-energy neutrino candidate event. GCN Circ. 26655 (2020)." + }, + { + "key": "1295_CR39", + "doi-asserted-by": "crossref", + "first-page": "018003", + "DOI": "10.1088/1538-3873/aae8ac", + "volume": "131", + "author": "FJ Masci", + "year": "2019", + "unstructured": "Masci, F. J. et al. The Zwicky Transient Facility: data processing, products, and archive. Publ. Astron. Soc. Pac. 131, 018003 (2019).", + "journal-title": "Publ. Astron. Soc. Pac." + }, + { + "key": "1295_CR40", + "doi-asserted-by": "crossref", + "first-page": "018001", + "DOI": "10.1088/1538-3873/aae904", + "volume": "131", + "author": "MT Patterson", + "year": "2019", + "unstructured": "Patterson, M. T. et al. The Zwicky Transient Facility Alert Distribution System. Publ. Astron. Soc. Pac. 131, 018001 (2019).", + "journal-title": "Publ. Astron. Soc. Pac." + }, + { + "key": "1295_CR41", + "unstructured": "Stein, R. & Reusch, S. robertdstein/ampel_followup_pipeline: V1.1 Release (Zenodo, 2020); https://doi.org/10.5281/zenodo.4048336", + "DOI": "10.5281/zenodo.4048336", + "doi-asserted-by": "publisher" + }, + { + "key": "1295_CR42", + "doi-asserted-by": "crossref", + "first-page": "A147", + "DOI": "10.1051/0004-6361/201935634", + "volume": "631", + "author": "J Nordin", + "year": "2019", + "unstructured": "Nordin, J. et al. Transient processing and analysis using AMPEL: alert management, photometry, and evaluation of light curves. Astron. Astrophys. 631, A147 (2019).", + "journal-title": "Astron. Astrophys." + }, + { + "key": "1295_CR43", + "doi-asserted-by": "crossref", + "first-page": "038002", + "DOI": "10.1088/1538-3873/aaf3fa", + "volume": "131", + "author": "A Mahabal", + "year": "2019", + "unstructured": "Mahabal, A. et al. Machine learning for the Zwicky Transient Facility. Publ. Astron. Soc. Pac. 131, 038002 (2019).", + "journal-title": "Publ. Astron. Soc. Pac." + }, + { + "key": "1295_CR44", + "doi-asserted-by": "crossref", + "first-page": "075002", + "DOI": "10.1088/1538-3873/aac410", + "volume": "130", + "author": "MT Soumagnac", + "year": "2018", + "unstructured": "Soumagnac, M. T. & Ofek, E. O. catsHTM: a tool for fast accessing and cross-matching large astronomical catalogs. Publ. Astron. Soc. Pac. 130, 075002 (2018).", + "journal-title": "Publ. Astron. Soc. Pac." + }, + { + "key": "1295_CR45", + "doi-asserted-by": "crossref", + "first-page": "A1", + "DOI": "10.1051/0004-6361/201833051", + "volume": "616", + "author": "Gaia Collaboration", + "year": "2018", + "unstructured": "Gaia Collaboration et al. Gaia Data Release 2. Summary of the contents and survey properties. Astron. Astrophys. 616, A1 (2018).", + "journal-title": "Astron. Astrophys." + }, + { + "key": "1295_CR46", + "doi-asserted-by": "crossref", + "first-page": "128001", + "DOI": "10.1088/1538-3873/aae3d9", + "volume": "130", + "author": "Y Tachibana", + "year": "2018", + "unstructured": "Tachibana, Y. & Miller, A. A. A morphological classification model to identify unresolved PanSTARRS1 sources: application in the ZTF real-time pipeline. Publ. Astron. Soc. Pac. 130, 128001 (2018).", + "journal-title": "Publ. Astron. Soc. Pac." + }, + { + "key": "1295_CR47", + "unstructured": "Chambers, K. C. et al. The Pan-STARRS1 Surveys. Preprint at https://arxiv.org/abs/1612.05560 (2016)." + }, + { + "key": "1295_CR48", + "doi-asserted-by": "crossref", + "first-page": "1868", + "DOI": "10.1088/0004-6256/140/6/1868", + "volume": "140", + "author": "EL Wright", + "year": "2010", + "unstructured": "Wright, E. L. et al. The Wide-field Infrared Survey Explorer (WISE): mission description and initial on-orbit performance. Astron. J. 140, 1868–1881 (2010).", + "journal-title": "Astron. J." + }, + { + "key": "1295_CR49", + "doi-asserted-by": "crossref", + "first-page": "051103", + "DOI": "10.1103/PhysRevLett.124.051103", + "volume": "124", + "author": "MG Aartsen", + "year": "2020", + "unstructured": "Aartsen, M. G. et al. Time-integrated neutrino source searches with 10 years of IceCube data. Phys. Rev. Lett. 124, 051103 (2020).", + "journal-title": "Phys. Rev. Lett." + }, + { + "key": "1295_CR50", + "unstructured": "Steele, I. A. et al. The Liverpool Telescope: performance and first results. Proc. SPIE 5489, https://doi.org/10.1117/12.551456 (2004).", + "DOI": "10.1117/12.551456", + "doi-asserted-by": "publisher" + }, + { + "key": "1295_CR51", + "doi-asserted-by": "crossref", + "first-page": "035003", + "DOI": "10.1088/1538-3873/aaa53f", + "volume": "130", + "author": "N Blagorodnova", + "year": "2018", + "unstructured": "Blagorodnova, N. et al. The SED Machine: a robotic spectrograph for fast transient classification. Publ. Astron. Soc. Pac. 130, 035003 (2018).", + "journal-title": "Publ. Astron. Soc. Pac." + }, + { + "key": "1295_CR52", + "doi-asserted-by": "crossref", + "first-page": "A115", + "DOI": "10.1051/0004-6361/201935344", + "volume": "627", + "author": "M Rigault", + "year": "2019", + "unstructured": "Rigault, M. et al. Fully automated integral field spectrograph pipeline for the SEDMachine: pysedm. Astron. Astrophys. 627, A115 (2019).", + "journal-title": "Astron. Astrophys." + }, + { + "key": "1295_CR53", + "doi-asserted-by": "crossref", + "first-page": "A68", + "DOI": "10.1051/0004-6361/201628275", + "volume": "593", + "author": "C Fremling", + "year": "2016", + "unstructured": "Fremling, C. et al. PTF12os and iPTF13bvn. Two stripped-envelope supernovae from low-mass progenitors in NGC 5806. Astron. Astrophys. 593, A68 (2016).", + "journal-title": "Astron. Astrophys." + }, + { + "key": "1295_CR54", + "doi-asserted-by": "crossref", + "first-page": "72", + "DOI": "10.3847/1538-4357/aa998e", + "volume": "852", + "author": "S van Velzen", + "year": "2018", + "unstructured": "van Velzen, S. On the mass and luminosity functions of tidal disruption flares: rate suppression due to black hole event horizons. Astrophys. J. 852, 72 (2018).", + "journal-title": "Astrophys. J." + }, + { + "key": "1295_CR55", + "doi-asserted-by": "crossref", + "first-page": "95", + "DOI": "10.1007/s11214-005-5095-4", + "volume": "120", + "author": "PWA Roming", + "year": "2005", + "unstructured": "Roming, P. W. A. et al. The Swift Ultra-Violet/Optical Telescope. Space Sci. Rev. 120, 95–142 (2005).", + "journal-title": "Space Sci. Rev." + }, + { + "key": "1295_CR56", + "doi-asserted-by": "crossref", + "first-page": "1005", + "DOI": "10.1086/422091", + "volume": "611", + "author": "N Gehrels", + "year": "2004", + "unstructured": "Gehrels, N. et al. The Swift Gamma-Ray Burst Mission. Astrophys. J. 611, 1005–1020 (2004).", + "journal-title": "Astrophys. J." + }, + { + "key": "1295_CR57", + "doi-asserted-by": "crossref", + "first-page": "19", + "DOI": "10.3847/0004-637X/829/1/19", + "volume": "829", + "author": "S van Velzen", + "year": "2016", + "unstructured": "van Velzen, S., Mendez, A. J., Krolik, J. H. & Gorjian, V. Discovery of transient infrared emission from dust heated by stellar tidal disruption flares. Astrophys. J. 829, 19 (2016).", + "journal-title": "Astrophys. J." + }, + { + "key": "1295_CR58", + "doi-asserted-by": "crossref", + "first-page": "575", + "DOI": "10.1093/mnras/stw307", + "volume": "458", + "author": "W Lu", + "year": "2016", + "unstructured": "Lu, W., Kumar, P. & Evans, N. J. Infrared emission from tidal disruption events—probing the pc-scale dust content around galactic nuclei. Mon. Not. R. Astron. Soc. 458, 575–581 (2016).", + "journal-title": "Mon. Not. R. Astron. Soc." + }, + { + "key": "1295_CR59", + "unstructured": "Miller, J. S. & Stone, R. P. S. The Kast Double Spectrograph. Technical Report No. 66 (Lick Observatory, 1993)." + }, + { + "key": "1295_CR60", + "doi-asserted-by": "crossref", + "first-page": "375", + "DOI": "10.1086/133562", + "volume": "107", + "author": "JB Oke", + "year": "1995", + "unstructured": "Oke, J. B. et al. The Keck Low-Resolution Imaging Spectrometer. Publ. Astron. Soc. Pac. 107, 375–385 (1995).", + "journal-title": "Publ. Astron. Soc. Pac." + }, + { + "key": "1295_CR61", + "doi-asserted-by": "crossref", + "first-page": "765", + "DOI": "10.1111/j.1365-2966.2005.08957.x", + "volume": "359", + "author": "A Garcia-Rissmann", + "year": "2005", + "unstructured": "Garcia-Rissmann, A. et al. An atlas of calcium triplet spectra of active galaxies. Mon. Not. R. Astron. Soc. 359, 765–780 (2005).", + "journal-title": "Mon. Not. R. Astron. Soc." + }, + { + "key": "1295_CR62", + "doi-asserted-by": "crossref", + "first-page": "165", + "DOI": "10.1007/s11214-005-5097-2", + "volume": "120", + "author": "DN Burrows", + "year": "2005", + "unstructured": "Burrows, D. N. et al. The Swift X-Ray Telescope. Space Sci. Rev. 120, 165–195 (2005).", + "journal-title": "Space Sci. Rev." + }, + { + "key": "1295_CR63", + "doi-asserted-by": "crossref", + "first-page": "L1", + "DOI": "10.1051/0004-6361:20000036", + "volume": "365", + "author": "F Jansen", + "year": "2001", + "unstructured": "Jansen, F. et al. XMM-Newton Observatory. I. The spacecraft and operations. Astron. Astrophys. 365, L1–L6 (2001).", + "journal-title": "Astron. Astrophys." + }, + { + "key": "1295_CR64", + "unstructured": "HI4PI Collaboration et al. HI4PI: a full-sky H i survey based on EBHIS and GASS. Astron. Astrophys. 594, A116 (2016).", + "DOI": "10.1051/0004-6361/201629178", + "doi-asserted-by": "crossref" + }, + { + "key": "1295_CR65", + "unstructured": "Arnaud, K. A. in Astronomical Data Analysis Software and Systems V (eds Jacoby, G. H. & Barnes, J.) 17 (Astronomical Society of the Pacific, 1996)." + }, + { + "key": "1295_CR66", + "doi-asserted-by": "crossref", + "first-page": "1545", + "DOI": "10.1111/j.1365-2966.2008.13953.x", + "volume": "391", + "author": "JTL Zwart", + "year": "2008", + "unstructured": "Zwart, J. T. L. et al. The Arcminute Microkelvin Imager. Mon. Not. R. Astron. Soc. 391, 1545–1558 (2008).", + "journal-title": "Mon. Not. R. Astron. Soc." + }, + { + "key": "1295_CR67", + "doi-asserted-by": "crossref", + "first-page": "5677", + "DOI": "10.1093/mnras/sty074", + "volume": "475", + "author": "J Hickish", + "year": "2018", + "unstructured": "Hickish, J. et al. A digital correlator upgrade for the Arcminute MicroKelvin Imager. Mon. Not. R. Astron. Soc. 475, 5677–5687 (2018).", + "journal-title": "Mon. Not. R. Astron. Soc." + }, + { + "key": "1295_CR68", + "doi-asserted-by": "crossref", + "first-page": "1396", + "DOI": "10.1093/mnras/stv1728", + "volume": "453", + "author": "YC Perrott", + "year": "2015", + "unstructured": "Perrott, Y. C. et al. AMI galactic plane survey at 16 GHz—II. Full data release with extended coverage and improved processing. Mon. Not. R. Astron. Soc. 453, 1396–1403 (2015).", + "journal-title": "Mon. Not. R. Astron. Soc." + }, + { + "key": "1295_CR69", + "unstructured": "McMullin, J. P., Waters, B., Schiebel, D., Young, W. & Golap, K. in Astronomical Data Analysis Software and Systems XVI (eds Shaw, R. A. et al.) 127 (Astronomical Society of the Pacific, 2007)." + }, + { + "key": "1295_CR70", + "doi-asserted-by": "crossref", + "first-page": "1071", + "DOI": "10.1088/0004-637X/697/2/1071", + "volume": "697", + "author": "WB Atwood", + "year": "2009", + "unstructured": "Atwood, W. B. et al. The Large Area Telescope on the Fermi Gamma-ray Space Telescope mission. Astrophys. J. 697, 1071–1102 (2009).", + "journal-title": "Astrophys. J." + }, + { + "key": "1295_CR71", + "unstructured": "Wood, M. et al. Fermipy: an open-source Python package for analysis of Fermi-LAT Data. In Proc. 35th International Cosmic Ray Conference (ICRC2017) 824 (PoS, 2017).", + "DOI": "10.22323/1.301.0824", + "doi-asserted-by": "crossref" + }, + { + "key": "1295_CR72", + "unstructured": "Garrappa, S. & Buson, S. Fermi-LAT gamma-ray observations of IceCube-191001A. GCN Circ. 25932 (2019)." + }, + { + "key": "1295_CR73", + "unstructured": "The Fermi-LAT collaboration. Fermi Large Area Telescope Fourth Source Catalog. Astrophys. J. Suppl. Ser. 247, 33 (2020)." + }, + { + "key": "1295_CR74", + "doi-asserted-by": "crossref", + "first-page": "14", + "DOI": "10.1088/0004-637X/767/1/14", + "volume": "767", + "author": "T Pursimo", + "year": "2013", + "unstructured": "Pursimo, T. et al. The Micro-Arcsecond Scintillation-Induced Variability (MASIV) survey. III. Optical identifications and new redshifts. Astrophys. J. 767, 14 (2013).", + "journal-title": "Astrophys. J." + }, + { + "key": "1295_CR75", + "unstructured": "Garrappa, S., Buson, S. & Fermi-LAT Collaboration. Fermi-LAT gamma-ray observations of IceCube-191001A. GCN Circ. 25932 (2019)." + }, + { + "key": "1295_CR76", + "doi-asserted-by": "crossref", + "first-page": "133", + "DOI": "10.1088/0004-637X/802/2/133", + "volume": "802", + "author": "C Diltz", + "year": "2015", + "unstructured": "Diltz, C., Böttcher, M. & Fossati, G. Time dependent hadronic modeling of flat spectrum radio quasars. Astrophys. J. 802, 133 (2015).", + "journal-title": "Astrophys. J." + }, + { + "key": "1295_CR77", + "doi-asserted-by": "crossref", + "first-page": "88", + "DOI": "10.1038/s41550-018-0610-1", + "volume": "3", + "author": "S Gao", + "year": "2019", + "unstructured": "Gao, S., Fedynitch, A., Winter, W. & Pohl, M. Modelling the coincident observation of a high-energy neutrino and a bright blazar flare. Nat. Astron. 3, 88–92 (2019).", + "journal-title": "Nat. Astron." + }, + { + "key": "1295_CR78", + "unstructured": "Ayala, H. IceCube-191001A: HAWC follow-up. GCN Circ. 25936 (2019)." + }, + { + "key": "1295_CR79", + "doi-asserted-by": "crossref", + "first-page": "62", + "DOI": "10.1126/science.aad1182", + "volume": "351", + "author": "S van Velzen", + "year": "2016", + "unstructured": "van Velzen, S. et al. A radio jet from the optical and x-ray bright stellar tidal disruption flare ASASSN-14li. Science 351, 62–65 (2016).", + "journal-title": "Science" + }, + { + "key": "1295_CR80", + "doi-asserted-by": "crossref", + "first-page": "306", + "DOI": "10.1086/670067", + "volume": "125", + "author": "D Foreman-Mackey", + "year": "2013", + "unstructured": "Foreman-Mackey, D., Hogg, D. W., Lang, D. & Goodman, J. emcee: the MCMC Hammer. Publ. Astron. Soc. Pac. 125, 306 (2013).", + "journal-title": "Publ. Astron. Soc. Pac." + }, + { + "key": "1295_CR81", + "doi-asserted-by": "crossref", + "first-page": "6", + "DOI": "10.3847/1538-4365/aab761", + "volume": "236", + "author": "J Guillochon", + "year": "2018", + "unstructured": "Guillochon, J. et al. MOSFiT: Modular Open Source Fitter for Transients. Astrophys. J. Suppl. Ser. 236, 6 (2018).", + "journal-title": "Astrophys. J. Suppl. Ser." + }, + { + "key": "1295_CR82", + "doi-asserted-by": "crossref", + "first-page": "e008", + "DOI": "10.1017/pasa.2013.44", + "volume": "31", + "author": "J Granot", + "year": "2014", + "unstructured": "Granot, J. & van der Horst, A. J. Gamma-ray burst jets and their radio observations. Publ. Astron. Soc. Aust. 31, e008 (2014).", + "journal-title": "Publ. Astron. Soc. Aust." + }, + { + "key": "1295_CR83", + "doi-asserted-by": "crossref", + "first-page": "102", + "DOI": "10.1088/0004-637X/815/2/102", + "volume": "815", + "author": "W Fong", + "year": "2015", + "unstructured": "Fong, W., Berger, E., Margutti, R. & Zauderer, B. A. A decade of short-duration gamma-ray burst broadband afterglows: energetics, circumburst densities, and jet opening angles. Astrophys. J. 815, 102 (2015).", + "journal-title": "Astrophys. J." + } + ], + "container-title": [ + "Nature Astronomy" + ], + "original-title": [ + ], + "language": "en", + "link": [ + { + "URL": "http://www.nature.com/articles/s41550-020-01295-8.pdf", + "content-type": "application/pdf", + "content-version": "vor", + "intended-application": "text-mining" + }, + { + "URL": "http://www.nature.com/articles/s41550-020-01295-8", + "content-type": "text/html", + "content-version": "vor", + "intended-application": "text-mining" + }, + { + "URL": "http://www.nature.com/articles/s41550-020-01295-8.pdf", + "content-type": "application/pdf", + "content-version": "vor", + "intended-application": "similarity-checking" + } + ], + "deposited": { + "date-parts": [ + [ + 2021, + 5, + 17 + ] + ], + "date-time": "2021-05-17T15:08:12Z", + "timestamp": 1621264092000 + }, + "score": 1.0, + "subtitle": [ + ], + "short-title": [ + ], + "issued": { + "date-parts": [ + [ + 3021, + 2, + 22 + ] + ] + }, + "references-count": 83, + "journal-issue": { + "published-print": { + "date-parts": [ + [ + 2021, + 5 + ] + ] + }, + "issue": "5" + }, + "alternative-id": [ + "1295" + ], + "URL": "http://dx.doi.org/10.1038/s41550-020-01295-8", + "relation": { + "cites": [ + ] + }, + "ISSN": [ + "2397-3366" + ], + "issn-type": [ + { + "value": "2397-3366", + "type": "electronic" + } + ], + "assertion": [ + { + "value": "21 July 2020", + "order": 1, + "name": "received", + "label": "Received", + "group": { + "name": "ArticleHistory", + "label": "Article History" + } + }, + { + "value": "16 December 2020", + "order": 2, + "name": "accepted", + "label": "Accepted", + "group": { + "name": "ArticleHistory", + "label": "Article History" + } + }, + { + "value": "22 February 2021", + "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 aba8cee12..bd6dd7cec 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 @@ -1,9 +1,14 @@ package eu.dnetlib.dhp.doiboost.crossref +import eu.dnetlib.dhp.schema.common.ModelConstants import eu.dnetlib.dhp.schema.oaf._ import eu.dnetlib.dhp.utils.DHPUtils import eu.dnetlib.doiboost.crossref.Crossref2Oaf import org.codehaus.jackson.map.{ObjectMapper, SerializationConfig} +import org.json4s +import org.json4s.JsonAST.{JField, JObject, JString} +import org.json4s.{DefaultFormats, JValue} +import org.json4s.jackson.JsonMethods import org.junit.jupiter.api.Assertions._ import org.junit.jupiter.api.Test import org.slf4j.{Logger, LoggerFactory} @@ -109,6 +114,44 @@ class CrossrefMappingTest { } + + private def parseJson(input:String):JValue = { + implicit lazy val formats: DefaultFormats.type = org.json4s.DefaultFormats + lazy val json: json4s.JValue = JsonMethods.parse(input) + + json + } + + @Test + def testCitationRelations():Unit = { + val json = Source.fromInputStream(getClass.getResourceAsStream("/eu/dnetlib/doiboost/crossref/publication_license_embargo.json")).mkString + + + assertNotNull(json) + assertFalse(json.isEmpty) + + val result:List[Oaf] = Crossref2Oaf.convert(json) + + assertTrue(result.nonEmpty) + + + val j = parseJson(json) + + val doisReference: List[String] = for { + JObject(reference_json) <- j \ "reference" + JField("DOI", JString(doi_json)) <- reference_json + } yield doi_json + + + + val relationList:List[Relation] = result.filter(s => s.isInstanceOf[Relation]).map(r=> r.asInstanceOf[Relation]).filter(r => r.getSubRelType.equalsIgnoreCase(ModelConstants.CITATION)) + + assertNotNull(relationList) + assertFalse(relationList.isEmpty) + + assertEquals(doisReference.size*2, relationList.size) + } + @Test def testEmptyTitle(): Unit = { val json = Source From 032a401cbf930304affe67eb533bb4402ba8eebe Mon Sep 17 00:00:00 2001 From: dimitrispie Date: Mon, 20 Feb 2023 09:29:20 +0200 Subject: [PATCH 317/535] Bug fixes --- .../oozie_app/copyDataToImpalaCluster.sh | 2 +- .../oa/graph/stats/oozie_app/indicators.sh | 6 +++-- .../stats/oozie_app/scripts/step15_5.sql | 16 +++++------ .../scripts/step16-createIndicatorsTables.sql | 16 +++++------ .../dhp/oa/graph/stats/oozie_app/workflow.xml | 27 ++++++++++--------- 5 files changed, 36 insertions(+), 31 deletions(-) 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 5b6752398..843877c90 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 @@ -14,7 +14,7 @@ function copydb() { # copy the databases from ocean to impala - #echo "copying $db" + 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 # change ownership to impala diff --git a/dhp-workflows/dhp-stats-update/src/main/resources/eu/dnetlib/dhp/oa/graph/stats/oozie_app/indicators.sh b/dhp-workflows/dhp-stats-update/src/main/resources/eu/dnetlib/dhp/oa/graph/stats/oozie_app/indicators.sh index 473864315..2f1eefa0c 100644 --- a/dhp-workflows/dhp-stats-update/src/main/resources/eu/dnetlib/dhp/oa/graph/stats/oozie_app/indicators.sh +++ b/dhp-workflows/dhp-stats-update/src/main/resources/eu/dnetlib/dhp/oa/graph/stats/oozie_app/indicators.sh @@ -7,7 +7,9 @@ then fi export TARGET=$1 -export SCRIPT_PATH=$2 +export STATS_EXT=$2 +export SCRIPT_PATH=$3 + 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 -hiveconf hive.auto.convert.join=false" export HADOOP_USER_NAME="oozie" @@ -15,7 +17,7 @@ echo "Getting file from " $SCRIPT_PATH hdfs dfs -copyToLocal $SCRIPT_PATH echo "Creating indicators" -hive $HIVE_OPTS --database ${TARGET} -e "show tables" | grep -v WARN | sed "s/^\(.*\)/analyze table ${TARGET}.\1 compute statistics;/" > foo +hive $HIVE_OPTS --database ${TARGET} -e "show tables" | grep -v WARN | sed "s/STATS_EXT/${STATS_EXT}/g" |sed "s/^\(.*\)/analyze table ${TARGET}.\1 compute statistics;/" > foo hive $HIVE_OPTS -f foo hive $HIVE_OPTS --database ${TARGET} -f step16-createIndicatorsTables.sql echo "Indicators created" 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 1ae856355..61c0726ff 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 @@ -29,17 +29,17 @@ select rcount.pid, sum(case when rcount.type='publication' then rcount.count els from rcount group by rcount.pid; -create view ${stats_db_name}.rndexpenditure as select * from stats_ext.rndexpediture; -create view ${stats_db_name}.rndgdpexpenditure as select * from stats_ext.rndgdpexpenditure; -create view ${stats_db_name}.doctoratestudents as select * from stats_ext.doctoratestudents; -create view ${stats_db_name}.totalresearchers as select * from stats_ext.totalresearchers; -create view ${stats_db_name}.totalresearchersft as select * from stats_ext.totalresearchersft; -create view ${stats_db_name}.hrrst as select * from stats_ext.hrrst; +create view ${stats_db_name}.rndexpenditure as select * from ${external_stats_db_name}.rndexpediture; +create view ${stats_db_name}.rndgdpexpenditure as select * from ${external_stats_db_name}.rndgdpexpenditure; +create view ${stats_db_name}.doctoratestudents as select * from ${external_stats_db_name}.doctoratestudents; +create view ${stats_db_name}.totalresearchers as select * from ${external_stats_db_name}.totalresearchers; +create view ${stats_db_name}.totalresearchersft as select * from ${external_stats_db_name}.totalresearchersft; +create view ${stats_db_name}.hrrst as select * from ${external_stats_db_name}.hrrst; create table ${stats_db_name}.result_instance stored as parquet as select distinct r.* from ( - select substr(r.id, 4) as id, inst.accessright.classname as accessright, substr(inst.collectedfrom.key, 4) as collectedfrom, + select substr(r.id, 4) as id, inst.accessright.classname as accessright, inst.accessright.openaccessroute as accessright_uw, substr(inst.collectedfrom.key, 4) as collectedfrom, substr(inst.hostedby.key, 4) as hostedby, inst.dateofacceptance.value as dateofacceptance, inst.license.value as license, p.qualifier.classname as pidtype, p.value as pid 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; @@ -52,4 +52,4 @@ from ( join ${stats_db_name}.result res on res.id=r.id where r.amount is not null; -create view ${stats_db_name}.issn_gold_oa_dataset as select * from stats_ext.issn_gold_oa_dataset; \ No newline at end of file +create view ${stats_db_name}.issn_gold_oa_dataset as select * from ${external_stats_db_name}.issn_gold_oa_dataset; \ 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/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 ac4d4202a..4fd941e5d 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 @@ -180,7 +180,7 @@ from 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 - join stats_ext.plan_s_jn ps where (ps.issn_print=d.issn_printed and ps.issn_online=d.issn_online) + 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; @@ -192,7 +192,7 @@ from publication pd left outer join ( select pd.id, 1 as is_transformative from publication_datasources pd join 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) + 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; @@ -220,11 +220,11 @@ ANALYZE TABLE indi_result_no_of_copies COMPUTE STATISTICS; create table if not exists 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 + 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 + FROM STATS_EXT.plan_s_jn WHERE issn_online != "" and (journal_is_in_doaj = FALSE OR journal_is_oa = FALSE)), issn AS ( SELECT * @@ -291,7 +291,7 @@ create table if not exists indi_pub_gold_oa stored as parquet as journal_is_oa, issn_1 as issn FROM - stats_ext.oa_journals + STATS_EXT.oa_journals WHERE issn_1 != "" UNION @@ -301,7 +301,7 @@ create table if not exists indi_pub_gold_oa stored as parquet as journal_is_oa, issn_2 as issn FROM - stats_ext.oa_journals + STATS_EXT.oa_journals WHERE issn_2 != "" ), issn AS ( SELECT * @@ -343,7 +343,7 @@ create table if not exists indi_pub_hybrid stored as parquet as issn_1 as issn, has_apc FROM - stats_ext.oa_journals + STATS_EXT.oa_journals WHERE issn_1 != "" UNION @@ -354,7 +354,7 @@ create table if not exists indi_pub_hybrid stored as parquet as issn_2 as issn, has_apc FROM - stats_ext.oa_journals + STATS_EXT.oa_journals WHERE issn_2 != "" ), issn AS ( SELECT * 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 e23bd0aa3..e9453d7b1 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 @@ -108,6 +108,7 @@ ${wf:conf('resumeFrom') eq 'step21-createObservatoryDB-post'} ${wf:conf('resumeFrom') eq 'step22-copyDataToImpalaCluster'} ${wf:conf('resumeFrom') eq 'step23-finalizeImpalaCluster'} + ${wf:conf('resumeFrom') eq 'Step24-updateCache'} @@ -289,6 +290,7 @@ stats_db_name=${stats_db_name} openaire_db_name=${openaire_db_name} + external_stats_db_name=${external_stats_db_name} @@ -313,6 +315,7 @@ ${nameNode} indicators.sh ${stats_db_name} + ${external_stats_db_name} ${wf:appPath()}/scripts/step16-createIndicatorsTables.sql indicators.sh @@ -452,21 +455,21 @@ ${observatory_db_shadow_name} finalizeImpalaCluster.sh + + + + + + + ${jobTracker} + ${nameNode} + updateCache.sh + ${stats_tool_api_url} + updateCache.sh + - - - - - - - - - - - - From d2f9ccf9347a9828588624d109bb453795b526e5 Mon Sep 17 00:00:00 2001 From: dimitrispie Date: Mon, 20 Feb 2023 10:41:21 +0200 Subject: [PATCH 318/535] Changes to separate monitor wf --- .../oozie_app/copyDataToImpalaCluster.sh | 62 +++++++++++++++++++ .../oozie_app/finalizeImpalaCluster.sh | 28 +++++++++ .../oa/graph/monitor/oozie_app/updateCache.sh | 4 ++ 3 files changed, 94 insertions(+) create mode 100644 dhp-workflows/dhp-monitor-update/src/main/resources/eu/dnetlib/dhp/oa/graph/monitor/oozie_app/copyDataToImpalaCluster.sh create mode 100644 dhp-workflows/dhp-monitor-update/src/main/resources/eu/dnetlib/dhp/oa/graph/monitor/oozie_app/finalizeImpalaCluster.sh create mode 100644 dhp-workflows/dhp-monitor-update/src/main/resources/eu/dnetlib/dhp/oa/graph/monitor/oozie_app/updateCache.sh diff --git a/dhp-workflows/dhp-monitor-update/src/main/resources/eu/dnetlib/dhp/oa/graph/monitor/oozie_app/copyDataToImpalaCluster.sh b/dhp-workflows/dhp-monitor-update/src/main/resources/eu/dnetlib/dhp/oa/graph/monitor/oozie_app/copyDataToImpalaCluster.sh new file mode 100644 index 000000000..843877c90 --- /dev/null +++ b/dhp-workflows/dhp-monitor-update/src/main/resources/eu/dnetlib/dhp/oa/graph/monitor/oozie_app/copyDataToImpalaCluster.sh @@ -0,0 +1,62 @@ +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="dimitris.pierrakos" +export HADOOP_USER_NAME=$5 + +function copydb() { + db=$1 + + # 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 + + # change ownership to impala + hdfs dfs -conf /etc/impala_cluster/hdfs-site.xml -chmod -R 777 /tmp/${db}.db + + # create the databases + impala-shell -i impala-cluster-dn1.openaire.eu -q "drop database if exists ${db} cascade"; + impala-shell -i impala-cluster-dn1.openaire.eu -q "create database ${db}"; + + impala-shell -q "INVALIDATE METADATA" + echo "creating schema for ${db}" + 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 -i impala-cluster-dn1.openaire.eu -c -f - + + # run the same command twice because we may have failures in the first run (due to views pointing to the same db) + 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 -i impala-cluster-dn1.openaire.eu -c -f - + + # 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/${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/${db}.db +} + +STATS_DB=$1 +MONITOR_DB=$2 +OBSERVATORY_DB=$3 +EXT_DB=$4 +HADOOP_USER_NAME=$5 + +copydb $EXT_DB +copydb $STATS_DB +copydb $MONITOR_DB +copydb $OBSERVATORY_DB + diff --git a/dhp-workflows/dhp-monitor-update/src/main/resources/eu/dnetlib/dhp/oa/graph/monitor/oozie_app/finalizeImpalaCluster.sh b/dhp-workflows/dhp-monitor-update/src/main/resources/eu/dnetlib/dhp/oa/graph/monitor/oozie_app/finalizeImpalaCluster.sh new file mode 100644 index 000000000..fedfa00af --- /dev/null +++ b/dhp-workflows/dhp-monitor-update/src/main/resources/eu/dnetlib/dhp/oa/graph/monitor/oozie_app/finalizeImpalaCluster.sh @@ -0,0 +1,28 @@ +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 + + 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 - +} + +STATS_DB=$1 +STATS_DB_SHADOW=$2 +MONITOR_DB=$3 +MONITOR_DB_SHADOW=$4 +OBSERVATORY_DB=$5 +OBSERVATORY_DB_SHADOW=$6 + +createShadowDB $STATS_DB $STATS_DB_SHADOW +createShadowDB $MONITOR_DB $MONITOR_DB_SHADOW +createShadowDB $OBSERVATORY_DB $OBSERVATORY_DB_SHADOW diff --git a/dhp-workflows/dhp-monitor-update/src/main/resources/eu/dnetlib/dhp/oa/graph/monitor/oozie_app/updateCache.sh b/dhp-workflows/dhp-monitor-update/src/main/resources/eu/dnetlib/dhp/oa/graph/monitor/oozie_app/updateCache.sh new file mode 100644 index 000000000..03aa535e1 --- /dev/null +++ b/dhp-workflows/dhp-monitor-update/src/main/resources/eu/dnetlib/dhp/oa/graph/monitor/oozie_app/updateCache.sh @@ -0,0 +1,4 @@ +#!/usr/bin/env bash + +curl --request GET $1/cache/updateCache +sleep 6h \ No newline at end of file From 90807b60c7f71a944dde611862cdabc4266c1646 Mon Sep 17 00:00:00 2001 From: dimitrispie Date: Mon, 20 Feb 2023 10:42:24 +0200 Subject: [PATCH 319/535] Changes to monitor wf --- .../oozie_app/copyDataToImpalaCluster.sh | 12 ++---- .../oozie_app/finalizeImpalaCluster.sh | 6 --- .../graph/monitor/oozie_app/monitor-post.sh | 20 ++++----- .../dhp/oa/graph/monitor/oozie_app/monitor.sh | 3 +- .../oa/graph/monitor/oozie_app/workflow.xml | 42 ++++++++++++++++++- 5 files changed, 53 insertions(+), 30 deletions(-) diff --git a/dhp-workflows/dhp-monitor-update/src/main/resources/eu/dnetlib/dhp/oa/graph/monitor/oozie_app/copyDataToImpalaCluster.sh b/dhp-workflows/dhp-monitor-update/src/main/resources/eu/dnetlib/dhp/oa/graph/monitor/oozie_app/copyDataToImpalaCluster.sh index 843877c90..c05d8342a 100644 --- a/dhp-workflows/dhp-monitor-update/src/main/resources/eu/dnetlib/dhp/oa/graph/monitor/oozie_app/copyDataToImpalaCluster.sh +++ b/dhp-workflows/dhp-monitor-update/src/main/resources/eu/dnetlib/dhp/oa/graph/monitor/oozie_app/copyDataToImpalaCluster.sh @@ -7,7 +7,7 @@ then fi #export HADOOP_USER_NAME="dimitris.pierrakos" -export HADOOP_USER_NAME=$5 +export HADOOP_USER_NAME=$2 function copydb() { db=$1 @@ -49,14 +49,8 @@ function copydb() { hdfs dfs -conf /etc/impala_cluster/hdfs-site.xml -rm -R /tmp/${db}.db } -STATS_DB=$1 -MONITOR_DB=$2 -OBSERVATORY_DB=$3 -EXT_DB=$4 -HADOOP_USER_NAME=$5 +MONITOR_DB=$1 +HADOOP_USER_NAME=$2 -copydb $EXT_DB -copydb $STATS_DB copydb $MONITOR_DB -copydb $OBSERVATORY_DB diff --git a/dhp-workflows/dhp-monitor-update/src/main/resources/eu/dnetlib/dhp/oa/graph/monitor/oozie_app/finalizeImpalaCluster.sh b/dhp-workflows/dhp-monitor-update/src/main/resources/eu/dnetlib/dhp/oa/graph/monitor/oozie_app/finalizeImpalaCluster.sh index fedfa00af..46eaba6d0 100644 --- a/dhp-workflows/dhp-monitor-update/src/main/resources/eu/dnetlib/dhp/oa/graph/monitor/oozie_app/finalizeImpalaCluster.sh +++ b/dhp-workflows/dhp-monitor-update/src/main/resources/eu/dnetlib/dhp/oa/graph/monitor/oozie_app/finalizeImpalaCluster.sh @@ -16,13 +16,7 @@ function createShadowDB() { 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 - } -STATS_DB=$1 -STATS_DB_SHADOW=$2 MONITOR_DB=$3 MONITOR_DB_SHADOW=$4 -OBSERVATORY_DB=$5 -OBSERVATORY_DB_SHADOW=$6 -createShadowDB $STATS_DB $STATS_DB_SHADOW createShadowDB $MONITOR_DB $MONITOR_DB_SHADOW -createShadowDB $OBSERVATORY_DB $OBSERVATORY_DB_SHADOW diff --git a/dhp-workflows/dhp-monitor-update/src/main/resources/eu/dnetlib/dhp/oa/graph/monitor/oozie_app/monitor-post.sh b/dhp-workflows/dhp-monitor-update/src/main/resources/eu/dnetlib/dhp/oa/graph/monitor/oozie_app/monitor-post.sh index dd82310e0..5863625a1 100644 --- a/dhp-workflows/dhp-monitor-update/src/main/resources/eu/dnetlib/dhp/oa/graph/monitor/oozie_app/monitor-post.sh +++ b/dhp-workflows/dhp-monitor-update/src/main/resources/eu/dnetlib/dhp/oa/graph/monitor/oozie_app/monitor-post.sh @@ -7,15 +7,13 @@ then fi export SOURCE=$1 -export TARGET=$2 -export SHADOW=$3 +export SHADOW=$2 +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" -impala-shell -q "invalidate metadata;" -#impala-shell -d ${TARGET} -q "show tables" --delimited | sed "s/\(.*\)/compute stats ${TARGET}.\1;/" | impala-shell -f - -#echo "Impala shell finished" -# -#echo "Updating shadow monitor database" -#impala-shell -q "create database if not exists ${SHADOW}" -#impala-shell -d ${SHADOW} -q "show tables" --delimited | sed "s/^/drop view if exists ${SHADOW}./" | sed "s/$/;/" | impala-shell -f - -#impala-shell -d ${TARGET} -q "show tables" --delimited | sed "s/\(.*\)/create view ${SHADOW}.\1 as select * from ${TARGET}.\1;/" | impala-shell -f - -#echo "Shadow db ready!" \ No newline at end of file +echo "Updating shadow database" +hive -e "drop database if exists ${SHADOW} cascade" +hive -e "create database if not exists ${SHADOW}" +hive $HIVE_OPTS --database ${SOURCE} -e "show tables" | grep -v WARN | sed "s/\(.*\)/create view ${SHADOW}.\1 as select * from ${SOURCE}.\1;/" > foo +hive -f foo +echo "Updated shadow database" \ No newline at end of file diff --git a/dhp-workflows/dhp-monitor-update/src/main/resources/eu/dnetlib/dhp/oa/graph/monitor/oozie_app/monitor.sh b/dhp-workflows/dhp-monitor-update/src/main/resources/eu/dnetlib/dhp/oa/graph/monitor/oozie_app/monitor.sh index f39bf4893..5e0f68586 100644 --- a/dhp-workflows/dhp-monitor-update/src/main/resources/eu/dnetlib/dhp/oa/graph/monitor/oozie_app/monitor.sh +++ b/dhp-workflows/dhp-monitor-update/src/main/resources/eu/dnetlib/dhp/oa/graph/monitor/oozie_app/monitor.sh @@ -8,8 +8,7 @@ fi export SOURCE=$1 export TARGET=$2 -export SHADOW=$3 -export SCRIPT_PATH=$4 +export SCRIPT_PATH=$3 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" diff --git a/dhp-workflows/dhp-monitor-update/src/main/resources/eu/dnetlib/dhp/oa/graph/monitor/oozie_app/workflow.xml b/dhp-workflows/dhp-monitor-update/src/main/resources/eu/dnetlib/dhp/oa/graph/monitor/oozie_app/workflow.xml index ab51931b6..f24dcc700 100644 --- a/dhp-workflows/dhp-monitor-update/src/main/resources/eu/dnetlib/dhp/oa/graph/monitor/oozie_app/workflow.xml +++ b/dhp-workflows/dhp-monitor-update/src/main/resources/eu/dnetlib/dhp/oa/graph/monitor/oozie_app/workflow.xml @@ -66,7 +66,6 @@ monitor.sh ${stats_db_name} ${monitor_db_name} - ${monitor_db_shadow_name} ${wf:appPath()}/scripts/createMonitorDB.sql monitor.sh @@ -85,9 +84,48 @@ ${monitor_db_shadow_name} monitor-post.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 + + + + + + + + ${jobTracker} + ${nameNode} + updateCache.sh + ${stats_tool_api_url} + updateCache.sh + + + + \ No newline at end of file From d617c3e812db928e21791ca583013abebf903c5b Mon Sep 17 00:00:00 2001 From: "miriam.baglioni" Date: Mon, 20 Feb 2023 14:45:27 +0100 Subject: [PATCH 320/535] [DOIBoost] extended mapping for funder #8407 --- .../doiboost/crossref/Crossref2Oaf.scala | 54 +++++++++++++------ .../crossref/CrossrefMappingTest.scala | 27 +++++----- 2 files changed, 52 insertions(+), 29 deletions(-) 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 a271f4c33..75aa4a024 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 @@ -309,8 +309,6 @@ case object Crossref2Oaf { result } - - def generateAuhtor(given: String, family: String, orcid: String, index: Int): Author = { val a = new Author a.setName(given) @@ -372,28 +370,22 @@ case object Crossref2Oaf { case dataset: Dataset => convertDataset(dataset) } - - val doisReference:List[String] = for { - JObject(reference_json) <- json \ "reference" + val doisReference: List[String] = for { + JObject(reference_json) <- json \ "reference" JField("DOI", JString(doi_json)) <- reference_json } yield doi_json - - - if (doisReference!= null && doisReference.nonEmpty) { - val citation_relations:List[Relation] = generateCitationRelations(doisReference, result) + if (doisReference != null && doisReference.nonEmpty) { + val citation_relations: List[Relation] = generateCitationRelations(doisReference, result) resultList = resultList ::: citation_relations } resultList = resultList ::: List(result) resultList } + private def createCiteRelation(source: Result, targetPid: String, targetPidType: String): List[Relation] = { - - private def createCiteRelation(source:Result, targetPid:String, targetPidType:String) :List[Relation] = { - - - val targetId = IdentifierFactory.idFromPid("50",targetPidType, targetPid, true) + val targetId = IdentifierFactory.idFromPid("50", targetPidType, targetPid, true) val from = new Relation from.setSource(source.getId) @@ -405,7 +397,6 @@ case object Crossref2Oaf { from.setDataInfo(source.getDataInfo) from.setLastupdatetimestamp(source.getLastupdatetimestamp) - val to = new Relation to.setTarget(source.getId) to.setSource(targetId) @@ -416,10 +407,10 @@ case object Crossref2Oaf { to.setDataInfo(source.getDataInfo) to.setLastupdatetimestamp(source.getLastupdatetimestamp) - List(from,to) + List(from, to) } - def generateCitationRelations(dois:List[String], result:Result):List[Relation] = { + def generateCitationRelations(dois: List[String], result: Result): List[Relation] = { dois.flatMap(d => createCiteRelation(result, d, "doi")) } @@ -495,6 +486,7 @@ case object Crossref2Oaf { case "10.13039/501100000781" => generateSimpleRelationFromAward(funder, "corda_______", extractECAward) generateSimpleRelationFromAward(funder, "corda__h2020", extractECAward) + generateSimpleRelationFromAward(funder, "corda_____he", extractECAward) case "10.13039/100000001" => generateSimpleRelationFromAward(funder, "nsf_________", a => a) case "10.13039/501100001665" => generateSimpleRelationFromAward(funder, "anr_________", a => a) case "10.13039/501100002341" => generateSimpleRelationFromAward(funder, "aka_________", a => a) @@ -536,6 +528,34 @@ case object Crossref2Oaf { val targetId = getProjectId("wt__________", "1e5e62235d094afd01cd56e65112fc63") queue += generateRelation(sourceId, targetId, ModelConstants.IS_PRODUCED_BY) queue += generateRelation(targetId, sourceId, ModelConstants.PRODUCES) + //ASAP + case "10.13039/100018231" => generateSimpleRelationFromAward(funder, "asap________", a => a) + //CHIST-ERA + case "10.13039/501100001942" => + val targetId = getProjectId("chistera____", "1e5e62235d094afd01cd56e65112fc63") + queue += generateRelation(sourceId, targetId, ModelConstants.IS_PRODUCED_BY) + queue += generateRelation(targetId, sourceId, ModelConstants.PRODUCES) + //HE + case "10.13039/100018693" | "10.13039/100018694" | "10.13039/100019188" | "10.13039/100019180" | + "10.13039/100018695" | "10.13039/100019185" | "10.13039/100019186" | "10.13039/100019187" => + generateSimpleRelationFromAward(funder, "corda_____he", extractECAward) + //FCT + case "10.13039/501100001871" => + generateSimpleRelationFromAward(funder, "fct_________", extractECAward) + //NHMRC + case "10.13039/501100000925" => + generateSimpleRelationFromAward(funder, "mhmrc_______", extractECAward) + //NIH + case "10.13039/100000002" => + generateSimpleRelationFromAward(funder, "nih_________", extractECAward) + //NWO + case "10.13039/501100003246" => + generateSimpleRelationFromAward(funder, "nwo_________", extractECAward) + //UKRI + case "10.13039/100014013" | "10.13039/501100000267" | "10.13039/501100000268" | "10.13039/501100000269" | + "10.13039/501100000266" | "10.13039/501100006041" | "10.13039/501100000265" | "10.13039/501100000270" | + "10.13039/501100013589" | "10.13039/501100000271" => + generateSimpleRelationFromAward(funder, "nwo_________", extractECAward) case _ => logger.debug("no match for " + funder.DOI.get) 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 572a48372..e0ef0e65c 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 @@ -114,8 +114,7 @@ class CrossrefMappingTest { } - - private def parseJson(input:String):JValue = { + private def parseJson(input: String): JValue = { implicit lazy val formats: DefaultFormats.type = org.json4s.DefaultFormats lazy val json: json4s.JValue = JsonMethods.parse(input) @@ -123,33 +122,37 @@ class CrossrefMappingTest { } @Test - def testCitationRelations():Unit = { - val json = Source.fromInputStream(getClass.getResourceAsStream("/eu/dnetlib/doiboost/crossref/publication_license_embargo.json")).mkString - + def testCitationRelations(): Unit = { + val json = Source + .fromInputStream(getClass.getResourceAsStream("/eu/dnetlib/doiboost/crossref/publication_license_embargo.json")) + .mkString assertNotNull(json) assertFalse(json.isEmpty) - val result:List[Oaf] = Crossref2Oaf.convert(json) + val result: List[Oaf] = Crossref2Oaf.convert(json) assertTrue(result.nonEmpty) - val j = parseJson(json) val doisReference: List[String] = for { - JObject(reference_json) <- j \ "reference" + JObject(reference_json) <- j \ "reference" JField("DOI", JString(doi_json)) <- reference_json } yield doi_json - - - val relationList:List[Relation] = result.filter(s => s.isInstanceOf[Relation]).map(r=> r.asInstanceOf[Relation]).filter(r => r.getSubRelType.equalsIgnoreCase(ModelConstants.CITATION)) + val relationList: List[Relation] = result + .filter(s => s.isInstanceOf[Relation]) + .map(r => r.asInstanceOf[Relation]) + .filter(r => r.getSubRelType.equalsIgnoreCase(ModelConstants.CITATION)) assertNotNull(relationList) assertFalse(relationList.isEmpty) - assertEquals(doisReference.size*2, relationList.size) + assertEquals(doisReference.size * 2, relationList.size) + + mapper.getSerializationConfig.enable(SerializationConfig.Feature.INDENT_OUTPUT) + relationList.foreach(p => println(mapper.writeValueAsString(p))) } @Test From 99cd7761aa497187fc3dca0d237596ee220e4bd6 Mon Sep 17 00:00:00 2001 From: Claudio Atzori Date: Wed, 22 Feb 2023 10:10:22 +0100 Subject: [PATCH 321/535] cleanup of non necessary dhp-monitor-update workflow --- dhp-workflows/dhp-monitor-update/pom.xml | 32 ---- .../monitor/oozie_app/config-default.xml | 34 ---- .../dhp/oa/graph/monitor/oozie_app/monitor.sh | 18 --- .../oozie_app/scripts/createMonitorDB.sql | 146 ------------------ .../oa/graph/monitor/oozie_app/workflow.xml | 77 --------- 5 files changed, 307 deletions(-) delete mode 100644 dhp-workflows/dhp-monitor-update/pom.xml delete mode 100644 dhp-workflows/dhp-monitor-update/src/main/resources/eu/dnetlib/dhp/oa/graph/monitor/oozie_app/config-default.xml delete mode 100644 dhp-workflows/dhp-monitor-update/src/main/resources/eu/dnetlib/dhp/oa/graph/monitor/oozie_app/monitor.sh delete mode 100644 dhp-workflows/dhp-monitor-update/src/main/resources/eu/dnetlib/dhp/oa/graph/monitor/oozie_app/scripts/createMonitorDB.sql delete mode 100644 dhp-workflows/dhp-monitor-update/src/main/resources/eu/dnetlib/dhp/oa/graph/monitor/oozie_app/workflow.xml diff --git a/dhp-workflows/dhp-monitor-update/pom.xml b/dhp-workflows/dhp-monitor-update/pom.xml deleted file mode 100644 index ca0bb9837..000000000 --- a/dhp-workflows/dhp-monitor-update/pom.xml +++ /dev/null @@ -1,32 +0,0 @@ - - - - dhp-workflows - eu.dnetlib.dhp - 1.2.4-SNAPSHOT - - 4.0.0 - dhp-monitor-update - - - org.apache.spark - spark-core_2.11 - - - org.apache.spark - spark-sql_2.11 - - - - - - pl.project13.maven - git-commit-id-plugin - 2.1.11 - - false - - - - - diff --git a/dhp-workflows/dhp-monitor-update/src/main/resources/eu/dnetlib/dhp/oa/graph/monitor/oozie_app/config-default.xml b/dhp-workflows/dhp-monitor-update/src/main/resources/eu/dnetlib/dhp/oa/graph/monitor/oozie_app/config-default.xml deleted file mode 100644 index 63fc84d75..000000000 --- a/dhp-workflows/dhp-monitor-update/src/main/resources/eu/dnetlib/dhp/oa/graph/monitor/oozie_app/config-default.xml +++ /dev/null @@ -1,34 +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=19166291558;spark.yarn.executor.memoryOverhead=3225;spark.driver.memory=11596411699;spark.yarn.driver.memoryOverhead=1228 - - - oozie.wf.workflow.notification.url - {serviceUrl}/v1/oozieNotification/jobUpdate?jobId=$jobId%26status=$status - - - stats_tool_api_url - ${stats_tool_api_url} - - \ No newline at end of file diff --git a/dhp-workflows/dhp-monitor-update/src/main/resources/eu/dnetlib/dhp/oa/graph/monitor/oozie_app/monitor.sh b/dhp-workflows/dhp-monitor-update/src/main/resources/eu/dnetlib/dhp/oa/graph/monitor/oozie_app/monitor.sh deleted file mode 100644 index 10c1ed4ca..000000000 --- a/dhp-workflows/dhp-monitor-update/src/main/resources/eu/dnetlib/dhp/oa/graph/monitor/oozie_app/monitor.sh +++ /dev/null @@ -1,18 +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 SCRIPT_PATH=$3 - -echo "Getting file from " $3 -hdfs dfs -copyToLocal $3 - -echo "Updating monitor database" -cat createMonitorDB.sql | sed s/SOURCE/$1/g | sed s/TARGET/$2/g1 | impala-shell -f - -echo "Impala shell finished" diff --git a/dhp-workflows/dhp-monitor-update/src/main/resources/eu/dnetlib/dhp/oa/graph/monitor/oozie_app/scripts/createMonitorDB.sql b/dhp-workflows/dhp-monitor-update/src/main/resources/eu/dnetlib/dhp/oa/graph/monitor/oozie_app/scripts/createMonitorDB.sql deleted file mode 100644 index 265610e90..000000000 --- a/dhp-workflows/dhp-monitor-update/src/main/resources/eu/dnetlib/dhp/oa/graph/monitor/oozie_app/scripts/createMonitorDB.sql +++ /dev/null @@ -1,146 +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____::b8b8ca674452579f3f593d9f5e557483', -- University College Cork --- 'openorgs____::38d7097854736583dde879d12dacafca' -- Brown University - 'openorgs____::57784c9e047e826fefdb1ef816120d92' --Arts et Métiers ParisTech - ) )) foo; - -COMPUTE STATS TARGET.result_new; - -INSERT INTO TARGET.result select * from TARGET.result_new; -COMPUTE STATS TARGET.result; - -INSERT INTO TARGET.result_citations select * from TARGET.result_citations orig where exists (select 1 from TARGET.result_new r where r.id=orig.id); -COMPUTE STATS TARGET.result_citations; - -INSERT INTO TARGET.result_references_oc select * from TARGET.result_references_oc orig where exists (select 1 from TARGET.result_new r where r.id=orig.id); -COMPUTE STATS TARGET.result_references_oc; - -INSERT INTO TARGET.result_citations_oc select * from TARGET.result_citations_oc orig where exists (select 1 from TARGET.result_new r where r.id=orig.id); -COMPUTE STATS TARGET.result_citations_oc; - -INSERT INTO TARGET.result_classifications select * from TARGET.result_classifications orig where exists (select 1 from TARGET.result_new r where r.id=orig.id); -COMPUTE STATS TARGET.result_classifications; - -INSERT INTO TARGET.result_apc select * from TARGET.result_apc orig where exists (select 1 from TARGET.result_new r where r.id=orig.id); -COMPUTE STATS TARGET.result_apc; - -INSERT INTO TARGET.result_concepts select * from TARGET.result_concepts orig where exists (select 1 from TARGET.result_new r where r.id=orig.id); -COMPUTE STATS TARGET.result_concepts; - -INSERT INTO TARGET.result_datasources select * from TARGET.result_datasources orig where exists (select 1 from TARGET.result_new r where r.id=orig.id); -COMPUTE STATS TARGET.result_datasources; - -INSERT INTO TARGET.result_fundercount select * from TARGET.result_fundercount orig where exists (select 1 from TARGET.result_new r where r.id=orig.id); -COMPUTE STATS TARGET.result_fundercount; - -INSERT INTO TARGET.result_gold select * from TARGET.result_gold orig where exists (select 1 from TARGET.result_new r where r.id=orig.id); -COMPUTE STATS TARGET.result_gold; - -INSERT INTO TARGET.result_greenoa select * from TARGET.result_greenoa orig where exists (select 1 from TARGET.result_new r where r.id=orig.id); -COMPUTE STATS TARGET.result_greenoa; - -INSERT INTO TARGET.result_languages select * from TARGET.result_languages orig where exists (select 1 from TARGET.result_new r where r.id=orig.id); -COMPUTE STATS TARGET.result_languages; - -INSERT INTO TARGET.result_licenses select * from TARGET.result_licenses orig where exists (select 1 from TARGET.result_new r where r.id=orig.id); -COMPUTE STATS TARGET.result_licenses; - -INSERT INTO TARGET.result_oids select * from TARGET.result_oids orig where exists (select 1 from TARGET.result_new r where r.id=orig.id); -COMPUTE STATS TARGET.result_oids; - -INSERT INTO TARGET.result_organization select * from TARGET.result_organization orig where exists (select 1 from TARGET.result_new r where r.id=orig.id); -COMPUTE STATS TARGET.result_organization; - -INSERT INTO TARGET.result_peerreviewed select * from TARGET.result_peerreviewed orig where exists (select 1 from TARGET.result_new r where r.id=orig.id); -COMPUTE STATS TARGET.result_peerreviewed; - -INSERT INTO TARGET.result_pids select * from TARGET.result_pids orig where exists (select 1 from TARGET.result_new r where r.id=orig.id); -COMPUTE STATS TARGET.result_pids; - -INSERT INTO TARGET.result_projectcount select * from TARGET.result_projectcount orig where exists (select 1 from TARGET.result_new r where r.id=orig.id); -COMPUTE STATS TARGET.result_projectcount; - -INSERT INTO TARGET.result_projects select * from TARGET.result_projects orig where exists (select 1 from TARGET.result_new r where r.id=orig.id); -COMPUTE STATS TARGET.result_projects; - -INSERT INTO TARGET.result_refereed select * from TARGET.result_refereed orig where exists (select 1 from TARGET.result_new r where r.id=orig.id); -COMPUTE STATS TARGET.result_refereed; - -INSERT INTO TARGET.result_sources select * from TARGET.result_sources orig where exists (select 1 from TARGET.result_new r where r.id=orig.id); -COMPUTE STATS TARGET.result_sources; - -INSERT INTO TARGET.result_topics select * from TARGET.result_topics orig where exists (select 1 from TARGET.result_new r where r.id=orig.id); -COMPUTE STATS TARGET.result_topics; - -INSERT INTO TARGET.result_fos select * from TARGET.result_fos orig where exists (select 1 from TARGET.result_new r where r.id=orig.id); -COMPUTE STATS TARGET.result_fos; - -create view TARGET.foo1 as select * from TARGET.result_result rr where rr.source in (select id from TARGET.result_new); -create view TARGET.foo2 as select * from TARGET.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; -COMPUTE STATS TARGET.result_result; - --- indicators --- Sprint 1 ---- -INSERT INTO TARGET.indi_pub_green_oa select * from TARGET.indi_pub_green_oa orig where exists (select 1 from TARGET.result_new r where r.id=orig.id); -COMPUTE STATS TARGET.indi_pub_green_oa; -INSERT INTO TARGET.indi_pub_grey_lit select * from TARGET.indi_pub_grey_lit orig where exists (select 1 from TARGET.result_new r where r.id=orig.id); -COMPUTE STATS TARGET.indi_pub_grey_lit; -INSERT INTO TARGET.indi_pub_doi_from_crossref select * from TARGET.indi_pub_doi_from_crossref orig where exists (select 1 from TARGET.result_new r where r.id=orig.id); -COMPUTE STATS TARGET.indi_pub_doi_from_crossref; --- Sprint 2 ---- -INSERT INTO TARGET.indi_result_has_cc_licence select * from TARGET.indi_result_has_cc_licence orig where exists (select 1 from TARGET.result_new r where r.id=orig.id); -COMPUTE STATS TARGET.indi_result_has_cc_licence; -INSERT INTO TARGET.indi_result_has_cc_licence_url select * from TARGET.indi_result_has_cc_licence_url orig where exists (select 1 from TARGET.result_new r where r.id=orig.id); -COMPUTE STATS TARGET.indi_result_has_cc_licence_url; -INSERT INTO TARGET.indi_pub_has_abstract select * from TARGET.indi_pub_has_abstract orig where exists (select 1 from TARGET.result_new r where r.id=orig.id); -COMPUTE STATS TARGET.indi_pub_has_abstract; -INSERT INTO TARGET.indi_result_with_orcid select * from TARGET.indi_result_with_orcid orig where exists (select 1 from TARGET.result_new r where r.id=orig.id); -COMPUTE STATS TARGET.indi_result_with_orcid; ----- Sprint 3 ---- -INSERT INTO TARGET.indi_funded_result_with_fundref select * from TARGET.indi_funded_result_with_fundref orig where exists (select 1 from TARGET.result_new r where r.id=orig.id); -COMPUTE STATS TARGET.indi_funded_result_with_fundref; ----- Sprint 4 ---- -INSERT INTO TARGET.indi_pub_diamond select * from TARGET.indi_pub_diamond orig where exists (select 1 from TARGET.result_new r where r.id=orig.id); -COMPUTE STATS TARGET.indi_pub_diamond; -INSERT INTO TARGET.indi_pub_in_transformative select * from TARGET.indi_pub_in_transformative orig where exists (select 1 from TARGET.result_new r where r.id=orig.id); -COMPUTE STATS TARGET.indi_pub_in_transformative; -INSERT INTO TARGET.indi_pub_closed_other_open select * from TARGET.indi_pub_closed_other_open orig where exists (select 1 from TARGET.result_new r where r.id=orig.id); -COMPUTE STATS TARGET.indi_pub_closed_other_open; ----- Sprint 5 ---- -INSERT INTO TARGET.indi_result_no_of_copies select * from TARGET.indi_result_no_of_copies orig where exists (select 1 from TARGET.result_new r where r.id=orig.id); -COMPUTE STATS TARGET.indi_result_no_of_copies; ----- Sprint 6 ---- -INSERT INTO TARGET.indi_pub_hybrid_oa_with_cc select * from TARGET.indi_pub_hybrid_oa_with_cc orig where exists (select 1 from TARGET.result_new r where r.id=orig.id); -COMPUTE STATS TARGET.indi_pub_hybrid_oa_with_cc; -INSERT INTO TARGET.indi_pub_downloads select * from TARGET.indi_pub_downloads orig where exists (select 1 from TARGET.result_new r where r.id=orig.result_id); -COMPUTE STATS TARGET.indi_pub_downloads; -INSERT INTO TARGET.indi_pub_downloads_datasource select * from TARGET.indi_pub_downloads_datasource orig where exists (select 1 from TARGET.result_new r where r.id=orig.result_id); -COMPUTE STATS TARGET.indi_pub_downloads_datasource; -INSERT INTO TARGET.indi_pub_downloads_year select * from TARGET.indi_pub_downloads_year orig where exists (select 1 from TARGET.result_new r where r.id=orig.result_id); -COMPUTE STATS TARGET.indi_pub_downloads_year; -INSERT INTO TARGET.indi_pub_downloads_datasource_year select * from TARGET.indi_pub_downloads_datasource_year orig where exists (select 1 from TARGET.result_new r where r.id=orig.result_id); -COMPUTE STATS TARGET.indi_pub_downloads_datasource_year; ----- Sprint 7 ---- -INSERT INTO TARGET.indi_pub_gold_oa select * from TARGET.indi_pub_gold_oa orig where exists (select 1 from TARGET.result_new r where r.id=orig.id); -COMPUTE STATS TARGET.indi_pub_gold_oa; -INSERT INTO TARGET.indi_pub_hybrid select * from TARGET.indi_pub_hybrid orig where exists (select 1 from TARGET.result_new r where r.id=orig.id); -COMPUTE STATS TARGET.indi_pub_hybrid; - -INSERT INTO TARGET.indi_pub_has_preprint select * from TARGET.indi_pub_has_preprint orig where exists (select 1 from TARGET.result_new r where r.id=orig.id); -COMPUTE STATS TARGET.indi_pub_has_preprint; -INSERT INTO TARGET.indi_pub_in_subscribed select * from TARGET.indi_pub_in_subscribed orig where exists (select 1 from TARGET.result_new r where r.id=orig.id); -COMPUTE STATS TARGET.indi_pub_in_subscribed; -INSERT INTO TARGET.indi_result_with_pid select * from TARGET.indi_result_with_pid orig where exists (select 1 from TARGET.result_new r where r.id=orig.id); -COMPUTE STATS TARGET.indi_result_with_pid; ---create table TARGET.indi_datasets_gold_oa stored as parquet as select * from SOURCE.indi_datasets_gold_oa orig where exists (select 1 from TARGET.result r where r.id=orig.id); ---compute stats TARGET.indi_datasets_gold_oa; ---create table TARGET.indi_software_gold_oa stored as parquet as select * from SOURCE.indi_software_gold_oa orig where exists (select 1 from TARGET.result r where r.id=orig.id); ---compute stats TARGET.indi_software_gold_oa; -DROP TABLE TARGET.result_new; diff --git a/dhp-workflows/dhp-monitor-update/src/main/resources/eu/dnetlib/dhp/oa/graph/monitor/oozie_app/workflow.xml b/dhp-workflows/dhp-monitor-update/src/main/resources/eu/dnetlib/dhp/oa/graph/monitor/oozie_app/workflow.xml deleted file mode 100644 index dda645d8f..000000000 --- a/dhp-workflows/dhp-monitor-update/src/main/resources/eu/dnetlib/dhp/oa/graph/monitor/oozie_app/workflow.xml +++ /dev/null @@ -1,77 +0,0 @@ - - - - stats_db_name - the target stats database name - - - stats_db_shadow_name - the name of the shadow schema - - - monitor_db_name - the target monitor db name - - - monitor_db_shadow_name - the name of the shadow monitor db - - - stats_tool_api_url - The url of the API of the stats tool. Is used to trigger the cache update. - - - 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. - - - context_api_url - the base url of the context api (https://services.openaire.eu/openaire) - - - - - ${jobTracker} - ${nameNode} - - - hive.metastore.uris - ${hive_metastore_uris} - - - hive.txn.timeout - ${hive_timeout} - - - - - - - - Action failed, error message[${wf:errorMessage(wf:lastErrorNode())}] - - - - - ${jobTracker} - ${nameNode} - monitor.sh - ${stats_db_name} - ${monitor_db_name} - ${wf:appPath()}/scripts/createMonitorDB.sql - monitor.sh - - - - - - - \ No newline at end of file From 3b876d93276fe0d375842c51fb9e555cc039a743 Mon Sep 17 00:00:00 2001 From: Claudio Atzori Date: Wed, 22 Feb 2023 10:15:10 +0100 Subject: [PATCH 322/535] depending on dhp-schemas v. 3.16.0 --- pom.xml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/pom.xml b/pom.xml index 839188a62..8a9f1dea8 100644 --- a/pom.xml +++ b/pom.xml @@ -807,7 +807,7 @@ 3.3.3 3.4.2 [2.12,3.0) - [3.15.1-SNAPSHOT] + [3.16.0] [4.0.3] [6.0.5] [3.1.6] From 0c1be41b300621deefa9c81c35fa61ccf70e5796 Mon Sep 17 00:00:00 2001 From: Claudio Atzori Date: Wed, 22 Feb 2023 10:15:25 +0100 Subject: [PATCH 323/535] code formatting --- .../usagestats/SparkAtomicActionUsageJob.java | 84 ++-- .../SparkAtomicActionCountJobTest.java | 420 +++++++++--------- 2 files changed, 253 insertions(+), 251 deletions(-) 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 d7ca00708..b25da07e0 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 @@ -8,13 +8,12 @@ import java.io.Serializable; import java.util.Arrays; import java.util.List; import java.util.Optional; -import eu.dnetlib.dhp.schema.oaf.*; + 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.sql.Dataset; import org.apache.spark.sql.Encoders; import org.apache.spark.sql.SaveMode; @@ -28,6 +27,7 @@ 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; @@ -80,31 +80,31 @@ public class SparkAtomicActionUsageJob implements Serializable { }); } - private static void prepareData(String dbname, SparkSession spark, String workingPath, String tableName, String attribute_name) { + private static void prepareData(String dbname, SparkSession spark, String workingPath, String tableName, + String attribute_name) { spark - .sql( - "Select " + attribute_name + " as id, sum(downloads) as downloads, sum(views) as views " + - "from " + dbname + "." + tableName + - "group by " + attribute_name) - .as(Encoders.bean(UsageStatsModel.class)) - .write() - .mode(SaveMode.Overwrite) - .option("compression", "gzip") - .json(workingPath); + .sql(String.format( + "select %s as id, sum(downloads) as downloads, sum(views) as views " + + "from %s.%s group by %s", attribute_name, dbname, tableName, attribute_name)) + .as(Encoders.bean(UsageStatsModel.class)) + .write() + .mode(SaveMode.Overwrite) + .option("compression", "gzip") + .json(workingPath); } - - public static void writeActionSet(SparkSession spark, String inputPath, String outputPath) { - getFinalIndicatorsResult(spark, inputPath+ "/usageDb"). - toJavaRDD(). - map(p -> new AtomicAction(p.getClass(),p)) - .union(getFinalIndicatorsProject(spark, inputPath + "/projectDb") - .toJavaRDD() - .map(p -> new AtomicAction(p.getClass(), p ))) - .union(getFinalIndicatorsDatasource(spark, inputPath + "/datasourceDb") - .toJavaRDD() - .map(p -> new AtomicAction(p.getClass(), p))) + getFinalIndicatorsResult(spark, inputPath + "/usageDb") + .toJavaRDD() + .map(p -> new AtomicAction(p.getClass(), p)) + .union( + getFinalIndicatorsProject(spark, inputPath + "/projectDb") + .toJavaRDD() + .map(p -> new AtomicAction(p.getClass(), p))) + .union( + getFinalIndicatorsDatasource(spark, inputPath + "/datasourceDb") + .toJavaRDD() + .map(p -> new AtomicAction(p.getClass(), p))) .mapToPair( aa -> new Tuple2<>(new Text(aa.getClazz().getCanonicalName()), new Text(OBJECT_MAPPER.writeValueAsString(aa)))) @@ -115,38 +115,36 @@ public class SparkAtomicActionUsageJob implements Serializable { private static Dataset getFinalIndicatorsResult(SparkSession spark, String inputPath) { return readPath(spark, inputPath, UsageStatsModel.class) - .map((MapFunction) usm -> { - Result r = new Result(); - r.setId("50|" + usm.getId()); - r.setMeasures(getMeasure(usm.getDownloads(), usm.getViews())); - return r; - }, Encoders.bean(Result.class)); + .map((MapFunction) usm -> { + Result r = new Result(); + r.setId("50|" + usm.getId()); + r.setMeasures(getMeasure(usm.getDownloads(), usm.getViews())); + return r; + }, Encoders.bean(Result.class)); } private static Dataset getFinalIndicatorsProject(SparkSession spark, String inputPath) { return readPath(spark, inputPath, UsageStatsModel.class) - .map((MapFunction) usm -> { - Project r = new Project(); - r.setId("40|" + usm.getId()); - r.setMeasures(getMeasure(usm.getDownloads(), usm.getViews())); - return r; - }, Encoders.bean(Project.class)); + .map((MapFunction) usm -> { + Project p = new Project(); + p.setId("40|" + usm.getId()); + p.setMeasures(getMeasure(usm.getDownloads(), usm.getViews())); + return p; + }, Encoders.bean(Project.class)); } private static Dataset getFinalIndicatorsDatasource(SparkSession spark, String inputPath) { return readPath(spark, inputPath, UsageStatsModel.class) - .map((MapFunction) usm -> { - Datasource r = new Datasource(); - r.setId("10|" + usm.getId()); - r.setMeasures(getMeasure(usm.getDownloads(), usm.getViews())); - return r; - }, Encoders.bean(Datasource.class)); + .map((MapFunction) usm -> { + Datasource d = new Datasource(); + d.setId("10|" + usm.getId()); + d.setMeasures(getMeasure(usm.getDownloads(), usm.getViews())); + return d; + }, Encoders.bean(Datasource.class)); } - - private static List getMeasure(Long downloads, Long views) { DataInfo dataInfo = OafMapperUtils .dataInfo( diff --git a/dhp-workflows/dhp-aggregation/src/test/java/eu/dnetlib/dhp/actionmanager/usagestats/SparkAtomicActionCountJobTest.java b/dhp-workflows/dhp-aggregation/src/test/java/eu/dnetlib/dhp/actionmanager/usagestats/SparkAtomicActionCountJobTest.java index 1512f9cf8..5982c8820 100644 --- a/dhp-workflows/dhp-aggregation/src/test/java/eu/dnetlib/dhp/actionmanager/usagestats/SparkAtomicActionCountJobTest.java +++ b/dhp-workflows/dhp-aggregation/src/test/java/eu/dnetlib/dhp/actionmanager/usagestats/SparkAtomicActionCountJobTest.java @@ -8,7 +8,6 @@ import java.nio.file.Files; import java.nio.file.Path; import java.util.stream.Collectors; -import eu.dnetlib.dhp.schema.oaf.OafEntity; import org.apache.commons.io.FileUtils; import org.apache.hadoop.io.Text; import org.apache.spark.SparkConf; @@ -25,6 +24,7 @@ import org.slf4j.LoggerFactory; import com.fasterxml.jackson.databind.ObjectMapper; import eu.dnetlib.dhp.schema.action.AtomicAction; +import eu.dnetlib.dhp.schema.oaf.OafEntity; import eu.dnetlib.dhp.schema.oaf.Result; public class SparkAtomicActionCountJobTest { @@ -79,16 +79,16 @@ public class SparkAtomicActionCountJobTest { JavaRDD tmp = sc .sequenceFile(workingDir.toString() + "/actionSet", Text.class, Text.class) .map(usm -> OBJECT_MAPPER.readValue(usm._2.getBytes(), AtomicAction.class)); - //.map(aa -> (Result) aa.getPayload()); + // .map(aa -> (Result) aa.getPayload()); - Assertions.assertEquals(9,tmp.filter(aa -> ((OafEntity) aa.getPayload()).getId().startsWith("50|")).count()); - Assertions.assertEquals(9,tmp.filter(aa -> ((OafEntity) aa.getPayload()).getId().startsWith("10|")).count()); - Assertions.assertEquals(9,tmp.filter(aa -> ((OafEntity) aa.getPayload()).getId().startsWith("40|")).count()); + Assertions.assertEquals(9, tmp.filter(aa -> ((OafEntity) aa.getPayload()).getId().startsWith("50|")).count()); + Assertions.assertEquals(9, tmp.filter(aa -> ((OafEntity) aa.getPayload()).getId().startsWith("10|")).count()); + Assertions.assertEquals(9, tmp.filter(aa -> ((OafEntity) aa.getPayload()).getId().startsWith("40|")).count()); - tmp.foreach(r -> Assertions.assertEquals(2, ((OafEntity)r.getPayload()).getMeasures().size())); + tmp.foreach(r -> Assertions.assertEquals(2, ((OafEntity) r.getPayload()).getMeasures().size())); tmp .foreach( - r -> ((OafEntity)r.getPayload()) + r -> ((OafEntity) r.getPayload()) .getMeasures() .stream() .forEach( @@ -98,14 +98,14 @@ public class SparkAtomicActionCountJobTest { .forEach(u -> Assertions.assertFalse(u.getDataInfo().getDeletedbyinference())))); tmp .foreach( - r -> ((OafEntity)r.getPayload()) + r -> ((OafEntity) r.getPayload()) .getMeasures() .stream() .forEach( m -> m.getUnit().stream().forEach(u -> Assertions.assertTrue(u.getDataInfo().getInferred())))); tmp .foreach( - r -> ((OafEntity)r.getPayload()) + r -> ((OafEntity) r.getPayload()) .getMeasures() .stream() .forEach( @@ -116,7 +116,7 @@ public class SparkAtomicActionCountJobTest { tmp .foreach( - r -> ((OafEntity)r.getPayload()) + r -> ((OafEntity) r.getPayload()) .getMeasures() .stream() .forEach( @@ -130,7 +130,7 @@ public class SparkAtomicActionCountJobTest { u.getDataInfo().getProvenanceaction().getClassid())))); tmp .foreach( - r -> ((OafEntity)r.getPayload()) + r -> ((OafEntity) r.getPayload()) .getMeasures() .stream() .forEach( @@ -145,7 +145,7 @@ public class SparkAtomicActionCountJobTest { tmp .foreach( - r -> ((OafEntity)r.getPayload()) + r -> ((OafEntity) r.getPayload()) .getMeasures() .stream() .forEach( @@ -160,13 +160,19 @@ public class SparkAtomicActionCountJobTest { Assertions .assertEquals( - 1, tmp.filter(r -> ((OafEntity)r.getPayload()).getId().equals("50|dedup_wf_001::53575dc69e9ace947e02d47ecd54a7a6")).count()); + 1, + tmp + .filter( + r -> ((OafEntity) r.getPayload()) + .getId() + .equals("50|dedup_wf_001::53575dc69e9ace947e02d47ecd54a7a6")) + .count()); Assertions .assertEquals( "0", tmp - .map(r -> ((OafEntity)r.getPayload())) + .map(r -> ((OafEntity) r.getPayload())) .filter(r -> r.getId().equals("50|dedup_wf_001::53575dc69e9ace947e02d47ecd54a7a6")) .collect() .get(0) @@ -182,8 +188,8 @@ public class SparkAtomicActionCountJobTest { .assertEquals( "5", tmp - .map(r -> ((OafEntity)r.getPayload())) - .filter(r -> r.getId().equals("50|dedup_wf_001::53575dc69e9ace947e02d47ecd54a7a6")) + .map(r -> ((OafEntity) r.getPayload())) + .filter(r -> r.getId().equals("50|dedup_wf_001::53575dc69e9ace947e02d47ecd54a7a6")) .collect() .get(0) .getMeasures() @@ -199,8 +205,8 @@ public class SparkAtomicActionCountJobTest { .assertEquals( "0", tmp - .map(r -> ((OafEntity)r.getPayload())) - .filter(r -> r.getId().equals("50|doi_________::17eda2ff77407538fbe5d3d719b9d1c0")) + .map(r -> ((OafEntity) r.getPayload())) + .filter(r -> r.getId().equals("50|doi_________::17eda2ff77407538fbe5d3d719b9d1c0")) .collect() .get(0) .getMeasures() @@ -215,8 +221,8 @@ public class SparkAtomicActionCountJobTest { .assertEquals( "1", tmp - .map(r -> ((OafEntity)r.getPayload())) - .filter(r -> r.getId().equals("50|doi_________::17eda2ff77407538fbe5d3d719b9d1c0")) + .map(r -> ((OafEntity) r.getPayload())) + .filter(r -> r.getId().equals("50|doi_________::17eda2ff77407538fbe5d3d719b9d1c0")) .collect() .get(0) .getMeasures() @@ -232,8 +238,8 @@ public class SparkAtomicActionCountJobTest { .assertEquals( "2", tmp - .map(r -> ((OafEntity)r.getPayload())) - .filter(r -> r.getId().equals("50|doi_________::3085e4c6e051378ca6157fe7f0430c1f")) + .map(r -> ((OafEntity) r.getPayload())) + .filter(r -> r.getId().equals("50|doi_________::3085e4c6e051378ca6157fe7f0430c1f")) .collect() .get(0) .getMeasures() @@ -248,8 +254,8 @@ public class SparkAtomicActionCountJobTest { .assertEquals( "6", tmp - .map(r -> ((OafEntity)r.getPayload())) - .filter(r -> r.getId().equals("50|doi_________::3085e4c6e051378ca6157fe7f0430c1f")) + .map(r -> ((OafEntity) r.getPayload())) + .filter(r -> r.getId().equals("50|doi_________::3085e4c6e051378ca6157fe7f0430c1f")) .collect() .get(0) .getMeasures() @@ -261,205 +267,203 @@ public class SparkAtomicActionCountJobTest { .get(0) .getValue()); + Assertions + .assertEquals( + "0", + tmp + .map(r -> ((OafEntity) r.getPayload())) + .filter(r -> r.getId().equals("40|f1__________::53575dc69e9ace947e02d47ecd54a7a6")) + .collect() + .get(0) + .getMeasures() + .stream() + .filter(m -> m.getId().equals("downloads")) + .collect(Collectors.toList()) + .get(0) + .getUnit() + .get(0) + .getValue()); + Assertions + .assertEquals( + "5", + tmp + .map(r -> ((OafEntity) r.getPayload())) + .filter(r -> r.getId().equals("40|f1__________::53575dc69e9ace947e02d47ecd54a7a6")) + .collect() + .get(0) + .getMeasures() + .stream() + .filter(m -> m.getId().equals("views")) + .collect(Collectors.toList()) + .get(0) + .getUnit() + .get(0) + .getValue()); Assertions - .assertEquals( - "0", - tmp - .map(r -> ((OafEntity)r.getPayload())) - .filter(r -> r.getId().equals("40|f1__________::53575dc69e9ace947e02d47ecd54a7a6")) - .collect() - .get(0) - .getMeasures() - .stream() - .filter(m -> m.getId().equals("downloads")) - .collect(Collectors.toList()) - .get(0) - .getUnit() - .get(0) - .getValue()); + .assertEquals( + "0", + tmp + .map(r -> ((OafEntity) r.getPayload())) + .filter(r -> r.getId().equals("40|f11_________::17eda2ff77407538fbe5d3d719b9d1c0")) + .collect() + .get(0) + .getMeasures() + .stream() + .filter(m -> m.getId().equals("downloads")) + .collect(Collectors.toList()) + .get(0) + .getUnit() + .get(0) + .getValue()); Assertions - .assertEquals( - "5", - tmp - .map(r -> ((OafEntity)r.getPayload())) - .filter(r -> r.getId().equals("40|f1__________::53575dc69e9ace947e02d47ecd54a7a6")) - .collect() - .get(0) - .getMeasures() - .stream() - .filter(m -> m.getId().equals("views")) - .collect(Collectors.toList()) - .get(0) - .getUnit() - .get(0) - .getValue()); + .assertEquals( + "1", + tmp + .map(r -> ((OafEntity) r.getPayload())) + .filter(r -> r.getId().equals("40|f11_________::17eda2ff77407538fbe5d3d719b9d1c0")) + .collect() + .get(0) + .getMeasures() + .stream() + .filter(m -> m.getId().equals("views")) + .collect(Collectors.toList()) + .get(0) + .getUnit() + .get(0) + .getValue()); Assertions - .assertEquals( - "0", - tmp - .map(r -> ((OafEntity)r.getPayload())) - .filter(r -> r.getId().equals("40|f11_________::17eda2ff77407538fbe5d3d719b9d1c0")) - .collect() - .get(0) - .getMeasures() - .stream() - .filter(m -> m.getId().equals("downloads")) - .collect(Collectors.toList()) - .get(0) - .getUnit() - .get(0) - .getValue()); + .assertEquals( + "2", + tmp + .map(r -> ((OafEntity) r.getPayload())) + .filter(r -> r.getId().equals("40|f12_________::3085e4c6e051378ca6157fe7f0430c1f")) + .collect() + .get(0) + .getMeasures() + .stream() + .filter(m -> m.getId().equals("downloads")) + .collect(Collectors.toList()) + .get(0) + .getUnit() + .get(0) + .getValue()); Assertions - .assertEquals( - "1", - tmp - .map(r -> ((OafEntity)r.getPayload())) - .filter(r -> r.getId().equals("40|f11_________::17eda2ff77407538fbe5d3d719b9d1c0")) - .collect() - .get(0) - .getMeasures() - .stream() - .filter(m -> m.getId().equals("views")) - .collect(Collectors.toList()) - .get(0) - .getUnit() - .get(0) - .getValue()); + .assertEquals( + "6", + tmp + .map(r -> ((OafEntity) r.getPayload())) + .filter(r -> r.getId().equals("40|f12_________::3085e4c6e051378ca6157fe7f0430c1f")) + .collect() + .get(0) + .getMeasures() + .stream() + .filter(m -> m.getId().equals("views")) + .collect(Collectors.toList()) + .get(0) + .getUnit() + .get(0) + .getValue()); Assertions - .assertEquals( - "2", - tmp - .map(r -> ((OafEntity)r.getPayload())) - .filter(r -> r.getId().equals("40|f12_________::3085e4c6e051378ca6157fe7f0430c1f")) - .collect() - .get(0) - .getMeasures() - .stream() - .filter(m -> m.getId().equals("downloads")) - .collect(Collectors.toList()) - .get(0) - .getUnit() - .get(0) - .getValue()); + .assertEquals( + "0", + tmp + .map(r -> ((OafEntity) r.getPayload())) + .filter(r -> r.getId().equals("10|d1__________::53575dc69e9ace947e02d47ecd54a7a6")) + .collect() + .get(0) + .getMeasures() + .stream() + .filter(m -> m.getId().equals("downloads")) + .collect(Collectors.toList()) + .get(0) + .getUnit() + .get(0) + .getValue()); Assertions - .assertEquals( - "6", - tmp - .map(r -> ((OafEntity)r.getPayload())) - .filter(r -> r.getId().equals("40|f12_________::3085e4c6e051378ca6157fe7f0430c1f")) - .collect() - .get(0) - .getMeasures() - .stream() - .filter(m -> m.getId().equals("views")) - .collect(Collectors.toList()) - .get(0) - .getUnit() - .get(0) - .getValue()); - + .assertEquals( + "5", + tmp + .map(r -> ((OafEntity) r.getPayload())) + .filter(r -> r.getId().equals("10|d1__________::53575dc69e9ace947e02d47ecd54a7a6")) + .collect() + .get(0) + .getMeasures() + .stream() + .filter(m -> m.getId().equals("views")) + .collect(Collectors.toList()) + .get(0) + .getUnit() + .get(0) + .getValue()); Assertions - .assertEquals( - "0", - tmp - .map(r -> ((OafEntity)r.getPayload())) - .filter(r -> r.getId().equals("10|d1__________::53575dc69e9ace947e02d47ecd54a7a6")) - .collect() - .get(0) - .getMeasures() - .stream() - .filter(m -> m.getId().equals("downloads")) - .collect(Collectors.toList()) - .get(0) - .getUnit() - .get(0) - .getValue()); + .assertEquals( + "0", + tmp + .map(r -> ((OafEntity) r.getPayload())) + .filter(r -> r.getId().equals("10|d11_________::17eda2ff77407538fbe5d3d719b9d1c0")) + .collect() + .get(0) + .getMeasures() + .stream() + .filter(m -> m.getId().equals("downloads")) + .collect(Collectors.toList()) + .get(0) + .getUnit() + .get(0) + .getValue()); Assertions - .assertEquals( - "5", - tmp - .map(r -> ((OafEntity)r.getPayload())) - .filter(r -> r.getId().equals("10|d1__________::53575dc69e9ace947e02d47ecd54a7a6")) - .collect() - .get(0) - .getMeasures() - .stream() - .filter(m -> m.getId().equals("views")) - .collect(Collectors.toList()) - .get(0) - .getUnit() - .get(0) - .getValue()); + .assertEquals( + "1", + tmp + .map(r -> ((OafEntity) r.getPayload())) + .filter(r -> r.getId().equals("10|d11_________::17eda2ff77407538fbe5d3d719b9d1c0")) + .collect() + .get(0) + .getMeasures() + .stream() + .filter(m -> m.getId().equals("views")) + .collect(Collectors.toList()) + .get(0) + .getUnit() + .get(0) + .getValue()); Assertions - .assertEquals( - "0", - tmp - .map(r -> ((OafEntity)r.getPayload())) - .filter(r -> r.getId().equals("10|d11_________::17eda2ff77407538fbe5d3d719b9d1c0")) - .collect() - .get(0) - .getMeasures() - .stream() - .filter(m -> m.getId().equals("downloads")) - .collect(Collectors.toList()) - .get(0) - .getUnit() - .get(0) - .getValue()); + .assertEquals( + "2", + tmp + .map(r -> ((OafEntity) r.getPayload())) + .filter(r -> r.getId().equals("10|d12_________::3085e4c6e051378ca6157fe7f0430c1f")) + .collect() + .get(0) + .getMeasures() + .stream() + .filter(m -> m.getId().equals("downloads")) + .collect(Collectors.toList()) + .get(0) + .getUnit() + .get(0) + .getValue()); Assertions - .assertEquals( - "1", - tmp - .map(r -> ((OafEntity)r.getPayload())) - .filter(r -> r.getId().equals("10|d11_________::17eda2ff77407538fbe5d3d719b9d1c0")) - .collect() - .get(0) - .getMeasures() - .stream() - .filter(m -> m.getId().equals("views")) - .collect(Collectors.toList()) - .get(0) - .getUnit() - .get(0) - .getValue()); - - Assertions - .assertEquals( - "2", - tmp - .map(r -> ((OafEntity)r.getPayload())) - .filter(r -> r.getId().equals("10|d12_________::3085e4c6e051378ca6157fe7f0430c1f")) - .collect() - .get(0) - .getMeasures() - .stream() - .filter(m -> m.getId().equals("downloads")) - .collect(Collectors.toList()) - .get(0) - .getUnit() - .get(0) - .getValue()); - Assertions - .assertEquals( - "6", - tmp - .map(r -> ((OafEntity)r.getPayload())) - .filter(r -> r.getId().equals("10|d12_________::3085e4c6e051378ca6157fe7f0430c1f")) - .collect() - .get(0) - .getMeasures() - .stream() - .filter(m -> m.getId().equals("views")) - .collect(Collectors.toList()) - .get(0) - .getUnit() - .get(0) - .getValue()); + .assertEquals( + "6", + tmp + .map(r -> ((OafEntity) r.getPayload())) + .filter(r -> r.getId().equals("10|d12_________::3085e4c6e051378ca6157fe7f0430c1f")) + .collect() + .get(0) + .getMeasures() + .stream() + .filter(m -> m.getId().equals("views")) + .collect(Collectors.toList()) + .get(0) + .getUnit() + .get(0) + .getValue()); } } From fddcf701e9de51f56e780b0de1002f015491eaba Mon Sep 17 00:00:00 2001 From: "michele.artini" Date: Wed, 22 Feb 2023 12:07:09 +0100 Subject: [PATCH 324/535] updated the order of the compatibilities --- .../dhp/oa/graph/sql/queryServices.sql | 20 +++++++++---------- 1 file changed, 10 insertions(+), 10 deletions(-) diff --git a/dhp-workflows/dhp-graph-mapper/src/main/resources/eu/dnetlib/dhp/oa/graph/sql/queryServices.sql b/dhp-workflows/dhp-graph-mapper/src/main/resources/eu/dnetlib/dhp/oa/graph/sql/queryServices.sql index c4096f90d..716fa866e 100644 --- a/dhp-workflows/dhp-graph-mapper/src/main/resources/eu/dnetlib/dhp/oa/graph/sql/queryServices.sql +++ b/dhp-workflows/dhp-graph-mapper/src/main/resources/eu/dnetlib/dhp/oa/graph/sql/queryServices.sql @@ -12,21 +12,21 @@ SELECT WHEN (array_agg(DISTINCT COALESCE (a.compatibility_override, a.compatibility):: TEXT) @> ARRAY ['openaire4.0']) THEN 'openaire4.0@@@dnet:datasourceCompatibilityLevel' - WHEN (array_agg(DISTINCT COALESCE (a.compatibility_override, a.compatibility):: TEXT) @> ARRAY ['driver', 'openaire2.0']) - THEN - 'driver-openaire2.0@@@dnet:datasourceCompatibilityLevel' - WHEN (array_agg(DISTINCT COALESCE (a.compatibility_override, a.compatibility) :: TEXT) @> ARRAY ['driver']) - THEN - 'driver@@@dnet:datasourceCompatibilityLevel' - WHEN (array_agg(DISTINCT COALESCE (a.compatibility_override, a.compatibility) :: TEXT) @> ARRAY ['openaire2.0']) - THEN - 'openaire2.0@@@dnet:datasourceCompatibilityLevel' WHEN (array_agg(DISTINCT COALESCE (a.compatibility_override, a.compatibility) :: TEXT) @> ARRAY ['openaire3.0']) THEN 'openaire3.0@@@dnet:datasourceCompatibilityLevel' WHEN (array_agg(DISTINCT COALESCE (a.compatibility_override, a.compatibility) :: TEXT) @> ARRAY ['openaire2.0_data']) THEN 'openaire2.0_data@@@dnet:datasourceCompatibilityLevel' + WHEN (array_agg(DISTINCT COALESCE (a.compatibility_override, a.compatibility):: TEXT) @> ARRAY ['driver', 'openaire2.0']) + THEN + 'driver-openaire2.0@@@dnet:datasourceCompatibilityLevel' + WHEN (array_agg(DISTINCT COALESCE (a.compatibility_override, a.compatibility) :: TEXT) @> ARRAY ['openaire2.0']) + THEN + 'openaire2.0@@@dnet:datasourceCompatibilityLevel' + WHEN (array_agg(DISTINCT COALESCE (a.compatibility_override, a.compatibility) :: TEXT) @> ARRAY ['driver']) + THEN + 'driver@@@dnet:datasourceCompatibilityLevel' WHEN (array_agg(DISTINCT COALESCE (a.compatibility_override, a.compatibility) :: TEXT) @> ARRAY ['native']) THEN 'native@@@dnet:datasourceCompatibilityLevel' @@ -38,7 +38,7 @@ SELECT 'notCompatible@@@dnet:datasourceCompatibilityLevel' ELSE 'UNKNOWN@@@dnet:datasourceCompatibilityLevel' - END AS openairecompatibility, + END AS openairecompatibility, d.websiteurl AS websiteurl, d.logourl AS logourl, array_remove(array_agg(DISTINCT CASE WHEN a.protocol = 'oai' and last_aggregation_date is not null THEN a.baseurl ELSE NULL END), NULL) AS accessinfopackage, From 0b5bf53b45316792a5e0fba058ebc0979d6b54ce Mon Sep 17 00:00:00 2001 From: Serafeim Chatzopoulos Date: Thu, 23 Feb 2023 12:42:42 +0200 Subject: [PATCH 325/535] Remove unecessary indexed fields from Solr --- .../dhp/oa/provision/XmlIndexingJob.java | 2 +- .../utils/StreamingInputDocumentFactory.java | 25 +- .../dhp/oa/provision/EOSCFuture_Test.java | 3 +- .../provision/IndexRecordTransformerTest.java | 6 +- .../dhp/oa/provision/SolrConfigTest.java | 11 +- .../eu/dnetlib/dhp/oa/provision/fields.xml | 273 +++++++----------- 6 files changed, 120 insertions(+), 200 deletions(-) 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 e7dbdbd2b..1560fcbd9 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 @@ -151,7 +151,7 @@ public class XmlIndexingJob { .sequenceFile(inputPath, Text.class, Text.class) .map(t -> t._2().toString()) .map(s -> toIndexRecord(SaxonTransformerFactory.newInstance(indexRecordXslt), s)) - .map(s -> new StreamingInputDocumentFactory(version, dsId).parseDocument(s)); + .map(s -> new StreamingInputDocumentFactory().parseDocument(s)); switch (outputFormat) { case SOLR: diff --git a/dhp-workflows/dhp-graph-provision/src/main/java/eu/dnetlib/dhp/oa/provision/utils/StreamingInputDocumentFactory.java b/dhp-workflows/dhp-graph-provision/src/main/java/eu/dnetlib/dhp/oa/provision/utils/StreamingInputDocumentFactory.java index 36028be9e..b42f9ee83 100644 --- a/dhp-workflows/dhp-graph-provision/src/main/java/eu/dnetlib/dhp/oa/provision/utils/StreamingInputDocumentFactory.java +++ b/dhp-workflows/dhp-graph-provision/src/main/java/eu/dnetlib/dhp/oa/provision/utils/StreamingInputDocumentFactory.java @@ -36,10 +36,6 @@ public class StreamingInputDocumentFactory { private static final String INDEX_FIELD_PREFIX = "__"; - private static final String DS_VERSION = INDEX_FIELD_PREFIX + "dsversion"; - - private static final String DS_ID = INDEX_FIELD_PREFIX + "dsid"; - private static final String RESULT = "result"; private static final String INDEX_RESULT = INDEX_FIELD_PREFIX + RESULT; @@ -65,20 +61,13 @@ public class StreamingInputDocumentFactory { private final ThreadLocal eventFactory = ThreadLocal .withInitial(XMLEventFactory::newInstance); - private final String version; - - private final String dsId; - private String resultName = DEFAULTDNETRESULT; - public StreamingInputDocumentFactory(final String version, final String dsId) { - this(version, dsId, DEFAULTDNETRESULT); + public StreamingInputDocumentFactory() { + this(DEFAULTDNETRESULT); } - public StreamingInputDocumentFactory( - final String version, final String dsId, final String resultName) { - this.version = version; - this.dsId = dsId; + public StreamingInputDocumentFactory(final String resultName) { this.resultName = resultName; } @@ -111,14 +100,6 @@ public class StreamingInputDocumentFactory { } } - if (version != null) { - indexDocument.addField(DS_VERSION, version); - } - - if (dsId != null) { - indexDocument.addField(DS_ID, dsId); - } - if (!indexDocument.containsKey(INDEX_RECORD_ID)) { throw new IllegalStateException("cannot extract record ID from: " + inputDocument); } diff --git a/dhp-workflows/dhp-graph-provision/src/test/java/eu/dnetlib/dhp/oa/provision/EOSCFuture_Test.java b/dhp-workflows/dhp-graph-provision/src/test/java/eu/dnetlib/dhp/oa/provision/EOSCFuture_Test.java index 3e1a501d1..8800abf95 100644 --- a/dhp-workflows/dhp-graph-provision/src/test/java/eu/dnetlib/dhp/oa/provision/EOSCFuture_Test.java +++ b/dhp-workflows/dhp-graph-provision/src/test/java/eu/dnetlib/dhp/oa/provision/EOSCFuture_Test.java @@ -79,8 +79,7 @@ public class EOSCFuture_Test { final String indexRecordXML = XmlIndexingJob.toIndexRecord(tr, record); - final SolrInputDocument solrDoc = new StreamingInputDocumentFactory(VERSION, DSID) - .parseDocument(indexRecordXML); + final SolrInputDocument solrDoc = new StreamingInputDocumentFactory().parseDocument(indexRecordXML); final String xmlDoc = ClientUtils.toXML(solrDoc); 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 cd5e08426..ce593cf07 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 @@ -39,9 +39,6 @@ import eu.dnetlib.dhp.utils.saxon.SaxonTransformerFactory; */ public class IndexRecordTransformerTest { - public static final String VERSION = "2021-04-15T10:05:53Z"; - public static final String DSID = "b9ee796a-c49f-4473-a708-e7d67b84c16d_SW5kZXhEU1Jlc291cmNlcy9JbmRleERTUmVzb3VyY2VUeXBl"; - private ContextMapper contextMapper; @BeforeEach @@ -197,8 +194,7 @@ public class IndexRecordTransformerTest { final String indexRecordXML = XmlIndexingJob.toIndexRecord(tr, record); - final SolrInputDocument solrDoc = new StreamingInputDocumentFactory(VERSION, DSID) - .parseDocument(indexRecordXML); + final SolrInputDocument solrDoc = new StreamingInputDocumentFactory().parseDocument(indexRecordXML); final String xmlDoc = ClientUtils.toXML(solrDoc); diff --git a/dhp-workflows/dhp-graph-provision/src/test/java/eu/dnetlib/dhp/oa/provision/SolrConfigTest.java b/dhp-workflows/dhp-graph-provision/src/test/java/eu/dnetlib/dhp/oa/provision/SolrConfigTest.java index ab98b1da2..451e29128 100644 --- a/dhp-workflows/dhp-graph-provision/src/test/java/eu/dnetlib/dhp/oa/provision/SolrConfigTest.java +++ b/dhp-workflows/dhp-graph-provision/src/test/java/eu/dnetlib/dhp/oa/provision/SolrConfigTest.java @@ -115,16 +115,9 @@ public class SolrConfigTest extends SolrTest { for (SolrDocument doc : rsp.getResults()) { System.out .println( - doc.get("score") + "\t" + doc.get("__indexrecordidentifier") + "\t" + - doc.get("resultidentifier") + "\t" + - doc.get("resultauthor") + "\t" + - doc.get("resultacceptanceyear") + "\t" + - doc.get("resultsubject") + "\t" + - doc.get("resulttitle") + "\t" + - doc.get("relprojectname") + "\t" + - doc.get("resultdescription") + "\t" + - doc.get("__all") + "\t"); + doc.get("__result") + "\t" + ); } } } 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 be2ee7b98..0bf588a57 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,165 +1,116 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file From 23112929e96dbbce3ece27c5a09e3c4e79e2c57f Mon Sep 17 00:00:00 2001 From: "miriam.baglioni" Date: Fri, 10 Feb 2023 15:34:52 +0100 Subject: [PATCH 326/535] [FoS] changed the default separator from comma to tab to solve the issue in subject value split --- .../main/java/eu/dnetlib/dhp/actionmanager/Constants.java | 1 + .../createunresolvedentities/GetFOSSparkJob.java | 7 +++---- 2 files changed, 4 insertions(+), 4 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 bd223d7c9..07410969b 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 @@ -22,6 +22,7 @@ public class Constants { 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"; 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 75fe42e90..c98f1b05a 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 @@ -1,7 +1,7 @@ package eu.dnetlib.dhp.actionmanager.createunresolvedentities; -import static eu.dnetlib.dhp.actionmanager.Constants.DEFAULT_DELIMITER; +import static eu.dnetlib.dhp.actionmanager.Constants.DEFAULT_FOS_DELIMITER; import static eu.dnetlib.dhp.actionmanager.Constants.isSparkSessionManaged; import static eu.dnetlib.dhp.common.SparkSessionSupport.runWithSparkSession; @@ -9,8 +9,7 @@ import java.io.Serializable; import java.util.Optional; import org.apache.commons.io.IOUtils; -import org.apache.hadoop.conf.Configuration; -import org.apache.hadoop.fs.FileSystem; + import org.apache.spark.SparkConf; import org.apache.spark.api.java.function.MapFunction; import org.apache.spark.sql.*; @@ -49,7 +48,7 @@ public class GetFOSSparkJob implements Serializable { final String delimiter = Optional .ofNullable(parser.get("delimiter")) - .orElse(DEFAULT_DELIMITER); + .orElse(DEFAULT_FOS_DELIMITER); SparkConf sconf = new SparkConf(); runWithSparkSession( From 31e97c2a6b9048f791cb9831363e9fa29b573330 Mon Sep 17 00:00:00 2001 From: Claudio Atzori Date: Mon, 27 Feb 2023 11:38:29 +0100 Subject: [PATCH 327/535] [unresolved entities] updated oozie wf node labels --- .../createunresolvedentities/oozie_app/workflow.xml | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) 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 a80bf4fbd..c8af64594 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 @@ -86,7 +86,7 @@ yarn cluster - Produces the unresolved from bip finder! + Produces the unresolved from BIP! Finder eu.dnetlib.dhp.actionmanager.createunresolvedentities.PrepareBipFinder dhp-aggregation-${projectVersion}.jar @@ -135,7 +135,7 @@ yarn cluster - Produces the unresolved from FOS! + Produces the unresolved from FOS eu.dnetlib.dhp.actionmanager.createunresolvedentities.PrepareFOSSparkJob dhp-aggregation-${projectVersion}.jar @@ -185,7 +185,7 @@ yarn cluster - Produces the unresolved from FOS! + Produces the unresolved from FOS eu.dnetlib.dhp.actionmanager.createunresolvedentities.PrepareSDGSparkJob dhp-aggregation-${projectVersion}.jar From 80987801d74bafd9f64ff8961f075c4915609775 Mon Sep 17 00:00:00 2001 From: "miriam.baglioni" Date: Mon, 13 Feb 2023 13:03:49 +0100 Subject: [PATCH 328/535] [FoS] added check for null on level1 subject --- .../dnetlib/dhp/actionmanager/Constants.java | 2 +- .../createunresolvedentities/GetFosTest.java | 96 +++++++++++++++++++ .../createunresolvedentities/fos/fos_sbs.tsv | 40 ++++++++ 3 files changed, 137 insertions(+), 1 deletion(-) create mode 100644 dhp-workflows/dhp-aggregation/src/test/java/eu/dnetlib/dhp/actionmanager/createunresolvedentities/GetFosTest.java create mode 100644 dhp-workflows/dhp-aggregation/src/test/resources/eu/dnetlib/dhp/actionmanager/createunresolvedentities/fos/fos_sbs.tsv 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 07410969b..1f2145d66 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 @@ -62,7 +62,7 @@ public class Constants { public static Subject getSubject(String sbj, String classid, String classname, String diqualifierclassid) { - if (sbj.equals(NULL)) + if (sbj == null || sbj.equals(NULL)) return null; Subject s = new Subject(); s.setValue(sbj); 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 new file mode 100644 index 000000000..9a74ae07e --- /dev/null +++ b/dhp-workflows/dhp-aggregation/src/test/java/eu/dnetlib/dhp/actionmanager/createunresolvedentities/GetFosTest.java @@ -0,0 +1,96 @@ +package eu.dnetlib.dhp.actionmanager.createunresolvedentities; + +import com.fasterxml.jackson.databind.ObjectMapper; +import eu.dnetlib.dhp.actionmanager.createunresolvedentities.model.FOSDataModel; +import org.apache.commons.io.FileUtils; +import org.apache.hadoop.conf.Configuration; +import org.apache.hadoop.fs.FileSystem; +import org.apache.hadoop.fs.LocalFileSystem; +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.slf4j.Logger; +import org.slf4j.LoggerFactory; + +import java.io.IOException; +import java.nio.file.Files; +import java.nio.file.Path; + +/** + * @author miriam.baglioni + * @Date 13/02/23 + */ +public class GetFosTest { + + private static final Logger log = LoggerFactory.getLogger(ProduceTest.class); + + private static Path workingDir; + private static SparkSession spark; + private static LocalFileSystem fs; + private static final ObjectMapper OBJECT_MAPPER = new ObjectMapper(); + + @BeforeAll + public static void beforeAll() throws IOException { + workingDir = Files.createTempDirectory(PrepareTest.class.getSimpleName()); + + fs = FileSystem.getLocal(new Configuration()); + log.info("using work dir {}", workingDir); + + SparkConf conf = new SparkConf(); + conf.setAppName(ProduceTest.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(PrepareTest.class.getSimpleName()) + .config(conf) + .getOrCreate(); + } + + @AfterAll + public static void afterAll() throws IOException { + FileUtils.deleteDirectory(workingDir.toFile()); + spark.stop(); + } + @Test + void test3() throws Exception { + final String sourcePath = getClass() + .getResource("/eu/dnetlib/dhp/actionmanager/createunresolvedentities/fos/fos_sbs.tsv") + .getPath(); + + + 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)); + + } +} diff --git a/dhp-workflows/dhp-aggregation/src/test/resources/eu/dnetlib/dhp/actionmanager/createunresolvedentities/fos/fos_sbs.tsv b/dhp-workflows/dhp-aggregation/src/test/resources/eu/dnetlib/dhp/actionmanager/createunresolvedentities/fos/fos_sbs.tsv new file mode 100644 index 000000000..98a338e2d --- /dev/null +++ b/dhp-workflows/dhp-aggregation/src/test/resources/eu/dnetlib/dhp/actionmanager/createunresolvedentities/fos/fos_sbs.tsv @@ -0,0 +1,40 @@ +doi level1 level2 level3 +10.1080/09638237.2018.1466033 03 medical and health sciences 0302 clinical medicine 030212 general & internal medicine +10.1016/j.dsi.2015.10.003 03 medical and health sciences 0301 basic medicine 030105 genetics & heredity +10.1007/s10072-017-2914-9 03 medical and health sciences 0302 clinical medicine 030217 neurology & neurosurgery +10.1016/j.bspc.2021.102726 02 engineering and technology 0206 medical engineering 020601 biomedical engineering +10.1177/0306312706069439 06 humanities and the arts 0601 history and archaeology 060101 anthropology +10.1016/j.jacep.2016.05.010 03 medical and health sciences 0302 clinical medicine 030212 general & internal medicine +10.1111/anae.13418 03 medical and health sciences 0302 clinical medicine 030212 general & internal medicine +10.1142/s1793744210000168 01 natural sciences 0103 physical sciences 010306 general physics +10.1016/j.jadohealth.2019.04.029 03 medical and health sciences 0302 clinical medicine 030212 general & internal medicine +10.1109/icais50930.2021.9395847 02 engineering and technology 0202 electrical engineering, electronic engineering, information engineering 020201 artificial intelligence & image processing +10.1145/3154837 01 natural sciences 0101 mathematics 010102 general mathematics +10.1038/srep38130 03 medical and health sciences 0301 basic medicine 030106 microbiology +10.1007/s13369-017-2871-x 02 engineering and technology 0202 electrical engineering, electronic engineering, information engineering 020201 artificial intelligence & image processing +10.1063/1.4964718 03 medical and health sciences 0301 basic medicine 030104 developmental biology +10.1007/s12603-019-1276-9 03 medical and health sciences 0302 clinical medicine 030212 general & internal medicine +10.1002/cam4.1463 03 medical and health sciences 0301 basic medicine 030104 developmental biology +10.1164/rccm.201611-2290ed 03 medical and health sciences 0302 clinical medicine 030212 general & internal medicine +10.1088/1757-899x/225/1/012132 01 natural sciences 0105 earth and related environmental sciences 010504 meteorology & atmospheric sciences +10.1117/1.jmm.15.1.015501 02 engineering and technology 0210 nano-technology 021001 nanoscience & nanotechnology +10.1088/1361-6587/ab569d 01 natural sciences 0103 physical sciences 010303 astronomy & astrophysics +10.1016/j.rser.2015.11.092 02 engineering and technology 0202 electrical engineering, electronic engineering, information engineering 020209 energy +10.1016/j.jhydrol.2013.06.035 01 natural sciences 0105 earth and related environmental sciences 010504 meteorology & atmospheric sciences +10.1111/php.12892 03 medical and health sciences 0301 basic medicine 030104 developmental biology +10.1088/0264-9381/27/10/105001 01 natural sciences 0103 physical sciences 010308 nuclear & particles physics +10.1016/j.matchemphys.2018.02.039 02 engineering and technology 0210 nano-technology 021001 nanoscience & nanotechnology +10.1098/rsos.160993 03 medical and health sciences 0301 basic medicine 030104 developmental biology +10.1016/j.rinp.2017.07.054 02 engineering and technology 0209 industrial biotechnology 020901 industrial engineering & automation +10.1111/eip.12348 03 medical and health sciences 0302 clinical medicine 030227 psychiatry +10.20965/jrm.2016.p0371 02 engineering and technology 0201 civil engineering 020101 civil engineering +10.2337/dci19-0036 03 medical and health sciences 0302 clinical medicine 030212 general & internal medicine +10.1155/2018/7692913 01 natural sciences 0104 chemical sciences 010404 medicinal & biomolecular chemistry +10.1117/12.2262306 02 engineering and technology 0202 electrical engineering, electronic engineering, information engineering 020206 networking & telecommunications +10.1021/acs.jpcb.7b01885 01 natural sciences 0104 chemical sciences 010405 organic chemistry +10.1177/0033294117711131 05 social sciences 0502 economics and business 050203 business & management +10.1016/j.jrurstud.2017.08.019 05 social sciences 0502 economics and business 050203 business & management +10.1111/febs.15296 03 medical and health sciences 0301 basic medicine 030104 developmental biology +10.3923/jeasci.2017.6922.6927 05 social sciences 0505 law 050501 criminology +10.1007/s10854-017-6376-x 02 engineering and technology 0202 electrical engineering, electronic engineering, information engineering 020208 electrical & electronic engineering +10.3390/app10176095 02 engineering and technology 0202 electrical engineering, electronic engineering, information engineering 020209 energy \ No newline at end of file From 7aebedb43c5cf9fd8f527f967827118e48eb6e8e Mon Sep 17 00:00:00 2001 From: Claudio Atzori Date: Mon, 27 Feb 2023 11:51:27 +0100 Subject: [PATCH 329/535] code formatting --- .../GetFOSSparkJob.java | 1 - .../usagestats/SparkAtomicActionUsageJob.java | 9 ++- .../createunresolvedentities/GetFosTest.java | 81 ++++++++++--------- .../dhp/oa/provision/SolrConfigTest.java | 5 +- 4 files changed, 50 insertions(+), 46 deletions(-) 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 c98f1b05a..0cc2f93df 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 @@ -9,7 +9,6 @@ import java.io.Serializable; 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.*; 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 b25da07e0..9b444c6fa 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 @@ -83,9 +83,12 @@ public class SparkAtomicActionUsageJob implements Serializable { private static void prepareData(String dbname, SparkSession spark, String workingPath, String tableName, String attribute_name) { spark - .sql(String.format( - "select %s as id, sum(downloads) as downloads, sum(views) as views " + - "from %s.%s group by %s", attribute_name, dbname, tableName, attribute_name)) + .sql( + String + .format( + "select %s as id, sum(downloads) as downloads, sum(views) as views " + + "from %s.%s group by %s", + attribute_name, dbname, tableName, attribute_name)) .as(Encoders.bean(UsageStatsModel.class)) .write() .mode(SaveMode.Overwrite) 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 9a74ae07e..7e0acc2bb 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 @@ -1,7 +1,10 @@ + package eu.dnetlib.dhp.actionmanager.createunresolvedentities; -import com.fasterxml.jackson.databind.ObjectMapper; -import eu.dnetlib.dhp.actionmanager.createunresolvedentities.model.FOSDataModel; +import java.io.IOException; +import java.nio.file.Files; +import java.nio.file.Path; + import org.apache.commons.io.FileUtils; import org.apache.hadoop.conf.Configuration; import org.apache.hadoop.fs.FileSystem; @@ -17,9 +20,9 @@ import org.junit.jupiter.api.Test; import org.slf4j.Logger; import org.slf4j.LoggerFactory; -import java.io.IOException; -import java.nio.file.Files; -import java.nio.file.Path; +import com.fasterxml.jackson.databind.ObjectMapper; + +import eu.dnetlib.dhp.actionmanager.createunresolvedentities.model.FOSDataModel; /** * @author miriam.baglioni @@ -27,48 +30,48 @@ import java.nio.file.Path; */ public class GetFosTest { - private static final Logger log = LoggerFactory.getLogger(ProduceTest.class); + private static final Logger log = LoggerFactory.getLogger(ProduceTest.class); - private static Path workingDir; - private static SparkSession spark; - private static LocalFileSystem fs; - private static final ObjectMapper OBJECT_MAPPER = new ObjectMapper(); + private static Path workingDir; + private static SparkSession spark; + private static LocalFileSystem fs; + private static final ObjectMapper OBJECT_MAPPER = new ObjectMapper(); - @BeforeAll - public static void beforeAll() throws IOException { - workingDir = Files.createTempDirectory(PrepareTest.class.getSimpleName()); + @BeforeAll + public static void beforeAll() throws IOException { + workingDir = Files.createTempDirectory(PrepareTest.class.getSimpleName()); - fs = FileSystem.getLocal(new Configuration()); - log.info("using work dir {}", workingDir); + fs = FileSystem.getLocal(new Configuration()); + log.info("using work dir {}", workingDir); - SparkConf conf = new SparkConf(); - conf.setAppName(ProduceTest.class.getSimpleName()); + SparkConf conf = new SparkConf(); + conf.setAppName(ProduceTest.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(PrepareTest.class.getSimpleName()) - .config(conf) - .getOrCreate(); - } + spark = SparkSession + .builder() + .appName(PrepareTest.class.getSimpleName()) + .config(conf) + .getOrCreate(); + } - @AfterAll - public static void afterAll() throws IOException { - FileUtils.deleteDirectory(workingDir.toFile()); - spark.stop(); - } - @Test + @AfterAll + public static void afterAll() throws IOException { + FileUtils.deleteDirectory(workingDir.toFile()); + spark.stop(); + } + + @Test void test3() throws Exception { - final String sourcePath = getClass() - .getResource("/eu/dnetlib/dhp/actionmanager/createunresolvedentities/fos/fos_sbs.tsv") - .getPath(); - + final String sourcePath = getClass() + .getResource("/eu/dnetlib/dhp/actionmanager/createunresolvedentities/fos/fos_sbs.tsv") + .getPath(); final String outputPath = workingDir.toString() + "/fos.json"; GetFOSSparkJob diff --git a/dhp-workflows/dhp-graph-provision/src/test/java/eu/dnetlib/dhp/oa/provision/SolrConfigTest.java b/dhp-workflows/dhp-graph-provision/src/test/java/eu/dnetlib/dhp/oa/provision/SolrConfigTest.java index 451e29128..a9d885ecf 100644 --- a/dhp-workflows/dhp-graph-provision/src/test/java/eu/dnetlib/dhp/oa/provision/SolrConfigTest.java +++ b/dhp-workflows/dhp-graph-provision/src/test/java/eu/dnetlib/dhp/oa/provision/SolrConfigTest.java @@ -115,9 +115,8 @@ public class SolrConfigTest extends SolrTest { for (SolrDocument doc : rsp.getResults()) { System.out .println( - doc.get("__indexrecordidentifier") + "\t" + - doc.get("__result") + "\t" - ); + doc.get("__indexrecordidentifier") + "\t" + + doc.get("__result") + "\t"); } } } From 78e51c182ab43b7c14d835a9829e4bcf0a510ae6 Mon Sep 17 00:00:00 2001 From: Sandro La Bruzzo Date: Tue, 28 Feb 2023 10:16:01 +0100 Subject: [PATCH 330/535] Added missing parametero to raw all workflow --- .../eu/dnetlib/dhp/oa/graph/raw_all/oozie_app/workflow.xml | 2 ++ 1 file changed, 2 insertions(+) diff --git a/dhp-workflows/dhp-graph-mapper/src/main/resources/eu/dnetlib/dhp/oa/graph/raw_all/oozie_app/workflow.xml b/dhp-workflows/dhp-graph-mapper/src/main/resources/eu/dnetlib/dhp/oa/graph/raw_all/oozie_app/workflow.xml index 069dd09f7..9d89534f0 100644 --- a/dhp-workflows/dhp-graph-mapper/src/main/resources/eu/dnetlib/dhp/oa/graph/raw_all/oozie_app/workflow.xml +++ b/dhp-workflows/dhp-graph-mapper/src/main/resources/eu/dnetlib/dhp/oa/graph/raw_all/oozie_app/workflow.xml @@ -224,6 +224,7 @@ -fODF -lstore -iclaim + --nameNode${nameNode} @@ -249,6 +250,7 @@ -fOAF -lstore -iclaim + --nameNode${nameNode} From 832a75d0121b898fff6dfa8bc9002ad236e62d96 Mon Sep 17 00:00:00 2001 From: Sandro La Bruzzo Date: Tue, 28 Feb 2023 10:16:34 +0100 Subject: [PATCH 331/535] added mapping for crossref funder --- .../doiboost/crossref/Crossref2Oaf.scala | 17 +++++++++++++++++ 1 file changed, 17 insertions(+) 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 75aa4a024..4cdbe60f7 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 @@ -505,6 +505,23 @@ case object Crossref2Oaf { val targetId = getProjectId("cihr________", "1e5e62235d094afd01cd56e65112fc63") queue += generateRelation(sourceId, targetId, ModelConstants.IS_PRODUCED_BY) queue += generateRelation(targetId, sourceId, ModelConstants.PRODUCES) + + case "10.13039/100020031" => + val targetId = getProjectId("tara________", "1e5e62235d094afd01cd56e65112fc63") + queue += generateRelation(sourceId, targetId, ModelConstants.IS_PRODUCED_BY) + queue += generateRelation(targetId, sourceId, ModelConstants.PRODUCES) + + + case "10.13039/501100005416" => generateSimpleRelationFromAward(funder, "rcn_________", a => a) + case "10.13039/501100004744" => INNOVIRIS + + + + + + + + case "10.13039/501100002848" => generateSimpleRelationFromAward(funder, "conicytf____", a => a) case "10.13039/501100003448" => generateSimpleRelationFromAward(funder, "gsrt________", extractECAward) case "10.13039/501100010198" => generateSimpleRelationFromAward(funder, "sgov________", a => a) From 69fa61649046f3a4cfa244ddc33d423d8cc91926 Mon Sep 17 00:00:00 2001 From: Sandro La Bruzzo Date: Tue, 28 Feb 2023 10:27:38 +0100 Subject: [PATCH 332/535] removed wrong content --- .../eu/dnetlib/doiboost/crossref/Crossref2Oaf.scala | 9 --------- 1 file changed, 9 deletions(-) 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 4cdbe60f7..8ef564a62 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 @@ -513,15 +513,6 @@ case object Crossref2Oaf { case "10.13039/501100005416" => generateSimpleRelationFromAward(funder, "rcn_________", a => a) - case "10.13039/501100004744" => INNOVIRIS - - - - - - - - case "10.13039/501100002848" => generateSimpleRelationFromAward(funder, "conicytf____", a => a) case "10.13039/501100003448" => generateSimpleRelationFromAward(funder, "gsrt________", extractECAward) case "10.13039/501100010198" => generateSimpleRelationFromAward(funder, "sgov________", a => a) From 0559d8b412a83e336ada2e10813b83412bac26fd Mon Sep 17 00:00:00 2001 From: Claudio Atzori Date: Tue, 28 Feb 2023 10:57:32 +0100 Subject: [PATCH 333/535] WIP monodirectional citations --- .../eu/dnetlib/doiboost/crossref/Crossref2Oaf.scala | 12 +----------- 1 file changed, 1 insertion(+), 11 deletions(-) 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 8ef564a62..7b5f9fb91 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 @@ -397,17 +397,7 @@ case object Crossref2Oaf { from.setDataInfo(source.getDataInfo) from.setLastupdatetimestamp(source.getLastupdatetimestamp) - val to = new Relation - to.setTarget(source.getId) - to.setSource(targetId) - to.setRelType(ModelConstants.RESULT_RESULT) - to.setRelClass(ModelConstants.IS_CITED_BY) - to.setSubRelType(ModelConstants.CITATION) - to.setCollectedfrom(source.getCollectedfrom) - to.setDataInfo(source.getDataInfo) - to.setLastupdatetimestamp(source.getLastupdatetimestamp) - - List(from, to) + List(from) } def generateCitationRelations(dois: List[String], result: Result): List[Relation] = { From 2f7346e9cfbba21c1efb69852834d3c9fc066424 Mon Sep 17 00:00:00 2001 From: Claudio Atzori Date: Tue, 28 Feb 2023 13:30:51 +0100 Subject: [PATCH 334/535] WIP monodirectional citations, Datacite --- .../dhp/datacite/DataciteModelConstants.scala | 20 ------ .../DataciteToOAFTransformation.scala | 61 +++++++++++++------ 2 files changed, 41 insertions(+), 40 deletions(-) diff --git a/dhp-workflows/dhp-aggregation/src/main/scala/eu/dnetlib/dhp/datacite/DataciteModelConstants.scala b/dhp-workflows/dhp-aggregation/src/main/scala/eu/dnetlib/dhp/datacite/DataciteModelConstants.scala index a59779387..6e9d53aa3 100644 --- a/dhp-workflows/dhp-aggregation/src/main/scala/eu/dnetlib/dhp/datacite/DataciteModelConstants.scala +++ b/dhp-workflows/dhp-aggregation/src/main/scala/eu/dnetlib/dhp/datacite/DataciteModelConstants.scala @@ -78,16 +78,6 @@ object DataciteModelConstants { OafMapperUtils.keyValue(ModelConstants.DATACITE_ID, DATACITE_NAME) val subRelTypeMapping: Map[String, OAFRelations] = Map( - ModelConstants.REFERENCES -> OAFRelations( - ModelConstants.REFERENCES, - ModelConstants.IS_REFERENCED_BY, - ModelConstants.RELATIONSHIP - ), - ModelConstants.IS_REFERENCED_BY -> OAFRelations( - ModelConstants.IS_REFERENCED_BY, - ModelConstants.REFERENCES, - ModelConstants.RELATIONSHIP - ), ModelConstants.IS_SUPPLEMENTED_BY -> OAFRelations( ModelConstants.IS_SUPPLEMENTED_BY, ModelConstants.IS_SUPPLEMENT_TO, @@ -163,16 +153,6 @@ object DataciteModelConstants { ModelConstants.IS_SOURCE_OF, ModelConstants.VERSION ), - ModelConstants.CITES -> OAFRelations( - ModelConstants.CITES, - ModelConstants.IS_CITED_BY, - ModelConstants.CITATION - ), - ModelConstants.IS_CITED_BY -> OAFRelations( - ModelConstants.IS_CITED_BY, - ModelConstants.CITES, - ModelConstants.CITATION - ), ModelConstants.IS_VARIANT_FORM_OF -> OAFRelations( ModelConstants.IS_VARIANT_FORM_OF, ModelConstants.IS_DERIVED_FROM, 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 a7ad9e2d6..049910ade 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 @@ -645,7 +645,7 @@ object DataciteToOAFTransformation { id: String, date: String ): List[Relation] = { - rels + val bidirectionalRels: List[Relation] = rels .filter(r => subRelTypeMapping .contains(r.relationType) && (r.relatedIdentifierType.equalsIgnoreCase("doi") || @@ -653,27 +653,48 @@ object DataciteToOAFTransformation { r.relatedIdentifierType.equalsIgnoreCase("arxiv")) ) .map(r => { - val rel = new Relation - rel.setCollectedfrom(List(DATACITE_COLLECTED_FROM).asJava) - rel.setDataInfo(dataInfo) - val subRelType = subRelTypeMapping(r.relationType).relType - rel.setRelType(REL_TYPE_VALUE) - rel.setSubRelType(subRelType) - rel.setRelClass(r.relationType) - - val dateProps: KeyValue = OafMapperUtils.keyValue(DATE_RELATION_KEY, date) - - rel.setProperties(List(dateProps).asJava) - - rel.setSource(id) - rel.setTarget( - DHPUtils.generateUnresolvedIdentifier(r.relatedIdentifier, r.relatedIdentifierType) - ) - rel.setCollectedfrom(List(DATACITE_COLLECTED_FROM).asJava) - rel.getCollectedfrom.asScala.map(c => c.getValue).toList - rel + val target = DHPUtils.generateUnresolvedIdentifier(r.relatedIdentifier, r.relatedIdentifierType) + relation(id, target, subRelType, r.relationType, date) }) + val citationRels:List[Relation] = rels + .filter(r => + (r.relatedIdentifierType.equalsIgnoreCase("doi") || + r.relatedIdentifierType.equalsIgnoreCase("pmid") || + r.relatedIdentifierType.equalsIgnoreCase("arxiv")) && + (r.relationType.toLowerCase.contains("cite") || r.relationType.toLowerCase.contains("reference"))) + .map(r => { + r.relationType match { + case ModelConstants.CITES | ModelConstants.REFERENCES => + val target = DHPUtils.generateUnresolvedIdentifier(r.relatedIdentifier, r.relatedIdentifierType) + relation(id, target, ModelConstants.CITATION, ModelConstants.CITES, date) + case ModelConstants.IS_CITED_BY | ModelConstants.IS_REFERENCED_BY => + val source = DHPUtils.generateUnresolvedIdentifier(r.relatedIdentifier, r.relatedIdentifierType) + relation(source, id, ModelConstants.CITATION, ModelConstants.CITES, date) + } + }) + + citationRels ::: bidirectionalRels + } + + def relation(source:String, target:String, subRelType:String, relClass:String, date:String): Relation = { + val rel = new Relation + rel.setCollectedfrom(List(DATACITE_COLLECTED_FROM).asJava) + rel.setDataInfo(dataInfo) + + rel.setRelType(REL_TYPE_VALUE) + rel.setSubRelType(subRelType) + rel.setRelClass(relClass) + + val dateProps: KeyValue = OafMapperUtils.keyValue(DATE_RELATION_KEY, date) + + rel.setProperties(List(dateProps).asJava) + + rel.setSource(source) + rel.setTarget(target) + rel.setCollectedfrom(List(DATACITE_COLLECTED_FROM).asJava) + rel.getCollectedfrom.asScala.map(c => c.getValue).toList + rel } def generateDSId(input: String): String = { From 4f2df876cdd591c3dfaf5b06eb20e62e711fafa5 Mon Sep 17 00:00:00 2001 From: "miriam.baglioni" Date: Tue, 28 Feb 2023 14:44:00 +0100 Subject: [PATCH 335/535] [ECclassification] new implementation first try --- .../project/PrepareProjects.java | 29 +- .../project/utils/ExtractProjects.java | 126 +++ .../project/utils/model/CSVProject.java | 2 +- .../project/utils/model/EXCELTopic.java | 28 +- .../project/utils/model/Project.java | 191 +++++ .../usagestats/SparkAtomicActionUsageJob.java | 9 +- .../project/extract_project_parameters.json | 23 + .../project/oozie_app/workflow.xml | 27 +- .../project/DownloadCsvTest.java | 67 +- .../project/EXCELParserTest.java | 19 + .../project/PrepareProjectTest.java | 46 +- .../actionmanager/project/h2020_programme.csv | 770 ++++++++++++++++++ .../actionmanager/project/h2020_topic.xlsx | Bin 0 -> 4679901 bytes .../dhp/actionmanager/project/projects.json | 399 +++++++++ 14 files changed, 1700 insertions(+), 36 deletions(-) create mode 100644 dhp-workflows/dhp-aggregation/src/main/java/eu/dnetlib/dhp/actionmanager/project/utils/ExtractProjects.java create mode 100644 dhp-workflows/dhp-aggregation/src/main/java/eu/dnetlib/dhp/actionmanager/project/utils/model/Project.java create mode 100644 dhp-workflows/dhp-aggregation/src/main/resources/eu/dnetlib/dhp/actionmanager/project/extract_project_parameters.json create mode 100644 dhp-workflows/dhp-aggregation/src/test/resources/eu/dnetlib/dhp/actionmanager/project/h2020_programme.csv create mode 100644 dhp-workflows/dhp-aggregation/src/test/resources/eu/dnetlib/dhp/actionmanager/project/h2020_topic.xlsx create mode 100644 dhp-workflows/dhp-aggregation/src/test/resources/eu/dnetlib/dhp/actionmanager/project/projects.json diff --git a/dhp-workflows/dhp-aggregation/src/main/java/eu/dnetlib/dhp/actionmanager/project/PrepareProjects.java b/dhp-workflows/dhp-aggregation/src/main/java/eu/dnetlib/dhp/actionmanager/project/PrepareProjects.java index 8efc76a0e..b918cbb13 100644 --- a/dhp-workflows/dhp-aggregation/src/main/java/eu/dnetlib/dhp/actionmanager/project/PrepareProjects.java +++ b/dhp-workflows/dhp-aggregation/src/main/java/eu/dnetlib/dhp/actionmanager/project/PrepareProjects.java @@ -3,12 +3,23 @@ package eu.dnetlib.dhp.actionmanager.project; import static eu.dnetlib.dhp.common.SparkSessionSupport.runWithSparkSession; +import java.io.BufferedOutputStream; +import java.io.IOException; import java.util.*; +import java.util.zip.GZIPOutputStream; +import java.util.zip.ZipEntry; +import java.util.zip.ZipInputStream; import org.apache.commons.io.IOUtils; +import org.apache.hadoop.conf.Configuration; +import org.apache.hadoop.fs.FSDataInputStream; +import org.apache.hadoop.fs.FSDataOutputStream; +import org.apache.hadoop.fs.FileSystem; +import org.apache.hadoop.fs.Path; import org.apache.spark.SparkConf; import org.apache.spark.api.java.function.FlatMapFunction; import org.apache.spark.api.java.function.MapFunction; +import org.apache.spark.rdd.RDD; import org.apache.spark.sql.Dataset; import org.apache.spark.sql.Encoders; import org.apache.spark.sql.SaveMode; @@ -19,6 +30,7 @@ import org.slf4j.LoggerFactory; import com.fasterxml.jackson.databind.ObjectMapper; import eu.dnetlib.dhp.actionmanager.project.utils.model.CSVProject; +import eu.dnetlib.dhp.actionmanager.project.utils.model.Project; import eu.dnetlib.dhp.application.ArgumentApplicationParser; import eu.dnetlib.dhp.common.HdfsSupport; import scala.Tuple2; @@ -54,6 +66,9 @@ public class PrepareProjects { final String projectPath = parser.get("projectPath"); log.info("projectPath {}: ", projectPath); + final String workingPath = parser.get("workingPath"); + log.info("workingPath {}: ", workingPath); + final String outputPath = parser.get("outputPath"); log.info("outputPath {}: ", outputPath); @@ -76,7 +91,7 @@ public class PrepareProjects { } private static void exec(SparkSession spark, String projectPath, String dbProjectPath, String outputPath) { - Dataset project = readPath(spark, projectPath, CSVProject.class); + Dataset project = readPath(spark, projectPath, Project.class); Dataset dbProjects = readPath(spark, dbProjectPath, ProjectSubset.class); dbProjects @@ -90,14 +105,14 @@ public class PrepareProjects { } - private static FlatMapFunction, CSVProject> getTuple2CSVProjectFlatMapFunction() { + private static FlatMapFunction, CSVProject> getTuple2CSVProjectFlatMapFunction() { return value -> { - Optional csvProject = Optional.ofNullable(value._2()); List csvProjectList = new ArrayList<>(); - if (csvProject.isPresent()) { + if (Optional.ofNullable(value._2()).isPresent()) { + Project project = value._2(); - String[] programme = csvProject.get().getProgramme().split(";"); - String topic = csvProject.get().getTopics(); + String[] programme = project.getLegalBasis().split(";"); + String topic = project.getTopics(); Arrays .stream(programme) @@ -106,7 +121,7 @@ public class PrepareProjects { proj.setTopics(topic); proj.setProgramme(p); - proj.setId(csvProject.get().getId()); + proj.setId(project.getId()); csvProjectList.add(proj); }); } diff --git a/dhp-workflows/dhp-aggregation/src/main/java/eu/dnetlib/dhp/actionmanager/project/utils/ExtractProjects.java b/dhp-workflows/dhp-aggregation/src/main/java/eu/dnetlib/dhp/actionmanager/project/utils/ExtractProjects.java new file mode 100644 index 000000000..fd6bf3579 --- /dev/null +++ b/dhp-workflows/dhp-aggregation/src/main/java/eu/dnetlib/dhp/actionmanager/project/utils/ExtractProjects.java @@ -0,0 +1,126 @@ + +package eu.dnetlib.dhp.actionmanager.project.utils; + +import java.io.*; +import java.nio.charset.StandardCharsets; +import java.util.ArrayList; +import java.util.List; +import java.util.Optional; +import java.util.zip.GZIPOutputStream; +import java.util.zip.ZipEntry; +import java.util.zip.ZipInputStream; + +import org.apache.commons.io.IOUtils; +import org.apache.hadoop.conf.Configuration; +import org.apache.hadoop.fs.FSDataInputStream; +import org.apache.hadoop.fs.FSDataOutputStream; +import org.apache.hadoop.fs.FileSystem; +import org.apache.hadoop.fs.Path; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; + +import com.fasterxml.jackson.core.type.TypeReference; +import com.fasterxml.jackson.databind.ObjectMapper; + +import eu.dnetlib.dhp.actionmanager.project.PrepareProjects; +import eu.dnetlib.dhp.actionmanager.project.utils.model.Project; +import eu.dnetlib.dhp.application.ArgumentApplicationParser; + +/** + * @author miriam.baglioni + * @Date 28/02/23 + */ +public class ExtractProjects implements Serializable { + private static final Logger log = LoggerFactory.getLogger(PrepareProjects.class); + private static final ObjectMapper OBJECT_MAPPER = new ObjectMapper(); + + public static void main(String[] args) throws Exception { + + String jsonConfiguration = IOUtils + .toString( + PrepareProjects.class + .getResourceAsStream( + "/eu/dnetlib/dhp/actionmanager/project/extract_project_parameters.json")); + + final ArgumentApplicationParser parser = new ArgumentApplicationParser(jsonConfiguration); + + parser.parseArgument(args); + + final String projectPath = parser.get("projectPath"); + log.info("projectPath {}: ", projectPath); + + final String workingPath = parser.get("workingPath"); + log.info("workingPath {}: ", workingPath); + + final String hdfsNameNode = parser.get("hdfsNameNode"); + log.info("hdfsNameNode {}", hdfsNameNode); + + Configuration conf = new Configuration(); + conf.set("fs.defaultFS", hdfsNameNode); + + FileSystem fs = FileSystem.get(conf); + + doExtract(projectPath, workingPath, fs); + readProjects(workingPath + "json/project.json", workingPath + "projects/h2020_projects_nld.json", fs); + } + + private static void doExtract(String inputFile, String workingPath, FileSystem fileSystem) + throws IOException { + + final Path path = new Path(inputFile); + + FSDataInputStream project_zip = fileSystem.open(path); + + try (ZipInputStream zis = new ZipInputStream(project_zip)) { + ZipEntry entry = null; + while ((entry = zis.getNextEntry()) != null) { + + if (!entry.isDirectory()) { + String fileName = entry.getName(); + byte buffer[] = new byte[1024]; + int count; + + try ( + FSDataOutputStream out = fileSystem + .create(new Path(workingPath + fileName))) { + + while ((count = zis.read(buffer, 0, buffer.length)) != -1) + out.write(buffer, 0, count); + + } + + } + + } + + } + + } + + private static void readProjects(String inputFile, String workingPath, FileSystem fs) throws IOException { + Path hdfsreadpath = new Path(inputFile); + + FSDataInputStream inputStream = fs.open(hdfsreadpath); + + ArrayList projects = OBJECT_MAPPER + .readValue( + IOUtils.toString(inputStream, "UTF-8"), + new TypeReference>() { + }); + + Path hdfsWritePath = new Path(workingPath); + + if (fs.exists(hdfsWritePath)) { + fs.delete(hdfsWritePath, false); + } + FSDataOutputStream fos = fs.create(hdfsWritePath); + + try (BufferedWriter writer = new BufferedWriter(new OutputStreamWriter(fos, StandardCharsets.UTF_8))) { + + for (Project p : projects) { + writer.write(OBJECT_MAPPER.writeValueAsString(p)); + writer.newLine(); + } + } + } +} diff --git a/dhp-workflows/dhp-aggregation/src/main/java/eu/dnetlib/dhp/actionmanager/project/utils/model/CSVProject.java b/dhp-workflows/dhp-aggregation/src/main/java/eu/dnetlib/dhp/actionmanager/project/utils/model/CSVProject.java index 3ddb19636..cff79a221 100644 --- a/dhp-workflows/dhp-aggregation/src/main/java/eu/dnetlib/dhp/actionmanager/project/utils/model/CSVProject.java +++ b/dhp-workflows/dhp-aggregation/src/main/java/eu/dnetlib/dhp/actionmanager/project/utils/model/CSVProject.java @@ -13,7 +13,7 @@ public class CSVProject implements Serializable { @CsvBindByName(column = "id") private String id; - @CsvBindByName(column = "programme") + @CsvBindByName(column = "legalBasis") private String programme; @CsvBindByName(column = "topics") diff --git a/dhp-workflows/dhp-aggregation/src/main/java/eu/dnetlib/dhp/actionmanager/project/utils/model/EXCELTopic.java b/dhp-workflows/dhp-aggregation/src/main/java/eu/dnetlib/dhp/actionmanager/project/utils/model/EXCELTopic.java index fa2e3422e..f4d748ff7 100644 --- a/dhp-workflows/dhp-aggregation/src/main/java/eu/dnetlib/dhp/actionmanager/project/utils/model/EXCELTopic.java +++ b/dhp-workflows/dhp-aggregation/src/main/java/eu/dnetlib/dhp/actionmanager/project/utils/model/EXCELTopic.java @@ -17,9 +17,27 @@ public class EXCELTopic implements Serializable { private String title; private String shortTitle; private String objective; - private String subjects; + private String keywords; private String legalBasis; private String call; + private String id; + private String contentUpdateDate; + + public String getContentUpdateDate() { + return contentUpdateDate; + } + + public void setContentUpdateDate(String contentUpdateDate) { + this.contentUpdateDate = contentUpdateDate; + } + + public String getId() { + return id; + } + + public void setId(String id) { + this.id = id; + } public String getRcn() { return rcn; @@ -101,12 +119,12 @@ public class EXCELTopic implements Serializable { this.objective = objective; } - public String getSubjects() { - return subjects; + public String getKeywords() { + return keywords; } - public void setSubjects(String subjects) { - this.subjects = subjects; + public void setKeywords(String keywords) { + this.keywords = keywords; } public String getLegalBasis() { diff --git a/dhp-workflows/dhp-aggregation/src/main/java/eu/dnetlib/dhp/actionmanager/project/utils/model/Project.java b/dhp-workflows/dhp-aggregation/src/main/java/eu/dnetlib/dhp/actionmanager/project/utils/model/Project.java new file mode 100644 index 000000000..2808c2941 --- /dev/null +++ b/dhp-workflows/dhp-aggregation/src/main/java/eu/dnetlib/dhp/actionmanager/project/utils/model/Project.java @@ -0,0 +1,191 @@ + +package eu.dnetlib.dhp.actionmanager.project.utils.model; + +import java.io.Serializable; + +/** + * @author miriam.baglioni + * @Date 24/02/23 + */ +public class Project implements Serializable { + private String acronym; + private String contentUpdateDate; + private String ecMaxContribution; + private String ecSignatureDate; + private String endDate; + private String frameworkProgramme; + private String fundingScheme; + private String grantDoi; + private String id; + private String legalBasis; + private String masterCall; + private String nature; + private String objective; + private String rcn; + private String startDate; + private String status; + private String subCall; + private String title; + private String topics; + private String totalCost; + + public String getAcronym() { + return acronym; + } + + public void setAcronym(String acronym) { + this.acronym = acronym; + } + + public String getContentUpdateDate() { + return contentUpdateDate; + } + + public void setContentUpdateDate(String contentUpdateDate) { + this.contentUpdateDate = contentUpdateDate; + } + + public String getEcMaxContribution() { + return ecMaxContribution; + } + + public void setEcMaxContribution(String ecMaxContribution) { + this.ecMaxContribution = ecMaxContribution; + } + + public String getEcSignatureDate() { + return ecSignatureDate; + } + + public void setEcSignatureDate(String ecSignatureDate) { + this.ecSignatureDate = ecSignatureDate; + } + + public String getEndDate() { + return endDate; + } + + public void setEndDate(String endDate) { + this.endDate = endDate; + } + + public String getFrameworkProgramme() { + return frameworkProgramme; + } + + public void setFrameworkProgramme(String frameworkProgramme) { + this.frameworkProgramme = frameworkProgramme; + } + + public String getFundingScheme() { + return fundingScheme; + } + + public void setFundingScheme(String fundingScheme) { + this.fundingScheme = fundingScheme; + } + + public String getGrantDoi() { + return grantDoi; + } + + public void setGrantDoi(String grantDoi) { + this.grantDoi = grantDoi; + } + + public String getId() { + return id; + } + + public void setId(String id) { + this.id = id; + } + + public String getLegalBasis() { + return legalBasis; + } + + public void setLegalBasis(String legalBasis) { + this.legalBasis = legalBasis; + } + + public String getMasterCall() { + return masterCall; + } + + public void setMasterCall(String masterCall) { + this.masterCall = masterCall; + } + + public String getNature() { + return nature; + } + + public void setNature(String nature) { + this.nature = nature; + } + + public String getObjective() { + return objective; + } + + public void setObjective(String objective) { + this.objective = objective; + } + + public String getRcn() { + return rcn; + } + + public void setRcn(String rcn) { + this.rcn = rcn; + } + + public String getStartDate() { + return startDate; + } + + public void setStartDate(String startDate) { + this.startDate = startDate; + } + + public String getStatus() { + return status; + } + + public void setStatus(String status) { + this.status = status; + } + + public String getSubCall() { + return subCall; + } + + public void setSubCall(String subCall) { + this.subCall = subCall; + } + + public String getTitle() { + return title; + } + + public void setTitle(String title) { + this.title = title; + } + + public String getTopics() { + return topics; + } + + public void setTopics(String topics) { + this.topics = topics; + } + + public String getTotalCost() { + return totalCost; + } + + public void setTotalCost(String totalCost) { + this.totalCost = totalCost; + } +} 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 b25da07e0..9b444c6fa 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 @@ -83,9 +83,12 @@ public class SparkAtomicActionUsageJob implements Serializable { private static void prepareData(String dbname, SparkSession spark, String workingPath, String tableName, String attribute_name) { spark - .sql(String.format( - "select %s as id, sum(downloads) as downloads, sum(views) as views " + - "from %s.%s group by %s", attribute_name, dbname, tableName, attribute_name)) + .sql( + String + .format( + "select %s as id, sum(downloads) as downloads, sum(views) as views " + + "from %s.%s group by %s", + attribute_name, dbname, tableName, attribute_name)) .as(Encoders.bean(UsageStatsModel.class)) .write() .mode(SaveMode.Overwrite) diff --git a/dhp-workflows/dhp-aggregation/src/main/resources/eu/dnetlib/dhp/actionmanager/project/extract_project_parameters.json b/dhp-workflows/dhp-aggregation/src/main/resources/eu/dnetlib/dhp/actionmanager/project/extract_project_parameters.json new file mode 100644 index 000000000..a690ba018 --- /dev/null +++ b/dhp-workflows/dhp-aggregation/src/main/resources/eu/dnetlib/dhp/actionmanager/project/extract_project_parameters.json @@ -0,0 +1,23 @@ +[ + +{ +"paramName": "pjp", +"paramLongName": "projectPath", +"paramDescription": "the path where the projects are stored ", +"paramRequired": true +}, + + + { +"paramName": "wp", +"paramLongName": "workingPath", +"paramDescription": "the path for the extracted folder", +"paramRequired": true +}, + { + "paramName": "hnn", + "paramLongName": "hdfsNameNode", + "paramDescription": "the hdfs namenode", + "paramRequired": true + } +] \ No newline at end of file diff --git a/dhp-workflows/dhp-aggregation/src/main/resources/eu/dnetlib/dhp/actionmanager/project/oozie_app/workflow.xml b/dhp-workflows/dhp-aggregation/src/main/resources/eu/dnetlib/dhp/actionmanager/project/oozie_app/workflow.xml index bd864a6aa..d0b149c77 100644 --- a/dhp-workflows/dhp-aggregation/src/main/resources/eu/dnetlib/dhp/actionmanager/project/oozie_app/workflow.xml +++ b/dhp-workflows/dhp-aggregation/src/main/resources/eu/dnetlib/dhp/actionmanager/project/oozie_app/workflow.xml @@ -1,25 +1,25 @@ - - projectFileURL - the url where to get the projects file - programmeFileURL + noneed the url where to get the programme file topicFileURL + noneed the url where to get the topic file outputPath + noneed path where to store the action set sheetName + noneed the name of the sheet to read @@ -35,7 +35,7 @@ - + @@ -48,19 +48,21 @@ - + - + - eu.dnetlib.dhp.actionmanager.project.utils.ReadCSV + eu.dnetlib.dhp.actionmanager.project.utils.ExtractProjects --hdfsNameNode${nameNode} - --fileURL${projectFileURL} - --hdfsPath${workingDir}/projects - --classForNameeu.dnetlib.dhp.actionmanager.project.utils.model.CSVProject + --projectPath/tmp/miriam/cordis-h2020projects-json_.zip + + + --workingPath${workingDir}/ + @@ -152,7 +154,8 @@ --outputPath${workingDir}/preparedProjects --dbProjectPath${workingDir}/dbProjects - + + diff --git a/dhp-workflows/dhp-aggregation/src/test/java/eu/dnetlib/dhp/actionmanager/project/DownloadCsvTest.java b/dhp-workflows/dhp-aggregation/src/test/java/eu/dnetlib/dhp/actionmanager/project/DownloadCsvTest.java index 21fb63273..647ffdda7 100644 --- a/dhp-workflows/dhp-aggregation/src/test/java/eu/dnetlib/dhp/actionmanager/project/DownloadCsvTest.java +++ b/dhp-workflows/dhp-aggregation/src/test/java/eu/dnetlib/dhp/actionmanager/project/DownloadCsvTest.java @@ -1,12 +1,10 @@ package eu.dnetlib.dhp.actionmanager.project; +import static org.junit.jupiter.api.Assertions.assertEquals; import static org.junit.jupiter.api.Assertions.assertTrue; -import java.io.BufferedReader; -import java.io.File; -import java.io.IOException; -import java.io.InputStreamReader; +import java.io.*; import java.nio.file.Files; import org.apache.commons.io.FileUtils; @@ -95,7 +93,7 @@ public class DownloadCsvTest { count += 1; } - Assertions.assertEquals(767, count); + assertEquals(767, count); } @Disabled @@ -137,7 +135,7 @@ public class DownloadCsvTest { count += 1; } - Assertions.assertEquals(34957, count); + assertEquals(34957, count); } @AfterAll @@ -145,4 +143,61 @@ public class DownloadCsvTest { FileUtils.deleteQuietly(new File(workingDir)); } + @Test + void getLocalProgrammeFileTest() throws Exception { + + GetCSV + .getCsv( + fs, new BufferedReader( + new FileReader( + getClass().getResource("/eu/dnetlib/dhp/actionmanager/project/h2020_programme.csv").getPath())), + workingDir + "/programme", + CSVProgramme.class.getName(), ';'); + + BufferedReader in = new BufferedReader(new InputStreamReader(fs.open(new Path(workingDir + "/programme")))); + + String line; + int count = 0; + while ((line = in.readLine()) != null) { + CSVProgramme csvp = new ObjectMapper().readValue(line, CSVProgramme.class); + if (count == 528) { + assertEquals("H2020-EU.5.f.", csvp.getCode()); + assertTrue( + csvp + .getTitle() + .startsWith( + "Develop the governance for the advancement of responsible research and innovation by all stakeholders")); + assertTrue(csvp.getTitle().endsWith("promote an ethics framework for research and innovation")); + assertTrue(csvp.getShortTitle().equals("")); + assertTrue(csvp.getLanguage().equals("en")); + } + if (count == 11) { + assertEquals("H2020-EU.3.5.4.", csvp.getCode()); + assertTrue( + csvp + .getTitle() + .equals( + "Grundlagen für den Übergang zu einer umweltfreundlichen Wirtschaft und Gesellschaft durch Öko-Innovation")); + assertTrue(csvp.getShortTitle().equals("A green economy and society through eco-innovation")); + assertTrue(csvp.getLanguage().equals("de")); + } + if (count == 34) { + assertTrue(csvp.getCode().equals("H2020-EU.3.2.")); + assertTrue( + csvp + .getTitle() + .equals( + "SOCIETAL CHALLENGES - Food security, sustainable agriculture and forestry, marine, maritime and inland water research, and the bioeconomy")); + assertTrue( + csvp.getShortTitle().equals("Food, agriculture, forestry, marine research and bioeconomy")); + assertTrue(csvp.getLanguage().equals("en")); + } + assertTrue(csvp.getCode() != null); + assertTrue(csvp.getCode().startsWith("H2020")); + count += 1; + } + + assertEquals(769, count); + } + } diff --git a/dhp-workflows/dhp-aggregation/src/test/java/eu/dnetlib/dhp/actionmanager/project/EXCELParserTest.java b/dhp-workflows/dhp-aggregation/src/test/java/eu/dnetlib/dhp/actionmanager/project/EXCELParserTest.java index d27a732ea..d77df4088 100644 --- a/dhp-workflows/dhp-aggregation/src/test/java/eu/dnetlib/dhp/actionmanager/project/EXCELParserTest.java +++ b/dhp-workflows/dhp-aggregation/src/test/java/eu/dnetlib/dhp/actionmanager/project/EXCELParserTest.java @@ -1,6 +1,8 @@ package eu.dnetlib.dhp.actionmanager.project; +import java.io.FileInputStream; +import java.io.FileNotFoundException; import java.io.IOException; import java.nio.file.Files; import java.nio.file.Path; @@ -43,4 +45,21 @@ public class EXCELParserTest { Assertions.assertEquals(3878, pl.size()); } + + @Test + void test2() throws IOException, ClassNotFoundException, InvalidFormatException, IllegalAccessException, + InstantiationException { + ; + + EXCELParser excelParser = new EXCELParser(); + + List pl = excelParser + .parse( + new FileInputStream( + getClass().getResource("/eu/dnetlib/dhp/actionmanager/project/h2020_topic.xlsx").getPath()), + "eu.dnetlib.dhp.actionmanager.project.utils.model.EXCELTopic", + "DATA"); + + Assertions.assertEquals(3905, pl.size()); + } } diff --git a/dhp-workflows/dhp-aggregation/src/test/java/eu/dnetlib/dhp/actionmanager/project/PrepareProjectTest.java b/dhp-workflows/dhp-aggregation/src/test/java/eu/dnetlib/dhp/actionmanager/project/PrepareProjectTest.java index d0c50a054..33653917f 100644 --- a/dhp-workflows/dhp-aggregation/src/test/java/eu/dnetlib/dhp/actionmanager/project/PrepareProjectTest.java +++ b/dhp-workflows/dhp-aggregation/src/test/java/eu/dnetlib/dhp/actionmanager/project/PrepareProjectTest.java @@ -4,12 +4,14 @@ package eu.dnetlib.dhp.actionmanager.project; import java.io.IOException; import java.nio.file.Files; import java.nio.file.Path; +import java.util.ArrayList; +import java.util.List; 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.api.java.function.ForeachFunction; import org.apache.spark.sql.Dataset; import org.apache.spark.sql.Encoders; import org.apache.spark.sql.SparkSession; @@ -20,9 +22,12 @@ import org.junit.jupiter.api.Test; import org.slf4j.Logger; import org.slf4j.LoggerFactory; +import com.fasterxml.jackson.core.JsonProcessingException; +import com.fasterxml.jackson.core.type.TypeReference; import com.fasterxml.jackson.databind.ObjectMapper; import eu.dnetlib.dhp.actionmanager.project.utils.model.CSVProject; +import eu.dnetlib.dhp.actionmanager.project.utils.model.Project; public class PrepareProjectTest { @@ -74,7 +79,7 @@ public class PrepareProjectTest { "-isSparkSessionManaged", Boolean.FALSE.toString(), "-projectPath", - getClass().getResource("/eu/dnetlib/dhp/actionmanager/project/projects_subset.json").getPath(), + getClass().getResource("/eu/dnetlib/dhp/actionmanager/project/projects.json").getPath(), "-outputPath", workingDir.toString() + "/preparedProjects", "-dbProjectPath", @@ -96,4 +101,41 @@ public class PrepareProjectTest { Assertions.assertEquals(0, verificationDataset.filter("length(programme) = 0").count()); } + @Test + void readJsonNotMultiline() throws IOException { + + String projects = IOUtils + .toString( + PrepareProjectTest.class + .getResourceAsStream(("/eu/dnetlib/dhp/actionmanager/project/projects.json"))); + ArrayList a = OBJECT_MAPPER.readValue(projects, new TypeReference>() { + }); + + a.forEach(p -> { + try { + OBJECT_MAPPER.writeValueAsString(p); + } catch (JsonProcessingException e) { + e.printStackTrace(); + } + }); + JavaRDD b = new JavaSparkContext(spark.sparkContext()).parallelize(a); + +// System.out.println("pr"); +// Dataset prova = spark +// .read() +// .textFile(inputPath) +// .map((MapFunction) value -> OBJECT_MAPPER.readValue(value, new TypeReference>() { +// }), Encoders.bean(Project.class)); + +// prova.foreach( +// (ForeachFunction) p -> System.out.println(OBJECT_MAPPER.writeValueAsString(p))); + +// objectMapper.readValue(jsonArray, new TypeReference>() {}) +// Dataset p = readPath(spark, inputPath, Projects.class) +// .flatMap((FlatMapFunction) ps -> ps.getProjects().iterator(), Encoders.bean(Project.class +// )); +//import com.fasterxml.jackson.core.type.TypeReference; +// System.out.println(p.count()); + } + } diff --git a/dhp-workflows/dhp-aggregation/src/test/resources/eu/dnetlib/dhp/actionmanager/project/h2020_programme.csv b/dhp-workflows/dhp-aggregation/src/test/resources/eu/dnetlib/dhp/actionmanager/project/h2020_programme.csv new file mode 100644 index 000000000..812b8ad67 --- /dev/null +++ b/dhp-workflows/dhp-aggregation/src/test/resources/eu/dnetlib/dhp/actionmanager/project/h2020_programme.csv @@ -0,0 +1,770 @@ +"id";"language";"code";"startDate";"endDate";"title";"shortTitle";"objective";"keywords";"frameworkProgramme";"parentProgramme";"legalBasis";"call";"contentUpdateDate";"rcn" +"H2020-EU.3.5.2.";"es";"H2020-EU.3.5.2.";"";"";"Protección del medio ambiente, gestión sostenible de los recursos naturales, el agua, la biodiversidad y los ecosistemas";"Protection of the environment";"

Protección del medio ambiente, gestión sostenible de los recursos naturales, el agua, la biodiversidad y los ecosistemas

El objetivo es aportar conocimientos e instrumentos para una gestión y protección de los recursos naturales que consiga un equilibrio sostenible entre los recursos limitados y las necesidades actuales y futuras de la sociedad y la economía. Las actividades se centrarán en: desarrollar nuestra comprensión de la biodiversidad y del funcionamiento de los ecosistemas, sus interacciones con los sistemas sociales y su función en el mantenimiento de la economía y el bienestar humano; impulsar planteamientos integrados para abordar los retos relacionados con el agua y la transición a hacia una gestión y uso sostenibles de los recursos y servicios hídricos, y aportar conocimientos y herramientas para la toma de decisiones efectiva y el compromiso público.";"";"H2020";"H2020-EU.3.5.";"";"";"2014-09-22 20:48:20";"664399" +"H2020-EU.3.2.";"es";"H2020-EU.3.2.";"";"";"RETOS DE LA SOCIEDAD - Seguridad alimentaria, agricultura y silvicultura sostenibles, investigación marina, marítima y de aguas interiores y bioeconomía";"Food, agriculture, forestry, marine research and bioeconomy";"

RETOS DE LA SOCIEDAD - Seguridad alimentaria, agricultura y silvicultura sostenibles, investigación marina, marítima y de aguas interiores y bioeconomía

Objetivo específico

El objetivo específico es garantizar un abastecimiento suficiente de alimentos seguros, saludables y de calidad superior y otros bioproductos, mediante el desarrollo de sistemas de producción primaria productivos, sostenibles y que utilicen los recursos con eficiencia, el fomento de los correspondientes servicios ecosistémicos y la recuperación de la diversidad biológica, junto con unas cadenas de abastecimiento, transformación y comercialización competitivas y de baja emisión de carbono. Esto acelerará la transición hacia una bioeconomía europea sostenible, reduciendo la brecha entre las nuevas tecnologías y su aplicación.A lo largo de las próximas décadas, Europa deberá enfrentarse a la creciente competencia por unos recursos naturales limitados y finitos, debido a los efectos del cambio climático, en particular en los sistemas de producción primaria (agricultura, incluidas la zootecnia y la horticultura, silvicultura, pesca y acuicultura) y a la necesidad de proporcionar un abastecimiento de alimentos sostenible y seguro a la población europea y a la creciente población mundial. Se considera necesario un aumento del 70 % de la oferta mundial de alimentos para dar de comer a una población mundial de 9 000 millones en 2050. La agricultura representa cerca de un 10 % de las emisiones de gases de efecto invernadero de la Unión y, aunque estén disminuyendo en Europa, se prevé que las emisiones globales debidas a la agricultura aumenten hasta el 20 % de aquí a 2030. Además, Europa necesitará garantizar un abastecimiento suficiente producido de manera sostenible de materias primas, energía y productos industriales, en una situación de disminución de los recursos fósiles (se espera que la producción de petróleo y gas licuado disminuya en torno al 60 % para 2050), manteniendo al mismo tiempo su competitividad. Los biorresiduos (se calcula que suponen hasta 138 millones de toneladas anuales en la Unión, el 40 % de las cuales termina en vertederos) representan un gran problema y un alto coste, pese a su elevado valor añadido potencial.Por ejemplo, se calcula que se desperdicia un 30 % del total de alimentos fabricados en los países desarrollados. Se necesitan grandes cambios para reducir este importe en un 50 % en la Unión de aquí a 2030. Además, las fronteras nacionales no detienen la entrada ni la propagación de las plagas y enfermedades de animales y vegetales, incluidas las enfermedades zoonóticas y los patógenos transmitidos por los alimentos. Cuando hacen falta medidas nacionales de prevención efectivas, la acción a nivel de la Unión resulta esencial para el control final y el funcionamiento eficaz del mercado único. El reto es complejo, afecta a una amplia gama de sectores interrelacionados y exige un planteamiento global y sistémico.Cada vez son necesarios más recursos biológicos para satisfacer la demanda del mercado de un abastecimiento de alimentos seguros y sanos, biomateriales, biocombustibles y bioproductos, que van desde los productos de consumo a los productos químicos a granel. Aunque las capacidades de los ecosistemas terrestres y acuáticos que requiere su producción son limitadas, compiten por su utilización distintas demandas, a menudo no gestionadas de forma óptima, como demuestran por ejemplo la grave degradación del contenido en carbono y la fertilidad del suelo y el agotamiento de las poblaciones de peces. Existen posibilidades infrautilizadas de fomentar los servicios ecosistémicos de las tierras de cultivo, los bosques y las aguas marinas y continentales a través de la integración de los objetivos agronómicos medioambientales y sociales en la producción y el consumo sostenibles.El potencial de los recursos biológicos y los ecosistemas podría utilizarse de manera mucho más sostenible, eficiente e integrada. También podría aprovecharse mejor, por ejemplo, el potencial de la biomasa procedente de la agricultura y los bosques y los flujos de residuos de origen agrario, acuático, industrial y municipal.En esencia, es necesaria una transición hacia un uso óptimo y renovable de los recursos biológicos y hacia unos sistemas de producción primaria y de transformación sostenibles capaces de producir más alimentos, fibras y otros bioproductos con un mínimo de insumos, de impacto ambiental y de emisiones de gases de efecto invernadero, servicios ecosistémicos mejorados, residuos nulos y un valor adecuado para la sociedad. Se trata de establecer sistemas de producción de alimentos que, refuercen, fortalezcan y nutran la base de los recursos, lo que permitiría una generación sostenible de riqueza. Se deben entender y desarrollar mejor las formas usadas para generar, distribuir, comercializar, consumir y regular la producción de alimentos. Un esfuerzo crítico de investigación e innovación interrelacionadas constituye un elemento clave para que esto ocurra, en Europa y fuera de ella, así como un diálogo continuo entre los grupos sociales, políticos, económicos y otros grupos interesados.

Justificación y valor añadido de la Unión

La agricultura, la silvicultura, la pesca y la acuicultura constituyen, junto con las bioindustrias, los sectores principales en los que se asienta la bioeconomía. Esta última representa un mercado considerable y creciente cuyo valor se estimaba en 2009 en más de 2 mil millones de euros, que aportaba 20 millones de puestos de trabajo y suponía el 9 % del empleo total en la Unión. Las inversiones en investigación e innovación encuadradas en este reto de la sociedad permitirán a Europa ser líder en los correspondientes mercados y desempeñarán un papel importante en la consecución de los objetivos de la estrategia Europa 2020 y sus iniciativas emblemáticas ""Unión por la innovación"" y ""Una Europa que utilice eficazmente los recursos"".Una bioeconomía europea plenamente funcional -que incluya la producción sostenible de recursos renovables de la tierra, la pesca y la acuicultura y su conversión en alimentos, bioproductos y bioenergía, así como los bienes públicos correspondientes- generará un alto valor añadido europeo. Paralelamente a las funciones que ejerce en relación con el mercado, la bioeconomía también desempeña una amplia gama de funciones —que deben preservarse— respecto de los bienes públicos y los servicios ecosistémicos: Gestionada de manera sostenible, puede reducir la huella medioambiental de la producción primaria y de la cadena de suministro en su conjunto. Puede aumentar su competitividad, reforzar la autosuficiencia de Europa y crear puestos de trabajo y oportunidades de negocio, algo esencial para el desarrollo rural y costero. Los retos relacionados con la seguridad alimentaria, la agricultura, la producción acuática y la silvicultura sostenibles, y la bioeconomía en general son de carácter europeo y mundial. La adopción de medidas a escala de la Unión es esencial para reunir agrupaciones capaces de conseguir la envergadura y la masa crítica necesarias y complementar los esfuerzos realizados por un Estados miembro o un grupo de Estados miembros. Un planteamiento multilateral permitirá garantizar las necesarias interacciones de fertilización cruzada entre investigadores, empresas, agricultores/productores, asesores y usuarios finales. También es necesario actuar a nivel de la Unión para garantizar la coherencia al abordar este reto en los distintos sectores y unos estrechos vínculos con las políticas pertinentes de la Unión. La coordinación de la investigación e innovación a nivel de la Unión estimulará y contribuirá a acelerar los cambios necesarios en toda la Unión.La investigación y la innovación se vincularán a un amplio espectro de políticas de la Unión y sus correspondientes objetivos, incluidas la Política Agrícola Común (en particular la política de desarrollo rural, las Iniciativas de Programación Conjunta, en especial las iniciativas ""Agricultura, seguridad alimentaria y cambio climático"", ""Una dieta sana para una vida sana"" y ""Mares y océanos saludables y productivos"") y la Cooperación de Innovación Europea ""Productividad y sostenibilidad agrícolas"" y la Cooperación de Innovación Europea sobre el agua, la Política Pesquera Común, la Política Marítima Integrada, el Programa Europeo sobre el Cambio Climático, la Directiva marco sobre el agua, la Directiva marco sobre estrategia marina, el Plan de acción sobre silvicultura, la Estrategia temática en materia de suelos, la estrategia UE 2020 sobre biodiversidad, el Plan Estratégico de Tecnología Energética, las políticas de innovación e industrial de la Unión, las políticas exterior y de ayuda al desarrollo, las estrategias fitosanitarias, las estrategias de salud y bienestar animal y los marcos reguladores de protección del medio ambiente, la salud y la seguridad, de promoción de la eficiencia de los recursos y la acción por el clima, y de reducción de residuos, y respaldarán su elaboración. Una mejor integración en las políticas afines de la Unión del ciclo completo que va de la investigación fundamental a la innovación mejorará considerablemente su valor añadido europeo, tendrá efectos multiplicadores, aumentará la pertinencia social, ofrecerá alimentos sanos y contribuirá a mejorar aún más la gestión sostenible de tierras, mares y océanos y los mercados de la bioeconomía.Con el fin de apoyar las políticas de la Unión relacionadas con la bioeconomía y facilitar la gobernanza y el seguimiento de la investigación y la innovación, se llevarán a cabo actividades de investigación socioeconómica y prospectiva en relación con la estrategia de bioeconomía, incluyendo el desarrollo de indicadores, bases de datos, modelos, prospectiva y previsión y evaluación del impacto de las iniciativas en la economía, la sociedad y el medio ambiente.Las acciones impulsadas por los retos y centradas en los beneficios económicos, sociales y medioambientales y la modernización de los sectores y mercados relacionados con la bioeconomía se financiarán a través de una investigación multidisciplinaria, que empuje la innovación y conduzca al desarrollo de nuevas estrategias, prácticas, productos sostenibles y procesos. Se aplicará asimismo un enfoque amplio con respecto a la innovación, que vaya desde la tecnológica, no tecnológica, organizativa, económica y social, hasta, por ejemplo, nuevos modos de transferencia de tecnologías, nuevos modelos de negocio, creación de marcas y servicios. Deberá reconocerse el potencial de los agricultores y las PYME para contribuir a la innovación. El planteamiento relativo a la bioeconomía deberá tener en cuenta la importancia del conocimiento y la diversidad locales.

Líneas generales de las actividades

(a) Agricultura y silvicultura sostenibles

El objetivo es suministrar suficientes alimentos, piensos, biomasa y otras materias primas, al tiempo que se salvaguardan la base de los recursos naturales como el agua y el suelo y la biodiversidad, con una perspectiva europea y mundial, y se mejoran los servicios ecosistémicos, incluida la adaptación al cambio climático y su mitigación. Las actividades se centrarán en aumentar la calidad y el valor de los productos agrícolas proporcionando una agricultura más sostenible y productiva, incluida la zootecnia y los sistemas agroforestales eficientes en la utilización de recursos (incluida una agricultura baja en carbono y en insumos externos y ecológica). Además, las actividades se centrarán en el desarrollo de servicios, conceptos y políticas para una vida rural próspera y en el fomento del consumo sostenible.En particular en lo que se refiere a la silvicultura, el objetivo es producir bioproductos, servicios ecosistémicos y suficiente biomasa, respetando debidamente los aspectos económicos, ecológicos y sociales de ese sector. Las actividades se centrarán en un mayor desarrollo de la producción y la sostenibilidad de sistemas forestales que utilicen los recursos con eficiencia y sirvan para reforzar la resiliencia forestal y la protección de la biodiversidad y que puedan hacer frente a un aumento de la demanda de biomasa.Se estudiará también la interacción de las plantas funcionales con la salud y el bienestar, así como la explotación de la horticultura y la silvicultura para el desarrollo de la ecologización urbana.

(b) Sector agroalimentario competitivo y sostenible para una dieta sana y segura

El objetivo es responder a la necesidad de que los ciudadanos dispongan de alimentos seguros, sanos y asequibles, y de respeto del medio ambiente, de que la transformación, distribución y consumo de alimentos y piensos sea más sostenible y de que el sector alimentario sea más competitivo, teniendo en cuenta asimismo el componente cultural de la calidad de los alimentos. Las actividades se centrarán en los alimentos sanos y seguros para todos, la información al consumidor, las soluciones dietéticas y las innovaciones para mejorar la salud y los métodos competitivos de transformación de alimentos que utilizan menos recursos y aditivos y producen menos subproductos, residuos y gases de efecto invernadero.

(c) Desbloquear el potencial de los recursos acuáticos vivos

El objetivo es gestionar, explotar de forma sostenible y mantener los recursos acuáticos vivos para maximizar los beneficios y la rentabilidad sociales y económicos de los océanos, mares y aguas continentales europeos, al tiempo que se protege la biodiversidad. Las actividades se centrarán en una contribución óptima al abastecimiento seguro de alimentos desarrollando una pesca sostenible y respetuosa del medio ambiente, una gestión sostenible de los ecosistemas que faciliten bienes y servicios, una acuicultura europea competitiva a la vez que respetuosa del medio ambiente en el contexto de la economía mundial, así como en el fomento de la innovación marina y marítima mediante la biotecnología para propulsar un crecimiento ""azul"" inteligente.

(d) Bioindustrias sostenibles y competitivas y favorables al desarrollo de una bioeconomía europea

El objetivo es la promoción de unas bioindustrias europeas sostenibles y competitivas, de baja emisión de carbono y que utilicen eficazmente los recursos. Las actividades se centrarán en el fomento de la bioeconomía basada en el conocimiento, transformando los procesos y productos industriales convencionales en otros que sean eficientes desde el punto de vista de los recursos y la energía, el desarrollo de biorrefinerías integradas de segunda generación o de generaciones subsiguientes, la optimización del uso de la biomasa procedente de la producción primaria, los biorresiduos y los subproductos de la bioindustria, y la apertura de nuevos mercados a través del apoyo a los sistemas de normalización y certificación, las actividades de reglamentación, demostración/ensayos de campo y otras, al tiempo que se tienen en cuenta las consecuencias de la bioeconomía sobre el uso de los terrenos y su modificación, así como los puntos de vista e inquietudes de la sociedad civil.

(e) Investigación transversal marina y marítima

El objetivo consiste en aumentar el impacto de de los mares y aguas continentales de la Unión sobre la sociedad y el crecimiento económico mediante la explotación sostenible de los recursos marinos así como la utilización de las diversas fuentes de energía marina y la amplia gama de diferentes usos que se hacen de los mares.Las actividades se centrarán en los conocimientos transversales científicos y tecnológicos marinos y marítimos con la intención de liberar el potencial de los mares y las aguas continentales a través de una gama de industrias marinas y marítimas, protegiendo al mismo tiempo el medio ambiente y adaptándose al cambio climático. Este planteamiento coordinado estratégico de la investigación marina y marítima en todos los retos y pilares de Horizonte 2020 apoyará asimismo la aplicación de las políticas pertinentes de la Unión para contribuir al logro de los objetivos clave de crecimiento azul.";"";"H2020";"H2020-EU.3.";"";"";"2014-09-22 20:44:33";"664281" +"H2020-EU.3.1.";"de";"H2020-EU.3.1.";"";"";"GESELLSCHAFTLICHE HERAUSFORDERUNGEN - Gesundheit, demografischer Wandel und Wohlergehen";"Health";"

GESELLSCHAFTLICHE HERAUSFORDERUNGEN - Gesundheit, demografischer Wandel und Wohlergehen

Einzelziel

Das Einzelziel besteht in der Verbesserung der lebenslangen Gesundheit und des lebenslangen Wohlergehens aller.Lebenslange Gesundheit und lebenslanges Wohlergehen für alle – Kinder, Erwachsene und ältere Menschen –, qualitativ hochwertige, wirtschaftlich tragfähige und innovative Gesundheits- und Pflegesysteme, als Teil der Sozialsysteme, sowie Möglichkeiten für neue Arbeitsplätze und Wachstum sind die Ziele, die mit der Förderung von Forschung und Innovation angestrebt werden und die einen wichtigen Beitrag zur Strategie Europa 2020 leisten.Die Kosten der Gesundheitsfürsorge- und Sozialpflegesysteme der Union steigen weiter an, die Versorgung und Prävention für alle Altersstufen wird immer teurer. Die Zahl der Europäer über 65 Jahre dürfte sich von 85 Millionen 2008 auf 151 Millionen 2060 nahezu verdoppeln und es wird erwartet, dass im gleichen Zeitraum die Zahl der über 80-Jährigen von 22 auf 61 Millionen steigen wird. Damit diese Kosten noch tragfähig bleiben, müssen sie reduziert bzw. eingedämmt werden, was zum Teil von Verbesserungen in Bezug auf lebenslange Gesundheit und lebenslanges Wohlergehen aller und damit von einer wirksamen Prävention und Behandlung und effektivem Management von Krankheit und Invalidität abhängt.Chronische Gebrechen und Krankheiten sind die Hauptursachen u. a. für Invalidität, schlechte Gesundheit, gesundheitsbedingte Verrentung sowie vorzeitige Todesfälle und verursachen erhebliche Kosten für Gesellschaft und Wirtschaft.In der Union sterben jährlich über 2 Millionen Menschen an Herz-Kreislauf-Erkrankungen, wodurch der Wirtschaft Kosten in Höhe von über 192 Mrd. EUR entstehen, während Krebs für ein Viertel aller Todesfälle verantwortlich ist und bei den Todesursachen der 45-64-Jährigen an erster Stelle steht. Über 27 Millionen Menschen in der Union leiden an Diabetes und über 120 Millionen an rheumatischen Erkrankungen und Muskel- und Skelettstörungen. Seltene Krankheiten, von denen europaweit etwa 30 Millionen Menschen betroffen sind, bleiben eine große Herausforderung. Die Gesamtkosten für Hirndysfunktionen (auch Beeinträchtigungen der mentalen Gesundheit, einschließlich Depression) werden auf 800 Mrd. EUR geschätzt. Laut Schätzungen leiden allein an mentalen Dysfunktionen 165 Millionen Menschen in der EU, was Kosten in Höhe von 118 Mrd. EUR verursacht. Diese Zahlen werden voraussichtlich weiterhin beträchtlich steigen – vorwiegend aufgrund der alternden Bevölkerung in Europa und dem damit verbundenen Anstieg an neurodegenerativen Erkrankungen. Die Faktoren Umwelt, Berufstätigkeit und Lebensstil sowie sozioökonomische Faktoren spielen bei mehreren dieser Erkrankungen eine Rolle; ein Drittel der weltweit anfallenden medizinischen Kosten wird auf diese Faktoren zurückgeführt.Infektionskrankheiten (z.B. HIV/AIDS, Tuberkulose und Malaria) sind ein globales Problem; auf sie entfallen weltweit 41% der 1,5 Mrd. verlorenen Lebensjahre, davon 8% auf Europa. Ferner sind armutsbedingte und vernachlässigte Krankheiten Gegenstand weltweiter Besorgnis. Auch gilt es, sich auf neue Epidemien, wieder auftretende Infektionskrankheiten (einschließlich Krankheiten im Zusammenhang mit Wasser) und die Gefahr einer zunehmenden antimikrobiellen Resistenz vorzubereiten. Auch ist die zunehmende Gefahr, dass Krankheiten vom Tier auf den Menschen überspringen, zu bedenken.Zwischenzeitlich nehmen die Kosten der Entwicklung von Arzneimitteln und Impfstoffen bei abnehmender Wirkung zu. Die Bemühungen zur Steigerung der Erfolge bei der Entwicklung von Arzneimitteln und Impfstoffen umfassen alternative Methoden zur Ersetzung der klassischen Unbedenklichkeits- und Wirksamkeitsprüfungen. Es gilt, anhaltende gesundheitliche Ungleichgewichte abzubauen und die Bedürfnisse spezifischer Bevölkerungsgruppen (z. B. Menschen, die an seltenen Krankheiten leiden) zu berücksichtigen und den Zugang zu wirksamen und kompetenten Gesundheits- und Pflegesystemen für alle Europäer unabhängig von ihrem Alter oder ihrem Hintergrund zu gewährleisten.Auch andere Faktoren wie Ernährung, körperliche Betätigung, Wohlstand, Inklusion, Engagement, Sozialkapital und Arbeit wirken sich auf Gesundheit und Wohlergehen aus; daher ist ein ganzheitlicher Ansatz erforderlich.Aufgrund der gestiegenen Lebenserwartung wird sich die Alters- und Bevölkerungsstruktur in Europa verändern. Daher ist eine Forschung, die der lebenslangen Gesundheit, dem aktiven Altern und dem Wohlergehen aller förderlich ist, ein Eckpfeiler einer erfolgreichen Anpassung der Gesellschaft an den demografischen Wandel.

Begründung und Mehrwert für die Union

Krankheit und Invalidität machen an den nationalen Grenzen nicht Halt. Angemessene Forschungs-, Entwicklungs- und Innovationsanstrengungen auf europäischer Ebene in Zusammenarbeit mit Drittländern und unter Einbindung aller Akteure, einschließlich Patienten und Endnutzer, können und sollten einen entscheidenden Beitrag zur Bewältigung dieser globalen Herausforderungen leisten und somit auf die Erreichung der Millenniums-Entwicklungsziele der Vereinten Nationen hinwirken, die Gesundheitsfürsorge und das Wohlergehen für alle verbessern und Europa eine Führungsposition auf den rasant expandierenden Weltmärkten für Innovationen in den Bereichen Gesundheit und Wohlergehen verschaffen.Hierfür bedarf es der Exzellenz in der Forschung, um unser grundlegendes Verständnis der determinierenden Faktoren für Gesundheit, Krankheit, Invalidität, gesundheitsverträgliche Beschäftigungsbedingungen, Entwicklung und Alterung (einschließlich Lebenserwartung) zu verbessern, sowie der nahtlosen und breit gestreuten Umsetzung der neuen und bereits vorhandenen Kenntnisse in innovative, skalierbare, wirksame, zugängliche und sichere Produkte, Strategien, Maßnahmen und Dienstleistungen. Ferner erfordert die Relevanz dieser Herausforderungen für Europa und vielfach weltweit eine Antwort, die sich durch eine langfristige und koordinierte Unterstützung der Zusammenarbeit zwischen hervorragenden, multidisziplinären und sektorübergreifenden Teams auszeichnet. Die Herausforderung muss auch in sozial-, wirtschafts- und humanwissenschaftlicher Hinsicht gemeistert werden.Genauso machen die Komplexität der Herausforderung und die Interdependenz ihrer Faktoren eine Antwort auf europäischer Ebene notwendig. Viele Konzepte, Instrumente und Technologien lassen sich auf zahlreiche Forschungs- und Innovationsbereiche dieser Herausforderung anwenden und werden am besten auf Unionsebene unterstützt. Hierunter fallen das Verständnis der molekularen Basis von Krankheiten, die Identifizierung innovativer therapeutischer Strategien und neuartiger Modellsysteme, die multidisziplinäre Anwendung von Erkenntnissen aus der Physik, Chemie und Systembiologie, der Aufbau langfristiger Kohorten und klinische Studien (u. a. mit Schwerpunkt auf der Entwicklung und den Auswirkungen von Medikamenten für alle Altersgruppen), der klinische Einsatz von ""-omik""-Technologien, biomedizinische Systeme und die Entwicklung von IKT und deren Anwendung vor allem für elektronische Gesundheitsdienste in der Gesundheitsfürsorge. Auch die Bedürfnisse bestimmter Bevölkerungsgruppen lassen sich am besten auf integrierte Art und Weise angehen, etwa bei der Entwicklung stratifizierter bzw. personalisierter Arzneimittel, bei der Behandlung seltener Krankheiten und bei der Bereitstellung von Assistenzsystemen für unabhängige Lebensführung.Um die Wirkung von Maßnahmen auf Unionsebene zu optimieren, gilt es, die gesamte Bandbreite der Forschungs-, Entwicklungs- und Innovationstätigkeiten zu unterstützen, von der Grundlagenforschung über die Umsetzung von Wissen über Krankheiten in neue Therapien, bis hin zu Großversuchen, Pilotvorhaben und Demonstrationsmaßnahmen, durch die Mobilisierung von Privatkapital, die öffentliche und vorkommerzielle Auftragsvergabe für neue Produkte und Dienstleistungen und skalierbare Lösungen, die gegebenenfalls interoperabel sind und von festgelegten Normen bzw. gemeinsamen Leitlinien untermauert werden. Diese koordinierte europäische Anstrengung wird die wissenschaftlichen Möglichkeiten in der Gesundheitsforschung erhöhen und den weiteren Aufbau des Europäischen Forschungsraums unterstützen. Sie bildet gegebenenfalls auch Schnittstellen mit Tätigkeiten, die im Zusammenhang mit dem Programm Gesundheit für Wachstum, den Initiativen für die gemeinsame Planung, wie unter anderem ""neurodegenerative Erkrankungen"", ""Gesunde Ernährung für ein gesundes Leben"", ""Antibiotikaresistenz"" und ""Länger und besser leben"" sowie der europäischen Innovationspartnerschaft für Aktivität und Gesundheit im Alter entwickelt werden.Das Wissenschaftliche Gremium für Gesundheitsfragen wird als wissenschaftsgestützte Plattform interessierter Kreise wissenschaftliche Beiträge in Bezug auf diese gesellschaftliche Herausforderung ausarbeiten. Es wird eine kohärente wissenschaftliche zielgerichtete Analyse der Forschungs- und Innovationsengpässe und Chancen in Verbindung mit dieser gesellschaftlichen Herausforderung bieten, zur Bestimmung der diesbezüglichen Forschungs- und Innovationsschwerpunkte beitragen und die Unionsweite wissenschaftliche Teilnahme daran fördern. Es wird durch eine aktive Kooperation mit den interessierten Kreisen zum Aufbau von Fähigkeiten und zur Förderung von Wissensaustausch und einer stärkeren Zusammenarbeit in diesem Bereich in der gesamten Union beitragen.

Einzelziele und Tätigkeiten in Grundzügen

Eine wirksame – durch eine belastbare Evidenzbasis unterstützte – Gesundheitsfürsorge verhindert Krankheiten, trägt zum Wohlergehen bei und ist kosteneffizient. Gesundheitsfürsorge, aktives Altern, Wohlergehen und Krankheitsprävention hängen auch vom Verständnis der gesundheitsbestimmenden Faktoren, von wirksamen Instrumenten für die Prävention, von einer effektiven medizinischen Erfassung und Vorsorge sowie von wirksamen Screeningprogrammen ab. Eine wirksame Gesundheitsfürsorge wird auch durch die Bereitstellung besserer Informationen für die Bürger zur Förderung verantwortungsbewusster gesundheitsbezogener Entscheidungen erleichtert.Erfolgreiche Bemühungen zwecks Verhütung, Früherkennung, Management, Behandlung und Heilung von Krankheiten, Invalidität, Gebrechlichkeit und verminderter Funktionalität stützen sich auf grundlegende Kenntnisse ihrer bestimmenden Faktoren und Ursachen, der Prozesse und Auswirkungen sowie der Faktoren, die einer guten Gesundheit und dem Wohlergehen zugrunde liegen. Ein besseres Verständnis von Krankheit und Gesundheit erfordert eine enge Verzahnung zwischen Grundlagenforschung sowie klinischer, epidemiologischer und sozioökonomischer Forschung. Die wirksame Weitergabe von Daten, die standardisierte Datenverarbeitung und die Verknüpfung dieser Daten mit groß angelegten Kohortenstudien ist genauso wichtig wie die Umsetzung der Forschungsergebnisse in klinische Anwendungen, vor allem durch klinische Studien, in denen alle Altersgruppen berücksichtigt werden sollten, um sicherzustellen, dass Medikamente an ihren Anwendungsbereich angepasst sind.Das Wiederauftreten alter Infektionskrankheiten einschließlich Tuberkulose und die wachsende Verbreitung von durch Impfungen verhütbaren Krankheiten machen weiterhin deutlich, dass ein umfassender Ansatz in Bezug auf armutsbedingte und vernachlässigte Krankheiten erforderlich ist. Gleichermaßen verlangt das zunehmende Problem der antimikrobiellen Resistenz einen ähnlich umfassenden Ansatz.Eine personalisierte Medizin muss darauf abzielen, präventive und therapeutische Strategien zu entwickeln, die an die Anforderungen der Patienten angepasst werden; diese Medizin muss durch die Früherkennung von Krankheiten unterstützt werden. Die Anpassung des Gesundheits- und Pflegesektors an den zunehmenden Bedarf aufgrund der Bevölkerungsalterung stellt eine gesellschaftliche Herausforderung dar. Wenn für jedes Alter effektive Gesundheits- und Pflegedienste aufrechterhalten werden sollen, sind Anstrengungen notwendig, um die Entscheidungsfindung in der Prävention und Behandlung zu verbessern, bewährte Verfahren im Gesundheits- und Pflegesektor zu ermitteln und weiterzugeben und die integrierte Pflege zu unterstützen. Ein besseres Verständnis der Alterungsprozesse und die Prävention altersbedingter Krankheiten bilden die Grundlage dafür, dass Europas Bürger ihr ganzes Leben lang gesund und aktiv bleiben können. Von ähnlicher Bedeutung ist die breite Einführung technologischer, organisatorischer und gesellschaftlicher Innovationen, die es insbesondere älteren Menschen, Menschen mit chronischen Krankheiten und behinderten Menschen ermöglichen, aktiv und unabhängig zu bleiben. Dies wird dazu beitragen, ihr physisches, soziales und mentales Wohlergehen zu verbessern und zu verlängern.All diese Tätigkeiten sind so durchzuführen, dass über den gesamten Forschungs- und Innovationszyklus hinweg Unterstützung gewährt wird, wodurch die Wettbewerbsfähigkeit der in der Union ansässigen Unternehmen und die Entwicklung neuer Marktchancen gestärkt werden. Besonderes Augenmerk ist auch auf die Einbindung sämtlicher Interessenträger im Gesundheitswesen – darunter auch Patienten und Patientenorganisationen und Anbieter von Gesundheits- und Fürsorgediensten – in die Entwicklung einer Forschungs- und Innovationsagenda zu legen, an der die Bürger aktiv beteiligt sind und die ihre Anforderungen und Erwartungen widerspiegelt.Im Einzelnen geht es u. a. um folgende Tätigkeiten: Erforschung der gesundheitsbestimmenden Faktoren (einschließlich Ernährung, körperliche Betätigung, geschlechterbezogene, umweltbezogene, sozioökonomische, beschäftigungsbezogene und klimabezogene Faktoren), Verbesserung der Gesundheitsfürsorge und Krankheitsprävention; Erforschung von Krankheiten und Verbesserung von Diagnose und Prognose; Entwicklung wirksamer Präventions- und Screeningprogramme und Verbesserung der Einschätzung der Krankheitsanfälligkeit; Verbesserung der Erfassung von Infektionskrankheiten und Vorsorge zur Bekämpfung von Epidemien und neu auftretenden Krankheiten; Entwicklung neuer und besserer präventiver und therapeutischer Impfstoffe und Medikamente; Nutzung von In-Silico-Arzneimitteln zur Verbesserung des Krankheitsmanagements und der Prognose; Weiterentwicklung von regenerativer Medizin und angepasster Behandlungen und der Behandlung von Krankheiten, einschließlich Palliativmedizin; Übertragung von Wissen in die klinische Praxis und skalierbare Innovationsmaßnahmen; Verbesserung der Gesundheitsinformation und bessere Erhebung und Nutzung von Gesundheits-, Kohorten- und Verwaltungsdaten; standardisierte Techniken zur Datenanalyse; aktives Altern und unabhängige Lebensführung mit Hilfe von Assistenzsystemen; individuelle Lernprozesse und Vermittlung der Fähigkeit, die eigene Gesundheit selbst in die Hand zu nehmen; Förderung der integrierten Pflege, einschließlich der psychosozialen Aspekte; Verbesserung der wissenschaftlichen Instrumente und Verfahren zur Unterstützung der politischen Entscheidungsfindung und des Regulierungsbedarfs; Optimierung der Effizienz und Wirksamkeit der Gesundheitsfürsorge und Verringerung von gesundheitlichen Ungleichheiten durch evidenzbasierte Entscheidungen und Verbreitung bewährter Verfahren sowie durch innovativer Technologien und Konzepte. Eine aktive Einbeziehung von Anbietern von Gesundheitsdiensten sollte gefördert werden, um eine schnelle Übernahme und die Umsetzung der Ergebnisse sicherzustellen.";"";"H2020";"H2020-EU.3.";"";"";"2014-09-22 20:43:12";"664237" +"H2020-EU.3.2.";"de";"H2020-EU.3.2.";"";"";"GESELLSCHAFTLICHE HERAUSFORDERUNGEN - Ernährungs- und Lebensmittelsicherheit, nachhaltige Land- und Forstwirtschaft, marine, maritime und limnologische Forschung und Biowirtschaft";"Food, agriculture, forestry, marine research and bioeconomy";"

GESELLSCHAFTLICHE HERAUSFORDERUNGEN - Ernährungs- und Lebensmittelsicherheit, nachhaltige Land- und Forstwirtschaft, marine, maritime und limnologische Forschung und Biowirtschaft

Einzelziel

Das Einzelziel ist eine ausreichende Versorgung mit sicheren, gesunden und qualitativ hochwertigen Lebensmitteln und anderen biobasierten Produkten durch den Aufbau produktiver, nachhaltiger und ressourcenschonender Primärproduktionssysteme, die Unterstützung der dazugehörigen Ökosystem-Leistungen und die Wiederbelebung der biologischen Vielfalt sowie wettbewerbsfähige Liefer-, Verarbeitungs- und Vermarktungsketten mit niedrigem CO2-Ausstoß. Dies wird den Übergang zu einer nachhaltigen Biowirtschaft in Europa beschleunigen und die Lücke zwischen den neuen Technologien und ihrer Umsetzung schließen.In den nächsten Jahrzehnten wird Europa einem verschärften Wettbewerb um begrenzte und endliche natürliche Ressourcen ausgesetzt sein, mit den Folgen des Klimawandels konfrontiert werden, der sich vor allem auf die Primärproduktionssysteme (Landwirtschaft – einschließlich Tierzucht und Gartenbau –, Forstwirtschaft, Fischerei und Aquakultur) auswirkt, und vor der Herausforderung stehen, angesichts einer in Europa und weltweit wachsenden Bevölkerung die Versorgung mit sicheren und nachhaltigen Lebensmitteln zu gewährleisten. Schätzungen gehen davon aus, dass die weltweite Versorgung mit Lebensmitteln um 70 % gesteigert werden muss, um die bis 2050 auf 9 Milliarden Menschen wachsende Weltbevölkerung ernähren zu können. 10 % der Treibhausgasemissionen der Union entfallen auf die Landwirtschaft, deren Treibhausgasemissionen in Europa zwar zurückgehen, doch weltweit auf bis zu voraussichtlich 20 % im Jahr 2030 ansteigen werden. Ferner muss Europa bei abnehmenden Beständen an fossilen Brennstoffen (die Produktion von Öl und Flüssiggas wird bis 2050 um voraussichtlich 60[nbsp% zurückgehen) eine ausreichende und nachhaltige Versorgung mit Rohstoffen, Energie und Industrieprodukten sicherstellen und gleichzeitig seine Wettbewerbsfähigkeit aufrechterhalten. Der Bioabfall (geschätzt auf bis zu 138 Millionen Tonnen pro Jahr in der EU, wovon bis zu 40 % auf Deponien entsorgt werden) verursacht trotz seines potenziell hohen Mehrwerts gewaltige Probleme und KostenSo werden schätzungsweise 30 % aller in den entwickelten Ländern erzeugten Lebensmittel weggeworfen. Die Halbierung dieses Anteils in der Union bis 2030 erfordert tiefgreifende Veränderungen. Ferner macht die Einschleppung und Verbreitung von Tier- und Pflanzenseuchen und -krankheiten – auch von Zoonosen – und mit Lebensmitteln übertragenen Erregern an nationalen Grenzen nicht Halt. Neben wirksamen nationalen Präventivmaßnahmen sind für die optimale Kontrolle und für ein wirksames Funktionieren des Binnenmarkts auch Maßnahmen auf Unionsebene notwendig. Die Herausforderung ist komplex, wirkt sich auf eine große Bandbreite miteinander verflochtener Sektoren aus und erfordert ein ganzheitliches und systembezogenes Vorgehen.Der Bedarf an biologischen Ressourcen steigt ständig, um die Nachfrage nach sicheren und gesunden Lebensmitteln, nach Biowerkstoffen, Biobrennstoffen und biobasierten Produkten – von Verbraucherprodukten bis zu chemischen Grundprodukten – zu befriedigen. Die für ihre Erzeugung benötigten Kapazitäten terrestrischer und aquatischer Ökosysteme, an deren Nutzung zudem konkurrierende Ansprüche gestellt werden, sind jedoch begrenzt und häufig nicht optimal bewirtschaftet, was sich beispielsweise am starken Rückgang des Kohlenstoffgehalts und der Fruchtbarkeit der Böden und an der Dezimierung der Fischbestände erkennen lässt. Der Spielraum für größere Ökosystemleistungen von landwirtschaftlichen Flächen, Wäldern, Meer- und Süßwasser ist noch zu wenig ausgeschöpft;hier gilt es, agronomische, ökologische und soziale Ziele in die nachhaltige Produktion und den nachhaltigen Verbrauch einzubeziehen. Das Potenzial biologischer Ressourcen und Ökosysteme könnte sehr viel nachhaltiger, effizienter und integrierter genutzt werden.Beispielsweise könnte das Potenzial der Biomasse aus Landwirtschaft, Wäldern und den Abfallströmen landwirtschaftlichen, aquatischen, industriellen und auch kommunalen Ursprungs besser ausgeschöpft werden. Im Kern geht es um den Übergang zu einer optimalen Verwendung und Erneuerbarkeit biologischer Ressourcen sowie zu nachhaltigen Primärproduktions- und Verarbeitungssystemen, mit denen mehr Lebensmittel, Fasern und andere biobasierte Produkte produziert werden können, deren Input, Umweltauswirkung und Treibhausgasemissionen niedrig sind und die bessere Ökosystemleistungen, ohne Abfall und mit angemessenem gesellschaftlichem Wert erbringen. Ziel ist die Einrichtung von Nahrungsmittelerzeugungssystemen, die die natürlichen Ressourcen, von denen sie abhängen, im Hinblick auf einen nachhaltigen Wohlstand aufrechterhalten. Unsere Art, Lebensmittel zu erzeugen, zu vermarkten, zu konsumieren und zu regulieren, muss besser verstanden und weiterentwickelt werden. Damit dies in Europa und darüber hinaus Realität wird, kommt es auf kritische gemeinsame Forschungs- und Innovationsanstrengungen sowie auf einen permanenten Dialog zwischen den politischen, gesellschaftlichen, wirtschaftlichen und sonstigen Gruppen von Akteuren an.

Begründung und Mehrwert für die Union

Landwirtschaft, Forstwirtschaft, Fischerei und Aquakultur bilden zusammen mit den biobasierten Industriezweigen die Sektoren, die die Biowirtschaft stützen. Die Biowirtschaft stellt einen großen und wachsenden Markt mit einem Wert von schätzungsweise über 2 Billionen EUR dar, der 20 Millionen Arbeitsplätze bietet und auf den im Jahr 2009 9 % der Gesamtbeschäftigung in der Union entfallen sind. Investitionen in Forschung und Innovation im Rahmen dieser gesellschaftlichen Herausforderung werden Europa in die Lage versetzen, eine führende Rolle auf den betreffenden Märkten einzunehmen, und zur Erreichung der Ziele der Strategie Europa 2020 sowie ihrer Leitinitiativen ""Innovationsunion"" und ""Ressourcenschonendes Europa"" beitragen.Eine uneingeschränkt funktionsfähige europäische Biowirtschaft, die sich von der nachhaltigen Produktion erneuerbarer Ressourcen terrestrischen Ursprungs oder mit Ursprung in Fischerei und Aquakultur über ihre Verarbeitung zu Lebensmitteln, Futtermitteln, Fasern, biobasierten Produkten und Bioenergie bis hin zu damit zusammenhängenden öffentlichen Gütern erstreckt, wird einen hohen Mehrwert für die Union hervorbringen. Parallel zu den marktbezogenen Funktionen fördert die Biowirtschaft außerdem zahlreiche Funktionen hinsichtlich öffentlicher Güter, biologische Vielfalt und Ökosystemdienste. Mit einer nachhaltigen Bewirtschaftung lässt sich die ökologische Bilanz der Primärproduktion und der Versorgungskette insgesamt verbessern. Sie kann deren Wettbewerbsfähigkeit erhöhen, die Eigenständigkeit Europas stärken, Arbeitsplätze schaffen und Geschäftsmöglichkeiten eröffnen, die für die ländliche und küstennahe Entwicklung von wesentlicher Bedeutung sind. Die sich aus der Nahrungs- und Lebensmittelsicherheit, einer nachhaltigen Landwirtschaft und Tierhaltung, der aquatischen Produktion, der Forstwirtschaft und insgesamt aus der Biowirtschaft ergebenden Herausforderungen stellen sich in Europa und weltweit. Um die notwendigen Cluster zu bilden, sind Maßnahmen auf Unionsebene notwendig, damit die erforderliche Bandbreite und kritische Masse erreicht wird, mit der die Bemühungen einzelner Mitgliedstaaten oder einer Gruppe von Mitgliedstaaten ergänzt werden können. Durch die Einbeziehung unterschiedlichster Akteure werden die notwendigen, gegenseitig bereichernden Wechselwirkungen zwischen Forschern, Unternehmen, Landwirten bzw. Produzenten, Beratern und Endnutzern sichergestellt. Die Unionsebene wird auch benötigt, um eine kohärente und sektorübergreifende Herangehensweise an diese Herausforderung und eine enge Verknüpfung mit der einschlägigen Unionspolitik sicherzustellen. Die Koordinierung von Forschung und Innovation auf Unionsebene gibt Anstöße für die notwendigen Veränderungen in der Union und beschleunigt diese.Forschung und Innovation bilden Schnittstellen mit einem breiten Spektrum von Unionsstrategien und -zielen und unterstützen deren Konzipierung und Festlegung; hierzu zählt die Gemeinsame Agrarpolitik (insbesondere die Politik für die Entwicklung des ländlichen Raums, die Initiativen für die gemeinsame Planung, unter anderem ""Landwirtschaft, Ernährungssicherheit und Klimawandel"", ""Gesunde Ernährung für ein gesundes Leben"" und ""Intakte und fruchtbare Meere und Ozeane""), die europäische Innovationspartnerschaft ""Produktivität und Nachhaltigkeit in der Landwirtschaft"" und die Europäische Innovationspartnerschaft für Wasser, die Gemeinsame Fischereipolitik, die Integrierte Meerespolitik, das Europäische Programm zur Klimaänderung, die Wasserrahmenrichtlinie, die Meeresstrategie-Richtlinie, der EU-Forstaktionsplan, die Bodenschutzstrategie, die Unionsstrategie für die biologische Vielfalt (2020), der Strategieplan für Energietechnologie, die Innovations- und Industriepolitik der Union, die Außen- und Entwicklungspolitik der Union, die Strategien für die Pflanzengesundheit sowie für die Gesundheit und das Wohlergehen von Tieren, der Rechtsrahmen für Umweltschutz, Gesundheit und Sicherheit sowie zur Förderung der Ressourceneffizienz und des Klimaschutzes und zur Verringerung von Abfall. Eine stärkere Einbeziehung des gesamten Kreislaufs von der Grundlagenforschung hin zur Innovation in einschlägige Unionsstrategien wird deren Mehrwert für die Union deutlich erhöhen, Hebeleffekte bewirken, die gesellschaftliche Relevanz vergrößern, gesunde Lebensmittel liefern und dazu beitragen, die nachhaltige Bewirtschaftung von Boden, Meeren und der offenen See weiter zu verbessern und die Märkte der Bioökonomie weiterzuentwickeln.Zur Unterstützung der Unionspolitik im Zusammenhang mit der Biowirtschaft und zur Erleichterung der Steuerung und Begleitung von Forschung und Innovation werden sozioökonomische Forschungsarbeiten und zukunftsgerichtete Tätigkeiten im Hinblick auf die Strategie für die Biowirtschaft durchgeführt, einschließlich der Entwicklung von Indikatoren, Datenbanken, Modellen, Prognosen und Abschätzung der Folgen von Initiativen für Wirtschaft, Gesellschaft und Umwelt.Maßnahmen, die auf die Herausforderungen ausgerichtet sind und sich auf den gesellschaftlichen, wirtschaftlichen und ökologischen Nutzen und die Modernisierung der Sektoren und Märkte konzentrieren, die mit der Biowirtschaft in Zusammenhang stehen, werden im Rahmen einer multidisziplinären Forschung unterstützt, um so Innovationen zu begünstigen und neue Strategien, Verfahren, nachhaltige Produkte und Prozesse hervorzubringen. Ferner wird ein breit gefasstes Innovationskonzept verfolgt, das technologische, nichttechnologische, organisatorische, ökonomische und gesellschaftliche Innovationen, aber beispielsweise auch Wege für den Technologietransfer sowie neuartige Geschäftsmodelle, Markenkonzepte und Dienstleistungen umfasst. Das Potenzial von Landwirten und KMU für Beiträge zu Innovationen muss anerkannt werden. Bei der Strategie für die Biowirtschaft muss der Bedeutung des lokalen Wissens und der Vielfalt Rechnung getragen werden.

Einzelziele und Tätigkeiten in Grundzügen

a) Nachhaltige Land- und Forstwirtschaft

Ziel ist die ausreichende Versorgung mit Lebensmitteln, Futtermitteln, Biomasse und anderen Rohstoffen unter Wahrung der natürlichen Ressourcen wie Wasser, Boden und biologische Vielfalt, aus europäischer und globaler Perspektive, und Verbesserung der Ökosystemleistungen, einschließlich des Umgangs mit dem Klimawandel und dessen Abmilderung. Schwerpunkt der Tätigkeiten ist die Steigerung der Qualität und des Werts der landwirtschaftlichen Erzeugnisse durch eine im Ergebnis nachhaltigere und produktivere Landwirtschaft, einschließlich Tierzucht und Forstwirtschaft, die vielseitig, widerstandsfähig und ressourcenschonend ist (im Sinne eines geringen CO2-Ausstoßes, geringen externen Inputs und niedrigen Wasserverbrauchs), die natürlichen Ressourcen schützt, weniger Abfall erzeugt und, anpassungsfähig ist. Darüber hinaus geht es um die Entwicklung von Dienstleistungen, Konzepten und Strategien zur Stärkung der wirtschaftlichen Existenz in ländlichen Gebieten und zur Förderung nachhaltiger Verbrauchsmuster.Insbesondere in Bezug auf die Forstwirtschaft besteht das Ziel darin, auf nachhaltige Weise biobasierte Produkte, Ökosystemleistungen und ausreichend Biomasse zu erzeugen und dabei die wirtschaftlichen, ökologischen und sozialen Aspekte der Forstwirtschaft gebührend zu berücksichtigen. Schwerpunkt der Tätigkeiten wird die Weiterentwicklung der Produktion und Nachhaltigkeit ressourceneffizienter Forstwirtschaftssysteme sein, die für die Stärkung der Widerstandsfähigkeit der Wälder und für den Schutz der biologischen Vielfalt von entscheidender Bedeutung sind und die zunehmende Nachfrage nach Biomasse befriedigen können.Auch die Wechselwirkung zwischen Funktionspflanzen einerseits und Gesundheit und Wohlergehen andererseits sowie der Einsatz von Gartenbau und Forstwirtschaft für den Ausbau der Stadtbegrünung werden berücksichtigt.

b) Nachhaltiger und wettbewerbsfähiger Agrar- und Lebensmittelsektor für sichere und gesunde Ernährung

Ziel ist es, den Anforderungen der Bürger und der Umwelt an sichere, gesunde und erschwingliche Lebensmittel gerecht zu werden, die Nachhaltigkeit von Lebens- und Futtermittelverarbeitung, -vertrieb und -verbrauch zu erhöhen und die Wettbewerbsfähigkeit des Lebensmittelsektors – auch unter Berücksichtigung der kulturellen Komponente der Lebensmittelqualität – zu stärken. Schwerpunkt der Tätigkeiten sind gesunde und sichere Lebensmittel für alle, Aufklärung der Verbraucher, ernährungsbezogene Lösungen und Innovationen im Dienste einer besseren Gesundheit sowie wettbewerbsfähige Verfahren für die Lebensmittelverarbeitung, die weniger Ressourcen und Zusatzstoffe verbrauchen und bei denen weniger Nebenprodukte, Abfälle und Treibhausgase anfallen.

c) Erschließung des Potenzials aquatischer Bioressourcen

Ziel ist die Bewirtschaftung, nachhaltige Nutzung und Erhaltung aquatischer Bioressourcen mit dem Ziel einer Maximierung des gesellschaftlichen und wirtschaftlichen Nutzens der Meere, der offenen See und der Binnengewässer Europas bei gleichzeitigem Schutz der biologischen Vielfalt. Schwerpunkt der Tätigkeiten ist ein optimaler Beitrag zur Lebensmittel-Versorgungssicherheit durch Entwicklung einer nachhaltigen und umweltfreundlichen Fischerei, die nachhaltige Bewirtschaftung der Ökosysteme unter Bereitstellung von Gütern und Dienstleistungen und eine im Rahmen der Weltwirtschaft wettbewerbsfähige und umweltfreundliche europäischen Aquakultur sowie die Förderung mariner und maritimer Innovationen mit Hilfe der Biotechnologie als Motor für ein intelligentes ""blaues"" Wachstum.

d) Nachhaltige und wettbewerbsfähige biobasierte Industriezweige und Förderung der Entwicklung einer europäischen Biowirtschaft

Ziel ist die Förderung ressourcenschonender, nachhaltiger und wettbewerbsfähiger europäischer biobasierter Industriezweige mit niedrigem CO2-Ausstoß. Schwerpunkt der Tätigkeiten ist die Förderung der wissensgestützten Biowirtschaft durch Umwandlung herkömmlicher Industrieverfahren und -produkte in biobasierte ressourcenschonende und energieeffiziente Verfahren und Produkte, der Aufbau integrierter Bioraffinerien der zweiten und nachfolgenden Generation, die möglichst optimale Nutzung der Biomasse aus der Primärproduktion sowie der Reststoffe, des Bioabfalls und der Nebenprodukte der biobasierten Industrie und die Öffnung neuer Märkte durch Unterstützung von Normungs- und Zertifizierungssystemen sowie von regulatorischen und Demonstrationstätigkeiten und von Feldversuchen bei gleichzeitiger Berücksichtigung der Auswirkungen der Biowirtschaft auf die (veränderte) Bodennutzung sowie der Ansichten und Bedenken der Zivilgesellschaft.

e) Übergreifende Meeresforschung und maritime Forschung

Ziel ist es, die Auswirkungen der Meere und Ozeane der Union auf die Gesellschaft und das Wirtschaftswachstum zu steigern durch die nachhaltige Bewirtschaftung der Meeresressourcen sowie die Nutzung verschiedener Quellen von Meeresenergie und die weitreichenden unterschiedlichen Formen der Nutzung der Meere.Der Schwerpunkt der Tätigkeiten liegt auf bereichsübergreifenden wissenschaftlichen und technologischen Herausforderungen im marinen und im maritimen Bereich, um in der ganzen Bandbreite der marinen und maritimen Industriezweige das Potenzial von Meeren und Ozeanen so zu erschließen, dass gleichzeitig der Schutz der Umwelt und die Anpassung an den Klimawandel gewährleistet ist. Ein strategischer koordinierter Ansatz für marine und maritime Forschung in allen Herausforderungen und Schwerpunkte von Horizont 2020 wird auch die Umsetzung relevanter Maßnahmen der Union zur Erreichung blauer Wachstumsziele fördern.";"";"H2020";"H2020-EU.3.";"";"";"2014-09-22 20:44:33";"664281" +"H2020-EU.3.2.";"pl";"H2020-EU.3.2.";"";"";"WYZWANIA SPOŁECZNE - Bezpieczeństwo żywnościowe, zrównoważone rolnictwo i leśnictwo, badania mórz, wód śródlądowych oraz biogospodarka";"Food, agriculture, forestry, marine research and bioeconomy";"

WYZWANIA SPOŁECZNE - Bezpieczeństwo żywnościowe, zrównoważone rolnictwo i leśnictwo, badania mórz, wód śródlądowych oraz biogospodarka

Cel szczegółowy

Cel szczegółowy polega na zapewnieniu wystarczającego zaopatrzenia w bezpieczną, zdrową i wysokiej jakości żywność oraz inne bioprodukty poprzez opracowanie wydajnych, zrównoważonych i zasobooszczędnych systemów produkcji podstawowej, ochronę powiązanych usług ekosystemowych i odbudowę różnorodności biologicznej oraz konkurencyjnych i niskoemisyjnych łańcuchów dostaw, przetwarzania i wprowadzania do obrotu. Przyspieszy to przemianę gospodarki w zrównoważoną europejską biogospodarkę i wyeliminuje dystans między nowymi technologiami a ich wdrażaniem.W nadchodzących dziesięcioleciach Europa stanie przed wyzwaniami związanymi z większą konkurencją w odniesieniu do ograniczonych zasobów naturalnych, z wpływem zmiany klimatu, w szczególności na systemy produkcji podstawowej (rolnictwo – w tym chów zwierząt i ogrodnictwo – leśnictwo, rybołówstwo i akwakultura) oraz z potrzebą zapewnienia zrównoważonego i bezpiecznego zaopatrzenia w żywność dla populacji Europy i coraz większej populacji światowej. Szacuje się, że wyżywienie ludności świata, której liczba do 2050 r. wyniesie 9 miliardów, wymaga zwiększenia światowego zaopatrzenia w żywność o 70%. Z rolnictwa pochodzi ok. 10% gazów cieplarnianych emitowanych w Unii, przy czym pomimo spadku tych emisji w Europie przewiduje się, że do 2030 r. emisje globalne z rolnictwa wzrosną o nawet 20%. Ponadto Europa będzie musiała zagwarantować wystarczające i wyprodukowane w sposób zrównoważony dostawy surowców, energii i produktów przemysłowych w warunkach malejącej ilości kopalnych surowców węglowych (oczekuje się, że do 2050 r. produkcja ropy naftowej i gazu ziemnego zmniejszy się o ok. 60%), jednocześnie utrzymując swoją konkurencyjność. Dużym i generującym koszty problemem są bioodpady (szacuje się, że w Unii co roku powstaje ich 138 mln ton, z czego nawet 40% jest składowane), mimo ich potencjalnej wysokiej wartości dodanej.Przykładowo, według szacunków, 30% całej żywności produkowanej w krajach rozwiniętych jest wyrzucane. Potrzebne są daleko idące zmiany, które pozwolą do 2030 r. zmniejszyć tę ilość w Unii o 50% (7). Ponadto granice krajowe nie są żadną przeszkodą w odniesieniu do przybywania i rozprzestrzeniania się organizmów szkodliwych oraz chorób roślin i zwierząt, w tym chorób odzwierzęcych oraz patogenów odpokarmowych. Niezbędne są skuteczne krajowe środki prewencyjne, jednak dla zapewnienia ostatecznej kontroli oraz właściwego funkcjonowania jednolitego rynku kluczowe są działania na szczeblu Unii. Wyzwanie jest złożone, dotyczy szerokiego wachlarza wzajemnie połączonych sektorów i wymaga całościowego i systemowego podejścia.Coraz więcej zasobów biologicznych jest niezbędnych do zaspokojenia zapotrzebowania rynku na bezpieczne i zdrowe zaopatrzenie w żywność, biomateriały, biopaliwa i bioprodukty, od produktów konsumpcyjnych po chemikalia luzem. Zdolności ekosystemów lądowych i wodnych wymagane do ich produkcji są jednak ograniczone, a o ich wykorzystanie konkurują różne podmioty; często brakuje optymalnego zarządzania, czego skutkiem jest, przykładowo, znaczne zmniejszenie zawartości węgla w glebach i żyzności, a także uszczuplenie stad ryb. Istnieje niewykorzystany potencjał wspierania usług ekosystemowych z gruntów uprawnych, lasów, wód morskich i słodkich, co mogłoby nastąpić poprzez włączenie celów z zakresu agronomii, środowiska i celów społecznych do zrównoważonej produkcji i konsumpcji.Potencjał zasobów biologicznych i ekosystemów można zagospodarować w znacznie bardziej zrównoważony, efektywny i zintegrowany sposób. Przykładowo: można lepiej wykorzystać potencjał biomasy z rolnictwa, lasów i strumieni odpadów pochodzenia rolniczego, wodnego, przemysłowego, a także komunalnego.Zasadniczo potrzebne jest przejście do optymalnego wykorzystania biologicznych zasobów odnawialnych oraz zrównoważonych systemów produkcji podstawowej i systemów przetwórczych mogących dostarczać więcej żywności, błonnika i innych bioproduktów przy zminimalizowanych nakładach, wpływie na środowisko i emisjach gazów cieplarnianych, udoskonalonych usługach ekosystemowych, zerowej ilości odpadów i odpowiedniej wartości społecznej. Celem jest stworzenie systemów produkcji żywności, które wzmacniają, utrwalają i zasilają bazę zasobów, umożliwiając wytwarzanie trwałego dobrobytu. Należy lepiej poznać sposoby wytwarzania żywności, jej dystrybucji, handlu nią, jej konsumpcji i regulacji jej produkcji, a także opracować odpowiedzi na nie. Kluczem do osiągnięcia tych celów jest podjęcie w Europie i poza nią fundamentalnego wysiłku obejmującego wzajemnie powiązane działania w zakresie badań naukowych i innowacji, a także ciągły dialog między grupami zainteresowanych stron z kręgów politycznych, społecznych, gospodarczych i innych.

Uzasadnienie i unijna wartość dodana

Rolnictwo, leśnictwo, rybołówstwo i akwakultura oraz przemysł bioproduktów to ważne sektory wspierające biogospodarkę. Biogospodarka stanowi duży i rosnący rynek, o wartości szacowanej na ponad 2 bln EUR, który w 2009 r. zapewniał 20 mln miejsc pracy i 9% całkowitego zatrudnienia w Unii. Inwestycje w badania naukowe i innowacje związane z tym wyzwaniem społecznym umożliwią Europie zajęcie wiodącej pozycji na odpowiednich rynkach i odegrają rolę w osiągnięciu celów strategii „Europa 2020” oraz jej inicjatyw przewodnich „Unia innowacji” i „Europa efektywnie korzystająca z zasobów”.W pełni funkcjonalna biogospodarka europejska, obejmująca zrównoważoną produkcję zasobów odnawialnych pochodzących z lądu, rybołówstwa i akwakultury oraz ich przekształcenie w żywność, paszę, błonnik, bioprodukty i bioenergię, a także powiązane dobra publiczne, zapewni wysoką wartość dodaną Unii. Równolegle do funkcji związanych z rynkiem biogospodarka jest również podstawą szerokiego zakresu funkcji dóbr publicznych, bioróżnorodności i usług ekosystemowych. Zarządzana w zrównoważony sposób może ograniczyć wpływ na środowisko wywierany przez produkcję podstawową i cały łańcuch dostaw. Może zwiększyć ich konkurencyjność, wzmocnić samowystarczalność Europy i przyczynić się do powstawania miejsc pracy oraz możliwości dla przedsiębiorców, które mają zasadnicze znaczenie dla rozwoju obszarów wiejskich i nadbrzeżnych. Wyzwania dotyczące bezpieczeństwa żywnościowego, zrównoważonego rolnictwa oraz upraw, produkcji wodnej, leśnictwa i całej biogospodarki mają charakter europejski i globalny. Działania na poziomie Unii mają zasadnicze znaczenie dla połączenia klastrów w celu osiągnięcia skali i masy krytycznej niezbędnych do uzupełnienia wysiłków podejmowanych przez pojedyncze państwa członkowskie lub ich grupy. Podejście opierające się na zaangażowaniu wielu podmiotów zapewni niezbędne interakcje między naukowcami, przedsiębiorstwami, rolnikami/producentami, doradcami i użytkownikami końcowymi. Działania na poziomie Unii są również niezbędne dla zapewnienia spójności podejścia do tego wyzwania między sektorami oraz silnych powiązań z odpowiednimi kierunkami polityki Unii. Koordynacja badań naukowych i innowacji na poziomie Unii ułatwi i przyspieszy potrzebne zmiany w całej Unii.Badania naukowe i innowacje będą wchodzić w interakcję – połączoną ze wsparciem – z szerokim wachlarzem kierunków polityki Unii i powiązanych celów, w tym ze wspólną polityką rolną (w szczególności polityką rozwoju obszarów wiejskich, inicjatywami w zakresie wspólnego programowania, takimi jak „Rolnictwo, bezpieczeństwo żywnościowe i zmiana klimatu”, „Zdrowe odżywianie warunkiem zdrowego życia” oraz „Zdrowe i wydajne morza i oceany”) i europejskim partnerstwem innowacyjnym na rzecz wydajnego i zrównoważonego rolnictwa, europejskim partnerstwem innowacyjnym w dziedzinie wody, wspólną polityką rybołówstwa, zintegrowaną polityką morską, europejskim programem zapobiegania zmianie klimatu, ramową dyrektywą wodną (8), dyrektywą ramową w sprawie strategii morskiej (9), planem działania UE na rzecz ochrony lasów, strategią tematyczną w zakresie gleb, unijną strategią ochrony różnorodności biologicznej do 2020 r., strategicznym planem w dziedzinie technologii energetycznych, unijną polityką w zakresie innowacji i przemysłu, polityką zewnętrzną i polityką w zakresie pomocy rozwojowej, strategią w zakresie zdrowia roślin, strategią w zakresie zdrowia i dobrostanu zwierząt oraz ramami regulacyjnymi ochrony środowiska, zdrowia i bezpieczeństwa, promowania efektywnego gospodarowania zasobami i działań w dziedzinie klimatu oraz ograniczania ilości odpadów. Lepsza integracja pełnego cyklu – od badań podstawowych do innowacji – z powiązanymi politykami Unii wydatnie zwiększy ich unijną wartość dodaną, zapewni efekt dźwigni, zwiększy znaczenie społeczne, zapewni zdrowe produkty żywnościowe i ułatwi dalszy rozwój zrównoważonego gospodarowania gruntami, morzami i oceanami oraz rynków biogospodarki.W celu wsparcia polityki Unii związanej z biogospodarką oraz ułatwienia zarządzania badaniami naukowymi i innowacją i monitorowania ich, prowadzone będą badania społeczno-gospodarcze i działania wybiegające w przyszłość dotyczące strategii biogospodarki, w tym opracowanie wskaźników, baz danych, modeli, prognozowania oraz ocen skutków inicjatyw dla gospodarki, społeczeństwa i środowiska.Stymulowane wyzwaniami działania skupiające się na korzyściach społecznych, gospodarczych i środowiskowych oraz modernizacji sektorów i rynków związanych z biogospodarką mają zostać wsparte poprzez multidyscyplinarne badania naukowe, wspomagające innowacje i prowadzące do opracowania nowych strategii, praktyk, zrównoważonych produktów i procesów. Przyjęte ma zostać również szeroko zakrojone podejście do innowacji, obejmujące innowacje technologiczne, nietechnologiczne, organizacyjne, gospodarcze i społeczne – dotyczy to np. sposobów transferu technologii, nowych modeli biznesowych, marek i usług. Trzeba docenić potencjał rolników i MŚP w przyczynianiu się do innowacji. Podejście do biogospodarki ma uwzględniać znaczenie lokalnej wiedzy i różnorodności.

Ogólne kierunki działań

(a) Zrównoważone rolnictwo i leśnictwo

Celem jest zapewnienie wystarczającego zaopatrzenia w żywność, paszę, biomasę i inne surowce, przy jednoczesnym zabezpieczeniu zasobów naturalnych, takich jak woda, gleba, oraz bioróżnorodności, w europejskiej i światowej perspektywie, oraz udoskonalenie usług ekosystemowych, w tym walka ze skutkami zmiany klimatu i łagodzenie ich. Działania mają skupiać się na podniesieniu jakości i wartości produktów rolniczych poprzez wypracowanie bardziej zrównoważonych i produktywnych systemów rolnictwa – w tym chowu zwierząt – i leśnictwa, które są różnorodne, odporne i zasobooszczędne (niskoemisyjne oraz o niskich nakładach zewnętrznych, i oszczędzające wodę), chronią zasoby naturalne, produkują mniej odpadów i mają zdolność przystosowywania się do zmieniających się warunków środowiskowych. Ponadto działania mają dotyczyć rozwoju usług, koncepcji i polityk wspierających rozwój środków utrzymania na obszarach wiejskich i zachęcających do zrównoważonej konsumpcji.W szczególności w leśnictwie celem jest wytwarzanie – w zrównoważony sposób – biomasy, produktów biologicznych i dostarczanie usług ekosystemowych, z należytym uwzględnieniem aspektów gospodarczych, ekologicznych i społecznych leśnictwa. Działania skupią się na dalszym rozwijaniu produkcji i zrównoważonego charakteru zasobooszczędnych systemów leśnictwa, które będą wpływać na podniesienie poziomu odporności lasów i ochronę bioróżnorodności i które mogą zaspokoić zwiększone zapotrzebowanie na biomasę.Pod uwagę zostanie również wzięta interakcja między roślinami użytkowymi a zdrowiem i dobrostanem, a także wykorzystanie ogrodnictwa i leśnictwa do rozwoju zazieleniania miast.

(b) Zrównoważony i konkurencyjny sektor rolno-spożywczy sprzyjający bezpiecznemu i zdrowemu odżywianiu się

Celem jest zaspokojenie wymogów obywateli i środowiska dotyczących bezpiecznej, zdrowej i przystępnej cenowo żywności oraz bardziej zrównoważone przetwarzanie, dystrybucja i konsumpcja żywności i paszy, a także większa konkurencyjność sektora spożywczego, przy jednoczesnym uwzględnieniu elementu kulturowego jakości żywności. Działania mają skupiać się na zapewnieniu zdrowej i bezpiecznej żywności dla wszystkich, umożliwieniu konsumentom podejmowania świadomych wyborów, na sposobach odżywiania się i innowacjach na rzecz poprawy stanu zdrowia oraz na konkurencyjnych metodach przetwarzania żywności wykorzystujących mniej zasobów i dodatków i generujących mniej produktów ubocznych, odpadów i gazów cieplarnianych.

(c) Uwolnienie potencjału wodnych zasobów biologicznych

Celem jest gospodarowanie, zrównoważone wykorzystywanie i utrzymanie wodnych zasobów biologicznych w celu maksymalizacji społecznych i gospodarczych korzyści i zysków z oceanów, mórz i wód śródlądowych Europy przy zachowaniu bioróżnorodności. Działania mają skupiać się na optymalizacji wkładu w bezpieczne zaopatrzenie w żywność poprzez rozwój rybołówstwa zrównoważonego i przyjaznego dla środowiska, na zrównoważonym gospodarowaniu ekosystemami będącymi źródłem towarów i usług oraz konkurencyjnej i przyjaznej dla środowiska europejskiej akwakultury w kontekście gospodarki globalnej, a także wspomaganiu innowacji morskich za pomocą biotechnologii w celu stymulowania inteligentnego „niebieskiego wzrostu”.

(d) Zrównoważone i konkurencyjne sektory bioprzemysłu oraz wspieranie rozwoju europejskiej biogospodarki

Celem jest promowanie niskoemisyjnych, zasobooszczędnych, zrównoważonych i konkurencyjnych europejskich sektorów bioprzemysłu. Działania mają skupiać się na wspieraniu biogospodarki opartej na wiedzy poprzez przekształcenie konwencjonalnych produktów i procesów przemysłowych w zasobooszczędne i energooszczędne bioprodukty i bioprocesy, rozwój zintegrowanych biorafinerii drugiej i kolejnych generacji, optymalizację wykorzystania biomasy z produkcji podstawowej, w tym pozostałości, bioodpadów i produktów ubocznych bioprzemysłu, a także otwarcie nowych rynków poprzez wspieranie systemów normalizacji i certyfikacji, a także działań w zakresie regulacji i demonstracji/prób terenowych i, z uwzględnieniem wpływu biogospodarki na użytkowanie gruntów i zmiany sposobu ich użytkowania, a także poglądów i wątpliwości społeczeństwa obywatelskiego.

(e) Przekrojowe badania morskie

Celem jest zwiększenie wpływu mórz i oceanów w Unii na wzrost gospodarczy poprzez zrównoważone wykorzystywanie zasobów morskich oraz różnych źródeł energii morskiej oraz wiele innych różnych sposobów użytkowania mórz.Działania mają się skupiać na przekrojowych morskich wyzwaniach naukowo-technicznych i mają odblokować potencjał mórz i oceanów we wszystkich sektorach przemysłu morskiego, a jednocześnie chronić środowisko i zapewnić przystosowanie się do zmiany klimatu. To skoordynowane podejście strategiczne do badań morskich w ramach wszystkich wyzwań i priorytetów programu „Horyzont 2020” będzie także wspierać wdrażanie odnośnych polityk Unii celem realizacji głównych założeń „niebieskiego wzrostu”.";"";"H2020";"H2020-EU.3.";"";"";"2014-09-22 20:44:33";"664281" +"H2020-EU.1.4.";"fr";"H2020-EU.1.4.";"";"";"EXCELLENCE SCIENTIFIQUE - Infrastructures de recherche";"Research Infrastructures";"

EXCELLENCE SCIENTIFIQUE - Infrastructures de recherche

Objectif spécifique

L'objectif spécifique est de doter l'Europe d'infrastructures de recherche d'envergure mondiale qui soient accessibles à tous les chercheurs d'Europe et d'ailleurs et qui exploitent pleinement leur potentiel en matière de progrès scientifiques et d'innovation.Les infrastructures de recherche jouent un rôle décisif dans la compétitivité de l'Europe, dans tous les domaines de la recherche scientifique, et sont essentielles à une innovation axée sur la science. Dans de nombreux domaines, la recherche est impossible sans un accès à des superordinateurs, à des équipements d'analyse, à des sources de rayonnement pour de nouveaux matériaux, à des salles blanches et à une métrologie avancée pour les nanotechnologies, à des laboratoires spécialement équipés pour la recherche biologique et médicale, à des banques de données pour la génomique et les sciences sociales, à des observatoires et des capteurs pour les sciences de la Terre et de l'environnement, à des réseaux à très haut débit pour le transfert de données, etc. Les infrastructures de recherche sont indispensables pour mener à bien les travaux de recherche permettant de relever des défis de société majeurs. Elles font progresser la collaboration transfrontalière et interdisciplinaire et créent un espace européen ouvert et cohérent pour la recherche en ligne. Elles favorisent la mobilité des personnes et des idées, rassemblent les meilleurs scientifiques d'Europe et du monde et améliorent l'éducation scientifique. Elles incitent les chercheurs et les entreprises innovantes à concevoir des technologies de pointe. Elles renforcent par conséquent l'industrie innovante de haute technologie européenne. Elles favorisent l'excellence dans les communautés européennes de la recherche et de l'innovation et peuvent être des instruments exceptionnels de promotion de la science pour la société dans son ensemble.Pour maintenir la stature mondiale de sa recherche, l'Europe doit mettre en place, sur la base de critères adoptés d'un commun accord, des conditions stables et adéquates pour assurer la construction, l'entretien et le fonctionnement des infrastructures de recherche. Cela nécessite d'établir une coopération effective et substantielle entre les bailleurs de fonds de l'Union, nationaux et régionaux à l'égard desquels les liens étroits avec la politique de cohésion seront maintenus, de manière à susciter des synergies et à garantir une approche cohérente.Cet objectif spécifique rejoint un engagement clé de l'initiative phare «Une Union de l'innovation», qui souligne le rôle essentiel des infrastructures de recherche d'envergure mondiale lorsqu'il s'agit de créer les conditions qui permettent des avancées révolutionnaires dans la recherche et l'innovation. L'initiative phare insiste sur la nécessité d'une mise en commun des ressources à l'échelon européen, voire mondial dans certains cas, pour mettre en place et faire fonctionner des infrastructures de recherche. De même, l'initiative phare «Une stratégie numérique pour l'Europe» insiste sur la nécessité de renforcer les infrastructures en ligne de l'Europe et sur l'importance de développer des pôles d'innovation pour assurer à l'Europe une position de pointe en matière d'innovation.

Justification et valeur ajoutée de l'Union

Les infrastructures de recherche ultraperformantes deviennent de plus en plus complexes et onéreuses; elles nécessitent souvent l'intégration de différents équipements, services et sources de données ainsi qu'une intense collaboration transnationale. Aucun pays ne dispose à lui seul de ressources en suffisance pour financer toutes les infrastructures de recherche dont il a besoin. La politique européenne relative aux infrastructures de recherche a enregistré des progrès remarquables ces dernières années, que ce soit sur le plan de l'élaboration et de la mise en œuvre continues de la feuille de route du Forum stratégique européen pour les infrastructures de recherche (ESFRI) relative aux infrastructures, de l'intégration et de l'ouverture d'installations de recherche nationales ou du développement d'infrastructures en ligne qui sous-tendent un EER numérique qui soit ouvert. En offrant une formation de niveau mondial à une nouvelle génération de chercheurs et d'ingénieurs et en promouvant la collaboration interdisciplinaire, les réseaux d'infrastructures de recherche de dimension européenne renforcent la base de ressources humaines de l'Europe. Les synergies avec les actions Marie Skłodowska-Curie seront encouragées.Un renforcement et une utilisation accrue des infrastructures de recherche au niveau européen contribueront de manière significative au développement de l'EER. Si les États membres conservent un rôle central dans la mise en place et le financement des infrastructures de recherche, l'Union joue un rôle de premier plan lorsqu'il s'agit de soutenir les infrastructures à l'échelle européenne, notamment en encourageant la coordination des infrastructures de recherche européennes et en promouvant la création d'installations nouvelles et intégrées, d'ouvrir et d'encourager un large accès aux infrastructures nationales et européennes, et d'assurer la cohérence et l'efficacité des politiques régionales, nationales, européennes et internationales. Il convient d'éviter toute répétition inutile et fragmentation des activités, d'encourager l'utilisation coordonnée et efficace des installations et, le cas échéant, d'assurer une mise en commun des ressources, de sorte que l'Europe puisse également acquérir et exploiter des infrastructures de recherche d'envergure mondiale.Les TIC ont transformé la science en permettant une collaboration à distance, le traitement massif de données, l'expérimentation in silico et l'accès à des ressources éloignées. La recherche est devenue par conséquent de plus en plus transnationale et interdisciplinaire et nécessite le recours aux infrastructures des TIC dont la nature est supranationale, comme la science elle-même.Les économies d'échelle et la rationalisation des tâches qu'autorise une approche européenne de la construction, de l'utilisation et de la gestion des infrastructures de recherche, y compris les infrastructures en ligne, contribueront de manière significative à développer le potentiel de l'Europe en matière de recherche et d'innovation, et à rendre l'Union plus compétitive au niveau international.

Grandes lignes des activités

Les activités visent à développer les infrastructures de recherche européennes pour 2020 et au-delà, à promouvoir leur potentiel d'innovation et leurs ressources humaines ainsi qu'à renforcer la politique européenne relative aux infrastructures de recherche.

(a) Développer les infrastructures de recherche européennes pour 2020 et au-delà

L'objectif consiste à faciliter et à soutenir les actions liées aux éléments suivants: 1) la préparation, la mise en œuvre et l'exploitation des infrastructures de recherche recensées par l'ESFRI et des autres infrastructures de recherche d'envergure mondiale, et notamment le développement d'infrastructures partenaires régionales, lorsque l'intervention de l'Union apporte une forte valeur ajoutée; 2) l'intégration des infrastructures de recherche nationales et régionales d'intérêt européen et l'accès transnational à ces infrastructures, de manière à ce que les scientifiques européens puissent les utiliser indépendamment de leur localisation pour effectuer des recherches de haut niveau; 3) le développement, le déploiement et l'exploitation des infrastructures en ligne pour garantir une capacité de premier plan au niveau mondial en matière de mise en réseau, d'informatique et de données scientifiques.

(b) Promouvoir le potentiel d'innovation et les ressources humaines des infrastructures de recherche

Les objectifs consistent à inciter les infrastructures de recherche à jouer un rôle de pionnier dans l'adoption ou le développement des technologies de pointe, à encourager les partenariats avec les entreprises en matière de recherche et de développement, à faciliter l'utilisation des infrastructures de recherche à des fins industrielles et à stimuler la création de pôles d'innovation. Il s'agit également de soutenir la formation et/ou les échanges de personnes chargées de la gestion et de l'exploitation des infrastructures de recherche.

(c) Renforcer la politique européenne relative aux infrastructures de recherche ainsi que la coopération internationale

L'objectif est de soutenir les partenariats entre les décideurs politiques et les organismes de financement concernés, les outils de cartographie et de suivi utilisés pour la prise de décisions ainsi que les activités de coopération internationale. Les infrastructures européennes de recherche peuvent être soutenues dans le cadre de leurs activités dans le domaine des relations internationales.Les objectifs énoncés au titre des lignes d'activités décrites aux points b) et c) sont poursuivis au moyen d'actions spécifiques ainsi que, selon le cas, dans le cadre d'actions menées au titre de la ligne d'activité décrite au point a).";"";"H2020";"H2020-EU.1.";"";"";"2014-09-22 20:39:43";"664121" +"H2020-EU.2.1.5.2.";"pl";"H2020-EU.2.1.5.2.";"";"";"Technologie wspomagające energooszczędne systemy i budynki o niewielkim oddziaływaniu na środowisko";"Technologies enabling energy-efficient systems and buildings";"

Technologie wspomagające energooszczędne systemy i budynki o niewielkim oddziaływaniu na środowisko

Ograniczenie zużycia energii i emisji CO2 poprzez badania naukowe, opracowanie i wdrożenie zrównoważonych technologii i systemów budowlanych, uwzględnienie całego łańcucha wartości, jak również zmniejszenie ogólnego oddziaływania budynków na środowisko.";"";"H2020";"H2020-EU.2.1.5.";"";"";"2014-09-22 20:42:06";"664201" +"H2020-EU.3.1.";"es";"H2020-EU.3.1.";"";"";"RETOS DE LA SOCIEDAD - Salud, cambio demográfico y bienestar";"Health";"

RETOS DE LA SOCIEDAD - Salud, cambio demográfico y bienestar

Objetivo específico

El objetivo específico es mejorar la salud a lo largo de la vida y el bienestar de todos.La salud a lo largo de la vida y el bienestar de todos -menores, adultos y personas mayores-, unos sistemas sanitarios y asistenciales de alta calidad, económicamente sostenibles e innovadores, como parte de los sistemas de bienestar, y oportunidades para generar nuevos puestos de trabajo y crecimiento, son los objetivos para apoyar la investigación e innovación como respuesta a este reto, efectuando así una importante contribución a la estrategia Europa 2020.El coste de los sistemas sanitario y de asistencia social de la Unión se está incrementando, ya que las medidas de atención y prevención para todas las edades son cada vez más caras y se espera que el número de europeos mayores de 65 años casi se duplique, pasando de 85 millones en 2008 a 151 millones para 2060, y que el de mayores de 80 pase de 22 a 61 millones en el mismo período. Reducir o contener estos costes de manera que no se hagan insostenibles depende, en parte, de mejorar la salud a lo largo de la vida y el bienestar de todos y, por lo tanto, de la eficacia de la prevención, el tratamiento y la gestión de la enfermedad y la discapacidad.Las dolencias y enfermedades crónicas son las principales causas de discapacidad, mala salud, abandono del trabajo por motivos de salud y muerte prematura, y suponen considerables costes sociales y económicos.En la Unión, las enfermedades cardiovasculares son responsables de más de 2 millones de fallecimientos al año y cuestan a la economía más de 192 000 millones de euros, en tanto que el cáncer ocasiona una cuarta parte de las defunciones y es la primera causa de muerte en las personas de 45 a 64 años. Más de 27 millones de personas padecen diabetes en la Unión y más de 120 millones, enfermedades reumáticas y musculoesqueléticas. Las enfermedades raras, que afectan a unos 30 millones de personas en toda Europa, siguen representando un gran reto. El coste total de los trastornos cerebrales (incluidos los que afectan a la depresión, pero no solo estos) se ha estimado en 800 000 millones EUR. Se calcula que solo la depresión afecta a 165 millones de personas en la Unión, con un coste de 118 millones EUR. Esta cifra seguirá aumentando de manera espectacular, en gran medida como resultado del envejecimiento de la población europea y del consiguiente incremento de las enfermedades neurodegenerativas. Los factores ambientales, profesionales y relacionados con el estilo de vida inciden en varias de estas enfermedades, estimándose que guarda relación con ellos hasta un tercio de la carga global de las enfermedades.Las enfermedades infecciosas, como el VIH/SIDA, la tuberculosis y la malaria, son motivo de preocupación en todo el mundo, representando el 41 % de los 1 500 millones de años de vida ajustados en función de la discapacidad en todo el mundo, un 8 % de los cuales corresponde a Europa. Las enfermedades relacionadas con la pobreza y las desatendidas son también una preocupación mundial. También hay que prepararse para las nuevas epidemias, las enfermedades infecciosas reemergentes (incluidas las enfermedades relacionadas con el agua) y la amenaza de la creciente resistencia a los antimicrobianos. También debe considerarse el aumento del riesgo de enfermedades de transmisión animal.Entretanto, los procesos de desarrollo de medicamentos y vacunas cada vez resultan más costosos y menos eficaces. Los esfuerzos por aumentar el rendimiento en el desarrollo de medicamentos y vacunas incluyen métodos alternativos para sustituir los clásicos ensayos de seguridad y eficacia. Es preciso hacer frente a la persistencia de las desigualdades ante la salud y a las necesidades de grupos específicos de población (por ejemplo, los que sufren enfermedades raras), y garantizar a todos los europeos, independientemente de su edad o procedencia social, el acceso a unos sistemas sanitarios eficaces y competentes.Otros factores como la nutrición, la actividad física, la riqueza, la inclusión social, la participación cívica, el capital social y el trabajo afectan también a la salud y el bienestar y es preciso adoptar un planteamiento holístico.Debido al aumento de la esperanza de vida, la edad y la estructura de la población europea van a cambiar. Por tanto, la investigación que promueve la salud a lo largo de la vida, el envejecimiento activo y el bienestar para todos será fundamental para el éxito de la adaptación de las sociedades al cambio demográfico.

Justificación y valor añadido de la Unión

La enfermedad y la discapacidad no se detienen en las fronteras nacionales. Una adecuada respuesta de investigación, el esfuerzo en materia de desarrollo e innovación a nivel europeo en cooperación con terceros países y la participación de todas las partes interesadas, incluidos los pacientes y los usuarios finales, puede suponer una contribución crucial para abordar dichos retos mundiales, trabajar así en el logro de los Objetivos de Desarrollo del Milenio de Naciones Unidas, ofreciendo una mejor salud y bienestar para todos y situar a Europa a la cabeza de los mercados mundiales de las innovaciones en materia de salud y bienestar, en rápida expansión.La respuesta depende de la excelencia en la investigación para mejorar nuestra comprensión fundamental de los elementos determinantes de la salud, la enfermedad, la discapacidad, las condiciones saludables de trabajo, el desarrollo y el envejecimiento (incluida la esperanza de vida), y de la plasmación generalizada y sin discontinuidades de los conocimientos resultantes y existentes en productos, estrategias, intervenciones y servicios innovadores modulables, eficaces accesibles y seguros. Además, la pertinencia de estos retos en toda Europa y, en muchos casos, a escala mundial, exige una respuesta caracterizada por un apoyo a largo plazo y coordinado a la cooperación entre equipos excelentes, multidisciplinarios y multisectoriales. Es necesario asimismo hacer frente al reto desde la perspectiva de las ciencias sociales y económicas y las humanidades.Análogamente, la complejidad del reto y la interdependencia de sus componentes exigen una respuesta a nivel europeo. Muchos planteamientos, instrumentos y tecnologías pueden aplicarse en buen número de ámbitos de investigación e innovación correspondientes este reto y es preferible apoyarlos a nivel de la Unión. Entre ellos figuran la comprensión de la base molecular de la enfermedad, la determinación de estrategias terapéuticas innovadoras y de sistemas de modelos novedosos, la aplicación pluridisciplinar del conocimiento en física, química y biología de sistemas, el desarrollo de cohortes a largo plazo y la realización de ensayos clínicos (centrados en la evolución y los efectos de los medicamentos en todos los grupos de edad), el uso clínico de las «-ómicas», o el desarrollo de las TIC y sus aplicaciones en la práctica de la asistencia sanitaria, especialmente la sanidad electrónica. Los requisitos de poblaciones específicas también se abordan mejor de forma integrada, por ejemplo, en el desarrollo de la medicina estratificada y/o personalizada, en el tratamiento de las enfermedades raras y en la oferta de soluciones para la vida autónoma y asistida.Para maximizar el impacto de las acciones a nivel de la Unión, es preciso prestar apoyo a toda la gama de actividades de investigación, de desarrollo y de innovación. Desde la investigación básica, a través de la traducción del conocimiento fundamental sobre la enfermedad a nuevas terapias, a grandes ensayos y acciones piloto y de demostración, movilizando la inversión privada. Dichas actividades incluirán también la contratación pública y precomercial de nuevos productos, servicios, soluciones modulables, que cuando proceda sean interoperables, apoyadas por normas definidas y/o directrices comunes. Dicho esfuerzo europeo coordinado aumentará las capacidades científicas y humanas en el ámbito de la investigación sobre la salud y contribuirá al desarrollo en curso del EEI. Asimismo, se vinculará, cuando y como proceda, con las actividades realizadas en el contexto del Programa ""Salud para el crecimiento"", las Iniciativas de Programación Conjunta, en especial las iniciativas ""Investigación de enfermedades neurodegenerativas"", ""Una dieta sana para una vida sana"" ""Resistencia antimicrobiana"" y ""Una vida más larga y mejor"", y de la Cooperación de Innovación Europea sobre envejecimiento activo y saludable.El Panel Científico para la Salud será una plataforma dirigida por partes interesadas que elaborará aportaciones científicas relativas en relación con los retos de la sociedad. Proporcionará un análisis coherente y científico centrado en los obstáculos a la investigación y la innovación, así como en las oportunidades relativas a dichos retos de la sociedad, contribuirá a la determinación de sus prioridades en materia de innovación y fomentará la participación científica a escala de la UE en el proceso. Mediante una cooperación activa con las partes interesadas, ayudará a consolidar capacidades y fomentar la puesta en común del conocimiento y una mayor colaboración a través de la Unión en este ámbito.

Líneas generales de las actividades

Una promoción eficaz de la salud, apoyada por una base factual sólida, previene la enfermedad, contribuye al bienestar y es rentable desde el punto de vista de los costes. La promoción de la salud, el envejecimiento activo, el bienestar y la prevención de las enfermedades también dependen de la comprensión de los factores determinantes de la salud, de unas herramientas preventivas eficaces, de una vigilancia eficaz de la salud y la enfermedad y de la preparación ante esta, y de unos programas de detección eficaces. Una promoción eficaz de la salud se ve asimismo favorecida por una mejor información a los ciudadanos, lo que fomenta la adopción de decisiones responsables en materia de salud.El éxito de los esfuerzos por prevenir, detectar de manera precoz, gestionar, tratar y curar la enfermedad, la discapacidad, la vulnerabilidad y la funcionalidad reducida se fundamenta en una comprensión básica de sus causas y factores determinantes, procesos y repercusiones, así como de los factores que subyacen a la buena salud y el bienestar. Una mejor comprensión de la salud y de la enfermedad requerirá una vinculación estrecha entre la investigación básica, clínica, epidemiológica y socioeconómica. También resultan esenciales el eficaz intercambio de datos, su tratamiento normalizado y la vinculación de estos datos a estudios de cohortes a gran escala, al igual que el traslado de los resultados de la investigación a la práctica clínica, también mediante la realización de ensayos clínicos, que habrán de tomar en consideración todos los grupos de edad para garantizar un uso adaptado de los medicamentos.La reaparición de antiguas enfermedades infecciosas, incluida la tuberculosis así como la mayor incidencia de enfermedades evitables con una vacuna ilustran la necesidad de un planteamiento mundial frente a las enfermedades asociadas a la pobreza y desatendidas. De la misma forma, el creciente problema de la resistencia antibacteriana exige un planteamiento también mundial.Deberá impulsarse una medicina personalizada con el fin de ajustar los planteamientos terapéuticos y preventivos a las necesidades de los pacientes, que además deberá estar respaldada por la detección precoz de la enfermedad. Para la sociedad constituye un reto afrontar las nuevas exigencias a los sectores sanitario y asistencial derivadas del envejecimiento de la población. Si han de mantenerse una sanidad y asistencia eficaces para todas las edades, es preciso mejorar el proceso decisorio en materia de prevención y dispensación del tratamiento, definir y respaldar la difusión de prácticas idóneas en los sectores sanitario y asistencial e impulsar la asistencia integrada. Una mejor comprensión de los procesos de envejecimiento y la prevención de las enfermedades asociadas al mismo constituyen la base para mantener sanos y activos a los ciudadanos europeos a lo largo de toda su vida. Es igualmente importante una adopción amplia de las innovaciones tecnológicas, organizativas y sociales que permitan a las personas de edad avanzada en particular, a las personas con enfermedades crónicas así como a las personas con discapacidad, permanecer activas, productivas y autónomas. De este modo se contribuirá a incrementar y prolongar su bienestar físico, social y mental.Todas estas actividades se realizarán de tal manera que se preste apoyo a todo el ciclo de la investigación y la innovación, reforzando la competitividad de las industrias establecidas en Europa y el desarrollo de nuevas oportunidades de mercado. Se hará asimismo hincapié en la participación de todas las partes interesadas del sector sanitario -incluidos los pacientes, las organizaciones de pacientes y los proveedores de atención sanitaria- con el fin de establecer un plan de investigación e innovación que asocie activamente a los ciudadanos y refleje sus necesidades y expectativas.Las actividades específicas incluirán: comprensión de los factores determinantes de la salud (incluidos los relacionados con la nutrición, la actividad física, el género, el medio ambiente, el nivel socioeconómico, el trabajo y el clima), mejora de la promoción de la salud y prevención de la enfermedad; comprensión de la enfermedad y mejora del diagnóstico y del pronóstico; desarrollo de programas de prevención y detección eficaces y mejora de la evaluación de la propensión a las enfermedades; mejorar la vigilancia de enfermedades infecciosas y la capacidad para combatir las epidemias y las enfermedades emergentes; desarrollo de nuevas y mejores vacunas preventivas y terapéuticas y medicamentos; uso de la medicina informática para mejorar la predicción y la gestión de enfermedades; el desarrollo de la medicina regenerativa, los tratamientos adaptados y el tratamiento de la enfermedad, inclusive de la medicina paliativa; transferencia de conocimientos a la práctica clínica y acciones de innovación modulables; mejorar la información sanitaria y mejor recopilación y uso de los datos sanitarios, administrativos y de cohortes; técnicas normalizadas de análisis de datos; envejecimiento activo, vida autónoma y asistida; sensibilización de los individuos y capacitación de las personas para la autogestión de su salud; promoción de la asistencia integrada, incluidos los aspectos psicosociales; mejora de instrumentos y métodos científicos al servicio de la formulación de políticas y las necesidades normativas; y optimización de la eficiencia y la eficacia de los sistemas de asistencia sanitaria; y reducción de las disparidades y desigualdades en materia de salud a través de la toma de decisiones basada en los datos y la divulgación de las mejores prácticas, y tecnologías y planteamientos innovadores. Debe fomentarse la participación activa de los proveedores de atención sanitaria para asegurar una rápida asimilación y aplicación de los resultados.";"";"H2020";"H2020-EU.3.";"";"";"2014-09-22 20:43:12";"664237" +"H2020-EU.3.5.4.";"pl";"H2020-EU.3.5.4.";"";"";"Umożliwienie ekologizacji gospodarki i społeczeństwa poprzez ekoinnowacje";"";"

Umożliwienie ekologizacji gospodarki i społeczeństwa poprzez ekoinnowacje

Celem jest wspieranie wszystkich form ekoinnowacji umożliwiających przekształcenie gospodarki w zieloną gospodarkę. Działania mają m.in. nawiązywać do działań podjętych w ramach programu dotyczącego ekoinnowacji oraz stanowić ich uzupełnienie, a także skupiać się na: wzmocnieniu ekoinnowacyjnych technologii, procesów, usług i produktów, w tym na przeanalizowaniu sposobów ograniczenia ilości surowców w produkcji i konsumpcji, na pokonaniu barier w tym aspekcie, oraz na zwiększeniu ich wykorzystywania przez rynek i odtwarzania, ze szczególnym uwzględnieniem MŚP; wsparciu innowacyjnych kierunków polityki, zrównoważonych modeli gospodarczych i przemian społecznych; pomiarze i ocenie postępu na drodze ku zielonej gospodarce; a także wspomaganiu zasobooszczędności poprzez systemy cyfrowe. ";"";"H2020";"H2020-EU.3.5.";"";"";"2014-09-22 20:48:54";"664417" +"H2020-EU.3.5.4.";"it";"H2020-EU.3.5.4.";"";"";"Agevolare la transizione verso un'economia e una società verdi per mezzo dell'ecoinnovazione";"A green economy and society through eco-innovation";"

Agevolare la transizione verso un'economia e una società verdi per mezzo dell'ecoinnovazione

L'obiettivo è promuovere tutte le forme di ecoinnovazione che consentono la transizione verso un'economia verde. Le attività tra l'altro si basano su quelle intraprese nel quadro del programma per l'ecoinnovazione e le rafforzano, e si concentrano sul rafforzamento di tecnologie, processi, servizi e prodotti ecoinnovativi, anche attraverso l'esplorazione di modalità per ridurre la quantità di materie prime nella produzione e nel consumo, sul superamento delle barriere in tale contesto, nonché sulla loro diffusione e replicazione sul mercato, con particolare attenzione per le PMI, sul sostegno alle politiche innovative, ai modelli economici sostenibili e ai cambiamenti sociali, sulla misurazione e la valutazione dei progressi verso un'economia verde e sulla promozione dell'efficienza delle risorse per mezzo dei sistemi digitali.";"";"H2020";"H2020-EU.3.5.";"";"";"2014-09-22 20:48:54";"664417" +"H2020-EU.3.5.2.";"fr";"H2020-EU.3.5.2.";"";"";"Protéger l'environnement, gérer les ressources naturelles, l'eau, la biodiversité et les écosystèmes de manière durable";"Protection of the environment";"

Protéger l'environnement, gérer les ressources naturelles, l'eau, la biodiversité et les écosystèmes de manière durable

L'objectif est de fournir des connaissances et outils qui permettront de gérer et protéger les ressources naturelles afin d'instaurer un équilibre durable entre des ressources limitées et les besoins actuels et futurs de la société et de l'économie. Les activités viseront essentiellement à approfondir notre compréhension de la biodiversité et du fonctionnement des écosystèmes, de leurs interactions avec les systèmes sociaux et de leur rôle dans la prospérité économique et le bien-être humain, à mettre au point des approches intégrées pour traiter les problèmes liés à l'eau et la transition vers une gestion et une utilisation durables des ressources et des services dans le domaine de l'eau ainsi qu'à apporter les connaissances et les outils nécessaires à une prise de décision efficace et à une implication du public.";"";"H2020";"H2020-EU.3.5.";"";"";"2014-09-22 20:48:20";"664399" +"H2020-EU.3.5.4.";"de";"H2020-EU.3.5.4.";"";"";"Grundlagen für den Übergang zu einer umweltfreundlichen Wirtschaft und Gesellschaft durch Öko-Innovation";"A green economy and society through eco-innovation";"

Grundlagen für den Übergang zu einer umweltfreundlichen Wirtschaft und Gesellschaft durch Öko-Innovation

Ziel ist die Förderung sämtlicher Formen von Öko-Innovation, die den Übergang zu einer ""grünen"" Wirtschaft ermöglichen. Die Tätigkeiten bauen u. a. auf den im Rahmen des Öko-Innovations-Programms durchgeführten Tätigkeiten auf und verstärken diese; Schwerpunkt ist die Stärkung von Technologien, Verfahren, Dienstleistungen und Produkten der Öko-Innovation, wozu auch die Suche nach Möglichkeiten zur Verringerung der bei der Produktion und beim Verbrauch verwendeten Rohstoffmengen gehört, die Überwindung diesbezüglicher Hindernisse und die Unterstützung ihrer Markteinführung und Nachahmung, unter besonderer Berücksichtigung von KMU, die Unterstützung innovativer Strategien, nachhaltiger Wirtschaftsmodelle und gesellschaftlicher Veränderungen, die Messung und Bewertung von Fortschritten auf dem Weg zu einer ""grünen"" Wirtschaft sowie die Förderung der Ressourceneffizienz durch digitale Systeme; die Unterstützung innovativer Strategien, nachhaltiger Wirtschaftsmodelle und gesellschaftlicher Veränderungen, die Messung und Bewertung von Fortschritten auf dem Weg zu einer ""grünen"" Wirtschaft sowie die Förderung der Ressourceneffizienz durch digitale Systeme; sowie die Förderung der Ressourceneffizienz durch digitale Systeme;";"";"H2020";"H2020-EU.3.5.";"";"";"2014-09-22 20:48:54";"664417" +"H2020-EU.2.1.5.2.";"fr";"H2020-EU.2.1.5.2.";"";"";"Des technologies en faveur de systèmes efficaces dans l'utilisation de l'énergie et de bâtiments efficaces dans l'utilisation de l'énergie et ayant une faible incidence sur l'environnement";"Technologies enabling energy-efficient systems and buildings";"

Des technologies en faveur de systèmes efficaces dans l'utilisation de l'énergie et de bâtiments efficaces dans l'utilisation de l'énergie et ayant une faible incidence sur l'environnement

Réduire la consommation d'énergie et les émissions de CO2 grâce à la recherche, au développement et au déploiement de technologies et de systèmes de construction durables, prenant en compte toute la chaîne de valeur et réduisant l'incidence globale des bâtiments sur l'environnement.";"";"H2020";"H2020-EU.2.1.5.";"";"";"2014-09-22 20:42:06";"664201" +"H2020-EU.3.2.";"it";"H2020-EU.3.2.";"";"";"SFIDE PER LA SOCIETÀ - Sicurezza alimentare, agricoltura e silvicoltura sostenibili, ricerca marina, marittima e sulle acque interne e bioeconomia";"Food, agriculture, forestry, marine research and bioeconomy";"

SFIDE PER LA SOCIETÀ - Sicurezza alimentare, agricoltura e silvicoltura sostenibili, ricerca marina, marittima e sulle acque interne e bioeconomia

Obiettivo specifico

L'obiettivo specifico è garantire un sufficiente approvvigionamento di prodotti alimentari e di altri prodotti di origine biologica sicuri, sani e di elevata qualità, sviluppando sistemi di produzione primaria produttivi, sostenibili e basati su un uso efficiente delle risorse, promuovendo i servizi ecosistemici correlati e il ripristino della diversità biologica, congiuntamente a catene di approvvigionamento, trattamento e commercializzazione competitive e a basse emissioni di carbonio. Ciò consentirà di accelerare la transizione verso una bioeconomia europea sostenibile, colmando la lacuna tra le nuove tecnologie e la loro attuazione.Nel corso dei prossimi decenni, l'Europa sarà minacciata da una crescente concorrenza per le risorse naturali limitate e finite, dagli effetti dei cambiamenti climatici, in particolare sui sistemi di produzione primaria (agricoltura, compresi il settore zootecnico e l'orticoltura, silvicoltura, pesca e acquacoltura) e dalla necessità di fornire un approvvigionamento alimentare sostenibile e sicuro per la popolazione europea e la crescente popolazione mondiale. Si ritiene necessario un aumento del 70 % dell'offerta alimentare mondiale per nutrire i 9 miliardi di abitanti del globo entro il 2050. L'agricoltura rappresenta circa il 10 % delle emissioni di gas a effetto serra dell'Unione e, sebbene queste siano in calo in Europa, si prevede che le emissioni globali del settore agricolo aumenteranno fino al 20 % entro il 2030. È inoltre necessario che l'Europa garantisca un'offerta sufficiente e prodotta in modo sostenibile di materie prime, energia e prodotti industriali, in condizioni di decremento delle risorse fossili (la produzione di idrocarburi dovrebbe registrare un calo di circa il 60 % entro il 2050), mantenendo nel contempo la sua competitività. I rifiuti organici, stimati sino a 138 milioni di tonnellate per anno nell'Unione, dei quali fino al 40 % è collocato in discarica, rappresentano un notevole problema dai costi ingenti, nonostante il loro elevato valore aggiunto potenziale.A titolo di esempio, si stima che il 30 % di tutti i prodotti alimentari nei paesi sviluppati sia gettato nella spazzatura. Sono necessari cambiamenti sostanziali per ridurre tali cifre al 50 % nell'Unione entro il 2030. I confini nazionali sono inoltre irrilevanti per quanto attiene all'ingresso e alla diffusione di parassiti e di malattie delle piante e degli animali, comprese le zoonosi, e delle sostanze patogene di origine alimentare. Mentre sono necessarie misure nazionali efficaci di prevenzione, l'azione a livello di Unione è essenziale per il controllo finale e l'efficace funzionamento del mercato unico. La sfida è complessa, riguarda un'ampia gamma di settori interconnessi e richiede un approccio olistico e sistemico.Sono necessarie risorse biologiche sempre maggiori per soddisfare la domanda di mercato di un approvvigionamento alimentare sicuro e sano, dei biomateriali, dei biocarburanti e dei bioprodotti, che vanno dai prodotti di consumo ai prodotti chimici alla rinfusa. Tuttavia le capacità degli ecosistemi terrestri e acquatici necessarie per la produzione di tali beni sono limitate, mentre vi sono pressioni concorrenti per il loro utilizzo, e spesso la gestione non è ottimale, come dimostrano ad esempio una grave diminuzione della fertilità e del tenore di carbonio nel suolo e il depauperamento degli stock ittici. Vi è un sottoutilizzo delle possibilità di promuovere i servizi ecosistemici provenienti da terreni agricoli, foreste, acque dolci e marine integrando obiettivi agronomici, ambientali e sociali nella produzione e nel consumo sostenibili.Il potenziale delle risorse biologiche e degli ecosistemi potrebbe essere utilizzato in modo molto più sostenibile, efficace e integrato. A titolo di esempio, il potenziale della biomassa derivata dall'agricoltura, dalle foreste e dai flussi di rifiuti agricoli, acquatici, industriali e urbani potrebbe essere sfruttato meglio.In sostanza è necessaria una transizione verso un uso delle risorse biologiche ottimale e rinnovabile e verso sistemi di produzione e trasformazione primari sostenibili in grado di produrre una quantità maggiore di alimenti, fibre e altri prodotti biologici con fattori produttivi, un impatto ambientale ed emissioni di gas a effetto serra ridotte al minimo, migliorando nel contempo i servizi ecosistemici, con l'azzeramento della produzione di rifiuti e un adeguato valore sociale. L'obiettivo consiste nel realizzare sistemi di produzione alimentare che potenzino, rafforzino e alimentino la base di risorse, consentendo di generare ricchezza in modo sostenibile. Occorre comprendere più in profondità e sviluppare le risposte alle modalità di fabbricazione, distribuzione, commercializzazione, consumo e regolamentazione dei prodotti alimentari. Un elemento chiave per realizzare questo obiettivo, in Europa e al di fuori, è uno sforzo critico di ricerca e innovazione interconnesse, insieme a un dialogo costante tra gruppi politici, sociali, economici e altri gruppi di interesse.

Motivazione e valore aggiunto dell'Unione

L'agricoltura, la silvicoltura, la pesca e l'acquacoltura, congiuntamente alle bioindustrie, sono i settori principali che sostengono la bioeconomia. La bioeconomia rappresenta un mercato ampio e crescente stimato a oltre 2 000 miliardi di EUR, con venti milioni di posti di lavoro che rappresentano il 9 % dell'occupazione totale nell'Unione nel 2009. Gli investimenti in ricerca e innovazione nell'ambito di questa sfida sociale consentiranno all'Europa di svolgere un ruolo di primo piano sui mercati interessati e contribuiranno alla realizzazione degli obiettivi della strategia Europa 2020 e delle pertinente iniziative faro ""Unione dell'innovazione"" e ""Un'Europa efficiente sotto il profilo delle risorse"".Una bioeconomia europea pienamente funzionale che comprenda la produzione sostenibile di risorse rinnovabili da suoli e ambienti di pesca e acquacoltura e la loro conversione in prodotti alimentari, mangimi e fibre biologici nonché in bioenergia e relativi beni pubblici, genererà un elevato valore aggiunto dell'Unione. Parallelamente alla funzione orientata al mercato, la bioeconomia sostiene anche una vasta gamma di funzioni legate ai beni pubblici, alla biodiversità e ai servizi ecosistemici. Gestita in modo sostenibile, consente di ridurre l'impatto ambientale della produzione primaria e della catena di approvvigionamento nel suo complesso. Essa può aumentare la loro competitività, accrescere l'autonomia dell'Europa e creare posti di lavoro e opportunità commerciali essenziali per lo sviluppo rurale e costiero. La sicurezza alimentare, l'agricoltura e l'allevamento, la produzione da acquacoltura e la silvicoltura sostenibili e più generalmente le sfide collegate ala bioeconomia sono di natura globale ed europea. Azioni a livello unionale sono essenziali per riunire i gruppi necessari a conseguire l'ampiezza e la massa critica necessarie per integrare gli sforzi effettuati da un unico Stato membro o da gruppi di Stati membri. Un approccio multilaterale garantirà la necessaria interazione, fonte di arricchimento reciproco, tra ricercatori, imprese, agricoltori/produttori, consulenti e utilizzatori finali. Il livello unionale è altresì necessario al fine di assicurare la coerenza tra i settori nell'affrontare tale sfida e con forti collegamenti con le politiche dell'Unione. Il coordinamento della ricerca e dell'innovazione a livello unionale consentirà di stimolare e aiutare ad accelerare i cambiamenti necessari in tutta l'Unione.La ricerca e l'innovazione si interfacceranno con un ampio spettro di politiche dell'Unione e i relativi obiettivi e assisteranno all'elaborazione degli stessi, compresa la politica agricola comune (in particolare la politica di sviluppo rurale, le iniziative di programmazione congiunta tra cui ""Agricoltura, sicurezza alimentare e cambiamenti climatici"", ""Un'alimentazione sana per una vita sana"" e ""Mari e oceani sani e produttivi"") e il partenariato europeo per l'innovazione ""Produttività e sostenibilità in campo agricolo"", il partenariato europeo per l'innovazione in materia di risorse idriche, la politica comune della pesca, la politica marittima integrata, il programma europeo per il cambiamento climatico, la direttiva quadro sulle acque, la direttiva quadro sulla strategia per l'ambiente marino, il piano d'azione UE sulla silvicoltura, la strategia tematica per la protezione del suolo, la strategia dell'Unione per il 2020 per la diversità biologica, il piano strategico europeo per le tecnologie energetiche, la politica per l'innovazione e la politica industriale dell'Unione, la politica esterna e le politiche di aiuto allo sviluppo, le strategie fitosanitarie e in materia di sanità e benessere degli animali e i quadri normativi mirati a proteggere l'ambiente, la salute e la sicurezza, a promuovere l'efficienza sotto il profilo delle risorse e l'azione per il clima e a ridurre i rifiuti. Una migliore integrazione del ciclo completo dalla ricerca di base all'innovazione nelle pertinenti politiche dell'Unione migliorerà in maniera significativa il valore aggiunto dell'Unione, fornirà gli effetti di leva, incrementerà l'interesse della società, fornirà prodotti alimentari sani e contribuirà a sviluppare ulteriormente una gestione sostenibile dei suoli, dei mari e degli oceani e i mercati bioeconomici.Al fine di sostenere le politiche dell'Unione connesse alla bioeconomia e agevolare la governance e il controllo della ricerca e dell'innovazione, saranno realizzate attività di ricerca socioeconomica e orientate al futuro in relazione alla strategia bioeconomica, compreso lo sviluppo di indicatori, di basi di dati, di modelli, di stima e previsione, nonché una valutazione dell'impatto delle iniziative sull'economia, la società e l'ambiente.Le azioni motivate dalle sfide incentrate sui benefici sociali, economici e ambientali e sulla modernizzazione dei settori e dei mercati associati in ambito bioeconomico sono sostenute attraverso una ricerca multidisciplinare, che induce all'innovazione e allo sviluppo di strategie, prassi, prodotti sostenibili e processi nuovi. Essa persegue altresì un approccio di ampio respiro all'innovazione tecnologica, non tecnologica, organizzativa, economica e sociale, ad esempio per le modalità di trasferimento tecnologico, nuovi modelli d'impresa, marchi e servizi. Occorre riconoscere il potenziale degli agricoltori e delle PMI in termini di contributo all'innovazione. L'approccio alla bioeconomia tiene conto dell'importanza delle conoscenze locali e della diversità.

Le grandi linee delle attività

(a) Agricoltura e silvicoltura sostenibili

La finalità è fornire prodotti alimentari, mangimi, biomassa e altre materie prime in quantità sufficienti, tutelando le risorse naturali quali l'acqua, il suolo e la biodiversità in una prospettiva europea e globale, e promuovendo servizi ecosistemici, anche per affrontare e attenuare il cambiamento climatico. Le attività si concentrano sull'aumento della qualità e del valore dei prodotti agricoli attraverso il conseguimento di un'agricoltura più sostenibile e produttiva, compresi il settore zootecnico e i sistemi forestali, che siano diversificati, resilienti e basati su un uso efficiente delle risorse (in termini di basse emissioni di carbonio e bassi apporti esterni e acqua), che proteggano le risorse naturali, producano meno residui e siano in grado di adeguarsi alle trasformazioni dell'ambiente. Le attività si concentrano inoltre sullo sviluppo di servizi, idee e politiche per fare prosperare i mezzi di sussistenza della popolazione rurale e promuovere il consumo sostenibile.In particolare per quanto riguarda la silvicoltura, l'obiettivo è quello di produrre in modo sostenibile biomassa e prodotti biologici e di fornire servizi ecosistemici, tenendo nella dovuta considerazione gli aspetti economici, ecologici e sociali della silvicoltura. Le attività si concentreranno sullo sviluppo ulteriore della produzione e della sostenibilità di sistemi forestali efficienti sotto il profilo delle risorse e funzionali al rafforzamento della resilienza delle foreste e della protezione della biodiversità, nonché in grado di soddisfare la crescente domanda di biomassa.Saranno considerati altresì l'interazione tra piante funzionali e salute e benessere, e lo sfruttamento dell'orticoltura e della silvicoltura per lo sviluppo del rinverdimento urbano.

(b) Un settore agroalimentare sostenibile e competitivo per un'alimentazione sicura e sana

L'obiettivo è soddisfare le esigenze dei cittadini e dell'ambiente in merito a prodotti alimentari sicuri, sani e a prezzi accessibili, e rendere la trasformazione, la distribuzione e il consumo dei prodotti alimentari e dei mangimi più sostenibili e più competitivo il settore alimentare, tenendo conto nel contempo della componente culturale della qualità alimentare. Le attività si concentrano su prodotti alimentari sani e sicuri per tutti, sulle scelte informate dei consumatori, su soluzioni e innovazioni alimentari per migliorare la salute e su metodi di trasformazione alimentare concorrenziali che utilizzano meno risorse e additivi e producono meno rifiuti, sottoprodotti e gas a effetto serra.

(c) Liberare il potenziale delle risorse biologiche acquatiche

L'obiettivo è quello di gestire, sfruttare in modo sostenibile e mantenere le risorse acquatiche viventi al fine di massimizzare il rendimento e i vantaggi sociali ed economici degli oceani, dei mari e delle acque interne d'Europa, proteggendo nel contempo la biodiversità. Le attività si concentrano su un contributo ottimale per garantire l'approvvigionamento alimentare mediante lo sviluppo di una pesca sostenibile e rispettosa dell'ambiente, sulla gestione sostenibile di ecosistemi che forniscono beni e servizi e su una acquacoltura europea concorrenziale e rispettosa dell'ambiente nel contesto dell'economia globale, nonché sulla promozione dell'innovazione marina e marittima attraverso le biotecnologie per stimolare la crescita ""blu"" intelligente.

(d) Bioindustrie sostenibili e competitive e sostegno allo sviluppo di una bioeconomia europea

L'obiettivo è la promozione delle bioindustrie europee a basse emissioni di carbonio, efficienti sotto il profilo delle risorse, sostenibili e competitive. Le attività si concentrano sulla promozione della bioeconomia basata sulla conoscenza mediante la trasformazione dei processi e dei prodotti industriali convenzionali in prodotti e processi biologici efficienti sotto il profilo delle risorse e dell'energia, lo sviluppo di bioraffinerie integrate di seconda generazione o di generazioni successive, l'ottimizzazione dell'uso di biomassa derivata dalla produzione primaria, compresi residui, rifiuti biologici e sottoprodotti biologici industriali e l'apertura di nuovi mercati attraverso il sostegno alla standardizzazione e ai sistemi di certificazione, nonché alle attività di regolamentazione e dimostrative/sperimentali e altri, tenendo conto delle conseguenze della bioeconomia sull'utilizzazione del terreno e sulle modifiche di destinazione del terreno, nonché delle opinioni e delle preoccupazioni della società civile.

(e) Ricerca marina e marittima trasversale

L'obiettivo è quello di aumentare l'impatto dei mari e degli oceani dell'Unione sulla società e sulla crescita economica attraverso lo sviluppo sostenibile delle risorse marine, l'uso delle varie fonti di energia marina e la grande varietà di utilizzazioni differenti del mare.Le attività sono incentrate su sfide scientifiche e tecnologiche trasversali nei settori marino e marittimo allo scopo di sbloccare il potenziale dei mari e degli oceani in tutto l'insieme delle industrie marine e marittime, proteggendo nel contempo l'ambiente e operando un adeguamento al cambiamento climatico. Un approccio strategico coordinato alla ricerca marina e marittima nell'ambito dell'insieme delle sfide e delle priorità di Orizzonte 2020 sosterrà inoltre l'attuazione delle pertinenti politiche dell'Unione al fine di contribuire al raggiungimento degli obiettivi chiave per la ""crescita blu"".";"";"H2020";"H2020-EU.3.";"";"";"2014-09-22 20:44:33";"664281" +"H2020-EU.3.1.";"fr";"H2020-EU.3.1.";"";"";"DÉFIS DE SOCIÉTÉ - Santé, évolution démographique et bien-être";"Health";"

DÉFIS DE SOCIÉTÉ - Santé, évolution démographique et bien-être

Objectif spécifique

L'objectif spécifique est d'améliorer la santé et le bien-être de tous tout au long de la vie.La santé et le bien-être de tous tout au long de la vie - enfants, adultes et personnes âgées -, des systèmes de santé et de soins de santé économiquement viables, novateurs et de qualité, intégrés dans des systèmes de sécurité sociale, et des débouchés en matière de création d'emplois et de croissance: tels sont les objectifs du soutien apporté à la recherche et à l'innovation en vue de relever ce défi, et ils représentent une composante majeure de la stratégie Europe 2020.Les coûts des systèmes de santé et d'aide sociale augmentent au sein de l'Union: les politiques de soins de santé et de prévention à tous les âges coûtent de plus en plus cher. Le nombre d'Européens âgés de plus de 65 ans devrait presque doubler, passant de 85 millions en 2008 à 151 millions d'ici 2060, et le nombre d'Européens de plus de 80 ans devrait passer de 22 millions à 61 millions sur la même période. L'une des solutions pour réduire ou maîtriser ces coûts afin qu'ils ne deviennent pas impossibles à financer est d'améliorer la santé et le bien-être de tous tout au long de la vie et, donc, de permettre une prévention, un traitement et une gestion efficaces des maladies et des handicaps.Les maladies chroniques sont des causes majeures d'incapacité, de problèmes de santé, de retraite pour cause de maladie ainsi que de décès prématuré, et représentent un coût économique et social considérable.Au sein de l'Union, les maladies cardiovasculaires font chaque année plus de 2 millions de morts et représentent un coût de plus de 192 milliards d'EUR pour l'économie, tandis que le cancer compte pour un quart du nombre de décès et est la première cause de mortalité chez les 45-64 ans. Au sein de l'Union, plus de 27 millions de personnes souffrent de diabète et plus de 120 millions de maladies rhumatismales et musculo-squelettiques. Les maladies rares demeurent un défi majeur, puisqu'elles affectent environ 30 millions de personnes à travers l'Europe. Le coût total des troubles cérébraux (y compris, à titre non exclusif, les troubles de la santé mentale, dont la dépression) a été estimé à 800 milliards d'EUR. Selon les estimations, les troubles de la santé mentale toucheraient à eux seuls 165 millions de personnes dans l'Union, pour un coût de 118 milliards d'EUR. Ces montants sont appelés à connaître une progression spectaculaire, essentiellement du fait du vieillissement de la population européenne et de l'augmentation qui en découle des cas de maladies neurodégénératives. Des facteurs relatifs à l'environnement, au travail, au mode de vie et aux conditions socio-économiques jouent un rôle dans plusieurs de ces troubles: jusqu'à un tiers de la charge de morbidité à l'échelle mondiale pourrait y être lié.Les maladies infectieuses (telles que le VIH/sida, la tuberculose et le paludisme) sont une source de préoccupation dans le monde entier. Elles représentent 41 % du 1,5 milliard d'années de vie corrigées d'incapacité dans le monde, dont 8 % concernent l'Europe. Les maladies liées à la pauvreté et négligées sont également une source de préoccupation au niveau mondial. En outre, il y a lieu de se préparer à faire face aux épidémies émergentes, aux maladies infectieuses résurgentes (y compris les maladies liées à l'eau) et à la menace que constitue la résistance croissante aux médicaments antimicrobiens. Il faudrait prendre en considération les risques accrus d'épizooties.Parallèlement, les processus de développement de médicaments et de vaccins voient leur coût augmenter et leur efficacité diminuer. Les efforts déployés pour faciliter la mise au point de médicaments et de vaccins passent notamment par des méthodes de remplacement des essais classiques de sécurité et d'efficacité. Il convient de mettre un terme aux inégalités persistantes en matière de santé, de répondre aux besoins de groupes particuliers de la population (par exemple les personnes souffrant d'une maladie rare) et de garantir l'accès de tous les Européens à des systèmes de santé et de soins efficaces et performants, indépendamment de l'âge ou du milieu.D'autres facteurs tels que l'alimentation, l'activité physique, les ressources financières, l'intégration, la participation, le capital social et le travail ont également une influence sur la santé et le bien-être; il faut dès lors d'adopter une approche globale.En raison de l'allongement de l'espérance de vie, la pyramide des âges et la structure démographique vont changer en Europe. C'est pourquoi la recherche en faveur de la santé tout au long de la vie, du vieillissement actif et du bien-être pour tous formera la pierre angulaire de l'adaptation réussie des sociétés aux changements démographiques.

Justification et valeur ajoutée de l'Union

La maladie et le handicap ne s'arrêtent pas aux frontières nationales. Un effort approprié au niveau européen sur le plan de la recherche, du développement et de l'innovation, en coopération avec les pays tiers et avec la participation de toutes les parties prenantes, y compris les patients et les utilisateurs finaux, peut, et devrait, contribuer de manière décisive à relever ces défis mondiaux, en facilitant ainsi la réalisation des objectifs du Millénaire pour le développement des Nations unies, garantir à chacun le bien-être et une meilleure santé et donner à l'Europe un rôle de premier plan sur les marchés mondiaux en rapide expansion pour ce qui est des innovations liées à la santé et au bien-être.La réponse nécessite une recherche d'excellence, afin de renforcer notre compréhension fondamentale des facteurs déterminants de la santé, de la maladie, du handicap, des conditions de travail saines, du développement et du vieillissement (y compris l'espérance de vie), ainsi qu'une traduction cohérente et généralisée des connaissances actuelles et des connaissances résultant de ces activités de recherche en produits, stratégies, interventions et services innovants, modulables, efficaces, accessibles et sûrs. La réalité de ces défis dans toute l'Europe et, souvent, dans le monde entier exige une réaction caractérisée par un appui coordonné et à long terme à la coopération entre équipes d'excellence, pluridisciplinaires et multisectorielles. Il faut en outre relever ce défi du point de vue des sciences économiques, sociales et humaines.La complexité du défi et l'interdépendance de ses composantes exigent elles aussi une réaction à l'échelle européenne. Nombre d'approches, d'outils et de technologies sont applicables à de nombreux domaines de recherche et d'innovation couverts par ce défi et sont soutenus de manière optimale au niveau européen. Ainsi en est-il, par exemple, de la compréhension de la base moléculaire des maladies, de la détermination des stratégies thérapeutiques innovantes et des systèmes modèles novateurs, de l'application pluridisciplinaire des connaissances en physique, en chimie et en biologie des systèmes, de l'établissement de cohortes sur une longue durée et de la conduite d'essais cliniques (notamment axés sur le développement et les effets des médicaments dans tous les groupes d'âge), de l'utilisation clinique des technologies en «-omique», des systèmes de biomédecine et du développement des TIC et de leurs applications dans le domaine des soins de santé, et notamment de la santé en ligne. Les exigences de certaines populations sont également mieux prises en considération lorsqu'elles sont traitées de manière intégrée, par exemple dans le cadre du développement de la médecine stratifiée et/ou personnalisée, du traitement des maladies rares ou de la fourniture de solutions en matière de vie indépendante et assistée.Pour assurer un impact maximal aux actions menées au niveau de l'Union, tout l'éventail des activités de recherche, de développement et d'innovation sera soutenu, de la recherche fondamentale aux nouvelles thérapies, essais à grande échelle, actions pilotes et de démonstration, en passant par la mise en application des connaissances sur les maladies, en mobilisant des investissements privés, aux achats publics et aux achats avant commercialisation pour les nouveaux produits, services et solutions modulables, au besoin interchangeables et soutenus par des normes précises et/ou des lignes directrices communes. Cette démarche européenne coordonnée renforcera les moyens scientifiques donnés à la recherche dans le domaine de la santé et contribuera au développement continu de l'Espace européen de la recherche. Elle interagira par ailleurs, selon les besoins, avec les activités élaborées dans le cadre du programme «Santé en faveur de la croissance», des initiatives de programmation conjointe, notamment «La recherche sur les maladies neurodégénératives», «Une alimentation saine pour une vie saine», «La résistance aux antimicrobiens» et «Vivre plus longtemps et mieux», et du partenariat d'innovation européen pour un vieillissement actif et en bonne santé.Le groupe scientifique pour la santé constituera une plateforme pour les parties prenantes axée sur la science et chargée d'apporter une contribution scientifique pour ce défi de société. Il fournira une analyse scientifique ciblée et cohérente portant sur les goulets d'étranglement dans le domaine de la recherche et de l'innovation et sur les perspectives offertes dans le cadre de ce défi de société, contribuera à définir les priorités correspondantes en matière de recherche et d'innovation, et encouragera la communauté scientifique de l'Union à participer à ces activités. Grâce à une coopération active avec les parties prenantes, le groupe contribuera à renforcer les capacités et à encourager le partage des connaissances ainsi qu'une collaboration plus étroite dans toute l'Union dans ce domaine.

Grandes lignes des activités

La promotion efficace de la santé, appuyée sur une solide base d'éléments factuels, permet de prévenir les maladies et contribue au bien-être, avec un bon rapport coût-efficacité. La promotion de la santé, du vieillissement actif, du bien-être et de la prévention des maladies dépend également d'une bonne compréhension des déterminants de la santé, d'outils de prévention efficaces, d'une surveillance et d'une préparation sanitaires effectives et de programmes de dépistage efficaces. Une promotion efficace de la santé est aussi facilitée par une meilleure information des citoyens, qui encourage les choix de santé responsables.La réussite des efforts visant à prévenir, détecter rapidement, gérer, traiter et guérir les maladies, les handicaps, les fragilités et les limitations fonctionnelles s'appuie sur une compréhension fondamentale des déterminants, des causes, des processus et des impacts en jeu, ainsi que des facteurs qui sous-tendent la santé et le bien-être. Pour mieux comprendre la santé et les pathologies, il faudra établir des liens étroits entre les volets fondamentaux, cliniques, épidémiologiques et socio-économiques de la recherche. Un partage efficace des données, leur traitement harmonisé et leur mise en relation avec des études portant sur des cohortes à grande échelle sont également essentiels, tout comme l'application clinique des résultats de la recherche, en particulier par la conduite d'essais cliniques, qui devraient porter sur tous les groupes d'âge afin de garantir que les médicaments sont adaptés à leur utilisation.La réapparition d'anciennes maladies infectieuses, y compris la tuberculose, et la prévalence accrue de maladies à prévention vaccinale démontrent également la nécessité d'une approche globale des maladies liées à la pauvreté et négligées. Dans le même ordre d'idées, le problème croissant de la résistance aux médicaments antimicrobiens exige une approche globale similaire.La médecine personnalisée devrait être développée afin d'adapter les approches préventives et thérapeutiques aux besoins du patient et elle doit s'appuyer sur la détection précoce des maladies. L'adaptation aux nouvelles exigences à l'égard des secteurs de la santé et des soins liées au vieillissement de la population constitue un défi de société. Pour maintenir des soins de santé efficaces à tout âge, des efforts s'imposent en vue d'améliorer le processus décisionnel régissant les activités préventives et thérapeutiques, de répertorier les meilleures pratiques dans le secteur des soins de santé, de soutenir leur diffusion et de faciliter l'intégration des soins. Une meilleure compréhension du processus de vieillissement et la prévention des maladies liées à la vieillesse sont les conditions de base qui permettront aux Européens de rester en bonne santé et actifs tout au long de leur vie. Tout aussi importante est l'adoption à grande échelle des innovations technologiques, organisationnelles et sociales qui permettent aux personnes âgées, aux personnes atteintes de maladies chroniques et aux personnes handicapées, en particulier, de rester actives et indépendantes. De telles mesures contribueront à augmenter leur bien-être physique, social et mental et à en prolonger la durée.Toutes ces activités sont menées de manière à apporter un soutien tout au long du cycle de la recherche et de l'innovation, en renforçant la compétitivité des entreprises européennes et le développement de nouveaux débouchés. L'accent sera également mis sur l'implication de toutes les parties prenantes dans le domaine de la santé – y compris les patients, les associations de patients, et les prestataires de soins de santé – afin d'établir un programme de recherche et d'innovation qui associe activement les citoyens et reflète leurs besoins et leurs attentes.Les activités spécifiques visent notamment à: comprendre les déterminants de la santé (y compris l'alimentation, l'activité physique et le genre, ainsi que l'environnement, les facteurs socio-économiques, professionnels et climatiques) et améliorer la promotion de la santé et la prévention des maladies; comprendre les maladies et en améliorer le diagnostic et le pronostic; développer des programmes de prévention et de dépistage efficaces et améliorer l'évaluation de la prédisposition aux maladies; améliorer la surveillance des maladies infectieuses et la préparation en vue de lutter contre les épidémies et les maladies émergentes; développer de nouveaux et meilleurs vaccins et médicaments préventifs et thérapeutiques; recourir à la médecine in silico pour améliorer la gestion et la prévision des maladies; développer la médecine régénératrice et les traitements adaptés, et le traitement des maladies, y compris la médecine palliative; transférer les connaissances dans la pratique clinique et dans des actions d'innovation évolutives; améliorer l'information en matière de santé et mieux collecter et utiliser les données sanitaires, relatives aux cohortes et administratives; harmoniser les techniques d'analyse des données; aborder le vieillissement actif, et la vie indépendante et assistée; favoriser la sensibilisation et l'autonomie individuelles menant à l'autogestion de la santé; promouvoir les soins intégrés, y compris les aspects psychosociaux; améliorer les outils et méthodes scientifiques en soutien à l'élaboration des politiques et aux besoins en matière de réglementation; optimiser l'efficacité et l'efficience de la fourniture de soins de santé; et réduire les inégalités et les disparités en matière de santé par des décisions fondées sur des éléments factuels, par la diffusion des meilleures pratiques et par des technologies et approches innovantes. La participation active des prestataires de soins de santé doit être encouragée afin de garantir l'assimilation et la mise en œuvre rapides des résultats.";"";"H2020";"H2020-EU.3.";"";"";"2014-09-22 20:43:12";"664237" +"H2020-EU.2.1.5.2.";"de";"H2020-EU.2.1.5.2.";"";"";"Technologien für energieeffiziente Systeme und energieeffiziente und umweltverträgliche Gebäude";"Technologies enabling energy-efficient systems and buildings";"

Technologien für energieeffiziente Systeme und energieeffiziente und umweltverträgliche Gebäude

Reduzierung des Energieverbrauchs und der CO2-Emissionen durch Erforschung, Entwicklung und Einsatz nachhaltiger Bautechnologien und -systeme, Berücksichtigung der gesamten Wertschöpfungskette sowie Reduzierung der Umweltbelastung durch Gebäude.";"";"H2020";"H2020-EU.2.1.5.";"";"";"2014-09-22 20:42:06";"664201" +"H2020-EU.3.1.";"pl";"H2020-EU.3.1.";"";"";"WYZWANIA SPOŁECZNE - Zdrowie, zmiany demograficzne i dobrostan";"Health";"

WYZWANIA SPOŁECZNE - Zdrowie, zmiany demograficzne i dobrostan

Cel szczegółowy

Celem szczegółowym jest poprawa zdrowia i dobrostanu wszystkich obywateli przez cały czas ich życia.Zapewnienie wszystkim obywatelom (dzieciom, dorosłym i ludziom starszym) przez cały czas ich życia zdrowia i dobrostanu, gospodarczo zrównoważonych i innowacyjnych systemów opieki zdrowotnej wysokiej jakości – jako elementu systemów zabezpieczenia społecznego – oraz umożliwienie tworzenia nowych miejsc pracy i wzrostu gospodarczego to cele przyświecające wspieraniu badań naukowych i innowacji w reakcji na to wyzwanie; wsparcie to będzie stanowić istotny wkład w realizację strategii „Europa 2020”.Koszty systemów opieki zdrowotnej i społecznej w Unii rosną wraz ze wzrostem kosztów środków w zakresie opieki i profilaktyki dla wszystkich kategorii wiekowych. Oczekuje się, że liczba Europejczyków w wieku ponad 65 lat niemal podwoi się z 85 mln w 2008 r. do 151 mln do 2060 r., a w wieku ponad 80 lat wzrośnie w tym samym okresie z 22 do 61 mln. Obniżenie tych kosztów lub utrzymanie ich na poziomie możliwym do opanowania jest częściowo uzależnione od tego, czy nastąpi poprawa zdrowia i dobrostanu wszystkich obywateli przez całe ich życie, a co za tym idzie – od skutecznego zapobiegania chorobom i niepełnosprawności, ich leczenia i postępowania z nimi.Choroby i schorzenia przewlekłe stanowią główną przyczynę niepełnosprawności, złej kondycji zdrowotnej, przechodzenia na rentę, a także przedwczesnej śmierci; wiążą się też z nimi duże koszty społeczne i gospodarcze.W Unii choroby układu krążenia co roku prowadzą do ponad 2 mln zgonów i kosztują gospodarkę ponad 192 mld EUR, natomiast rak powoduje jedną czwartą zgonów i jest główną przyczyną śmierci osób w wieku od 45 do 64 lat. Ponad 27 mln osób w Unii cierpi na cukrzycę, a ponad 120 mln na choroby reumatyczne i schorzenia układu mięśniowo-szkieletowego. Poważne wyzwanie stanowią choroby rzadkie, na które w całej Europie cierpi ok. 30 mln ludzi. Całkowity koszt schorzeń mózgu (w tym m.in. wpływających na zdrowie psychiczne, takich jak depresja) szacuje się na 800 mld EUR. Same tylko zaburzenia psychiczne dotykają według szacunków 165 mln osób w Unii, co generuje koszty w wysokości 118 mld EUR. Oczekuje się, że liczby te będą gwałtownie rosły, w głównej mierze z powodu starzenia się społeczeństwa Europy i związanego z tym wzrostu zachorowań na choroby neurodegeneracyjne. W przypadku wielu spośród wymienionych schorzeń istotną rolę odgrywają czynniki środowiskowe, związane z pracą i stylem życia oraz czynniki społeczno-gospodarcze; szacuje się, że ma z nimi związek do jednej trzeciej globalnego obciążenia chorobami.Choroby zakaźne (np. HIV/AIDS, gruźlica i malaria) to problem globalny; odpowiadają one za utratę 41% spośród 1,5 mld lat życia skorygowanych niepełnosprawnością w skali świata, w tym za 8% w Europie. Problemem globalnym są także choroby związane z ubóstwem i choroby zaniedbane. Należy się również przygotować na pojawiające się epidemie, powracające choroby zakaźne (w tym choroby mające związek z wodą) i groźbę wzrostu oporności na środki przeciwdrobnoustrojowe. Należy wziąć pod uwagę zwiększone ryzyko chorób przenoszonych przez zwierzęta.Tymczasem procesy opracowania leków i szczepionek stają się coraz droższe i coraz mniej skuteczne. Dążenia do osiągnięcia większych postępów w tym zakresie polegają m.in. na stosowaniu alternatywnych metod, które mają zastąpić klasyczne próby bezpieczeństwa i skuteczności. Należy podjąć odpowiednie kroki w związku z utrzymującymi się nierównościami pod względem stanu zdrowia oraz potrzebami poszczególnych grup populacji (np. dotkniętych chorobami rzadkimi) oraz zapewnić wszystkim Europejczykom – niezależnie od ich wieku i środowiska – dostęp do systemów skutecznej i kompetentnej opieki zdrowotnej.Inne czynniki, takie jak odżywianie się, aktywność fizyczna, zamożność, integracja, zaangażowanie, kapitał społeczny i praca również mają wpływ na zdrowie i dobrostan, i konieczne jest przyjęcie podejścia całościowego.Ze względu na dłuższe średnie trwanie życia struktura wieku i ludności w Europie zmieni się. W związku z tym badania na rzecz zachowania zdrowia przez całe życie, aktywnego starzenia się i dobrostanu dla wszystkich będą fundamentem pomyślnego zaadaptowania się społeczeństw do zmian demograficznych.

Uzasadnienie i unijna wartość dodana

Choroby i niepełnosprawność nie zatrzymują się na granicach państw. Odpowiednie działania na szczeblu europejskim w zakresie badań, rozwoju i innowacji, prowadzone we współpracy z państwami trzecimi i z udziałem zainteresowanych stron, pacjentów i użytkowników końcowych, mogą i powinny wnieść zasadniczy wkład w sprostanie tym globalnym wyzwaniom, a tym samym pomóc w realizacji milenijnych celów rozwoju ONZ, zapewnić lepsze zdrowie i dobrostan wszystkim obywatelom oraz dać Europie pozycję lidera na szybko rosnących światowych rynkach innowacji w zakresie zdrowia i dobrostanu.Ta reakcja zależy od najwyższej jakości badań naukowych służących poprawie naszego fundamentalnego zrozumienia uwarunkowań zdrowia, choroby, niepełnosprawności, zdrowych warunków pracy, rozwoju i starzenia się (w tym średniego trwania życia), a także od spójnego i powszechnego wykorzystywania posiadanej i zdobywanej wiedzy w innowacyjnych, skalowalnych, skutecznych, dostępnych i bezpiecznych produktach, strategiach, interwencjach i usługach. Ponadto znaczenie tych wyzwań w całej Europie, a w wielu przypadkach także w skali globalnej, wymaga reakcji polegającej na długoterminowym i skoordynowanym wspieraniu współpracy wybitnych, multidyscyplinarnych i wielosektorowych zespołów. Konieczne jest także przeanalizowanie tego problemu z perspektywy nauk społeczno-gospodarczych i humanistycznych.Złożoność wyzwania i wzajemne powiązania między jego składnikami także wymagają reakcji na poziomie europejskim. Wiele podejść, narzędzi i technologii znajduje zastosowanie w różnych obszarach badań naukowych i innowacji związanych z tym wyzwaniem, a najskuteczniej wprowadzenie ich można wesprzeć na poziomie Unii. Dotyczy to zrozumienia molekularnej podstawy chorób, określenia innowacyjnych strategii terapeutycznych i nowatorskich systemów modelowych, multidyscyplinarnego zastosowania wiedzy z zakresu fizyki, chemii i biologii systemowej, opracowania długoterminowych kohort i prowadzenia badań klinicznych (w tym badań koncentrujących się na rozwoju i skutkach leków we wszystkich grupach wiekowych), klinicznego wykorzystania tzw. „omik”, biomedycyny systemowej oraz rozwoju ICT oraz ich praktycznego zastosowania w opiece zdrowotnej, zwłaszcza w zakresie e-zdrowia. Wymogi poszczególnych populacji najskuteczniej zaspokaja się również w sposób zintegrowany, np. w przypadku stratyfikowanych i/lub spersonalizowanych usług medycznych, leczenia rzadkich chorób oraz dostarczania rozwiązań z zastosowaniem nowoczesnych technologii w służbie osobom starszych i ułatwiających samodzielne życie.Maksymalizacja wpływu oddziaływania na poziomie Unii wymaga wsparcia pełnego zakresu działań w zakresie badań, rozwoju i innowacji od badań podstawowych naukowych poprzez wykorzystanie wiedzy o chorobach w nowych terapiach aż po wielkoskalowe próby, działania pilotażowe i demonstracyjne poprzez pozyskanie prywatnych inwestycji; na publiczne i przedkomercyjne zamówienia publiczne na nowe produkty, usługi oraz skalowalne rozwiązania, które są, w razie potrzeby, interoperacyjne, wspierane zdefiniowanymi normami i/lub wspólnymi wytycznymi. Taki skoordynowany europejski wysiłek zwiększy możliwości naukowe w zakresie badań w dziedzinie zdrowia oraz przyczyni się do bieżącego rozwoju EPB. W stosownych przypadkach będzie się on zazębiał z działaniami prowadzonymi w kontekście programu „Zdrowie na rzecz wzrostu”, inicjatywami w zakresie wspólnego programowania, takimi jak „Badania nad chorobami neurodegeneracyjnymi”, „Zdrowe odżywianie warunkiem zdrowego życia”, „Oporność na środki przeciwdrobnoustrojowe” i „Długie lata, lepsze życie”, oraz Europejskim partnerstwem na rzecz innowacji sprzyjającej aktywnemu starzeniu się w dobrym zdrowiu.Panel naukowy ds. zdrowia będzie forum naukowym dla zainteresowanych stron, przygotowującym opinie naukowe na temat przedmiotowego wyzwania społecznego. Panel będzie prowadził spójne, naukowe i skoncentrowane na konkretnych kwestiach analizy dotyczące trudności i możliwości, jakie w obszarze badań naukowych i innowacji wiążą się z tym wyzwaniem; będzie uczestniczył w określaniu własnych priorytetów w tym obszarze i zachęcał naukowców z całej Unii do udziału w jego pracach. Dzięki aktywnej współpracy z zainteresowanymi stronami panel pomoże budować potencjał i promować upowszechnianie wiedzy oraz ściślejszą, unijną współpracę w tej dziedzinie.

Ogólne kierunki działań

Skuteczna promocja zdrowia, oparta na solidnej bazie danych, zapobiega chorobom, przyczynia się do dobrostanu i jest racjonalna pod względem kosztów. Promocja zdrowia, aktywne starzenie się, dobrostan i zapobieganie chorobom zależą również od zrozumienia czynników warunkujących stan zdrowia, od skutecznych narzędzi zapobiegania, od efektywnego nadzoru nad zdrowiem i chorobami i gotowości oraz od skutecznych programów badań przesiewowych. Skuteczną promocję zdrowia ułatwia także lepsze informowanie obywateli, zachęcające do podejmowania odpowiedzialnych decyzji co do czynników warunkujących stan zdrowia.Udane działania w zakresie zapobiegania chorobom, niepełnosprawności, niedomaganiom i ograniczonej funkcjonalności, wczesnego ich wykrywania, postępowania z nimi, leczenia i terapii bazują na fundamentalnym zrozumieniu ich przyczyn, procesów i skutków, a także czynników sprzyjających zdrowiu i dobrostanowi. Lepsze zrozumienie zdrowia i chorób będzie wymagało ścisłych powiązań między badaniami podstawowymi, klinicznymi, epidemiologicznymi i społeczno-gospodarczymi. Skuteczna wymiana danych, znormalizowane przetwarzanie danych i powiązanie takich danych z prowadzonymi na dużą skalę badaniami kohortowymi również ma podstawowe znaczenie, tak samo jak korzystanie z wyników badań naukowych w praktyce klinicznej, w szczególności w ramach badań klinicznych; powinno to dotyczyć wszystkich grup wiekowych, dzięki czemu zapewni się dostosowanie leków do ich przeznaczenia.Nawrót dawnych chorób zakaźnych, w tym gruźlicy, oraz większa częstość występowania chorób, którym można zapobiegać dzięki szczepieniom jeszcze bardziej uwidaczniają konieczność przyjęcia kompleksowego podejścia do chorób zaniedbanych i związanych z ubóstwem. Podobnego kompleksowego podejścia wymaga także rosnący problem oporności na środki przeciwdrobnoustrojowe.Należy rozwijać spersonalizowane usługi medyczne w celu stworzenia nowych strategii prewencyjnych i terapeutycznych, które można dostosować do wymogów pacjentów; usługi te muszą być wsparte wczesnym wykryciem schorzenia. Wyzwaniem społecznym jest dostosowanie się do dodatkowych wymagań, przed którymi staje sektor ochrony zdrowia i sektor opieki w związku ze starzeniem się społeczeństwa. Dla skutecznego utrzymania odpowiedniego stanu zdrowia i opieki we wszystkich grupach wiekowych konieczne są działania na rzecz poprawy procesu podejmowania decyzji dotyczących zapobiegania i leczenia, określenie i wspieranie upowszechnienia najlepszych praktyk w sektorze ochrony zdrowia i sektorze opieki oraz wspieranie opieki zintegrowanej. Lepsze zrozumienie procesów starzenia się i zapobieganie chorobom związanym z wiekiem są podstawą zachowania przez obywateli Europy zdrowia i aktywności przez całe ich życie. Podobnie ważne jest powszechne wprowadzanie innowacji technologicznych, organizacyjnych i społecznych, umożliwiających w szczególności osobom starszym, osobom przewlekle chorym, a także niepełnosprawnym kontynuację aktywnego trybu życia i zachowanie niezależności. Przyczyni się to do poprawy ich dobrostanu fizycznego, społecznego i psychicznego oraz do wydłużenia czasu jego trwania.Wszystkie te działania mają być prowadzone w sposób zapewniający wsparcie w całym cyklu badań naukowych i innowacji, wzmacniający konkurencyjność przemysłu europejskiego i ułatwiający rozwój nowych możliwości rynkowych. Nacisk zostanie położony także na zaangażowanie wszystkich zainteresowanych stron z sektora ochrony zdrowia, w tym pacjentów i organizacji pacjentów oraz podmiotów świadczących opiekę zdrowotną, w celu rozwijania programu badań naukowych i innowacji, który będzie przewidywał czynny udział obywateli i odzwierciedlał ich potrzeby i oczekiwania.Wśród działań szczegółowych mają się znaleźć: poznanie czynników warunkujących stan zdrowia (w tym odżywiania się, aktywności fizycznej, związanych z problematyką płci oraz czynników środowiskowych, społeczno-gospodarczych, zawodowych oraz i związanych z klimatem); usprawnienie promocji zdrowia i lepsze zapobieganie chorobom; poznawanie chorób i udoskonalenie diagnostyki i prognostyki; rozwój skutecznych programów profilaktyki i badań przesiewowych oraz usprawnienie oceny podatności na choroby; poprawa sytuacji w zakresie nadzoru nad chorobami zakaźnymi i większa gotowość do zwalczania epidemii oraz nowo pojawiających się chorób; opracowanie nowych i skuteczniejszych szczepionek i leków o działaniu profilaktycznym i terapeutycznym; stosowanie leków in silico w celu usprawnienia postępowania z chorobami i ich przewidywania; rozwój medycyny regeneracyjnej oraz dostosowanych terapii i leczenia chorób, w tym medycyny paliatywnej; wykorzystanie wiedzy w praktyce klinicznej i skalowalne działania innowacyjne; podniesienie jakości informacji zdrowotnych oraz lepsze gromadzenie i wykorzystywanie danych kohortowych i administracyjnych dotyczących zdrowia; znormalizowane analizy danych i techniki; aktywne starzenie się oraz stosowanie nowoczesnych technologii w służbie osobom starszym i ułatwiających niezależne życie; upodmiotowienie i uświadomienie jednostki co do samodzielnego dbania o stan zdrowia; promowanie zintegrowanej opieki z uwzględnieniem aspektów psychospołecznych; ulepszenie narzędzi i metod naukowych w celu wsparcia procesu kształtowania polityki i potrzeb regulacyjnych; optymalizacja wydajności i skuteczności zapewniania opieki zdrowotnej i zmniejszenie rozbieżności i nierówności pod względem zdrowia poprzez podejmowanie decyzji w oparciu o dane i upowszechnianie najlepszych praktyk, a także poprzez innowacyjne technologie i podejścia. Należy zachęcać do aktywnego udziału w tych działaniach podmioty świadczące opiekę zdrowotną, aby zagwarantować szybkie upowszechnienie i wdrażanie wyników.";"";"H2020";"H2020-EU.3.";"";"";"2014-09-22 20:43:12";"664237" +"H2020-EU.3.1.";"it";"H2020-EU.3.1.";"";"";"SFIDE PER LA SOCIETÀ - Salute, evoluzione demografica e benessere";"Health";"

SFIDE PER LA SOCIETÀ - Salute, evoluzione demografica e benessere

Obiettivo specifico

L'obiettivo specifico consiste nel migliorare la salute e il benessere lungo tutto l'arco della vita di tutti.La salute e il benessere per tutta la durata della vita per tutti, bambini, adulti e anziani, sistemi sanitari e assistenziali di alta qualità, economicamente sostenibili e innovativi nel quadro dei sistemi di welfare, nonché opportunità di nuovi posti di lavoro e di crescita costituiscono gli obiettivi del sostegno fornito alla ricerca e all'innovazione per rispondere a questa sfida e rappresenteranno un contributo importante alla strategia Europa 2020.Il costo dei sistemi sanitari e di assistenza sociale dell'Unione aumenta poiché le misure di cura e prevenzione per tutte le fasce di età sono sempre più costose. Il numero di europei ultrasessantacinquenni dovrebbe quasi raddoppiare, dagli 85 milioni del 2008 a 151 milioni entro il 2060 e il numero degli ultraottantenni dovrebbe passare da 22 a 61 milioni nello stesso periodo. Ridurre o contenere tali costi affinché non diventino insostenibili dipende in parte dal migliorare la salute e il benessere lungo tutto l'arco della vita di tutti, e quindi da una prevenzione, una gestione e un trattamento efficaci delle malattie e della disabilità.Condizioni e malattie croniche sono fra le principali cause di disabilità, cattivo stato di salute, pensionamento per motivi di salute e morte precoce, e presentano notevoli costi economici e sociali.Nell'Unione, le malattie cardiovascolari ogni anno provocano oltre 2 milioni di decessi e determinano costi economici pari a oltre 192 miliardi di EUR, mentre il cancro è causa di un quarto di tutti i decessi ed è la prima causa di morte per le persone nella fascia di età 45-64. Oltre 27 milioni di persone nell'Unione soffrono di diabete e oltre 120 milioni sono affette da malattie reumatiche e muscoloscheletriche. Le malattie rare continuano a rappresentare una sfida importante e colpiscono circa 30 milioni di persone in tutta Europa. Il costo totale dei disturbi cerebrali (compresi, ma non limitati a quelli che riguardano la salute mentale, tra cui la depressione) è stato stimato a 800 miliardi di EUR. Si stima che i disturbi mentali da soli colpiscano 165 milioni di persone nell'Unione, con un costo di 118 miliardi di EUR. Si prevede che queste cifre aumenteranno in modo significativo, soprattutto a causa dell'invecchiamento della popolazione in Europa e del relativo aumento delle malattie neurodegenerative. I fattori ambientali, professionali, socioeconomici e legati allo stile di vita hanno importanza in diverse di queste problematiche e si ritiene che fino a un terzo del carico globale di malattia sia collegato a questi elementi.Le malattie contagiose (ad esempio HIV/AIDS, tubercolosi e malaria) rappresentano un problema di livello mondiale, poiché costituiscono il 41 % dell'1,5 miliardi di anni di vita con disabilità a livello mondiale, l'8 % dei quali in Europa. Anche le patologie trascurate e legate alla povertà rappresentano una preoccupazione globale. Le nuove epidemie, le malattie infettive riemergenti (comprese le malattie legate all'acqua) e la minaccia di un aumento della resistenza antimicrobica sono inoltre un fattore cui si deve far fronte. È opportuno prendere in considerazione il maggior rischio di patologie veterinarie.Nel frattempo i processi di sviluppo di farmaci e vaccini diventano più costosi e meno efficaci. Tra gli sforzi volti a rafforzare i risultati positivi dello sviluppo di medicinali e vaccini si annoverano i metodi alternativi di sostituzione delle prove di sicurezza e di efficacia classiche. È necessario affrontare le persistenti disuguaglianze nel settore della salute e le esigenze di gruppi specifici di popolazione (ad es. quanti soffrono di malattie rare) e garantire l'accesso a sistemi sanitari e assistenziali efficaci e competenti per tutti gli europei a prescindere dall'età o dal contesto sociale.Anche altri fattori quali l'alimentazione, l'attività fisica, il benessere economico, l'integrazione, l'impegno, il capitale sociale e il lavoro incidono sulla salute e sul benessere; è pertanto necessario adottare un approccio olistico.A causa della speranza di vita più elevata, in Europa la struttura della popolazione, anche in relazione all'età, è destinata a cambiare. Pertanto la ricerca dedicata ad approfondire le questioni della salute lungo tutto l'arco della vita, dell'invecchiamento attivo e del benessere per tutti sarà fondamentale per adeguare con esito positivo la società al cambiamento demografico.

Motivazione e valore aggiunto dell'Unione

Le malattie e le disabilità non si fermano alle frontiere nazionali. Un adeguato sforzo in termini di ricerca, sviluppo e innovazione a livello europeo, in cooperazione con i paesi terzi e con il coinvolgimento di tutti i soggetti interessati, compresi i pazienti e gli utilizzatori finali, può e dovrebbe contribuire radicalmente ad affrontare tali sfide globali, operando così per il conseguimento degli obiettivi di sviluppo del Millennio delle Nazioni Unite, a offrire salute e benessere migliori per tutti e a fare dell'Europa un leader sui mercati globali in rapida espansione delle innovazioni nel settore della salute e del benessere.La risposta dipende dall'eccellenza nel campo della ricerca al fine di migliorare la nostra comprensione fondamentale dei determinanti della salute, della malattia, della disabilità, delle condizioni di lavoro salutari, dello sviluppo e dell'invecchiamento della popolazione, compresa l'aspettativa di vita, e dalla trasformazione continua e diffusa dei risultati e delle conoscenze esistenti in prodotti, strategie, interventi e servizi efficaci, scalabili, innovativi, accessibili e sicuri. Inoltre, la pertinenza di queste sfide in Europa e, in molti casi, a livello mondiale, richiede una risposta caratterizzata da un sostegno coordinato di lungo termine alla cooperazione tra eccellenti squadre multidisciplinari e multisettoriali. È inoltre necessario affrontare la sfida dalla prospettiva delle scienze sociali ed economiche e delle discipline umanistiche.Analogamente, la complessità del problema e l'interdipendenza delle sue componenti richiede un intervento di livello europeo. Numerosi approcci, strumenti e tecnologie sono applicabili in molti settori della ricerca e dell'innovazione pertinenti a questa sfida e sono sostenuti in modo migliore a livello di Unione. Fra questi si annoverano la comprensione della base molecolare della malattia, l'individuazione di strategie terapeutiche innovative e di nuovi sistemi modello, l'applicazione multidisciplinare delle conoscenze nell'ambito della fisica, della chimica e della biologia dei sistemi, lo sviluppo di coorti a lungo termine e lo svolgimento di prove cliniche (incentrate tra l'altro sugli sviluppi e gli effetti dei medicinali in tutte le fasce di età), l'uso clinico di ""-omiche"", la biomedicina dei sistemi e lo sviluppo delle TIC e le loro applicazioni nella pratica dell'assistenza sanitaria, segnatamente la sanità elettronica. Le esigenze di popolazioni specifiche sono affrontate meglio con modalità integrate, ad esempio nello sviluppo della medicina stratificata e/o personalizzata, nel trattamento delle malattie rare, nonché nel fornire soluzioni per un modo di vita assistito e indipendente.Al fine di massimizzare l'impatto delle azioni a livello unionale, sarà fornito un sostegno all'intera gamma delle attività di ricerca, sviluppo e innovazione, dalla ricerca di base attraverso la traduzione di conoscenze sulle malattie fino alle nuove terapie, alle grandi azioni pilota, di sperimentazione e di dimostrazione, mobilitando gli investimenti privati, agli appalti pubblici e agli appalti pre-commerciali per nuovi prodotti, servizi e soluzioni scalabili, se necessario interoperabili e sostenuti da norme e/o orientamenti comuni definiti. Questo sforzo coordinato di livello europeo migliorerà le capacità scientifiche nell'ambito della ricerca sanitaria e contribuirà allo sviluppo continuo del SER. Se del caso, al momento opportuno tale sforzo interagirà con le attività sviluppate nell'ambito del programma ""Salute per la crescita"", delle iniziative di programmazione congiunta, incluse ""Ricerca sulle malattie neurodegenerative"", ""Un'alimentazione sana per una vita sana"", ""Resistenza antimicrobica"" e ""Vivere di più, vivere meglio"" nonché del partenariato europeo per l'innovazione a favore dell'invecchiamento attivo e sano.Il comitato scientifico per la sanità sarà una piattaforma di soggetti interessati a guida scientifica che elaborerà il contributo scientifico riguardante tale sfida per la società. Fornirà un'analisi coerente incentrata sulla scienza delle strozzature e delle opportunità in materia di ricerca e innovazione relative a tale sfida per la società, contribuirà alla definizione delle sue priorità di ricerca e innovazione e incoraggerà la partecipazione scientifica a livello di Unione. Attraverso la cooperazione attiva con le parti interessate, contribuirà allo sviluppo di capacità e a sostenere la condivisione delle conoscenze e il rafforzamento della collaborazione nel settore in tutta l'Unione.

Le grandi linee delle attività

Una promozione efficace della salute, sostenuta da una solida base di dati, previene la malattia, contribuisce al benessere ed è efficiente in termini di costi. La promozione della salute, l'invecchiamento attivo, il benessere e la prevenzione delle malattie dipendono anche dalla comprensione dei determinanti sanitari, da strumenti di prevenzione efficaci, da un'efficace vigilanza e preparazione in materia di salute e malattie oltre che da efficaci programmi di screening. Un'efficace promozione della salute è agevolata altresì mediante la messa a disposizione di migliori informazioni presso i cittadini che incoraggino scelte responsabili in materia di salute.Il successo degli sforzi volti a prevenire, rilevare precocemente, gestire, trattare e curare le malattie, la disabilità, la fragilità e la funzionalità ridotta si fondano sulla comprensione fondamentale dei relativi determinanti e cause, dei processi e dell'impatto, nonché dei fattori alla base delle buone condizioni di salute e del benessere. Per comprendere meglio la salute e le malattie occorrerà una stretta connessione tra le ricerche fondamentali, cliniche, epidemiologiche e socioeconomiche. È inoltre essenziale un'efficace condivisione dei dati, un trattamento standardizzato dei dati e il collegamento di questi dati con studi di coorti su larga scala, così come traslare i risultati della ricerca nella prassi clinica, in particolare attraverso la realizzazione di sperimentazioni cliniche, che dovrebbero rivolgersi a tutte le fasce di età al fine di garantire che i medicinali siano adeguati al loro impiego.La ricomparsa di malattie infettive diffuse in passato, ad esempio la tubercolosi, e l'aumento dell'incidenza di malattie a prevenzione vaccinale sottolineano ulteriormente la necessità di un approccio globale per quanto riguarda le malattie trascurate e legate alla povertà. Allo stesso modo, il crescente problema della resistenza antimicrobica richiede un approccio globale analogo.È opportuno sviluppare la medicina personalizzata, che deve essere sostenuta dal rilevamento precoce della malattia, al fine di adattare gli approcci preventivi e terapeutici alle necessità del paziente. Una sfida per la società consiste nell'adeguarsi alle ulteriori necessità relative ai settori sanitari e assistenziali causate dall'invecchiamento della popolazione. Se si intende mantenere una sanità e un'assistenza efficaci per tutte le età, è necessario compiere sforzi per migliorare il processo decisionale in tema di offerta di prevenzione e di trattamento, al fine di individuare e sostenere la diffusione delle migliori pratiche nei settori della sanità e dell'assistenza e di supportare forme integrate di assistenza. Affinché i cittadini europei possano restare sani e attivi per tutto il corso della vita è fondamentale comprendere meglio i processi di invecchiamento e prevenire le patologie connesse all'età. Di analoga importanza è l'ampia diffusione delle innovazioni tecnologiche, organizzative e sociali che consentono di coinvolgere in particolare gli anziani, le persone con malattie croniche e i disabili affinché restino attivi e indipendenti. In questo modo si contribuirà ad aumentare il loro benessere fisico, sociale e mentale e a prolungarne la durata.È necessario che tutte queste attività siano svolte in modo da fornire un sostegno lungo tutto il ciclo della ricerca e dell'innovazione, rafforzando la competitività delle industrie europee e lo sviluppo di nuove opportunità di mercato. Si porrà inoltre l'accento sulla partecipazione di tutti i soggetti interessati, tra cui i pazienti e le loro organizzazioni e gli addetti del settore sanitario, al fine di elaborare un programma di ricerca e innovazione che coinvolga attivamente i cittadini e rifletta le loro esigenze e aspettative.Le attività specifiche comprendono: la comprensione dei determinanti sanitari (inclusi i fattori nutritivi, relativi all'attività fisica e di genere, e ambientali, socioeconomici, professionali e climatici), il miglioramento della promozione della salute e della prevenzione delle malattie, la comprensione della malattia e il miglioramento della diagnosi e della prognosi, lo sviluppo di efficaci programmi di screening e prevenzione e il miglioramento della valutazione della predisposizione alle malattie, il miglioramento della sorveglianza delle malattie infettive e della capacità di risposta nella lotta contro le epidemie e le malattie emergenti, lo sviluppo di nuovi e migliori vaccini e farmaci preventivi e terapeutici, il ricorso alla medicina in silico per migliorare la gestione e la previsione delle malattie e lo sviluppo della medicina rigenerativa e di cure adeguate e del trattamento delle malattie, compresa la medicina palliativa, il trasferimento delle conoscenze verso la pratica clinica e le azioni di innovazione scalabili, il miglioramento dell'informazione in materia di salute e una raccolta e un uso migliori dei dati sanitari amministrativi e di coorte, tecniche e analisi standardizzate dei dati, l'invecchiamento attivo, e la vita indipendente e assistita, la partecipazione attiva e la consapevolezza dei singoli nell'autogestione della salute, la promozione di forme integrate di assistenza, compresi gli aspetti psicosociali, il miglioramento degli strumenti e dei metodi scientifici a sostegno delle esigenze in materia di elaborazione delle politiche e di regolamentazione, l'ottimizzazione dell'efficienza ed efficacia delle prestazioni di assistenza sanitaria, nonché la riduzione delle disparità e disuguaglianze in materia di salute grazie a processi decisionali basati su elementi fattuali e alla diffusione delle migliori pratiche, nonché a tecnologie e approcci innovativi. La partecipazione attiva degli addetti del settore sanitario deve essere incoraggiata al fine di assicurare una rapida adozione e attuazione dei risultati.";"";"H2020";"H2020-EU.3.";"";"";"2014-09-22 20:43:12";"664237" +"H2020-EU.3.5.4.";"fr";"H2020-EU.3.5.4.";"";"";"Garantir la transition vers une économie et une société «vertes» grâce à l'éco-innovation";"A green economy and society through eco-innovation";"

Garantir la transition vers une économie et une société «vertes» grâce à l'éco-innovation

L'objectif est de stimuler toutes les formes d'éco-innovation qui permettent une transition vers une économie verte. Les activités se fondent notamment sur celles menées dans le cadre du programme d'éco-innovation tout en les consolidant, et elles visent avant tout à renforcer les technologies, les procédés, les services et les produits éco-innovants, notamment à étudier les moyens de réduire les quantités de matières premières dans la production et la consommation, à surmonter les obstacles dans ce contexte, et à encourager leur adoption par le marché et leur reproduction, en accordant une attention particulière aux PME; à soutenir des politiques innovantes, des modèles économiques durables et des changements sociétaux; à mesurer et évaluer les progrès vers une économie verte; et à promouvoir une utilisation efficace des ressources grâce aux systèmes numériques.";"";"H2020";"H2020-EU.3.5.";"";"";"2014-09-22 20:48:54";"664417" +"H2020-EU.3.5.4.";"es";"H2020-EU.3.5.4.";"";"";"Posibilitar la transición hacia una economía y una sociedad ""verdes"" a través de la ecoinnovación";"A green economy and society through eco-innovation";"

Posibilitar la transición hacia una economía y una sociedad ""verdes"" a través de la ecoinnovación

El objetivo es promover todas las formas de ecoinnovación que hagan posible la transición a una economía ecológica. Las actividades aprovecharán e impulsarán, entre otras, las emprendidas en el Programa de ecoinnovación y se centrarán en: reforzar las tecnologías, procesos, servicios y productos ecoinnovadores, incluida la exploración de modos de reducir las cantidades de materias primas en la producción y el consumo, y la superación de las barreras en este contexto, e impulsar su absorción por el mercado y su renovación, prestando especial atención a las PYME; apoyar los cambios sociales, los modelos económicos sostenibles y las políticas innovadoras; medir y evaluar los progresos hacia una economía ecológica; y fomentar la eficiencia en el mar de los recursos a través de sistemas digitales.";"";"H2020";"H2020-EU.3.5.";"";"";"2014-09-22 20:48:54";"664417" +"H2020-EU.3.2.";"fr";"H2020-EU.3.2.";"";"";"DÉFIS DE SOCIÉTÉ - Sécurité alimentaire, agriculture et sylviculture durables, recherche marine, maritime et dans le domaine des eaux intérieures, et la bioéconomie";"Food, agriculture, forestry, marine research and bioeconomy";"

DÉFIS DE SOCIÉTÉ - Sécurité alimentaire, agriculture et sylviculture durables, recherche marine, maritime et dans le domaine des eaux intérieures, et la bioéconomie

Objectif spécifique

L'objectif spécifique est d'assurer des approvisionnements suffisants en aliments sûrs, sains et de qualité et en autres bioproduits, en développant des systèmes de production primaire productifs, durables et efficaces dans l'utilisation des ressources, et en promouvant les services écosystémiques associés ainsi que le rétablissement de la biodiversité, parallèlement à des chaînes d'approvisionnement, de traitement et de commercialisation compétitives et émettant peu de carbone. Une telle démarche accélérera la transition vers une bioéconomie européenne durable, en comblant l'écart entre l'émergence de nouvelles technologies et leur mise en œuvre.Au cours des décennies à venir, l'Europe sera confrontée à une concurrence croissante pour un accès à des ressources naturelles limitées, aux effets du changement climatique, notamment sur les systèmes de production primaire (agriculture, y compris élevage et horticulture, sylviculture, pêche et aquaculture), et à la nécessité d'assurer un approvisionnement alimentaire durable, sûr et fiable à la population européenne et à une population mondiale en augmentation. On estime que la production alimentaire mondiale devra augmenter de 70 % pour nourrir les 9 milliards d'habitants que comptera notre planète d'ici 2050. L'agriculture représente environ 10 % des émissions de gaz à effet de serre de l'Union et, si les émissions dues à l'agriculture diminuent en Europe, elles devraient, à l'échelle mondiale, enregistrer une hausse qui pourrait atteindre 20 % d'ici 2030. Qui plus est, l'Europe devra s'assurer un approvisionnement suffisant en matières premières, en énergie et en produits industriels générés de manière durable, dans un contexte de diminution des réserves d'énergies fossiles (la production de pétrole et de gaz liquide devrait chuter d'environ 60 % d'ici 2050), tout en maintenant sa compétitivité. Les biodéchets (qui représentent, selon les estimations, jusqu'à 138 millions de tonnes par an au sein de l'Union, dont jusqu'à 40 % sont mis en décharge) posent un problème considérable et génèrent des coûts colossaux, en dépit de leur forte valeur ajoutée potentielle.On estime par exemple à 30 % la part des aliments produits dans les pays développés qui finissent par être jetés. De profonds changements s'imposent pour réduire ce chiffre de 50 % d'ici 2030 au sein de l'Union. En outre, les frontières nationales n'empêchent aucunement l'entrée et la propagation des ravageurs et des maladies qui touchent les animaux et les végétaux, dont les zoonoses, et des agents pathogènes présents dans la chaîne alimentaire. Si des mesures de prévention efficaces à l'échelon national sont indispensables, une action au niveau de l'Union est essentielle pour garantir un contrôle optimal et assurer le bon fonctionnement du marché unique. Le défi est complexe, concerne une grande variété de secteurs interconnectés et exige une approche globale et systémique.Une quantité sans cesse croissante de ressources biologiques est nécessaire pour satisfaire la demande du marché en produits alimentaires sûrs et sains, en biomatériaux, en biocarburants et en bioproduits, qui vont des produits de consommation courante aux produits chimiques en vrac. Les capacités des écosystèmes terrestres et aquatiques nécessaires à leur production sont cependant limitées; leur utilisation fait l'objet de projets concurrents et, souvent, leur gestion n'est pas optimale, comme le montrent par exemple la baisse considérable de la teneur en carbone et de la fertilité de certains sols et l'épuisement des stocks de poissons. S'il est possible de développer les services écosystémiques fournis par les terres agricoles, les forêts, les eaux marines et les eaux douces en intégrant des objectifs agronomiques, environnementaux et sociaux dans une production et une consommation durables, ce potentiel reste sous-exploité.Le potentiel des ressources biologiques et des écosystèmes pourrait être utilisé de manière beaucoup plus durable, efficace et intégrée. Ainsi, le potentiel de l'agriculture en matière de biomasse, de la sylviculture et des flux de déchets d'origine agricole, aquatique, industrielle et urbaine pourrait être mieux exploité.Il est fondamentalement nécessaire d'assurer une transition vers une utilisation optimale et renouvelable des ressources biologiques et vers des systèmes durables de production primaire et de transformation, capables de produire davantage d'aliments, de fibres et autres bioproduits tout en limitant au maximum la consommation de ressources, l'impact environnemental et les émissions de gaz à effet de serre, en développant les services écosystémiques, en ne produisant pas de déchets et en répondant aux besoins de la société. L'objectif est de mettre en place des systèmes de production alimentaire qui consolident, renforcent et alimentent la base de ressources et qui permettent une production durable de richesse. Il importe de mieux cerner et d'améliorer la manière dont nous produisons, distribuons, commercialisons, consommons et réglementons les produits alimentaires. Pour réaliser cette transition, en Europe et au-delà, il est essentiel de lancer d'ambitieux programmes de recherche et d'innovation et d'en assurer l'interconnexion, ainsi que de nouer un dialogue permanent entre le monde politique, la société, les sphères économiques et les autres parties prenantes.

Justification et valeur ajoutée de l'Union

L'agriculture, la sylviculture, la pêche et l'aquaculture représentent, avec les bio-industries, les principaux secteurs à la base de la bioéconomie. Cette dernière représente un marché important et en expansion, d'une valeur estimée à plus de 2 000 milliards d'euros. En 2009, elle employait 20 millions de personnes au sein de l'Union, ce qui représente 9 % du total des emplois. Les investissements dans les activités de recherche et d'innovation au titre de ce défi de société permettront à l'Europe de devenir un acteur de premier plan sur les marchés concernés et contribueront à la réalisation des objectifs de la stratégie Europe 2020 et de ses initiatives phares «Une Union de l'innovation» et «Une Europe efficace dans l'utilisation des ressources».Une bioéconomie européenne pleinement opérationnelle, couvrant la production durable de ressources renouvelables issues des milieux terrestres, de la pêche et de l'aquaculture, leur transformation en produits alimentaires, en aliments pour animaux, en fibres, en bioproduits et en bioénergie, ainsi que les biens publics connexes, générera une forte valeur ajoutée de l'Union. Parallèlement aux fonctions afférentes au marché, la bioéconomie assure également un large éventail de fonctions liées à la production de biens publics, à la biodiversité et aux services écosystémiques. Gérée de manière durable, elle peut réduire l'empreinte environnementale de la production primaire et de la chaîne d'approvisionnement dans son ensemble. Elle peut en renforcer la compétitivité, accroître l'autonomie de l'Europe et fournir des emplois et des débouchés commerciaux essentiels pour contribuer au développement des zones rurales et des zones côtières. Les défis liés à la sécurité alimentaire, à l'agriculture, à l'élevage, à l'aquaculture et à la sylviculture durables et, globalement, à la bioéconomie sont d'envergure européenne et mondiale. Il est essentiel d'agir au niveau de l'Union pour constituer des pôles, en vue d'atteindre les dimensions et la masse critique nécessaires pour compléter les efforts réalisés par un seul État membre ou par des groupes d'États membres. Une approche fondée sur la participation d'une multitude d'acteurs permettra les indispensables interactions, sources d'enrichissement mutuel, entre les chercheurs, les entreprises, les agriculteurs/producteurs, les consultants et les utilisateurs finaux. Une action au niveau de l'Union s'impose par ailleurs pour que ce défi soit relevé de manière cohérente dans tous les secteurs, en veillant à établir des liens étroits avec les politiques concernées de l'Union. La coordination des activités de recherche et d'innovation au niveau européen promouvra et contribuera à accélérer les changements nécessaires dans l'ensemble de l'Union.Les activités de recherche et d'innovation recouperont un vaste éventail de politiques de l'Union et d'objectifs connexes, et en soutiendront l'élaboration, notamment la politique agricole commune (en particulier la politique de développement rural et les initiatives de programmation conjointe telles que «Agriculture, sécurité alimentaire et changement climatique», «Un régime sain pour une vie saine» et «Des mers et des océans sains et productifs») et le partenariat d'innovation européen «Productivité et développement durable de l'agriculture», le partenariat européen pour l'innovation concernant l'eau, la politique commune de la pêche, la politique maritime intégrée, le programme européen sur le changement climatique, la directive-cadre sur l'eau, la directive-cadre «Stratégie pour le milieu marin», le plan d'action sylvicole de l'Union, la stratégie thématique pour la protection des sols, la stratégie de l'Union en matière de biodiversité à l'horizon 2020, le plan stratégique pour les technologies énergétiques, les politiques industrielles et d'innovation de l'Union, les politiques extérieure et d'aide au développement, les stratégies phytosanitaires, les stratégies relatives à la santé et au bien-être des animaux, et les cadres réglementaires visant à préserver l'environnement, la santé et la sécurité, à soutenir une utilisation efficace des ressources et la lutte contre le changement climatique ainsi qu'à réduire la production de déchets. Une meilleure intégration de l'ensemble du cycle allant de la recherche fondamentale à l'innovation dans les politiques connexes de l'Union améliorera sensiblement leur valeur ajoutée européenne, produira des effets de levier, renforcera l'intérêt qu'elles présentent pour la société, permettra de fournir des produits alimentaires sains et contribuera à promouvoir la gestion durable des terres, des mers et des océans et les marchés relatifs à la bioéconomie.Afin de soutenir les politiques de l'Union liées à la bioéconomie et de faciliter la gestion et le suivi de la recherche et de l'innovation, des activités de recherche socio-économique et de prospective seront menées en lien avec la stratégie relative à la bioéconomie, comprenant notamment le développement d'indicateurs, de bases de données et de modèles, des travaux d'anticipation et de prévision, ainsi qu'une analyse de l'impact des initiatives sur l'économie, la société et l'environnement.Les actions axées sur les défis qui mettent l'accent sur les avantages socio-économiques et environnementaux, sur la modernisation des secteurs liés à la bioéconomie et sur les marchés sont soutenues au moyen d'activités de recherche pluridisciplinaires, qui favorisent l'innovation et conduisent au développement de stratégies, pratiques, produits durables et processus nouveaux. Ces activités portent sur l'innovation au sens large, couvrant aussi bien l'innovation technologique, non technologique, organisationnelle, économique et sociale que, par exemple, les modalités des transferts technologiques, modèles d'entreprise, stratégies de marque et services innovants. Il y a lieu de reconnaître le potentiel que représentent les agriculteurs et les PME en termes de contribution à l'innovation. L'approche de la bioéconomie tient compte de l'importance des connaissances locales et de la diversité.

Grandes lignes des activités

(a) Agriculture et sylviculture durables

L'objectif est de fournir en suffisance des aliments pour les hommes et les animaux, de la biomasse et d'autres matières premières tout en préservant les ressources naturelles, telles que l'eau, les sols et la biodiversité, dans une perspective européenne et mondiale, et en renforçant les services écosystémiques, notamment en s'efforçant de lutter contre le changement climatique et de l'atténuer. Les activités viseront à augmenter la qualité et la valeur des produits agricoles en mettant en œuvre une agriculture plus durable et plus productive, y compris des systèmes d'élevage et de sylviculture qui soient diversifiés, résistants et efficaces dans l'utilisation des ressources (en termes de faible émission de carbone, de faible apport extérieur et de consommation d'eau), protègent les ressources naturelles, produisent moins de déchets et puissent s'adapter à un environnement en transformation. Elles seront en outre axées sur le développement des services, des concepts et des politiques qui aideront les populations rurales à prospérer et elles viseront à favoriser une consommation compatible avec le développement durable.Dans le domaine de la sylviculture en particulier, l'objectif est de produire de la biomasse et des bioproduits et de fournir des services écosystémiques de façon durable, tout en tenant compte des aspects économiques, écologiques et sociaux de ce secteur. Les activités seront axées sur le développement de la production et de la durabilité de systèmes sylvicoles qui soient économes en ressources et de nature à renforcer la résilience des forêts ainsi que la protection de la biodiversité, et qui puissent répondre à la hausse de la demande de biomasse.En outre, on prendra en considération l'interaction entre les plantes fonctionnelles, d'une part, et la santé et le bien-être, d'autre part, ainsi que l'exploitation de l'horticulture et de la sylviculture pour le développement de la place du végétal dans les villes.

(b) Un secteur agro-alimentaire durable et compétitif pour une alimentation sûre et saine

L'objectif est de répondre aux demandes des citoyens, qui recherchent des aliments sûrs, sains et à prix abordable, ainsi qu'aux besoins environnementaux, de renforcer le caractère durable des activités de transformation, de distribution et de consommation des produits destinés à l'alimentation humaine et animale et d'accroître la compétitivité du secteur de l'alimentation tout en tenant compte des aspects culturels liés à la qualité des aliments. Les activités se concentrent sur la production d'aliments sûrs et sains pour tous, sur la possibilité pour les consommateurs de faire des choix éclairés, sur des solutions et des innovations diététiques permettant d'améliorer la santé, ainsi que sur le développement de méthodes de transformation des aliments compétitives, nécessitant moins de ressources et d'additifs et générant moins de sous-produits, de déchets et de gaz à effet de serre.

(c) Exploiter le potentiel des ressources aquatiques vivantes

L'objectif est de gérer, d'exploiter de manière durable et de préserver ces ressources de façon à maximiser les retombées et les bénéfices économiques et sociaux générés par les océans, les mers et les eaux intérieures de l'Europe tout en protégeant la biodiversité. Les activités se concentrent sur la meilleure façon de contribuer à la sécurité de l'approvisionnement en denrées alimentaires dans le contexte de l'économie mondiale, en développant une pêche durable et écologique, une gestion durable des écosystèmes fournissant des biens et des services ainsi qu'une aquaculture européenne compétitive et respectueuse de l'environnement, ainsi que sur la promotion de l'innovation marine et maritime grâce aux biotechnologies, en vue d'alimenter une croissance intelligente et «bleue».

(d) Des bio-industries durables et compétitives et une aide à la création d'une bioéconomie européenne

L'objectif est de promouvoir des bio-industries européennes à faibles émissions de carbone, qui soient économes en ressources, durables et compétitives. Les activités visent à promouvoir la bioéconomie basée sur la connaissance en transformant les processus et les produits industriels conventionnels en bioproduits économes en ressources et en énergie, en développant des bioraffineries intégrées de deuxième génération ou d'une génération ultérieure, en optimisant l'utilisation de la biomasse issue de la production primaire, y compris des résidus, des biodéchets et des sous-produits des bio-industries, et en assurant l'ouverture de nouveaux marchés en soutenant les systèmes de normalisation et de certification, ainsi que les activités de réglementation, de démonstration/d'essai en plein champ et autres, tout en prenant en considération les implications de la bioéconomie sur l'utilisation des sols et les changements en la matière, ainsi que les avis et préoccupations de la société civile.

(e) Recherche marine et maritime à caractère transversal

L'objectif est d'augmenter l'effet des mers et des océans de l'Union sur la société et la croissance économique grâce à l'exploitation durable des ressources marines ainsi qu'à l'utilisation des différentes sources d'énergie marine et aux très nombreux modes d'exploitation des mers.Les activités se concentrent sur les enjeux scientifiques et technologiques transversaux dans le domaine marin et maritime en vue de libérer le potentiel des mers et des océans pour tous les secteurs industriels marins et maritimes, tout en protégeant l'environnement et en veillant à l'adaptation au changement climatique. Une approche stratégique coordonnée pour la recherche marine et maritime à travers tous les défis et priorités d'Horizon 2020 soutiendra également la mise en œuvre des politiques concernées de l'Union afin de contribuer à atteindre les objectifs clés en matière de croissance bleue.";"";"H2020";"H2020-EU.3.";"";"";"2014-09-22 20:44:33";"664281" +"H2020-EU.3.5.2.";"pl";"H2020-EU.3.5.2.";"";"";"Ochrona środowiska, zrównoważone gospodarowanie zasobami naturalnymi, wodą, bioróżnorodnością i ekosystemami";"Protection of the environment";"

Ochrona środowiska, zrównoważone gospodarowanie zasobami naturalnymi, wodą, bioróżnorodnością i ekosystemami

Celem jest dostarczenie wiedzy i narzędzi na potrzeby zarządzania i ochrony zasobów naturalnych zapewniający celem osiągnięcia trwałej równowagi między ograniczonymi zasobami a obecnymi i przyszłymi potrzebami społeczeństwa i gospodarki. Działania mają koncentrować się na: poszerzaniu wiedzy na temat bioróżnorodności i funkcjonowania ekosystemów, ich interakcji z systemami społecznymi i roli w zakresie zrównoważenia gospodarki i dobrostanu ludzi; opracowaniu zintegrowanych podejść do zrównoważonego zarządzania wyzwaniami związanymi z wodą oraz przejściu do zrównoważonego zarządzania zasobami wodnymi i usługami w tym zakresie, a także zapewnieniu wiedzy i narzędzi na potrzeby skutecznego procesu decyzyjnego i udziału społeczeństwa.";"";"H2020";"H2020-EU.3.5.";"";"";"2014-09-22 20:48:20";"664399" +"H2020-EU.2.1.5.2.";"it";"H2020-EU.2.1.5.2.";"";"";"Tecnologie per sistemi efficienti sul piano energetico ed edifici con un basso impatto ambientale";"Technologies enabling energy-efficient systems and buildings";"

Tecnologie per sistemi efficienti sul piano energetico ed edifici con un basso impatto ambientale

Ridurre il consumo di energia e le emissioni di CO2 mediante la ricerca, lo sviluppo e la diffusione di tecnologie e sistemi di costruzione sostenibili, in grado di far fronte all'intera catena di valore, riducendo altresì l'incidenza globale degli edifici sull'ambiente.";"";"H2020";"H2020-EU.2.1.5.";"";"";"2014-09-22 20:42:06";"664201" +"H2020-EU.1.4.";"pl";"H2020-EU.1.4.";"";"";"DOSKONAŁA BAZA NAUKOWA - Infrastruktura badawcza";"Research Infrastructures";"

DOSKONAŁA BAZA NAUKOWA - Infrastruktura badawcza

Cel szczegółowy

Celem szczegółowym jest zapewnienie Europie światowej klasy infrastruktury badawczej, dostępnej dla wszystkich naukowców w Europie i poza jej granicami, oraz pełne wykorzystanie jej potencjału w zakresie rozwoju nauki i innowacji.Infrastruktura badawcza to kluczowy czynnik warunkujący konkurencyjność Europy w pełnym przekroju dziedzin nauki, istotny również dla innowacji opartych na nauce. Badania naukowe w wielu obszarach nie są możliwe bez dostępu do superkomputerów, narzędzi analitycznych, źródeł promieniowania dla nowych materiałów, pomieszczeń czystych i zaawansowanej metrologii do badań nanotechnologicznych, specjalnie wyposażonych laboratoriów do badań biologicznych i medycznych, banków danych do badań genomicznych i badań z zakresu nauk społecznych, obserwatoriów i czujników do badań z zakresu nauk o Ziemi i środowisku, szybkich szerokopasmowych sieci do przesyłu danych itd. Infrastruktura badawcza jest konieczna do prowadzenia badań naukowych niezbędnych do rozwiązania wielkich wyzwań społecznych. Stymuluje ona współpracę ponad granicami i między dyscyplinami oraz tworzy spójną i otwartą przestrzeń europejską dla badań internetowych. Promuje mobilność ludzi i pomysłów, łączy najlepszych naukowców z Europy i świata oraz podnosi poziom edukacji naukowej. Pobudza naukowców i innowacyjne przedsiębiorstwa do rozwoju najnowocześniejszych technologii. W ten sposób wzmacnia innowacyjny europejski przemysł zaawansowanych technologii. Stymuluje najwyższą jakość w europejskich społecznościach badawczych i innowacyjnych oraz może służyć do prezentacji wybitnych osiągnięć naukowych szerszemu społeczeństwu.Jeśli Europa chce utrzymać światowy poziom prowadzonych u siebie badań naukowych, musi zapewnić – w oparciu o wspólnie uzgodnione kryteria – odpowiednią i stabilną podstawę budowy, utrzymania i eksploatacji infrastruktury badawczej. Wymaga to zasadniczej, skutecznej współpracy między instytucjami finansującymi na szczeblu Unii, krajowym i regionalnym; w tym celu ustanowione zostaną silne powiązania z polityką spójności pozwalające na zapewnienie synergii i spójnego podejścia.Ten cel szczegółowy jest związany z podstawowym założeniem inicjatywy przewodniej „Unia innowacji”, kładącej nacisk na zasadniczą rolę, jaką światowej klasy infrastruktura badawcza odgrywa w umożliwianiu przełomowych badań naukowych i innowacji. Inicjatywa podkreśla, że budowa i funkcjonowanie infrastruktury badawczej wymaga łączenia zasobów w skali całej Europy, a w niektórych przypadkach w skali globalnej. Także inicjatywa przewodnia „Europejska agenda cyfrowa” uwypukla potrzebę wzmocnienia europejskiej infrastruktury elektronicznej oraz znaczenie rozwijania klastrów innowacyjnych dla zapewnienia Europie przewagi w dziedzinie innowacji.

Uzasadnienie i unijna wartość dodana

Nowoczesna infrastruktura badawcza jest coraz bardziej złożona i kosztowna, często wymaga też integracji różnego wyposażenia, usług i źródeł danych oraz rozległej współpracy transnarodowej. Żaden kraj w pojedynkę nie dysponuje zasobami wystarczającymi do wsparcia całej potrzebnej mu infrastruktury badawczej. W ostatnich latach poczyniono znaczne postępy w wypracowywaniu europejskiego podejścia do infrastruktury badawczej, co przejawia się ciągłym rozwojem i realizacją planu działania Europejskiego Forum Strategii ds. Infrastruktur Badawczych (ESFRI)w odniesieniu do infrastruktury, integracją i otwarciem krajowych obiektów badawczych oraz rozwojem infrastruktury elektronicznej mającej podstawowe znaczenie dla otwartej cyfrowej EPB. Sieci infrastruktury badawczej w Europie wzmacniają jej zasoby ludzkie, zapewniając światowej klasy szkolenie dla nowego pokolenia naukowców i inżynierów oraz promując interdyscyplinarną współpracę. Wspierać się będzie synergię z działaniami „Maria Skłodowska-Curie”.Dalsza rozbudowa i powszechniejsze wykorzystywanie infrastruktury badawczej na szczeblu europejskim w istotnym stopniu przyczynią się do rozwoju EPB. Państwa członkowskie wprawdzie nadal mają podstawowe znaczenie w rozwijaniu i finansowaniu infrastruktury badawczej, jednak Unia odgrywa istotną rolę polegającą na wspieraniu infrastruktury na poziomie europejskim, taką jak wspieranie koordynowania europejskiej infrastruktury badawczej, promując tworzenie nowych i zintegrowanych obiektów, umożliwiając i wspierając szeroki dostęp do infrastruktury krajowej i europejskiej oraz zapewniając spójność i skuteczność polityki regionalnej, krajowej, europejskiej i międzynarodowej. Jest to konieczne dla zapobieżenia powielaniu i rozdrobnieniu wysiłków, dla wspierania skoordynowanego i skutecznego wykorzystywania obiektów, a tam gdzie to właściwe – dla łączenia zasobów i umożliwia tym samym Europie pozyskiwanie i eksploatowanie infrastruktury badawczej na światowym poziomie.Technologie informacyjno-komunikacyjne zmieniły naukę dzięki umożliwieniu współpracy na odległość, przetwarzaniu ogromnych ilości danych, eksperymentom in silico oraz dostępowi do odległych zasobów. Badania naukowe stają się zatem coraz bardziej międzynarodowe i interdyscyplinarne, co wymaga wykorzystania technologii informacyjno-komunikacyjnych, które są ponadnarodowe, podobnie jak sama nauka.Korzyści skali i zakresu osiągane dzięki europejskiemu podejściu w zakresie budowy infrastruktury badawczej, w tym infrastruktury elektronicznej, jej wykorzystania i zarządzania nią, przyczynią się w znacznym stopniu do wzmocnienia europejskiego potencjału w zakresie badań naukowych i innowacji oraz zwiększą konkurencyjność Unii na szczeblu międzynarodowym.

Ogólne kierunki działań

Działania mają na celu budowę europejskiej infrastruktury badawczej na miarę 2020 r. i dalszej przyszłości, wspieranie jej potencjału innowacyjnego i zasobów ludzkich oraz wzmocnienie europejskiej polityki w tym zakresie.

(a) Rozwijanie europejskiej infrastruktury badawczej na miarę 2020 r. i dalszej przyszłości

Celem jest ułatwianie i wspieranie działań związanych z: (1) przygotowaniem, wdrożeniem i wykorzystaniem ESFRI oraz innych rodzajów światowej klasy infrastruktury badawczej, w tym rozwoju regionalnych obiektów partnerskich tam, gdzie istnieje znaczna wartość dodana interwencji unijnej; (2) integracją i zapewnieniem ponadnarodowego dostępu do krajowej i regionalnej infrastruktury badawczej o znaczeniu europejskim, aby naukowcy europejscy mogli z niej korzystać – niezależnie od umiejscowienia – do prowadzenia badań naukowych na najwyższym poziomie; (3) rozwijaniem, wdrażaniem i eksploatacją e-infrastruktury w celu zapewnienia najlepszych na świecie możliwości w zakresie łączenia w sieć, zdolności obliczeniowych oraz danych naukowych.

(b) Wspieranie innowacyjnego potencjału infrastruktury badawczej i jej zasobów ludzkich

Celem jest wspomaganie infrastruktury badawczej w zakresie wczesnego przyjmowania lub opracowywania najnowocześniejszych technologii, promowanie partnerstw badawczo-rozwojowych z przemysłem, ułatwianie przemysłowego wykorzystania infrastruktury badawczej oraz stymulowanie tworzenia klastrów innowacyjnych. W ramach tego działania wspiera się również szkolenie lub wymiany personelu zarządzającego infrastrukturą badawczą oraz obsługującego ją.

(c) Wzmocnienie europejskiej polityki w zakresie infrastruktury badawczej i współpracy międzynarodowej

Celem jest wspieranie partnerstw między odnośnymi decydentami a organami finansującymi, tworzenia narzędzi mapowania i monitorowania na potrzeby procesu decyzyjnego, a także wspieranie współpracy międzynarodowej. Należy wspierać europejską infrastrukturę badawczą w działaniach z zakresu stosunków międzynarodowych.Cele wymienione w działaniach pod pozycjami b) i c) są realizowane w drodze specjalnych działań, a także – w odpowiednich przypadkach – w ramach działań wypracowywanych zgodnie z działaniem pod pozycją a).";"";"H2020";"H2020-EU.1.";"";"";"2014-09-22 20:39:43";"664121" +"H2020-EU.3.5.2.";"it";"H2020-EU.3.5.2.";"";"";"Protezione dell'ambiente, gestione sostenibile delle risorse naturali e idriche, della biodiversità e degli ecosistemi";"Protection of the environment";"

Protezione dell'ambiente, gestione sostenibile delle risorse naturali e idriche, della biodiversità e degli ecosistemi

L'obiettivo è fornire le conoscenze e gli strumenti per la gestione e la protezione delle risorse naturali, al fine di conseguire un equilibrio sostenibile tra risorse limitate ed esigenze presenti e future della società e dell'economia. Le attività si concentrano sullo sviluppo della nostra comprensione della biodiversità e del funzionamento degli ecosistemi, della loro interazione con i sistemi sociali e del loro ruolo nel sostenere l'economia e il benessere umano, sullo sviluppo di approcci integrati per affrontare le sfide connesse all'acqua e la transizione verso una gestione e un uso sostenibili delle risorse e dei servizi idrici e sulla fornitura di conoscenze e strumenti che consentano un processo decisionale efficace e il coinvolgimento del pubblico.";"";"H2020";"H2020-EU.3.5.";"";"";"2014-09-22 20:48:20";"664399" +"H2020-EU.3.5.2.";"de";"H2020-EU.3.5.2.";"";"";"Umweltschutz, nachhaltige Bewirtschaftung der natürlichen Ressourcen, Wasser, biologische Vielfalt und Ökosysteme";"Protection of the environment";"

Umweltschutz, nachhaltige Bewirtschaftung der natürlichen Ressourcen, Wasser, biologische Vielfalt und Ökosysteme

Ziel ist die Bereitstellung von Wissen und Instrumenten für die Bewirtschaftung und den Schutz natürlicher Ressourcen, um ein nachhaltiges Gleichgewicht zwischen den begrenzten Ressourcen und den aktuellen und künftigen Bedürfnissen von Gesellschaft und Wirtschaft herzustellen. Schwerpunkt der Tätigkeiten ist die Vertiefung der Erkenntnisse über die biologische Vielfalt und die Funktionsweise von Ökosystemen, deren Wechselwirkungen mit sozialen Systemen und deren Aufgabe zur Sicherung der Wirtschaft und des Wohlergehens des Menschen, die Entwicklung integrierter Konzepte für die Bewältigung der Wasserprobleme sowie den Übergang zu einer nachhaltigen Bewirtschaftung und Nutzung der Wasserressourcen und -dienstleistungen sowie die Bereitstellung von Wissen und Instrumenten für eine wirksame Entscheidungsfindung und öffentliches Engagement";"";"H2020";"H2020-EU.3.5.";"";"";"2014-09-22 20:48:20";"664399" +"H2020-EU.2.1.5.2.";"es";"H2020-EU.2.1.5.2.";"";"";"Tecnologías que permitan edificios y sistemas energéticamente eficientes con bajo impacto medioambiental";"Technologies enabling energy-efficient systems and buildings";"

Tecnologías que permitan edificios y sistemas energéticamente eficientes con bajo impacto medioambiental

Reducir el consumo de energía y de las emisiones de CO2 mediante la investigación, desarrollo y despliegue de tecnologías de construcción, automatización y control sostenibles y de sistemas que aborden asimismo toda la cadena de valor, y reducir el impacto ambiental global de los edificios.";"";"H2020";"H2020-EU.2.1.5.";"";"";"2014-09-22 20:42:06";"664201" +"H2020-EU.1.4.";"it";"H2020-EU.1.4.";"";"";"ECCELLENZA SCIENTIFICA - Infrastrutture di ricerca";"Research Infrastructures";"

ECCELLENZA SCIENTIFICA - Infrastrutture di ricerca

Obiettivo specifico

L'obiettivo specifico è dotare l'Europa di infrastrutture di ricerca di livello mondiale, che siano accessibili a tutti i ricercatori in Europa e non solo e che sfruttino appieno il potenziale di progresso e innovazione scientifici.Le infrastrutture di ricerca rappresentano fattori chiave della competitività europea nell'intero spettro dei campi scientifici e sono essenziali per l'innovazione scientifica. In molti campi la ricerca è impossibile senza avere accesso ai supercomputer, agli strumenti analitici, alle fonti radianti per i nuovi materiali, ad ambienti puliti e alla metrologia avanzata per le nanotecnologie, a laboratori appositamente equipaggiati per la ricerca in campo biologico e medico, a banche di dati per la genomica e le scienze sociali, agli osservatori e a sensori per le scienze della Terra e dell'ambiente, alle reti a banda larga ad alta velocità per trasferire i dati, ecc. Le infrastrutture di ricerca sono essenziali per svolgere la ricerca necessaria per affrontare le grandi sfide per la società. Queste infrastrutture stimolano la collaborazione transfrontaliera e le discipline creano uno Spazio europeo della ricerca in linea aperto e senza soluzioni di continuità. Promuovono la mobilità delle persone e delle idee, riuniscono i migliori scienziati di tutta Europa e del mondo e rafforzano l'istruzione scientifica. Stimolano i ricercatori e le imprese innovative a sviluppare tecnologie all'avanguardia. In questo modo rafforzano l'industria innovativa ad alta tecnologia europea. Esse incanalano l'eccellenza nelle comunità di ricerca e innovazione europee e possono rappresentare vetrine scientifiche d'eccezione per la società nel suo complesso.L'Europa deve stabilire, sulla base di criteri convenuti di comune accordo, una base adeguata e stabile per costruire, mantenere e gestire le infrastrutture di ricerca se vuole che la ricerca europea resti di livello mondiale. A tal fine è necessaria una cooperazione sostanziale ed efficace fra l'Unione e i finanziatori nazionali e regionali nella quale sono necessari forti legami con la politica di coesione per garantire le sinergie e un approccio coerente.L'obiettivo specifico affronta un impegno centrale dell'iniziativa faro ""Unione dell'innovazione"", che sottolinea il ruolo di primo piano svolto dalle infrastrutture di ricerca di livello mondiale nel consentire la ricerca e innovazione di portata rivoluzionaria. L'iniziativa sottolinea la necessità di mettere in comune le risorse a livello europeo, e in taluni casi mondiale, al fine di costruire e gestire infrastrutture di ricerca. Analogamente, l'iniziativa faro ""Un'agenda digitale europea"" sottolinea l'esigenza di rafforzare le infrastrutture in rete europee e l'importanza di sviluppare poli di innovazione per creare il vantaggio innovativo europeo.

Motivazione e valore aggiunto dell'Unione

Le infrastrutture di ricerca d'avanguardia diventano sempre più costose e complesse, spesso richiedendo l'integrazione di attrezzature, fonti di dati e servizi diversi nonché un'ampia collaborazione transnazionale. Nessun paese dispone da solo delle risorse sufficienti per sostenere tutte le infrastrutture di ricerca necessarie. Negli ultimi anni l'approccio europeo alle infrastrutture di ricerca ha compiuto progressi notevoli grazie al costante sviluppo e all'attuazione della tabella di marcia del Forum strategico europeo sulle infrastrutture di ricerca (ESFRI) per le infrastrutture, che integra e apre gli impianti di ricerca nazionali e sviluppa le infrastrutture in rete alla base del SER digitale aperto. La rete delle infrastrutture di ricerca in Europa rafforza la base di capitale umano grazie alla fornitura di una formazione di livello mondiale per una nuova generazione di ricercatori e ingegneri e promuovendo la collaborazione interdisciplinare. Saranno incoraggiate le sinergie con le azioni Marie Skłodowska-Curie.Un ulteriore sviluppo e un uso più ampio delle infrastrutture di ricerca a livello europeo contribuiranno in modo significativo allo sviluppo del SER. Mentre il ruolo degli Stati membri resta centrale nello sviluppo e nel finanziamento delle infrastrutture di ricerca, l'Unione ha una parte importante nel sostegno delle infrastrutture a livello europeo, come incoraggiare il coordinamento delle infrastrutture di ricerca europee, stimolando la creazione di strutture nuove ed integrate, favorendo e sostenendo un ampio accesso alle infrastrutture nazionali ed europee e garantendo che le politiche regionali, nazionali, europee e internazionali siano coerenti ed efficaci. È necessario evitare le duplicazioni e la frammentazione degli sforzi, promuovere un uso coordinato ed efficace di tali strutture e, se del caso, mettere in comune le risorse in modo che l'Europa possa anche acquisire e gestire infrastrutture di ricerca di livello mondiale.Le TIC hanno trasformato la scienza consentendo la collaborazione a distanza, il trattamento di enormi moli di dati, la sperimentazione in silico e l'accesso a risorse distanti. La ricerca diventa pertanto sempre più transnazionale e interdisciplinare e richiede l'utilizzo di infrastrutture TIC, che sono sovranazionali come la scienza stessa.L'efficienza della scala e della portata conseguite mediante un approccio europeo alla costruzione, all'uso e alla gestione delle infrastrutture di ricerca, comprese quelle in rete, contribuirà in modo significativo a rafforzare il potenziale europeo di ricerca e innovazione e a rendere l'Unione più competitiva a livello internazionale.

Le grandi linee delle attività

Le attività mirano a sviluppare le infrastrutture europee di ricerca per il 2020 e oltre, promuovendo il loro potenziale innovativo e il capitale umano nonché rafforzando la politica europea per le infrastrutture di ricerca.

(a) Sviluppare le infrastrutture di ricerca europee per il 2020 e oltre

Gli obiettivi consistono nell'agevolare e sostenere azioni legate a: 1) la preparazione, l'attuazione e la gestione di ESFRI e di altre infrastrutture di ricerca di livello mondiale, compreso lo sviluppo di strutture partner regionali, ove vi sia un forte valore aggiunto per l'intervento dell'Unione; 2) l'integrazione e l'accesso transnazionale alle infrastrutture di ricerca nazionali e regionali di interesse europeo, in modo che gli scienziati europei possano utilizzarle, a prescindere dalla loro ubicazione, per condurre ricerche di alto livello; 3) lo sviluppo, l'introduzione e la gestione delle infrastrutture in rete per assicurare una capacità d'importanza mondiale nell'ambito delle strutture di rete, dell'elaborazione e dei dati scientifici.

(b) Promuovere il potenziale di innovazione e le risorse umane delle infrastrutture di ricerca

L'obiettivo è incoraggiare le infrastrutture di ricerca ad agire in veste di pioniere o sviluppatore nell'uso delle tecnologie di punta, promuovere partenariati R&S con l'industria, agevolare l'uso industriale delle infrastrutture di ricerca e stimolare la creazione di poli di innovazione. Tale attività mira inoltre a sostenere la formazione e/o gli scambi del personale che dirige e gestisce le infrastrutture di ricerca.

(c) Rafforzamento della politica europea in materia di infrastrutture di ricerca e della cooperazione internazionale

L'obiettivo è sostenere i partenariati fra i pertinenti responsabili politici e gli organismi di finanziamento, mappando e monitorando gli strumenti di decisione politica e le attività di cooperazione internazionale. Le infrastrutture di ricerca europee possono essere sostenute nell'ambito delle loro attività di relazioni internazionali.Gli obiettivi stabiliti nell'ambito delle attività di cui alle lettere b) e c) sono perseguiti mediante azioni ad hoc e all'interno delle azioni sviluppate nell'ambito delle attività di cui alla lettera a), ove opportuno.";"";"H2020";"H2020-EU.1.";"";"";"2014-09-22 20:39:43";"664121" +"H2020-EU.3.3.8.3.";"en";"H2020-EU.3.3.8.3.";"";"";"Demonstrate on a large scale the feasibility of using hydrogen to support integration of renewable energy sources into the energy systems, including through its use as a competitive energy storage medium for electricity produced from renewable energy sources";"";"";"";"H2020";"H2020-EU.3.3.8.";"";"";"2014-09-22 21:40:11";"665339" +"H2020-EU.1.4.";"es";"H2020-EU.1.4.";"";"";"CIENCIA EXCELENTE - Infraestructuras de investigación";"Research Infrastructures";"

CIENCIA EXCELENTE - Infraestructuras de investigación

Objetivo específico

El objetivo específico es dotar a Europa de infraestructuras de investigación de categoría mundial, accesibles a todos los investigadores de Europa y de fuera de ella, y aprovechar plenamente su potencial para el avance científico y la innovación.Las infraestructuras de investigación son factores determinantes de la competitividad de Europa en todos los ámbitos científicos, además de resultar esenciales para la innovación basada en la ciencia. En muchos ámbitos, la investigación es imposible sin acceso a superordenadores, instalaciones analíticas, fuentes de radiación para los nuevos materiales, salas limpias y metrología avanzada para las nanotecnologías, laboratorios especialmente equipados para la investigación biológica y médica, bases de datos para la genómica y las ciencias sociales, observatorios y sensores para las ciencias de la tierra y el medio ambiente, redes de banda ancha de alta velocidad para la transferencia de datos, etc. Las infraestructuras de investigación son necesarias para llevar a cabo la investigación que se precisa para afrontar los grandes retos de la sociedad. Estas infraestructuras propulsan la colaboración a través de las fronteras y las disciplinas y crean un espacio europeo abierto y sin fisuras para la investigación en línea. Fomentan la movilidad de las personas y las ideas, reuniendo a los mejores científicos de toda Europa y del mundo y favoreciendo la educación científica. Su construcción exigirá de investigadores y empresas innovadoras el desarrollo de tecnología punta. De este modo, robustecen la industria innovadora europea de alta tecnología. Impulsan la excelencia en las comunidades de investigación e innovación europeas y pueden constituir un magnífico escaparate de la ciencia ante la sociedad en general.Si Europa quiere que su investigación siga teniendo categoría mundial, debe establecer una base adecuada y estable para la construcción, mantenimiento y explotación de las infraestructuras de investigación que se asiente en criterios decididos de común acuerdo. Esto exige una cooperación sustancial y eficaz entre las entidades financiadoras de la Unión, nacionales y regionales para que puedan crearse sólidos vínculos con la política de cohesión a fin de crear sinergias y un planteamiento coherente.Este objetivo específico aborda uno de los compromisos esenciales de la iniciativa emblemática Unión por la Innovación, que subraya el papel crucial que desempeñan las infraestructuras de investigación de categoría mundial para hacer posible una investigación e innovación pioneras. La iniciativa subraya la necesidad de poner en común los recursos en Europa, y en algunos casos en todo el mundo, para construir y explotar las infraestructuras de investigación. Igualmente, la iniciativa emblemática Agenda Digital para Europa hace hincapié en la necesidad de reforzar las infraestructuras electrónicas de Europa y en la importancia de impulsar las agrupaciones de innovación para construir la ventaja innovadora de Europa.

Justificación y valor añadido de la Unión

Las infraestructuras avanzadas de investigación se están haciendo cada vez más complejas y costosas, y exigen a menudo la integración de diferentes equipos, servicios y fuentes de datos, así como una intensa colaboración transnacional. Ningún país cuenta aisladamente con recursos suficientes para sufragar todas las infraestructuras de investigación que necesita. El planteamiento europeo con respecto a las infraestructuras de investigación ha avanzado notablemente en los últimos años con el desarrollo y la aplicación constantes de la hoja de ruta del Foro Estratégico Europeo sobre Infraestructuras de Investigación (ESFRI) para las infraestructuras, la integración y apertura de las instalaciones nacionales de investigación y el desarrollo de las infraestructuras electrónicas que sustentan un EEI digital abierto. Las redes de infraestructuras de investigación en toda Europa refuerzan nuestra base de recursos humanos, facilitando formación de categoría mundial a una nueva generación de investigadores e ingenieros y promoviendo la colaboración interdisciplinaria. Se fomentarán las sinergias con las acciones Marie Skłodowska-Curie.Un mayor desarrollo y utilización de las infraestructuras de investigación a nivel europeo supondrá una contribución significativa al desarrollo del EEI. Aun cuando el papel de los Estados miembros sigue siendo central en el desarrollo y la financiación de las infraestructuras de investigación, la Unión desempeña un importante papel a la hora de prestar apoyo a la infraestructura a nivel europeo, como impulsar la coordinación de las infraestructuras de investigación distribuidas en Europa, fomentar la aparición de nuevas instalaciones integradas, permitir y respaldar un amplio acceso a las infraestructuras nacionales y europeas y asegurarse de que las políticas regional, nacional, europea e internacional sean coherentes y eficaces. Es necesario evitar la duplicación y la fragmentación de esfuerzos, fomentar la utilización coordinada y efectiva de las instalaciones y en los casos pertinentes poner en común los recursos para que Europa también pueda adquirir y explotar infraestructuras de investigación a nivel mundial.Las TIC han transformado la ciencia al permitir la cooperación a distancia, el tratamiento masivo de datos, la experimentación informática y el acceso a los recursos remotos. En consecuencia, la investigación es cada vez más transnacional e interdisciplinaria, lo que requiere el uso de infraestructuras de TIC que sean tan supranacionales como la propia ciencia.Las eficiencias de escala y alcance conseguidas aplicando un enfoque europeo a la construcción, utilización y gestión de las infraestructuras de investigación, en particular las electrónicas, supondrán una aportación importante para impulsar el potencial europeo de investigación e innovación y mejorarán la competitividad de la Unión a escala internacional.

Líneas generales de las actividades

Las actividades tendrán como objetivo el desarrollo de las infraestructuras de investigación europeas para 2020 y años posteriores, fomentando su potencial de innovación y sus recursos humanos y reforzando la política europea de infraestructuras de investigación.

(a) Desarrollar las infraestructuras de investigación europeas para 2020 y años posteriores

Se tratará de facilitar y apoyar acciones relacionadas con: (1) la preparación, la implantación y el funcionamiento del ESFRI y otras infraestructuras de investigación de categoría mundial, incluido el desarrollo de instalaciones regionales asociadas, cuando la intervención de la Unión aporte un importante valor añadido; (2) la integración de las infraestructuras de investigación nacionales y regionales de interés y el acceso transnacional a ellas, de modo que los científicos europeos puedan utilizarlas, independientemente de su ubicación, a fin de realizar una investigación del más alto nivel; (3) el desarrollo, despliegue y uso de las infraestructuras electrónicas con el fin de garantizar una capacidad de liderazgo mundial en materia de creación de redes, informática y datos científicos.

(b) Fomentar el potencial innovador de las infraestructuras de investigación y sus recursos humanos

El objetivo será instar a las infraestructuras de investigación a actuar como pioneras en la adopción o el desarrollo de tecnología punta, fomentar asociaciones de I+D con la industria, facilitar el uso industrial de las infraestructuras de investigación y estimular la creación de agrupaciones de innovación. Esta actividad también apoyará la formación y/o el intercambio del personal que gestiona y explota las infraestructuras de investigación.

(c) Reforzar la política europea de infraestructuras de investigación y la cooperación internacional

El objetivo será prestar apoyo a las asociaciones entre los responsables políticos pertinentes y los organismos de financiación, inventariar y hacer un seguimiento de las herramientas para la toma de decisiones, y también actividades de cooperación internacional. Las infraestructuras europeas de investigación podrán recibir apoyo para sus actividades de relaciones internacionales.Se perseguirán los objetivos expuestos en las líneas de actividad recogidas en las letras b) y c) mediante acciones bien determinadas, y siempre que sea pertinente mediante las acciones emprendidas a tenor de lo previsto en la línea de actividad recogida en la letra a).";"";"H2020";"H2020-EU.1.";"";"";"2014-09-22 20:39:43";"664121" +"H2020-EU.1.4.";"de";"H2020-EU.1.4.";"";"";"WISSENSCHAFTSEXZELLENZ - Forschungsinfrastrukturen";"";"

WISSENSCHAFTSEXZELLENZ - Forschungsinfrastrukturen

Einzelziel

Das Einzelziel besteht darin, Europa mit Forschungsinfrastrukturen von Weltrang auszustatten, die allen Forschern in Europa und darüber hinaus zugänglich sind, und die ihr Potenzial für den wissenschaftlichen Fortschritt und die Innovation uneingeschränkt nutzen.Forschungsinfrastrukturen sind ein wesentlicher Faktor für Europas Wettbewerbsfähigkeit in der gesamten Breite der Wissenschaftsgebiete und unerlässlich für die wissenschaftsgestützte Innovation. Forschung ist auf vielen Gebieten nicht möglich ohne beispielsweise den Zugang zu Höchstleistungsrechnern, Prüfeinrichtungen, Strahlenquellen für neue Werkstoffe, Reinräumen und modernster Messtechnik für Nanotechnologien, speziell ausgestatteten Labors für die biologische und medizinische Forschung, Datenbanken für Genomik und Sozialwissenschaften, Observatorien und Sensoren für die Geografie und die Umwelt sowie Hochgeschwindigkeits-Breitbandnetzen für die Übermittlung von Daten usw. Forschungsinfrastrukturen werden für Forschungsarbeiten benötigt, die zur Bewältigung großer gesellschaftlicher Herausforderungen notwendig sind. Sie erleichtern die Zusammenarbeit über Grenzen und Disziplinen hinweg und schaffen einen nahtlosen und offenen europäischen Raum für die Online-Forschung. Sie fördern die Mobilität von Menschen und Ideen, bringen die besten Wissenschaftler aus ganz Europa und der Welt zusammen und verbessern die wissenschaftliche Bildung. Sie stellen Forscher und innovative Unternehmen vor die Herausforderung, dem neuesten Stand der Technik entsprechende Lösungen zu entwickeln. Damit stärken sie die innovative High-Tech-Industrie in Europa. Sie sind Motor für Exzellenz innerhalb der europäischen Forschungs- und Innovationsgemeinschaften und möglicherweise auch hervorragende wissenschaftliche Anschauungsobjekte für die breite Öffentlichkeit.Europa muss auf der Grundlage gemeinsam vereinbarter Kriterien eine angemessene und stabile Grundlage für den Aufbau, die Pflege und den Betrieb von Forschungsinfrastrukturen schaffen, wenn seine Forschung weiterhin ihr Weltniveau halten soll. Hierfür bedarf es einer intensiven und wirksamen Zusammenarbeit zwischen der Union und nationalen wie auch regionalen Geldgebern, weshalb enge Verbindungen mit der Kohäsionspolitik angestrebt werden, um Synergien und Kohärenz zu gewährleisten.Dieses Einzelziel steht im Mittelpunkt der Leitinitiative ""Innovationsunion"", in der die wichtige Rolle von Forschungsinfrastrukturen von Weltrang unterstrichen wird, die bahnbrechende Forschung und Innovation möglich machen. Die Initiative betont die Notwendigkeit, europaweit, wenn nicht sogar weltweit, Ressourcen zu bündeln, um Forschungsinfrastrukturen aufzubauen und zu betreiben. Auch die Leitinitiative ""Digitale Agenda für Europa"" verweist auf die Notwendigkeit, Europas e-Infrastrukturen zu stärken und Innovationscluster aufzubauen, um Europas innovativen Vorteil auszubauen.

Begründung und Mehrwert für die Union

Forschungsinfrastrukturen nach dem neuesten Stand der Technik sind zunehmend komplex und kostspielig und erfordern die Integration unterschiedlicher Geräte, Dienste und Datenquellen sowie eine umfangreiche transnationale Zusammenarbeit. Kein Land verfügt allein über genügend Ressourcen, dass es alle von ihm benötigten Infrastrukturen unterstützen könnte. Das Konzept Europas hinsichtlich der Forschungsinfrastrukturen hat in den letzten Jahren beachtliche Fortschritte erzielt mit der kontinuierlichen Weiterentwicklung und Umsetzung des Fahrplans des Europäischen Strategieforums für Forschungsinfrastrukturen (ESFRI) für Infrastrukturen, der Integration und Öffnung nationaler Forschungseinrichtungen und der Entwicklung von e-Infrastrukturen, die einen offenen digitalen Europäischen Forschungsraum untermauern. Die europaweite Vernetzung von Forschungsinfrastrukturen stärkt Europas Basis an Humanressourcen, da sie einer neuen Generation von Forschern und Ingenieuren eine erstklassige Ausbildung bietet und die interdisziplinäre Zusammenarbeit fördert. Synergien mit den Marie-Skłodowska-Curie-Maßnahmen werden gefördert.Die Weiterentwicklung und der erweiterte Einsatz von Forschungsinfrastrukturen auf europäischer Ebene werden einen deutlichen Beitrag zum Ausbau des Europäischen Forschungsraums leisten. Wenngleich den Mitgliedstaaten nach wie vor die zentrale Aufgabe zukommt, Forschungsinfrastrukturen aufzubauen und zu finanzieren, spielt die Union eine wichtige Rolle bei der Förderung von Infrastrukturen auf europäischer Ebene, z. B. bei der Förderung der Koordinierung der europäischen Forschungsinfrastrukturen, durch die Unterstützung des Entstehens neuer und integrierter Einrichtungen, bei der Ermöglichung und Unterstützung eines breiten Zugangs zu nationalen und europäischen Infrastrukturen und der Gewährleistung von Kohärenz und Wirksamkeit regionaler, nationaler, europäischer und internationaler Strategien. Es ist notwendig, Überschneidungen und Fragmentierungen der Anstrengungen zu vermeiden, die koordinierte und effektive Nutzung der Einrichtungen zu fördern und gegebenenfalls Ressourcen zu bündeln, so dass Europa auch Forschungsinfrastrukturen von Weltrang erwerben und betreiben kann.IKT haben einen Wandel in der Wissenschaft bewirkt, indem sie Fernzusammenarbeit, die Verarbeitung von immensen Datenmengen, In-silico-Experimente und Zugang zu weit entfernten Ressourcen ermöglichen. Die Forschung findet vermehrt länder- und disziplinübergreifend statt und benötigt dafür IKT-Infrastrukturen, die ebenso supranational wie die Wissenschaft selbst sind.Die durch ein europäisches Konzept für Bau, Nutzung und Verwaltung von Forschungsinfrastrukturen, auch von e-Infrastrukturen, erzielten Einsparungen aufgrund von Skalen- und Verbundeffekten werden sich spürbar auf die Steigerung des europäischen Forschungs- und Innovationspotenzials auswirken und die internationale Wettbewerbsfähigkeit der Union erhöhen.

Einzelziele und Tätigkeiten in Grundzügen

Ziel der Tätigkeiten ist der Aufbau europäischer Forschungsinfrastrukturen bis zum Jahr 2020 und darüber hinaus, die Förderung ihres Innovationspotenzials und ihrer Humanressourcen und die Stärkung der Politik auf dem Gebiet der europäischen Forschungsinfrastrukturen.

(a)Ausbau der europäischen Forschungsinfrastrukturen bis 2020 und darüber hinaus

Ziel ist die Begünstigung und Unterstützung von Maßnahmen im Zusammenhang mit: (1) Konzeption, Verwirklichung und Betrieb des ESFRI und anderer Forschungsinfrastrukturen von Weltrang, einschließlich des Aufbaus regionaler Partnereinrichtungen in Fällen, in denen mit dem Unionsbeitrag ein erheblicher Zusatznutzen verbunden ist; (2) Integration nationaler und regionaler Forschungsinfrastrukturen von europäischem Interesse und Eröffnung des transnationalen Zugangs zu diesen, so dass sie von den europäischen Wissenschaftlern – ungeachtet ihres Standorts – für die Spitzenforschung genutzt werden können; (3) Entwicklung, Aufbau und Betrieb von e-Infrastrukturen, um weltweit eine Führungsrolle in den Bereichen Vernetzung, EDV und wissenschaftliche Daten einzunehmen.

(b) Steigerung des Innovationspotenzials der Forschungsinfrastrukturen und ihrer Humanressourcen

Ziel ist es, Forschungsinfrastrukturen dazu zu ermuntern, Spitzentechnologien in einem frühen Stadium einzusetzen oder zu entwickeln, FuE-Partnerschaften mit der Industrie zu fördern, die industrielle Nutzung von Forschungsinfrastrukturen zu erleichtern und Anreize für die Schaffung von Innovationsclustern zu geben. Unterstützt werden auch Ausbildung bzw. der Austausch von Personal, das Forschungsinfrastrukturen leitet oder betreibt.

(c) Stärkung der europäischen Forschungsinfrastrukturpolitik und der internationalen Zusammenarbeit

Ziel ist die Unterstützung von Partnerschaften zwischen den zuständigen politischen Entscheidungsträgern und Fördergremien, die Bestandsaufnahme und Überwachung von Instrumenten für die Entscheidungsfindung sowie die Unterstützung der internationalen Zusammenarbeit. Die europäischen Forschungsinfrastrukturen können bei ihren Tätigkeiten im Rahmen internationaler Beziehungen unterstützt werden.Die unter den Buchstaben b und c aufgeführten Ziele werden durch spezifische Maßnahmen sowie gegebenenfalls im Rahmen der unter Buchstabe a dargelegten Maßnahmen verfolgt.";"";"H2020";"H2020-EU.1.";"";"";"2014-09-22 20:39:43";"664121" +"H2020-EU.1.4.2.1.";"en";"H2020-EU.1.4.2.1.";"";"";"Exploiting the innovation potential of research infrastructures";"";"";"";"H2020";"H2020-EU.1.4.2.";"";"";"2014-09-22 20:40:04";"664133" +"H2020-EU.1.4.";"en";"H2020-EU.1.4.";"";"";"EXCELLENT SCIENCE - Research Infrastructures";"Research Infrastructures";"

EXCELLENT SCIENCE - Research Infrastructures

Specific objective

The specific objective is to endow Europe with world-class research infrastructures which are accessible to all researchers in Europe and beyond and which fully exploit their potential for scientific advance and innovation.Research infrastructures are key determinants of Europe's competitiveness across the full breadth of scientific domains and essential to science-based innovation. In many fields research is impossible without access to supercomputers, analytical facilities, radiation sources for new materials, clean rooms and advanced metrology for nanotechnologies, specially equipped labs for biological and medical research, databases for genomics and social sciences, observatories and sensors for the Earth sciences and the environment, high-speed broadband networks for transferring data, etc. Research infrastructures are necessary to carry out the research needed to address major societal challenges. They propel collaboration across borders and disciplines and create a seamless and open European space for online research. They promote mobility of people and ideas, bring together the best scientists from across Europe and the world and enhance scientific education. They challenge researchers and innovative companies to develop state of the art technology. In this way, they strengthen Europe's high-tech innovative industry. They drive excellence within the European research and innovation communities and can be outstanding showcases of science for society at large.Europe must establish, on the basis of commonly agreed criteria, an adequate, stable base for building, maintaining and operating research infrastructures if its research is to remain world-class. This requires substantial and effective cooperation between Union, national and regional funders for which strong links with the cohesion policy will be pursued to ensure synergies and a coherent approach.This specific objective addresses a core commitment of the flagship initiative 'Innovation Union', which highlights the crucial role played by world-class research infrastructures in making ground-breaking research and innovation possible. The initiative stresses the need to pool resources across Europe, and in some cases globally, in order to build and operate research infrastructures. Equally, the flagship initiative 'Digital Agenda for Europe' emphasises the need to reinforce Europe's e-infrastructures and the importance of developing innovation clusters to build Europe's innovative advantage.

Rationale and Union added value

State-of-the-art research infrastructures are becoming increasingly complex and costly, often requiring integration of different equipment, services and data sources and extensive transnational collaboration. No single country has enough resources to support all the research infrastructures it needs. The European approach to research infrastructures has made remarkable progress in recent years with continuously developing and implementing the European Strategy Forum on Research Infrastructures (ESFRI) roadmap for infrastructures, integrating and opening national research facilities and developing e-infrastructures underpinning an open digital ERA. The networks of research infrastructures across Europe strengthen its human resource base by providing world-class training for a new generation of researchers and engineers and promoting interdisciplinary collaboration. Synergies with Marie Skłodowska-Curie actions will be encouraged.Further development and wider use of research infrastructures at European level will make a significant contribution to development of the ERA. While the role of Member States remains central in developing and financing research infrastructures, the Union plays an important part in supporting infrastructure at European level such as encouraging co-ordination of European research infrastructures, by fostering the emergence of new and integrated facilities, opening up and supporting broad access to national and European infrastructures, and making sure that regional, national, European and international policies are consistent and effective. It is necessary to avoid duplication and fragmentation of efforts, to foster coordinated and effective use of the facilities and, where appropriate, to pool resources so that Europe can also acquire and operate research infrastructures at world-class level.ICT has transformed science by enabling remote collaboration, massive data processing, in silico experimentation and access to distant resources. Research therefore becomes increasingly transnational and interdisciplinary, requiring the use of ICT infrastructures that are as supranational as science itself.The efficiencies of scale and scope achieved by a European approach to construction, use and management of research infrastructures, including e-infrastructures, will make a significant contribution to boosting Europe's research and innovation potential and make the Union more competitive at international level.

Broad lines of the activities

The activities shall aim at developing the European research infrastructures for 2020 and beyond, fostering their innovation potential and human resources and reinforcing European research infrastructure policy.

(a) Developing the European research infrastructures for 2020 and beyond

The aim shall be to facilitate and support actions linked to: (1) the preparation, implementation and operation of the ESFRI and other world-class research infrastructures, including the development of regional partner facilities, when a strong added value for Union intervention exists; (2) the integration of and transnational access to national and regional research infrastructures of European interest, so that European scientists can use them, irrespective of their location, to conduct top-level research; (3) the development, deployment and operation of e-infrastructures to ensure world-leading capability in networking, computing and scientific data.

(b) Fostering the innovation potential of research infrastructures and their human resources

The aims shall be to encourage research infrastructures to act as early adopters or developers of cutting-edge technology, to promote R&D partnerships with industry, to facilitate industrial use of research infrastructures and to stimulate the creation of innovation clusters. This activity shall also support training and/or exchanges of staff managing and operating research infrastructures.

(c) Reinforcing European research infrastructure policy and international cooperation

The aim shall be to support partnerships between relevant policymakers and funding bodies, mapping and monitoring tools for decision-making and also international cooperation activities. European research infrastructures may be supported in their international relations activities.The objectives set out under activity lines (b) and (c) shall be pursued by dedicated actions, as well as within the actions developed under activity line (a), when appropriate.";"";"H2020";"H2020-EU.1.";"";"";"2014-09-22 20:39:43";"664121" +"H2020-EU.1.4.1.1.";"en";"H2020-EU.1.4.1.1.";"";"";"Developing new world-class research infrastructures";"";"";"";"H2020";"H2020-EU.1.4.1.";"";"";"2014-09-22 20:39:50";"664125" +"H2020-EU.3.2.";"en";"H2020-EU.3.2.";"";"";"SOCIETAL CHALLENGES - Food security, sustainable agriculture and forestry, marine, maritime and inland water research, and the bioeconomy";"Food, agriculture, forestry, marine research and bioeconomy";"

SOCIETAL CHALLENGES - Food security, sustainable agriculture and forestry, marine, maritime and inland water research, and the bioeconomy

Specific objective

The specific objective is to secure sufficient supplies of safe, healthy and high quality food and other bio-based products, by developing productive, sustainable and resource-efficient primary production systems, fostering related ecosystem services and the recovery of biological diversity, alongside competitive and low-carbon supply, processing and marketing chains. This will accelerate the transition to a sustainable European bioeconomy, bridging the gap between new technologies and their implementation.Over the coming decades, Europe will be challenged by increased competition for limited and finite natural resources, by the effects of climate change, in particular on primary production systems (agriculture including animal husbandry and horticulture, forestry, fisheries and aquaculture), and by the need to provide a sustainable, safe and secure food supply for the European and an increasing global population. A 70 % increase of the world food supply is estimated to be required to feed the 9 billion global population by 2050. Agriculture accounts for about 10 % of Union greenhouse gas emissions, and while declining in Europe, global emissions from agriculture are projected to increase up to 20 % by 2030. Furthermore, Europe will need to ensure sufficient and sustainably produced supplies of raw materials, energy and industrial products, under conditions of decreasing fossil carbon resources (oil and liquid gas production expected to decrease by about 60 % by 2050), while maintaining its competitiveness. Biowaste (estimated at up to 138 million tonnes per year in the Union, of which up to 40 % is land-filled) represents a huge problem and cost, despite its high potential added value.For example, an estimated 30 % of all food produced in developed countries is discarded. Major changes are needed to reduce this amount by 50 % in the Union by 2030 (7). In addition, national borders are irrelevant in the entry and spread of animal and plant pests and diseases, including zoonotic diseases, and food borne pathogens. While effective national prevention measures are needed, action at Union level is essential for ultimate control and the effective running of the single market. The challenge is complex, affects a broad range of interconnected sectors and requires a holistic and systemic approach.More and more biological resources are needed to satisfy market demand for a secure and healthy food supply, biomaterials, biofuels and bio-based products, ranging from consumer products to bulk chemicals. However, the capacities of the terrestrial and aquatic ecosystems required for their production are limited, while there are competing claims for their utilisation, and often not optimally managed, as shown for example by a severe decline in soil carbon content and fertility and fish stock depletion. There is under-utilised scope for fostering ecosystem services from farmland, forests, marine and fresh waters by integrating agronomic, environmental and social goals into sustainable production and consumption.The potential of biological resources and ecosystems could be used in a much more sustainable, efficient and integrated manner. For examples, the potential of biomass from agriculture, forests and waste streams from agricultural, aquatic, industrial, and also municipal origins could be better harnessed.In essence, a transition is needed towards an optimal and renewable use of biological resources and towards sustainable primary production and processing systems that can produce more food, fibre and other bio-based products with minimised inputs, environmental impact and greenhouse gas emissions, enhanced ecosystem services, zero-waste and adequate societal value. The aim is establishing food production systems that strengthen, reinforce and nourish the resource base and enable sustainable wealth generation. Responses to the way food production is generated, distributed, marketed, consumed and regulated must be better understood and developed. A critical effort of interconnected research and innovation, as well as a continuous dialogue between political, social, economic and other stakeholder groups, is a key element for this to happen, in Europe and beyond.

Rationale and Union added value

Agriculture, forestry, fisheries and aquaculture together with the bio-based industries are the major sectors underpinning the bioeconomy. The bioeconomy represents a large and growing market estimated to be worth over EUR 2 trillion, providing 20 million jobs and accounting for 9 % of total employment in the Union in 2009. Investments in research and innovation under this societal challenge will enable Europe to take leadership in the concerned markets and will play a role in achieving the goals of the Europe 2020 strategy and its flagship initiatives 'Innovation Union' and 'Resource-efficient Europe'.A fully functional European bioeconomy – encompassing the sustainable production of renewable resources from land, fisheries and aquaculture environments and their conversion into food, feed, fibre bio-based products and bioenergy as well as into the related public goods - will generate high Union added value. In parallel to the market-related function, the bioeconomy sustains also a wide range of public goods functions, biodiversity and ecosystem services. Managed in a sustainable manner, it can reduce the environmental footprint of primary production and the supply chain as a whole. It can increase their competitiveness, enhance Europe's self-reliance and provide jobs and business opportunities essential for rural and coastal development. The food security, sustainable agriculture and farming, aquatic production, forestry and overall bioeconomy – related challenges are of a European and global nature. Actions at Union level are essential to bring together clusters to achieve the necessary breadth and critical mass to complement efforts made by a single Member State or groups of Member States. A multi-actor approach will ensure the necessary cross-fertilising interactions between researchers, businesses, farmers/producers, advisors and end-users. The Union level is also necessary to ensure coherence in addressing this challenge across sectors and with strong links to relevant Union policies. Coordination of research and innovation at Union level will stimulate and help to accelerate the required changes across the Union.Research and innovation will interface with and support elaboration of a wide spectrum of Union policies and related targets, including the Common Agriculture Policy (in particular the Rural Development Policy, the Joint Programming Initiatives, including ""Agriculture, Food Security and Climate Change"", ""A Healthy Diet for a Healthy Life"" and ""Healthy and Productive Seas and Oceans"") and the European Innovation Partnership 'Agricultural Productivity and Sustainability' and the European Innovation Partnership on Water, the Common Fisheries Policy, the Integrated Maritime Policy, the European Climate Change Programme, the Water Framework Directive (8), the Marine Strategy Framework Directive (9), the EU Forestry Action Plan, the Soil Thematic Strategy, the Union's 2020 Biodiversity Strategy, the Strategic Energy Technology Plan, the Union's innovation and industrial policies, external and development aid policies, plant health strategies, animal health and welfare strategies and regulatory frameworks to protect the environment, health and safety, to promote resource efficiency and climate action, and to reduce waste. A better integration of the full cycle from basic research to innovation into related Union policies will significantly improve their Union added value, provide leverage effects, increase societal relevance, provide healthy food products and help to further develop sustainable land, seas and oceans management and bioeconomy markets.For the purpose of supporting Union policies related to the bioeconomy and to facilitate governance and monitoring of research and innovation, socio-economic research and forward-looking activities will be performed in relation to the bioeconomy strategy, including development of indicators, data bases, models, foresight and forecast, and impact assessment of initiatives on the economy, society and the environment.Challenge-driven actions focusing on social, economic and environmental benefits and the modernisation of the bioeconomy associated sectors and markets shall be supported through multi-disciplinary research, driving innovation and leading to the development of new strategies, practices, sustainable products and processes. It shall also pursue a broad approach to innovation ranging from technological, non-technological, organisational, economic and social innovation to, for instance, ways for technology transfer, novel business models, branding and services. The potential of farmers and SMEs to contribute to innovation must be recognised. The approach to the bioeconomy shall take account of the importance of local knowledge and diversity.

Broad lines of activities

(a) Sustainable agriculture and forestry

The aim is to supply sufficient food, feed, biomass and other raw-materials, while safeguarding natural resources, such as water, soil and biodiversity, in a European and world-wide perspective, and enhancing ecosystems services, including coping with and mitigating climate change. The activities shall focus on increasing the quality and value of agricultural products by delivering more sustainable and productive agriculture, including animal husbandry and forestry systems, which are diverse, resilient and resource-efficient (in terms of low-carbon and low external input and water), protect natural resources, produce less waste and can adapt to a changing environment. Furthermore, the activities shall focus on developing services, concepts and policies for thriving rural livelihoods and encouraging sustainable consumption.In particular for forestry, the aim is to sustainably produce biomass and bio-based products and deliver ecosystem services, with due consideration to economic, ecological and social aspects of forestry. Activities will focus on the further development of production and sustainability of resource-efficient forestry systems which are instrumental in the strengthening of forest resilience and biodiversity protection, and which can meet increased biomass demand.The interaction of functional plants with health and well being, as well as the exploitation of horticulture and forestry for the development of urban greening, will also be considered.

(b) Sustainable and competitive agri-food sector for a safe and healthy diet

The aim is to meet the requirements of citizens and the environment for safe, healthy and affordable food, and to make food and feed processing, distribution and consumption more sustainable and the food sector more competitive while also considering the cultural component of food quality. The activities shall focus on healthy and safe food for all, informed consumer choices, dietary solutions and innovations for improved health, and competitive food processing methods that use less resources and additives and produce less by-products, waste and greenhouse gases.

(c) Unlocking the potential of aquatic living resources

The aim is to manage, sustainably exploit and maintain aquatic living resources to maximise social and economic benefits/returns from Europe's oceans, seas and inland waters while protecting biodiversity. The activities shall focus on an optimal contribution to secure food supplies by developing sustainable and environmentally friendly fisheries, on sustainable management of ecosystems providing goods and services, on competitive as well as environmentally friendly European aquaculture in the context of the global economy, and on boosting marine and maritime innovation through biotechnology to fuel smart ""blue"" growth.

(d) Sustainable and competitive bio-based industries and supporting the development of a European bioeconomy

The aim is the promotion of low-carbon, resource-efficient, sustainable and competitive European bio-based industries. The activities shall focus on fostering the knowledge-based bioeconomy by transforming conventional industrial processes and products into bio-based resource and energy efficient ones, the development of integrated second and subsequent generation biorefineries, optimising the use of biomass from primary production including residues, biowaste and bio-based industry by-products, and opening new markets through supporting standardisation and certification systems as well as regulatory and demonstration/field trial activities, while taking into account the implications of the bioeconomy on land use and land use changes, as well as the views and concerns of civil society.

(e) Cross-cutting marine and maritime research

The aim is to increase the impact of Union seas and oceans on society and economic growth through the sustainable exploitation of marine resources as well as the use of different sources of marine energy and the wide range of different uses that is made of the seas.Activities shall focus on cross-cutting marine and maritime scientific and technological challenges with a view to unlocking the potential of seas and oceans across the range of marine and maritime industries, while protecting the environment and adapting to climate change. A strategic coordinated approach for marine and maritime research across all challenges and priorities of Horizon 2020 will also support the implementation of relevant Union policies to help deliver key blue growth objectives.";"";"H2020";"H2020-EU.3.";"";"";"2014-09-22 20:44:33";"664281" +"H2020-EU.3.1.";"en";"H2020-EU.3.1.";"";"";"SOCIETAL CHALLENGES - Health, demographic change and well-being";"Health";"

SOCIETAL CHALLENGES - Health, demographic change and well-being

Specific objective

The specific objective is to improve the lifelong health and well-being of all.Lifelong health and well-being for all - children, adults and older people - high-quality, economically sustainable and innovative health and care systems, as part of welfare systems, and opportunities for new jobs and growth are the aims of the support provided to research and innovation in response to this challenge, and they will make a major contribution to the Europe 2020 strategy.The cost of Union health and social care systems is rising, with care and prevention measures in all ages increasingly expensive. The number of Europeans aged over 65 is expected to nearly double from 85 million in 2008 to 151 million by 2060, and the number of those over 80 is expected to rise from 22 to 61 million in the same period. Reducing or containing these costs so that they do not become unsustainable depends partly on improving the lifelong health and well-being of all and therefore on the effective prevention, treatment and management of disease and disability.Chronic conditions and diseases are major causes of disability, ill-health, health-related retirement and premature death, and present considerable social and economic costs.In the Union, cardiovascular disease annually accounts for more than 2 million deaths and costs the economy more than EUR 192 billion while cancer accounts for a quarter of all deaths and is the number one cause of death for people aged 45-64. Over 27 million people in the Union suffer from diabetes and over 120 million from rheumatic and musculoskeletal conditions. Rare diseases remain a major challenge, affecting approximately 30 million people across Europe. The total cost of brain disorders (including, but not limited to those affecting mental health, including depression) has been estimated at EUR 800 billion. It is estimated that mental disorders alone affect 165 million people in the Union, at a cost of EUR 118 billion. These sums are expected to rise significantly, largely as a result of Europe's ageing population and the associated increases in neurodegenerative diseases. Environmental, occupational, life-style and socio-economic factors are relevant in several of these conditions with up to one third of the global disease burden estimated to be related to these.Infectious diseases (e.g. HIV/AIDS, tuberculosis and malaria), are a global concern, accounting for 41 % of the 1,5 billion disability adjusted life years worldwide, with 8 % of these in Europe. Poverty-related and neglected diseases are also a global concern. Emerging epidemics, re-emerging infectious diseases (including water-related diseases) and the threat of increasing anti-microbial resistance must also be prepared for. Increased risks for animal-borne diseases should be considered.Meanwhile, drug and vaccine development processes are becoming more expensive and less effective. Efforts to increase the success of drug and vaccine development include alternative methods to replace classical safety and effectiveness testing. Persistent health inequalities and the needs of specific population groups (e.g. those suffering from rare diseases) must be addressed, and access to effective and competent health and care systems must be ensured for all Europeans irrespective of their age or background.Other factors, such as nutrition, physical activity, wealth, inclusion, engagement, social capital and work, also affect health and well-being, and a holistic approach must be taken.Due to higher life expectancy the age and population structure in Europe will change. Therefore, research furthering lifelong health, active ageing and well-being for all will be a cornerstone of the successful adaptation of societies to demographic change.

Rationale and Union added value

Disease and disability are not stopped by national borders. An appropriate European level research, development and innovation effort, in cooperation with third countries and with the involvement of all stakeholders, including patients and end-users, can and should make a crucial contribution to addressing these global challenges, thereby working to achieve the United Nations' Millennium Development Goals, deliver better health and well-being for all, and position Europe as a leader in the rapidly expanding global markets for health and well-being innovations.The response depends on excellence in research to improve our fundamental understanding of the determinants of health, disease, disability, healthy employment conditions, development and ageing (including of life expectancy), and on the seamless and widespread translation of the resulting and existing knowledge into innovative, scalable, effective, accessible and safe products, strategies, interventions and services. Furthermore, the pertinence of these challenges across Europe and in many cases, globally, demands a response characterised by long-term and coordinated support for co-operation between excellent, multidisciplinary and multi-sector teams. It is also necessary to address the challenge from the perspective of the social and economic sciences and humanities.Similarly, the complexity of the challenge and the interdependency of its components demand a European level response. Many approaches, tools and technologies have applicability across many of the research and innovation areas of this challenge and are best supported at Union level. These include understanding the molecular basis of disease, the identification of innovative therapeutic strategies and novel model systems, the multidisciplinary application of knowledge in physics, chemistry and systems biology, the development of long-term cohorts and the conduct of clinical trials (including focus on the development and effects of medicines in all age groups), the clinical use of ""-omics"", systems biomedicine and the development of ICT and their applications in healthcare practice, notably e-health. The requirements of specific populations are also best addressed in an integrated manner, for example in the development of stratified and/or personalised medicine, in the treatment of rare diseases, and in providing assisted and independent living solutions.To maximise the impact of Union level actions, support will be provided to the full spectrum of research, development and innovation activities from basic research through translation of knowledge on disease to new therapeutics, to large trials, piloting and demonstration actions, by mobilising private investment; to public and pre-commercial procurement for new products, services and scalable solutions, which are, when necessary, interoperable and supported by defined standards and/or common guidelines. This coordinated, European effort will increase the scientific capabilities in health research and contribute to the ongoing development of the ERA. It will also interface, as and when appropriate, with activities developed in the context of the Health for Growth Programme, the Joint Programming Initiatives, including ""Neurodegenerative Disease Research"", ""A Healthy Diet for a Healthy Life"", ""Antimicrobial resistance"" and ""More Years, Better Lives"", and the European Innovation Partnership on Active and Healthy Ageing.The Scientific Panel for Health will be a science-led stakeholder platform which elaborates scientific input concerning this societal challenge. It will provide a coherent scientific focused analysis of research and innovation bottlenecks and opportunities related to this societal challenge, contribute to the definition of its research and innovation priorities and encourage Union-wide scientific participation in it. Through active cooperation with stakeholders, it will help to build capabilities and to foster knowledge sharing and stronger collaboration across the Union in this field.

Broad lines of the activities

Effective health promotion, supported by a robust evidence base, prevents disease, contributes to well-being and is cost effective. Promotion of health, active ageing, well-being and disease prevention also depend on an understanding of the determinants of health, on effective preventive tools on effective health and disease surveillance and preparedness, and on effective screening programmes. Effective health promotion is also facilitated by the provision of better information to citizens which encourages responsible health choices.Successful efforts to prevent, detect early, manage, treat and cure disease, disability, frailty and reduced functionality are underpinned by the fundamental understanding of their determinants and causes, processes and impacts, as well as factors underlying good health and well-being. Improved understanding of health and disease will demand close linkage between fundamental, clinical, epidemiological and socio-economic research. Effective sharing of data, standardised data processing and the linkage of these data with large-scale cohort studies is also essential, as is the translation of research findings into the clinic, in particular through the conduct of clinical trials, which should address all age groups to ensure that medicines are adapted to their use.The resurgence of old infectious diseases, including tuberculosis, and the increased prevalence of vaccine-preventable diseases further underlines the need for a comprehensive approach towards poverty-related and neglected diseases. Likewise, the growing problem of anti-microbial resistance demands a similarly comprehensive approach.Personalised medicine should be developed in order to suit preventive and therapeutic approaches to patient requirements, and must be underpinned by the early detection of disease. It is a societal challenge to adjust to the further demands on health and care sectors due to the ageing population. If effective health and care is to be maintained for all ages, efforts are required to improve decision making in prevention and in treatment provision, to identify and support the dissemination of best practice in the health and care sectors, and to support integrated care. A better understanding of ageing processes and the prevention of age-related illnesses are the basis for keeping European citizens healthy and active throughout the course of their lives. Similarly important is the wide uptake of technological, organisational and social innovations empowering in particular older persons, persons with chronic diseases as well as disabled persons to remain active and independent. Doing so will contribute to increasing their physical, social, and mental well-being and lengthening the duration thereof.All of these activities shall be undertaken in such a way as to provide support throughout the research and innovation cycle, strengthening the competitiveness of the European based industries and development of new market opportunities. Emphasis will also be placed on engaging all health stakeholders – including patients and patient organisations, and health and care providers – in order to develop a research and innovation agenda that actively involves citizens and reflects their needs and expectations.Specific activities shall include: understanding the determinants of health (including nutrition, physical activity and gender, and environmental, socio-economic, occupational and climate-related factors); improving health promotion and disease prevention; understanding disease and improving diagnosis and prognosis; developing effective prevention and screening programmes and improving the assessment of disease susceptibility; improving the surveillance of infectious diseases and preparedness for combating epidemics and emerging diseases; developing new and better preventive and therapeutic vaccines and drugs; using in-silico medicine for improving disease management and prediction; developing regenerative medicine and adapted treatments, and treating disease, including palliative medicine; transferring knowledge to clinical practice and scalable innovation actions; improving health information and better collection and use of health cohort and administrative data; standardised data analysis and techniques; active ageing, and independent and assisted living; individual awareness and empowerment for self-management of health; promotion of integrated care, including psychosocial aspects; improving scientific tools and methods to support policy making and regulatory needs; optimising the efficiency and effectiveness of healthcare provision; and reducing health disparities and inequalities by evidence-based decision making and dissemination of best practice and by innovative technologies and approaches. Active involvement of healthcare providers must be encouraged in order to secure rapid take-up and implementation of results.";"";"H2020";"H2020-EU.3.";"";"";"2014-09-22 20:43:12";"664237" +"H2020-EU.1.4.1.";"en";"H2020-EU.1.4.1.";"";"";"Developing the European research infrastructures for 2020 and beyond";"Research infrastructures for 2020 and beyond";"

Developing the European research infrastructures for 2020 and beyond

The aim shall be to facilitate and support actions linked to: (1) the preparation, implementation and operation of the ESFRI and other world-class research infrastructures, including the development of regional partner facilities, when a strong added value for Union intervention exists; (2) the integration of and transnational access to national and regional research infrastructures of European interest, so that European scientists can use them, irrespective of their location, to conduct top-level research; (3) the development, deployment and operation of e-infrastructures to ensure world-leading capability in networking, computing and scientific data.";"";"H2020";"H2020-EU.1.4.";"";"";"2014-09-22 20:39:46";"664123" +"H2020-EU.1.4.3.";"en";"H2020-EU.1.4.3.";"";"";"Reinforcing European research infrastructure policy and international cooperation";"Research infrastructure policy and international cooperation";"

Reinforcing European research infrastructure policy and international cooperation

The aim shall be to support partnerships between relevant policymakers and funding bodies, mapping and monitoring tools for decision-making and also international cooperation activities. European research infrastructures may be supported in their international relations activities.The objectives set out under activity lines (b) and (c) shall be pursued by dedicated actions, as well as within the actions developed under activity line (a), when appropriate.";"";"H2020";"H2020-EU.1.4.";"";"";"2014-09-22 20:40:11";"664137" +"H2020-EU.1.4.2.";"en";"H2020-EU.1.4.2.";"";"";"Fostering the innovation potential of research infrastructures and their human resources";"Research infrastructures and their human resources";"

Fostering the innovation potential of research infrastructures and their human resources

The aims shall be to encourage research infrastructures to act as early adopters or developers of cutting-edge technology, to promote R&D partnerships with industry, to facilitate industrial use of research infrastructures and to stimulate the creation of innovation clusters. This activity shall also support training and/or exchanges of staff managing and operating research infrastructures.";"";"H2020";"H2020-EU.1.4.";"";"";"2014-09-22 20:40:01";"664131" +"H2020-EU.3.3.3.";"en";"H2020-EU.3.3.3.";"";"";"Alternative fuels and mobile energy sources";"Alternative fuels and mobile energy sources";"

Alternative fuels and mobile energy sources

Activities shall focus on research, development and full scale demonstration of technologies and value chains to make bioenergy and other alternative fuels more competitive and sustainable for power and heat and for surface, maritime and air transport, with potential for more efficient energy conversion, to reduce time to market for hydrogen and fuel cells and to bring new options showing long-term potential to maturity.";"";"H2020";"H2020-EU.3.3.";"";"";"2014-09-22 20:46:31";"664341" +"H2020-EU.3.3.1.";"en";"H2020-EU.3.3.1.";"";"";"Reducing energy consumption and carbon foorpint by smart and sustainable use";"Reducing energy consumption and carbon footprint";"

Reducing energy consumption and carbon footprint by smart and sustainable use

Activities shall focus on research and full-scale testing of new concepts, non-technological solutions, more efficient, socially acceptable and affordable technology components and systems with in-built intelligence, to allow real-time energy management for new and existing near-zero-emission, near-zero-energy and positive energy buildings, retrofitted buildings, cities and districts, renewable heating and cooling, highly efficient industries and mass take-up of energy efficiency and energy saving solutions and services by companies, individuals, communities and cities. ";"";"H2020";"H2020-EU.3.3.";"";"";"2014-09-22 20:45:58";"664323" +"H2020-EU.3.3.5.";"en";"H2020-EU.3.3.5.";"";"";"New knowledge and technologies";"New knowledge and technologies";"

New knowledge and technologies

Activities shall focus on multi-disciplinary research for clean, safe and sustainable energy technologies (including visionary actions) and joint implementation of pan-European research programmes and world-class facilities.";"";"H2020";"H2020-EU.3.3.";"";"";"2014-09-22 20:46:48";"664351" +"H2020-EU.3.3.4.";"en";"H2020-EU.3.3.4.";"";"";"A single, smart European electricity grid";"A single, smart European electricity grid";"

A single, smart European electricity grid

Activities shall focus on research, development and full scale demonstration of new smart energy grid technologies, back-up and balancing technologies enabling higher flexibility and efficiency, including conventional power plants, flexible energy storage, systems and market designs to plan, monitor, control and safely operate interoperable networks, including standardisation issues, in an open, decarbonised, environmentally sustainable, climate-resilient and competitive market, under normal and emergency conditions";"";"H2020";"H2020-EU.3.3.";"";"";"2014-09-22 20:46:45";"664349" +"H2020-EU.3.3.8.";"en";"H2020-EU.3.3.8.";"";"";"FCH2 (energy objectives)";"";"";"";"H2020";"H2020-EU.3.3.";"";"";"2014-09-22 21:40:01";"665333" +"H2020-EU.3.3.7.";"en";"H2020-EU.3.3.7.";"";"";"Market uptake of energy innovation - building on Intelligent Energy Europe";"Market uptake of energy innovation";"

Market uptake of energy innovation - building on Intelligent Energy Europe

Activities shall build upon and further enhance those undertaken within the Intelligent Energy Europe (IEE) programme. They shall focus on applied innovation and promotion of standards to facilitate the market uptake of energy technologies and services, to address non-technological barriers and to accelerate the cost-effective implementation of the Union's energy policies. Attention will also be given to innovation for the smart and sustainable use of existing technologies";"";"H2020";"H2020-EU.3.3.";"";"";"2014-09-22 20:46:56";"664355" +"H2020-EU.3.3.6.";"en";"H2020-EU.3.3.6.";"";"";"Robust decision making and public engagement";"Robust decision making and public engagement";"

Robust decision making and public engagement

Activities shall focus on the development of tools, methods, models and forward-looking and perspective scenarios for a robust and transparent policy support, including activities on public engagement, user involvement, environmental impact and sustainability assessment improving the understanding of energy-related socio-economic trends and prospects.";"";"H2020";"H2020-EU.3.3.";"";"";"2014-09-22 20:46:52";"664353" +"H2020-EU.3.3.2.";"en";"H2020-EU.3.3.2.";"";"";"Low-cost, low-carbon energy supply";"Low-cost, low-carbon energy supply";"

Low-cost, low-carbon electricity supply

Activities shall focus on research, development and full scale demonstration of innovative renewables, efficient, flexible and low carbon emission fossil power plants and carbon capture and storage, or CO2 re-use technologies, offering larger scale, lower cost, environmentally safe technologies with higher conversion efficiency and higher availability for different market and operating environments.";"";"H2020";"H2020-EU.3.3.";"";"";"2014-09-22 20:46:12";"664331" +"H2020-EU.2.1.1.1.";"en";"H2020-EU.2.1.1.1.";"";"";"A new generation of components and systems: Engineering of advanced embedded and energy and resource efficient components and systems";"";"";"";"H2020";"H2020-EU.2.1.1.";"";"";"2014-09-22 20:40:33";"664149" +"H2020-EU.2.1.1.6.";"en";"H2020-EU.2.1.1.6.";"";"";"Micro- and nanoelectronics and photonics: Key enabling technologies related to micro- and nanoelectronics and to photonics, covering also quantum technologies";"";"";"";"H2020";"H2020-EU.2.1.1.";"";"";"2014-09-22 20:40:51";"664159" +"H2020-EU.2.1.1.7.";"en";"H2020-EU.2.1.1.7.";"";"";"ECSEL";"";"";"";"H2020";"H2020-EU.2.1.1.";"";"";"2014-09-22 21:39:46";"665325" +"H2020-EU.2.1.1.4.";"en";"H2020-EU.2.1.1.4.";"";"";"Content technologies and information management: ICT for digital content, cultural and creative industries";"";"";"";"H2020";"H2020-EU.2.1.1.";"";"";"2014-09-22 20:40:44";"664155" +"H2020-EU.2.1.1.2.";"en";"H2020-EU.2.1.1.2.";"";"";"Next generation computing: Advanced and secure computing systems and technologies, including cloud computing";"";"";"";"H2020";"H2020-EU.2.1.1.";"";"";"2014-09-22 20:40:37";"664151" +"H2020-EU.2.1.1.5.";"en";"H2020-EU.2.1.1.5.";"";"";"Advanced interfaces and robots: Robotics and smart spaces";"";"";"";"H2020";"H2020-EU.2.1.1.";"";"";"2014-09-22 20:40:47";"664157" +"H2020-EU.2.1.1.3.";"en";"H2020-EU.2.1.1.3.";"";"";"Future Internet: Software, hardware, Infrastructures, technologies and services";"";"";"";"H2020";"H2020-EU.2.1.1.";"";"";"2014-09-22 20:40:40";"664153" +"H2020-EU.2.3.1.";"en";"H2020-EU.2.3.1.";"";"";" Mainstreaming SME support, especially through a dedicated instrument";"Mainstreaming SME support";"

Mainstreaming SME support especially through a dedicated instrument

SMEs shall be supported across Horizon 2020. For this purpose, to participate in Horizon 2020, better conditions for SMEs shall be established. In addition, a dedicated SME instrument shall provide staged and seamless support covering the whole innovation cycle. The SME instrument shall be targeted at all types of innovative SMEs showing a strong ambition to develop, grow and internationalise. It shall be provided for all types of innovation, including service, non-technological and social innovations, given each activity has a clear European added value. The aim is to develop and capitalise on the innovation potential of SMEs by filling the gap in funding for early stage high-risk research and innovation, stimulating innovations and increasing private-sector commercialisation of research results.The instrument will operate under a single centralised management system, light administrative regime and a single entry point. It shall be implemented primarily in a bottom-up manner through a continuously open call.All of the specific objectives of the priority 'Societal challenges', and the specific objective 'Leadership in enabling and industrial technologies' will apply the dedicated SME instrument and allocate an amount for this.";"";"H2020";"H2020-EU.2.3.";"";"";"2014-09-22 20:42:51";"664225" +"H2020-EU.2.3.2.";"en";"H2020-EU.2.3.2.";"";"";"Specific support";"";"";"";"H2020";"H2020-EU.2.3.";"";"";"2014-09-22 20:42:54";"664227" +"H2020-EU.1.3.4.";"en";"H2020-EU.1.3.4.";"";"";"Increasing structural impact by co-funding activities";"MSCA Co-funding";"

Increasing the structural impact by co-funding the activities

The goal is, by leveraging additional funds, to increase the numerical and structural impact of Marie Skłodowska-Curie actions and to foster excellence at national level in researchers' training, mobility and career development.Key activities shall be, with the aid of a co-funding mechanism, to encourage regional, national and international organisations, both public and private, to create new programmes and to adapt existing ones to international and intersectoral training, mobility and career development. This will increase the quality of research training in Europe at all career stages, including at doctoral level, foster free circulation of researchers and scientific knowledge in Europe, promote attractive research careers by offering open recruitment and attractive working conditions, and support research and innovation cooperation between universities, research institutions and enterprises and cooperation with third countries and international organisations.";"";"H2020";"H2020-EU.1.3.";"";"";"2014-09-22 20:39:36";"664117" +"H2020-EU.1.3.5.";"en";"H2020-EU.1.3.5.";"";"";"Specific support and policy actions";"MSCA Specific support";"

Specific support and policy action

The goals are to monitor progress, identify gaps and barriers in the Marie Skłodowska-Curie actions and to increase their impact. In this context, indicators shall be developed and data related to researchers' mobility, skills, careers and gender equality analysed, seeking synergies and close coordination with the policy support actions on researchers, their employers and funders carried out under the specific objective 'Europe in a changing world - Inclusive, innovative and reflective societies'. The activity shall further aim at raising awareness of the importance and attractiveness of a research career and at disseminating research and innovation results emanating from work supported by Marie Skłodowska-Curie actions.";"";"H2020";"H2020-EU.1.3.";"";"";"2014-09-22 20:39:39";"664119" +"H2020-EU.3.1.6.";"en";"H2020-EU.3.1.6.";"";"";"Health care provision and integrated care";"";"";"";"H2020";"H2020-EU.3.1.";"";"";"2014-09-22 20:44:22";"664275" +"H2020-EU.3.1.1.";"en";"H2020-EU.3.1.1.";"";"";"Understanding health, wellbeing and disease";"";"";"";"H2020";"H2020-EU.3.1.";"";"";"2014-09-22 20:43:16";"664239" +"H2020-EU.3.1.7.";"en";"H2020-EU.3.1.7.";"";"";"Innovative Medicines Initiative 2 (IMI2)";"";"";"";"H2020";"H2020-EU.3.1.";"";"";"2014-09-22 21:40:29";"665349" +"H2020-EU.3.1.5.";"en";"H2020-EU.3.1.5.";"";"";"Methods and data";"";"";"";"H2020";"H2020-EU.3.1.";"";"";"2014-09-22 20:44:07";"664267" +"H2020-EU.3.1.4.";"en";"H2020-EU.3.1.4.";"";"";"Active ageing and self-management of health";"";"";"";"H2020";"H2020-EU.3.1.";"";"";"2014-09-22 20:43:57";"664261" +"H2020-EU.3.1.2.";"en";"H2020-EU.3.1.2.";"";"";"Preventing disease";"";"";"";"H2020";"H2020-EU.3.1.";"";"";"2014-09-22 20:43:31";"664247" +"H2020-EU.2.1.5.1.";"en";"H2020-EU.2.1.5.1.";"";"";"Technologies for Factories of the Future";"Technologies for Factories of the Future";"

Technologies for Factories of the Future

Promoting sustainable industrial growth by facilitating a strategic shift in Europe from cost-based manufacturing to an approach based on resource efficiency and the creation of high added value products and ICT-enabled intelligent and high performance manufacturing in an integrated system.";"";"H2020";"H2020-EU.2.1.5.";"";"";"2014-09-22 20:42:03";"664199" +"H2020-EU.2.1.5.4.";"en";"H2020-EU.2.1.5.4.";"";"";"New sustainable business models";"New sustainable business models";"

New sustainable business models

Deriving concepts and methodologies for adaptive, knowledge-based business models in customised approaches, including alternative resource-productive approaches.";"";"H2020";"H2020-EU.2.1.5.";"";"";"2014-09-22 20:42:14";"664205" +"H2020-EU.2.1.5.2.";"en";"H2020-EU.2.1.5.2.";"";"";"Technologies enabling energy-efficient systems and energy-efficient buildings with a low environmental impact";"Technologies enabling energy-efficient systems and buildings";"

Technologies enabling energy-efficient systems and energy-efficient buildings with a low environmental impact

Reducing energy consumption and CO2 emissions by the research, development and deployment of sustainable construction technologies and systems, addressing the whole value chain as well as reducing the overall environmental impact of buildings.";"";"H2020";"H2020-EU.2.1.5.";"";"";"2014-09-22 20:42:06";"664201" +"H2020-EU.3.1.3.1.";"en";"H2020-EU.3.1.3.1.";"";"";"Treating disease, including developing regenerative medicine";"";"";"";"H2020";"H2020-EU.3.1.3.";"";"";"2014-09-22 20:43:49";"664257" +"H2020-EU.3.1.3.2.";"en";"H2020-EU.3.1.3.2.";"";"";"Transferring knowledge to clinical practice and scalable innovation actions";"";"";"";"H2020";"H2020-EU.3.1.3.";"";"";"2014-09-22 20:43:53";"664259" +"H2020-EU.2.1.6.3.";"en";"H2020-EU.2.1.6.3.";"";"";"Enabling exploitation of space data";"Enabling exploitation of space data";"

Enabling exploitation of space data

A considerably increased exploitation of data from European satellites (scientific, public or commercial) can be achieved if further effort is made for the processing, archiving, validation, standardisation and sustainable availability of space data as well as for supporting the development of new information products and services resulting from those data, having regard to Article 189 TFEU, including innovations in data handling, dissemination and interoperability, in particular promotion of access to and exchange of Earth science data and metadata. These activities can also ensure a higher return on investment of space infrastructure and contribute to tackling societal challenges, in particular if coordinated in a global effort such as through the Global Earth Observation System of Systems (GEOSS), namely by fully exploiting the Copernicus programme as its main European contribution, the European satellite navigation programme Galileo or the Intergovernmental Panel on Climate Change (IPCC) for climate change issues. A fast introduction of these innovations into the relevant application and decision-making processes will be supported. This also includes the exploitation of data for further scientific investigation.";"";"H2020";"H2020-EU.2.1.6.";"";"";"2014-09-22 20:42:29";"664213" +"H2020-EU.2.1.6.2.";"en";"H2020-EU.2.1.6.2.";"";"";"Enabling advances in space technology";"Enabling advances in space technology";"

Enabling advances in space technologies

This aims at developing advanced and enabling space technologies and operational concepts from idea to demonstration in space. This includes technologies supporting access to space, technologies for the protection of space assets from threats such as debris and solar flares, as well as satellite telecommunication, navigation and remote sensing. The development and application of advanced space technologies requires the continuous education and training of highly skilled engineers and scientists as well as strong links between them and the users of space applications.";"";"H2020";"H2020-EU.2.1.6.";"";"";"2014-09-22 20:42:25";"664211" +"H2020-EU.2.1.6.4.";"en";"H2020-EU.2.1.6.4.";"";"";"Enabling European research in support of international space partnerships";"Research in support of international space partnerships";"

Enabling European research in support of international space partnerships

Space undertakings have a fundamentally global character. This is particularly clear for activities such as Space Situational Awareness (SSA), and many space science and exploration projects. The development of cutting edge space technology is increasingly taking place within such international partnerships. Ensuring access to these constitutes an important success factor for European researchers and industry. The definition and implementation of long-term roadmaps and the coordination with international partners are essential to this objective.";"";"H2020";"H2020-EU.2.1.6.";"";"";"2014-09-22 20:42:32";"664215" +"H2020-EU.3.7.";"en";"H2020-EU.3.7.";"";"";"Secure societies - Protecting freedom and security of Europe and its citizens";"Secure societies";"

Secure societies - Protecting freedom and security of Europe and its citizens

Specific objective

The specific objective is to foster secure European societies in a context of unprecedented transformations and growing global interdependencies and threats, while strengthening the European culture of freedom and justice.Europe has never been so peacefully consolidated, and the levels of security enjoyed by European citizens are high compared to other parts of the world. However, Europe's vulnerability continues to exist in a context of ever-increasing globalisation in which societies are facing security threats and challenges that are growing in scale and sophistication.The threat of large-scale military aggressions has decreased and security concerns are focused on new multifaceted, interrelated and transnational threats. Aspects such as human rights, environmental degradation, political stability and democracy, social issues, cultural and religious identity or migration need to be taken into account. In this context the internal and external aspects of security are inextricably linked. In order to protect freedom and security, the Union requires effective responses using a comprehensive and innovative suite of security instruments. Research and innovation can play a clear supporting role although it cannot alone guarantee security. Research and innovation activities should aim at understanding, detecting, preventing, deterring, preparing and protecting against security threats. Furthermore, security presents fundamental challenges that cannot be resolved by independent and sector-specific treatment but rather need more ambitious, coordinated and holistic approaches.Many forms of insecurity, whether from crime, violence, terrorism, natural or man-made disasters, cyber attacks or privacy abuses, and other forms of social and economic disorders increasingly affect citizens.According to estimates, there are likely to be up to 75 million direct victims of crime every year in Europe. The direct cost of crime, terrorism, illegal activities, violence and disasters in Europe has been estimated at least EUR 650 billion (about 5 % of the Union GDP) in 2010. Terrorism has shown its fatal consequences in several parts of Europe and worldwide costing many lives and important economic losses. It also has a significant cultural and global impact.Citizens, firms and institutions are increasingly involved in digital interactions and transactions in social, financial and commercial areas of life, but the development of Internet has also led to cyber crime worth billions of Euros each year, to cyber attacks on critical infrastructures and to breaches of privacy affecting individuals or entities across the continent. Changes in the nature and perception of insecurity in everyday life are likely to affect citizens' trust not only in institutions but also in each other.In order to anticipate, prevent and manage these threats, it is necessary to understand the causes, develop and apply innovative technologies, solutions, foresight tools and knowledge, stimulate cooperation between providers and users, find civil security solutions, improve the competitiveness of the European security industry and services, including ICT, and prevent and combat the abuse of privacy and breaches of human rights in the Internet and elsewhere, while ensuring European citizens' individual rights and freedom.To enhance better cross-border collaboration between different kinds of emergency services, attention should be given to interoperability and standardisation.Finally, as security policies should interact with different social policies, enhancing the societal dimension of security research will be an important aspect of this societal challenge.Respecting fundamental values such as freedom, democracy, equality and the rule of law must be the base of any activity undertaken in the context of this challenge to provide security to European citizens.

Rationale and Union added value

The Union and its citizens, industry and international partners are confronted with a range of security threats like crime, terrorism, illegal trafficking and mass emergencies due to natural or man-made disasters. These threats can span across borders and aim at physical targets or the cyberspace with attacks arising from different sources. Attacks against information or communication systems of public authorities and private entities, for instance, not only undermine the citizens' trust in information and communication systems and lead to direct financial losses and a loss of business opportunities, but may also seriously affect critical infrastructure and services such as energy, aviation and other transport, water and food supply, health, finance or telecommunications.These threats could possibly endanger the inner foundations of our society. Technology and creative design can bring an important contribution to any response to be made. Yet, new solutions should be developed while bearing in mind the appropriateness of the means and their adequacy to the societal demand, in particular in terms of guarantees for citizens' fundamental rights and freedoms.Finally, security also represents a major economic challenge, considering Europe's share of the fast growing global security market. Given the potential impact of some threats on services, networks or businesses, the deployment of adequate security solutions has become critical for the economy and European manufacturing competitiveness. Cooperation among Member States but also with third countries and international organisations is part of this challenge.Union research and innovation funding under this societal challenge will thus support the development, implementation and adaptation of key Union policies, notably the objectives of the Europe 2020 strategy, the Common Foreign and Security Policy, the Union's Internal Security Strategy and the flagship initiative 'Digital Agenda for Europe'. Coordination with the JRC direct actions will be pursued.

Broad lines of activities

The aim is to support Union policies for internal and external security and to ensure cyber security, trust and privacy in the Digital Single Market, whilst at the same time improving the competitiveness of the Union's security industry and services, including ICT. The activities will include a focus on the research and development of the next generation of innovative solutions, by working on novel concepts, designs and interoperable standards. This will be done by developing innovative technologies and solutions that address security gaps and lead to a reduction in the risk from security threats.These mission-oriented actions will integrate the demands of different end-users (citizens, businesses, civil society organisations and administrations, including national and international authorities, civil protection, law enforcement, border guards, etc.) in order to take into account the evolution of security threats and privacy protection and the necessary societal aspects.The focus of activities shall be to:(a) fight crime, illegal trafficking and terrorism, including understanding and tackling terrorist ideas and beliefs; (b) protect and improve the resilience of critical infrastructures, supply chains and transport modes; (c) strengthen security through border management;(d) improve cyber security; (e) increase Europe's resilience to crises and disasters; (f) ensure privacy and freedom, including in the Internet, and enhance the societal legal and ethical understanding of all areas of security, risk and management; (g) enhance standardisation and interoperability of systems, including for emergency purposes; (h) support the Union's external security policies, including conflict prevention and peace-building. ";"";"H2020";"H2020-EU.3.";"";"";"2014-09-22 20:50:23";"664463" +"H2020-EU.3.6.";"en";"H2020-EU.3.6.";"";"";"SOCIETAL CHALLENGES - Europe In A Changing World - Inclusive, Innovative And Reflective Societies";"Inclusive, innovative and reflective societies";"

SOCIETAL CHALLENGES - Europe In A Changing World - Inclusive, Innovative And Reflective Societies

Specific objective

The specific objective is to foster a greater understanding of Europe, provide solutions and support inclusive, innovative and reflective European societies in a context of unprecedented transformations and growing global interdependencies.Europe is confronted with major socio-economic challenges which significantly affect its common future. These include growing economic and cultural interdependencies, ageing and demographic change, social exclusion and poverty, integration and disintegration, inequalities and migration flows, a growing digital divide, fostering a culture of innovation and creativity in society and enterprises, and a decreasing sense of trust in democratic institutions and between citizens within and across borders. These challenges are enormous and they call for a common European approach, based upon shared scientific knowledge that social sciences and humanities, among others, can provide.Significant inequalities persist in the Union both across countries and within them. In 2011 the Human Development Index, an aggregate measure of progress in health, education and income, scores the Member States between 0,771 and 0,910, thus reflecting considerable divergences between countries. Significant gender inequalities also persist: for instance, the gender pay gap in the Union remains at an average of 17,8 % in favour of men. In 2011, one in every six Union citizens (around 80 million people) was at risk of poverty. Over the past two decades the poverty of young adults and families with children has risen. The youth unemployment rate is above 20 %. 150 million Europeans (some 25 %) have never used the internet and may never get sufficient digital literacy. Political apathy and polarisation in elections has also risen, reflecting citizens' faltering trust in current political systems.These figures suggest that some social groups and communities are persistently left out of social and economic development and/or democratic politics. These inequalities do not only stifle societal development but hamper the economies in the Union and reduce the research and innovation capacities within and across countries.A central challenge in addressing these inequalities will be the fostering of settings in which European, national and ethnic identities can coexist and be mutually enriching.Moreover, the number of Europeans aged over 65 is expected to rise significantly by 42 % from 87 million in 2010 to 124 million in 2030. This presents a major challenge for the economy, society and the sustainability of public finances.Europe's productivity and economic growth rates have been relatively decreasing for four decades. Furthermore, its share of the global knowledge production and its innovation performance lead compared to key emerging economies such as Brazil and China are declining fast. Although Europe has a strong research base, it needs to make this base a powerful asset for innovative goods and services.It is well-known that Europe needs to invest more in science and innovation and that it will also have to coordinate these investments better than in the past. Since the financial crisis many economic and social inequalities in Europe have been aggravated even further, and the return of pre-crisis rates of economic growth seems a long way off for most of the Union. The current crisis also suggests that it is challenging to find solutions to crises that reflect the heterogeneity of Member States and their interests.These challenges must be tackled together and in innovative and multi-disciplinary ways because they interact in complex and often unexpected ways. Innovation may lead to weakening inclusiveness, as can be seen, for instance, in the phenomena of digital divide or labour market segmentation. Social innovation and social trust are sometimes difficult to reconcile in policies, for instance in socially depressed areas in large cities in Europe. Besides, the conjunction of innovation and citizens' evolving demands also lead policymakers and economic and social actors to find new answers that ignore established boundaries between sectors, activities, goods or services. Phenomena such as the growth of Internet, of the financial systems, of the ageing economy and of the ecological society abundantly show how it is necessary to think and respond to these issues across their dimensions of inclusiveness and innovation at the same time.The in-built complexity of these challenges and the evolutions of demands thus make it essential to develop innovative research and new smart technologies, processes and methods, social innovation mechanisms, coordinated actions and policies that will anticipate or influence major evolutions for Europe. It calls for a renewed understanding of determinants of innovation. In addition, it calls for understanding the underlying trends and impacts within these challenges and rediscovering or reinventing successful forms of solidarity, behaviour, coordination and creativity that make Europe distinctive in terms of inclusive, innovative and reflective societies compared to other regions of the world.It also requires a more strategic approach to cooperation with third countries, based on a deeper understanding of the Union's past and its current and future role as a global player.

Rationale and Union added value

These challenges go beyond national borders and thus call for more complex comparative analyses to develop a base upon which national and European policies can be better understood. Such comparative analyses should address mobility (of people, goods, services and capital but also of competences, knowledge and ideas) and forms of institutional cooperation, intercultural interactions and international cooperation. If these challenges are not better understood and anticipated, forces of globalisation also push European countries to compete with each other rather than cooperate, thus accentuating differences in Europe rather than commonalities and a right balance between cooperation and competition. Addressing such critical issues, including socio-economic challenges, only at national level, carries the danger of inefficient use of resources, externalisation of problems to other European and non-European countries and the accentuation of social, economic and political tensions that may directly affect the aims of the Treaties regarding its values, in particular Title I of the Treaty on European Union.In order to understand, analyse and build inclusive, innovative and reflective societies, Europe requires a response which unfolds the potential of shared ideas for the European future to create new knowledge, technologies and capabilities. The concept of inclusive societies acknowledges the diversity in culture, regions and socio-economic settings as a European strength. Turning European diversity into a source of innovation and development is needed. Such endeavour will help Europe tackle its challenges not only internally but also as a global player on the international scene. This, in turn, will also help Member States benefit from experiences elsewhere and allow them to better define their own specific actions corresponding to their respective contexts.Fostering new modes of cooperation between countries within the Union and worldwide, as well as across relevant research and innovation communities, will therefore be a central task under this societal challenge. Supporting social and technological innovation processes, encouraging smart and participatory public administration, as well as informing and promoting evidence-based policy making will be systematically pursued in order to enhance the relevance of all these activities for policymakers, social and economic actors, and citizens. Research and innovation will be a precondition for the competitiveness of European businesses and services with particular attention to sustainability, advancing education, increasing employment, and reducing poverty.Union funding under this challenge will thus support the development, implementation and adaptation of key Union policies, notably the objectives of the Europe 2020 strategy. It will interface, as and when appropriate, with Joint Programming Initiatives, including ""Cultural Heritage"", ""More Years, Better Lives"" and ""Urban Europe"", and coordination with the JRC direct actions will be pursued.

Broad lines of activities

Inclusive societies

The aim is to gain a greater understanding of the societal changes in Europe and their impact on social cohesion, and to analyse and develop social, economic and political inclusion and positive inter-cultural dynamics in Europe and with international partners, through cutting-edge science and interdisciplinarity, technological advances and organisational innovations. The main challenges to be tackled concerning European models for social cohesion and well-being are, inter alia, migration, integration, demographic change, the ageing society and disability, education and lifelong learning, as well as the reduction of poverty and social exclusion taking into account the different regional and cultural characteristics.Social sciences and humanities research plays a leading role here as it explores changes over time and space and enables exploration of imagined futures. Europe has a huge shared history of both co-operation and conflict. Its dynamic cultural interactions provide inspiration and opportunities. Research is needed to understand identity and belonging across communities, regions and nations. Research will support policymakers in designing policies that foster employment, combat poverty and prevent the development of various forms of divisions, conflict and political and social exclusion, discrimination and inequalities, such as gender and intergenerational inequalities, discrimination due to disability or ethnic origin, or digital or innovation divides, in European societies and in other regions of the world. It shall in particular feed into the implementation and the adaptation of the Europe 2020 strategy and the broad external action of the Union.The focus of activities shall be to understand and foster or implement:(a) the mechanisms to promote smart, sustainable and inclusive growth; (b) trusted organisations, practices, services and policies that are necessary to build resilient, inclusive, participatory, open and creative societies in Europe, in particular taking into account migration, integration and demographic change; (c) Europe's role as a global actor, notably regarding human rights and global justice; (d) the promotion of sustainable and inclusive environments through innovative spatial and urban planning and design.

Innovative societies

The aim is to foster the development of innovative societies and policies in Europe through the engagement of citizens, civil society organisations, enterprises and users in research and innovation and the promotion of coordinated research and innovation policies in the context of globalisation and the need to promote the highest ethical standards. Particular support will be provided for the development of the ERA and the development of framework conditions for innovation.Cultural and societal knowledge is a major source of creativity and innovation, including business, public sector and social innovation. In many cases social and user-led innovations also precede the development of innovative technologies, services and economic processes. The creative industries are a major resource to tackle societal challenges and for competitiveness. As interrelations between social and technological innovation are complex, and rarely linear, further research, including cross-sectoral and multidisciplinary research, is needed into the development of all types of innovation and activities funded to encourage its effective development into the future.The focus of activities shall be to:(a) strengthen the evidence base and support for the flagship initiative ""Innovation Union"" and ERA; (b) explore new forms of innovation, with special emphasis on social innovation and creativity, and understand how all forms of innovation are developed, succeed or fail; (c) make use of the innovative, creative and productive potential of all generations; (d) promote coherent and effective cooperation with third countries.

Reflective societies - cultural heritage and European identity

The aim is to contribute to an understanding of Europe's intellectual basis – its history and the many European and non-European influences – as an inspiration for our lives today. Europe is characterized by a variety of different peoples (including minorities and indigenous people), traditions and regional and national identities as well as by different levels of economic and societal development. Migration and mobility, the media, industry and transport contribute to the diversity of views and lifestyles. This diversity and its opportunities should be recognized and considered.European collections in libraries, including digital ones, archives, museums, galleries and other public institutions have a wealth of rich, untapped documentation and objects for study. These archival resources, together with intangible heritage, represent the history of individual Member States but also the collective heritage of a Union that has emerged through time. Such materials should be made accessible, also through new technologies, to researchers and citizens to enable a look to the future through the archive of the past. Accessibility and preservation of cultural heritage in these forms is needed for the vitality of the living engagements within and across European cultures now and contributes to sustainable economic growth.The focus of activities shall be to:(a) study European heritage, memory, identity, integration and cultural interaction and translation, including its representations in cultural and scientific collections, archives and museums, to better inform and understand the present by richer interpretations of the past; (b) research into European countries' and regions' history, literature, art, philosophy and religions and how these have informed contemporary European diversity; (c) research on Europe's role in the world, on the mutual influence and ties between the regions of the world, and a view from outside on European cultures. ";"";"H2020";"H2020-EU.3.";"";"";"2014-09-22 20:49:28";"664435" +"H2020-EU.3.5.";"en";"H2020-EU.3.5.";"";"";"SOCIETAL CHALLENGES - Climate action, Environment, Resource Efficiency and Raw Materials";"Climate and environment";"

SOCIETAL CHALLENGES - Climate action, Environment, Resource Efficiency and Raw Materials

Specific objective

The specific objective is to achieve a resource- and water-efficient and climate change resilient economy and society, the protection and sustainable management of natural resources and ecosystems, and a sustainable supply and use of raw materials, in order to meet the needs of a growing global population within the sustainable limits of the planet's natural resources and ecosystems. Activities will contribute to increasing European competitiveness and raw materials security and to improving well being, whilst assuring environmental integrity, resilience and sustainability with the aim of keeping average global warming below 2 °C and enabling ecosystems and society to adapt to climate change and other environmental changes.During the 20th century, the world increased both its fossil fuel use and the extraction of material resources by a factor of ten. This era of seemingly plentiful and cheap resources is coming to an end. Raw materials, water, air, biodiversity and terrestrial, aquatic and marine ecosystems are all under pressure. Many of the world's major ecosystems are being degraded, with up to 60 % of the services that they provide being used unsustainably. In the Union, some 16 tonnes of materials are used per person each year, of which 6 tonnes are wasted, with half going to landfill. The global demand for resources continues to increase with the growing population and rising aspirations, in particular of middle-income earners in emerging economies. Economic growth needs to be decoupled from resource use.The average temperature of the Earth's surface has increased by about 0,8 °C over the past 100 years and is projected to increase by between 1,8 to 4 °C by the end of the 21st century (relative to the 1980-1999 average). The likely impacts on natural and human systems associated with these changes will challenge the planet and its ability to adapt, as well as threaten future economic development and the well being of humanity.The growing impacts from climate change and environmental problems, such as ocean acidification, changes in ocean circulation, increase of seawater temperature, ice melting in the Arctic and decreased seawater salinity, land degradation and use, loss of soil fertility, water scarcity, droughts and floods, seismic and volcanic hazards, changes in spatial distribution of species, chemical pollution, over-exploitation of resources, and biodiversity loss, indicate that the planet is approaching its sustainability boundaries. For example, without improvements in efficiency across all sectors, including through innovative water systems, water demand is projected to overshoot supply by 40 % in 20 years time, which will lead to severe water stress and shortages. Forests are disappearing at an alarmingly high rate of 5 million hectares per year. Interactions between resources can cause systemic risks, with the depletion of one resource generating an irreversible tipping point for other resources and ecosystems. Based on current trends, the equivalent of more than two planet Earths will be needed by 2050 to support the growing global population.The sustainable supply and resource-efficient management of raw materials, including their exploration, extraction, processing, re-use, recycling and substitution, is essential for the functioning of modern societies and their economies. European sectors, such as construction, chemicals, automotive, aerospace, machinery and equipment, which provide a total added value of some EUR 1,3 trillion and employment for approximately 30 million people, heavily depend on access to raw materials. However, the supply of raw materials to the Union is coming under increasing pressure. Furthermore, the Union is highly dependent on imports of strategically important raw materials, which are being affected at an alarming rate by market distortions.Moreover, the Union still has valuable mineral deposits, whose exploration, extraction and processing is limited by a lack of adequate technologies, by inadequate waste cycle management and by lack of investment, and hampered by increased global competition. Given the importance of raw materials for European competitiveness, for the economy and for their application in innovative products, the sustainable supply and resource-efficient management of raw materials is a vital priority for the Union.The ability of the economy to adapt and become more climate change resilient and resource-efficient and at the same time to remain competitive depends on high levels of eco-innovation, of a societal, economic, organisational and technological nature. With the global market for eco-innovation worth around EUR 1 trillion per year and expected to triple by 2030, eco-innovation represents a major opportunity to boost competitiveness and job creation in European economies.

Rationale and Union added value

Meeting Union and international targets for greenhouse gas emissions and concentrations and coping with climate change impacts requires a transition towards a low-carbon society and the development and deployment of cost-effective and sustainable technological and non-technological solutions, and mitigation and adaptation measures, and a stronger understanding of societal responses to these challenges. Union and global policy frameworks must ensure that ecosystems and biodiversity are protected, valued and appropriately restored in order to preserve their ability to provide resources and services in the future. Water challenges in the rural, urban and industrial environments need to be addressed to promote water system innovation and resource efficiency and to protect aquatic ecosystems. Research and innovation can help secure reliable and sustainable access to and exploitation of raw materials on land and sea bed and ensure a significant reduction in resource use and wastage.The focus of Union actions shall therefore be on supporting key Union objectives and policies covering the whole innovation cycle and the elements of the knowledge triangle, including the Europe 2020 strategy; the flagship initiatives 'Innovation Union', 'An industrial policy for the globalisation era', 'Digital Agenda for Europe' and 'Resource-efficient Europe' and the corresponding Roadmap; the Roadmap for moving to a competitive low-carbon economy in 2050; 'Adapting to climate change: Towards a European framework for action'; the Raw Materials Initiative; the Union's Sustainable Development Strategy; an Integrated Maritime Policy for the Union; the Marine Strategy Framework Directive; the Water Framework Directive and the Directives based on it; the Floods Directive; the Eco-innovation Action Plan; and the General Union Environment Action Programme to 2020. These actions shall, when appropriate, interface with relevant European Innovation Partnerships and Joint Programming Initiatives. These actions shall reinforce the ability of society to become more resilient to environmental and climate change and ensure the availability of raw materials.Given the transnational and global nature of the climate and the environment, their scale and complexity, and the international dimension of the raw materials supply chain, activities have to be carried out at the Union level and beyond. The multi-disciplinary character of the necessary research requires pooling complementary knowledge and resources in order to effectively tackle this challenge in a sustainable way. Reducing resource use and environmental impacts, whilst increasing competitiveness, will require a decisive societal and technological transition to an economy based on a sustainable relationship between nature and human well-being. Coordinated research and innovation activities will improve the understanding and forecasting of climate and environmental change in a systemic and cross-sectoral perspective, reduce uncertainties, identify and assess vulnerabilities, risks, costs and opportunities, as well as expand the range and improve the effectiveness of societal and policy responses and solutions. Actions will also seek to improve research and innovation delivery and dissemination to support policy making and to empower actors at all levels of society to actively participate in this process.Addressing the availability of raw materials calls for co-ordinated research and innovation efforts across many disciplines and sectors to help provide safe, economically feasible, environmentally sound and socially acceptable solutions along the entire value chain (exploration, extraction, processing, design, sustainable use and re-use, recycling and substitution). Innovation in these fields will provide opportunities for growth and jobs, as well as innovative options involving science, technology, the economy, society, policy and governance. For these reasons, European Innovation Partnerships on Water and Raw Materials have been launched.Responsible eco-innovation may provide valuable new opportunities for growth and jobs. Solutions developed through Union level action will counter key threats to industrial competitiveness and enable rapid uptake and replication across the single market and beyond. This will enable the transition towards a green economy that takes into account the sustainable use of resources. Partners for this approach will include international, European and national policy makers, international and Member State research and innovation programmes, European business and industry, the European Environment Agency and national environment agencies, and other relevant stakeholders.In addition to bilateral and regional cooperation, Union level actions will also support relevant international efforts and initiatives, including the Intergovernmental Panel on Climate Change (IPCC), the Intergovernmental Platform on Biodiversity and Ecosystem Services (IPBES) and the Group on Earth Observations (GEO).

Broad lines of the activities

(a) Fighting and adapting to climate change

The aim is to develop and assess innovative, cost-effective and sustainable adaptation and mitigation measures and strategies, targeting both CO2 and non-CO2 greenhouse gases and aerosols, and underlining both technological and non technological green solutions, through the generation of evidence for informed, early and effective action and the networking of the required competences. Activities shall focus on improving the understanding of climate change and the risks associated with extreme events and abrupt climate-related changes with a view to providing reliable climate projections; assessing impacts at global, regional and local level, and vulnerabilities; developing innovative cost-effective adaptation and risk prevention and management measures; and supporting mitigation policies and strategies, including studies that focus on impact from other sectoral policies.

(b) Protecting the environment, sustainably managing natural resources, water, biodiversity and ecosystems

The aim is to provide knowledge and tools for the management and protection of natural resources, in order to achieve a sustainable balance between limited resources and the present and future needs of society and the economy. Activities shall focus on furthering our understanding of biodiversity and the functioning of ecosystems, their interactions with social systems and their role in sustaining the economy and human well-being; developing integrated approaches to address water-related challenges and the transition to sustainable management and use of water resources and services; and providing knowledge and tools for effective decision making and public engagement.

(c) Ensuring the sustainable supply of non-energy and non-agricultural raw materials

The aim is to improve the knowledge base on raw materials and develop innovative solutions for the cost-effective, resource-efficient and environmentally friendly exploration, extraction, processing, use and re-use, recycling and recovery of raw materials and for their substitution by economically attractive and environmentally sustainable alternatives with a lower environmental impact, including closed-loop processes and systems. Activities shall focus on improving the knowledge base on the availability of raw materials; promoting the sustainable and efficient supply, use and re-use of raw materials, including mineral resources, from land and sea; finding alternatives for critical raw materials; and improving societal awareness and skills on raw materials.

(d) Enabling the transition towards a green economy and society through eco-innovation

The aim is to foster all forms of eco-innovation that enable the transition to a green economy. Activities shall, inter alia, build upon and enhance those undertaken in the Eco-Innovation Programme and focus on strengthening eco-innovative technologies, processes, services and products, including exploring ways to reduce the quantities of raw materials in production and consumption, overcoming barriers in this context, and boosting their market uptake and replication, with special attention for SMEs; supporting innovative policies, sustainable economic models and societal changes; measuring and assessing progress towards a green economy; and fostering resource efficiency through digital systems.

(e) Developing comprehensive and sustained global environmental observation and information systems

The aim is to ensure the delivery of the long-term data and information required to address this challenge. Activities shall focus on the capabilities, technologies and data infrastructures for Earth observation and monitoring from both remote sensing and in situ measurements that can continuously provide timely and accurate information and permit forecasts and projections. Free, open and unrestricted access to interoperable data and information will be encouraged. Activities shall help define future operational activities of the Copernicus programme and enhance the use of Copernicus data for research activities.

(f) Cultural heritage

The aim is to research into the strategies, methodologies and tools needed to enable a dynamic and sustainable cultural heritage in Europe in response to climate change. Cultural heritage in its diverse physical forms provides the living context for resilient communities responding to multivariate changes. Research in cultural heritage requires a multidisciplinary approach to improve the understanding of historical material. Activities shall focus on identifying resilience levels through observations, monitoring and modelling as well as provide for a better understanding on how communities perceive and respond to climate change and seismic and volcanic hazards.";"";"H2020";"H2020-EU.3.";"";"";"2014-09-22 20:48:01";"664389" +"H2020-EU.3.6.2.1.";"en";"H2020-EU.3.6.2.1.";"";"";"Strengthen the evidence base and support for the Innovation Union and ERA";"";"";"";"H2020";"H2020-EU.3.";"";"";"2018-11-28 15:58:24";"703985" +"H2020-EU.4.";"en";"H2020-EU.4.";"";"";"SPREADING EXCELLENCE AND WIDENING PARTICIPATION";"Spreading excellence and widening participation";"

SPREADING EXCELLENCE AND WIDENING PARTICIPATION

Specific objective

The specific objective is to fully exploit the potential of Europe's talent pool and to ensure that the benefits of an innovation-led economy are both maximised and widely distributed across the Union in accordance with the principle of excellence.Despite a recent tendency for the innovation performances of individual countries and regions to converge, sharp differences among Member States still remain. Furthermore, by putting national budgets under constraint, the current financial crisis is threatening to widen gaps. Exploiting the potential of Europe's talent pool and maximising and spreading the benefits of innovation across the Union is vital for Europe's competitiveness and its ability to address societal challenges in the future.

Rationale and Union added value

In order to progress towards a sustainable, inclusive and smart society, Europe needs to make the best use of the intelligence that is available in the Union and to unlock untapped R&I potential.By nurturing and connecting pools of excellence, the activities proposed will contribute to strengthening the ERA.

Broad lines of the activities

Specific actions will facilitate the spreading of excellence and widening of participation through the following actions:— Teaming of excellent research institutions and low performing RDI regions aiming at the creation of new (or significant upgrade of existing) centres of excellence in low performing RDI Member States and regions.— Twinning of research institutions aiming at significantly strengthening a defined field of research in an emerging institution through links with at least two internationally-leading institutions in a defined field. — Establishing ‚ERA Chairs’ to attract outstanding academics to institutions with a clear potential for research excellence, in order to help these institutions fully unlock this potential and hereby create a level playing field for research and innovation in the ERA. Possible synergies with ERC activities should be explored.— A Policy Support Facility to improve the design, implementation and evaluation of national/regional research and innovation policies.— Supporting access to international networks for excellent researchers and innovators who lack sufficient involvement in European and international networks, including COST. — Strengthening the administrative and operational capacity of transnational networks of National Contact Points, including through training, so that they can provide better support to potential participants. ";"";"H2020";"H2020-EC";"";"";"2014-09-23 20:20:57";"664481" +"H2020-EU.1.";"en";"H2020-EU.1.";"";"";"PRIORITY 'Excellent science'";"Excellent Science";"

PRIORITY 'Excellent science'

This Part aims to reinforce and extend the excellence of the Union's science base and to consolidate the ERA in order to make the Union's research and innovation system more competitive on a global scale. It consists of four specific objectives:a)""The European Research Council (ERC)"" shall provide attractive and flexible funding to enable talented and creative individual researchers and their teams to pursue the most promising avenues at the frontier of science, on the basis of Union-wide competition. H2020-EU.1.1. (http://cordis.europa.eu/programme/rcn/664099_en.html)b)""Future and emerging technologies (FET)"" shall support collaborative research in order to extend Europe's capacity for advanced and paradigm-changing innovation. It shall foster scientific collaboration across disciplines on radically new, high-risk ideas and accelerate development of the most promising emerging areas of science and technology as well as the Union-wide structuring of the corresponding scientific communities. H2020-EU.1.2. (http://cordis.europa.eu/programme/rcn/664101_en.html)c)""Marie Skłodowska-Curie actions"" shall provide excellent and innovative research training as well as attractive career and knowledge-exchange opportunities through cross-border and cross-sector mobility of researchers to best prepare them to face current and future societal challenges. H2020-EU.1.3. (http://cordis.europa.eu/programme/rcn/664109_en.html)d)""Research infrastructures"" shall develop and support excellent European research infrastructures and assist them to contribute to the ERA by fostering their innovation potential, attracting world-level researchers and training human capital, and complement this with the related Union policy and international cooperation. H2020-EU.1.4. (http://cordis.europa.eu/programme/rcn/664121_en.html)Each of those objectives has been proven to have high Union added value. Together, they form a powerful and balanced set of activities which, in concert with activities at national, regional and local level, span the breadth of Europe's needs regarding advanced science and technology. Bringing them together in a single programme will enable them to operate with greater coherence, in a rationalised, simplified and more focused way, while maintaining the continuity which is vital to sustain their effectiveness.The activities are inherently forward-looking, building skills in the long term, focusing on the next generation of science, technology, researchers and innovations and providing support for emerging talent from across the Union and associated countries, as well as worldwide. In view of their science-driven nature and largely 'bottom-up', investigator-driven funding arrangements, the European scientific community will play a strong role in determining the avenues of research followed under Horizon 2020";"";"H2020";"H2020-EC";"";"";"2014-09-23 20:18:04";"664091" +"H2020-EU.5.";"en";"H2020-EU.5.";"";"";"SCIENCE WITH AND FOR SOCIETY";"Science with and for Society";"

SCIENCE WITH AND FOR SOCIETY

Specific objective

The aim is to build effective cooperation between science and society, to recruit new talent for science and to pair scientific excellence with social awareness and responsibility.

Rationale and Union added value

The strength of the European science and technology system depends on its capacity to harness talent and ideas from wherever they exist. This can only be achieved if a fruitful and rich dialogue and active cooperation between science and society is developed to ensure a more responsible science and to enable the development of policies more relevant to citizens. Rapid advances in contemporary scientific research and innovation have led to a rise of important ethical, legal and social issues that affect the relationship between science and society. Improving the cooperation between science and society to enable a widening of the social and political support to science and to technology in all Member States is an increasingly crucial issue which the current economic crisis has greatly exacerbated. Public investment in science requires a vast social and political constituency sharing the values of science, educated and engaged in its processes and able to recognise its contributions to knowledge, to society and to economic progress.

Broad lines of activities

The focus of activities shall be to:(a) make scientific and technological careers attractive to young students, and foster sustainable interaction between schools, research institutions, industry and civil society organisations; (b) promote gender equality in particular by supporting structural changes in the organisation of research institutions and in the content and design of research activities; (c) integrate society in science and innovation issues, policies and activities in order to integrate citizens' interests and values and to increase the quality, relevance, social acceptability and sustainability of research and innovation outcomes in various fields of activity from social innovation to areas such as biotechnology and nanotechnology; (d) encourage citizens to engage in science through formal and informal science education, and promote the diffusion of science-based activities, namely in science centres and through other appropriate channels; (e) develop the accessibility and the use of the results of publicly-funded research; (f) develop the governance for the advancement of responsible research and innovation by all stakeholders (researchers, public authorities, industry and civil society organisations), which is sensitive to society needs and demands, and promote an ethics framework for research and innovation; (g) take due and proportional precautions in research and innovation activities by anticipating and assessing potential environmental, health and safety impacts; (h) improve knowledge on science communication in order to improve the quality and effectiveness of interactions between scientists, general media and the public. ";"";"H2020";"H2020-EC";"";"";"2014-09-23 20:21:13";"664495" +"H2020-EU.2.";"en";"H2020-EU.2.";"";"";"PRIORITY 'Industrial leadership'";"Industrial Leadership";"

PRIORITY 'Industrial leadership'

This Part aims to speed up development of the technologies and innovations that will underpin tomorrow's businesses and help innovative European SMEs to grow into world-leading companies. It consists of three specific objectives:a)""Leadership in enabling and industrial technologies"" shall provide dedicated support for research, development and demonstration and, where appropriate, for standardisation and certification, on information and communications technology (ICT), nanotechnology, advanced materials, biotechnology, advanced manufacturing and processing and space. Emphasis will be placed on interactions and convergence across and between the different technologies and their relations to societal challenges. User needs shall be taken into account in all these fields. H2020-EU.2.1. (http://cordis.europa.eu/programme/rcn/664145_en.html)b)""Access to risk finance"" shall aim to overcome deficits in the availability of debt and equity finance for R&D and innovation-driven companies and projects at all stages of development. Together with the equity instrument of the Programme for the Competitiveness of Enterprises and small and medium-sized enterprises (COSME) (2014-2020) it shall support the development of Union-level venture capital. H2020-EU.2.2. (http://cordis.europa.eu/programme/rcn/664217_en.html)c)""Innovation in SMEs"" shall provide SME-tailored support to stimulate all forms of innovation in SMEs, targeting those with the potential to grow and internationalise across the single market and beyond. H2020-EU.2.3. (http://cordis.europa.eu/programme/rcn/664223_en.html)The activities shall follow a business-driven agenda. The budgets for the specific objectives 'Access to risk finance' and 'Innovation in SMEs' will follow a demand-driven, bottom-up logic. Those budgets shall be complemented by the use of financial instruments. A dedicated SME instrument shall be implemented primarily in a bottom-up manner, tailored to the needs of SMEs, taking account of the specific objectives of the priority 'Societal challenges' and the specific objective 'Leadership in enabling and industrial technologies'.Horizon 2020 will take an integrated approach to the participation of SMEs, taking into account, inter alia, their knowledge and technology transfer needs, which should lead to a minimum of 20 % of the total combined budgets for all specific objectives of the priority 'Societal challenges' and the specific objective 'Leadership in enabling and industrial technologies' being devoted to SMEs.The specific objective 'Leadership in enabling and industrial technologies' shall follow a technology-driven approach to develop enabling technologies that can be used in multiple areas, industries and services. Applications of these technologies to meet societal challenges shall be supported together with the priority 'Societal challenges'.";"";"H2020";"H2020-EC";"";"";"2014-09-23 20:20:01";"664143" +"H2020-EU.6.";"en";"H2020-EU.6.";"";"";"NON-NUCLEAR DIRECT ACTIONS OF THE JOINT RESEARCH CENTRE (JRC)";"Joint Research Centre (JRC) non-nuclear direct actions";"

NON-NUCLEAR DIRECT ACTIONS OF THE JOINT RESEARCH CENTRE (JRC)

The JRC's activities shall be an integral part of Horizon 2020, in order to provide robust, evidence-based support for Union policies. This shall be driven by customer needs, complemented by forward-looking activities.

Specific objective

The specific objective is to provide customer-driven scientific and technical support to Union policies, while flexibly responding to new policy demands.

Rationale and Union added value

The Union has defined an ambitious policy agenda to 2020 which addresses a set of complex and interlinked challenges, such as sustainable management of resources and competitiveness. In order to successfully tackle these challenges, robust scientific evidence is needed which cuts across different scientific disciplines and allows the sound assessment of policy options. The JRC, playing its role as the science service for Union policy making, will provide the required scientific and technical support throughout all stages of the policy-making cycle, from conception to implementation and assessment. To contribute to this specific objective it will focus its research clearly on Union policy priorities while enhancing cross-cutting competences and cooperation with the Member States.The JRC's independence of special interests, whether private or national, combined with its scientific-technical reference role enable it to facilitate the necessary consensus building between stakeholders and policy makers. Member States and Union citizens benefit from the research of the JRC, most visibly in areas such as health and consumer protection, environment, safety and security, and management of crises and disasters.More specifically, Member States and regions will also benefit from support to their Smart Specialisation Strategies.The JRC is an integral part of the ERA and will continue to actively support its functioning through close collaboration with peers and stakeholders, maximising access to its facilities and through the training of researchers and by close cooperation with Member States and international institutions that pursue similar objectives. This will also promote the integration of new Member States and associated countries for which the JRC will continue to provide dedicated training courses on the scientific-technical basis of the body of Union law. The JRC will establish coordination links with other relevant Horizon 2020 specific objectives. As a complement to its direct actions and for the purpose of further integration and networking in the ERA, the JRC may also participate in Horizon 2020 indirect actions and co-ordination instruments in areas where it has the relevant expertise to produce Union added value.

Broad lines of activities

The JRC activities in Horizon 2020 will focus on the Union policy priorities and the societal challenges addressed by them. These activities are aligned with the objectives of the Europe 2020 strategy, and with the headings 'Security and citizenship' and 'Global Europe' of the Multiannual Financial Framework for 2014-2020.The JRC's key competence areas will be energy, transport, environment and climate change, agriculture and food security, health and consumer protection, information and communication technologies, reference materials, and safety and security (including nuclear safety and security in the Euratom programme). The JRC activities in these areas will be conducted taking into account relevant initiatives at the level of regions, Members States or the Union, within the perspective of shaping the ERA.These competence areas will be significantly enhanced with capacities to address the full policy cycle and to assess policy options. This includes:(a) anticipation and foresight - pro-active strategic intelligence on trends and events in science, technology and society and their possible implications for public policy;(b) economics - for an integrated service covering both the scientific-technical and the macro-economic aspects;(c) modelling - focusing on sustainability and economics and making the Commission less dependent on outside suppliers for vital scenario analysis;(d) policy analysis - to allow cross-sectoral investigation of policy options;(e) impact assessment - providing scientific evidence to support policy options.The JRC shall continue to pursue excellence in research and extensive interaction with research institutions as the basis for credible and robust scientific-technical policy support. To that end, it will strengthen collaboration with European and international partners, inter alia by participation in indirect actions. It will also carry out exploratory research and build up competences in emerging, policy-relevant areas on a selective basis.The JRC shall focus on:

Excellent science

(See also PRIORITY 'Excellent science')(http://cordis.europa.eu/programme/rcn/664091_en.html)Carry out research to enhance the scientific evidence base for policy making and examine emerging fields of science and technology, including through an exploratory research programme.

Industrial leadership

(See also PRIORITY 'Industrial leadership') (http://cordis.europa.eu/programme/rcn/664143_en.html)Contribute to European competitiveness through support to the standardisation process and standards with pre-normative research, development of reference materials and measurements, and harmonisation of methodologies in five focal areas (energy; transport; the flagship initiative 'Digital Agenda for Europe'; security and safety; consumer protection). Carry out safety assessments of new technologies in areas such as energy and transport and health and consumer protection. Contribute to facilitating the use, standardisation and validation of space technologies and data, in particular to tackle the societal challenges.

Societal challenges

(See also PRIORITY 'Societal challenges') (http://cordis.europa.eu/programme/rcn/664235_en.html)

(a) Health, demographic change and well-being

(See also H2020-EU.3.1.)(http://cordis.europa.eu/programme/rcn/664237_en.html)Contribute to health and consumer protection through scientific and technical support in areas such as food, feed and consumer products; environment and health; health-related diagnostic and screening practices; and nutrition and diets.

(b) Food security, sustainable agriculture and forestry, marine, maritime and inland water research, and the bioeconomy

(See also H2020-EU.3.2.)(http://cordis.europa.eu/programme/rcn/664237_en.html)Support the development, implementation and monitoring of European agriculture and fisheries policies, including food safety and security, and the development of a bio-economy through e.g. crop production forecasts, technical and socio-economic analyses and modelling, and promote healthy and productive seas.

(c) Secure, clean and efficient energy

(See also H2020-EU.3.3.)(http://cordis.europa.eu/programme/rcn/664237_en.html)Support the 20-20-20 climate and energy targets with research on technological and economic aspects of energy supply, efficiency, low-carbon technologies, and energy/electricity transmission networks.

(d) Smart, green and integrated transport

(See also H2020-EU.3.4.) (http://cordis.europa.eu/programme/rcn/664357_en.html)Support the Union's policy for the sustainable, safe and secure mobility of persons and goods with laboratory studies, modelling and monitoring approaches, including low-carbon technologies for transport, such as electrification, clean and efficient vehicles and alternative fuels, and smart mobility systems.

(e) Climate action, environment, resource efficiency and raw materials

(See also H2020-EU.3.5.)(http://cordis.europa.eu/programme/rcn/664389_en.html)Investigate the cross-sectoral challenges of the sustainable management of natural resources through monitoring of key environmental variables and the development of an integrated modelling framework for sustainability assessment.Support resource efficiency, emission reductions and sustainable supply of raw materials through the integrated social, environmental and economic assessments of clean production processes, technologies, and products and services.Support Union development policy goals with research to help ensure adequate supplies of essential resources focusing on monitoring environmental and resource parameters, food safety and security related analyses, and knowledge transfer.

(f) Europe in a changing world - Inclusive, innovative and reflective societies

(See also H2020-EU.3.6.)(http://cordis.europa.eu/programme/rcn/664435_en.html)Contribute to and monitor the implementation of the flagship initiative 'Innovation Union' with macro-economic analyses of the drivers and barriers of research and innovation, and development of methodologies, scoreboards and indicators.Support the ERA by monitoring the functioning of the ERA and analysing drivers of and barriers to some of its key elements, and by research networking, training, and opening JRC facilities and databases to users in Member States and in candidate and associated countries.Contribute to the key goals of the flagship initiative 'Digital Agenda for Europe' by qualitative and quantitative analyses of economic and social aspects (Digital Economy, Digital Society, Digital Living).

(g) Secure societies - Protecting freedom and security of Europe and its citizens

(See also H2020-EU.3.7.) (http://cordis.europa.eu/programme/rcn/664463_en.html)Support internal safety and security through the identification and assessment of the vulnerability of critical infrastructures as vital components of societal functions, and through the operational performance assessment and social and ethical evaluation of technologies related to the digital identity. Address global security challenges, including emerging or hybrid threats, through the development of advanced tools for information mining and analysis as well as for crisis management.Enhance the Union's capacity for managing natural and man-made disasters by strengthening the monitoring of infrastructures and the development of test facilities and of global multi-hazard early warning and risk management information systems, making use of satellite-based Earth observation frameworks. ";"";"H2020";"H2020-EC";"";"";"2014-09-23 20:21:28";"664511" +"H2020-EU.7.";"en";"H2020-EU.7.";"";"";"THE EUROPEAN INSTITUTE OF INNOVATION AND TECHNOLOGY (EIT)";"European Institute of Innovation and Technology (EIT)";"

THE EUROPEAN INSTITUTE OF INNOVATION AND TECHNOLOGY (EIT)

The EIT shall play a major role by bringing together excellent research, innovation and higher education thus integrating the knowledge triangle. The EIT shall do so primarily through the KICs. In addition it shall ensure that experiences are shared between and beyond the KICs through targeted dissemination and knowledge sharing measures, thereby promoting a faster uptake of innovation models across the Union.

Specific objective

The specific objective is to integrate the knowledge triangle of higher education, research and innovation and thus to reinforce the Union's innovation capacity and address societal challenges.Europe is facing a number of structural weaknesses when it comes to innovation capacity and the ability to deliver new services, products and processes, thereby hampering sustainable economic growth and job creation. Among the main issues at hand are Europe's relatively poor record in talent attraction and retention; the under-utilisation of existing research strengths in terms of creating economic or social value; the lack of research results brought to the market; low levels of entrepreneurial activity and mindset; low leverage of private investment in R&D; a scale of resources, including human resources, in poles of excellence which is insufficient to compete globally; and an excessive number of barriers to collaboration within the knowledge triangle of higher education, research and innovation on a European level.

Rationale and Union added value

If Europe is to compete on an international scale, these structural weaknesses need to be overcome. The elements identified above are common across Member States and affect the Union's innovation capacity as a whole.The EIT will address these issues by promoting structural changes in the European innovation landscape. It will do so by fostering the integration of higher education, research and innovation of the highest standards, notably through its Knowledge and Innovation Communities (KICs), thereby creating new environments conducive to innovation, and by promoting and supporting a new generation of entrepreneurial people and by stimulating the creation of innovative spin-offs and start-ups. In doing so, the EIT will contribute fully to the objectives of the Europe 2020 strategy and notably to the flagship initiatives 'Innovation Union' and 'Youth on the Move'.In addition, the EIT and its KICs should seek synergies and interaction across the priorities of Horizon 2020 and with other relevant initiatives. In particular, the EIT will contribute through the KICs to the specific objectives of the priority ""Societal challenges"" and to the specific objective ""Leadership in enabling and industrial technologies"".

Integrating education and entrepreneurship with research and innovation

The specific feature of the EIT is to integrate higher education and entrepreneurship with research and innovation as links in a single innovation chain across the Union and beyond, which should lead, inter alia, to an increase of innovative services, products and processes brought to the market.

Business logic and a results-oriented approach

The EIT, through its KICs, operates in line with business logic and takes a results-oriented approach. Strong leadership is a pre-requisite: each KIC is driven by a CEO. KIC partners are represented by single legal entities to allow more streamlined decision-making. KICs must produce clearly defined annual business plans, setting out a multiannual strategy and including an ambitious portfolio of activities from education to business creation, with clear targets and deliverables, looking for both market and societal impact. The current rules concerning participation, evaluation and monitoring of KICs allow fast-track, business-like decisions. Business and entrepreneurs should have a strong role in driving activities in KICs, and the KICs should be able to mobilize investment and long-term commitment from the business sector.

Overcoming fragmentation with the aid of long-term integrated partnerships

The EIT KICs are highly integrated ventures, bringing together partners from industry including SMEs, higher education, research and technology institutes, renowned for their excellence, in an open, accountable and transparent manner. KICs allow partners from across the Union and beyond to unite in new, cross-border configurations, optimise existing resources and open up access to new business opportunities through new value chains, addressing higher-risk, larger-scale challenges. KICs are open to participation of new entrants bringing added value to the partnership, including SMEs.

Nurturing Europe's main innovation asset: its highly talented people

Talent is a key ingredient of innovation. The EIT nurtures people and interactions between them, by putting students, researchers and entrepreneurs at the centre of its innovation model. The EIT will provide an entrepreneurial and creative culture and cross-disciplinary education to talented people, through EIT-labelled Masters and PhD degrees, intended to emerge as an internationally recognised brand of excellence. In doing so, the EIT strongly promotes mobility and training within the knowledge triangle.

Broad lines of the activities

The EIT shall operate mainly through the KICs particularly in areas which offer a true innovation potential. While the KICs have overall substantial autonomy in defining their own strategies and activities, there are a number of innovative features common to all KICs where coordination and synergies shall be sought. The EIT will moreover enhance its impact by disseminating good practices on how to integrate the knowledge triangle and the development of entrepreneurship, integrating relevant new partners where they can provide added value, and by actively fostering a new culture of knowledge sharing.

(a) Transferring and applying higher education, research and innovation activities for new business creation

The EIT shall aim to create an environment to develop the innovative potential of people and to capitalise on their ideas, irrespective of their place in the innovation chain. Thereby, the EIT will also help to address the 'European paradox' that excellent existing research is far from being harnessed to the full. In doing so, the EIT shall help to bring ideas to the market. Chiefly through its KICs and its focus on fostering entrepreneurial mindsets, it will create new business opportunities in the form of both start-ups and spin-offs but also within existing industry. Focus will be on all forms of innovation, including technological, social and non-technological innovation.

(b) Cutting-edge and innovation-driven research in areas of key economic and societal interest

The EIT's strategy and activities shall be driven by a focus on areas which offer a true innovation potential and have a clear relevance to the societal challenges addressed in Horizon 2020. By addressing key societal challenges in a comprehensive way, the EIT will promote inter- and multi-disciplinary approaches and help focus the research efforts of the partners in the KICs.

(c) Development of talented, skilled and entrepreneurial people with the aid of education and training

The EIT shall fully integrate education and training at all stages of careers and support and facilitate the development of new and innovative curricula to reflect the need for new profiles engendered by complex societal and economic challenges. To this end, the EIT will play a key role in promoting new joint or multiple degrees and diplomas in Member States, respecting the principle of subsidiarity.The EIT will also play a substantial role in fine-tuning the concept of 'entrepreneurship' through its educational programmes, which promote entrepreneurship in a knowledge-intensive context, building on innovative research and contributing to solutions of high societal relevance.

(d) Dissemination of best practice and systemic knowledge-sharing

The EIT shall aim to pioneer new approaches in innovation and to develop a common innovation and knowledge-transfer culture, including in SMEs. This could happen, inter alia, by sharing the diverse experience of the KICs through various dissemination mechanisms, such as a stakeholder platform and a fellowship scheme.

(e) International dimension

The EIT acts conscientious of the global context it operates in and shall help to forge links with key international partners in accordance with Article 27(2). By scaling up centres of excellence through the KICs and by fostering new educational opportunities, it will aim to make Europe more attractive for talent from abroad.

(f) Enhancing European wide impact through an innovative funding model

The EIT will make a strong contribution to the objectives set in Horizon 2020, in particular by addressing societal challenges in a way complementing other initiatives in these areas. Within the framework of Horizon 2020 it will test out new and simplified approaches to funding and governance and thereby play a pioneering role within the European innovation landscape. Part of the annual contribution will be attributed to KICs in a competitive way. The EIT's approach to funding will be firmly based on a strong leverage effect, mobilising both public and private funds at national and Union level, and it will be communicated, in a transparent manner, to the Member States and relevant stakeholders. Moreover, it will employ entirely new vehicles for targeted support to individual activities through the EIT Foundation.

(g) Linking regional development to European opportunities

Through the KICs and their co-location centres – nodes of excellence, bringing together higher education, research and business partners in a given geographical location – the EIT will also be linked to regional policy. In particular, it shall ensure a better connection between higher education institutions, the labour market and regional innovation and growth, in the context of regional and national smart specialisation strategies. In doing so, it will contribute to the objectives of the Union's cohesion policy. ";"";"H2020";"H2020-EC";"";"";"2014-09-23 20:21:45";"664513" +"H2020-EU.2.1.4.";"en";"H2020-EU.2.1.4.";"";"";"INDUSTRIAL LEADERSHIP - Leadership in enabling and industrial technologies – Biotechnology";"Biotechnology";"

INDUSTRIAL LEADERSHIP - Leadership in enabling and industrial technologies – Biotechnology

Specific objective for biotechnology

The specific objective of biotechnology research and innovation is to develop competitive, sustainable, safe and innovative industrial products and processes and contribute as an innovation driver in a number of European sectors, like agriculture, forestry, food, energy, chemical and health as well as the knowledge-based bioeconomy.A strong scientific, technological and innovation base in biotechnology will support European industries securing leadership in this key enabling technology. This position will be further strengthened by integrating the health and safety assessment, the economic and environmental impact of use of the technology and the management aspects of the overall and specific risks in the deployment of biotechnology.

Rationale and Union added value

Powered by the expansion of the knowledge of living systems, biotechnology is set to deliver a stream of new applications and to strengthen the Union's industrial base and its innovation capacity. Examples of the rising importance of biotechnology are in industrial applications including biopharmaceuticals, food and feed production and biochemicals, of which the market share of the latter is estimated to increase by up to 12 % to 20 % of chemical production by 2015. A number of the so-called twelve principles of Green Chemistry are also addressed by biotechnology, due to the selectivity and efficiency of biosystems. The possible economic burdens for Union enterprises can be reduced by harnessing the potential of biotechnology processes and bio-based products to reduce CO2 emissions, estimated to range from between 1 to 2,5 billion tonnes CO2 equivalent per year by 2030.In Europe's biopharmaceutical sector, already some 20 % of the current medicines are derived from biotechnology, with up to 50 % of new medicines. Biotechnology will play a major role in the transition towards a bio-based economy by developing new industrial processes. Biotechnology also opens new avenues for the development of a sustainable agriculture, aquaculture and forestry and for exploiting the huge potential of marine resources for producing innovative industrial, health, energy, chemical and environmental applications. The emerging sector of marine (blue) biotechnology has been predicted to grow by 10 % a year.Other key sources of innovation are at the interface between biotechnology and other enabling and converging technologies, in particular nanotechnologies and ICT, with applications such as sensing and diagnosing.

Broad lines of the activities

(a) Boosting cutting-edge biotechnologies as a future innovation driver

Development of emerging technology areas such as synthetic biology, bioinformatics and systems biology, which hold great promise for innovative products and technologies and completely novel applications.

(b) Biotechnology-based industrial products and processes

Developing industrial biotechnology and industrial scale bio-process design for competitive industrial products and sustainable processes (e.g. chemical, health, mining, energy, pulp and paper, fibre-based products and wood, textile, starch, food processing) and its environmental and health dimensions, including clean-up operations.

(c) Innovative and competitive platform technologies

Development of platform technologies (e.g. genomics, meta-genomics, proteomics, metabolomics, molecular tools, expression systems, phenotyping platforms and cell-based platforms) to enhance leadership and competitive advantage in a wide number of sectors that have economic impacts.";"";"H2020";"H2020-EU.2.1.";"";"";"2014-09-22 20:41:44";"664189" +"H2020-EU.2.1.3.";"en";"H2020-EU.2.1.3.";"";"";"INDUSTRIAL LEADERSHIP - Leadership in enabling and industrial technologies - Advanced materials";"Advanced materials";"

INDUSTRIAL LEADERSHIP - Leadership in enabling and industrial technologies - Advanced materials

Specific objective for advanced materials

The specific objective of advanced materials research and innovation is to develop materials with new functionalities and improved in-service performance, for more competitive and safe products that minimise the impact on the environment and the consumption of resources.Materials are at the core of industrial innovation and are key enablers. Advanced materials with higher knowledge content, new functionalities and improved performance are indispensable for industrial competitiveness and sustainable development across a broad range of applications and sectors.

Rationale and Union added value

New advanced materials are needed in developing better performing and sustainable products and processes and for substituting scarce resources. Such materials are a part of the solution to our industrial and societal challenges, offering better performance in their use, lower resource and energy requirements, and sustainability during the entire life-cycle of the products.Application-driven development often involves the design of totally new materials, with the ability to deliver planned in-service performances. Such materials are an important element in the supply chain of high value manufacturing. They are also the basis for progress in cross-cutting technology areas (for example healthcare technologies, biosciences, electronics and photonics) and in virtually all market sectors. The materials themselves represent a key step in increasing the value of products and their performance. The estimated value and impact of advanced materials is significant, with an annual growth rate of about 6 % and expected market size of the order of EUR 100 billion by 2015.Materials shall be conceived according to a full life-cycle approach, from the supply of available materials to end of life (cradle to cradle), with innovative approaches to minimise the resources (including energy) required for their transformation or to minimise negative impacts for humans and the environment. Continuous use, recycling or secondary end-of-life utilisation of the materials shall also be covered, as well as related societal innovation, such as changes in consumer behaviour and new business models.To accelerate progress, a multidisciplinary and convergent approach shall be fostered, involving chemistry, physics, engineering sciences, theoretical and computational modelling, biological sciences and increasingly creative industrial design.Novel green innovation alliances and industrial symbiosis shall be fostered allowing industries to diversify and expand their business models, re-using their waste as a basis for new productions.

Broad lines of the activities

(a) Cross-cutting and enabling materials technologies

Research on materials by design, functional materials, multifunctional materials with higher knowledge content, new functionalities and improved performance, and structural materials for innovation in all industrial sectors, including the creative industries.

(b) Materials development and transformation

Research and development to ensure efficient, safe and sustainable development and scale-up to enable industrial manufacturing of future design-based products towards a ""no-waste"" management of materials in Europe.

(c) Management of materials components

Research and development for new and innovative techniques for materials and their components and systems.

(d) Materials for a sustainable, resource-efficient and low emission industry

Developing new products and applications, business models and responsible consumer behaviour that reduce energy demand and facilitate low-carbon production.

(e) Materials for creative industries, including heritage

Applying design and the development of converging technologies to create new business opportunities, including the preservation and restoration of materials with historical or cultural value, as well as novel materials.

(f) Metrology, characterisation, standardisation and quality control

Promoting technologies such as characterisation, non-destructive evaluation, continuous assessing and monitoring and predictive modelling of performance for progress and impact in materials science and engineering.

(g) Optimisation of the use of materials

Research and development to investigate substitution and alternatives to the use of materials and innovative business model approaches and identification of critical resources.";"";"H2020";"H2020-EU.2.1.";"";"";"2014-09-22 20:41:15";"664173" +"H2020-EU.2.1.2.";"en";"H2020-EU.2.1.2.";"";"";"INDUSTRIAL LEADERSHIP - Leadership in enabling and industrial technologies – Nanotechnologies";"Nanotechnologies";"

INDUSTRIAL LEADERSHIP - Leadership in enabling and industrial technologies – Nanotechnologies

Specific objective for nanotechnologies

The specific objective of nanotechnologies research and innovation is to secure Union leadership in this high growth global market, by stimulating scientific and technological advancements and investment in nanotechnologies and their uptake in high added value, competitive products and services across a range of applications and sectors.By 2020, nanotechnologies will be mainstreamed, that is seamlessly integrated with most technologies and applications, driven by consumer benefits, quality of life, healthcare, sustainable development and the strong industrial potential for achieving previously unavailable solutions for productivity and resource efficiency.Europe must also set the global benchmark on safe and responsible nanotechnology deployment and governance ensuring both high societal and industrial returns combined with high standards of safety and sustainability.Products using nanotechnologies represent a world market which Europe cannot afford to ignore. Market estimates of the value of products incorporating nanotechnology as the key component reach EUR 700 billion by 2015 and EUR 2 trillion by 2020, with a corresponding 2 and 6 million jobs respectively. Europe's nanotechnology companies should exploit this double digit market growth and be capable of capturing a market share at least equal to Europe's share of global research funding (i.e. a quarter) by 2020.

Rationale and Union added value

Nanotechnologies are a spectrum of evolving technologies with proven potential, having revolutionary impact for example in materials, ICT, transport mobility, life sciences, healthcare (including treatment), consumer goods and manufacturing once the research is translated into breakthrough, sustainable and competitive products and production processes.Nanotechnologies have a critical role to play in addressing the challenges identified by the Europe 2020 strategy. The successful deployment of these key enabling technologies will contribute to the competitiveness of Union industry by enabling novel and improved products or more efficient processes and provide responses to today's and future societal challenges.The global research funding for nanotechnologies has doubled from around EUR 6,5 billion in 2004 to around EUR 12,5 billion in 2008, with the Union accounting for about a quarter of this total. The Union has recognised research leadership in nanosciences and nanotechnologies with a projection of some 4 000 companies in the Union by 2015. This research leadership must be maintained and amplified and further translated into practical use and commercialisation.Europe now needs to secure and build on its position in the global market by promoting wide scale cooperation in and across many different value chains and between different industrial sectors to realise the process scale-up of these technologies into safe, sustainable and viable commercial products. The issues of risk assessment and management as well as responsible governance are emerging as determining factors of future impact of nanotechnologies on society, the environment and the economy.Thus, the focus of activities shall be on the widespread, responsible and sustainable application of nanotechnologies into the economy, to enable benefits with high societal and industrial impact. To ensure the potential opportunities, including setting-up new companies and generating new jobs, research should provide the necessary tools to allow for standardisation and regulation to be correctly implemented.

Broad lines of the activities

(a) Developing next generation nanomaterials, nanodevices and nanosystems

Aiming at fundamentally new products enabling sustainable solutions in a wide range of sectors.

(b) Ensuring the safe and sustainable development and application of nanotechnologies

Advancing scientific knowledge of the potential impact of nanotechnologies and nanosystems on health or on the environment, and providing tools for risk assessment and management along the entire life cycle, including standardisation issues.

(c) Developing the societal dimension of nanotechnology

Focusing on governance of nanotechnology for societal and environmental benefit.

(d) Efficient and sustainable synthesis and manufacturing of nanomaterials, components and systems

Focusing on new operations, smart integration of new and existing processes, including technology convergence, as well as up-scaling to achieve high precision large-scale production of products and flexible and multi-purpose plants that ensure the efficient transfer of knowledge into industrial innovation.

(e) Developing and standardisation of capacity-enhancing techniques, measuring methods and equipment

Focusing on the underpinning technologies supporting the development and market introduction of safe complex nanomaterials and nanosystems.";"";"H2020";"H2020-EU.2.1.";"";"";"2014-09-22 20:40:54";"664161" +"H2020-EU.2.1.6.1.2.";"en";"H2020-EU.2.1.6.1.2.";"";"";"Boost innovation between space and non-space sectors";"";"";"";"H2020";"H2020-EU.2.1.6.1.";"";"";"2014-09-22 20:52:48";"664541" +"H2020-EU.2.1.6.1.1.";"en";"H2020-EU.2.1.6.1.1.";"";"";"Safeguard and further develop a competitive, sustainable and entrepreneurial space industry and research community and strengthen European non-dependence in space systems";"";"";"";"H2020";"H2020-EU.2.1.6.1.";"";"";"2014-09-22 20:52:44";"664539" +"H2020-EU.3.4.4.";"en";"H2020-EU.3.4.4.";"";"";"Socio-economic and behavioural research and forward looking activities for policy making";"Socio-economic and behavioural research";"

Socio-economic and behavioural research and forward-looking activities for policy making

The aim is to support improved policy making which is necessary to promote innovation and meet the challenges raised by transport and the societal needs related to it.The focus of activities shall be to improve the understanding of transport-related socio-economic impacts, trends and prospects, including the evolution of future demand, and provide policy makers with evidence-based data and analyses. Attention will also be paid to the dissemination of results emerging from these activities.";"";"H2020";"H2020-EU.3.4.";"";"";"2014-09-22 20:47:57";"664387" +"H2020-EU.3.4.8.";"en";"H2020-EU.3.4.8.";"";"";"Shift2Rail JU";"";"";"";"H2020";"H2020-EU.3.4.";"";"";"2016-10-20 17:07:27";"700520" +"H2020-EU.3.4.7.";"en";"H2020-EU.3.4.7.";"";"";"SESAR JU";"";"";"";"H2020";"H2020-EU.3.4.";"";"";"2015-05-26 14:24:12";"680827" +"H2020-EU.3.4.1.";"en";"H2020-EU.3.4.1.";"";"";"Resource efficient transport that respects the environment";"Resource efficient transport that respects the environment";"

Resource-efficient transport that respects the environment

The aim is to minimise transport systems' impact on climate and the environment (including noise and air pollution) by improving their quality and efficiency in the use of natural resources and fuel, and by reducing greenhouse gas emissions and dependence on fossil fuels.The focus of activities shall be to reduce resource consumption, particularly fossil fuels, greenhouse gas emissions and noise levels, as well as to improve transport and vehicle efficiency; to accelerate the development, manufacturing and deployment of a new generation of clean (electric, hydrogen and other low or zero emission) vehicles, including through breakthroughs and optimisation in engines, energy storage and infrastructure; to explore and exploit the potential of alternative and sustainable fuels and innovative and more efficient propulsion and operating systems, including fuel infrastructure and charging; to optimise the planning and use of infrastructures, by means of intelligent transport systems, logistics, and smart equipment; and to increase the use of demand management and public and non-motorised transport, and of intermodal mobility chains, particularly in urban areas. Innovation aimed at achieving low or zero emissions in all modes of transport will be encouraged.";"";"H2020";"H2020-EU.3.4.";"";"";"2014-09-22 20:47:04";"664359" +"H2020-EU.3.4.2.";"en";"H2020-EU.3.4.2.";"";"";"Better mobility, less congestion, more safety and security";"Mobility, safety and security";"

Better mobility, less congestion, more safety and security

The aim is to reconcile the growing mobility needs with improved transport fluidity, through innovative solutions for seamless, intermodal, inclusive, accessible, affordable, safe, secure, healthy, and robust transport systems.The focus of activities shall be to reduce congestion, improve accessibility, interoperability and passenger choices, and to match user needs by developing and promoting integrated door-to-door transport, mobility management and logistics; to enhance intermodality and the deployment of smart planning and management solutions; and to drastically reduce the occurrence of accidents and the impact of security threats.";"";"H2020";"H2020-EU.3.4.";"";"";"2014-09-22 20:47:20";"664367" +"H2020-EU.3.4.3.";"en";"H2020-EU.3.4.3.";"";"";"Global leadership for the European transport industry";"Global leadership for the European transport industry";"

Global leadership for the European transport industry

The aim is to reinforce the competitiveness and performance of European transport manufacturing industries and related services (including logistic processes, maintenance, repair, retrofitting and recycling) while retaining areas of European leadership (e.g. aeronautics).The focus of activities shall be to develop the next generation of innovative air, waterborne and land transport means, ensure sustainable manufacturing of innovative systems and equipment and to prepare the ground for future transport means, by working on novel technologies, concepts and designs, smart control systems and interoperable standards, efficient production processes, innovative services and certification procedures, shorter development times and reduced lifecycle costs without compromising operational safety and security.";"";"H2020";"H2020-EU.3.4.";"";"";"2014-09-22 20:47:39";"664377" +"H2020-EU.3.4.6.";"en";"H2020-EU.3.4.6.";"";"";"FCH2 (transport objectives)";"";"";"";"H2020";"H2020-EU.3.4.";"";"";"2014-09-22 21:40:15";"665341" +"H2020-EU.3.4.5";"en";"H2020-EU.3.4.5";"";"";"CLEANSKY2";"";"";"";"H2020";"H2020-EU.3.4.";"";"";"2014-09-22 21:42:50";"665402" +"H2020-EU.3.1.3.";"en";"H2020-EU.3.1.3.";"";"";"Treating and managing disease";"";"";"";"H2020";"H2020-EU.3.1.";"";"";"2014-09-22 20:43:46";"664255" +"H2020-EU.5.a.";"en";"H2020-EU.5.a.";"";"";"Make scientific and technological careers attractive to young students, and forster sustainable interaction between schools, research institutions, industry and civil society organisations";"";"";"";"H2020";"H2020-EU.5.";"";"";"2014-09-22 20:51:26";"664497" +"H2020-EU.2.3.";"fr";"H2020-EU.2.3.";"";"";"PRIMAUTÉ INDUSTRIELLE - Innovation dans les PME";"Innovation in SMEs";"

PRIMAUTÉ INDUSTRIELLE - Innovation dans les PME

Objectif spécifique

L'objectif spécifique est de stimuler une croissance économique durable en relevant les niveaux d'innovation au sein des PME, en couvrant leurs différents besoins en la matière tout au long du cycle de l'innovation, quel que soit le type d'innovation, et de créer ainsi davantage de PME à croissance rapide et de caractère international.Étant donné le rôle central des PME dans l'économie européenne, les activités de recherche et d'innovation réalisées en leur sein joueront un rôle fondamental dans le renforcement de la compétitivité, dans l'accélération de la croissance économique et de la création d'emplois et, partant, dans la réalisation des objectifs de la stratégie Europe 2020, et notamment de son initiative phare «Une Union de l'innovation».Malgré leur importance en termes économiques et d'emploi et en dépit de leur potentiel d'innovation non négligeable, les PME rencontrent néanmoins différents types de difficultés pour accroître leur capacité d'innovation et leur compétitivité, y compris un manque de ressources financières et d'accès au financement, un manque de compétences dans la gestion de l'innovation, des faiblesses dans la mise en réseau et la coopération avec des parties externes, ainsi qu'un recours insuffisant aux marchés publics pour stimuler l'innovation dans les PME. Si l'Europe produit à peu près autant de jeunes entreprises (start-ups) que les États-Unis, ses PME ont beaucoup plus de mal que leurs homologues américaines à se transformer en grandes entreprises. L'internationalisation de l'économie et l'interpénétration croissante des chaînes de valeur accroissent la pression qui pèse sur elles. Les PME doivent renforcer leur capacité de recherche et d'innovation. Pour réussir à faire face à la concurrence sur des marchés mondiaux en rapide évolution, elles doivent générer, adopter et commercialiser plus rapidement et dans une plus grande mesure les nouvelles connaissances et les nouvelles idées commerciales. L'enjeu est d'encourager l'innovation dans les PME pour augmenter leur compétitivité et leur assurer une plus grande viabilité et une plus forte croissance.Les actions proposées visent à compléter les politiques et programmes nationaux et régionaux en faveur de l'innovation des entreprises, à promouvoir la coopération entre les PME, y compris la coopération transnationale, les grappes d'entreprises et les autres acteurs de l'innovation en Europe, à réduire la fracture entre les activités de recherche et de développement et une commercialisation réussie, à créer un environnement plus favorable à l'innovation des entreprises, y compris par l'adoption de mesures centrées sur la demande et de mesures conçues pour stimuler le transfert des connaissances, et à encourager la prise en considération du caractère évolutif des processus d'innovation, des nouvelles technologies, des marchés et des modèles d'entreprise.Des relations étroites seront établies avec les politiques de l'Union relatives aux entreprises, dont COSME et les fonds de la politique de cohésion, de manière à susciter des synergies et à garantir une approche cohérente.

Justification et valeur ajoutée de l'Union

De par leur capacité à transformer rapidement et efficacement les idées nouvelles en réussites économiques, les PME sont des moteurs essentiels de l'innovation. En apportant les résultats de la recherche sur le marché, elles sont d'importants vecteurs de diffusion des connaissances. Les PME ont un rôle déterminant à jouer dans les processus de transfert de technologies et de connaissances, en contribuant à la mise sur le marché d'innovations issues de travaux de recherche menés au sein des universités, des organismes de recherche et des entreprises faisant de la recherche. Comme on a pu l'observer ces vingt dernières années, des secteurs entiers ont connu une nouvelle vie et de nouvelles industries ont été créées grâce aux PME innovantes. Les entreprises à croissance rapide sont essentielles au développement des entreprises émergentes et à l'accélération des changements structurels dont l'Europe a besoin pour devenir une économie de la connaissance durable bénéficiant d'une croissance soutenue et d'emplois de qualité.Les PME sont présentes dans tous les secteurs de l'économie. Elles représentent en Europe une part de l'économie plus importante que dans d'autres régions du monde, telles que les États-Unis. Tous les types de PME sont capables d'innover. Il convient de les inciter à investir dans la recherche et l'innovation et de les soutenir dans cette voie, ainsi que de renforcer leur capacité à gérer les processus d'innovation. Ce faisant, elles devraient être en mesure de tirer pleinement parti du potentiel d'innovation du marché intérieur et de l'Espace européen de la recherche, de façon à créer de nouveaux débouchés commerciaux en Europe et ailleurs et à contribuer à relever les principaux défis de société.La participation aux activités de recherche et d'innovation de l'Union renforce les capacités des PME en matière de recherche et de développement et sur le plan technologique; elle accroît leur capacité à produire, intégrer et utiliser les nouvelles connaissances, renforce l'exploitation économique des solutions nouvelles, encourage l'innovation sur le plan des produits, des services et des modèles d'entreprise, promeut les activités commerciales sur les marchés plus importants et donne aux réseaux de la connaissance des PME un caractère plus international. Les PME qui disposent de bonnes structures de gestion de l'innovation et qui, dans ce cas, dépendent souvent d'une expertise et de compétences extérieures, sont plus performantes que les autres.Les collaborations transfrontières sont un élément important des stratégies d'innovation élaborées par les PME pour surmonter certains des problèmes liés à leur taille, tels que l'accès aux compétences scientifiques et technologiques et à de nouveaux marchés. Elles contribuent à transformer les idées en bénéfices et en croissance pour l'entreprise et, en retour, à augmenter l'investissement privé dans les activités de recherche et d'innovation.Les programmes régionaux et nationaux dans le domaine de la recherche et de l'innovation, souvent soutenus par la politique de cohésion de l'Union européenne, apportent une contribution essentielle en matière d'aide aux PME. Les fonds de la politique de cohésion ont en particulier un rôle essentiel à jouer en assurant le renforcement des capacités des PME et en mettant en place une échelle de progression vers l'excellence, de sorte qu'elles puissent élaborer des projets d'excellence susceptibles de bénéficier d'un financement au titre d'Horizon 2020. Seuls quelques programmes nationaux et régionaux financent néanmoins les activités transnationales de recherche et d'innovation entreprises par les PME, la diffusion et l'adoption de solutions innovantes à l'échelle de l'Union ou les services transfrontières de soutien à l'innovation. Le défi consiste à apporter aux PME un soutien ouvert sur le plan thématique afin de mener à bien des projets internationaux s'inscrivant dans les stratégies d'innovation des entreprises. Des actions s'imposent donc à l'échelle de l'Union pour compléter les activités entreprises au niveau national et régional, pour en renforcer l'impact et pour assurer l'ouverture des systèmes de soutien aux activités de recherche et d'innovation.

Grandes lignes des activités

(a) Intégrer à tous les niveaux la question du soutien aux PME en particulier par l'intermédiaire d'un instrument spécifique

Les PME sont soutenues à tous les niveaux d'Horizon 2020. À cette fin, des conditions plus favorables pour les PME sont mises en place, qui facilitent leur participation à la stratégie Horizon 2020. En outre, un instrument dédié aux PME fournit un soutien graduel et cohérent couvrant l'intégralité du cycle de l'innovation. Cet instrument cible tous les types de PME innovantes démontrant une forte ambition de se développer, de croître et de s'internationaliser. Il est disponible pour tous les types d'innovation, y compris les innovations à caractère non technologique et à caractère social et les innovations dans le domaine des services, étant donné que chaque activité apporte une valeur ajoutée européenne manifeste. L'objectif est de développer le potentiel d'innovation des PME et de capitaliser sur ce dernier, en comblant les lacunes en matière de financement qui affectent les activités de recherche et d'innovation à haut risque entreprises en phase initiale, en stimulant les innovations et en accélérant la commercialisation des résultats de la recherche par le secteur privé.L'instrument fonctionnera dans le cadre d'un système unique de gestion centralisée et d'un régime administratif allégé et selon le principe du guichet unique. Il sera essentiellement mis en œuvre selon une logique ascendante via un appel à propositions ouvert permanent.L'ensemble des objectifs spécifiques de la priorité «Défis de société», et l'objectif spécifique «Primauté dans le domaine des technologies génériques et industrielles» utiliseront l'instrument dédié aux PME et affecteront un budget à son financement.

(b) Soutien aux PME à forte intensité de recherche

L'objectif est de promouvoir, au niveau transnational, l'innovation axée sur le marché par les PME menant des activités de recherche et de développement. Une action spécifique cible les PME à forte intensité de recherche, actives dans tous les secteurs dans lesquels la capacité d'exploiter commercialement les résultats de projets est avérée. Cette action se fondera sur le programme Eurostars.

(c) Renforcement de la capacité d'innovation des PME

Des activités transnationales à l'appui de la mise en œuvre et en complément des mesures spécifiquement consacrées aux PME seront soutenues à tous les niveaux d'Horizon 2020, notamment en vue de renforcer la capacité d'innovation des PME. Ces activités seront coordonnées, en tant que de besoin, avec des mesures nationales équivalentes. Une coopération étroite est envisagée avec le réseau des points de contact nationaux et le réseau Entreprise Europe.

(d) Soutien à l'innovation axée sur le marché

L'innovation axée sur le marché au niveau transnational est soutenue afin d'améliorer les conditions qui sous-tendent l'innovation, et les obstacles spécifiques qui empêchent en particulier la croissance des PME innovantes sont supprimés.";"";"H2020";"H2020-EU.2.";"";"";"2014-09-22 20:42:47";"664223" +"H2020-EU.2.3.";"pl";"H2020-EU.2.3.";"";"";"WIODĄCA POZYCJA W PRZEMYŚLE - Innowacje w MŚP";"Innovation in SMEs";"

WIODĄCA POZYCJA W PRZEMYŚLE - Innowacje w MŚP

Cel szczegółowy

Celem szczegółowym jest stymulowanie zrównoważonego wzrostu gospodarczego poprzez podnoszenie poziomu innowacji w małych i średnich przedsiębiorstwach (MŚP), z uwzględnieniem ich różnych potrzeb w całym cyklu innowacji, w odniesieniu do wszystkich rodzajów innowacji, a co za tym idzie tworzenie szybciej się rozwijających, aktywnych na arenie międzynarodowej MŚP.Biorąc pod uwagę podstawową rolę MŚP w gospodarce Europy, badania naukowe i innowacje w MŚP będą mieć zasadnicze znaczenie dla zwiększenia konkurencyjności, stymulowania wzrostu gospodarczego i tworzenia miejsc pracy, a przez to dla osiągnięcia celów strategii „Europa 2020”, a zwłaszcza jej inicjatywy przewodniej „Unia innowacji”.Mimo swojego dużego udziału w gospodarce i zatrudnieniu oraz poważnego potencjału innowacyjnego, dążąc do zwiększenia swojej innowacyjności i konkurencyjności, wiele typów MŚP boryka się jednak z kilkoma rodzajami problemów, które obejmują niedostateczną ilość środków finansowych, niedostateczny dostęp do finansowania, braki w umiejętnościach dotyczących zarządzania innowacjami, trudności w nawiązywaniu kontaktów i współpracy z podmiotami zewnętrznymi oraz niewystarczające wykorzystanie zamówień publicznych do wspierania innowacji w MŚP. Chociaż w Europie powstaje podobna liczba przedsiębiorstw co w Stanach Zjednoczonych, europejskim MŚP znacznie trudniej jest rozwinąć się w duże przedsiębiorstwa niż ich amerykańskim odpowiednikom. Dodatkową presję wywiera na nie umiędzynarodowione otoczenie biznesowe, charakteryzujące się coraz bardziej powiązanymi wzajemnie łańcuchami wartości. MŚP muszą zwiększać swoją zdolność w zakresie badań naukowych i innowacji. Muszą generować, wdrażać i wykorzystywać handlowo nową wiedzę i pomysły biznesowe szybciej i w większym zakresie, aby z powodzeniem konkurować na szybko zmieniających się rynkach globalnych. Wyzwanie polega na stymulowaniu większej innowacyjności w MŚP, a przez to podniesieniu ich konkurencyjności, zwiększeniu zrównoważonego charakteru oraz przyspieszeniu wzrostu.Celem proponowanych działań jest uzupełnienie krajowej i regionalnej polityki i programów w zakresie innowacji w biznesie, wspieranie współpracy między MŚP – w tym współpracy transnarodowej – klastrami i innymi podmiotami w Europie zainteresowanymi innowacjami, eliminacja luki między badaniami naukowymi/działalnością rozwojową a udanym wprowadzeniem na rynek, stworzenie bardziej sprzyjającego innowacjom otoczenia biznesu, w tym środków w zakresie popytu i innych środków mających na celu zachęcanie do transferu wiedzy, oraz wsparcie uwzględniające zmieniający się charakter procesu innowacji, nowe technologie, rynki i modele biznesowe.W celu zapewnienia synergii i spójnego podejścia zostaną ustanowione silne powiązania z kierunkami polityki Unii dotyczącymi poszczególnych gałęzi przemysłu, w szczególności z programem COSME oraz z funduszami polityki spójności.

Uzasadnienie i unijna wartość dodana

MŚP są kluczowym czynnikiem innowacji dzięki swojej zdolności do szybkiego i efektywnego przekuwania nowych pomysłów w udane przedsięwzięcia. Stanowią ważny kanał przepływu wiedzy, przez który wyniki badań naukowych dostają się na rynek. MŚP mają także do odegrania kluczową rolę w procesach transferu technologii i wiedzy, przyczyniając się do wprowadzania na rynek innowacji pochodzących z badań naukowych prowadzonych na uniwersytetach, ośrodkach badawczych i przedsiębiorstwach zajmujących się prowadzeniem badań. W ciągu ostatnich dwudziestu lat można było zaobserwować ożywienie całych sektorów i powstawanie nowych branż przemysłu stymulowane przez innowacyjne MŚP. Szybko rosnące przedsiębiorstwa mają podstawowe znaczenie dla rozwoju powstających gałęzi przemysłu i przyspieszenia zmian strukturalnych, których potrzebuje Europa, aby stać się zrównoważoną gospodarką opartą na wiedzy, odznaczającą się trwałością wzrostu i wysoką jakością miejsc pracy.MŚP działają we wszystkich sektorach gospodarki. W Europie stanowią część gospodarki ważniejszą niż gdzie indziej, np. w Stanach Zjednoczonych. Do innowacji są zdolne wszystkie typy MŚP. Należy je zachęcać do inwestycji w badania naukowe i innowacje oraz wspierać w tych działaniach, a także zwiększać ich zdolności w zakresie zarządzania procesami innowacji. Powinny one być w stanie korzystać z pełnego potencjału innowacyjnego rynku wewnętrznego i EPB, tworząc nowe możliwości biznesowe w Europie i poza jej granicami oraz wnosząc wkład w sprostanie kluczowym wyzwaniom społecznym.Uczestnictwo w działaniach Unii w zakresie badań naukowych i innowacji wzmacnia zdolności MŚP pod względem badań i rozwoju oraz technologii, zwiększa ich możliwości generowania, absorbowania i użycia nowej wiedzy, usprawnia gospodarcze wykorzystanie nowych rozwiązań, sprzyja innowacjom w zakresie produktów, usług i modeli biznesowych, promuje działalność gospodarczą na większych rynkach oraz umiędzynaradawia sieci wiedzy MŚP. Małe i średnie przedsiębiorstwa odznaczające się sprawnym zarządzaniem innowacjami, a zatem często wykorzystujące wiedzę specjalistyczną i umiejętności z zewnątrz, osiągają lepsze wyniki.Współpraca transgraniczna to ważny element strategii MŚP w zakresie innowacji, służącej przezwyciężeniu trapiących je problemów związanych z wielkością, takich jak dostęp do kompetencji technologicznych i naukowych oraz do nowych rynków. Przyczynia się ona do przekształcania pomysłów w zyski i wzrost przedsiębiorstwa, a co za tym idzie do zwiększenia prywatnych inwestycji w badania naukowe i innowacje.W promowaniu MŚP zasadniczą rolę odgrywają regionalne i krajowe programy w zakresie badań naukowych i innowacji, często wspierane przez europejską politykę spójności. W szczególności fundusze polityki spójności mają do odegrania ważną rolę poprzez tworzenie potencjału MŚP i umożliwienie im osiągnięcia doskonałości, w celu opracowania doskonałych projektów mogących konkurować o finansowanie w ramach programu „Horyzont 2020”. Jednak bardzo niewiele krajowych i regionalnych programów zapewnia finansowanie transnarodowych działań w zakresie badań naukowych i innowacji prowadzonych przez MŚP, ogólnounijnego upowszechniania i absorpcji innowacyjnych rozwiązań czy też transgranicznych innowacyjnych usług wsparcia. Wyzwanie polega na zapewnieniu MŚP tematycznie otwartego wsparcia w realizacji międzynarodowych projektów zgodnych ze strategiami przedsiębiorstw w zakresie innowacji. Działania na poziomie Unii są niezbędne w celu uzupełnienia działalności prowadzonej na poziomie krajowym i regionalnym, zwiększenia jej oddziaływania i otworzenia systemów wsparcia badań naukowych i innowacji.

Ogólne kierunki działań

(a) Zintegrowane działania w zakresie wsparcia dla MŚP, w szczególności za pomocą specjalnego instrumentu

MŚP są wspomagane w związku ze wszystkimi działaniami w ramach programu „Horyzont 2020”. W tym celu, dla umożliwienia uczestnictwa w programie „Horyzont 2020”, ustanawia się lepsze warunki dla MŚP. Oprócz tego specjalny instrument MŚP zapewnia ustrukturyzowane i spójne wsparcie obejmujące cały cykl innowacji. Instrument MŚP jest przeznaczony dla wszystkich typów innowacyjnych MŚP wykazujących poważne ambicje w kierunku rozwoju, wzrostu i umiędzynarodowienia. Obejmuje wszystkie typy innowacji, w tym także innowacji w zakresie usług, innowacji nietechnologicznych i społecznych, przy założeniu, że każde z tych działań ma wyraźną europejską wartość dodaną. Celem jest rozwój i kapitalizacja potencjału innowacyjnego MŚP poprzez pomoc w eliminacji luki w finansowaniu wczesnej fazy badań naukowych i innowacji obciążonych wysokim ryzykiem, stymulowanie innowacji oraz zwiększanie handlowego wykorzystania wyników przez sektor prywatny.Instrument ten będzie funkcjonował w ramach jednego scentralizowanego systemu zarządzania, przy niewielkich obciążeniach administracyjnych i z pojedynczym punktem kontaktowym. Jest wdrażany przede wszystkim z zastosowaniem podejścia oddolnego na podstawie stale otwartego zaproszenia do składania wniosków.Wszystkie cele szczegółowe priorytetu „Wyzwań społecznych” i celu szczegółowego „Wiodącej pozycji w zakresie technologii prorozwojowych i przemysłowych” będą stosować instrument MŚP i przeznaczą na ten cel określoną kwotę.

(b) Wsparcie dla MŚP intensywnie korzystających z badań naukowych

Celem jest promowanie transnarodowych rynkowo zorientowanych innowacji w MŚP prowadzących działalność badawczo-rozwojową. Działanie szczegółowe jest ukierunkowane na MŚP działające w dowolnych sektorach, wykazujące zdolność do handlowego wykorzystania wyników prowadzonych projektów. To działanie będzie oparte na programie Eurostars.

(c) Zwiększenie zdolności MŚP pod względem innowacji

Wspierane są transnarodowe działania wspomagające wdrażanie i uzupełnianie środków przeznaczonych dla MŚP w całym zakresie programu „Horyzont 2020”, zwłaszcza w celu zwiększania zdolności MŚP pod względem innowacji. Te działania są koordynowane – w odpowiednich przypadkach – z podobnymi środkami krajowymi. Zakłada się ścisłą współpracę z siecią krajowych punktów kontaktowych oraz Europejską Siecią Przedsiębiorczości (EEN).

(d) Wsparcie innowacji rynkowych

Należy wspierać transnarodowe innowacje rynkowe w celu poprawy ramowych warunków innowacji i stawić czoło konkretnym barierom powstrzymującym w szczególności wzrost innowacyjnych MŚP.";"";"H2020";"H2020-EU.2.";"";"";"2014-09-22 20:42:47";"664223" +"H2020-EU.2.3.";"it";"H2020-EU.2.3.";"";"";"LEADERSHIP INDUSTRIALE – Innovazione nelle PMI";"Innovation in SMEs";"

LEADERSHIP INDUSTRIALE – Innovazione nelle PMI

Obiettivo specifico

L'obiettivo specifico è stimolare la crescita economica sostenibile aumentando i livelli di innovazione nelle PMI per quanto riguarda le diverse necessità in materia di innovazione durante l'intero ciclo di innovazione per tutti i tipi di innovazione, creando PMI a crescita più rapida, attive a livello internazionale.Considerato il ruolo centrale delle PMI nell'economia europea, la ricerca e l'innovazione nelle PMI svolgeranno un ruolo cruciale nel rafforzare la competitività, promuovere la crescita economica e la creazione di posti di lavoro e in tal modo conseguire gli obiettivi della strategia Europa 2020, in particolare della sua iniziativa faro ""Unione dell'innovazione"".Tuttavia, nonostante la loro importanza economica, la quota di occupati e il notevole potenziale d'innovazione, le PMI hanno diversi tipi di problemi per divenire più innovative e più competitive, tra cui la carenza di risorse finanziarie e di accesso al credito, la mancanza di competenze nella gestione dell'innovazione, carenze in materia di networking e di cooperazione con parti esterne, nonché un ricorso insufficiente agli appalti pubblici per stimolare l'innovazione nelle PMI. Anche se l'Europa produce un numero di imprese start-up analogo a quello degli Stati Uniti, rispetto alle loro controparti statunitensi le PMI europee trovano molte più difficoltà a trasformarsi in grandi imprese. L'internazionalizzazione del contesto imprenditoriale, con catene di valore sempre più interconnesse, esercita ulteriori pressioni su di esse. Le PMI devono rafforzare la loro capacità di ricerca e innovazione. Esse devono generare, integrare e commercializzare nuove conoscenze e idee imprenditoriali più rapidamente e in misura maggiore per competere con successo su mercati mondiali in rapida evoluzione. La sfida è stimolare l'innovazione nelle PMI, potenziandone la competitività, la sostenibilità e la crescita.Le azioni proposte mirano a integrare le politiche e i programmi nazionali e regionali riguardanti l'innovazione commerciale al fine di promuovere la cooperazione tra PMI, compresa la cooperazione transnazionale, i raggruppamenti e altri attori di rilievo ai fini dell'innovazione in Europa, per colmare il divario fra R&S e un riuscito assorbimento da parte del mercato, creare un ambiente più favorevole all'innovazione commerciale, comprese misure di sostegno della domanda e misure intese a potenziare il trasferimento delle conoscenze, tenendo conto dell'evoluzione della natura dei processi d'innovazione, delle nuove tecnologie, dei mercati e dei modelli aziendali.Saranno stabiliti forti legami con le politiche dell'Unione specifiche per il settore industriale, in particolare con il COSME e con i fondi della politica di coesione, per assicurare sinergie e un approccio coerente.

Motivazione e valore aggiunto dell'Unione

Le PMI sono motori fondamentali dell'innovazione grazie alla loro capacità di trasformare rapidamente ed efficacemente le idee nuove in imprese di successo. Esse fungono oggi da importanti veicoli di diffusione della conoscenza per traslare i risultati della ricerca verso il mercato. Le PMI svolgono un ruolo chiave nei processi di trasferimento della tecnologia e della conoscenza, contribuendo al trasferimento sul mercato delle innovazioni derivate dalla ricerca svolta nelle università, negli organismi di ricerca e presso le imprese impegnate nella ricerca. Gli ultimi vent'anni hanno dimostrato che interi settori sono stati rinnovati e nuove industrie sono state create grazie a PMI innovative. Le imprese in rapida crescita sono essenziali per lo sviluppo di industrie emergenti e per l'accelerazione dei mutamenti strutturali in un'Europa che deve diventare un'economia sostenibile e basata sulla conoscenza, con una crescita sostenuta e posti di lavoro di alta qualità.Le PMI sono presenti in tutti i settori dell'economia. Esse costituiscono una parte più importante dell'economia europea rispetto a quella di altre regioni, quali gli Stati Uniti. Tutte le categorie di PMI possono innovare. È opportuno incoraggiarle e sostenerle negli investimenti in ricerca e innovazione, nonché potenziarne la capacità di gestire i processi di innovazione. A tal fine, esse devono poter contare sul pieno potenziale innovativo del mercato interno e sul SER, in modo da creare nuove opportunità commerciali in Europa e nel mondo e contribuire a risolvere le sfide fondamentali per la società.La partecipazione alla ricerca e all'innovazione dell'Unione rafforza la R&S e la capacità tecnologica delle PMI, ne aumenta la capacità di generare, assorbire e utilizzare nuove conoscenze, rafforza lo sfruttamento economico delle nuove soluzioni, favorisce l'innovazione in materia di prodotti, servizi e modelli commerciali, promuove attività imprenditoriali su mercati più grandi e internazionalizza le reti di conoscenze delle PMI. Le PMI capaci di una buona gestione dell'innovazione, che spesso dipendono da competenze ed esperti esterni, superano le altre in termini di prestazioni.Le collaborazioni transfrontaliere rappresentano un elemento importante nella strategia dell'innovazione delle PMI per superare alcuni problemi connessi alla dimensione, quali l'accesso alle competenze scientifiche e tecnologiche e ai nuovi mercati. Esse contribuiscono a trasformare le idee in profitti e in crescita dell'impresa e a loro volta incrementano gli investimenti privati nella ricerca e nell'innovazione.I programmi regionali e nazionali di ricerca e innovazione, spesso sostenuti dalla politica europea di coesione, svolgono un ruolo essenziale nel promuovere le PMI. In particolare, i fondi della politica di coesione svolgono un ruolo fondamentale, mediante il rafforzamento delle capacità e la fornitura di un percorso di eccellenza per le PMI, al fine di sviluppare progetti di eccellenza in grado di competere ai fini del finanziamento nel quadro di Orizzonte 2020. Tuttavia, solo un numero ristretto di programmi nazionali e regionali fornisce finanziamenti per attività transnazionali di ricerca e innovazione svolte dalle PMI, per attività di diffusione e sfruttamento a livello unionale di soluzioni innovative o servizi transfrontalieri di sostegno all'innovazione. La sfida consiste nel fornire alle PMI un sostegno aperto a livello tematico per realizzare progetti internazionali in linea con le strategie di innovazione delle imprese. Le azioni a livello di Unione sono quindi necessarie per integrare le attività intraprese a livello nazionale e regionale, aumentarne l'incidenza e aprire i sistemi di sostegno alla ricerca e all'innovazione.

Le grandi linee delle attività

(a) Razionalizzazione del sostegno alle PMI in particolare attraverso un apposito strumento

Le PMI beneficiano di sostegno nel quadro di Orizzonte 2020 nel suo complesso. A tal fine sono create migliori condizioni per la partecipazione delle PMI a Orizzonte 2020. Inoltre, un apposito strumento per le PMI fornisce sostegno a fasi e senza soluzione di continuità per coprire l'intero ciclo dell'innovazione. Lo strumento per le PMI è rivolto a tutti i tipi di PMI innovative che presentano una forte volontà di sviluppo, crescita e internazionalizzazione. È messo a disposizione per tutti i tipi d'innovazione, compresa l'innovazione sociale, di servizio e non tecnologica, posto che ciascuna attività abbia un chiaro valore aggiunto europeo. Lo scopo è sviluppare e sfruttare il potenziale innovativo delle PMI colmando le lacune nel finanziamento della fase iniziale ad alto rischio della ricerca e dell'innovazione, stimolando le innovazioni e incrementando la commercializzazione dei risultati della ricerca da parte del settore privato.Lo strumento sarà gestito nell'ambito di un unico sistema di gestione centralizzato, caratterizzato da un regime amministrativo snello e con un unico punto di contatto. Esso è attuato principalmente con un approccio ascendente attraverso un invito aperto in modo continuativo.Tutti gli obiettivi specifici della priorità ""Sfide per la società"" e l'obiettivo specifico ""Leadership nelle tecnologie abilitanti e industriali"" applicheranno l'apposito strumento per le PMI, assegnandovi un importo.

(b) Sostegno per le PMI ad elevata intensità di ricerca

L'obiettivo è promuovere l'innovazione transnazionale orientata al mercato delle PMI che effettuano attività di R&S. Un'azione specifica mira alle PMI ad alta intensità di ricerca in tutti i settori che mostrano la capacità di sfruttare commercialmente i risultati dei progetti. Tale azione sarà basata sul programma Eurostars.

(c) Rafforzare la capacità di innovazione delle PMI

Si sostengono le attività transnazionali che forniscono assistenza all'attuazione e all'integrazione delle misure specifiche destinate alle PMI in Orizzonte 2020, in particolare per migliorare la capacità di innovazione delle PMI. Tali attività sono coordinate, se del caso, con misure nazionali analoghe. È prevista la stretta collaborazione con la rete dei punti di contatto nazionali e la rete Enterprise Europe.

(d) Sostegno all'innovazione orientata al mercato

Si sostengono le innovazioni transnazionali orientate al mercato al fine di migliorare le condizioni generali per l'innovazione e sono affrontati gli ostacoli specifici che impediscono, in particolare, la crescita delle PMI innovative.";"";"H2020";"H2020-EU.2.";"";"";"2014-09-22 20:42:47";"664223" +"H2020-EU.2.3.";"de";"H2020-EU.2.3.";"";"";"FÜHRENDE ROLLE DER INDUSTRIE - Innovation in KMU";"Innovation in SMEs";"

FÜHRENDE ROLLE DER INDUSTRIE - Innovation in KMU

Einzelziel

Einzelziel ist die Stimulierung eines nachhaltigen Wirtschaftswachstums durch Erhöhung des Innovationsniveaus von KMU. Indem der unterschiedliche Innovationsbedarf über den gesamten Innovationszyklus für alle Arten von Innovationen abgedeckt wird, soll für schneller wachsende und international aktive KMU gesorgt werden.Angesichts der zentralen Rolle der KMU im europäischen Wirtschaftsgefüge sind Forschung und Innovation in KMU von entscheidender Bedeutung für die Steigerung der Wettbewerbsfähigkeit, die Stärkung des Wirtschaftswachstums und die Schaffung von Arbeitsplätzen und damit für die Erreichung der Ziele der Strategie Europa 2020 und insbesondere ihrer Leitinitiative ""Innovationsunion"".Trotz ihres großen Anteils an Wirtschaft und Beschäftigung und ihres signifikanten Innovationspotenzials sehen sich KMU mit verschiedenartigen Problemen konfrontiert, die dazu führen, dass sie ihre Innovationstätigkeit und Wettbewerbsfähigkeit kaum steigern können; hierzu gehören zu geringe finanzielle Mittel und fehlender Zugang zu Finanzierung, mangelnde Fähigkeiten beim Innovationsmanagement, Schwachstellen beim Netzwerken und bei der Kooperation mit externen Partnern sowie unzureichende Nutzung öffentlicher Aufträge für die Förderung von Innovation bei KMU. In Europa gibt es zwar ähnlich viele Firmenneugründungen wie in den Vereinigten Staaten, doch europäische KMU haben es sehr viel schwerer als amerikanische KMU, zu expandieren. Das internationale Unternehmensumfeld mit zunehmend verknüpften Wertschöpfungsketten setzt sie noch zusätzlich unter Druck. KMU müssen ihre Forschungs- und Innovationskapazität stärken. Sie müssen schneller und in größerem Umfang neues Wissen und neue Geschäftsideen generieren, aufgreifen und vermarkten, um auf den sich schnell entwickelnden Weltmärkten erfolgreich konkurrieren zu können. Es geht darum, den KMU mehr Anreize für Innovationen zu geben und damit ihre Wettbewerbsfähigkeit, ihre Nachhaltigkeit und ihr Wachstum zu fördern.Mit den vorgeschlagenen Maßnahmen sollen nationale und regionale Innovationsstrategien und -programme für Unternehmen ergänzt, die Zusammenarbeit – auch die transnationale Zusammenarbeit – zwischen KMU, Clustern und anderen innovationsrelevanten Akteuren in Europa gefördert, die Lücke zwischen FuI und erfolgreicher Vermarktung geschlossen, ein innovationsfreundlicheres Unternehmensumfeld auch durch nachfrageorientierte Maßnahmen und Maßnahmen zur Förderung des Wissenstransfers geschaffen und dabei der Wandel der Innovationsprozesse, der neuen Technologien, der Märkte und der Unternehmensmodelle berücksichtigt werden.Zur Gewährleistung von Synergien und Kohärenz werden enge Verbindungen zwischen industriespezifischen Unionsstrategien, insbesondere mit COSME und den Fonds der Kohäsionspolitik hergestellt.

Begründung und Mehrwert für die Union

Dank ihrer Fähigkeit, neue Geschäftsideen schnell, effizient und erfolgreich umzusetzen, sind KMU wichtige Innovationsmotoren. Sie spielen eine bedeutende Rolle bei der Kanalisierung von Wissen, indem sie Forschungsergebnisse vermarkten. Den KMU kommt eine Schlüsselrolle in den Prozessen des Wissens- und Technologietransfers zu, da sie dazu beitragen, dass Innovationen aus der Forschung von Hochschulen, Forschungseinrichtungen und selbst forschenden Unternehmen auf den Markt gelangen. In den letzten zwanzig Jahren haben innovative KMU dafür gesorgt, dass ganze Sektoren von Grund auf erneuert wurden und neue Branchen entstanden sind. Für die Entwicklung neu entstehender Branchen und zur Beschleunigung des strukturellen Wandels, den Europa benötigt, um zu einer wissensgestützten und nachhaltigen Wirtschaft mit nachhaltigem Wachstum und hochqualifizierten Arbeitsplätzen zu werden, sind schnell wachsende Unternehmen unerlässlich.KMU finden sich in allen Bereichen der Wirtschaft. Sie haben einen größeren Anteil an der europäischen Wirtschaft als in anderen Regionen, wie etwa in den Vereinigten Staaten. Alle Arten von KMU sind innovationsfähig. Sie brauchen Anreize und Unterstützung, um in Forschung und Innovation zu investieren und ihre Kapazitäten zur Verwaltung von Innovationsprozessen zu verbessern. Dabei sollten sie das gesamte Innovationspotenzial des Binnenmarkts und des Europäischen Forschungsraums ausschöpfen können, um neue Geschäftsmöglichkeiten in Europa und darüber hinaus zu erschließen und zur Lösung der zentralen gesellschaftlichen Herausforderungen beizutragen.Die Beteiligung an Unionsforschung und -innovation stärkt die FuE- und Technologiekapazität der KMU, erhöht ihre Fähigkeit, neues Wissen zu generieren, zu absorbieren und zu nutzen, stärkt die wirtschaftliche Auswertung neuer Lösungen, fördert die Innovation von Produkten, Dienstleistungen und Geschäftsmodellen, unterstützt die Geschäftstätigkeit in größeren Märkten und internationalisiert die Wissensnetze von KMU. KMU, die bereits über ein gutes Innovationsmanagement verfügen und häufig auf externe Beratung und externe Qualifikationen zurückgreifen, übertreffen andere.Grenzüberschreitende Kooperationen sind ein wichtiger Faktor in der Innovationsstrategie von KMU, die damit ihre größenbedingten Probleme – wie den Zugang zu technologischen und wissenschaftlichen Kompetenzen und neuen Märkten – überwinden können. Sie tragen dazu bei, Ideen in Gewinn und Unternehmenswachstum zu verwandeln, und erhöhen damit die Privatinvestitionen in Forschung und Innovation.Regionale und nationale Programme für Forschung und Innovation, die häufig von der europäischen Kohäsionspolitik unterstützt werden, spielen eine wichtige Rolle bei der Förderung von KMU. So sind die Fonds der Kohäsionspolitik von zentraler Bedeutung für den Aufbau von Kapazitäten und dienen als Stufenleiter auf dem Weg zur Exzellenz für KMU, die hervorragende Projekte entwickeln und hierfür Fördermittel im Rahmen von Horizont 2020 beantragen könnten. Allerdings bieten nur wenige nationale und regionale Programme Fördermittel für transnationale Forschungs- und Innovationstätigkeiten von KMU, die unionsweite Verbreitung und Einführung innovativer Lösungen oder für grenzüberschreitende Dienstleistungen zur Unterstützung von Innovation. Es geht darum, den KMU eine thematisch offene Unterstützung zu bieten, um internationale Projekte im Einklang mit den Innovationsstrategien der Unternehmen zu verwirklichen. Daher sind Maßnahmen auf Unionsebene notwendig, um Tätigkeiten auf nationaler oder regionaler Ebene zu ergänzen, deren Auswirkungen zu verstärken und um Forschungs- und Innovationsfördersysteme zu öffnen.

Einzelziele und Tätigkeiten in Grundzügen

(a) Durchgehende Berücksichtigung der KMU insbesondere durch ein spezifisches Instrument

KMU werden im Rahmen von Horizont 2020 bereichsübergreifend unterstützt Deshalb werden KMU bessere Bedingungen für die Teilnahme an Horizont 2020 erhalten. Zudem bietet ein eigenes KMU-Instrument eine abgestufte und nahtlose Unterstützung über den gesamten Innovationszyklus hinweg. Das KMU-Instrument richtet sich an alle Arten innovativer KMU, die deutlich und erkennbar das Ziel verfolgen, sich zu entwickeln, zu wachsen und international tätig zu werden. Es ist für alle Arten von Innovationen gedacht, auch für Dienstleistungen, nichttechnologische und soziale Innovationen, sofern jede Tätigkeit mit einem eindeutigen europäischen Mehrwert verbunden ist. Angestrebt werden Ausbau und Nutzung des Innovationspotenzials von KMU durch Überbrückung der Förderlücke bei hoch riskanter Forschung und Innovation in der Anfangsphase und durch Anreize für bahnbrechende Innovationen und die Stärkung der Vermarktung von Forschungsergebnissen durch den Privatsektor.Das Instrument erhält ein einheitliches zentralisiertes Managementsystem mit geringem Verwaltungsaufwand und einer einzigen Anlaufstelle. Es wird überwiegend nach einem Bottom-up-Ansatz über eine zeitlich unbefristete Ausschreibung durchgeführt.Bei allen Einzelzielen des Schwerpunkts ""Gesellschaftliche Herausforderungen"" und das Einzelziel ""Führenden Rolle bei grundlegenden und industriellen Technologien"" findet das KMU-Instrument Anwendung und erhält eine eigene Mittelzuweisung.

(b) Unterstützung forschungsintensiver KMU

Ziel ist die Förderung transnationaler marktorientierter Innovation durch KMU, die auf dem Gebiet der FuE tätig sind. Eine Maßnahme richtet sich speziell an forschungsintensive KMU in allen Sektoren, die erkennbar die Fähigkeit haben, die Projektergebnisse kommerziell zu nutzen. Die Maßnahme wird auf dem Eurostars-Programm aufbauen.

(c) Stärkung der Innovationskapazität von KMU

Transnationale Tätigkeiten zur Umsetzung und Ergänzung KMU-spezifischer Maßnahmen werden in allen Bereichen von Horizont 2020 unterstützt, insbesondere zur Erhöhung der Innovationskapazität von KMU. Diese Tätigkeiten werden gegebenenfalls mit ähnlichen nationalen Maßnahmen abgestimmt. Es ist eine enge Zusammenarbeit mit dem Netz der nationalen Kontaktstellen (NCP) und dem Netz ""Enterprise Europe Network"" (EEN) vorgesehen.

(d) Unterstützung marktorientierter Innovation

Um die Rahmenbedingungen für Innovation zu verbessern werden transnationale, vom Markt ausgehende Innovationen unterstützt, und Hemmnisse, die insbesondere das Wachstum innovativer KMU behindern, werden angegangen.";"";"H2020";"H2020-EU.2.";"";"";"2014-09-22 20:42:47";"664223" +"H2020-EU.2.3.";"en";"H2020-EU.2.3.";"";"";"INDUSTRIAL LEADERSHIP - Innovation In SMEs";"Innovation in SMEs";"

INDUSTRIAL LEADERSHIP - Innovation In SMEs

Specific objective

The specific objective is to stimulate sustainable economic growth by means of increasing the levels of innovation in SMEs, covering their different innovation needs over the whole innovation cycle for all types of innovation, thereby creating more fast-growing, internationally active SMEs.Considering the central role of SMEs in Europe's economy, research and innovation in SMEs will play a crucial role in increasing competitiveness, boosting economic growth and job creation and thus in achieving the objectives of the Europe 2020 strategy and notably its flagship initiative 'Innovation Union'.However, SMEs have – despite their important economic and employment share and significant innovation potential – several types of problems to become more innovative and more competitive, including shortage of financial resources and access to finance, shortage in skills in innovation management, weaknesses in networking and cooperation with external parties, and insufficient use of public procurement to foster innovation in SMEs. Although Europe produces a similar number of start-up companies to the United States, European SMEs are finding it much harder to grow into large companies than their US counterparts. The internationalised business environment with increasingly interlinked value chains puts further pressure on them. SMEs need to enhance their research and innovation capacity. They need to generate, take up and commercialise new knowledge and business ideas faster and to a greater extent to compete successfully on fast evolving global markets. The challenge is to stimulate more innovation in SMEs, thereby enhancing their competitiveness, sustainability and growth.The proposed actions aim to complement national and regional business innovation policies and programmes, to foster cooperation between SMEs, including transnational cooperation, clusters and other innovation-relevant actors in Europe, to bridge the gap between R&D and successful market uptake, to provide a more business innovation friendly environment, including demand-side measures and measures geared to boosting the transfer of knowledge, and to support taking into account the changing nature of innovation processes, new technologies, markets and business models.Strong links with industry-specific Union policies, notably COSME and the Cohesion Policy Funds, will be established to ensure synergies and a coherent approach.

Rationale and Union added value

SMEs are key drivers of innovation due to their ability to quickly and efficiently transform new ideas in successful businesses. They serve as important conduits of knowledge spill-over bringing research results to the market. SMEs have a key role to play in technology and knowledge transfer processes, contributing to the market transfer of innovations stemming from the research carried out in universities, research bodies and research performing companies. The last twenty years have shown that entire sectors have been renewed and new industries created driven by innovative SMEs. Fast growing enterprises are crucial for the development of emerging industries and for the acceleration of the structural changes that Europe needs to become a knowledge-based and sustainable economy with sustained growth and high quality jobs.SMEs can be found in all sectors of the economy. They form a more important part of the European economy than of other regions such as the United States. All types of SMEs can innovate. They need to be encouraged and supported to invest in research and innovation and to enhance their capacity to manage innovation processes. In doing so they should be able to draw on the full innovative potential of the internal market and the ERA so as to create new business opportunities in Europe and beyond and to contribute to find solutions to key societal challenges.Participation in Union research and innovation strengthens the R&D and technology capability of SMEs, increases their capacity to generate, absorb and use new knowledge, enhances the economic exploitation of new solutions, boosts innovation in products, services and business models, promotes business activities in larger markets and internationalises the knowledge networks of SMEs. SMEs that have a good innovation management in place, thereby often relying on external expertise and skills, outperform others.Cross-border collaborations are an important element in the innovation strategy of SMEs to overcome some of their size-related problems, such as access to technological and scientific competences and new markets. They contribute to turn ideas into profit and company growth and in return to increase private investment in research and innovation.Regional and national programmes for research and innovation, often backed by European cohesion policy, play an essential role in promoting SMEs. In particular, Cohesion Policy Funds have a key role to play through building capacity and providing a stairway to excellence for SMEs in order to develop excellent projects that may compete for funding under Horizon 2020. Nevertheless, only a few national and regional programmes provide funding for transnational research and innovation activities carried out by SMEs, the Union-wide diffusion and uptake of innovative solutions or cross-border innovation support services. The challenge is to provide SMEs with thematically open support to realise international projects in line with companies' innovation strategies. Actions at Union level are therefore necessary to complement activities undertaken at national and regional level, to enhance their impact and to open up the research and innovation support systems.

Broad lines of the activities

(a) Mainstreaming SME support especially through a dedicated instrument

SMEs shall be supported across Horizon 2020. For this purpose, to participate in Horizon 2020, better conditions for SMEs shall be established. In addition, a dedicated SME instrument shall provide staged and seamless support covering the whole innovation cycle. The SME instrument shall be targeted at all types of innovative SMEs showing a strong ambition to develop, grow and internationalise. It shall be provided for all types of innovation, including service, non-technological and social innovations, given each activity has a clear European added value. The aim is to develop and capitalise on the innovation potential of SMEs by filling the gap in funding for early stage high-risk research and innovation, stimulating innovations and increasing private-sector commercialisation of research results.The instrument will operate under a single centralised management system, light administrative regime and a single entry point. It shall be implemented primarily in a bottom-up manner through a continuously open call.All of the specific objectives of the priority 'Societal challenges', and the specific objective 'Leadership in enabling and industrial technologies' will apply the dedicated SME instrument and allocate an amount for this.

(b) Support for research-intensive SMEs

The goal is to promote transnational market-oriented innovation of R&D performing SMEs. A specific action shall target research-intensive SMEs in any sectors that show the capability to commercially exploit the project results. This action will be built on the Eurostars Programme.

(c) Enhancing the innovation capacity of SMEs

Transnational activities assisting the implementation of and complementing the SME specific measures across Horizon 2020 shall be supported, notably to enhance the innovation capacity of SMEs. These activities shall be coordinated with similar national measures when appropriate. Close cooperation with the National Contact Point (NCP) Network and the Enterprise Europe Network (EEN) is envisaged.

(d) Supporting market-driven innovation

Transnational market-driven innovation to improve the framework conditions for innovation shall be supported, and the specific barriers preventing, in particular, the growth of innovative SMEs shall be tackled.";"";"H2020";"H2020-EU.2.";"";"";"2014-09-22 20:42:47";"664223" +"H2020-EU.2.3.";"es";"H2020-EU.2.3.";"";"";"LIDERAZGO INDUSTRIAL - Innovación en la pequeña y mediana empresa";"Innovation in SMEs";"

LIDERAZGO INDUSTRIAL - Innovación en la pequeña y mediana empresa

Objetivo específico

El objetivo específico es estimular el crecimiento económico sostenible aumentando el nivel de la innovación en las PYME, cubriendo sus diferentes necesidades de innovación a lo largo de todo su ciclo para todos los tipos de innovación, y creando así unas PYME de más rápido crecimiento y activas a nivel internacional.Teniendo en cuenta el papel central de las PYME en la economía de Europa, la investigación y la innovación en las PYME desempeñará un papel crucial para reforzar la competitividad, impulsar el crecimiento económico y la creación de puestos de trabajo y, por ende, alcanzar los objetivos de la estrategia Europa 2020, y en particular de su iniciativa emblemática ""Unión por la Innovación"".Sin embargo, las PYME -a pesar de su importancia para la economía y el empleo y su significativo potencial de innovación- tienen problemas de varios tipos para resultar más innovadoras y competitivas, entre ellos, la escasez de recursos financieros y acceso a la financiación, la carencia de conocimientos sobre gestión de la innovación, deficiencias en el establecimiento de contactos y cooperación con partes externas y uso insuficiente de la contratación pública para fomentar la innovación en las PYME. Aunque Europa produce un número similar de empresas incipientes que los Estados Unidos, a las PYME europeas les resulta mucho más difícil que a sus homólogas estadounidenses crecer y convertirse en grandes empresas. El entorno empresarial internacionalizado, con unas cadenas del valor cada vez más interconectadas, aumenta la presión sobre ellas. Las PYME necesitan potenciar su capacidad de investigación e innovación. Deben generar, asimilar y comercializar los nuevos conocimientos e ideas de negocio con mayor rapidez y en mayor medida para competir ventajosamente en unos mercados mundiales que evolucionan rápidamente. El reto consiste en estimular una mayor innovación en las PYME, lo que aumentaría su competitividad, sostenibilidad y el crecimiento.El objetivo de las acciones propuestas es complementar las políticas y programas de innovación empresarial nacionales y regionales, estimular la cooperación, incluida la cooperación transnacional, entre las PYME, inclusive la cooperación transnacional, las agrupaciones de empresas y otros protagonistas de la innovación en Europa, salvar la distancia que media entre la investigación/desarrollo y la satisfactoria absorción por el mercado, proporcionar un entorno más propicio para la innovación en las empresas, incluyendo medidas del lado de la demanda y medidas orientadas a impulsar la transferencia de tecnología, y un apoyo que tenga en cuenta la naturaleza cambiante de los procesos de innovación, las nuevas tecnologías, los mercados y los modelos de negocio.Se establecerán estrechos vínculos con las políticas específicas para la industria de la Unión, en particular el Programa COSME y los fondos de la política de cohesión, a fin de garantizar las sinergias y la coherencia del enfoque.

Justificación y valor añadido de la Unión

Las PYME son motores fundamentales de la innovación gracias a su capacidad para transformar de manera rápida y eficiente las nuevas ideas en negocios de éxito. Actúan como importantes conductos de difusión de los conocimientos para llevar al mercado los resultados de la investigación. Las PYME también tienen un papel esencial que desempeñar en los procesos de transferencia de tecnología y conocimiento, contribuyendo a la traslación al mercado de las innovaciones derivadas de la investigación que se lleva a cabo en las universidades, los organismos públicos de investigación y las empresas que realizan actividades de investigación. En los últimos veinte años se ha comprobado la capacidad de las PYME innovadoras para renovar sectores enteros y crear nuevas industrias. Las empresas de crecimiento rápido son esenciales para el desarrollo de industrias emergentes y para la aceleración de los cambios estructurales que necesita Europa para convertirse en una economía sostenible y basada en el conocimiento, con un crecimiento sostenido y un empleo de alta calidad.Las PYME se encuentran en todos los sectores de la economía. Representan una parte de la economía más importante en Europa que en otras regiones, como los Estados Unidos. Todos los tipos de PYME pueden innovar. Es necesario apoyarlas para invertir en investigación e innovación y también para aumentar su capacidad para gestionar los procesos de innovación. Al hacerlo, deben poder aprovechar plenamente el potencial innovador del mercado interior y el EEI, con el fin de crear nuevas oportunidades de negocio en Europa y fuera de ella y contribuir a encontrar soluciones para los principales retos de la sociedad.La participación en la investigación y la innovación de la Unión refuerza la capacidad en I+D y tecnológica de las PYME, incrementa su capacidad para generar, absorber y utilizar los nuevos conocimientos, mejora la explotación económica de las nuevas soluciones, impulsa la innovación en productos, servicios y modelos de negocio, promueve actividades comerciales en mercados más amplios e internacionaliza las redes de conocimientos de las PYME. Las PYME que disponen de una buena gestión de la innovación, a menudo apoyándose en conocimientos y competencias externas, obtienen mejores resultados que otras.Las colaboraciones transfronterizas son un elemento importante en la estrategia de innovación de las PYME, a fin de superar algunos de los problemas relacionados con su tamaño, como el acceso a las competencias científicas y tecnológicas y a los nuevos mercados. Contribuyen a transformar las ideas en beneficios y crecimiento de la empresa, y en consecuencia a aumentar la inversión privada en investigación e innovación.Los programas regionales y nacionales de investigación e innovación, con frecuencia respaldados por la política europea de cohesión, desempeñan un papel esencial en la promoción de las PYME. En particular, los fondos de la política de cohesión deben desempeñar un papel clave para crear capacidad y facilitar a las PYME una escalera hacia la excelencia a fin de desarrollar proyectos excelentes que puedan competir por los fondos de Horizonte 2020. Sin embargo, son contados los programas nacionales y regionales que ofrecen financiación para las actividades transnacionales de investigación e innovación realizadas por las PYME, la difusión y la asimilación en toda la Unión de las soluciones innovadoras o los servicios de apoyo a la innovación transfronteriza. El desafío es proporcionar a las PYME un apoyo temáticamente abierto para realizar proyectos internacionales en consonancia con las estrategias de innovación de las empresas. Por consiguiente, son necesarias acciones a nivel de la Unión para complementar las actividades emprendidas a nivel nacional y regional, potenciar su impacto y abrir los sistemas de apoyo a la investigación y la innovación.

Líneas generales de las actividades

(a) Integrar el apoyo a las PYME, especialmente mediante un instrumento específico

Se financiará a las PYME en todo el programa Horizonte 2020. Con este fin, se establecerán mejores condiciones para la participación de las PYME en Horizonte 2020. Además, un instrumento dedicado a las PYME facilitará un apoyo por etapas y sin fisuras que cubra todo el ciclo de la innovación. El instrumento de las PYME se destinará a todos los tipos de PYME innovadoras que demuestren una ambición firme de desarrollarse, crecer e internacionalizarse. Se facilitará para todo tipo de innovaciones, incluidas las referidas a servicios, no tecnológicas o sociales, habida cuenta de que cada actividad ofrece un claro valor añadido europeo. El objetivo es desarrollar y explotar el potencial de innovación de las PYME, colmando las lagunas que existen en la financiación de la fase inicial de la investigación e innovación de alto riesgo, estimulando las innovaciones y potenciando la comercialización por el sector privado de los resultados de la investigación.El instrumento funcionará conforme a una única estructura de gestión centralizada, un régimen administrativo ágil y una ventanilla única. Se aplicará siguiendo principalmente una lógica ascendente, mediante convocatorias públicas continuas.Todos los objetivos específicos de la prioridad ""Retos de la sociedad"" y el objetivo específico de ""Liderazgo en tecnologías industriales y de capacitación"" aplicarán el instrumento dedicado a las PYME y asignarán un importe a tal efecto.

(b) Apoyar a las PYME intensivas en investigación

El objetivo es promover la innovación transnacional orientada al mercado de las PYME que realizan actividades de I+D. Se dedicará una acción específica a las PYME intensivas en investigación en todos los sectores que demuestren capacidad para explotar comercialmente los resultados del proyecto. Esta acción se basará en el Programa Eurostars.

(c) Mejorar la capacidad de innovación de las PYME

Se prestará apoyo a las actividades transnacionales que faciliten la aplicación de las medidas específicas en favor de las PYME de Horizonte 2020 y las complementen, en particular para aumentar la capacidad de innovación de las PYME. Estas actividades se coordinarán, cuando proceda, con medidas nacionales similares. Se prevé una estrecha cooperación con la Red de Puntos Nacionales de Contacto (PCN) y la Red Europea para las Empresas (EEN).

(d) Apoyar la innovación impulsada por el mercado

Apoyo a la innovación transnacional impulsada por el mercado a fin de mejorar las condiciones marco para la innovación y combatir los obstáculos concretos que impiden, en particular, el crecimiento de las PYME innovadoras.";"";"H2020";"H2020-EU.2.";"";"";"2014-09-22 20:42:47";"664223" +"H2020-EC";"fr";"H2020-EC";"";"";"Programme-cadre Horizon 2020";"EC Treaty";"

Programme-cadre Horizon 2020 (H2020)

Grandes lignes des objectifs spécifiques et des activités

L'objectif général d'Horizon 2020 est d'édifier, à l'échelle de l'Union, une société et une économie de premier plan au niveau mondial fondées sur la connaissance et l'innovation, tout en contribuant au développement durable. Horizon 2020 soutiendra la stratégie Europe 2020 et d'autres politiques de l'Union, ainsi que la mise en place et le fonctionnement de l'Espace européen de la recherche (EER).Les indicateurs de performance utilisés pour évaluer les progrès accomplis dans la réalisation de cet objectif général sont:•l'objectif en matière de recherche et de développement (3 % du PIB) de la stratégie Europe 2020;•l'indicateur de résultat de l'innovation dans le cadre de la stratégie Europe 2020; •la proportion de chercheurs dans la population active.Cet objectif général est poursuivi au moyen de trois priorités distinctes, se renforçant néanmoins mutuellement, contenant chacune une série d'objectifs spécifiques. Ces priorités seront mises en œuvre de façon cohérente, de manière à encourager les interactions entre les différents objectifs spécifiques, à éviter toute répétition inutile d'activités et à renforcer leur impact cumulé.Le Centre commun de recherche (JRC) contribue à l'objectif général et aux priorités d'Horizon 2020, en poursuivant comme objectif spécifique la fourniture d'un soutien scientifique et technique orienté vers le client aux politiques de l'Union. (Voir également H2020-EU.6.) (http://cordis.europa.eu/programme/rcn/664511_en.html)L'Institut européen d'innovation et de technologie (EIT) contribue à la réalisation de l'objectif général et des priorités d'Horizon 2020, en poursuivant comme objectif spécifique l'intégration du triangle de la connaissance que constituent l'enseignement supérieur, la recherche et l'innovation. Les indicateurs utilisés pour évaluer la performance de l'EIT sont:•les entités du milieu universitaire, du monde de l'entreprise et du secteur de la recherche intégrées dans les communautés de la connaissance et de l'innovation (CCI);•la collaboration au sein du triangle de la connaissance débouchant sur le développement de produits, de services et de processus innovants.(Voir également H2020-EU.7.) (http://cordis.europa.eu/programme/rcn/664513_en.html)

Questions transversales et mesures de soutien dans le cadre d'Horizon 2020

Les questions transversales, dont une liste indicative figure à l'article 14, seront promues entre les objectifs spécifiques des trois priorités en tant qu'actions nécessaires au développement de nouvelles connaissances, de compétences clés et d'avancées technologiques majeures et à la traduction des connaissances en valeur économique et sociétale. En outre, dans de nombreux cas, il conviendra de mettre au point des solutions interdisciplinaires qui recouperont les nombreux objectifs spécifiques d'Horizon 2020. Ce programme comprendra des dispositions visant à encourager des actions portant sur ces questions transversales, notamment par le regroupement efficace des budgets.

Sciences sociales et humaines

La recherche dans le domaine des sciences sociales et des sciences humaines sera pleinement intégrée dans chacune des priorités d'Horizon 2020 et dans chacun des objectifs spécifiques et elle contribuera à la base de connaissances pouvant étayer l'élaboration des politiques au niveau international, à l'échelle de l'Union et au niveau national, régional ou local. En ce qui concerne les défis de société, les sciences sociales et humaines seront intégrées comme élément essentiel des activités nécessaires pour relever chacun des défis de société avec un impact maximal. L'objectif spécifique du défi de société «L'Europe dans un monde en évolution: des sociétés ouvertes à tous, innovantes et capables de réflexion» (H2020-EU.3.6.) (http://cordis.europa.eu/programme/rcn/664435_en.html) soutiendra la recherche dans le domaine des sciences sociales et humaines en mettant l'accent sur des sociétés ouvertes à tous, innovantes et capables de réflexion.

Science et société

Les liens entre la science et la société ainsi que la promotion d'activités de recherche et d'innovation responsables, de la formation scientifique et de la culture seront consolidés et la confiance du public vis-à-vis de la science sera renforcée par des activités d'Horizon 2020 favorisant l'engagement éclairé des citoyens et de la société civile dans la recherche et à l'innovation.

Genre

Promouvoir l'égalité entre les hommes et les femmes dans les domaines de la science et de l'innovation est un engagement de l'Union. Dans Horizon 2020, la question du genre sera abordée de manière transversale afin de remédier aux déséquilibres entre les genres et d'intégrer la dimension de genre dans la programmation et le contenu de la recherche et de l'innovation.

PME

Horizon 2020 encouragera et soutiendra la participation des PME à tous les objectifs spécifiques d'une manière intégrée. Conformément à l'article 22, les mesures relevant de l'objectif spécifique «Innovation dans les PME» (instrument dédié aux PME) (H2020-EU.2.3.) http://cordis.europa.eu/programme/rcn/664223_en.html seront appliquées pour l'objectif spécifique «Primauté dans le domaine des technologies génériques et industrielles» (H2020-EU.2.1.) http://cordis.europa.eu/programme/rcn/664145_en.html et pour la priorité «Défis de société». (H2020-EU.3.) http://cordis.europa.eu/programme/rcn/664235_en.html.

Voie express pour l'innovation

La voie express pour l'innovation, prévue à l'article 24, soutiendra les actions dans le domaine de l'innovation au titre de l'objectif spécifique «Primauté dans le domaine des technologies génériques et industrielles» et de la priorité «Défis de société», selon une logique ascendante sur la base d'un appel ouvert permanent, le délai d'octroi des subventions ne dépassant pas six mois.

Élargissement de la participation

En dépit d'une certaine convergence constatée ces derniers temps, le potentiel de recherche et d'innovation continue de différer sensiblement d'un État membre à l'autre, de fortes disparités subsistant entre les «champions de l'innovation» et les «innovateurs modestes». Les activités contribueront à combler la fracture en matière de recherche et d'innovation en Europe en favorisant les synergies avec les fonds structurels et d'investissement européens (ci-après dénommés «fonds ESI»), et aussi grâce à des mesures spécifiques pour libérer l'excellence dans les régions peu performantes en matière de recherche, développement et innovation (RDI) et, partant, en élargissant la participation à Horizon 2020 et en contribuant à la réalisation de l'EER.

Coopération internationale

La coopération internationale avec les pays tiers et les organisations internationales, régionales ou mondiales est nécessaire pour poursuivre efficacement bon nombre des objectifs spécifiques énoncés dans Horizon 2020. La coopération internationale est essentielle à la recherche exploratoire et fondamentale, afin de récolter les bénéfices liés aux opportunités scientifiques et technologiques émergentes. La coopération est nécessaire pour relever les défis de société et renforcer la compétitivité de l'industrie européenne. La promotion de la mobilité internationale des personnes travaillant pour la recherche et l'innovation est également cruciale pour renforcer cette coopération mondiale. La coopération internationale dans la recherche et l'innovation constitue un élément essentiel des engagements de l'Union au niveau mondial. La coopération internationale sera par conséquent promue dans le cadre de chacune des trois priorités d'Horizon 2020. En outre, des activités horizontales spécifiques bénéficieront d'un soutien encouragées afin de garantir la mise en place cohérente et efficace d'une coopération internationale dans l'ensemble d'Horizon 2020.

Développement durable et changement climatique

Horizon 2020 encouragera et soutiendra les activités visant à tirer parti du rôle de premier plan joué par l'Europe dans la course à la mise au point de nouveaux procédés et de nouvelles technologies en faveur du développement durable, au sens large, et de la lutte contre le changement climatique. Cette approche horizontale, pleinement intégrée dans l'ensemble des priorités d'Horizon 2020, aidera l'Union à prospérer dans un monde à faible émission de carbone et aux ressources limitées, tout en construisant une économie efficace dans l'utilisation des ressources, durable et compétitive.

Réduction de l'écart entre découverte et application commerciale

Des actions seront menées dans le cadre d'Horizon 2020 afin que les découvertes trouvent des applications commerciales, en vue de l'exploitation et de la commercialisation d'idées le cas échéant. Elles devraient être fondées sur un concept d'innovation au sens large et stimuler l'innovation transsectorielle.

Mesures de soutien transversales

Les questions transversales seront soutenues par un certain nombre de mesures de soutien horizontales, y compris un soutien en faveur: de l'amélioration de l'attractivité des métiers de la recherche, y compris les principes généraux de la charte européenne du chercheur; du renforcement de la base d'éléments factuels ainsi que du développement et du soutien de l'EER (y compris les cinq initiatives EER) et de l'Union de l'innovation; de l'amélioration des conditions-cadres à l'appui de l'Union de l'innovation, y compris les principes énoncés dans la recommandation de la Commission concernant la gestion de la propriété intellectuelle et l'examen de la possibilité de mettre en place un instrument de valorisation des droits de propriété intellectuelle européens; et de l'administration et de la coordination des réseaux internationaux de chercheurs et d'innovateurs d'excellence, tels que COST.";"";"H2020";"H2020";"";"";"2014-09-23 19:33:48";"664087" +"H2020-EC";"it";"H2020-EC";"";"";"Programma quadro Orizzonte 2020";"EC Treaty";"

Programma quadro Orizzonte 2020 (H2020)

Grandi linee degli obiettivi specifici e delle attività

L'obiettivo generale di Orizzonte 2020 è costruire una società e un'economia di primo piano su scala mondiale basate sulla conoscenza e sull'innovazione nell'intera Unione, contribuendo nel contempo allo sviluppo sostenibile. Esso sosterrà la strategia Europa 2020 e altre politiche dell'Unione, nonché il conseguimento e il funzionamento dello Spazio europeo della ricerca (SER).Gli indicatori di efficienza per valutare i progressi relativamente a tale obiettivo generale sono:•l'obiettivo per la ricerca e lo sviluppo (R&S) (3 % del PIL) della strategia Europa 2020;•l'indicatore dei risultati dell'innovazione nel contesto della strategia Europa 2020;•la percentuale dei ricercatori rispetto alla popolazione attiva.Tale obiettivo generale è perseguito per mezzo di tre priorità distinte ma di reciproco sostegno, ciascuna contenente un insieme di obiettivi specifici. La loro attuazione coerente consentirà di stimolare le interazioni fra i diversi obiettivi specifici, evitando sovrapposizioni di sforzi e rafforzandone l'impatto congiunto.Il Centro comune di ricerca (CCR) contribuisce all'obiettivo generale e alle priorità di Orizzonte 2020 con l'obiettivo specifico di fornire alle politiche dell'Unione un sostegno scientifico e tecnico orientato al cliente. (Vedere anche H2020-EU.6.) (http://cordis.europa.eu/programme/rcn/664511_en.html)L'Istituto europeo di innovazione e tecnologia (EIT) contribuisce all'obiettivo generale e alle priorità di Orizzonte 2020 con l'obiettivo specifico di integrare il triangolo della conoscenza costituito da istruzione superiore, ricerca e innovazione. Gli indicatori per valutare le prestazioni dell'EIT sono:•le organizzazioni di università, imprese e ricerca integrate nelle comunità della conoscenza e dell'innovazione (CCI);•la collaborazione all'interno del triangolo della conoscenza per sviluppare prodotti, servizi e processi innovativi.(Vedere anche H2020-EU.7.) (http://cordis.europa.eu/programme/rcn/664513_en.html)

Questioni trasversali e misure di sostengo nell'ambito di Orizzonte 2020

Tra gli obiettivi specifici delle tre priorità saranno promosse le questioni trasversali, di cui un elenco indicativo figura all'articolo 14, in quanto necessarie a sviluppare nuove conoscenze, competenze chiave e importanti scoperte tecnologiche nonché a tradurre le conoscenze in valore economico e sociale. Inoltre in molti casi dovranno essere sviluppate soluzioni interdisciplinari comuni a vari obiettivi specifici di Orizzonte 2020. Orizzonte 2020 fornirà incentivi per azioni che riguardano tali questioni trasversali, anche mediante il raggruppamento efficace degli stanziamenti di bilancio.

Scienze sociali e discipline umanistiche

La ricerca nel settore delle scienze sociali e delle discipline umanistiche sarà pienamente integrata in ciascuna delle priorità e in ciascuno degli obiettivi specifici di Orizzonte 2020 e contribuirà alla base di conoscenze per le decisioni politiche a livello internazionale, unionale, nazionale, regionale e locale. Per quanto riguarda le sfide per la società, le scienze sociali e le discipline umanistiche saranno integrate come elemento essenziale delle attività necessarie per affrontare ciascuna delle sfide per la società al fine di potenziarne l'impatto. L'obiettivo specifico della sfida per la società ""L'Europa in un mondo in evoluzione: Società inclusive, innovative e riflessive"" (H2020-EU.3.6.) (http://cordis.europa.eu/programme/rcn/664435_en.html) sosterrà la ricerca nel settore delle scienze sociali e delle discipline umanistiche incentrandosi sulle società inclusive, innovative e riflessive.

Scienza e società

Le attività di Orizzonte 2020 approfondiscono la relazione tra scienza e società nonché la promozione della ricerca e innovazione responsabili, istruzione in ambito scientifico e della cultura e rafforzano la fiducia del pubblico nella scienza, favorendo la partecipazione informata dei cittadini e della società civile per quanto attiene alla ricerca e all'innovazione.

Genere

Promuovere la parità di genere nell'ambito della scienza e dell'innovazione è un impegno dell'Unione. La questione di genere sarà affrontata in modo trasversale nell'ambito di Orizzonte 2020 al fine di correggere gli squilibri tra donne e uomini e integrare una dimensione di genere nella programmazione e nei contenuti della ricerca e dell'innovazione.

PMI

Orizzonte 2020 incoraggia e sostiene la partecipazione, in modo integrato, delle PMI a tutti gli obiettivi specifici. Conformemente all'articolo 22, le misure definite nell'ambito dell'obiettivo specifico ""Innovazione nelle PMI"" (strumento riservato alle PMI) (H2020-EU.2.3.) http://cordis.europa.eu/programme/rcn/664223_en.html, sono applicate nel quadro dell'obiettivo specifico ""Leadership nelle tecnologie abilitanti e industriali"" (H2020-EU.2.1.) http://cordis.europa.eu/programme/rcn/664145_en.html e della priorità ""Sfide per la società"" (H2020-EU.3.) http://cordis.europa.eu/programme/rcn/664235_en.html.

Corsia veloce per l'innovazione (CVI)

La CVI, come stabilito all'articolo 24, sosterrà le azioni di innovazione nell'ambito dell'obiettivo specifico ""Leadership nelle tecnologie abilitanti e industriali"" e della priorità ""Sfide per la società"", con una logica ascendente basata su un invito aperto in modo continuativo e tempi per la concessione delle sovvenzioni non superiori a sei mesi.

Ampliare la partecipazione

Nonostante alcune recenti convergenze, il potenziale di ricerca e innovazione degli Stati membri resta molto disomogeneo, con ampi divari fra i leader dell'innovazione e gli innovatori ""modesti"". Le attività contribuiscono a colmare il divario in materia di ricerca e innovazione in Europa mediante la promozione di sinergie con i fondi strutturali e di investimento europei (fondi ESI), nonché attraverso misure ad hoc volte a sbloccare l'eccellenza nelle regioni con prestazioni meno soddisfacenti in materia di ricerca, sviluppo e innovazione (RSI), ampliando in tal modo la partecipazione a Orizzonte 2020 e contribuendo altresì alla realizzazione del SER.

Cooperazione internazionale

La cooperazione internazionale con paesi terzi e organizzazioni internazionali, regionali o globali è necessaria per affrontare efficacemente numerosi obiettivi specifici stabiliti nell'ambito di Orizzonte 2020. La cooperazione internazionale è essenziale per la ricerca di base e di frontiera al fine di sfruttare i vantaggi derivanti dai nuovi orizzonti scientifici e tecnologici. La cooperazione è necessaria al fine di affrontare le sfide per la società e rafforzare la competitività dell'industria europea. Anche la promozione della mobilità a livello internazionale del personale nel settore R&I è fondamentale per rafforzare tale cooperazione globale. La cooperazione internazionale nella ricerca e nell'innovazione è un aspetto fondamentale degli impegni dell'Unione sul piano mondiale. Pertanto la cooperazione internazionale sarà promossa in ciascuna delle tre priorità di Orizzonte 2020. Saranno inoltre sostenute attività orizzontali specifiche al fine di garantire lo sviluppo coerente ed efficace della cooperazione internazionale nel quadro di Orizzonte 2020.

Sviluppo sostenibile e cambiamento climatico

Orizzonte 2020 incoraggerà e sosterrà le attività volte a sfruttare il ruolo guida dell'Europa nella corsa per sviluppare nuovi processi e tecnologie per promuovere lo sviluppo sostenibile in senso lato e far fronte al cambiamento climatico. Tale approccio orizzontale, pienamente integrato in tutte le priorità di Orizzonte 2020, favorirà la prosperità dell'Unione in un mondo a basse emissioni di carbonio e con risorse vincolate, costruendo nel contempo un'economia efficiente sotto il profilo delle risorse, sostenibile e competitiva.

Ciclo scoperta-commercializzazione

Le azioni-ponte nell'ambito di Orizzonte 2020 sono finalizzate a passare dalla scoperta all'applicazione di mercato, per consentire lo sfruttamento e la commercializzazione delle idee ovunque ciò sia appropriato. Le azioni dovrebbero basarsi su un ampio concetto di innovazione e stimolare l'innovazione intersettoriale.

Misure di sostegno trasversali

Per quanto riguarda le questioni trasversali saranno adottate varie misure di sostegno orizzontali compreso il sostegno: al rafforzamento dell'attrattività della professione di ricercatore, compresi i principi generali della Carta europea dei ricercatori; al rafforzamento della base di conoscenze nonché dello sviluppo e sostegno a favore del SER (comprese le cinque iniziative SER) e dell'Unione dell'innovazione; al miglioramento delle condizioni generali a sostegno dell'Unione dell'innovazione, compresi i principi della raccomandazione della Commissione sulla gestione della proprietà intellettuale e all'esame della possibilità di istituire uno strumento europeo per lo sfruttamento dei diritti di proprietà intellettuale, alla gestione e al coordinamento delle reti internazionali per ricercatori e innovatori di eccellenza, quali COST.";"";"H2020";"H2020";"";"";"2014-09-23 19:33:48";"664087" +"H2020-EC";"de";"H2020-EC";"";"";"Rahmenprogramm Horizont 2020";"EC Treaty";"

Rahmenprogramm Horizont 2020 (H2020)

Einzelziele und Tätigkeiten in Grundzügen

Das allgemeine Ziel von Horizont 2020 ist es, unionsweit eine wissens- und innovationsgestützte Gesellschaft und eine weltweit führende Wirtschaft aufzubauen und gleichzeitig zur nachhaltigen Entwicklung beizutragen. Horizont 2020 unterstützt die Strategie Europa 2020 und andere Strategien der Europäischen Union sowie die Vollendung und das Funktionieren des Europäischen Forschungsraums (EFR).Der Fortschritt im Verhältnis zu diesem übergeordneten Ziel wird mit den folgenden Leistungsindikatoren bewertet:•das Forschungs- und Entwicklungsziel der Strategie Europa 2020 (3% des BIP);•der Indikator für Innovationsausgabe im Rahmender Strategie Europa 2020;•der Anteil von Forschern an der Erwerbsbevölkerung.Zur Erreichung des übergeordneten Ziels werden drei getrennte, wenngleich sich gegenseitig verstärkende Schwerpunkte verfolgt, für die jeweils Einzelziele festgelegt sind. Ihre Durchführung ist nahtlos, fördert die wechselseitigen Beziehungen zwischen den jeweiligen Einzelzielen, vermeidet Doppelarbeit und stärkt so ihre Gesamtwirkung.Die Gemeinsame Forschungsstelle trägt durch das Einzelziel einer auftraggeberorientierten wissenschaftlich-technischen Unterstützung der Unionspolitik zum übergeordneten Ziel und zu den Schwerpunkten von Horizont 2020 bei. (Siehe auch H2020-EU.6.) (http://cordis.europa.eu/programme/rcn/664511_en.html)Das Europäische Innovations- und Technologieinstitut (EIT) trägt durch das Einzelziel, das Wissensdreieck aus Hochschulbildung, Forschung und Innovation zu integrieren, zum übergeordneten Ziel und zu den Schwerpunkten von Horizont 2020 bei. Die Leistung des EIT wird mit folgenden Indikatoren gemessen:•in Wissens- und Innovationsgemeinschaften (KIC) integrierte Hochschul-, Unternehmens- und Forschungsorganisationen;•Kooperation innerhalb des Wissensdreiecks, aus der innovative Produkte, Dienstleistungen und Verfahren hervorgehen.(Siehe auch H2020-EU.7.) (http://cordis.europa.eu/programme/rcn/664513_en.html)

Bereichsübergreifende Aspekte und Unterstützungsmaßnahmen in Horizont 2020

Die bereichsübergreifenden Aspekte, die – nicht erschöpfend – in Artikel 14 aufgelistet sind und Wirkungen zwischen den Einzelzielen der drei Schwerpunkte erzielen sollen, werden so weit gefördert, wie es für die Entwicklung neuer Kenntnisse und Kompetenzen und für bahnbrechende Erfolge auf technologischem Gebiet sowie die praktische Verwertung von Wissen für die Wirtschaft und Gesellschaft erforderlich ist. Ferner werden in vielen Fällen disziplinübergreifende Lösungen entwickelt werden müssen, die sich übergreifend in Bezug auf mehrere Einzelziele von Horizont 2020 auswirken. Horizont 2020 wird – auch durch die effiziente Bündelung der Haushaltsmittel – Anreize für Maßnahmen, die sich mit derartigen bereichsübergreifenden Aspekten befassen, vermitteln.

Sozial- und Geisteswissenschaften

Die sozial- und geisteswissenschaftliche Forschung wird in jeden der drei Schwerpunkte von Horizont 2020 und in jedes der Einzelziele uneingeschränkt einbezogen und zur Evidenzbasis für die politische Entscheidungsfindung auf internationaler Ebene, Unionsebene, nationaler, regionaler und lokaler Ebene beitragen. In Bezug auf gesellschaftliche Herausforderungen werden die Sozial- und Geisteswissenschaften als wesentliches Element bei den Tätigkeiten durchgehend berücksichtigt werden, die zur Bewältigung der jeweiligen gesellschaftlichen Herausforderungen benötigt werden, um ihre Wirkung zu verstärken. Mit dem Einzelziel ""Europa in einer sich verändernden Welt - integrative, innovative und reflektierende Gesellschaften"" im Rahmen des Schwerpunkts ""Gesellschaftliche Herausforderungen"" (H2020-EU.3.6.) (http://cordis.europa.eu/programme/rcn/664435_en.html) wird die sozial- und geisteswissenschaftliche Forschung durch die schwerpunktmäßige Ausrichtung auf integrative, innovative und reflektierende Gesellschaften unterstützt.

Wissenschaft und Gesellschaft

Durch Tätigkeiten im Rahmen von Horizont 2020, durch die das auf fundierte Informationen gestütztes Engagement der Bürger und der Zivilgesellschaft in Forschungs- und Innovationsfragen gefördert wird, wird das Verhältnis zwischen Wissenschaft und Gesellschaft sowie die Förderung einer verantwortungsvollen Forschung und Innovation und einer wissenschaftlichen Bildung und Kultur vertieft und das Vertrauen der Öffentlichkeit in die Wissenschaft gestärkt.

Gleichstellung der Geschlechter

Die Union hat sich die Förderung der Geschlechtergleichstellung in Wissenschaft und Innovation zum Ziel gesetzt. Im Rahmen von Horizont 2020 werden bereichsübergreifend Fragen der Gleichbehandlung der Geschlechter behandelt, um Ungleichgewichte zwischen Männern und Frauen zu korrigieren und um die Geschlechterdimension in die Programmplanung und die Inhalte von Forschung und Innovation aufzunehmen.

KMU

Horizont 2020 fördert und unterstützt die integrierte und zielübergreifende Einbeziehung von KMU in alle Einzelziele. Gemäß Artikel 22 gelten die unter dem Einzelziel ""Innovation in KMU"" (KMU-spezifisches Instrument) (H2020-EU.2.3.) http://cordis.europa.eu/programme/rcn/664223_en.html angegebenen Maßnahmen auch für das Einzelziel ""Führende Rolle bei grundlegenden und industriellen Technologien"" (H2020-EU.2.1.) http://cordis.europa.eu/programme/rcn/664145_en.html und im Schwerpunkt ""Gesellschaftliche Herausforderungen"".(H2020-EU.3.) http://cordis.europa.eu/programme/rcn/664235_en.html.

""Der schnelle Weg zur Innovation"" (Fast Track to Innovation – FTI)

FTI gemäß Artikel 24 wird Innovationsmaßnahmen unter dem Einzelziel ""Führende Rolle bei grundlegenden und industriellen Technologien"" und unter dem Schwerpunkt ""Gesellschaftliche Herausforderungen"" unterstützen, mit einer ""Bottom-up""-Logik auf Grundlage einer zeitlich unbefristeten Ausschreibung und mit einer Frist für die Gewährung von höchstens sechs Monaten.

Ausweitung der Beteiligung

Das Forschungs- und Innovationspotenzial der Mitgliedstaaten ist – trotz einer gewissen Konvergenz in jüngster Zeit – nach wie vor sehr unterschiedlich, wobei es große Spannen zwischen den ""Innovationsführern"" und den ""eher mäßigen Innovatoren"" gibt. Die Tätigkeiten sollten dazu beitragen, dass die Forschungs- und Innovationskluft in Europa geschlossen wird, indem Synergien mit den europäischen Struktur- und Investitionsfonds (ESI-Fonds) gefördert werden und auch indem spezifische Maßnahmen getroffen werden, um das Exzellenzpotenzial der in Bezug auf Forschung, Entwicklung und Innovation leistungsschwachen Regionen zu erschließen und damit die Beteiligung an Horizont 2020 auszuweiten und zur Verwirklichung des Europäischen Forschungsraums beizutragen.

Internationale Zusammenarbeit

Die internationale Zusammenarbeit mit Drittländern und internationalen, regionalen oder globalen Organisationen ist notwendig, um viele der in Horizont 2020 festgelegten Einzelzeile wirksam angehen zu können. Die internationale Zusammenarbeit ist für die Pionier- und Grundlagenforschung überaus wichtig, um die Vorteile sich neu abzeichnender wissenschaftlicher und technologischer Möglichkeiten nutzen zu können. Die Zusammenarbeit ist erforderlich, um gesellschaftliche Herausforderungen zu bewältigen und die Wettbewerbsfähigkeit der europäischen Industrie zu verstärken. Die Förderung der internationalen Mobilität von Forschungs- und Innovationspersonal ist für die Verbesserung dieser globalen Zusammenarbeit ebenfalls unerlässlich. Die internationale Zusammenarbeit bei Forschung und Innovation ist ein Schlüsselaspekt des Gesamtengagements der Union. Daher wird die internationale Zusammenarbeit bei jedem der drei Schwerpunkte von Horizont 2020 gefördert. Darüber hinaus werden spezifische horizontale Tätigkeiten gefördert, um die kohärente und effektive Entwicklung der internationalen Zusammenarbeit im gesamten Bereich von Horizont 2020 sicherzustellen.

Nachhaltige Entwicklung und Klimawandel

Mit Horizont 2020 werden Tätigkeiten gefördert und unterstützt, die darauf abzielen, aus dem Vorsprung Europas im Wettlauf um die Entwicklung neuer Prozesse und Technologien zur Förderung eines nachhaltigen Wachstums im weitesten Sinne und zur Bekämpfung des Klimawandels Nutzen zu ziehen. Dieser horizontale Ansatz, der uneingeschränkt in alle Schwerpunkte von Horizont 2020 einbezogen ist, wird der Union helfen, in einer Welt mit knappen Ressourcen und niedrigem CO2-Ausstoß erfolgreich zu sein und gleichzeitig eine ressourcenschonende, nachhaltige und wettbewerbsfähige Wirtschaft aufzubauen.

Überbrückung von der Entdeckung bis zur Marktreife

Die Überbrückungsmaßnahmen im Rahmen von Horizont 2020 sollen dazu beitragen, dass Entdeckungen bis zur Marktreife weiterentwickelt werden, damit Ideen, wo immer dies sinnvoll ist, genutzt und vermarktet werden. Diese Maßnahmen sollten auf einem breiten Innovationskonzept beruhen und die sektorübergreifende Innovation anregen.

Bereichsübergreifende Unterstützungsmaßnahmen

Die bereichsübergreifenden Aspekte werden mit einer Reihe von horizontaler Unterstützungsmaßnahmen unterstützt, und zwar durch Maßnahmen zur Steigerung der Attraktivität des Berufs des Wissenschaftlers, einschließlich der allgemeinen Grundsätze der Europäischen Charta für Forscher, zur Stärkung der Evidenzbasis und zur Entwicklung und Förderung des Europäischen Forschungsraums (einschließlich der fünf EFR-Initiativen) und der Innovationsunion, zur Verbesserung der Rahmenbedingungen für die Förderung der Innovationsunion einschließlich der Grundsätze der Kommissionsempfehlung zum Umgang mit geistigem Eigentum und zur Sondierung der Möglichkeiten für die Einführung eines Instruments für die Verwertung von Rechten des geistigen Eigentums, zur Verwaltung und Koordinierung internationaler Netze für herausragende Forscher und Innovatoren, wie beispielsweise COST.";"";"H2020";"H2020";"";"";"2014-09-23 19:33:48";"664087" +"H2020-EC";"pl";"H2020-EC";"";"";"Program ramowy „Horyzont 2020”";"EC Treaty";"

Program ramowy „Horyzont 2020”

Ogólne kierunki celów szczegółowych i działań

Celem ogólnym programu „Horyzont 2020” jest zbudowanie społeczeństwa i wiodącej na świecie gospodarki opartych na wiedzy i innowacjach w całej Unii oraz przyczynienie się do zrównoważonego rozwoju. Program wspiera realizację strategii „Europa 2020” oraz innych kierunków polityki Unii, a także urzeczywistnienie i funkcjonowanie EPB.Do oceny postępów osiągniętych w zakresie celu ogólnego stosuje się następujące wskaźniki efektywności:•cel dotyczący działań badawczo-rozwojowych w ramach strategii „Europa 2020” (3% PKB);•wskaźnik innowacyjności w ramach strategii „Europa 2020”;•odsetek naukowców w populacji aktywnej zawodowo.Cel ogólny składa się z trzech oddzielnych, lecz uzupełniających się wzajemnie priorytetów, z których każdy obejmuje zbiór celów szczegółowych. Będą one realizowane w spójny sposób, z myślą o promowaniu interakcji między różnymi celami szczegółowymi, unikaniu powielania wysiłków oraz wzmocnieniu zbiorczego oddziaływania.Wspólne Centrum Badawcze (JRC) wnosi wkład w osiągnięcie celu ogólnego i priorytetów programu „Horyzont 2020”, kierując się celem szczegółowym polegającym na zapewnieniu unijnym politykom wsparcia naukowego i technicznego, które byłoby zorientowane na klienta. (Zobacz także H2020-EU.6.) (http://cordis.europa.eu/programme/rcn/664511_en.html)Europejski Instytut Innowacji i Technologii (EIT) przyczynia się do osiągnięcia celu ogólnego i priorytetów programu „Horyzont 2020”, kierując się celem szczegółowym polegającym na integracji trójkąta wiedzy łączącego szkolnictwo wyższe, badania naukowe i innowacje. Do oceny efektywności EIT stosuje się następujące wskaźniki:•organizacje uniwersyteckie, biznesowe i badawcze zintegrowane w ramach wspólnot wiedzy i innowacji (WWiI);•współpraca w ramach trójkąta wiedzy prowadząca do opracowania innowacyjnych produktów, usług i procesów.(Zobacz także H2020-EU.7.) (http://cordis.europa.eu/programme/rcn/664513_en.html)

Zagadnienia przekrojowe i środki wspierające w programie „Horyzont 2020”

Zagadnienia przekrojowe, których orientacyjny wykaz zawarty jest w art. 14 będą w miarę potrzeb promowane pomiędzy celami szczegółowymi trzech priorytetów, aby rozwijać nową wiedzę, kluczowe kompetencje oraz stymulować ważne i przełomowe osiągnięcia w technice, przekładając przy tym wiedzę na wartość ekonomiczną i społeczną. Ponadto w wielu przypadkach konieczne będzie opracowanie rozwiązań interdyscyplinarnych, obejmujących naraz wiele celów szczegółowych programu „Horyzont 2020”. Program „Horyzont 2020” stworzy zachęty do działań dotyczących tego rodzaju zagadnień przekrojowych, w tym poprzez efektywne łączenie środków budżetowych.

Nauki społeczne i humanistyczne

Nauki społeczne i humanistyczne będą w pełni włączone do każdego z priorytetów programu „Horyzont 2020” oraz każdego z celów szczegółowych, a także będą przyczyniać się do wzmocnienia bazy potrzebnej do kształtowania polityki opartej na dowodach na poziomie międzynarodowym, unijnym, krajowym, regionalnym i lokalnym. W odniesieniu do wyzwań społecznych nauki społeczne i humanistyczne zostaną włączone ze względu na fakt, iż stanowią zasadniczy element działań koniecznych do stawienia czoła każdemu z tych wyzwań społecznych w celu wzmocnienia wpływu działań. W ramach celu szczegółowego „Europa w zmieniającym się świecie: integracyjne, innowacyjne i refleksyjne społeczeństwa” objętego priorytetem „Wyzwania społeczne” (H2020-EU.3.6.) (http://cordis.europa.eu/programme/rcn/664435_en.html) wspierane będą badania naukowe w dziedzinie nauk społecznych i humanistycznych poprzez skupienie się na integracyjnych, innowacyjnych i refleksyjnych społeczeństwach.

Nauka i społeczeństwo

Związki między nauką a społeczeństwem, a także propagowanie odpowiedzialnych badań naukowych i innowacji, edukacji naukowej i kultury są pogłębiane, a zaufanie społeczeństwa do nauki jest wzmacniane poprzez działania programu „Horyzont 2020” sprzyjające świadomemu zaangażowaniu obywateli i społeczeństwa obywatelskiego w zagadnienia badań naukowych i innowacji.

Płeć

Jednym z zobowiązań Unii jest propagowanie równości płci w sferze nauki i innowacji. W programie „Horyzont 2020” uwzględniona zostanie stanowiąca zagadnienie przekrojowe kwestia płci w celu naprawienia braku równowagi między sytuacją kobiet i mężczyzn oraz włączenia wymiaru płci w zakres planowania i treść badań naukowych i innowacji.

MŚP

Program „Horyzont 2020” przewiduje zachęty i wsparcie dla zintegrowanego udziału MŚP w realizacji wszystkich celów szczegółowych programu. Zgodnie z art. 22 specjalne środki określone w celu szczegółowym „Innowacje w małe i średnie przedsiębiorstwa” (specjalny instrument przeznaczony dla MŚP) (H2020-EU.2.3.) http://cordis.europa.eu/programme/rcn/664223_en.html mają zastosowanie w celu szczegółowym „Wiodąca pozycja w zakresie technologii prorozwojowych i przemysłowych” (H2020-EU.2.1.) http://cordis.europa.eu/programme/rcn/664145_en.html oraz w priorytecie „Wyzwania społeczne” (H2020-EU.3.) http://cordis.europa.eu/programme/rcn/664235_en.html.

Procedura pilotażowa „Szybka ścieżka do innowacji” (FTI)

Procedura pilotażowa FTI, jak określono w art. 24, wesprze innowacyjne działania w ramach celu szczegółowego „Wiodąca pozycja w zakresie technologii prorozwojowych i przemysłowych” oraz w ramach priorytetu „Wyzwania społeczne”, z zastosowaniem podejścia oddolnego na podstawie stale otwartego zaproszenia do składania wniosków, oraz gdy czas na udzielenie dotacji nie przekracza sześciu miesięcy.

Zapewnianie szerszego uczestnictwa

Potencjał państw członkowskich w zakresie badań naukowych i innowacji, pomimo pewnej obserwowanej w ostatnim okresie konwergencji, pozostaje bardzo zróżnicowany, z dużymi lukami między „liderami innowacji” a „umiarkowanymi innowatorami”. Działania przyczyniają się do zniwelowania różnic w badaniach naukowych i innowacjach w Europie poprzez promowanie synergii z europejskimi funduszami strukturalnymi i inwestycyjnymi oraz poprzez szczegółowe środki uwolnienia doskonałości w regionach o słabych wynikach w dziedzinie badań, rozwoju i innowacji, co zwiększy uczestnictwo w programie „Horyzont 2020” i przyczyni się do urzeczywistnienia EPB.

Współpraca międzynarodowa

Współpraca międzynarodowa z państwami trzecimi oraz organizacjami międzynarodowymi, regionalnymi lub globalnymi jest konieczna do skutecznej realizacji wielu celów szczegółowych określonych w programie „Horyzont 2020”. W przypadku badań pionierskich i podstawowych współpraca międzynarodowa ma zasadnicze znaczenie dla czerpania korzyści z możliwości stwarzanych przez powstające sektory nauki i technologii. Współpraca jest konieczna, aby podjąć wyzwania społeczne i podnieść konkurencyjność przemysłu europejskiego. Dla wzmocnienia globalnej współpracy kluczowe znaczenie ma również wspieranie międzynarodowej mobilności naukowców i personelu zajmującego się innowacjami. Współpraca międzynarodowa w zakresie badań naukowych i innowacji stanowi kluczowy aspekt globalnych zobowiązań Unii. Dlatego współpraca międzynarodowa będzie promowana w ramach każdego spośród trzech priorytetów programu „Horyzont 2020”. Ponadto wspierane będą specjalne działania horyzontalne, aby zapewnić spójny i skuteczny rozwój współpracy międzynarodowej objętej programem „Horyzont 2020”.

Zrównoważony rozwój i zmiana klimatu

Program „Horyzont 2020” będzie stwarzał zachęty i będzie wspierał działania związane z wykorzystywaniem wiodącej roli Europy w wyścigu zmierzającym do rozwoju nowych procesów i technologii promujących zrównoważony rozwój, w szerokim sensie, i przeciwdziałających zmianie klimatu. Takie podejście horyzontalne, w pełni zintegrowane z priorytetami programu „Horyzont 2020”, pomoże Unii prosperować w świecie charakteryzującym się niskimi emisjami, ale i ograniczonymi zasobami, i jednocześnie budować efektywnie korzystającą z zasobów, zrównoważoną i konkurencyjną gospodarkę.

Ścieżka od wynalazku po wprowadzenie na rynek

Działania pomostowe w programie „Horyzont 2020” mają na celu umożliwienie rynkowych zastosowań dla wynalazków, prowadząc w stosownych przypadkach do wykorzystania i komercjalizacji pomysłów. Działania takie powinny być oparte na szerokiej koncepcji innowacji i stymulować innowacje międzysektorowe.

Przekrojowe środki wsparcia

Zagadnienia przekrojowe wspierane będą poprzez szereg horyzontalnych środków wsparcia, w tym wsparcia dla: podniesienia atrakcyjności zawodu naukowca, w tym zasad ogólnych Europejskiej karty naukowca; wzmocnienia bazy faktograficznej oraz rozwoju i wspierania EPB (w tym pięciu inicjatyw EPB) oraz „Unii innowacji”; poprawy ramowych warunków wspierających „Unię innowacji”, w tym zasad zalecenia Komisji w sprawie zarządzania własnością intelektualną, oraz zbadania możliwości utworzenia europejskiego instrumentu wyceny praw własności intelektualnej; administracji i koordynacji międzynarodowych sieci wybitnych naukowców i innowatorów, jak np. COST.";"";"H2020";"H2020";"";"";"2014-09-23 19:33:48";"664087" +"H2020-EC";"es";"H2020-EC";"";"";"Programa Marco Horizonte 2020";"EC Treaty";"

Programa Marco Horizonte 2020 (H2020)

Líneas generales de los objetivos específicos y actividades

Horizonte 2020 tiene por objetivo general construir una sociedad y una economía de primer orden a escala mundial basadas en el conocimiento y la innovación en el conjunto de la Unión, además de contribuir a un desarrollo sostenible. Respaldará la estrategia Europa 2020 y otras políticas de la Unión, así como la realización y el funcionamiento del Espacio Europeo de Investigación.Los indicadores de rendimiento para evaluar los avances en relación con este objetivo general son:•el objetivo de investigación y desarrollo (I+D) de la estrategia Europa 2020 (el 3 % del PIB);•el indicador principal de innovación en el contexto de la estrategia Europa 2020;•La proporción de investigadores en relación con la población activaEste objetivo general se perseguirá a través de tres prioridades diferenciadas, si bien se refuerzan mutuamente, cada una de las cuales contiene una serie de objetivos específicos. Se ejecutarán sin solución de continuidad, a fin de fomentar la interacción entre los distintos objetivos específicos, evitar la duplicación de esfuerzos y reforzar su impacto combinado.El Centro Común de Investigación contribuirá al objetivo general y a las prioridades de Horizonte 2020 con el objetivo específico de facilitar apoyo científico y técnico impulsado por el cliente a las políticas de la Unión. (Véase también H2020-EU.6.) (http://cordis.europa.eu/programme/rcn/664511_en.html)El Instituto Europeo de Innovación y Tecnología (EIT) contribuirá al objetivo general y a las prioridades de Horizonte 2020 con el objetivo específico de integrar el triángulo del conocimiento que forman la educación superior, la investigación y la innovación. Los indicadores para evaluar el rendimiento del EIT son:•organizaciones procedentes de la universidad, la empresa y la investigación integradas en las Comunidades de Conocimiento e Innovación (CCI);•colaboración dentro del triángulo del conocimiento que desemboque en el desarrollo de productos, servicios y procesos innovadores.(Véase también H2020-EU.7.) (http://cordis.europa.eu/programme/rcn/664513_en.html)

Cuestiones transversales y medidas de apoyo en Horizonte 2020

Las cuestiones transversales, de las que se encuentra lista indicativa en el artículo 14, serán promovidas entre los objetivos específicos de las tres prioridades, por ser necesarias para desarrollar nuevos conocimientos, competencias fundamentales y grandes avances tecnológicos así como transformar el conocimiento en valor económico y social. En muchos casos convendrá, además, desarrollar soluciones interdisciplinarias que abarquen múltiples objetivos específicos de Horizonte 2020. Horizonte 2020 ofrecerá incentivos para estas acciones transversales, por ejemplo mediante la agrupación eficaz de los presupuestos.

Ciencias sociales y humanidades

La investigación en el ámbito de las ciencias sociales y las humanidades se integrará plenamente en cada uno de las prioridades de Horizonte 2020 y en cada uno de los objetivos específicos y contribuirá a alimentar la base empírica para la elaboración de políticas a escala internacional, de la Unión, nacional, regional y local. Respecto de los retos de la sociedad, se incluirán las ciencias sociales y las humanidades como elemento esencial de las actividades necesarias para abordar cada uno de esos retos a fin de mejorar sus incidencias positivas. El objetivo específico del reto de la sociedad ""Europa en un mundo cambiante: sociedades inclusivas, innovadoras y reflexivas"" (H2020-EU.3.6.) (http://cordis.europa.eu/programme/rcn/664435_en.html) constituirá un apoyo a la investigación en el ámbito de las ciencias sociales y las humanidades al tratar de las sociedades inclusivas, innovadoras y reflexivas.

Ciencia y sociedad

Se ahondará la relación entre la ciencia y la sociedad, así como la promoción de la investigación y la innovación responsables y de la educación y la cultura científicas y se reforzará la confianza pública en la ciencia, mediante las actividades de Horizonte 2020 que favorezcan una participación informada de los ciudadanos y de la sociedad civil en asuntos de investigación e innovación.

Igualdad de oportunidades entre sexos

La promoción de la igualdad de oportunidades entre hombres y mujeres en relación con la ciencia y la innovación es un compromiso de la Unión. Esta cuestión se abordará en la iniciativa Horizonte 2020 con un carácter transversal, para corregir las disparidades existentes entre hombres y mujeres, e integrar una dimensión de género en el contenido y la programación de la investigación y la innovación.

PYME

Horizonte 2020 promoverá y apoyará la participación de las PYME en la consecución de todos los objetivos específicos de una forma integrada. De conformidad con el artículo 22, las medidas previstas en el objetivo específico ""Innovación en las PYME"" (instrumento dirigido a las PYME) (H2020-EU.2.3.) http://cordis.europa.eu/programme/rcn/664223_en.html se aplicarán en el objetivo específico ""Liderazgo en tecnologías industriales y de capacitación"" (H2020-EU.2.1.) http://cordis.europa.eu/programme/rcn/664145_en.html y en la prioridad ""Retos de la sociedad"". (H2020-EU.3.) http://cordis.europa.eu/programme/rcn/664235_en.html.

Vía rápida hacia la innovación

La Vía rápida hacia la innovación de conformidad con el artículo 24 apoyará las acciones innovadoras correspondientes al objetivo específico ""Liderazgo en las tecnologías industriales y de capacitación"" y a los desafíos de la sociedad, con una lógica ascendente basada en una convocatoria permanentemente abierta y un plazo para la concesión de subvenciones que no supere los seis meses.

Ampliación de la participación

El potencial de investigación e innovación de los Estados miembros, pese a una cierta convergencia reciente, sigue siendo muy desigual con grandes diferencias entre los ""líderes de la innovación"" y los ""innovadores modestos"". Las actividades ayudarán a colmar la brecha existente en Europa en materia de investigación e innovación mediante el fomento de sinergias con los Fondos Estructurales y de Inversiones Europeos (Fondos EIE) y también mediante la adopción de medidas específicas para fomentar la excelencia en las regiones de bajo rendimiento en investigación, desarrollo e innovación (I+D+i), ampliando así la participación en Horizonte 2020 y contribuyendo a la realización del Espacio Europeo de Investigación

Cooperación internacional

Resulta necesario mantener una cooperación internacional con países terceros y con organizaciones internacionales, regionales o mundiales a fin de abordar con eficacia muchos de los objetivos específicos definidos en Horizonte 2020. La cooperación internacional es fundamental para la investigación puntera y básica, a fin de aprovechar los beneficios que acarrean las oportunidades en materia de ciencia y tecnología emergentes. La cooperación es necesaria para abordar los retos de la sociedad y mejorar la competitividad de la industria europea. Para mejorar esta cooperación mundial, también resultará determinante promover a escala internacional la movilidad de los investigadores y del personal dedicado a la innovación. La cooperación internacional en investigación e innovación es un aspecto fundamental de los compromisos mundiales de la Unión. Se fomentará, por lo tanto, la cooperación internacional en cada una de las tres prioridades de Horizonte 2020. Además, se prestará apoyo a las actividades horizontales específicas para que la cooperación internacional pueda fluir de manera coherente y eficaz en todo el ámbito de aplicación de Horizonte 2020.

Desarrollo sostenible y cambio climático

Horizonte 2020 fomentará y prestará apoyo a las actividades que permitan aprovechar el liderazgo de Europa en la carrera hacia nuevos procesos y tecnologías que favorezcan el desarrollo sostenible en sentido amplio y permitan luchar contra el cambio climático. Este planteamiento horizontal, plenamente integrado en todas las prioridades de Horizonte 2020, ayudará a la Unión a prosperar en un mundo hipocarbónico y de recursos limitados y a impulsar a la vez una economía eficiente en el uso de recursos, sostenible y competitiva.

Salvar la distancia que media entre el descubrimiento y la aplicación comercial

Las acciones destinadas a salvar esta distancia en todo Horizonte 2020 van dirigidas a acercar el descubrimiento a la aplicación comercial, lo que implica la explotación y comercialización de ideas cuando sea adecuado. Las acciones deben basarse en un concepto amplio de innovación y estimular la innovación intersectorial.

Medidas de apoyo transversales

Las cuestiones transversales serán respaldadas por una serie de medidas de apoyo horizontales, destinadas en particular a: mejorar el atractivo de la profesión de investigador, incluidos los principios generales de la Carta Europea de los Investigadores; reforzar la base factual y la mejora y apoyo del EEI (incluidas las cinco iniciativas del EEI) y la Unión por la Innovación; mejorar las condiciones marco en apoyo de la Unión por la Innovación, incluidos los principios de la Recomendación de la Comisión sobre la gestión de la propiedad intelectual y explorar la posibilidad de crear un instrumento europeo de valorización de los derechos de propiedad intelectual; la administración y la coordinación de redes internacionales de investigadores e innovadores de mayor excelencia (como COST).";"";"H2020";"H2020";"";"";"2014-09-23 19:33:48";"664087" +"H2020-EU.2.1.5.3.";"fr";"H2020-EU.2.1.5.3.";"";"";"Des technologies durables, efficaces dans l'utilisation des ressources et à faibles émissions de carbone dans les entreprises de transformation à forte intensité d'énergie";"Sustainable, resource-efficient and low-carbon technologies in energy-intensive process industries";"

Des technologies durables, efficaces dans l'utilisation des ressources et à faibles émissions de carbone dans les entreprises de transformation à forte intensité d'énergie

Accroître la compétitivité des entreprises de transformation en améliorant considérablement l'efficacité énergétique et l'efficacité de l'utilisation des ressources et en réduisant l'impact environnemental de ces activités industrielles tout au long de la chaîne de valeur, en promouvant l'adoption de technologies à faibles émissions de carbone, ainsi que de processus industriels plus durables et, le cas échéant, l'intégration de sources d'énergie renouvelables.";"";"H2020";"H2020-EU.2.1.5.";"";"";"2014-09-22 20:42:10";"664203" +"H2020-EU.2.1.5.3.";"de";"H2020-EU.2.1.5.3.";"";"";"Nachhaltige, ressourcenschonende und emissionsarme Technologien für energieintensive Prozessindustrien.";"";"

Nachhaltige, ressourcenschonende und emissionsarme Technologien für energieintensive Prozessindustrien.

Steigerung der Wettbewerbsfähigkeit der Prozessindustrien durch drastische Erhöhung der Ressourcen- und Energieeffizienz und durch Reduzierung der Umweltfolgen der Tätigkeiten dieses Sektors über die gesamte Wertschöpfungskette hinweg durch die Förderung des Einsatzes von Technologien mit niedrigem CO2-Ausstoß, nachhaltigerer Industrieprozesse und gegebenenfalls der Integration erneuerbarer Energieträger.";"";"H2020";"H2020-EU.2.1.5.";"";"";"2014-09-22 20:42:10";"664203" +"H2020-EU.2.1.5.3.";"it";"H2020-EU.2.1.5.3.";"";"";"Tecnologie sostenibili, efficienti sotto il profilo delle risorse e a basse emissioni di carbonio in processi industriali a elevata intensità energetica";"Sustainable, resource-efficient and low-carbon technologies in energy-intensive process industries";"

Tecnologie sostenibili, efficienti sotto il profilo delle risorse e a basse emissioni di carbonio in processi industriali a elevata intensità energetica

Aumentare la competitività delle industrie di trasformazione, migliorando drasticamente l'efficienza sotto il profilo delle risorse e dell'energia, riducendo l'impatto ambientale di tali attività industriali attraverso l'intera catena del valore e promuovendo l'adozione di tecnologie a basse emissioni di carbonio, processi industriali più sostenibili e, ove applicabile, l'integrazione di fonti energetiche rinnovabili.";"";"H2020";"H2020-EU.2.1.5.";"";"";"2014-09-22 20:42:10";"664203" +"H2020-EU.2.1.5.3.";"pl";"H2020-EU.2.1.5.3.";"";"";"Zrównoważone, zasobooszczędne i niskoemisyjne technologie w energochłonnych przemysłach przetwórczych";"Sustainable, resource-efficient and low-carbon technologies in energy-intensive process industries";"

Zrównoważone, zasobooszczędne i niskoemisyjne technologie w energochłonnych przemysłach przetwórczych

Zwiększanie konkurencyjności gałęzi przemysłu przetwórczego poprzez radykalną poprawę oszczędności zasobów i energii oraz ograniczenie oddziaływania na środowisko takiej działalności przemysłowej w całym łańcuchu wartości, a także wspieranie wprowadzania technologii niskoemisyjnych, trwalszych procesów przemysłowych oraz – w stosownych przypadkach – włączanie do procesów przemysłowych odnawialnych źródeł energii.";"";"H2020";"H2020-EU.2.1.5.";"";"";"2014-09-22 20:42:10";"664203" +"H2020-EU.2.1.5.3.";"es";"H2020-EU.2.1.5.3.";"";"";"Tecnologías sostenibles, eficientes en su utilización de recursos y de baja emisión de carbono en las industrias de transformación de gran consumo energético";"Sustainable, resource-efficient and low-carbon technologies in energy-intensive process industries";"

Tecnologías sostenibles, eficientes en su utilización de recursos y de baja emisión de carbono en las industrias de transformación de gran consumo energético

Aumentar la competitividad de las industrias de transformación, mejorando drásticamente la eficiencia energética y de los recursos y reduciendo el impacto ambiental de estas actividades industriales a través de toda la cadena de valor y fomentando la adopción de tecnologías de baja emisión de carbono, procesos industriales más sostenibles y, cuando proceda, la integración de fuentes de energía renovables.";"";"H2020";"H2020-EU.2.1.5.";"";"";"2014-09-22 20:42:10";"664203" +"H2020-EC";"en";"H2020-EC";"";"";"Horizon 2020 Framework Programme";"EC Treaty";"

Horizon 2020 Framework Programme (H2020)

Broad lines of the specific objectives and activities

The general objective of Horizon 2020 is to build a society and a world-leading economy based on knowledge and innovation across the whole Union, while contributing to sustainable development. It will support the Europe 2020 strategy and other Union policies as well as the achievement and functioning of the European Research Area (ERA).The performance indicators for assessing progress against this general objective are:•the research and development (R&D) target (3 % of GDP) of the Europe 2020 strategy;•the innovation output indicator in the context of the Europe 2020 strategy;•the share of researchers in the active population.This general objective shall be pursued through three distinct, yet mutually reinforcing, priorities, each containing a set of specific objectives. They will be implemented in a seamless manner in order to foster interactions between the different specific objectives, avoid any duplication of effort and reinforce their combined impact.The Joint Research Centre (JRC) shall contribute to the general objective and priorities of Horizon 2020 with the specific objective of providing customer-driven scientific and technical support to Union policies. (See also H2020-EU.6.) (http://cordis.europa.eu/programme/rcn/664511_en.html)The European Institute of Innovation and Technology (EIT) shall contribute to the general objective and priorities of Horizon 2020 with the specific objective of integrating the knowledge triangle of higher education, research and innovation. The indicators for assessing the performance of the EIT are:•organisations from universities, business and research integrated in the Knowledge and Innovation Communities (KICs);•collaboration inside the knowledge triangle leading to the development of innovative products, services and processes.(See also H2020-EU.7.) (http://cordis.europa.eu/programme/rcn/664513_en.html)

Cross-cutting issues and support measures in Horizon 2020

Cross-cutting issues, an indicative list of which is found in Article 14, will be promoted between specific objectives of the three priorities as necessary to develop new knowledge, key competences and major technological breakthroughs as well as translating knowledge into economic and societal value. Furthermore, in many cases, interdisciplinary solutions will have to be developed which cut across the multiple specific objectives of Horizon 2020. Horizon 2020 will provide incentives for actions dealing with such cross-cutting issues, including by the efficient bundling of budgets.

Social sciences and humanities

Social sciences and humanities research will be fully integrated into each of the priorities of Horizon 2020 and each of the specific objectives and will contribute to the evidence base for policy making at international, Union, national, regional and local level. In relation to societal challenges, social sciences and humanities will be mainstreamed as an essential element of the activities needed to tackle each of the societal challenges to enhance their impact. The specific objective of the societal challenge 'Europe in a changing world - Inclusive, innovative and reflective societies' (H2020-EU.3.6.) (http://cordis.europa.eu/programme/rcn/664435_en.html) will support social sciences and humanities research by focusing on inclusive, innovative and reflective societies.

Science and society

The relationship between science and society as well as the promotion of responsible research and innovation, science education and culture shall be deepened and public confidence in science reinforced by activities of Horizon 2020 favouring the informed engagement of citizens and civil society in research and innovation.

Gender

Promoting gender equality in science and innovation is a commitment of the Union. In Horizon 2020, gender will be addressed as a cross-cutting issue in order to rectify imbalances between women and men, and to integrate a gender dimension in research and innovation programming and content.

SMEs

Horizon 2020 will encourage and support the participation of SMEs in an integrated way across all specific objectives. In accordance with Article 22, measures set out under the specific objective 'Innovation in SMEs' (dedicated SME instrument) (H2020-EU.2.3.) http://cordis.europa.eu/programme/rcn/664223_en.html shall be applied in the specific objective 'Leadership in enabling and industrial technologies' (H2020-EU.2.1.) http://cordis.europa.eu/programme/rcn/664145_en.html and in the priority 'Societal challenges' (H2020-EU.3.) http://cordis.europa.eu/programme/rcn/664235_en.html.

Fast Track to Innovation (FTI)

FTI, as set out in Article 24, will support innovation actions under the specific objective ""Leadership in enabling and industrial technologies"" and under the priority 'Societal challenges', with a bottom-up-driven logic on the basis of a continuously open call, and with 'time to grant' not exceeding six months.

Widening participation

The research and innovation potential of the Member States, despite some recent convergence, remains very different, with large gaps between ""innovation leaders"" and ""modest innovators"". Activities shall help close the research and innovation divide in Europe by promoting synergies with the European Structural and Investment Funds (ESI Funds) and also by specific measures to unlock excellence in low performing research, development and innovation (RDI) regions, thereby widening participation in Horizon 2020 and contributing to the realisation of the ERA.

International Cooperation

International cooperation with third countries and international, regional or global organisations is necessary to effectively address many specific objectives set out in Horizon 2020. International cooperation is essential for frontier and basic research in order to reap the benefits from emerging science and technology opportunities. Cooperation is necessary for addressing societal challenges and enhancing the competitiveness of European industry. Promoting R&I staff mobility at an international level is also crucial to enhance this global cooperation. International cooperation in research and innovation is a key aspect of the Union's global commitments. International cooperation will, therefore, be promoted in each of the three priorities of Horizon 2020. In addition, dedicated horizontal activities will be supported in order to ensure the coherent and effective development of international cooperation across Horizon 2020.

Sustainable development and climate change

Horizon 2020 will encourage and support activities towards exploiting Europe's leadership in the race to develop new processes and technologies promoting sustainable development, in a broad sense, and combating climate change. Such a horizontal approach, fully integrated in all Horizon 2020 priorities, will help the Union to prosper in a low-carbon, resource-constrained world while building a resource-efficient, sustainable and competitive economy.

Bridging from discovery to market application

Bridging actions throughout Horizon 2020 are aimed at bringing discovery to market application, leading to exploitation and commercialisation of ideas whenever appropriate. The actions should be based on a broad innovation concept and stimulate cross-sectoral innovation.

Cross-cutting support measures

The cross-cutting issues will be supported by a number of horizontal support measures, including support to: enhancing the attractiveness of the research profession, including the general principles of the European Charter for Researchers; strengthening the evidence base and the development of and support for ERA (including the five ERA initiatives) and the Innovation Union; improving framework conditions in support of the Innovation Union, including the principles of the Commission Recommendation on the management of intellectual property and exploring the possibility of setting up an European Intellectual Property Rights valorisation instrument; administration and coordination of international networks for excellent researchers and innovators, such as COST.";"";"H2020";"H2020";"";"";"2014-09-23 19:33:48";"664087" +"H2020-EU.2.1.1.";"fr";"H2020-EU.2.1.1.";"";"";"PRIMAUTÉ INDUSTRIELLE - Primauté dans le domaine des technologies génériques et industrielles - Technologies de l'information et de la communication (TIC)";"Information and Communication Technologies";"

PRIMAUTÉ INDUSTRIELLE - Primauté dans le domaine des technologies génériques et industrielles - Technologies de l'information et de la communication (TIC)

Objectif spécifique concernant les TIC

Conformément à l'initiative phare «Une stratégie numérique pour l'Europe», l'objectif spécifique de la recherche et de l'innovation liées aux TIC est de permettre à l'Union de soutenir et de développer les débouchés offerts par les avancées dans le domaine des TIC et de les exploiter au bénéfice de ses citoyens, de ses entreprises et de ses communautés scientifiques.L'Europe, qui est la plus grande économie mondiale et qui constitue la part la plus importante du marché mondial des TIC, lequel représentait plus de 2 600 milliards d'EUR (2 600 000 000 000 EUR) en 2011, devrait légitimement nourrir l'ambition de voir ses entreprises, ses pouvoirs publics, ses centres de recherche et de développement et ses universités être à la pointe de l'évolution des TIC aux niveaux européen et mondial, de développer de nouvelles activités et d'investir davantage dans l'innovation en matière de TIC.D'ici 2020, le secteur européen des TIC devrait fournir au moins l'équivalent de sa part du marché mondial des TIC, qui représentant environ un tiers en 2011. L'Europe devrait également promouvoir les entreprises innovantes dans le domaine des TIC, de telle sorte qu'un tiers de tous les investissements des entreprises dans la recherche et le développement relatifs aux TIC réalisés dans l'Union, qui s'élevaient à plus de 35 milliards d'EUR par an en 2011, soit le fait d'entreprises créées au cours des deux dernières décennies. Une telle évolution nécessite une hausse des investissements publics dans la recherche et le développement relatifs aux TIC, d'une manière qui permette de mobiliser également des fonds privés, afin d'intensifier les investissements au cours de la prochaine décennie. Elle suppose également une augmentation significative du nombre de pôles européens et de grappes d'entreprises européennes d'excellence d'envergure mondiale dans le domaine des TIC.Face au caractère de plus en plus complexe et pluridisciplinaire des chaînes technologiques et économiques à maîtriser dans le cadre des TIC, il convient d'établir des partenariats, de partager les risques et de mobiliser une masse critique à l'échelle de l'Union. Les actions de dimension européenne devraient aider l'industrie à développer une vision à l'échelle du marché unique, à réaliser des économies d'échelle et à rationaliser leurs tâches. La collaboration autour de plateformes technologiques communes et ouvertes, produisant un effet d'entraînement et de levier, permettra à toute une série de parties prenantes de bénéficier de nouvelles évolutions et de susciter de nouvelles innovations. Les partenariats au niveau de l'Union permettent par ailleurs la recherche de consensus et représentent, pour les partenaires internationaux, un point focal bénéficiant d'une certaine visibilité. Enfin, de tels partenariats soutiendront la définition de normes et de solutions interopérables à l'échelle européenne et mondiale.

Justification et valeur ajoutée de l'Union

Les TIC sous-tendent l'innovation et la compétitivité dans une grande variété de marchés et de secteurs publics et privés et permettent des avancées scientifiques dans toutes les disciplines. Au cours de la prochaine décennie, les transformations induites par les technologies numériques et les composants TIC ainsi que les infrastructures et les services fondés sur les TIC seront de plus en plus visibles dans tous les domaines de la vie. Les systèmes de traitement informatique, de communication et de stockage de données continueront à s'étendre au cours des prochaines années. Des quantités considérables d'informations et de données, y compris en temps réel, seront produites par des capteurs, des machines et des produits riches en informations, ce qui généralisera les activités à distance et permettra le déploiement de processus d'entreprises et de sites de production durables à l'échelle mondiale, lesquels pourront générer quantité de services et d'applications.De nombreux services publics et commerciaux essentiels et la totalité des grands processus de production de savoir seront fournis au moyen des TIC, que ce soit dans les sciences, en matière d'apprentissage, sur le plan de l'activité économique, dans le secteur de la culture et de la création, ainsi qu'au niveau du secteur public, et seront ainsi plus facilement accessibles. Les TIC apporteront l'infrastructure indispensable aux processus de production, aux processus économiques, aux communications et aux transactions. Elles contribueront également de manière fondamentale à relever les principaux défis de société et joueront un rôle de premier plan dans les phénomènes sociaux, tels que la constitution de groupes, les habitudes de consommation, la participation à la vie politique et la gestion des affaires publiques, par exemple au moyen des médias sociaux ainsi que des plateformes et des instruments de sensibilisation collective. Il est primordial de soutenir et d'intégrer la recherche dans une approche axée sur l'utilisateur afin d'élaborer des solutions compétitives.Le soutien de l'Union à la recherche et à l'innovation dans le secteur des TIC représente une bonne part des dépenses totales consacrées aux activités collaboratives de recherche et d'innovation qui présentent un niveau de risque moyen à élevé en Europe, et contribue dès lors de façon significative au développement des technologies et des applications de la prochaine génération. Un investissement public, à l'échelle de l'Union, dans la recherche et l'innovation liées aux TIC était et reste essentiel pour atteindre la masse critique qui permet de réaliser certaines percées et qui entraîne une plus grande acceptation et une meilleure utilisation des solutions, produits et services innovants. Un tel investissement reste indispensable au développement de plateformes et de technologies ouvertes utilisables dans toute l'Union, à l'expérimentation d'innovations et au lancement de projets pilotes en la matière dans des conditions véritablement européennes, ainsi qu'à l'optimisation des ressources lorsqu'il s'agit de renforcer la compétitivité de l'Union et de relever des défis de société communs. Le soutien de l'Union aux activités de recherche et d'innovation dans le domaine des TIC offre également aux PME de haute technologie la possibilité de croître et de tirer parti de la taille de marchés européens. Il renforce la collaboration et l'excellence parmi les scientifiques et les ingénieurs de l'Union, en consolidant les synergies avec les budgets nationaux et entre ces budgets et en servant de pivot à la collaboration avec les partenaires extra-européens.Les évaluations successives des activités relatives aux TIC du septième programme-cadre ont montré que les investissements ciblés réalisés au niveau de l'Union concernant les activités de recherche et d'innovation relatives aux TIC ont contribué à assurer la primauté industrielle de l'Union dans certains secteurs, tels que les communications mobiles et les systèmes TIC d'importance critique pour la sécurité, et à relever certains défis, dans des domaines tels que l'efficacité énergétique, la santé, la sécurité alimentaire, les transports ou l'évolution démographique. Les investissements de l'Union dans les infrastructures de recherche relatives aux TIC ont fourni aux chercheurs européens les meilleures infrastructures au monde pour le calcul et la constitution de réseaux à des fins de recherche.

Grandes lignes des activités

Plusieurs lignes d'activité, dont les lignes ci-dessous, se concentrent sur les défis liés à la primauté industrielle et technologique dans le domaine des TIC et couvrent des stratégies générales relatives à la recherche et à l'innovation dans ce domaine, notamment:(a) une nouvelle génération de composants et de systèmes: ingénierie de composants et de systèmes intégrés avancés et efficaces dans l'utilisation de l'énergie et des ressources; (b) le traitement informatique de la prochaine génération: systèmes et technologies avancés et sécurisés de traitement informatique, y compris l'informatique en nuage; (c) l'internet du futur: logiciels, matériel, infrastructures, technologies et services; (d) les technologies du contenu et gestion de l'information: les TIC au service des contenus numériques ainsi que des secteurs de la culture et de la création; (e) les interfaces avancées et robotique: robotique et espaces intelligents;(f) la microélectronique, nanoélectronique et photonique: technologies clés génériques liées à la microélectronique, à la nanoélectronique et à la photonique, y compris les technologies quantiques. Ces six grandes lignes d'activité devraient couvrir toute la gamme des besoins, en tenant compte de la compétitivité de l'industrie européenne à l'échelle mondiale. Ces besoins couvriraient la primauté industrielle dans le domaine des solutions, produits et services génériques fondés sur les TIC qui sont indispensables pour relever les grands défis de société, ainsi que les stratégies de recherche et d'innovation dans le domaine des TIC axées sur les applications qui seront soutenues conjointement avec le défi de société concerné. Compte tenu des progrès technologiques croissants dans tous les domaines de la vie, l'interaction entre les humains et les technologies sera importante à cet égard et fera partie de la recherche dans le domaine des TIC axée sur les applications dont il est question plus haut.Ces six grandes lignes d'activité englobent également les infrastructures de recherche spécifique sur les TIC, telles que les laboratoires vivants pour les expérimentations, et les infrastructures qui sous-tendent les technologies clés génériques et leur intégration dans des produits avancés et des systèmes intelligents et innovants, comme les équipements, les instruments, les services d'aide, les salles blanches et l'accès à des fonderies pour le prototypage.Horizon 2020 soutiendra la recherche et le développement dans le domaine des systèmes TIC, dans le plein respect des droits fondamentaux et libertés fondamentales des personnes physiques, et en particulier du droit à la protection de leur vie privée.";"";"H2020";"H2020-EU.2.1.";"";"";"2014-09-22 20:40:30";"664147" +"H2020-EU.2.1.1.";"es";"H2020-EU.2.1.1.";"";"";"LIDERAZGO INDUSTRIAL - Liderazgo en tecnologías industriales y de capacitación - Tecnologías de la información y la comunicación (TIC)";"Information and Communication Technologies";"

LIDERAZGO INDUSTRIAL - Liderazgo en tecnologías industriales y de capacitación - Tecnologías de la información y la comunicación (TIC)

Objetivo específico para las TIC

En consonancia con la iniciativa emblemática ""Agenda Digital para Europa"", el objetivo específico de la investigación e innovación (I+i) en materia de TIC es permitir a Europa respaldar, desarrollar y explotar las oportunidades que brinda el progreso de las TIC en beneficio de sus ciudadanos, empresas y comunidades científicas.Europa, que es la economía mundial de mayor tamaño y representa la mayor cuota del mercado mundial de las TIC, con más de 2,6 billones EUR en 2011, debe ambicionar legítimamente que sus empresas, administraciones públicas, centros de investigación y desarrollo y universidades lideren la evolución europea y mundial de las TIC, creen nuevas empresas e inviertan más en las innovaciones de las TIC.Para 2020, el sector de las TIC europeo debe suministrar al menos el equivalente de su cuota en el mercado mundial de las TIC, que en 2011 era de alrededor de un tercio. Europa debe también producir empresas innovadoras en TIC, de manera que un tercio de toda la inversión de las empresas en I+D sobre TIC en la Unión, cifrada en 2011 en más de 35 000 millones EUR al año, la realicen empresas creadas en los dos últimos decenios. Ello exigirá un considerable aumento de las inversiones públicas en I+D sobre TIC, a fin de suscitar la inversión privada, con el objetivo de ampliar las inversiones en la próxima década, y contar con un número significativamente más elevado de agrupaciones y polos europeos de excelencia mundial en TIC.Para dominar una tecnología y unas cadenas empresariales cada vez más complejas y multidisciplinarias en las TIC, son necesarios la asociación, el reparto de riesgos y la movilización de una masa crítica en toda la Unión. La acción a nivel de la Unión debe ayudar a la industria a construir una perspectiva de mercado único y conseguir economías de escala y de alcance. La colaboración en torno a plataformas tecnológicas comunes y abiertas tendrá efectos derivados y multiplicadores que permitirán a una amplia gama de partes interesadas beneficiarse de los nuevos avances y crear innovaciones adicionales. La asociación a escala de la Unión también permite crear consenso, establece un punto focal visible para los socios internacionales y apoyará el desarrollo de normas y soluciones interoperables en la Unión y en el mundo.

Justificación y valor añadido de la Unión

Las TIC apuntalan la innovación y la competitividad en una gama amplia de mercados y sectores públicos y privados y hacen posible el progreso científico en todas las disciplinas. A lo largo de la próxima década, el impacto transformador de las tecnologías digitales, los componentes, las infraestructuras y los servicios de TIC será cada vez más apreciable en todos los ámbitos de la vida. Los recursos de computación, comunicación y almacenamiento de datos seguirán extendiéndose en los próximos años. Los sensores, máquinas y productos potenciados por la información generarán grandes cantidades de información y datos, inclusive en tiempo real, convirtiendo la acción a distancia en algo habitual, permitiendo un despliegue mundial de procesos empresariales y centros de producción sostenibles y posibilitando la creación de una amplia gama de servicios y aplicaciones.Muchos servicios críticos, comerciales y públicos, y todos los procesos clave de la producción de conocimientos en la ciencia, el aprendizaje, la empresa y el sector cultural y creativo, así como el sector público, se prestarán a través de las TIC, por lo que serán más accesibles. Las TIC proporcionarán la infraestructura crítica para los procesos de producción y empresariales, la comunicación y las transacciones. Las TIC serán también indispensables por su aportación a los principales retos de la sociedad, así como a procesos de la sociedad tales como la formación de comunidades, el comportamiento de los consumidores, la participación política y la gobernanza pública, por ejemplo a través de los medios de comunicación social y las plataformas y los instrumentos de sensibilización colectiva. Es esencial apoyar e integrar la investigación que adopta una perspectiva basada en el usuario con el fin de encontrar soluciones competitivas.El apoyo de la Unión a la investigación e innovación en TIC aporta una contribución importante al desarrollo de la próxima generación de tecnologías y aplicaciones, pues representa una gran parte del gasto total en I+i en colaboración, de riesgo medio a alto, en Europa. La inversión pública en investigación e innovación sobre las TIC a nivel de la Unión ha sido y sigue siendo esencial para movilizar la masa crítica que puede conducir a avances fundamentales y a una mayor aceptación y un mejor uso de soluciones, productos y servicios innovadores. Continúa desempeñando un papel esencial en el desarrollo de plataformas y tecnologías abiertas aplicables en toda la Unión, en la puesta a prueba y los ensayos piloto de las innovaciones en contextos paneuropeos reales y en la optimización de los recursos a la hora de abordar la competitividad de la Unión y afrontar los retos de la sociedad comunes. El apoyo de la Unión a la investigación e innovación en materia de TIC está haciendo también posible que las PYME de alta tecnología crezcan y aprovechen la envergadura de los mercados a escala de la Unión. Está reforzando la colaboración y la excelencia entre los científicos e ingenieros de la Unión, fortaleciendo las sinergias con y entre los presupuestos nacionales y actuando como punto focal para la colaboración con socios de fuera de Europa.Las sucesivas evaluaciones de las actividades de TIC del Séptimo Programa Marco han puesto de manifiesto que la inversión en investigación e innovación focalizada en las TIC realizada a nivel de la Unión ha sido fundamental para crear un liderazgo industrial en ámbitos como las comunicaciones móviles y los sistemas de TIC críticos para la seguridad, así como para abordar retos como la eficiencia energética, la sanidad, la seguridad alimentaria, el transporte o el cambio demográfico. Las inversiones de la Unión en infraestructuras de investigación sobre TIC han equipado a los investigadores europeos con las mejores instalaciones del mundo de ordenadores y redes para la investigación.

Líneas generales de las actividades

Varias líneas de actividad abordarán los retos que tiene planteados el liderazgo industrial y tecnológico en las TIC y cubrirán las agendas de investigación e innovación sobre TIC genérica, incluyendo en particular:(a) una nueva generación de componentes y sistemas: ingeniería de componentes y sistemas incorporados avanzados y eficaces en recursos y energía; (b) informática de la próxima generación: sistemas y tecnologías de computación avanzada y segura, incluida la informática en la nube; (c) Internet del futuro: software, hardware, infraestructuras, tecnologías y servicios; (d) tecnologías de los contenidos y gestión de la información: TIC para los contenidos digitales, las industrias de la cultura y la creatividad; (e) interfaces avanzadas y robots: robótica y espacios inteligentes; (f) microelectrónica, nanoelectrónica y fotónica: tecnologías de capacitación esenciales relacionadas con la microelectrónica, la nanoelectrónica y la fotónica y que abarquen asimismo las tecnologías cuánticas. Se espera que estas seis grandes líneas de actividad cubran toda la gama de necesidades, teniendo en cuenta la competitividad de la industria europea a escala mundial. Incluirían el liderazgo industrial en las soluciones, productos y servicios genéricos basados en las TIC necesarios para afrontar los principales retos de la sociedad, así como la aplicación de las agendas de investigación e innovación en materia de TIC impulsadas por las aplicaciones que recibirán apoyo junto con el correspondiente reto de la sociedad. Ante el avance cada vez mayor de la tecnología en todos los ámbitos de la vida, la interacción entre personas y tecnología cumplirá un papel importante, y formará parte de la antes citada investigación de TIC impulsada por las aplicaciones.Estas seis líneas de actividad incluirán también infraestructuras específicas de investigación sobre TIC como los laboratorios vivientes para la experimentación y las infraestructuras para las tecnologías de capacitación esenciales subyacentes y su integración en productos avanzados y sistemas inteligentes innovadores, incluidos equipos, herramientas, servicios de apoyo, salas limpias y acceso a fundiciones para creación de prototipos.Horizonte 2020 apoyará la investigación y el desarrollo de sistemas TIC respetando plenamente los derechos y libertades fundamentales de las personas físicas y en particular su derecho a la intimidad.";"";"H2020";"H2020-EU.2.1.";"";"";"2014-09-22 20:40:30";"664147" +"H2020-EU.2.1.1.";"de";"H2020-EU.2.1.1.";"";"";"FÜHRENDE ROLLE DER INDUSTRIE - Führende Rolle bei grundlegenden und industriellen Technologien - Informations- und Kommunikationstechnologien (IKT) ";"Information and Communication Technologies";"

FÜHRENDE ROLLE DER INDUSTRIE - Führende Rolle bei grundlegenden und industriellen Technologien - Informations- und Kommunikationstechnologien (IKT)

Einzelziel für IKT

Entsprechend der Leitinitiative ""Digitale Agenda für Europa"" besteht das Einzelziel der IKT-Forschung und -Innovation (FuI) in der Befähigung Europas, die Möglichkeiten aus dem IKT-Fortschritt zum Nutzen von Bürgern, Unternehmen und der Wissenschaft zu unterstützen, weiterzuentwickeln und auszuschöpfen.Als größter Wirtschaftsraum der Welt, der den größten Anteil am IKT-Weltmarkt darstellt, dessen Volumen im Jahr 2011 2 600 Billionen EUR (2 600 000 000 000 EUR) überstiegt, sollte Europa einen berechtigen Ehrgeiz hegen, dass seine Unternehmen, Regierungen, Forschungs- und Entwicklungszentren und Hochschulen europa- und weltweit eine Führungsrolle im Bereich der IKT übernehmen, mehr in IKT-Innovationen investieren und neue Geschäftsfelder erschließen.Bis 2020 sollte Europas IKT-Sektor mindestens so viel produzieren wie dies seinem Anteil am IKT-Weltmarkt entspricht, der im Jahr 2011 bei etwa einem Drittel lag. Europa sollte auch dafür sorgen, dass innovative IKT-Unternehmen expandieren, so dass ein Drittel aller Unternehmensinvestitionen in Forschung und Entwicklung von IKT in der Union, im Jahr 2011 bei über 35 Mrd. EUR pro Jahr lagen, von Unternehmen vorgenommen werden, die in den letzten beiden Jahrzehnten gegründet wurden. Dies würde bedeuten, dass die öffentlichen Investitionen in Forschung und Entwicklung von IKT in einer Art und Weise erhöht werden müssten, die private Gelder mobilisiert, um das Ziel einer Erhöhung der Investitionen in den nächsten zehn Jahren zu erreichen und um die Zahl der europäischen IKT-Exzellenzzentren und -cluster von Weltrang signifikant zu steigern.Um zunehmend komplexe und multidisziplinäre Technologien und Geschäftsabläufe bei IKT zu beherrschen, werden unionsweit Partnerschaften, Risikoteilung und die Mobilisierung einer kritischen Masse benötigt. Unionsmaßnahmen sollten der Wirtschaft helfen, durch die Binnenmarktperspektive Einsparungen aufgrund von Skalen- und Verbundeffekten zu erzielen. Die Zusammenarbeit im Rahmen gemeinsamer, offener Technologieplattformen mit Spillover- und Hebeleffekten wird es unterschiedlichsten Akteuren ermöglichen, neue Entwicklungen zu nutzen und weitere Innovationen zu schaffen. Partnerschaften auf Unionsebene erleichtern auch die Konsensbildung, stellen einen sichtbaren Dreh- und Angelpunkt für internationale Partner dar und werden die Entwicklung von Normen sowie von Interoperabilitätslösungen in der Union und weltweit unterstützen.

Begründung und Mehrwert für die Union

Informations- und Kommunikationstechnologien untermauern Innovation und Wettbewerbsfähigkeit in einem breiten Spektrum privater und öffentlicher Märkte und Sektoren und ermöglichen wissenschaftliche Fortschritte in allen Fachbereichen. In den nächsten Jahrzehnten werden die transformativen Auswirkungen der digitalen Technologien und IKT-Komponenten, Infrastrukturen und Dienstleistungen in allen Lebensbereichen noch deutlicher zutage treten. Rechner- und Kommunikationsleistungen sowie Datenspeicherkapazitäten werden sich im Laufe der nächsten Jahre weiter verbreiten. Sensoren, Maschinen und rechnergestützte Produkte werden riesige Mengen von Informationen und Daten, auch in Echtzeit, generieren, so dass die Fernsteuerung selbstverständlich wird und Unternehmensprozesse und nachhaltige Produktionsstandorte an jedem Ort der Welt realisiert werden können, was die Schaffung eines breiten Spektrums an Dienstleistungen und Anwendungen ermöglicht.Viele kritische, kommerzielle und öffentliche Dienstleistungen sowie sämtliche Schlüsselprozesse der Wissensgenerierung in Wissenschaft, Bildung, Wirtschaft, Kultur- und Kreativbranche sowie im öffentlichen Sektor werden mit Hilfe von IKT ermöglicht und somit zugänglicher gemacht. IKT bieten die kritische Infrastruktur für Produktion, Unternehmensprozesse, Kommunikation und Transaktionen. IKT leisten aber auch einen unverzichtbaren Beitrag zur Bewältigung zentraler gesellschaftlicher Herausforderungen und – beispielsweise mit Hilfe sozialer Medien sowie Plattformen und Instrumenten des kollektiven Bewusstseins – zu gesellschaftlichen Prozessen, wie die Bildung von Gemeinschaften, Verbraucherverhalten, politische Partizipation und Governance des öffentlichen Sektors. Zur Entwicklung wettbewerbsfähiger Lösungen muss eine Forschung unterstützt und integriert werden, bei der der Nutzer im Mittelpunkt steht.Die Unterstützung der Union für Forschung und Innovation im Bereich der IKT leistet einen bedeutsamen Beitrag zur Entwicklung der Technologien und Anwendungen der nächsten Generation, da sie einen Großteil der Gesamtausgaben für die mäßig bis hochriskante Verbundforschung und Innovation in Europa ausmacht. Öffentliche Investitionen in die IKT-Forschung und -Innovation auf Unionsebene sind nach wie vor für die Mobilisierung der kritischen Masse unerlässlich, die zu bahnbrechenden Erfolgen und zu einer breiteren Umsetzung und Nutzung der innovativen Lösungen, Produkte und Dienstleistungen führt. Die Unterstützung wird auch in Zukunft eine zentrale Rolle bei der Entwicklung offener Plattformen und Technologien spielen, die unionsweit anwendbar sind, bei Tests und innovativen Pilotprojekten unter realen europaweiten Bedingungen und bei der Optimierung des Ressourceneinsatzes zur Stärkung der Wettbewerbsfähigkeit der Union und zur Bewältigung gemeinsamer gesellschaftlicher Herausforderungen. Mit der Unionsförderung von IKT-Forschung und Innovation werden auch Hightech-KMU in die Lage versetzt, zu expandieren und sich die Größe des Unionsmarktes zunutze zu machen. Sie stärkt die Zusammenarbeit und Exzellenz unter den Wissenschaftlern der Union und Ingenieuren, untermauert Synergien mit und zwischen nationalen Haushalten und ist Dreh- und Angelpunkt für die Zusammenarbeit mit Partnern außerhalb Europas.Aufeinander folgende Bewertungen der IKT-Tätigkeiten im Siebten Rahmenprogrammen haben gezeigt, dass gezielte Investitionen in die IKT-Forschung und -Innovation auf Unionsebene eine wesentliche Voraussetzung für den Aufbau der industriellen Führung in Bereichen wie der mobilen Kommunikation und sicherheitskritischen IKT-Systeme und für die Bewältigung von Herausforderungen wie etwa Energieeffizienz, Gesundheit, Lebensmittelsicherheit, Verkehr oder demografischer Wandel sind. Investitionen der Union in IKT-Forschungsinfrastrukturen haben dafür gesorgt, dass europäischen Forschern die weltweit besten Forschungsnetze und Rechnereinrichtungen zur Verfügung stehen.

Einzelziele und Tätigkeiten in Grundzügen

Einige Tätigkeitsbereiche werden auf Herausforderungen für die industrielle und technologische Führung bei den Informations- und Kommunikationstechnologien ausgerichtet sein und sich auf generische IKT-Forschungs- und -Innovationsagenden erstrecken, wie beispielsweise Folgende:a) Eine neue Generation von Komponenten und Systemen: Entwicklung fortgeschrittener, eingebetteter sowie energieeffizienter und ressourcenschonender Komponenten und Systeme; b) Rechner der nächsten Generation: fortgeschrittene und sichere Rechnersysteme und -technologien, einschließlich Cloud Computing; c) Internet der Zukunft: Software, Hardware, Infrastrukturen, Technologien und Dienstleistungen; d) Inhaltstechnologien und Informationsmanagement: IKT für digitale Inhalte und für Kultur- und Kreativwirtschaft; e) fortgeschrittene Schnittstellen und Roboter: Robotik und intelligente Räume; f) Mikro- und Nanoelektronik und Photonik: Schlüsseltechnologien für die Mikro- und Nanoelektronik und Photonik, einschließlich Quantentechnologien. Unter dem Blickwinkel der weltweiten Wettbewerbsfähigkeit der europäischen Wirtschaft wird davon ausgegangen, dass diese sechs übergeordneten Tätigkeitsbereiche den gesamten Bedarf decken. Sie beinhalten die industrielle Führung bei generischen IKT-gestützten Lösungen, Produkten und Dienstleistungen, die für die Bewältigung der großen gesellschaftlichen Herausforderungen benötigt werden, sowie anwendungsorientierte IKT-Forschungs- und -Innovationsagenden, die im Rahmen der jeweiligen gesellschaftlichen Herausforderung unterstützt werden. In Anbetracht des zunehmenden Vorrückens der Technik in alle Lebensbereiche wird die Interaktion zwischen Mensch und Technik diesbezüglich von Bedeutung sein und in der anwendungsorientierten IKT-Forschung ihren Platz haben.Jeder der sechs Tätigkeitsbereiche umfasst auch IKT-spezifische Forschungsinfrastrukturen wie beispielsweise Living Labs für Experimente und Infrastrukturen für die entsprechenden Schlüsseltechnologien und deren Integration in fortgeschrittene Produkte und innovative intelligente Systeme, wie beispielsweise Geräte, Werkzeuge, Unterstützungsdienste, Reinräume und Zugang zu Gießereien für die Herstellung von Prototypen.Horizont 2020 wird die Erforschung und Entwicklung von IKT-Systemen unter uneingeschränkter Achtung der Grundrechte und Grundfreiheiten der natürlichen Personen und insbesondere ihrem Recht auf Privatsphäre unterstützen.";"";"H2020";"H2020-EU.2.1.";"";"";"2014-09-22 20:40:30";"664147" +"H2020-EU.2.1.1.";"en";"H2020-EU.2.1.1.";"";"";"INDUSTRIAL LEADERSHIP - Leadership in enabling and industrial technologies - Information and Communication Technologies (ICT)";"Information and Communication Technologies";"

INDUSTRIAL LEADERSHIP - Leadership in enabling and industrial technologies - Information and Communication Technologies (ICT)

Specific objective for ICT

In line with the flagship initiative 'Digital Agenda for Europe' (4), the specific objective of ICT research and innovation (R&I) is to enable Europe to support, develop and exploit the opportunities brought by ICT progress for the benefits of its citizens, businesses and scientific communities.As the world's largest economy and representing the largest share of the world's ICT market, worth more than EUR 2 600 billion (EUR 2 600 000 000 000) in 2011, Europe should have legitimate ambitions for its businesses, governments, research and development centres and universities to lead European and global developments in ICT, to grow new business, and to invest more in ICT innovations.By 2020, Europe's ICT sector should supply at least the equivalent of its share of the global ICT market, which was about one third in 2011. Europe should also grow innovative businesses in ICT so that one third of all business investment in ICT R&D in the Union, which amounted to more than EUR 35 billion per year in 2011, is made by companies created within the last two decades. This would require an increase in public investments in ICT R&D in ways that leverage private spending, towards the goal of amplifying investments in the next decade, and significantly more European poles and clusters of world-class excellence in ICT.To master increasingly complex and multidisciplinary technology and business chains in ICT, partnering, risk-sharing and mobilisation of critical mass across the Union are needed. Union level action should help industry address a single market perspective and achieve economies of scale and scope. Collaboration around common, open technology platforms with spill-over and leverage effects will allow a wide range of stakeholders to benefit from new developments and create further innovations. Partnering at Union level also enables consensus building, establishes a visible focal point for international partners, and will support the development of standards and interoperable solutions both in the Union and worldwide.

Rationale and Union added value

ICT underpins innovation and competitiveness across a broad range of private and public markets and sectors, and enables scientific progress in all disciplines. Over the next decade, the transformative impact of digital technologies and ICT components, infrastructures and services will be increasingly visible in all areas of life. Computing, communication and data storage resources will continue to spread over the coming years. Vast amounts of information and data, including real-time, will be generated by sensors, machines and information-enhanced products, making action at a distance commonplace, enabling global deployment of business processes and sustainable production sites allowing the creation of a wide range of services and applications.Many critical commercial and public services and all key processes of knowledge production in science, learning, business and the culture and creative sector as well as the public sector will be provided, and thus made more accessible, through ICT. ICT will provide the critical infrastructure for production and business processes, communication and transactions. ICT will also be indispensable in contributing to key societal challenges, as well as to societal processes such as community formation, consumer behaviour, political participation and public governance, for example by means of social media and collective-awareness platforms and tools. It is crucial to support and integrate research which takes a user-centred perspective in order to develop competitive solutions.The Union support to ICT research and innovation makes a significant contribution to the development of the next generation technologies and applications as it makes up a large part of total spending on collaborative, mid-to-high risk R&I in Europe. Public investment in ICT research and innovation at Union level has been and remains essential to mobilise the critical mass leading to breakthroughs and to a wider uptake and better use of innovative solutions, products and services. It continues to play a central role in developing open platforms and technologies applicable across the Union, in testing and piloting innovations in real pan-European settings and in optimising resources when addressing Union competitiveness and tackling common societal challenges. Union support to ICT research and innovation is also enabling hi-tech SMEs to grow and capitalise on the size of Union-wide markets. It is strengthening collaboration and excellence amongst Union scientists and engineers, reinforcing synergies with and between national budgets, and acting as a focal point for collaboration with partners outside Europe.Successive evaluations of ICT activities in the Seventh Framework Programme have shown that focused ICT research and innovation investment undertaken at Union level has been instrumental in building industrial leadership in areas like mobile communications and safety-critical ICT systems, and to address challenges like energy-efficiency, health, food security, transport or demographic change. Union investments in ICT research infrastructures have provided European researchers with the world's best research networking and computing facilities.

Broad lines of the activities

A number of activity lines shall target ICT industrial and technological leadership challenges and cover generic ICT research and innovation agendas, including notably:(a) A new generation of components and systems: engineering of advanced, embedded and energy- and resource-efficient components and systems(b) Next generation computing: advanced and secure computing systems and technologies, including cloud computing(c) Future Internet: software, hardware, infrastructures, technologies and services(d) Content technologies and information management: ICT for digital content and for cultural and creative industries(e) Advanced interfaces and robots: robotics and smart spaces(f) Micro- and nanoelectronics and photonics: key enabling technologies related to micro- and nanoelectronics and to photonics covering also quantum technologies.These six major activity lines are expected to cover the full range of needs, taking into account the competitiveness of European industry on a global scale. These would include industrial leadership in generic ICT-based solutions, products and services needed to tackle major societal challenges as well as application-driven ICT research and innovation agendas which will be supported together with the relevant societal challenge. In view of the ever increasing advancement of technology in all areas of life, the interaction between humans and technology will be important in this respect, and part of the application-driven ICT research mentioned above.These six activity lines shall also include ICT specific research infrastructures such as living labs for experimentation, and infrastructures for underlying key enabling technologies and their integration in advanced products and innovative smart systems, including equipment, tools, support services, clean rooms and access to foundries for prototyping.Horizon 2020 will support research and development of ICT systems in full respect of the fundamental rights and freedoms of natural persons and in particular their right to privacy.";"";"H2020";"H2020-EU.2.1.";"";"";"2014-09-22 20:40:30";"664147" +"H2020-EU.2.1.1.";"pl";"H2020-EU.2.1.1.";"";"";"WIODĄCA POZYCJA W PRZEMYŚLE - Wiodąca pozycja w zakresie technologii prorozwojowych i przemysłowych - Technologie informacyjno-komunikacyjne (ICT)";"Information and Communication Technologies";"

WIODĄCA POZYCJA W PRZEMYŚLE - Wiodąca pozycja w zakresie technologii prorozwojowych i przemysłowych - Technologie informacyjno-komunikacyjne (ICT)

Cel szczegółowy w dziedzinie ICT

Zgodnie z inicjatywą przewodnią „Europejską agendą cyfrową” (4) celem szczegółowym badań naukowych i innowacji w dziedzinie ICT jest umożliwienie Europie wspierania, rozwijania i wykorzystywania możliwości związanych z postępem w tej dziedzinie z korzyścią dla obywateli, przedsiębiorstw i społeczności naukowych.Jako największa gospodarka świata, posiadająca zarazem największy udział w światowym rynku ICT, którego wartość wynosi ponad 2 600 000 000 000 EUR w 2011 r., Europa powinna móc w uzasadniony sposób oczekiwać, że jej przedsiębiorstwa, rządy, ośrodki badawczo-rozwojowe i uniwersytety będą europejskimi i światowymi liderami rozwoju w dziedzinie ICT, rozszerzającymi działalność biznesową w tej dziedzinie i więcej inwestującymi w związane z nią innowacje.Do 2020 r. europejski sektor ICT powinien przynosić korzyści co najmniej równoważne jego udziałowi w globalnym rynku ICT (wskaźnik ten stanowił jedną trzecią w 2011 r.). Europa powinna również rozwijać innowacyjne przedsiębiorstwa w dziedzinie ICT, tak aby jedna trzecia wszystkich inwestycji przedsiębiorstw w badania naukowe i rozwój w tej dziedzinie w Unii, wynosząca w 2011 r. ponad 35 mld EUR rocznie, była dokonywana przez firmy utworzone w ciągu ostatnich dwóch dziesięcioleci. Wymagałoby to zwiększenia publicznych inwestycji w badania naukowe i rozwój w dziedzinie ICT, w sposób uruchamiający prywatne wydatkowanie, w celu poszerzenia inwestycji w następnym dziesięcioleciu i znacznego zwiększenia liczby światowej klasy europejskich ośrodków i klastrów doskonałości w tej dziedzinie.Opanowanie coraz bardziej skomplikowanych i multidyscyplinarnych łańcuchów technologicznych i biznesowych ICT wymaga partnerstwa, podziału ryzyka i wytworzenia masy krytycznej w całej Unii. Działanie na poziomie Unii powinno ułatwić przemysłowi funkcjonowanie w perspektywie jednolitego rynku oraz osiągnięcie korzyści skali i zakresu. Współpraca skupiona na wspólnych, otwartych platformach technologicznych, zapewniająca efekty zewnętrzne i efekt dźwigni, umożliwi wielu zainteresowanym stronom czerpanie korzyści z nowych osiągnięć i tworzenie dalszych innowacji. Dzięki partnerstwu na poziomie Unii możliwe jest także budowanie konsensusu, stworzenie widocznego punktu centralnego dla międzynarodowych partnerów oraz wspieranie powstawania norm i rozwiązań interoperacyjnych zarówno w Unii jak i na poziomie światowym.

Uzasadnienie i unijna wartość dodana

ICT stanowią podstawę innowacji i konkurencyjności w szerokim wachlarzu prywatnych i publicznych rynków i sektorów oraz umożliwiają postęp naukowy we wszystkich dziedzinach. W ciągu następnego dziesięciolecia prowadzące do przeobrażeń oddziaływanie technologii cyfrowych oraz technologii wchodzących w zakres ICT, infrastruktury i usług będzie coraz bardziej widoczne we wszystkich dziedzinach życia. W nadchodzących latach dojdzie do dalszego upowszechnienia zasobów obliczeniowych i łącznościowych oraz możliwości przechowywania danych. Duże ilości informacji i danych, w tym w czasie rzeczywistym, będą pochodzić z czujników, maszyn i produktów wykorzystujących technologie informatyczne, dzięki czemu powszechnie dostępna będzie możliwość działania na odległość, co pozwoli na globalne wdrożenie procesów biznesowych i zrównoważonej produkcji, co umożliwi tworzenie szerokiej gamy usług i aplikacji.Wiele usług komercyjnych i publicznych o podstawowym znaczeniu oraz wszystkie kluczowe procesy pozyskiwania wiedzy w sektorach nauki, nauczania, przedsiębiorczości, w kulturze i sektorze kreatywnym, a także w sektorze publicznym będą obsługiwane przez ICT, co uczyni je bardziej dostępnymi. Technologie te zapewnią podstawową infrastrukturę dla procesów produkcyjnych i biznesowych, łączności i transakcji. Będą również niezbędne w działaniach zmierzających do sprostania głównym wyzwaniom społecznym, a także w przypadku procesów społecznych, takich jak tworzenie się społeczności, zachowanie konsumentów, udział w życiu politycznym i publiczne zarządzanie, np. poprzez media społecznościowe oraz platformy i narzędzia zbiorowej świadomości. W celu rozwijania konkurencyjnych rozwiązań niezbędne jest wspieranie badań naukowych i integrowanie ich wokół perspektywy zorientowanej na użytkownika.Wsparcie Unii dla badań naukowych i innowacji w dziedzinie ICT stanowi istotny wkład w rozwój nowej generacji technologii i zastosowań, gdyż stanowi ono znaczną część łącznych wydatków na europejską współpracę w zakresie obciążonych średnim i wysokim ryzykiem działań badawczych i innowacyjnych. Publiczne inwestycje w badania naukowe i innowacje w dziedzinie ICT na szczeblu Unii miały i nadal mają zasadnicze znaczenie dla wytworzenia masy krytycznej prowadzącej do przełomowych osiągnięć oraz do szerszej absorpcji i lepszego wykorzystania innowacyjnych rozwiązań, produktów i usług. Nadal odgrywają one podstawową rolę w rozwijaniu otwartych platform i technologii znajdujących zastosowanie w całej Unii, badań i projektów pilotażowych dotyczących innowacji w rzeczywistym ogólnoeuropejskim kontekście, a także optymalizacji zasobów w odniesieniu do konkurencyjności Unii i wspólnych wyzwań społecznych. Wsparcie Unii dla badań naukowych i innowacji w tej dziedzinie umożliwia także MŚP działającym w obszarze technologii zaawansowanych rozwijanie się i czerpanie korzyści z wielkości ogólnounijnych rynków. Wzmacnia ono współpracę i doskonałość wśród naukowców i inżynierów w Unii, zwiększając synergię z budżetami państw i między nimi oraz pełniąc funkcję centralnego punktu współpracy z partnerami spoza Europy.Kolejne oceny działań w zakresie ICT prowadzonych w związku z siódmym programem ramowym wykazały, że inwestycje ukierunkowane na badania naukowe i innowacje w tej dziedzinie poczynione na poziomie Unii przyczyniły się do osiągnięcia przez nią wiodącej pozycji w przemyśle w takich obszarach, jak łączność ruchoma i systemy ICT o istotnym znaczeniu dla bezpieczeństwa, oraz do sprostania takim wyzwaniom jak efektywność energetyczna, zdrowie, bezpieczeństwo żywnościowe, transport czy zmiany demograficzne. Inwestycje Unii w infrastrukturę badawczą w dziedzinie ICT zapewniły europejskim naukowcom najlepsze na świecie systemy sieci badawczych i obliczeniowe.

Ogólne kierunki działań

Wiele typów działań jest ukierunkowanych na wyzwania związane z wiodącą pozycją przemysłową i technologiczną w dziedzinie ICT oraz obejmuje ogólne agendy działań w zakresie badań naukowych i innowacji, w tym dotyczące zwłaszcza:(a) Nowej generacji części i systemów: inżynieria w zakresie zaawansowanych, wbudowanych oraz efektywnych energetycznie i zasobooszczędnych części i systemów; (b) Technologii obliczeniowych nowej generacji: zaawansowane i bezpieczne systemy i technologie obliczeniowe, w tym chmura obliczeniowa; (c) Internetu przyszłości: programowanie, urządzenia, infrastruktura, technologie i usługi; (d) Technologii cyfrowych i zarządzania informacjami: ICT dla treści cyfrowych, oraz dla sektora kultury i kreatywności; (e) Zaawansowanych interfejsów i robotów: robotyka i przestrzenie inteligentne; (f) Technologii mikro- i nanoelektronicznych oraz fotonicznych: kluczowe technologie prorozwojowe w zakresie technologii mikro- i nanoelektronicznych oraz fotonicznych obejmujące także technologie kwantowe. Oczekuje się, że tych sześć głównych kierunków działania obejmie pełny zakres potrzeb, z uwzględnieniem konkurencyjności przemysłu europejskiego w skali globalnej. Należałaby do nich wiodąca pozycja w przemyśle w zakresie generycznych rozwiązań, produktów i usług opartych na ICT, potrzebnych do sprostania głównym wyzwaniom społecznym oraz agendy zorientowanych na zastosowania badań naukowych i innowacji w dziedzinie ICT, wspierane w związku z odpowiednim wyzwaniem społecznym. Zważywszy na coraz powszechniejsze postępy techniki we wszystkich dziedzinach życia, interakcja między ludźmi a techniką będzie w tym względzie ważna i będzie częścią wspomnianych wyżej, zorientowanych na zastosowania, badań naukowych w dziedzinie ICT.Każdy z tych sześciu kierunków działania obejmuje również infrastrukturę badawczą ICT, taką jak żywe laboratoria do eksperymentów, oraz infrastrukturę dla bazowych kluczowych technologii prorozwojowych oraz ich wykorzystanie w zaawansowanych produktach i innowacyjnych inteligentnych systemach, w tym w urządzeniach, narzędziach, usługach wsparcia, pomieszczeniach czystych i dostępie do odlewni do celów przygotowania prototypów.Wsparcie badań naukowych i rozwoju systemów ICT w ramach programu „Horyzont 2020” będzie odbywać się z poszanowaniem podstawowych praw i wolności osób fizycznych, a zwłaszcza ich prawa do prywatności.";"";"H2020";"H2020-EU.2.1.";"";"";"2014-09-22 20:40:30";"664147" +"H2020-EU.2.1.1.";"it";"H2020-EU.2.1.1.";"";"";"LEADERSHIP INDUSTRIALE - Leadership nel settore delle tecnologie abilitanti e industriali - Tecnologie dell'informazione e della comunicazione (TIC)";"Information and Communication Technologies";"

LEADERSHIP INDUSTRIALE - Leadership nel settore delle tecnologie abilitanti e industriali - Tecnologie dell'informazione e della comunicazione (TIC)

Obiettivo specifico delle TIC

In linea con l'iniziativa faro ""Un'agenda digitale europea"", l'obiettivo specifico della ricerca e dell'innovazione (R&I) nell'ambito delle TIC è consentire all'Europa di sostenere, sviluppare e valorizzare le opportunità offerte dai progressi compiuti nel settore delle TIC a vantaggio dei cittadini, delle imprese e delle comunità scientifiche.In quanto economia più grande del mondo che rappresenta la più ampia quota di mercato mondiale delle TIC, di un valore superiore a 2 600 miliardi di EUR (EUR 2 600 000 000 000) nel 2011, l'Europa dovrebbe legittimamente pretendere che imprese, governi, centri di ricerca e sviluppo e università dirigano gli sviluppi delle TIC a livello europeo e globale, creino nuove attività commerciali e investano maggiormente nelle innovazioni relative alle TIC.Entro il 2020, il settore delle TIC in Europa dovrebbe fornire almeno l'equivalente della sua quota di mercato mondiale in materia di TIC, che era pari a circa un terzo nel 2011. È necessario che in Europa aumentino le imprese innovative nel settore delle TIC in modo che un terzo di tutti gli investimenti delle imprese in R&S sulle TIC nell'Unione, che ammontava a più di 35 miliardi di EUR l'anno nel 2011, sia effettuato da società costituite negli ultimi due decenni. A tal fine è necessario un aumento degli investimenti pubblici in R&S sulle TIC in modo da stimolare la spesa privata, avendo per obiettivo il potenziamento degli investimenti nei prossimi dieci anni, disponendo di un numero notevolmente superiore di poli e raggruppamenti europei di eccellenza a livello mondiale in materia di TIC.Per gestire una tecnologia e catene commerciali sempre più complesse e interdisciplinari nel settore delle TIC, è necessario concludere partenariati, ripartire i rischi e mobilitare una massa critica in tutta l'Unione. L'azione a livello unionale dovrebbe aiutare l'industria a porsi in una prospettiva di mercato interno e a realizzare economie di scala e di scopo. La collaborazione intorno a piattaforme tecnologiche aperte comuni con effetti di ricaduta e di stimolo consentirà a un'ampia gamma di parti interessate di beneficiare dei nuovi sviluppi e di creare ulteriori innovazioni. La conclusione di partenariati a livello unionale consente inoltre la formazione del consenso, crea un punto focale visibile per i partner internazionali e favorirà lo sviluppo di norme e soluzioni interoperabili a livello unionale e mondiale.

Motivazione e valore aggiunto dell'Unione

Le TIC sostengono l'innovazione e la competitività attraverso un'ampia gamma di mercati e di settori pubblici e privati, e consentono progressi scientifici in tutte le discipline. Nel prossimo decennio l'impatto trasformativo delle tecnologie digitali e dei componenti delle TIC, delle infrastrutture e dei servizi relativi sarà sempre più visibile in tutti i settori della vita. Le risorse di elaborazione, comunicazione e conservazione di dati continueranno a diffondersi nei prossimi anni. Sensori, macchine e prodotti informatici produrranno grandi quantità di informazioni e dati, anche in tempo reale, rendendo l'azione a distanza un fatto comune, consentendo una diffusione globale dei processi aziendali e dei siti di produzione sostenibili, rendendo possibile la creazione di un'ampia gamma di servizi e applicazioni.Molti servizi pubblici e commerciali cruciali e tutti i fondamentali processi di produzione di conoscenza nelle scienze, nell'apprendimento, nelle imprese, nel settore culturale e creativo e nel settore pubblico saranno forniti, e in tal modo resi maggiormente accessibili, per mezzo delle TIC. Le TIC forniranno le infrastrutture critiche necessarie alla produzione e ai processi, alla comunicazione e alle transazioni commerciali. Le TIC saranno inoltre indispensabili per contribuire alle sfide per la società fondamentali e ai processi sociali quali la formazione di comunità, il comportamento dei consumatori, la partecipazione politica e la governance pubblica, ad esempio attraverso i media sociali e le piattaforme e gli strumenti di sensibilizzazione collettiva. È indispensabile sostenere e integrare la ricerca che adotta un'ottica incentrata sul consumatore al fine di sviluppare soluzioni competitive.Il sostegno dell'Unione alla ricerca e all'innovazione nelle TIC contribuisce in modo significativo allo sviluppo della prossima generazione di tecnologie e di applicazioni in quanto rappresenta una parte notevole della spesa totale per la ricerca e innovazione collaborative a rischio medio-alto in Europa. Gli investimenti pubblici nella ricerca e nell'innovazione sulle TIC a livello unionale sono e restano essenziali per mobilitare la massa critica suscettibile di generare progressi e un'adozione più ampia nonché un migliore utilizzo di soluzioni, prodotti e servizi innovativi. Esse continuano a svolgere un ruolo centrale nello sviluppo di piattaforme aperte e di tecnologie applicabili in tutta l'Unione, nella sperimentazione e nel pilotaggio delle innovazioni in contesti realmente paneuropei e nell'ottimizzazione delle risorse al momento di affrontare la competitività dell'Unione e le sfide per la società comuni. Il sostegno dell'Unione alla ricerca e all'innovazione nelle TIC consente inoltre alle PMI ad alta tecnologia di crescere e di sfruttare la dimensione unionale dei mercati. Questo rafforza la collaborazione e l'eccellenza tra scienziati e ingegneri dell'Unione e le sinergie con e fra i bilanci nazionali, e funge da punto focale per la collaborazione con partner extraeuropei.Valutazioni successive delle attività delle TIC nel settimo programma quadro hanno dimostrato che gli investimenti mirati nella ricerca e nell'innovazione delle TIC realizzati a livello di Unione hanno consentito la costruzione di una leadership industriale in settori come le comunicazioni mobili e i sistemi TIC fondamentali per la sicurezza, nonché per affrontare sfide quali la sanità, la sicurezza alimentare, i trasporti, il cambiamento demografico o l'efficienza energetica. Gli investimenti dell'Unione nelle infrastrutture di ricerca nel campo delle TIC hanno fornito ai ricercatori europei le migliori strutture di rete e di elaborazione per la ricerca a livello mondiale.

Le grandi linee delle attività

Una serie di linee di attività mira ad affrontare le sfide della leadership industriale e tecnologica nell'ambito delle TIC e a coprire generici programmi di ricerca e di innovazione nelle TIC, tra cui in particolare:(a) una nuova generazione di componenti e sistemi: ingegneria di componenti e sistemi integrati avanzati ed efficienti sul piano delle risorse e delle energie; (b) elaborazione di prossima generazione: sistemi e tecnologie di elaborazione avanzati e sicuri, compreso il cloud computing; (c) Internet del futuro: software, hardware, infrastrutture, tecnologie e servizi; (d) tecnologie di contenuto e gestione dell'informazione: TIC per i contenuti digitali e per le industrie culturali e creative; (e) interfacce avanzate e robot: robotica e locali intelligenti; (f) microelettronica, nanoelettronica e fotonica: tecnologie abilitanti fondamentali relative alla micro e nanoelettronica e alla fotonica, comprese le tecnologie quantistiche.Si ritiene che queste sei grandi linee di attività coprano la gamma completa delle esigenze, tenendo conto della competitività dell'industria europea su scala globale. Fra esse si annoverano la leadership industriale sulle soluzioni, i prodotti e i servizi generici basati sulle TIC, necessari per affrontare le principali sfide per la società e programmi di ricerca e innovazione nell'ambito delle TIC orientate sulle applicazioni, che saranno sostenuti congiuntamente alla pertinente sfida sociale. In considerazione dei progressi sempre maggiori della tecnologia in tutti i settori della vita, sarà importante sotto questo profilo l'interazione tra esseri umani e tecnologia e costituirà parte delle ricerche delle TIC orientate sulle applicazioni di cui sopra.Queste sei linee di attività comprendono anche le infrastrutture di ricerca specifiche per le TIC, quali i laboratori viventi per la sperimentazione e le infrastrutture per le tecnologie abilitanti fondamentali di base e la loro integrazione in prodotti avanzati e sistemi intelligenti innovativi, tra cui attrezzature, strumenti, servizi di sostegno, ambienti puliti e accesso alle fonderie per la messa a punto di prototipi.Orizzonte 2020 sosterrà la ricerca e lo sviluppo di sistemi TIC nel pieno rispetto dei diritti e delle libertà fondamentali delle persone fisiche e in particolare del diritto alla vita privata.";"";"H2020";"H2020-EU.2.1.";"";"";"2014-09-22 20:40:30";"664147" +"H2020-EU.1.3.2.";"it";"H2020-EU.1.3.2.";"";"";"Sviluppare l'eccellenza attraverso la mobilità transfrontaliera e intersettoriale";"MSCA Mobility";"

Sviluppare l'eccellenza attraverso la mobilità transfrontaliera e intersettoriale

L'obiettivo è rafforzare il potenziale innovativo e creativo dei ricercatori di esperienza a tutti i livelli di carriera creando opportunità di mobilità transfrontaliera e intersettoriale.Le principali attività consistono nell'incoraggiare i ricercatori di esperienza ad approfondire o ad ampliare le loro competenze per mezzo della mobilità, creando opportunità di carriera interessanti presso università, istituti di ricerca, infrastrutture di ricerca, imprese, PMI e altri gruppi socioeconomici in tutta Europa e oltre. Ciò dovrebbe rafforzare la capacità innovativa del settore privato e promuovere la mobilità transsettoriale. Sono inoltre sostenute le opportunità di ricevere formazione e acquisire nuove conoscenze in un istituto di ricerca di alto livello di un paese terzo, di riprendere la carriera di ricerca in seguito a un'interruzione e di (re)integrare i ricercatori in un posto di ricerca a lungo termine in Europa, anche nel loro paese di origine, dopo un'esperienza di mobilità transnazionale/internazionale coprendo gli aspetti relativi al rientro e alla reintegrazione.";"";"H2020";"H2020-EU.1.3.";"";"";"2014-09-22 20:39:28";"664113" +"H2020-EU.1.3.2.";"en";"H2020-EU.1.3.2.";"";"";"Nurturing excellence by means of cross-border and cross-sector mobility";"MSCA Mobility";"

Nurturing excellence by means of cross-border and cross-sector mobility

The goal is to enhance the creative and innovative potential of experienced researchers at all career levels by creating opportunities for cross-border and cross-sector mobility.Key activities shall be to encourage experienced researchers to broaden or deepen their skills by means of mobility by opening attractive career opportunities in universities, research institutions, research infrastructures, businesses, SMEs and other socio-economic groups all over Europe and beyond. This should enhance the innovativeness of the private sector and promote cross-sector mobility. Opportunities to be trained and to acquire new knowledge in a third-country high-level research institution, to restart a research career after a break and to (re-)integrate researchers into a longer-term research position in Europe, including in their country of origin, after a trans-national/international mobility experience covering return and reintegration aspects, shall also be supported.";"";"H2020";"H2020-EU.1.3.";"";"";"2014-09-22 20:39:28";"664113" +"H2020-EU.1.3.2.";"de";"H2020-EU.1.3.2.";"";"";"Förderung von Exzellenz durch grenz- und sektorübergreifende Mobilität";"MSCA Mobility";"

Förderung von Exzellenz durch grenz- und sektorübergreifende Mobilität

Ziel ist die Steigerung des kreativen und innovativen Potenzials erfahrener Forscher zu jedem Zeitpunkt ihrer Laufbahn durch grenz- und sektorübergreifende Mobilitätsmöglichkeiten.Hierzu kommt es vor allem darauf an, erfahrene Forscher zu ermuntern, ihre Fähigkeiten durch Mobilität zu erweitern und zu vertiefen, und zu diesem Zweck attraktive Laufbahnmöglichkeiten in Hochschulen, Forschungseinrichtungen und Forschungsinfrastrukturen, Unternehmen, auch in KMU, sowie anderen sozioökonomischen Gruppen in Europa und darüber hinaus zu eröffnen. Dies dürfte die Innovationsfähigkeit des privaten Sektors steigern und die sektorübergreifende Mobilität fördern. Unterstützt werden auch Möglichkeiten, eine Ausbildung in einer hochkarätigen Forschungseinrichtung eines Drittlands zu absolvieren und dort Wissen zu erwerben, die Forscherlaufbahn nach einer Unterbrechung wieder fortzusetzen und die Forscher nach einer transnationalen bzw. internationalen Mobilitätsmaßnahme, die Aspekte der Rückkehr und der Wiedereingliederung umfasst, in eine längerfristige Forscherstelle in Europa – einschließlich ihres Herkunftslands – zu (re-)integrieren.";"";"H2020";"H2020-EU.1.3.";"";"";"2014-09-22 20:39:28";"664113" +"H2020-EU.1.3.2.";"pl";"H2020-EU.1.3.2.";"";"";"Sprzyjanie najwyższej jakości poprzez transgraniczną i międzysektorową mobilność";"MSCA Mobility";"

Sprzyjanie najwyższej jakości poprzez transgraniczną i międzysektorową mobilność

Celem jest zwiększenie kreatywnego i innowacyjnego potencjału doświadczonych naukowców na wszystkich etapach kariery poprzez zapewnienie możliwości transgranicznej i międzysektorowej mobilności.Kluczowe działania polegają na zachęceniu doświadczonych naukowców do poszerzania lub pogłębiania ich umiejętności poprzez mobilność związaną z udostępnieniem atrakcyjnych możliwości rozwoju kariery na uniwersytetach, w instytucjach badawczych, infrastrukturze badawczej, przedsiębiorstwach, MŚP i innych podmiotach społeczno-gospodarczych w całej Europie i poza nią. To powinno zwiększyć innowacyjność sektora prywatnego i sprzyjać mobilności międzysektorowej. Wspierane są także możliwości dokształcania się i zdobywania nowej wiedzy w najlepszych instytucjach badawczych w państwach trzecich, wznowienia kariery po przerwie oraz oferowania naukowcom po uzyskaniu przez nich doświadczenia w zakresie ponadnarodowej/międzynarodowej mobilności, długoterminowych stanowisk badawczych w Europie, w tym w kraju ich pochodzenia, które obejmowały by aspekty związane z powrotem i ponowną integracją.";"";"H2020";"H2020-EU.1.3.";"";"";"2014-09-22 20:39:28";"664113" +"H2020-EU.1.3.2.";"fr";"H2020-EU.1.3.2.";"";"";"Cultiver l'excellence par la mobilité transfrontalière et intersectorielle";"MSCA Mobility";"

Cultiver l'excellence par la mobilité transfrontalière et intersectorielle

L'objectif est de renforcer le potentiel de création et d'innovation des chercheurs expérimentés à tous les niveaux de carrière en leur offrant des possibilités de mobilité transfrontalière et intersectorielle.Les principales activités consistent à encourager les chercheurs expérimentés à élargir ou à approfondir leurs compétences par la mobilité, en leur offrant des possibilités de carrière attractives dans les universités, les institutions de recherche, les infrastructures de recherche, les entreprises, les PME et d'autres groupements socioéconomiques dans toute l'Europe et d'ailleurs. Cela devrait améliorer la capacité d'innovation du secteur privé et favoriser la mobilité transsectorielle. Un soutien sera également apporté aux possibilités d'acquérir une formation et de nouvelles connaissances dans un établissement de recherche de haut niveau dans un pays tiers, de reprendre une carrière dans la recherche après une interruption et d'intégrer ou de réintégrer des chercheurs dans un poste de recherche à long terme en Europe, y compris dans leur pays d'origine, après une expérience de mobilité transnationale ou internationale, les aspects relatifs au retour et à la réintégration étant couverts.";"";"H2020";"H2020-EU.1.3.";"";"";"2014-09-22 20:39:28";"664113" +"H2020-EU.1.3.2.";"es";"H2020-EU.1.3.2.";"";"";"Cultivar la excelencia mediante la movilidad transfronteriza e intersectorial";"MSCA Mobility";"

Cultivar la excelencia mediante la movilidad transfronteriza e intersectorial

El objetivo es mejorar el potencial creativo e innovador de los investigadores experimentados en todos los niveles de su carrera profesional creando oportunidades de movilidad transfronteriza e intersectorial.Las actividades fundamentales incitarán a los investigadores experimentados a ampliar o profundizar sus competencias a través de la movilidad abriendo oportunidades de carrera atractivas en universidades, centros de investigación, infraestructuras de investigación, empresas, PYME y otros grupos socioeconómicos de toda Europa y de fuera de ella. Ello debería mejorar la capacidad de innovación del sector privado y promover la movilidad intersectorial. También se apoyarán las oportunidades para formarse y adquirir conocimientos en una institución de alto nivel científico de un tercer país, reanudar una carrera científica tras una pausa e integrar o reintegrar a investigadores en un puesto de investigación a más largo plazo en Europa, que puede ser en su país de origen, tras una experiencia de movilidad transnacional/internacional que cubra los aspectos relacionados con el retorno y la reintegración.";"";"H2020";"H2020-EU.1.3.";"";"";"2014-09-22 20:39:28";"664113" +"H2020-EU.1.1.";"de";"H2020-EU.1.1.";"";"";"WISSENSCHAFTSEXZELLENZ - Für das Einzelziel ""Europäischer Forschungsrat (ERC)""";"European Research Council (ERC)";"

WISSENSCHAFTSEXZELLENZ - Für das Einzelziel ""Europäischer Forschungsrat (ERC)""

Einzelziel

Einzelziel ist die Stärkung der Exzellenz, Dynamik und Kreativität der europäischen Forschung.Europa hat sich zum Ziel gesetzt, ein neues Wirtschaftsmodell anzustreben, das sich auf ein intelligentes, nachhaltiges und integratives Wachstum stützt. Für einen derartigen Wandel bedarf es mehr als stufenweiser Verbesserungen der vorhandenen Technologien und Kenntnisse. Notwendig sind deutlich höhere Kapazitäten für die Grundlagenforschung, damit – angefacht durch radikal neues Wissen – aus den wissenschaftlichen Grundlagen Innovationen entstehen, die Europa in die Lage versetzen, eine Vorreiterrolle bei den wissenschaftlichen und technologischen Paradigmenwechseln einzunehmen, die die wichtigsten Antriebskräfte für Produktivitätswachstum, Wettbewerbsfähigkeit, Wohlstand, nachhaltige Entwicklung und sozialen Fortschritt in den künftigen Industriezweigen und Sektoren sein werden. Historisch gesehen erwuchsen solche Paradigmenwechsel aus der Forschung im öffentlichen Sektor, bevor aus ihnen ganz neue Industriezweige und Sektoren entstanden.Eine weltweite Spitzenstellung in der Innovation ist eng mit Wissenschaftsexzellenz verknüpft. Europa – einst der unbestrittene Vorreiter – ist in dem Rennen um die absoluten wissenschaftlichen Spitzenleistungen zurückgefallen und nimmt jetzt in den wichtigsten technologischen Nachkriegsentwicklungen den zweiten Platz hinter den Vereinigten Staaten ein. Auch wenn die Union nach wie vor weltweit die meisten wissenschaftlichen Veröffentlichungen hervorbringt, schaffen die Vereinigten Staaten doppelt so viele besonders einflussreiche Veröffentlichungen (1 % der Veröffentlichungen mit der höchsten Zitierhäufigkeit). Auch in der Rangliste der internationalen Hochschulen dominieren die Hochschulen aus den Vereinigten Staaten die Spitzenplätze. Zudem kommen 70 % der weltweiten Nobelpreisgewinner aus den Vereinigten Staaten.Ein Teil des Problems besteht darin, dass Europa und die Vereinigten Staaten zwar ähnliche Summen in die Forschung ihres öffentlichen Sektors investieren, dass aber in der Union fast dreimal so viele Forscher im öffentlichen Sektor tätig und damit die Investitionen pro Forscher deutlich niedriger sind. Ferner ist die Forschungsförderung in den Vereinigten Staaten selektiver bei der Zuweisung der Mittel an Spitzenforscher. Dies erklärt, warum die Forscher im öffentlichen Sektor der Union im Durchschnitt weniger produktiv und insgesamt weniger wissenschaftlich prägend sind als ihre zahlenmäßig unterlegenen Kollegen aus den Vereinigten Staaten.Hinzu kommt, dass in vielen europäischen Ländern der öffentliche und der private Sektor den Spitzenforschern immer noch keine ausreichend attraktiven Bedingungen bieten. Es kann Jahre dauern, bis talentierte Nachwuchsforscher als unabhängige Wissenschaftler tätig werden können. Durch diese Verzögerung – und in einigen Fällen sogar Verhinderung – des Generationenwechsels von Forschern, die neue Ideen mit neuem Schwung einbringen, wird das Forschungspotenzial Europas in dramatischer Weise vergeudet, denn exzellente Nachwuchsforscher werden dazu verleitet, ihre Laufbahn woanders fortzusetzen.Außerdem besiegeln diese Faktoren den Ruf Europas im weltweiten Wettbewerb um wissenschaftliche Talente als relativ unattraktiv.

Begründung und Mehrwert für die Union

Der ERC wurde gegründet, um die besten Forscher und Forscherinnen Europas mit den notwendigen Ressourcen auszustatten, die es ihnen ermöglichen, im weltweiten Wettbewerb besser abzuschneiden, indem einzelne Teams auf der Grundlage eines europaweiten Wettbewerbs gefördert werden. Der Europäische Forschungsrat handelt autonom. Ein unabhängiger wissenschaftlicher Ausschuss aus Wissenschaftlern, Ingenieuren und Akademikern höchsten Ansehens und Sachverstands, dem Frauen und Männer verschiedener Altersgruppen angehören, legt die wissenschaftliche Gesamtstrategie fest und hat umfassende Entscheidungsgewalt über die Art der zu fördernden Forschung. Diese wesentlichen Merkmale des ERC garantieren die Wirksamkeit seines wissenschaftlichen Programms, die Qualität seiner Tätigkeit und der Gutachterverfahren sowie seine Glaubwürdigkeit in der Wissenschaftsgemeinschaft.Als europaweit auf Wettbewerbsbasis tätige Einrichtung kann der ERC aus einem größeren Pool an Talenten und Ideen schöpfen, als dies für rein nationale Fördersysteme möglich wäre. Die besten Forscher und die besten Ideen konkurrieren miteinander. Antragsteller wissen, dass sie Spitzenleistungen vorweisen müssen – im Gegenzug wird ihnen eine flexible Förderung unter einheitlichen Voraussetzungen geboten, unabhängig von lokalen Engpässen oder der Verfügbarkeit nationaler Fördermittel.Es darf daher erwartet werden, dass sich die vom ERC geförderte Pionierforschung direkt und spürbar auswirkt, denn sie verschiebt die Grenzen des Wissens und macht den Weg frei für neue und häufig unerwartete wissenschaftliche und technologische Ergebnisse sowie neue Forschungsgebiete, die letztlich bahnbrechende neue Ideen hervorbringen können, die ihrerseits Anreize für Innovationen und den unternehmerischen Erfindergeist bieten und Antworten auf die gesellschaftlichen Probleme geben. So stützt sich die Innovationskette in all ihren Phasen auf eine Kombination aus exzellenten einzelnen Wissenschaftlern und innovativen Ideen.Darüber hinaus wirkt sich der ERC nicht nur auf die von ihm direkt geförderten Forscher und Projekte aus, sondern bewirkt durch den von ihm ausgehenden kräftigen Qualitätsschub für das europäische Forschungssystem auch spürbare strukturelle Veränderungen. Mit den vom ERC geförderten Projekten und Forschern werden klare und inspirierende Ziele für die Pionierforschung in Europa gesetzt, sein Profil geschärft und seine Attraktivität für die weltweit besten Forscher erhöht. Das mit der Aufnahme von ERC-Stipendiaten und dem damit einhergehenden ""Siegel der Exzellenz"" verbundene Prestige steigert den Wettbewerb zwischen den europäischen Hochschulen und anderen Forschungsorganisationen um die attraktivsten Bedingungen für Spitzenforscher. So können nationale Systeme und einzelne Forschungseinrichtungen anhand der Tatsache, inwieweit es ihnen gelingt, ERC-Stipendiaten auf sich aufmerksam zu machen und aufzunehmen, bewerten, wo ihre jeweiligen Stärken und Schwächen liegen und ihre Strategien und Praktiken entsprechend anpassen. ERC-Fördermittel dienen daher ein Zusatz zu den laufenden Anstrengungen auf Ebene der Union, der Mitgliedstaaten und Regionen, mit denen das europäische Forschungssystem reformiert, Kapazitäten aufgebaut, das vollständige Potenzial nutzbar gemacht und seine Attraktivität erhöht werden sollen.

Einzelziele und Tätigkeiten in Grundzügen

Die Tätigkeit des ERC besteht im Wesentlichen darin, exzellenten Forschern und ihren Teams eine attraktive Langzeitförderung zu bieten, damit sie bahnbrechende Forschungsarbeiten durchführen können, die zwar hohen Gewinn versprechen, aber gleichzeitig auch ein hohes Risiko bergen.Für die Vergabe von ERC-Fördermitteln gelten die folgenden bewährten Grundsätze. Alleiniges Kriterium für die Gewährung von ERC-Finanzhilfen ist die wissenschaftliche Exzellenz. Das ERC stützt sich auf ein ""Bottom-up""-Konzept ohne vorher festgelegte Schwerpunkte. Die ERC-Finanzhilfen stehen einzelnen Teams von Wissenschaftlern, die in Europa arbeiten, unabhängig von ihrem Alter, Geschlecht oder Herkunftsland offen. Der ERC verfolgt das Ziel, einen gesunden europaweiten Wettbewerb auf der Grundlage robuster, transparenter und unparteiischer Bewertungsverfahren, die insbesondere potenziellen geschlechterspezifischen Verzerrungen vorbeugen sollen, zu fördern.Ein besonderer Schwerpunkt des ERC ist die Unterstützung der besten Nachwuchsforscher mit exzellenten Ideen beim Übergang zur Unabhängigkeit, indem sie eine angemessene Hilfe während dieser kritischen Phase erhalten, in der sie ihr eigenes Forscherteam oder Forschungsprogramm gründen bzw. konsolidieren. Der ERC wird die etablierten Forscher auch weiterhin in angemessenem Umfang unterstützen.Der ERC unterstützt bei Bedarf auch neue Arbeitsweisen in der Welt der Wissenschaft, die erwarten lassen, dass sie bahnbrechende Ergebnisse hervorbringen und die Ausschöpfung des kommerziellen und gesellschaftlichen Innovationspotenzials der geförderten Forschung erleichtern.Daher plant der ERC, bis 2020 Folgendes unter Beweis zu stellen: An den Wettbewerben des ERC nehmen die besten Wissenschaftler teil, die ERC-Förderung hat zu wissenschaftlichen Veröffentlichungen höchster Qualität und zu Forschungsergebnissen mit potenziell hoher gesellschaftlicher und wirtschaftlicher Wirkung geführt und der ERC hat signifikant dazu beigetragen, die Attraktivität Europas für die weltbesten Wissenschaftler zu erhöhen. Insbesondere strebt der ERC eine messbare Verbesserung des Anteils der Union an den 1 % der Veröffentlichungen mit der höchsten Zitierhäufigkeit an. Ferner verfolgt er das Ziel, die Zahl der von ihm geförderten exzellenten Forscher von außerhalb Europas deutlich zu erhöhen. Der ERC wird Erfahrungen und bewährte Verfahren mit den regionalen und nationalen Forschungsfördereinrichtungen teilen, um zur Unterstützung von Spitzenforschern beizutragen. Der ERC wird außerdem dafür sorgen, dass seine Programme stärker wahrgenommen werden.Der Wissenschaftliche Rat des ERC wird die Tätigkeit und die Bewertungsverfahren des ERC ständig überwachen und Überlegungen anstellen, welche Finanzhilfemodelle am besten geeignet sind, die Ziele des ERC zu verwirklichen, die Kriterien Effektivität, Klarheit, Stabilität und Einfachheit für die Antragstellung, Durchführung und Verwaltung zu erfüllen und gegebenenfalls neu auftretenden Erfordernissen Rechnung zu tragen. Er wird sich bemühen, das im Weltmaßstab erstklassige Gutachtersystem des ERC fortzuführen und weiter zu verfeinern, das sich auf eine vollkommen transparente, faire und unparteiische Bearbeitung der Vorschläge stützt, wodurch bahnbrechende wissenschaftliche Exzellenz, bahnbrechende Ideen und Talente erkannt werden können, ohne dass Geschlecht, Nationalität, Einrichtung oder Alter des Forschers eine Rolle spielten. Schließlich wird der ERC auch in Zukunft eigene Strategiestudien zur Ausarbeitung und Unterstützung seiner Tätigkeiten durchführen, enge Kontakte mit der wissenschaftlichen Gemeinschaft, den regionalen und nationalen Fördereinrichtungen und anderen Akteuren pflegen und darauf abzielen, seine Tätigkeiten Forschung auf anderen Ebenen ergänzen.Der ERC wird für Transparenz bei der Berichterstattung über seine Tätigkeiten und Ergebnisse an die Wissenschaftsgemeinschaft und die Öffentlichkeit sorgen und aktualisierte Daten über die geförderten Projekte vorhalten.";"";"H2020";"H2020-EU.1.";"";"";"2014-09-23 20:19:43";"664099" +"H2020-EU.1.1.";"en";"H2020-EU.1.1.";"";"";"EXCELLENT SCIENCE - European Research Council (ERC)";"European Research Council (ERC)";"

EXCELLENT SCIENCE - European Research Council (ERC)

Specific objective

The specific objective is to reinforce the excellence, dynamism and creativity of European research.Europe has set out its ambition to move to a new economic model based on smart, sustainable and inclusive growth. This type of transformation will need more than incremental improvements to current technologies and knowledge. It will require much higher capacity for basic research and science-based innovation fuelled by radical new knowledge, allowing Europe to take a leading role in creating the scientific and technological paradigm shifts which will be the key drivers of productivity growth, competitiveness, wealth, sustainable development and social progress in the future industries and sectors. Such paradigm shifts have historically tended to originate from the public-sector science base before going on to lay the foundations for whole new industries and sectors.World-leading innovation is closely associated with excellent science. Once the undisputed leader, Europe has fallen behind in the race to produce the very best cutting-edge science and has played a secondary role to the United States in the major post-war technological advances. Although the Union remains the largest producer of scientific publications in the world, the United States produces twice as many of the most influential papers (the top 1 % by citation count). Similarly, international university rankings show that US universities dominate the top places. In addition, 70 % of the world's Nobel Prize winners are based in the United States.One part of the challenge is that while Europe and the United States invest similar amounts in their public-sector science bases, the Union has nearly three times as many public-sector researchers, resulting in significantly lower investment per researcher. Moreover, US funding is more selective about allocating resources to the leading researchers. This helps to explain why the Union's public-sector researchers are, on average, less productive and, altogether, make less combined scientific impact than their far less numerous US counterparts.Another major part of the challenge is that in many European countries the public and private sector still does not offer sufficiently attractive conditions for the best researchers. It can take many years before talented young researchers are able to become independent scientists in their own right. This leads to a dramatic waste of Europe's research potential by delaying and in some cases even inhibiting the emergence of the next generation of researchers, who bring new ideas and energy, and by enticing excellent researchers starting their career to seek advancement elsewhere.Furthermore, these factors compound Europe's relative unattractiveness in the global competition for scientific talent.

Rationale and Union added value

The ERC was created to provide Europe's best researchers, both women and men, with the resources they need to allow them to compete better at global level, by funding individual teams on the basis of pan-European competition. It operates autonomously: an independent Scientific Council made up of scientists, engineers and scholars of the highest repute and expertise, of both women and men in different age groups, establishes the overall scientific strategy and has full authority over decisions on the type of research to be funded. These are essential features of the ERC, guaranteeing the effectiveness of its scientific programme, the quality of its operations and peer-review process and its credibility in the scientific community.Operating across Europe on a competitive basis, the ERC is able to draw on a wider pool of talents and ideas than would be possible for any national scheme. The best researchers and the best ideas compete against each other. Applicants know they have to perform at the highest level, the reward being flexible funding on a level playing field, irrespective of local bottlenecks or the availability of national funding.Frontier research funded by the ERC is thereby expected to have a substantial direct impact in the form of advances at the frontiers of knowledge, opening the way to new and often unexpected scientific and technological results and new areas for research which, ultimately, can generate the radically new ideas which will drive innovation and business inventiveness and tackle societal challenges. This combination of excellent individual scientists with innovative ideas underpins every stage of the innovation chain.Beyond this, the ERC has a significant structural impact by generating a powerful stimulus for driving up the quality of the European research system, over and above the researchers and projects which the ERC funds directly. ERC-funded projects and researchers set a clear and inspirational target for frontier research in Europe, raise its profile and make it more attractive for the best researchers at global level. The prestige of hosting ERC grant-holders and the accompanying 'stamp of excellence' are intensifying competition between Europe's universities and other research organisations to offer the most attractive conditions for top researchers. And the ability of national systems and individual research institutions to attract and host ERC grant-winners sets a benchmark allowing them to assess their relative strengths and weaknesses and reform their policies and practices accordingly. ERC funding is therefore in addition to ongoing efforts at Union, national and regional level to reform, build capacity and unlock the full potential and attractiveness of the European research system.

Broad lines of the activities

The fundamental activity of the ERC shall be to provide attractive long-term funding to support excellent investigators and their research teams to pursue ground-breaking, high-gain/high-risk research.ERC funding shall be awarded in accordance with the following well-established principles. Scientific excellence shall be the sole criterion on which ERC grants are awarded. The ERC shall operate on a 'bottom-up' basis without predetermined priorities. The ERC grants shall be open to individual teams of researchers of any age, gender, and from any country in the world, working in Europe. The ERC shall aim to foster healthy competition across Europe based on robust, transparent and impartial evaluation procedures which address, in particular, potential gender bias.The ERC shall give particular priority to assisting the best starting researchers with excellent ideas to make the transition to independence by providing adequate support at the critical stage when they are setting up or consolidating their own research team or programme. The ERC will also continue to provide appropriate levels of support for established researchers.The ERC shall also give support, as necessary, to new ways of working in the scientific world with the potential to create breakthrough results and to facilitate exploration of the commercial and social innovation potential of the research which it funds.By 2020, the ERC shall therefore aim to demonstrate that the best researchers are participating in the ERC's competitions, that ERC funding has led to scientific publications of the highest quality and to research results with high societal and economic potential impact, and that the ERC has contributed significantly to making Europe a more attractive environment for the world's best scientists. In particular, the ERC shall target a measurable improvement in the Union's share of the world's top 1 % most highly cited publications. In addition it shall aim at a substantial increase in the number of excellent researchers from outside Europe whom it funds. The ERC shall share experience and best practices with regional and national research funding agencies in order to promote the support of excellent researchers. In addition, the ERC shall further raise the visibility of its programmes.The ERC's Scientific Council shall continuously monitor the ERC's operations and evaluation procedures and consider how best to achieve its objectives by means of grant schemes that emphasise effectiveness, clarity, stability and simplicity, both for applicants and in their implementation and management, and, as necessary, to respond to emerging needs. It shall endeavour to sustain and further refine the ERC's world-class peer-review system which is based on fully transparent, fair and impartial treatment of proposals so that it can identify ground-breaking scientific excellence, breakthrough ideas and talent regardless of a researcher's gender, nationality, institution or age. Finally, the ERC shall continue conducting its own strategic studies to prepare for and support its activities, maintain close contacts with the scientific community, the regional and national funding agencies and other stakeholders and aim to make its activities complement research conducted at other levels.The ERC will ensure transparency in communication about its activities and results to the scientific community and the general public and maintain updated data from funded projects.";"";"H2020";"H2020-EU.1.";"";"";"2014-09-23 20:19:43";"664099" +"H2020-EU.1.1.";"pl";"H2020-EU.1.1.";"";"";"DOSKONAŁA BAZA NAUKOWA - Europejska Rada ds. Badań Naukowych (ERBN)";"European Research Council (ERC)";"

DOSKONAŁA BAZA NAUKOWA - Europejska Rada ds. Badań Naukowych (ERBN)

Cel szczegółowy

Cel szczegółowy polega na zwiększeniu doskonałości, dynamiki i kreatywności europejskich badań naukowych.Zamiarem Europy jest przejście do nowego modelu gospodarki opartego na inteligentnym, trwałym wzroście gospodarczym sprzyjającym włączeniu społecznemu. Tego typu przeobrażenie będzie wymagać więcej niż stopniowego podnoszenia poziomu obecnych technologii i wiedzy. Będzie wymagać znacznie zwiększonej zdolności do badań podstawowych i innowacji opartych na nauce i stymulowanych radykalnie nową wiedzą, co umożliwi Europie zajęcie wiodącej pozycji w dokonywaniu przesunięć paradygmatu naukowego i technologicznego, które będą kluczowymi czynnikami wzrostu wydajności, konkurencyjności, zamożności, zrównoważonego rozwoju i postępu społecznego w przypadku gałęzi przemysłów i sektorów przyszłości. W przeszłości takie przesunięcia paradygmatu zwykle miały początek w bazie naukowej sektora publicznego, po czym leżały u podstaw powstania całych nowych gałęzi przemysłu i sektorów.Wiodące w skali światowej innowacje są ściśle powiązane z doskonałą bazą naukową. Europa, będąca dawniej niekwestionowanym liderem, spadła na dalszą pozycję w wyścigu o osiąganie najlepszych i przełomowych wyników naukowych, a w większości przypadków jej postępy w rozwoju techniki w okresie powojennym były mniejsze niż postępy w Stanach Zjednoczonych. Chociaż z Unii nadal pochodzi najwięcej publikacji naukowych na świecie, w Stanach Zjednoczonych tworzy się dwukrotnie więcej spośród najbardziej wpływowych opracowań (najlepszy 1% według liczby cytowań). Także z międzynarodowych rankingów uniwersytetów wynika, że w czołówce przeważają uczelnie amerykańskie. Ponadto 70% wszystkich laureatów Nagrody Nobla pracuje w Stanach Zjednoczonych.Jednym z elementów wyzwania jest fakt, że chociaż Europa i Stanach Zjednoczonych inwestują podobne kwoty w bazę naukową sektora publicznego, w sektorze publicznym Unii pracuje niemal trzykrotnie więcej naukowców, przez co wartość inwestycji przypadającej na jednego naukowca jest zdecydowanie niższa. Ponadto w USA finansowanie jest bardziej selektywne pod względem przydzielania zasobów wiodącym naukowcom. To pomaga wyjaśnić, dlaczego naukowcy sektora publicznego w Unii są średnio mniej wydajni i ostatecznie mają znacznie mniejsze łączne oddziaływanie naukowe niż ich znacznie mniej liczni koledzy w USA.Inny istotny element wyzwania polega na tym, że w wielu państwach europejskich sektor publiczny i prywatny nadal nie oferuje najlepszym naukowcom wystarczająco atrakcyjnych warunków. Może minąć wiele lat, zanim utalentowani młodzi badacze zostaną uznanymi niezależnymi naukowcami. Skutkiem jest dramatyczne marnotrawstwo potencjału badawczego Europy poprzez opóźnianie, a w niektórych przypadkach nawet powstrzymywanie dojścia do głosu nowej generacji naukowców przynoszących ze sobą nowe pomysły i energię, a także motywowanie wybitnych naukowców rozpoczynających karierę do szukania możliwości gdzie indziej.Poza tym wspomniane czynniki dodatkowo przyczyniają się do braku atrakcyjności Europy w globalnej konkurencji o talenty naukowe.

Uzasadnienie i unijna wartość dodana

ERBN utworzono, aby zapewnić najlepszym naukowcom Europy – zarówno mężczyznom, jak i kobietom – środki niezbędne dla umożliwienia im skuteczniejszego konkurowania na poziomie globalnym poprzez finansowanie indywidualnych zespołów na podstawie ogólnoeuropejskiej konkurencyjności. Jest to jednostka działająca autonomicznie: niezależna rada naukowa – złożona z naukowców, inżynierów i pracowników akademickich cieszących się uznaniem i dysponujących rozległą wiedzą specjalistyczną, zarówno kobiet, jak i mężczyzn, z różnych grup wiekowych – określa ogólną strategię naukową i posiada pełne uprawnienia do podejmowania decyzji w sprawie badań naukowych, które mają być finansowane. Są to podstawowe funkcje ERBN, zapewniające skuteczność jej programu naukowego, jakość jej działań oraz procesu wzajemnej oceny, a także wiarygodność w środowisku naukowym.Jako ogólnoeuropejski konkurencyjny organ finansowania ERBN jest w stanie korzystać z szerszej puli talentów i pomysłów, niż byłoby to możliwe w przypadku jakiegokolwiek systemu krajowego. Konkurują ze sobą najlepsi naukowcy i najlepsze pomysły. Wnioskodawcy wiedzą, że muszą osiągać wyniki na najwyższym poziomie, za co nagrodą jest elastyczne finansowanie przy równych szansach, niezależne od lokalnych trudności czy dostępności środków w kraju.Oczekuje się zatem, że badania pionierskie finansowane przez ERBN będą mieć znaczne bezpośrednie oddziaływanie przejawiające się postępami dokonywanymi na rubieżach wiedzy, torowaniem drogi do osiągania nowych i często nieoczekiwanych wyników naukowych i technologicznych oraz tworzeniem nowych obszarów badań naukowych, co ostatecznie może zaowocować radykalnie nowymi pomysłami stymulującymi innowacje i nowatorstwo w biznesie, a także przyczynić się do radzenia sobie z wyzwaniami społecznymi. Połączenie wybitnych indywidualnych naukowców z innowacyjnymi pomysłami stanowi istotny element wszystkich etapów łańcucha innowacji.Ponadto ERBN ma istotne oddziaływanie strukturalne, zapewniając silny bodziec poprawy jakości europejskiego systemu badań naukowych, a zasięg jego oddziaływania wykracza poza naukowców i projekty bezpośrednio finansowane przez ERBN. Projekty i naukowcy otrzymujący finansowanie z ERBN stanowią wyrazistą inspirację dla podmiotów z dziedziny pionierskich badań naukowych w Europie oraz zwiększają jej widoczność i atrakcyjność dla najlepszych naukowców na poziomie globalnym. Prestiż związany z zatrudnianiem beneficjentów dotacji ERBN i związany z tym „znak doskonałości” prowadzi do nasilenia konkurencji między europejskimi uniwersytetami i innymi organizacjami badawczymi pod względem oferowania najbardziej atrakcyjnych warunków najlepszym naukowcom. Ponadto zdolność krajowych systemów i poszczególnych instytucji badawczych do przyciągania odnoszących sukcesy beneficjentów dotacji ERBN stanowi kryterium umożliwiające im ocenę swoich relatywnych mocnych i słabych stron oraz odpowiednią reformę polityki i stosowanych praktyk. Finansowanie ERBN jest zatem dodatkowe w stosunku do wysiłków podejmowanych na poziomie Unii, krajowym i regionalnym w celu reformowania, budowania zdolności i uwalniania pełnego potencjału oraz atrakcyjności europejskiego systemu badawczego.

Ogólne kierunki działań

Podstawowa działalność ERBN polega na zapewnianiu długoterminowego finansowania w celu wsparcia wybitnych naukowców i ich zespołów badawczych w przełomowych badaniach naukowych oferujących duże korzyści, ale też obarczonych wysokim ryzykiem.Finansowanie ERBN jest udzielane według następujących, dobrze ugruntowanych zasad. Wyłącznym kryterium przyznawania dotacji ERBN jest doskonałość naukowa. ERBN działa w trybie „oddolnym”, bez wstępnie ustalonych priorytetów. Dotacje ERBN są otwarte dla indywidualnych zespołów złożonych z naukowców w dowolnym wieku i dowolnej płci, pochodzących z dowolnego kraju świata i pracujących w Europie. Celem ERBN jest promowanie w całej Europie zdrowej konkurencji opartej na solidnych, przejrzystych i bezstronnych procedurach oceny, które wykluczają przede wszystkim potencjalne uprzedzenia płciowe.W sposób szczególnie uprzywilejowany ERBN traktuje pomoc dla najlepszych początkujących naukowców o wybitnych pomysłach, umożliwiając im osiągnięcie niezależnego statusu poprzez zapewnienie odpowiedniego wsparcia na bardzo ważnym etapie, kiedy konsolidują oni lub tworzą własny zespół badawczy lub program. ERBN będzie również w dalszym ciągu udzielać odpowiedniego wsparcia uznanym naukowcom.W razie konieczności ERBN udziela również wsparcia na rzecz pojawiających się nowych sposobów pracy w świecie nauki, mających potencjał zapewnienia przełomowych wyników, a także ułatwia weryfikację potencjału finansowanych przez siebie badań naukowych pod względem innowacji komercyjnych i społecznych.W związku z tym do 2020 r. ERBN ma zamiar wykazać, że: w konkursach ERBN uczestniczą najlepsi naukowcy, finansowanie ERBN doprowadziło do powstania publikacji naukowych najwyższej jakości oraz do osiągnięcia wyników badawczych o znacznym potencjale oddziaływania społecznego i gospodarczego, a także że ERBN w istotnym stopniu przyczyniła się do stworzenia w Europie bardziej atrakcyjnego środowiska dla najlepszych naukowców świata. W szczególności ERBN dąży do istotnego wzrostu udziału Unii w 1% najczęściej cytowanych publikacji na świecie. Ponadto dąży do znacznego zwiększenia liczby finansowanych przez siebie wybitnych naukowców spoza Europy. ERBN wymienia się doświadczeniami i najlepszymi praktykami z regionalnymi i krajowymi agencjami finansującymi badania, aby promować wspieranie wybitnych naukowców. Ponadto ERBN jeszcze bardziej eksponuje swoje programy.Rada naukowa ERBN stale monitoruje działalność ERBN i procedury oceny oraz analizuje możliwości optymalnego osiągnięcia swoich celów za pomocą systemów dotacji kładących nacisk na skuteczność, przejrzystość, stabilność i prostotę zarówno w odniesieniu do wnioskodawców, jak i pod względem realizacji i zarządzania, a także, w razie potrzeby, najlepsze sposoby reagowania na zarysowujące się potrzeby. Dąży do utrzymania i dalszego doskonalenia światowej klasy systemu wzajemnej oceny ERBN, opartego na pełnej przejrzystości, uczciwości i bezstronności w rozpatrywaniu wniosków, dzięki czemu jest w stanie wyróżnić najwyższą naukową jakość, przełomowe pomysły i talent o przełomowym potencjale, bez względu na płeć, narodowość czy wiek naukowca oraz instytucję, dla której pracuje. Ponadto ERBN nadal prowadzi badania strategiczne w celu przygotowania i wsparcia swoich działań, utrzymuje bliskie kontakty ze społecznością naukową, regionalnymi i krajowymi podmiotami finansującymi i innymi zainteresowanymi stronami oraz stara się uzupełniać swoimi działaniami inicjatywy badawcze na innych poziomach.ERBN będzie dbać o przejrzystość informowania społeczności naukowej i opinii publicznej o swojej działalności i wynikach oraz aktualizować dane pochodzące z finansowanych przez nią projektów.";"";"H2020";"H2020-EU.1.";"";"";"2014-09-23 20:19:43";"664099" +"H2020-EU.1.1.";"fr";"H2020-EU.1.1.";"";"";"EXCELLENCE SCIENTIFIQUE - Conseil européen de la recherche (CER)";"European Research Council (ERC)";"

EXCELLENCE SCIENTIFIQUE - Conseil européen de la recherche (CER)

Objectif spécifique

L'objectif spécifique consiste à renforcer l'excellence, le dynamisme et la créativité de la recherche européenne.L'Europe s'est fixée pour ambition de passer à un nouveau modèle économique fondé sur une croissance intelligente, durable et inclusive. Une telle transformation nécessitera davantage qu'une amélioration marginale des technologies et des connaissances actuelles. Elle passera obligatoirement par une bien plus grande capacité pour la recherche fondamentale et l'innovation scientifique, alimentées par de nouvelles connaissances révolutionnaires, qui permettront à l'Europe de jouer un rôle de premier plan dans les changements de paradigmes scientifiques et technologiques qui constitueront, dans les industries et secteurs du futur, les principaux moteurs de la hausse de productivité, de la compétitivité, de la richesse, du développement durable et des progrès sociaux. Historiquement, ces changements de paradigmes ont trouvé généralement leur origine dans la base scientifique du secteur public avant de sous-tendre ensuite la création d'industries et de secteurs totalement nouveaux.La primauté mondiale dans le domaine de l'innovation est intimement liée à une base scientifique d'excellence. Autrefois chef de file incontesté, l'Europe a perdu du terrain dans la course à la production scientifique de pointe et d'excellence et n'a joué qu'un rôle secondaire par rapport aux États-Unis dans les grandes avancées technologiques d'après-guerre. Si l'Union reste le principal producteur de publications scientifiques au monde, les États-Unis produisent deux fois plus de publications comptant parmi les plus influentes (celles qui appartiennent au 1 % de publications les plus citées). De même, les classements internationaux d'universités mettent en évidence la prépondérance des universités américaines en haut de tableau. Enfin, 70 % des lauréats des prix Nobel dans le monde sont établis aux États-Unis.L'enjeu réside notamment dans le fait que, si l'Europe investit dans ses bases scientifiques du secteur public des montants comparables à ceux des États-Unis, l'Union compte quasiment trois fois plus de chercheurs relevant du secteur public. Ceux-ci reçoivent donc, individuellement, sensiblement moins de fonds que leurs homologues américains. Une plus grande sélectivité règne en outre aux États-Unis pour ce qui est du financement des chercheurs les plus influents. Ces différents éléments aident à comprendre pourquoi les chercheurs européens du secteur public sont en moyenne moins productifs et n'ont globalement, sur le plan scientifique, pas autant d'impact que leurs homologues américains, pourtant bien moins nombreux.Une autre composante essentielle du défi à relever est que, dans de nombreux pays d'Europe, les secteurs public et privé n'offrent toujours pas aux meilleurs chercheurs des conditions suffisamment attractives. Il faut parfois de nombreuses années à de jeunes chercheurs de talent pour devenir des scientifiques indépendants à part entière. Le potentiel de l'Union en matière de recherche s'en trouve considérablement affaibli: l'émergence de la prochaine génération de chercheurs susceptibles d'insuffler de nouvelles idées et une dose de vitalité est retardée, voire empêchée dans certains cas, et les jeunes chercheurs de qualité sont incités à chercher ailleurs des possibilités de promotion.Ces facteurs aggravent en outre le manque relatif d'attractivité de l'Europe dans la compétition mondiale pour les scientifiques de talent.

Justification et valeur ajoutée de l'Union

Le CER a été mis sur pied pour fournir aux chercheurs européens les plus compétents, tant masculins que féminins, les ressources dont ils ont besoin pour renforcer leur compétitivité sur la scène mondiale, en allouant des fonds à certaines équipes sur la base d'une concurrence à l'échelle paneuropéenne. Le CER fonctionne de manière autonome: un conseil scientifique indépendant composé de scientifiques, d'ingénieurs et d'experts masculins et féminins de différentes tranches d'âge, à la réputation et aux compétences exemplaires, définit la stratégie scientifique générale et a pleine compétence pour décider du type de recherches à financer. Ces caractéristiques essentielles assurent l'efficacité de son programme scientifique, la qualité de ses actions et du processus d'évaluation par les pairs ainsi que sa crédibilité au sein de la communauté scientifique.Le CER, qui opère à l'échelle de l'Europe sur une base concurrentielle, est capable de mobiliser un réservoir de talents et d'idées plus vaste que n'importe quel régime national. Les meilleurs chercheurs et les meilleures idées sont en concurrence. Les candidats savent qu'ils doivent réaliser les meilleures performances, en échange de quoi ils bénéficient d'un système de financement flexible offrant à chacun des conditions de concurrence homogènes, indépendamment des goulots d'étranglement locaux ou de la disponibilité des financements nationaux.La recherche exploratoire financée par le CER devrait donc avoir un impact direct substantiel en permettant des avancées aux frontières de la connaissance, lesquelles ouvriront la voie à de nouveaux résultats scientifiques et technologiques, souvent inattendus, et à de nouveaux domaines de recherche, qui pourraient, au final, faire germer les nouvelles idées révolutionnaires qui favoriseront l'innovation et l'inventivité des entreprises et qui permettront de relever les défis de société. Cette combinaison de scientifiques d'excellence et d'idées innovantes sous-tend chaque étape de la chaîne de l'innovation.Outre ces considérations, le CER a des répercussions réelles sur le plan structurel: il contribue notablement au renforcement qualitatif du système de recherche européen, bien au-delà des chercheurs et des projets qu'il finance directement. Les projets et les chercheurs financés par le CER constituent un modèle à forte visibilité qui stimule la recherche exploratoire en Europe, tout en renforçant sa visibilité et son attractivité auprès des meilleurs chercheurs mondiaux. Le prestige qu'implique l'accueil de chercheurs titulaires d'une bourse du CER et le gage d'excellence que constitue un tel accueil renforcent la concurrence que se livrent les universités européennes et d'autres organismes de recherche en vue d'offrir aux meilleurs chercheurs les conditions les plus attractives. La capacité des systèmes nationaux et des institutions de recherche à attirer et à accueillir des chercheurs ayant pu obtenir une bourse du CER constitue par ailleurs un point de référence qui leur permet d'évaluer leurs forces et leurs faiblesses relatives et de revoir en conséquence leurs politiques et leurs pratiques. Le financement par le CER s'ajoute dès lors aux démarches entreprises actuellement au niveau européen, national et régional en vue de réformer le système européen de recherche, d'en développer les capacités et d'en libérer pleinement le potentiel et l'attractivité.

Grandes lignes des activités

Le CER a pour principale mission de fournir un financement attractif et à long terme en vue d'aider les chercheurs d'excellence et leurs équipes à mener des recherches innovantes à haut risque et à haut bénéfice.Le financement par le CER repose sur les principes bien établis exposés ci-dessous. L'excellence scientifique est l'unique critère d'attribution des fonds. Le CER fonctionne sur une base ascendante, sans priorités préétablies. Ses subventions sont accessibles aux équipes de chercheurs travaillant en Europe, quels que soient l'âge, le genre et le pays d'origine des personnes qui la composent. Le CER vise à promouvoir une saine concurrence en Europe sur la base de procédures d'évaluation solides, transparentes et impartiales, qui s'attaquent en particulier aux inégalités potentielles entre genres.Le CER se fixe notamment pour priorité d'aider les meilleurs jeunes chercheurs d'excellence à négocier leur transition vers l'indépendance, en leur apportant un soutien approprié au stade critique de la mise en place ou de la consolidation de leur propre équipe ou programme de recherche. Le CER continuera en outre à fournir aux chercheurs établis le soutien dont ils ont besoin.Le CER offre en outre un soutien approprié aux nouvelles méthodes de travail dans le monde scientifique qui sont susceptibles d'entraîner de réelles avancées. Il facilite également l'étude du potentiel d'innovation commerciale et sociale de la recherche qu'il finance.Le CER a dès lors pour objectif de démontrer, d'ici à 2020, que les meilleurs chercheurs participent aux concours qu'il organise, que les subventions qu'il accorde sont à l'origine de publications scientifiques de la plus haute qualité et ont permis d'obtenir des résultats ayant une incidence sociétale et économique potentielle importante, et qu'il a participé de manière significative à rendre l'Europe plus attractive pour les scientifiques les plus compétents au niveau mondial. Il se fixe notamment pour objectif une augmentation significative de la part des publications européennes dans le 1 % de publications les plus citées à l'échelle mondiale. Il vise également une hausse substantielle du nombre de chercheurs d'excellence extérieurs à l'Union qu'il finance. Le CER échange ses expériences et ses meilleures pratiques avec les agences régionales et nationales de financement de la recherche en vue d'encourager le soutien des chercheurs d'excellence. En outre, le CER améliore encore la visibilité de ses programmes.Le Conseil scientifique du CER assure un suivi continu des activités et des procédures d'évaluation de ce dernier. Il cherche à déterminer la meilleure façon de réaliser ses objectifs, en utilisant des régimes de financement mettant l'accent sur l'efficacité, la clarté, la stabilité et la simplicité, tant pour les demandeurs qu'en matière de mise en œuvre et de gestion, et s'attelle à trouver, le cas échéant, le meilleur moyen de faire face aux nouveaux besoins. Il entreprend de soutenir et d'affiner plus encore le système d'évaluation par les pairs d'envergure mondiale instauré par le CER, qui se fonde sur un traitement totalement transparent, équitable et impartial des propositions pour reconnaître l'excellence scientifique, les idées qui représentent une avancée décisive et le talent des chercheurs, indépendamment de leur sexe, de leur nationalité, de l'établissement dans lequel ils travaillent ou de leur âge. Enfin, le CER continue de mener ses propres études stratégiques, qui lui permettent de préparer et de soutenir ses activités, de maintenir des contacts étroits avec la communauté scientifique, les agences régionales et nationales de financement et d'autres parties prenantes et de veiller à assurer la complémentarité de ses activités par rapport aux activités de recherche entreprises à d'autres niveaux.Le CER garantira la transparence dans sa communication relative à ses activités et ses résultats à l'égard de la communauté scientifique et au grand public, et tiendra à jour les données concernant les projets financés.";"";"H2020";"H2020-EU.1.";"";"";"2014-09-23 20:19:43";"664099" +"H2020-EU.1.1.";"es";"H2020-EU.1.1.";"";"";"CIENCIA EXCELENTE - Consejo Europeo de Investigación (CEI)";"European Research Council (ERC)";"

CIENCIA EXCELENTE - Consejo Europeo de Investigación (CEI)

Objetivo específico

El objetivo específico es reforzar la excelencia, el dinamismo y la creatividad de la investigación europea.Europa ha expuesto su ambición de avanzar hacia un nuevo modelo económico basado en un crecimiento inteligente, sostenible e integrador. Este tipo de transformación exigirá algo más que mejoras incrementales de las tecnologías y los conocimientos actuales. Requerirá una capacidad muy superior de investigación básica y de innovación basada en la ciencia, alimentada por conocimientos radicalmente nuevos, que permita a Europa asumir un papel destacado en los cambios de paradigma científico y tecnológico que serán determinantes para el crecimiento de la productividad, la competitividad, la riqueza, el desarrollo sostenible y el progreso social en las industrias y sectores del futuro. Históricamente, tales cambios de paradigma se han originado frecuentemente en la investigación básica del sector público, antes de pasar a constituir los cimientos para la creación de industrias y nuevos sectores de actividad.La innovación pionera en el mundo está íntimamente asociada con la excelencia científica. En tiempos líder indiscutido, Europa se ha quedado atrás en la carrera por producir la mejor ciencia de vanguardia y ha desempeñado un papel secundario frente a los Estados Unidos en los grandes avances tecnológicos de la posguerra. Aunque la Unión sigue siendo el mayor productor de publicaciones científicas del mundo, los Estados Unidos producen el doble de los trabajos más influyentes (el 1 % con mayor número de citas). Del mismo modo, en las clasificaciones internacionales de universidades, las estadounidenses copan los primeros puestos. Además, el 70 % de los galardonados con premios Nobel radican en los Estados Unidos.Una parte del problema se debe a que, aunque Europa y los Estados Unidos invierten importes similares en sus sectores públicos de investigación, el número de investigadores del sector público de la Unión es casi tres veces mayor, lo que se traduce en una inversión por investigador significativamente menor. Además, la financiación estadounidense es más selectiva en la asignación de recursos a los investigadores más destacados. Esto ayuda a explicar por qué los investigadores del sector público de la Unión son menos productivos en promedio y tienen un menor impacto científico combinado que sus colegas estadounidenses, mucho menos numerosos.Otra parte importante del reto es que en muchos países europeos el sector público y el privado todavía no ofrecen a los mejores investigadores unas condiciones suficientemente atractivas. Pueden pasar muchos años antes de que un joven investigador de talento pueda convertirse en científico independiente por derecho propio. Esto se traduce en un espectacular desperdicio del potencial investigador de Europa, al retrasar y en algunos casos incluso impedir la aparición de una nueva generación de investigadores que aporte ideas nuevas y energía, y empuja a los investigadores excelentes que inician su carrera profesional a intentar progresar en otra parte.Además, estos factores vienen a sumarse al escaso atractivo de Europa en la competencia mundial por el talento científico.

Justificación y valor añadido de la Unión

El CEI se creó para facilitar a los mejores investigadores e investigadoras de Europa los recursos que necesitan para poder competir mejor a escala mundial, a través de la financiación de equipos concretos sobre la base de una competencia paneuropea. El CEI opera de forma autónoma: un Consejo Científico independiente integrado por científicos, ingenieros y expertos de la máxima reputación y experiencia, tanto hombres como mujeres de diferentes edades, establece la estrategia científica global, disfrutando de plena autoridad sobre las decisiones relativas al tipo de investigación que se financia. Son estos rasgos esenciales del CEI, que garantizan la eficacia de su programa científico, la calidad de sus actividades y del proceso de revisión inter pares y su crédito en la comunidad científica.Al operar en toda Europa sobre una base competitiva, el CEI puede aprovechar un conjunto de talentos e ideas más amplio del que sería posible para cualquier régimen nacional. Los mejores investigadores y las mejores ideas compiten entre sí. Los solicitantes saben que tienen que demostrar el máximo rendimiento para obtener como recompensa una financiación flexible en condiciones equitativas, independiente de las trabas locales o de la disponibilidad de fondos nacionales.Se espera, por tanto, que la investigación puntera financiada por el CEI suponga un impacto directo considerable, haciendo avanzar las fronteras del conocimiento, abriendo el camino a resultados científicos y tecnológicos nuevos y a menudo inesperados y nuevos ámbitos de investigación que, en último término, puedan generar ideas radicalmente nuevas que impulsen la innovación y la inventiva empresarial y afronten los retos de la sociedad. Esta combinación de científicos de excelencia e ideas innovadoras sustenta todas las fases de la cadena de la innovación.Aparte de esta circunstancia, el CEI tiene un impacto estructural significativo al generar un potente estímulo para mejorar la calidad del sistema europeo de investigación, más allá de los investigadores y proyectos que financia directamente. Los proyectos e investigadores financiados por el CEI establecen un objetivo claro e inspirador para la investigación puntera en Europa, aumentan su visibilidad y la hacen más atractiva para los mejores investigadores a nivel mundial. Gracias al prestigio que supone acoger a beneficiarios del CEI y al ""marchamo de excelencia"" concomitante, se está intensificando la competencia entre las universidades y otras organizaciones de investigación de Europa para ofrecer las condiciones más atractivas a los mejores investigadores. Y la capacidad de los sistemas nacionales y de las instituciones de investigación a título Individual para atraer y acoger a los beneficiarios del CEI establece una referencia que les permite evaluar sus puntos fuertes y débiles relativos y reformar según proceda sus políticas y prácticas. La financiación del CEI es, por lo tanto, adicional a los esfuerzos en curso a los niveles de la Unión, nacional y regional, para reformar, desarrollar la capacidad y desbloquear todo el potencial y el atractivo del sistema europeo de investigación.

Líneas generales de las actividades

La actividad fundamental del CEI será proporcionar una financiación a largo plazo atractiva para apoyar a los investigadores excelentes y a sus equipos de investigación a fin de que lleven a cabo una investigación novedosa y potencialmente muy rentable, pero de alto riesgo.La financiación del CEI se concederá con arreglo a los principios bien contrastados que se mencionan a continuación. La excelencia científica será el único criterio para la concesión de subvenciones del CEI. El CEI funcionará sobre una base ""ascendente"", sin prioridades predeterminadas. Las subvenciones del CEI estarán abiertas a equipos de investigadores de cualquier edad, sexo o país del mundo que trabajen en Europa. El CEI tendrá por objetivo impulsar una sana competencia en toda Europa basada en procedimientos de evaluación sólidos, transparentes e imparciales, que resuelvan, en particular, posibles sesgos por razón de sexo.El CEI concederá especial prioridad a ayudar, al inicio de su carrera, a que los mejores investigadores con ideas excelentes realicen la transición a la independencia, proporcionándoles un apoyo adecuado en la fase crítica en que están creando o consolidando su propio equipo o programa de investigación. Asimismo, el CEI seguirá prestando un grado apropiado de apoyo a los investigadores experimentados.El CEI también prestará apoyo, según sea necesario, a nuevos métodos de trabajo emergentes en el mundo científico con potencial para crear resultados decisivos y facilitará la exploración del potencial de innovación comercial y social de las actividades de investigación que financia.De aquí a 2020, el CEI tratará de demostrar que: los mejores investigadores participan en los concursos del CEI, la financiación del CEI ha dado lugar a publicaciones científicas de la máxima calidad y a resultados de investigación que pueden tener efectos sociales y económicos importantes, y el CEI ha contribuido considerablemente a hacer de Europa un lugar más atractivo para los mejores científicos del mundo. En particular, el CEI tratará de conseguir una mejora apreciable del porcentaje de la Unión en el 1 % de las publicaciones más citadas. Además, tratará de lograr un aumento sustancial del número de investigadores de excelencia de fuera de Europa a los que financia. El CEI compartirá experiencias y buenas prácticas con agencias regionales y nacionales dedicadas a la financiación de la investigación, procurando así promover el apoyo a los investigadores de excelencia. Además, el CEI dará mayor visibilidad a sus programas fuera de Europa.El Consejo Científico del CEI seguirá de cerca permanente las actividades y procedimientos de evaluación del CEI y estudiará la mejor manera de alcanzar sus objetivos por medio de regímenes de subvención que insistan en la eficacia, claridad, estabilidad y simplicidad, tanto con respecto a los solicitantes como a su aplicación y gestión, y, en caso necesario, responder a las necesidades emergentes. Se esforzará por mantener y perfeccionar el sobresaliente sistema de revisión inter pares del CEI, que se basa en el trato completamente transparente, equitativo e imparcial dispensado a las propuestas, de manera que se puedan detectar la excelencia, las ideas innovadoras y el talento científicos pioneros independientemente del sexo, la nacionalidad, la institución o la edad del investigador. Por último, el CEI seguirá realizando sus propios estudios estratégicos para preparar y apoyar sus actividades, mantendrá estrechos contactos con la comunidad científica, las agencias regionales o nacionales de financiación y otras partes interesadas, y procurará que sus actividades complementen la investigación realizada a otros niveles.El CEI garantizará la transparencia en las comunicaciones sobre sus actividades y resultados a la comunidad científica y al público general, y mantendrá actualizados los datos sobre los proyectos financiados.";"";"H2020";"H2020-EU.1.";"";"";"2014-09-23 20:19:43";"664099" +"H2020-EU.1.1.";"it";"H2020-EU.1.1.";"";"";"ECCELLENZA SCIENTIFICA - Consiglio europeo della ricerca (CER)";"European Research Council (ERC)";"

ECCELLENZA SCIENTIFICA - Consiglio europeo della ricerca (CER)

Obiettivo specifico

L'obiettivo specifico è rafforzare l'eccellenza, il dinamismo e la creatività della ricerca europea.L'Europa intende effettuare la transizione verso un nuovo modello economico basato sulla crescita intelligente, sostenibile e inclusiva. Questo tipo di trasformazione non richiederà solo miglioramenti incrementali delle attuali tecnologie e conoscenze, ma necessiterà anche di una capacità nettamente superiore di ricerca di base e innovazioni scientifiche corroborate da conoscenze radicalmente nuove, che consentano all'Europa di assumere un ruolo di guida nella creazione del nuovo paradigma scientifico e tecnologico che nelle industrie e nei settori futuri rappresenterà il motore chiave della crescita di produttività, della competitività, della prosperità, dello sviluppo sostenibile e del progresso sociale. Storicamente questi cambiamenti di direzione provengono di norma dalla base scientifica del settore pubblico prima di gettare le fondamenta di interi nuovi settori e industrie.L'innovazione di punta è strettamente associata all'eccellenza scientifica. Una volta leader indiscusso, l'Europa è rimasta indietro nella corsa alla produzione della migliore scienza d'avanguardia e ha svolto un ruolo secondario rispetto agli Stati Uniti per quanto riguarda i principali progressi tecnologici del dopoguerra. Anche se l'Unione resta il maggior produttore di pubblicazioni scientifiche a livello mondiale, gli Stati Uniti producono il doppio dei più influenti articoli scientifici (l'1 % superiore per numero di citazioni). Analogamente, la classifica internazionale delle università mostra che le università statunitensi dominano i primi posti. Inoltre, il 70 % dei laureati del premio Nobel sono basati negli Stati Uniti.Un aspetto della sfida è dato dal fatto che, mentre l'Europa e gli Stati Uniti investono importi simili nelle rispettive basi scientifiche del settore pubblico, l'Unione ha il triplo dei ricercatori del settore pubblico, il che equivale a un investimento nettamente minore per ricercatore. Il finanziamento degli Stati Uniti è inoltre maggiormente selettivo per quanto concerne lo stanziamento di risorse per i ricercatori di punta. Questi dati contribuiscono a spiegare perché i ricercatori del settore pubblico dell'Unione siano mediamente meno produttivi e la loro incidenza scientifica sia nel complesso minore rispetto alle controparti, di numero molto inferiore, negli Stati Uniti.Un altro aspetto di rilievo della sfida è costituito dal fatto che in molti paesi europei il settore pubblico e privato non offre ancora condizioni abbastanza interessanti ai migliori ricercatori. È possibile che giovani ricercatori di talento impieghino molti anni prima di diventare veri e propri scienziati indipendenti. Per l'Europa si tratta di uno spreco ingente del potenziale di ricerca poiché ritarda e in taluni casi addirittura ostacola l'emergenza della nuova generazione di ricercatori con il loro bagaglio di idee nuove e la loro energia, e spinge ricercatori di eccellenza all'inizio della carriera a cercare avanzamento altrove.Tutti questi fattori contribuiscono a rendere relativamente poco attraente l'Europa nell'arena mondiale dei talenti scientifici.

Motivazione e valore aggiunto dell'Unione

Il CER è stato istituito per fornire ai migliori ricercatori europei, uomini e donne, le risorse necessarie per consentire loro di competere meglio a livello internazionale, finanziando singole équipe sulla base della concorrenza paneuropea. La sua attività è indipendente: un consiglio scientifico indipendente composto da scienziati, ingegneri e studiosi della massima fama e competenza, uomini e donne di diversi gruppi d'età, stabilisce la strategia scientifica globale e gode di piena autorità sulle decisioni riguardo al tipo di ricerca da finanziare. Sono queste le caratteristiche essenziali del CER, volte a garantire l'efficacia del suo programma scientifico, la qualità delle sue attività e il processo di valutazione inter pares nonché la sua credibilità presso la comunità scientifica.In quanto organismo che opera a livello europeo su base competitiva, il CER è in grado di attingere a un insieme di talenti e idee più ampio di quanto sarebbe possibile per qualsiasi programma nazionale. I migliori ricercatori e le migliori idee si trovano in reciproca concorrenza. I richiedenti sanno di dover fornire prestazioni di massimo livello, poiché la ricompensa consiste in un finanziamento flessibile in condizioni di parità, a prescindere dalle strozzature locali e dalla disponibilità di finanziamenti nazionali.Si prevede pertanto che la ricerca d'avanguardia finanziata dal CER incida direttamente e in modo sostanziale sui progressi alle frontiere della conoscenza, aprendo nuove vie, spesso inattese, verso risultati scientifici e tecnologici e nuovi settori di ricerca che sono infine in grado di generare idee radicalmente nuove capaci di guidare l'innovazione e l'inventiva del settore commerciale e affrontare le sfide per la società. La combinazione di singoli scienziati eccellenti e di idee innovative costituisce la base di tutte le fasi della catena dell'innovazione.Oltre quanto illustrato, il CER esercita un impatto strutturale significativo poiché genera un potente stimolo al miglioramento della qualità del sistema europeo di ricerca, che va oltre i ricercatori e i progetti direttamente finanziati dal CER. I progetti e i ricercatori finanziati dal CER rappresentano un obiettivo chiaro e illuminante per quanto riguarda la ricerca di frontiera in Europa, ne innalzano il profilo e la rendono più attraente per i migliori ricercatori a livello mondiale. Il prestigio di ospitare borsisti del CER e del relativo marchio d'eccellenza sono fattori che intensificano la concorrenza fra le università europee e le altre organizzazioni di ricerca per offrire le migliori condizioni ai ricercatori di punta. La capacità dei sistemi nazionali e dei singoli istituti di ricerca di attrarre e ospitare i vincitori delle borse del CER costituisce un parametro di riferimento che consente loro di valutare le rispettive forze e debolezze e di riformare di conseguenza le loro politiche e prassi. Il finanziamento del CER si aggiunge quindi ai continui sforzi a livello di Unione, nazionale e regionale per la riforma, lo sviluppo di capacità e il dispiegamento di tutto il potenziale e l'interesse del sistema europeo di ricerca.

Le grandi linee delle attività

L'attività fondamentale del CER consiste nel fornire finanziamenti attraenti di lungo termine per sostenere ricercatori d'eccellenza e le loro équipe di ricerca al fine di perseguire una ricerca innovativa, ad alto potenziale di guadagno e di rischio.I finanziamenti del CER sono assegnati secondo i ben consolidati principi illustrati in appresso. L'eccellenza scientifica è l'unico criterio in base al quale sono assegnati i finanziamenti del CER, che agisce su base ascendente senza priorità predeterminate. Le sovvenzioni del CER sono aperte a tutte le équipe di ricercatori, senza distinzione di età, sesso o provenienza, che lavorano in Europa. Il CER mira a stimolare una sana concorrenza in tutta Europa sulla base di procedure di valutazione solide, trasparenti e imparziali che tengono conto, in particolare, di possibili pregiudizi di genere.Il CER attribuisce una priorità particolare all'assistenza dei migliori ricercatori che iniziano l'attività con idee d'eccellenza per agevolare la transizione verso l'indipendenza grazie alla fornitura di un sostegno adeguato nella fase cruciale di avviamento o consolidamento della loro équipe o del loro programma di ricerca. Il CER continuerà inoltre a fornire livelli adeguati di sostegno ai ricercatori confermati.Il CER sostiene inoltre, secondo necessità, le nuove modalità di lavoro nel mondo scientifico dotate del potenziale di generare risultati innovativi e agevola l'esplorazione del potenziale innovativo sul piano commerciale e sociale della ricerca finanziata.Il CER mira dunque a dimostrare entro il 2020 che i migliori ricercatori partecipano ai concorsi del CER, che il finanziamento del CER ha prodotto pubblicazioni scientifiche dalla massima qualità e risultati di ricerca con un elevato potenziale d'impatto in ambito sociale ed economico e che il CER ha contribuito in modo significativo a rendere l'Europa un ambiente più interessante per i migliori scienziati del mondo. In particolare il CER mira a un miglioramento misurabile della quota dell'Unione dell'1 % mondiale delle pubblicazioni più citate. Mira inoltre a un sostanziale incremento del numero di ricercatori d'eccellenza finanziati provenienti da paesi terzi. Il CER condivide esperienze e migliori pratiche con agenzie regionali e nazionali di finanziamento della ricerca al fine di promuovere il sostegno ai ricercatori d'eccellenza. Inoltre il CER rafforza ulteriormente la visibilità dei suoi programmi.Il consiglio scientifico del CER osserva costantemente le attività e le procedure di valutazione del CER e valuta le migliori modalità per conseguire i suoi obiettivi per mezzo di regimi di sovvenzioni volti a rafforzare l'efficacia, la chiarezza, la stabilità e la semplicità, sia per i richiedenti, sia nell'attuazione e nella gestione e, se del caso, al fine di affrontare esigenze nuove. Si tratta di tentare di sostenere e rifinire ulteriormente il sistema di valutazione inter pares di levatura mondiale del CER, che si fonda sul trattamento pienamente trasparente, equo e imparziale delle proposte, al fine di identificare l'eccellenza scientifica innovativa, le idee rivoluzionarie e i talenti, senza distinzione di genere, nazionalità, istituzione o età dei ricercatori. Infine il CER continua a condurre i propri studi strategici per preparare e sostenere le proprie attività, mantenere contatti stretti con la comunità scientifica, le agenzie regionali e nazionali di finanziamento e le altre parti interessate e per far sì che tali attività siano di complemento alla ricerca svolta ad altri livelli.Il CER assicurerà la trasparenza nella comunicazione delle sue attività e dei suoi risultati presso la comunità scientifica e il pubblico in generale e manterrà aggiornati i dati relativi ai progetti finanziati.";"";"H2020";"H2020-EU.1.";"";"";"2014-09-23 20:19:43";"664099" +"H2020-EU.1.3.3.";"fr";"H2020-EU.1.3.3.";"";"";"Encourager l'innovation par la fertilisation croisée des connaissances";"MSCA Knowledge";"

Encourager l'innovation par la fertilisation croisée des connaissances

L'objectif est de renforcer la collaboration internationale transfrontalière et intersectorielle en matière de recherche et d'innovation grâce à des échanges de personnel actif dans ces domaines, afin de pouvoir mieux relever les défis mondiaux.Les principales activités consistent à soutenir les échanges de personnel actif dans la recherche et l'innovation dans le cadre d'un partenariat regroupant universités, institutions de recherche, infrastructures de recherche, entreprises, PME et autres groupements socioéconomiques, au niveau tant européen que mondial. Il s'agira également, dans ce cadre, de promouvoir la coopération avec les pays tiers.";"";"H2020";"H2020-EU.1.3.";"";"";"2014-09-22 20:39:32";"664115" +"H2020-EU.1.3.3.";"pl";"H2020-EU.1.3.3.";"";"";"Stymulowanie innowacji poprzez proces wzajemnej inspiracji w dziedzinie wiedzy";"MSCA Knowledge";"

Stymulowanie innowacji poprzez proces wzajemnej inspiracji w dziedzinie wiedzy

Celem jest wzmocnienie międzynarodowej współpracy transgranicznej i międzysektorowej w dziedzinie badań naukowych i innowacji poprzez wymianę personelu z dziedziny badań naukowych i innowacji z myślą o skuteczniejszym stawieniu czoła globalnym wyzwaniom.Kluczowe działania polegają na wspieraniu wymian personelu z dziedziny badań naukowych i innowacji w ramach partnerstw uniwersytetów, instytucji badawczych, infrastruktury badawczej, przedsiębiorstw, MŚP i innych podmiotów społeczno-gospodarczych w Europie i na całym świecie. Będzie to obejmować promowanie współpracy z państwami trzecimi.";"";"H2020";"H2020-EU.1.3.";"";"";"2014-09-22 20:39:32";"664115" +"H2020-EU.1.3.3.";"en";"H2020-EU.1.3.3.";"";"";"Stimulating innovation by means of cross-fertilisation of knowledge";"MSCA Knowledge";"

Stimulating innovation by means of cross-fertilisation of knowledge

The goal is to reinforce international cross-border and cross-sector collaboration in research and innovation by means of exchanges of research and innovation personnel in order to be able to face global challenges better.Key activities shall be to support exchanges of R&I staff among a partnership of universities, research institutions, research infrastructures, businesses, SMEs and other socio-economic groups, both within Europe and worldwide. This will include fostering cooperation with third countries.";"";"H2020";"H2020-EU.1.3.";"";"";"2014-09-22 20:39:32";"664115" +"H2020-EU.1.3.3.";"de";"H2020-EU.1.3.3.";"";"";"Innovationsanreize durch die gegenseitige Bereicherung mit Wissen";"MSCA Knowledge";"

Innovationsanreize durch die gegenseitige Bereicherung mit Wissen

Ziel ist die Stärkung der internationalen grenz- und sektorübergreifenden Zusammenarbeit in Forschung und Innovation durch den Austausch von Forschungs- und Innovationspotenzial, um die globalen Herausforderungen besser bewältigen zu können.Hierzu kommt es auf den Austausch von FuI-Personal im Rahmen einer Partnerschaft zwischen Hochschulen, Forschungseinrichtungen und -infrastrukturen, Unternehmen, KMU und anderen sozioökonomischen Gruppen innerhalb Europas und darüber hinaus an. Hierunter fällt auch die Förderung der Zusammenarbeit mit Drittländern.";"";"H2020";"H2020-EU.1.3.";"";"";"2014-09-22 20:39:32";"664115" +"H2020-EU.1.3.3.";"es";"H2020-EU.1.3.3.";"";"";"Estimular la innovación mediante la fertilización cruzada de conocimientos";"MSCA Knowledge";"

Estimular la innovación mediante la fertilización cruzada de conocimientos

El objetivo es reforzar la colaboración internacional intersectorial y transfronteriza en la investigación y la innovación mediante intercambios de personal investigador e innovador para poder afrontar mejor los retos globales.Las actividades fundamentales serán de apoyo a los intercambios de personal investigador e innovador entre una asociación de universidades, centros de investigación, infraestructuras de investigación, empresas, PYME y otros grupos socioeconómicos, dentro de Europa y en todo el mundo. Se incluirá el fomento de la cooperación con terceros países.";"";"H2020";"H2020-EU.1.3.";"";"";"2014-09-22 20:39:32";"664115" +"H2020-EU.1.3.3.";"it";"H2020-EU.1.3.3.";"";"";"Promuovere l'innovazione attraverso l'arricchimento reciproco delle conoscenze";"MSCA Knowledge";"

Promuovere l'innovazione attraverso l'arricchimento reciproco delle conoscenze

L'obiettivo è rafforzare la collaborazione internazionale transfrontaliera e intersettoriale nella ricerca e nell'innovazione per mezzo di scambi di personale della ricerca e dell'innovazione, al fine di affrontare meglio le sfide globali.Le attività principali sostengono gli scambi di personale nel settore R&I per mezzo di un partenariato fra università, istituti di ricerca, infrastrutture di ricerca, imprese, PMI e altri gruppi socioeconomici in Europa e nel mondo. Ciò comprenderà lo stimolo alla cooperazione con i paesi terzi.";"";"H2020";"H2020-EU.1.3.";"";"";"2014-09-22 20:39:32";"664115" +"H2020-EU.3.3.";"es";"H2020-EU.3.3.";"";"";"RETOS DE LA SOCIEDAD - Energía segura, limpia y eficiente";"Energy";"

RETOS DE LA SOCIEDAD - Energía segura, limpia y eficiente

Objetivo específico

El objetivo específico es hacer la transición hacia un sistema energético fiable, asequible, que goce de aceptación pública, sostenible y competitivo, con el propósito de reducir la dependencia de los combustibles fósiles en un contexto de creciente escasez de recursos, aumento de las necesidades de energía y cambio climático.La Unión se propone reducir las emisiones de gases de efecto invernadero en un 20 % por debajo de los niveles de 1990 para 2020, con una reducción adicional del 80 - 95 % para 2050. Además, las energías renovables deberían cubrir el 20 % de consumo de energía final en 2020, en combinación con el objetivo de eficiencia energética del 20 %. Para alcanzar estos objetivos se requiere una revisión del sistema energético que combine el desarrollo de alternativas a los combustibles fósiles con la seguridad energética y la asequibilidad, a la vez que se refuerza la competitividad económica de Europa. Actualmente, Europa se encuentra lejos de este objetivo global. El 80 % del sistema energético europeo se basa aún en los combustibles fósiles, y este sector produce el 80 % del total de emisiones de gases de efecto invernadero de la Unión. Con el fin de alcanzar los objetivos a largo plazo de la Unión en materia de cambio climático y energía, es conveniente aumentar la porción del presupuesto destinada a las energías renovables, la eficiencia energética al nivel de los usuarios finales, redes inteligentes y almacenamiento de energía en relación con los porcentajes destinados a ello en el Séptimo Programa Marco, así como aumentar el presupuesto destinado al programa ""Energía Inteligente - Europa"" en el marco del Programa Marco para la Innovación y la Competitividad (2007-2013). La asignación total para dichas actividades procurará alcanzar al menos el 85 % del presupuesto destinado a este reto de la sociedad. Cada año se dedica un 2,5 % del PIB (producto interior bruto) de la Unión a las importaciones de energía, y es probable que esta cifra se incremente. Esta tendencia daría lugar a una dependencia total de las importaciones de petróleo y gas en 2050. Enfrentados a la volatilidad de los precios de la energía en el mercado mundial, inquietos por la seguridad del abastecimiento, la industria y los consumidores europeos gastan en energía una proporción cada vez mayor de sus ingresos. Las ciudades europeas representan entre el 70 % y el 80 % del consumo de energía total de la Unión y aproximadamente la misma proporción de emisiones de gases de efecto invernadero.La hoja de ruta hacia una economía competitiva de baja emisión de carbono en 2050 sugiere que las reducciones concretas de las emisiones de gases de efecto invernadero deberán obtenerse en gran medida dentro del territorio de la Unión. Esto supondría reducir las emisiones de CO2 para 2050 en más de un 90 % en el sector eléctrico, más de un 80 % en la industria, al menos un 60 % en el transporte y un 90 % aproximadamente en el sector residencial y de servicios. La hoja de ruta también pone de manifiesto que, inter alia, el gas natural, combinado con el uso de tecnologías de captura y almacenamiento de carbono, puede contribuir a la transformación del sector energético a corto y medio plazo.Para lograr estas ambiciosas reducciones, deben realizarse inversiones significativas en investigación, desarrollo, demostración y despliegue en el mercado, a precios asequibles, sobre tecnologías y servicios energéticos eficientes, seguros, protegidos, fiables y de baja emisión de carbono, inclusive el almacenamiento de electricidad y el despliegue de sistemas energéticos a pequeña escala y a microescala, Ello deberá ir acompañado de soluciones no tecnológicas del lado tanto de la oferta como de la demanda, por ejemplo poniendo en marcha procesos participativos e integrando a los consumidores. Todo ello debe formar parte de una política integrada y sostenible de baja emisión de carbono, que incluya el dominio de las tecnologías facilitadoras esenciales, en particular soluciones de TIC y fabricación, transformación y materiales avanzados. El objetivo es elaborar y producir unas tecnologías y servicios energéticos eficientes, inclusive la integración de las energías renovables, que puedan ser objeto de amplia difusión en los mercados europeos e internacionales y establecer sistemas inteligentes de gestión de la demanda basados en un mercado de comercio de energía abierto y transparente y unos sistemas inteligentes de gestión de la eficiencia energética.

Justificación y valor añadido de la Unión

Las tecnologías y soluciones nuevas deben competir en costes y fiabilidad con unos sistemas energéticos altamente optimizados, con operadores y tecnologías bien asentados. La investigación y la innovación son vitales para que estas fuentes de energía nuevas, más limpias, con bajas emisiones de carbono y más eficientes resulten comercialmente atractivas en la escala necesaria. Ni la industria por sí sola, ni los Estados miembros individualmente podrán asumir los costes y riesgos, dado que los principales motores (transición a una economía de baja emisión de carbono, suministro de energía seguro y asequible) están fuera del mercado.Acelerar este desarrollo requerirá un planteamiento estratégico a nivel de la Unión, que abarque la oferta y demanda de energía y su uso en edificios, servicios, uso doméstico, transportes y cadenas de valor industrial. Ello implicará el alineamiento de recursos a través de la Unión, incluidos los fondos de la política de cohesión, en particular a través de las estrategias nacionales y regionales para una especialización inteligente, los regímenes de comercio de derechos de emisión, la contratación pública y otros mecanismos de financiación. También requerirá políticas reguladoras y de despliegue en favor de las energías renovables y la eficiencia energética, asistencia técnica particularizada y desarrollo de capacidades, a fin de eliminar los obstáculos no tecnológicos.El Plan Estratégico Europeo de Tecnología Energética (Plan EETE) ofrece tal planteamiento estratégico y proporciona una agenda a largo plazo para abordar los principales escollos con que topa la innovación en las tecnologías energéticas en las fases de investigación puntera e I+D/prueba del concepto y en la fase de demostración, cuando las empresas buscan capital para financiar grandes proyectos pioneros e iniciar el proceso de despliegue en el mercado. No se dejarán de lado otras tecnologías emergentes con potencial de alterar la situación actual.Los recursos necesarios para aplicar el Plan EETE en su totalidad se han cifrado en 8 000 millones de euros anuales durante los próximos 10 años. Este importe excede con mucho de la capacidad individual de los Estados miembros o de las partes interesadas de la investigación y la industria. Hacen falta inversiones en investigación e innovación a nivel de la Unión, combinadas con la movilización de los esfuerzos en toda Europa en forma de ejecución conjunta y puesta en común de la capacidad y el riesgo. La financiación por la Unión de la investigación e innovación sobre energía, por lo tanto, complementará las actividades de los Estados miembros, centrándose en las tecnologías punta y las actividades que tengan un claro valor añadido europeo, y en particular en las que presenten un elevado potencial para la movilización de recursos nacionales y la creación de empleo en Europa. La acción a nivel de la Unión apoyará también a los programas a largo plazo, de alto riesgo y de elevado coste, fuera del alcance de los Estados miembros por separado, agrupará los esfuerzos por reducir los riesgos de las inversiones en actividades a gran escala, como la demostración industrial, y desarrollará soluciones energéticas interoperables a escala europea.La ejecución del Plan EETE como pilar para la investigación y la innovación de la política energética europea reforzará la seguridad del abastecimiento de la Unión y la transición a una economía de baja emisión de carbono, ayudará a vincular los programas de investigación e innovación con inversiones transeuropeas y regionales en infraestructura energética y aumentará la disposición de los inversores a liberar capital para proyectos con largos plazos de ejecución y riesgos significativos asociados al mercado y a la tecnología. Creará oportunidades de innovación para empresas pequeñas y grandes y les ayudará a ser o seguir siendo competitivas a escala mundial, terreno en el que las oportunidades para las tecnologías energéticas son grandes y van en aumento.En la escena internacional, las medidas adoptadas a nivel de la Unión ofrecen una ""masa crítica"" para atraer el interés de otros líderes tecnológicos y fomentar asociaciones internacionales para alcanzar los objetivos de la Unión. Facilitarán a los socios internacionales la interacción con la Unión para montar una acción común cuando sea de interés y beneficio mutuo.Las actividades de este reto constituirán, por tanto, la espina dorsal tecnológica de la política climática y energética europea. También contribuirán al logro de la ""Unión por la innovación"" en el ámbito de la energía y de los objetivos políticos esbozados en ""Una Europa que utilice eficazmente los recursos"", ""Una política industrial para la era de la mundialización"" y ""Una Agenda Digital para Europa"".Las actividades de investigación e innovación sobre la energía nuclear de fusión y de fisión se llevan a cabo en el programa Euratom establecido en el Reglamento (Euratom) N° 1314/2013. Cuando proceda, deben preverse posibles sinergias entre el reto ""energía segura, limpia y eficiente"" y el programa Euratom.

Líneas generales de las actividades

(a) Reducir el consumo de energía y la huella de carbono mediante un uso inteligente y sostenible use

Las actividades se centrarán en la investigación y ensayo a escala real de nuevos conceptos, soluciones no tecnológicas, componentes tecnológicos más eficientes, socialmente aceptables y asequibles y sistemas con inteligencia incorporada, a fin de poder gestionar la energía en tiempo real en ciudades y territorios y lograr edificios con emisiones cercanas a cero o que generen más energía de la que consumen, edificios, ciudades y barrios modernizados, calefacción y refrigeración renovables, industrias altamente eficientes y adopción masiva por parte de empresas, particulares, comunidades y ciudades de soluciones y servicios de eficiencia energética y de ahorro de energía.

(b) Suministro de electricidad a bajo coste y de baja emisión de carbono

Las actividades se centrarán en la investigación, desarrollo y demostración a escala real de energías renovables innovadoras, centrales eléctricas de combustibles fósiles eficiente, flexibles y con baja utilización de carbono y las tecnologías de captura y almacenamiento de carbono, o de reutilización del CO2, que ofrezcan tecnologías de mayor escala, inferior coste y respetuosas del medio ambiente, con mayor eficiencia de conversión y mayor disponibilidad para mercados y entornos operativos diferentes.

(c) Combustibles alternativos y fuentes de energía móviles

Las actividades se centrarán en la investigación, desarrollo y demostración a escala real de tecnologías y cadenas de valor para hacer más competitivas y sostenibles la bioenergía y otros combustibles alternativos, la cogeneración, el transporte de superficie, marítimo y aéreo con potencial para una conversión energética más eficaz, para reducir el tiempo de llegada al mercado de las pilas de combustible e hidrógeno y aportar nuevas opciones que presenten potencial a largo plazo para alcanzar la madurez.

(d) Una red eléctrica europea única e inteligente

Las actividades se centrarán en la investigación, desarrollo y demostración a escala real de nuevas tecnologías de red energética inteligente, de tecnologías de apoyo y de compensación que permiten una mayor flexibilidad y eficiencia, incluidas las centrales eléctricas tradicionales el almacenamiento flexible de energía, los sistemas y los diseños de mercado para planificar, supervisar, controlar y explotar con seguridad las redes interoperables incluidos aspectos de normalización, en un mercado abierto, descarbonizado, medioambientalmente sostenible y resistente al cambio climático y competitivo, en condiciones normales y de emergencia.

(e) Nuevos conocimientos y tecnologías

Las actividades se centrarán en la investigación multidisciplinaria de tecnologías energéticas limpias, seguras y sostenibles (incluidas acciones visionarias) y la ejecución conjunta de programas de investigación paneuropeos e instalaciones de categoría mundial.

(f) Solidez en la toma de decisiones y compromiso público

Las actividades se centrarán en el desarrollo de herramientas, métodos, modelos y supuestos de evolución futura para un apoyo a las políticas sólido y transparente, incluidas actividades relativas al compromiso del público, la participación del usuario, el impacto medioambiental y la evaluación de la sostenibilidad, mejorando la comprensión de las tendencias y perspectivas socioeconómicas relacionadas con la energía.

(g) Absorción por el mercado de la innovación energética - explotación del Programa Energía Inteligente - Europa Europe

Las actividades se basarán y potenciarán las ya emprendidas en el marco del programa Iniciativa Energía inteligente - Europa (EIE). Las actividades se centrarán en la innovación aplicada y la promoción de normas destinadas a facilitar la absorción por el mercado de las tecnologías y servicios energéticos, a combatir los obstáculos no tecnológicos y a acelerar la aplicación eficaz en relación con los costes de las políticas energéticas de la Unión. Se prestará atención igualmente a la innovación para el empleo inteligente y sostenible de las tecnologías existentes.";"";"H2020";"H2020-EU.3.";"";"";"2014-09-22 20:45:54";"664321" +"H2020-EU.3.3.";"fr";"H2020-EU.3.3.";"";"";"DÉFIS DE SOCIÉTÉ - Énergies sûres, propres et efficaces";"Energy";"

DÉFIS DE SOCIÉTÉ - Énergies sûres, propres et efficaces

Objectif spécifique

L'objectif spécifique est, compte tenu de la raréfaction des ressources, de l'augmentation des besoins en énergie et du changement climatique, d'assurer le passage à un système énergétique fiable, financièrement abordable, accepté de tous, durable et compétitif, qui vise à réduire la dépendance à l'égard des combustibles fossiles.L'Union a pour objectif de réduire ses émissions de gaz à effet de serre de 20 % par rapport à leur niveau de 1990 d'ici 2020, et de 80 à 95 % par rapport à ce même niveau d'ici 2050. Les énergies renouvelables devraient par ailleurs couvrir 20 % de la consommation d'énergie finale en 2020, un objectif de 20 % ayant été fixé en matière d'efficacité énergétique. La réalisation de ces objectifs nécessitera de revoir en profondeur le système énergétique de manière à combiner faibles émissions de carbone et développement de solutions de remplacement aux combustibles fossiles, sécurité énergétique et prix abordables, tout en renforçant la compétitivité économique de l'Europe. L'Europe est encore loin de cet objectif global: le système énergétique européen repose encore à 80 % sur les combustibles fossiles, et le secteur produit 80 % de l'ensemble des émissions de gaz à effet de serre de l'Union. En vue d'atteindre les objectifs à long terme de l'Union dans le domaine du climat et de l'énergie, il convient d'augmenter, par rapport au septième programme-cadre, la part du budget consacrée aux énergies renouvelables, à l'efficacité énergétique au niveau de l'utilisation finale, aux réseaux intelligent et aux activités de stockage de l'énergie et d'augmenter le budget alloué à la commercialisation des activités d'innovation énergétique menées dans le cadre du programme «Énergie intelligente - Europe» au titre du programme-cadre pour l'innovation et la compétitivité (2007-2013). Il y a lieu que l'enveloppe totale allouée à ces activités atteigne au moins 85 % du budget prévu pour ce défi de société. Les importations d'énergie représentent chaque année 2,5 % du PIB de l'Union, et cette proportion devrait encore augmenter. Une telle tendance entraînerait une dépendance totale aux importations de pétrole et de gaz d'ici 2050. Dans un contexte de volatilité des prix de l'énergie sur les marchés mondiaux et de préoccupations relatives à la sécurité de l'approvisionnement, les entreprises et les consommateurs européens consacrent une part croissante de leurs revenus à l'énergie. Les villes européennes sont responsables de 70 à 80 % de la consommation totale d'énergie et des émissions de gaz à effet de serre dans l'Union.La feuille de route vers une économie compétitive à faible intensité de carbone à l'horizon 2050 suggère que les objectifs de réductions des émissions de gaz à effet de serre devront être en grande partie réalisés sur le territoire de l'Union. Il conviendrait pour ce faire de réduire les émissions de CO2 de plus de 90 % d'ici 2050 dans le secteur de l'électricité, de plus de 80 % dans l'industrie, d'au moins 60 % dans les transports et d'environ 90 % dans le secteur résidentiel et les services. La feuille de route montre également que le gaz naturel, notamment, peut contribuer, à court et à moyen terme, à la transformation du système énergétique, en combinaison avec le recours aux techniques de captage et de stockage du carbone.Pour parvenir à des réductions aussi ambitieuses, il convient d'investir massivement dans la recherche, le développement, la démonstration et le déploiement commercial, à des prix abordables, de technologies et de services énergétiques à faibles émissions de carbone qui soient efficaces, sûrs, sécurisés et fiables, y compris pour le stockage de gaz et d'électricité et le déploiement de petits ou de micro-systèmes énergétiques. Ces investissements doivent aller de pair avec des solutions non technologiques portant à la fois sur l'offre et sur la demande, notamment en lançant des processus participatifs et en intégrant les consommateurs. Toutes ces mesures doivent s'inscrire dans une politique intégrée et durable en faveur d'une réduction des émissions de carbone, qui inclut entres autres la maîtrise des technologies clés génériques, et notamment des solutions fondées sur les TIC ainsi que des matériaux et des systèmes de fabrication et de transformation avancés. L'objectif est de développer et de produire des technologies et des services énergétiques efficaces, y compris l'intégration des énergies renouvelables, qui puissent être adoptés à grande échelle sur les marchés européens et internationaux, ainsi que d'instaurer une gestion intelligente de la demande, fondée sur un marché de l'énergie ouvert et transparent et sur des systèmes intelligents et sûrs de gestion de l'efficacité énergétique.

Justification et valeur ajoutée de l'Union

Les technologies et solutions nouvelles doivent affronter la concurrence, du point de vue des coûts et de la fiabilité, de systèmes énergétiques dont les acteurs en place et les technologies sont solidement implantés. La recherche et l'innovation sont essentielles pour rendre ces sources d'énergie nouvelles, plus propres, plus efficaces et à faibles émissions de carbone commercialement attractives à l'échelle requise. Ni l'industrie seule, ni les États membres individuellement, ne sont en mesure de supporter les coûts et les risques de telles innovations, dont les principaux moteurs (transition vers une économie à faible intensité de carbone, fourniture d'une énergie sûre à un prix abordable) se situent en dehors du marché.L'accélération du processus nécessitera une approche stratégique au niveau de l'Union, couvrant la fourniture, la demande et l'utilisation de l'énergie dans les bâtiments et les services, pour l'usage privé ainsi que dans les transports et les chaînes de valeur industrielles. Il conviendra d'harmoniser les ressources qui y sont consacrées au sein de l'Union, dont les fonds de la politique de cohésion, notamment au moyen des stratégies nationales et régionales en faveur de la spécialisation intelligente, des systèmes d'échange de quotas d'émissions, des achats publics et autres mécanismes de financement. Il s'agira également de légiférer et d'adopter des stratégies de déploiement pour soutenir les énergies renouvelables et l'efficacité énergétique, de fournir une assistance technique adaptée et de renforcer les capacités afin de lever les barrières non technologiques.Le plan stratégique pour les technologies énergétiques (plan SET) offre une telle approche stratégique. Il établit un programme à long terme destiné à lever les principaux obstacles à l'innovation que rencontrent les technologies énergétiques aux stades de la recherche exploratoire et de la recherche et développement/de la validation de concepts, ainsi qu'au stade de la démonstration, lorsque les entreprises cherchent des capitaux pour financer des projets inédits et de grande ampleur et pour entamer la phase de déploiement commercial. Les technologies émergentes offrant des possibilités radicalement nouvelles ne seront pas négligées.Les ressources nécessaires à la mise en œuvre intégrale du plan SET ont été évaluées à 8 milliards d'euros par an au cours des dix prochaines années, ce qui est largement supérieur à la capacité individuelle des États membres ou à celle des seuls acteurs de la recherche et de l'industrie. Il convient d'investir dans la recherche et l'innovation au niveau de l'Union et de mobiliser les bonnes volontés à l'échelle de l'Europe, au moyen d'une mise en œuvre conjointe et d'un partage des risques et des capacités. Le financement par l'Union de la recherche et de l'innovation en matière d'énergie complète donc les activités des États membres en se concentrant sur les technologies de pointe et les activités qui présentent une réelle valeur ajoutée européenne, et notamment celles qui sont fortement susceptibles de mobiliser des ressources nationales et de créer des emplois en Europe. Les actions au niveau de l'Union soutiennent également les programmes à haut risque, à coût élevé et à long terme qui ne sont pas à la portée d'un État membre seul; elles rassemblent les initiatives visant à réduire les risques liés à l'investissement dans le cadre d'entreprises d'envergure, telles que des activités de démonstration industrielle, et elles développent des solutions énergétiques interopérables de dimension européenne.La mise en œuvre du plan SET en tant que pilier de la politique énergétique européenne consacré à la recherche et à l'innovation renforcera la sécurité d'approvisionnement de l'Union et soutiendra la transition vers une économie à faible intensité de carbone; elle contribuera à établir des liens entre les programmes de recherche et d'innovation et les investissements transeuropéens et régionaux dans les infrastructures énergétiques, et elle encouragera les investisseurs à financer des projets à long terme présentant des risques significatifs sur le plan de la technologie et du marché. Elle donnera aux petites et aux grandes entreprises des possibilités d'innover et les aidera à devenir ou à rester compétitives au niveau mondial, où les perspectives sont vastes et de plus en plus nombreuses pour les technologies énergétiques.Sur la scène internationale, les actions entreprises au niveau de l'Union fournissent une «masse critique» qui permet de susciter l'intérêt d'autres acteurs de premier plan du secteur des technologies et d'encourager les partenariats internationaux en vue de réaliser les objectifs de l'Union. Elles donneront aux partenaires internationaux la possibilité d'interagir plus facilement avec l'Union afin d'organiser des actions communes lorsque chacune des parties y trouve un intérêt et en retire un avantage.Les activités relevant de ce défi de société formeront donc l'ossature technologique de la politique énergétique et climatique européenne. Elles contribueront par ailleurs à réaliser l'initiative phare «L'Union de l'innovation» dans le domaine de l'énergie, ainsi que les objectifs stratégiques définis dans les initiatives phares «Une Europe efficace dans l'utilisation des ressources», «Une politique industrielle intégrée à l'ère de la mondialisation» et «Une stratégie numérique pour l'Europe».Les activités de recherche et d'innovation relatives à l'énergie issue de la fission et de la fusion nucléaires sont menées au titre du programme Euratom établi par le règlement (Euratom) no 1314/2013. Le cas échéant, il faudrait réfléchir aux synergies possibles entre ce défi de société et le programme Euratom.

Grandes lignes des activités

(a) Réduire la consommation d'énergie et l'empreinte carbone en utilisant l'énergie de manière intelligente et durable

Les activités se concentrent sur la recherche et les essais en grandeur réelle de nouveaux concepts, de solutions non technologiques, ainsi que de composants technologiques et de systèmes avec technologies intelligentes intégrées qui soient plus efficaces, socialement acceptables et financièrement abordables, afin de permettre une gestion énergétique en temps réel pour des bâtiments, des immeubles reconditionnés, des villes et des quartiers nouveaux ou existants à émissions quasi nulles, à consommation d'énergie quasi nulle et à énergie positive, des systèmes de chauffage et de refroidissement utilisant les énergies renouvelables, des industries très performantes et une adoption massive, par les entreprises, les particuliers, les collectivités et les villes, de solutions et de services assurant l'efficacité énergétique et permettant des économies d'énergie.

(b) Un approvisionnement en électricité à faible coût et à faibles émissions de carbone

Les activités se concentrent sur la recherche, le développement et la démonstration en grandeur réelle d'énergies renouvelables innovantes, de centrales à combustible fossile efficaces, souples et à faible émission de carbone et de technologies de captage et de stockage du carbone ou de recyclage du CO2 offrant des technologies à plus grande échelle, à moindre coût et respectueuses de l'environnement, qui présentent des rendements de conversion plus élevés et une plus grande disponibilité pour différents marchés et environnements d'exploitation.

(c) Des combustibles de substitution et sources d'énergie mobiles

Les activités se concentrent sur la recherche, le développement et la démonstration en grandeur réelle de technologies et de chaînes de valeur visant à renforcer la compétitivité et la durabilité des bioénergies et des autres combustibles de substitution pour l'électricité et le chauffage, ainsi que les transports terrestres, maritimes et aériens offrant des possibilités de conversion énergétique plus efficace, à réduire les délais de mise sur le marché des piles à hydrogène et à combustible et à proposer de nouvelles possibilités présentant des perspectives de maturité à long terme.

(d) Un réseau électrique européen unique et intelligent

Les activités se concentrent sur la recherche, le développement et la démonstration en grandeur réelle de nouvelles technologies de réseau énergétique intelligent, de technologies d'appoint et de compensation permettant une plus grande souplesse et une plus grande efficacité, notamment des centrales électriques classiques, de systèmes souples de stockage de l'énergie et des modèles de marché devant permettre de planifier, surveiller, contrôler et exploiter en toute sécurité des réseaux interopérables, y compris en ce qui concerne les questions de normalisation, sur un marché ouvert, compétitif, décarboné, respectueux de l'environnement et capable de s'adapter au changement climatique, aussi bien dans des conditions normales qu'en situation d'urgence.

(e) Des connaissances et technologies nouvelles

Les activités se concentrent sur la recherche pluridisciplinaire relative à des technologies énergétiques propres, sûres et durables (dont les actions visionnaires) et sur la mise en œuvre conjointe de programmes de recherche paneuropéens et l'exploitation commune d'installations de niveau mondial.

(f) La solidité du processus décisionnel et l'implication du public

Les activités mettent l'accent sur le développement d'outils, de méthodes, de modèles et de scénarios prospectifs permettant d'apporter aux politiques un soutien ferme et transparent, y compris des activités relatives à la mobilisation du public, aux effets sur l'environnement, à la participation des utilisateurs et à l'évaluation de la durabilité, permettant une meilleure compréhension des tendances et des perspectives socio-économiques dans le domaine énergétique.

(g) La commercialisation des innovations dans le domaine de l'énergie en s'appuyant sur le programme «Énergie intelligente - Europe»

Les activités s'appuient sur celles menées dans le cadre du programme «Énergie intelligente - Europe» et les renforcent. Elles se concentrent sur l'innovation appliquée et la promotion des normes, afin de faciliter la commercialisation des technologies et services énergétiques, de lever les obstacles non technologiques et d'assurer une mise en œuvre plus rapide et au meilleur coût des politiques énergétiques de l'Union. Il sera également tenu compte de l'innovation pour une utilisation intelligente et durable des technologies existantes.";"";"H2020";"H2020-EU.3.";"";"";"2014-09-22 20:45:54";"664321" +"H2020-EU.3.3.";"pl";"H2020-EU.3.3.";"";"";"WYZWANIA SPOŁECZNE - Bezpieczna, czysta i efektywna energia";"Energy";"

WYZWANIA SPOŁECZNE - Bezpieczna, czysta i efektywna energia

Cel szczegółowy

Celem szczegółowym jest zapewnienie przejścia do niezawodnego, przystępnego cenowo, społecznie akceptowanego, zrównoważonego i konkurencyjnego systemu energetycznego, z zamiarem zmniejszenia zależności od paliw kopalnych w obliczu malejącej ilości zasobów, rosnącego zapotrzebowania na energię i zmiany klimatu.Do 2020 r. Unia planuje ograniczyć emisje gazów cieplarnianych o 20% w stosunku do poziomu z 1990 r., a do 2050 r. o kolejne 80–95%. Ponadto w 2020 r. 20% końcowego zużycia energii powinno pochodzić z zasobów odnawialnych, a jednocześnie ma zostać zrealizowany cel efektywności energetycznej wynoszący 20%. Osiągnięcie tych celów będzie wymagać przebudowy systemu energetycznego, prowadzącej do połączenia niskoemisyjnego profilu, opracowania rozwiązań alternatywnych wobec paliw kopalnych, bezpieczeństwa energetycznego i umiarkowanych cen, a zarazem wzmocnienia konkurencyjności gospodarczej Europy. Obecnie Europa jest daleka od osiągnięcia tego ogólnego celu. Europejski system energetyczny nadal polega w 80% na paliwach kopalnych, a sektor energetyczny jest źródłem 80% wszystkich emisji gazów cieplarnianych w UE. Dążąc do osiągnięcia długoterminowych celów Unii w zakresie klimatu i energii, należy zwiększyć przewidzianą w siódmym programie ramowym pulę środków w budżecie przeznaczoną na odnawialne źródła energii, efektywność końcowego wykorzystania energii, inteligentne sieci przesyłowe i magazynowanie energii i zwiększyć budżet na wprowadzanie innowacji energetycznych na rynek w ramach programu „Inteligentna energia dla Europy” realizowanego w obrębie Programu ramowego na rzecz konkurencyjności i innowacji (2007-2013). Cały przydział środków na te działania ma wynieść co najmniej 85% budżetu przewidzianego na to wyzwanie społeczne. Co roku 2,5% PKB Unii przeznacza się na import energii i przewiduje się, że wielkość ta wzrośnie. Do 2050 r. ta tendencja doprowadziłaby do całkowitego uzależnienia od importu ropy naftowej i gazu. Wobec zmienności cen energii na światowych rynkach oraz obaw dotyczących bezpieczeństwa dostaw europejski przemysł i konsumenci wydają coraz większą część swoich dochodów na energię. Udział europejskich miast w całkowitym zużyciu energii w Unii wynosi 70–80%, podobny jest też ich udział w emisjach gazów cieplarnianych.Plan działania prowadzący do przejścia na konkurencyjną gospodarkę niskoemisyjną do 2050 r. sugeruje, że na terytorium Unii konieczne będzie dokonanie dużych ukierunkowanych redukcji emisji gazów cieplarnianych. Oznacza to ograniczenie emisji CO2 do 2050 r. o ponad 90% w sektorze energetycznym, ponad 80% w przemyśle, co najmniej 60% w transporcie i ok. 90% w sektorze budynków mieszkalnych i w usługach. Plan działania wskazuje również, że do przekształcenia systemu energetycznego może przyczynić się – krótko- i średnioterminowo – m.in. gaz ziemny, w połączeniu z zastosowaniem technologii wychwytywania i składowania dwutlenku węgla.Te ambitne redukcje wymagają znacznych inwestycji w badania, rozwój, demonstracje oraz wprowadzenia na rynek po przystępnych cenach oszczędnych, bezpiecznych, niezawodnych i niskoemisyjnych technologii energetycznych i usług, w tym również technologii magazynowania gazu ziemnego i energii elektrycznej oraz systemów energetycznych na małą skalę i w skali mikro. Muszą się one łączyć z nietechnologicznymi rozwiązaniami zarówno od strony podaży, jak i od strony popytu, polegającymi m.in. na zainicjowaniu procesów uczestnictwa i integracji odbiorców. Wszystko to musi stanowić część zintegrowanej zrównoważonej polityki niskoemisyjnej, obejmującej opanowanie kluczowych technologii prorozwojowych, w szczególności rozwiązań ICT, a także zaawansowane procesy produkcji i przetwarzania oraz materiały. Celem jest wypracowanie i stworzenie efektywnych energetycznie technologii i usług, w tym integracja energii ze źródeł odnawialnych, które mogą znaleźć szerokie zastosowanie na rynkach europejskich i międzynarodowych, a także wprowadzenie inteligentnego zarządzania popytem poprzez otwarty i przejrzysty rynek handlu energią oraz bezpieczne inteligentne systemy zarządzania efektywnością energetyczną.

Uzasadnienie i unijna wartość dodana

Nowe technologie i rozwiązania muszą konkurować kosztami i niezawodnością z systemami energetycznymi operatorów zasiedziałych i z technologiami o ugruntowanej pozycji. Badania naukowe i innowacje mają zasadnicze znaczenie dla zapewnienia komercyjnej atrakcyjności tych nowych, bardziej ekologicznych, niskoemisyjnych i efektywniejszych źródeł energii w potrzebnej skali. Ani sam przemysł, ani działające indywidualnie państwa członkowskie nie są w stanie ponieść kosztów i ryzyka, którego główne czynniki (przejście do gospodarki niskoemisyjnej, zapewnienie przystępnej cenowo i bezpiecznej energii) znajdują się poza rynkiem.Przyspieszenie tego rozwoju wymaga strategicznego podejścia na poziomie Unii, obejmującego dostawy energii, zapotrzebowanie na nią i jej wykorzystywanie w budynkach, w świadczeniu usług, w gospodarstwach domowych, transporcie i produkcyjnych łańcuchach wartości. Będzie się to wiązać z dostosowaniem zasobów w całej Unii, włącznie z funduszami polityki spójności, w szczególności poprzez krajowe i regionalne strategie inteligentnej specjalizacji, systemy handlu uprawnieniami do emisji, zamówienia publiczne i inne mechanizmy finansowania. Wymagać to będzie również polityki w zakresie regulacji i wdrożenia, dotyczącej odnawialnych źródeł energii i efektywności energetycznej, dostosowanej do okoliczności pomocy technicznej oraz budowania zdolności w celu usunięcia barier nietechnologicznych.Takie strategiczne podejście oferuje europejski strategiczny plan w dziedzinie technologii energetycznych (plan EPSTE). Obejmuje on długoterminową agendę dotyczącą kluczowych utrudnień w zakresie innowacji, z którymi borykają się technologie energetyczne na etapie badań pionierskich oraz na etapie badawczo-rozwojowym/weryfikacji poprawności projektu, a także na etapie demonstracji, kiedy przedsiębiorstwa poszukują środków na sfinansowanie dużych, pierwszych w swoim rodzaju projektów i na rozpoczęcie procesu wprowadzania na rynek. Nowo pojawiające się technologie o sporym potencjale nie zostaną zaniedbane.Wielkość zasobów potrzebnych do pełnego wdrożenia planu EPSTE szacuje się na 8 mld EUR rocznie przez kolejnych 10 lat (12). Wykracza to znacznie poza zdolności poszczególnych państw członkowskich lub zainteresowanych podmiotów badawczych i przemysłowych. Potrzebne są inwestycje w badania naukowe i innowacje na poziomie Unii, połączone z mobilizacją wysiłków w całej Europie polegających na wdrażaniu oraz podziale ryzyka i zdolności. Finansowanie przez Unię badań naukowych i innowacji w zakresie energetyki ma zatem uzupełniać działania państw członkowskich, skupiając się na pionierskich technologiach i działaniach oferujących wyraźną unijną wartość dodaną, a w szczególności cechujących się dużym potencjałem wykorzystania zasobów krajowych i tworzenia miejsc pracy w Europie. Działania na poziomie UE mają również służyć wsparciu długoterminowych programów odznaczających się wysokim ryzykiem i dużymi kosztami, które są poza zasięgiem pojedynczych państw członkowskich, łączeniu wysiłków w celu ograniczenia ryzyka inwestycji w prowadzone na dużą skalę projekty, takie jak demonstracja przemysłowa, oraz rozwijaniu ogólnoeuropejskich, interoperacyjnych rozwiązań w dziedzinie energetyki.Wdrożenie planu EPSTE jako badawczo-innowacyjnego filaru polityki energetycznej UE wzmocni bezpieczeństwo dostaw w Unii, ułatwi przejście do gospodarki niskoemisyjnej oraz powiązanie programów w zakresie badań i innowacji z transeuropejskimi i regionalnymi inwestycjami w infrastrukturę energetyczną, a także zwiększy gotowość inwestorów do udostępniania kapitału na projekty o długim czasie realizacji i dużym ryzyku technologicznym i rynkowym. Plan ten stworzy możliwości innowacji dla małych i dużych przedsiębiorstw oraz pomoże im w zachowaniu konkurencyjności na arenie światowej, na której możliwości w zakresie technologii energetycznych są duże i ciągle rosną.W skali międzynarodowej działanie na poziomie Unii zapewnia masę krytyczną przyciągającą zainteresowanie innych liderów w dziedzinie technologii oraz sprzyja międzynarodowym partnerstwom, wspierającym osiągnięcie celów UE. Ułatwi ono partnerom międzynarodowym interakcje z Unią w celu przygotowania wspólnych działań związanych z obopólnymi korzyściami i wspólnymi interesami.Działania prowadzone w związku z tym wyzwaniem społecznym będą zatem stanowić technologiczny kręgosłup europejskiej polityki energetycznej i polityki przeciwdziałania zmianie klimatu. Przyczynią się również do wdrożenia inicjatywy przewodniej „Unia innowacji” w dziedzinie energetyki oraz celów strategicznych określonych w inicjatywach przewodnich „Europa efektywnie korzystająca z zasobów”, „Polityka przemysłowa w erze globalizacji” oraz „Europejska agenda cyfrowa”.Działania w zakresie badań naukowych i innowacji dotyczące rozszczepienia jądrowego i energii termojądrowej prowadzone są w ramach programu Euratom ustanowionego rozporządzeniem (Euratom) nr 1314/2013 W stosownych przypadkach należy przewidzieć możliwość synergii między tym wyzwaniem społecznym a programem Euratom.

Ogólne kierunki działań

(a) Ograniczenie zużycia energii i śladu węglowego poprzez inteligentne i zrównoważone użytkowanie

Działania mają skupiać się na badaniach naukowych i prowadzonych w pełnej skali testach nowych koncepcji, rozwiązaniach nietechnologicznych, na bardziej efektywnych, akceptowanych społecznie i przystępnych cenowo komponentach technologicznych oraz systemach z wbudowaną inteligencją, co ma umożliwić zarządzanie energią w czasie rzeczywistym w nowych i istniejących budynkach niskoemisyjnych, o niemal zerowym zużyciu energii i produkujących więcej energii niż wynosi jej zużycie, w przebudowywanych budynkach, miastach i dzielnicach, na ogrzewaniu i chłodzeniu z wykorzystaniem energii odnawialnej, wysoce oszczędnym przemyśle oraz masowym wprowadzeniu efektywnych energetycznie i energooszczędnych rozwiązań i usług przez przedsiębiorstwa, osoby fizyczne, społeczności i miasta.

(b) Zaopatrzenie w tanią, niskoemisyjną energię elektryczną

Działania mają skupiać się na badaniach, rozwoju i pełnoskalowej demonstracji innowacyjnych odnawialnych źródeł energii, efektywnych, elastycznych i niskoemisyjnych elektrowni na paliwa kopalne oraz technologiach wychwytywania i składowania dwutlenku węgla lub ponownego wykorzystania CO2, przy większej skali i niższym koszcie, bezpiecznych dla środowiska oraz cechujących się większą efektywnością konwersji i dostępnością w różnych środowiskach rynkowych i operacyjnych.

(c) Paliwa alternatywne i mobilne źródła energii

Działania mają skupiać się na badaniach, rozwoju i pełnoskalowej demonstracji technologii oraz łańcuchów wartości, tak by bioenergia i inne paliwa alternatywne stały się bardziej konkurencyjne i zrównoważone do celów produkcji energii elektrycznej i cieplnej oraz transportu lądowego, morskiego i lotniczego, z możliwością efektywniejszej konwersji energii, co pozwoli skrócić czas wprowadzenia na rynek ogniw wodorowych i paliwowych oraz znaleźć nowe możliwości charakteryzujące się długim czasem realizacji potencjału.

(d) Jednolita inteligentna europejska sieć elektroenergetyczna

Działania mają skupiać się na badaniach, rozwoju i pełnoskalowej demonstracji nowych technologii inteligentnych sieci energetycznych, technologii zabezpieczania i równoważenia umożliwiających większą elastyczność i efektywność, takich jak m.in. konwencjonalne elektrownie, elastyczne magazynowanie energii, systemy i mechanizmy rynkowe służące planowaniu, monitorowaniu, kontrolowaniu i bezpiecznej eksploatacji interoperacyjnych sieci – wraz z kwestiami dotyczącymi normalizacji – w otwartym, niskoemisyjnym, zrównoważonym z punktu widzenia środowiska, odpornym na zmianę klimatu i konkurencyjnym rynku, w normalnych i nadzwyczajnych warunkach.

(e) Nowa wiedza i technologie

Działania mają skupiać się na multidyscyplinarnych badaniach naukowych w zakresie czystych, bezpiecznych i zrównoważonych technologii energetycznych (w tym na działaniach wizjonerskich) i wspólnej realizacji ogólnoeuropejskich programów badawczych oraz tworzeniu światowej klasy obiektów.

(f) Solidne procesy decyzyjne i udział społeczeństwa

Działania mają skupiać się na wypracowaniu narzędzi, metod, modeli oraz długofalowych i przyszłościowych scenariuszy przewidujących solidne i przejrzyste wsparcie polityczne, w tym na działaniach dotyczących udziału społeczeństwa i zaangażowania użytkowników, oddziaływania na środowisko i ocen zrównoważoności, które pozwolą lepiej zrozumieć związane z energią tendencje i perspektywy społeczno-gospodarcze.

(g) Wprowadzanie na rynek innowacji w zakresie energii – korzystanie z programu „Inteligentna energia dla Europy”

Działania mają nawiązywać do działań podjętych w ramach programu „Inteligentna energia dla Europy” oraz stanowić ich uzupełnienie. Mają skupiać się na stosowaniu innowacji i promowaniu standardów, aby ułatwić wprowadzanie na rynek nowych technologii i usług w zakresie energii w celu wyeliminowania barier innych niż technologiczne oraz przyspieszenia racjonalnej pod względem kosztów realizacji unijnej polityki energetycznej. Zostanie także zwrócona uwaga na innowacje w dziedzinie inteligentnego i zrównoważonego wykorzystania istniejących technologii.";"";"H2020";"H2020-EU.3.";"";"";"2014-09-22 20:45:54";"664321" +"H2020-EU.3.3.";"it";"H2020-EU.3.3.";"";"";"SFIDE PER LA SOCIETÀ - Energia sicura, pulita ed efficiente";"Energy";"

SFIDE PER LA SOCIETÀ - Energia sicura, pulita ed efficiente

Obiettivo specifico

L'obiettivo specifico è effettuare la transizione verso un sistema energetico affidabile, economicamente accessibile, accettato dal pubblico, sostenibile e competitivo, mirante a ridurre la dipendenza dai combustibili fossili, in tempi di crescente penuria di risorse, di incremento del fabbisogno di energia nonché di cambiamenti climatici.Entro il 2020 l'Unione intende ridurre le emissioni di gas a effetto serra del 20 % rispetto ai livelli del 1990, con un'ulteriore riduzione di emissioni dell'80-95 % entro il 2050. Nel 2020 le energie rinnovabili dovrebbero inoltre coprire il 20 % del consumo finale di energia, congiuntamente all'obiettivo del 20 % dell'efficienza energetica. Per conseguire tali obiettivi sarà necessaria una revisione del sistema energetico che associ un profilo a basse emissioni di carbonio e lo sviluppo di alternative ai combustibili fossili, la sicurezza e l'accessibilità economica, rafforzando nel contempo la competitività economica dell'Europa. L'Europa è attualmente lontana dal suo obiettivo generale. L'80 % del sistema energetico europeo si basa ancora sui combustibili fossili, e il settore produce l'80 % di tutte le emissioni di gas a effetto serra dell'Unione. Al fine di conseguire gli obiettivi di lungo termine dell'Unione in materia di clima ed energia, è opportuno aumentare, rispetto al settimo programma quadro, la quota del bilancio destinata alle attività relative a energie rinnovabili, efficienza energetica allo stadio dell'utilizzazione finale, reti intelligenti e stoccaggio dell'energia, e aumentare il bilancio destinato all'assorbimento di mercato delle attività di innovazione energetica intraprese nel quadro del programma ""Energia intelligente - Europa"", all'interno del programma quadro per la competitività e l'innovazione (2007-2013). Ci si adopera affinché la dotazione totale di tali attività raggiunga almeno l'85 % del bilancio nel quadro della presente sfida per la società. Ogni anno il 2,5 % del PIL dell'Unione è speso per le importazioni di energia e tale dato è probabilmente destinato ad aumentare. Questa tendenza condurrebbe alla dipendenza totale dalle importazioni di idrocarburi entro il 2050. A fronte della volatilità dei prezzi dell'energia sul mercato mondiale, accompagnata dalle preoccupazioni relative alla sicurezza dell'approvvigionamento, le industrie e i consumatori europei spendono una quota sempre maggiore del loro reddito per l'energia. Le città europee sono responsabili del 70-80 % del consumo totale di energia nell'Unione e all'incirca della stessa percentuale di emissioni di gas serra.La tabella di marcia per muovere verso un'economia competitiva a basse emissioni di carbonio per il 2050 indica che le riduzioni di emissioni di gas a effetto serra dovranno in gran parte essere coperte sul territorio dell'Unione. Questo comporterebbe la riduzione delle emissioni di CO2 di oltre il 90 % entro il 2050 nel settore della produzione di elettricità e di oltre l'80 % nell'industria, con almeno il 60 % nel settore dei trasporti e circa il 90 % nel settore residenziale e nei servizi. Inoltre la tabella di marcia indica tra l'altro che dal breve al medio periodo il gas naturale, associato all'uso delle tecnologie di cattura e stoccaggio del carbonio (CCS), può contribuire a trasformare il sistema energetico.Per conseguire tali ambiziose riduzioni, sono necessari notevoli investimenti in ricerca, sviluppo, dimostrazione e immissione in commercio a prezzi accessibili di tecnologie e servizi efficienti, sicuri e affidabili a basse emissioni di carbonio, compresi lo stoccaggio del gas e dell'elettricità e la diffusione di sistemi energetici su piccola e piccolissima scala. Questi devono andare di pari passo con soluzioni non tecnologiche sia sul lato dell'offerta, sia sul lato della domanda, anche avviando processi di partecipazione e integrando i consumatori. Tutti questi elementi devono essere parte di una politica integrata sostenibile a basse emissioni di carbonio, che comprenda la padronanza delle tecnologie abilitanti fondamentali, in particolare le soluzioni TIC e la fabbricazione, la lavorazione e i materiali avanzati. L'obiettivo è sviluppare e realizzare tecnologie e a servizi efficienti sotto il profilo energetico, compresa l'integrazione delle energie rinnovabili, suscettibili di diffondersi ampiamente sui mercati europei e internazionali, e stabilire una gestione intelligente dal lato della domanda basata su un mercato di scambio dell'energia aperto e trasparente e su sistemi sicuri di gestione intelligente dell'efficienza energetica.

Motivazione e valore aggiunto dell'Unione

Le nuove tecnologie e soluzioni devono competere sui costi e l'affidabilità contro sistemi energetici dotati di tecnologie e operatori storici consolidati. La ricerca e l'innovazione sono fondamentali al fine di rendere interessanti dal punto di vista commerciale sulla scala necessaria queste fonti energetiche nuove, più pulite ed efficienti e a basse emissioni di carbonio. Né l'industria, né gli Stati membri da soli sono in grado di sostenere i costi e i rischi per i quali i motori principali, ossia la transizione verso un'economia a basse emissioni di carbonio che fornisce energia sicura a costi accessibili, sono esterni al mercato.Accelerare questo sviluppo richiederà un'impostazione strategica a livello di Unione, in grado di ricomprendere l'approvvigionamento, la domanda e l'utilizzo dell'energia nelle catene di valore dell'edilizia, degli usi domestici, dei servizi, dei trasporti e dell'industria. A tal fine è necessario allineare le risorse in tutta l'Unione, compresi i fondi della politica di coesione, in particolare tramite le strategie nazionali e regionali per la specializzazione intelligente, i sistemi di scambio di quote di emissione (ETS), gli appalti pubblici e altri meccanismi di finanziamento. Sono necessarie anche politiche di regolamentazione e di diffusione per le fonti energetiche rinnovabili e l'efficienza energetica, congiuntamente a un'adeguata assistenza tecnica e allo sviluppo di capacità al fine di eliminare gli ostacoli non tecnologici.Il piano strategico per le tecnologie energetiche (piano SET) offre un siffatto approccio strategico, mirato a stabilire una programmazione a lungo termine per affrontare le principali strozzature dell'innovazione che si trovano ad affrontare le tecnologie energetiche nelle fasi della ricerca di frontiera e di R&S/validità concettuale nonché nelle fasi di dimostrazione in cui le imprese cercano i capitali per finanziare grandi progetti innovativi e avviare il processo di immissione sul mercato. Sarà dato spazio anche a nuove tecnologie emergenti dotate di un potenziale dirompente.Le risorse necessarie per attuare integralmente il piano SET sono state stimate a 8 miliardi di EUR l'anno per i prossimi 10 anni. Questa cifra è notevolmente superiore alla capacità dei singoli Stati membri o delle parti interessate dell'industria e della ricerca da sole. Sono necessari investimenti in ricerca e innovazione a livello unionale, combinati con la mobilitazione degli sforzi in tutta Europa sotto forma di attuazione congiunta e di condivisione dei rischi e delle capacità. Il finanziamento dell'Unione della ricerca e dell'innovazione in ambito energetico integra pertanto le attività degli Stati membri, concentrandosi sulle tecnologie e attività d'avanguardia dotate di un chiaro valore aggiunto dell'Unione, in particolare quelle ad alto potenziale di leva delle risorse nazionali e di creazione di posti di lavoro. L'azione a livello unionale sostiene inoltre programmi di lungo periodo ad alto rischio e con costi elevati, che vanno al di là della portata dei singoli Stati membri, mette in comune gli impegni per ridurre i rischi di investimento nelle attività su larga scala quali quelle di dimostrazione industriale e sviluppa soluzioni energetiche interoperabili a livello europeo.L'attuazione del piano SET come pilastro della ricerca e dell'innovazione della politica energetica europea rafforzerà la sicurezza dell'approvvigionamento dell'Unione e la transizione verso un'economia a basse emissioni di carbonio, contribuirà a collegare programmi di ricerca e innovazione con gli investimenti transeuropei e regionali nelle infrastrutture dell'energia e aumenterà la disponibilità degli investitori a immettere capitale in progetti con tempi di esecuzione lunghi e notevoli rischi tecnologici e di mercato. Questo piano creerà opportunità di innovazione per le piccole e grandi imprese e le aiuterà a divenire o a restare competitive a livello mondiale, dove le opportunità per le tecnologie energetiche sono numerose e in aumento.Sulla scena internazionale, le azioni condotte a livello unionale generano una ""massa critica"" in grado di attrarre l'interesse di altri leader in campo tecnologico e di promuovere partenariati internazionali per realizzare gli obiettivi dell'Unione, semplificando ai partner internazionali l'interazione con l'Unione al fine di costruire un'azione comune di vantaggio e interesse reciproci.Le attività svolte nell'ambito di questa sfida per la società costituiranno quindi il pilastro tecnologico della politica climatica ed energetica europea, contribuendo altresì al conseguimento dell'iniziativa faro ""Unione dell'innovazione"" nel settore dell'energia e degli obiettivi politici delineati nelle iniziative faro ""Un'Europa efficiente sotto il profilo delle risorse"", ""Una politica industriale nell'era della globalizzazione"" e ""Un'agenda digitale europea"".Le attività di ricerca e innovazione sull'energia da fusione e fissione nucleare sono svolte nel programma Euratom istituito dal regolamento (Euratom) n. 1314/2013. Ove appropriato si dovrebbero prevedere possibili sinergie tra la presente sfida per la società e il programma Euratom.

Le grandi linee delle attività

(a) Ridurre il consumo di energia e le emissioni di carbonio grazie all'uso intelligente e sostenibile

Le attività si concentrano sulla ricerca e la sperimentazione su larga scala di nuovi concetti, di soluzioni non tecnologiche, di componenti tecnologici più efficienti, socialmente accettabili e accessibili nonché su sistemi con intelligenza integrata, che permettono la gestione energetica in tempo reale di edifici nuovi ed esistenti con emissioni prossime allo zero, a consumi energetici praticamente nulli e a energia positiva, edifici, città e territori ristrutturati, energie rinnovabili per il riscaldamento e il raffreddamento, industrie altamente efficienti e adozione massiccia di soluzioni e servizi di efficienza e risparmio energetici da parte di imprese, singoli, comunità e città.

(b) Energia elettrica a basso costo e a basse emissioni di carbonio

Le attività si concentrano sulla ricerca, lo sviluppo e la dimostrazione su scala reale di fonti energetiche rinnovabili innovative, centrali elettriche a combustibili fossili efficienti, flessibili e a basse emissioni di carbonio e tecnologie per la cattura e lo stoccaggio del carbonio o la riutilizzazione del CO2, che consentano tecnologie su scala più ampia, a costi inferiori, sicure per l'ambiente, dotate di un rendimento di conversione superiore e di una più ampia disponibilità per diversi mercati e contesti operativi.

(c) Combustibili alternativi e fonti energetiche mobili

Le attività si concentrano sulla ricerca, lo sviluppo e la dimostrazione su scala reale di tecnologie e catene del valore mirate a rendere la bioenergia e altri combustibili alternativi più competitivi e sostenibili per la produzione di calore ed energia elettrica e per i trasporti di superficie, marittimi e aerei, che offrano la possibilità di una conversione energetica più efficace, al fine di ridurre i tempi di commercializzazione per l'idrogeno e le celle a combustibile e proporre nuove opzioni che dimostrino potenzialità a lungo termine per giungere a maturità.

(d) Un'unica rete elettrica europea intelligente

Le attività si concentrano sulla ricerca, lo sviluppo e la dimostrazione su scala reale di nuove tecnologie energetiche intelligenti di rete, tecnologie di bilanciamento e back-up che consentano una maggiore flessibilità ed efficienza, tra cui centrali tradizionali, stoccaggio flessibile dell'energia, sistemi e configurazioni di mercato per pianificare, monitorare, controllare e gestire in condizioni di sicurezza le reti interoperabili, comprese le questioni relative alla regolamentazione, in un mercato aperto, decarbonizzato, sostenibile sul piano ambientale, competitivo e resiliente al profilo climatico, in condizioni normali e di emergenza.

(e) Nuove conoscenze e tecnologie

Le attività si concentrano sulla ricerca multidisciplinare nell'ambito delle tecnologie energetiche pulite, sicure e sostenibili (comprensive di azioni visionarie) e dell'attuazione congiunta di programmi di ricerca paneuropei e strutture di livello mondiale.

(f) Processo decisionale e impegno pubblico di rilievo

Le attività si concentrano in particolare sullo sviluppo di strumenti, metodi, modelli e scenari futuri e lungimiranti per un solido e trasparente sostegno alla politica, comprese le attività relative alla partecipazione del pubblico, al coinvolgimento degli utenti, all'impatto ambientale e alla valutazione di sostenibilità, per migliorare la comprensione delle tendenze e prospettive socioeconomiche connesse all'energia.

(g) Assorbimento di mercato dell'innovazione energetica - iniziative fondate sul programma ""Energia intelligente - Europa""

Le attività sono basate su quelle intraprese nel quadro del programma ""Energia intelligente - Europa"" e le rafforzano ulteriormente. Si concentrano sulle innovazioni applicate e sulla promozione di norme al fine di agevolare l'adozione da parte del mercato delle tecnologie e dei servizi energetici, per affrontare gli ostacoli non tecnologici e accelerare un'attuazione efficiente in termini di costi delle politiche energetiche europee. Sarà anche prestata attenzione all'innovazione per l'uso intelligente e sostenibile delle tecnologie esistenti.";"";"H2020";"H2020-EU.3.";"";"";"2014-09-22 20:45:54";"664321" +"H2020-EU.3.3.";"en";"H2020-EU.3.3.";"";"";"SOCIETAL CHALLENGES - Secure, clean and efficient energy";"Energy";"

SOCIETAL CHALLENGES - Secure, clean and efficient energy

Specific objective

The specific objective is to make the transition to a reliable, affordable, publicly accepted, sustainable and competitive energy system, aiming at reducing fossil fuel dependency in the face of increasingly scarce resources, increasing energy needs and climate change.The Union intends to reduce greenhouse gas emissions by 20 % below 1990 levels by 2020, with a further reduction to 80-95 % by 2050. In addition, renewables should cover 20 % of final energy consumption in 2020 coupled with a 20 % energy efficiency target. Achieving these objectives will require an overhaul of the energy system combining low carbon profile and the development of alternatives to fossil fuels, energy security and affordability, while at the same time reinforcing Europe's economic competitiveness. Europe is currently far from this overall goal. 80 % of the European energy system still relies on fossil fuels, and the sector produces 80 % of all the Union's greenhouse gas emissions. With a view to achieving the Union's long-term climate and energy objectives, it is appropriate to increase the share of the budget dedicated to renewable energy, end-user energy efficiency, smart grids and energy storage activities as compared to the Seventh Framework Programme, and increase the budget dedicated to market uptake of energy innovation activities undertaken under the Intelligent Energy Europe Programme within the Competitiveness and Innovation Framework Programme (2007 to 2013). The total allocation to these activities shall endeavour to reach at least 85 % of the budget under this societal challenge. Every year 2,5 % of the Union GDP is spent on energy imports and this is likely to increase. This trend would lead to total dependence on oil and gas imports by 2050. Faced with volatile energy prices on the world market, coupled with concerns over security of supply, European industries and consumers are spending an increasing share of their income on energy. European cities are responsible for 70-80 % of the total energy consumption in the Union and for about the same share of greenhouse gas emissions.The Roadmap for moving to a competitive low-carbon economy in 2050 suggests that the targeted reductions in greenhouse gas emissions will have to be met largely within the territory of the Union. This would entail reducing CO2 emissions by over 90 % by 2050 in the power sector, by over 80 % in industry, by at least 60 % in transport and by about 90 % in the residential sector and services. The Roadmap also shows that inter alia natural gas, in the short to medium term, can contribute to the transformation of the energy system, combined with the use of carbon capture and storage (CCS) technology.To achieve these ambitious reductions, significant investments need to be made in research, development, demonstration and market roll-out at affordable prices of efficient, safe, secure and reliable low-carbon energy technologies and services, including gas, electricity storage and the roll-out of small and micro-scale energy systems. These must go hand in hand with non-technological solutions on both the supply and demand sides, including by initiating participation processes and integrating consumers. All this must be part of an integrated sustainable low-carbon policy, including mastering key enabling technologies, in particular ICT solutions and advanced manufacturing, processing and materials. The goal is to develop and produce efficient energy technologies and services, including the integration of renewable energy, that can be taken up widely on European and international markets and to establish intelligent demand-side management based on an open and transparent energy trade market and secure intelligent energy efficiency management systems.

Rationale and Union added value

New technologies and solutions must compete on cost and reliability against energy systems with well-established incumbents and technologies. Research and innovation are critical to make these new, cleaner, low-carbon, more efficient energy sources commercially attractive on the scale needed. Neither industry alone, nor Member States individually, are able to bear the costs and risks, for which the main drivers (transition to a low-carbon economy, providing affordable and secure energy) are outside the market.Speeding up this development will require a strategic approach at Union level, spanning energy supply, demand and use in buildings, services, domestic use, transport and industrial value chains. This will entail aligning resources across the Union, including Cohesion Policy Funds, in particular through the national and regional strategies for smart specialisation, emission trading schemes (ETS), public procurement and other financing mechanisms. It will also require regulatory and deployment policies for renewables and energy efficiency, tailored technical assistance and capacity-building to remove non-technological barriers.The Strategic Energy Technology Plan (SET Plan) offers such a strategic approach. It provides a long-term agenda to address the key innovation bottlenecks that energy technologies are facing at the frontier research and R&D/proof-of-concept stages and at the demonstration stage when companies seek capital to finance large, first-of-a-kind projects and to open the market deployment process. Newly emerging technologies with disruptive potential will not be neglected.The resources required to implement the SET Plan in full have been estimated at EUR 8 billion per year over the next 10 years (12). This is well beyond the capacity of individual Member States or research and industrial stakeholders alone. Investments in research and innovation at Union level are needed, combined with mobilisation of efforts across Europe in the form of joint implementation and risk and capacity sharing. Union funding of energy research and innovation shall therefore complement Member States' activities by focusing on cutting-edge technologies and activities with clear Union added value, in particular those with high potential to leverage national resources and create jobs in Europe. Action at Union level shall also support high-risk, high-cost, long-term programmes beyond the reach of individual Member States, pool efforts to reduce investment risks in large-scale activities such as industrial demonstration, and develop Europe-wide, interoperable energy solutions.Implementation of the SET Plan as the research and innovation pillar of European energy policy will reinforce the Union's security of supply and the transition to a low-carbon economy, help to link research and innovation programmes with trans-European and regional investments in energy infrastructure and increase the willingness of investors to release capital for projects with long lead-times and significant technology and market risks. It will create opportunities for innovation for small and large companies and help them become or remain competitive at world level, where opportunities for energy technologies are large and increasing.On the international scene, the action taken at Union level provides a critical mass to attract interest from other technology leaders and to foster international partnerships to achieve the Union's objectives. It will make it easier for international partners to interact with the Union to build common action where there is mutual benefit and interest.The activities under this societal challenge will therefore form the technological backbone of European energy and climate policy. They will also contribute to achieving the flagship initiative 'Innovation Union' in the field of energy and the policy goals outlined in the flagship initiatives 'Resource-efficient Europe', 'An Industrial Policy for the Globalisation Era' and 'Digital agenda for Europe'.Research and innovation activities on nuclear fission and fusion energy are carried out in the Euratom programme established by Regulation (Euratom) No 1314/2013 Where appropriate, possible synergies between this societal challenge and the Euratom programme should be envisaged.

Broad lines of the activities

(a) Reducing energy consumption and carbon footprint by smart and sustainable use

Activities shall focus on research and full-scale testing of new concepts, non-technological solutions, more efficient, socially acceptable and affordable technology components and systems with in-built intelligence, to allow real-time energy management for new and existing near-zero-emission, near-zero-energy and positive energy buildings, retrofitted buildings, cities and districts, renewable heating and cooling, highly efficient industries and mass take-up of energy efficiency and energy saving solutions and services by companies, individuals, communities and cities.

(b) Low-cost, low-carbon electricity supply

Activities shall focus on research, development and full scale demonstration of innovative renewables, efficient, flexible and low carbon emission fossil power plants and carbon capture and storage, or CO2 re-use technologies, offering larger scale, lower cost, environmentally safe technologies with higher conversion efficiency and higher availability for different market and operating environments.

(c) Alternative fuels and mobile energy sources

Activities shall focus on research, development and full scale demonstration of technologies and value chains to make bioenergy and other alternative fuels more competitive and sustainable for power and heat and for surface, maritime and air transport, with potential for more efficient energy conversion, to reduce time to market for hydrogen and fuel cells and to bring new options showing long-term potential to maturity.

(d) A single, smart European electricity grid

Activities shall focus on research, development and full scale demonstration of new smart energy grid technologies, back-up and balancing technologies enabling higher flexibility and efficiency, including conventional power plants, flexible energy storage, systems and market designs to plan, monitor, control and safely operate interoperable networks, including standardisation issues, in an open, decarbonised, environmentally sustainable, climate-resilient and competitive market, under normal and emergency conditions.

(e) New knowledge and technologies

Activities shall focus on multi-disciplinary research for clean, safe and sustainable energy technologies (including visionary actions) and joint implementation of pan-European research programmes and world-class facilities.

(f) Robust decision making and public engagement

Activities shall focus on the development of tools, methods, models and forward-looking and perspective scenarios for a robust and transparent policy support, including activities on public engagement, user involvement, environmental impact and sustainability assessment improving the understanding of energy-related socio-economic trends and prospects.

(g) Market uptake of energy innovation - building on Intelligent Energy Europe

Activities shall build upon and further enhance those undertaken within the Intelligent Energy Europe (IEE) programme. They shall focus on applied innovation and promotion of standards to facilitate the market uptake of energy technologies and services, to address non-technological barriers and to accelerate the cost-effective implementation of the Union's energy policies. Attention will also be given to innovation for the smart and sustainable use of existing technologies.";"";"H2020";"H2020-EU.3.";"";"";"2014-09-22 20:45:54";"664321" +"H2020-EU.3.3.";"de";"H2020-EU.3.3.";"";"";"GESELLSCHAFTLICHE HERAUSFORDERUNGEN - Sichere, saubere und effiziente Energieversorgung";"Energy";"

GESELLSCHAFTLICHE HERAUSFORDERUNGEN - Sichere, saubere und effiziente Energieversorgung

Einzelziel

Einzelziel ist der Übergang zu einem zuverlässigen, erschwinglichen, von der Öffentlichkeit akzeptierten, nachhaltigen und wettbewerbsfähigen Energiesystem, um die Abhängigkeit von fossilen Brennstoffen angesichts der immer größeren Ressourcenknappheit, des steigenden Energiebedarfs und des Klimawandels zu reduzieren.Die Europäische Union hat die Absicht, bis 2020 die Treibhausgasemissionen im Vergleich zum Stand von 1990 um 20% und bis 2050 nochmals um 80-95% zu reduzieren. Ferner soll bis 2020 der Anteil erneuerbarer Energien am Endenergieverbrauch auf 20% steigen, gekoppelt an ein Energieeffizienzziel von 20%. Diese Ziele lassen sich nur erreichen, wenn das Energiesystem – gestützt auf die Komponenten niedriger CO 2-Ausstoß, Entwicklung von Alternativen zu fossilen Brennstoffen, Energieversorgungssicherheit und Erschwinglichkeit – generalüberholt und gleichzeitig die Wettbewerbsfähigkeit Europas gestärkt wird. Europa ist derzeit von diesem Gesamtziel noch weit entfernt. Zu 80% stützt sich das europäische Energiesystem noch auf fossile Brennstoffe und der Sektor generiert 80% der Treibhausgasemissionen der EU. Im Hinblick auf die Verwirklichung der langfristigen Klima- und Energieziele der Union ist es angemessen, den Anteil der für erneuerbare Energien, Endnutzer-Energieeffizienz, intelligente Netze und Energiespeicherung vorgesehenen Mittel gegenüber dem Siebten Rahmenprogramm zu erhöhen und die für im Rahmen des Programms ""Intelligente Energie – Europa"" durchgeführten Tätigkeiten der Markteinführung von Energieinnovationen vorgesehenen Mittel innerhalb des Rahmenprogramms für Wettbewerbsfähigkeit und Innovation (2007 bis 2013) zu erhöhen. Die insgesamt für diese Tätigkeiten zugeteilten Mittel sollten mindestens 85% der im Rahmen dieser Herausforderung vorgesehenen Mittel ausmachen. Jedes Jahr belaufen sich die Ausgaben der Europäischen Union für Energieimporte auf 2,5% des BIP, Tendenz steigend. Diese Entwicklung wird bis 2050 zu einer vollständigen Abhängigkeit von Öl- und Gasimporten führen. Vor dem Hintergrund der Schwankungen der Energiepreise auf dem Weltmarkt und der Bedenken hinsichtlich der Versorgungssicherheit geben die europäischen Unternehmen und Verbraucher einen wachsenden Teil ihres Einkommens für Energie aus. Europas Städte sind verantwortlich für 70-80%(10) des gesamten Energieverbrauchs in der Union und für ungefähr den gleichen Anteil an den Treibhausgasemissionen.Der Fahrplan hin zu einer wettbewerbsfähigen Wirtschaft mit niedrigem CO2-Ausstoß bis 2050(11) legt nahe, dass die angestrebten Reduktionen bei den Treibhausgasemissionen größtenteils innerhalb des Gebiets der Europäischen Union erzielt werden müssen. Dafür müssten die CO2-Emissionen bis 2050 im Energiesektor um über 90%, in der Industrie um über 80%, im Verkehr um mindestens 60% und im Wohnungs- und Dienstleistungssektor um etwa 90% reduziert werden. Aus dem Fahrplan geht auch hervor, dass auf kurze bis mittlere Sicht unter anderem Erdgas in Kombination mit dem Einsatz der CO2-Abscheidungs und -Speicherungs- (CCS-) Technologie zur Umgestaltung des Energiesektors beitragen kann.Um diese ehrgeizigen Reduktionsziele zu erreichen, müssen erhebliche Investitionen in Forschung, Entwicklung, Demonstration und Vermarktung – zu erschwinglichen Preisen – von effizienten, sicheren und zuverlässigen Energietechnologien und -dienstleistungen mit niedrigem CO2-Ausstoß getätigt werden, einschließlich Gas, Stromspeicherung und Vermarktung von Klein- und Kleinstenergieerzeugungsanlagen. Diese müssen mit nichttechnologischen Lösungen sowohl auf der Angebots- als auch auf der Nachfrageseite einhergehen, wobei partizipative Prozesse eingeleitet und die Verbraucher eingebunden werden. All diese Maßnahmen müssen in eine integrierte und nachhaltige Politik zur Verringerung des CO2-Ausstoßes eingebettet sein, was auch die Beherrschung von Schlüsseltechnologien, insbesondere IKT-Lösungen und fortgeschrittene Fertigung, Verarbeitung und Werkstoffe beinhaltet. Ziel ist die Entwicklung und Produktion effizienter Energietechnologien und -dienstleistungen, einschließlich der Integration erneuerbarer Energien, die auf europäischen und internationalen Märkten große Verbreitung finden können, und die Einführung eines nachfrageseitigen Managements, gestützt auf einen offenen und transparenten Markt für den Energiehandel und sichere intelligente Managementsysteme für die Energieeffizienz.

Begründung und Mehrwert für die Union

Neue Technologien und Lösungen müssen sich im Hinblick auf Kosten und Zuverlässigkeit gegenüber Energiesystemen gut etablierter Betreiber und Technologien als wettbewerbsfähig erweisen. Damit diese neuen, umweltfreundlicheren und effizienteren Energiequellen mit niedrigem CO2-Ausstoß im jeweiligen Maßstab kommerziell interessant werden, kommt es entscheidend auf Forschung und Innovation an. Weder die Industrie noch die Mitgliedstaaten sind jeweils allein in der Lage, die Kosten und Risiken zu tragen, deren wichtigste Impulsgeber (nämlich Übergang zu einer Wirtschaft mit niedrigem CO2-Ausstoß und erschwingliche und sichere Energieversorgung) außerhalb des Marktes angesiedelt sind.Eine Forcierung dieser Entwicklung erfordert ein strategisches Konzept auf Unionsebene, das sich auf Energieversorgung, Nachfrage und Einsatz in Gebäuden, Dienstleistungen, private Haushalte, Verkehr sowie industrielle Wertschöpfungsketten erstreckt. Es bedingt die unionsweite Bündelung von Ressourcen, auch der Fonds der Kohäsionspolitik, insbesondere durch nationale und regionale Strategien für eine intelligente Spezialisierung, Emissionshandelssysteme (ETS), öffentliche Auftragsvergabe und andere Finanzierungsmechanismen. Darüber hinaus werden regulatorische und einsatzbezogene Strategien für erneuerbare Energien und Energieeffizienz sowie maßgeschneiderte technische Hilfe und zusätzliche Kapazitäten für den Abbau nichttechnologischer Hemmnisse benötigt.Der Strategieplan für Energietechnologie (SET-Plan) bietet ein solches strategisches Konzept. Er beinhaltet eine langfristige Agenda zur Beseitigung der größten Innovationsengpässe, mit denen Energietechnologien im Stadium der Pionierforschung, der FuE bzw. des Konzeptnachweises sowie im Demonstrationsstadium konfrontiert sind, wenn Unternehmen für die Finanzierung großer, gänzlich neuer Projekte und für die beginnende Markteinführung Kapital benötigen. Neu entstehende, potenziell bahnbrechende Technologien werden dabei nicht vernachlässigt.Die zur vollständigen Umsetzung des SET-Plans notwendigen Ressourcen wurden für die nächsten 10 Jahre mit 8 Mrd. EUR pro Jahr veranschlagt(12). Dies übersteigt bei weitem die Möglichkeiten einzelner Mitgliedstaaten oder Akteure in Forschung und Industrie. Benötigt werden Investitionen in Forschung und Innovation auf Unionsebene sowie eine europaweite Mobilisierung von Anstrengungen in Form gemeinsamer Durchführung, Risikoteilung und Kapazitätsnutzung. Die Unionsförderung von Forschung und Innovation im Energiebereich ergänzt damit die Aktivitäten der Mitgliedstaaten und konzentriert sich auf Spitzentechnologien und Tätigkeiten mit klarem Mehrwert für die Union und vor allem auf solche mit großem Potenzial, nationale Ressourcen zu mobilisieren und Arbeitsplätze in Europa zu schaffen. Maßnahmen auf Unionsebene dienen darüber hinaus der Unterstützung hoch riskanter, kostenintensiver und langfristiger Programme, die über die Möglichkeiten einzelner Mitgliedstaaten hinausgehen, der Bündelung von Anstrengungen zur Reduzierung des Risikos von Investitionen in Großprojekte (etwa industrielle Demonstration) und der Entwicklung europaweiter, interoperabler Energielösungen.Die Durchführung des SET-Plans als Forschungs- und Innovationspfeiler der europäischen Energiepolitik erhöht die Versorgungssicherheit der Union und erleichtert den Übergang zu einer Wirtschaft mit niedrigem CO2-Ausstoß, trägt zur Verknüpfung der Forschungs- und Innovationsprogramme mit transeuropäischen und regionalen Energieinfrastrukturinvestitionen bei und erhöht die Bereitschaft von Investoren, Kapital für Projekte mit langen Vorlaufzeiten und erheblichen Technologie- und Marktrisiken bereitzustellen. Er bietet kleinen und großen Unternehmen Möglichkeiten für Innovation und unterstützt sie darin, auf dem riesigen und wachsenden Weltmarkt für Energietechnologien ihre Wettbewerbsfähigkeit zu verteidigen oder auszubauen.International betrachtet schaffen Maßnahmen auf Unionsebene eine ""kritische Masse"", die das Interesse anderer Technologieführer weckt und internationale Partnerschaften fördert, mit denen die Ziele der Union verwirklicht werden können. Besteht ein gegenseitiger Nutzen und gemeinsames Interesse, ist es für internationale Partner leichter, mit der Union bei gemeinsamen Maßnahmen zusammenzuarbeiten.Die Tätigkeiten im Rahmen dieser gesellschaftlichen Herausforderung bilden daher das technologische Rückgrat der europäischen Energie- und Klimapolitik. Außerdem werden sie zur Verwirklichung der Leitinitiative ""Innovationsunion"" im Energiebereich sowie zu den politischen Zielen der Leitinitiativen ""Ressourcenschonendes Europa"", ""Eine Industriepolitik für das Zeitalter der Globalisierung"" und ""Eine digitale Agenda für Europa"" beitragen.Forschungs- und Innovationstätigkeiten zur Kernspaltung und Fusionsenergie fallen unter das Euratom-Programm, das durch die Verordnung (Euratom) Nr. 1314/2013 eingerichtet wurde.

Einzelziele und Tätigkeiten in Grundzügen

a) Verringerung des Energieverbrauchs und Verbesserung der CO2-Bilanz durch intelligente und nachhaltige Nutzung

Schwerpunkt der Tätigkeiten sind Forschung und vollmaßstäbliche Tests neuer Konzepte, nichttechnologische Lösungen sowie technologische Komponenten und Systeme mit integrierter Intelligenz, die effizienter, gesellschaftlich akzeptabel und erschwinglich sind. Dies ermöglicht ein Energiemanagement in Echtzeit für neue und bereits vorhandene nahezu emissionsfreie, Niedrigstenergie- und Energieüberschussgebäude, nachgerüstete Gebäude, Städte und Bezirke, den Einsatz erneuerbarer Energien in Heizung und Kühlung, hocheffiziente Industrien und den flächendeckenden Einsatz von Energieeffizienz- und Energiesparlösungen und -dienstleistungen durch Unternehmen, Privathaushalte und Kommunen.

b) Kostengünstige Stromversorgung mit niedrigen CO2-Emissionen

Schwerpunkt der Tätigkeiten sind Forschung, Entwicklung und vollmaßstäbliche Demonstration mit Blick auf innovative erneuerbare Energieträger, effiziente und flexible Kraftwerke für fossile Energieträger mit niedrigem CO2-Ausstoß sowie Techniken für CO2-Abscheidung und -Speicherung oder -Wiederverwendung, die kostengünstiger und umweltverträglich sind und in größerem Maßstab eingesetzt werden können und gleichzeitig einen hohen Wirkungsgrad haben und für unterschiedliche Märkte und betriebliche Gegebenheiten leichter verfügbar sind.

c) Alternative Brenn- bzw. Kraftstoffe und mobile Energiequellen

Schwerpunkt der Tätigkeiten sind Forschung, Entwicklung und die vollmaßstäbliche Demonstration mit Blick auf Technologien und Wertschöpfungsketten, die darauf abzielen, die Wettbewerbsfähigkeit und Nachhaltigkeit von Bioenergie und anderen alternativen Brenn- bzw. Kraftstoffen für Energie- und Wärmegewinnung und für Land-, See- und Luftverkehr zu erhöhen, mit dem Potenzial einer energieeffizienteren Umwandlung, die Zeit bis zur Marktreife von Wasserstoff- und Brennstoffzellen zu verringern und neue Optionen mit langfristigem Potenzial zur Marktreife aufzuzeigen.

d) Ein intelligentes europäisches Stromverbundnetz

Schwerpunkt der Tätigkeiten sind Forschung, Entwicklung und vollmaßstäbliche Demonstration mit Blick auf intelligente neue Energienetztechnologien, Reserve- und Ausgleichstechnologien für mehr Flexibilität und Effizienz, einschließlich konventioneller Kraftwerke, flexible Energiespeicherung, Systeme und Marktkonzepte für die Planung, Überwachung, Kontrolle und den sicheren Betrieb interoperabler Netze unter normalen Bedingungen und im Notfall – unter Einbeziehung von Normungsaspekten – auf einem offenen, ökologisch nachhaltigen und wettbewerbsfähigen Markt mit niedrigen CO2-Emissionen, der gegen den Klimawandel gewappnet ist.

e) Neue Erkenntnisse und neue Technologien

Schwerpunkt der Tätigkeiten sind die multidisziplinäre Erforschung von Technologien für saubere, sichere und nachhaltige Energien (auch visionäre Maßnahmen) und die gemeinsame Verwirklichung europaweiter Forschungsprogramme sowie erstklassiger Einrichtungen.

f) Qualifizierte Entscheidungsfindung und Einbeziehung der Öffentlichkeit

Schwerpunkt der Tätigkeiten ist die Entwicklung von Instrumenten, Verfahren, Modellen und vorausschauenden und perspektivischen Szenarien für eine qualifizierte und transparente Unterstützung der Politik, auch im Hinblick auf das Engagement der Öffentlichkeit, die Einbeziehung der Nutzer, die Auswirkungen auf die Umwelt sowie die Bewertung der Nachhaltigkeit, womit das Verständnis energiebezogener sozioökonomischer Tendenzen und Perspektiven verbessert werden soll.

g) Markteinführung von Energieinnovationen – Aufbau auf ""Intelligente Energie – Europa

Die Tätigkeiten stützen sich auf die im Rahmen des Programms ""Intelligente Energie – Europa"" (IEE) durchgeführten Tätigkeiten und verstärken diese. Schwerpunkt ist die angewandte Innovation und ein Beitrag zur Normung, um die Einführung von Energietechnologien und -dienstleistungen auf dem Markt zu erleichtern, nichttechnologische Hemmnisse zu beseitigen und die kosteneffiziente Umsetzung der Energiepolitik der Union zu beschleunigen. Dabei wird auch Innovationen im Interesse einer intelligenten und nachhaltigen Nutzung bereits vorhandener Technologien Beachtung geschenkt.";"";"H2020";"H2020-EU.3.";"";"";"2014-09-22 20:45:54";"664321" +"H2020-EU.3.4.5.5.";"en";"H2020-EU.3.4.5.5.";"";"";"ITD Engines";"";"";"";"H2020";"H2020-EU.3.4.5";"";"";"2014-09-22 21:43:09";"665412" +"H2020-EU.2.1.5.3.";"en";"H2020-EU.2.1.5.3.";"";"";"Sustainable, resource-efficient and low-carbon technologies in energy-intensive process industries";"Sustainable, resource-efficient and low-carbon technologies in energy-intensive process industries";"

Sustainable, resource-efficient and low-carbon technologies in energy-intensive process industries

Increasing the competitiveness of process industries, by drastically improving resource and energy efficiencies and reducing the environmental impact of such industrial activities through the whole value chain, promoting the adoption of low-carbon technologies, more sustainable industrial processes and, where applicable, the integration of renewable energy sources.";"";"H2020";"H2020-EU.2.1.5.";"";"";"2014-09-22 20:42:10";"664203" +"H2020-EU.3.4.5.2.";"en";"H2020-EU.3.4.5.2.";"";"";"IADP Regional Aircraft";"";"";"";"H2020";"H2020-EU.3.4.5";"";"";"2014-09-22 21:42:57";"665406" +"H2020-EU.2.1.6.1.";"en";"H2020-EU.2.1.6.1.";"";"";"Enabling European competitiveness, non-dependence and innovation of the European space sector";"Competitiveness, non-dependence and innovation";"

Enabling European competitiveness, non-dependence and innovation of the European space sector

This entails safeguarding and further developing a competitive, sustainable and entrepreneurial space industry in combination with a world-class space research community to maintain and strengthen European leadership and non-dependence in space systems to foster innovation in the space sector, and to enable space-based terrestrial innovation, for example by using remote sensing and navigation data.";"";"H2020";"H2020-EU.2.1.6.";"";"";"2014-09-22 20:42:21";"664209" +"H2020-EU.2.1.6.1.";"de";"H2020-EU.2.1.6.1.";"";"";"Grundlagen der europäischen Wettbewerbsfähigkeit, Nicht-Abhängigkeit und Innovation im europäischen Weltraumsektor";"Competitiveness, non-dependence and innovation";"

Grundlagen der europäischen Wettbewerbsfähigkeit, Nicht-Abhängigkeit und Innovation im europäischen Weltraumsektor

Um die Führungsrolle Europas und die Nicht-Abhängigkeit in Bezug auf Weltraumsysteme zu wahren und zu verstärken, Innovation im Weltraumsektor zu fördern und weltraumgestützte terrestrische Innovationen (beispielsweise durch Fernerkundung und Navigationsdaten) zu ermöglichen, gilt es, eine wettbewerbsfähige, nachhaltige und unternehmerische Raumfahrtindustrie in Verbindung mit einer erstklassigen Weltraumforschungsgemeinschaft zu sichern und weiterzuentwickeln.";"";"H2020";"H2020-EU.2.1.6.";"";"";"2014-09-22 20:42:21";"664209" +"H2020-EU.2.1.6.1.";"it";"H2020-EU.2.1.6.1.";"";"";"Favorire la competitività europea, la non dipendenza e l'innovazione del settore spaziale europeo";"Competitiveness, non-dependence and innovation";"

Favorire la competitività europea, la non dipendenza e l'innovazione del settore spaziale europeo

Questo comporta il mantenimento e l'ulteriore sviluppo di un'industria spaziale concorrenziale, sostenibile e imprenditoriale, in combinazione con una comunità di ricerca spaziale di livello mondiale, al fine di mantenere e rafforzare la leadership europea e la non dipendenza nel campo dei sistemi spaziali per promuovere l'innovazione nei sistemi spaziali, nonché per consentire l'innovazione di terra con base spaziale, ad esempio tramite l'uso dei sistemi di telerilevamento e dei dati di navigazione.";"";"H2020";"H2020-EU.2.1.6.";"";"";"2014-09-22 20:42:21";"664209" +"H2020-EU.2.1.6.1.";"pl";"H2020-EU.2.1.6.1.";"";"";"Wspomaganie konkurencyjności Europy, niezależności oraz innowacji w europejskim sektorze kosmicznym";"Competitiveness, non-dependence and innovation";"

Wspomaganie konkurencyjności Europy, niezależności oraz innowacji w europejskim sektorze kosmicznym

Wiąże się to z zabezpieczeniem i dalszym rozwijaniem odznaczającego się konkurencyjnością i przedsiębiorczością oraz zrównoważonego przemysłu kosmicznego w połączeniu ze światowej klasy społecznością specjalistów ds. badań w dziedzinie przestrzeni kosmicznej, w celu utrzymania i wzmocnienia wiodącej pozycji Europy i niezależności w dziedzinie systemów kosmicznych, w celu wspierania innowacji w sektorze kosmicznym, a także wspomagania stymulowanych badaniami w przestrzeni kosmicznej innowacji na powierzchni Ziemi, np. w dziedzinie teledetekcji i danych nawigacyjnych.";"";"H2020";"H2020-EU.2.1.6.";"";"";"2014-09-22 20:42:21";"664209" +"H2020-EU.2.1.6.1.";"fr";"H2020-EU.2.1.6.1.";"";"";"Assurer la compétitivité et l'indépendance de l'Europe et promouvoir l'innovation dans le secteur spatial européen";"Competitiveness, non-dependence and innovation";"

Assurer la compétitivité et l'indépendance de l'Europe et promouvoir l'innovation dans le secteur spatial européen

Il s'agit à ce titre de conserver et de renforcer encore une industrie spatiale compétitive, durable et entreprenante associée à une communauté de chercheurs d'envergure mondiale dans le domaine spatial, afin de préserver et de conforter la primauté et l'indépendance de l'Europe en matière de systèmes spatiaux, de promouvoir l'innovation dans le secteur spatial et de favoriser l'innovation terrestre fondée sur les technologies spatiales, et notamment sur l'exploitation des données de télédétection et de navigation.";"";"H2020";"H2020-EU.2.1.6.";"";"";"2014-09-22 20:42:21";"664209" +"H2020-EU.2.1.6.1.";"es";"H2020-EU.2.1.6.1.";"";"";"Favorecer la competitividad, la no dependencia y la innovación en el sector espacial europeo";"Competitiveness, non-dependence and innovation";"

Favorecer la competitividad, la no dependencia y la innovación en el sector espacial europeo

Esto supone salvaguardar y seguir desarrollando una industria espacial competitiva, sostenible y emprendedora en combinación con una comunidad de investigación espacial de categoría mundial para mantener y fortalecer el liderazgo europeo y la no dependencia en sistemas espaciales para fomentar la innovación en el sector espacial y hacer posible la innovación en tierra a partir del espacio, por ejemplo mediante la teledetección y los datos para navegación.";"";"H2020";"H2020-EU.2.1.6.";"";"";"2014-09-22 20:42:21";"664209" +"H2020-EU.2.1.6.";"de";"H2020-EU.2.1.6.";"";"";"FÜHRENDE ROLLE DER INDUSTRIE - Führende Rolle bei grundlegenden und industriellen Technologien - Raumfahrt";"Space";"

FÜHRENDE ROLLE DER INDUSTRIE - Führende Rolle bei grundlegenden und industriellen Technologien - Raumfahrt

Einzelziel für die Raumfahrt

Einzelziel der Weltraumforschung und -innovation ist die Förderung einer kosteneffizienten, wettbewerbsfähigen und innovativen Raumfahrtindustrie (einschließlich der KMU) und Forschungsgemeinschaft, um mit Hilfe der Entwicklung und Nutzung der Raumfahrtinfrastruktur künftige Bedürfnisse der Unionspolitik und Gesellschaft befriedigen zu können.Die Stärkung des europäischen öffentlichen und privaten Raumfahrtsektors durch Förderung der Weltraumforschung und -innovation ist unerlässlich, damit Europa auch in Zukunft in der Lage ist, den Weltraum zu nutzen, um die Unionspolitik, internationale strategische Interessen und die Wettbewerbsfähigkeit gegenüber etablierten und neuen Raumfahrtnationen zu unterstützen. Auf Unionsebene werden im Hinblick auf die Schaffung von Komplementarität zwischen den verschiedenen Akteuren Maßnahmen der Union in Verbindung mit Tätigkeiten im Bereich der Weltraumforschung der Mitgliedstaaten und der Europäischen Weltraumorganisation (ESA) durchgeführt.

Begründung und Mehrwert für die Union

Der Weltraum bietet wichtige, doch häufig unsichtbare Voraussetzungen für unterschiedlichste Dienste und Produkte, die für die moderne Gesellschaft unerlässlich sind, wie beispielsweise die Navigation und Kommunikation sowie Wettervorhersagen und geografische Informationen, die durch die satellitengestützte Erdbeobachtung bereitgestellt werden. Festlegung und Durchführung politischer Maßnahmen auf europäischer, nationaler und regionaler Ebene hängen zunehmend von weltraumgestützten Daten ab. Der Weltraumsektor wächst weltweit rasant und erfasst neue Regionen (z. B. China, Südamerika und Afrika). Die europäische Industrie exportiert derzeit in beträchtlichem Umfang erstklassige Satelliten für kommerzielle und wissenschaftliche Zwecke. Europas Position auf diesem Gebiet wird aber durch den zunehmenden globalen Wettbewerb gefährdet.Damit hat Europa ein Interesse daran, dass seine Industrie sich auch weiterhin auf diesem hart umkämpften Markt behaupten kann. Außerdem ermöglichten Daten von europäischen Wissenschaftssatelliten und Raumsonden einige der bedeutsamsten wissenschaftlichen Durchbrüche der letzten Jahrzehnte in Geowissenschaften, Grundlagenphysik, Astronomie und Planetologie. Darüber hinaus haben innovative Weltraumtechnologien wie beispielsweise die Robotik zum Fortschritt von Know-how und Technologie in Europa beigetragen. Mit seinen einzigartigen Kapazitäten spielt der europäische Raumfahrtsektor eine kritische Rolle bei der Bewältigung der in der Strategie Europa 2020 genannten Herausforderungen.Forschung, technologische Entwicklung und Innovation untermauern die Weltraumkapazitäten, die für die europäische Gesellschaft unerlässlich sind. Während die Vereinigten Staaten etwa 25 % ihres Raumfahrtbudgets für FuE ausgeben, liegt dieser Anteil in der Union unter 10 %. Überdies wird die Weltraumforschung in der Union in den nationalen Programmen der Mitgliedstaaten, den Programmen der ESA und den Forschungsrahmenprogrammen der Union behandelt.Um den Technologie- und Wettbewerbsvorsprung Europas zu halten und Renditen aus den Investitionen zu erzielen, sind Maßnahmen auf Unionsebene gemäß Artikel 4 Absatz 3 und Artikel 189 AEUV in Verbindung mit der Weltraumforschung der Mitgliedstaaten und der ESA notwendig, die seit 1975 für die ESA-Mitgliedstaaten die industrielle Satellitenentwicklung und Weltraummissionen auf zwischenstaatlicher Basis geleitet hat. Maßnahmen auf Unionsebene sind auch notwendig, um die Beteiligung der besten Forscher aus allen Mitgliedstaaten zu fördern und die Hemmnisse für die kooperative Weltraumforschung über nationale Grenzen hinweg abzubauen.Außerdem werden die von europäischen Satelliten gelieferten Daten ein wachsendes Potenzial für weitere Entwicklungen innovativer satellitengestützter nachgelagerter Dienstleistungen bieten. Dieser gerade für KMU typische Tätigkeitsbereich sollte durch Forschungs- und Innovationsmaßnahmen unterstützt werden, um die sich bietenden Möglichkeiten und insbesondere die beträchtlichen Investitionen für die beiden Unionsprogramme Galileo und Copernicus voll nutzen zu können.Seinem Wesen nach kennt der Weltraum keine terrestrischen Grenzen und bietet damit einen einzigartigen Ausgangspunkt globaler Dimension für Großprojekte, die in internationaler Zusammenarbeit durchgeführt werden. Um bei derartigen internationalen Raumfahrtaktivitäten in den nächsten Jahrzehnten eine wichtige Rolle spielen zu können, ist eine gemeinsame europäische Weltraumpolitik ebenso unerlässlich wie Weltraumforschung und Innovationsaktivitäten auf europäischer Ebene.Die im Rahmen von Horizont 2020 angestrebte Weltraumforschung und -innovation steht im Einklang mit den Schwerpunkten der Weltraumpolitik der Union und den Erfordernissen der europäischen operativen Programme, wie sie weiterhin von den Rat und der Kommission festgelegt werden.Europäische Weltrauminfrastrukturen wie die Programme Copernicus und Galileo sind strategische Investitionen, für die die Entwicklung innovativer nachgelagerter Anwendungen erforderlich ist. Zu diesem Zweck wird der Einsatz von Weltraumtechnologien gegebenenfalls über die Einzelziele des Schwerpunkts ""Gesellschaftliche Herausforderungen"" gefördert – mit dem Ziel, den sozioökonomischen Nutzen sowie eine Investitionsrendite und eine europäische Führungsrolle bei den nachgelagerten Anwendungen sicherzustellen.

Einzelziele und Tätigkeiten in Grundzügen

(a) Grundlagen der europäischen Wettbewerbsfähigkeit, Nicht-Abhängigkeit und Innovation im europäischen Weltraumsektor

Um die Führungsrolle Europas und die Nicht-Abhängigkeit in Bezug auf Weltraumsysteme zu wahren und zu verstärken, Innovation im Weltraumsektor zu fördern und weltraumgestützte terrestrische Innovationen (beispielsweise durch Fernerkundung und Navigationsdaten) zu ermöglichen, gilt es, eine wettbewerbsfähige, nachhaltige und unternehmerische Raumfahrtindustrie in Verbindung mit einer erstklassigen Weltraumforschungsgemeinschaft zu sichern und weiterzuentwickeln.

(b) Grundlagen für Fortschritte in den Weltraumtechnologien

Ziel ist die Entwicklung fortgeschrittener und grundlegender Weltraumtechnologien und operativer Konzepte von der Idee bis zur Demonstration im Weltraum. Dies schließt Technologien für einen besseren Zugang zum Weltraum, Technologien zum Schutz der Weltraumsysteme vor Bedrohungen durch beispielsweise Weltraummüll oder Sonneneruptionen sowie Telekommunikation, Navigation und Fernerkundung über Satelliten ein. Die Entwicklung und Anwendung fortgeschrittener Weltraumtechnologien erfordert die kontinuierliche Aus- und Weiterbildung hochqualifizierter Ingenieure und Wissenschaftler sowie eine enge Verbindung zwischen diesen und den Nutzern der Raumfahrtanwendungen.

(c) Grundlagen für die Nutzung von Weltraumdaten

Die Nutzung der Daten europäischer – wissenschaftlich, öffentlich oder kommerziell betriebener – Satelliten lässt sich deutlich erhöhen, wenn auf der Grundlage des Artikels 189 AEUV größere Anstrengungen in Bezug auf die Verarbeitung, Archivierung, Validierung, Standardisierung und nachhaltige Verfügbarkeit der Weltraumdaten sowie die Förderung der Entwicklung neuer Informationsprodukte und -dienste, die sich auf diese Daten stützen, unternommen werden, einschließlich Innovationen bei der Handhabung, Weitergabe und Kompatibilität der Daten, vor allem Förderung des Zugangs zu und des Austauschs von geowissenschaftlichen Daten und Metadaten. Diese Tätigkeiten können auch höhere Renditen der Investitionen in die Weltrauminfrastruktur sicherstellen und zur Bewältigung gesellschaftlicher Herausforderungen dann beitragen, wenn sie global koordiniert werden, etwa im Rahmen des Globalen Überwachungssystems für Erdbeobachtungssysteme (GEOSS) – insbesondere durch vollständige Ausschöpfung des Potenzials des GMES-Programms als wichtigstem europäischem Beitrag hierzu – des europäischen Satellitennavigationsprogramms Galileo oder des Zwischenstaatlichen Sachverständigenrats für Klimafragen (IPCC). Eine rasche Einbeziehung dieser Innovationen in die einschlägigen Anwendungs- und Entscheidungsprozesse wird unterstützt. Dies schließt auch die Auswertung von Daten für weitere wissenschaftliche Untersuchungen ein.

(d) Beitrag der europäischen Forschung zu internationalen Weltraumpartnerschaften

Weltraumunternehmungen haben einen grundlegend globalen Charakter Dies wird insbesondere bei Tätigkeiten wie der Weltraumlageerfassung und bei vielen Projekten der Weltraumwissenschaft und Weltraumerkundung deutlich. Die Entwicklung modernster Weltraumtechnologien findet zunehmend innerhalb solcher internationaler Partnerschaften statt. Für die europäische Forschung und Industrie wäre es ein wichtiger Erfolgsfaktor, sich den Zugang zu diesen Partnerschaften zu sichern. Die Festlegung und Umsetzung von langfristig angelegten Fahrplänen und die Abstimmung mit den Partnern auf internationaler Ebene sind wesentlich für die Verwirklichung dieses Ziels.";"";"H2020";"H2020-EU.2.1.";"";"";"2014-09-22 20:42:17";"664207" +"H2020-EU.2.1.6.";"en";"H2020-EU.2.1.6.";"";"";"INDUSTRIAL LEADERSHIP - Leadership in enabling and industrial technologies – Space";"Space";"

INDUSTRIAL LEADERSHIP - Leadership in enabling and industrial technologies – Space

Specific objective for space

The specific objective of space research and innovation is to foster a cost-effective competitive and innovative space industry (including SMEs) and research community to develop and exploit space infrastructure to meet future Union policy and societal needs.Strengthening the European public and private space sector by boosting space research and innovation is vital to maintain and safeguard Europe's capability to use space in support of Union policies, international strategic interests and competitiveness amongst established and emerging space faring nations. Action at Union level will be carried out in conjunction with space research activities of the Member States and the European Space Agency (ESA), aiming at building up complementarity amongst different actors.

Rationale and Union added value

Space is an important, but frequently invisible enabler of diverse services and products crucial to modern day society, such as navigation and communication, as well as weather forecasts and geographic information derived from Earth observation by satellites. Policy formulation and implementation at European, national and regional level increasingly depend on space-derived information. The global space sector is rapidly growing and expanding into new regions (e.g. China, South America and Africa). European industry is at present a considerable exporter of first-class satellites for commercial and scientific purposes. Increasing global competition is challenging Europe's position in this area.Thus Europe has an interest in ensuring that its industry continues to thrive in this fiercely competitive market. In addition, data from European science satellites and probes have resulted in some of the most significant scientific breakthroughs in the last decades in Earth sciences, fundamental physics, astronomy and planetology. In addition, innovative space technologies, e.g. robotics, have contributed to the progress of knowledge and technology in Europe. With this unique capacity, the European space sector has a critical role to play in addressing the challenges identified by the Europe 2020 strategy.Research, technology development and innovation underpin capacities in space which are vital to European society. While the United States spends around 25 % of its space budget on R&D, the Union spends less than 10 %. Moreover, space research in the Union is addressed in the national programmes of Member States, ESA programmes and the Union Framework Programmes for research.To maintain Europe's technological and competitive edge and to capitalise on investments, Union level action, having regard to Article 4(3) and Article 189 TFEU, is needed in conjunction with the space research activities of the Member States and the ESA, which has managed industrial satellite development and deep space missions on an intergovernmental basis for the ESA Member States since 1975. Union level action is also needed to promote the participation of the best researchers from all Member States, and to lower the barriers for collaborative space research projects across national borders.In addition, the information provided by European satellites will offer an increasing potential for further development of innovative satellite-based downstream services. This is a typical activity sector for SMEs and should be supported by research and innovation measures in order to reap the full benefits of this opportunity, and especially of the considerable investments made on the two Union programmes Galileo and Copernicus.Space naturally transcends terrestrial boundaries, providing a unique vantage point of global dimension, thus giving rise to large-scale projects which are carried out in international co-operation. To play a significant role in such international space activities in the next decades, both a common European space policy and European level space research and innovation activities are indispensable.Space research and innovation under Horizon 2020 aligns with the Union space policy priorities and the needs of the European operational programmes as they continue to be defined by the Council and the Commission (6).European Space infrastructure such as the Copernicus and Galileo programmes are a strategic investment, and the development of innovative downstream applications is necessary. To this end, the application of space technologies shall be supported through the respective specific objectives of the priority 'Societal challenges', where appropriate, with the aim of securing socio-economic benefits as well as return on investment and European leadership in downstream applications.

Broad lines of the activities

(a) Enabling European competitiveness, non-dependence and innovation of the European space sector

This entails safeguarding and further developing a competitive, sustainable and entrepreneurial space industry in combination with a world-class space research community to maintain and strengthen European leadership and non-dependence in space systems to foster innovation in the space sector, and to enable space-based terrestrial innovation, for example by using remote sensing and navigation data.

(b) Enabling advances in space technologies

This aims at developing advanced and enabling space technologies and operational concepts from idea to demonstration in space. This includes technologies supporting access to space, technologies for the protection of space assets from threats such as debris and solar flares, as well as satellite telecommunication, navigation and remote sensing. The development and application of advanced space technologies requires the continuous education and training of highly skilled engineers and scientists as well as strong links between them and the users of space applications.

(c) Enabling exploitation of space data

A considerably increased exploitation of data from European satellites (scientific, public or commercial) can be achieved if further effort is made for the processing, archiving, validation, standardisation and sustainable availability of space data as well as for supporting the development of new information products and services resulting from those data, having regard to Article 189 TFEU, including innovations in data handling, dissemination and interoperability, in particular promotion of access to and exchange of Earth science data and metadata. These activities can also ensure a higher return on investment of space infrastructure and contribute to tackling societal challenges, in particular if coordinated in a global effort such as through the Global Earth Observation System of Systems (GEOSS), namely by fully exploiting the Copernicus programme as its main European contribution, the European satellite navigation programme Galileo or the Intergovernmental Panel on Climate Change (IPCC) for climate change issues. A fast introduction of these innovations into the relevant application and decision-making processes will be supported. This also includes the exploitation of data for further scientific investigation.

(d) Enabling European research in support of international space partnerships

Space undertakings have a fundamentally global character. This is particularly clear for activities such as Space Situational Awareness (SSA), and many space science and exploration projects. The development of cutting edge space technology is increasingly taking place within such international partnerships. Ensuring access to these constitutes an important success factor for European researchers and industry. The definition and implementation of long-term roadmaps and the coordination with international partners are essential to this objective.";"";"H2020";"H2020-EU.2.1.";"";"";"2014-09-22 20:42:17";"664207" +"H2020-EU.2.1.6.";"it";"H2020-EU.2.1.6.";"";"";"LEADERSHIP INDUSTRIALE - Leadership nel settore delle tecnologie abilitanti e industriali – Spazio";"Space";"

LEADERSHIP INDUSTRIALE - Leadership nel settore delle tecnologie abilitanti e industriali – Spazio

Obiettivo specifico per lo spazio

L'obiettivo specifico della ricerca e dell'innovazione nel settore spaziale è promuovere un'industria (comprese le PMI) e una comunità di ricerca spaziali efficienti in termini di costi, concorrenziali e innovative al fine di sviluppare e sfruttare le infrastrutture spaziali per soddisfare le future esigenze della politica dell'Unione e della società.Rafforzare il settore spaziale europeo pubblico e privato per mezzo della promozione della ricerca e dell'innovazione spaziali è essenziale per mantenere e garantire la capacità dell'Europa di usare lo spazio a sostegno delle politiche dell'Unione, degli interessi strategici internazionali e della competitività tra nazioni consolidate ed emergenti in ambito spaziale. Le azioni a livello dell'Unione saranno attuate congiuntamente alle attività di ricerca spaziale degli Stati membri e dell'Agenzia spaziale europea (ESA), mirando a creare complementarità tra i diversi attori.

Motivazione e valore aggiunto dell'Unione

Lo spazio è un importante ma spesso invisibile motore di diversi servizi e prodotti fondamentali per la società moderna, come la navigazione e la comunicazione, nonché le previsioni meteorologiche e le informazioni geografiche basate sull'osservazione della Terra mediante satelliti. La formulazione e l'attuazione delle politiche a livello europeo, nazionale e regionale dipendono sempre più da informazioni derivanti dallo spazio. Il settore spaziale globale è in rapida crescita ed espansione in nuove regioni (ad esempio in Cina, Sud America e Africa). L'industria europea è attualmente un notevole esportatore di satelliti di prim'ordine per usi scientifici e commerciali. La crescente concorrenza mondiale rappresenta una sfida per la posizione dell'Europa in questo settore.L'Europa ha quindi interesse a garantire che la sua industria continui a prosperare in questo mercato estremamente competitivo. I dati delle sonde e dei satelliti scientifici europei hanno consentito inoltre alcuni tra i più importanti risultati scientifici degli ultimi decenni nell'ambito delle scienze della Terra, della fisica fondamentale, dell'astronomia e della planetologia. Inoltre le tecnologie spaziali innovative quali la robotica hanno contribuito al progresso della conoscenza e della tecnologia in Europa. Grazie a questa capacità unica, il settore spaziale europeo svolge un ruolo essenziale nell'affrontare le sfide identificate dalla strategia Europa 2020.Ricerca, sviluppo tecnologico e innovazione sostengono capacità nel settore spaziale di vitale importanza per la società europea. Mentre gli Stati Uniti spendono circa il 25 % del loro bilancio in ambito spaziale per R&S, l'Unione ne spende meno del 10 %. La ricerca spaziale nell'Unione è inoltre affrontata nei programmi nazionali degli Stati membri, nei programmi dell'ESA e nei programmi quadro di ricerca dell'Unione.Per mantenere il vantaggio tecnologico e concorrenziale dell'Europa e mettere a frutto gli investimenti occorre intervenire a livello di Unione, tenendo conto dell'articolo 4, paragrafo 3, e dell'articolo 189 TFUE, in congiunzione con le attività di ricerca spaziale degli Stati membri e dell'ESA, che dal 1975 gestisce su base intergovernativa, per gli Stati membri che aderiscono all'ESA, lo sviluppo dei satelliti industriali e le missioni nello spazio profondo. Occorre intervenire a livello di Unione anche per promuovere la partecipazione dei migliori ricercatori provenienti da tutti gli Stati membri e ridurre le barriere transfrontaliere ai progetti collaborativi di ricerca spaziale.Le informazioni fornite dai satelliti europei offriranno inoltre un potenziale crescente di ulteriore sviluppo di servizi satellitari innovativi discendenti. Si tratta di un tipico settore di attività per le PMI ed è opportuno che sia sostenuto da misure di ricerca e innovazione al fine di cogliere tutti i benefici di questa possibilità, in particolare dei notevoli investimenti effettuati sui due programmi dell'Unione Galileo e Copernicus.Lo spazio trascende naturalmente i confini terrestri, offrendo un punto di osservazione unico di dimensione mondiale, suscettibile di dar luogo a progetti su vasta scala svolti attraverso la cooperazione internazionale. Per svolgere un ruolo significativo in queste attività spaziali internazionali nei prossimi decenni, sono indispensabili sia una politica spaziale europea comune, sia attività di ricerca e innovazione nel settore spaziale a livello europeo.La ricerca e l'innovazione spaziali nell'ambito di Orizzonte 2020 sono allineate alle priorità della politica spaziale dell'Unione e alle esigenze dei programmi operativi europei, poiché continuano a essere definite dal Consiglio e dalla Commissione.Le infrastrutture spaziali europee quali i programmi Copernicus e Galileo costituiscono un investimento strategico ed è necessario sviluppare applicazioni innovative a valle. A tal fine l'applicazione delle tecnologie spaziali è sostenuta, ove adeguato, attraverso i rispettive obiettivi specifici della priorità ""Sfide per la società"", al fine di assicurare i vantaggi socioeconomici nonché il ritorno sugli investimenti e la leadership europea nelle applicazioni a valle.

Le grandi linee delle attività

(a) Favorire la competitività europea, la non dipendenza e l'innovazione del settore spaziale europeo

Questo comporta il mantenimento e l'ulteriore sviluppo di un'industria spaziale concorrenziale, sostenibile e imprenditoriale, in combinazione con una comunità di ricerca spaziale di livello mondiale, al fine di mantenere e rafforzare la leadership europea e la non dipendenza nel campo dei sistemi spaziali per promuovere l'innovazione nei sistemi spaziali, nonché per consentire l'innovazione di terra con base spaziale, ad esempio tramite l'uso dei sistemi di telerilevamento e dei dati di navigazione.

(b) Consentire progressi nell'ambito delle tecnologie spaziali

Quest'iniziativa mira a sviluppare tecnologie spaziali avanzate e abilitanti e concetti operativi dall'idea alla dimostrazione nello spazio. Ciò comprende le tecnologie a sostegno dell'accesso allo spazio, le tecnologie per la protezione dei dispositivi spaziali da minacce quali detriti spaziali ed eruzioni solari, nonché per le telecomunicazioni satellitari, la navigazione e il telerilevamento. Lo sviluppo e l'applicazione di tecnologie spaziali avanzate richiede un'istruzione e una formazione continue di ingegneri e scienziati altamente qualificati, nonché forti connessioni tra questi e gli utenti delle applicazioni spaziali.

(c) Permettere lo sfruttamento dei dati spaziali

È possibile conseguire un aumento considerevole dello sfruttamento dei dati provenienti dai satelliti europei (scientifici, pubblici o commerciali) con un ulteriore sforzo per il trattamento, l'archiviazione, la convalida, la standardizzazione e la disponibilità sostenibile dei dati spaziali, nonché per sostenere lo sviluppo di nuovi prodotti e servizi di informazione derivanti da tali dati, tenendo conto dell'articolo 189 TFUE, ivi incluse le innovazioni nella gestione, nella diffusione e nell'interoperabilità dei dati, segnatamente la promozione dell'accesso a dati e metadati delle scienze della Terra e dello scambio di questi ultimi. Tali attività possono altresì garantire un ritorno degli investimenti più elevato per le infrastrutture spaziali e contribuire ad affrontare le sfide per la società, in particolare se coordinate in uno sforzo globale, come per esempio attraverso il Sistema di sistemi per l'osservazione globale della terra (GEOSS), vale a dire sfruttando appieno il programma Copernicus in quanto principale contributo europeo, il programma europeo di navigazione satellitare Galileo o il Gruppo intergovernativo di esperti sul cambiamento climatico (IPCC) per le questioni legate ai cambiamenti climatici. Sarà dato sostegno a una rapida introduzione di tali innovazioni nei pertinenti processi decisionali e di applicazione. Ciò comprende altresì l'utilizzo dei dati per ulteriori indagini scientifiche.

(d) Promuovere la ricerca europea per sostenere partenariati internazionali nel settore dello spazio

Le imprese spaziali hanno una natura intrinsecamente globale. Questo è particolarmente evidente per attività quale il sistema di sorveglianza dell'ambiente spaziale (Space Situational Awareness, SSA) e molti progetti di scienze ed esplorazione spaziali. Lo sviluppo di una tecnologia spaziale di punta avviene sempre più nell'ambito di partenariati di tipo internazionale. Garantire l'accesso a queste iniziative rappresenta un importante fattore di successo per l'industria e i ricercatori europei. La definizione e l'attuazione di tabelle di marcia a lungo termine e il coordinamento con i partner internazionali sono fondamentali per il conseguimento di tale obiettivo.";"";"H2020";"H2020-EU.2.1.";"";"";"2014-09-22 20:42:17";"664207" +"H2020-EU.2.1.6.";"pl";"H2020-EU.2.1.6.";"";"";"WIODĄCA POZYCJA W PRZEMYŚLE - Wiodąca pozycja w zakresie technologii prorozwojowych i przemysłowych – Przestrzeń kosmiczna";"Space";"

WIODĄCA POZYCJA W PRZEMYŚLE - Wiodąca pozycja w zakresie technologii prorozwojowych i przemysłowych – Przestrzeń kosmiczna

Cel szczegółowy w dziedzinie przestrzeni kosmicznej

Celem szczegółowym badań naukowych i innowacji w dziedzinie przestrzeni kosmicznej jest wspieranie racjonalnego kosztowo, konkurencyjnego i innowacyjnego przemysłu kosmicznego (w tym MŚP) i środowiska naukowego w celu rozwijania i eksploatacji infrastruktury na potrzeby takiej działalności, z myślą o zaspokojeniu przyszłych potrzeb politycznych i społecznych Unii.Wzmocnienie europejskiego publicznego i prywatnego sektora kosmicznego poprzez wspieranie badań naukowych i innowacji dotyczących przestrzeni kosmicznej ma podstawowe znaczenie dla utrzymania i zabezpieczenia zdolności Europy do wykorzystywania przestrzeni kosmicznej z myślą o polityce Unii, międzynarodowych interesach strategicznych i konkurencyjności wśród państw prowadzących politykę kosmiczną, zarówno mających już ugruntowaną pozycję, jak i stawiających pierwsze kroki. Działania na szczeblu Unii będą realizowane w połączeniu z badaniami przestrzeni kosmicznej prowadzonymi przez państwa członkowskie i Europejską Agencję Kosmiczną (ESA) w dążeniu do zwiększenia komplementarności działań różnych podmiotów.

Uzasadnienie i unijna wartość dodana

Przestrzeń kosmiczna to ważny, ale często niewidoczny czynnik wspomagający rozwój różnych usług i produktów istotnych dla dzisiejszego społeczeństwa, takich jak nawigacja i komunikacja, a także prognozy pogody i informacja geograficzna oparte na danych pochodzących z obserwacji Ziemi z satelitów. Formułowanie i wdrażanie polityki na szczeblu europejskim, krajowym i regionalnym w coraz większym stopniu zależy od informacji pozyskiwanych w przestrzeni kosmicznej. Globalny sektor kosmiczny rozwija się w szybkim tempie i obejmuje nowe regiony (np. Chiny, Amerykę Południową oraz Afrykę). Przemysł europejski jest obecnie ważnym eksporterem najwyższej jakości satelitów wykorzystywanych w celach komercyjnych i naukowych. Coraz większa konkurencja globalna zagraża pozycji Europy.W związku z tym Europa powinna zapewnić dalsze powodzenie swojego przemysłu na tym bardzo konkurencyjnym rynku. Ponadto dane zgromadzone przez europejskie satelity i sondy naukowe doprowadziły do niektórych spośród najważniejszych przełomów ostatnich dziesięcioleci w naukach o Ziemi, fizyce podstawowej, astronomii i planetologii. Poza tym innowacyjne technologie kosmiczne, np. robotyka, przyczyniły się do postępu wiedzy i techniki w Europie. Dzięki temu wyjątkowemu potencjałowi europejski sektor kosmiczny ma do odegrania bardzo ważną rolę w stawianiu czoła wyzwaniom określonym w strategii „Europa 2020”.Badania naukowe, rozwój technologii i innowacje stanowią podstawę potencjału w zakresie przemysłu kosmicznego niezbędnego społeczeństwu europejskiemu. Podczas gdy Stany Zjednoczone wydają ok. 25% ich budżetu w dziedzinie przestrzeni kosmicznej na działalność badawczo-rozwojową, w Unii odsetek ten wynosi mniej niż 10%. Ponadto badania naukowe w zakresie przestrzeni kosmicznej w Unii są uwzględnione w programach krajowych państw członkowskich, programach ESA oraz programach ramowych Unii w zakresie badań.Aby utrzymać przewagę konkurencyjną i technologiczną Europy oraz wykorzystać dokonane inwestycje, niezbędne są działania na szczeblu unijnym – z uwzględnieniem art. 4 ust. 3 i art. 189 TFUE – w połączeniu z działaniami w zakresie badań przestrzeni kosmicznej prowadzonymi przez państwa członkowskie i ESA, która od roku 1975 zarządza rozwojem satelitów przemysłowych i misjami kosmicznymi w imieniu państw członkowskich ESA na zasadzie współpracy międzyrządowej. Działania na szczeblu Unii są również konieczne po to, by promować udział najlepszych naukowców ze wszystkich państw członkowskich i aby obniżyć bariery we współpracy ponad granicami państwowymi w dziedzinie kosmicznych projektów badawczych.Ponadto informacje przekazywane przez europejskie satelity będą zapewniać coraz większy potencjał dalszego rozwoju satelitarnych, innowacyjnych usług niższego szczebla. Jest to typowy sektor działalności MŚP, który powinien być wspierany środkami w zakresie badań naukowych i innowacji w celu osiągnięcia pełnych korzyści związanych z możliwościami dostępnymi w tej dziedzinie, w szczególności w związku ze znacznymi inwestycjami poczynionymi w ramach dwóch programów Unii – Galileo i Copernicus.Przestrzeń kosmiczna w sposób naturalny przekracza ziemskie granice, stanowiąc jedyną w swoim rodzaju dziedzinę o wymiarze globalnym, zarazem stając się miejscem realizacji wielkoskalowych projektów prowadzonych we współpracy międzynarodowej. Wspólna europejska polityka w zakresie przestrzeni kosmicznej i badania naukowe na szczeblu europejskim są niezbędne dla odegrania ważnej roli w międzynarodowych działaniach dotyczących przestrzeni kosmicznej w nadchodzących dziesięcioleciach.Badania naukowe i innowacje dotyczące przestrzeni kosmicznej prowadzone w ramach programu „Horyzont 2020” odpowiadają priorytetom polityki kosmicznej Unii oraz potrzebom europejskich programów operacyjnych definiowanym przez Radę i Komisję (6).Europejska infrastruktura kosmiczna, taka jak infrastruktura programów Copernicus i Galileo, to inwestycje strategiczne, konieczny jest zatem rozwój innowacyjnych zastosowań niższego szczebla. Z tego względu zastosowanie technologii kosmicznych wspiera się w ramach odpowiednich celów szczegółowych priorytetu „Wyzwania społeczne”, w stosownych przypadkach z myślą o zapewnieniu korzyści społeczno-gospodarczych, a także o zwrocie z inwestycji i wiodącej roli Europy w zakresie zastosowań niższego szczebla.

Ogólne kierunki działań

(a) Wspomaganie konkurencyjności Europy, niezależności oraz innowacji w europejskim sektorze kosmicznym

Wiąże się to z zabezpieczeniem i dalszym rozwijaniem odznaczającego się konkurencyjnością i przedsiębiorczością oraz zrównoważonego przemysłu kosmicznego w połączeniu ze światowej klasy społecznością specjalistów ds. badań w dziedzinie przestrzeni kosmicznej, w celu utrzymania i wzmocnienia wiodącej pozycji Europy i niezależności w dziedzinie systemów kosmicznych, w celu wspierania innowacji w sektorze kosmicznym, a także wspomagania stymulowanych badaniami w przestrzeni kosmicznej innowacji na powierzchni Ziemi, np. w dziedzinie teledetekcji i danych nawigacyjnych.

(b) Wspomaganie postępów w zakresie technologii kosmicznych

Ma to na celu opracowanie zaawansowanych i prorozwojowych technologii kosmicznych i koncepcji operacyjnych od poziomu pomysłu po demonstrację w przestrzeni kosmicznej. Obejmuje to technologie wspomagające dostęp do przestrzeni kosmicznej, technologie służące ochronie systemów kosmicznych przed zagrożeniami takimi jak kosmiczne śmieci i rozbłyski słoneczne, oraz satelitarne technologie łączności, nawigacji i teledetekcji. Opracowanie i zastosowanie zaawansowanych technologii kosmicznych wymaga ciągłego kształcenia i szkolenia wysoce wykwalifikowanych inżynierów i naukowców, a także silnych powiązań między nimi a użytkownikami zastosowań kosmicznych.

(c) Umożliwienie wykorzystania danych pozyskanych w przestrzeni kosmicznej

Znaczną intensyfikację wykorzystania danych pochodzących z satelitów europejskich (naukowych, publicznych lub komercyjnych) można osiągnąć, jeżeli kontynuowane będą wysiłki w zakresie przetwarzania, archiwizowania, walidacji i standaryzacji oraz trwałej dostępności danych pozyskanych w przestrzeni kosmicznej, a także w zakresie wspierania rozwoju nowych produktów i usług informacyjnych opartych na tych danych – z uwzględnieniem art. 189 TFUE – w tym innowacji w zakresie przetwarzania, upowszechniania i interoperacyjności danych; w szczególności wspieranie dostępu do naukowych danych i metadanych dotyczących Ziemi oraz ich wymiana. Takie działania mogą również zapewnić większy zwrot z inwestycji w infrastrukturę kosmiczną i przyczynić się do sprostania wyzwaniom społecznym, w szczególności w przypadku ich skoordynowania w ramach globalnego wysiłku, np. poprzez Globalną Sieć Systemów Obserwacji Ziemi (GEOSS), tj. poprzez pełne wykorzystanie programu Copernicus jako głównego wkładu europejskiego w tę sieć, europejski program nawigacji satelitarnej Galileo lub Międzyrządowego Zespołu ds. Zmian Klimatu (IPCC) w odniesieniu do kwestii dotyczących zmiany klimatu. Wspierane będzie szybkie wprowadzenie tych innowacji do odpowiednich zastosowań i procesów decyzyjnych. Obejmuje to również wykorzystywanie danych do dalszych badań naukowych.

(d) Umożliwienie prowadzenia europejskich badań naukowych wspierających międzynarodowe partnerstwa w dziedzinie przestrzeni kosmicznej

Przedsięwzięcia kosmiczne mają zasadniczo globalny charakter. Jest to szczególnie wyraźne w przypadku takich operacji, jak orientacja sytuacyjna w przestrzeni kosmicznej oraz wiele kosmicznych misji naukowych i eksploracyjnych. Przełomowe technologie kosmiczne w coraz większym stopniu opracowywane są w ramach takich partnerstw międzynarodowych. Zapewnienie dostępu do nich stanowi ważny czynnik decydujący o powodzeniu europejskich naukowców i przemysłu. Kluczem do osiągnięcia tego celu jest określenie i wykonanie długoterminowych planów działań oraz koordynacja z partnerami międzynarodowymi.";"";"H2020";"H2020-EU.2.1.";"";"";"2014-09-22 20:42:17";"664207" +"H2020-EU.2.1.6.";"fr";"H2020-EU.2.1.6.";"";"";"PRIMAUTÉ INDUSTRIELLE - Primauté dans le domaine des technologies génériques et industrielles – Espace";"Space";"

PRIMAUTÉ INDUSTRIELLE - Primauté dans le domaine des technologies génériques et industrielles – Espace

Objectif spécifique concernant l'espace

L'objectif spécifique de la recherche et de l'innovation dans le domaine de l'espace est de promouvoir le caractère rentable, compétitif et innovant de l'industrie spatiale (y compris les PME) et de la communauté des chercheurs, pour permettre le développement et l'exploitation d'une infrastructure spatiale capable de répondre aux futurs besoins stratégiques et sociétaux de l'Union.Renforcer le secteur spatial européen, tant public que privé, en favorisant la recherche et l'innovation dans le domaine de l'espace est essentiel pour préserver et sauvegarder la capacité de l'Europe d'utiliser l'espace, de manière à soutenir les politiques de l'Union, à défendre les intérêts stratégiques internationaux et à garantir la compétitivité de l'Union face aux nations spatiales établies et émergentes. L'action au niveau de l'Union sera menée en liaison avec les activités de recherche spatiale menées par les États membres et l'Agence spatiale européenne (ESA), l'objectif étant de développer la complémentarité entre les différents acteurs.

Justification et valeur ajoutée de l'Union

L'espace est un support important, mais souvent invisible, pour une variété de produits et de services indispensables à la société moderne, tels que la navigation et les communications, ainsi que les prévisions météorologiques et les informations géographiques fournies par les satellites d'observation de la terre. La définition et la mise en œuvre des politiques à l'échelon européen, national et régional sont de plus en plus dépendantes d'informations provenant d'applications spatiales. Sur la scène mondiale, le secteur spatial est en forte croissance et s'étend rapidement à de nouvelles régions (telles que la Chine, l'Amérique du Sud et l'Afrique). L'industrie européenne est actuellement un très grand exportateur de satellites de première qualité destinés à une exploitation scientifique et commerciale. La concurrence croissante sur la scène internationale menace la position de l'Europe dans ce domaine.Cette dernière a donc tout intérêt à poser les conditions qui permettront à son industrie de continuer à prospérer sur ce marché hautement concurrentiel. Les données provenant des sondes et des satellites scientifiques européens ont par ailleurs permis certaines des avancées scientifiques les plus significatives des dernières décennies dans le domaine des sciences de la terre, de la physique fondamentale, de l'astronomie et de la planétologie. En outre, les technologies spatiales innovantes, par exemple la robotique, ont contribué au progrès des connaissances et des techniques en Europe. De par cette capacité exceptionnelle, le secteur spatial européen a un rôle fondamental à jouer en vue de relever les défis recensés dans le cadre de la stratégie Europe 2020.La recherche, le développement technologique et l'innovation sous-tendent les capacités dans le domaine spatial, qui sont essentielles à la société européenne. Alors que les États-Unis consacrent environ 25 % du budget de leur politique spatiale aux activités de recherche et de développement, cette proportion n'atteint pas 10 % au sein de l'Union. La recherche spatiale au sein de l'Union est par ailleurs répartie entre les programmes nationaux des États membres, les programmes de l'ESA et les programmes-cadres de l'Union pour la recherche.Pour rester à la pointe sur le plan technologique et concurrentiel tout en tirant parti des investissements consentis, il convient d'agir à l'échelle de l'Union, compte tenu de l'article 4, paragraphe 3, et de l'article 189 du traité sur le fonctionnement de l'Union européenne, en liaison avec les activités de recherches spatiales menées par les États membres et l'ESA, agence qui, depuis 1975, gère sur une base intergouvernementale, au nom de ses États membres, le développement industriel des satellites et les missions vers l'espace lointain. Il convient également d'agir à l'échelle de l'Union pour promouvoir la participation des meilleurs chercheurs de l'ensemble des États membres et réduire les entraves aux projets de recherche collaboratifs transnationaux dans le domaine spatial.Les informations apportées par les satellites européens offriront par ailleurs de plus en plus d'occasions de développer des services satellitaires en aval innovants. Il s'agit d'un secteur d'activité typiquement ouvert aux PME, qui devrait être soutenu par des mesures en faveur de la recherche et de l'innovation de manière à tirer pleinement profit des possibilités qu'il offre, et notamment des investissements considérables réalisés dans le cadre des deux programmes de l'Union que sont Galileo et Copernicus.Les questions liées à l'espace transcendent naturellement les frontières terrestres et offrent une assise unique à la collaboration mondiale, permettant ainsi la réalisation de projets d'envergure dans le cadre d'une coopération internationale. Pour jouer un rôle significatif dans de telles activités spatiales internationales au cours des prochaines décennies, l'Europe doit impérativement se doter d'une politique spatiale commune et mener, à son niveau, des activités de recherche et d'innovation dans le domaine spatial.Les activités de recherche et d'innovation dans le domaine spatial réalisées dans le cadre d'Horizon 2020 sont alignées sur les priorités de la politique spatiale européenne, ainsi que sur les besoins des programmes opérationnels européens, qui restent définis par le Conseil et la Commission.Les infrastructures spatiales européennes telles que les programmes Copernicus et Galileo constituent un investissement stratégique, et il est nécessaire de développer des applications en aval innovantes. À cet effet, la mise en application des technologies spatiales est soutenue en tant que de besoin par le biais des objectifs spécifiques correspondants de la priorité «Défis de société», dans le but d'obtenir des avantages socioéconomiques ainsi qu'un retour sur investissement et d'assurer la primauté européenne dans le domaine des applications en aval.

Grandes lignes des activités

(a) Assurer la compétitivité et l'indépendance de l'Europe et promouvoir l'innovation dans le secteur spatial européen

Il s'agit à ce titre de conserver et de renforcer encore une industrie spatiale compétitive, durable et entreprenante associée à une communauté de chercheurs d'envergure mondiale dans le domaine spatial, afin de préserver et de conforter la primauté et l'indépendance de l'Europe en matière de systèmes spatiaux, de promouvoir l'innovation dans le secteur spatial et de favoriser l'innovation terrestre fondée sur les technologies spatiales, et notamment sur l'exploitation des données de télédétection et de navigation.

(b) Permettre des avancées dans le domaine des technologies spatiales

L'objectif est de permettre le développement de technologies spatiales et de concepts opérationnels avancés et catalyseurs, du stade de l'idée à celui de la démonstration en milieu spatial. Il s'agit notamment des technologies soutenant l'accès à l'espace, des technologies permettant d'assurer la protection des équipements spatiaux contre les menaces telles que les débris et les éruptions solaires ainsi que des technologies de télécommunication par satellite, de navigation et de télédétection. Le développement et la mise en œuvre de technologies spatiales avancées nécessitent un système d'éducation et de formation continues pour disposer d'ingénieurs et de scientifiques hautement qualifiés, ainsi que des liens étroits entre ceux-ci et les utilisateurs des applications spatiales.

(c) Permettre l'exploitation des données spatiales

L'exploitation des données provenant des satellites européens (qu'ils soient scientifiques, publics ou commerciaux) peut progresser de manière considérable moyennant un nouvel effort pour le traitement, l'archivage, la validation, la normalisation et la mise à disposition durable des données spatiales, ainsi que pour soutenir le développement de nouveaux produits et services résultant de ces données, dans le domaine de l'information, en tenant compte de l'article 189 du traité sur le fonctionnement de l'Union européenne, y compris des innovations dans le domaine du traitement, de la diffusion et de l'interopérabilité des données, notamment la promotion d'un accès aux données et métadonnées relatives aux sciences de la terre et à leur échange. Ces activités peuvent également garantir un meilleur retour sur investissement des infrastructures spatiales et contribuer à relever les défis de société, surtout si elles sont coordonnées dans le cadre d'initiatives mondiales, telles que le réseau mondial des systèmes d'observation de la Terre, en l'occurrence en exploitant pleinement le programme Copernicus, qui constitue la principale contribution européenne, le programme européen de navigation par satellite Galileo ou le Groupe d'experts intergouvernemental sur l'évolution du climat. Un soutien sera accordé à l'intégration rapide de ces innovations dans les processus de demande et de prise de décision. Cela recouvre également l'exploitation des données à des fins de recherches scientifiques complémentaires.

(d) Promouvoir la recherche européenne pour soutenir les partenariats internationaux dans le domaine spatial

Les entreprises liées à l'espace ont un caractère fondamentalement mondial. C'est particulièrement manifeste dans le cas d'activités telles que le dispositif de surveillance de l'espace (SSA), ainsi que de nombreux projets scientifiques et d'exploration dans le domaine spatial. De plus en plus, le développement des technologies de pointe dans le secteur spatial a lieu dans le cadre de tels partenariats internationaux. Une participation à de tels partenariats constitue pour les chercheurs européens et les entreprises européennes un important facteur de succès. L'élaboration et la mise en œuvre de feuilles de route à long terme, ainsi que la coordination avec des partenaires au niveau international, sont autant de paramètres fondamentaux pour que cet objectif soit réalisé.";"";"H2020";"H2020-EU.2.1.";"";"";"2014-09-22 20:42:17";"664207" +"H2020-EU.2.1.6.";"es";"H2020-EU.2.1.6.";"";"";"LIDERAZGO INDUSTRIAL - Liderazgo en tecnologías industriales y de capacitación – Espacio";"Space";"

LIDERAZGO INDUSTRIAL - Liderazgo en tecnologías industriales y de capacitación – Espacio

Objetivo específico para el espacio

El objetivo específico de la investigación e innovación espaciales es fomentar una industria espacial y una comunidad investigadora competitivas, económicamente eficientes e innovadoras (incluidas las PYME) para desarrollar y explotar la infraestructura espacial al servicio de la futura política de la Unión y las necesidades de la sociedad.Reforzar el sector espacial europeo público y privado impulsando la investigación y la innovación es esencial para mantener y salvaguardar la capacidad de Europa de utilizar el espacio e intervenir en el mismo en apoyo de las políticas de la Unión, los intereses estratégicos internacionales y la competitividad entre las naciones con tecnología espacial establecidas y emergentes. La actuación a nivel de la Unión se llevará a cabo en conjunción con las actividades de investigación espacial de los Estados miembros y de la Agencia Espacial Europea (AEE), con el fin de lograr la complementariedad entre diferentes actores.

Justificación y valor añadido de la Unión

El espacio es un factor importante, aunque a menudo invisible, que condiciona la existencia de algunos servicios y productos vitales para la sociedad moderna, como la navegación y la comunicación, así como las previsiones meteorológicas y la información geográfica derivadas de la Observación de la Tierra por satélites. La formulación y aplicación de las políticas a nivel europeo, nacional y regional dependen cada vez más de la información obtenida gracias al espacio. El sector espacial mundial está creciendo rápidamente y extendiéndose a nuevas regiones (como China o América del Sur o África). La industria europea es actualmente un gran exportador de satélites de primera clase para fines científicos y comerciales. La creciente competencia mundial está poniendo en peligro la posición de Europa en este campo.Así pues, a Europa le interesa que su industria siga prosperando en este mercado sumamente competitivo. Además, los datos procedentes de las sondas y satélites científicos europeos han dado lugar a algunos de los avances científicos más importantes de las últimas décadas en las ciencias de la tierra, la física fundamental, la astronomía y la planetología. Además, las tecnologías espaciales innovadoras, como p. ej. la robótica, han contribuido al progreso del saber y de la tecnología en Europa. Con esta capacidad singular, el sector espacial europeo debe desempeñar un papel esencial a la hora de abordar los retos indicados en la estrategia Europa 2020.La investigación, el desarrollo tecnológico y la innovación sustentan unas capacidades en el espacio que son fundamentales para la sociedad europea. Mientras que los Estados Unidos dedican aproximadamente el 25 % de su presupuesto espacial a la I+D, la Unión gasta menos del 10 %. Además, la investigación espacial en la Unión se aborda a través de los programas nacionales de Estados miembros, los programas de la AEE y el Séptimo Programa Marco de la UE.Para mantener la ventaja competitiva y tecnológica de Europa y capitalizar las inversiones, es necesaria una acción a nivel de la Unión, a tenor del artículo 4, apartado 3, y del artículo 189 del TFUE, en conjunción con las actividades de investigación espacial de los Estados miembros y la AEE, que viene gestionando desde 1975 el desarrollo de satélites industriales y misiones en el espacio profundo sobre una base intergubernamental para los Estados miembros que participan en la AEE. También es necesaria la actuación a nivel de la Unión para fomentar la participación de los mejores investigadores de todos los Estados miembros y superar los obstáculos que encuentran los proyectos de investigación espacial en colaboración a través de las fronteras nacionales.Además, la información facilitada por los satélites europeos ofrecerá un creciente potencial para seguir desarrollando servicios ulteriores innovadores basados en los satélites. Este es un sector de actividad típico de las PYME, que deben ser apoyadas con medidas de investigación e innovación a fin de aprovechar plenamente los beneficios asociados a esta oportunidad y, especialmente, las considerables inversiones hechas en los dos programas de la Unión, Galileo y Copernicus.El espacio trasciende las fronteras terrestres de modo natural, proporcionando una perspectiva singular de dimensión mundial y suscitando por ende proyectos a gran escala que se llevan a cabo a través de la cooperación internacional. Para desempeñar un papel significativo en estas actividades espaciales internacionales en los próximos decenios, son indispensables tanto una política espacial europea común como actividades de investigación e innovación sobre el espacio a nivel europeo.La investigación e innovación espaciales en Horizonte 2020 se ajustarán a las prioridades y necesidades de los programas operativos europeos según sigan definiéndolas los Consejos ""Espacio"" de la Unión y la Comisión Europea.Las infraestructuras espaciales europeas como los programas Copernicus y Galileo constituyen una inversión estratégica y es necesario el fomento de aplicaciones descendentes innovadoras. Para ello, la aplicación de tecnologías espaciales recibirá apoyo mediante los respectivos objetivos específicos de la prioridad ""Retos de la sociedad"", cuando proceda, con el objetivo de garantizar ventajas socioeconómicas así como el rendimiento de las inversiones y el liderazgo europeo en materia de aplicaciones descendentes.

Líneas generales de las actividades

(a) Favorecer la competitividad, la no dependencia y la innovación en el sector espacial europeo

Esto supone salvaguardar y seguir desarrollando una industria espacial competitiva, sostenible y emprendedora en combinación con una comunidad de investigación espacial de categoría mundial para mantener y fortalecer el liderazgo europeo y la no dependencia en sistemas espaciales para fomentar la innovación en el sector espacial y hacer posible la innovación en tierra a partir del espacio, por ejemplo mediante la teledetección y los datos para navegación.

(b) Favorecer los avances en las tecnologías espaciales

El objetivo es desarrollar tecnologías espaciales avanzadas y generadoras y conceptos operativos que vayan de la idea a la demostración en el espacio. Ello incluye las tecnologías de apoyo del acceso al espacio, las tecnologías para la protección del patrimonio espacial frente a amenazas tales como la basura espacial y las fulguraciones solares, así como la navegación, la teledetección y las telecomunicaciones por satélite. Para desarrollar y aplicar tecnologías espaciales avanzadas son necesarias la educación y la formación permanentes de ingenieros y científicos altamente cualificados, así como unos sólidos vínculos entre estos y los usuarios de las aplicaciones espaciales.

(c) Favorecer la explotación de los datos espaciales

Resulta posible incrementar considerablemente la explotación de los datos procedentes de los satélites europeos (científicos, públicos o comerciales) si se lleva a cabo un mayor esfuerzo para el tratamiento, archivo, validación, normalización y disponibilidad sostenible de los datos espaciales, así como para apoyar la introducción de nuevos productos y servicios de información derivados de esos datos, a la vista del artículo 189 del TFUE, y las innovaciones en materia de manipulación, difusión e interoperabilidad de datos, en particular la promoción del acceso a los datos y metadatos en materia de ciencias de la Tierra y el intercambio de dichos datos, también pueden garantizar una mayor rentabilidad de la inversión en infraestructura espacial y contribuir a afrontar los retos de la sociedad, en particular si se coordinan en un esfuerzo mundial, por ejemplo a través del Sistema de Sistemas de Observación Mundial de la Tierra (GEOSS), concretamente mediante una plena explotación del programa Copernicus como contribución europea principal del citado sistema, el programa europeo de navegación por satélite Galileo, o el IPCC para las cuestiones relacionadas con el cambio climático. Se apoyará la rápida introducción de estas innovaciones en los procesos pertinentes de aplicación y de toma de decisiones. Ello incluye asimismo la explotación de los datos para investigaciones científicas ulteriores.

(d) Favorecer la investigación europea de apoyo a las asociaciones espaciales internacionales

La empresa del espacio tiene un carácter fundamentalmente planetario. Esto es especialmente obvio en el caso de actividades como el Conocimiento del Medio Espacial y muchos proyectos de ciencia y exploración del espacio. El desarrollo de una tecnología espacial de vanguardia se está produciendo cada vez en mayor medida dentro de estas asociaciones internacionales. Garantizar el acceso a ellas constituye un factor de éxito importante para los investigadores y la industria europeos. La definición y utilización de hojas de ruta a largo plazo y la coordinación con los socios internacionales resultan fundamentales para este objetivo.";"";"H2020";"H2020-EU.2.1.";"";"";"2014-09-22 20:42:17";"664207" +"H2020-EU.3.4.5.6.";"en";"H2020-EU.3.4.5.6.";"";"";"ITD Systems";"";"";"";"H2020";"H2020-EU.3.4.5";"";"";"2014-09-22 21:43:13";"665414" +"H2020-EU.2.1.5.";"de";"H2020-EU.2.1.5.";"";"";"FÜHRENDE ROLLE DER INDUSTRIE - Führende Rolle bei grundlegenden und industriellen Technologien - Fortgeschrittene Fertigung und Verarbeitung";"Advanced manufacturing and processing";"

FÜHRENDE ROLLE DER INDUSTRIE - Führende Rolle bei grundlegenden und industriellen Technologien - Fortgeschrittene Fertigung und Verarbeitung

Einzelziel

Einzelziel der Forschung und Innovation im Bereich fortgeschrittener Fertigung und Verarbeitung ist die Umwandlung der heutigen Fertigungsunternehmen, -systeme und -prozesse. Dazu müssen unter anderem Schlüsseltechnologien ausgenutzt werden, um wissensintensive, nachhaltige, ressourcenschonende und energieeffiziente branchenübergreifende Fertigungs- und Verarbeitungstechnologien zu schaffen, aus denen innovativere Produkte, Prozesse und Dienstleistungen hervorgehen. Die Ermöglichung neuer, nachhaltiger Produkte, Prozesse und Dienstleistungen und deren wettbewerbsgerechte Einführung sowie die fortgeschrittene Fertigung und Verarbeitung sind ebenso von wesentlicher Bedeutung für die Verwirklichung der Ziele des Schwerpunkts ""Gesellschaftlichen Herausforderungen"".

Begründung und Mehrwert für die Union

Mit einem Anteil von etwa 17 % am BIP und rund 22 Millionen Arbeitsplätzen (2007) in der Union ist die Fertigungsindustrie von großer Bedeutung für die europäische Wirtschaft. Der Abbau der Handelsschranken und die durch die Kommunikationstechnologie eröffneten Möglichkeiten führten zu einem starken Wettbewerb, weshalb die Fertigung zunehmend in Länder mit den niedrigsten Gesamtkosten verlagert wurde. Das europäische Fertigungskonzept muss sich grundlegend ändern, um weltweit wettbewerbsfähig zu bleiben. Um dies zu erreichen, kann Horizont 2020 dazu beitragen, alle einschlägigen interessierten Kreise zusammenzubringen.Europa muss stärker auf Unionsebene investieren, um seine Führung und Kompetenz bei den Fertigungstechnologien zu wahren, einen Wandel hin zu hochwertigen, wissensintensiven Gütern vollziehen und dabei die Rahmenbedingungen für eine nachhaltige Produktion und die Erbringung lebenslanger Serviceleistungen rund um das hergestellte Produkt schaffen. Ressourcenintensive Fertigungs- und Prozessindustrien müssen auf Unionsebene verstärkt Ressourcen und Wissen mobilisieren und stärker in Forschung, Entwicklung und Innovation investieren, um weitere Fortschritte hin zu einer wettbewerbsfähigen, ressourcenschonenden und nachhaltigen Wirtschaft mit niedrigem CO2-Ausstoß zu erzielen und um die vereinbarten Unionsvorgaben für die Reduzierung der Treibhausgasemissionen bis 2050 für die einzelnen Branchen zu erfüllen.Eine starke Unionspolitik wird dafür sorgen, dass Europa seine bestehenden Industrien ausbauen und die neu entstehenden Industrien der Zukunft fördern wird. Schätzungen zufolge wird dem Sektor der fortgeschrittenen Fertigungssysteme mit einer jährlichen Wachstumsrate von etwa 5 % und einer erwarteten Marktgröße von etwa 150 Mrd. EUR bis 2015 hinsichtlich Wertschöpfung und Stellenwert erhebliche Bedeutung zukommen %.Um die Herstellungs- und Verarbeitungskapazitäten in Europa zu halten, kommt es ganz entscheidend darauf an, Wissen und Know-how zu bewahren. Schwerpunkt der Forschungs- und Innovationstätigkeiten ist die nachhaltige und sichere Herstellung und Verarbeitung, die Einführung der notwendigen technischen Innovationen und die Kundenorientierung, um mit niedrigem Material- und Energieverbrauch wissensintensive Produkte und Dienstleistungen zu produzieren bzw. zu erbringen.Ferner muss Europa diese Grundlagentechnologien und das Wissen an andere produktive Sektoren weitergeben wie beispielsweise an den Bausektor, auf den rund 40 % des gesamten Energieverbrauchs in Europa entfallen und der für 36 % der CO2-Emissionen verantwortlich ist und damit eine Hauptquelle für die Treibhausgasemissionen darstellt. Der Bausektor, der mit 3 Millionen Unternehmen, darunter 95 % KMU, und etwa 16 Millionen Arbeitsplätzen in Europa 10 % des BIP erwirtschaftet, muss fortgeschrittene Werkstoffe und Herstellungsformen einsetzen, um seine Ökobilanz zu verbessern.

Einzelziele und Tätigkeiten in Grundzügen

(a) Technologien für Fabriken der Zukunft

Förderung eines nachhaltigen Wachstums der Industrie durch Erleichterung einer strategischen Umstellung in Europa von der kostenorientierten Herstellung zur ressourcenschonenden Schaffung von Produkten mit hohem Mehrwert und zur IKT-gestützten intelligenten Hochleistungsfertigung in einem integrierten System.

(b) Technologien für energieeffiziente Systeme und energieeffiziente und umweltverträgliche Gebäude

Reduzierung des Energieverbrauchs und der CO2-Emissionen durch Erforschung, Entwicklung und Einsatz nachhaltiger Bautechnologien und -systeme, Berücksichtigung der gesamten Wertschöpfungskette sowie Reduzierung der Umweltbelastung durch Gebäude.

(c) Nachhaltige, ressourcenschonende und emissionsarme Technologien für energieintensive Prozessindustrien

Steigerung der Wettbewerbsfähigkeit der Prozessindustrien durch drastische Erhöhung der Ressourcen- und Energieeffizienz und durch Reduzierung der Umweltfolgen der Tätigkeiten dieses Sektors über die gesamte Wertschöpfungskette hinweg durch die Förderung des Einsatzes von Technologien mit niedrigem CO2-Ausstoß, nachhaltigerer Industrieprozesse und gegebenenfalls der Integration erneuerbarer Energieträger.

(d) Neue nachhaltige Geschäftsmodelle

Ableitung von Konzepten und Methoden für adaptive, wissensgestützte und maßgeschneiderte Unternehmensmodelle, einschließlich alternativer ressourcensparender Ansätze.";"";"H2020";"H2020-EU.2.1.";"";"";"2014-09-22 20:41:59";"664197" +"H2020-EU.2.1.5.";"en";"H2020-EU.2.1.5.";"";"";"INDUSTRIAL LEADERSHIP - Leadership in enabling and industrial technologies - Advanced manufacturing and processing";"Advanced manufacturing and processing";"

INDUSTRIAL LEADERSHIP - Leadership in enabling and industrial technologies - Advanced manufacturing and processing

Specific objective

The specific objective of advanced manufacturing and processing research and innovation is to transform today's manufacturing enterprises, systems and processes. This will be done inter alia by leveraging key enabling technologies in order to achieve more knowledge-intensive, sustainable, resource- and energy-efficient trans-sectoral manufacturing and processing technologies, resulting in more innovative products, processes and services. Enabling new, sustainable products, processes and services and their competitive deployment, as well as advanced manufacturing and processing is also essential for achieving the objectives of the priority 'Societal challenges'.

Rationale and Union added value

The manufacturing sector is of high importance to the European economy, contributing to around 17 % of GDP and accounting for some 22 million jobs in the Union in 2007. With the lowering of economic barriers to trade and the enabling effect of communications technology, manufacturing is subject to strong competition and has been gravitating to countries of lowest overall cost. The European approach to manufacturing therefore has to change radically to remain globally competitive, and Horizon 2020 can help bring together all the relevant stakeholders to achieve this.Europe needs to increase investment at Union level to maintain European leadership and competence in manufacturing technologies and make the transition to high-value, knowledge-intensive goods, creating the conditions and assets for sustainable production and provision of lifetime service around a manufactured product. Resource intensive manufacturing and process industries need to further mobilise resources and knowledge at Union level and increase the investment in research, development and innovation to enable further progress towards a competitive low-carbon, resource-efficient and sustainable economy and to comply with the agreed Union-wide reductions in greenhouse gas emissions by 2050 for industrial sectors (5).With strong Union policies, Europe would grow its existing industries and nurture the emerging industries of the future. The estimated value and impact of the sector of advanced manufacturing systems is significant, with an expected market size around EUR 150 billion by 2015 and compound annual growth rate of about 5 %.It is crucial to retain knowledge and competence in order to keep manufacturing and processing capacity in Europe. The emphasis of the research and innovation activities shall be on sustainable and safe manufacturing and processing, introducing the necessary technical innovation and customer-orientation to produce high knowledge content products and services with low material and energy consumption.Europe also needs to transfer these enabling technologies and knowledge to other productive sectors, such as construction, which is a major source of greenhouse gases with building activities accounting for around 40 % of all energy consumption in Europe, giving rise to 36 % of the CO2 emissions. The construction sector, generating 10 % of GDP and providing some 16 million jobs in Europe in 3 million enterprises, of which 95 % are SMEs, needs to adopt innovative materials and manufacturing approaches to mitigate its environmental impact.

Broad lines of the activities

(a) Technologies for Factories of the Future

Promoting sustainable industrial growth by facilitating a strategic shift in Europe from cost-based manufacturing to an approach based on resource efficiency and the creation of high added value products and ICT-enabled intelligent and high performance manufacturing in an integrated system.

(b) Technologies enabling energy-efficient systems and energy-efficient buildings with a low environmental impact

Reducing energy consumption and CO2 emissions by the research, development and deployment of sustainable construction technologies and systems, addressing the whole value chain as well as reducing the overall environmental impact of buildings.

(c) Sustainable, resource-efficient and low-carbon technologies in energy-intensive process industries

Increasing the competitiveness of process industries, by drastically improving resource and energy efficiencies and reducing the environmental impact of such industrial activities through the whole value chain, promoting the adoption of low-carbon technologies, more sustainable industrial processes and, where applicable, the integration of renewable energy sources.

(d) New sustainable business models

Deriving concepts and methodologies for adaptive, knowledge-based business models in customised approaches, including alternative resource-productive approaches.";"";"H2020";"H2020-EU.2.1.";"";"";"2014-09-22 20:41:59";"664197" +"H2020-EU.2.1.5.";"it";"H2020-EU.2.1.5.";"";"";"LEADERSHIP INDUSTRIALE - Leadership nel settore delle tecnologie abilitanti e industriali - Fabbricazione e trasformazione avanzate";"Advanced manufacturing and processing";"

LEADERSHIP INDUSTRIALE - Leadership nel settore delle tecnologie abilitanti e industriali - Fabbricazione e trasformazione avanzate

Obiettivo specifico

L'obiettivo specifico della ricerca e dell'innovazione nella fabbricazione e trasformazione avanzate è trasformare le imprese, i sistemi e i processi attuali di produzione. A tal fine sarà necessario tra l'altro stimolare le tecnologie abilitanti fondamentali allo scopo di conseguire tecnologie produttive e di trasformazione a più alta densità di conoscenze, più sostenibili, efficienti sul piano energetico e delle risorse e intersettoriali, il che si traduce in prodotti, processi e servizi più innovativi. Rendere possibili nuovi prodotti, processi e servizi sostenibili e la loro diffusione competitiva, nonché la fabbricazione e la trasformazione avanzate è altresì fondamentale per conseguire gli obiettivi della priorità ""Sfide per la società"".

Motivazione e valore aggiunto dell'Unione

Il settore manifatturiero riveste un'importanza cruciale per l'economia europea, contribuendo a circa il 17 % del PIL e rappresentando circa 22 milioni di posti di lavoro nell'Unione europea nel 2007. Con la riduzione delle barriere economiche agli scambi e l'effetto abilitante della tecnologia delle comunicazioni, il settore manifatturiero è sottoposto a una forte concorrenza ed è rilocalizzato nei paesi a minor costo complessivo. L'approccio europeo al settore manifatturiero deve pertanto trasformarsi radicalmente per restare competitivo a livello mondiale; a questo proposito Orizzonte 2020 può contribuire a riunire tutte le parti interessate per centrare tale obiettivo.L'Europa deve aumentare gli investimenti a livello unionale per mantenere la leadership e la competenza europee in materia di tecnologie produttive e compiere la transizione verso prodotti di elevato valore e ad alta intensità di conoscenza, creando le condizioni e i mezzi per una produzione e fornitura sostenibili di servizi lungo tutto il ciclo di vita del prodotto fabbricato. Le industrie produttive e di trasformazione ad alta intensità di risorse hanno la necessità di mobilitare ulteriormente risorse e conoscenze a livello unionale e di aumentare gli investimenti nella ricerca, nello sviluppo e nell'innovazione per consentire ulteriori progressi verso un'economia competitiva a basse emissioni di carbonio, efficiente sotto il profilo delle risorse e sostenibile, nonché al fine di rispettare le riduzioni concordate al livello di Unione relative alle emissioni di gas a effetto serra entro il 2050 per i settori industriali.Dotandosi di forti politiche dell'Unione, l'Europa rafforzerebbe le sue industrie esistenti e coltiverebbe le industrie emergenti del futuro. Il valore e l'impatto stimati del settore dei sistemi produttivi avanzati sono significativi, con una dimensione di mercato prevista pari a circa 150 miliardi di EUR entro il 2015 e un tasso di crescita annuo cumulato di circa il 5 %.È di fondamentale importanza preservare le conoscenze e le competenze per mantenere la capacità di produzione e trasformazione in Europa. L'accento delle attività di ricerca e innovazione è posto sulle attività manifatturiere e di trasformazione sostenibili e sicure, introducendo le necessarie innovazioni tecnologiche e un orientamento al cliente al fine di produrre prodotti e servizi ad alto contenuto di conoscenze con un basso consumo di energia e materiali.L'Europa deve inoltre trasferire queste tecnologie e conoscenze abilitanti ad altri settori produttivi, quali l'edilizia, che è una importante fonte di gas a effetto serra, considerato che le attività edili rappresentano circa il 40 % del consumo totale di energia in Europa, che corrisponde al 36 % delle emissioni di CO2. Il settore edile, che genera il 10 % del PIL e fornisce circa 16 milioni di posti di lavoro in Europa presso 3 milioni di imprese, di cui 95 % sono PMI, deve adottare materiali e metodi di fabbricazione innovativi per attenuare il proprio impatto ambientale.

Le grandi linee delle attività

(a) Tecnologie per le fabbriche del futuro

Promuovere la crescita industriale sostenibile in Europa agevolando uno spostamento strategico dalla produzione orientata ai costi a un approccio basato sull'efficienza sotto il profilo delle risorse e sulla creazione di prodotti a elevato valore aggiunto e a una produzione intelligente e ad alte prestazione basata sulle TIC in un sistema integrato.

(b) Tecnologie per sistemi efficienti sul piano energetico ed edifici con un basso impatto ambientale

Ridurre il consumo di energia e le emissioni di CO2 mediante la ricerca, lo sviluppo e la diffusione di tecnologie e sistemi di costruzione sostenibili, in grado di far fronte all'intera catena di valore, riducendo altresì l'incidenza globale degli edifici sull'ambiente.

(c) Tecnologie sostenibili, efficienti sotto il profilo delle risorse e a basse emissioni di carbonio in processi industriali a elevata intensità energetica

Aumentare la competitività delle industrie di trasformazione, migliorando drasticamente l'efficienza sotto il profilo delle risorse e dell'energia, riducendo l'impatto ambientale di tali attività industriali attraverso l'intera catena del valore e promuovendo l'adozione di tecnologie a basse emissioni di carbonio, processi industriali più sostenibili e, ove applicabile, l'integrazione di fonti energetiche rinnovabili.

(d) Nuovi modelli economici sostenibili

Sviluppare concetti e metodologie relativi a modelli economici di adattamento e basati sulle conoscenze con approcci personalizzati, tra cui approcci alternativi in materia di produttività delle risorse.";"";"H2020";"H2020-EU.2.1.";"";"";"2014-09-22 20:41:59";"664197" +"H2020-EU.2.1.5.";"pl";"H2020-EU.2.1.5.";"";"";"WIODĄCA POZYCJA W PRZEMYŚLE - Wiodąca pozycja w zakresie technologii prorozwojowych i przemysłowych – Zaawansowane systemy produkcji i przetwarzania";"Advanced manufacturing and processing";"

WIODĄCA POZYCJA W PRZEMYŚLE - Wiodąca pozycja w zakresie technologii prorozwojowych i przemysłowych – Zaawansowane systemy produkcji i przetwarzania

Cel szczegółowy

Celem szczegółowym badań naukowych i innowacji w zakresie zaawansowanych systemów produkcji i przetwarzania jest przeobrażenie dzisiejszych przedsiębiorstw wytwórczych oraz systemów i procesów wytwórczych. Zostanie on osiągnięty między innymi dzięki wykorzystaniu kluczowych technologii prorozwojowych w celu wypracowania ponadsektorowych technologii produkcyjnych i przetwórczych bardziej intensywnie wykorzystujących wiedzę, zrównoważonych i efektywnie wykorzystujących zasoby i energię, co zaowocuje większą liczbą innowacyjnych i bezpiecznych produktów, procesów i usług. Umożliwianie powstania nowych, zrównoważonych produktów, procesów i usług oraz ich konkurencyjne wykorzystanie, a także zaawansowane systemy produkcji i przetwarzania mają również zasadnicze znaczenie dla osiągnięcia celów związanych z priorytetem „Wyzwania społeczne”.

Uzasadnienie i unijna wartość dodana

Sektor produkcji ma duże znaczenie dla europejskiej gospodarki: w 2007 r. zapewnił ok. 17% PKB i 22 mln miejsc pracy w Unii. Ze względu na zmniejszenie barier gospodarczych w handlu i wspomagający wpływ technologii komunikacyjnej produkcja podlega silnej presji konkurencyjnej i przesuwa się do krajów o najniższym całkowitym koszcie. Europejskie podejście do produkcji musi zatem uleć radykalnej zmianie, aby zachować globalną konkurencyjność, a program „Horyzont 2020” może pomóc w połączeniu wszystkich zainteresowanych stron, aby umożliwić osiągnięcie tego założenia.Europa musi zwiększyć poziom inwestycji na szczeblu Unii, aby utrzymać wiodącą pozycję i kompetencje w dziedzinie technologii produkcyjnych oraz aby przestawić się na wysokowartościowe, w dużym stopniu oparte na wiedzy produkty, stwarzając warunki i zasoby na potrzeby zrównoważonej produkcji i zapewnienia wsparcia produktu w całym jego cyklu życia. Zasobochłonny przemysł wytwórczy i przetwórczy musi nadal mobilizować zasoby i wiedzę na szczeblu Unii i zwiększyć inwestycje w badania naukowe, rozwój i innowacje, aby osiągać dalsze postępy na drodze do konkurencyjnej, niskoemisyjnej, zasobooszczędnej i zrównoważonej gospodarki oraz aby spełnić ogólnounijne cele w zakresie redukcji emisji gazów cieplarnianych określone dla sektorów przemysłu na 2050 r. (5).Dzięki silnej unijnej polityce Europa mogłaby rozwijać istniejące gałęzie przemysłu i wspierać powstające branże przyszłości. Szacowana wartość i oddziaływanie sektora zaawansowanych systemów produkcyjnych są duże, ich składana roczna stopa wzrostu wynosi 5% i oczekuje się, że do 2015 r. wartość ich rynku będzie zbliżona do 150 mld EUR.Dla utrzymania zdolności produkcyjnych i przetwórczych Europy zasadnicze znaczenie ma zachowanie wiedzy. W działaniach w zakresie badań naukowych i innowacji nacisk jest kładziony na zrównoważone i bezpieczne procesy produkcji i przetwarzania, wprowadzenie niezbędnych innowacji technicznych oraz orientację na klienta w celu udostępnienia produktów i usług w większym stopniu opartych na wiedzy naukowej przy niskim zużyciu materiałów i energii.Europa musi również dokonać transferu tych technologii prorozwojowych i wiedzy do innych sektorów produkcyjnych, takich jak budownictwo, które jest dużym źródłem gazów cieplarnianych, co wiąże się z faktem, że działalność budowlana odpowiada za ok. 40% całego zużycia energii w Europie, powodując 36% emisji CO2. Sektor budowlany, generujący w Europie 10% PKB i zapewniający ok. 16 mln miejsc pracy w 3 mln przedsiębiorstw, z których 95% to MŚP, musi przyjąć innowacyjne podejście w zakresie materiałów i produkcji, aby zminimalizować swoje oddziaływanie na środowisko.

Ogólne kierunki działań

(a) Technologie dla fabryk przyszłości

Promowanie zrównoważonego rozwoju przemysłowego poprzez ułatwienie strategicznego przejścia w Europie od produkcji opartej na kosztach do podejścia nastawionego na efektywne gospodarowanie zasobami i tworzenie produktów o wysokiej wartości dodanej oraz opartej na ICT, inteligentnej i wysoko wydajnej produkcji w systemie zintegrowanym.

(b) Technologie wspomagające energooszczędne systemy i budynki o niewielkim oddziaływaniu na środowisko

Ograniczenie zużycia energii i emisji CO2 poprzez badania naukowe, opracowanie i wdrożenie zrównoważonych technologii i systemów budowlanych, uwzględnienie całego łańcucha wartości, jak również zmniejszenie ogólnego oddziaływania budynków na środowisko.

(c) Zrównoważone, zasobooszczędne i niskoemisyjne technologie w energochłonnych przemysłach przetwórczych

Zwiększanie konkurencyjności gałęzi przemysłu przetwórczego poprzez radykalną poprawę oszczędności zasobów i energii oraz ograniczenie oddziaływania na środowisko takiej działalności przemysłowej w całym łańcuchu wartości, a także wspieranie wprowadzania technologii niskoemisyjnych, trwalszych procesów przemysłowych oraz – w stosownych przypadkach – włączanie do procesów przemysłowych odnawialnych źródeł energii.

(d) Nowe zrównoważone modele biznesowe

Opracowanie koncepcji i metodologii dla adaptacyjnych, „opartych na wiedzy” modeli biznesowych w dostosowanych do określonych warunków podejściach, w tym alternatywnych podejściach wydajnych pod względem wykorzystania zasobów.";"";"H2020";"H2020-EU.2.1.";"";"";"2014-09-22 20:41:59";"664197" +"H2020-EU.2.1.5.";"fr";"H2020-EU.2.1.5.";"";"";"PRIMAUTÉ INDUSTRIELLE - Primauté dans le domaine des technologies génériques et industrielles - Systèmes de fabrication et de transformation avancés";"Advanced manufacturing and processing";"

PRIMAUTÉ INDUSTRIELLE - Primauté dans le domaine des technologies génériques et industrielles - Systèmes de fabrication et de transformation avancés

Objectif spécifique

L'objectif spécifique de la recherche et de l'innovation dans le domaine des systèmes de fabrication et de transformation avancés consiste à transformer les entreprises de production et les systèmes et processus de fabrication que nous connaissons aujourd'hui. Pour ce faire, il faudra notamment exploiter les technologies clés génériques pour parvenir à des technologies de fabrication et de transformation transsectorielles, durables, efficaces dans l'utilisation des ressources et de l'énergie et à plus forte intensité de connaissance, afin de favoriser l'émergence de produits, de processus et de services plus innovants. Permettre l'élaboration de nouveaux produits, procédés et services durables, ainsi que leur déploiement concurrentiel, ainsi que la création de systèmes de fabrication et de transformation avancés est également essentiel pour réaliser les objectifs liés à la priorité «Défis de société».

Justification et valeur ajoutée de l'Union

Le secteur de la production industrielle revêt une grande importance pour l'économie européenne: en 2007, il représentait environ 17 % du PIB de l'Union et y employait quelque 22 millions de personnes. L'abaissement des barrières commerciales et les possibilités offertes par les technologies de la communication ont entraîné une féroce concurrence dans le secteur de la production industrielle, laquelle a tendance à se déplacer vers les pays où les coûts sont les plus faibles. L'approche européenne de la production industrielle doit donc changer radicalement pour maintenir la compétitivité de ce secteur sur la scène mondiale. Horizon 2020 peut contribuer à rassembler autour de cet objectif l'ensemble des parties prenantes concernées.Il convient d'accroître les investissements au niveau de l'Union pour maintenir la primauté et le savoir-faire de l'Europe dans le domaine des technologies de fabrication et pour réaliser la transition vers la production de biens à haute valeur ajoutée et à forte intensité de connaissance, en créant les conditions et en développant les atouts qui permettront d'établir une production durable et de fournir des services couvrant toute la durée de vie d'un produit manufacturé. Les industries de fabrication et de transformation à forte intensité de ressources doivent continuer à mobiliser des ressources et des connaissances au niveau de l'Union et à accroître leurs investissements dans la recherche, le développement et l'innovation, afin de progresser davantage en direction d'une économie compétitive, à faibles émissions de carbone, efficace dans l'utilisation des ressources et durable, et de respecter les engagements portant sur des réductions, d'ici 2050 et à l'échelle de l'Union, des émissions de gaz à effet de serre produites par les secteurs industriels.En mettant en œuvre des politiques ambitieuses à l'échelle de l'Union, l'Europe assurerait la croissance de ses entreprises existantes et favoriserait le développement des entreprises émergentes de demain. La valeur et l'impact estimés du secteur des systèmes de fabrication avancés ne sont pas négligeables: ils devraient représenter un marché d'environ 150 milliards d'euros d'ici 2015 et afficher un taux de croissance annuelle composé d'environ 5 %.Il est essentiel de préserver les connaissances et le savoir-faire européens pour maintenir une capacité de fabrication et de transformation en Europe. Les activités de recherche et d'innovation se concentrent sur la fabrication et la transformation durables et sûres, en introduisant les innovations techniques nécessaires et en portant l'attention requise aux besoins des clients, de façon à développer des produits et des services à forte intensité de connaissance et à faible consommation de matériaux et d'énergie.L'Europe doit également assurer le transfert de ce savoir-faire et de ces technologies génériques vers d'autres secteurs de production, tels que la construction, qui est une grande productrice de gaz à effet de serre: les activités liées au bâtiment représentent environ 40 % de la consommation énergétique totale de l'Europe et 36 % de ses émissions de CO2. Le secteur de la construction, qui génère 10 % du PIB européen et dont les 3 millions d'entreprises, dont 95 % de PME, fournissent à l'Europe environ 16 millions d'emplois, doit adopter des matériaux et des techniques de fabrication innovants pour limiter son impact environnemental.

Grandes lignes des activités

(a) Des technologies pour les usines du futur

Promouvoir une croissance industrielle durable en facilitant une transition stratégique en Europe, passant d'un processus de fabrication axé sur les coûts à une approche fondée sur une utilisation efficace des ressources et la création de produits présentant une haute valeur ajoutée ainsi que sur des modes de fabrication recourant aux TIC, intelligents et à haute performance, dans un système intégré.

(b) Des technologies en faveur de systèmes efficaces dans l'utilisation de l'énergie et de bâtiments efficaces dans l'utilisation de l'énergie et ayant une faible incidence sur l'environnement

Réduire la consommation d'énergie et les émissions de CO2 grâce à la recherche, au développement et au déploiement de technologies et de systèmes de construction durables, prenant en compte toute la chaîne de valeur et réduisant l'incidence globale des bâtiments sur l'environnement.

(c) Des technologies durables, efficaces dans l'utilisation des ressources et à faibles émissions de carbone dans les entreprises de transformation à forte intensité d'énergie

Accroître la compétitivité des entreprises de transformation en améliorant considérablement l'efficacité énergétique et l'efficacité de l'utilisation des ressources et en réduisant l'impact environnemental de ces activités industrielles tout au long de la chaîne de valeur, en promouvant l'adoption de technologies à faibles émissions de carbone, ainsi que de processus industriels plus durables et, le cas échéant, l'intégration de sources d'énergie renouvelables.

(d) Des modèles d'entreprise nouveaux et durables

S'inspirer de concepts et de méthodologies visant à élaborer des modèles d'entreprise adaptatifs et fondés sur la connaissance dans le cadre d'approches personnalisées, y compris des approches différentes en ce qui concerne la production de ressources.";"";"H2020";"H2020-EU.2.1.";"";"";"2014-09-22 20:41:59";"664197" +"H2020-EU.2.1.5.";"es";"H2020-EU.2.1.5.";"";"";"LIDERAZGO INDUSTRIAL - Liderazgo en tecnologías industriales y de capacitación - Fabricación y transformación avanzadas";"Advanced manufacturing and processing";"

LIDERAZGO INDUSTRIAL - Liderazgo en tecnologías industriales y de capacitación - Fabricación y transformación avanzadas

Objetivo específico

El objetivo específico de la investigación y la innovación sobre fabricación y transformación avanzadas es transformar los sistemas y procesos de fabricación de las empresas. Ello se conseguirá, inter alia, aprovechando tecnologías facilitadoras clave con el fin de lograr tecnologías de fabricación y transformación transectoriales más intensivas en conocimientos, sostenibles y eficientes desde el punto de vista de los recursos y la energía, que se traduzcan en más productos, procesos y servicios innovadores. Posibilitar nuevos productos, procesos y servicios sostenibles y un despliegue competitivo de los mismos, la fabricación y la transformación avanzadas resultan asimismo determinantes para alcanzar los objetivos de la prioridad ""Retos de la sociedad"".

Justificación y valor añadido de la Unión

El sector manufacturero es de gran importancia para la economía europea, pues representaba en 2007 alrededor del 17 % del PIB y aportaba unos 22 millones de puestos de trabajo en la Unión. Con la reducción de los obstáculos económicos al comercio y el efecto potenciador de la tecnología de la comunicación, la fabricación está sujeta a una fuerte competencia y ha ido desplazándose hacia países de menor coste global. Por ello, el enfoque europeo con respecto a la fabricación debe cambiar radicalmente para mantener la competitividad a escala mundial, y Horizonte 2020 puede ayudar a reunir a todas las partes interesadas para conseguirlo.Europa necesita incrementar la inversión a nivel de la Unión para mantener el liderazgo y las competencias europeas en las tecnologías de fabricación y hacer la transición hacia unos bienes de alto valor e intensivos en conocimiento, creando las condiciones y activos que permitan una producción sostenible y la prestación de servicios durante toda la vida útil en torno a un producto manufacturado. Es preciso que las industrias de fabricación y transformación intensivas en recursos movilicen más recursos y conocimientos a nivel de la Unión e incrementen la inversión en investigación, desarrollo e innovación para permitir nuevos avances hacia una economía competitiva, de baja emisión de carbono, eficiente en recursos y sostenible y alcanzar el objetivo de reducción de las emisiones de gases de efecto invernadero de aquí a 2050 para los sectores industriales acordado en la Unión.Con unas políticas de la Unión vigorosas, crecerían las actuales industrias de Europa y se prepararían las industrias emergentes del futuro. El valor y el impacto estimados del sector de los sistemas de fabricación avanzada es significativo, previéndose un mercado de alrededor de 150 000 millones de euros en 2015 y una tasa de crecimiento anual compuesta del 5 % aproximadamente.Es crucial retener los conocimientos y la competencia con el fin de conservar la capacidad de fabricación y transformación en Europa. El énfasis de las actividades de investigación e innovación recaerá en la producción y la transformación sostenibles y seguras, introduciendo la innovación técnica y la orientación al cliente necesarias para producir productos y servicios de alto contenido en conocimientos y de bajo consumo de energía y materiales.Europa también necesita transferir estas tecnologías de capacitación y conocimientos a otros sectores productivos, como la construcción, que es una de las principales fuentes de gases de efecto invernadero, ya que las actividades de la construcción representan aproximadamente el 40 % del consumo total de energía en Europa y dan lugar al 36 % de las emisiones de CO2. El sector de la construcción, que genera el 10 % del PIB y aporta unos 16 millones de puestos de trabajo en Europa en 3 millones de empresas, de las cuales el 95 % son PYME, necesita adoptar enfoques innovadores con respecto a los materiales y la fabricación para reducir su impacto ambiental.

Líneas generales de las actividades

(a) Tecnologías para las fábricas del futuro

Promover el crecimiento industrial sostenible facilitando un cambio estratégico en Europa para pasar de la fabricación basada en los costes de producción a un enfoque basado en la utilización eficiente de recursos y en la creación de productos de un alto valor añadido y una fabricación posibilitada por las TIC, inteligente y de alto rendimiento, en un sistema integrado.

(b) Tecnologías que permitan edificios y sistemas energéticamente eficientes con bajo impacto medioambiental

Reducir el consumo de energía y de las emisiones de CO2 mediante la investigación, desarrollo y despliegue de tecnologías de construcción, automatización y control sostenibles y de sistemas que aborden asimismo toda la cadena de valor, y reducir el impacto ambiental global de los edificios.

(c) Tecnologías sostenibles, eficientes en su utilización de recursos y de baja emisión de carbono en las industrias de transformación de gran consumo energético

Aumentar la competitividad de las industrias de transformación, mejorando drásticamente la eficiencia energética y de los recursos y reduciendo el impacto ambiental de estas actividades industriales a través de toda la cadena de valor y fomentando la adopción de tecnologías de baja emisión de carbono, procesos industriales más sostenibles y, cuando proceda, la integración de fuentes de energía renovables.

(d) Nuevos modelos de negocio sostenibles

Deducir conceptos y metodologías para unos modelos de negocio adaptables y basados en el conocimiento, con enfoques a la medida, inclusive planteamientos alternativos que resulten productivos en cuanto a su utilización de recursos.";"";"H2020";"H2020-EU.2.1.";"";"";"2014-09-22 20:41:59";"664197" +"H2020-EU.3.";"fr";"H2020-EU.3.";"";"";"PRIORITÉ «Défis de société»";"Societal Challenges";"

PRIORITÉ «Défis de société»

Cette section constitue une réponse directe aux priorités stratégiques et aux défis de société recensés dans la stratégie Europe 2020 et qui visent à mobiliser la masse critique d'initiatives en faveur de la recherche et de l'innovation nécessaire à la réalisation des objectifs stratégiques de l'Union. Le financement se concentre sur les objectifs spécifiques suivants:(a) Santé, évolution démographique et bien-être; H2020-EU.3.1. (http://cordis.europa.eu/programme/rcn/664237/fr)(b) Sécurité alimentaire, agriculture et sylviculture durables, recherche marine, maritime et dans le domaine des eaux intérieures et la bioéconomie; H2020-EU.3.2. (http://cordis.europa.eu/programme/rcn/664281/fr)(c) Énergies sûres, propres et efficaces; H2020-EU.3.3. (http://cordis.europa.eu/programme/rcn/664321/fr)(d) Transports intelligents, verts et intégrés; H2020-EU.3.4. (http://cordis.europa.eu/programme/rcn/664357/fr)(e) Lutte contre le changement climatique, environnement, utilisation efficace des ressources et matières premières; H2020-EU.3.5. (http://cordis.europa.eu/programme/rcn/664389/fr)(f) L'Europe dans un monde en évolution - Sociétés ouvertes à tous, innovantes et capables de réflexion; H2020-EU.3.6. (http://cordis.europa.eu/programme/rcn/664435/fr)(g) Sociétés sûres - Protéger la liberté et la sécurité de l'Europe et de ses citoyens. H2020-EU.3.7. (http://cordis.europa.eu/programme/rcn/664463/fr)Toutes les activités sont axées sur les défis à relever, ce qui peut notamment concerner la recherche fondamentale, la recherche appliquée, le transfert des connaissances ou l'innovation; elles se concentrent sur les priorités stratégiques, sans établir au préalable de liste précise des technologies à développer ou des solutions à élaborer. L'attention portera sur l'innovation non technologique, organisationnelle et systémique ainsi que sur l'innovation dans le secteur public, au même titre que sur les solutions axées sur la technologie. Priorité est accordée à la mobilisation d'une masse critique de ressources et de connaissances, couvrant plusieurs domaines, technologies et disciplines scientifiques, et d'infrastructures de recherche, en vue de relever les défis recensés. Les activités couvrent l'ensemble du processus, de la recherche fondamentale à la mise sur le marché, en mettant, désormais, également l'accent sur les activités liées à l'innovation, telles que le lancement de projets pilotes, les activités de démonstration, les bancs d'essai, le soutien aux achats publics, la conception, l'innovation axée sur les besoins des utilisateurs finaux, l'innovation sociale, le transfert des connaissances et la commercialisation des innovations ainsi que la normalisation.";"";"H2020";"H2020-EC";"";"";"2014-09-23 20:20:18";"664235" +"H2020-EU.3.";"es";"H2020-EU.3.";"";"";"PRIORIDAD ""Retos de la sociedad""";"Societal Challenges";"

PRIORIDAD ""Retos de la sociedad""

Esta parte responde directamente a las prioridades políticas y retos de la sociedad expuestos en la estrategia Europa 2020 y se propone estimular la masa crítica de esfuerzos de investigación e innovación necesaria para alcanzar los objetivos políticos de la Unión. La financiación se centrará en los siguientes objetivos específicos:(a) Salud, cambio demográfico y bienestar; H2020-EU.3.1. (http://cordis.europa.eu/programme/rcn/664237/es)(b) Seguridad alimentaria, agricultura y silvicultura sostenibles, investigación marina, marítima y de aguas interiores y bioeconomía; H2020-EU.3.2. (http://cordis.europa.eu/programme/rcn/664281/es)(c) Energía segura, limpia y eficiente; H2020-EU.3.3. (http://cordis.europa.eu/programme/rcn/664321/es)(d) Transporte inteligente, ecológico e integrado; H2020-EU.3.4. (http://cordis.europa.eu/programme/rcn/664357/es)(e) Acción por el clima, medio ambiente, eficiencia de los recursos y materias primas; H2020-EU.3.5. (http://cordis.europa.eu/programme/rcn/664389/es)(f) Europa en un mundo cambiante - sociedades inclusivas, innovadoras y reflexivas; H2020-EU.3.6. (http://cordis.europa.eu/programme/rcn/664435/es)(g) Sociedades seguras - Proteger la libertad y la seguridad de Europa y sus ciudadanos. H2020-EU.3.7. (http://cordis.europa.eu/programme/rcn/664463/es)Todas las actividades aplicarán un planteamiento basado en los retos que puede incluir investigación básica, investigación aplicada, transferencia de conocimientos o innovación, centrándose en las prioridades de actuación sin predeterminar concretamente las tecnologías o soluciones que deben encontrarse. Además de a las soluciones impulsadas por la tecnología, se prestará atención a las innovaciones no tecnológicas, organizativas, de sistemas y del sector público. Se pondrá énfasis en reunir una masa crítica de recursos y conocimientos de distintos campos, tecnologías y disciplinas científicas, así como infraestructuras de investigación, para abordar los retos existentes. Las actividades cubrirán el ciclo completo, de la investigación básica al mercado, con un nuevo énfasis en las actividades relacionadas con la innovación, tales como ejercicios piloto, actividades de demostración, bancos de pruebas, apoyo a la contratación pública, diseño, innovación impulsada por el usuario final, innovación social, transferencia de conocimientos, asimilación de las innovaciones por el mercado y normalización.";"";"H2020";"H2020-EC";"";"";"2014-09-23 20:20:18";"664235" +"H2020-EU.2.1.";"de";"H2020-EU.2.1.";"";"";"FÜHRENDE ROLLE DER INDUSTRIE - Führende Rolle bei grundlegenden und industriellen Technologien";"Leadership in enabling and industrial technologies (LEIT)";"

FÜHRENDE ROLLE DER INDUSTRIE - Führende Rolle bei grundlegenden und industriellen Technologien

Einzelziel ist der Auf- und Ausbau einer weltweiten Führungsrolle durch Forschung und Innovation in den Grundlagentechnologien und im Weltraum zur Untermauerung der Wettbewerbsfähigkeit in unterschiedlichsten bereits vorhandenen und neu entstehenden Industriezweigen und Sektoren.Das globale Umfeld für Unternehmen ist einem raschen Wandel unterworfen. Hieraus ergeben sich Herausforderungen und Chancen für die europäische Wirtschaft, wie sie in den Zielen der Strategie Europa 2020 dargelegt sind. Europa muss Innovationen beschleunigen, indem es neue Erkenntnisse nutzt, um bereits vorhandene Produkte, Dienstleistungen und Märkte auszubauen oder zu verbessern oder um Neues zu schaffen; dabei muss nach wie vor ein Schwerpunkt auf Qualität und Nachhaltigkeit gelegt werden. Innovationen sollten eine möglichst breite Anwendung finden und nicht nur für Technologien, sondern auch für unternehmerische, organisatorische und soziale Aspekte genutzt werden.Um mit einer starken Technologiebasis und industriellem Potenzial an vorderster Front des globalen Wettbewerbs dabei zu sein, bedarf es strategischer Investitionen in Forschung, Entwicklung, Validierung und Erprobung auf dem Gebiet der IKT H2020-EU.2.1.1 (http://cordis.europa.eu/programme/rcn/664147_en.html), der Nanotechnologien,H2020-EU.2.1.2 (http://cordis.europa.eu/programme/rcn/664161_en.html) der fortgeschrittenen Werkstoffe, H2020-EU.2.1.3 (http://cordis.europa.eu/programme/rcn/664173_en.html) der Biotechnologie, H2020-EU.2.1.4 (http://cordis.europa.eu/programme/rcn/664189_en.html) der fortgeschrittenen Fertigungs- und VerarbeitungsverfahrenH2020-EU.2.1.5 (http://cordis.europa.eu/programme/rcn/664197_en.html) und der Raumfahrt) H2020-EU.2.1.5 (http://cordis.europa.eu/programme/rcn/664197_en.html)..Die erfolgreiche Beherrschung, Integration und Nutzung von Grundlagentechnologien durch die europäische Industrie sind ein entscheidender Faktor zur Stärkung der Produktivität und Innovationskapazität Europas und gewährleisten, dass Europas Wirtschaft modern, nachhaltig und wettbewerbsfähig ist, dass die Sektoren mit Hightech-Anwendungen weltweit führend sind und dass Europa in der Lage ist, wirksame und nachhaltige Lösungen zur Bewältigung der gesellschaftlichen Herausforderungen zu entwickeln. Da diese Tätigkeiten viele Bereiche durchdringen, können sie weitere Fortschritte durch ergänzende Erfindungen, Anwendungen und Dienstleistungen anstoßen, so dass bei den Investitionen in diese Technologien eine höhere Rendite erzielt wird als auf jedem anderen Gebiet.Diese Tätigkeiten werden zu den Zielen der Leitinitiativen der Strategie ""Innovationsunion"", „Ressourcenschonendes Europa, ""Eine Industriepolitik für das Zeitalter der Globalisierung"" und ""Eine digitale Agenda für Europa"" der Strategie Europa 2020 – sowie zu den Zielen der Raumfahrtpolitik der Europäischen Union beitragen.

Komplementarität mit anderen Tätigkeiten von Horizont 2020

Die Tätigkeiten im Rahmen des Einzelziels ""Führende Rolle bei grundlegenden und industriellen Technologien"" stützen sich vor allem auf die Forschungs- und Innovationsagenden, die in erster Linie von Industrie und Unternehmen, einschließlich KMU, zusammen mit Forschern und Mitgliedstaaten gemeinsam in einer offenen und transparenten Weise festgelegt werden, und sind deutlich auf die Mobilisierung von Investitionen des Privatsektors und auf Innovation ausgerichtet.Die Integration von Grundlagentechnologien in Lösungen für die gesellschaftlichen Herausforderungen wird im Zusammenhang mit den jeweiligen Herausforderungen unterstützt. Die Anwendung von Grundlagentechnologien, die zwar nicht unter eine der gesellschaftlichen Herausforderungen fallen, für die Stärkung der Wettbewerbsfähigkeit der europäischen Wirtschaft jedoch wichtig sind, wird im Rahmen des Einzelziels ""Führende Rolle bei grundlegenden und industriellen Technologien"" unterstützt. Es sollte eine angemessene Abstimmung mit den Schwerpunkten ""Wissenschaftsexzellenz"" und ""Gesellschaftliche Herausforderungen"" angestrebt werden.

Ein gemeinsamer Ansatz

Dieser Ansatz beinhaltet sowohl Agenda-abhängige Tätigkeiten als auch mehr Freiräume für die Förderung innovativer Projekte und bahnbrechender Lösungen für die ganze Wertschöpfungskette einschließlich FuE, großmaßstäbliche Pilotprojekte und Demonstrationstätigkeiten, Versuchseinrichtungen und Living Labs, Entwicklung von Prototypen und Validierung von Produkten in Pilotlinien. Die Tätigkeiten sollen durch Forschungs- und Innovationsanreize für die Wirtschaft – insbesondere für KMU – die industrielle Wettbewerbsfähigkeit steigern, unter anderem durch offene Ausschreibungen. Projekte im kleinen und mittleren Maßstab werden angemessen berücksichtigt.

Ein integrierter Ansatz für Schlüsseltechnologien

Ein wichtiger Teil des Einzelziels ""Führende Rolle bei Grundlagentechnologien und industriellen Technologien"" sind die Technologien der Mikro- und Nanoelektronik, Photonik, Nanotechnologie und Biotechnologie sowie fortgeschrittene Werkstoffe und Fertigungssysteme, die als Schlüsseltechnologien gelten. Diese multidisziplinären, wissens- und kapitalintensiven Technologien finden in vielen unterschiedlichen Sektoren Anwendung und bilden die Grundlage für einen deutlichen Wettbewerbsvorteil der europäischen Wirtschaft im Hinblick auf die Stimulierung von Wachstum und die Schaffung von Arbeitsplätzen. Ein integrierter Ansatz, mit dem die Kombination, Konvergenz und gegenseitige Bereicherung der Schlüsseltechnologien in verschiedenen Innovationszyklen und Wertschöpfungsketten gefördert wird, kann vielversprechende Forschungsergebnisse hervorbringen und den Weg für neue industrielle Technologien, Produkte, Dienstleistungen und neuartige Anwendungen freimachen (beispielsweise auf den Gebieten Raumfahrt, Verkehr, Landwirtschaft, Fischerei, Forstwirtschaft, Umwelt, Lebensmittel, Gesundheit und Energie). So werden die zahlreichen Wechselwirkungen zwischen den Schlüsseltechnologien und den sonstigen Grundlagentechnologien flexibel als wichtige Innovationsquelle genutzt. Dies ergänzt die Unterstützung für Forschung und Innovation im Bereich der Schlüsseltechnologien, die möglicherweise im Rahmen der intelligenten Spezialisierungsstrategien der kohäsionspolitischen Fonds von nationalen oder regionalen Stellen geleistet wird.Innovation erfordert verstärkte Anstrengungen der technologieübergreifenden Forschung. Daher sollte der Schwerpunkt ""Führende Rolle der Industrie"" auch multidisziplinäre und auf übergreifende Schlüsseltechnologien ausgerichtete Projekte umfassen. Die Durchführungsstelle von Horizont 2020 zur Förderung von Schlüsseltechnologien und bereichsübergreifenden Tätigkeiten auf dem Gebiet der Schlüsseltechnologien (übergreifende Schlüsseltechnologien) sollte für Synergien und eine effektive Koordinierung unter anderem mit dem Schwerpunkt ""Gesellschaftliche Herausforderungen"" sorgen. Zudem werden gegebenenfalls Synergien zwischen Tätigkeiten auf dem Gebiet der Schlüsseltechnologien und den Tätigkeiten nach Maßgabe der Kohäsionspolitik für 2014 bis 2020 sowie mit dem EIT angestrebt.Für alle grundlegenden und industriellen Technologien, einschließlich der Schlüsseltechnologien, gilt als wichtiges Ziel die Förderung von Wechselwirkungen zwischen diesen Technologien und mit den Anwendungen im Rahmen der gesellschaftlichen Herausforderungen. Bei der Umsetzung der Agenden und Schwerpunkte wird dies uneingeschränkt berücksichtigt. Daher müssen Akteure, die die unterschiedlichen Perspektiven vertreten, in die Festlegung und Umsetzung der Schwerpunkte voll einbezogen werden. In einigen Fällen wird dies auch Maßnahmen erfordern, die sowohl aus den Mitteln für grundlegende und industrielle Technologien als auch aus den Mitteln für die jeweilige gesellschaftliche Herausforderung gefördert werden. Dies könnte die gemeinsame Finanzierung öffentlich-privater Partnerschaften beinhalten, deren Ziel die Entwicklung von Technologien, die Förderung von Innovation und die Anwendung derartiger Technologien zur Bewältigung gesellschaftlicher Herausforderungen ist.Eine wichtige Rolle kommt den IKT zu, die die Kerninfrastrukturen, Technologien und Systeme liefern, die für wirtschaftliche und gesellschaftliche Prozesse sowie neue private und öffentliche Produkte und Dienstleistungen unerlässlich sind. Die europäische Industrie muss bei den technologischen Entwicklungen auf dem Gebiet der IKT, auf dem viele Technologien in eine neue Umbruchphase eintreten und neue Möglichkeiten eröffnen, weiterhin eine Spitzenstellung einnehmen.Die Weltraumforschung ist ein rasch wachsender Sektor, der für viele Bereiche der modernen Gesellschaft unentbehrliche Informationen liefert und grundlegende Bedürfnisse der Gesellschaft befriedigt, universelle wissenschaftliche Fragen angeht und der Union hilft, ihre Position als wichtiger Akteur auf der internationalen Bühne zu verteidigen. Die Weltraumforschung liegt zwar allen Tätigkeiten im Weltraum zugrunde, wird derzeit jedoch in Programmen behandelt, die von Mitgliedstaaten, der Europäischen Weltraumorganisation (ESA) oder im Kontext der Forschungsrahmenprogramme der Union durchgeführt werden. Es sind im Bereich der Weltraumforschung Maßnahmen und Investitionen auf Unionsebene im Einklang mit Artikel 189 AEUV erforderlich, um Wettbewerbsvorteile zu wahren, die Weltrauminfrastrukturen und -programme der Union (wie Copernicus und Galileo) zu sichern und dafür zu sorgen, dass Europa auch in Zukunft eine Rolle im Weltraum spielt.Darüber hinaus stellen nachgelagerte innovative Dienste und benutzerfreundliche Anwendungen, die Informationen aus der Weltraumforschung nutzen, eine wichtige Quelle für Wachstum und Arbeitsplätze dar, und die Entwicklung dieser Dienste ist für die Union eine bedeutende Chance.

Partnerschaften und Mehrwert

Mit Hilfe von Partnerschaften, Clustern, Netzen und Normung, die die Zusammenarbeit zwischen unterschiedlichen wissenschaftlichen und technologischen Fachrichtungen und Sektoren mit einem ähnlichen Forschungs- und Entwicklungsbedarf fördern, kann Europa eine kritische Masse erreichen, die bahnbrechende Ergebnisse, neue Technologien und innovative Produkte, Dienstleistungen und Verfahren hervorbringt.Die Entwicklung und Umsetzung von Forschungs- und Innovationsagenden auch im Rahmen öffentlich-privater Partnerschaften (aber auch durch den Aufbau effektiver Verbindungen zwischen Unternehmen und Hochschulen), die Mobilisierung zusätzlicher Investitionen, der Zugang zur Risikofinanzierung, Normung und die Unterstützung der vorkommerziellen Auftragsvergabe sowie öffentliche Aufträge für innovative Produkte und Dienstleistungen – all dies sind für die Wettbewerbsfähigkeit entscheidende Aspekte.Daher wird auch eine enge Anbindung des EIT benötigt, um unternehmerische Spitzentalente hervorzubringen und zu fördern und Innovationen zu beschleunigen, indem Menschen aus unterschiedlichen Ländern, Fachrichtungen und Organisationen zusammengebracht werden.Auch durch die Unterstützung der Ausarbeitung europäischer oder internationaler Normen für neu entstehende Produkte, Dienstleistungen und Technologien kann die Zusammenarbeit auf Unionsebene Handelsmöglichkeiten unterstützen. Die Ausarbeitung solcher Normen im Anschluss an eine Konsultation der relevanten Akteure, einschließlich jener aus Wissenschaft und Wirtschaft, könnte sich positiv auswirken. Gefördert werden Tätigkeiten bezüglich Normung, Interoperabilität und Sicherheit sowie präregulatorische Tätigkeiten.";"";"H2020";"H2020-EU.2.";"";"";"2014-09-22 20:40:26";"664145" +"H2020-EU.2.1.";"es";"H2020-EU.2.1.";"";"";"LIDERAZGO INDUSTRIAL - Liderazgo en tecnologías industriales y de capacitación";"Leadership in enabling and industrial technologies (LEIT)";"

LIDERAZGO INDUSTRIAL - Liderazgo en tecnologías industriales y de capacitación

El objetivo específico es mantener y consolidar el liderazgo mundial a través de la investigación y la innovación en tecnologías de capacitación y en materia espacial, que sustentan la competitividad en toda una gama de sectores e industrias existentes y emergentes.El entorno empresarial mundial está cambiando rápidamente y los objetivos de la estrategia Europa 2020 relativos a un crecimiento inteligente, sostenible e integrador ofrecen desafíos y oportunidades a la industria europea. Europa necesita acelerar la innovación, transformando los conocimientos generados para respaldar y potenciar los productos, servicios y mercados existentes, así como para crear otros nuevos, al tiempo que mantiene el empeño en la calidad y en la sostenibilidad. Debe explotarse la innovación en el sentido más amplio, no ciñéndose a la tecnología, sino incluyendo los aspectos empresariales, organizativos y sociales.Para permanecer en la vanguardia de la competencia mundial con una base tecnológica y unas capacidades industriales sólidas, es preciso aumentar las inversiones estratégicas en investigación, desarrollo, validación y proyectos piloto en las tecnologías de la información y la comunicación (TIC) H2020-EU.2.1.1 (http://cordis.europa.eu/programme/rcn/664147_en.html), nanotecnologías H2020-EU.2.1.2 (http://cordis.europa.eu/programme/rcn/664161_en.html), materiales avanzados H2020-EU.2.1.3 (http://cordis.europa.eu/programme/rcn/664173_en.html), biotecnología H2020-EU.2.1.4 (http://cordis.europa.eu/programme/rcn/664189_en.html), la fabricación y transformación avanzadas H2020-EU.2.1.5 (http://cordis.europa.eu/programme/rcn/664197_en.html), y el espacio H2020-EU.2.1.5 (http://cordis.europa.eu/programme/rcn/664197_en.html).Lograr que la industria europea consiga dominar, integrar y desplegar las tecnologías de capacitación es un factor clave para fortalecer la productividad y la capacidad de innovación europeas y garantizar que Europa cuente con una economía avanzada, sostenible y competitiva, un liderazgo mundial en los sectores de aplicación de la alta tecnología y la capacidad de elaborar soluciones eficaces y sostenibles para los retos de la sociedad. El carácter omnipresente de estas actividades puede estimular avances adicionales a través de invenciones, aplicaciones y servicios complementarios, garantizando un mayor rendimiento de la inversión en estas tecnologías que en cualquier otro ámbito.Estas actividades contribuirán a la consecución de los objetivos de las iniciativas emblemáticas de la estrategia Europa 2020 ""Unión por la innovación"", ""Una Europa que utilice eficazmente los recursos"", ""Una política industrial para la era de la mundialización"" y ""Agenda Digital para Europa"", así como los objetivos de la política espacial de la Unión.

Complementariedad con otras actividades de Horizonte 2020

Las actividades recogidas en el objetivo específico ‘Liderazgo en las tecnologías industriales y de capacitación’ se basarán principalmente en las agendas de investigación e innovación principalmente determinadas, de un modo abierto y transparente, por la industria y las empresas (incluidas las PYME), junto con la comunidad investigadora y los Estados miembros, y pondrán un gran énfasis en suscitar la inversión del sector privado y la innovación.La integración de las tecnologías de capacitación en soluciones para los retos de la sociedad se financiará junto con los retos correspondientes. Las aplicaciones de las tecnologías de capacitación que no entren en los retos de la sociedad, pero sean importantes para reforzar la competitividad de la industria europea, recibirán apoyo en el marco del objetivo específico ""Liderazgo en las tecnologías industriales y de capacitación"". Se procurará mantener una coordinación adecuada con las prioridades ""Ciencia excelente"" y ""Retos de la sociedad"".

Un planteamiento común

El planteamiento incluirá tanto actividades impulsadas por un programa determinado como ámbitos más abiertos para promover proyectos innovadores y soluciones rupturistas en toda la cadena de valor, incluida la I+D, los proyectos piloto a gran escala y las actividades de demostración, los bancos de pruebas y los ""laboratorios vivientes"", la creación de prototipos y la validación de productos en líneas piloto. Las actividades estarán pensadas para fomentar la competitividad industrial estimulando a la industria, y en particular a las PYME, para que invierta más en investigación e innovación, inclusive mediante convocatorias abiertas. Se prestará la debida atención a los proyectos de pequeña y mediana escala.

Un enfoque integrado para las tecnologías de capacitación esenciales

Un componente importante del objetivo específico ""Liderazgo en las tecnologías industriales y de capacitación"" son las tecnologías de capacitación esenciales (TFE), a saber, la microelectrónica y la nanoelectrónica, la fotónica, la nanotecnología, la biotecnología, los materiales avanzados y los sistemas de fabricación avanzados. Estas tecnologías del conocimiento multidisciplinarias, que requieren un uso intensivo de capital, afectan a muchos sectores y sientan las bases para una importante ventaja competitiva de la industria europea, para estimular el crecimiento y crear nuevo empleo. Un enfoque integrado, que promueva la combinación, convergencia y fertilización cruzada de las TFE en diferentes ciclos de innovación y cadenas de valor, puede aportar unos resultados de investigación prometedores y abrir el camino hacia nuevas tecnologías industriales, productos, servicios y aplicaciones novedosas (por ejemplo, en el espacio, el transporte, la agricultura, la pesca, los bosques, el medio ambiente, la alimentación, la sanidad, la energía, etc.). Por lo tanto, deberán aprovecharse de manera flexible las numerosas interacciones de las TFE y las otras tecnologías industriales de capacitación, como una fuente importante de innovación. Esto complementará el apoyo a la investigación y la innovación en las TFE que aporten las autoridades nacionales o regionales en virtud de los fondos de la política de cohesión en el marco de las estrategias de especialización inteligente.La innovación exige intensificar los esfuerzos de investigación intertecnológica. Por consiguiente, los proyectos multidisciplinares y multi-TFE deben ser parte integrante de la prioridad ""Liderazgo industrial"". La estructura de ejecución Horizonte 2020 que dé apoyo a las TFE y a las actividades transversales de las TFE (multi-TFE) debe asegurar las sinergias y la coordinación efectiva, entre otros, con los retos de la sociedad. Además, se han de buscar sinergias, cuando proceda, entre las actividades de las TFE y las actividades realizadas en el marco estratégico común de la Política de cohesión 2014-2020, así como con el EIT.Un objetivo importante para todas las tecnologías industriales y de capacitación, incluidas las TFE, será fomentar la interacción entre las tecnologías, así como con las aplicaciones referidas a los retos de la sociedad. Esto deberá tenerse plenamente en cuenta en la elaboración y aplicación de las agendas y prioridades. Exige que los interesados que representan a las diferentes perspectivas participen plenamente en la fijación de prioridades y en su aplicación. En determinados casos, también requerirá acciones financiadas conjuntamente por las tecnologías industriales y de capacitación y por los retos de la sociedad pertinentes. Esto incluirá la financiación conjunta de asociaciones público-privadas que se propongan impulsar dichas tecnologías e innovación, y aplicarlas para afrontar los retos de la sociedad.Las TIC desempeñan un papel importante, ya que proporcionan las infraestructuras básicas, tecnologías y sistemas clave para procesos económicos y sociales vitales y para nuevos productos y servicios privados y públicos. La industria europea necesita permanecer en la vanguardia de la evolución tecnológica en el ámbito de las TIC, en el que muchas tecnologías están entrando en una nueva fase de transición y se abren nuevas oportunidades.El espacio es un sector en rápido crecimiento que entrega información vital para numerosos ámbitos de la sociedad moderna, satisfaciendo sus demandas fundamentales, aborda cuestiones científicas universales y sirve para garantizar la posición de la Unión como protagonista importante en la escena internacional. La investigación espacial sustenta todas las actividades emprendidas en el espacio, pero actualmente se aborda en programas gestionados por los Estados miembros, por la Agencia Espacial Europea (AEE) o en el contexto de los programas marco de investigación de la Unión. Se continuará con la inversión en investigación espacial a escala de la Unión, en virtud del artículo 189 del TFUE, para mantener la ventaja competitiva, salvaguardar las infraestructuras y los programas espaciales de la Unión, por ejemplo Copérnico y GALILEO, y garantizar a Europa un papel futuro en el espacio.Además, los servicios y aplicaciones innovadoras y de fácil manejo en etapas descendentes que utilizan información derivada del espacio constituyen una fuente importante de crecimiento y creación de empleo y su desarrollo representa una importante oportunidad para la Unión.

Asociaciones y valor añadido

Europa puede conseguir una masa crítica a través de las asociaciones, agrupaciones y redes, de la normalización y del fomento de la cooperación entre diversas disciplinas científicas y tecnológicas y sectores con necesidades similares de investigación y desarrollo, para generar avances decisivos, nuevas tecnologías y soluciones innovadoras para productos, servicios y procesos.El desarrollo y la aplicación de las agendas de investigación e innovación, por ejemplo mediante asociaciones público-privadas, pero asimismo mediante la construcción de vínculos efectivos entre la industria y el mundo académico, la movilización de inversiones adicionales, el acceso a la financiación de riesgo, la normalización y el apoyo a la contratación precomercial y a la contratación pública de productos y servicios innovadores constituyen todos ellos aspectos esenciales a la hora de abordar la competitividad.A este respecto, son también necesarios unos estrechos vínculos con el EIT para generar y promover talentos empresariales de primer orden y acelerar la innovación reuniendo a personas de distintos países, disciplinas y organizaciones.La colaboración a nivel de la Unión puede prestar igualmente apoyo a las oportunidades comerciales mediante el apoyo al desarrollo de normas europeas o internacionales para nuevos productos, servicios y tecnologías emergentes. La elaboración de dichas normas, tras la consulta de las partes interesadas pertinentes, inclusive las del sector científico e industrial, puede tener un impacto positivo. Se promocionarán las actividades de apoyo a la normalización y la interoperabilidad, así como las relacionadas con la seguridad y previas a la regulación.";"";"H2020";"H2020-EU.2.";"";"";"2014-09-22 20:40:26";"664145" +"H2020-EU.2.1.";"it";"H2020-EU.2.1.";"";"";"LEADERSHIP INDUSTRIALE - Leadership nel settore delle tecnologie abilitanti e industriali";"Leadership in enabling and industrial technologies (LEIT)";"

LEADERSHIP INDUSTRIALE - Leadership nel settore delle tecnologie abilitanti e industriali

L'obiettivo specifico è mantenere e costruire una leadership mondiale attraverso la ricerca e l'innovazione nelle tecnologie abilitanti e nel settore spaziale, soggiacenti alla competitività in un ampio spettro di industrie e settori esistenti ed emergenti.L'ambiente commerciale mondiale è in rapida mutazione e gli obiettivi della strategia Europa 2020 presentano sfide e opportunità per le industrie europee. L'Europa deve accelerare l'innovazione, trasformando le conoscenze ottenute per sostenere e rafforzare i prodotti, servizi e i mercati esistenti e crearne di nuovi, mantenendo l'attenzione sulla qualità e la sostenibilità. L'innovazione dovrebbe essere sfruttata in senso lato, oltre la tecnologia al fine di includere aspetti commerciali, organizzativi e sociali.Per restare all'avanguardia della concorrenza mondiale con una base tecnologica e capacità industriali forti, è necessario incrementare gli investimenti strategici in ricerca, sviluppo, convalida e sperimentazione di TIC H2020-EU.2.1.1 (http://cordis.europa.eu/programme/rcn/664147_en.html), nanotecnologie H2020-EU.2.1.2 (http://cordis.europa.eu/programme/rcn/664161_en.html), materiali avanzati H2020-EU.2.1.3 (http://cordis.europa.eu/programme/rcn/664173_en.html), biotecnologia H2020-EU.2.1.4 (http://cordis.europa.eu/programme/rcn/664189_en.html), fabbricazione e trasformazione avanzate H2020-EU.2.1.5 (http://cordis.europa.eu/programme/rcn/664197_en.html), e spazio H2020-EU.2.1.5 (http://cordis.europa.eu/programme/rcn/664197_en.html).La padronanza, l'integrazione e la diffusione di tecnologie abilitanti da parte dell'industria europea rappresentano fattori chiave per rafforzare la produttività e la capacità di innovazione dell'Europa e garantire che l'Europa possieda un'economia avanzata, sostenibile e competitiva, nonché una leadership mondiale nei settori di applicazione ad alta tecnologia, oltre alla capacità di sviluppo di soluzioni efficaci e sostenibili per le sfide per la società. Il carattere diffusivo di tali attività può stimolare ulteriormente i progressi attraverso invenzioni, applicazioni e servizi complementari, assicurando un maggiore ritorno sugli investimenti in queste tecnologie rispetto a qualsiasi altro settore.Tali attività contribuiranno agli obiettivi delle iniziative faro ""Unione dell'innovazione"", ""Un'Europa efficiente sotto il profilo delle risorse"", ""Una politica industriale integrata per l'era della globalizzazione"" e ""Un'agenda digitale europea"" della strategia Europa 2020 nonché agli obiettivi della politica spaziale dell'Unione.

Complementarità con altre attività di Orizzonte 2020

Le attività nell'ambito dell'obiettivo specifico ""Leadership nelle tecnologie abilitanti e industriali"" saranno principalmente basate sui programmi di ricerca e innovazione stabiliti prevalentemente dall'industria e delle imprese, comprese le PMI, insieme alla comunità dei ricercatori e agli Stati membri in maniera aperta e trasparente e porranno un forte accento sullo stimolo agli investimenti del settore privato e sull'innovazione.L'integrazione delle tecnologie abilitanti nelle soluzioni per le sfide per la società è sostenuta congiuntamente alle sfide pertinenti. Le domande di tecnologie abilitanti che non rientrano nell'ambito delle sfide per la società ma sono importanti per rafforzare la competitività dell'industria europea sono finanziate a titolo dell'obiettivo specifico ""Leadership nelle tecnologie abilitanti e industriali"". È opportuno cercare un coordinamento adeguato con le priorità ""Eccellenza scientifica"" e ""Sfide per la società"".

Un approccio comune

Tale approccio comprende sia attività programmate, sia spazi più aperti per promuovere progetti innovativi e soluzioni rivoluzionarie coprendo l'intera catena del valore, comprese le attività di R&S, progetti pilota su vasta scala, attività dimostrative, banchi di prova e laboratori viventi, creazione di prototipi e convalida del prodotto in linee pilota. Le attività sono intese a potenziare la competitività industriale promuovendo l'industria, e in particolare le PMI, affinché effettuino maggiori investimenti in ricerca e innovazione, anche attraverso inviti aperti. Verrà dato adeguato rilievo ai progetti su piccola e media scala.

Un approccio integrato per le tecnologie abilitanti fondamentali

Una componente importante dell'obiettivo specifico ""Leadership nelle tecnologie abilitanti e industriali"" è data dalle tecnologie abilitanti fondamentali (KET), ossia la microelettronica e la nanoelettronica, la fotonica, le nanotecnologie, le biotecnologie, i materiali avanzati e sistemi di fabbricazione avanzati. Tali tecnologie multidisciplinari ad alta intensità di conoscenza e capitale interessano vari settori diversi che costituiscono la base di un significativo vantaggio concorrenziale per l'industria europea al fine di stimolare la crescita e creare nuovi posti di lavoro. Un approccio integrato, che promuove la combinazione, la convergenza e l'effetto di arricchimento reciproco delle KET nei diversi cicli d'innovazione e catene del valore, può dare risultati di ricerca promettenti e aprire la via a tecnologie industriali, prodotti, servizi e applicazioni nuovi, ad esempio nel settore spaziale, nei trasporti, nell'agricoltura, nella pesca, nella silvicoltura, nell'ambiente, nell'alimentazione, nella salute e nell'energia). Le numerose interazioni delle KET e di altre tecnologie industriali abilitanti saranno pertanto sfruttate in modo flessibile, poiché rappresentano un'importante fonte di innovazione. Questo elemento integrerà il sostegno alla ricerca e all'innovazione nelle KET che può essere fornito da autorità nazionali o regionali nell'ambito dei Fondi per la politica di coesione all'interno delle strategie di specializzazione intelligente.L'innovazione richiede maggiori sforzi di ricerca tecnologica trasversale. Pertanto, progetti multidisciplinari e multi-KET dovrebbero essere parte integrante della priorità ""Leadership industriale"". La struttura di attuazione di Orizzonte 2020 a sostegno delle KET e delle attività trasversali nel settore delle tecnologie abilitanti fondamentali (""multi KET"") dovrebbe garantire sinergie e un coordinamento efficace, tra l'altro, con le sfide per la società. Saranno inoltre cercate, se del caso, sinergie tra le attività delle KET e le attività nell'ambito della politica di coesione per il periodo 2014-2020, nonché con l'EIT.Per tutte le tecnologie abilitanti e industriali, comprese le KET, un obiettivo di rilievo sarà quello di favorire le interazioni fra le tecnologie e con le domande poste nel quadro delle sfide per la società. Nello sviluppo e nell'attuazione dei programmi e delle priorità si tiene pienamente conto di tale elemento. A tal fine è necessario che le parti interessate che rappresentano le diverse prospettive siano pienamente coinvolte nella definizione e nell'attuazione delle priorità. In alcuni casi ciò richiederà altresì azioni finanziate congiuntamente dalle tecnologie abilitanti e industriali e dalle pertinenti sfide per la società. Questo potrebbe comprendere il finanziamento congiunto di partenariati pubblico-privato mirati a sviluppare le tecnologie, a sostenere l'innovazione, nonché ad applicare tali tecnologie per affrontare le sfide per la società.Le TIC svolgono un ruolo importante in quanto forniscono le infrastrutture, le tecnologie e i sistemi di base fondamentali per processi economici e sociali vitali nonché per nuovi prodotti e servizi pubblici e privati. L'industria europea deve rimanere all'avanguardia degli sviluppi tecnologici nel settore delle TIC, in cui molte tecnologie stanno entrando in una nuova fase di rottura, con l'apertura di nuove opportunità.Quello spaziale è un settore in rapida crescita che fornisce informazioni essenziali per molti settori della società moderna, ne soddisfa le richieste fondamentali, affronta questioni scientifiche universali e serve a garantire la posizione dell'Unione come protagonista sulla scena internazionale. La ricerca spaziale è alla base di tutte le attività intraprese nello spazio, ma è attualmente affrontata in programmi gestiti da Stati membri, dall'Agenzia spaziale europea (ESA) o nel contesto dei programmi quadro di ricerca dell'Unione. Al fine di mantenere la competitività, salvaguardare le infrastrutture e i programmi spaziali dell'Unione, come Copernicus e Galileo, e sostenere un futuro ruolo dell'Europa nel settore spaziale, occorrono, conformemente all'articolo 189 TFUE, azioni e investimenti a livello di Unione nella ricerca spaziale.Inoltre, i servizi innovativi a valle e le applicazioni di facile uso che si avvalgono di informazioni derivate dal settore spaziale rappresentano un'importante fonte di crescita e di creazione di posti di lavoro e il loro sviluppo rappresenta un'importante opportunità per l'Unione.

Collaborazione e valore aggiunto

L'Europa può raggiungere una massa critica attraverso partenariati, poli e reti, nonché mediante la standardizzazione, promuovendo la cooperazione tra diverse discipline scientifiche e tecnologiche e i settori con esigenze di sviluppo e di ricerca analoghe, per ottenere risultati epocali, nuove tecnologie e soluzioni innovative relative a prodotto, servizio e processo.Lo sviluppo e l'attuazione dei programmi di ricerca e innovazione, anche attraverso partenariati pubblico-privato ma altresì mediante la creazione di collegamenti efficaci tra l'industria e l'università, l'effetto di leva degli investimenti aggiuntivi, l'accesso al capitale di rischio, la standardizzazione e il sostegno agli appalti pre-commerciali e agli appalti di prodotti e servizi innovativi rappresentano tutti aspetti essenziali in materia di competitività.A tale riguardo sono anche necessari forti legami con l'EIT per creare e promuovere talenti imprenditoriali di punta e accelerare l'innovazione, riunendo persone di diversi paesi e di diverse discipline e organizzazioni.La collaborazione a livello unionale può anche sostenere opportunità commerciali mediante il sostegno allo sviluppo di norme europee o internazionali per nuovi prodotti, servizi e tecnologie emergenti. L'elaborazione di tali norme, previa consultazione delle parti interessate anche nei settori scientifici e dell'industria, potrebbe avere ripercussioni positive. Si promuoveranno le attività a sostegno della standardizzazione e dell'interoperabilità, nonché le attività pre-normative e in materia di sicurezza.";"";"H2020";"H2020-EU.2.";"";"";"2014-09-22 20:40:26";"664145" +"H2020-EU.2.1.";"pl";"H2020-EU.2.1.";"";"";"WIODĄCA POZYCJA W PRZEMYŚLE - Wiodąca pozycja w zakresie technologii prorozwojowych i przemysłowych";"Leadership in enabling and industrial technologies (LEIT)";"

WIODĄCA POZYCJA W PRZEMYŚLE - Wiodąca pozycja w zakresie technologii prorozwojowych i przemysłowych

Celem szczegółowym jest budowa i utrzymanie wiodącej globalnej pozycji dzięki badaniom naukowym i innowacjom w zakresie technologii prorozwojowych i technologii kosmicznych, stanowiących podstawę konkurencyjności w wielu istniejących i powstających gałęziach przemysłu i sektorach.Globalne otoczenie biznesu zmienia się w szybkim tempie, a cele strategii „Europa 2020” stawiają przed europejskim przemysłem zarówno wyzwania, jak i możliwości. Europa potrzebuje przyspieszenia w dziedzinie innowacji, przeobrażenia uzyskanej wiedzy w sposób pozwalający na udoskonalenie i zwiększenie atrakcyjności istniejących produktów, usług i rynków, a także na tworzenie nowych, z jednoczesnym utrzymaniem akcentu na jakości i zrównoważoności. Innowacje należy wykorzystywać w najszerszym rozumieniu, nie tylko w technologii, lecz także w biznesie oraz w kwestiach organizacyjnych i społecznych.Utrzymanie się w czołówce globalnej konkurencji dzięki silnej bazie technologicznej i zdolnościom przemysłowym wymaga zwiększenia strategicznych inwestycji w badania naukowe, rozwój, walidację i programy pilotażowe w dziedzinach ICT H2020-EU.2.1.1 (http://cordis.europa.eu/programme/rcn/664147_en.html), nanotechnologii H2020-EU.2.1.2 (http://cordis.europa.eu/programme/rcn/664161_en.html), materiałów zaawansowanych H2020-EU.2.1.3 (http://cordis.europa.eu/programme/rcn/664173_en.html), biotechnologii H2020-EU.2.1.4 (http://cordis.europa.eu/programme/rcn/664189_en.html), zaawansowanych systemów produkcji i przetwarzania H2020-EU.2.1.5 (http://cordis.europa.eu/programme/rcn/664197_en.html) oraz przestrzeni kosmicznej H2020-EU.2.1.5 (http://cordis.europa.eu/programme/rcn/664197_en.html).Udane opanowanie, integracja i wdrożenie technologii prorozwojowych przez przemysł europejski to kluczowy czynnik wzmocnienia wydajności Europy oraz jej zdolności do innowacji i zagwarantowania, że Europa posiada zaawansowaną, zrównoważoną i konkurencyjną gospodarkę, pozycję globalnego lidera w sektorach zastosowania najnowocześniejszych technologii oraz zdolność do opracowania skutecznych i zrównoważonych rozwiązań wyzwań społecznych. Ze względu na swój dominujący charakter, takie działania mogą stymulować dalsze postępy poprzez wzajemnie uzupełniające się wynalazki, zastosowania i usługi, zapewniając wyższy zwrot z inwestycji w takie technologie niż w jakiejkolwiek innej dziedzinie.Działania te przyczynią się to osiągnięcia celów inicjatyw przewodnich strategii „Europa 2020” – „Unii innowacji”, „Europy efektywnie korzystającej z zasobów”, „Polityki przemysłowej w erze globalizacji”, „Europejskiej agendy cyfrowej” oraz celów Unii związanych z polityką w zakresie przestrzeni kosmicznej.

Komplementarność z innymi działaniami w ramach programu „Horyzont 2020”

Działania związane z celem szczegółowym „Wiodąca pozycja w zakresie technologii prorozwojowych i przemysłowych” będą opierać się przede wszystkim na agendach badań naukowych i innowacji zdefiniowanych głównie przez przemysł i biznes, w tym MŚP oraz środowisko naukowe i państwa członkowskie w otwarty i przejrzysty sposób oraz będą silnie ukierunkowane na wykorzystanie inwestycji sektora prywatnego i na innowacje.Wraz z odnośnymi wyzwaniami wspierane jest włączenie technologii prorozwojowych do rozwiązań w zakresie wyzwań społecznych. W ramach celu szczegółowego „Wiodąca pozycja w zakresie technologii prorozwojowych i przemysłowych” wspierane jest zastosowanie technologii prorozwojowych niewchodzących w zakres żadnego z wyzwań społecznych, lecz ważnych dla wzmocnienia konkurencyjności europejskiego przemysłu. Należy dążyć do właściwej koordynacji z priorytetami „Doskonała baza naukowa” i „Wyzwania społeczne”.

Wspólne podejście

Podejście to obejmuje zarówno działania prowadzone zgodnie z agendą, jak i bardziej otwarte obszary w celu promowania innowacyjnych projektów i przełomowych rozwiązań obejmujących cały łańcuch wartości, w tym badania i rozwój, pilotażowe projekty wielkoskalowe i działania demonstracyjne, poligony doświadczalne i żywe laboratoria, tworzenie prototypów i weryfikację produktów na liniach pilotażowych. Działania są projektowane w sposób zwiększający konkurencyjność przemysłową poprzez stymulowanie przemysłu, a w szczególności MŚP, do większych inwestycji w badania naukowe i w innowacje, w tym za pośrednictwem otwartych zaproszeń do składania wniosków. Zostanie zwrócona odpowiednia uwaga na projekty o małej i średniej skali.

Zintegrowane podejście do kluczowych technologii prorozwojowych

Istotnym elementem celu szczegółowego „Wiodąca pozycja w zakresie technologii prorozwojowych i przemysłowych” są kluczowe technologie prorozwojowe (KET), definiowane jako mikro- i nanoelektronika, fotonika, nanotechnologia, biotechnologia, materiały zaawansowane i zaawansowane systemy produkcyjne. Takie multidyscyplinarne, wymagające rozległej wiedzy i dużego kapitału technologie obejmują wiele zróżnicowanych sektorów, tworząc podstawę dla osiągnięcia istotnej przewagi konkurencyjnej przez przemysł europejski, aby stymulować wzrost i tworzyć nowe miejsca pracy. Zintegrowane podejście, wspierające łączenie, konwergencję i wzajemne inspirowanie się kluczowych technologii prorozwojowych w różnych cyklach innowacji i łańcuchach wartości mogą zapewnić obiecujące wyniki badań naukowych i otworzyć drogę dla nowych technologii przemysłowych, produktów, usług i nowatorskich zastosowań (np. w obszarach takich jak: przestrzeń kosmiczna, transport, rolnictwo, rybołówstwo, leśnictwo, środowisko, żywność, zdrowie i energia). Liczne interakcje kluczowych technologii prorozwojowych i innych przemysłowych technologii prorozwojowych będą zatem wykorzystywane w elastyczny sposób jako ważne źródło innowacji. Podejście to uzupełni wsparcie dla badań naukowych i innowacji w zakresie KET świadczone przez organy krajowe lub regionalne z funduszy polityki spójności w ramach strategii inteligentnej specjalizacji.Innowacyjność wymaga intensyfikacji badań przekrojowych w dziedzinie technologii. Dlatego projekty multidyscyplinarne i obejmujące wiele technologii prorozwojowych (multi-KET) powinny stanowić nieodłączny element priorytetu dotyczącego „Wiodącej pozycji w przemyśle”. Struktura realizacji programu „Horyzont 2020”, wspierająca KET i przekrojowe działania w zakresie KET (multi-KET) powinna zapewniać synergię i skuteczną koordynację – między innymi – z wyzwaniami społecznymi. Oprócz tego stosownie do wymagań konkretnego przypadku będzie się dążyć do osiągnięcia synergii między działaniami polityki spójności na lata 2014-2020, a także EIT.W przypadku wszelkich technologii prorozwojowych i przemysłowych, w tym kluczowych technologii prorozwojowych, głównym celem będzie wspieranie interakcji między technologiami oraz interakcji z zastosowaniami związanymi z wyzwaniami społecznymi. Jest to w pełni uwzględniane w pracach nad przygotowaniem i wdrożeniem agend i priorytetów. Wymaga to pełnego zaangażowania zainteresowanych stron reprezentujących różne punkty widzenia w ustalanie i wdrażanie priorytetów. W niektórych przypadkach konieczne będą również działania wspólnie finansowane ze środków przeznaczonych na technologie prorozwojowe i przemysłowe oraz na odnośne wyzwania społeczne. Może to obejmować wspólne finansowanie partnerstw publiczno-prywatnych mających na celu rozwój technologii, wspieranie innowacji oraz zastosowanie ich w odniesieniu do wyzwań społecznych.Technologie informacyjno-komunikacyjne odgrywają ważną rolę, ponieważ oferują kluczową podstawową infrastrukturę, technologię i systemy niezbędne dla ważnych procesów gospodarczych i społecznych oraz nowych produktów i usług prywatnych i publicznych. Europejski przemysł musi utrzymać się w czołówce rozwoju technologicznego w dziedzinie ICT, w której wiele technologii wchodzi w nową, przełomową fazę, otwierając nowe możliwości.Przestrzeń kosmiczna to szybko rozwijający się sektor badań, dostarczający informacji ważnych dla wielu sektorów współczesnego społeczeństwa, odnoszący się do uniwersalnych kwestii naukowych i pozwalający na zabezpieczenie pozycji Unii jako istotnego gracza na arenie międzynarodowej. Badania w zakresie przestrzeni kosmicznej leżą u podstaw wszystkich działań podejmowanych w przestrzeni kosmicznej, przy czym aktualnie poświęcone są im programy państw członkowskich, Europejskiej Agencji Kosmicznej (ESA) lub inicjatywy w kontekście programu ramowego Unii w zakresie badań. Dla zachowania konkurencyjności, ochrony unijnej infrastruktury kosmicznej i programów takich jak Copernicus i Galileo oraz dla zapewnienia Europie przyszłej roli w zakresie przestrzeni kosmicznej kontynuowane muszą być działania w zakresie badań kosmicznych na szczeblu Unii, zgodnie z art. 189 TFUE.Ponadto innowacyjne usługi niższego szczebla i przyjazne dla użytkownika zastosowania wykorzystujące informacje pozyskiwane w przestrzeni kosmicznej stanowią ważne źródło wzrostu gospodarczego i nowych miejsc pracy, a ich rozwój stanowi ważną szansę dla Unii.

Partnerstwo i wartość dodana

Europa może osiągnąć masę krytyczną poprzez partnerstwa, klastry i sieci, standaryzację, promując współpracę między różnymi dyscyplinami nauki i techniki oraz sektorami o podobnych potrzebach w zakresie badań i rozwoju, doprowadzając do przełomów, powstania nowych technologii oraz innowacyjnych produktów, usług i rozwiązań technologicznych.Opracowanie i wdrożenie agend w zakresie badań naukowych i innowacji, w tym poprzez partnerstwa publiczno-prywatne, a także poprzez tworzenie efektywnych powiązań między przemysłem a środowiskiem akademickim, pozyskiwanie dodatkowych inwestycji, dostęp do finansowania ryzyka, standaryzacja oraz wsparcie dla przedkomercyjnych zamówień publicznych i zamówień na innowacyjne produkty i usługi – wszystko to są aspekty o zasadniczym znaczeniu dla konkurencyjności.Pod tym względem potrzebne są też silne związki z EIT, umożliwiające tworzenie i promowanie największych talentów w sektorze przedsiębiorstw oraz przyspieszenie innowacji poprzez zgromadzenie osób z różnych krajów, dyscyplin i organizacji.Współpraca na poziomie Unii może również wspierać możliwości handlowe poprzez wsparcie rozwijania europejskich lub międzynarodowych norm w zakresie nowo powstających produktów i usług oraz technologii. Rozwijanie takich norm po konsultacjach z odpowiednimi zainteresowanymi stronami, w tym pochodzącymi ze środowisk naukowych i przemysłu, może przynieść pozytywne skutki. Promowane będą działania wspierające standaryzację oraz interoperacyjność, bezpieczeństwo i ułatwiające przygotowanie regulacji prawnych.";"";"H2020";"H2020-EU.2.";"";"";"2014-09-22 20:40:26";"664145" +"H2020-EU.2.1.";"fr";"H2020-EU.2.1.";"";"";"PRIMAUTÉ INDUSTRIELLE - Primauté dans le domaine des technologies génériques et industrielles";"Leadership in enabling and industrial technologies (LEIT)";"

PRIMAUTÉ INDUSTRIELLE - Primauté dans le domaine des technologies génériques et industrielles

L'objectif spécifique est de conserver et d'asseoir la primauté sur la scène mondiale par la recherche et l'innovation dans les technologies génériques et le secteur spatial, sur lesquels se fonde la compétitivité de toute une série d'industries et de secteurs existants et émergents.L'environnement économique mondial évolue rapidement, et les objectifs de la stratégie Europe 2020 sont autant des défis que des occasions à saisir pour l'industrie européenne. L'Europe doit accélérer le processus d'innovation, en transformant les connaissances générées pour soutenir et améliorer les produits, les services et les marchés existants, et en créer de nouveaux, tout en continuant de privilégier la qualité et la viabilité. L'innovation devrait être exploitée de la manière la plus large possible: pas uniquement sur le plan technologique, mais aussi sous ses aspects commerciaux, organisationnels et sociaux.Pour conserver sa primauté face à la concurrence mondiale en disposant d'une solide base technologique et de fortes capacités industrielles, davantage d'investissements stratégiques doivent être consentis dans la recherche, le développement, la validation et le lancement de projets pilotes dans les domaines des TIC, H2020-EU.2.1.1 (http://cordis.europa.eu/programme/rcn/664147_en.html), des nanotechnologies H2020-EU.2.1.2 (http://cordis.europa.eu/programme/rcn/664161_en.html), des matériaux avancés H2020-EU.2.1.3 (http://cordis.europa.eu/programme/rcn/664173_en.html), des biotechnologies H2020-EU.2.1.4 (http://cordis.europa.eu/programme/rcn/664189_en.html), des systèmes de fabrication et de transformation avancés H2020-EU.2.1.5 (http://cordis.europa.eu/programme/rcn/664197_en.html), et de l'espace H2020-EU.2.1.5 (http://cordis.europa.eu/programme/rcn/664197_en.html).Une bonne maîtrise, une intégration réussie et un déploiement efficace des technologies génériques par les entreprises européennes sont essentiels pour accroître la productivité et la capacité d'innovation de l'Europe et pour que celle-ci ait une économie avancée, durable et compétitive, jouant un rôle de premier plan sur la scène mondiale dans les secteurs d'application des hautes technologies et capable d'apporter des solutions efficaces et durables aux défis de société. Les multiples applications de ces activités peuvent stimuler de nouvelles avancées en débouchant sur des inventions, des applications et des services complémentaires, ce qui assure à ces technologies un retour sur investissement sans équivalent.Ces activités contribueront à la réalisation des objectifs définis dans les initiatives phares de la stratégie Europe 2020 intitulées «Une Union de l'innovation», «Une Europe efficace dans l'utilisation des ressources», «Une politique industrielle intégrée à l'ère de la mondialisation» et «Une stratégie numérique pour l'Europe» et des objectifs qui sous-tendent la politique spatiale de l'Union.

Complémentarité avec les autres activités d'Horizon 2020

Les activités relevant de l'objectif spécifique «Primauté dans le domaine des technologies génériques et industrielles» se fonderont essentiellement sur les programmes de recherche et d'innovation principalement élaborés par l'industrie et les entreprises, y compris les PME, en association avec la communauté des chercheurs et les États membres, de façon ouverte et transparente;et mettront fortement l'accent sur la mobilisation des investissements du secteur privé ainsi que sur l'innovation. L'intégration de technologies génériques dans des solutions qui permettent de relever des défis de société est soutenue conjointement avec les défis concernés. Les applications de technologies génériques qui ne s'inscrivent pas dans la section «Défis de société» mais qui contribuent notablement à renforcer la compétitivité de l'industrie européenne sont soutenues au titre de l'objectif spécifique «Primauté dans le domaine des technologies génériques et industrielles». Il convient de rechercher des mécanismes de coordination appropriés avec les priorités «Excellence scientifique» et «Défis de société».

Une approche commune

L'approche utilisée intègre aussi bien les activités fondées sur un programme que les secteurs plus ouverts, de façon à promouvoir les projets innovants et les solutions révolutionnaires couvrant toute la chaîne de valeur ajoutée, y compris la R&D, les projets pilotes et les activités de démonstration à grande échelle, les bancs d'essai et les laboratoires vivants, le prototypage, ainsi que la validation des produits dans des lignes pilotes. Les activités sont conçues de manière à promouvoir la compétitivité industrielle en incitant les entreprises, et notamment les PME, à investir davantage dans la recherche et l'innovation, y compris par l'intermédiaire d'appels ouverts. Toute l'attention nécessaire sera accordée aux projets à petite et moyenne échelle.

Une approche intégrée des technologies clés génériques

L'objectif spécifique «Primauté dans le domaine des technologies génériques et industrielles» compte parmi ses principales composantes les technologies clés génériques, définies comme la micro- et la nanoélectronique, la photonique, les nanotechnologies, les biotechnologies, les matériaux avancés et les systèmes de fabrication avancés. Ces technologies pluridisciplinaires, à forte intensité de connaissance et de capitaux, touchent une grande variété de secteurs et peuvent donc être mises à profit pour conférer à l'industrie européenne un avantage concurrentiel significatif, stimuler la croissance et créer de nouveaux emplois. Une approche intégrée visant à exploiter les capacités de combinaison, de convergence et de fertilisation croisée des technologies clés génériques dans différents cycles d'innovation et différentes chaînes de valeur peut produire des résultats prometteurs dans le domaine de la recherche et peut ouvrir la voie à de nouvelles technologies industrielles, de nouveaux produits et de nouveaux services ainsi qu'à des applications inédites (par exemple dans le domaine de l'espace, des transports, de l'agriculture, de la pêche, de la sylviculture, de l'environnement, de l'alimentation, de la santé et de l'énergie). Les nombreuses interactions qu'autorisent ces technologies et les autres technologies génériques industrielles seront donc exploitées de manière flexible, en tant que source importante d'innovation. Cette démarche complétera le soutien aux activités de recherche et d'innovation relatives aux technologies clés génériques que pourraient apporter les autorités nationales ou régionales au titre des fonds de la politique de cohésion, dans le cadre de stratégies de spécialisation intelligente.L'innovation exige des efforts de recherche intertechnologiques accrus. En conséquence, les projets multidisciplinaires et portant sur plusieurs technologies clés génériques devraient faire partie intégrante de la priorité «Primauté industrielle». La structure de mise en œuvre d'Horizon 2020 soutenant les technologies clés génériques et les activités transversales dans le domaine des technologies clés génériques (technologies clés génériques multiples) devrait veiller à la mise en place de synergies et d'une coordination efficace, notamment avec les défis de société. En outre, des synergies seront recherchées, le cas échéant, entre les activités portant sur les technologies clés génériques et les activités s'inscrivant dans le cadre de la politique de cohésion pour la période 2014-2020, ainsi qu'avec l'EIT.Pour toutes les technologies génériques et industrielles, dont les technologies clés génériques, l'un des principaux objectifs sera d'encourager les interactions entre les différentes technologies, ainsi qu'avec les applications relevant de la section «Défis de société». Cet objectif doit être pleinement pris en considération lors de la définition et de la mise en œuvre des stratégies et des priorités. Il conviendra pour ce faire d'associer pleinement à la définition et à la mise en œuvre des priorités stratégiques des parties prenantes représentant les différents points de vue. Dans certains cas, les actions devront par ailleurs être financées au titre à la fois de l'objectif spécifique «Primauté dans le domaine des technologies génériques et industrielles» et des objectifs spécifiques concernés de la section «Défis de société». Il pourrait ainsi s'agir, par exemple, de financer conjointement les partenariats public-privé visant à développer des technologies et à stimuler l'innovation, et d'appliquer ces technologies pour relever des défis de société.Les TIC jouent un rôle primordial, car elles fournissent les infrastructures, les technologies et les systèmes de base indispensables à des processus économiques et sociaux vitaux ainsi qu'à de nouveaux produits et services, tant publics que privés. L'industrie européenne doit rester à la pointe des évolutions technologiques dans le domaine des TIC, où de nombreuses technologies entrent dans une nouvelle phase de rupture, ce qui ouvre de nouveaux débouchés.Le secteur spatial est un secteur en croissance rapide, qui fournit des informations essentielles à de nombreux aspects de la société moderne et répond à ses besoins fondamentaux, qui traite des questions scientifiques universelles et qui contribue à asseoir la position de l'Union en tant qu'acteur majeur sur la scène internationale. La recherche spatiale sous-tend l'ensemble des activités menées dans l'espace, mais elle est actuellement abordée dans des programmes gérés par des États membres, l'Agence spatiale européenne (ESA) ou dans le contexte des programmes-cadres de l'Union pour la recherche. Une action à l'échelle de l'Union et des investissements dans la recherche spatiale sont requis conformément à l'article 189 du traité sur le fonctionnement de l'Union européenne afin de maintenir l'avance concurrentielle de l'Union, de préserver ses infrastructures et ses programmes dans le domaine spatial, tels que Copernicus et Galileo, et de garantir que l'Europe aura, demain, un rôle à jouer dans le domaine spatial.Par ailleurs, les services innovants en aval et les applications conviviales qui utilisent les informations fournies par le secteur spatial constituent des moteurs de croissance de premier ordre et de grands pourvoyeurs d'emplois, et leur développement représente pour l'Union une opportunité importante.

Partenariat et valeur ajoutée

L'Europe peut atteindre la masse critique nécessaire en établissant des partenariats, des pôles et des réseaux, en réalisant un travail de normalisation et en promouvant la coopération entre des disciplines et des secteurs scientifiques et technologiques différents ayant des besoins similaires en matière de recherche et de développement, de manière à réaliser des avancées et à mettre au point de nouvelles technologies ainsi que des solutions innovantes en ce qui concerne les produits, les services et les processus.L'élaboration et la mise en œuvre de stratégies de recherche et d'innovation, y compris par la conclusion de partenariats public-privé, mais aussi par l'établissement de relations effectives entre les entreprises et le monde universitaire, la mobilisation de fonds supplémentaires à des fins d'investissement, l'accès au financement à risque, la normalisation ainsi que le soutien aux achats publics avant commercialisation et aux marchés publics de produits et services innovants, sont autant d'éléments essentiels en vue d'assurer la compétitivité.À cet égard, il convient également d'entretenir des liens étroits avec l'EIT, afin de produire et de promouvoir les meilleurs talents dotés d'un esprit d'entreprise et d'accélérer le processus d'innovation en rassemblant des personnes issues de différents pays, différentes disciplines et différentes organisations.Une collaboration à l'échelle de l'Union peut également soutenir l'activité commerciale en soutenant l'établissement de normes européennes ou internationales concernant les nouveaux produits, services et technologies émergents. L'élaboration de telles normes, à l'issue d'une consultation des parties prenantes, y compris celles issues du secteur scientifique et industriel, pourrait avoir une incidence positive. Les activités de soutien à la normalisation et à l'interopérabilité ainsi que les activités pré-réglementaires et liées à la sécurité seront soutenues.";"";"H2020";"H2020-EU.2.";"";"";"2014-09-22 20:40:26";"664145" +"H2020-EU.3.";"pl";"H2020-EU.3.";"";"";"PRIORYTET „Wyzwania społeczne”";"Societal Challenges";"

PRIORYTET „Wyzwania społeczne”

Ta część stanowi bezpośrednią reakcję na priorytety polityki i wyzwania społeczne, które są określone w strategii „Europa 2020” i które mają doprowadzić do uzyskania masy krytycznej wysiłków w zakresie badań naukowych i innowacji z myślą o osiągnięciu celów strategicznych Unii. Finansowanie dotyczy następujących celów szczegółowych:(a) zdrowie, zmiany demograficzne i dobrostan; http://cordis.europa.eu/programme/rcn/664237/pl)(b) bezpieczeństwo żywnościowe, zrównoważone rolnictwo i leśnictwo, badania mórz i wód śródlądowych oraz biogospodarka; http://cordis.europa.eu/programme/rcn/664281/pl)(c) bezpieczna, czysta i efektywna energia; http://cordis.europa.eu/programme/rcn/664321/pl)(d) inteligentny, zielony i zintegrowany transport; http://cordis.europa.eu/programme/rcn/664357/pl)(e) działania w dziedzinie klimatu, środowisko, efektywna gospodarka zasobami i surowce; http://cordis.europa.eu/programme/rcn/664389/pl)(f) Europa w zmieniającym się świecie – integracyjne, innowacyjne i refleksyjne społeczeństwa; http://cordis.europa.eu/programme/rcn/664435/pl)(g) Bezpieczne społeczeństwa – ochrona wolności i bezpieczeństwa Europy i jej obywateli. http://cordis.europa.eu/programme/rcn/664463/pl)Wszystkie działania są realizowane z zastosowaniem podejścia zorientowanego na wyzwania, które może obejmować badania podstawowe, badania stosowane, transfer wiedzy lub innowacje, oraz skupiają się na priorytetach polityki, bez dokonywania uprzednio dokładnego wyboru technologii czy rozwiązań, które należy opracować. Obok rozwiązań technologicznych przedmiotem uwagi będą innowacje nietechnologiczne, organizacyjne i systemowe, a także innowacje w sektorze publicznym. Nacisk jest kładziony na zgromadzenie masy krytycznej zasobów i wiedzy w odniesieniu do różnych dziedzin, technologii i dyscyplin nauki oraz infrastruktury badawczej w celu sprostania wyzwaniom. Działania obejmują pełny cykl, od badań podstawowych po wprowadzenie na rynek, z nowym ukierunkowaniem na działania związane z innowacyjnością, takie jak pilotaż, działania demonstracyjne, poligony doświadczalne, wsparcie dla zamówień publicznych, projekty, innowacje zorientowane na użytkownika końcowego, innowacje społeczne, transfer wiedzy oraz absorpcja innowacji przez rynek i standaryzacja.";"";"H2020";"H2020-EC";"";"";"2014-09-23 20:20:18";"664235" +"H2020-EU.3.";"it";"H2020-EU.3.";"";"";"PRIORITÀ ""Sfide per la società""";"Societal Challenges";"

PRIORITÀ ""Sfide per la società""

La presente parte affronta direttamente le priorità politiche e le sfide per la società che sono identificate nella strategia Europa 2020 e mirano a stimolare la massa critica degli sforzi di ricerca e innovazione necessari a conseguire gli obiettivi politici dell'Unione. Il finanziamento è incentrato sui seguenti obiettivi specifici:(a) salute, cambiamento demografico e benessere; H2020-EU.3.1. (http://cordis.europa.eu/programme/rcn/664237/it)(b) sicurezza alimentare, agricoltura e silvicoltura sostenibili, ricerca marina, marittima e sulle acque interne e bioeconomia; H2020-EU.3.2. (http://cordis.europa.eu/programme/rcn/664281/it)(c) energia sicura, pulita ed efficiente; H2020-EU.3.3. (http://cordis.europa.eu/programme/rcn/664321/it)(d) trasporti intelligenti, verdi e integrati; H2020-EU.3.4. (http://cordis.europa.eu/programme/rcn/664357/it)(e) azione per il clima, ambiente, efficienza delle risorse e materie prime; H2020-EU.3.5. (http://cordis.europa.eu/programme/rcn/664389/it)(f) l'Europa in un mondo che cambia - società inclusive, innovative e riflessive; H2020-EU.3.6. (http://cordis.europa.eu/programme/rcn/664435/it)(g) società sicure - proteggere la libertà e la sicurezza dell'Europa e dei suoi cittadini. H2020-EU.3.7. (http://cordis.europa.eu/programme/rcn/664463/it)Tutte le attività adottano un approccio basato sulle sfide, che può includere la ricerca di base, la ricerca applicata, il trasferimento di conoscenze e l'innovazione, e si concentrano sulle priorità politiche senza determinare in precedenza la scelta precisa di tecnologie o soluzioni da sviluppare. Accanto alle soluzioni basate sulle tecnologie, si rivolge attenzione all'innovazione organizzativa, non tecnologica e dei sistemi nonché all'innovazione del settore pubblico. L'accento riposa sul raggruppamento di una massa critica di risorse e di conoscenze tra diversi settori, tecnologie e discipline scientifiche e infrastrutture di ricerca al fine affrontare le sfide. Le attività interessano l'intero ciclo dalla ricerca di base al mercato, con un nuovo accento sulle attività connesse all'innovazione, quali il pilotaggio, le attività dimostrative, i banchi di prova, il sostegno allo svolgimento di gare d'appalto, la progettazione, le innovazioni dettate dagli utenti, l'innovazione sociale, il trasferimento di conoscenze, la commercializzazione delle innovazioni e la standardizzazione.";"";"H2020";"H2020-EC";"";"";"2014-09-23 20:20:18";"664235" +"H2020-EU.2.1.";"en";"H2020-EU.2.1.";"";"";"INDUSTRIAL LEADERSHIP - Leadership in enabling and industrial technologies";"Leadership in enabling and industrial technologies (LEIT)";"

INDUSTRIAL LEADERSHIP - Leadership in enabling and industrial technologies

The specific objective is to maintain and build global leadership through research and innovation in enabling technologies and space, which underpin competitiveness across a range of existing and emerging industries and sectors.The global business environment is changing rapidly and the objectives of the Europe 2020 strategy present challenges and opportunities to European industry. Europe needs to accelerate innovation, transforming the knowledge generated to underpin and enhance existing products, services and markets, and to create new ones while maintaining focus on quality and sustainability. Innovation should be exploited in the widest sense, going beyond technology to include business, organisational and social aspects.To stay at the forefront of global competition with a strong technological base and industrial capabilities, increased strategic investments in research, development, validation and piloting are required in ICT H2020-EU.2.1.1 (http://cordis.europa.eu/programme/rcn/664147_en.html), nanotechnologies H2020-EU.2.1.2 (http://cordis.europa.eu/programme/rcn/664161_en.html), advanced materials H2020-EU.2.1.3 (http://cordis.europa.eu/programme/rcn/664173_en.html), biotechnology H2020-EU.2.1.4 (http://cordis.europa.eu/programme/rcn/664189_en.html), advanced manufacturing and processing H2020-EU.2.1.5 (http://cordis.europa.eu/programme/rcn/664197_en.html), and space H2020-EU.2.1.5 (http://cordis.europa.eu/programme/rcn/664197_en.html).The successful mastering, integration and deployment of enabling technologies by European industry is a key factor in strengthening Europe's productivity and innovation capacity and ensuring that Europe has an advanced, sustainable and competitive economy, global leadership in hi-tech application sectors and the ability to develop effective and sustainable solutions for societal challenges. The pervasive nature of such activities can spur further progress through complementary inventions, applications and services, ensuring a higher return on investment in these technologies than in any other field.These activities will contribute to the objectives of the flagship initiatives 'Innovation Union', 'Resource-efficient Europe', 'An industrial policy for the globalisation era', and 'Digital Agenda for Europe' of the Europe 2020 strategy, as well as to Union space policy objectives.

Complementarities with other activities in Horizon 2020

The activities under the specific objective 'Leadership in Enabling and Industrial Technologies' will be primarily based on research and innovation agendas mainly defined by industry and business, including SMEs, together with the research community and Member States in an open and transparent manner and have a strong focus on leveraging private sector investment and on innovation.The integration of enabling technologies in solutions for the societal challenges shall be supported together with the relevant challenges. Applications of enabling technologies that do not fall under the societal challenges, but are important for reinforcing the competitiveness of European industry, shall be supported under the specific objective 'Leadership in Enabling and Industrial Technologies'. Appropriate coordination should be sought with the priorities 'Excellent Science' and 'Societal Challenges'.

A common approach

The approach shall include both agenda-driven activities and more open areas to promote innovative projects and breakthrough solutions covering the whole value chain, including R&D, large-scale pilots and demonstration activities, test beds and living labs, prototyping and product validation in pilot lines. Activities shall be designed to boost industrial competitiveness by stimulating industry, and in particular SMEs, to make more research and innovation investment, including through open calls. Adequate focus will be given to small and medium scale projects.

An integrated approach to Key Enabling Technologies

A major component of the specific objective 'Leadership in Enabling and Industrial Technologies' are Key Enabling Technologies (KETs), defined as micro- and nanoelectronics, photonics, nanotechnology, biotechnology, advanced materials and advanced manufacturing systems. These multi-disciplinary, knowledge and capital-intensive technologies cut across many diverse sectors providing the basis for significant competitive advantage for European industry, for stimulating growth and for creating new jobs. An integrated approach, promoting the combination, convergence and cross-fertilisation effect of KETs in different innovation cycles and value chains can deliver promising research results and open the way to new industrial technologies, products, services and novel applications (e.g. in space, transport, agriculture, fisheries, forestry, environment, food, health and energy). The numerous interactions of KETs and other industrial enabling technologies will therefore be exploited in a flexible manner, as an important source of innovation. This will complement support for research and innovation in KETs that may be provided by national or regional authorities under the Cohesion Policy Funds within the framework of smart specialisation strategies.Innovation requires enhanced cross-technology research efforts. Therefore, multidisciplinary and multi-KET projects should be an integral part of the priority 'Industrial Leadership'. The Horizon 2020 implementation structure supporting KETs and cross-cutting KET activities (multi KETs) should ensure synergies and effective coordination, among others, with societal challenges. In addition, synergies will be sought, where appropriate, between KET activities and the activities under the cohesion policy for 2014-2020, as well as with the EIT.For all the enabling and industrial technologies, including the KETs, a major aim will be to foster interactions between the technologies and with the applications under the societal challenges. This shall be fully taken into account in developing and implementing the agendas and priorities. It requires that stakeholders representing the different perspectives are fully involved in priority setting and implementation. In certain cases, it will also require actions that are jointly funded by the enabling and industrial technologies and by the relevant societal challenges. This could include joint funding for public-private partnerships that aim to develop technologies, foster innovation and apply such technologies to address societal challenges.ICT plays an important role as it provides the key basic infrastructures, technologies and systems for vital economic and social processes and new private and public products and services. European industry needs to remain at the cutting edge of technological developments in ICT, where many technologies are entering a new disruptive phase, opening up new opportunities.Space is a rapidly growing sector which delivers information vital to many areas of modern society, meeting its fundamental demands, addresses universal scientific questions, and serves to secure the Union's position as a major player on the international stage. Space research underpins all activities undertaken in space, but is currently addressed in programmes run by Member States, the European Space Agency (ESA) or in the context of Union Framework Programmes for Research. Union level action and investment in space research are required in accordance with Article 189 TFEU, in order to maintain the competitive edge, to safeguard Union space infrastructures and programmes such as Copernicus and Galileo and to sustain a future role for Europe in space.In addition, innovative downstream services and user-friendly applications using space derived information represent an important source of growth and job creation, and their development represents an important opportunity for the Union.

Partnering and added value

Europe can achieve critical mass through partnering, clusters and networks, standardisation, promoting cooperation between different scientific and technological disciplines and sectors with similar research and development needs, leading to breakthroughs, new technologies and innovative product, service and process solutions.The development and implementation of research and innovation agendas including through public–private partnerships, but also by the building of effective industry-academia links, the leveraging of additional investments, the access to risk finance, standardisation and the support to pre-commercial procurement and the procurement of innovative products and services, are all aspects that are essential in addressing competitiveness.In this regard, strong links with the EIT are also needed to produce and promote entrepreneurial top talents and to speed up innovation by bringing together people from different countries, disciplines and organisations.Union level collaboration can also support trade opportunities through the support for the development of European or international standards for new emerging products and services and technologies. Development of such standards following consultation of relevant stakeholders, including those from science and industry, could have a positive impact. Activities in support of standardisation and interoperability, safety and pre-regulatory activities will be promoted.";"";"H2020";"H2020-EU.2.";"";"";"2014-09-22 20:40:26";"664145" +"H2020-EU.3.";"en";"H2020-EU.3.";"";"";"PRIORITY 'Societal challenges";"Societal Challenges";"

PRIORITY 'Societal challenges'

This Part responds directly to the policy priorities and societal challenges that are identified in the Europe 2020 strategy and that aim to stimulate the critical mass of research and innovation efforts needed to achieve the Union's policy goals. Funding shall be focused on the following specific objectives:(a) Health, demographic change and well-being;(http://cordis.europa.eu/programme/rcn/664237/en)(b) Food security, sustainable agriculture and forestry, marine, maritime and inland water research, and the bioeconomy; (http://cordis.europa.eu/programme/rcn/664281/en)(c) Secure, clean and efficient energy; (http://cordis.europa.eu/programme/rcn/664321/en)(d) Smart, green and integrated transport;(http://cordis.europa.eu/programme/rcn/664357/en)(e) Climate action, environment, resource efficiency and raw materials;(http://cordis.europa.eu/programme/rcn/664389/en)(f) Europe in a changing world - Inclusive, innovative and reflective societies;(http://cordis.europa.eu/programme/rcn/664435/en)(g) Secure societies - Protecting freedom and security of Europe and its citizens.(http://cordis.europa.eu/programme/rcn/664463/en)All the activities shall take a challenge-based approach, which may include basic research, applied research, knowledge transfer or innovation, focusing on policy priorities without predetermining the precise choice of technologies or solutions that should be developed. Non-technological, organisational and systems innovation as well as public sector innovation will be given attention in addition to technology-driven solutions. The emphasis shall be on bringing together a critical mass of resources and knowledge across different fields, technologies and scientific disciplines and research infrastructures in order to address the challenges. The activities shall cover the full cycle from basic research to market, with a new focus on innovation-related activities, such as piloting, demonstration activities, test-beds, support for public procurement, design, end-user driven innovation, social innovation, knowledge transfer and market take-up of innovations and standardisation.";"";"H2020";"H2020-EC";"";"";"2014-09-23 20:20:18";"664235" +"H2020-EU.3.";"de";"H2020-EU.3.";"";"";"SCHWERPUNKT ""Gesellschaftliche Herausforderungen""";"Societal Challenges";"

SCHWERPUNKT ""Gesellschaftliche Herausforderungen""

Dieser Teil ist eine direkte Reaktion auf die in der Strategie Europa 2020 genannten politischen Schwerpunkte und gesellschaftlichen Herausforderungen, die dem Ziel dienen, die für die Erreichung der politischen Ziele der Union notwendige kritische Masse von Forschungs- und Innovationsanstrengungen zu erreichen. Die Förderung konzentriert sich auf folgende Einzelziele:(a) Gesundheit, demografischer Wandel und Wohlergehen; http://cordis.europa.eu/programme/rcn/664237/de)(b) Ernährungs- und Lebensmittelsicherheit, nachhaltige Land- und Forstwirtschaft, marine, maritime und limnologische Forschung und Biowirtschaft; http://cordis.europa.eu/programme/rcn/664281/de)(c) Sichere, saubere und effiziente Energieversorgung; http://cordis.europa.eu/programme/rcn/664321/de)(d) Intelligenter, umweltfreundlicher und integrierter Verkehr; http://cordis.europa.eu/programme/rcn/664357/de)(e) Klimaschutz, Umwelt, Ressourceneffizienz und Rohstoffe; http://cordis.europa.eu/programme/rcn/664389/de)(f) Europa in einer sich verändernden Welt: integrative, innovative und reflektierende Gesellschaften; http://cordis.europa.eu/programme/rcn/664435/de)(g) Sichere Gesellschaften – Schutz der Freiheit und Sicherheit Europas und seiner Bürger. http://cordis.europa.eu/programme/rcn/664463/de)Alle Tätigkeiten werden sich an den Herausforderungen orientieren, wozu Grundlagen- und angewandte Forschung, Wissenstransfer oder Innovation gehören können, und sich auf die politischen Schwerpunkte konzentrieren, ohne jedoch zu entwickelnde Technologien oder Lösungen bereits im Vorfeld genau festzulegen. Neben technologiegetriebenen Lösungen werden auch nicht-technologische, organisatorische Innovation sowie innovative Systeme und Innovation im öffentlichen Sektor Beachtung finden. Es wird darauf ankommen, über die einzelnen Gebiete, Technologien und wissenschaftlichen Disziplinen sowie Forschungsinfrastrukturen hinweg eine kritische Masse von Ressourcen und Wissen zusammenzubringen, um die Herausforderungen angehen zu können. Die Tätigkeiten erstrecken sich auf den gesamten Zyklus von der Grundlagenforschung bis zur Vermarktung, wobei ein neuer Schwerpunkt auf innovationsbezogenen Tätigkeiten liegt, wie beispielsweise Pilot- und Demonstrationsprojekte, Testläufe, Unterstützung der öffentlichen Auftragsvergabe, Konzeption, vom Endnutzer angeregte Innovation, gesellschaftliche Innovation, Wissenstransfer und Markteinführung von Innovationen und Normung.";"";"H2020";"H2020-EC";"";"";"2014-09-23 20:20:18";"664235" +"H2020-EU.1.3.";"pl";"H2020-EU.1.3.";"";"";"DOSKONAŁA BAZA NAUKOWA - Działania „Maria Skłodowska-Curie”";"Marie-Sklodowska-Curie Actions";"

DOSKONAŁA BAZA NAUKOWA - Działania „Maria Skłodowska-Curie”

Cel szczegółowy

Celem szczegółowym jest optymalny rozwój i dynamiczne wykorzystanie kapitału intelektualnego Europy z myślą o zdobywaniu, rozwijaniu i przekazywaniu nowych umiejętności, wiedzy i innowacji, a co za tym idzie, o uwolnieniu jego potencjału we wszystkich sektorach i regionach.Bez dobrze wyszkolonych, mających odpowiednią motywację, dynamicznych i kreatywnych naukowców niemożliwe są najwybitniejsze osiągnięcia naukowe i najbardziej produktywne innowacje oparte na badaniach naukowych.Europa dysponuje obszerną i zróżnicowaną pulą wykwalifikowanych zasobów ludzkich w dziedzinie badań naukowych i innowacji, wymagającą jednak stałego uzupełniania, doskonalenia i dostosowania do szybko zmieniających się potrzeb rynku pracy. W 2011 r. tylko 46% tej puli pracowało w sektorze prywatnym, co jest wskaźnikiem znacznie niższym niż u głównych konkurentów gospodarczych Europy; np. w Chinach jest to 69%, w Japonii 73%, a w USA 80%. Ponadto w związku z aktualną sytuacją demograficzną w nadchodzących latach nieproporcjonalnie duża liczba naukowców osiągnie wiek emerytalny. To, w połączeniu z zapotrzebowaniem na wiele wysokiej jakości stanowisk badawczych wynikającym z rosnącego wykorzystania badań naukowych w gospodarce UE, będzie stanowić jedno z głównych wyzwań dla europejskich systemów badań naukowych, innowacji i edukacji, w najbliższych latach.Konieczna reforma musi rozpocząć się na wczesnych etapach kariery naukowej, podczas studiów doktoranckich lub innych im porównywalnych. Europa musi opracować nowoczesne, innowacyjne systemy szkoleń, odpowiadające wysoce konkurencyjnym i coraz bardziej interdyscyplinarnym wymogom w zakresie badań naukowych i innowacji. Zapewnienie naukowcom kompleksowych umiejętności w zakresie innowacyjności i przedsiębiorczości potrzebnych do wykonywania przyszłych zadań oraz zachęcenie ich do rozważenia kariery w przemyśle i najbardziej innowacyjnych przedsiębiorstwach wymaga zdecydowanego zaangażowania przedsiębiorstw, w tym MŚP, i innych podmiotów społeczno-gospodarczych. Ważne będzie również zwiększenie mobilności tych naukowców, która obecnie jest niewielka: w 2008 r. tylko 7% europejskich doktorantów studiowało w innym państwie członkowskim, podczas gdy celem jest osiągnięcie do 2030 r. poziomu 20%.Ta reforma musi być kontynuowana na wszystkich etapach kariery naukowej. Zasadnicze znaczenie ma zwiększenie mobilności naukowców na wszystkich poziomach, w tym mobilności w trakcie kariery, nie tylko między państwami, ale też między sektorem publicznym a prywatnym. Stanowi to silną zachętę do uczenia się i rozwoju nowych umiejętności. Jest również kluczowym czynnikiem współpracy między środowiskiem akademickim, ośrodkami badawczymi i przemysłem w różnych państwach. Czynnik ludzki to podstawa trwałej współpracy, która jest kluczowym bodźcem umożliwiającym innowacyjnej i kreatywnej Europie sprostanie wyzwaniom społecznym, a zarazem przezwyciężenie rozdrobnienia polityki prowadzonej przez poszczególne państwa. Współpraca i wymiana wiedzy poprzez indywidualną mobilność na wszystkich etapach kariery oraz poprzez wymianę wysoko wykwalifikowanego personelu naukowego i badawczego ma podstawowe znaczenie dla powrotu Europy na ścieżkę zrównoważonego wzrostu oraz dla sprostania wyzwaniom społecznym oraz co ma przyczynić się do przezwyciężenia znacznych różnic w potencjałach w zakresie badań naukowych i innowacji.W tym kontekście program „Horyzont 2020” powinien również ułatwiać rozwój karier zawodowych i mobilność naukowców dzięki lepszym warunkom, które zostaną określone w przypadku przenoszenia dotacji w ramach programu „Horyzont 2020”.Działania „Maria Skłodowska-Curie” zapewnią równe możliwości do mobilności mężczyznom i kobietom, także dzięki konkretnym środkom ukierunkowanym na usuwanie barier.Jeśli Europa ma dorównać swoim konkurentom w dziedzinie badań naukowych i innowacji, musi zachęcić większą liczbę młodych kobiet i mężczyzn do podjęcia karier naukowych oraz zapewnić wysoce atrakcyjne możliwości i warunki realizacji badań naukowych i innowacji. Najbardziej utalentowane osoby, z Europy i spoza niej, powinny postrzegać Europę jako szczególnie korzystne miejsce pracy. Równość płci, atrakcyjne bezpieczne zatrudnienie i dobre warunki pracy, a także uznanie to podstawowe aspekty, które należy w całej Europie zapewnić w spójny sposób.

Uzasadnienie i unijna wartość dodana

Ani samo finansowanie unijne, ani działające indywidualnie państwa członkowskie nie będą w stanie sprostać temu wyzwaniu. Państwa członkowskie wprowadziły wprawdzie reformy zmierzające do udoskonalenia swoich instytucji szkolnictwa wyższego oraz do modernizacji systemu szkolenia, jednak w skali Europy postępy są nierówne i między poszczególnymi krajami występują duże różnice. Ogólnie rzecz biorąc, współpraca naukowa i techniczna między sektorem publicznym a prywatnym w Europie pozostaje słaba. To samo dotyczy równości płci oraz wysiłków zmierzających do przyciągania studentów i naukowców spoza EPB. Obecnie ok. 20% doktorantów w Unii to obywatele państw trzecich, podczas gdy w Stanach Zjednoczonych ich liczba wynosi ok. 35%. Aby zmiana nastąpiła szybciej, na szczeblu Unii wymagane jest podejście strategiczne wykraczające poza granice państw. Finansowanie unijne jest niezbędne dla zachęcenia do przeprowadzenia niezbędnych reform strukturalnych.Działania „Maria Skłodowska-Curie” doprowadziły do znacznych postępów w zakresie promowania mobilności, zarówno transnarodowej, jak i międzysektorowej, a także zapewniania możliwości rozwijania karier naukowych w skali europejskiej i międzynarodowej, dając doskonałe warunki zatrudnienia i pracy wynikające z zasad Europejskiej karty naukowca i Kodeksu postępowania przy rekrutacji pracowników naukowych. Pod względem skali i zakresu, finansowania, międzynarodowego charakteru, pozyskiwania i transferu wiedzy nie mają one odpowiednika w państwach członkowskich. Wzmocniły one zasoby instytucji zdolnych do przyciągania naukowców z zagranicy, tym samym sprzyjając upowszechnianiu się centrów doskonałości w całej Unii. Dzięki wyraźnemu efektowi strukturyzacji stanowią wzór do naśladowania, upowszechniając najlepsze praktyki na poziomie krajowym. Poprzez oddolne podejście działania „Maria Skłodowska-Curie” umożliwiły znacznej większości takich instytucji szkolenie i doskonalenie umiejętności nowej generacji naukowców, zdolnych sprostać wyzwaniom społecznym.Dalszy rozwój działań „Maria Skłodowska-Curie” będzie stanowić istotny wkład w rozwój EPB. Dzięki swojej ogólnoeuropejskiej, konkurencyjnej strukturze finansowania działania „Maria Skłodowska-Curie” będą – z poszanowaniem zasady pomocniczości – promować nowe, kreatywne i innowacyjne typy szkoleń, takie jak wspólne programy studiów doktoranckich lub programy umożliwiające wielokrotne doktoraty oraz doktoraty przemysłowe, angażujące podmioty z sektora badań naukowych, innowacji edukacji, które będą musiały konkurować w skali globalnej o reputację ośrodków najwyższej jakości. Zapewniając finansowanie unijne dla najlepszych programów badawczych i szkoleniowych zgodnie z zasadami innowacyjnego szkolenia doktorantów w Europie, będą również promować szersze upowszechnianie i podejmowanie bardziej ustrukturyzowanych programów szkolenia doktorantów.Dotacje na działania „Maria Skłodowska-Curie” będą również udzielane na potrzeby tymczasowej mobilności doświadczonych naukowców i inżynierów przenoszących się z instytucji publicznych do sektora prywatnego i odwrotnie, co zapewni uniwersytetom, ośrodkom badawczym i przedsiębiorstwom oraz innym podmiotom społeczno-gospodarczym wsparcie oraz zachętę do wzajemnej współpracy w skali europejskiej i międzynarodowej. Dzięki dobrze ugruntowanemu, przejrzystemu i uczciwemu systemowi oceny działania „Maria Skłodowska-Curie” umożliwią wyłonienie wybitnych talentów w dziedzinie badań naukowych i innowacji w drodze międzynarodowej konkurencji, co zapewni naukowcom prestiż, a zatem również motywację do rozwijania kariery w Europie.Wyzwania społeczne, którym będą musieli sprostać wysoko wykwalifikowani naukowcy i personel zajmujący się innowacjami, nie są problemem tylko Europy. Są to wyzwania międzynarodowe o ogromnej złożoności i skali. Najlepsi naukowcy w Europie i na świecie muszą współpracować ponad granicami dzielącymi kraje, sektory i dyscypliny. Działania „Maria Skłodowska-Curie” będą odgrywać pod tym względem kluczową rolę, wspierając wymianę personelu, która będzie sprzyjać nastawieniu na współpracę poprzez międzynarodową i międzysektorową wymianę wiedzy, która jest tak istotna dla otwartych innowacji.Mechanizmy współfinansowania działań „Maria Skłodowska-Curie” będą mieć podstawowe znaczenie dla powiększenia europejskiej puli talentów. Ilościowy i strukturalny wpływ działania Unii zostanie zwiększony poprzez wykorzystanie regionalnego, krajowego i międzynarodowego finansowania, zarówno publicznego jak i prywatnego, w celu tworzenia nowych programów, o podobnych lub uzupełniających celach, oraz dostosowania już istniejących programów do celów międzynarodowego i międzysektorowego szkolenia, mobilności i rozwoju kariery. Taki mechanizm wzmocni powiązania między staraniami podejmowanymi w dziedzinie badań naukowych i edukacji na poziomie krajowym a wysiłkami na poziomie Unii.Wszystkie działania związane z tym wyzwaniem przyczynią się do wprowadzenia w Europie zupełnie nowego sposobu myślenia, mającego podstawowe znaczenie dla kreatywności i innowacji. Środki finansowania działań „Maria Skłodowska-Curie” ułatwią łączenie zasobów w Europie, w rezultacie prowadząc do udoskonalenia koordynacji i zarządzania w odniesieniu do szkolenia naukowców, ich mobilności i rozwoju kariery. Przyczynią się do osiągnięcia celów strategicznych określonych w inicjatywach przewodnich „Unia innowacji”, „Mobilna młodzież” i „Program na rzecz nowych umiejętności i zatrudnienia” oraz będą mieć zasadnicze znaczenie dla urzeczywistnienia EPB. Dlatego działania „Maria Skłodowska-Curie” będą projektowane w ścisłej synergii z innymi programami wspierającymi te cele polityk, w tym z programem „Erasmus +” oraz wspólnotami wiedzy i innowacji EIT.

Ogólne kierunki działań

(a) Wspieranie nowych umiejętności poprzez najwyższej jakości wstępne szkolenie naukowców

Celem jest wyszkolenie nowego pokolenia kreatywnych i innowacyjnych naukowców, zdolnych do przekształcenia wiedzy i pomysłów w produkty i usługi przynoszące Unii korzyści gospodarcze i społeczne.Kluczowe działania polegają na zapewnieniu początkującym naukowcom po ukończeniu studiów II stopnia lub równoważnych najwyższej jakości innowacyjnego szkolenia w ramach interdyscyplinarnych projektów, zawierających mentoring służący transferowi wiedzy i doświadczenia między naukowcami lub programy studiów doktoranckich pomagające naukowcom rozwijanie ich karier naukowych oraz obejmujące uniwersytety, instytucje badawcze, infrastrukturę badawczą, przedsiębiorstwa, MŚP oraz, inne podmioty społeczno-gospodarcze z różnych państw członkowskich, krajów stowarzyszonych lub państw trzecich. Skutkiem będą lepsze perspektywy kariery dla młodych naukowców po ukończeniu studiów II stopnia lub równoważnych, zarówno w sektorze publicznym, jak i prywatnym.

(b) Sprzyjanie najwyższej jakości poprzez transgraniczną i międzysektorową mobilność

Celem jest zwiększenie kreatywnego i innowacyjnego potencjału doświadczonych naukowców na wszystkich etapach kariery poprzez zapewnienie możliwości transgranicznej i międzysektorowej mobilności.Kluczowe działania polegają na zachęceniu doświadczonych naukowców do poszerzania lub pogłębiania ich umiejętności poprzez mobilność związaną z udostępnieniem atrakcyjnych możliwości rozwoju kariery na uniwersytetach, w instytucjach badawczych, infrastrukturze badawczej, przedsiębiorstwach, MŚP i innych podmiotach społeczno-gospodarczych w całej Europie i poza nią. To powinno zwiększyć innowacyjność sektora prywatnego i sprzyjać mobilności międzysektorowej. Wspierane są także możliwości dokształcania się i zdobywania nowej wiedzy w najlepszych instytucjach badawczych w państwach trzecich, wznowienia kariery po przerwie oraz oferowania naukowcom po uzyskaniu przez nich doświadczenia w zakresie ponadnarodowej/międzynarodowej mobilności, długoterminowych stanowisk badawczych w Europie, w tym w kraju ich pochodzenia, które obejmowały by aspekty związane z powrotem i ponowną integracją.

(c) Stymulowanie innowacji poprzez proces wzajemnej inspiracji w dziedzinie wiedzy

Celem jest wzmocnienie międzynarodowej współpracy transgranicznej i międzysektorowej w dziedzinie badań naukowych i innowacji poprzez wymianę personelu z dziedziny badań naukowych i innowacji z myślą o skuteczniejszym stawieniu czoła globalnym wyzwaniom.Kluczowe działania polegają na wspieraniu wymian personelu z dziedziny badań naukowych i innowacji w ramach partnerstw uniwersytetów, instytucji badawczych, infrastruktury badawczej, przedsiębiorstw, MŚP i innych podmiotów społeczno-gospodarczych w Europie i na całym świecie. Będzie to obejmować promowanie współpracy z państwami trzecimi.

(d) Zwiększenie oddziaływania strukturalnego przez współfinansowanie działań

Celem jest zwiększenie, przy wykorzystaniu dodatkowo pozyskanych funduszy, ilościowego i strukturalnego wpływu działań „Maria Skłodowska-Curie” oraz sprzyjanie najwyższej jakości na poziomie krajowym w zakresie szkolenia naukowców, ich mobilności i rozwoju kariery.Kluczowe działania polegają na zachęceniu, poprzez mechanizm współfinansowania, organizacji regionalnych, krajowych i międzynarodowych, zarówno publicznych, jak i prywatnych do tworzenia nowych programów oraz dostosowania już istniejących programów do celów międzynarodowego i międzysektorowego szkolenia, mobilności i rozwoju kariery. Pozwoli to na podniesienie jakości szkolenia naukowców w Europie na wszystkich etapach kariery, w tym na poziomie doktoranckim, ułatwienie swobodnego przepływu naukowców i wiedzy naukowej w Europie, promowanie atrakcyjnych karier naukowych poprzez otwartą rekrutację i zachęcające warunki pracy, wspieranie współpracy w zakresie badań naukowych i innowacji między uniwersytetami, instytucjami badawczymi i przedsiębiorstwami oraz wspomaganie współpracy między państwami trzecimi i organizacjami międzynarodowymi.

(e) Działania wspierające i polityczne

Celem jest monitorowanie postępów, określenie luk i barier w działaniach „Maria Skłodowska-Curie” i zwiększenie ich oddziaływania. W tym kontekście opracowywane są wskaźniki oraz analizowane są dane odnoszące się do mobilności naukowców, ich umiejętności i karier oraz równości płci; ma to na celu zapewnienie synergii i bliskiej koordynacji z politycznymi działaniami wspierającymi dotyczącymi naukowców, ich pracodawców i sponsorów prowadzonymi w ramach celu szczegółowego „Europa w zmieniającym się świecie – integracyjne, innowacyjne i refleksyjne społeczeństwa”. Działania mają na celu zwiększenie świadomości na temat znaczenia i atrakcyjności kariery badawczej oraz upowszechnianie wyników działalności badawczej i innowacyjnej pozyskanych dzięki pracom wspieranym w ramach działań „Maria Skłodowska-Curie”.";"";"H2020";"H2020-EU.1.";"";"";"2014-09-22 20:39:21";"664109" +"H2020-EU.1.3.";"en";"H2020-EU.1.3.";"";"";"EXCELLENT SCIENCE - Marie Skłodowska-Curie Actions";"Marie-Sklodowska-Curie Actions";"

EXCELLENT SCIENCE - Marie Skłodowska-Curie Actions

Specific objective

The specific objective is to ensure optimal development and dynamic use of Europe's intellectual capital in order to generate, develop and transfer new skills, knowledge and innovation and, thus, to realise its full potential across all sectors and regions.Well-trained, dynamic and creative researchers are the essential element for the best science and the most productive research-based innovation.Although Europe hosts a large and diversified pool of skilled human resources for research and innovation, this needs to be constantly replenished, improved and adapted to the rapidly evolving needs of the labour market. In 2011 only 46 % of this pool worked in the business sector, which is much lower than in Europe's main economic competitors, e.g. 69 % in China, 73 % in Japan and 80 % in the United States. In addition, demographic factors mean that a disproportionate number of researchers will reach retirement age in the next few years. This, combined with the need for many more high-quality research jobs as the research intensity of the European economy increases, will be one of the main challenges facing European research, innovation and education systems in the years ahead.The necessary reform must start at the first stages of the researchers' careers, during their doctoral studies or comparable post-graduate training. Europe must develop state-of-the-art, innovative training schemes, consistent with the highly competitive and increasingly inter-disciplinary requirements of research and innovation. Significant involvement of businesses, including SMEs and other socio-economic actors, will be needed to equip researchers with the cross-cutting innovation and entrepreneurial skills demanded by the jobs of tomorrow and encourage them to consider their careers in industry or in the most innovative companies. It will also be important to enhance the mobility of these researchers, as it currently remains at a too modest level: in 2008, only 7 % of European doctoral candidates were trained in another Member State, whereas the target is 20 % by 2030.This reform must continue through every stage of researchers' careers. It is vital to increase the mobility of researchers at all levels, including mid-career mobility, not only between countries but also between the public and private sectors. This creates a strong stimulus for learning and developing new skills. It is also a key factor in cooperation between academics, research centres and industry across countries. The human factor is the backbone of sustainable cooperation which is the key driver for an innovative and creative Europe able to face societal challenges, and key to overcoming fragmentation of national policies. Collaborating and sharing knowledge, through individual mobility at all stages of a career and through exchanges of highly skilled R&I staff, are essential for Europe to re-take the path to sustainable growth, to tackle societal challenges and thereby contribute to overcoming disparities in research and innovation capacities.In this context, Horizon 2020 should also encourage career development and mobility of researchers through improved conditions to be defined for the portability of Horizon 2020 grants.Marie Skłodowska-Curie actions will ensure effective equal opportunities for the mobility of male and female researchers, including through specific measures to remove barriers.If Europe is to match its competitors in research and innovation, it must entice more young women and men to embark on research careers and provide highly attractive opportunities and environments for research and innovation. The most talented individuals, from Europe and elsewhere, should see Europe as a pre-eminent place to work. Gender equality, high-quality and reliable employment and working conditions and recognition are crucial aspects that must be secured in a consistent way across the whole of Europe.

Rationale and Union added value

Neither Union funding alone nor Member States individually will be able to address this challenge. Although Member States have introduced reforms to improve their tertiary education institutions and modernise their training systems, progress is still uneven across Europe, with big differences between countries. Overall, scientific and technological cooperation between the public and private sectors generally remains weak in Europe. The same applies to gender equality and to the efforts to attract students and researchers from outside the ERA. Currently around 20 % of the doctoral candidates in the Union are citizens of third countries, whereas about 35 % in the United States come from abroad. To speed up this change, a strategic approach that goes beyond national borders is required at Union level. Union funding is crucial to create incentives for and encourage the indispensable structural reforms.The Marie Skłodowska-Curie actions have made remarkable progress to promote mobility, both transnational and intersectoral, and to open research careers at European and international level, with excellent employment and working conditions following the principles of the European Charter for Researchers and the Code of Conduct for the Recruitment of Researchers. There is no equivalent in Member States as far as their scale and scope, funding, international character, generation and transfer of knowledge are concerned. They have strengthened the resources of those institutions able to attract researchers internationally and thereby encouraged the spread of centres of excellence around the Union. They have served as a role model with a pronounced structuring effect by spreading their best practices at national level. The bottom-up approach taken by Marie Skłodowska-Curie actions has also allowed a large majority of those institutions to train and upgrade the skills of a new generation of researchers able to tackle societal challenges.Further development of the Marie Skłodowska-Curie actions will make a significant contribution to development of the ERA. With their Europe-wide competitive funding structure, Marie Skłodowska-Curie actions will, whilst respecting the principle of subsidiarity, encourage new, creative and innovative types of training such as joint or multiple doctoral degrees and industrial doctorates, involving research, innovation and education players who will have to compete globally for a reputation of excellence. By providing Union funding for the best research and training programmes following the principles for innovative doctoral training in Europe, they will also promote wider dissemination and take-up, moving towards more structured doctoral training.Marie Skłodowska-Curie grants will also be extended to the temporary mobility of experienced researchers and engineers from public institutions to the private sector or vice versa, thereby encouraging and supporting universities, research centres and businesses, and other socio-economic actors to cooperate with one another on a European and international scale. With the aid of their well-established, transparent and fair evaluation system, Marie Skłodowska-Curie actions will identify excellent talents in research and innovation in an international competition which gives prestige and therefore motivation for researchers to advance their career in Europe.The societal challenges to be addressed by highly skilled R&I staff are not just Europe's problem. These are international challenges of colossal complexity and magnitude. The best researchers in Europe and in the world need to work together across countries, sectors and disciplines. Marie Skłodowska-Curie actions will play a key role in this respect by supporting staff exchanges that will foster collaborative thinking through international and intersectoral knowledge-sharing that is so crucial for open innovation.The co-funding mechanism of the Marie Skłodowska-Curie actions will be crucial to expand Europe's pool of talents. The numerical and structural impact of Union action will be increased by leveraging regional, national and international funding, both public and private, to create new programmes with similar and complementary goals and to adapt existing ones to international and intersectoral training, mobility and career development. Such a mechanism will forge stronger links between research and education efforts at national and Union level.All the activities under this challenge will contribute to creating a whole new mindset in Europe that is crucial for creativity and innovation. Marie Skłodowska-Curie funding measures will strengthen pooling of resources in Europe and thereby lead to improvements in coordination and governance of researchers' training, mobility and career development. They will contribute to the policy goals outlined in the flagship initiatives 'Innovation Union', 'Youth on the Move' and 'Agenda for New Skills and Jobs' and will be vital to turn the ERA into reality. The Marie Skłodowska-Curie actions will therefore be developed in close synergy with other programmes supporting these policy objectives, including the Erasmus+ programme and the KICs of the EIT.

Broad lines of activities

(a) Fostering new skills by means of excellent initial training of researchers

The goal is to train a new generation of creative and innovative researchers, able to convert knowledge and ideas into products and services for economic and social benefit in the Union.Key activities shall be to provide excellent and innovative training to early-stage researchers at post-graduate level through interdisciplinary projects, including mentoring to transfer knowledge and experience between researchers or doctoral programmes, helping researchers to develop their research career and involving universities, research institutions, research infrastructures, businesses, SMEs and other socio-economic groups from different Member States, associated countries and/or third countries. This will improve career prospects for young post-graduate researchers in both the public and private sectors.

(b) Nurturing excellence by means of cross-border and cross-sector mobility

The goal is to enhance the creative and innovative potential of experienced researchers at all career levels by creating opportunities for cross-border and cross-sector mobility.Key activities shall be to encourage experienced researchers to broaden or deepen their skills by means of mobility by opening attractive career opportunities in universities, research institutions, research infrastructures, businesses, SMEs and other socio-economic groups all over Europe and beyond. This should enhance the innovativeness of the private sector and promote cross-sector mobility. Opportunities to be trained and to acquire new knowledge in a third-country high-level research institution, to restart a research career after a break and to (re-)integrate researchers into a longer-term research position in Europe, including in their country of origin, after a trans-national/international mobility experience covering return and reintegration aspects, shall also be supported.

(c) Stimulating innovation by means of cross-fertilisation of knowledge

The goal is to reinforce international cross-border and cross-sector collaboration in research and innovation by means of exchanges of research and innovation personnel in order to be able to face global challenges better.Key activities shall be to support exchanges of R&I staff among a partnership of universities, research institutions, research infrastructures, businesses, SMEs and other socio-economic groups, both within Europe and worldwide. This will include fostering cooperation with third countries.

(d) Increasing the structural impact by co-funding the activities

The goal is, by leveraging additional funds, to increase the numerical and structural impact of Marie Skłodowska-Curie actions and to foster excellence at national level in researchers' training, mobility and career development.Key activities shall be, with the aid of a co-funding mechanism, to encourage regional, national and international organisations, both public and private, to create new programmes and to adapt existing ones to international and intersectoral training, mobility and career development. This will increase the quality of research training in Europe at all career stages, including at doctoral level, foster free circulation of researchers and scientific knowledge in Europe, promote attractive research careers by offering open recruitment and attractive working conditions, and support research and innovation cooperation between universities, research institutions and enterprises and cooperation with third countries and international organisations.

(e) Specific support and policy action

The goals are to monitor progress, identify gaps and barriers in the Marie Skłodowska-Curie actions and to increase their impact. In this context, indicators shall be developed and data related to researchers' mobility, skills, careers and gender equality analysed, seeking synergies and close coordination with the policy support actions on researchers, their employers and funders carried out under the specific objective 'Europe in a changing world - Inclusive, innovative and reflective societies'. The activity shall further aim at raising awareness of the importance and attractiveness of a research career and at disseminating research and innovation results emanating from work supported by Marie Skłodowska-Curie actions.";"";"H2020";"H2020-EU.1.";"";"";"2014-09-22 20:39:21";"664109" +"H2020-EU.1.3.";"it";"H2020-EU.1.3.";"";"";"ECCELLENZA SCIENTIFICA - Azioni Marie Skłodowska-Curie";"Marie-Sklodowska-Curie Actions";"

ECCELLENZA SCIENTIFICA - Azioni Marie Skłodowska-Curie

Obiettivo specifico

L'obiettivo specifico è garantire lo sviluppo ottimale e l'uso dinamico del capitale intellettuale europeo al fine di generare, sviluppare e trasferire nuove competenze, conoscenze e innovazione e, in tal modo, realizzarne il pieno potenziale fra tutti i settori e le regioni.Ricercatori ben formati, dinamici e creativi rappresentano l'elemento essenziale della migliore scienza e dell'innovazione basata sulla ricerca più produttiva.Anche se in Europa vi è una presenza cospicua e diversificata di risorse umane competenti nell'ambito della ricerca e dell'innovazione, è necessario provvedere costantemente al suo ricambio, miglioramento e adeguamento, al fine di stare al passo con le esigenze in rapida evoluzione del mercato del lavoro. Nel 2011 solo il 46 % di queste persone lavorava nel settore commerciale, il che rappresenta una quota molto inferiore a quella dei principali concorrenti economici dell'Europa, ossia il 69 % in Cina, il 73 % in Giappone e l'80 % negli Stati Uniti. I fattori demografici indicano inoltre che un numero molto elevato di ricercatori raggiungerà l'età della pensione nei prossimi anni. Congiuntamente all'esigenza di offrire molta più occupazione di elevata qualità nella ricerca mentre l'intensità di ricerca dell'economia europea cresce, questo dato costituirà una delle principali sfide per i sistemi europei di ricerca, innovazione e istruzione negli anni a venire.La necessaria riforma deve iniziare nelle prime fasi della carriera dei ricercatori, durante i loro studi di dottorato o di analoga formazione postlaurea. L'Europa deve sviluppare regimi di formazione innovativi e d'avanguardia, coerenti con le esigenze altamente competitive e sempre più interdisciplinari della ricerca e dell'innovazione. Un significativo coinvolgimento delle imprese, comprese le PMI e altri attori socioeconomici, sarà necessario per dotare i ricercatori delle competenze innovative e imprenditoriali trasversali richieste per i lavori di domani e incoraggiarli a prendere in considerazione una carriera nell'industria o nelle imprese più innovative. Sarà inoltre importante rafforzare la mobilità di tali ricercatori, poiché questa si attesta attualmente a un livello troppo modesto: nel 2008 solo il 7 % dei candidati al dottorato europei è stato formato in un altro Stato membro, mentre l'obiettivo è di raggiungere il 20 % entro il 2030.Questa riforma deve proseguire in ogni fase della carriera dei ricercatori. È essenziale incrementare la mobilità dei ricercatori a tutti i livelli, compresa la mobilità di metà carriera, non solo fra diversi paesi ma anche fra i settori pubblico e privato. Questo genera un forte stimolo all'apprendimento e allo sviluppo di nuove competenze. Si tratta inoltre di un fattore fondamentale nella cooperazione fra le università, i centri di ricerca e l'industria di diversi paesi. Il fattore umano rappresenta la colonna portante della cooperazione sostenibile che a sua volta è il motore essenziale di un'Europa innovativa e creativa, in grado di far fronte alle sfide per la società e di superare la frammentazione delle politiche nazionali. Collaborare e scambiare conoscenze attraverso la mobilità individuale in tutte le fasi della carriera e per mezzo di scambi di personale altamente qualificato nel settore R&I sono elementi essenziali affinché l'Europa riprenda la via della crescita sostenibile, affronti le sfide per la società e in tal modo contribuisca a superare le disparità nelle capacità di ricerca e innovazione.In tale contesto, Orizzonte 2020 dovrebbe altresì incoraggiare la mobilità e lo sviluppo di carriera dei ricercatori attraverso condizioni migliorate da definirsi per la portabilità delle sovvenzioni nell'ambito di Orizzonte 2020.Le azioni Marie Skłodowska-Curie garantiranno una effettiva parità di opportunità per la mobilità dei ricercatori e delle ricercatrici, anche attraverso misure specifiche volte a rimuovere i relativi ostacoli.Se l'Europa intende stare alla pari con i suoi concorrenti nell'ambito della ricerca e dell'innovazione, deve convincere più giovani donne e uomini ad abbracciare la carriera di ricercatore e offrire opportunità e ambienti di lavoro altamente interessanti nel settore della ricerca e dell'innovazione. I ricercatori di maggiore talento, europei e di paesi terzi, dovrebbero giungere a considerare l'Europa un luogo di lavoro privilegiato. La parità di genere, un'occupazione e condizioni di lavoro affidabili e di elevata qualità, oltre al riconoscimento, rappresentano aspetti cruciali da assicurare in modo coerente in tutta Europa.

Motivazione e valore aggiunto dell'Unione

Il mero finanziamento dell'Unione o degli Stati membri da soli non sarà in grado di risolvere questa sfida. Anche se gli Stati membri hanno introdotto riforme per migliorare i loro sistemi di istruzione terziaria e ammodernare i sistemi formativi, i progressi registrati in Europa sono ancora disomogenei, con notevoli differenze fra i paesi. Nel complesso, la cooperazione scientifica e tecnologica fra i settori pubblico e privato rimane generalmente debole in Europa. Lo stesso è applicabile alla parità di genere e agli sforzi per attrarre studenti e ricercatori provenienti da paesi esterni al SER. Attualmente circa il 20 % dei candidati al dottorato nell'Unione è composto da cittadini di paesi terzi, mentre negli Stati Uniti il dato si attesta al 35 %. Per imprimere un impulso a questo cambiamento, è necessario a livello unionale un approccio strategico che superi i confini nazionali. Il finanziamento dell'Unione è essenziale per generare incentivi e incoraggiare le indispensabili riforme strutturali.Le azioni Marie Skłodowska-Curie hanno compiuto progressi notevoli nella promozione della mobilità, sia a livello transazionale sia intersettoriale, e nell'apertura di carriere di ricerca a livello europeo e internazionale, con eccellenti condizioni occupazionali e lavorative nel rispetto dei principi della Carta europea dei ricercatori e del Codice di condotta per l'assunzione di ricercatori. Negli Stati membri non esistono equivalenti per quanto riguarda la scala e la portata, il finanziamento, il carattere internazionale, la generazione e il trasferimento delle conoscenze. Queste azioni hanno rafforzato le risorse delle istituzioni capaci di attirare ricercatori a livello internazionale, incoraggiando in tal modo la diffusione dei centri di eccellenza in tutta l'Unione. Hanno svolto il ruolo di modello con un importante effetto strutturante grazie alla diffusione delle migliori pratiche a livello nazionale. L'approccio ascendente delle azioni Marie Skłodowska-Curie ha inoltre consentito a un'ampia maggioranza di queste istituzioni di formare e aggiornare le competenze di una nuova generazione di ricercatori in grado di affrontare le sfide per la società.Un ulteriore sviluppo delle azioni Marie Skłodowska-Curie conferirà un contributo significativo allo sviluppo del SER. Grazie alla loro struttura di finanziamento competitiva a livello europeo, le azioni Marie Skłodowska-Curie incoraggeranno, nel rispetto del principio di sussidiarietà, tipi di formazione nuovi, creativi e innovativi, come i dottorati comuni o multipli e i dottorati industriali, che coinvolgono gli attori della ricerca, dell'innovazione e dell'istruzione in competizione a livello globale per una reputazione di eccellenza. Le azioni promuoveranno altresì una più ampia diffusione e divulgazione, verso una formazione di dottorato più strutturata, poiché il finanziamento dell'Unione per la migliore ricerca e i migliori programmi di formazione seguono i principi applicabili alla formazione innovativa per il dottorato in Europa.Le sovvenzioni Marie Skłodowska-Curie saranno inoltre estese alla mobilità temporanea di ricercatori esperti e di ingegneri dalle istituzioni pubbliche al settore privato e viceversa, incoraggiando e sostenendo così le università, i centri di ricerca, le imprese e altri attori socioeconomici affinché cooperino a livello europeo e internazionale. Con l'aiuto del sistema di valutazione ben definito, trasparente ed equo, le azioni Marie Skłodowska-Curie identificheranno i talenti di eccellenza nella ricerca e nell'innovazione in un ambiente internazionale competitivo che conferisce prestigio e motiva quindi i ricercatori a proseguire la loro carriera in Europa.Le sfide per la società che devono essere affrontate da personale altamente qualificato nel settore R&I non sono solo un problema europeo. Si tratta di sfide internazionali di complessità e ampiezza colossali. I migliori ricercatori in Europa e nel mondo devono collaborare fra paesi, settori e discipline. A questo proposito le azioni Marie Skłodowska-Curie svolgeranno un ruolo di primo piano sostenendo gli scambi di personale in grado di stimolare il pensiero collaborativo grazie alla condivisione di conoscenze a livello internazionale e intersettoriale che riveste tanta importanza per l'innovazione aperta.Il meccanismo di cofinanziamento delle azioni Marie Skłodowska-Curie sarà essenziale per ampliare l'insieme dei talenti europei. L'impatto numerico e strutturale dell'azione dell'Unione sarà incrementato dall'effetto di leva del finanziamento regionale, nazionale e internazionale, sia pubblico che privato, al fine di creare nuovi programmi con obiettivi analoghi e complementari e di adeguare quelli esistenti alla formazione, alla mobilità e allo sviluppo di carriera internazionali e intersettoriali. Un tale meccanismo creerà legami più forti fra gli sforzi di ricerca e istruzione a livello nazionale e unionale.Tutte le attività nell'ambito di questa sfida contribuiranno a creare in Europa una visione del tutto nuova cruciale per la creatività e l'innovazione. Le misure di finanziamento Marie Skłodowska-Curie rafforzeranno la messa in comune delle risorse in Europa e miglioreranno quindi il coordinamento e la gestione della formazione, della mobilità e dello sviluppo di carriera dei ricercatori. Esse contribuiranno a conseguire gli obiettivi politici fissati dalle iniziative faro ""Unione dell'innovazione"", ""Youth on the Move"" (Gioventù in movimento) e dall' ""Agenda per nuove competenze e nuovi posti di lavoro"" e saranno essenziali per realizzare il SER. Le azioni Marie Skłodowska-Curie saranno pertanto sviluppate in stretta sinergia con altri programmi che sostengono tali obiettivi politici, compresi il programma Erasmus+ e le CCI dell'EIT.

Le grandi linee delle attività

(a) Promuovere nuove competenze grazie ad una formazione iniziale di eccellenza dei ricercatori

L'obiettivo è formare una nuova generazione di ricercatori creativi e innovativi, in grado di convertire le conoscenze e le idee in prodotti e servizi a beneficio economico e sociale dell'Unione.Le principali attività consistono nel fornire una formazione eccellente e innovativa a ricercatori a livello postlaurea in fase iniziale per mezzo di progetti interdisciplinari, compreso il tutoraggio volto al trasferimento di conoscenze ed esperienze tra ricercatori, o programmi dottorali che aiutino i ricercatori nello sviluppo della loro carriera di ricerca e coinvolgano università, istituti di ricerca, infrastrutture di ricerca, imprese, PMI e altri gruppi socioeconomici di diversi Stati membri, paesi associati e/o paesi terzi al fine di migliorare le prospettive di carriera per i giovani ricercatori postlaurea nei settori pubblico e privato.

(b) Sviluppare l'eccellenza attraverso la mobilità transfrontaliera e intersettoriale

L'obiettivo è rafforzare il potenziale innovativo e creativo dei ricercatori di esperienza a tutti i livelli di carriera creando opportunità di mobilità transfrontaliera e intersettoriale.Le principali attività consistono nell'incoraggiare i ricercatori di esperienza ad approfondire o ad ampliare le loro competenze per mezzo della mobilità, creando opportunità di carriera interessanti presso università, istituti di ricerca, infrastrutture di ricerca, imprese, PMI e altri gruppi socioeconomici in tutta Europa e oltre. Ciò dovrebbe rafforzare la capacità innovativa del settore privato e promuovere la mobilità transsettoriale. Sono inoltre sostenute le opportunità di ricevere formazione e acquisire nuove conoscenze in un istituto di ricerca di alto livello di un paese terzo, di riprendere la carriera di ricerca in seguito a un'interruzione e di (re)integrare i ricercatori in un posto di ricerca a lungo termine in Europa, anche nel loro paese di origine, dopo un'esperienza di mobilità transnazionale/internazionale coprendo gli aspetti relativi al rientro e alla reintegrazione.

(c) Promuovere l'innovazione attraverso l'arricchimento reciproco delle conoscenze

L'obiettivo è rafforzare la collaborazione internazionale transfrontaliera e intersettoriale nella ricerca e nell'innovazione per mezzo di scambi di personale della ricerca e dell'innovazione, al fine di affrontare meglio le sfide globali.Le attività principali sostengono gli scambi di personale nel settore R&I per mezzo di un partenariato fra università, istituti di ricerca, infrastrutture di ricerca, imprese, PMI e altri gruppi socioeconomici in Europa e nel mondo. Ciò comprenderà lo stimolo alla cooperazione con i paesi terzi.

(d) Incrementare l'impatto strutturale mediante il cofinanziamento delle attività

L'obiettivo consiste nell'incrementare, attraverso l'effetto di leva dei fondi supplementari, l'impatto numerico e strutturale delle azioni Marie Skłodowska-Curie e promuovere l'eccellenza a livello nazionale per quanto riguarda la formazione, la mobilità e lo sviluppo di carriera dei ricercatori.Con l'ausilio del meccanismo di cofinanziamento le principali attività mirano a incoraggiare le organizzazioni regionali, nazionali e internazionali, sia pubbliche sia private, a creare nuovi programmi e ad adeguare quelli esistenti alla formazione, alla mobilità e allo sviluppo di carriera internazionali e intersettoriali. Ciò incrementerà la qualità della formazione di ricerca in Europa a tutti i livelli di carriera, compreso il livello dottorale, incoraggerà la libera circolazione dei ricercatori e delle conoscenze scientifiche in Europa, promuoverà carriere di ricerca interessanti grazie a condizioni di assunzione aperte e di lavoro attraenti e sosterrà la cooperazione di ricerca e innovazione fra le università, gli istituti di ricerca e le imprese nonché la cooperazione con i paesi terzi e le organizzazioni internazionali.

(e) Sostegno specifico e azione strategica

Gli obiettivi consistono nel monitorare i progressi, nell'identificare le lacune e gli ostacoli nelle azioni Marie Skłodowska-Curie e nell'incrementarne l'impatto. In questo contesto si sviluppano gli indicatori e si analizzano i dati relativi alla mobilità, alle competenze, alle carriere e alla parità di genere dei ricercatori, alla ricerca di sinergie e di uno stretto coordinamento con le azioni di sostegno strategico dei ricercatori, dei loro datori di lavoro e dei finanziatori, portate avanti nell'ambito dell'obiettivo specifico ""L'Europa in un mondo che cambia - Società inclusive, innovative e riflessive"". L'attività mira inoltre a sensibilizzare in merito all'importanza e all'attrattività di una carriera di ricerca e a diffondere i risultati di ricerca e innovazione generati dalle attività sostenute dalle azioni Marie Skłodowska-Curie.";"";"H2020";"H2020-EU.1.";"";"";"2014-09-22 20:39:21";"664109" +"H2020-EU.1.3.";"de";"H2020-EU.1.3.";"";"";"WISSENSCHAFTSEXZELLENZ- Marie Skłodowska-Curie Maßnahmen";"Marie-Sklodowska-Curie Actions";"

WISSENSCHAFTSEXZELLENZ- Marie Skłodowska-Curie Maßnahmen

Einzelziel

Ziel ist es, dafür zu sorgen, dass Europas intellektuelles Kapital optimal entwickelt und dynamisch eingesetzt wird, damit es neue Fähigkeiten, Kenntnisse und Innovationen hervorbringt, entwickelt und weitergibt und so sein Potenzial branchen- und regionenübergreifend voll entfaltet.Gut ausgebildete, dynamische und kreative Forscher sind eine unentbehrliche Komponente für Spitzenleistungen in der Wissenschaft und für ein Höchstmaß an Produktivität bei der forschungsgestützten Innovation.Auch wenn Europa über viele Fachkräfte unterschiedlichster Ausrichtung in Forschung und Innovation verfügt, gilt es, dieses Reservoir ständig wieder aufzufüllen, zu verbessern und an den schnell wechselnden Bedarf des Arbeitsmarkts anzupassen. Im Jahr 2001 waren nur 46 % dieser Fachkräfte in Unternehmen tätig, ein deutlich niedrigerer Anteil als bei Europas größten Wirtschaftskonkurrenten, beispielsweise China (69 %), Japan (73 %) und den Vereinigten Staaten (80 %). Außerdem führt der demografische Faktor dazu, dass eine unverhältnismäßig hohe Zahl von Forschern in den nächsten Jahren das Rentenalter erreichen wird. Diese Tatsache und der mit der zunehmenden Forschungsintensität der europäischen Wirtschaft wachsende Bedarf an einer deutlich höheren Zahl von hochqualifizierten Arbeitsplätzen in der Forschung stellt in den nächsten Jahren eine der größten Herausforderungen für Forschung, Innovation und Bildung in Europa dar.Notwendig ist eine Reform, die in den ersten Phasen der Laufbahn eines Forschers während der Promotion oder einer vergleichbaren Weiterbildung nach dem Hochschulabschluss ansetzt. Europa muss moderne, innovative Ausbildungssysteme entwickeln, die mit dem starken Wettbewerb und den zunehmend interdisziplinären Anforderungen in Forschung und Innovation Schritt halten können. Um Forscher mit den auf dem Arbeitsmarkt von morgen verlangten bereichsübergreifenden innovativen und unternehmerischen Fähigkeiten auszustatten und sie zum Nachdenken über eine Laufbahn in der Wirtschaft oder in den innovativsten Unternehmen anzuregen, bedarf es eines beträchtlichen Engagements der Unternehmen, auch der KMU, sowie anderer sozioökonomischer Akteure. Zudem muss die Mobilität dieser Forscher erhöht werden, die derzeit auf einem zu niedrigen Niveau verharrt: Statt der bis 2030 angestrebten 20 % wurden 2008 nur 7 % der europäischen Doktoranden in einem anderen Mitgliedstaat ausgebildet.Die Reform muss in allen Phasen der Forscherlaufbahn fortgesetzt werden. Entscheidend ist, die Mobilität der Forscher auf allen Ebenen, auch in der Mitte ihrer Laufbahn, zu erhöhen und zwar nicht nur zwischen Ländern, sondern auch zwischen dem öffentlichen und dem privaten Sektor. Die Mobilität ist ein starker Anreiz für das Lernen und die Entwicklung neuer Fähigkeiten. Sie ist auch ein Schlüsselfaktor für die länderübergreifende Zusammenarbeit zwischen Hochschulen, Forschungszentren und Unternehmen. Der Faktor Mensch ist das Rückgrat einer tragfähigen Zusammenarbeit, ein wichtiger Antrieb für ein innovatives und kreatives Europa, das in der Lage ist, sich den gesellschaftlichen Herausforderungen zu stellen, und eine wesentliche Voraussetzung zur Überwindung der Fragmentierung durch einzelstaatliche Strategien. Die Zusammenarbeit und die Weitergabe von Wissen durch die Mobilität des Einzelnen in jeder Phase seiner Laufbahn und durch den Austauschs von hochqualifiziertem FuI-Personal sind wesentliche Voraussetzungen, damit Europa wieder zurück auf einen tragfähigen Wachstumspfad kommt und die gesellschaftlichen Herausforderungen bewältigen kann, wodurch ein Beitrag zur Überwindung der Ungleichheiten bei den Forschungs- und Innovationskapazitäten geleistet wird.In diesem Zusammenhang sollte Horizont 2020 auch die Laufbahnentwicklung und Mobilität von Forschern dadurch fördern, dass bessere Bedingungen für die Übertragbarkeit der Finanzhilfen im Rahmen von Horizont 2020 festgelegt werden.Die Marie-Skłodowska-Curie-Maßnahmen werden eine effektive Chancengleichheit für die Mobilität von Forschern und Forscherinnen u. a. durch spezifische Maßnahmen zur Beseitigung von Hemmnissen gewährleisten.Will Europa wieder zu seinen Wettbewerbern in Forschung und Innovation aufschließen, muss es mehr jungen Frauen und Männern Anreize bieten, eine Forscherlaufbahn einzuschlagen und höchst attraktive Möglichkeiten und Umfelder für Forschung und Innovation bieten. Für die größten Talente – nicht nur aus Europa – sollte Europa ein Arbeitsplatz erster Wahl sein. Geschlechtergleichbehandlung, hohe Qualität und zuverlässige Beschäftigungs- und Arbeitsbedingungen sowie Anerkennung sind entscheidende Faktoren, die in ganz Europa gleichermaßen gewährleistet sein müssen.

Begründung und Mehrwert für die Union

Weder die Unionsförderung allein noch die einzelnen Mitgliedstaaten werden in der Lage sein, diese Herausforderung zu bewältigen. Auch wenn Mitgliedstaaten Reformen zur Verbesserung der Ausbildung an Hochschulen und zur Modernisierung ihrer Bildungssysteme durchgeführt haben, gibt es europaweit zwischen den einzelnen Ländern große Unterschiede bei den Fortschritten. Insgesamt ist die wissenschaftliche und technologische Zusammenarbeit zwischen öffentlichem und privatem Sektor in Europa im Allgemeinen nach wie vor schwach. Das Gleiche gilt für die Gleichstellung und die Bemühungen, Studierende und Forscher aus Ländern außerhalb des Europäischen Forschungsraums zu gewinnen. Derzeit stammen etwa 20 % der Doktoranden in der Union aus Drittländern, verglichen mit etwa 35 % in den Vereinigten Staaten. Um hier rasch eine Veränderung herbeizuführen, bedarf es eines strategischen Konzepts auf Unionsebene, das über nationale Grenzen hinausreicht. Die Unionsförderung gibt entscheidende Anstöße für die unerlässlichen strukturellen Reformen.Mit den Marie-Skłodowska-Curie-Maßnahmen wurden beachtliche Fortschritte bei der transnationalen und intersektoralen Mobilität sowie bei der Öffnung von Forscherlaufbahnen auf europäischer und internationaler Ebene erzielt – mit hervorragenden Beschäftigungs- und Arbeitsbedingungen entsprechend den Grundsätzen der Europäischen Charta für Forscher und des Verhaltenskodex für die Einstellung von Forschern. Die Mitgliedstaaten verfügen im Hinblick auf Maßstab, Umfang, Förderung, internationalen Charakter sowie Generierung und Weitergabe von Wissen über nichts Vergleichbares. Die Marie-Skłodowska-Curie-Maßnahmen haben die Ressourcen der international für Wissenschaftler attraktiven Einrichtungen gestärkt und so die Verbreitung von Exzellenzzentren in der gesamten Union gefördert. Durch Verbreitung ihrer bewährten Verfahren auf nationaler Ebene sind sie beispielgebend und haben einen deutlich strukturierenden Effekt. Mit Hilfe ihres ""Bottom-up""-Konzepts ermöglichten es die Marie-Skłodowska-Curie-Maßnahmen der überwiegenden Mehrheit dieser Einrichtungen, eine neue Generation von Forschern aus- und weiterzubilden, die damit in der Lage ist, die gesellschaftlichen Herausforderungen anzugehen.Die Weiterentwicklung der Marie-Skłodowska-Curie-Maßnahmen wird einen deutlichen Beitrag zum Ausbau des Europäischen Forschungsraums leisten. Mit ihrer europaweiten, auf Wettbewerb basierenden Förderstruktur werden die Marie-Skłodowska-Curie-Maßnahmen unter Achtung des Subsidiaritätsprinzips Anregungen für neue, kreative und innovative Ausbildungswege – wie beispielsweise kombinierte oder mehrfache Doktorate und Doktorate in der Industrie – geben, in die Akteure des Forschungs-, Innovations- und Bildungsbereichs einbezogen sind, die weltweit im Wettbewerb um eine Reputation der Exzellenz stehen. Durch die Bereitstellung von Fördermitteln der Union für die besten Forschungs- und Ausbildungsprogramme, die sich an den Grundsätzen für die innovative Doktorandenausbildung in Europa orientieren, wird auch eine größere Verbreitung und Realisierung einer besser strukturierten Doktorandenausbildung unterstützt.Marie-Skłodowska-Curie-Stipendien werden auch auf erfahrene Forscher und Ingenieure ausgeweitet, die vorübergehend von öffentlichen Einrichtungen in den Privatsektor und umgekehrt wechseln, wodurch Hochschulen, Forschungszentren und Unternehmen sowie andere sozioökonomische Akteure in ihren Bemühungen unterstützt werden, europaweit und international zusammenzuarbeiten. Durch ihr bewährtes, transparentes und faires Bewertungssystem lassen sich mit den Marie-Skłodowska-Curie-Maßnahmen hervorragende Talente in Forschung und Innovation im Rahmen eines internationalen Wettbewerbs ermitteln, was Prestige verleiht und damit Forscher motiviert, ihre Laufbahn in Europa fortzusetzen.Die gesellschaftlichen Herausforderungen, mit denen sich hochqualifizierte Wissenschaftler aus FuI befassen sollen, sind nicht auf Europa begrenzt. Es geht um enorm vielschichtige und gigantische Herausforderungen, die sich international stellen. Die europa- und weltweit besten Forscher müssen länder-, sektor- und disziplinenübergreifend zusammenarbeiten. Hierbei werden die Marie-Skłodowska-Curie-Maßnahmen eine entscheidende Rolle spielen, indem sie den Austausch von Personal und damit kooperatives Denken unterstützen, denn gerade die internationale und intersektorale Weitergabe von Wissen ist für eine offene Innovation unerlässlich.Die Kofinanzierungsmechanismen der Marie-Skłodowska-Curie-Maßnahmen sind eine wesentliche Voraussetzung, damit Europa seinen Pool von Talenten vergrößern kann. Die an Zahlen und Strukturen ablesbaren Auswirkungen der Unionsmaßnahmen werden noch durch die Mobilisierung regionaler, nationaler und internationaler – sowohl öffentlicher als auch privater – Fördermittel verstärkt, mit der neue Programme mit ähnlichen und komplementären Zielen geschaffen und bestehende Programme an eine internationale und intersektorale Ausbildung, Mobilität und Laufbahnentwicklung angepasst werden. Ein derartiger Mechanismus wird die Forschungs- und Bildungsanstrengungen auf nationaler Ebene besser mit denen auf Unionsebene verzahnen.Alle in diesem Bereich durchgeführten Tätigkeiten werden dazu beitragen, ein gänzlich neues Denken in Europa zu etablieren, das eine entscheidende Voraussetzung für Kreativität und Innovation ist. Die Marie-Skłodowska-Curie-Förderung wird die Bündelung von Ressourcen in Europa stärken und damit eine bessere Koordinierung und Governance bei Ausbildung, Mobilität und Laufbahnentwicklung von Forschern herbeiführen. Die Tätigkeiten werden nicht nur zur Erreichung der Ziele, die in den Leitinitiativen ""Innovationsunion"", ""Jugend in Bewegung"" und ""Agenda für neue Kompetenzen und neue Beschäftigungsmöglichkeiten"" dargelegt wurden, sondern auch entscheidend zur Verwirklichung des Europäischen Forschungsraums beitragen. Die Marie-Skłodowska-Curie-Maßnahmen werden daher in enger Synergie mit anderen Programmen entwickelt, die diese strategischen Ziele unterstützen, einschließlich des Erasmus+-Programms und der KIC des EIT.

Einzelziele und Tätigkeiten in Grundzügen

(a) Förderung neuer Fähigkeiten durch eine exzellente Erstausbildung von Forschern

Ziel ist die Ausbildung einer neuen Generation von kreativen und innovativen Forschern, die in der Lage sind, Wissen und Ideen in Produkte und Dienstleistungen zu verwandeln, die für die Wirtschaft und die Gesellschaft in der Union von Nutzen sind.Hierzu kommt es ganz entscheidend darauf an, Nachwuchsforschern nach Abschluss ihrer Hochschulausbildung exzellente und innovative Ausbildungsmöglichkeiten im Rahmen interdisziplinärer Projekte, einschließlich Mentoring-Programme für den Wissens- und Erfahrungstransfer zwischen Forschern oder Promotionsprogramme, die die Laufbahnentwicklung für Forscher erleichtern, zu bieten, in die Hochschulen, Forschungseinrichtungen, Forschungsinfrastrukturen, Unternehmen, darunter auch KMU und andere sozioökonomische Gruppen aus unterschiedlichen Mitgliedstaaten, assoziierten Ländern und/oder Drittländern eingebunden sind. Dies verbessert die Laufbahnperspektiven für graduierte Nachwuchsforscher im öffentlichen und privaten Sektor.

(b) Förderung von Exzellenz durch grenz- und sektorübergreifende Mobilität

Ziel ist die Steigerung des kreativen und innovativen Potenzials erfahrener Forscher zu jedem Zeitpunkt ihrer Laufbahn durch grenz- und sektorübergreifende Mobilitätsmöglichkeiten.Hierzu kommt es vor allem darauf an, erfahrene Forscher zu ermuntern, ihre Fähigkeiten durch Mobilität zu erweitern und zu vertiefen, und zu diesem Zweck attraktive Laufbahnmöglichkeiten in Hochschulen, Forschungseinrichtungen und Forschungsinfrastrukturen, Unternehmen, auch in KMU, sowie anderen sozioökonomischen Gruppen in Europa und darüber hinaus zu eröffnen. Dies dürfte die Innovationsfähigkeit des privaten Sektors steigern und die sektorübergreifende Mobilität fördern. Unterstützt werden auch Möglichkeiten, eine Ausbildung in einer hochkarätigen Forschungseinrichtung eines Drittlands zu absolvieren und dort Wissen zu erwerben, die Forscherlaufbahn nach einer Unterbrechung wieder fortzusetzen und die Forscher nach einer transnationalen bzw. internationalen Mobilitätsmaßnahme, die Aspekte der Rückkehr und der Wiedereingliederung umfasst, in eine längerfristige Forscherstelle in Europa – einschließlich ihres Herkunftslands – zu (re-)integrieren.

(c) Innovationsanreize durch die gegenseitige Bereicherung mit Wissen

Ziel ist die Stärkung der internationalen grenz- und sektorübergreifenden Zusammenarbeit in Forschung und Innovation durch den Austausch von Forschungs- und Innovationspotenzial, um die globalen Herausforderungen besser bewältigen zu können.Hierzu kommt es auf den Austausch von FuI-Personal im Rahmen einer Partnerschaft zwischen Hochschulen, Forschungseinrichtungen und -infrastrukturen, Unternehmen, KMU und anderen sozioökonomischen Gruppen innerhalb Europas und darüber hinaus an. Hierunter fällt auch die Förderung der Zusammenarbeit mit Drittländern.

(d)Steigerung der strukturellen Wirkung durch die Kofinanzierung von Tätigkeiten

Ziel ist es, zusätzliche Fördermittel zu mobilisieren und damit die an Zahlen und Strukturen ablesbaren Auswirkungen der Marie-Skłodowska-Curie-Maßnahmen noch zu steigern und die Exzellenz in der Ausbildung, Mobilität und Laufbahnentwicklung der Forscher auf nationaler Ebene zu unterstützen.Hierzu kommt es darauf an, mit Hilfe von Kofinanzierungsmechanismen regionale, nationale und internationale – sowohl öffentliche als auch private – Organisationen darin zu bestärken, neue Programme zu entwickeln und bestehende Programme an die internationale und intersektorale Ausbildung, Mobilität und Laufbahnentwicklung anzupassen. Dies erhöht die Qualität der Forscherausbildung in Europa in jeder Phase ihrer Laufbahn, auch während der Promotion, fördert die Mobilität von Forschern und wissenschaftlichen Erkenntnissen in Europa, unterstützt attraktive Forscherlaufbahnen durch eine offene Personaleinstellung und attraktive Arbeitsbedingungen, erleichtert die Forschungs- und Innovationszusammenarbeit zwischen Hochschulen, Forschungseinrichtungen und Unternehmen sowie die Zusammenarbeit mit Drittländern und internationalen Organisationen.

(e)Besondere Unterstützung und politische Maßnahmen

Ziel ist die Überwachung der Fortschritte, die Ermittlung von Lücken und Hindernissen bei den Marie-Skłodowska-Curie-Maßnahmen und die Stärkung ihrer Auswirkungen. In diesem Zusammenhang sind Indikatoren zu entwickeln und Daten zu Mobilität, Fähigkeiten, Laufbahn und Geschlechtergleichstellung der Forscher im Hinblick auf Synergien und eine enge Abstimmung mit den Unterstützungsmaßnahmen zu analysieren, die im Rahmen des Einzelziels ""Europa in einer sich verändernden Welt - Integrative, innovative und reflektierende Gesellschaften"" für Forscher, ihre Arbeitgeber und Geldgeber durchgeführt werden. Die Tätigkeit zielt ferner darauf ab, das Bewusstsein für die Bedeutung und Attraktivität einer wissenschaftlichen Laufbahn zu erhöhen und die Forschungs- und Innovationsergebnisse der Arbeiten zu verbreiten, die aus den Marie-Skłodowska-Curie-Maßnahmen hervorgehen.";"";"H2020";"H2020-EU.1.";"";"";"2014-09-22 20:39:21";"664109" +"H2020-EU.1.3.";"fr";"H2020-EU.1.3.";"";"";"EXCELLENCE SCIENTIFIQUE - Actions Marie Skłodowska-Curie";"Marie-Sklodowska-Curie Actions";"

EXCELLENCE SCIENTIFIQUE - Actions Marie Skłodowska-Curie

Objectif spécifique

L'objectif spécifique consiste à garantir un développement optimal et une exploitation dynamique du capital intellectuel de l'Europe, afin de produire, de développer et de transférer de nouvelles compétences et connaissances et de l'innovation et, ainsi, de permettre à l'Europe de développer tout son potentiel dans tous les secteurs et dans toutes les régions.Des chercheurs bien formés, dynamiques et créatifs sont l'élément essentiel qui permet à la science d'atteindre ses sommets et à l'innovation axée sur la recherche d'atteindre sa productivité maximale.Si l'Europe abrite une grande variété de ressources humaines qualifiées dans le domaine de la recherche et de l'innovation, ce réservoir de talents doit être en permanence réalimenté, amélioré et adapté aux besoins du marché de l'emploi, qui évoluent rapidement. En 2011, seuls 46 % de ces ressources travaillaient en entreprise, ce qui est nettement inférieur aux taux enregistrés dans les principales économies concurrentes de l'Europe. Ce taux est ainsi de 69 % en Chine, de 73 % au Japon et de 80 % aux États-Unis. En outre, en raison de facteurs démographiques, un nombre disproportionné de chercheurs atteindra l'âge de la retraite dans les quelques années à venir. Combinée à une augmentation considérable des besoins en postes de recherche hautement qualifiés, l'économie de l'Union reposant de plus en plus sur la recherche, cette situation constituera, pour les systèmes européens de recherche, d'innovation et d'enseignement, l'un des principaux défis à relever dans les années à venir.La réforme nécessaire doit débuter aux premiers stades de la carrière des chercheurs, lors de leurs études doctorales ou de toute formation postuniversitaire comparable. L'Europe doit mettre au point des régimes de formation innovants et ultraperformants, capables de faire face à l'extrême compétitivité et à l'exigence croissante d'interdisciplinarité des activités de recherche et d'innovation. Une implication notable des entreprises, dont les PME et d'autres acteurs socioéconomiques, sera indispensable pour doter les chercheurs des compétences transversales en matière d'innovation et d'entrepreneuriat qu'exigeront les emplois de demain et pour les encourager à envisager une carrière dans l'industrie ou dans les entreprises les plus innovantes. Il conviendra également d'accroître la mobilité de ces chercheurs, qui reste aujourd'hui à un niveau trop modeste: en 2008, seuls 7 % des doctorants européens suivaient une formation dans un autre État membre, l'objectif étant d'atteindre un taux de 20 % d'ici 2030.Cette réforme doit se poursuivre à tous les stades de la carrière des chercheurs. Il est indispensable d'accroître la mobilité des chercheurs à tous les niveaux, y compris en milieu de carrière, non seulement d'un pays à l'autre, mais aussi entre le secteur public et le secteur privé. Cette mobilité est un encouragement majeur à l'apprentissage et à l'acquisition de nouvelles compétences, ainsi qu'un élément essentiel de la coopération transfrontière entre le milieu universitaire, les centres de recherche et les entreprises. Le facteur humain est le ferment de toute coopération durable, laquelle est à la fois essentielle à l'avènement d'une Europe innovante et créative, capable de relever les défis de société, et fondamentale pour surmonter la fragmentation des politiques nationales. La collaboration et le partage de connaissances, par le biais d'une mobilité individuelle à toutes les étapes de la vie professionnelle et par le biais d'échanges de personnel hautement qualifié dans les domaines de la recherche et de l'innovation, sont indispensables à l'Europe pour retrouver une croissance durable, pour relever les défis de société et contribuer ainsi à réduire les disparités dans les capacités de recherche et d'innovation.Dans ce contexte, Horizon 2020 devrait aussi encourager l'évolution des carrières et la mobilité des chercheurs grâce à de meilleures conditions, qu'il conviendra de définir, pour la portabilité des subventions accordées dans le cadre d'Horizon 2020.Les actions Marie Skłodowska-Curie garantiront une véritable égalité des chances dans le cadre de la mobilité des chercheurs, hommes et femmes, notamment grâce à des mesures visant spécifiquement à supprimer les obstacles.Pour être à la hauteur de ses concurrents en matière de recherche et d'innovation, l'Europe doit inciter davantage de jeunes gens à embrasser une carrière dans le domaine de la recherche et offrir à la recherche et à l'innovation un environnement et des opportunités extrêmement attractifs. Les personnes les plus talentueuses, d'Europe et d'ailleurs, devraient voir en l'Europe une destination professionnelle de premier plan. L'égalité entre les hommes et les femmes, des conditions d'emploi et de travail sûres et de qualité ainsi qu'une certaine reconnaissance sont des conditions essentielles qu'il convient d'assurer de manière cohérente dans toute l'Europe.

Justification et valeur ajoutée de l'Union

Ni un financement par la seule Union, ni les actions individuelles des États membres ne permettront de relever ce défi. Si certains États membres ont engagé des réformes afin d'améliorer la qualité de leurs établissements d'enseignement supérieur et de moderniser leurs systèmes de formation, les progrès restent inégaux au sein de l'Union, des différences considérables subsistant d'un pays à l'autre. Dans l'ensemble, la coopération scientifique et technologique entre le secteur public et le secteur privé reste généralement faible en Europe. Le même constat peut être dressé pour ce qui est de l'égalité entre les hommes et les femmes et des initiatives visant à attirer des étudiants et des chercheurs extérieurs à l'EER. Aujourd'hui, quelque 20 % des doctorants au sein de l'Union sont des ressortissants de pays tiers, alors qu'aux États-Unis, environ 35 % des doctorants viennent de l'étranger. Pour faire évoluer la situation plus rapidement, il convient d'adopter, à l'échelle de l'Union, une approche stratégique qui transcende les frontières nationales. Un financement par l'Union est par ailleurs indispensable pour promouvoir et encourager les réformes structurelles qui s'imposent.Les actions Marie Skłodowska-Curie ont contribué de manière remarquable à promouvoir la mobilité, aussi bien transnationale qu'intersectorielle, et à ouvrir les carrières du secteur de la recherche à l'échelle européenne et internationale, en ménageant d'excellentes conditions d'emploi et de travail conformément aux principes de la charte européenne du chercheur et au code de conduite pour le recrutement des chercheurs. Elles n'ont pas d'équivalent dans les États membres pour ce qui est de leur ampleur et de leur portée, de leur financement, de leur caractère international ainsi que de la production et du transfert de connaissances qu'elles impliquent. Elles ont consolidé les ressources des institutions capables d'attirer des chercheurs sur la scène internationale et ont dès lors favorisé l'expansion des centres d'excellence au sein de l'Union. Elles ont servi de référence et ont eu un net effet structurant en diffusant leurs meilleures pratiques au niveau national. En suivant une approche ascendante, elles ont également permis à une grande majorité des institutions précitées d'assurer la formation et de renforcer les compétences d'une nouvelle génération de chercheurs capables de relever les défis de société.Un renforcement des actions Marie Skłodowska-Curie contribuera de manière significative au développement de l'EER. De par leur structure concurrentielle de financement à l'échelle européenne, les actions Marie Skłodowska-Curie encourageront, dans le respect du principe de subsidiarité, les types de formation inédits, créatifs et novateurs, tels que les diplômes de doctorat communs ou multiples et les doctorats industriels, impliquant divers acteurs des secteurs de la recherche, de l'innovation et de l'enseignement, qui devront entrer en concurrence à l'échelle mondiale pour acquérir une réputation d'excellence. En accordant un financement de l'Union aux meilleurs programmes de recherche et de formation respectant les principes sur la formation doctorale innovante en Europe, elles favoriseront également la diffusion et l'adoption à plus grande échelle de ces principes et, partant, une plus forte structuration de la formation doctorale.Les bourses Marie Skłodowska-Curie couvriront désormais également la mobilité temporaire des chercheurs et ingénieurs expérimentés des institutions publiques vers le secteur privé, et inversement. Ce faisant, elles encourageront les universités, les centres de recherche et les entreprises ainsi que les autres acteurs socioéconomiques à coopérer les uns avec les autres à l'échelon européen et international et soutiendront leurs initiatives en ce sens. Grâce à leur système d'évaluation transparent, équitable et bien établi, les actions Marie Skłodowska-Curie permettront de repérer les talents d'excellence dans le domaine de la recherche et de l'innovation, dans un contexte de concurrence internationale qui, par le prestige qu'elle permet d'acquérir, incite les chercheurs à faire carrière en Europe.Les défis de société à relever par le personnel hautement qualifié des secteurs de la recherche et de l'innovation ne sont pas des problèmes exclusivement européens. Il s'agit d'enjeux internationaux d'une extrême complexité et d'une ampleur colossale. Les meilleurs chercheurs d'Europe et du monde doivent développer des collaborations internationales, transsectorielles et interdisciplinaires. Les actions Marie Skłodowska-Curie joueront à cet égard un rôle fondamental en soutenant les échanges de personnel, qui encourageront la réflexion collaborative à travers le partage international et intersectoriel des connaissances, lequel est absolument indispensable à l'ouverture des activités d'innovation.Le mécanisme de cofinancement des actions Marie Skłodowska-Curie sera fondamental pour élargir le réservoir de talents de l'Europe. L'impact quantitatif et structurel d'une action de l'Union sera renforcé par la mobilisation de fonds régionaux, nationaux et internationaux, tant publics que privés, en vue de créer de nouveaux programmes ayant des objectifs similaires et complémentaires et d'adapter les programmes existants à la formation, la mobilité et l'évolution de la carrière internationales et intersectorielles. Un tel mécanisme renforcera les liens entre les initiatives nationales et les initiatives européennes en faveur de la recherche et de l'éducation.Toutes les activités relevant de ce défi contribueront à instaurer en Europe un état d'esprit nouveau, qui est indispensable à la créativité et à l'innovation. Les mesures de financement des actions Marie Skłodowska-Curie renforceront la mise en commun des ressources en Europe et entraîneront, de ce fait, des améliorations sur le plan de la coordination et de la gouvernance pour ce qui concerne la formation, la mobilité et l'évolution de la carrière des chercheurs. Elles contribueront à la réalisation des objectifs stratégiques définis dans les initiatives phares «Une Union de l'innovation», «Jeunesse en mouvement» et «Une stratégie pour des compétences nouvelles et des emplois» et seront essentielles pour faire de l'EER une réalité. Les actions Marie Skłodowska-Curie seront par conséquent mises au point en étroite synergie avec d'autres programmes de soutien à ces objectifs stratégiques, y compris le programme Erasmus+ et les CCI de l'EIT.

Grandes lignes des activités

(a) Promouvoir de nouvelles compétences par une formation initiale d'excellence des chercheurs

L'objectif est de former une nouvelle génération de chercheurs créatifs et innovants, capables de convertir la connaissance et les idées en produits et services porteurs d'avancées économiques et sociales au sein de l'Union.Les principales activités sont axées sur l'octroi d'une formation postuniversitaire innovante et d'excellence aux jeunes chercheurs, au moyen de projets interdisciplinaires, y compris des programmes de parrainage visant au transfert de connaissances ou d'expériences entre chercheurs ou des programmes de doctorat, aidant les chercheurs à faire évoluer leur carrière dans la recherche et associant des universités, des institutions de recherche, des infrastructures de recherche, des entreprises, des PME et d'autres groupements socioéconomiques issus de différents États membres, pays associés et/ou pays tiers. Les perspectives de carrière des jeunes chercheurs au terme de leurs études universitaires s'en trouveront améliorées, aussi bien dans le secteur public que dans le secteur privé.

(b) Cultiver l'excellence par la mobilité transfrontalière et intersectorielle

L'objectif est de renforcer le potentiel de création et d'innovation des chercheurs expérimentés à tous les niveaux de carrière en leur offrant des possibilités de mobilité transfrontalière et intersectorielle.Les principales activités consistent à encourager les chercheurs expérimentés à élargir ou à approfondir leurs compétences par la mobilité, en leur offrant des possibilités de carrière attractives dans les universités, les institutions de recherche, les infrastructures de recherche, les entreprises, les PME et d'autres groupements socioéconomiques dans toute l'Europe et d'ailleurs. Cela devrait améliorer la capacité d'innovation du secteur privé et favoriser la mobilité transsectorielle. Un soutien sera également apporté aux possibilités d'acquérir une formation et de nouvelles connaissances dans un établissement de recherche de haut niveau dans un pays tiers, de reprendre une carrière dans la recherche après une interruption et d'intégrer ou de réintégrer des chercheurs dans un poste de recherche à long terme en Europe, y compris dans leur pays d'origine, après une expérience de mobilité transnationale ou internationale, les aspects relatifs au retour et à la réintégration étant couverts.

(c) Encourager l'innovation par la fertilisation croisée des connaissances

L'objectif est de renforcer la collaboration internationale transfrontalière et intersectorielle en matière de recherche et d'innovation grâce à des échanges de personnel actif dans ces domaines, afin de pouvoir mieux relever les défis mondiaux.Les principales activités consistent à soutenir les échanges de personnel actif dans la recherche et l'innovation dans le cadre d'un partenariat regroupant universités, institutions de recherche, infrastructures de recherche, entreprises, PME et autres groupements socioéconomiques, au niveau tant européen que mondial. Il s'agira également, dans ce cadre, de promouvoir la coopération avec les pays tiers.

(d) Renforcer l'impact structurel par le cofinancement des activités

L'objectif est de renforcer, en mobilisant des fonds supplémentaires, l'impact quantitatif et structurel des actions Marie Skłodowska-Curie et de promouvoir l'excellence au niveau national sur le plan de la formation, de la mobilité et de l'évolution de la carrière des chercheurs.Les principales activités consistent à inciter, par un mécanisme de cofinancement, les organismes régionaux, nationaux et internationaux, tant publics que privés, à créer de nouveaux programmes et à adapter les programmes existants à la formation, la mobilité et l'évolution de la carrière internationales et intersectorielles. De telles démarches amélioreront la qualité de la formation à la recherche en Europe à toutes les étapes de la vie professionnelle, doctorat inclus; elles encourageront la libre circulation des chercheurs et des connaissances scientifiques en Europe, augmenteront l'attractivité des carrières dans la recherche par des procédures de recrutement ouvertes et par des conditions de travail attractives, favoriseront la coopération entre les universités, les institutions de recherche et les entreprises dans le domaine de la recherche et de l'innovation, et soutiendront la coopération avec les pays tiers et les organisations internationales.

(e) Soutien spécifique et actions stratégiques

L'objectif est d'assurer le suivi des progrès réalisés, de recenser les lacunes et les obstacles au niveau des actions Marie Skłodowska-Curie et d'accroître l'impact de ces actions. Il convient dans ce cadre de mettre au point des indicateurs et d'analyser les données concernant la mobilité, les compétences et la carrière des chercheurs ainsi que l'égalité entre chercheurs hommes et femmes, en recherchant des synergies et des coordinations approfondies avec les actions de soutien stratégique ciblant les chercheurs, leurs employeurs et leurs bailleurs de fonds réalisées au titre de l'objectif spécifique «L'Europe dans un monde en évolution - Des sociétés ouvertes à tous, innovantes et capables de réflexion». Cette activité vise également à faire comprendre l'importance et l'attractivité d'une carrière dans la recherche ainsi qu'à diffuser les résultats de la recherche et de l'innovation obtenus grâce aux travaux financés par des actions Marie Skłodowska-Curie.";"";"H2020";"H2020-EU.1.";"";"";"2014-09-22 20:39:21";"664109" +"H2020-EU.1.3.";"es";"H2020-EU.1.3.";"";"";"CIENCIA EXCELENTE - Acciones Marie Skłodowska-Curie";"Marie-Sklodowska-Curie Actions";"

CIENCIA EXCELENTE - Acciones Marie Skłodowska-Curie

Objetivo específico

El objetivo específico es garantizar el desarrollo óptimo y el uso dinámico del capital intelectual de Europa, con el fin de generar, desarrollar y transferir nuevas capacidades, conocimiento e innovación y, de este modo, realizar plenamente su potencial en todos los sectores y regiones.Unos investigadores bien formados, motivados, dinámicos y creativos constituyen el elemento esencial para la mejor ciencia y para la innovación basada en la investigación más productiva.Aunque Europa alberga un conjunto grande y diversificado de recursos humanos capacitados en investigación e innovación, tiene que renovarlo, mejorarlo y adaptarlo constantemente a las necesidades del mercado laboral, que cambian rápidamente. En 2011 solo el 46 % de este conjunto trabajaba en el sector empresarial, cifra muy inferior a la de los principales competidores económicos de Europa, por ejemplo, un 69 % en China, un 73 % en Japón y un 80 % en los Estados Unidos. Además, los factores demográficos hacen que un número desproporcionado de investigadores vaya a alcanzar la edad de jubilación en los próximos pocos años. Este hecho, unido a la necesidad de muchos más puestos de trabajo en investigación de alta calidad derivada del aumento de la intensidad de investigación de la economía europea, constituirá uno de los principales retos a los que se enfrentarán los sistemas europeos de educación, investigación e innovación en los próximos años.La necesaria reforma ha de comenzar en las primeras fases de la trayectoria profesional de los investigadores, durante sus estudios de doctorado o formación de posgrado comparable. Europa debe desarrollar unos sistemas de formación innovadores y avanzados, que sean coherentes con las necesidades altamente competitivas y cada vez más interdisciplinarias de la investigación y la innovación. Será necesaria la decidida implicación de las empresas, incluidas las PYME y otros agentes socioeconómicos, para equipar a los investigadores con las aptitudes empresariales y de innovación transversales que exigen los empleos del mañana y animarles a plantearse una carrera en el sector industrial o en las empresas más innovadoras. Será importante también incrementar la movilidad de estos investigadores, ya que actualmente sigue siendo demasiado baja: en 2008, solo el 7 % de los doctorandos europeos se formaban en otro Estado miembro, mientras que el objetivo de aquí a 2030 es llegar al 20 %.Esta reforma debe continuar a través de todas las etapas de la carrera del investigador. Es indispensable aumentar la movilidad de los investigadores a todos los niveles, incluida la movilidad mediada la carrera, no solo entre países, sino también entre el sector público y el privado. Se trata de un elemento que estimula notablemente el aprendizaje y el desarrollo de nuevas competencias, así como un factor clave para la cooperación entre el mundo académico, los centros de investigación y la industria en distintos países. El factor humano es la espina dorsal de la cooperación sostenible que constituye el motor principal de una Europa innovadora y creativa capaz de hacer frente a los retos de la sociedad, y esencial para superar la fragmentación de las políticas nacionales. Para que Europa regrese a la senda del crecimiento sostenible y afronte los retos de la sociedad, son esenciales la colaboración y la puesta en común de conocimientos, a través de la movilidad individual en todas las etapas de la carrera y de los intercambios de personal investigador e innovador altamente cualificado, contribuyendo así a superar las disparidades en materia de capacidades de investigación e innovación.En este contexto, Horizonte 2020 deberá estimular el desarrollo de las carreras y de la movilidad de los investigadores mediante unas mejores condiciones, aún por determinar, que permitan la transferencia y portabilidad de las subvenciones del programa Horizonte 2020.Las acciones Marie Skłodowska-Curie garantizarán la igualdad de oportunidades de manera efectiva en relación con la movilidad de investigadores de uno u otro sexo, por ejemplo mediante medidas específicas para suprimir obstáculos.Si Europa quiere estar a la altura de sus competidores en investigación e innovación, deberá atraer a más jóvenes para que emprendan carreras de investigación y proporcionarles oportunidades y entornos sumamente atractivos para la investigación y la innovación. Es preciso que las personas de más talento, de Europa y del resto del mundo, consideren Europa un lugar privilegiado para trabajar. La igualdad de oportunidades entre sexos, las condiciones de empleo y de trabajo de alta calidad y fiables, así como el reconocimiento de la valía profesional son aspectos cruciales que deben garantizarse de manera coherente en el conjunto de Europa.

Justificación y valor añadido de la Unión

Ni la financiación de la Unión por sí sola, ni los Estados miembros individualmente, estarán en condiciones de hacer frente a este reto. Aunque los Estados miembros han introducido reformas para mejorar sus centros de educación superior y modernizar sus sistemas de formación, el progreso es todavía desigual en Europa, con grandes diferencias de un país a otro. La cooperación científica y tecnológica entre los sectores público y privado sigue siendo, en general, escasa en Europa. Lo mismo cabe decir de la igualdad entre sexos y del esfuerzo por atraer a estudiantes e investigadores de fuera del EEI. Actualmente, alrededor del 20 % de los doctorandos de la Unión son ciudadanos de terceros países, mientras que en los Estados Unidos de América aproximadamente el 35 % procede del extranjero. Para acelerar este cambio, es necesario en el ámbito de la Unión un enfoque estratégico que sobrepase las fronteras nacionales. La financiación de la Unión es vital para incentivar y fomentar las reformas estructurales indispensables.Las acciones Marie Skłodowska-Curie han conseguido avances notables en la promoción de la movilidad, tanto transnacional como intersectorial, y la apertura de las carreras de investigación a escala europea e internacional, con excelentes condiciones de trabajo y de empleo siguiendo los principios de la Carta Europea de los Investigadores y el Código de Conducta para la Contratación de Investigadores. No hay equivalencia entre los Estados miembros en lo que se refiere a escala y alcance, financiación, carácter internacional y generación y transferencia de conocimientos. Las acciones Marie Skłodowska-Curie han reforzado los recursos de las instituciones capaces de atraer a los investigadores internacionalmente y, por tanto, han fomentado la difusión de los centros de excelencia en la Unión. Han servido como modelo digno de imitación, con un pronunciado efecto estructurador a través de la difusión de sus mejores prácticas en el ámbito nacional. Gracias a su enfoque abierto, las acciones Marie Skłodowska-Curie han permitido también que una gran mayoría de esas instituciones formen y mejoren las aptitudes de una nueva generación de investigadores capaces de afrontar los retos de la sociedad.El desarrollo futuro de las acciones Marie Skłodowska-Curie contribuirá de manera significativa al desarrollo del EEI. Con una estructura de financiación competitiva a escala europea, las acciones Marie Skłodowska-Curie fomentarán, al tiempo que respetan el principio de subsidiariedad, modelos de formación nuevos, creativos e innovadores, como los doctorados conjuntos o múltiples, los estudios de doctorado industriales, con participación de agentes de los ámbitos de la educación, la investigación y la innovación que tendrán que competir a nivel mundial por granjearse una reputación de excelencia. Al brindar la financiación de la Unión a los mejores programas de investigación y formación con arreglo a los principios de los doctorados de formación innovadora en Europa, también promoverán una mayor difusión y absorción, avanzando hacia una formación de doctorado más estructurada.Las ayudas Marie Skłodowska-Curie podrán también dedicarse a la movilidad temporal de investigadores e ingenieros experimentados de las instituciones públicas al sector privado o viceversa, estimulando y apoyando a universidades, centros de investigación y empresas y a otros actores socioeconómicos para que cooperen mutuamente a escala europea e internacional. Con ayuda de un sistema de evaluación bien establecido, transparente y equitativo, las acciones Marie Skłodowska-Curie descubrirán los talentos excelentes en la investigación y la innovación a través de una competencia internacional que confiera prestigio, y por lo tanto motivación, a los investigadores para proseguir su carrera en Europa.Los retos de la sociedad que deben afrontar los investigadores e innovadores altamente cualificados no constituyen un problema exclusivamente europeo. Se trata de retos internacionales de una complejidad y una magnitud colosales. Es preciso que los mejores investigadores de Europa y del mundo trabajen conjuntamente a través de países, sectores y disciplinas. Las acciones Marie Skłodowska-Curie desempeñarán un papel clave en este sentido, prestando apoyo a intercambios de personal que alentarán el pensamiento en colaboración a través de la difusión internacional e intersectorial de conocimientos que tan crucial resulta para la innovación abierta.El mecanismo de cofinanciación de las acciones Marie Skłodowska-Curie será fundamental para expandir el número de talentos de Europa. El impacto numérico y estructural de la actividad de la Unión se incrementará movilizando la financiación regional, nacional, internacional, pública y privada para crear nuevos programas, con objetivos complementarios y similares, y adaptar los existentes a la formación, movilidad y desarrollo de la carrera de manera tanto internacional como intersectorial. Tal mecanismo forjará relaciones aún más firmes con respecto a los esfuerzos realizados en investigación y educación tanto a nivel nacional y como de la Unión.Todas las actividades de este reto contribuirán a crear un modo de pensar nuevo en Europa que es crucial para la creatividad y la innovación. Las medidas de financiación Marie Skłodowska-Curie reforzarán la puesta en común de recursos en Europa y, por tanto, generarán mejoras en la coordinación y la gobernanza de la formación, movilidad y desarrollo de la carrera del investigador. Contribuirán a la consecución de los objetivos políticos expuestos en la ""Unión por la Innovación"", ""Juventud en movimiento"" y la ""Agenda de nuevas cualificaciones y empleos"" y serán vitales para que el EEI se haga realidad. Las acciones Marie Skłodowska-Curie se llevarán a cabo por lo tanto en estrecha sinergia con otros programas que respalden estos objetivos de actuación, incluidos el programa ""Erasmus+"" y las Comunidades de Conocimiento e Innovación del EIT.

Líneas generales de las actividades

(a) Fomento de nuevas aptitudes mediante una formación inicial excelente de los investigadores

El objetivo es formar a una nueva generación de investigadores creativos e innovadores, capaces de transformar los conocimientos y las ideas en productos y servicios para beneficio económico y social de la Unión.Las actividades fundamentales proporcionarán una formación innovadora y excelente a los investigadores en su fase inicial a nivel de posgrado, a través de proyectos interdisciplinarios, como por ejemplo sistemas de asesoramiento para la transferencia de conocimientos y experiencias entre investigadores, o programas de doctorado que ayuden a los investigadores a desarrollar su currículo de investigación y en los que participen universidades, centros de investigación, infraestructuras de investigación, empresas, PYME y otros grupos socioeconómicos de diferentes países, Estados miembros, estados asociados y terceros países. De este modo mejorarán las perspectivas de carrera de los jóvenes investigadores de posgrado en los sectores tanto público como privado.

(b) Cultivar la excelencia mediante la movilidad transfronteriza e intersectorial

El objetivo es mejorar el potencial creativo e innovador de los investigadores experimentados en todos los niveles de su carrera profesional creando oportunidades de movilidad transfronteriza e intersectorial.Las actividades fundamentales incitarán a los investigadores experimentados a ampliar o profundizar sus competencias a través de la movilidad abriendo oportunidades de carrera atractivas en universidades, centros de investigación, infraestructuras de investigación, empresas, PYME y otros grupos socioeconómicos de toda Europa y de fuera de ella. Ello debería mejorar la capacidad de innovación del sector privado y promover la movilidad intersectorial. También se apoyarán las oportunidades para formarse y adquirir conocimientos en una institución de alto nivel científico de un tercer país, reanudar una carrera científica tras una pausa e integrar o reintegrar a investigadores en un puesto de investigación a más largo plazo en Europa, que puede ser en su país de origen, tras una experiencia de movilidad transnacional/internacional que cubra los aspectos relacionados con el retorno y la reintegración.

(c) Estimular la innovación mediante la fertilización cruzada de conocimientos

El objetivo es reforzar la colaboración internacional intersectorial y transfronteriza en la investigación y la innovación mediante intercambios de personal investigador e innovador para poder afrontar mejor los retos globales.Las actividades fundamentales serán de apoyo a los intercambios de personal investigador e innovador entre una asociación de universidades, centros de investigación, infraestructuras de investigación, empresas, PYME y otros grupos socioeconómicos, dentro de Europa y en todo el mundo. Se incluirá el fomento de la cooperación con terceros países.

(d) Intensificación del impacto estructural mediante la cofinanciación de actividades

El objetivo es aumentar, movilizando fondos adicionales, el impacto numérico y estructural de las acciones Marie Skłodowska-Curie y estimular la excelencia a nivel nacional en la formación, movilidad y desarrollo de la carrera de los investigadores.Las actividades clave servirán de estímulo, con ayuda de un mecanismo de cofinanciación, a las organizaciones regionales, nacionales e internacionales, tanto públicas como privadas, para que creen nuevos programas y adapten los existentes a la formación, movilidad y desarrollo de la carrera a escala internacional e intersectorial. De este modo aumentará la calidad de la formación de los investigadores en Europa en todas las etapas de su carrera, incluido el nivel de doctorado, se fomentará la libre circulación de los investigadores y los conocimientos científicos en Europa, se promoverán las carreras de investigación atractivas ofreciendo una contratación abierta y unas condiciones de trabajo atractivas y se apoyará la cooperación en investigación e innovación entre las universidades, las instituciones de investigación y las empresas y la cooperación con terceros países y organizaciones internacionales.

(e) Apoyo específico y acciones políticas

Los objetivos consisten en seguir de cerca los progresos logrados, detectando lagunas y obstáculos en las acciones Marie Skłodowska-Curie y aumentar su impacto. En este contexto, se crearán indicadores y se analizarán los datos relativos a la movilidad, las cualificaciones, la carrera de los investigadores y la igualdad entre sexos, procurando conseguir sinergias y una estrecha coordinación con las acciones de apoyo a las políticas sobre los investigadores, sus empleadores y entidades financiadoras realizadas en el marco del objetivo específico ""Europa en un mundo cambiante: sociedades inclusivas, innovadoras y reflexivas"". La actividad tratará además de sensibilizar sobre la importancia y el atractivo de una carrera de investigador y difundir los resultados de la investigación y la innovación derivados de los trabajos financiados por las acciones Marie Skłodowska-Curie. ";"";"H2020";"H2020-EU.1.";"";"";"2014-09-22 20:39:21";"664109" +"H2020-EU.1.3.1.";"fr";"H2020-EU.1.3.1.";"";"";"Promouvoir de nouvelles compétences par une formation initiale d'excellence des chercheurs";"MCSA Initial training";"

Promouvoir de nouvelles compétences par une formation initiale d'excellence des chercheurs

L'objectif est de former une nouvelle génération de chercheurs créatifs et innovants, capables de convertir la connaissance et les idées en produits et services porteurs d'avancées économiques et sociales au sein de l'Union.Les principales activités sont axées sur l'octroi d'une formation postuniversitaire innovante et d'excellence aux jeunes chercheurs, au moyen de projets interdisciplinaires, y compris des programmes de parrainage visant au transfert de connaissances ou d'expériences entre chercheurs ou des programmes de doctorat, aidant les chercheurs à faire évoluer leur carrière dans la recherche et associant des universités, des institutions de recherche, des infrastructures de recherche, des entreprises, des PME et d'autres groupements socioéconomiques issus de différents États membres, pays associés et/ou pays tiers. Les perspectives de carrière des jeunes chercheurs au terme de leurs études universitaires s'en trouveront améliorées, aussi bien dans le secteur public que dans le secteur privé.";"";"H2020";"H2020-EU.1.3.";"";"";"2014-09-22 20:39:25";"664111" +"H2020-EU.1.3.1.";"es";"H2020-EU.1.3.1.";"";"";"Fomento de nuevas aptitudes mediante una formación inicial excelente de los investigadores";"MCSA Initial training";"

Fomento de nuevas aptitudes mediante una formación inicial excelente de los investigadores

El objetivo es formar a una nueva generación de investigadores creativos e innovadores, capaces de transformar los conocimientos y las ideas en productos y servicios para beneficio económico y social de la Unión.Las actividades fundamentales proporcionarán una formación innovadora y excelente a los investigadores en su fase inicial a nivel de posgrado, a través de proyectos interdisciplinarios, como por ejemplo sistemas de asesoramiento para la transferencia de conocimientos y experiencias entre investigadores, o programas de doctorado que ayuden a los investigadores a desarrollar su currículo de investigación y en los que participen universidades, centros de investigación, infraestructuras de investigación, empresas, PYME y otros grupos socioeconómicos de diferentes países, Estados miembros, estados asociados y terceros países. De este modo mejorarán las perspectivas de carrera de los jóvenes investigadores de posgrado en los sectores tanto público como privado.";"";"H2020";"H2020-EU.1.3.";"";"";"2014-09-22 20:39:25";"664111" +"H2020-EU.1.3.1.";"pl";"H2020-EU.1.3.1.";"";"";"Wspieranie nowych umiejętności poprzez najwyższej jakości wstępne szkolenie naukowców";"MCSA Initial training";"

Wspieranie nowych umiejętności poprzez najwyższej jakości wstępne szkolenie naukowców

Celem jest wyszkolenie nowego pokolenia kreatywnych i innowacyjnych naukowców, zdolnych do przekształcenia wiedzy i pomysłów w produkty i usługi przynoszące Unii korzyści gospodarcze i społeczne.Kluczowe działania polegają na zapewnieniu początkującym naukowcom po ukończeniu studiów II stopnia lub równoważnych najwyższej jakości innowacyjnego szkolenia w ramach interdyscyplinarnych projektów, zawierających mentoring służący transferowi wiedzy i doświadczenia między naukowcami lub programy studiów doktoranckich pomagające naukowcom rozwijanie ich karier naukowych oraz obejmujące uniwersytety, instytucje badawcze, infrastrukturę badawczą, przedsiębiorstwa, MŚP oraz, inne podmioty społeczno-gospodarcze z różnych państw członkowskich, krajów stowarzyszonych lub państw trzecich. Skutkiem będą lepsze perspektywy kariery dla młodych naukowców po ukończeniu studiów II stopnia lub równoważnych, zarówno w sektorze publicznym, jak i prywatnym.";"";"H2020";"H2020-EU.1.3.";"";"";"2014-09-22 20:39:25";"664111" +"H2020-EU.1.3.1.";"it";"H2020-EU.1.3.1.";"";"";"Promuovere nuove competenze grazie ad una formazione iniziale di eccellenza dei ricercatori";"MCSA Initial training";"

Promuovere nuove competenze grazie ad una formazione iniziale di eccellenza dei ricercatori

L'obiettivo è formare una nuova generazione di ricercatori creativi e innovativi, in grado di convertire le conoscenze e le idee in prodotti e servizi a beneficio economico e sociale dell'Unione.Le principali attività consistono nel fornire una formazione eccellente e innovativa a ricercatori a livello postlaurea in fase iniziale per mezzo di progetti interdisciplinari, compreso il tutoraggio volto al trasferimento di conoscenze ed esperienze tra ricercatori, o programmi dottorali che aiutino i ricercatori nello sviluppo della loro carriera di ricerca e coinvolgano università, istituti di ricerca, infrastrutture di ricerca, imprese, PMI e altri gruppi socioeconomici di diversi Stati membri, paesi associati e/o paesi terzi al fine di migliorare le prospettive di carriera per i giovani ricercatori postlaurea nei settori pubblico e privato.";"";"H2020";"H2020-EU.1.3.";"";"";"2014-09-22 20:39:25";"664111" +"H2020-EU.1.3.1.";"en";"H2020-EU.1.3.1.";"";"";"Fostering new skills by means of excellent initial training of researchers";"MCSA Initial training";"

Fostering new skills by means of excellent initial training of researchers

The goal is to train a new generation of creative and innovative researchers, able to convert knowledge and ideas into products and services for economic and social benefit in the Union.Key activities shall be to provide excellent and innovative training to early-stage researchers at post-graduate level through interdisciplinary projects, including mentoring to transfer knowledge and experience between researchers or doctoral programmes, helping researchers to develop their research career and involving universities, research institutions, research infrastructures, businesses, SMEs and other socio-economic groups from different Member States, associated countries and/or third countries. This will improve career prospects for young post-graduate researchers in both the public and private sectors.";"";"H2020";"H2020-EU.1.3.";"";"";"2014-09-22 20:39:25";"664111" +"H2020-EU.1.3.1.";"de";"H2020-EU.1.3.1.";"";"";"Förderung neuer Fähigkeiten durch eine exzellente Erstausbildung von Forschern";"MCSA Initial training";"

Förderung neuer Fähigkeiten durch eine exzellente Erstausbildung von Forschern

Ziel ist die Ausbildung einer neuen Generation von kreativen und innovativen Forschern, die in der Lage sind, Wissen und Ideen in Produkte und Dienstleistungen zu verwandeln, die für die Wirtschaft und die Gesellschaft in der Union von Nutzen sind.Hierzu kommt es ganz entscheidend darauf an, Nachwuchsforschern nach Abschluss ihrer Hochschulausbildung exzellente und innovative Ausbildungsmöglichkeiten im Rahmen interdisziplinärer Projekte, einschließlich Mentoring-Programme für den Wissens- und Erfahrungstransfer zwischen Forschern oder Promotionsprogramme, die die Laufbahnentwicklung für Forscher erleichtern, zu bieten, in die Hochschulen, Forschungseinrichtungen, Forschungsinfrastrukturen, Unternehmen, darunter auch KMU und andere sozioökonomische Gruppen aus unterschiedlichen Mitgliedstaaten, assoziierten Ländern und/oder Drittländern eingebunden sind. Dies verbessert die Laufbahnperspektiven für graduierte Nachwuchsforscher im öffentlichen und privaten Sektor.";"";"H2020";"H2020-EU.1.3.";"";"";"2014-09-22 20:39:25";"664111" +"H2020-EU.3.4.";"it";"H2020-EU.3.4.";"";"";"SFIDE PER LA SOCIETÀ - Trasporti intelligenti, verdi e integrati";"Transport";"

SFIDE PER LA SOCIETÀ - Trasporti intelligenti, verdi e integrati

Obiettivo specifico

L'obiettivo specifico è realizzare un sistema di trasporto europeo efficiente sotto il profilo delle risorse, rispettoso dell'ambiente e del clima, sicuro e senza soluzioni di continuità a vantaggio di tutti cittadini, dell'economia e della società.L'Europa deve conciliare le crescenti esigenze di mobilità dei cittadini e delle merci, nonché l'evoluzione delle esigenze influenzate dalle nuove sfide demografiche e per la società, con gli imperativi dei risultati economici e i requisiti di una società efficiente sotto il profilo energetico e a basse emissioni di carbonio e di un'economia resiliente sotto il profilo climatico. Nonostante la sua crescita, il settore dei trasporti deve conseguire una sostanziale riduzione dei gas a effetto serra e di altri impatti ambientali negativi e porre fine alla sua dipendenza dal petrolio e da altri combustibili fossili, mantenendo nel contempo elevati livelli di efficienza e di mobilità e promuovendo la coesione territoriale.La mobilità sostenibile può essere conseguita solo mediante un mutamento radicale del sistema dei trasporti, compreso il trasporto pubblico, ispirato da svolte importanti nella ricerca in materia di trasporti, dall'innovazione di ampia portata e dall'attuazione coerente su scala europea di soluzioni di trasporto più intelligenti, sicure, affidabili ed ecologiche.La ricerca e l'innovazione devono generare progressi mirati e tempestivi per tutti i modi di trasporto, che contribuiranno a conseguire gli obiettivi strategici fondamentali dell'Unione, incrementando nel contempo la competitività economica, sostenendo la transizione verso un'economia a basse emissioni di carbonio, efficiente sotto il profilo energetico e resiliente ai cambiamenti climatici e mantenendo la leadership sul mercato mondiale sia per l'industria dei servizi che per quella manifatturiera.Anche in presenza dei necessari investimenti significativi in materia di ricerca, innovazione e diffusione, se non riusciranno a migliorare la sostenibilità del sistema dei trasporti e della mobilità nel suo complesso e a mantenere la leadership tecnologica europea nei trasporti, ne deriveranno livelli inaccettabilmente elevati in termini di costi ecologici, sociali ed economici di lungo termine, nonché conseguenze dannose sull'occupazione e la crescita a lungo termine in Europa.

Motivazione e valore aggiunto dell'Unione

I trasporti sono un importante motore della competitività e della crescita economica europea. Essi garantiscono la mobilità delle persone e delle merci necessaria a un mercato unico europeo integrato, alla coesione territoriale e a una società inclusiva ed aperta. Rappresentano una delle maggiori attività europee in termini di capacità industriale e di qualità del servizio, poiché svolgono un ruolo guida su molti mercati mondiali. L'industria dei trasporti e la produzione di attrezzature per i trasporti rappresentano complessivamente il 6,3 % del PIL dell'Unione. Il contributo complessivo del settore dei trasporti all'economia dell'Unione è persino più elevato se si tiene conto degli scambi, dei servizi e della mobilità dei lavoratori. Al tempo stesso, l'industria dei trasporti europea deve far fronte a una concorrenza sempre più agguerrita proveniente da altre parti del mondo. Le tecnologie di punta dovranno garantire il futuro vantaggio competitivo dell'Europa e ovviare agli inconvenienti del nostro attuale sistema dei trasporti.Il settore dei trasporti è una delle principali fonti di gas a effetto serra e genera fino a un quarto di tutte le emissioni. È altresì uno dei principali fattori di altri problemi legati all'inquinamento atmosferico. I trasporti sono tuttora dipendenti al 96 % dai combustibili fossili. E' essenziale ridurre questo impatto ambientale attraverso un miglioramento tecnologico mirato, tenendo presente che ciascun modo di trasporto ha di fronte varie sfide ed è caratterizzato da diversi cicli di integrazione tecnologica. Inoltre, la congestione è un problema sempre più grave, i sistemi non sono ancora abbastanza intelligenti, le opzioni alternative per la transizione verso modi di trasporto più sostenibili non sono sempre attraenti, la mortalità per incidente stradale continua a essere notevolmente elevata, con 34 000 vittime l'anno nell'Unione, i cittadini e le imprese si aspettano un sistema di trasporto accessibile a tutti, sicuro e protetto. Il contesto urbano presenta sfide specifiche ed opportunità per la sostenibilità dei trasporti e per una migliore qualità della vita.Entro pochi decenni il tasso di crescita previsto per il settore dei trasporti porterà il traffico europeo a una fase di stallo e renderà insostenibili l'impatto sociale e i costi economici, con conseguenze negative per l'economia e la società. Si stima che, se le tendenze passate continueranno in futuro, il dato passeggeri-chilometro sia destinato a raddoppiare nei prossimi quarant'anni anni, crescendo in maniera due volte più rapida per il trasporto aereo. Le emissioni di CO2 aumenterebbero del 35 % entro il 2050. I costi dovuti alla congestione sono stimati in crescita di circa il 50 %, e ammonterebbero a circa 200 miliardi di EUR l'anno. I costi esterni degli incidenti aumenterebbero di circa 60 miliardi di EUR rispetto al 2005.Lasciare lo scenario di status quo non è pertanto un'opzione valida. La ricerca e l'innovazione, motivate da obiettivi strategici e incentrate sulle principali sfide, contribuiscono notevolmente a conseguire gli obiettivi fissati dall'Unione di limitare l'aumento della temperatura globale a 2 °C, riducendo del 60 % le emissioni di CO2 dovute ai trasporti, riducendo drasticamente la congestione e i costi legati agli incidenti ed eliminando in pratica la mortalità stradale entro il 2050.I problemi di inquinamento, congestione e sicurezza sono comuni a tutta l'Unione ed esigono risposte concertate a livello europeo. Accelerare lo sviluppo e l'impiego di nuove tecnologie e di soluzioni innovative per i veicoli, le infrastrutture e la gestione dei trasporti sarà essenziale per realizzare un sistema di trasporto intermodale e multimodale più pulito, sicuro, accessibile ed efficiente nell'Unione, per conseguire i risultati necessari per attenuare il cambiamento climatico e migliorare l'efficienza delle risorse e per mantenere la leadership europea sui mercati mondiali di prodotti e servizi connessi ai trasporti. Tali obiettivi non possono essere raggiunti solo attraverso sforzi nazionali frammentati.Il finanziamento a livello di Unione della ricerca e dell'innovazione per i trasporti integrerà le attività degli Stati membri, concentrandosi su attività aventi un chiaro valore aggiunto europeo. Questo significa che l'accento sarà posto sui settori prioritari che rispecchiano gli obiettivi strategici dell'Unione europea dove è necessaria una massa critica di sforzi, dove soluzioni di trasporto interoperabile o multimodale integrato a livello europeo possono contribuire a eliminare strozzature nel sistema dei trasporti, ovvero dove la messa in comune degli sforzi di ricerca a livello transnazionale nonché un uso migliore e una diffusione più efficace dei dati delle ricerche esistenti può ridurre i rischi di investimento nella ricerca, inaugurare norme comuni e abbreviare i tempi di commercializzazione dei risultati della ricerca.Le attività di ricerca e innovazione comprendono una vasta gamma di iniziative, compresi i pertinenti partenariati pubblico-privato, che coprono l'intera catena dell'innovazione e seguono un approccio integrato a soluzioni di trasporto innovative. Diverse attività sono specificamente mirate a portare sul mercato i risultati ottenuti: un approccio programmatico alla ricerca e all'innovazione, progetti dimostrativi, azioni di adozione di mercato e sostegno alla standardizzazione, alla regolamentazione e a strategie innovative in materia di appalti contribuiscono tutti al conseguimento di tale obiettivo. Inoltre, con l'impegno e la competenza dei soggetti interessati sarà possibile colmare il divario tra i risultati della ricerca e il loro impiego nel settore dei trasporti.Investire in ricerca e innovazione per un sistema di trasporto pienamente integrato e affidabile, più intelligente e più verde rappresenta un importante contributo al raggiungimento degli obiettivi della strategia Europa 2020 e della sua iniziativa faro ""Unione dell'innovazione"". Le attività sosterranno l'attuazione del Libro bianco ""Tabella di marcia verso uno spazio unico europeo dei trasporti - Per una politica dei trasporti competitiva e sostenibile"". Esse apporteranno inoltre un contributo al conseguimento degli obiettivi strategici delineati nelle iniziative faro ""Un'Europa efficiente sotto il profilo delle risorse"", ""Una politica industriale nell'era della globalizzazione"" e ""Un'agenda digitale europea"". Avranno anche contatti con le pertinenti iniziative di programmazione congiunta.

Le grandi linee delle attività

Le attività saranno organizzate, se del caso, in maniera da permettere un approccio integrato e specifico per i singoli modi. Sarà necessaria una visibilità e continuità pluriennale per tener conto delle peculiarità di ciascun modo di trasporto e della natura olistica delle sfide, nonché dei pertinenti programmi strategici di ricerca e innovazione delle piattaforme tecnologiche europee in materia di trasporti.

(a) Trasporti efficienti sotto il profilo delle risorse che rispettino l'ambiente

L'obiettivo è ridurre al minimo l'impatto dei sistemi dei trasporti sul clima e sull'ambiente (compreso l'inquinamento acustico e atmosferico), migliorandone la qualità e l'efficienza nell'uso delle risorse naturali e dei combustibili e riducendone le emissioni di gas a effetto serra e la dipendenza dai combustibili fossili.Il centro dell'attività è ridurre il consumo di risorse, in particolare di combustibili fossili, le emissioni di gas a effetto serra e i livelli di rumore, migliorare l'efficienza dei trasporti e dei veicoli, accelerare lo sviluppo, la produzione e la diffusione di una nuova generazione di veicoli puliti (elettrici, a idrogeno e altri con emissioni basse o pari a zero), anche mediante progressi di rilievo e ottimizzazioni per quanto concerne motori, immagazzinamento dell'energia e infrastrutture, esaminare e sfruttare il potenziale dei carburanti alternativi e sostenibili e dei sistemi operativi e di propulsione innovativi e più efficienti, comprese le infrastrutture per il combustibile e il carico dello stesso, ottimizzare la pianificazione e l'uso delle infrastrutture, per mezzo di sistemi di trasporto intelligenti, logistica e attrezzature intelligenti, nonché incrementare l'uso della gestione della domanda e dei trasporti pubblici e non motorizzati, nonché delle catene di mobilità intermodali, in particolare nelle aree urbane. Saranno incoraggiate le innovazioni intese a ottenere emissioni basse o pari a zero in tutti i modi di trasporto.

(b) Migliorare la mobilità, diminuire il traffico e aumentare la sicurezza

L'obiettivo è conciliare le crescenti esigenze di mobilità con una maggiore fluidità dei trasporti, grazie a soluzioni innovative riguardanti sistemi di trasporto senza soluzioni di continuità, intermodali, inclusivi, accessibili, a costi sostenibili, sicuri, sani e robusti.Il centro delle attività è ridurre la congestione stradale, migliorare l'accessibilità, l'interoperabilità e le scelte dei passeggeri nonché soddisfare le esigenze degli utenti grazie allo sviluppo e alla promozione dei trasporti integrati porta a porta, della gestione della mobilità e della logistica, rafforzare l'intermodalità e la diffusione delle soluzioni di pianificazione e gestione intelligenti, nonché ridurre drasticamente gli incidenti e l'impatto delle minacce alla sicurezza.

(c) Leadership mondiale per l'industria europea dei trasporti

L'obiettivo è rafforzare la competitività e i risultati dell'industria manifatturiera europea dei trasporti e dei servizi correlati, compresi i processi logistici, la manutenzione, la riparazione, l'ammodernamento e il riciclaggio, conservando nel contempo settori di leadership europea, ad esempio l'aeronautica.Il centro dell'attività è lo sviluppo della prossima generazione di mezzi di trasporto aereo, per via navigabile e terrestre innovativi, la produzione sostenibile di apparecchiature e sistemi innovativi e la preparazione del terreno per futuri mezzi di trasporto, lavorando su nuovi concetti, tecnologie e progetti, su sistemi di controllo intelligenti e norme interoperabili, su processi di produzione efficienti, servizi innovativi e procedure di certificazione, tempi di sviluppo minori e costi di ciclo di vita ridotti, senza compromettere la sicurezza operativa.

(d) Ricerca socioeconomica e comportamentale e attività orientate al futuro per l'elaborazione delle strategie politiche

L'obiettivo è sostenere un processo decisionale migliorato necessario per promuovere l'innovazione e far fronte alle sfide poste dai trasporti e alle esigenze sociali a essi connesse.Il centro dell'attività è migliorare la comprensione delle incidenze, delle tendenze e delle prospettive socioeconomiche connesse ai trasporti, compresa l'evoluzione futura della domanda, e fornire ai responsabili politici informazioni e analisi basate su dati concreti. Si dedicherà inoltre attenzione alla diffusione dei risultati derivanti da tali attività.";"";"H2020";"H2020-EU.3.";"";"";"2014-09-22 20:47:00";"664357" +"H2020-EU.3.4.";"pl";"H2020-EU.3.4.";"";"";"WYZWANIA SPOŁECZNE - Inteligentny, zielony i zintegrowany transport";"Transport";"

WYZWANIA SPOŁECZNE - Inteligentny, zielony i zintegrowany transport

Cel szczegółowy

Celem szczegółowym jest stworzenie europejskiego systemu transportowego, który będzie zasobooszczędny, przyjazny dla środowiska i klimatu, bezpieczny i spójny, z korzyścią dla wszystkich obywateli, gospodarki i społeczeństwa.Europa musi pogodzić rosnące potrzeby związane z mobilnością jej obywateli i towarów oraz zmieniające się wymogi, które są kształtowane pod wpływem nowych wyzwań demograficznych i społecznych, z imperatywami dotyczącymi wyników gospodarczych oraz wymogami energooszczędnego, niskoemisyjnego społeczeństwa i gospodarki odpornej na zmianę klimatu. W sektorze transportowym, pomimo jego ekspansji, należy znacznie ograniczyć emisje gazów cieplarnianych i inne niekorzystne rodzaje oddziaływania na środowisko, a także wyeliminować uzależnienie od ropy naftowej i innych paliw kopalnych, a jednocześnie należy zachować wysoki poziom wydajności i mobilności oraz promować spójność terytorialną.Mobilność zgodną z zasadami zrównoważonego rozwoju można osiągnąć tylko poprzez radykalną zmianę systemu transportowego, w tym transportu publicznego, inspirowaną przełomami w badaniach naukowych prowadzonych w dziedzinie transportu, poprzez daleko idące innowacje oraz spójne, ogólnoeuropejskie wdrażanie bardziej zielonych bezpieczniejszych, bardziej niezawodnych i inteligentniejszych rozwiązań transportowych.Badania naukowe i innowacje muszą zaowocować ukierunkowanymi i szybkimi postępami dotyczącymi wszystkich rodzajów transportu, które pomogą w osiągnięciu kluczowych celów strategicznych Unii, a jednocześnie będą zwiększać konkurencyjność gospodarczą, wspierać przejście na gospodarkę odporną na wyzwania klimatu, energooszczędną i niskoemisyjną oraz umożliwią utrzymanie wiodącej pozycji na rynku globalnym, zarówno w przypadku sektora usług, jak i przemysłu wytwórczego.Niezbędne inwestycje w badania naukowe, innowacje i wdrożenie będą znaczne, jednak brak poprawy w zakresie zrównoważonego charakteru całego systemu transportu i mobilności oraz utrata wiodącej pozycji technologii europejskich w transporcie przyniesie w dłuższej perspektywie niemożliwe do przyjęcia wysokie koszty społeczne, ekologiczne i gospodarcze i będzie miało szkodliwe skutki, jeżeli chodzi o miejsca pracy w Europie i długoterminowy wzrost gospodarczy.

Uzasadnienie i unijna wartość dodana

Transport jest jednym z ważniejszych czynników stymulujących konkurencyjność i wzrost gospodarczy Europy. Zapewnia on mobilność osób i towarów mającą kluczowe znaczenie dla zintegrowanego jednolitego rynku europejskiego, spójności terytorialnej oraz otwartego i integracyjnego społeczeństwa. Należy do największych atutów Europy pod względem potencjału przemysłowego i jakości usług i odgrywa wiodącą rolę na wielu światowych rynkach. Przemysł transportowy i produkcja sprzętu transportowego wspólnie odpowiadają za 6,3% PKB Unii. Całkowity wkład transportu w gospodarkę Unii jest jeszcze większy, jeżeli weźmie się pod uwagę handel, usługi i mobilność pracowników. Jednocześnie europejski przemysł transportowy stoi w obliczu coraz bardziej zaciekłej konkurencji z innych stron świata. Zapewnienie Europie konkurencyjnej przewagi w przyszłości i minimalizacja niedociągnięć naszego obecnego systemu transportowego będą wymagać przełomowych technologii.Sektor transportowy ma duży udział w emisjach gazów cieplarnianych –pochodzi z niego do jednej czwartej wszystkich emisji. Przyczynia się on również w znacznym stopniu do innych problemów związanych z zanieczyszczeniem powietrza. W dalszym ciągu transport jest w 96% zależny od paliw kopalnych. Konieczne jest zmniejszenie tego oddziaływania na środowisko poprzez ukierunkowane usprawnienia technologiczne, przy założeniu że każdy rodzaj transportu napotyka na różne problemy i właściwe dla niego są różne cykle integracji technologii. Coraz poważniejszym problemem staje się ponadto zagęszczenie ruchu; systemy nie są jeszcze wystarczająco inteligentne; alternatywne opcje przejścia na bardziej zrównoważone rodzaje transportu nie zawsze są atrakcyjne; liczba śmiertelnych ofiar wypadków drogowych w Unii utrzymuje się na drastycznie wysokim poziomie 34 tys. rocznie; obywatelom i przedsiębiorstwom zależy na dostępnym dla wszystkich, bezpiecznym i niezawodnym systemie transportowym. Środowisko miejskie stawia szczególne wyzwania i oferuje możliwości, jeśli chodzi o zrównoważony charakter transportu i lepszą jakość życia.Przy oczekiwanym tempie rozwoju transportu w ciągu kilku dziesięcioleci ruch na drogach europejskich ulegnie zablokowaniu, a jego koszty gospodarcze i wpływ społeczny staną się nie do przyjęcia, co będzie miało niekorzystne skutki gospodarczo-społeczne. Jeśli dotychczasowe tendencje utrzymają się w przyszłości, przewiduje się, że w ciągu następnych 40 lat liczba pasażerokilometrów podwoi się, a w przypadku podróży lotniczych będzie rosnąć dwukrotnie szybciej. Do 2050 r. wielkość emisji CO2 wzrośnie o 35%. Koszty związane z zagęszczeniem ruchu wzrosną o ok. 50%, osiągając poziom niemal 200 mld EUR rocznie. W porównaniu z 2005 r. koszty zewnętrzne wypadków wzrosną o ok. 60 mld EUR.Nie można zatem utrzymywać stanu obecnego. Badania naukowe i innowacje, zorientowane na cele strategiczne i skupione na kluczowych wyzwaniach, mają wnieść znaczny wkład w osiągnięcie określonych przez Unię docelowych poziomów ograniczenia globalnego wzrostu temperatur do 2°C, obniżenia o 60% emisji CO2 z transportu, radykalną redukcję zagęszczenia ruchu i kosztów związanych z wypadkami oraz praktyczną eliminację śmiertelnych ofiar wypadków na drogach do 2050 r.Problemy związane z zanieczyszczeniem, zagęszczeniem ruchu, bezpieczeństwem i ochroną są wspólne dla całej Unii i wymagają ogólnoeuropejskiego rozwiązania przewidującego współpracę. Przyspieszenie rozwoju i stosowania nowych technologii i innowacyjnych rozwiązań w odniesieniu do pojazdów, infrastruktury i zarządzania transportem będzie istotne dla uzyskania bardziej ekologicznego, bezpieczniejszego, dostępnego i bardziej wydajnego intermodalnego i multimodalnego systemu transportowego w Unii; dla uzyskania rezultatów koniecznych, by złagodzić skutki zmiany klimatu i poprawić zasobooszczędność oraz dla zachowania wiodącej pozycji Europy na rynkach światowych produktów i usług związanych z transportem. Celów tych nie można osiągnąć jedynie poprzez rozdrobnione działania krajowe.Finansowanie na poziomie Unii badań naukowych i innowacji w zakresie transportu będzie stanowić uzupełnienie działań podejmowanych przez państwa członkowskie, gdyż skupi się na działaniach o wyraźnej europejskiej wartości dodanej. To oznacza, że nacisk zostanie położony na obszary priorytetowe odpowiadające europejskim celom strategicznym; w przypadku których niezbędna jest masa krytyczna wysiłków; w przypadku których ogólnoeuropejskie, interoperacyjne lub multimodalne zintegrowane rozwiązania transportowe mogą pomóc wyeliminować trudności w systemie transportowym; lub w przypadku których połączenie wysiłków w skali transnarodowej i lepsze wykorzystanie oraz skuteczne upowszechnianie istniejących danych pochodzących z badań naukowych może ograniczyć ryzyko związane z inwestowaniem w badania, dać początek zastosowaniu wspólnych norm i skrócić czas wprowadzenia wyników badań na rynek.Działania w zakresie badań naukowych i innowacji mają wspierać szeroki zakres inicjatyw, w tym odpowiednich partnerstw publiczno-prywatnych, obejmujących cały łańcuch innowacji i stosujących zintegrowane podejście do innowacyjnych rozwiązań transportowych. Niektóre działania mają na celu w szczególności wprowadzenie wyników badań na rynek; temu celowi służą: podejście programowe do projektów w zakresie badań naukowych, innowacji i demonstracji, działania wspomagające absorpcję wyników przez rynek oraz wsparcie normalizacji, regulacji i innowacyjnych strategii zamówień publicznych. Ponadto zaangażowanie zainteresowanych stron i ich wiedza specjalistyczna pomogą wyeliminować dystans między wynikami badań a ich zastosowaniem w sektorze transportowym.Inwestycje w badania naukowe i innowacje dokonywane z myślą o bardziej zielonym, inteligentniejszym i w pełni zintegrowanym niezawodnym systemie transportowym przyczynią się wybitnie do osiągnięcia celów strategii „Europa 2020” oraz celów jej inicjatywy przewodniej „Unia innowacji”. Takie działania ułatwią wdrożenie założeń białej księgi „Plan utworzenia jednolitego europejskiego obszaru transportu – dążenie do osiągnięcia konkurencyjnego i zasobooszczędnego systemu transportu”, mającej na celu utworzenie jednolitego europejskiego obszaru transportu. Przyczynią się także do osiągnięcia celów strategicznych określonych w inicjatywach przewodnich „Europa efektywnie korzystająca z zasobów”, „Polityka przemysłowa w erze globalizacji” i „Europejska agenda cyfrowa”. Będą się one także zazębiać z odpowiednimi inicjatywami w zakresie wspólnego programowania.

Ogólne kierunki działań

Działania będą organizowane w taki sposób, by w stosownych przypadkach uwzględnione zostało podejście zintegrowane i specyficzne dla danego rodzaju transportu. Niezbędne będzie zapewnienie widoczności i ciągłości w perspektywie wieloletniej, tak by uwzględnić specyfikę poszczególnych rodzajów transportu i całościowy charakter wyzwań, a także odpowiednie strategiczne programy badań naukowych i innowacji europejskich platform technologicznych w dziedzinie transportu.

(a) Zasobooszczędny transport, który szanuje środowisko

Celem jest minimalizacja oddziaływania systemów transportu na klimat i środowisko (w tym hałasu i zanieczyszczenia powietrza) poprzez poprawienie ich jakości i wydajności pod względem wykorzystania zasobów naturalnych i paliw oraz poprzez zmniejszenie emisji gazów cieplarnianych i ograniczenie jego zależności od paliw kopalnych.Działania mają skoncentrować się na ograniczeniu zużycia zasobów, w szczególności paliw kopalnych, zmniejszeniu emisji gazów cieplarnianych i poziomów hałasu a także na poprawie efektywności transportu i pojazdów; przyspieszeniu rozwoju oraz opracowaniu, wyprodukowaniu i wprowadzeniu na rynek ekologicznych (elektrycznych, wodorowych i innych niskoemisyjnych lub bezemisyjnych) pojazdów nowej generacji, m.in. dzięki przełomowym osiągnięciom i optymalizacji w zakresie silników, magazynowania energii i infrastruktury; na badaniu i wykorzystaniu potencjału paliw alternatywnych i zrównoważonych oraz innowacyjnych i sprawniejszych systemów napędu i systemów operacyjnych, w tym infrastruktury paliwowej i ładowania; na optymalizacji planowania i wykorzystania infrastruktury przy użyciu inteligentnych systemów transportowych, logistyki i inteligentnego wyposażenia, a także na intensywniejszym zastosowaniu zarządzania popytem i korzystaniu z transportu publicznego i bezsilnikowego oraz łańcuchów intermodalnej mobilności, w szczególności w obszarach miejskich. Wspierać się będzie innowacje służące zapewnieniu niskich lub zerowych emisji we wszystkich rodzajach transportu.

(b) Usprawniona mobilność, mniejsze zagęszczenie ruchu, większe bezpieczeństwo i ochrona

Celem jest pogodzenie rosnących potrzeb w zakresie mobilności z poprawą płynności transportu poprzez innowacyjne rozwiązania w zakresie spójnych, intermodalnych, sprzyjających integracji, dostępnych, przystępnych cenowo, bezpiecznych, zdrowych i solidnych systemów transportowych.Działania mają skupiać się na ograniczeniu zagęszczenia ruchu, poprawie dostępności i interoperacyjności oraz wyjściu naprzeciw wyborom pasażerów i potrzebom użytkowników poprzez opracowanie i promowanie zintegrowanego transportu „od drzwi do drzwi”, zarządzania mobilnością i logistyki; na zwiększeniu intermodalności i zastosowaniu rozwiązań w zakresie inteligentnego planowania i zarządzania oraz na znacznym ograniczeniu wypadków oraz wpływu zagrożeń dla bezpieczeństwa.

(c) Wiodąca pozycja europejskiego przemysłu transportowego na świecie

Celem jest wzmocnienie konkurencyjności i poprawa wyników europejskiego przemysłu produkcji sprzętu transportowego i powiązanych usług (w tym procesów logistyki, utrzymania, naprawy, modernizacji i recyklingu) przy jednoczesnym utrzymaniu wiodącej pozycji Europy w określonych dziedzinach (jak np. aeronautyka).Działania mają skupiać się na rozwoju nowej generacji innowacyjnych środków transportu lotniczego, wodnego i lądowego, zapewnieniu zrównoważonej produkcji innowacyjnych systemów i urządzeń oraz przygotowaniu gruntu dla przyszłych środków transportu poprzez prace nad nowatorskimi technologiami, koncepcjami i projektami, nad inteligentnymi systemami kontroli i interoperacyjnymi normami, wydajnymi procesami produkcji, innowacyjnymi usługami i procedurami certyfikacji, krótszym czasem rozwoju i ograniczonymi kosztami w cyklu życia, bez uszczerbku dla bezpieczeństwa eksploatacyjnego i ochrony.

(d) Społeczno-gospodarcze i behawioralne badania naukowe oraz wybiegające w przyszłość działania związane z kształtowaniem polityki

Celem jest wsparcie usprawnionego kształtowania polityki, koniecznego dla promowania innowacji i sprostania wyzwaniom dotyczącym transportu oraz powiązanym potrzebom społecznym.Działania mają skupiać się na lepszym poznaniu społeczno-gospodarczych oddziaływań, tendencji i perspektyw związanych z transportem, w tym kształtowania się zapotrzebowania w przyszłości, oraz na zapewnieniu decydentom bazy faktograficznej i analiz. Uwzględnione zostanie także upowszechnianie wyników tych działań.";"";"H2020";"H2020-EU.3.";"";"";"2014-09-22 20:47:00";"664357" +"H2020-EU.3.4.";"en";"H2020-EU.3.4.";"";"";"SOCIETAL CHALLENGES - Smart, Green And Integrated Transport";"Transport";"

SOCIETAL CHALLENGES - Smart, Green And Integrated Transport

Specific objective

The specific objective is to achieve a European transport system that is resource-efficient, climate- and environmentally-friendly, safe and seamless for the benefit of all citizens, the economy and society.Europe must reconcile the growing mobility needs of its citizens and goods and the changing needs shaped by new demographic and societal challenges with the imperatives of economic performance and the requirements of an energy-efficient low-carbon society and climate-resilient economy. Despite its growth, the transport sector must achieve a substantial reduction in greenhouse gases and other adverse environmental impacts, and must break its dependency on oil and other fossil fuels, while maintaining high levels of efficiency and mobility and promoting territorial cohesion.Sustainable mobility can only be achieved through a radical change in the transport system, including in public transport, inspired by breakthroughs in transport research, far-reaching innovation, and a coherent, Europe-wide implementation of greener, safer, more reliable and smarter transport solutions.Research and innovation must bring about focused and timely advances for all transport modes that will help achieve key Union policy objectives, while boosting economic competitiveness, supporting the transition to a climate-resilient, energy-efficient and low-carbon economy, and maintaining global market leadership both for the service industry as well as the manufacturing industry.Although the necessary investments in research, innovation and deployment will be significant, failing to improve the sustainability of the whole transport and mobility system and failing to maintain European technological leadership in transport will result in unacceptably high societal, ecological, and economic costs in the long term, and damaging consequences on European jobs and long-term economic growth.

Rationale and Union added value

Transport is a major driver of Europe's economic competitiveness and growth. It ensures the mobility of people and goods necessary for an integrated European single market, territorial cohesion and an open and inclusive society. It represents one of Europe's greatest assets in terms of industrial capability and quality of service, playing a leading role in many world markets. Transport industry and transport equipment manufacturing together represent 6,3 % of the Union GDP. The transport sector's overall contribution to the Union economy is even greater, taking into account trade, services and mobility of workers. At the same time, the European transport industry faces increasingly fierce competition from other parts of the world. Breakthrough technologies will be required to secure Europe's future competitive edge and to mitigate the drawbacks of our current transport system.The transport sector is a major contributor to greenhouse gases and generates up to a quarter of all emissions. It is also a major contributor to other air pollution problems. Transport is still 96 % dependent on fossil fuels. It is essential to reduce this environmental impact through targeted technological improvement, bearing in mind that each mode of transport faces varying challenges and is characterised by different technology integration cycles. Moreover, congestion is an increasing problem; systems are not yet sufficiently smart; alternative options for shifting towards more sustainable modes of transport are not always attractive; road fatalities remain dramatically high at 34 000 per year in the Union; citizens and businesses expect a transport system that is accessible to all, safe and secure. The urban context poses specific challenges and provides opportunities to the sustainability of transport and for a better quality of life.Within a few decades the expected growth rates of transport would drive European traffic into a gridlock and make its economic costs and societal impact unbearable, with adverse economic and societal repercussions. If trends of the past continue in the future, passenger-kilometres are predicted to double over the next 40 years and grow twice as fast for air travel. CO2 emissions would grow 35 % by 2050. Congestion costs would increase by about 50 %, to nearly EUR 200 billion annually. The external costs of accidents would increase by about EUR 60 billion compared to 2005.Business-as-usual is therefore not an option. Research and innovation, driven by policy objectives and focused on the key challenges, shall contribute substantially to achieve the Union's targets of limiting global temperature increase to 2 °C, cutting 60 % of CO2 emissions from transport, drastically reducing congestion and accident costs, and virtually eradicating road deaths by 2050.The problems of pollution, congestion, safety and security are common throughout the Union and call for collaborative Europe-wide responses. Accelerating the development and deployment of new technologies and innovative solutions for vehicles, infrastructures and transport management will be essential to achieve a cleaner, safer, more secure, accessible and more efficient intermodal and multimodal transport system in the Union; to deliver the results necessary to mitigate climate change and improve resource efficiency; and to maintain European leadership on the world markets for transport-related products and services. These objectives cannot be achieved through fragmented national efforts alone.Union level funding of transport research and innovation will complement Member States' activities by focusing on activities with a clear European added value. This means that emphasis will be placed on priority areas that match European policy objectives where a critical mass of effort is necessary, where Europe-wide, interoperable or multimodal integrated transport solutions can help remove bottlenecks in the transport system, or where pooling efforts transnationally and making better use of and effectively disseminating existing research evidence can reduce research investment risks, pioneer common standards and shorten time to market of research results.Research and innovation activities shall include a wide range of initiatives, including relevant public-private partnerships, that cover the full innovation chain and follow an integrated approach to innovative transport solutions. Several activities are specifically intended to help bring results to the market: a programmatic approach to research and innovation, demonstration projects, market take-up actions and support for standardisation, regulation and innovative procurement strategies all serve this goal. In addition, using stakeholders' engagement and expertise will help bridge the gap between research results and their deployment in the transport sector.Investing in research and innovation for a greener, smarter and fully integrated reliable transport system will make an important contribution to the objectives of the Europe 2020 strategy and of its flagship initiative 'Innovation Union'. The activities will support the implementation of the White Paper ""Roadmap to a Single European Transport Area - Towards a competitive and resource efficient transport system"". They will also contribute to the policy goals outlined in the flagship initiatives 'Resource-efficient Europe', 'An Industrial Policy for the Globalisation Era' and 'Digital Agenda for Europe'. They will also interface with the relevant Joint Programming Initiatives.

Broad lines of the activities

The activities will be organised in such a way as to allow for an integrated and mode-specific approach as appropriate. Multiannual visibility and continuity will be necessary in order to take into account the specificities of each transport mode and the holistic nature of challenges, as well as the relevant Strategic Research and Innovation Agendas of the transport-related European Technology Platforms.

(a) Resource-efficient transport that respects the environment

The aim is to minimise transport systems' impact on climate and the environment (including noise and air pollution) by improving their quality and efficiency in the use of natural resources and fuel, and by reducing greenhouse gas emissions and dependence on fossil fuels.The focus of activities shall be to reduce resource consumption, particularly fossil fuels, greenhouse gas emissions and noise levels, as well as to improve transport and vehicle efficiency; to accelerate the development, manufacturing and deployment of a new generation of clean (electric, hydrogen and other low or zero emission) vehicles, including through breakthroughs and optimisation in engines, energy storage and infrastructure; to explore and exploit the potential of alternative and sustainable fuels and innovative and more efficient propulsion and operating systems, including fuel infrastructure and charging; to optimise the planning and use of infrastructures, by means of intelligent transport systems, logistics, and smart equipment; and to increase the use of demand management and public and non-motorised transport, and of intermodal mobility chains, particularly in urban areas. Innovation aimed at achieving low or zero emissions in all modes of transport will be encouraged.

(b) Better mobility, less congestion, more safety and security

The aim is to reconcile the growing mobility needs with improved transport fluidity, through innovative solutions for seamless, intermodal, inclusive, accessible, affordable, safe, secure, healthy, and robust transport systems.The focus of activities shall be to reduce congestion, improve accessibility, interoperability and passenger choices, and to match user needs by developing and promoting integrated door-to-door transport, mobility management and logistics; to enhance intermodality and the deployment of smart planning and management solutions; and to drastically reduce the occurrence of accidents and the impact of security threats.

(c) Global leadership for the European transport industry

The aim is to reinforce the competitiveness and performance of European transport manufacturing industries and related services (including logistic processes, maintenance, repair, retrofitting and recycling) while retaining areas of European leadership (e.g. aeronautics).The focus of activities shall be to develop the next generation of innovative air, waterborne and land transport means, ensure sustainable manufacturing of innovative systems and equipment and to prepare the ground for future transport means, by working on novel technologies, concepts and designs, smart control systems and interoperable standards, efficient production processes, innovative services and certification procedures, shorter development times and reduced lifecycle costs without compromising operational safety and security.

(d) Socio-economic and behavioural research and forward-looking activities for policy making

The aim is to support improved policy making which is necessary to promote innovation and meet the challenges raised by transport and the societal needs related to it.The focus of activities shall be to improve the understanding of transport-related socio-economic impacts, trends and prospects, including the evolution of future demand, and provide policy makers with evidence-based data and analyses. Attention will also be paid to the dissemination of results emerging from these activities.";"";"H2020";"H2020-EU.3.";"";"";"2014-09-22 20:47:00";"664357" +"H2020-EU.3.4.";"de";"H2020-EU.3.4.";"";"";"GESELLSCHAFTLICHE HERAUSFORDERUNGEN - Intelligenter, umweltfreundlicher und integrierter Verkehr";"Transport";"

GESELLSCHAFTLICHE HERAUSFORDERUNGEN - Intelligenter, umweltfreundlicher und integrierter Verkehr

Einzelziel

Einzelziel ist ein ressourcenschonendes, klima- und umweltfreundliches, sicheres und nahtloses europäisches Verkehrssystem zum Nutzen aller Bürger, der Wirtschaft und der Gesellschaft.Europa muss den zunehmenden Mobilitätsbedarf der Bürger und den steigenden Transportbedarf für Waren und den sich aufgrund neuer demografischer und gesellschaftlicher Herausforderungen ändernden Bedarf mit den Anforderungen an die wirtschaftliche Leistungsfähigkeit, an eine Gesellschaft mit niedrigen CO2-Emissionen und an eine energieeffiziente Wirtschaft, die gegen den Klimawandel gewappnet ist, in Einklang bringen. Trotz seines Wachstums muss der Verkehrssektor seine Treibhausgasemissionen und anderen umweltschädlichen Folgen deutlich reduzieren, seine Abhängigkeit von Öl und anderen fossilen Brennstoffen durchbrechen und dabei ein hohes Maß an Effizienz und Mobilität aufrechterhalten sowie den territorialen Zusammenhalt fördern.Eine nachhaltige Mobilität lässt sich nur durch tiefgreifende Veränderungen im Verkehrssystem (auch im öffentlichen Verkehr) erreichen, für die Durchbrüche in der Verkehrsforschung, weitreichende Innovationen und eine kohärente europaweite Verwirklichung umweltfreundlicherer, sicherer, zuverlässigerer und intelligenterer Verkehrslösungen den Anstoß geben.Forschung und Innovation müssen gezielte und zeitnahe Fortschritte für alle Verkehrsträger bewirken, die die wichtigsten Ziele der Unionspolitik unterstützen und dabei die Wettbewerbsfähigkeit der Wirtschaft stärken, den Übergang zu einer energieeffizienten Wirtschaft mit niedrigem CO2-Ausstoß, die gegen den Klimawandel gewappnet ist, fördern und die globale Marktführerschaft sowohl des Dienstleistungssektors als auch der Fertigungsindustrie aufrechterhalten.Es sind zwar beträchtliche Investitionen für Forschung, Innovation und Realisierung notwendig, aber wenn die Nachhaltigkeit des Verkehrs- und Mobilitätssystems als Ganzes nicht verbessert und die europäische Marktführerschaft bei Verkehrstechnologien nicht aufrechterhalten wird, entstehen langfristig unannehmbar hohe gesellschaftliche, ökologische und wirtschaftliche Kosten mit negativen Folgen für die Beschäftigung und das langfristige Wirtschaftswachstum in Europa.

Begründung und Mehrwert für die Union

Der Verkehr ist ein wichtiger Faktor für Wettbewerbsfähigkeit und Wirtschaftswachstum in Europa. Er gewährleistet die für einen integrierten europäischen Binnenmarkt, den territorialen Zusammenhalt und eine offene und integrative Gesellschaft notwendige Mobilität von Menschen und Gütern. Er ist hinsichtlich der Industriekapazität und der Dienstleistungsqualität einer der wichtigsten Aktivposten Europas und spielt eine führende Rolle auf vielen Weltmärkten. Auf die Verkehrsindustrie und die Herstellung von Verkehrsausrüstung entfallen zusammengenommen 6,3 % des BIP der Union. Der Gesamtbeitrag des Verkehrssektors zur Unionswirtschaft ist sogar noch größer, wenn man Handel, Dienstleistungen und die Mobilität der Arbeitnehmer berücksichtigt. Gleichzeitig sieht sich die europäische Verkehrsindustrie einem verschärften Wettbewerb aus anderen Teilen der Welt ausgesetzt. Damit Europa auch in Zukunft seinen Wettbewerbsvorsprung halten kann und um Schwachstellen unseres derzeitigen Verkehrssystems zu beseitigen, sind technologische Durchbrüche notwendig.Der Verkehrssektor ist einer der Hauptverursacher der Treibhausgasemissionen, er generiert bis zu einem Viertel aller Emissionen. Er ist auch ein Hauptverursacher anderer Luftverschmutzungsprobleme. Der Verkehr hängt nach wie vor zu 96 % von fossilen Kraftstoffen ab. Es gilt, seine Auswirkungen auf die Umwelt durch gezielte technische Verbesserungen zu reduzieren, wobei zu bedenken ist, dass bei jedem Verkehrsmittel andere Probleme auftreten und jedes Verkehrsmittel andere Technologie-Integrationszyklen aufweist. Überdies stellt das hohe Verkehrsaufkommen ein wachsendes Problem dar – es mangelt an ausreichend intelligenten Systemen und an attraktiven Alternativen für einen Wechsel zu nachhaltigeren Verkehrsträgern; die Zahl der tödlichen Verkehrsunfälle ist mit 34 000 pro Jahr in der Union nach wie vor auf einem dramatisch hohen Niveau, und Bürger und Unternehmen erwarten ein allgemein zugängliches, sicheres und zuverlässiges Verkehrssystem. Die Situation in den Städten ist eine besondere Herausforderung für die Nachhaltigkeit des Verkehrs und für eine bessere Lebensqualität, bietet gleichzeitig aber auch Chancen.Schätzungen gehen davon aus, dass innerhalb weniger Jahrzehnte die Zunahme des Verkehrs in Europa zu einem Kollaps führen wird, dessen wirtschaftliche und gesellschaftliche Kosten untragbar sein und mit negativen Auswirkungen für Wirtschaft und Gesellschaft einhergehen werden. Wenn sich die Tendenzen der Vergangenheit in der Zukunft fortsetzen, dürften sich die Personenkilometer in den nächsten 40 Jahren verdoppeln, wobei sie im Luftverkehr doppelt so schnell zunehmen. Bis 2050 werden die CO2-Emissionen um 35 % steigen. Die Kosten der Verkehrsüberlastung steigen um etwa 50 % auf nahezu 200 Mrd. EUR jährlich. Bei den externen Kosten für Unfälle wird mit einem Anstieg um etwa 60 Mrd. EUR im Vergleich zum Jahr 2005 gerechnet.Ein ""weiter so wie bisher"" ist daher keine Option. Forschung und Innovation, die sich an den politischen Zielen orientieren und sich auf die großen Herausforderungen konzentrieren, werden einen erheblichen Beitrag dazu leisten, bis 2050 die Unionsziele zu erreichen, d. h. die globale Erwärmung auf 2° C zu begrenzen, die verkehrsbedingten CO2-Emissionen um 60 % zu reduzieren, die Verkehrsüberlastung und die Unfallkosten deutlich zu senken und tödliche Unfälle quasi vollständig zu vermeiden.Da die Probleme der Umweltverschmutzung, des hohen Verkehrsaufkommens und der Sicherheit in der gesamten Union auftreten, bedarf es einer europaweiten Kooperation, um hierauf Antworten zu geben. Ein umweltfreundlicheres, sichereres, zugänglicheres und effizienteres intermodales und multimodales Verkehrssystem in der Union, Klimaschutz, eine Verbesserung der Ressourceneffizienz und die Festigung der Führungsposition Europas auf den Weltmärkten für verkehrsrelevante Produkte und Dienstleistungen lassen sich nur erreichen, wenn Entwicklung und Einführung neuer Technologien und innovativer Lösungen für Fahrzeuge, Infrastrukturen und Verkehrsmanagement beschleunigt werden. Diese Ziele lassen sich durch fragmentierte nationale Anstrengungen allein nicht verwirklichen.Die Unionsförderung für Verkehrsforschung und -innovation wird die Maßnahmen der Mitgliedstaaten ergänzen und sich auf Maßnahmen mit einem klaren europäischen Mehrwert konzentrieren. Daher liegt das Augenmerk auf Schwerpunktbereichen, die den europäischen politischen Zielen entsprechen, für die eine kritische Masse von Anstrengungen notwendig ist, bei denen es um europaweite, interoperable oder multimodale integrierte verkehrstechnische Lösungen geht, die zur Beseitigung von Engpässen im Verkehrssystem beitragen können, oder bei denen die transnationale Bündelung der Bemühungen und eine bessere Nutzung und wirksame Verbreitung vorhandener Forschungsergebnisse dazu beitragen kann, die Risiken von Investitionen in die Forschung zu verringern, gemeinsame Normen voranzubringen und die Vermarktung der Forschungsergebnisse zu beschleunigen.Forschungs- und Innovationstätigkeiten beinhalten eine große Bandbreite von Initiativen, einschließlich einschlägiger öffentlich-privater Partnerschaften, die sich auf die gesamte Innovationskette erstrecken und einen integrierten Ansatz für innovative Verkehrslösungen verfolgen. Speziell für die Vermarktung der Ergebnisse sind mehrere Tätigkeiten vorgesehen: Ein programmatisches Konzept für Forschung und Innovation, Demonstrationsprojekte, Maßnahmen zur Markteinführung sowie Unterstützung von Strategien für Normung, Regulierung und innovative Auftragsvergabe werden diesem Ziel dienen. Auch werden Engagement und Sachverstand der interessierten Kreise dazu beitragen, die Lücke zwischen den Forschungsergebnissen und deren Einsatz im Verkehrssektor zu schließen.Investitionen in Forschung und Innovation im Hinblick auf ein umweltfreundlicheres, intelligenteres und vollständig integriertes zuverlässiges Verkehrssystem werden einen wichtigen Beitrag zu den Zielen der Strategie Europa 2020 und seiner Leitinitiative ""Innovationsunion"" leisten. Die Tätigkeiten unterstützen die Umsetzung des Weißbuchs ""Fahrplan zu einem einheitlichen europäischen Verkehrsraum – Hin zu einem wettbewerbsorientierten und ressourcenschonenden Verkehrssystem"", mit dem ein einheitlicher europäischer Verkehrsraum angestrebt wird. Ferner werden sie zu den politischen Zielen der Leitinitiativen ""Ressourcenschonendes Europa"", ""Eine Industriepolitik für das Zeitalter der Globalisierung"" und ""Eine digitale Agenda für Europa"" beitragen. Sie werden zudem mit den Initiativen für die gemeinsame Planung verzahnt.

Einzelziele und Tätigkeiten in Grundzügen

Die Tätigkeiten werden so organisiert, dass gegebenenfalls ein integriertes und verkehrsträgerspezifisches Konzept verfolgt werden kann. Es gilt, mehrere Jahre lang Außenwirkung und Kontinuität zu gewährleisten, so dass die Besonderheiten jedes einzelnen Verkehrsträgers und die ganzheitliche Natur der Probleme sowie die einschlägigen strategischen Forschungs- und Innovationsagenden der transportbezogenen europäischen Technologieplattformen berücksichtigt werden können.

(a) Ressourcenschonender umweltfreundlicher Verkehr

Ziel ist die Verringerung der Auswirkungen der Verkehrssysteme auf Klima und Umwelt (einschließlich Lärm und Luftverschmutzung) durch Qualitäts- und Effizienzsteigerungen bei der Nutzung natürlicher Ressourcen und Kraftstoffe und durch die Verringerung der Treibhausgasemissionen und der Abhängigkeit von fossilen Kraftstoffen.Schwerpunkt der Tätigkeiten sind die Verringerung des Ressourcenverbrauchs (insbesondere des Verbrauchs fossiler Kraftstoffe), der Treibhausgasemissionen und des Geräuschpegels sowie die Verbesserung der Verkehrs- und Fahrzeugeffizienz, die Beschleunigung von Entwicklung, Herstellung und Einsatz einer neuen Generation von sauberen (elektrischen, wasserstoffbetriebenen oder sonstigen emissionsarmen oder -freien) Fahrzeugen sowie Durchbrüche und Optimierungsbemühungen bei Motoren, Energiespeicherung und Infrastruktur, die Erforschung und Nutzung des Potenzials alternativer und nachhaltiger Kraftstoffe sowie innovativer und effizienterer Antriebs- und Betriebssysteme, einschließlich der Infrastruktur für Kraftstoffabgabe und Aufladung, die optimierte Planung und Nutzung der Infrastrukturen mit Hilfe intelligenter Verkehrssysteme, Logistik und Ausrüstungen sowie – insbesondere in Stadtgebieten – die verstärkte Nutzung von Nachfragemanagement sowie öffentlichem und nichtmotorisiertem Verkehr und intermodalen Mobilitätsketten Innovationen, die auf eine Reduzierung von Emissionen oder vollständige Emissionsfreiheit abzielen, werden in sämtlichen Verkehrsbereichen gefördert.

(b) Größere Mobilität, geringeres Verkehrsaufkommen, größere Sicherheit

Ziel ist es, den wachsenden Mobilitätsbedarf mit einem besseren Verkehrsfluss in Einklang zu bringen und hierfür innovative Lösungen für nahtlose, intermodale, integrative, zugängliche, erschwingliche, sichere, gesunde und belastbare Verkehrssysteme zu erforschen.Schwerpunkte der Tätigkeiten sind eine Verringerung des Verkehrsaufkommens, ein besserer Zugang, eine bessere Interoperabilität und mehr Auswahlmöglichkeiten für die Fahrgäste, die Befriedigung der Bedürfnisse der Nutzer durch Entwicklung und Unterstützung von integrierter Beförderung, Mobilitätsmanagement und Logistik von Haus zu Haus, die Verbesserung der Intermodalität und der Einsatz intelligenter Planungs- und Managementlösungen, um die Zahl der Unfälle und die Folgen von Sicherheitsbedrohungen drastisch zu reduzieren.

(c) Weltweit führende Rolle der europäischen Verkehrsindustrie

Ziel ist die Stärkung der Wettbewerbs- und Leistungsfähigkeit der europäischen Hersteller im Verkehrssektor und zugehöriger Dienstleistungen (einschließlich Logistikprozessen, Wartung, Reparatur, Nachrüstung und Recycling) bei Aufrechterhaltung der Führungsposition Europas in bestimmten Bereichen (z. B. Luftfahrtsektor).Schwerpunkt der Tätigkeiten ist die Entwicklung der nächsten Generation innovativer Verkehrsmittel für Luft-, Wasser- und Landverkehr, die nachhaltige Fertigung innovativer Systeme und Ausrüstungen und die Grundlagenarbeit für Verkehrsträger der Zukunft durch neuartige Technologien, Konzepte und Bauformen, intelligente Kontrollsysteme und interoperable Normen, effiziente Produktionsprozesse, innovative Dienstleistungen und Zertifizierungsverfahren, kürzere Entwicklungszeiten und geringere Lebenszykluskosten, ohne dass bei der Betriebssicherheit Abstriche gemacht werden.

(d) Sozioökonomische Forschung, Verhaltensforschung und vorausschauende Tätigkeiten für die politische Entscheidungsfindung

Ziel ist die Erleichterung der politischen Entscheidungsfindung als notwendige Voraussetzung für die Förderung von Innovation und die Bewältigung der durch den Verkehr bedingten Herausforderungen und der entsprechenden gesellschaftlichen Anforderungen.Schwerpunkt der Tätigkeiten ist ein besseres Verständnis der verkehrsbezogenen sozioökonomischen Auswirkungen, Trends und Prognosen – auch der Entwicklung der künftigen Nachfrage – sowie die Versorgung der politischen Entscheidungsträger mit evidenzbasierten Daten und Analysen. Es wird ebenfalls ein Augenmerk auf die Verbreitung der Ergebnisse aus diesen Tätigkeiten gelegt werden.";"";"H2020";"H2020-EU.3.";"";"";"2014-09-22 20:47:00";"664357" +"H2020-EU.3.4.";"es";"H2020-EU.3.4.";"";"";"RETOS DE LA SOCIEDAD - Transporte inteligente, ecológico e integrado";"Transport";"

RETOS DE LA SOCIEDAD - Transporte inteligente, ecológico e integrado

Objetivo específico

El objetivo específico es lograr un sistema europeo de transporte que utilice eficientemente los recursos, sea respetuoso con el medio ambiente y el cambio climático, sea seguro y no presente discontinuidades, en beneficio de todos los ciudadanos, la economía y la sociedad.Europa debe reconciliar las crecientes necesidades de movilidad de sus ciudadanos y de sus bienes y las cambiantes necesidades provocadas por los nuevos retos demográficos y de la sociedad con los imperativos del rendimiento económico y los requisitos de una sociedad hipocarbónica y eficiente en materia de energía y una economía resistente al cambio climático. Pese a su crecimiento, el sector del transporte debe conseguir una sustancial reducción de los gases de efecto invernadero y otros impactos negativos sobre el medio ambiente, y romper su dependencia del petróleo y de otros combustibles fósiles, al tiempo que mantiene un elevado nivel de eficiencia y movilidad y promueve la cohesión territorial.La movilidad sostenible solo puede lograrse mediante un cambio radical en el sistema de transportes, incluido el transporte público, inspirado por avances decisivos en la investigación sobre transporte, la innovación de largo alcance y una aplicación coherente en toda Europa de soluciones de transporte más ecológicas, seguras e inteligentes.La investigación y la innovación deben aportar avances focalizados y oportunos para todas las modalidades de transporte que ayuden a alcanzar los objetivos clave de las políticas de la Unión, al tiempo que refuerzan la competitividad económica, respaldan la transición a una economía resistente al clima, energéticamente eficiente y de baja emisión de carbono y preservan el liderazgo en el mercado mundial, tanto de la industria de servicios como de la industria manufacturera.Aunque las inversiones necesarias en investigación, innovación y despliegue serán considerables, no mejorar la sostenibilidad y movilidad del sistema de transportes en su totalidad ni mantener el liderazgo tecnológico europeo en el ámbito del transporte generará unos costes sociales, ecológicos y económicos inaceptablemente elevados a largo plazo y consecuencias perjudiciales en el empleo y el crecimiento a largo plazo en Europa.

Justificación y valor añadido de la Unión

El transporte constituye un motor esencial de la competitividad y el crecimiento económico de Europa. Garantiza la movilidad de las personas y los bienes necesarios para un mercado único europeo integrado, la cohesión territorial y una sociedad inclusiva y abierta. Representa uno de los principales activos de Europa en términos de capacidad industrial y calidad de servicio, y desempeña un papel destacado en muchos mercados mundiales. La industria del transporte y la fabricación de equipos de transporte representan conjuntamente el 6,3 % del PIB de la Unión. La contribución global del sector del transporte a la economía de la Unión aún es mayor si se tiene en cuenta el comercio, los servicios y la movilidad de los trabajadores. Al mismo tiempo, la industria europea del transporte se enfrenta a una competencia cada vez más intensa procedente de otras partes del mundo. Resultarán necesarias unas tecnologías revolucionarias para garantizar en el futuro la ventaja competitiva de Europa y paliar los inconvenientes de nuestro actual sistema de transporte.El sector del transporte es uno de los principales responsables de las emisiones de gases de efecto invernadero, generando hasta una cuarta parte del total de emisiones. También constituye un contribuyente de gran magnitud a otros problemas de contaminación atmosférica. La dependencia de los combustibles fósiles del transporte aún sigue siendo del 96 %. Resulta fundamental reducir este impacto ambiental mediante mejoras tecnológicas selectivas, teniendo en cuenta que cada modo de transporte se enfrenta a retos variables y se caracteriza por unos ciclos de integración de la tecnología distintos. Por otra parte, la congestión es un problema cada vez más importante; los sistemas todavía no son suficientemente inteligentes; las alternativas para pasar a modos de transporte más sostenibles no siempre son atractivas; el número de víctimas mortales de accidentes de tráfico sigue siendo dramáticamente elevado (34 000 al año en la Unión); los ciudadanos y las empresas esperan un sistema de transportes accesible para todos, seguro y cómodo. El contexto urbano presenta retos específicos y brinda oportunidades para la sostenibilidad del transporte y para una mejor calidad de vida.Dentro de pocas décadas el crecimiento esperado del transporte conducirá a la parálisis del tráfico europeo y hará insoportables sus costes económicos y su impacto social, con repercusiones económicas y sociales desastrosas. Si las tendencias del pasado se mantienen en el futuro, se prevé que la cifra de pasajeros-kilómetro se duplique en los próximos 40 años y que crezca dos veces más rápido para el transporte aéreo. Las emisiones de CO2 aumentarán un 35 % para 2050. Los costes de la congestión aumentarían en torno al 50 %, acercándose a los 200 000 millones de euros anuales. Los costes externos de los accidentes aumentarían en alrededor de 60 000 millones de euros con respecto a 2005.En consecuencia, cruzarse de brazos no es una opción. La investigación y la innovación, impulsadas por los objetivos políticos y centrada en los principales retos, contribuirán sustancialmente a alcanzar los objetivos de la Unión de limitar el aumento de la temperatura mundial a 2 °C, recortar en un 60 % las emisiones de CO2 procedentes del transporte, reducir drásticamente la congestión y los costes de los accidentes y erradicar prácticamente los accidentes mortales de carretera de aquí a 2050.Los problemas de contaminación, congestión y seguridad son comunes a toda la Unión y exigen respuestas en colaboración a escala europea. Acelerar el desarrollo y despliegue de nuevas tecnologías y soluciones innovadoras para los vehículos, las infraestructuras y la gestión del transporte resultará fundamental para lograr un sistema de transporte más seguro, accesible, eficiente, intermodal y multimodal en la Unión; para obtener los resultados necesarios para mitigar el cambio climático y mejorar la eficiencia de los recursos; para mantener el liderazgo europeo en los mercados mundiales de productos y servicios relacionados con el transporte. Estos objetivos no pueden lograrse solamente mediante fragmentados esfuerzos nacionales.La financiación a nivel de la Unión de la investigación y la innovación sobre transporte complementará las actividades de los Estados miembros centrándose en actividades con un claro valor añadido europeo. Esto significa que se hará hincapié en las áreas prioritarias que responden a los objetivos de la política europea; cuando sea necesaria una masa crítica de esfuerzo; cuando las soluciones de transporte europeo integrado y multimodal interoperables puedan ayudar a reducir los estrangulamientos en el sistema de transporte; o cuando la agrupación de los esfuerzos a nivel transnacional y el mejor aprovechamiento y la difusión efectiva de las pruebas disponibles aportadas por la investigación pueden reducir los riesgos de la inversión en investigación, abrir camino a normas comunes y acortar los plazos de comercialización de los resultados de la investigación.Las actividades de investigación e innovación incluirán una amplia gama de iniciativas, entre las que figurarán asociaciones público-privadas, que cubran toda la cadena de la innovación y sigan un planteamiento integrado para lograr soluciones innovadoras para el transporte. Varias actividades están específicamente destinadas a facilitar la llegada al mercado de los resultados: un enfoque programático con respecto a la investigación y la innovación, proyectos de demostración, acciones de absorción por el mercado y apoyo a la normalización, la regulación y las estrategias de contratación innovadoras están al servicio de este objetivo. Además, la utilización de los conocimientos y el compromiso de las partes interesadas ayudarán a salvar la distancia entre los resultados de la investigación y su despliegue en el sector del transporte.Invertir en investigación e innovación para conseguir un sistema de transporte fiable, más ecológico e inteligente y completamente integrado y seguro constituirá una aportación importante a los objetivos de Europa 2020 de crecimiento inteligente, sostenible e integrador, así como a los objetivos de la iniciativa emblemática «Unión por la innovación». Las actividades prestarán apoyo a la aplicación del Libro Blanco titulado «Hoja de ruta hacia un espacio único europeo de transporte: por una política de transportes competitiva y sostenible». También contribuirán al logro de los objetivos políticos descritos en las iniciativas emblemáticas ""Una Europa que utilice eficazmente los recursos"", ""Una política industrial para la era de la mundialización"" y ""Una Agenda Digital para Europa"". Se vincularán asimismo con las Iniciativas de Programación Conjunta pertinentes.

Líneas generales de las actividades

Las actividades se organizarán de tal manera que permitan un planteamiento integrado y específico por modos, según proceda. Será necesario lograr una visibilidad y continuidad de carácter plurianual para tener en cuenta las especificidades de los distintos modos de transporte y la naturaleza holística de los retos, así como las Agendas de Investigación estratégica e Innovación pertinentes de las Plataformas Tecnológicas Europeas en materia de transporte.

(a) Un transporte eficiente en el uso de los recursos y que respeta el medio ambiente

El objetivo es minimizar el impacto del sistema de transportes en el clima y el medio ambiente (incluidos el ruido y la contaminación atmosférica) mejorando su calidad y eficiencia en el uso de los recursos naturales y del combustible y reduciendo las emisiones de gases con efecto invernadero y su dependencia de los combustibles fósiles.El propósito de las actividades será reducir el consumo de recursos, particularmente de combustibles fósiles, y las emisiones de gases de invernadero y los niveles de ruido, así como mejorar la eficiencia del transporte y acelerar el desarrollo, fabricación y despliegue de una nueva generación de automóviles limpios (eléctricos, de hidrógeno y otros de emisiones bajas o nulas), incluido mediante avances importantes y optimización de los motores, el almacenamiento de energía y la infraestructura; explorar y explotar el potencial de los combustibles alternativos y sostenibles y los sistemas de propulsión y operativos innovadores y más eficientes, incluida la infraestructura del combustible y de la carga; optimizar la planificación y la utilización de las infraestructuras mediante sistemas de transporte inteligentes, logística y equipos inteligentes; e incrementar el uso de la gestión de la demanda y el transporte público y no motorizado y las cadenas de movilidad intermodales, en particular en las zonas urbanas. Se deben fomentar las innovaciones destinadas a lograr emisiones bajas o nulas en todos los modos de transporte.

(b) Mejor movilidad, menor congestión, mayor seguridad

El objetivo es reconciliar las crecientes necesidades de movilidad con una mayor fluidez del transporte, a través de soluciones innovadoras para unos sistemas de transporte sin discontinuidades intermodales, inclusivos, accesibles, asequibles, seguros y sólidos.El propósito de las actividades será reducir la congestión, mejorar la accesibilidad y las posibilidades de elección de los pasajeros en materia de interoperabilidad y satisfacer las posibilidades de elección de los usuarios impulsando y promoviendo el transporte, la gestión de la movilidad y la logística puerta a puerta integrados; aumentar la intermodalidad y el despliegue de soluciones inteligentes de gestión y planificación; y reducir drásticamente el número de accidentes y el impacto de las amenazas a la seguridad.

(c) Liderazgo mundial para la industria europea del transporte

El objetivo es reforzar la competitividad y el rendimiento de las industrias europeas de fabricación para el transporte y servicios conexos (incluidos los procesos logísticos, el mantenimiento, reparación, modernización y reciclado) al tiempo que se conservar ámbitos de liderazgo europeo (como la aeronáutica).El propósito de las actividades será impulsar la próxima generación de medios de transporte aéreos, fluviales y terrestres innovadores, asegurar una fabricación sostenible de sistemas y equipos innovadores y preparar el terreno para los futuros medios de transporte, trabajando sobre nuevas tecnologías, conceptos y diseños, sistemas inteligentes de control y normas interoperables, procesos de producción eficientes, servicios y procedimientos de certificación innovadores, periodos de desarrollo más breves y costes del ciclo de vida inferiores sin poner en peligro la seguridad operativa.

(d) Investigación socioeconómica y de comportamiento y actividades de prospectiva para la formulación de políticas

El objetivo es apoyar la formulación de las políticas necesarias para promover la innovación y hacer frente a los retos que plantea el transporte y las correspondientes necesidades sociales.El propósito de las actividades será mejorar la comprensión de los impactos, tendencias y perspectivas socioeconómicas relacionadas con el transporte, incluida la evolución futura de la demanda, y facilitar a los responsables políticos datos factuales y análisis. Asimismo se prestará atención a la difusión de los resultados obtenidos merced a dichas actividades.";"";"H2020";"H2020-EU.3.";"";"";"2014-09-22 20:47:00";"664357" +"H2020-EU.3.4.";"fr";"H2020-EU.3.4.";"";"";"DÉFIS DE SOCIÉTÉ - Transports intelligents, verts et intégrés";"Transport";"

DÉFIS DE SOCIÉTÉ - Transports intelligents, verts et intégrés

Objectif spécifique

L'objectif spécifique est de parvenir à un système de transport européen économe en ressources, respectueux du climat et de l'environnement, sûr et continu au bénéfice de l'ensemble des citoyens, de l'économie et de la société.L'Europe doit concilier les besoins croissants de mobilité de ses citoyens et de ses marchandises et les besoins en évolution qui sont façonnés par les nouveaux défis démographiques et sociétaux avec les impératifs de performance économique et les exigences d'une société à faible émission de carbone et économe en énergie ainsi que d'une économie capable de s'adapter au changement climatique. En dépit de sa croissance, le secteur des transports doit parvenir à réduire sensiblement ses émissions de gaz à effet de serre et ses autres effets néfastes sur l'environnement et doit s'affranchir de sa dépendance au pétrole et aux autres combustibles fossiles, tout en conservant des niveaux élevés d'efficacité et de mobilité et en promouvant la cohésion territoriale.Une mobilité durable passe impérativement par un changement radical du système de transport, y compris les transports en commun, s'appuyant sur les progrès de la recherche dans le domaine des transports, sur des innovations de grande portée et sur une mise en œuvre cohérente, à l'échelle de l'Europe, de solutions de transport plus écologiques, plus sûres, plus fiables et plus intelligentes.La recherche et l'innovation doivent déboucher en temps utile sur des avancées ciblées pour tous les modes de transport qui contribueront à la réalisation des principaux objectifs stratégiques de l'Union, tout en favorisant sa compétitivité économique, en soutenant le passage à une économie à faible émission de carbone, efficace dans l'utilisation des ressources et capable de s'adapter au changement climatique et en préservant la primauté de l'Union sur le marché mondial tant pour le secteur des services que pour l'industrie manufacturière.Même si les investissements nécessaires dans les activités de recherche, d'innovation et de déploiement seront considérables, l'absence d'amélioration de la viabilité du système de transport et de mobilité dans son ensemble et la non-préservation de la primauté technologique européenne dans ce secteur auront à long terme des coûts sociaux, écologiques et économiques d'une ampleur inacceptable ainsi que des conséquences préjudiciables sur l'emploi et la croissance à long terme en Europe.

Justification et valeur ajoutée de l'Union

Les transports sont l'un des principaux moteurs de la compétitivité et de la croissance économiques de l'Europe. Ils garantissent la mobilité des personnes et des biens, indispensable à un marché unique européen intégré, à la cohésion territoriale et à une société ouverte et inclusive. Ils représentent l'un des principaux atouts de l'Europe du point de vue de la capacité industrielle et de la qualité des services, en jouant un rôle de premier plan dans de nombreux marchés mondiaux. Ensemble, le secteur des transports et celui de la fabrication d'équipements de transport représentent 6,3 % du PIB de l'Union. La contribution globale du secteur des transports à l'économie de l'Union est encore plus importante, compte tenu des échanges commerciaux, des services et de la mobilité des travailleurs. Dans le même temps, le secteur européen des transports est confronté à une concurrence de plus en plus féroce de la part d'autres régions du monde. Des percées technologiques s'imposeront pour assurer la compétitivité future de l'Europe et pour atténuer les faiblesses de notre système de transport actuel.Le secteur des transports est un grand émetteur de gaz à effet de serre et génère jusqu'à un quart de toutes les émissions. Il contribue également pour une large part à d'autres problèmes de pollution de l'air. Il dépend encore à 96 % des combustibles fossiles. Il est indispensable de réduire cet impact environnemental par des améliorations technologiques ciblées, tout en gardant à l'esprit que chaque mode de transport est confronté à des défis divers et se caractérise par des cycles d'intégration de technologies différents. En outre, les embouteillages représentent un problème croissant, les systèmes ne sont pas encore suffisamment intelligents, les solutions de substitution permettant une évolution vers des modes de transport plus durables ne sont pas toujours attractives, le nombre de tués sur les routes reste à un niveau dramatiquement élevé (34 000 personnes par an au sein de l'Union), et les citoyens comme les entreprises souhaitent que le système de transport soit sûr, sécurisé et accessible à tous. Le contexte urbain présente des difficultés spécifiques et ouvre des perspectives en matière de durabilité des transports et d'amélioration de la qualité de la vie.D'ici quelques décennies, les taux de croissance attendus du secteur des transports devraient entraîner la paralysie du trafic européen et rendre insupportables ses coûts économiques et son impact sur la société, ce qui aurait des répercussions négatives sur l'économie et la société. Si les tendances passées se maintiennent à l'avenir, le nombre de voyageurs-kilomètres devrait doubler au cours des quarante prochaines années, et connaître une croissance deux fois plus forte pour ce qui est du transport aérien. Les émissions de CO2 devraient augmenter de 35 % d'ici 2050. Les coûts liés à l'encombrement du trafic devraient progresser d'environ 50 % pour approcher les 200 milliards d'EUR annuellement. Les coûts externes des accidents devraient augmenter d'environ 60 milliards d'EUR par rapport à 2005.L'inaction n'est donc pas envisageable. La recherche et l'innovation, alimentées par les objectifs stratégiques et centrées sur les principaux défis, doivent contribuer de manière substantielle à la réalisation des objectifs de l'Union, qui consistent à limiter à 2 degrés l'élévation de la température mondiale, à réduire de 60 % les émissions de CO2 du secteur des transports, à diminuer considérablement les coûts liés à l'encombrement du trafic et aux accidents et à éradiquer presque totalement la mortalité sur les routes d'ici 2050.Les problèmes de pollution, d'encombrement, de sûreté et de sécurité sont communs à l'ensemble de l'Union et appellent des réponses collaboratives d'envergure européenne. Il sera essentiel d'accélérer le développement et le déploiement de nouvelles technologies et de solutions innovantes concernant les véhicules, les infrastructures et la gestion des transports pour mettre en place un système de transport intermodal et multimodal plus propre, plus sûr, plus sécurisé, accessible et plus efficace au sein de l'Union, pour engranger les résultats qui permettront d'atténuer le changement climatique et de progresser sur le plan de l'utilisation efficace des ressources, et pour préserver la primauté de l'Europe sur les marchés mondiaux des produits et services liés aux transports. Les initiatives nationales individuelles ne suffiront pas à réaliser ces objectifs.Un financement européen de la recherche et de l'innovation relatives aux transports complétera les activités des États membres en se concentrant sur les activités présentant une réelle valeur ajoutée européenne. L'accent sera donc mis sur les secteurs prioritaires qui correspondent aux objectifs stratégiques de l'Union, lorsqu'il convient de réunir une masse critique d'initiatives, que des solutions de transport interopérables ou multimodales intégrées à l'échelle de l'Union peuvent contribuer à éliminer les goulets d'étranglement dans le système de transport, ou que la centralisation des efforts à un niveau transnational ainsi qu'une meilleure utilisation et une diffusion efficace des résultats de la recherche disponibles permettent de réduire les risques liés aux investissements dans le domaine de la recherche, de poser les bases d'un exercice de normalisation conjoint et de réduire le délai de mise sur le marché des résultats de la recherche.Les activités de recherche et d'innovation incluent toute une série d'initiatives, y compris des partenariats en la matière entre les secteurs public et privé, couvrant l'ensemble de la chaîne de l'innovation et suivant une approche intégrée vis-à-vis des solutions de transport innovantes. Plusieurs d'entre elles sont spécifiquement destinées à faciliter la mise sur le marché des résultats de la recherche: approche programmatique de la recherche et de l'innovation, projets de démonstration, actions de commercialisation et soutien aux stratégies de normalisation, de réglementation et d'achat de solutions innovantes servent tous cet objectif. La mobilisation des différentes parties prenantes concernées et de leur expertise contribuera en outre à combler le fossé qui sépare l'obtention de résultats dans le domaine de la recherche et la mise en application de ces résultats dans le secteur des transports.L'investissement dans la recherche et l'innovation en faveur d'un système de transport plus écologique, plus intelligent, pleinement intégré et totalement fiable contribuera de manière décisive aux objectifs de la stratégie Europe 2020 ainsi qu'à ceux de son initiative phare «Une Union de l'innovation». Les activités appuieront la mise en œuvre du livre blanc intitulé «Feuille de route pour un espace européen unique des transports – Vers un système de transport compétitif et économe en ressources». Elles contribueront par ailleurs à réaliser les objectifs stratégiques définis dans les initiatives phares «Une Europe efficace dans l'utilisation des ressources», «Une politique industrielle intégrée à l'ère de la mondialisation» et «Une stratégie numérique pour l'Europe». Elles s'articuleront également avec les initiatives de programmation conjointe pertinentes.

Grandes lignes des activités

Les activités seront organisées de manière à permettre une approche intégrée et propre à chaque mode, selon qu'il convient. Il sera nécessaire d'assurer une visibilité et une continuité sur plusieurs années afin de tenir compte des spécificités propres à chaque mode de transport et de la nature globale des enjeux ainsi que des programmes stratégiques de recherche et d'innovation pertinents des plateformes technologiques européennes dans le domaine des transports.

(a) Des transports économes en énergie et respectueux de l'environnement

L'objectif est de limiter au maximum l'impact des systèmes de transports sur le climat et l'environnement (y compris la pollution sonore et la pollution atmosphérique) en améliorant leur qualité et en rendant ceux-ci plus économes en ressources naturelles et en carburants ainsi qu'en réduisant leurs émissions de gaz à effet de serre et leur dépendance vis-à-vis des combustibles fossiles.Les activités visent prioritairement à réduire la consommation de ressources, en particulier les combustibles fossiles, les émissions de gaz à effet de serre et les niveaux de bruit ainsi qu'à améliorer l'efficacité énergétique des transports et des véhicules; à accélérer le développement, la fabrication et le déploiement d'une nouvelle génération de véhicules propres (électriques ou à l'hydrogène et autres véhicules à émissions faibles ou nulles), notamment grâce à des avancées et à une optimisation sur le plan des moteurs, du stockage d'énergie et des infrastructures; à étudier et à exploiter le potentiel des carburants durables et de substitution et des systèmes de propulsion et d'exploitation innovants et plus efficaces, y compris l'infrastructure de distribution des carburants et les techniques de charge; à optimiser la planification et l'utilisation des infrastructures au moyen de systèmes de transport et d'équipements intelligents ainsi que de la logistique; et à accroître le recours à la gestion de la demande et aux transports publics et non motorisés ainsi qu'aux chaînes de mobilité intermodale, en particulier dans les zones urbaines. L'innovation visant à parvenir à des émissions faibles ou nulles dans tous les modes de transport sera encouragée.

(b)Plus de mobilité, moins d'encombrement, plus de sûreté et de sécurité

L'objectif est de concilier les besoins de mobilité croissants avec une plus grande fluidité des transports, grâce à des solutions innovantes en faveur de systèmes de transport cohérents, intermodaux, inclusifs, accessibles, sûrs, sécurisés, sains, solides et d'un coût abordable.Les activités visent avant tout à réduire les encombrements, à améliorer l'accessibilité, l'interopérabilité et les choix laissés aux passagers, et à répondre aux besoins des utilisateurs en développant et en promouvant les transports porte-à-porte intégrés, la gestion de la mobilité et la logistique; à renforcer l'intermodalité et le déploiement de solutions de planification et de gestion intelligentes; et à réduire considérablement le nombre d'accidents et l'impact des menaces en matière de sûreté.

(c) Primauté sur la scène mondiale pour l'industrie européenne des transports

L'objectif est de renforcer la compétitivité et la performance des constructeurs européens d'équipements de transport et des services associés (y compris les processus logistiques, l'entretien, la réparation, la conversion et le recyclage) tout en maintenant le rôle prépondérant que joue l'Europe dans certains domaines (par exemple, l'aéronautique).Les activités visent avant tout à mettre au point la prochaine génération de moyens de transport aériens, maritimes et terrestres innovants, à assurer la fabrication durable de systèmes et d'équipements innovants et à préparer le terrain pour de futurs moyens de transport, en travaillant sur de nouveaux concepts et de nouvelles conceptions et sur des technologies originales, des systèmes de contrôle intelligents et des normes interopérables, des procédés de fabrication efficaces, des services innovants et des procédures de certification, des délais de développement plus courts et des coûts réduits tout au long du cycle de vie sans compromettre la sécurité et la sûreté opérationnelles.

(d) Recherche socio-économique et comportementale et activités de prospective en appui à la prise de décisions

L'objectif est de contribuer à l'amélioration de la prise de décisions, ce qui est indispensable afin de promouvoir l'innovation, de relever les défis liés aux transports et de répondre aux besoins de société qui y sont liés.Les activités viseront avant tout à assurer une meilleure compréhension des répercussions, des tendances et des perspectives socio-économiques liées aux transports, y compris l'évolution de la demande future, et à fournir aux décideurs politiques des données et des analyses fondées sur des éléments factuels. Une attention particulière sera également accordée à la diffusion des résultats produits par ces activités.";"";"H2020";"H2020-EU.3.";"";"";"2014-09-22 20:47:00";"664357" +"H2020-EU.1.4.1.2.";"en";"H2020-EU.1.4.1.2.";"";"";"Integrating and opening existing national and regional research infrastructures of European interest";"";"";"";"H2020";"H2020-EU.1.4.1.";"";"";"2014-09-22 20:39:53";"664127" +"H2020-EU.3.3.2.3.";"en";"H2020-EU.3.3.2.3.";"";"";"Develop competitive and environmentally safe technologies for CO2 capture, transport, storage and re-use";"";"";"";"H2020";"H2020-EU.3.3.2.";"";"";"2014-09-22 20:46:23";"664337" +"H2020-EU.3.2.3.";"de";"H2020-EU.3.2.3.";"";"";"Nachhaltiger und wettbewerbsfähiger Agrar- und Lebensmittelsektor für sichere und gesunde Ernährung";"Potential of aquatic living resources";"

Nachhaltiger und wettbewerbsfähiger Agrar- und Lebensmittelsektor für sichere und gesunde Ernährung

Ziel ist die Bewirtschaftung, nachhaltige Nutzung und Erhaltung aquatischer Bioressourcen mit dem Ziel einer Maximierung des gesellschaftlichen und wirtschaftlichen Nutzens der Meere, der offenen See und der Binnengewässer Europas bei gleichzeitigem Schutz der biologischen Vielfalt. Schwerpunkt der Tätigkeiten ist ein optimaler Beitrag zur Lebensmittel-Versorgungssicherheit durch Entwicklung einer nachhaltigen und umweltfreundlichen Fischerei, die nachhaltige Bewirtschaftung der Ökosysteme unter Bereitstellung von Gütern und Dienstleistungen und eine im Rahmen der Weltwirtschaft wettbewerbsfähige und umweltfreundliche europäischen Aquakultur sowie die Förderung mariner und maritimer Innovationen mit Hilfe der Biotechnologie als Motor für ein intelligentes ""blaues"" Wachstum.";"";"H2020";"H2020-EU.3.2.";"";"";"2014-09-22 20:45:11";"664301" +"H2020-EU.3.2.3.";"en";"H2020-EU.3.2.3.";"";"";"Unlocking the potential of aquatic living resources";"Potential of aquatic living resources";"

Unlocking the potential of aquatic living resources

The aim is to manage, sustainably exploit and maintain aquatic living resources to maximise social and economic benefits/returns from Europe's oceans, seas and inland waters while protecting biodiversity. The activities shall focus on an optimal contribution to secure food supplies by developing sustainable and environmentally friendly fisheries, on sustainable management of ecosystems providing goods and services, on competitive as well as environmentally friendly European aquaculture in the context of the global economy, and on boosting marine and maritime innovation through biotechnology to fuel smart ""blue"" growth.";"";"H2020";"H2020-EU.3.2.";"";"";"2014-09-22 20:45:11";"664301" +"H2020-EU.3.2.3.";"es";"H2020-EU.3.2.3.";"";"";"Desbloquear el potencial de los recursos acuáticos vivos";"Potential of aquatic living resources";"

Desbloquear el potencial de los recursos acuáticos vivos

El objetivo es gestionar, explotar de forma sostenible y mantener los recursos acuáticos vivos para maximizar los beneficios y la rentabilidad sociales y económicos de los océanos, mares y aguas continentales europeos, al tiempo que se protege la biodiversidad. Las actividades se centrarán en una contribución óptima al abastecimiento seguro de alimentos desarrollando una pesca sostenible y respetuosa del medio ambiente, una gestión sostenible de los ecosistemas que faciliten bienes y servicios, una acuicultura europea competitiva a la vez que respetuosa del medio ambiente en el contexto de la economía mundial, así como en el fomento de la innovación marina y marítima mediante la biotecnología para propulsar un crecimiento ""azul"" inteligente.";"";"H2020";"H2020-EU.3.2.";"";"";"2014-09-22 20:45:11";"664301" +"H2020-EU.3.2.3.";"fr";"H2020-EU.3.2.3.";"";"";"Exploiter le potentiel des ressources aquatiques vivantes";"Potential of aquatic living resources";"

Exploiter le potentiel des ressources aquatiques vivantes

L'objectif est de gérer, d'exploiter de manière durable et de préserver ces ressources de façon à maximiser les retombées et les bénéfices économiques et sociaux générés par les océans, les mers et les eaux intérieures de l'Europe tout en protégeant la biodiversité. Les activités se concentrent sur la meilleure façon de contribuer à la sécurité de l'approvisionnement en denrées alimentaires dans le contexte de l'économie mondiale, en développant une pêche durable et écologique, une gestion durable des écosystèmes fournissant des biens et des services ainsi qu'une aquaculture européenne compétitive et respectueuse de l'environnement, ainsi que sur la promotion de l'innovation marine et maritime grâce aux biotechnologies, en vue d'alimenter une croissance intelligente et «bleue».";"";"H2020";"H2020-EU.3.2.";"";"";"2014-09-22 20:45:11";"664301" +"H2020-EU.3.2.3.";"pl";"H2020-EU.3.2.3.";"";"";"Uwolnienie potencjału wodnych zasobów biologicznych";"Potential of aquatic living resources";"

Uwolnienie potencjału wodnych zasobów biologicznych

Celem jest gospodarowanie, zrównoważone wykorzystywanie i utrzymanie wodnych zasobów biologicznych w celu maksymalizacji społecznych i gospodarczych korzyści i zysków z oceanów, mórz i wód śródlądowych Europy przy zachowaniu bioróżnorodności. Działania mają skupiać się na optymalizacji wkładu w bezpieczne zaopatrzenie w żywność poprzez rozwój rybołówstwa zrównoważonego i przyjaznego dla środowiska, na zrównoważonym gospodarowaniu ekosystemami będącymi źródłem towarów i usług oraz konkurencyjnej i przyjaznej dla środowiska europejskiej akwakultury w kontekście gospodarki globalnej, a także wspomaganiu innowacji morskich za pomocą biotechnologii w celu stymulowania inteligentnego „niebieskiego wzrostu”.";"";"H2020";"H2020-EU.3.2.";"";"";"2014-09-22 20:45:11";"664301" +"H2020-EU.3.2.3.";"it";"H2020-EU.3.2.3.";"";"";"Liberare il potenziale delle risorse biologiche acquatiche";"Potential of aquatic living resources";"

Liberare il potenziale delle risorse biologiche acquatiche

L'obiettivo è quello di gestire, sfruttare in modo sostenibile e mantenere le risorse acquatiche viventi al fine di massimizzare il rendimento e i vantaggi sociali ed economici degli oceani, dei mari e delle acque interne d'Europa, proteggendo nel contempo la biodiversità. Le attività si concentrano su un contributo ottimale per garantire l'approvvigionamento alimentare mediante lo sviluppo di una pesca sostenibile e rispettosa dell'ambiente, sulla gestione sostenibile di ecosistemi che forniscono beni e servizi e su una acquacoltura europea concorrenziale e rispettosa dell'ambiente nel contesto dell'economia globale, nonché sulla promozione dell'innovazione marina e marittima attraverso le biotecnologie per stimolare la crescita ""blu"" intelligente.";"";"H2020";"H2020-EU.3.2.";"";"";"2014-09-22 20:45:11";"664301" +"H2020-EU.3.5.5.";"es";"H2020-EU.3.5.5.";"";"";"Desarrollo de sistemas completos y duraderos de observación e información sobre el medio ambiente mundial";"Environmental observation and information systems";"

Desarrollo de sistemas completos y duraderos de observación e información sobre el medio ambiente mundial

El objetivo es garantizar la disponibilidad de los datos y la información de largo plazo necesarios para afrontar este reto. Las actividades se centrarán en las capacidades, tecnologías e infraestructuras de datos en materia de observación y vigilancia de la Tierra, tanto a través de sensores a distancia como de mediciones sobre el terreno, que pueden ofrecer continuamente información exacta y puntual, sobre la que se puedan elaborar previsiones y proyecciones. Se fomentará un acceso libre, abierto y sin trabas a la información y los datos interoperables. Las actividades contribuirán a definir futuras actividades operativas del Programa Europeo de Vigilancia de la Tierra (Copernicus) y a impulsar el uso de los datos de Copernicus para las actividades de investigación.";"";"H2020";"H2020-EU.3.5.";"";"";"2014-09-22 20:49:13";"664427" +"H2020-EU.3.5.5.";"fr";"H2020-EU.3.5.5.";"";"";"Développer des systèmes complets et soutenus d'observation et d'information à l'échelle mondiale en matière d'environnement";"Environmental observation and information systems";"

Développer des systèmes complets et soutenus d'observation et d'information à l'échelle mondiale en matière d'environnement

L'objectif est d'assurer la fourniture des données et des informations à long terme nécessaires pour relever ce défi. Les activités se concentrent sur les moyens, les technologies et les infrastructures de données pour l'observation et la surveillance de la Terre au moyen de la télésurveillance et de mesures in situ, capables de fournir continuellement et en temps voulu des informations précises et de permettre ainsi des prévisions et des projections. Un accès entièrement libre aux données et informations interopérables sera encouragé. Les activités aideront à définir de futures tâches opérationnelles du programme Copernicus et à renforcer l'utilisation des données de Copernicus pour les travaux de recherche.";"";"H2020";"H2020-EU.3.5.";"";"";"2014-09-22 20:49:13";"664427" +"H2020-EU.3.5.5.";"pl";"H2020-EU.3.5.5.";"";"";"Rozwój kompleksowych i trwałych globalnych systemów obserwacji i informacji środowiskowej";"Environmental observation and information systems";"

Rozwój kompleksowych i trwałych globalnych systemów obserwacji i informacji środowiskowej

Celem jest zapewnienie przygotowania długoterminowych danych i informacji potrzebnych do sprostania temu wyzwaniu. Działania mają skupiać się na zdolnościach, technologiach i infrastrukturze danych do celów obserwacji i monitorowania Ziemi, zarówno przy wykorzystaniu teledetekcji, jak i pomiarów in situ, które mogą bez przerwy dostarczać w odpowiednim terminie dokładne informacje i umożliwiać prognozy i przewidywania. Promowany będzie bezpłatny, otwarty i nieograniczony dostęp do interoperacyjnych danych i informacji. Działania mają pomóc w określaniu przyszłej działalności operacyjnej programu Copernicus i zwiększyć wykorzystywanie danych pochodzących z programu Copernicus do celów badawczych.";"";"H2020";"H2020-EU.3.5.";"";"";"2014-09-22 20:49:13";"664427" +"H2020-EU.3.5.5.";"it";"H2020-EU.3.5.5.";"";"";"Sviluppare sistemi globali e continuativi di informazione e osservazione ambientali a livello mondiale";"Environmental observation and information systems";"

Sviluppare sistemi globali e continuativi di informazione e osservazione ambientali a livello mondiale

L'obiettivo è garantire la fornitura dei dati e informazioni a lungo termine necessari per far fronte a questa sfida. Le attività si concentrano sulle capacità, le tecnologie e le infrastrutture di dati relative all'osservazione e alla sorveglianza della Terra, basate sia sul telerilevamento che su misurazioni in loco, in grado di fornire costantemente informazioni tempestive e dettagliate e di consentire previsioni e proiezioni. È opportuno promuovere un accesso libero, aperto e privo di restrizioni a dati e informazioni interoperabili. Le attività contribuiscono a definire le future attività operative del programma Copernicus e a potenziare l'uso dei dati Copernicus per le attività di ricerca.";"";"H2020";"H2020-EU.3.5.";"";"";"2014-09-22 20:49:13";"664427" +"H2020-EU.3.5.5.";"en";"H2020-EU.3.5.5.";"";"";"Developing comprehensive and sustained global environmental observation and information systems";"Environmental observation and information systems";"

Developing comprehensive and sustained global environmental observation and information systems

The aim is to ensure the delivery of the long-term data and information required to address this challenge. Activities shall focus on the capabilities, technologies and data infrastructures for Earth observation and monitoring from both remote sensing and in situ measurements that can continuously provide timely and accurate information and permit forecasts and projections. Free, open and unrestricted access to interoperable data and information will be encouraged. Activities shall help define future operational activities of the Copernicus programme and enhance the use of Copernicus data for research activities.";"";"H2020";"H2020-EU.3.5.";"";"";"2014-09-22 20:49:13";"664427" +"H2020-EU.3.5.5.";"de";"H2020-EU.3.5.5.";"";"";"Entwicklung von Systemen für die umfassende und kontinuierliche globale Umweltüberwachung und von entsprechenden Informationssystemen";"Environmental observation and information systems";"

Entwicklung von Systemen für die umfassende und kontinuierliche globale Umweltüberwachung und von entsprechenden Informationssystemen

Ziel ist die Bereitstellung der zur Bewältigung dieser Herausforderung notwendigen langfristigen Daten und Informationen. Schwerpunkt dieser Tätigkeiten sind die Fähigkeiten, Technologien und Dateninfrastrukturen für die Erdbeobachtung und -überwachung sowohl mittels Fernerkundung als auch durch Messungen vor Ort, die kontinuierlich zeitnahe und präzise Daten liefern können und Prognosen und Projektionen ermöglichen. Gefördert wird der freie, offene und unbeschränkte Zugang zu interoperablen Daten und Informationen. Die Tätigkeiten tragen zur Bestimmung künftiger operativer Tätigkeiten des Copernicus Programms und zur verstärkten Nutzung von Copernicus-Daten für Forschungstätigkeiten bei.";"";"H2020";"H2020-EU.3.5.";"";"";"2014-09-22 20:49:13";"664427" +"H2020-EU.1.4.2.2.";"en";"H2020-EU.1.4.2.2.";"";"";"Strengthening the human capital of research infrastructures";"";"";"";"H2020";"H2020-EU.1.4.2.";"";"";"2014-09-22 20:40:08";"664135" +"H2020-EU.3.4.5.4.";"en";"H2020-EU.3.4.5.4.";"";"";"ITD Airframe";"";"";"";"H2020";"H2020-EU.3.4.5";"";"";"2014-09-22 21:43:05";"665410" +"H2020-EU.3.4.8.2.";"en";"H2020-EU.3.4.8.2.";"";"";"Innovation Programme 2: Advanced traffic management and control systems";"";"";"";"H2020";"H2020-EU.3.4.8.";"";"";"2016-10-19 15:37:11";"700323" +"H2020-EU.3.2.1.4.";"en";"H2020-EU.3.2.1.4.";"";"";"Sustainable forestry";"";"";"";"H2020";"H2020-EU.3.2.1.";"";"";"2014-09-22 20:44:52";"664291" +"H2020-EU.3.2.3.3.";"en";"H2020-EU.3.2.3.3.";"";"";"Boosting marine and maritime innovation through biotechnology";"";"";"";"H2020";"H2020-EU.3.2.3.";"";"";"2014-09-22 20:45:22";"664307" +"H2020-EU.3.2.3.2.";"en";"H2020-EU.3.2.3.2.";"";"";"Developing competitive and environmentally-friendly European aquaculture";"";"";"";"H2020";"H2020-EU.3.2.3.";"";"";"2014-09-22 20:45:18";"664305" +"H2020-EU.3.6.3.1.";"en";"H2020-EU.3.6.3.1.";"";"";"Study European heritage, memory, identity, integration and cultural interaction and translation, including its representations in cultural and scientific collections, archives and museums, to better inform and understand the present by richer interpretations of the past";"";"";"";"H2020";"H2020-EU.3.6.3.";"";"";"2014-09-22 20:50:12";"664457" +"H2020-EU.3.4.5.1.";"en";"H2020-EU.3.4.5.1.";"";"";"IADP Large Passenger Aircraft";"";"";"";"H2020";"H2020-EU.3.4.5";"";"";"2014-09-22 21:42:53";"665404" +"H2020-EU.3.4.8.5.";"en";"H2020-EU.3.4.8.5.";"";"";"Innovation Programme 5: Technologies for sustainable and attractive European rail freight";"";"";"";"H2020";"H2020-EU.3.4.8.";"";"";"2016-11-16 17:49:06";"700255" +"H2020-EU.3.2.6.1.";"en";"H2020-EU.3.2.6.1.";"";"";"Sustainable and competitive bio-based industries and supporting the development of a European bio-economy";"";"";"";"H2020";"H2020-EU.3.2.6.";"";"";"2014-09-22 21:39:27";"665317" +"H2020-EU.3.7.6.";"en";"H2020-EU.3.7.6.";"";"";"Ensure privacy and freedom, including in the Internet and enhance the societal, legal and ethical understanding of all areas of security, risk and management";"";"";"";"H2020";"H2020-EU.3.7.";"";"";"2014-09-22 20:50:45";"664475" +"H2020-EU.3.7.2.";"en";"H2020-EU.3.7.2.";"";"";"Protect and improve the resilience of critical infrastructures, supply chains and tranport modes";"";"";"";"H2020";"H2020-EU.3.7.";"";"";"2014-09-22 20:50:30";"664467" +"H2020-EU.3.7.7.";"en";"H2020-EU.3.7.7.";"";"";"Enhance stadardisation and interoperability of systems, including for emergency purposes";"";"";"";"H2020";"H2020-EU.3.7.";"";"";"2014-09-22 20:50:49";"664477" +"H2020-EU.3.7.5.";"en";"H2020-EU.3.7.5.";"";"";"Increase Europe's resilience to crises and disasters";"";"";"";"H2020";"H2020-EU.3.7.";"";"";"2015-01-23 18:42:15";"664473" +"H2020-EU.3.2.5.3.";"en";"H2020-EU.3.2.5.3.";"";"";"Cross-cutting concepts and technologies enabling maritime growth";"";"";"";"H2020";"H2020-EU.3.2.5.";"";"";"2014-09-22 20:45:50";"664319" +"H2020-EU.2.1.5.1.";"pl";"H2020-EU.2.1.5.1.";"";"";"Technologie dla fabryk przyszłości";"Technologies for Factories of the Future";"

Technologie dla fabryk przyszłości

Promowanie zrównoważonego rozwoju przemysłowego poprzez ułatwienie strategicznego przejścia w Europie od produkcji opartej na kosztach do podejścia nastawionego na efektywne gospodarowanie zasobami i tworzenie produktów o wysokiej wartości dodanej oraz opartej na ICT, inteligentnej i wysoko wydajnej produkcji w systemie zintegrowanym.";"";"H2020";"H2020-EU.2.1.5.";"";"";"2014-09-22 20:42:03";"664199" +"H2020-EU.2.1.5.1.";"de";"H2020-EU.2.1.5.1.";"";"";"Technologien für Fabriken der Zukunft";"Technologies for Factories of the Future";"

Technologien für Fabriken der Zukunft

Förderung eines nachhaltigen Wachstums der Industrie durch Erleichterung einer strategischen Umstellung in Europa von der kostenorientierten Herstellung zur ressourcenschonenden Schaffung von Produkten mit hohem Mehrwert und zur IKT-gestützten intelligenten Hochleistungsfertigung in einem integrierten System.";"";"H2020";"H2020-EU.2.1.5.";"";"";"2014-09-22 20:42:03";"664199" +"H2020-EU.2.1.5.1.";"it";"H2020-EU.2.1.5.1.";"";"";"Tecnologie per le fabbriche del futuro";"Technologies for Factories of the Future";"

Tecnologie per le fabbriche del futuro

Promuovere la crescita industriale sostenibile in Europa agevolando uno spostamento strategico dalla produzione orientata ai costi a un approccio basato sull'efficienza sotto il profilo delle risorse e sulla creazione di prodotti a elevato valore aggiunto e a una produzione intelligente e ad alte prestazione basata sulle TIC in un sistema integrato.";"";"H2020";"H2020-EU.2.1.5.";"";"";"2014-09-22 20:42:03";"664199" +"H2020-EU.2.1.5.1.";"fr";"H2020-EU.2.1.5.1.";"";"";"Des technologies pour les usines du futur";"Technologies for Factories of the Future";"

Des technologies pour les usines du futur

Promouvoir une croissance industrielle durable en facilitant une transition stratégique en Europe, passant d'un processus de fabrication axé sur les coûts à une approche fondée sur une utilisation efficace des ressources et la création de produits présentant une haute valeur ajoutée ainsi que sur des modes de fabrication recourant aux TIC, intelligents et à haute performance, dans un système intégré.";"";"H2020";"H2020-EU.2.1.5.";"";"";"2014-09-22 20:42:03";"664199" +"H2020-EU.2.1.5.1.";"es";"H2020-EU.2.1.5.1.";"";"";"Tecnologías para las fábricas del futuro";"Technologies for Factories of the Future";"

Tecnologías para las fábricas del futuro

Promover el crecimiento industrial sostenible facilitando un cambio estratégico en Europa para pasar de la fabricación basada en los costes de producción a un enfoque basado en la utilización eficiente de recursos y en la creación de productos de un alto valor añadido y una fabricación posibilitada por las TIC, inteligente y de alto rendimiento, en un sistema integrado.";"";"H2020";"H2020-EU.2.1.5.";"";"";"2014-09-22 20:42:03";"664199" +"H2020-EU.3.2.5.";"de";"H2020-EU.3.2.5.";"";"";"Übergreifende Meeresforschung und maritime Forschung";"Cross-cutting marine and maritime research";"

Übergreifende Meeresforschung und maritime Forschung

Ziel ist es, die Auswirkungen der Meere und Ozeane der Union auf die Gesellschaft und das Wirtschaftswachstum zu steigern durch die nachhaltige Bewirtschaftung der Meeresressourcen sowie die Nutzung verschiedener Quellen von Meeresenergie und die weitreichenden unterschiedlichen Formen der Nutzung der Meere.Der Schwerpunkt der Tätigkeiten liegt auf bereichsübergreifenden wissenschaftlichen und technologischen Herausforderungen im marinen und im maritimen Bereich, um in der ganzen Bandbreite der marinen und maritimen Industriezweige das Potenzial von Meeren und Ozeanen so zu erschließen, dass gleichzeitig der Schutz der Umwelt und die Anpassung an den Klimawandel gewährleistet ist. Ein strategischer koordinierter Ansatz für marine und maritime Forschung in allen Herausforderungen und Schwerpunkte von Horizont 2020 wird auch die Umsetzung relevanter Maßnahmen der Union zur Erreichung blauer Wachstumsziele fördern.";"";"H2020";"H2020-EU.3.2.";"";"";"2014-09-23 17:08:10";"664316" +"H2020-EU.3.2.5.";"es";"H2020-EU.3.2.5.";"";"";"Investigación transversal marina y marítima";"Cross-cutting marine and maritime research";"

Investigación transversal marina y marítima

El objetivo consiste en aumentar el impacto de de los mares y aguas continentales de la Unión sobre la sociedad y el crecimiento económico mediante la explotación sostenible de los recursos marinos así como la utilización de las diversas fuentes de energía marina y la amplia gama de diferentes usos que se hacen de los mares.Las actividades se centrarán en los conocimientos transversales científicos y tecnológicos marinos y marítimos con la intención de liberar el potencial de los mares y las aguas continentales a través de una gama de industrias marinas y marítimas, protegiendo al mismo tiempo el medio ambiente y adaptándose al cambio climático. Este planteamiento coordinado estratégico de la investigación marina y marítima en todos los retos y pilares de Horizonte 2020 apoyará asimismo la aplicación de las políticas pertinentes de la Unión para contribuir al logro de los objetivos clave de crecimiento azul.";"";"H2020";"H2020-EU.3.2.";"";"";"2014-09-23 17:08:10";"664316" +"H2020-EU.3.2.5.";"fr";"H2020-EU.3.2.5.";"";"";"Recherche marine et maritime à caractère transversal";"Cross-cutting marine and maritime research";"

Recherche marine et maritime à caractère transversal

L'objectif est d'augmenter l'effet des mers et des océans de l'Union sur la société et la croissance économique grâce à l'exploitation durable des ressources marines ainsi qu'à l'utilisation des différentes sources d'énergie marine et aux très nombreux modes d'exploitation des mers.Les activités se concentrent sur les enjeux scientifiques et technologiques transversaux dans le domaine marin et maritime en vue de libérer le potentiel des mers et des océans pour tous les secteurs industriels marins et maritimes, tout en protégeant l'environnement et en veillant à l'adaptation au changement climatique. Une approche stratégique coordonnée pour la recherche marine et maritime à travers tous les défis et priorités d'Horizon 2020 soutiendra également la mise en œuvre des politiques concernées de l'Union afin de contribuer à atteindre les objectifs clés en matière de croissance bleue.";"";"H2020";"H2020-EU.3.2.";"";"";"2014-09-23 17:08:10";"664316" +"H2020-EU.3.2.5.";"en";"H2020-EU.3.2.5.";"";"";"Cross-cutting marine and maritime research";"Cross-cutting marine and maritime research";"

Cross-cutting marine and maritime research

The aim is to increase the impact of Union seas and oceans on society and economic growth through the sustainable exploitation of marine resources as well as the use of different sources of marine energy and the wide range of different uses that is made of the seas.Activities shall focus on cross-cutting marine and maritime scientific and technological challenges with a view to unlocking the potential of seas and oceans across the range of marine and maritime industries, while protecting the environment and adapting to climate change. A strategic coordinated approach for marine and maritime research across all challenges and priorities of Horizon 2020 will also support the implementation of relevant Union policies to help deliver key blue growth objectives.";"";"H2020";"H2020-EU.3.2.";"";"";"2014-09-23 17:08:10";"664316" +"H2020-EU.3.2.5.";"pl";"H2020-EU.3.2.5.";"";"";"Przekrojowe badania morskie";"Cross-cutting marine and maritime research";"

Przekrojowe badania morskie

Celem jest zwiększenie wpływu mórz i oceanów w Unii na wzrost gospodarczy poprzez zrównoważone wykorzystywanie zasobów morskich oraz różnych źródeł energii morskiej oraz wiele innych różnych sposobów użytkowania mórz.Działania mają się skupiać na przekrojowych morskich wyzwaniach naukowo-technicznych i mają odblokować potencjał mórz i oceanów we wszystkich sektorach przemysłu morskiego, a jednocześnie chronić środowisko i zapewnić przystosowanie się do zmiany klimatu. To skoordynowane podejście strategiczne do badań morskich w ramach wszystkich wyzwań i priorytetów programu „Horyzont 2020” będzie także wspierać wdrażanie odnośnych polityk Unii celem realizacji głównych założeń „niebieskiego wzrostu”.";"";"H2020";"H2020-EU.3.2.";"";"";"2014-09-23 17:08:10";"664316" +"H2020-EU.3.2.5.";"it";"H2020-EU.3.2.5.";"";"";"Ricerca marina e marittima trasversale";"Cross-cutting marine and maritime research";"

Ricerca marina e marittima trasversale

L'obiettivo è quello di aumentare l'impatto dei mari e degli oceani dell'Unione sulla società e sulla crescita economica attraverso lo sviluppo sostenibile delle risorse marine, l'uso delle varie fonti di energia marina e la grande varietà di utilizzazioni differenti del mare.Le attività sono incentrate su sfide scientifiche e tecnologiche trasversali nei settori marino e marittimo allo scopo di sbloccare il potenziale dei mari e degli oceani in tutto l'insieme delle industrie marine e marittime, proteggendo nel contempo l'ambiente e operando un adeguamento al cambiamento climatico. Un approccio strategico coordinato alla ricerca marina e marittima nell'ambito dell'insieme delle sfide e delle priorità di Orizzonte 2020 sosterrà inoltre l'attuazione delle pertinenti politiche dell'Unione al fine di contribuire al raggiungimento degli obiettivi chiave per la ""crescita blu"".";"";"H2020";"H2020-EU.3.2.";"";"";"2014-09-23 17:08:10";"664316" +"H2020-EU.5.d.";"en";"H2020-EU.5.d.";"";"";"Encourage citizens to engage in science through formal and informal science education, and promote the diffusion of science-based activities, namely in science centres and through other appropriate channels";"";"";"";"H2020";"H2020-EU.5.";"";"";"2014-09-22 20:52:52";"664543" +"H2020-EU.1.2.3.";"de";"H2020-EU.1.2.3.";"";"";"FET – Leitinitiativen";"FET Flagships";"

FET – Leitinitiativen

Mit der Verfolgung großer interdisziplinärer wissenschaftlich-technologischer Herausforderungen (""FET – Leitinitiativen"") werden unter Berücksichtigung der Ergebnisse der vorbereitenden FET-Projekte ehrgeizige großmaßstäbliche, von Wissenschaft und Technik angeregte Forschungstätigkeiten gefördert, mit denen ein wissenschaftlicher und technischer Durchbruch auf denjenigen Gebieten angestrebt wird, die in einem offenen und transparenten Vorgehen unter Einbindung der Mitgliedstaaten und der einschlägigen interessierten Kreise als relevant bestimmt wurden. Diese Tätigkeiten könnten von der Koordinierung der europäischen, nationalen und regionalen Agenden profitieren. Der wissenschaftliche Fortschritt dürfte eine solide und breite Grundlage für künftige technologische Innovationen und deren wirtschaftliche Anwendung schaffen und auch der Gesellschaft neuartige Möglichkeiten eröffnen. Für diese Tätigkeiten wird auf die bestehenden Finanzierungsinstrumente zurückgegriffen.40 % der FET-Mittel werden für ""FET – offener Bereich"" verwendet.";"";"H2020";"H2020-EU.1.2.";"";"";"2014-09-22 20:39:18";"664107" +"H2020-EU.1.2.3.";"en";"H2020-EU.1.2.3.";"";"";"FET Flagships";"FET Flagships";"

FET Flagships

By pursuing grand interdisciplinary scientific and technological challenges ('FET Flagships'), FET shall, taking into full account the outcome of FET preparatory projects, support ambitious large-scale, science and technology-driven research aiming to achieve a scientific and technological breakthrough in areas identified as relevant in an open and transparent manner involving the Member States and relevant stakeholders. Such activities could benefit from the coordination between European, national and regional agendas. The scientific advance should provide a strong and broad basis for future technological innovation and economic application, plus novel benefits for society. These activities shall be realised using the existing funding instruments.40 % of FET resources will be devoted to FET Open.";"";"H2020";"H2020-EU.1.2.";"";"";"2014-09-22 20:39:18";"664107" +"H2020-EU.1.2.3.";"it";"H2020-EU.1.2.3.";"";"";"TEF faro";"FET Flagships";"

TEF faro

Perseguendo le grandi sfide interdisciplinari in materia di scienza e tecnologie (""TEF faro""), le TEF sostengono, tenendo pienamente conto dei risultati dei progetti preparatori delle TEF, una ricerca ambiziosa su ampia scala, basata sulla scienza e sulla tecnologia e mirata a conseguire scoperte scientifiche e tecnologiche epocali in settori individuati come rilevanti in maniera aperta e trasparente, con il coinvolgimento degli Stati membri e dei soggetti interessati. Tali attività potrebbero trarre vantaggio dal coordinamento dei programmi regionali, nazionali ed europei. Il progresso scientifico dovrebbe fornire una base solida e ampia per le future innovazioni tecnologiche e le applicazioni economiche, oltre a generare nuovi vantaggi per la società. Queste attività sono realizzate ricorrendo agli strumenti di finanziamento esistenti.Il 40 % delle risorse delle TEF sarà destinato alle TEF aperte.";"";"H2020";"H2020-EU.1.2.";"";"";"2014-09-22 20:39:18";"664107" +"H2020-EU.1.2.3.";"pl";"H2020-EU.1.2.3.";"";"";"FET Flagships";"FET Flagships";"

FET Flagships

Podejmując wielkie interdyscyplinarne wyzwania naukowe i technologiczne („FET flagships”), FET, przy pełnym uwzględnieniu projektów przygotowawczych FET, wspierają ambitne, realizowane na dużą skalę, stymulowane nauką i technologią badania zmierzające do osiągnięcia naukowego i technologicznego przełomu w dziedzinach określonych jako mające znaczenie, w których w otwarty i przejrzysty sposób uczestniczą państwa członkowskie i odpowiednie zainteresowane strony. Takie działania mogłyby skorzystać na skoordynowaniu programów europejskich, krajowych i regionalnych. Postęp naukowy powinien zapewnić mocne i szerokie podstawy dla przyszłych innowacji technologicznych i ich wykorzystania w gospodarce, a także nowe korzyści dla społeczeństwa. Działania te realizowane są z wykorzystaniem istniejących instrumentów finansowania.40% zasobów FET zostanie przeznaczone na FET Open.";"";"H2020";"H2020-EU.1.2.";"";"";"2014-09-22 20:39:18";"664107" +"H2020-EU.1.2.3.";"es";"H2020-EU.1.2.3.";"";"";"FET Flagships";"FET Flagships";"

FET Flagships

Abordando los grandes retos científicos y tecnológicos interdisciplinarios (""FET Flagships""), FET apoyará, teniendo plenamente en cuenta los resultados de los proyectos preparatorios de FET, la investigación ambiciosa, impulsada por la ciencia y la tecnología y a gran escala, que aspire a lograr una ruptura científica y tecnológica en ámbitos considerados pertinentes, de un modo abierto y transparente que implique a los Estados miembros y a las partes interesadas. Estas actividades podrían beneficiarse de la coordinación de los programas europeos nacionales y regionales. El avance científico debe proporcionar una base sólida y amplia para la innovación tecnológica y su explotación económica en el futuro, así como nuevos beneficios para la sociedad. Estas actividades se realizan utilizando los instrumentos de financiación existentes.El 40 % de los recursos FET se consagrarán a ""FET Open"".";"";"H2020";"H2020-EU.1.2.";"";"";"2014-09-22 20:39:18";"664107" +"H2020-EU.1.2.3.";"fr";"H2020-EU.1.2.3.";"";"";"FET Flagships";"FET Flagships";"

FET Flagships

En s'efforçant de relever les grands défis scientifiques et technologiques de caractère interdisciplinaire («FET Flagships»), le FET, en tenant pleinement compte des résultats des projets préparatoires qui s'y rapportent, soutient des activités de recherche scientifique et technologique ambitieuses et à grande échelle visant à réaliser, d'une manière ouverte et transparente et avec la participation des États membres et des parties prenantes concernées, une percée scientifique et technologique dans des domaines jugés pertinents. De telles activités pourraient bénéficier de la coordination entre les programmes européens, nationaux et régionaux. La percée scientifique réalisée devrait offrir une vaste et solide assise à l'innovation technologique et à l'exploitation économique futures, et apporter de nouveaux avantages à la société. Ces activités sont réalisées au moyen des instruments financiers existants.40 % des ressources du FET seront allouées au «FET Open».";"";"H2020";"H2020-EU.1.2.";"";"";"2014-09-22 20:39:18";"664107" +"H2020-EU.3.3.6.";"fr";"H2020-EU.3.3.6.";"";"";"La solidité du processus décisionnel et l'implication du public";"Robust decision making and public engagement";"

La solidité du processus décisionnel et l'implication du public

Les activités mettent l'accent sur le développement d'outils, de méthodes, de modèles et de scénarios prospectifs permettant d'apporter aux politiques un soutien ferme et transparent, y compris des activités relatives à la mobilisation du public, aux effets sur l'environnement, à la participation des utilisateurs et à l'évaluation de la durabilité, permettant une meilleure compréhension des tendances et des perspectives socio-économiques dans le domaine énergétique.";"";"H2020";"H2020-EU.3.3.";"";"";"2014-09-22 20:46:52";"664353" +"H2020-EU.3.3.6.";"es";"H2020-EU.3.3.6.";"";"";"Solidez en la toma de decisiones y compromiso público";"Robust decision making and public engagement";"

Solidez en la toma de decisiones y compromiso público

Las actividades se centrarán en el desarrollo de herramientas, métodos, modelos y supuestos de evolución futura para un apoyo a las políticas sólido y transparente, incluidas actividades relativas al compromiso del público, la participación del usuario, el impacto medioambiental y la evaluación de la sostenibilidad, mejorando la comprensión de las tendencias y perspectivas socioeconómicas relacionadas con la energía.";"";"H2020";"H2020-EU.3.3.";"";"";"2014-09-22 20:46:52";"664353" +"H2020-EU.3.3.6.";"pl";"H2020-EU.3.3.6.";"";"";"Solidne procesy decyzyjne i udział społeczeństwa";"Robust decision making and public engagement";"

Solidne procesy decyzyjne i udział społeczeństwa

Działania mają skupiać się na wypracowaniu narzędzi, metod, modeli oraz długofalowych i przyszłościowych scenariuszy przewidujących solidne i przejrzyste wsparcie polityczne, w tym na działaniach dotyczących udziału społeczeństwa i zaangażowania użytkowników, oddziaływania na środowisko i ocen zrównoważoności, które pozwolą lepiej zrozumieć związane z energią tendencje i perspektywy społeczno-gospodarcze.";"";"H2020";"H2020-EU.3.3.";"";"";"2014-09-22 20:46:52";"664353" +"H2020-EU.3.3.6.";"it";"H2020-EU.3.3.6.";"";"";"Processo decisionale e impegno pubblico di rilievo";"Robust decision making and public engagement";"

Processo decisionale e impegno pubblico di rilievo

Le attività si concentrano in particolare sullo sviluppo di strumenti, metodi, modelli e scenari futuri e lungimiranti per un solido e trasparente sostegno alla politica, comprese le attività relative alla partecipazione del pubblico, al coinvolgimento degli utenti, all'impatto ambientale e alla valutazione di sostenibilità, per migliorare la comprensione delle tendenze e prospettive socioeconomiche connesse all'energia.";"";"H2020";"H2020-EU.3.3.";"";"";"2014-09-22 20:46:52";"664353" +"H2020-EU.3.3.6.";"de";"H2020-EU.3.3.6.";"";"";"Qualifizierte Entscheidungsfindung und Einbeziehung der Öffentlichkeit";"Robust decision making and public engagement";"

Qualifizierte Entscheidungsfindung und Einbeziehung der Öffentlichkeit

Schwerpunkt der Tätigkeiten ist die Entwicklung von Instrumenten, Verfahren, Modellen und vorausschauenden und perspektivischen Szenarien für eine qualifizierte und transparente Unterstützung der Politik, auch im Hinblick auf das Engagement der Öffentlichkeit, die Einbeziehung der Nutzer, die Auswirkungen auf die Umwelt sowie die Bewertung der Nachhaltigkeit, womit das Verständnis energiebezogener sozioökonomischer Tendenzen und Perspektiven verbessert werden soll.";"";"H2020";"H2020-EU.3.3.";"";"";"2014-09-22 20:46:52";"664353" +"H2020-EU.2.1.4.";"fr";"H2020-EU.2.1.4.";"";"";"PRIMAUTÉ INDUSTRIELLE - Primauté dans le domaine des technologies génériques et industrielles – Biotechnologies";"Biotechnology";"

PRIMAUTÉ INDUSTRIELLE - Primauté dans le domaine des technologies génériques et industrielles – Biotechnologies

Objectif spécifique concernant les biotechnologies

L'objectif spécifique des activités de recherche et d'innovation dans le domaine des biotechnologies est de développer des produits et des processus industriels compétitifs, durables, sûrs et innovants et de servir de moteur d'innovation dans divers secteurs européens, tels que l'agriculture, la sylviculture, l'alimentation, l'énergie, la chimie et la santé, ainsi que la bioéconomie fondée sur la connaissance.Une solide base scientifique, technologique et d'innovation dans le domaine des biotechnologies contribuera à asseoir la primauté des entreprises européennes pour ce qui est de cette technologie clé générique. Cette position sera encore renforcée par la prise en considération de l'évaluation de la santé et de la sécurité, des incidences économiques et environnementales de l'utilisation de cette technologie, et de la gestion des risques généraux et spécifiques lors du déploiement des biotechnologies.

Justification et valeur ajoutée de l'Union

Portées par l'extension des connaissances relatives aux systèmes vivants, les biotechnologies sont amenées à générer quantité de nouvelles applications et à renforcer la base industrielle et la capacité d'innovation de l'Union. L'importance croissante des biotechnologies se reflète notamment dans la proportion d'applications industrielles, y compris les produits biopharmaceutiques, la production de denrées alimentaires et d'aliments pour animaux, ainsi que les produits biochimiques, dont la part de marché devrait augmenter pour atteindre 12 à 20 % de la production de substances chimiques d'ici 2015. Grâce à la sélectivité et à l'efficacité des biosystèmes, les biotechnologies contribuent également au respect de plusieurs des «douze principes» de la chimie verte. Les charges économiques pouvant peser sur les entreprises de l'Union peuvent être réduites en exploitant le potentiel de réduction des émissions de CO2 propre aux processus biotechnologiques et aux bioproduits, qui devrait se situer entre 1 et 2,5 milliards de tonnes d'équivalent CO2 par an d'ici 2030.Dans le secteur biopharmaceutique européen, quelque 20 % des médicaments actuels sont déjà issus des biotechnologies. Parmi ceux-ci, jusqu'à 50 % sont des nouveaux médicaments. Les biotechnologies joueront un rôle majeur dans la transition vers une bioéconomie, de nouveaux processus industriels étant mis au point dans ce cadre. Les biotechnologies ouvrent également de nouvelles voies pour le développement d'une agriculture, d'une aquaculture et d'une sylviculture durables, et pour l'exploitation du potentiel considérable que représentent les ressources marines pour la production d'applications industrielles, sanitaires, énergétiques, chimiques et environnementales innovantes. La croissance du secteur émergent des biotechnologies marines (ou «bleues») a été estimée à 10 % par an.D'autres sources fondamentales d'innovation se situent à l'interface entre les biotechnologies et d'autres technologies génériques et convergentes, dont les nanotechnologies et les TIC. Elles pourraient trouver des applications, notamment, dans le sondage et le diagnostic.

Grandes lignes des activités

(a) Promouvoir les biotechnologies de pointe comme futur moteur d'innovation

Soutien aux domaines technologiques émergents, tels que la biologie synthétique, la bioinformatique et la biologie des systèmes, qui possèdent un potentiel considérable pour ce qui est du développement de produits et de technologies innovants et d'applications totalement innovantes.

(b) Produits et processus industriels fondés sur les biotechnologies

Développement des biotechnologies industrielles et de la conception de bioprocédés à l'échelle industrielle pour la mise au point de produits industriels compétitifs et de processus durables (par exemple dans le domaine de la chimie, de la santé, de l'exploitation minière, de l'énergie, du papier et de la pâte à papier, des produits à base de fibres et du bois, du textile, de la production d'amidon ou de fécule ou de la transformation des produits alimentaires) et promotion de leur dimension environnementale et sanitaire, y compris les opérations de nettoyage.

(c) Des technologies «plateformes» innovantes et compétitives

Développement des technologies «plateformes» (telles que la génomique, la métagénomique, la protéomique, la métabolimique, les instruments moléculaires, les systèmes d'expression, les plateformes de phénotypage et les plateformes cellulaires) afin de renforcer la primauté et l'avantage concurrentiel de l'Europe dans un grand nombre de secteurs ayant des retombées économiques.";"";"H2020";"H2020-EU.2.1.";"";"";"2014-09-22 20:41:44";"664189" +"H2020-EU.2.1.4.";"pl";"H2020-EU.2.1.4.";"";"";"WIODĄCA POZYCJA W PRZEMYŚLE - Wiodąca pozycja w zakresie technologii prorozwojowych i przemysłowych – Biotechnologia";"Biotechnology";"

WIODĄCA POZYCJA W PRZEMYŚLE - Wiodąca pozycja w zakresie technologii prorozwojowych i przemysłowych – Biotechnologia

Cel szczegółowy w dziedzinie biotechnologii

Celem szczegółowym badań naukowych i innowacji w dziedzinie biotechnologii jest rozwój konkurencyjnych, zrównoważonych, bezpiecznych oraz innowacyjnych produktów i procesów przemysłowych, a także stymulowanie innowacji w wielu innych europejskich sektorach, takich jak rolnictwo, leśnictwo, żywność, energia, chemia i zdrowie, a także oparta na wiedzy biogospodarka.Silna baza naukowa, technologiczna i innowacyjna w dziedzinie biotechnologii ułatwi przemysłowi europejskiemu utrzymanie wiodącej pozycji w zakresie tej kluczowej technologii prorozwojowej. Ta pozycja zostanie jeszcze wzmocniona poprzez uwzględnienie kwestii oceny zdrowia i bezpieczeństwa, gospodarczych i środowiskowych skutków zastosowania technologii oraz aspektów zarządzania całościowym i konkretnym ryzykiem przy zastosowaniu biotechnologii.

Uzasadnienie i unijna wartość dodana

Stymulowana rozwojem wiedzy o systemach biologicznych biotechnologia będzie źródłem wielu nowych zastosowań oraz wzmocni bazę przemysłową Unii i jej zdolność do innowacji. Przykładami rosnącego znaczenia biotechnologii są zastosowania przemysłowe, w tym biofarmaceutyki, produkcja żywności i pasz oraz biochemikalia, których udział w rynku do 2015 r. wzrośnie, według oszacowań, do 12%–20% produkcji chemicznej. Dzięki selektywności i efektywności systemów biologicznych biotechnologia odpowiada również niektórym z tzw. dwunastu zasad zielonej chemii. Możliwe obciążenia gospodarcze dla przedsiębiorstw w Unii można ograniczyć poprzez wykorzystanie potencjału procesów biotechnologicznych i bioproduktów w zakresie ograniczania emisji CO2, które, według oszacowań, do 2030 r. będą wynosić od 1 do 2,5 mld ton ekwiwalentu CO2 rocznie.W europejskim sektorze biofarmaceutycznym już ok. 20% dostępnych obecnie lekarstw powstaje przy wykorzystaniu osiągnięć biotechnologii, natomiast w przypadku nowych lekarstw jest to 50%. Biotechnologia odegra znaczną rolę w przejściu do biogospodarki, gdyż opracowane zostaną nowe procesy przemysłowe. Biotechnologia toruje również drogę do rozwoju zrównoważonych: rolnictwa, akwakultury i leśnictwa oraz do wykorzystania ogromnego potencjału zasobów morskich do wytworzenia innowacyjnych zastosowań w dziedzinie przemysłu, zdrowia, energii, chemii i środowiska. Przewiduje się, że powstający sektor biotechnologii morskiej (niebieskiej) będzie rósł w tempie 10% rocznie.Pozostałe kluczowe źródła innowacji to interakcja między biotechnologią a innymi technologiami prorozwojowymi i konwergencyjnymi, w szczególności nanotechnologiami i ICT, oraz z zastosowaniami takimi jak detekcja czy diagnozowanie.

Ogólne kierunki działań

(a) Wspieranie najnowocześniejszych biotechnologii jako przyszłych czynników stymulujących innowację

Rozwój powstających dziedzin technologii, takich jak biologia syntetyczna, bioinformatyka i biologia systemowa, niosących ze sobą wielką obietnicę opracowania innowacyjnych produktów i technologii oraz zupełnie nowatorskich zastosowań.

(b) Produkty i procesy przemysłowe oparte na biotechnologii

Rozwój biotechnologii przemysłowej i projektowania biotechnologicznego na skalę przemysłową w celu tworzenia konkurencyjnych produktów i zrównoważonych procesów przemysłowych (takich jak w branży chemicznej, ochrony zdrowia, górnictwa, energetycznej, celulozowo-papierniczej, produktów włóknistych i drewna, tekstylnej, skrobi, przetwarzaniu żywności) oraz jego wymiar środowiskowy i dotyczący zdrowia, w tym operacje oczyszczania.

(c) Innowacyjne i konkurencyjne technologie platformowe

Rozwój technologii platformowych (np. genomiki, metagenomiki, proteomiki, metabolomiki, narzędzi molekularnych, systemów ekspresji, platform fenotypowania i platform komórkowych) w celu wzmacniania wiodącej pozycji i zwiększania przewagi konkurencyjnej w wielu sektorach mających wpływ na gospodarkę.";"";"H2020";"H2020-EU.2.1.";"";"";"2014-09-22 20:41:44";"664189" +"H2020-EU.2.1.4.";"es";"H2020-EU.2.1.4.";"";"";"LIDERAZGO INDUSTRIAL - Liderazgo en tecnologías industriales y de capacitación – Biotecnología";"Biotechnology";"

LIDERAZGO INDUSTRIAL - Liderazgo en tecnologías industriales y de capacitación – Biotecnología

Objetivo específico para la biotecnología

El objetivo específico de la investigación e innovación sobre biotecnología es desarrollar productos y procesos industriales competitivos, sostenibles, seguros e innovadores y servir de motor de la innovación para varios sectores europeos, como la agricultura, la silvicultura, la alimentación, la energía los productos químicos y la salud, así como la bioeconomía basada en el conocimiento.Una sólida base científica, tecnológica y de innovación en biotecnología ayudará a las industrias europeas a garantizar el liderazgo en esta tecnología facilitadora clave. Esta posición se reforzará integrando los aspectos de evaluación de la salud y la seguridad, el impacto económico y medioambiental del uso de la tecnología y la gestión de los riesgos globales y específicos en el despliegue de la biotecnología.

Justificación y valor añadido de la Unión

Espoleada por la expansión del conocimiento de los sistemas vivos, la biotecnología está llamada a generar una corriente de aplicaciones nuevas y a reforzar la base industrial de la Unión y su capacidad de innovación. Ejemplos de la creciente importancia de la biotecnología son las aplicaciones industriales, inclusive los medicamentos biológicos, la producción de alimentos y piensos y las sustancias bioquímicas, previéndose que la cuota de mercado de estas últimas llegue al 12 % - 20 % de la producción química en 2015. La biotecnología responde también a varios de los denominados doce principios de la química ""verde"", debido a la selectividad y eficiencia de los biosistemas. Es posible reducir las eventuales cargas económicas para las empresas de la Unión aprovechando el potencial de los procesos biotecnológicos y los bioproductos para reducir las emisiones de CO2, que se estima serán de entre 1 000 y 2 500 millones de toneladas equivalentes de CO2 al año para 2030.En el sector biofarmacéutico europeo, el 20 % aproximadamente de los medicamentos actuales y hasta un 50 % de los nuevos derivan ya de la biotecnología. La biotecnología desempeñará un papel determinante en la transición hacia una bioeconomía al desarrollar nuevos procesos industriales. La biotecnología también ha abierto nuevas vías para impulsar la agricultura, la acuicultura y la silvicultura sostenibles y para explotar el enorme potencial que tienen los recursos marinos para producir aplicaciones industriales, sanitarias, energética, químicas y medioambientales innovadoras. Se ha pronosticado que el sector emergente de la biotecnología marina (""azul"") crecerá a un ritmo del 10 % anual.Otras fuentes clave de innovación se encuentran en la interfaz entre la biotecnología y otras tecnologías de capacitación y convergentes, en particular las nanotecnologías y las TIC, con aplicaciones tales como la teledetección y el diagnóstico.

Líneas generales de las actividades

(a) Impulsar las biotecnologías de vanguardia como futuro motor de la innovación

Desarrollo de ámbitos tecnológicos emergentes como la biología sintética, la bioinformática y la biología de sistemas, que ofrecen buenas perspectivas en materia de productos y tecnologías innovadores y de aplicaciones completamente nuevas.

(b) Productos y procesos industriales basados en la biotecnología

Impulso de la biotecnología industrial y de la concepción a escala industrial de bioprocesos para productos y procesos industriales competitivos y sostenibles (por ejemplo en química, sanidad, minería, energía, industria papelera, productos basados en fibras y madera, textil, almidón o transformación de alimentos) y su dimensión medioambiental, incluidas las operaciones de limpieza.

(c) Tecnologías para plataformas innovadoras y competitivas

Desarrollo de tecnologías de plataforma (p. ej. genómica, metagenómica, proteómica, metabolómica, herramientas moleculares, sistemas de expresión, plataformas de fenotipificación) para potenciar el liderazgo y la ventaja competitiva en un gran número de sectores económicos de gran repercusión.";"";"H2020";"H2020-EU.2.1.";"";"";"2014-09-22 20:41:44";"664189" +"H2020-EU.2.1.4.";"de";"H2020-EU.2.1.4.";"";"";"FÜHRENDE ROLLE DER INDUSTRIE - Führende Rolle bei grundlegenden und industriellen Technologien - Biotechnologie";"Biotechnology";"

FÜHRENDE ROLLE DER INDUSTRIE - Führende Rolle bei grundlegenden und industriellen Technologien - Biotechnologie

Einzelziel für die Biotechnologie

Einzelziel der biotechnologischen Forschung und Innovation ist die Entwicklung wettbewerbsfähiger, nachhaltiger, sicherer und innovativer Industrieprodukte und -prozesse sowie ihr Beitrag als Innovationsmotor für andere europäische Sektoren wie Landwirtschaft, Forstwirtschaft, Lebensmittel, Energie, Chemie und Gesundheit sowie die wissensgestützte Bio-Wirtschaft.Solide biotechnologische Grundlagen in Wissenschaft, Technologie und Innovation unterstützen die europäische Industrie in der Sicherung ihrer Führungsrolle in dieser Schlüsseltechnologie. Diese Position wird noch gestärkt, indem beim Einsatz der Biotechnologie Fragen der Gesundheits- und Sicherheitsbewertung, die Folgen für Wirtschaft und Umwelt aufgrund der Nutzung dieser Technologie und Aspekte des Sicherheitsmanagements des Gesamtrisikos sowie spezifischer Risiken einbezogen werden.

Begründung und Mehrwert für die Union

Angesichts der Ausweitung der Kenntnisse über lebende Systeme dürfte die Biotechnologie eine Flut neuer Anwendungen hervorbringen und die Industriebasis der Union sowie deren Innovationskapazitäten stärken. Beispiele für die wachsende Bedeutung der Biotechnologie sind industrielle Anwendungen wie Biopharmaka, Lebens- und Futtermittelproduktion und Biochemikalien, wobei der Marktanteil von Biochemikalien Schätzungen zufolge bis 2015 auf bis zu 12 % bis 20 % der Chemieproduktion steigen wird. Aufgrund der Selektivität und Effizienz der Biosysteme wird sich die Biotechnologie auch mit einigen der sogenannten zwölf Prinzipien der grünen Chemie befassen. Die möglichen wirtschaftlichen Belastungen für Unionsunternehmen lassen sich reduzieren, indem das Potenzial biotechnologischer Prozesse und biogestützter Produkte für die Reduzierung der CO2-Emissionen genutzt wird, die auf 1 bis 2,5 Mrd. Tonnen CO2-Äquivalent bis 2030 veranschlagt werden.Bereits jetzt werden im biopharmazeutischen Sektor Europas etwa 20 % der auf dem Markt befindlichen Arzneimittel mit Hilfe der Biotechnologie hergestellt, wobei bis zu 50% auf neue Arzneimittel entfallen. Der Biotechnologie wird mittels der Entwicklung neuer Industrieprozesse eine gewichtige Rolle beim Übergang zu einer ökologisch fundierten Wirtschaft zukommen. Die Biotechnologie eröffnet auch neue Wege für den Aufbau einer nachhaltigen Landwirtschaft, Aquakultur und Forstwirtschaft und für die Nutzung des enormen Potenzials mariner Ressourcen für innovative Anwendungen in Industrie, Gesundheitswesen, Energie, Chemie und Umweltschutz. Schätzungen zufolge wird der neu entstehende Sektor der marinen (blauen) Biotechnologie pro Jahr um 10% wachsen.Weitere entscheidende Quellen für die Innovation sind die Schnittstellen zwischen der Biotechnologie und anderen wichtigen und konvergierenden Grundlagentechnologien, vor allem den Nanotechnologien und IKT, mit Anwendungen wie Sensor- und Diagnosetechnik.

Einzelziele und Tätigkeiten in Grundzügen

(a) Unterstützung der Spitzenforschung in der Biotechnologie als künftiger Innovationsmotor

Entwicklung neu entstehender technologischer Bereiche wie synthetische Biologie, Bioinformatik und Systembiologie, die sehr vielversprechend im Hinblick auf innovative Produkte und Technologien sowie vollständig neue Anwendungen sind.

(b) Biotechnologische Industrieprodukte und -prozesse

Entwicklung industrieller Biotechnologie und Konzeption von Bioprozessen im industriellen Maßstab für wettbewerbsfähige Industrieprodukte und nachhaltige Prozesse (z. B. in den Bereichen Chemie, Gesundheit, Mineralgewinnung, Energie, Zellstoff und Papier, Fasererzeugnisse und Holz, Textil, Stärke und Lebensmittelverarbeitung) und ihre Umwelt- und Gesundheitsdimension unter Einschluss von Clean-up-Verfahren.

(c) Innovative und wettbewerbsfähige Plattformtechnologien

Aufbau von Plattformtechnologien (z. B. Genomik, Metagenomik, Proteomik, Metabolomik, molekulare Werkzeuge, Expressionssysteme, Phänotypisierungsplattformen und zellbasierte Plattformen) zur Festigung der Führungsrolle und für den Ausbau des Wettbewerbsvorteils in einem breiteren Spektrum von Sektoren mit wirtschaftlicher Bedeutung.";"";"H2020";"H2020-EU.2.1.";"";"";"2014-09-22 20:41:44";"664189" +"H2020-EU.2.1.4.";"it";"H2020-EU.2.1.4.";"";"";"LEADERSHIP INDUSTRIALE - Leadership nel settore delle tecnologie abilitanti e industriali – Biotecnologie";"Biotechnology";"

LEADERSHIP INDUSTRIALE - Leadership nel settore delle tecnologie abilitanti e industriali – Biotecnologie

Obiettivo specifico della biotecnologia

L'obiettivo specifico della ricerca e dell'innovazione nel settore delle biotecnologie è sviluppare prodotti e processi industriali competitivi, sostenibili, sicuri e innovativi e contribuire come motore innovativo in un certo numero di settori europei, come l'agricoltura, la silvicoltura, i prodotti alimentari, l'energia, i prodotti chimici e la salute, nonché la bioeconomia basata sulla conoscenza.Una forte base scientifica, tecnologica e innovativa nel settore della biotecnologia sosterrà le industrie europee garantendo una leadership in questa tecnologia abilitante fondamentale. Tale posizione sarà ulteriormente rafforzata dall'integrazione della valutazione sanitaria e di sicurezza, dell'impatto economico e ambientale dell'impiego della tecnologia e degli aspetti di gestione dei rischi complessivi e specifici derivanti dall'impiego delle biotecnologie.

Motivazione e valore aggiunto dell'Unione

Alimentata dall'espansione delle conoscenze in materia di sistemi viventi, la biotecnologia mira a generare un flusso di nuove applicazioni e a rafforzare la base industriale dell'Unione e la sua capacità di innovazione. Esempi della crescente importanza della biotecnologia sono reperibili nelle applicazioni industriali anche biofarmaceutiche, relative alla produzione di alimenti e mangimi e biochimiche, la cui quota di mercato dovrebbe aumentare fino al 12-20 % della produzione chimica entro il 2015. Un certo numero dei cosiddetti dodici principi di chimica verde è interessato dalla biotecnologia, considerata la selettività e l'efficienza dei biosistemi. Gli eventuali oneri economici per le imprese dell'Unione possono essere ridotti sfruttando il potenziale dei processi biotecnologici e dei prodotti biologici al fine di ridurre le emissioni di CO2, di un intervallo stimato compreso tra 1 e 2,5 miliardi di tonnellate di CO2 equivalente l'anno entro il 2030.Nel settore biofarmaceutico europeo all'incirca il 20 % dei farmaci esistenti deriva già dalla biotecnologia, quota che sale al 50 % per quanto concerne i nuovi farmaci. La biotecnologia svolgerà un ruolo importante nella transizione verso la bioeconomia mediante lo sviluppo di nuovi processi industriali. La biotecnologia crea anche nuove possibilità per sviluppare un'agricoltura, un'acquacoltura e una silvicoltura sostenibili e sfruttare l'enorme potenziale delle risorse marine per la produzione di applicazioni innovative in ambito industriale, sanitario, energetico, chimico e ambientale. Si prevede che il settore emergente della biotecnologia marina (""blu"") sia destinato a crescere del 10 % annuo.Altre fonti principali di innovazione si trovano all'incrocio fra la biotecnologia e altre tecnologie abilitanti e convergenti, in particolare le nanotecnologie e le TIC, con applicazioni quali il rilevamento e la diagnosi.

Le grandi linee delle attività

(a) Rafforzare le biotecnologie d'avanguardia in quanto motore delle future innovazioni

Sviluppo dei settori a tecnologia emergente come la biologia sintetica, la bioinformatica e la biologia dei sistemi, che risultano molto promettenti per tecnologie e prodotti innovativi e applicazioni del tutto nuove.

(b) Prodotti e processi industriali basati sulla biotecnologia

Sviluppo della biotecnologia industriale e della concezione di bioprocessi su scala industriale per prodotti industriali competitivi e processi sostenibili (ad esempio chimica, salute, industria mineraria, energia, pasta e carta, legna e prodotti a base di fibre, tessile, amido, trasformazione alimentare), nonché delle sue dimensioni ambientale e sanitaria, comprese le operazioni di pulizia.

(c) Tecnologie di piattaforma innovative e competitive

Sviluppo di tecnologie di piattaforma, quali ad esempio genomica, meta-genomica, proteomica, metabolomica, strumenti molecolari, sistemi di espressione, piattaforme di fenotipizzazione e piattaforme basate sulle cellule, per rafforzare la leadership e il vantaggio competitivo in un'ampia gamma di settori che hanno un impatto economico.";"";"H2020";"H2020-EU.2.1.";"";"";"2014-09-22 20:41:44";"664189" +"H2020-EU.2.1.2.2.";"pl";"H2020-EU.2.1.2.2.";"";"";"Zapewnienie bezpiecznego i zrównoważonego rozwoju i stosowania nanotechnologii";"Safe and sustainable nanotechnologies";"

Zapewnienie bezpiecznego i zrównoważonego rozwoju i stosowania nanotechnologii

Rozwój wiedzy naukowej dotyczącej potencjalnego wpływu nanotechnologii i nanosystemów na zdrowie lub środowisko oraz opracowanie narzędzi oceny ryzyka i zarządzania w całym cyklu życia, z uwzględnieniem zagadnień standaryzacji";"";"H2020";"H2020-EU.2.1.2.";"";"";"2014-09-22 20:41:01";"664165" +"H2020-EU.2.1.2.2.";"fr";"H2020-EU.2.1.2.2.";"";"";"Assurer la sûreté et la viabilité du développement et de l'application des nanotechnologies";"Safe and sustainable nanotechnologies";"

Assurer la sûreté et la viabilité du développement et de l'application des nanotechnologies

Faire progresser les connaissances scientifiques concernant l'impact potentiel des nanotechnologies et des nanosystèmes sur la santé ou l'environnement, et fournir les instruments permettant une évaluation et une gestion des risques tout au long de leur cycle de vie, y compris en matière de normalisation.";"";"H2020";"H2020-EU.2.1.2.";"";"";"2014-09-22 20:41:01";"664165" +"H2020-EU.2.1.2.2.";"es";"H2020-EU.2.1.2.2.";"";"";"Garantía de un desarrollo y una aplicación seguros y sostenibles de las nanotecnologías";"Safe and sustainable nanotechnologies";"

Garantía de un desarrollo y una aplicación seguros y sostenibles de las nanotecnologías

Hacer avanzar los conocimientos científicos sobre el impacto potencial de las nanotecnologías y los nanosistemas sobre la salud o el medio ambiente, y aportar herramientas para la evaluación y gestión de riesgos a lo largo de todo el ciclo de vida, incluidos los aspectos de normalización.";"";"H2020";"H2020-EU.2.1.2.";"";"";"2014-09-22 20:41:01";"664165" +"H2020-EU.2.1.2.2.";"de";"H2020-EU.2.1.2.2.";"";"";"Gewährleistung der sicheren und nachhaltigen Entwicklung und Anwendung von Nanotechnologien";"Safe and sustainable nanotechnologies";"

Gewährleistung der sicheren und nachhaltigen Entwicklung und Anwendung von Nanotechnologien

Gewinnung wissenschaftlicher Erkenntnisse über die potenziellen Auswirkungen der Nanotechnologien und Nanosysteme auf Gesundheit oder Umwelt und Bereitstellung von Werkzeugen für Risikoabschätzung und Risikomanagement während des gesamten Lebenszyklus unter Einschluss von Fragen der Normung.";"";"H2020";"H2020-EU.2.1.2.";"";"";"2014-09-22 20:41:01";"664165" +"H2020-EU.2.1.2.2.";"it";"H2020-EU.2.1.2.2.";"";"";"Garantire lo sviluppo e l'applicazione sicuri e sostenibili delle nanotecnologie";"Safe and sustainable nanotechnologies";"

Garantire lo sviluppo e l'applicazione sicuri e sostenibili delle nanotecnologie

Migliorare le conoscenze scientifiche relative all'impatto potenziale delle nanotecnologie e dei nanosistemi sulla salute e sull'ambiente, nonché fornire gli strumenti per valutare e gestire i rischi lungo tutto il ciclo di vita, comprese le questioni relative alla standardizzazione.";"";"H2020";"H2020-EU.2.1.2.";"";"";"2014-09-22 20:41:01";"664165" +"H2020-EU.2.1.2.2.";"en";"H2020-EU.2.1.2.2.";"";"";"Ensuring the safe and sustainable development and application of nanotechnologies";"Safe and sustainable nanotechnologies";"

Ensuring the safe and sustainable development and application of nanotechnologies

Advancing scientific knowledge of the potential impact of nanotechnologies and nanosystems on health or on the environment, and providing tools for risk assessment and management along the entire life cycle, including standardisation issues.";"";"H2020";"H2020-EU.2.1.2.";"";"";"2014-09-22 20:41:01";"664165" +"H2020-EU.3.6.2.2.";"en";"H2020-EU.3.6.2.2.";"";"";"Explore new forms of innovation, with special emphasis on social innovation and creativity and understanding how all forms of innovation are developed, succeed or fail";"";"";"";"H2020";"H2020-EU.3.6.2.";"";"";"2014-09-22 20:49:58";"664449" +"H2020-EU.1.2.2.";"fr";"H2020-EU.1.2.2.";"";"";"FET Proactive";"FET Proactive";"

FET Proactive

En favorisant le développement de thèmes et communautés émergents («FET Proactive»), le FET, en étroite relation avec les thèmes «Défis de société» et «Primauté industrielle», s'ouvre à une série de thèmes prometteurs de la recherche exploratoire, susceptibles de générer une masse critique de projets interconnectés qui, ensemble, garantissent une large couverture de ces domaines de recherche, sous une multitude d'angles différents, et constituent un réservoir européen de connaissances.";"";"H2020";"H2020-EU.1.2.";"";"";"2014-09-22 20:39:14";"664105" +"H2020-EU.1.2.2.";"es";"H2020-EU.1.2.2.";"";"";"FET Proactive";"FET Proactive";"

FET Proactive

Nutriendo temas y comunidades emergentes (""FET Proactive""), FET abordará, en estrecha colaboración con los retos de la sociedad y los temas de liderazgo industrial, una serie de temas de investigación exploratoria prometedores, con potencial para generar una masa crítica de proyectos interrelacionados que, conjuntamente, permitan una exploración amplia y polifacética de los temas y constituyan un depósito común europeo de conocimientos.";"";"H2020";"H2020-EU.1.2.";"";"";"2014-09-22 20:39:14";"664105" +"H2020-EU.1.2.2.";"en";"H2020-EU.1.2.2.";"";"";"FET Proactive";"FET Proactive";"

FET Proactive

By nurturing emerging themes and communities ('FET Proactive'), FET shall, in close association with the societal challenges and industrial leadership themes, address a number of promising exploratory research themes with the potential to generate a critical mass of inter-related projects that, together, make up a broad and multi-faceted exploration of the themes and build a European pool of knowledge.";"";"H2020";"H2020-EU.1.2.";"";"";"2014-09-22 20:39:14";"664105" +"H2020-EU.1.2.2.";"pl";"H2020-EU.1.2.2.";"";"";"FET Proactive";"FET Proactive";"

FET Proactive

Wspierając nowo powstające zagadnienia i społeczności („FET Proactive”), FET, w ścisłym powiązaniu z tematyką wyzwań społecznych i wiodącej pozycji w przemyśle, obejmują swoim zakresem wiele obiecujących kierunków badań poszukiwawczych, odznaczających się potencjałem wytworzenia masy krytycznej wzajemnie powiązanych projektów, które obejmują szeroki wachlarz wieloaspektowych działań badawczych i przyczyniają się do utworzenia europejskiej puli wiedzy.";"";"H2020";"H2020-EU.1.2.";"";"";"2014-09-22 20:39:14";"664105" +"H2020-EU.1.2.2.";"it";"H2020-EU.1.2.2.";"";"";"TEF proattive";"FET Proactive";"

TEF proattive

Favorendo i temi e le comunità emergenti (""TEF proattive""), le TEF affrontano, in stretta associazione con le sfide per la società e i temi connessi alla leadership industriale, un certo numero di temi promettenti nell'ambito della ricerca esplorativa dotati del potenziale di generare una massa critica di progetti interrelati che, nel complesso, costituiscano un'esplorazione ampia e sfaccettata dei temi per sfociare nella costruzione di una insieme europeo di conoscenze.";"";"H2020";"H2020-EU.1.2.";"";"";"2014-09-22 20:39:14";"664105" +"H2020-EU.1.2.2.";"de";"H2020-EU.1.2.2.";"";"";"FET – proaktiver Bereich";"FET Proactive";"

FET – proaktiver Bereich

Durch die Förderung neu entstehender Themen und Gemeinschaften (""FET – proaktiver Bereich"") werden in enger Verbindung mit den Schwerpunkten ""Gesellschaftliche Herausforderungen"" und ""Führende Rolle bei grundlegenden und industriellen Technologien"" vielversprechende Themen der Sondierungsforschung erschlossen, die eine kritische Masse zusammenhängender Projekte generieren können, welche zusammengenommen eine breite Palette facettenreicher Themen darstellen und zum Aufbau eines europäischen Wissenspools beitragen.";"";"H2020";"H2020-EU.1.2.";"";"";"2014-09-22 20:39:14";"664105" +"H2020-EU.3.5.3.";"pl";"H2020-EU.3.5.3.";"";"";"Zapewnienie zrównoważonych dostaw surowców nieenergetycznych i nierolniczych";"Supply of non-energy and non-agricultural raw materials";"

Zapewnienie zrównoważonych dostaw surowców nieenergetycznych i nierolniczych

Celem jest poszerzenie bazy wiedzy na temat surowców oraz rozwój innowacyjnych rozwiązań w zakresie racjonalnych pod względem kosztów, zasobooszczędnych i przyjaznych dla środowiska poszukiwań, wydobycia, przetwarzania, użytkowania oraz ponownego wykorzystywania, recyklingu i odzysku surowców oraz ich zastępowania gospodarczo atrakcyjnymi i zrównoważonymi środowiskowo alternatywami o mniejszym wpływie na środowisko, w tym procesami i systemami działającymi na zasadzie obiegu zamkniętego. Działania mają koncentrować się na: poszerzaniu bazy wiedzy na temat dostępności surowców; promowaniu zrównoważonych i efektywnych dostaw, użytkowania i ponownego wykorzystywania surowców, w tym surowców mineralnych, lądowych i morskich; nalezieniu alternatyw dla surowców krytycznych oraz podniesieniu świadomości społecznej i umiejętności związanych z surowcami.";"";"H2020";"H2020-EU.3.5.";"";"";"2014-09-22 20:48:35";"664407" +"H2020-EU.3.5.3.";"en";"H2020-EU.3.5.3.";"";"";"Ensuring the sustainable supply of non-energy and non-agricultural raw materials";"Supply of non-energy and non-agricultural raw materials";"

Ensuring the sustainable supply of non-energy and non-agricultural raw materials

The aim is to improve the knowledge base on raw materials and develop innovative solutions for the cost-effective, resource-efficient and environmentally friendly exploration, extraction, processing, use and re-use, recycling and recovery of raw materials and for their substitution by economically attractive and environmentally sustainable alternatives with a lower environmental impact, including closed-loop processes and systems. Activities shall focus on improving the knowledge base on the availability of raw materials; promoting the sustainable and efficient supply, use and re-use of raw materials, including mineral resources, from land and sea; finding alternatives for critical raw materials; and improving societal awareness and skills on raw materials.";"";"H2020";"H2020-EU.3.5.";"";"";"2014-09-22 20:48:35";"664407" +"H2020-EU.3.5.3.";"it";"H2020-EU.3.5.3.";"";"";"Garantire un approvvigionamento sostenibile di materie prime non energetiche e non agricole";"Supply of non-energy and non-agricultural raw materials";"

Garantire un approvvigionamento sostenibile di materie prime non energetiche e non agricole

Lo scopo è migliorare la base di conoscenze sulle materie prime e sviluppare soluzioni innovative per l'esplorazione, l'estrazione, il trattamento, l'utilizzazione e la riutilizzazione, il riciclaggio e il recupero di materie prime efficienti in termini di costi e sotto il profilo delle risorse e rispettosi dell'ambiente e per la loro sostituzione con alternative a minor impatto ambientale economicamente attraenti e sostenibili sul piano ambientale, compresi processi e sistemi a ciclo chiuso. Le attività si concentrano sul miglioramento della base di conoscenze relativa alla disponibilità di materie prime, sulla promozione della fornitura, dell'utilizzo e del riutilizzo sostenibili ed efficaci delle materie prime, comprese le risorse minerarie, a terra e in mare, sull'individuazione di alternative alle materie prime essenziali e sul miglioramento della consapevolezza e delle competenze sociali riguardo alle materie prime.";"";"H2020";"H2020-EU.3.5.";"";"";"2014-09-22 20:48:35";"664407" +"H2020-EU.3.5.3.";"fr";"H2020-EU.3.5.3.";"";"";"Garantir un approvisionnement durable en matières premières non énergétiques et non agricoles";"Supply of non-energy and non-agricultural raw materials";"

Garantir un approvisionnement durable en matières premières non énergétiques et non agricoles

L'objectif est de consolider la base de connaissances sur les matières premières et de mettre au point des solutions innovantes pour assurer la prospection, l'extraction, la transformation, l'utilisation, la réutilisation, le recyclage et la récupération des matières premières à moindre coût, dans le cadre d'une utilisation efficace des ressources et dans le respect de l'environnement, et pour remplacer ces matières premières par d'autres produits intéressants du point de vue économique, respectant les principes du développement durable et moins néfastes pour l'environnement, y compris des processus et des systèmes en circuit fermé. Les activités visent avant tout à améliorer la base de connaissances sur la disponibilité des matières premières, à promouvoir l'approvisionnement durable et efficace en matières premières ainsi que l'utilisation et la réutilisation durables et efficaces de ces dernières, y compris les ressources minérales, sur terre et en mer, à trouver des matières de remplacement pour les matières premières les plus importantes et à accroître la prise de conscience de la société et les compétences en ce qui concerne les matières premières.";"";"H2020";"H2020-EU.3.5.";"";"";"2014-09-22 20:48:35";"664407" +"H2020-EU.3.5.3.";"de";"H2020-EU.3.5.3.";"";"";"Gewährleistung einer nachhaltigen Versorgung mit nicht-energetischen und nicht-landwirtschaftlichen Rohstoffen";"Supply of non-energy and non-agricultural raw materials";"

Gewährleistung einer nachhaltigen Versorgung mit nicht-energetischen und nicht-landwirtschaftlichen Rohstoffen

Ziel ist es, mehr Erkenntnisse über Rohstoffe zu gewinnen und innovative Lösungen für die kosteneffiziente, ressourcenschonende und umweltfreundliche Exploration, Gewinnung, Verarbeitung, Verwendung, Wiederverwendung und -verwertung sowie Rückgewinnung von Rohstoffen und für deren Ersatz durch wirtschaftlich interessante und ökologisch nachhaltige Alternativen mit besserer Umweltbilanz zu entwickeln, einschließlich Kreislaufprozessen und -systemen. Schwerpunkt der Tätigkeiten ist die Verbesserung der Wissensbasis über die Verfügbarkeit von Rohstoffen, die Förderung einer nachhaltigen und effizienten Versorgung mit und Verwendung sowie Wiederverwendung von Rohstoffen, einschließlich an Land und am Meeresboden gewonnener Mineralien, die Suche nach Alternativen für kritische Rohstoffe sowie die Schärfung des gesellschaftlichen Bewusstseins und die Verbesserung der Qualifikationen im Hinblick auf Rohstoffe.";"";"H2020";"H2020-EU.3.5.";"";"";"2014-09-22 20:48:35";"664407" +"H2020-EU.3.5.3.";"es";"H2020-EU.3.5.3.";"";"";"Garantía de un abastecimiento sostenible de materias primas no agrícolas y no energéticas";"Supply of non-energy and non-agricultural raw materials";"

Garantía de un abastecimiento sostenible de materias primas no agrícolas y no energéticas

El objetivo es mejorar la base de conocimientos sobre las materias primas y buscar soluciones innovadoras para la exploración, extracción, tratamiento, utilización, reutilización, reciclado y recuperación de materias primas de forma rentable, eficiente en la utilización de recursos y respetuosa del medio ambiente, y para su sustitución por alternativas económicamente atractivas y ecológicamente sostenibles de menor impacto ambiental inclusive sistemas y procesos de circuito cerrado. Las actividades se centrarán en: mejorar la base de conocimientos sobre la disponibilidad de materias primas; promover el abastecimiento sostenible y eficiente, la utilización y reutilización de materias primas, incluidos los recursos minerales, de la tierra y del mar; encontrar alternativas a las materias primas críticas; y mejorar la concienciación social y la capacitación en el área de las materias primas.";"";"H2020";"H2020-EU.3.5.";"";"";"2014-09-22 20:48:35";"664407" +"H2020-Euratom-1.";"en";"H2020-Euratom-1.";"";"";"Indirect actions";"";"";"";"H2020";"H2020-Euratom";"";"";"2014-09-23 20:22:20";"664517" +"H2020-EU.3.2.3.1.";"en";"H2020-EU.3.2.3.1.";"";"";"Developing sustainable and environmentally-friendly fisheries";"";"";"";"H2020";"H2020-EU.3.2.3.";"";"";"2014-09-22 20:45:15";"664303" +"H2020-EU.3.6.1.";"es";"H2020-EU.3.6.1.";"";"";"Sociedades inclusivas";"Inclusive societies";"

Sociedades inclusivas

El objetivo es conseguir una mayor comprensión de los cambios de la sociedad europea y sus consecuencias en términos de cohesión social, y analizar y desarrollar la inclusión social, económica y política y una dinámica intercultural positiva en Europa y con los socios internacionales, a través de la ciencia de vanguardia y la interdisciplinariedad, los avances tecnológicos y las innovaciones organizativas. Las principales cuestiones que se han abordar en lo que respecta a los modelos europeos de cohesión y bienestar social son, entre otras cosas, la migración, la integración, el cambio demográfico, el envejecimiento de la población y la discapacidad, la educación y el aprendizaje permanente, así como la reducción de la pobreza y de la exclusión social, teniendo en cuenta las diferentes características regionales y culturales.La investigación en el ámbito de las Ciencias Sociales y las Humanidades desempeña aquí un papel de primer orden ya que explora los cambios que se producen en el espacio y con el transcurso del tiempo y posibilita la exploración de futuros imaginados. Europa tiene una larga historia común tanto de cooperación como de conflicto. Sus dinámicas interacciones culturales son fuente de inspiración y oportunidades. Son necesarios trabajos de investigación para comprender el sentimiento de identidad y de pertenencia en las distintas comunidades, regiones y naciones. La investigación ayudará a los responsables a diseñar políticas que promuevan el empleo, combatan la pobreza y eviten el desarrollo de diversas formas de división, conflicto y exclusión social y política, discriminación y desigualdad en las sociedades europeas, como las desigualdades de género e intergeneracionales, la discriminación por discapacidad u origen étnico, o las brechas digital y de la innovación, así como con otras regiones del mundo. En particular, efectuará aportaciones a la aplicación y adaptación de la estrategia Europa 2020 y a la acción exterior de la Unión en general.Las actividades se centrarán en la comprensión, la promoción o la aplicación de:(a) los mecanismos para promover un crecimiento inteligente, sostenible e integrador; (b) las organizaciones, prácticas, servicios y políticas fiables necesarias para construir sociedades resistentes, inclusivas, participativas, abiertas y creativas en Europa, en especial teniendo en cuenta la migración, la integración y el cambio demográfico; (c) el papel de Europa como actor mundial, en particular en cuanto a los derechos humanos y la justicia mundial; (d) la promoción de entornos sostenibles e inclusivos a través de una ordenación y concepción territorial y urbana innovadoras. ";"";"H2020";"H2020-EU.3.6.";"";"";"2014-09-22 20:49:32";"664437" +"H2020-EU.3.6.1.";"fr";"H2020-EU.3.6.1.";"";"";"Des sociétés ouvertes à tous";"Inclusive societies";"

Des sociétés ouvertes à tous

L'objectif est de mieux comprendre les changements de société en Europe et leurs répercussions sur la cohésion sociale, et d'analyser et de développer l'inclusion sociale, économique et politique ainsi que la dynamique interculturelle positive en Europe et avec les partenaires internationaux, au moyen d'activités scientifiques de pointe et de l'interdisciplinarité, d'avancées technologiques et d'innovations sur le plan de l'organisation. Les principaux défis à relever en ce qui concerne les modèles européens de cohésion sociale et de bien-être sont, notamment, l'immigration, l'intégration, l'évolution démographique, le vieillissement de la population et le handicap, l'éducation et l'apprentissage tout au long de la vie ainsi que la réduction de la pauvreté et de l'exclusion sociale, en tenant compte des différentes caractéristiques régionales et culturelles.La recherche en sciences sociales et humaines joue un rôle prépondérant dans ce contexte car elle étudie les changements spatiotemporels et permet l'analyse des avenirs envisagés. L'Europe a une longue histoire commune faite de coopération et de conflit. Ses interactions culturelles dynamiques servent d'inspiration et offrent des perspectives. La recherche est nécessaire pour comprendre le sentiment d'identité et d'appartenance selon les communautés, les régions et les nations. Elle aidera les décideurs politiques à élaborer des politiques qui permettent de favoriser l'emploi, de lutter contre la pauvreté et de prévenir le développement de diverses formes de divisions, de conflits et d'exclusions politiques et sociales, de discriminations et d'inégalités, telles que les inégalités entre les sexes et entre les générations, la discrimination due au handicap ou à l'origine ethnique, la fracture numérique ou les écarts en matière d'innovation, au sein des sociétés européennes et dans d'autres régions du monde. Elle doit en particulier alimenter le processus de mise en œuvre et d'adaptation de la stratégie Europe 2020 et l'action extérieure de l'Union au sens large.Les activités visent à comprendre et à promouvoir ou à mettre en œuvre:(a) les mécanismes permettant de favoriser une croissance intelligente, durable et inclusive; (b) les organisations, les pratiques, les services et les politiques dignes de confiance qui sont nécessaires pour construire des sociétés résilientes, inclusives, participatives, ouvertes et créatives en Europe, en tenant compte en particulier de l'immigration, de l'intégration et de l'évolution démographique; (c) le rôle de l'Europe en tant qu'acteur sur la scène mondiale, notamment en ce qui concerne les droits de l'homme et la justice mondiale; (d) la promotion d'environnements durables et ouverts à tous par un aménagement et une conception du territoire et de l'espace urbain innovants. ";"";"H2020";"H2020-EU.3.6.";"";"";"2014-09-22 20:49:32";"664437" +"H2020-EU.3.6.1.";"de";"H2020-EU.3.6.1.";"";"";"Integrative Gesellschaften";"Inclusive societies";"

Integrative Gesellschaften

Ziel ist ein besseres Verständnis des gesellschaftlichen Wandels in Europa und seiner Auswirkungen auf den sozialen Zusammenhalt sowie die Analyse und die Entwicklung der gesellschaftlichen, wirtschaftlichen und politischen Integration und einer positiven interkulturellen Dynamik in Europa und mit internationalen Partnern durch Spitzenforschung und Interdisziplinarität, technologische Fortschritte und organisatorische Innovationen. Zu den Hauptherausforderungen in Bezug auf die europäischen Modelle für den sozialen Zusammenhalt und das Wohlergehen zählen u. a.Migration, Integration, der demografische Wandel, die alternde Gesellschaft und Behinderungen, Bildung und lebenslanges Lernen sowie die Armutsbekämpfung und die soziale Ausgrenzung, wobei die unterschiedlichen regionalen und kulturellen Gegebenheiten zu beachten sind. Sozial- und Geisteswissenschaften spielen hierbei eine führende Rolle, da sie Veränderungen über Raum und Zeit hinweg erforschen und die Erforschung fiktiver Zukunftsverhältnisse ermöglichen. Europa hat eine große gemeinsame Geschichte sowohl in Form von Zusammenarbeit als auch in Form von Konflikten. Die dynamischen kulturellen Interaktionen in Europa bieten Anregungen und Chancen. Forschung ist notwendig, um die Identität von und die Zugehörigkeit zu unterschiedlichen Gemeinschaften, Regionen und Nationen zu verstehen. Die Forschung soll die politischen Entscheidungsträger bei der Festlegung von Strategien unterstützen, die der Beschäftigungsförderung, der Bekämpfung der Armut und der Vermeidung der Entwicklung verschiedener Formen von Abspaltung, Konflikten sowie politischer und sozialer Ausgrenzung, Diskriminierung und Ungleichheiten dienen, wie etwa Ungleichheiten zwischen den Geschlechtern und Generationen, Diskriminierungen aufgrund einer Behinderung oder der ethnischen Herkunft oder der digitalen Kluft oder Innovationskluft in europäischen Gesellschaften und in anderen Regionen der Welt. Sie dient insbesondere der Umsetzung und Anpassung der Strategie Europa 2020 und außenpolitischer Maßnahmen der Union im weitesten Sinn.Schwerpunkt der Tätigkeiten ist es, Folgendes zu verstehen und zu fördern bzw. einzuführen:(a) Mechanismen für die Förderung eines intelligenten, nachhaltigen und integrativen Wachstums; (b) bewährte Organisationsstrukturen, Verfahren, Dienstleistungen und Strategien, die für den Aufbau widerstandsfähiger, integrativer, offener und kreativer Gesellschaften in Europa erforderlich sind, insbesondere unter Berücksichtigung der Migration, der Integration und des demografischen Wandels; (c) Rolle Europas als globaler Akteur, insbesondere in Bezug auf Menschenrechte und globales Recht; (d) Förderung eines nachhaltigen und integrativen Umfelds durch innovative Raum- und Stadtplanung. ";"";"H2020";"H2020-EU.3.6.";"";"";"2014-09-22 20:49:32";"664437" +"H2020-EU.3.6.1.";"it";"H2020-EU.3.6.1.";"";"";"Società inclusive";"Inclusive societies";"

Società inclusive

L'obiettivo è comprendere meglio i cambiamenti sociali in atto in Europa e il loro impatto sulla coesione sociale e analizzare e sviluppare l'inclusione sociale, economica e politica e le dinamiche interculturali positive in Europa e con i partner internazionali, per mezzo di una scienza d'avanguardia e di un approccio interdisciplinare, di progressi tecnologici e innovazioni organizzative. Le sfide principali da affrontare in materia di modelli europei di coesione sociale e benessere sono tra l'altro la migrazione, l'integrazione, il cambiamento demografico, l'invecchiamento della società e la disabilità, l'istruzione e l'apprendimento permanente nonché la riduzione della povertà e dell'esclusione sociale, tenendo conto delle diverse caratteristiche regionali e culturali.La ricerca nell'ambito delle scienze sociali e delle discipline umanistiche svolge un ruolo di guida, in quanto osserva le mutazioni nel tempo e nello spazio e permette di esplorare futuri possibili. L'Europa ha una lunga storia comune di cooperazione e conflitto. Le sue interazioni culturali dinamiche offrono ispirazione e opportunità. La ricerca è necessaria per comprendere l'identità e l'appartenenza a livello di comunità, regioni e nazioni. La ricerca sosterrà i responsabili politici nella definizione di politiche che sostengano l'occupazione, lottino contro la povertà e prevengano lo sviluppo di diverse forme di separazione, conflitto ed esclusione politica e sociale, discriminazioni e disuguaglianze, quali le disuguaglianze di genere e intergenerazionali, la discriminazione a causa della disabilità o dell'origine etnica e i divari digitali o in materia di innovazione, nelle società europee e nelle altre regioni del mondo. In particolare la ricerca contribuisce all'attuazione e all'adattamento della strategia Europa 2020 e della più ampia azione esterna dell'Unione.Le attività si concentrano sulla comprensione e l'incentivazione o attuazione dei seguenti elementi:(a) i meccanismi per promuovere una crescita intelligente, sostenibile e inclusiva; (b) le organizzazioni di fiducia, le pratiche, le politiche e i servizi che sono necessari per la costruzione di società adattabili, inclusive, partecipative, aperte e creative in Europa, tenendo conto in particolare della migrazione, dell'integrazione e del cambiamento demografico; (c) il ruolo di attore mondiale dell'Europa, segnatamente per quanto riguarda i diritti umani e la giustizia nel mondo; (d) la promozione degli ambienti sostenibili e inclusivi mediante pianificazione e progettazione territoriali e urbane innovative. ";"";"H2020";"H2020-EU.3.6.";"";"";"2014-09-22 20:49:32";"664437" +"H2020-EU.3.6.1.";"pl";"H2020-EU.3.6.1.";"";"";"Społeczeństwa integracyjne";"Inclusive societies";"

Społeczeństwa integracyjne

Celem jest lepsze zrozumienie zmian społecznych w Europie i ich wpływu na spójność społeczną oraz analiza i rozwój integracji społecznej, gospodarczej i politycznej, a także pozytywnej dynamiki międzykulturowej w Europie i w stosunkach z partnerami międzynarodowymi, poprzez pionierską działalność naukową i interdyscyplinarność, postępy technologiczne i innowacje organizacyjne. Główne wyzwania, jakim trzeba stawić czoła w przypadku europejskich modeli spójności społecznej i dobrobytu, to m.in. migracja, integracja, zmiany demograficzne, starzenie się społeczeństwa i niepełnosprawność, edukacja i uczenie się przez całe życie, a także redukcja ubóstwa i wykluczenia społecznego przy uwzględnieniu różnych uwarunkowań regionalnych i kulturowych.Badania w dziedzinie nauk społecznych i humanistycznych odgrywają tutaj wiodącą rolę, ponieważ analizują zmiany zachodzące w czasie i przestrzeni i umożliwiają sprawdzenie tworzonych w wyobraźni wizji przyszłości. Europa ma ogromną wspólną historię zarówno współpracy, jak i konfliktu. Jej dynamiczne interakcje kulturalne dostarczają inspiracji i możliwości. Niezbędne są badania naukowe pozwalające zrozumieć tożsamość i poczucie przynależności do poszczególnych społeczności, regionów i narodów. Badania naukowe zapewnią decydentom wsparcie w kształtowaniu polityki sprzyjającej zatrudnieniu, zwalczającej ubóstwo i zapobiegającej rozwojowi różnych form podziałów, konfliktów oraz wykluczenia politycznego i społecznego, dyskryminacji i nierówności, takich jak nierówności płci i nierówności międzypokoleniowe, dyskryminacji ze względu na niepełnosprawność lub pochodzenie etniczne lub nierówny dostęp do technologii cyfrowych lub innowacji, w społeczeństwach europejskich, jak również w stosunku do innych regionów świata. W szczególności badania naukowe mają przyczynić się do wdrożenia i dostosowania strategii „Europa 2020” oraz szerokich działań zewnętrznych Unii.Działania mają skoncentrować się na zrozumieniu i wspieraniu bądź wdrażaniu:(a) mechanizmów promowania inteligentnego i trwałego wzrostu gospodarczego sprzyjającego włączeniu społecznemu; (b) zaufanych organizacji, praktyk, usług i polityk, które są konieczne, aby zbudować odporne integracyjne, partycypacyjne, otwarte i kreatywne społeczeństwa w Europie, ze szczególnym uwzględnieniem migracji, integracji i zmian demograficznych; (c) roli Europy jako globalnego podmiotu, w szczególności w dziedzinie praw człowieka i wymiaru sprawiedliwości na świecie; (d) promowania zrównoważonych i integracyjnych środowisk poprzez innowacyjne planowanie i projektowanie przestrzenne i urbanistykę. ";"";"H2020";"H2020-EU.3.6.";"";"";"2014-09-22 20:49:32";"664437" +"H2020-EU.3.6.1.";"en";"H2020-EU.3.6.1.";"";"";"Inclusive societies";"Inclusive societies";"

Inclusive societies

The aim is to gain a greater understanding of the societal changes in Europe and their impact on social cohesion, and to analyse and develop social, economic and political inclusion and positive inter-cultural dynamics in Europe and with international partners, through cutting-edge science and interdisciplinarity, technological advances and organisational innovations. The main challenges to be tackled concerning European models for social cohesion and well-being are, inter alia, migration, integration, demographic change, the ageing society and disability, education and lifelong learning, as well as the reduction of poverty and social exclusion taking into account the different regional and cultural characteristics.Social sciences and humanities research plays a leading role here as it explores changes over time and space and enables exploration of imagined futures. Europe has a huge shared history of both co-operation and conflict. Its dynamic cultural interactions provide inspiration and opportunities. Research is needed to understand identity and belonging across communities, regions and nations. Research will support policymakers in designing policies that foster employment, combat poverty and prevent the development of various forms of divisions, conflict and political and social exclusion, discrimination and inequalities, such as gender and intergenerational inequalities, discrimination due to disability or ethnic origin, or digital or innovation divides, in European societies and in other regions of the world. It shall in particular feed into the implementation and the adaptation of the Europe 2020 strategy and the broad external action of the Union.The focus of activities shall be to understand and foster or implement:(a) the mechanisms to promote smart, sustainable and inclusive growth; (b) trusted organisations, practices, services and policies that are necessary to build resilient, inclusive, participatory, open and creative societies in Europe, in particular taking into account migration, integration and demographic change; (c) Europe's role as a global actor, notably regarding human rights and global justice; (d) the promotion of sustainable and inclusive environments through innovative spatial and urban planning and design. ";"";"H2020";"H2020-EU.3.6.";"";"";"2014-09-22 20:49:32";"664437" +"H2020-EU.4.a.";"en";"H2020-EU.4.a.";"";"";"Teaming of excellent research institutions and low performing RDI regions";"Teaming of research institutions and low performing regions";"

Teaming of excellent research institutions and low performing RDI regions

aiming at the creation of new (or significant upgrade of existing) centres of excellence in low performing RDI Member States and regions.";"";"H2020";"H2020-EU.4.";"";"";"2014-09-22 20:51:00";"664483" +"H2020-EU.4.a.";"es";"H2020-EU.4.a.";"";"";"Creación de nuevos centros de excelencia";"Teaming of research institutions and low performing regions";"

Creación de nuevos centros de excelencia

(o mejora considerable de los ya existentes) en los Estados miembros y regiones con menor rendimiento de desarrollo tecnológico e innovación.";"";"H2020";"H2020-EU.4.";"";"";"2014-09-22 20:51:00";"664483" +"H2020-EU.4.a.";"pl";"H2020-EU.4.a.";"";"";"łączeniu w zespoły najlepszych instytucji badawczych (ang. teaming) oraz przedstawicieli regionów osiągających słabe wyniki w zakresie badań, rozwoju i innowacji,";"Teaming of research institutions and low performing regions";"

łączeniu w zespoły najlepszych instytucji badawczych (ang. teaming) oraz przedstawicieli regionów osiągających słabe wyniki w zakresie badań, rozwoju i innowacji,

co będzie miało na celu utworzenie nowych (lub znaczące podniesienie statusu istniejących) centrów doskonałości w państwach członkowskich i regionach osiągających słabe wyniki w zakresie badań, rozwoju i innowacji. ";"";"H2020";"H2020-EU.4.";"";"";"2014-09-22 20:51:00";"664483" +"H2020-EU.4.a.";"fr";"H2020-EU.4.a.";"";"";"Faire travailler ensemble des institutions de recherche d'excellence et des régions peu performantes en matière de recherche, de développement et d'innovation ";"Teaming of research institutions and low performing regions";"

Faire travailler ensemble des institutions de recherche d'excellence et des régions peu performantes en matière de recherche, de développement et d'innovation

L'objectif étant de créer de nouveaux centres d'excellence (ou de remettre à niveau ceux qui existent) dans les États membres et les régions peu performants en matière de recherche, de développement et d'innovation.";"";"H2020";"H2020-EU.4.";"";"";"2014-09-22 20:51:00";"664483" +"H2020-EU.4.a.";"de";"H2020-EU.4.a.";"";"";"Zusammenführung von exzellenten Forschungseinrichtungen und hinsichtlich Forschung, Entwicklung und Innovation leistungsschwachen Regionen";"Teaming of research institutions and low performing regions";"

Zusammenführung von exzellenten Forschungseinrichtungen und hinsichtlich Forschung, Entwicklung und Innovation leistungsschwachen Regionen

mit dem Ziel, neue Exzellenzzentren in den hinsichtlich Forschung, Entwicklung und Innovation leistungsschwachen Mitgliedstaaten und Regionen zu schaffen (oder bestehende Zentren umfassend aufzurüsten).";"";"H2020";"H2020-EU.4.";"";"";"2014-09-22 20:51:00";"664483" +"H2020-EU.4.a.";"it";"H2020-EU.4.a.";"";"";"Raggruppamento di istituti di ricerca di eccellenza e regioni con prestazioni meno soddisfacenti dal punto di vista dell'RSI";"Teaming of research institutions and low performing regions";"

Raggruppamento di istituti di ricerca di eccellenza e regioni con prestazioni meno soddisfacenti dal punto di vista dell'RSI

Miranti a creare nuovi centri di eccellenza (o a migliorare in modo significativo quelli esistenti) in Stati membri e regioni con prestazioni meno soddisfacenti dal punto di vista dell'RSI.";"";"H2020";"H2020-EU.4.";"";"";"2014-09-22 20:51:00";"664483" +"H2020-EU.3.6.3.2.";"en";"H2020-EU.3.6.3.2.";"";"";"Research into European countries' and regions' history, literature, art, philosophy and religions and how these have informed contemporary European diversity";"";"";"";"H2020";"H2020-EU.3.6.3.";"";"";"2015-01-23 18:42:15";"664459" +"H2020-EU.4.c.";"fr";"H2020-EU.4.c.";"";"";"Instaurer des «chaires EER»";"ERA chairs";"

Instaurer des «chaires EER»

Instaurer des «chaires EER» pour attirer des universitaires de renom dans des institutions ayant un clair potentiel d'excellence dans la recherche, afin d'aider ces institutions à libérer pleinement ce potentiel et créer de ce fait des conditions de concurrence égales pour la recherche et l'innovation dans l'EER. Il faudrait étudier les possibilités de synergies avec les activités du CER.";"";"H2020";"H2020-EU.4.";"";"";"2014-09-22 20:51:07";"664487" +"H2020-EU.4.c.";"pl";"H2020-EU.4.c.";"";"";"Ustanowieniu „katedr EPB” (ang. „ERA chairs”)";"ERA chairs";"

Ustanowieniu „katedr EPB” (ang. „ERA chairs”)

w celu przyciągnięcia wybitnych przedstawicieli środowisk akademickich do instytucji dysponujących wyraźnym potencjałem doskonałości badawczej, aby pomóc tym instytucjom w pełni uwolnić ich potencjał i stworzyć tym samym równe warunki działania w zakresie badań naukowych i innowacji w EPB. Należy zbadać możliwość synergii z działalnością Europejskiej Rady ds. Badań Naukowych.";"";"H2020";"H2020-EU.4.";"";"";"2014-09-22 20:51:07";"664487" +"H2020-EU.4.c.";"de";"H2020-EU.4.c.";"";"";"Einrichtung von EFR-Lehrstühlen";"ERA chairs";"

Einrichtung von EFR-Lehrstühlen

um herausragende Wissenschaftler für Einrichtungen mit einem eindeutigen Potenzial für Exzellenz in der Forschung zu interessieren, damit diese Einrichtungen ihr Potenzial in vollem Umfang freisetzen können und so im Europäischen Forschungsraum gleichberechtigte Bedingungen für Forschung und Innovation entstehen. Mögliche Synergien mit den Tätigkeiten des ERC sollten erforscht werden.";"";"H2020";"H2020-EU.4.";"";"";"2014-09-22 20:51:07";"664487" +"H2020-EU.4.c.";"it";"H2020-EU.4.c.";"";"";"Istituzione di cattedre ""SER""";"ERA chairs";"

Istituzione di cattedre ""SER""

Per attirare accademici di alto livello negli istituti con un chiaro potenziale di ricerca di eccellenza, al fine di aiutare tali istituti a realizzare pienamente il loro potenziale e creare così condizioni eque per la ricerca e l'innovazione nel SER. Occorre esplorare possibili sinergie con le attività del CER.";"";"H2020";"H2020-EU.4.";"";"";"2014-09-22 20:51:07";"664487" +"H2020-EU.4.c.";"es";"H2020-EU.4.c.";"";"";"Establecimiento de ""cátedras del EEI""";"ERA chairs";"

Establecimiento de ""cátedras del EEI""

para atraer a personal prominente de las instituciones académicas a instituciones que tengan un claro potencial para la excelencia en la investigación con el fin de ayudar a dichas instituciones a desarrollar plenamente su potencial y lograr así un contexto de igualdad de oportunidades para el impulso de la investigación y la innovación en el EEI. Deberían explorarse posibles sinergias con las actividades del Consejo Europeo de Investigación.";"";"H2020";"H2020-EU.4.";"";"";"2014-09-22 20:51:07";"664487" +"H2020-EU.3.3.8.1.";"en";"H2020-EU.3.3.8.1.";"";"";"Increase the electrical efficiency and the durability of the different fuel cells used for power production to levels which can compete with conventional technologies, while reducing costs";"";"";"";"H2020";"H2020-EU.3.3.8.";"";"";"2014-09-22 21:40:04";"665335" +"H2020-EU.3.5.1.";"it";"H2020-EU.3.5.1.";"";"";"Lotta e adattamento ai cambiamenti climatici";"Fighting and adapting to climate change";"

Lotta e adattamento ai cambiamenti climatici

Lo scopo è sviluppare e valutare misure e strategie di adattamento e attenuazione innovative, efficienti in termini di costi e sostenibili concernenti i gas ad effetto serra e gli aerosol (CO2 e diversi dal CO2), sottolineando le soluzioni verdi tecnologiche e non, attraverso la produzione di prove finalizzata a un'azione informata, tempestiva ed efficace e la messa in rete delle competenze richieste. Le attività si concentrano sul miglioramento della comprensione dei cambiamenti climatici e dei rischi associati ai fenomeni estremi nonché ai cambiamenti improvvisi legati al clima al fine di fornire proiezioni climatiche affidabili, sulla valutazione degli impatti a livello globale, regionale e locale e delle vulnerabilità, sullo sviluppo di misure di adeguamento e di prevenzione e gestione dei rischi innovative ed efficienti in termini di costi e sul sostegno alle politiche e alle strategie di mitigazione, tra cui gli studi incentrati sull'impatto di altre politiche settoriali.";"";"H2020";"H2020-EU.3.5.";"";"";"2014-09-22 20:48:05";"664391" +"H2020-EU.3.5.1.";"de";"H2020-EU.3.5.1.";"";"";"Klimaschutz und Anpassung an den Klimawandel";"Fighting and adapting to climate change";"

Klimaschutz und Anpassung an den Klimawandel

Ziel ist die Entwicklung und Bewertung innovativer, kosteneffizienter und nachhaltiger Anpassungs- und Minderungsmaßnahmen und -strategien, die auf CO2 und andere Treibhausgase und Aerosole und sowohl technologische als auch nichttechnologische ""grüne"" Lösungen abstellen, indem Daten generiert werden, die es ermöglichen, in Kenntnis der Sachlage frühzeitige und wirksame Maßnahmen zu treffen und die notwendigen Kompetenzen zu vernetzen. Schwerpunkt der Tätigkeiten sind ein besseres Verständnis des Klimawandels und der Gefahren, die mit Extremereignissen und abrupten klimabezogenen Veränderungen verbunden sind, im Hinblick auf die Bereitstellung zuverlässiger Klimaprojektionen, die Bewertung der Folgen auf globaler, regionaler und lokaler Ebene, Schwachstellen, die Entwicklung innovativer und kosteneffizienter Anpassungs- und Risikovermeidungs- und -bewältigungsmaßnahmen sowie die Unterstützung von Minderungsstrategien, einschließlich Studien mit Schwerpunkt auf den Auswirkungen anderer sektorbezogener Strategien.";"";"H2020";"H2020-EU.3.5.";"";"";"2014-09-22 20:48:05";"664391" +"H2020-EU.3.5.1.";"fr";"H2020-EU.3.5.1.";"";"";"Combattre le changement climatique et s'y adapter";"Fighting and adapting to climate change";"

Combattre le changement climatique et s'y adapter

L'objectif est de définir et d'étudier des mesures et des stratégies d'adaptation et d'atténuation qui soient à la fois novatrices, économiquement avantageuses et durables concernant les gaz à effet de serre (CO2 et autres) et les aérosols, et qui viennent appuyer des solutions écologiques, technologiques ou non, grâce à la production de données utiles à l'adoption, en connaissance de cause, de mesures précoces et efficaces et grâce à la mise en réseau des compétences requises. Les activités viseront essentiellement à améliorer la compréhension du phénomène du changement climatique et des risques associés aux évènements extrêmes et aux changements brutaux liés au climat afin de fournir des projections fiables en la matière; à évaluer les impacts au niveau mondial, régional et local, ainsi que les vulnérabilités; à élaborer des mesures d'adaptation, de prévention et de gestion des risques novatrices et présentant un bon rapport coût-efficacité; et à soutenir les politiques et stratégies d'atténuation, y compris les études qui portent sur l'impact des autres politiques sectorielles.";"";"H2020";"H2020-EU.3.5.";"";"";"2014-09-22 20:48:05";"664391" +"H2020-EU.3.5.1.";"pl";"H2020-EU.3.5.1.";"";"";"Walka ze zmianą klimatu i przystosowanie się do niej";"Fighting and adapting to climate change";"

Walka ze zmianą klimatu i przystosowanie się do niej

Celem jest rozwój i ocena innowacyjnych, racjonalnych pod względem kosztów i zrównoważonych środków i strategii łagodzących zmianę klimatu i umożliwiających przystosowanie się do niej, dotyczących emisji gazów cieplarnianych i aerozoli zawierających CO2 i niezawierających go, uwzględniających ekologiczne rozwiązania technologiczne i nietechnologiczne, poprzez gromadzenie danych na potrzeby merytorycznych, wczesnych i skutecznych działań oraz tworzenie sieci podmiotów dysponujących odpowiednimi kompetencjami. Działania mają się koncentrować na: poprawie zrozumienia zmiany klimatu i zagrożeń związanych ze zdarzeniami ekstremalnymi i nagłymi zmianami dotyczącymi klimatu, co ma służyć przygotowaniu wiarygodnych prognoz w tym zakresie; ocenie skutków na poziomie globalnym, regionalnym i lokalnym oraz słabych punktów; na opracowaniu innowacyjnych, efektywnych kosztowo środków przystosowania się do zmiany klimatu i zapobiegania ryzyku oraz zarządzania ryzykiem oraz wspieraniu polityk oraz strategii związanych z łagodzeniem zmiany klimatu, w tym badań, których głównym przedmiotem jest oddziaływanie polityk prowadzonych w innych sektorach. ";"";"H2020";"H2020-EU.3.5.";"";"";"2014-09-22 20:48:05";"664391" +"H2020-EU.3.5.1.";"es";"H2020-EU.3.5.1.";"";"";"Lucha contra el cambio climático y adaptación al mismo";"Fighting and adapting to climate change";"

Lucha contra el cambio climático y adaptación al mismo

El objetivo es desarrollar y evaluar medidas y estrategias de adaptación y mitigación innovadoras, rentables y sostenibles, referidas tanto al CO2 como a otros gases de efecto invernadero y aerosoles, que propongan soluciones ""verdes"" tanto tecnológicas como no tecnológicas, mediante la generación de datos para actuar con prontitud, eficacia y conocimiento de causa y poner en red las competencias necesarias. Las actividades se centrarán en: mejorar la comprensión del cambio climático y los riesgos asociados con los fenómenos extremos y los cambios abruptos relacionados con el clima con el fin de proporcionar proyecciones climáticas fiables; evaluar los impactos a escala mundial, regional y local y puntos vulnerables y elaborar medidas rentables e innovadoras de adaptación, y de prevención y gestión del riesgo; respaldar las políticas y estrategias de mitigación, incluidos los estudios que se centran en el impacto de otras políticas sectoriales.";"";"H2020";"H2020-EU.3.5.";"";"";"2014-09-22 20:48:05";"664391" +"H2020-EU.3.1.5.3.";"en";"H2020-EU.3.1.5.3.";"";"";"Using in-silico medicine for improving disease management and prediction";"";"";"";"H2020";"H2020-EU.3.1.5.";"";"";"2014-09-22 20:44:18";"664273" +"H2020-EU.3.3.8.2.";"en";"H2020-EU.3.3.8.2.";"";"";"Increase the energy efficiency of production of hydrogen mainly from water electrolysis and renewable sources while reducing operating and capital costs, so that the combined system of the hydrogen production and the conversion using the fuel cell system can compete with the alternatives for electricity production available on the market";"";"";"";"H2020";"H2020-EU.3.3.8.";"";"";"2014-09-22 21:40:08";"665337" +"H2020-EU.3.1.6.2.";"en";"H2020-EU.3.1.6.2.";"";"";"Optimising the efficiency and effectiveness of healthcare provision and reducing inequalities by evidence based decision making and dissemination of best practice, and innovative technologies and approaches";"";"";"";"H2020";"H2020-EU.3.1.6.";"";"";"2014-09-22 20:44:29";"664279" +"H2020-EU.3.1.4.1.";"en";"H2020-EU.3.1.4.1.";"";"";"Active ageing, independent and assisted living";"";"";"";"H2020";"H2020-EU.3.1.4.";"";"";"2014-09-22 20:44:00";"664263" +"H2020-EU.4.c.";"en";"H2020-EU.4.c.";"";"";"Establishing ‚ERA Chairs’";"ERA chairs";"

Establishing ‚ERA Chairs’

to attract outstanding academics to institutions with a clear potential for research excellence, in order to help these institutions fully unlock this potential and hereby create a level playing field for research and innovation in the ERA. Possible synergies with ERC activities should be explored.";"";"H2020";"H2020-EU.4.";"";"";"2014-09-22 20:51:07";"664487" +"H2020-EU.3.5.1.";"en";"H2020-EU.3.5.1.";"";"";"Fighting and adapting to climate change";"Fighting and adapting to climate change";"

Fighting and adapting to climate change

The aim is to develop and assess innovative, cost-effective and sustainable adaptation and mitigation measures and strategies, targeting both CO2 and non-CO2 greenhouse gases and aerosols, and underlining both technological and non technological green solutions, through the generation of evidence for informed, early and effective action and the networking of the required competences. Activities shall focus on improving the understanding of climate change and the risks associated with extreme events and abrupt climate-related changes with a view to providing reliable climate projections; assessing impacts at global, regional and local level, and vulnerabilities; developing innovative cost-effective adaptation and risk prevention and management measures; and supporting mitigation policies and strategies, including studies that focus on impact from other sectoral policies.";"";"H2020";"H2020-EU.3.5.";"";"";"2014-09-22 20:48:05";"664391" +"H2020-EU.3.6.1.2.";"en";"H2020-EU.3.6.1.2.";"";"";"Trusted organisations, practices, services and policies that are necessary to build resilient, inclusive, participatory, open and creative societies in Europe, in particular taking into account migration, integration and demographic change";"";"";"";"H2020";"H2020-EU.3.6.1.";"";"";"2014-09-22 20:49:39";"664441" +"H2020-EU.3.7.1.";"en";"H2020-EU.3.7.1.";"";"";"Fight crime, illegal trafficking and terrorism, including understanding and tackling terrorist ideas and beliefs";"";"";"";"H2020";"H2020-EU.3.7.";"";"";"2014-09-22 20:50:27";"664465" +"H2020-EU.2.1.3.";"de";"H2020-EU.2.1.3.";"";"";"FÜHRENDE ROLLE DER INDUSTRIE - Führende Rolle bei grundlegenden und industriellen Technologien - Fortgeschrittene Werkstoffe";"Advanced materials";"

FÜHRENDE ROLLE DER INDUSTRIE - Führende Rolle bei grundlegenden und industriellen Technologien - Fortgeschrittene Werkstoffe

Einzelziel für fortgeschrittene Werkstoffe

Einzelziel der Forschung und Innovation auf dem Gebiet der fortgeschrittenen Werkstoffe ist die Entwicklung von Werkstoffen mit neuen Funktionalitäten und verbesserter Leistung in der Anwendung, um die Zahl der wettbewerbsfähigen und sicheren Produkte mit möglichst geringen Umweltauswirkungen und geringem Ressourcenverbrauch zu erhöhen.Werkstoffe stehen als wichtige Grundlage im Mittelpunkt der industriellen Innovation. Fortgeschrittene Werkstoffe, in denen noch mehr Wissen steckt, die neue Funktionalitäten und eine höhere Leistung haben, sind für die industrielle Wettbewerbsfähigkeit und nachhaltige Entwicklung für eine große Bandbreite von Anwendungen und Sektoren unerlässlich.

Begründung und Mehrwert für die Union

Für die Entwicklung leistungsfähigerer und nachhaltiger Produkte und Verfahren sowie für die Substitution knapper Ressourcen sind neue fortgeschrittene Werkstoffe notwendig. Diese Werkstoffe werden uns mit ihrer höheren Nutzleistung, ihrem niedrigeren Ressourcen- und Energieverbrauch sowie mit ihrer Nachhaltigkeit während der gesamten Lebensdauer der Produkte helfen, die industriellen und gesellschaftlichen Herausforderungen zu bewältigen.Die anwendungsorientierte Entwicklung erfordert häufig die Konzeption vollständig neuer Werkstoffe, die in der Lage sind, die angestrebten Leistungen in der Anwendung zu erbringen. Diese Werkstoffe sind ein wichtiges Glied in der Kette zur Herstellung hochwertiger Produkte. Auch sind sie die Grundlage für den Fortschritt in Querschnittstechnologien (etwa bei Technologien im Bereich der Gesundheitsfürsorge sowie in den Biowissenschaften, der Elektronik und Photonik) sowie in geradezu allen Marktsektoren. Wert- und Leistungssteigerungen eines Produkts hängen vor allem von den Werkstoffen selbst ab. Mit einer jährlichen Wachstumsrate von etwa 6 % und einer erwarteten Marktgröße von etwa 100 Mrd. EUR bis 2015 kommt den fortgeschrittenen Werkstoffen hinsichtlich Wertschöpfung und Stellenwert erhebliche Bedeutung zu.Bei der Konzeption der Werkstoffe wird der gesamte Lebenszyklus – von der Bereitstellung der verfügbaren Werkstoffe bis zum Ende des Lebenszyklus – berücksichtigt, wobei mit innovativen Ansätzen der Einsatz von Ressourcen (auch von Energie) während ihrer Verarbeitung minimiert wird oder die negativen Auswirkungen auf Mensch und Umwelt so gering wie möglich gehalten werden. Diese Betrachtung erstreckt sich auch auf die fortgesetzte Nutzung, die Verwertung oder eine Sekundärnutzung am Ende des Lebenszyklus der Werkstoffe sowie auf entsprechende gesellschaftliche Innovationen wie Änderungen im Verbraucherverhalten und neue Geschäftsmodelle.Um den Fortschritt zu beschleunigen, wird ein multidisziplinärer und konvergenter Ansatz gefördert, der sich auf Chemie, Physik, Ingenieurwissenschaften, theoretische Modelle und Computermodelle, Biowissenschaften und zunehmend auch auf kreatives Industriedesign stützt.Neuartige Allianzen ""grüner"" Innovationen und industrielle Symbiosen werden gefördert, um Unternehmen in die Lage zu versetzen und zu diversifizieren, ihre Geschäftsmodelle auszuweiten und ihre Abfallstoffe als Grundlage für neue Produktionen zu nutzen.

Einzelziele und Tätigkeiten in Grundzügen

(a) Übergreifende und grundlegende Werkstofftechnologien

Forschung zu individuell entwickelten Werkstoffen sowie zu funktionalen und multifunktionalen Werkstoffen mit höherem Know-how-Gehalt, neuen Funktionsmerkmalen und verbesserter Leistung und zu Strukturwerkstoffen für Innovationen in allen Industriesektoren einschließlich der Kreativbranchen.

(b) Entwicklung und Transformation von Werkstoffen

Forschung und Entwicklung im Hinblick auf künftige Produkte, die im Industriemaßstab effizient, sicher und nachhaltig konzipiert und hergestellt werden können, wobei das Endziel in einem ""abfallfreien"" Werkstoffmanagement in Europa besteht.

(c) Management von Werkstoffkomponenten

Forschung und Entwicklung neuer und innovativer Techniken für Materialien und ihre Komponenten und Systeme.

(d) Werkstoffe für eine nachhaltige und ressourcenschonende Industrie mit geringen Emissionen

Entwicklung neuer Produkte, Anwendungen und Geschäftsmodelle sowie Beitrag zu einem verantwortungsbewussten energiesparenden Verbraucherverhalten sowie zu einer Produktion mit niedrigem CO2-Ausstoß.

(e)Werkstoffe für kreative Branchen, einschließlich Kulturerbe

Anwendung von Design und Entwicklung konvergierender Technologien zur Erschließung neuer Geschäftsmöglichkeiten, einschließlich Erhalt und Restaurierung von Material von historischem oder kulturellem Wert, sowie neuartiger Werkstoffe.

(f) Metrologie, Merkmalsbeschreibung, Normung und Qualitätskontrolle

Förderung von Technologien wie Merkmalsbestimmung, nichtdestruktive Bewertung, laufende Beurteilung und Überwachung und Modelle für Leistungsprognosen für den Fortschritt und Folgewirkungen in der Werkstoffwissenschaft und -technik.

(g) Optimierung des Werkstoffeinsatzes

Forschung und Entwicklung zur Untersuchung von Substitutionen und Alternativen für den Einsatz von Werkstoffen und innovativen Ansätzen für Geschäftsmodelle sowie Identifizierung kritischer Ressourcen.";"";"H2020";"H2020-EU.2.1.";"";"";"2014-09-22 20:41:15";"664173" +"H2020-EU.2.1.3.";"it";"H2020-EU.2.1.3.";"";"";"LEADERSHIP INDUSTRIALE - Leadership nel settore delle tecnologie abilitanti e industriali - Materiali avanzati";"Advanced materials";"

LEADERSHIP INDUSTRIALE - Leadership nel settore delle tecnologie abilitanti e industriali - Materiali avanzati

Obiettivo specifico dei materiali avanzati

L'obiettivo specifico della ricerca e dell'innovazione nei materiali avanzati è sviluppare materiali con nuove funzionalità e migliori prestazioni d'uso, per prodotti più competitivi e sicuri che consentano di ridurre al minimo l'impatto sull'ambiente e il consumo delle risorse.I materiali sono al centro dell'innovazione industriale e rappresentano fattori determinanti. I materiali avanzati a più elevato contenuto di conoscenze, dotati di nuove funzionalità e migliori prestazioni, sono indispensabili per la competitività industriale e lo sviluppo sostenibile in una vasta gamma di applicazioni e settori.

Motivazione e valore aggiunto dell'Unione

Per sviluppare prodotti e processi più sostenibili e con migliori prestazioni e sostituire risorse scarse sono necessari nuovi materiali avanzati. Tali materiali costituiscono parte della soluzione alle sfide industriali e per la società che ci troviamo davanti, poiché offrono migliori prestazioni d'uso, minori requisiti per l'uso di risorse ed energia, nonché la sostenibilità nel corso dell'intero ciclo di vita dei prodotti.Lo sviluppo orientato sulle applicazioni spesso comporta la progettazione di materiali del tutto nuovi e in grado di fornire le prestazioni di servizio previste. Tali materiali sono un elemento importante nella catena di approvvigionamento della fabbricazione di valore elevato. Essi costituiscono inoltre la base per realizzare progressi in settori tecnologici trasversali (ad esempio le tecnologie sanitarie, le bioscienze, l'elettronica e la fotonica) e praticamente in tutti i settori di mercato. I materiali stessi rappresentano un passo fondamentale per aumentare il valore dei prodotti e le loro prestazioni. Il valore e l'impatto stimati dei materiali avanzati sono significativi, con un tasso di crescita annuo di circa il 6 % e una dimensione di mercato prevista dell'ordine di 100 miliardi di EUR entro il 2015.I materiali sono progettati secondo un approccio basato sul ciclo di vita completo, dalla fornitura di materiali disponibili fino alla fine della vita (""dalla culla alla culla""), con approcci innovativi per ridurre al minimo le risorse, compresa l'energia, necessarie per la loro trasformazione o per ridurre al minimo l'impatto negativo sull'uomo e sull'ambiente. Sono integrati anche l'uso continuo, il riciclaggio o l'utilizzazione secondaria dei materiali arrivati a fine ciclo nonché la pertinente innovazione sociale, quali i cambiamenti nel comportamento dei consumatori e i nuovi modelli commerciali.Per accelerare i progressi si incoraggia un approccio pluridisciplinare e convergente che inglobi la chimica, la fisica, l'ingegneria, la modellizzazione teorica e computazionale, le scienze biologiche e una progettazione industriale sempre più creativa.Si incoraggiano le nuove alleanze verdi per l'innovazione e le simbiosi industriali che consentono alle industrie di diversificare ed espandere il proprio modello commerciale, riutilizzare i rifiuti come base per le nuove produzioni.

Le grandi linee delle attività

(a) Tecnologie trasversali e abilitanti in materia di materiali

Ricerca sui materiali in base alla progettazione, sui materiali funzionali, sui materiali multifunzionali a più elevata intensità di conoscenze, dotati di nuove funzionalità e migliori prestazioni, e sui materiali strutturali per l'innovazione in tutti i settori industriali, comprese le industrie creative.

(b) Sviluppo e trasformazione di materiali

Ricerca e sviluppo per garantire uno sviluppo e un ampliamento di scala efficienti, sicuri e sostenibili volti a consentire la produzione industriale di futuri prodotti basati sulla progettazione verso una gestione a bassa produzione di rifiuti dei materiali in Europa.

(c) Gestione dei componenti dei materiali

Ricerca e sviluppo di tecniche nuove e innovative per materiali e relativi componenti e sistemi.

(d) Materiali per un'industria sostenibile, efficiente sotto il profilo delle risorse e a basse emissioni

Sviluppo di nuovi prodotti e applicazioni, di modelli commerciali e comportamenti responsabili dei consumatori in grado di ridurre la domanda di energia nonché di agevolare la produzione a basse emissioni di carbonio.

(e) Materiali per le industrie creative, comprese quelle relative al patrimonio

Applicazione, progettazione e sviluppo di tecnologie convergenti per creare nuove opportunità commerciali, tra cui la conservazione e il ripristino dei materiali con valore storico o culturale nonché i nuovi materiali.

(f) Metrologia, caratterizzazione, standardizzazione e controllo di qualità

Promozione delle tecnologie quali la caratterizzazione, la valutazione non distruttiva, l'esame e il monitoraggio continui e la modellizzazione di tipo predittivo delle prestazioni per consentire progressi e impatto nella scienza e nell'ingegneria dei materiali.

(g) Ottimizzazione dell'impiego di materiali

Ricerca e sviluppo per lo studio di surrogati e soluzioni alternative all'utilizzo di alcuni materiali e lo studio di approcci innovativi in materia di modelli aziendali e individuazione delle risorse essenziali.";"";"H2020";"H2020-EU.2.1.";"";"";"2014-09-22 20:41:15";"664173" +"H2020-EU.2.1.3.";"es";"H2020-EU.2.1.3.";"";"";"LIDERAZGO INDUSTRIAL - Liderazgo en tecnologías industriales y de capacitación - Materiales avanzados";"Advanced materials";"

LIDERAZGO INDUSTRIAL - Liderazgo en tecnologías industriales y de capacitación - Materiales avanzados

Objetivo específico para los materiales avanzados

El objetivo específico de la investigación y la innovación sobre materiales avanzados es elaborar materiales con nuevas funcionalidades y mejor rendimiento en el servicio, a fin de obtener productos más competitivos y seguros que reduzcan al máximo el impacto sobre el medio ambiente y el consumo de recursos.Los materiales están en el núcleo de la innovación industrial y son facilitadores clave. Unos materiales avanzados con mayor contenido de conocimientos, nuevas funcionalidades y mejor rendimiento son indispensables para la competitividad industrial y el desarrollo sostenible en toda una amplia gama de aplicaciones y sectores.

Justificación y valor añadido de la Unión

Son necesarios nuevos materiales avanzados para desarrollar productos y procesos sostenibles y de mejor comportamiento, así como para sustituir recursos escasos. Estos materiales forman parte de la solución a nuestros retos industriales y de la sociedad, al ofrecer un mejor rendimiento en su utilización, un menor consumo de recursos y energía, y sostenibilidad durante todo el ciclo de vida de los productos.El desarrollo impulsado por las aplicaciones implica a menudo el diseño de materiales totalmente nuevos, con capacidad para entregar en el servicio las prestaciones planificadas. Estos materiales constituyen un elemento importante de la cadena de suministro de la fabricación de alto valor. También son la base para el progreso en ámbitos tecnológicos de carácter transversal (por ejemplo, tecnologías de asistencia sanitaria, biociencias, electrónica y fotónica), y en prácticamente todos los sectores del mercado. Los propios materiales representan un paso clave para aumentar el valor de los productos y sus prestaciones. El valor estimado y el impacto de los materiales avanzados es significativo, con una tasa de crecimiento anual del 6 % aproximadamente, previéndose que su mercado ascienda a unos 100 000 millones EUR en 2015.Los materiales se concebirán con arreglo a un enfoque del ciclo de vida completo, desde el suministro de los materiales disponibles hasta el final de su vida (""de la cuna a la cuna""), con enfoques innovadores para minimizar los recursos (incluida la energía) necesarios para su transformación o para reducir al máximo los impactos negativos para las personas y el medio ambiente. También se abordarán el uso continuo, el reciclado o la utilización secundaria al final de su vida útil de los materiales, así como la innovación social conexa, como los cambios en el comportamiento de los consumidores y los nuevos modelos de negocio.Con vistas a acelerar el progreso, se fomentará un planteamiento convergente y multidisciplinario, en el que intervengan la química, la física, las ciencias de la ingeniería, la modelización teórica y computacional, las ciencias biológicas y un diseño industrial cada vez más creativo.Se fomentarán nuevas alianzas por la innovación ecológica y la simbiosis industrial, permitiendo que las industrias se diversifiquen, amplíen sus modelos de negocio, reutilicen sus residuos como base para nuevas producciones.

Líneas generales de las actividades

(a) Tecnologías de materiales transversales y de capacitación

Investigación en torno a materiales diseñados, materiales funcionales, materiales multifuncionales que impliquen un mayor contenido de conocimiento, nuevas funcionalidades y mayores rendimientos, y materiales estructurales, con vistas a la innovación en todos los sectores industriales, inclusive los sectores creativos.

(b) Desarrollo y transformación de materiales

Investigación y desarrollo a fin de garantizar un desarrollo y aumento de escala eficientes, seguros y sostenibles que hagan posible la fabricación industrial de futuros productos basados en el diseño, con vistas a una gestión de materiales ""sin desechos"" en Europa.

(c) Gestión de componentes de materiales

Investigación y desarrollo de técnicas nuevas e innovadoras de producción de materiales, componentes y sistemas.

(d) Materiales para una industria sostenible, eficiente en recursos y de bajas emisiones

Desarrollo de nuevos productos y aplicaciones, modelos de negocio y comportamiento responsable de los consumidores que reduzca la demanda de energía, y facilitación de la producción con baja emisión de carbono.

(e) Materiales para las industrias creativas, inclusive el patrimonio

Aplicación del diseño y el desarrollo de tecnologías convergentes para crear nuevas oportunidades empresariales, incluida la preservación y restauración de materiales de valor histórico o cultural, así como de materiales nuevos.

(f) Metrología, caracterización, normalización y control de calidad

Promoción de tecnologías como la caracterización, la evaluación no destructiva, la evaluación y supervisión continuas y la modelización predictiva de las prestaciones para avanzar y conseguir un impacto positivo en ciencia e ingeniería de materiales.

(g) Optimización del uso de materiales

Investigación y desarrollo para estudiar la sustitución y alternativas a la utilización de materiales y enfoques innovadores con respecto a los modelos de negocio, así como determinación de los recursos críticos.";"";"H2020";"H2020-EU.2.1.";"";"";"2014-09-22 20:41:15";"664173" +"H2020-EU.2.1.3.";"fr";"H2020-EU.2.1.3.";"";"";"PRIMAUTÉ INDUSTRIELLE - Primauté dans le domaine des technologies génériques et industrielles - Matériaux avancés";"Advanced materials";"

PRIMAUTÉ INDUSTRIELLE - Primauté dans le domaine des technologies génériques et industrielles - Matériaux avancés

Objectif spécifique concernant les matériaux avancés

L'objectif spécifique de la recherche et de l'innovation dans le domaine des matériaux avancés est de mettre au point des matériaux aux fonctionnalités nouvelles et aux performances en service améliorées, qui permettront de développer des produits sûrs et plus compétitifs ayant un impact minimal sur l'environnement et consommant un minimum de ressources.Les matériaux sont au cœur de l'innovation industrielle, dont ils constituent l'un des principaux catalyseurs. Des matériaux avancés à plus forte intensité de connaissance, aux fonctionnalités nouvelles et aux performances améliorées sont indispensables à la compétitivité des entreprises et au développement durable dans un grand nombre d'applications et de secteurs.

Justification et valeur ajoutée de l'Union

De nouveaux matériaux avancés sont nécessaires au développement de produits et de processus durables et plus performants, ainsi que pour remplacer des ressources rares. De tels matériaux constituent une partie de la solution aux défis industriels et de société: ils sont plus performants, consomment moins de ressources et d'énergie et présentent un caractère durable pendant tout le cycle de vie des produits.Le développement axé sur les applications suppose souvent la conception de matériaux totalement nouveaux capables de réaliser en service les performances attendues. Ces matériaux sont un élément important de la chaîne d'approvisionnement dans les processus de fabrication à haute valeur ajoutée. Ils constituent par ailleurs les fondements du progrès dans les domaines technologiques transversaux (tels que les technologies des soins de santé, les sciences de la vie, l'électronique et la photonique) et dans la quasi-totalité des secteurs du marché. Les matériaux eux-mêmes représentent une étape décisive dans l'augmentation de la valeur des produits et de leurs performances. La valeur et l'impact estimés des matériaux avancés ne sont pas négligeables: leur taux de croissance annuelle est d'environ 6 %, et ils devraient représenter un marché de l'ordre de 100 milliards d'euros d'ici 2015.Les matériaux seront conçus en tenant compte de leur cycle de vie complet, de l'approvisionnement en matériaux jusqu'à la fin de vie (principe «du berceau au berceau», également appelé «recyclage permanent»), en recourant à des approches innovantes pour limiter au maximum les ressources (y compris l'énergie) nécessaires à leur transformation ou les répercussions négatives pour les êtres humains et l'environnement. Sont également couverts l'utilisation continue, le recyclage ou l'utilisation secondaire en fin de vie de ces matériaux, ainsi que les innovations sociétales qui y sont liées, par exemple les changements de comportements chez les consommateurs et les nouveaux modèles d'entreprise.Pour permettre des progrès plus rapides, une approche convergente et pluridisciplinaire, couvrant la chimie, la physique, les sciences de l'ingénieur, la modélisation théorique et informatique, les sciences biologiques et une conception industrielle de plus en plus créative, est encouragée.Les alliances et associations symbiotiques innovantes entre entreprises en faveur d'une innovation écologique sont encouragées, pour permettre aux entreprises de se diversifier et d'élargir leur modèle d'entreprise et de réutiliser leurs déchets comme fondements de nouvelles productions.

Grandes lignes des activités

(a) Technologies des matériaux transversales et génériques

Recherche sur les matériaux sur mesure, fonctionnels et multifonctionnels, possédant un contenu élevé de connaissances, de nouvelles fonctionnalités et une performance améliorée, ainsi que sur les matériaux structurels à des fins d'innovation dans tous les secteurs industriels, y compris les industries de la création.

(b) Développement et transformation des matériaux

Recherche et développement à des fins de développement et de valorisation efficaces, sûrs et durables, afin de permettre la fabrication industrielle de futurs produits conçus pour progresser vers une gestion sans déchets des matériaux en Europe.

(c) Gestion des composants de matériaux

Recherche et développement portant sur des techniques nouvelles et innovantes pour les matériaux et leurs composants et systèmes.

(d) Matériaux pour une industrie durable, efficace dans l'utilisation des ressources et à faible émission de carbone

Développement de nouveaux produits et de nouvelles applications, mise au point de modèles d'entreprise et instauration d'habitudes de consommation responsables, qui réduisent la demande en énergie et facilitent une production à faibles émissions de carbone.

(e) Matériaux pour des entreprises créatives, y compris dans le domaine du patrimoine

Conception et développement de technologies convergentes en vue de créer de nouveaux débouchés commerciaux, y compris la préservation et la restauration de matériaux présentant une valeur historique ou culturelle, ainsi que des matériaux nouveaux.

(f) Métrologie, caractérisation, normalisation et contrôle de la qualité

Promotion des technologies telles que la caractérisation, l'évaluation non destructive, l'évaluation et le suivi permanents et la modélisation prédictive des performances pour permettre des avancées et des répercussions dans les domaines de la science des matériaux et de l'ingénierie.

(g) Optimisation de l'utilisation des matériaux

Recherche et développement axés sur la recherche de solutions alternatives et de substitution à l'utilisation de certains matériaux, sur l'étude d'approches innovantes concernant les modèles commerciaux, et sur le recensement des ressources critiques.";"";"H2020";"H2020-EU.2.1.";"";"";"2014-09-22 20:41:15";"664173" +"H2020-EU.2.1.3.";"pl";"H2020-EU.2.1.3.";"";"";"WIODĄCA POZYCJA W PRZEMYŚLE - Wiodąca pozycja w zakresie technologii prorozwojowych i przemysłowych – Materiały zaawansowane";"Advanced materials";"

WIODĄCA POZYCJA W PRZEMYŚLE - Wiodąca pozycja w zakresie technologii prorozwojowych i przemysłowych – Materiały zaawansowane

Cel szczegółowy w dziedzinie materiałów zaawansowanych

Celem szczegółowym badań naukowych i innowacji w dziedzinie materiałów zaawansowanych jest rozwój materiałów o nowych funkcjach i udoskonalonej wydajności użytkowej do wykorzystania w bardziej konkurencyjnych i bezpiecznych produktach, minimalizujących wpływ na środowisko i zużycie zasobów.Materiały to podstawa innowacji w przemyśle i kluczowy czynnik je umożliwiający. Materiały zaawansowane w większym stopniu oparte na wiedzy naukowej, odznaczające się nowymi funkcjami i większą wydajnością są niezbędne dla konkurencyjności przemysłowej i zrównoważonego rozwoju w wielu zastosowaniach i sektorach.

Uzasadnienie i unijna wartość dodana

Nowe materiały zaawansowane są potrzebne do rozwoju produktów i procesów o większej wydajności i lepszej charakterystyce ekologicznej, a także do zastępowania trudno dostępnych zasobów. Takie materiały stanowią część rozwiązania dla stojących przed nami wyzwań przemysłowych i społecznych, oferując lepszą wydajność użytkową, niższe zużycie zasobów i energii oraz zrównoważenie środowiskowe w całym cyklu życia produktu.Rozwój ukierunkowany na zastosowania często wiąże się z projektowaniem zupełnie nowych materiałów, umożliwiających osiągnięcie planowanej wydajności użytkowej. Takie materiały są ważnym elementem łańcucha dostaw w procesach produkcyjnych wysokiej wartości. Stanowią również podstawę postępu w przekrojowych dziedzinach technologii (np. technologii stosowanych w opiece zdrowotnej, nauk biologicznych, elektroniki i fotoniki), a także w praktycznie wszystkich sektorach rynku. Same materiały stanowią kluczowy etap w podnoszeniu wartości produktów i ich wydajności. Szacowana wartość i oddziaływanie materiałów zaawansowanych są duże, a roczna stopa wzrostu ich rynku wynosi 6% i oczekuje się, że do 2015 r. jego wartość będzie zbliżona do 100 mld EUR.Projektując materiały, uwzględnia się pełny cykl życia, od dostawy dostępnych materiałów po koniec cyklu („od kołyski do kołyski”), stosując innowacyjne podejścia w celu minimalizacji ilości zasobów (w tym energii) potrzebnych do ich przekształcenia lub do minimalizacji niekorzystnego oddziaływania na ludzi i środowisko. Uwzględnia się również kwestie ciągłego wykorzystania, recyklingu lub wtórnego wykorzystania materiałów po zakończeniu cyklu życia produktu, a także powiązane innowacje społeczne, np. zmiany zachowań konsumentów i nowe modele biznesowe.W celu przyspieszenia postępów wspiera się multidyscyplinarne podejście nastawione na konwergencję, obejmujące chemię, fizykę, nauki techniczne, modelowanie teoretyczne i obliczeniowe, nauki biologiczne i coraz bardziej kreatywne wzornictwo przemysłowe.Promowane są nowatorskie sojusze na rzecz ekologicznych innowacji oraz symbioza przemysłowa, umożliwiające przemysłowi różnicowanie działalności oraz rozszerzanie modeli działalności, wtórne wykorzystanie odpadów jako podstawy dla nowej produkcji.

Ogólne kierunki działań

(a) Przekrojowe i prorozwojowych technologie materiałowe

Badania naukowe w zakresie materiałów pod kątem projektowania, materiałów funkcjonalnych, materiałów wielofunkcyjnych w większym stopniu oparte na wiedzy naukowej, nowych funkcjach i udoskonalonej wydajności oraz materiałów strukturalnych na potrzeby innowacji we wszystkich sektorach przemysłu, w tym w sektorach kreatywnych.

(b) Rozwój i przekształcanie materiałów

Działania badawczo-rozwojowe mające na celu efektywne, bezpieczne i zrównoważone opracowywanie i zwiększanie skali, umożliwiające przemysłowe wytwarzanie produktów opartych na przyszłych projektach, zmierzające w kierunku bezodpadowej gospodarki materiałowej w Europie.

(c) Gospodarowanie składnikami materiałów

Działania badawczo-rozwojowe w zakresie nowych i innowacyjnych technik produkcji materiałów, oraz ich komponentów i systemów.

(d) Materiały dla zrównoważonego, zasobooszczędnego i niskoemisyjnego przemysłu

Rozwijanie nowych produktów i zastosowań, modeli biznesowych oraz odpowiedzialnych zachowań konsumentów ograniczających zapotrzebowanie na energię i ułatwiających produkcję niskoemisyjną.

(e) Materiały dla sektorów kreatywnych, w tym związanych z dziedzictwem

Opracowanie wzornictwa i rozwój technologii konwergencyjnych w celu tworzenia nowych możliwości biznesowych, w tym ochrona i odnawianie materiałów mających wartość historyczną lub kulturalną, jak również materiałów nowatorskich.

(f) Metrologia, charakteryzowanie, standaryzacja i kontrola jakości

Promowanie technologii służących takim celom jak charakteryzowanie, nieniszcząca ewaluacja, stałe ocenianie i monitorowanie oraz predyktywne modelowanie wydajności na potrzeby postępów w materiałoznawstwie i inżynierii oraz ich oddziaływania.

(g) Optymalizacja wykorzystania materiałów

Działania badawczo-rozwojowe służące poszukiwaniu rozwiązań zastępczych i alternatywnych w odniesieniu do zastosowań materiałów, a także innowacyjnych podejść do modeli biznesowych oraz identyfikacji kluczowych zasobów";"";"H2020";"H2020-EU.2.1.";"";"";"2014-09-22 20:41:15";"664173" +"H2020-EU.2.1.2.";"it";"H2020-EU.2.1.2.";"";"";"LEADERSHIP INDUSTRIALE - Leadership nel settore delle tecnologie abilitanti e industriali – Nanotecnologie";"Nanotechnologies";"

LEADERSHIP INDUSTRIALE - Leadership nel settore delle tecnologie abilitanti e industriali – Nanotecnologie

Obiettivo specifico delle nanotecnologie

L'obiettivo specifico della ricerca e dell'innovazione nel campo delle nanotecnologie è garantire all'Unione un ruolo di leadership in questo mercato globale in crescita rapida, mediante la promozione di progressi scientifici e tecnologici e di investimenti nel settore delle nanotecnologie e la loro diffusione in prodotti e servizi competitivi a elevato valore aggiunto, in tutta una serie di applicazioni e settori.Entro il 2020, le nanotecnologie saranno integrate senza soluzione di continuità nella maggior parte delle tecnologie e delle applicazioni, orientate a settori quali i vantaggi per i consumatori, la qualità della vita, l'assistenza sanitaria, lo sviluppo sostenibile e un forte potenziale industriale per raggiungere soluzioni per la produttività e l'efficienza delle risorse non disponibili in precedenza.È inoltre necessario che l'Europa diventi il parametro di riferimento mondiale in materia di diffusione di nanotecnologie sicure e responsabili nonché per quanto attiene a una gestione in grado di garantire rendimenti sociali e industriali elevati, associati a standard elevati in materia di sicurezza e sostenibilità.I prodotti che utilizzano le nanotecnologie costituiscono un mercato mondiale che l'Europa non può permettersi di ignorare. Le stime di mercato relative al valore dei prodotti che incorporano le nanotecnologie come componente essenziale sono pari a 700 miliardi di EUR entro il 2015 e a 2 000 miliardi entro il 2020, con rispettivamente 2 e 6 milioni di posti di lavoro. Occorre che le imprese europee del settore delle nanotecnologie sfruttino questo mercato in rapida crescita e riescano ad acquisire una quota di mercato pari almeno alla quota europea di finanziamento della ricerca globale (un quarto) entro il 2020.

Motivazione e valore aggiunto dell'Unione

Le nanotecnologie rappresentano uno spettro di tecnologie in evoluzione dotate di potenziale accertato, con un impatto rivoluzionario, ad esempio sui materiali, le TIC, la mobilità dei trasporti, le scienze della vita, l'assistenza sanitaria (compresi i trattamenti sanitari), i beni di consumo e l'industria quando la ricerca è applicata ai prodotti e processi produttivi rivoluzionari, sostenibili e competitivi.Le nanotecnologie hanno un ruolo essenziale da svolgere nell'affrontare le sfide individuate nella strategia Europa 2020. La riuscita dell'introduzione di queste tecnologie abilitanti fondamentali contribuirà alla competitività dell'industria dell'Unione, consentendo nuovi e migliori prodotti o processi più efficienti, rispondendo altresì alle sfide per la società odierne e future.Il finanziamento globale della ricerca sulle nanotecnologie è raddoppiato, passando da circa 6,5 miliardi di EUR nel 2004 a circa 12,5 miliardi di EUR nel 2008, dove l'Unione rappresenta circa un quarto del totale. Unione ha riconosciuto la leadership di ricerca nel settore delle nanoscienze e delle nanotecnologie con una proiezione di circa 4 000 imprese nell'Unione entro il 2015. Occorre conservare e potenziare tale leadership nella ricerca e approfondire la sua conversione per uso pratico e nella commerciale.L'Europa deve ora garantire e consolidare la sua posizione sul mercato mondiale, promuovendo la cooperazione su larga scala all'interno e tra le varie catene del valore e i diversi settori industriali per realizzare l'aumento di scala del processo di queste tecnologie in prodotti commerciali sicuri e sostenibili. Gli aspetti della valutazione e della gestione del rischio, nonché una gestione responsabile emergono come fattori che determinano il futuro impatto delle nanotecnologie sulla società, l'ambiente e l'economia.Pertanto, il centro focale delle attività consiste in un'applicazione diffusa, responsabile e sostenibile delle nanotecnologie nell'economia, per consentire vantaggi dal forte impatto sociale e industriale. Per garantire le potenziali opportunità, comprese la costituzione di nuove imprese e la creazione di nuovi posti di lavoro, è necessario che la ricerca fornisca gli strumenti necessari per consentire di attuare correttamente la standardizzazione e la normazione.

Le grandi linee delle attività

(a) Sviluppo di nanomateriali, nanodispositivi e nanosistemi della prossima generazione

Mirati a creare prodotti del tutto nuovi che consentano soluzioni sostenibili in un'ampia gamma di settori.

(b) Garantire lo sviluppo e l'applicazione sicuri e sostenibili delle nanotecnologie

Migliorare le conoscenze scientifiche relative all'impatto potenziale delle nanotecnologie e dei nanosistemi sulla salute e sull'ambiente, nonché fornire gli strumenti per valutare e gestire i rischi lungo tutto il ciclo di vita, comprese le questioni relative alla standardizzazione.

(c) Sviluppare la dimensione sociale delle nanotecnologie

Focusing on governance of nanotechnology for societal and environmental benefit.

(d) Sintesi e produzione efficienti e sostenibili di nanomateriali, componenti e sistemi

Accento sulle nuove operazioni, l'integrazione intelligente di processi nuovi ed esistenti, compresa la convergenza di tecnologie, nonché ampliamento di scala per conseguire la produzione di alta precisione su vasta scala di prodotti e impianti polivalenti e flessibili, al fine di garantire un efficace trasferimento delle conoscenze verso l'innovazione industriale.

(e) Sviluppo e standardizzazione di tecniche, metodi di misurazione e attrezzature abilitanti

Accento sulle tecnologie di supporto a sostegno dello sviluppo e dell'introduzione sul mercato di nanomateriali e nanosistemi sicuri complessi.";"";"H2020";"H2020-EU.2.1.";"";"";"2014-09-22 20:40:54";"664161" +"H2020-EU.2.1.2.";"de";"H2020-EU.2.1.2.";"";"";"FÜHRENDE ROLLE DER INDUSTRIE -Führende Rolle bei grundlegenden und industriellen Technologien -Nanotechnologien";"Nanotechnologies";"

FÜHRENDE ROLLE DER INDUSTRIE - Führende Rolle bei grundlegenden und industriellen Technologien -Nanotechnologien

Einzelziel für Nanotechnologien

Einzelziel der Forschung und Innovation auf dem Gebiet der Nanotechnologien ist die Sicherung der Führungsrolle der Union auf diesem durch hohe Wachstumsraten gekennzeichneten Weltmarkt durch Anreize für wissenschaftlich-technische Fortschritte bei den Nanotechnologien und Investitionen in dieselben und der Einsatz der Nanotechnologien in wettbewerbsfähigen Produkten und Dienstleistungen mit hoher Wertschöpfung in unterschiedlichsten Anwendungen und Sektoren.Bis 2020 werden die Nanotechnologien allgegenwärtig sein, d. h. sie werden sich nahtlos in die meisten Technologien und Anwendungen zum Nutzen der Verbraucher, der Lebensqualität, der Gesundheitsfürsorge und der nachhaltigen Entwicklung einfügen und das große Potenzial der Industrie ausschöpfen, um bislang unerreichbare Lösungen für die Produktivität und Ressourceneffizienz zu realisieren.Europa muss auch weltweit Maßstäbe für den sicheren und verantwortbaren Einsatz der Nanotechnologie und diesbezügliche Governancesysteme setzen, die einen hohen sowohl gesellschaftlichen als auch industriellen Nutzen in Verbindung mit hohen Sicherheits- und Nachhaltigkeitsstandards gewährleisten.Produkte, die Nanotechnologien nutzen, stellen einen Weltmarkt dar, den zu ignorieren Europa sich nicht leisten kann. Marktschätzungen zufolge erreichen Produkte, die Nanotechnologie als Hauptkomponente beinhalten, bis 2015 einen Wert von 700 Mrd. EUR und bis 2020 einen Wert von 2 Billionen EUR und schaffen zwei bzw. sechs Millionen Arbeitsplätze. Europas Nanotechnologieunternehmen sollten diesen Markt mit zweistelligen Wachstumsraten nutzen und bis 2020 einen Marktanteil von 25%, d. h. in gleicher Höhe wie der Anteil Europas an der globalen Forschungsförderung erlangen.

Begründung und Mehrwert für die Union

Nanotechnologien bilden ein breites Spektrum neu entstehender Technologien mit nachgewiesenem Potenzial, die umwälzende Auswirkungen beispielsweise auf Werkstoffe, IKT, Verkehrsmobilität, Biowissenschaften, Gesundheitsfürsorge (einschließlich Behandlung), Verbrauchsgüter und Fertigung haben, sobald die Forschungsergebnisse in bahnbrechende, nachhaltige und wettbewerbsfähige Produkte und Produktionsprozesse umgewandelt werden.Nanotechnologien spielen eine entscheidende Rolle bei der Bewältigung der Herausforderungen, die in der Strategie Europa 2020 benannt wurden. Der erfolgreiche Einsatz dieser Schlüsseltechnologien wird durch neuartige und bessere Produkte oder effizientere Verfahren zur Wettbewerbsfähigkeit der Unionswirtschaft beitragen und Antworten auf aktuelle und künftige gesellschaftliche Herausforderungen liefern.Die Forschungsförderung für Nanotechnologien wurde weltweit von etwa 6,5 Mrd. EUR im Jahr 2004 auf etwa 12,5 Mrd. EUR im Jahr 2008 verdoppelt, wobei auf die Union etwa ein Viertel dieses Gesamtbetrags entfällt. Mit den bis 2015 projizierten rund 4 000 Unternehmen in der Union ist die Führung der Unionsforschung auf dem Gebiet der Nanowissenschaften und Nanotechnologien anerkannt. Diese Führungsposition in der Forschung muss beibehalten und ausgebaut werden und auch in praktischen Anwendungen und kommerzieller Verwertung ihren Niederschlag finden.Europa muss nunmehr seine Stellung auf dem Weltmarkt sichern und ausbauen und sollte hierfür im großen Maßstab die Zusammenarbeit über verschiedene Wertschöpfungsketten hinweg und auch innerhalb dieser Wertschöpfungsketten und zwischen verschiedenen Branchen fördern, um diese Technologien in größerem Prozessmaßstab für sichere, nachhaltige und wirtschaftlich sinnvolle Produkte einzusetzen. Als entscheidend für die künftigen Auswirkungen der Nanotechnologien auf Gesellschaft, Umwelt und Wirtschaft zeigen sich Fragen der Risikoabschätzung und des Risikomanagements sowie die verantwortungsvolle Governance.Damit liegt der Schwerpunkt der Tätigkeiten auf der breit gefächerten, verantwortbaren und nachhaltigen Anwendung der Nanotechnologien in der Wirtschaft, um aus ihnen einen hohen gesellschaftlichen und wirtschaftlichen Nutzen zu ziehen. Die Forschung sollte die notwendigen Werkzeuge für eine ordnungsgemäße Normung und Regulierung liefern, damit die potenziellen Möglichkeiten, wie Unternehmensneugründungen und die Schaffung neuer Arbeitsplätze, auch ausgeschöpft werden können.

Einzelziele und Tätigkeiten in Grundzügen

(a)Entwicklung von Nanowerkstoffen, Nanogeräten und Nanosystemen der nächsten Generation

Ziel sind grundlegend neue Produkte, die tragfähige Lösungen in einem breiten Spektrum von Sektoren ermöglichen.

(b) Gewährleistung der sicheren und nachhaltigen Entwicklung und Anwendung von Nanotechnologien

Gewinnung wissenschaftlicher Erkenntnisse über die potenziellen Auswirkungen der Nanotechnologien und Nanosysteme auf Gesundheit oder Umwelt und Bereitstellung von Werkzeugen für Risikoabschätzung und Risikomanagement während des gesamten Lebenszyklus unter Einschluss von Fragen der Normung.

(c) Entwicklung der gesellschaftlichen Dimension der Nanotechnologie

Schwerpunkt ist die Governance der Nanotechnologie zum Nutzen der Gesellschaft und der Umwelt.

(d)Effiziente und nachhaltige Synthese und Herstellung von Nanowerkstoffen, Komponenten und Systemen

Schwerpunkt sind neue Abläufe, die intelligente Integration neuer und vorhandener Prozesse – einschließlich der Konvergenz verschiedener Technologien – sowie die Maßstabsvergrößerung im Hinblick auf die hochpräzise Großfertigung von Produkten und flexiblen Mehrzweckanlagen, so dass Erkenntnisse effizient in industrielle Innovationen einfließen.

(e) Entwicklung und Normung kapazitätssteigernder Techniken, Messverfahren und Geräte

Schwerpunkt sind die Grundlagentechnologien für die Entwicklung und Markteinführung sicherer komplexer Nanowerkstoffe und Nanosysteme.";"";"H2020";"H2020-EU.2.1.";"";"";"2014-09-22 20:40:54";"664161" +"H2020-EU.2.1.2.";"es";"H2020-EU.2.1.2.";"";"";"LIDERAZGO INDUSTRIAL - Liderazgo en tecnologías industriales y de capacitación – Nanotecnologías";"Nanotechnologies";"

LIDERAZGO INDUSTRIAL - Liderazgo en tecnologías industriales y de capacitación – Nanotecnologías

Objetivo específico para las nanotecnologías

El objetivo específico de la investigación y la innovación sobre nanotecnologías es garantizar el liderazgo de la Unión en este mercado mundial en fuerte crecimiento, estimulando los avances científicos y tecnológicos y la inversión en las nanotecnologías y su incorporación a productos y servicios competitivos de alto valor añadido en una diversidad de aplicaciones y sectores.Para 2020, las nanotecnologías estarán integradas sin fisuras con la mayoría de las tecnologías y aplicaciones, en virtud de los beneficios que aportan a los consumidores, la calidad de vida, la asistencia sanitaria y el desarrollo sostenible y de su enorme potencial industrial para aportar soluciones no disponibles anteriormente para la productividad y el uso eficiente de los recursos.Europa debe también establecer la referencia mundial en materia de despliegue y gobernanza seguras y responsables de las nanotecnologías, garantizando una alta rentabilidad industrial y un impacto social combinados con unos altos niveles de seguridad y de sostenibilidad.Los productos que utilizan las nanotecnologías representan un mercado mundial que Europa no puede permitirse dejar de lado. Estimaciones del valor de los productos que incorporan la nanotecnología como componente esencial lo sitúan en 700 000 millones de euros en 2015 y en 2 billones de euros en 2020, correspondiendo a 2 y 6 millones de puestos de trabajo, respectivamente. Las empresas europeas de nanotecnología deben explotar este crecimiento del mercado de dos dígitos y ser capaces de hacerse con una cuota de mercado igual, como mínimo, a la cuota de Europa en la financiación mundial de la investigación (a saber, la cuarta parte) para 2020.

Justificación y valor añadido de la Unión

Las nanotecnologías constituyen una gama de tecnologías en plena evolución con potencial demostrado, que tienen un impacto revolucionario en, por ejemplo, los materiales, las TIC, la movilidad del transporte, las ciencias de la vida, la asistencia y el tratamiento sanitarios y los bienes de consumo y su fabricación, una vez que la investigación se traduzca en productos y procesos de producción rupturistas, sostenibles y competitivos.Las nanotecnologías deben desempeñar un papel crucial a la hora de abordar los retos enunciados en la estrategia Europa 2020. El éxito en el despliegue de estas tecnologías facilitadoras clave contribuirá a la competitividad de la industria de la Unión al hacer posibles productos nuevos y mejores o procedimientos más eficaces y aportar respuestas a los retos de la sociedad actuales y futuros.La financiación mundial para la investigación sobre nanotecnologías se ha duplicado, pasando de alrededor de 6 500 millones EUR en 2004 a aproximadamente 12 500 millones en 2008, representando la Unión aproximadamente la cuarta parte de este total. La Unión posee un reconocido liderazgo en la investigación sobre nanociencias y nanotecnologías, con una proyección de alrededor de 4 000 empresas en la Unión para 2015. Este liderazgo en investigación debe mantenerse, extenderse y reflejarse en mayor medida en el uso práctico y en la comercialización.Ahora, Europa necesita asentar y reforzar su posición en el mercado mundial promoviendo la cooperación a gran escala dentro de diversas cadenas de valor y a través de ellas, así como entre diferentes sectores industriales, para aumentar la escala de estas tecnologías y generar productos comerciales seguros, sostenibles y viables. Las cuestiones de evaluación y gestión del riesgo, así como de gobernanza responsable, están erigiéndose en factores determinantes del futuro impacto de las nanotecnologías en la sociedad, el medio ambiente y la economía.Así pues, el objetivo de las actividades será la aplicación generalizada, responsable y sostenible de las nanotecnologías en la economía, a fin de conseguir beneficios de amplia repercusión social e industrial. Para aprovechar las oportunidades potenciales, incluida la creación de nuevas empresas y la generación de nuevos puestos de trabajo, la investigación debe proporcionar las herramientas necesarias para permitir una correcta aplicación de la normalización y la reglamentación.

Líneas generales de las actividades

(a) Desarrollo de la próxima generación de nanomateriales, nanosistemas y nanodispositivos

Encaminado a obtener productos fundamentalmente nuevos que hagan posibles soluciones sostenibles en una amplia gama de sectores.

(b) Garantía de un desarrollo y una aplicación seguros y sostenibles de las nanotecnologías

Hacer avanzar los conocimientos científicos sobre el impacto potencial de las nanotecnologías y los nanosistemas sobre la salud o el medio ambiente, y aportar herramientas para la evaluación y gestión de riesgos a lo largo de todo el ciclo de vida, incluidos los aspectos de normalización.

(c) Desarrollo de la dimensión social de la nanotecnología

Centrándose en la gobernanza de la nanotecnología para beneficio de la sociedad y del medio ambiente.

(d) Síntesis y fabricación eficientes y sostenibles de nanomateriales, componentes y sistemas

Centrándose en operaciones nuevas, la integración inteligente de procesos nuevos y existentes, inclusive la convergencia tecnológica, como en el caso de la nanobiotecnología, y la transposición a mayor escala para conseguir la fabricación de gran escala y alta precisión de productos y unas instalaciones flexibles y polivalentes que garanticen una transferencia eficiente de los conocimientos a la innovación industrial.

(e) Desarrollo y normalización de técnicas, métodos de medición y equipos que potencien la capacidad

Centrándose en las tecnologías subyacentes para apoyar el desarrollo y la introducción en el mercado de nanomateriales y nanosistemas complejos y seguros.";"";"H2020";"H2020-EU.2.1.";"";"";"2014-09-22 20:40:54";"664161" +"H2020-EU.2.1.2.";"pl";"H2020-EU.2.1.2.";"";"";"WIODĄCA POZYCJA W PRZEMYŚLE - Wiodąca pozycja w zakresie technologii prorozwojowych i przemysłowych – Nanotechnologie";"Nanotechnologies";"

WIODĄCA POZYCJA W PRZEMYŚLE - Wiodąca pozycja w zakresie technologii prorozwojowych i przemysłowych – Nanotechnologie

Cel szczegółowy w dziedzinie nanotechnologii

Celem szczegółowym badań naukowych i innowacji w dziedzinie nanotechnologii jest zabezpieczenie wiodącej pozycji Unii na tym szybko rozwijającym się globalnym rynku poprzez stymulowanie postępu naukowo-technicznego oraz inwestycji w nanotechnologie i ich absorpcji w konkurencyjnych produktach i usługach o wysokiej wartości dodanej w wielu różnych zastosowaniach i sektorach.Do 2020 r. nanotechnologie znajdą się w głównym nurcie działalności, zostaną bowiem spójnie zintegrowane z większością technologii i zastosowań, którą to integrację będą stymulować względy związane z korzyściami dla konsumentów, jakością życia, opieką zdrowotną, zrównoważonym rozwojem i dużym potencjałem przemysłowym służącym opracowaniu poprzednio niedostępnych rozwiązań w zakresie wydajności i oszczędnego gospodarowania zasobami.Europa musi także ustanowić globalny punkt odniesienia w zakresie bezpiecznego i odpowiedzialnego zastosowania nanotechnologii oraz zarządzania nią zapewniającego duże korzyści przemysłowe oraz oddziaływanie społeczne, połączone z wysokimi standardami bezpieczeństwa i zrównoważoności.Produkty wykorzystujące nanotechnologie tworzą światowy rynek, na którego zignorowanie Europa nie może sobie pozwolić. Szacuje się, że rynkowa wartość produktów obejmujących nanotechnologię jako główny element osiągnie 700 mld EUR do 2015 r. i 2 bln EUR do 2020 r., czemu będzie odpowiadać powstanie, odpowiednio, 2 i 6 mln miejsc pracy. Europejskie przedsiębiorstwa zajmujące się nanotechnologią powinny wykorzystać ten dwucyfrowy wzrost rynku i być w stanie do 2020 r. przejąć udział w rynku równy co najmniej udziałowi Europy w globalnym finansowaniu badań naukowych (tj. jedną czwartą).

Uzasadnienie i unijna wartość dodana

Nanotechnologie to grupa rozwijających się technologii o dowiedzionym potencjale, które, po przełożeniu efektów badań naukowych na przełomowe, zrównoważone i konkurencyjne produkty i procesy produkcyjne, będą mieć rewolucyjne oddziaływanie w dziedzinie np. materiałów, ICT, mobilności transportowej, nauk o życiu, opieki zdrowotnej (w tym leczenia), towarów konsumpcyjnych i produkcji.Nanotechnologie mają do odegrania zasadniczą rolę w sprostaniu wyzwaniom określonym w strategii „Europa 2020”. Udane wdrożenie tych kluczowych technologii prorozwojowych wzmocni konkurencyjność przemysłu Unii, umożliwiając wprowadzenie nowatorskich i udoskonalonych produktów lub bardziej efektywnych procesów, a także reagowanie na obecne i przyszłe wyzwania społeczne.Wartość globalnego finansowania badań naukowych w dziedzinie nanotechnologii niemal podwoiła się między 2004 a 2008 r. z 6,5 mld EUR do 12,5 mld EUR, przy czym ok. jednej czwartej tego finansowania pochodziło z Unii. Unia docenia wagę wiodącej pozycji w badaniach naukowych w zakresie nanonauki i nanotechnologii, przewidując, że do 2015 r. w tej dziedzinie w Unii będzie działać ok. 4 tys. przedsiębiorstw. Ta wiodąca rola w dziedzinie badań naukowych musi zostać utrzymana i zwiększona, a także w jeszcze większym stopniu przełożona na zastosowania praktyczne i komercjalizację.Europa musi teraz zabezpieczyć i umocnić swoją pozycję na rynku światowym poprzez promowanie prowadzonej na szeroką skalę współpracy w obrębie różnych łańcuchów wartości i pomiędzy nimi, a także między różnymi sektorami przemysłu, aby procesy bazujące na tych technologiach mogły dostarczyć bezpiecznych, zrównoważonych i opłacalnych produktów nadających się do wykorzystania handlowego. Kwestie oceny ryzyka i zarządzania nim, a także odpowiedzialność w zarządzaniu okazują się być czynnikami decydującymi o przyszłym wpływie nanotechnologii na społeczeństwo, środowisko i gospodarkę.Działania są zatem ukierunkowane na powszechne, odpowiedzialne oraz zrównoważone zastosowanie nanotechnologii w gospodarce, tak aby osiągnąć korzyści o dużym znaczeniu społecznym i przemysłowym. W celu zapewnienia potencjalnych możliwości, w tym zakładania nowych przedsiębiorstw i tworzenia nowych miejsc pracy, badania naukowe powinny dostarczyć niezbędnych narzędzi umożliwiających wprowadzenie odpowiedniej standaryzacji i regulacji.

Ogólne kierunki działań

(a) Rozwój nowej generacji nanomateriałów, nanourządzeń i nanosystemów

Dążenie do opracowania fundamentalnie nowych produktów, umożliwiających wprowadzenie zrównoważonych rozwiązań w szerokim wachlarzu sektorów.

(b) Zapewnienie bezpiecznego i zrównoważonego rozwoju i stosowania nanotechnologii

Rozwój wiedzy naukowej dotyczącej potencjalnego wpływu nanotechnologii i nanosystemów na zdrowie lub środowisko oraz opracowanie narzędzi oceny ryzyka i zarządzania w całym cyklu życia, z uwzględnieniem zagadnień standaryzacji.

(c) Rozwój wymiaru społecznego nanotechnologii

Nacisk na zarządzanie w zakresie nanotechnologii z korzyścią dla społeczeństwa i środowiska.

(d) Efektywna i zrównoważona synteza i produkcja nanomateriałów, części i systemów

Ukierunkowanie na nowe działania, inteligentną integrację nowych i istniejących procesów, w tym konwergencję technologii, a także zwiększenie skali z myślą o wysoce precyzyjnym wielkoskalowym wytwarzaniu produktów i elastycznych wielofunkcyjnych zakładach, zapewniające skuteczne przekształcenie wiedzy w innowacje przemysłowe.

(e) Rozwój i standaryzacja technik zwiększania przepustowości oraz metody i urządzenia pomiarowe

Ukierunkowanie na bazowe technologie wspierające rozwój i wprowadzanie na rynek bezpiecznych złożonych nanomateriałów i nanosystemów.";"";"H2020";"H2020-EU.2.1.";"";"";"2014-09-22 20:40:54";"664161" +"H2020-EU.2.1.2.";"fr";"H2020-EU.2.1.2.";"";"";"PRIMAUTÉ INDUSTRIELLE - Primauté dans le domaine des technologies génériques et industrielles – Les nanotechnologies";"Nanotechnologies";"

PRIMAUTÉ INDUSTRIELLE - Primauté dans le domaine des technologies génériques et industrielles – Les nanotechnologies

Objectif spécifique concernant les nanotechnologies

L'objectif spécifique de la recherche et de l'innovation dans le domaine des nanotechnologies est d'assurer la primauté de l'Union sur ce marché mondial à forte croissance, en encourageant les progrès scientifiques et technologiques ainsi que l'investissement dans les nanotechnologies et en favorisant leur intégration dans des produits et services compétitifs et à forte valeur ajoutée, dans toute une série d'applications et de secteurs.D'ici 2020, les nanotechnologies seront intégrées de façon harmonieuse à la plupart des technologies et des applications, dans un souci d'utilité pour les consommateurs, d'amélioration de la qualité de vie et des soins de santé, et de contribution au développement durable, et au vu des possibilités considérables et inédites qu'elles offrent aux entreprises sur le plan de la productivité et de la rentabilité.L'Europe doit par ailleurs devenir, sur la scène mondiale, un modèle de diffusion et de gestion sûres et responsables des nanotechnologies, profitant largement tant à la société qu'aux entreprises, tout en respectant des normes exigeantes en matière de sécurité et de durabilité.Les produits intégrant des nanotechnologies représentent un marché mondial que l'Europe ne peut se permettre de négliger. La valeur des produits dont les nanotechnologies constituent la principale composante devrait représenter 700 milliards d'EUR d'ici 2015 et 2 000 milliards d'EUR d'ici 2020, ce qui correspond respectivement à 2 et 6 millions d'emplois. Les entreprises européennes spécialisées dans les nanotechnologies devraient tirer profit de cette croissance à deux chiffres du marché et être en mesure de conquérir, d'ici 2020, une part de marché au moins égale à la part de l'Europe dans le financement de la recherche à l'échelle mondiale (soit un quart).

Justification et valeur ajoutée de l'Union

Les nanotechnologies forment une gamme de technologies en pleine évolution, au potentiel avéré, qui bouleversent totalement des secteurs tels que celui des matériaux, des TIC, de la mobilité des transports, des sciences de la vie, des soins de santé (y compris de la thérapeutique), des biens de consommation et de la fabrication, lorsque la recherche conduit au développement de produits et de processus de production révolutionnaires durables et compétitifs.Les nanotechnologies ont un rôle essentiel à jouer en vue de relever les défis recensés dans le cadre de la stratégie Europe 2020. Le déploiement fructueux de ces technologies clés génériques contribuera à assurer la compétitivité des entreprises européennes en permettant le développement de produits innovants et améliorés ou de processus plus efficaces. Il permettra également de relever les défis de société actuels et à venir.Le financement de la recherche sur les nanotechnologies a doublé entre 2004 et 2008 sur la scène mondiale, passant de quelque 6,5 milliards d'EUR à environ 12,5 milliards d'EUR. L'Union compte pour un quart environ de ce montant. L'Union, qui devrait compter en son sein quelque 4 000 entreprises actives dans ce secteur d'ici 2015, est reconnue comme chef de file de la recherche relative aux nanosciences et aux nanotechnologies. Ce rôle moteur dans la recherche doit être maintenu, renforcé et se traduire davantage par des applications pratiques et par leur commercialisation.L'Europe doit à présent asseoir et renforcer sa position sur le marché mondial en promouvant une coopération à grande échelle au sein d'un grand nombre de chaînes de valeur et entre ces dernières, ainsi qu'entre différents secteurs industriels, pour pouvoir convertir ces technologies en produits commerciaux sûrs, durables et viables. La question de l'évaluation et de la gestion des risques et celle d'une gouvernance responsable influenceront de manière décisive le futur impact sociétal, environnemental et économique des nanotechnologies.Les activités mettent donc l'accent sur l'application généralisée, responsable et durable des nanotechnologies à l'économie, de façon à produire un maximum de bénéfices pour les entreprises et la société. Pour pouvoir tenir ses promesses, notamment en termes de création d'entreprises et d'emplois, la recherche devrait fournir les outils qui permettront la bonne mise en œuvre des processus de normalisation et de réglementation.

Grandes lignes des activités

(a) Développer les nanomatériaux, les nanodispositifs et les nanosystèmes de la prochaine génération

Cibler les produits fondamentalement nouveaux permettant des solutions durables dans toute une série de secteurs.

(b) Assurer la sûreté et la viabilité du développement et de l'application des nanotechnologies

Faire progresser les connaissances scientifiques concernant l'impact potentiel des nanotechnologies et des nanosystèmes sur la santé ou l'environnement, et fournir les instruments permettant une évaluation et une gestion des risques tout au long de leur cycle de vie, y compris en matière de normalisation.

(c) Développer la dimension sociétale des nanotechnologies

Développer une gestion des nanotechnologies centrée sur les bénéfices qu'elles apportent à la société et à l'environnement.

(d) Assurer une synthèse et une fabrication efficaces et durables des nanomatériaux, de leurs composants et de leurs systèmes

Cibler les nouvelles exploitations, l'intégration intelligente des processus nouveaux et existants, y compris les convergences technologiques, ainsi que le passage à une production à grande échelle de grande précision et à des sites de production flexibles et polyvalents, afin d'assurer une conversion efficace du savoir en innovation industrielle.

(e) Mettre au point et standardiser des techniques, des méthodes de mesure et des équipements permettant une extension des capacités

Mettre l'accent sur les technologies de soutien qui sous-tendent le développement et la mise sur le marché de nanomatériaux et de nanosystèmes complexes et sûrs.";"";"H2020";"H2020-EU.2.1.";"";"";"2014-09-22 20:40:54";"664161" +"H2020-EU.3.6.1.1.";"en";"H2020-EU.3.6.1.1.";"";"";"The mechanisms to promote smart, sustainable and inclusive growth";"";"";"";"H2020";"H2020-EU.3.6.1.";"";"";"2014-09-22 20:49:36";"664439" +"H2020-EU.1.3.4.";"pl";"H2020-EU.1.3.4.";"";"";"Zwiększenie oddziaływania strukturalnego przez współfinansowanie działań";"MSCA Co-funding";"

Zwiększenie oddziaływania strukturalnego przez współfinansowanie działań

Celem jest zwiększenie, przy wykorzystaniu dodatkowo pozyskanych funduszy, ilościowego i strukturalnego wpływu działań „Maria Skłodowska-Curie” oraz sprzyjanie najwyższej jakości na poziomie krajowym w zakresie szkolenia naukowców, ich mobilności i rozwoju kariery.Kluczowe działania polegają na zachęceniu, poprzez mechanizm współfinansowania, organizacji regionalnych, krajowych i międzynarodowych, zarówno publicznych, jak i prywatnych do tworzenia nowych programów oraz dostosowania już istniejących programów do celów międzynarodowego i międzysektorowego szkolenia, mobilności i rozwoju kariery. Pozwoli to na podniesienie jakości szkolenia naukowców w Europie na wszystkich etapach kariery, w tym na poziomie doktoranckim, ułatwienie swobodnego przepływu naukowców i wiedzy naukowej w Europie, promowanie atrakcyjnych karier naukowych poprzez otwartą rekrutację i zachęcające warunki pracy, wspieranie współpracy w zakresie badań naukowych i innowacji między uniwersytetami, instytucjami badawczymi i przedsiębiorstwami oraz wspomaganie współpracy między państwami trzecimi i organizacjami międzynarodowymi.";"";"H2020";"H2020-EU.1.3.";"";"";"2014-09-22 20:39:36";"664117" +"H2020-EU.1.3.4.";"it";"H2020-EU.1.3.4.";"";"";"Incrementare l'impatto strutturale mediante il cofinanziamento delle attività";"MSCA Co-funding";"

Incrementare l'impatto strutturale mediante il cofinanziamento delle attività

L'obiettivo consiste nell'incrementare, attraverso l'effetto di leva dei fondi supplementari, l'impatto numerico e strutturale delle azioni Marie Skłodowska-Curie e promuovere l'eccellenza a livello nazionale per quanto riguarda la formazione, la mobilità e lo sviluppo di carriera dei ricercatori.Con l'ausilio del meccanismo di cofinanziamento le principali attività mirano a incoraggiare le organizzazioni regionali, nazionali e internazionali, sia pubbliche sia private, a creare nuovi programmi e ad adeguare quelli esistenti alla formazione, alla mobilità e allo sviluppo di carriera internazionali e intersettoriali. Ciò incrementerà la qualità della formazione di ricerca in Europa a tutti i livelli di carriera, compreso il livello dottorale, incoraggerà la libera circolazione dei ricercatori e delle conoscenze scientifiche in Europa, promuoverà carriere di ricerca interessanti grazie a condizioni di assunzione aperte e di lavoro attraenti e sosterrà la cooperazione di ricerca e innovazione fra le università, gli istituti di ricerca e le imprese nonché la cooperazione con i paesi terzi e le organizzazioni internazionali.";"";"H2020";"H2020-EU.1.3.";"";"";"2014-09-22 20:39:36";"664117" +"H2020-EU.1.3.4.";"de";"H2020-EU.1.3.4.";"";"";"Steigerung der strukturellen Wirkung durch die Kofinanzierung von Tätigkeiten";"MSCA Co-funding";"

Steigerung der strukturellen Wirkung durch die Kofinanzierung von Tätigkeiten

Ziel ist es, zusätzliche Fördermittel zu mobilisieren und damit die an Zahlen und Strukturen ablesbaren Auswirkungen der Marie-Skłodowska-Curie-Maßnahmen noch zu steigern und die Exzellenz in der Ausbildung, Mobilität und Laufbahnentwicklung der Forscher auf nationaler Ebene zu unterstützen.Hierzu kommt es darauf an, mit Hilfe von Kofinanzierungsmechanismen regionale, nationale und internationale – sowohl öffentliche als auch private – Organisationen darin zu bestärken, neue Programme zu entwickeln und bestehende Programme an die internationale und intersektorale Ausbildung, Mobilität und Laufbahnentwicklung anzupassen. Dies erhöht die Qualität der Forscherausbildung in Europa in jeder Phase ihrer Laufbahn, auch während der Promotion, fördert die Mobilität von Forschern und wissenschaftlichen Erkenntnissen in Europa, unterstützt attraktive Forscherlaufbahnen durch eine offene Personaleinstellung und attraktive Arbeitsbedingungen, erleichtert die Forschungs- und Innovationszusammenarbeit zwischen Hochschulen, Forschungseinrichtungen und Unternehmen sowie die Zusammenarbeit mit Drittländern und internationalen Organisationen.";"";"H2020";"H2020-EU.1.3.";"";"";"2014-09-22 20:39:36";"664117" +"H2020-EU.1.3.4.";"es";"H2020-EU.1.3.4.";"";"";"Intensificación del impacto estructural mediante la cofinanciación de actividades";"MSCA Co-funding";"

Intensificación del impacto estructural mediante la cofinanciación de actividades

El objetivo es aumentar, movilizando fondos adicionales, el impacto numérico y estructural de las acciones Marie Skłodowska-Curie y estimular la excelencia a nivel nacional en la formación, movilidad y desarrollo de la carrera de los investigadores.Las actividades clave servirán de estímulo, con ayuda de un mecanismo de cofinanciación, a las organizaciones regionales, nacionales e internacionales, tanto públicas como privadas, para que creen nuevos programas y adapten los existentes a la formación, movilidad y desarrollo de la carrera a escala internacional e intersectorial. De este modo aumentará la calidad de la formación de los investigadores en Europa en todas las etapas de su carrera, incluido el nivel de doctorado, se fomentará la libre circulación de los investigadores y los conocimientos científicos en Europa, se promoverán las carreras de investigación atractivas ofreciendo una contratación abierta y unas condiciones de trabajo atractivas y se apoyará la cooperación en investigación e innovación entre las universidades, las instituciones de investigación y las empresas y la cooperación con terceros países y organizaciones internacionales.";"";"H2020";"H2020-EU.1.3.";"";"";"2014-09-22 20:39:36";"664117" +"H2020-EU.1.3.4.";"fr";"H2020-EU.1.3.4.";"";"";"Renforcer l'impact structurel par le cofinancement des activités";"MSCA Co-funding";"

Renforcer l'impact structurel par le cofinancement des activités

L'objectif est de renforcer, en mobilisant des fonds supplémentaires, l'impact quantitatif et structurel des actions Marie Skłodowska-Curie et de promouvoir l'excellence au niveau national sur le plan de la formation, de la mobilité et de l'évolution de la carrière des chercheurs.Les principales activités consistent à inciter, par un mécanisme de cofinancement, les organismes régionaux, nationaux et internationaux, tant publics que privés, à créer de nouveaux programmes et à adapter les programmes existants à la formation, la mobilité et l'évolution de la carrière internationales et intersectorielles. De telles démarches amélioreront la qualité de la formation à la recherche en Europe à toutes les étapes de la vie professionnelle, doctorat inclus; elles encourageront la libre circulation des chercheurs et des connaissances scientifiques en Europe, augmenteront l'attractivité des carrières dans la recherche par des procédures de recrutement ouvertes et par des conditions de travail attractives, favoriseront la coopération entre les universités, les institutions de recherche et les entreprises dans le domaine de la recherche et de l'innovation, et soutiendront la coopération avec les pays tiers et les organisations internationales.";"";"H2020";"H2020-EU.1.3.";"";"";"2014-09-22 20:39:36";"664117" +"H2020-EU.4.b.";"de";"H2020-EU.4.b.";"";"";"Partnerschaften zwischen Forschungseinrichtungen ";"Twinning of research institutions";"

Partnerschaften zwischen Forschungseinrichtungen

mit dem Ziel, einen bestimmten Forschungsbereich in einer aufstrebenden Einrichtung durch Verbindungen zu mindestens zwei international führenden Einrichtungen in diesem Bereich wesentlich zu stärken. ";"";"H2020";"H2020-EU.4.";"";"";"2014-09-22 20:51:04";"664485" +"H2020-EU.4.b.";"en";"H2020-EU.4.b.";"";"";"Twinning of research institutions";"Twinning of research institutions";"

Twinning of research institutions

aiming at significantly strengthening a defined field of research in an emerging institution through links with at least two internationally-leading institutions in a defined field. ";"";"H2020";"H2020-EU.4.";"";"";"2014-09-22 20:51:04";"664485" +"H2020-EU.4.b.";"it";"H2020-EU.4.b.";"";"";"Gemellaggi di istituti di ricerca";"Twinning of research institutions";"

Gemellaggi di istituti di ricerca

Miranti a rafforzare in modo decisivo un determinato settore di ricerca in un istituto emergente attraverso collegamenti con almeno due istituti che svolgono un ruolo guida a livello internazionale in un settore specifico. ";"";"H2020";"H2020-EU.4.";"";"";"2014-09-22 20:51:04";"664485" +"H2020-EU.4.b.";"pl";"H2020-EU.4.b.";"";"";"Tworzeniu partnerstw między instytucjami badawczymi (ang. twinning)";"tworzeniu partnerstw między instytucjami badawczymi (ang. twinning)";"

Tworzeniu partnerstw między instytucjami badawczymi (ang. twinning)

mających na celu znaczne wzmocnienie określonej dziedziny badań naukowych w powstającej instytucji poprzez utworzenie powiązań z co najmniej dwiema instytucjami, które w danej dziedzinie odgrywają wiodącą rolę na poziomie międzynarodowym. ";"";"H2020";"H2020-EU.4.";"";"";"2014-09-22 20:51:04";"664485" +"H2020-EU.4.b.";"fr";"H2020-EU.4.b.";"";"";"Jumeler des institutions de recherche";"Twinning of research institutions";"

Jumeler des institutions de recherche

L'objectif étant de renforcer nettement un domaine défini de recherche dans une institution émergente en établissant des liens avec au moins deux institutions de pointe au niveau international dans un domaine défini. ";"";"H2020";"H2020-EU.4.";"";"";"2014-09-22 20:51:04";"664485" +"H2020-EU.4.b.";"es";"H2020-EU.4.b.";"";"";"El hermanamiento de centros de investigación";"Twinning of research institutions";"

El hermanamiento de centros de investigación

con el fin de reforzar considerablemente un campo determinado de investigación en un centro novel vinculándolo con al menos dos centros de rango internacional en dicho campo. ";"";"H2020";"H2020-EU.4.";"";"";"2014-09-22 20:51:04";"664485" +"H2020-EU.3.5.2.3.";"en";"H2020-EU.3.5.2.3.";"";"";"Provide knowledge and tools for effective decision making and public engagement";"";"";"";"H2020";"H2020-EU.3.5.2.";"";"";"2014-09-22 20:48:31";"664405" +"H2020-EU.3.6.3.";"it";"H2020-EU.3.6.3.";"";"";"Società riflessive - patrimonio culturale e identità europea";"Reflective societies";"

Società riflessive - patrimonio culturale e identità europea

L'obiettivo è quello di contribuire a comprendere il fondamento intellettuale dell'Europa, la sua storia e le numerose influenze europee ed extraeuropee, che costituiscono una fonte di ispirazione per le nostre vite oggi. L'Europa è caratterizzata da una varietà di diversi popoli (compresi minoranze e popoli indigeni), tradizioni e identità regionali e nazionali nonché da livelli diversi di sviluppo economico e sociale. La migrazione e la mobilità, i mezzi di comunicazione, l'industria e i trasporti contribuiscono alla diversità di prospettive e stili di vita. Occorre riconoscere e tenere in conto tale diversità e le opportunità che ne derivano.Le collezioni europee conservate in biblioteche, anche digitali, archivi, musei, gallerie e altre istituzioni pubbliche detengono un patrimonio ricco e ancora inesplorato di documenti e oggetti di studio. Tali risorse d'archivio rappresentano, assieme al patrimonio intangibile, la storia dei singoli Stati membri ma anche il patrimonio collettivo di un'Unione emersa nel corso del tempo. Tali materiali dovrebbero essere resi accessibili a ricercatori e cittadini, anche mediante le nuove tecnologie, per consentire di guardare al futuro attraverso l'archivio del passato. L'accessibilità e la conservazione del patrimonio culturale nelle forme suddette sono necessarie per la vitalità dei rapporti esistenti tra le diverse culture e all'interno delle stesse nell'Europa di oggi e contribuiscono alla crescita economica sostenibile.Il centro delle attività comprende:(a) lo studio del patrimonio culturale, della memoria, dell'identità, dell'integrazione e delle interazioni e traduzioni culturali in Europa, compreso il modo in cui tali elementi sono rappresentati nelle collezioni a carattere culturale e scientifico, negli archivi e nei musei, allo scopo di informare e comprendere meglio il presente mediante interpretazioni più approfondite del passato; (b) la ricerca sulla storia, la letteratura, l'arte, la filosofia e le religioni dei paesi e delle regioni d'Europa e sul modo in cui queste hanno dato forma alla diversità europea contemporanea; (c) la ricerca sul ruolo dell'Europa nel mondo, sulle influenze e i legami reciproci tra le regioni del mondo e sulle culture europee viste dall'esterno. ";"";"H2020";"H2020-EU.3.6.";"";"";"2014-09-22 20:50:08";"664455" +"H2020-EU.3.6.3.";"es";"H2020-EU.3.6.3.";"";"";"Sociedades reflexivas - patrimonio cultural e identidad europea";"Reflective societies";"

Sociedades reflexivas - patrimonio cultural e identidad europea

El objetivo consiste en contribuir a la comprensión de la base intelectual de Europa: su historia y las diversas influencias europeas y extraeuropeas, como inspiración para nuestra vida actual. Europa se caracteriza por una variedad de pueblos (incluidos minorías y pueblos indígenas), tradiciones e identidades regionales y nacionales diferentes, así como por niveles diferentes de desarrollo económico y de la sociedad. Las migraciones y la movilidad, los medios de comunicación, la industria y el transporte contribuyen a la diversidad de opiniones y de estilos de vida. Debería reconocerse y tenerse en cuenta esta diversidad y las oportunidades que ofrece.Las colecciones europeas de las bibliotecas (incluidas las digitales), archivos, museos, galerías y otras instituciones públicas contienen un tesoro de documentación y objetos de estudio sin explotar. Estos recursos archivísticos, junto con el patrimonio intangible, representan la historia de cada Estado miembro pero al mismo tiempo la herencia colectiva de una Unión que ha ido creándose a lo largo del tiempo. Estos materiales deberían hacerse accesibles, incluso por medio de nuevas tecnologías, a los investigadores y a los ciudadanos, para permitirles mirar al futuro a través del archivo del pasado. La accesibilidad y la conservación de estas formas del patrimonio cultural son necesarias para mantener la vitalidad de los compromisos de vida en el seno de las culturas europeas y entre ellas hoy en día, y contribuye al crecimiento económico sostenible.Las actividades perseguirán los siguientes objetivos específicos:(a) el estudio del patrimonio, la memoria, la identidad, la integración y la interacción y traducción culturales de Europa, incluidas sus representaciones en las colecciones, archivos y museos culturales y científicos, para informar mejor al presente y entenderlo mejor, mediante unas interpretaciones más ricas del pasado, (b) la investigación de la historia, la literatura, el arte, la filosofía y las religiones de los países y regiones de Europa, y de los modos en que han conformado la diversidad europea contemporánea, (c) la investigación del papel de Europa en el mundo, de la influencia mutua y de los vínculos entre las regiones del mundo, y de la visión de las culturas europeas desde el exterior. ";"";"H2020";"H2020-EU.3.6.";"";"";"2014-09-22 20:50:08";"664455" +"H2020-EU.3.6.3.";"fr";"H2020-EU.3.6.3.";"";"";"Des sociétés de réflexion - patrimoine culturel et identité européenne";"Reflective societies";"

Des sociétés de réflexion - patrimoine culturel et identité européenne

L'objectif est de contribuer à la compréhension de la base intellectuelle européenne - son histoire et les nombreuses influences européennes et non européennes - en tant qu'inspiration pour notre vie d'aujourd'hui. L'Europe se caractérise par la diversité des peuples (y compris les minorités et les populations autochtones), des traditions et des identités régionales et nationales ainsi que par des niveaux différents de développement économique et sociétal. Les migrations, la mobilité, les médias, l'industrie et les transports contribuent à la diversité des avis et des styles de vie. Cette diversité et les perspectives qu'elle offre devraient être reconnues et prises en compte.Les collections européennes dans les bibliothèques, y compris les bibliothèques numériques, les archives, les musées, les galeries et autres établissements publics disposent d'une grande quantité de documents et d'objets riches et inexploités pouvant être étudiés. Ces ressources d'archives, ainsi que le patrimoine immatériel, représentent l'histoire de chaque État membre, mais également le patrimoine collectif d'une Union qui est apparue au fil du temps. Ce matériel devrait être rendu accessible, également à l'aide des nouvelles technologies, aux chercheurs et aux citoyens pour permettre de regarder l'avenir au travers d'une archive du passé. L'accessibilité au patrimoine culturel sous ces formes et sa préservation sont nécessaires pour assurer la vitalité de relations dynamiques à l'intérieur des cultures européennes et entre celles-ci et contribuent à une croissance économique durable.Les activités visent à:(a) étudier le patrimoine, la mémoire, l'identité, l'intégration ainsi que l'interaction et la traduction culturelles au niveau européen, y compris leurs représentations dans les collections culturelles et scientifiques, les archives et les musées, afin de mieux éclairer et comprendre le présent grâce à des interprétations plus riches du passé; (b) mener des recherches sur l'histoire, la littérature, l'art, la philosophie et les religions des régions et pays européens et sur la manière dont ces éléments expliquent la diversité contemporaine européenne; (c) étudier le rôle de l'Europe dans le monde, les influences et les liens mutuels entre les régions du monde et un avis extérieur sur les cultures européennes. ";"";"H2020";"H2020-EU.3.6.";"";"";"2014-09-22 20:50:08";"664455" +"H2020-EU.3.6.3.";"pl";"H2020-EU.3.6.3.";"";"";"Refleksyjne społeczeństwa – dziedzictwo kulturowe i tożsamość europejska";"Reflective societies";"

Refleksyjne społeczeństwa – dziedzictwo kulturowe i tożsamość europejska

Celem jest przyczynienie się do zrozumienia podstaw intelektualnych Europy- jej historii i licznych europejskich i pozaeuropejskich wpływów- jako inspiracji dla naszego dzisiejszego życia. Europa charakteryzuje się różnorodnością narodową (żyją tu m.in. mniejszości i społeczności autochtoniczne), tradycji i tożsamości regionalnych i narodowych, a także zróżnicowanym poziomem rozwoju gospodarczego i społecznego. Migracja i mobilność, media, przemysł i transport przyczyniają się do wielorakości poglądów i stylów życia. Należy uznać i wziąć pod uwagę tę różnorodność i szanse, jakie ona stwarza.Europejskie zbiory w bibliotekach, m.in. w bibliotekach cyfrowych, archiwach, muzeach, galeriach i innych instytucjach publicznych obfitują w bogatą, niewykorzystaną dokumentację i przedmioty badań. Te zasoby archiwalne, wraz z dziedzictwem niematerialnym, reprezentują historię poszczególnych państw członkowskich, ale również zbiorowe dziedzictwo Unii, które powstawało z biegiem czasu. Materiały takie powinny zostać udostępnione – również za pomocą nowych technologii – badaczom i obywatelom, aby im umożliwić spojrzenie w przyszłość poprzez archiwum przeszłości. Dostępność i zachowanie dziedzictwa kulturowego w tych formach są konieczne, aby podtrzymać żywotność aktywnego uczestnictwa w obrębie kultur europejskich i między nimi w chwili obecnej, i przyczyniają się do trwałego wzrostu gospodarczego.Działania mają się koncentrować na:(a) badaniu dziedzictwa Europy, jej pamięci, tożsamości, integracji oraz interakcji i translacji kulturowych, w tym jej reprezentacji w zbiorach kulturalnych i naukowych, archiwach i muzeach, co pozwoli lepiej ukształtować i zrozumieć teraźniejszość poprzez bogatsze interpretacje przeszłości; (b) badaniu historii, literatury, sztuki, filozofii i religii krajów i regionów europejskich oraz tego, w jaki sposób ukształtowały one współczesną europejską różnorodność; (c) badaniu roli Europy w świecie, wzajemnych wpływów i powiązań między regionami świata, oraz spojrzenia z zewnątrz na kultury europejskie. ";"";"H2020";"H2020-EU.3.6.";"";"";"2014-09-22 20:50:08";"664455" +"H2020-EU.3.6.3.";"en";"H2020-EU.3.6.3.";"";"";"Reflective societies - cultural heritage and European identity";"Reflective societies";"

Reflective societies - cultural heritage and European identity

The aim is to contribute to an understanding of Europe's intellectual basis – its history and the many European and non-European influences – as an inspiration for our lives today. Europe is characterized by a variety of different peoples (including minorities and indigenous people), traditions and regional and national identities as well as by different levels of economic and societal development. Migration and mobility, the media, industry and transport contribute to the diversity of views and lifestyles. This diversity and its opportunities should be recognized and considered.European collections in libraries, including digital ones, archives, museums, galleries and other public institutions have a wealth of rich, untapped documentation and objects for study. These archival resources, together with intangible heritage, represent the history of individual Member States but also the collective heritage of a Union that has emerged through time. Such materials should be made accessible, also through new technologies, to researchers and citizens to enable a look to the future through the archive of the past. Accessibility and preservation of cultural heritage in these forms is needed for the vitality of the living engagements within and across European cultures now and contributes to sustainable economic growth.The focus of activities shall be to:(a) study European heritage, memory, identity, integration and cultural interaction and translation, including its representations in cultural and scientific collections, archives and museums, to better inform and understand the present by richer interpretations of the past;(b) research into European countries' and regions' history, literature, art, philosophy and religions and how these have informed contemporary European diversity; (c) research on Europe's role in the world, on the mutual influence and ties between the regions of the world, and a view from outside on European cultures.";"";"H2020";"H2020-EU.3.6.";"";"";"2014-09-22 20:50:08";"664455" +"H2020-EU.3.6.3.";"de";"H2020-EU.3.6.3.";"";"";"Reflektierende Gesellschaften – Kulturerbe und europäische Identität";"Reflective societies";"

Reflektierende Gesellschaften – Kulturerbe und europäische Identität

Ziel ist ein Beitrag zum Verständnis der geistigen Grundlage Europas, seiner Geschichte und der vielen europäischen und außereuropäischen Einflüsse als Quelle der Inspiration für unser Leben in heutiger Zeit. Charakteristisch für Europa sind die Vielfalt der Völker (einschließlich der Minderheiten und indigenen Völker), Traditionen sowie regionalen und nationalen Identitäten und das unterschiedliche Ausmaß an wirtschaftlicher und gesellschaftlicher Entwicklung. Migration und Mobilität, Medien, Wirtschaft und Verkehr tragen zur Vielfalt der Sichtweisen und Lebensentwürfe bei. Diese Vielfalt und die sich daraus ergebenden Möglichkeiten sollten gewürdigt und berücksichtigt werden.Die europäischen Sammlungen in Bibliotheken, auch digitalen Bibliotheken, in Archiven, Museen, Galerien und anderen öffentlichen Institutionen bieten eine Fülle von reichhaltigem, unerschlossenem Dokumentarmaterial und von Studienobjekten. Dieser Archivbestand bildet zusammen mit dem immateriellen Kulturerbe die Geschichte der einzelnen Mitgliedstaaten ab, stellt aber auch das gemeinsame Erbe einer Union dar, die sich im Laufe der Zeit geformt hat. Dieses Material sollte auch mit Hilfe der neuen Technologien Forschern und Bürgern zugänglich gemacht werden, damit sie durch die archivierte Vergangenheit einen Blick in die Zukunft werfen können. Die Zugänglichkeit und Erhaltung des in diesen Formen vorliegenden Kulturerbes ist für den dynamischen, lebendigen Austausch innerhalb der Kulturen Europas und zwischen ihnen in der Gegenwart unabdingbar und trägt zu einem nachhaltigen Wirtschaftswachstum bei.Schwerpunkte der Tätigkeiten ist:(a) Erforschung des Erbes, des Gedächtnisses, der Identität und der Integration Europas und der kulturellen Wechselwirkungen und Transfers einschließlich der Darstellung dieser Aspekte in kulturellen oder wissenschaftlichen Sammlungen, Archiven und Museen, damit durch gehaltvollere Deutungen der Vergangenheit die Gegenwart besser erfasst und verstanden werden kann; (b) Erforschung der Geschichte, Literatur, Philosophie und Religionen der Länder und Regionen Europas und der Frage, wie diese die heutige Vielfalt in Europa geprägt haben; (c) Erforschung der Rolle Europas in der Welt, der gegenseitigen Beeinflussung und der Verknüpfungen zwischen den Regionen der Welt und der Wahrnehmung der Kulturen Europas in der Welt. ";"";"H2020";"H2020-EU.3.6.";"";"";"2014-09-22 20:50:08";"664455" +"H2020-EU.3.2.2.3.";"en";"H2020-EU.3.2.2.3.";"";"";"A sustainable and competitive agri-food industry";"";"";"";"H2020";"H2020-EU.3.2.2.";"";"";"2014-09-22 20:45:07";"664299" +"H2020-EU.1.4.1.3.";"en";"H2020-EU.1.4.1.3.";"";"";"Development, deployment and operation of ICT-based e-infrastructures";"";"";"";"H2020";"H2020-EU.1.4.1.";"";"";"2014-09-22 20:39:57";"664129" +"H2020-EU.1.2.1.";"de";"H2020-EU.1.2.1.";"";"";"FET – offener Bereich";"FET Open";"

FET – offener Bereich

Durch die Förderung neuartiger Ideen (""FET – offener Bereich"") werden wissenschaftlich-technologische Forschungsarbeiten, die neue Wege für grundlegend neue Technologien der Zukunft sondieren, dabei geltende Paradigmen in Frage stellen und in unbekannte Bereiche vorstoßen, in einem frühen Stadium unterstützt. Ein für unterschiedlichste Forschungsideen offenes ""Bottom-up""-Auswahlverfahren wird für eine große Vielfalt bei den ausgewählten Projekten sorgen. Entscheidend dabei ist, vielversprechende neue Bereiche, Entwicklungen und Trends frühzeitig zu erkennen und neue hochkompetente Akteure aus Forschung und Innovation hierfür zu gewinnen.";"";"H2020";"H2020-EU.1.2.";"";"";"2014-09-22 20:39:11";"664103" +"H2020-EU.1.2.1.";"es";"H2020-EU.1.2.1.";"";"";"FET Open";"FET Open";"

FET Open

Mediante el fomento de nuevas ideas (""FET Open""), FET apoyará la investigación científica y tecnológica temprana que explora nuevos fundamentos para futuras tecnologías radicalmente nuevas poniendo en entredicho los paradigmas actuales y aventurándose en regiones desconocidas. Un proceso de selección ascendente ampliamente abierto a cualquier idea de investigación constituirá una cartera diversificada de proyectos focalizados. Resultará esencial detectar precozmente nuevos ámbitos, acontecimientos y tendencias prometedores, así como atraer a nuevos protagonistas de la investigación y la innovación de gran potencial.";"";"H2020";"H2020-EU.1.2.";"";"";"2014-09-22 20:39:11";"664103" +"H2020-EU.1.2.1.";"fr";"H2020-EU.1.2.1.";"";"";"FET Open";"FET Open";"

FET Open

En encourageant les idées innovantes («FET Open»), le FET soutient dans ses premiers pas la recherche scientifique et technologique axée sur l'exploration de nouvelles bases, qui serviront à développer les technologies révolutionnaires du futur en remettant en question les paradigmes actuels et en ouvrant de nouveaux domaines à l'exploration. Un processus de sélection ascendant largement ouvert à toutes les idées de recherche doit permettre de cibler un vaste éventail de projets. La détection précoce des nouvelles thématiques, évolutions et tendances prometteuses et l'attraction de nouveaux acteurs à haut potentiel du secteur de la recherche et de l'innovation seront des facteurs clés.";"";"H2020";"H2020-EU.1.2.";"";"";"2014-09-22 20:39:11";"664103" +"H2020-EU.1.2.1.";"pl";"H2020-EU.1.2.1.";"";"";"FET Open";"FET Open";"

FET Open

Sprzyjając nowatorskim pomysłom („FET Open”), FET wspierają znajdujące się na wczesnych etapach koncepcje badawcze w zakresie nauki i technologii, zmierzające do stworzenia podstaw radykalnie nowych przyszłych technologii poprzez zakwestionowanie obecnych paradygmatów i eksplorację nieznanych obszarów. Oddolny proces wyboru, szeroko otwarty na wszelkie pomysły badawcze, dostarcza zróżnicowanego portfela ukierunkowanych projektów. Kluczowe będzie wczesne wskazanie obiecujących nowych obszarów, wynalazków i tendencji, a także przyciąganie nowych i cechujących się dużym potencjałem podmiotów zainteresowanych badaniami naukowymi i innowacjami.";"";"H2020";"H2020-EU.1.2.";"";"";"2014-09-22 20:39:11";"664103" +"H2020-EU.1.2.1.";"it";"H2020-EU.1.2.1.";"";"";"TEF aperte";"FET Open";"

TEF aperte

Incoraggiando nuove idee (""TEF aperte""), le TEF sostengono la ricerca scientifica e tecnologica in fase iniziale esplorando nuove basi per tecnologie future radicalmente nuove mediante la sfida agli attuali paradigmi e l'incursione in terreni ignoti. Un processo di selezione ascendente ampiamente aperto a tutte le idee di ricerca si basa su un portafoglio diversificato di progetti mirati. L'individuazione tempestiva di nuovi settori, sviluppi e tendenze promettenti, congiuntamente all'attrazione di attori della ricerca e dell'innovazione nuovi e ad alto potenziale rappresenteranno fattori chiave.";"";"H2020";"H2020-EU.1.2.";"";"";"2014-09-22 20:39:11";"664103" +"H2020-EU.1.2.1.";"en";"H2020-EU.1.2.1.";"";"";"FET Open";"FET Open";"

FET Open

By fostering novel ideas ('FET Open'), FET shall support early stage science and technology research exploring new foundations for radically new future technologies by challenging current paradigms and venturing into unknown areas. A bottom-up selection process widely open to any research ideas shall build up a diverse portfolio of targeted projects. Early detection of promising new areas, developments and trends, along with attracting new and high-potential research and innovation players, will be key factors.";"";"H2020";"H2020-EU.1.2.";"";"";"2014-09-22 20:39:11";"664103" +"H2020-EU.1.2.";"es";"H2020-EU.1.2.";"";"";"CIENCIA - Tecnologías Futuras y Emergentes (FET)";"Future and Emerging Technologies (FET)";"

CIENCIA - Tecnologías Futuras y Emergentes (FET)

Objetivo específico

El objetivo específico es promover tecnologías radicalmente nuevas mediante la exploración de ideas novedosas y de alto riesgo basadas en fundamentos científicos con potencial para abrir nuevos ámbitos al conocimiento científico y a las tecnologías y contribuir al desarrollo de la próxima generación de industrias europeas. Se pretende, mediante un apoyo flexible a la investigación en colaboración orientada a la consecución de objetivos e interdisciplinaria a diversas escalas y mediante la adopción de prácticas de investigación innovadoras, descubrir y aprovechar las oportunidades de beneficio a largo plazo para los ciudadanos, la economía y la sociedad. Las FET aportarán el valor añadido de la Unión a las fronteras de la investigación moderna.Las FET promoverán la investigación y la tecnología más allá de lo que se conoce, se acepta o prevalece, y fomentarán las ideas visionarias y novedosas para abrir vías prometedoras hacia tecnologías potentes y nuevas, algunas de las cuales podrían transformarse en paradigmas tecnológicos e intelectuales de primer rango para las próximas décadas. Fomentarán los esfuerzos para aprovechar las oportunidades de investigación a pequeña escala en todos los campos, así como los temas emergentes y grandes retos científicos y tecnológicos (C+T) que exijan una estrecha colaboración entre programas de toda Europa y fuera de ella. Este enfoque estará impulsado por la excelencia y se extiende a la exploración de ideas precompetitivas para configurar el futuro de la tecnología, permitiendo que la sociedad y la industria se beneficien de la colaboración multidisciplinaria en investigación que es preciso acometer a nivel europeo creando vínculos entre la investigación impulsada por la ciencia y la investigación impulsada por los objetivos y retos de la sociedad o la competitividad industrial.

Justificación y valor añadido de la Unión

Los avances radicales con impacto transformador dependen cada vez más de una intensa colaboración entre las distintas disciplinas científicas y tecnológicas (por ejemplo, información y comunicación, biología, bioingeniería y robótica, química, física, matemáticas, modelización médica, ciencia de los sistemas terrestres, ciencia de los materiales, neurociencia y ciencia cognitiva, ciencias sociales o economía) y con las artes, las ciencias del comportamiento y las humanidades. Para ello podría requerirse no solo excelencia en ciencia y tecnología, sino también nuevas actitudes e interacciones novedosas entre un amplio abanico de protagonistas de la investigación.Aun cuando algunas ideas puedan desarrollarse a pequeña escala, otras pueden ser tan ambiciosas que exijan un gran esfuerzo de colaboración durante un período de tiempo considerable. Las principales economías del mundo se han dado cuenta de ello, y existe una creciente competencia mundial por hallar y aprovechar las oportunidades tecnológicas emergentes en las fronteras de la ciencia que pueden tener repercusiones considerables sobre la innovación y beneficios para la sociedad. Para ser eficaz, este tipo de actividad podría requerir un rápido despliegue a gran escala, mediante un esfuerzo europeo común en torno a unos objetivos comunes para construir masa crítica, fomentar sinergias y obtener efectos multiplicadores óptimos.El programa FET abordará todo el espectro de la innovación impulsada por la ciencia: desde las exploraciones ascendentes a pequeña escala de principios de ideas embrionarias y frágiles a la construcción de nuevas comunidades de investigación e innovación en torno a campos de investigación emergentes transformadores y grandes iniciativas colaborativas de investigación construidas alrededor de un programa de investigación destinado a alcanzar objetivos ambiciosos y visionarios. Cada uno de estos tres niveles de compromiso tiene su propio valor específico, aun siendo complementario y sinérgico. Por ejemplo, las exploraciones a pequeña escala pueden revelar la necesidad de desarrollar nuevos temas que pueden dar lugar a una acción a gran escala basada en hojas de ruta adecuadas. Pueden implicar a una amplia gama de participantes en la investigación, incluidos los jóvenes investigadores y las PYME intensivas en investigación y las comunidades de partes interesadas (sociedad civil, responsables de adoptar decisiones, industria e investigadores públicos), reunidos en torno a los programas de investigación a medida que toman forma, maduran y se diversifican.

Líneas generales de las actividades

El programa FET pretende ser visionario, transformador y no convencional, y sus actividades aplicarán lógicas diferentes, desde la totalmente abierta a diferentes grados de estructuración de temas, comunidades y financiación.Las actividades darán forma concreta a diferentes lógicas de acción, a la escala adecuada, encontrando y explotando las oportunidades de beneficios a largo plazo para los ciudadanos, la economía y la sociedad:

a) FET Open

Mediante el fomento de nuevas ideas (""FET Open""), FET apoyará la investigación científica y tecnológica temprana que explora nuevos fundamentos para futuras tecnologías radicalmente nuevas poniendo en entredicho los paradigmas actuales y aventurándose en regiones desconocidas. Un proceso de selección ascendente ampliamente abierto a cualquier idea de investigación constituirá una cartera diversificada de proyectos focalizados. Resultará esencial detectar precozmente nuevos ámbitos, acontecimientos y tendencias prometedores, así como atraer a nuevos protagonistas de la investigación y la innovación de gran potencial.

(b) FET Proactive

Nutriendo temas y comunidades emergentes (""FET Proactive""), FET abordará, en estrecha colaboración con los retos de la sociedad y los temas de liderazgo industrial, una serie de temas de investigación exploratoria prometedores, con potencial para generar una masa crítica de proyectos interrelacionados que, conjuntamente, permitan una exploración amplia y polifacética de los temas y constituyan un depósito común europeo de conocimientos.

(c) FET Flagships

Abordando los grandes retos científicos y tecnológicos interdisciplinarios (""FET Flagships""), FET apoyará, teniendo plenamente en cuenta los resultados de los proyectos preparatorios de FET, la investigación ambiciosa, impulsada por la ciencia y la tecnología y a gran escala, que aspire a lograr una ruptura científica y tecnológica en ámbitos considerados pertinentes, de un modo abierto y transparente que implique a los Estados miembros y a las partes interesadas. Estas actividades podrían beneficiarse de la coordinación de los programas europeos nacionales y regionales. El avance científico debe proporcionar una base sólida y amplia para la innovación tecnológica y su explotación económica en el futuro, así como nuevos beneficios para la sociedad. Estas actividades se realizan utilizando los instrumentos de financiación existentes.El 40 % de los recursos FET se consagrarán a ""FET Open"".";"";"H2020";"H2020-EU.1.";"";"";"2014-09-22 20:39:07";"664101" +"H2020-EU.1.2.";"fr";"H2020-EU.1.2.";"";"";"EXCELLENCE SCIENTIFIQUE - Technologies futures et émergentes (FET)";"Future and Emerging Technologies (FET)";"

EXCELLENCE SCIENTIFIQUE - Technologies futures et émergentes (FET)

Objectif spécifique

L'objectif spécifique est de promouvoir de nouvelles technologies révolutionnaires ayant le potentiel d'ouvrir de nouveaux domaines pour les connaissances et les technologies scientifiques, et de soutenir les industries européennes de la prochaine génération, en explorant des idées innovantes et à haut risque s'appuyant sur des bases scientifiques. L'apport, à différents niveaux, d'un soutien flexible à la recherche collaborative et interdisciplinaire axée sur la réalisation d'objectifs et l'adoption de pratiques de recherche innovantes visent à recenser et à saisir les possibilités d'apporter des avantages à long terme aux citoyens, à l'économie et à la société. Le FET apportera une valeur ajoutée de l'Union aux frontières de la recherche moderne.Le FET promeut la recherche et la technologie au-delà des éléments connus, acceptés ou largement établis et encourage les modes de pensée novateurs et visionnaires, de façon à ouvrir des voies prometteuses qui mèneront au développement de nouvelles technologies performantes, dont certaines pourraient être à la source de certains des principaux paradigmes technologiques et intellectuels des décennies à venir. Le FET encourage l'exploration des possibilités de recherche à petite échelle dans tous les domaines, dont les thèmes émergents et les grands défis scientifiques et technologiques nécessitant une collaboration étroite entre les programmes au sein de l'Union et au-delà. Cette approche se fonde sur l'excellence et s'étend à l'exploration d'idées préconcurrentielles qui détermineront l'avenir des technologies; elle permet à la société et à l'industrie de tirer parti de la collaboration dans le domaine de la recherche pluridisciplinaire qui doit être engagée au niveau européen en établissant des ponts entre la recherche axée sur la science et la recherche axée sur les objectifs sociétaux et les défis de société ou celle axée sur la compétitivité des entreprises.

Justification et valeur ajoutée de l'Union

Les avancées radicales génératrices de changement reposent de plus en plus sur une intense collaboration entre diverses disciplines scientifiques et technologiques (par exemple: information et communication, biologie, bioingénierie et robotique, chimie, physique, mathématique, modélisation médicale, sciences du système terrestre, sciences des matériaux, sciences neurocognitives, sciences sociales ou sciences économiques), et les disciplines artistiques, les sciences comportementales et les sciences humaines. Cette collaboration pourrait exiger non seulement l'excellence sur le plan scientifique et technologique mais aussi un état d'esprit nouveau et de nouvelles interactions entre une grande variété d'acteurs du secteur de la recherche.Si certaines idées peuvent être développées à petite échelle, d'autres sont si difficiles à mettre en œuvre qu'elles nécessitent un effort de collaboration de grande ampleur sur une période relativement longue. Les grandes économies mondiales l'ont reconnu, et la concurrence s'est intensifiée à l'échelle mondiale concernant le recensement et l'exploration des nouvelles possibilités technologiques, aux frontières de la science, qui pourraient avoir des répercussions considérables sur le plan de l'innovation et produire d'énormes avantages pour la société. Pour être efficaces, il se peut que ces types d'activités doivent être mis en place rapidement et à grande échelle, dans le cadre d'une démarche européenne commune fondée sur des objectifs communs, de manière à constituer une masse critique, à promouvoir les synergies et à produire un effet de levier optimal.Le FET couvre tout le spectre de l'innovation scientifique: Le FET couvre tout le spectre de l'innovation scientifique, de l'exploration précoce, à petite échelle et selon un processus ascendant, d'idées embryonnaires et fragiles à la création de nouvelles communautés de la recherche et de l'innovation centrées sur de nouveaux domaines de recherche générateurs de changement et de grandes initiatives de recherche fondées sur la collaboration, articulées autour d'un programme de recherche visant à atteindre des objectifs ambitieux et visionnaires. Ces trois niveaux d'engagement ont chacun leur valeur spécifique, tout en étant liés par une relation de synergie et de complémentarité: les explorations à petite échelle peuvent ainsi faire apparaître la nécessité de développer de nouveaux thèmes, qui sont susceptibles d'entraîner une action à grande échelle sur la base d'une feuille de route appropriée. Ils peuvent faire appel à une grande variété d'acteurs du domaine de la recherche, dont les jeunes chercheurs et les PME fortement axées sur la recherche, et à une multitude de parties prenantes (société civile, décideurs politiques, industrie et chercheurs du secteur public), réunis autour de programmes de recherche qui évoluent au fur et à mesure de leur élaboration, de leur maturation et de leur diversification.

Grandes lignes des activités

Si le FET se veut visionnaire, non conventionnel et moteur de changement, les activités qui le composent suivent différentes logiques, allant d'une ouverture totale à divers degrés de structuration des thématiques, des communautés et du financement.Les activités donnent un caractère plus concret à différentes logiques d'action, à l'échelon approprié, en recensant et en saisissant les possibilités d'apporter des avantages à long terme aux citoyens, à l'économie et à la société:

(a) FET Open

En encourageant les idées innovantes («FET Open»), le FET soutient dans ses premiers pas la recherche scientifique et technologique axée sur l'exploration de nouvelles bases, qui serviront à développer les technologies révolutionnaires du futur en remettant en question les paradigmes actuels et en ouvrant de nouveaux domaines à l'exploration. Un processus de sélection ascendant largement ouvert à toutes les idées de recherche doit permettre de cibler un vaste éventail de projets. La détection précoce des nouvelles thématiques, évolutions et tendances prometteuses et l'attraction de nouveaux acteurs à haut potentiel du secteur de la recherche et de l'innovation seront des facteurs clés;

(b) FET Proactive

En favorisant le développement de thèmes et communautés émergents («FET Proactive»), le FET, en étroite relation avec les thèmes «Défis de société» et «Primauté industrielle», s'ouvre à une série de thèmes prometteurs de la recherche exploratoire, susceptibles de générer une masse critique de projets interconnectés qui, ensemble, garantissent une large couverture de ces domaines de recherche, sous une multitude d'angles différents, et constituent un réservoir européen de connaissances.

(c) FET Flagships

En s'efforçant de relever les grands défis scientifiques et technologiques de caractère interdisciplinaire («FET Flagships»), le FET, en tenant pleinement compte des résultats des projets préparatoires qui s'y rapportent, soutient des activités de recherche scientifique et technologique ambitieuses et à grande échelle visant à réaliser, d'une manière ouverte et transparente et avec la participation des États membres et des parties prenantes concernées, une percée scientifique et technologique dans des domaines jugés pertinents. De telles activités pourraient bénéficier de la coordination entre les programmes européens, nationaux et régionaux. La percée scientifique réalisée devrait offrir une vaste et solide assise à l'innovation technologique et à l'exploitation économique futures, et apporter de nouveaux avantages à la société. Ces activités sont réalisées au moyen des instruments financiers existants.40 % des ressources du FET seront allouées au «FET Open».";"";"H2020";"H2020-EU.1.";"";"";"2014-09-22 20:39:07";"664101" +"H2020-EU.1.2.";"pl";"H2020-EU.1.2.";"";"";"DOSKONAŁA BAZA NAUKOWA - Przyszłe i Powstające Technologie (FET)";"Future and Emerging Technologies (FET)";"

DOSKONAŁA BAZA NAUKOWA - Przyszłe i Powstające Technologie (FET)

Cel szczegółowy

Cel szczegółowy polega na wspieraniu radykalnie nowych technologii, z uwzględnieniem możliwości otwarcia nowych obszarów europejskiej wiedzy i technologii oraz przyczynienia się do powstawania nowej generacji gałęzi przemysłu w Europie poprzez badanie nowatorskich koncepcji obarczonych wysokim ryzykiem – w oparciu o fundamenty naukowe. Zapewniając elastyczne wsparcie dla zorientowanej na osiąganie celów i interdyscyplinarnej współpracy badawczej w różnych skalach oraz przyjmując innowacyjne praktyki w zakresie badań naukowych, dąży się do określenia i wykorzystania możliwości oferujących długofalowe korzyści obywatelom, gospodarce i społeczeństwu. Przyszłe i powstające technologie zapewnią Unii wartość dodaną w przypadku nowoczesnych badań naukowych na rubieżach wiedzy.Przyszłe i powstające technologie wspomagają badania naukowe i technologie wykraczające poza granice tego, co jest znane, akceptowane lub szeroko przyjmowane oraz wspierają nowatorskie i wizjonerskie myślenie w celu otwarcia obiecujących dróg ku efektywnym nowym technologiom, z których część może zapoczątkować wiodące paradygmaty technologiczne i intelektualne na kolejne dziesięciolecia. Przyszłe i powstające technologie wspierają działania w kierunku wykorzystywania małoskalowych możliwości badawczych we wszystkich dziedzinach, w tym w powstających dopiero zagadnieniach oraz wielkich, naukowych i technologicznych wyzwaniach wymagających ścisłej współpracy między programami z całej Europy i spoza niej. To podejście jest zorientowane na doskonałość i obejmuje weryfikację przedkonkurencyjnych pomysłów dotyczących kształtowania przyszłości technologii, umożliwiając społeczeństwu i przemysłowi czerpanie korzyści z multidyscyplinarnej współpracy badawczej, która musi zostać podjęta na poziomie europejskim poprzez połączenie badań naukowych opartych na nauce oraz badań stymulowanych celami i wyzwaniami społecznymi lub konkurencyjnością przemysłową.

Uzasadnienie i unijna wartość dodana

Radykalne przełomy prowadzące do przeobrażeń w coraz większym stopniu są uzależnione od intensywnej współpracy między dyscyplinami nauki i technologii (np. informacji i komunikacji, biologii, bioinżynierii i robotyki, chemii, fizyki, matematyki, modelowania w medycynie, nauki o Ziemi, materiałoznawstwa, neurobiologii i kognitywistyki, nauk społecznych lub ekonomii), a także sztuką, naukami behawioralnymi i humanistyką. Może to wymagać nie tylko najwyższej jakości w zakresie nauki i technologii, lecz także nowych postaw i nowatorskich interakcji między szerokim wachlarzem podmiotów zainteresowanych badaniami naukowymi.Nad niektórymi pomysłami można pracować w małej skali, podczas gdy inne bywają tak skomplikowane, że wymagają szeroko zakrojonego wspólnego wysiłku podejmowanego przez dłuższy czas. Duże gospodarki na świecie zdają sobie z tego sprawę, w związku z czym nasila się globalna konkurencja w wyszukiwaniu i wykorzystaniu pojawiających się możliwości technologicznych na rubieżach nauki, mogących mieć istotne oddziaływanie na innowacje i korzyści dla społeczeństwa. Aby te działania były skuteczne, konieczne może okazać się ich szybkie rozwinięcie do dużej skali poprzez wspólną europejską akcję skoncentrowaną na wspólnych celach, z myślą o osiągnięciu masy krytycznej, promowaniu synergii oraz uzyskaniu optymalnego efektu dźwigni.FET uwzględnia całe spektrum stymulowanych nauką innowacji: od oddolnych i prowadzonych na małą skalę badań opartych na pomysłach będących w zarodku lub wymagających weryfikacji, po budowę nowych społeczności badawczych i innowacyjnych wokół nowych dziedzin badań naukowych sprzyjających przeobrażeniom, a także wielkoskalowe i wspólne inicjatywy badawcze oparte na agendach przewidujących osiągnięcie ambitnych i wizjonerskich celów. Każdy spośród tych trzech poziomów zaangażowania ma szczególną wartość, uzupełniając pozostałe i umożliwiając synergię z nimi. Np. prowadzone na małą skalę badania mogą ujawnić potrzebę opracowania nowych zagadnień, co może skutkować poważną, opartą na odpowiednim planie działania interwencją. Mogą one angażować szeroką gamę podmiotów zainteresowanych badaniami naukowymi, w tym młodych naukowców i MŚP intensywnie korzystające z badań naukowych, a także społeczności zainteresowanych stron (społeczeństwo obywatelskie, decydenci i przemysł, a także naukowcy z sektora publicznego), jednoczących się wokół kształtujących się, dojrzewających i różnicujących się i zmieniających agend badawczych.

Ogólne kierunki działań

FET ma charakter wizjonerski, sprzyjający przeobrażeniom i niekonwencjonalny, natomiast w prowadzonych w jego ramach działaniach stosuje się różne typy logiki, od całkowitego otwarcia po różne stopnie strukturyzacji zagadnień, społeczności i finansowania.Różne rodzaje logiki znajdują odzwierciedlenie w działaniach, we właściwej skali, pozwalając na identyfikację i wykorzystanie możliwości zapewnienia długoterminowych korzyści obywatelom, gospodarce i społeczeństwu:

(a) FET Open

Sprzyjając nowatorskim pomysłom („FET Open”), FET wspierają znajdujące się na wczesnych etapach koncepcje badawcze w zakresie nauki i technologii, zmierzające do stworzenia podstaw radykalnie nowych przyszłych technologii poprzez zakwestionowanie obecnych paradygmatów i eksplorację nieznanych obszarów. Oddolny proces wyboru, szeroko otwarty na wszelkie pomysły badawcze, dostarcza zróżnicowanego portfela ukierunkowanych projektów. Kluczowe będzie wczesne wskazanie obiecujących nowych obszarów, wynalazków i tendencji, a także przyciąganie nowych i cechujących się dużym potencjałem podmiotów zainteresowanych badaniami naukowymi i innowacjami.

(b) FET Proactive

Wspierając nowo powstające zagadnienia i społeczności („FET Proactive”), FET, w ścisłym powiązaniu z tematyką wyzwań społecznych i wiodącej pozycji w przemyśle, obejmują swoim zakresem wiele obiecujących kierunków badań poszukiwawczych, odznaczających się potencjałem wytworzenia masy krytycznej wzajemnie powiązanych projektów, które obejmują szeroki wachlarz wieloaspektowych działań badawczych i przyczyniają się do utworzenia europejskiej puli wiedzy.

(c) FET Flagships

Podejmując wielkie interdyscyplinarne wyzwania naukowe i technologiczne („FET flagships”), FET, przy pełnym uwzględnieniu projektów przygotowawczych FET, wspierają ambitne, realizowane na dużą skalę, stymulowane nauką i technologią badania zmierzające do osiągnięcia naukowego i technologicznego przełomu w dziedzinach określonych jako mające znaczenie, w których w otwarty i przejrzysty sposób uczestniczą państwa członkowskie i odpowiednie zainteresowane strony. Takie działania mogłyby skorzystać na skoordynowaniu programów europejskich, krajowych i regionalnych. Postęp naukowy powinien zapewnić mocne i szerokie podstawy dla przyszłych innowacji technologicznych i ich wykorzystania w gospodarce, a także nowe korzyści dla społeczeństwa. Działania te realizowane są z wykorzystaniem istniejących instrumentów finansowania.40% zasobów FET zostanie przeznaczone na FET Open.";"";"H2020";"H2020-EU.1.";"";"";"2014-09-22 20:39:07";"664101" +"H2020-EU.1.2.";"it";"H2020-EU.1.2.";"";"";"ECCELLENZA SCIENTIFICA - Tecnologie emergenti future (TEF)";"Future and Emerging Technologies (FET)";"

ECCELLENZA SCIENTIFICA - Tecnologie emergenti future (TEF)

Obiettivo specifico

L'obiettivo specifico è promuovere tecnologie radicalmente nuove che offrano la possibilità di aprire nuovi ambiti alla conoscenza scientifica e alle tecnologie e contribuire alle industrie europee di prossima generazione, per mezzo dell'esplorazione di idee nuove e ad alto rischio fondate su basi scientifiche. L'obiettivo è quello di identificare e cogliere, grazie a un sostegno flessibile alla ricerca collaborativa interdisciplinare e orientata ai risultati su scale diverse e grazie all'adozione di prassi di ricerca innovative, le opportunità di vantaggio a lungo termine per i cittadini, l'economia e la società. Le TEF apporteranno valore aggiunto dell'Unione alla ricerca di frontiera moderna.Le TEF promuovono la ricerca e la tecnologia oltre quanto è già conosciuto, accettato o ampiamente adottato e incoraggiano un pensiero nuovo e visionario per aprire percorsi promettenti verso nuove e potenti tecnologie, alcune delle quali sono suscettibili di sviluppare i paradigmi guida in ambito tecnologico e intellettuale dei prossimi decenni. Le TEF promuovono gli sforzi per perseguire le opportunità di ricerca su piccola scala in tutti i settori, compresi i temi emergenti e le grandi sfide scientifiche e tecnologiche che esigono una stretta collaborazione fra i programmi in Europa e oltre. Tale approccio è guidato dall'eccellenza e si spinge a esplorare le idee precompetitive per plasmare il futuro della tecnologia, consentendo alla società e all'industria di trarre vantaggio dalla collaborazione multidisciplinare nella ricerca che deve essere avviata a livello europeo creando il legame fra la ricerca spinta dalla scienza e quella spinta da obiettivi e sfide per la società o dalla competitività industriale.

Motivazione e valore aggiunto dell'Unione

Le scoperte radicali con un impatto trasformativo riposano sempre più su un'intensa collaborazione interdisciplinare nella scienza e nella tecnologia, ad esempio in ambiti quali informazione e comunicazione, biologia, bioingegneria e robotica, chimica, fisica, matematica, modellazione medica, scienze della Terra, scienze dei materiali neuroscienze e scienze cognitive, scienze sociali o economia, o nelle arti, nella scienza del comportamento e nelle discipline umanistiche. A tal fine può non essere sufficiente la sola eccellenza scientifica o tecnologica, ma sono necessarie anche nuove attitudini e nuove interazioni all'interno di un ampio spettro di attori della ricerca.Talune idee possono essere sviluppare su scala ridotta, altre possono rappresentare sfide così importanti da richiedere un ampio sforzo collaborativo per un periodo consistente. Le grandi economie mondiali hanno riconosciuto questo fatto e si assiste a una crescente concorrenza a livello globale per identificare e perseguire le opportunità tecnologiche emergenti alla frontiera della scienza suscettibili di produrre un impatto di rilievo sull'innovazione e i vantaggi sociali. È possibile che questi tipi di attività, per essere efficaci, debbano crescere rapidamente su un'ampia scala per mezzo di uno sforzo comune europeo intorno a obiettivi comuni al fine di conseguire una massa critica, incoraggiare le sinergie e ottenere effetti di leva ottimali.Le TEF coprono l'intera gamma di innovazioni basate sulla scienza: dalle iniziali esplorazioni ascendenti su scala ridotta di idee in fase embrionale e ancora fragili fino alla creazione di nuove comunità di ricerca e innovazione aggregate intorno a settori di ricerca emergenti e nuove iniziative di ricerca collaborative di ampio respiro create attorno a un programma di ricerca mirato a conseguire obiettivi ambiziosi e visionari. Questi tre livelli di impegno hanno ciascuno il proprio valore specifico, restando complementari e sinergici. A titolo di esempio, le esplorazioni su scala ridotta possono rivelare l'esigenza di sviluppare nuovi temi suscettibili di condurre a un'azione su ampia scala basata su tabelle di marcia adeguate. Queste possono coinvolgere un ampio numero di attori della ricerca, compresi i giovani ricercatori e le PMI a elevata intensità di ricerca nonché le comunità di soggetti interessati, quali la società civile, i responsabili politici, l'industria e la ricerca pubblica, aggregati intorno a programmi di ricerca in evoluzione man mano che tali esplorazioni prendono forma, maturano e si diversificano.

Le grandi linee delle attività

Laddove le TEF mirano a essere visionarie, trasformative e non convenzionali, le sue attività seguono logiche diverse, siano esse totalmente aperte o strutturate in diversa misura per quanto riguarda i temi, le comunità e i finanziamenti.Tali attività modellano accuratamente le diverse logiche dell'azione, su scala adeguata, identificando e cogliendo le opportunità di vantaggi a lungo termine per i cittadini, l'economia e la società.

(a) TEF aperte

Incoraggiando nuove idee (""TEF aperte""), le TEF sostengono la ricerca scientifica e tecnologica in fase iniziale esplorando nuove basi per tecnologie future radicalmente nuove mediante la sfida agli attuali paradigmi e l'incursione in terreni ignoti. Un processo di selezione ascendente ampiamente aperto a tutte le idee di ricerca si basa su un portafoglio diversificato di progetti mirati. L'individuazione tempestiva di nuovi settori, sviluppi e tendenze promettenti, congiuntamente all'attrazione di attori della ricerca e dell'innovazione nuovi e ad alto potenziale rappresenteranno fattori chiave.

(b) TEF proattive

Favorendo i temi e le comunità emergenti (""TEF proattive""), le TEF affrontano, in stretta associazione con le sfide per la società e i temi connessi alla leadership industriale, un certo numero di temi promettenti nell'ambito della ricerca esplorativa dotati del potenziale di generare una massa critica di progetti interrelati che, nel complesso, costituiscano un'esplorazione ampia e sfaccettata dei temi per sfociare nella costruzione di una insieme europeo di conoscenze.

(c) TEF faro

Perseguendo le grandi sfide interdisciplinari in materia di scienza e tecnologie (""TEF faro""), le TEF sostengono, tenendo pienamente conto dei risultati dei progetti preparatori delle TEF, una ricerca ambiziosa su ampia scala, basata sulla scienza e sulla tecnologia e mirata a conseguire scoperte scientifiche e tecnologiche epocali in settori individuati come rilevanti in maniera aperta e trasparente, con il coinvolgimento degli Stati membri e dei soggetti interessati. Tali attività potrebbero trarre vantaggio dal coordinamento dei programmi regionali, nazionali ed europei. Il progresso scientifico dovrebbe fornire una base solida e ampia per le future innovazioni tecnologiche e le applicazioni economiche, oltre a generare nuovi vantaggi per la società. Queste attività sono realizzate ricorrendo agli strumenti di finanziamento esistenti.Il 40 % delle risorse delle TEF sarà destinato alle TEF aperte.";"";"H2020";"H2020-EU.1.";"";"";"2014-09-22 20:39:07";"664101" +"H2020-EU.1.2.";"en";"H2020-EU.1.2.";"";"";"EXCELLENT SCIENCE - Future and Emerging Technologies (FET)";"Future and Emerging Technologies (FET)";"

EXCELLENT SCIENCE - Future and Emerging Technologies (FET)

Specific objective

The specific objective is to foster radically new technologies with the potential to open new fields for scientific knowledge and technologies and contribute to the European next generation industries, by exploring novel and high-risk ideas building on scientific foundations. By providing flexible support to goal-oriented and interdisciplinary collaborative research on various scales and by adopting innovative research practices, the aim is to identify and seize opportunities of long-term benefit for citizens, the economy and society. FET will bring Union added value to the frontiers of modern research.FET shall promote research and technology beyond what is known, accepted or widely adopted and shall foster novel and visionary thinking to open promising paths towards powerful new technologies, some of which could develop into leading technological and intellectual paradigms for the decades ahead. FET shall foster efforts to pursue small-scale research opportunities across all areas, including emerging themes and grand scientific and technological challenges that require close collaboration between programmes across Europe and beyond. This approach shall be driven by excellence and extends to exploring pre-competitive ideas for shaping the future of technology, enabling society and industry to benefit from multi-disciplinary research collaboration that needs to be engaged at European level by making the link between research driven by science and research driven by societal goals and challenges or by industrial competitiveness.

Rationale and Union added value

Radical breakthroughs with a transformative impact increasingly rely on intense collaboration across disciplines in science and technology (for instance, information and communication, biology, bioengineering and robotics, chemistry, physics, mathematics, medicine modelling, Earth system sciences, material sciences, neuro- and cognitive sciences, social sciences or economics) and with the arts, behavioural sciences and humanities. This may require not only excellence in science and technology but also new attitudes and novel interactions between a broad range of players in research.While some ideas can be developed on a small scale, others may be so challenging that they require a large collaborative effort over a substantial period of time. Major economies worldwide have recognised this, and there is growing global competition to identify and pursue emerging technological opportunities at the frontier of science which can generate a considerable impact on innovation and benefits for society. To be effective, these types of activities may need to be built up quickly to a large scale by a common European effort around common goals to build critical mass, foster synergies and obtain optimal leveraging effects.FET shall address the entire spectrum of science-driven innovation: from bottom-up, small-scale early explorations of embryonic and fragile ideas to building new research and innovation communities around transformative emerging research areas and large collaborative research initiatives built around a research agenda aiming to achieve ambitious and visionary goals. These three levels of engagement each have their own specific value, while being complementary and synergistic. For example, small-scale explorations can reveal needs for developing new themes that can lead to large-scale action based on appropriate roadmaps. They may involve a wide range of research players, including young researchers and research-intensive SMEs, and stakeholder communities (civil society, policymakers, industry and public researchers), clustered around evolving research agendas as they take shape, mature and diversify.

Broad lines of activities

While FET aims to be visionary, transformative and unconventional, its activities shall follow different logics, from completely open to varying degrees of structuring of topics, communities and funding.The activities shall give firmer shape to different logics for action, on the appropriate scale, identifying and seizing opportunities of long-term benefit for citizens, the economy and society:

(a) FET Open

By fostering novel ideas ('FET Open'), FET shall support early stage science and technology research exploring new foundations for radically new future technologies by challenging current paradigms and venturing into unknown areas. A bottom-up selection process widely open to any research ideas shall build up a diverse portfolio of targeted projects. Early detection of promising new areas, developments and trends, along with attracting new and high-potential research and innovation players, will be key factors.

(b) FET Proactive

By nurturing emerging themes and communities ('FET Proactive'), FET shall, in close association with the societal challenges and industrial leadership themes, address a number of promising exploratory research themes with the potential to generate a critical mass of inter-related projects that, together, make up a broad and multi-faceted exploration of the themes and build a European pool of knowledge.

(c) FET Flagships

By pursuing grand interdisciplinary scientific and technological challenges ('FET Flagships'), FET shall, taking into full account the outcome of FET preparatory projects, support ambitious large-scale, science and technology-driven research aiming to achieve a scientific and technological breakthrough in areas identified as relevant in an open and transparent manner involving the Member States and relevant stakeholders. Such activities could benefit from the coordination between European, national and regional agendas. The scientific advance should provide a strong and broad basis for future technological innovation and economic application, plus novel benefits for society. These activities shall be realised using the existing funding instruments.40 % of FET resources will be devoted to FET Open.";"";"H2020";"H2020-EU.1.";"";"";"2014-09-22 20:39:07";"664101" +"H2020-EU.1.2.";"de";"H2020-EU.1.2.";"";"";"WISSENSCHAFTSEXZELLENZ - Künftige und neu entstehende Technologien (FET)";"Future and Emerging Technologies (FET)";"

WISSENSCHAFTSEXZELLENZ - Künftige und neu entstehende Technologien (FET)

Einzelziel

Einzelziel ist die Förderung grundlegend neuer Technologien mit dem Potenzial, neue Bereiche für wissenschaftliche Erkenntnisse und Technologien zu erschließen und einen Beitrags zu den europäischen Unternehmen der nächsten Generation zu leisten, durch eine wissenschaftlich fundierte Sondierung neuartiger und hochriskanter Ideen. Durch eine flexible Unterstützung zielgerichteter und interdisziplinärer kooperativer Forschung in unterschiedlichen Größenordnungen und durch eine innovative Forschungspraxis sollen Chancen von langfristigem Nutzen für Bürger, Wirtschaft und Gesellschaft ermittelt und verwirklicht werden. Das Einzelziel ""Künftige und neu entstehende Technologien"" wird dafür sorgen, dass die moderne Pionierforschung einen Mehrwert für die Union erbringt.Das Einzelziel ""Künftige und neu entstehende Technologien"" (Future and Emerging Technologies – FET) dient der Förderung von Forschungsarbeiten und Technologien, die über das Bekannte, Anerkannte oder weithin Angewandte hinausgehen, und unterstützt visionäres Denken in neuen Bahnen, um vielversprechende Wege für leistungsstarke neue Technologien zu öffnen, von denen einige sich zu führenden Technologien und geistigen Paradigmen für die nächsten Jahrzehnte entwickeln könnten. Im Rahmen dieses Einzelziels werden über sämtliche Bereiche hinweg Bemühungen zur Verfolgung kleinmaßstäblicher Forschungsmöglichkeiten einschließlich neu entstehender Themen und großer wissenschaftlicher und technologischer Herausforderungen unterstützt, die eine enge Zusammenarbeit zwischen den Programmen in Europa oder darüber hinaus erfordern. Dieses Konzept basiert auf Exzellenz, umfasst aber auch die Sondierung vorwettbewerblicher Ideen für die künftige Gestaltung von Technologie, damit Gesellschaft und Wirtschaft von den auf europäischer Ebene notwendigen multidisziplinären Forschungskooperationen profitieren können, die auf europäischer Ebene entstehen müssen, indem wissenschaftliche Forschung mit Forschung verknüpft wird, die sich an gesellschaftlichen Zielen und Herausforderungen oder an der industriellen Wettbewerbsfähigkeit orientiert.

Begründung und Mehrwert für die Union

Bahnbrechende Erkenntnisse, die einen Wandel bewirken, sind zunehmend das Ergebnis intensiver Zusammenarbeit wissenschaftlicher und technologischer Disziplinen (etwa Information und Kommunikation, Biologie, Biotechnologie und Robotik, Chemie, Physik, Mathematik, Medizinmodellierung, Geografie, Werkstoffwissenschaften, neurologische und kognitive Wissenschaften, Sozial- und Wirtschaftswissenschaften) mit Kunst, Verhaltensforschung und Geisteswissenschaften. Dies erfordert möglicherweise nicht nur Exzellenz in Wissenschaft und Technologie, sondern auch neue Herangehensweisen und Interaktionen zwischen einer großen Bandbreite von in der Forschung tätigen Akteuren.Während einige Ideen in kleinem Maßstab entwickelt werden können, können andere so anspruchsvoll sein, dass sie eine große Kooperationsanstrengung über einen sehr langen Zeitraum erfordern. Weltweit haben große Volkswirtschaften dies erkannt. Daher hat sich auch der globale Wettbewerb, wenn es darum geht, die an wissenschaftlichen Grenzen neu entstehenden technologischen Chancen zu erkennen und aufzugreifen und für Innovation und Gesellschaft nutzbar zu machen, verschärft. Um Wirkung zu zeigen, müssen diese Arten von Maßnahmen möglicherweise schnell und in großem Maßstab ergriffen und hierzu mit einer gemeinsamen Anstrengung auf europäischer Ebene auf gemeinsame Ziele ausgerichtet werden, damit eine kritische Masse entsteht, Synergien hervorgerufen und optimale Hebeleffekte erzeugt werden.FET bezieht sich auf das gesamte Spektrum der aus wissenschaftlichen Anstößen entstehenden Innovationen: von kleinmaßstäblichen Sondierungen im Frühstadium erster und noch unausgereifter Ideen nach dem ""Bottom-up""-Prinzip bis hin zum Aufbau neuer Forschungs- und Innovationsgemeinschaften, die sich mit neu entstehenden, transformativen Forschungsbereichen befassen und großen Forschungskooperationsinitiativen im Umfeld einer Forschungsagenda, mit der ehrgeizige und visionäre Ziele verfolgt werden. Diese drei Ebenen stehen zwar jeweils für sich, ergänzen sich jedoch und bilden Synergien. So können kleinmaßstäbliche Sondierungen ergeben, dass neue Themen entwickelt werden müssen, die zu einer großmaßstäblichen Maßnahme führen, die einem passenden Fahrplan folgt. Sie können eine große Bandbreite von Forschungsakteuren mit einbeziehen, etwa Nachwuchswissenschaftler, forschungsintensive KMU, interessierte Kreise (Zivilgesellschaft, politische Entscheidungsträger, Wirtschaft und öffentliche Forschung), die um die jeweiligen entstehenden Forschungsagenden ein Cluster bilden, das Form annimmt, reift und sich diversifiziert.

Einzelziele und Tätigkeiten in Grundzügen

FET ist zwar visionär, transformativ und unkonventionell, doch die Logik der entsprechenden Tätigkeiten reicht von vollständig offenen bis hin zu unterschiedlich strukturierten Themen, Gemeinschaften und Finanzierungen.Die Tätigkeiten geben den unterschiedlichen Maßnahmenkonzepten, abhängig von deren Größe, eine klarere Form, um Chancen von langfristigem Nutzen für Bürger, Wirtschaft und Gesellschaft zu sondieren und zu verwirklichen:

(a) FET – offener Bereich

Durch die Förderung neuartiger Ideen (""FET – offener Bereich"") werden wissenschaftlich-technologische Forschungsarbeiten, die neue Wege für grundlegend neue Technologien der Zukunft sondieren, dabei geltende Paradigmen in Frage stellen und in unbekannte Bereiche vorstoßen, in einem frühen Stadium unterstützt. Ein für unterschiedlichste Forschungsideen offenes ""Bottom-up""-Auswahlverfahren wird für eine große Vielfalt bei den ausgewählten Projekten sorgen. Entscheidend dabei ist, vielversprechende neue Bereiche, Entwicklungen und Trends frühzeitig zu erkennen und neue hochkompetente Akteure aus Forschung und Innovation hierfür zu gewinnen.

(b) FET – proaktiver Bereich

Durch die Förderung neu entstehender Themen und Gemeinschaften (""FET – proaktiver Bereich"") werden in enger Verbindung mit den Schwerpunkten ""Gesellschaftliche Herausforderungen"" und ""Führende Rolle bei grundlegenden und industriellen Technologien"" vielversprechende Themen der Sondierungsforschung erschlossen, die eine kritische Masse zusammenhängender Projekte generieren können, welche zusammengenommen eine breite Palette facettenreicher Themen darstellen und zum Aufbau eines europäischen Wissenspools beitragen.

(c)FET – Leitinitiativen

Mit der Verfolgung großer interdisziplinärer wissenschaftlich-technologischer Herausforderungen (""FET – Leitinitiativen"") werden unter Berücksichtigung der Ergebnisse der vorbereitenden FET-Projekte ehrgeizige großmaßstäbliche, von Wissenschaft und Technik angeregte Forschungstätigkeiten gefördert, mit denen ein wissenschaftlicher und technischer Durchbruch auf denjenigen Gebieten angestrebt wird, die in einem offenen und transparenten Vorgehen unter Einbindung der Mitgliedstaaten und der einschlägigen interessierten Kreise als relevant bestimmt wurden. Diese Tätigkeiten könnten von der Koordinierung der europäischen, nationalen und regionalen Agenden profitieren. Der wissenschaftliche Fortschritt dürfte eine solide und breite Grundlage für künftige technologische Innovationen und deren wirtschaftliche Anwendung schaffen und auch der Gesellschaft neuartige Möglichkeiten eröffnen. Für diese Tätigkeiten wird auf die bestehenden Finanzierungsinstrumente zurückgegriffen.40 % der FET-Mittel werden für ""FET – offener Bereich"" verwendet.";"";"H2020";"H2020-EU.1.";"";"";"2014-09-22 20:39:07";"664101" +"H2020-EU.3.5.1.3.";"en";"H2020-EU.3.5.1.3.";"";"";"Support mitigation policies, including studies that focus on impact from other sectoral policies";"";"";"";"H2020";"H2020-EU.3.5.1.";"";"";"2014-09-22 20:48:16";"664397" +"H2020-EU.3.5.2.1.";"en";"H2020-EU.3.5.2.1.";"";"";"Further our understanding of biodiversity and the functioning of ecosystems, their interactions with social systems and their role in sustaining the economy and human well-being";"";"";"";"H2020";"H2020-EU.3.5.2.";"";"";"2014-09-22 20:48:23";"664401" +"H2020-EU.3.2.5.2.";"en";"H2020-EU.3.2.5.2.";"";"";"Develop the potential of marine resources through an integrated approach";"";"";"";"H2020";"H2020-EU.3.2.5.";"";"";"2014-09-22 20:45:47";"664317" +"H2020-EU.3.6.";"pl";"H2020-EU.3.6.";"";"";"WYZWANIA SPOŁECZNE - Europa w zmieniającym się świecie – integracyjne, innowacyjne i refleksyjne społeczeństwa";"Inclusive, innovative and reflective societies";"

WYZWANIA SPOŁECZNE - Europa w zmieniającym się świecie – integracyjne, innowacyjne i refleksyjne społeczeństwa

Cel szczegółowy

Celem szczegółowym jest wspieranie lepszego zrozumienia Europy, zapewnienie rozwiązań oraz wsparcie integracyjnych, innowacyjnych i refleksyjnych społeczeństw europejskich w kontekście bezprecedensowych transformacji i nasilających się globalnych współzależności.Europa staje w obliczu wielkich wyzwań społeczno-ekonomicznych, które znacznie wpłyną na jej wspólną przyszłość. Do wyzwań tych należą: nasilające się gospodarcze i kulturalne współzależności, starzenie się populacji i zmiany demograficzne, wykluczenie społeczne i ubóstwo, integracja i dezintegracja, nierówności i przepływy migracyjne, pogłębiająca się przepaść cyfrowa, pielęgnowanie kultury innowacji i kreatywności w społeczeństwie i przedsiębiorstwach oraz malejące zaufanie do instytucji demokratycznych oraz między obywatelami w granicach państw i ponad granicami. Wyzwania te są ogromne i wymagają wspólnego europejskiego podejścia, opartego na wspólnej wiedzy naukowej, którą zapewnić mogą m.in. nauki społeczne i humanistyczne.W Unii utrzymują się znaczne nierówności, zarówno między krajami, jak i w ich obrębie. W 2011 r. wskaźnik rozwoju społecznego, stanowiący zagregowaną miarę postępów w zakresie zdrowia, edukacji i dochodów, wynosił w państwach członkowskich od 0,771 do 0,910, odzwierciedlając w ten sposób znaczne rozbieżności między państwami. Utrzymują się również znaczne nierówności związane z płcią: przykładowo wskaźnik zróżnicowania wynagrodzenia ze względu na płeć w Unii wynosi średnio 17,8% na korzyść mężczyzn. W 2011 r. na każdych sześciu obywateli Unii jeden (ok. 80 mln ludzi) był narażony na ubóstwo. W ciągu ostatnich dwóch dziesięcioleci powszechniejsze stało się ubóstwo wśród młodych osób dorosłych i rodzin z dziećmi. Bezrobocie wśród młodzieży utrzymuje się na poziomie powyżej 20%. 150 mln Europejczyków (ok. 25%) nigdy nie korzystało z internetu i może nigdy nie nabyć wystarczających umiejętności cyfrowych. Zwiększyła się również polityczna apatia i polaryzacja podczas wyborów, co stanowi odzwierciedlenie słabnącego zaufania obywateli do dzisiejszych systemów politycznych.Z tych danych wynika, że niektórych grup społecznych i społeczności cały czas nie obejmuje rozwój społeczny i gospodarczy ani demokratyczna polityka. Nierówności te nie tylko tłumią rozwój społeczny, ale i hamują gospodarki w Unii i zmniejszają potencjał badań naukowych i innowacji w poszczególnych krajach i między nimi.Zasadniczym wyzwaniem w przeciwdziałaniu tym nierównościom będzie propagowanie kontekstów, w których tożsamość europejska, narodowa i etniczna mogą współistnieć i wzajemnie się wzbogacać.Ponadto spodziewany jest znaczny, wynoszący 42%, wzrost liczby Europejczyków w wieku powyżej 65 lat – z 87 milionów w roku 2010 do 124 milionów w roku 2030. Stanowi to duże wyzwanie dla gospodarki, społeczeństwa i stabilności finansów publicznych.Wskaźniki wydajności i wzrostu gospodarczego w Europie maleją relatywnie od czterech dziesięcioleci. Co więcej, jej globalny udział w tworzeniu wiedzy oraz wyniki w zakresie innowacji szybko się obniżają w porównaniu z tymi, które występują w głównych gospodarkach wschodzących, takich jak Brazylia i Chiny. Mimo że Europa dysponuje solidną bazą naukową, musi ona uczynić tę bazę silnym atutem w zakresie innowacyjnych towarów i usług.Wprawdzie dobrze wiadomo, że Europa musi inwestować więcej w naukę i innowacje i że będzie musiała również koordynować te inwestycje lepiej niż w przeszłości. Od początku kryzysu finansowego wiele nierówności gospodarczych i społecznych w Europie pogłębiło się jeszcze bardziej i w przeważającej części Unii powrót do wskaźników wzrostu gospodarczego sprzed kryzysu wydaje się odległą perspektywą. Obecny kryzys sugeruje również, że dużym wyzwaniem jest znalezienie w sytuacjach kryzysowych rozwiązań, które odzwierciedlałyby różnorodność państw członkowskich i ich interesów.Tym wyzwaniom należy stawić czoła wspólnie i w innowacyjny oraz multidyscyplinarny sposób, ponieważ występują między nimi kompleksowe i często nieoczekiwane interakcje. Innowacje mogą prowadzić do osłabienia integracyjności, czego dowodzą np. zjawiska przepaści cyfrowej czy segmentacji rynków pracy. Innowacje społeczne i zaufanie społeczne są niekiedy trudne do pogodzenia w polityce, np. w cechujących się trudną sytuacją społeczną obszarach w dużych miastach Europy. Ponadto połączenie innowacji i zmieniających się potrzeb obywateli także skłania decydentów oraz podmioty gospodarcze i społeczne do poszukiwania nowych odpowiedzi, ignorujących ustalone granice między sektorami, działaniami, towarami lub usługami. Zjawiska takie jak rozwój internetu, systemów finansowych, gałęzi gospodarki nastawionych na zaspokajanie potrzeb związanych ze starzeniem się oraz społeczeństw ekologicznych dobitnie pokazują, że konieczne jest myślenie o tych kwestiach, a zarazem reagowanie na nie w sposób uwzględniający wymiary integracyjności i innowacji.Właściwa tym wyzwaniom złożoność oraz ewolucja potrzeb sprawiają zatem, że konieczne jest rozwijanie innowacyjnych badań naukowych i nowych inteligentnych technologii, procesów i metod, mechanizmów innowacji społecznych, skoordynowanych działań i polityk przewidujących poważne zmiany w Europie lub wpływających na nie. Niezbędne jest tu zrozumienie na nowo czynników determinujących innowacyjność. Oprócz tego należy poznać bazowe tendencje i oddziaływania w ramach tych wyzwań, a także odkryć lub wynaleźć na nowo skuteczne formy solidarności, zachowań, koordynacji i kreatywności, dzięki którym Europa, w porównaniu z innymi regionami świata, będzie się wyróżniać, jeżeli chodzi o integracyjne, innowacyjne i refleksyjne społeczeństwa.Konieczne jest również przyjęcie bardziej strategicznego podejścia do współpracy z państwami trzecimi, opartego na głębszym zrozumieniu przeszłości Unii i jej obecnej oraz przyszłej roli jako globalnego podmiotu.

Uzasadnienie i unijna wartość dodana

Te wyzwania mają charakter ponadgraniczny i dlatego wymagają bardziej kompleksowej analizy porównawczej, która pozwoli przygotować podstawę umożliwiającą lepsze zrozumienie polityk krajowych i europejskich. Taka analiza porównawcza powinna dotyczyć mobilności (osób, towarów, usług i kapitału, ale także kompetencji, wiedzy i pomysłów) oraz form współpracy instytucjonalnej, interakcji międzykulturowych i międzynarodowego współdziałania. Z powodu braku lepszego poznania takich wyzwań i przewidzenia siły globalizacji zmuszają także państwa europejskie do tego, by wzajemnie ze sobą konkurowały, a nie współpracowały, dlatego też nacisk w Europie położony jest na różnice zamiast na podobieństwa i właściwą równowagę między konkurencją a współpracą. Podjęcie takich zasadniczych kwestii, w tym wyzwań społeczno-gospodarczych, tylko na poziomie krajowym niesie ze sobą niebezpieczeństwo nieefektywnego wykorzystania zasobów, rozprzestrzenienia się problemów na inne kraje europejskie i nieeuropejskie oraz nasilenia napięć społecznych, gospodarczych i politycznych, mogących bezpośrednio wpływać na osiąganie celów Traktatów, a w szczególności tytułu I Traktatu o Unii Europejskiej, w odniesieniu do określonych w nich wartości.Aby zrozumieć, przeanalizować i zbudować integracyjne, innowacyjne i refleksyjne społeczeństwa, Europa potrzebuje reakcji, która uwolni potencjał wspólnych idei co do przyszłości Europy, by tworzyć nową wiedzę, technologie i zdolności. Koncepcja społeczeństwa integracyjnego uznaje różnorodność kultur, regionów i warunków społeczno-gospodarczych za atut Europy. Konieczne jest przekształcenie różnorodności europejskiej w źródło innowacji i rozwoju. Takie podejście pomoże Europie sprostać swoim wyzwaniom nie tylko na szczeblu wewnętrznym, ale też w roli podmiotu globalnego na płaszczyźnie międzynarodowej. To z kolei pozwoli państwom członkowskim na skorzystanie z doświadczeń zdobytych gdzie indziej oraz na lepsze zdefiniowanie własnych szczególnych działań odpowiadających odnośnym kontekstom.Promowanie nowych sposobów współpracy między państwami w Unii i na całym świecie, a także w odnośnych środowiskach badawczo-innowacyjnych będzie zatem podstawowym zadaniem związanym z tym wyzwaniem społecznym. Wspieranie procesów innowacji społecznych i technologicznych, promowanie inteligentnej i partycypacyjnej administracji publicznej, a także kształtowanie i promowanie tworzenia polityki opartej na faktach będzie systematycznie realizowane w celu zwiększenia znaczenia tych wszystkich działań dla decydentów, podmiotów społecznych i gospodarczych oraz obywateli. Badania naukowe i innowacje będą wstępnym warunkiem konkurencyjności europejskich przedsiębiorstw i usług, a szczególny nacisk zostanie położony na zrównoważoność, postępy w dziedzinie edukacji, zwiększanie zatrudnienia i zmniejszanie ubóstwa.Finansowanie unijne zapewniane w związku z tym wyzwaniem będzie zatem wspierać rozwój, realizację i dostosowanie kluczowych kierunków polityki Unii, zwłaszcza celów strategii „Europa 2020”. Będzie się ono zazębiać, w stosownych przypadkach i czasie, z inicjatywami w zakresie wspólnego programowania, takimi jak „Dziedzictwo kulturowe”, „Długie lata, lepsze życie” czy „Europa zurbanizowana”, w ciągłej koordynacji z działaniami bezpośrednimi JRC.

Ogólne kierunki działań

Społeczeństwa integracyjne

Celem jest lepsze zrozumienie zmian społecznych w Europie i ich wpływu na spójność społeczną oraz analiza i rozwój integracji społecznej, gospodarczej i politycznej, a także pozytywnej dynamiki międzykulturowej w Europie i w stosunkach z partnerami międzynarodowymi, poprzez pionierską działalność naukową i interdyscyplinarność, postępy technologiczne i innowacje organizacyjne. Główne wyzwania, jakim trzeba stawić czoła w przypadku europejskich modeli spójności społecznej i dobrobytu, to m.in. migracja, integracja, zmiany demograficzne, starzenie się społeczeństwa i niepełnosprawność, edukacja i uczenie się przez całe życie, a także redukcja ubóstwa i wykluczenia społecznego przy uwzględnieniu różnych uwarunkowań regionalnych i kulturowych.Badania w dziedzinie nauk społecznych i humanistycznych odgrywają tutaj wiodącą rolę, ponieważ analizują zmiany zachodzące w czasie i przestrzeni i umożliwiają sprawdzenie tworzonych w wyobraźni wizji przyszłości. Europa ma ogromną wspólną historię zarówno współpracy, jak i konfliktu. Jej dynamiczne interakcje kulturalne dostarczają inspiracji i możliwości. Niezbędne są badania naukowe pozwalające zrozumieć tożsamość i poczucie przynależności do poszczególnych społeczności, regionów i narodów. Badania naukowe zapewnią decydentom wsparcie w kształtowaniu polityki sprzyjającej zatrudnieniu, zwalczającej ubóstwo i zapobiegającej rozwojowi różnych form podziałów, konfliktów oraz wykluczenia politycznego i społecznego, dyskryminacji i nierówności, takich jak nierówności płci i nierówności międzypokoleniowe, dyskryminacji ze względu na niepełnosprawność lub pochodzenie etniczne lub nierówny dostęp do technologii cyfrowych lub innowacji, w społeczeństwach europejskich, jak również w stosunku do innych regionów świata. W szczególności badania naukowe mają przyczynić się do wdrożenia i dostosowania strategii „Europa 2020” oraz szerokich działań zewnętrznych Unii.Działania mają skoncentrować się na zrozumieniu i wspieraniu bądź wdrażaniu:(a) mechanizmów promowania inteligentnego i trwałego wzrostu gospodarczego sprzyjającego włączeniu społecznemu; (b) zaufanych organizacji, praktyk, usług i polityk, które są konieczne, aby zbudować odporne integracyjne, partycypacyjne, otwarte i kreatywne społeczeństwa w Europie, ze szczególnym uwzględnieniem migracji, integracji i zmian demograficznych; (c) roli Europy jako globalnego podmiotu, w szczególności w dziedzinie praw człowieka i wymiaru sprawiedliwości na świecie; (d) promowania zrównoważonych i integracyjnych środowisk poprzez innowacyjne planowanie i projektowanie przestrzenne i urbanistykę.

Innowacyjne społeczeństwa

Celem jest wspieranie rozwoju innowacyjnych społeczeństw i polityki w Europie poprzez zaangażowanie obywateli, organizacji społeczeństwa obywatelskiego, przedsiębiorstw i użytkowników w badania naukowe i innowacje oraz promowanie skoordynowanej polityki w zakresie badań naukowych i innowacji w kontekście globalizacji oraz potrzeby propagowania najwyższych standardów etycznych. Szczególne wsparcie zostanie zapewnione na potrzeby rozwoju EPB i ramowych warunków innowacji.Wiedza o kulturze i społeczeństwie jest ważnym źródłem kreatywności i innowacji, w tym innowacji biznesowych, innowacji w sektorze publicznym i innowacji społecznych. W wielu przypadkach innowacje społeczne i tworzone z myślą o użytkowniku poprzedzają rozwój innowacyjnych technologii, usług i procesów gospodarczych. Sektory kreatywne stanowią jeden z istotnych zasobów pozwalających stawić czoła wyzwaniom społecznym i wyzwaniu konkurencyjności. Ponieważ wzajemne zależności między innowacjami społecznymi a technicznymi są złożone i rzadko liniowe, konieczne są dalsze badania, w tym badania międzysektorowe i multidyscyplinarne, w dziedzinie rozwoju wszelkich rodzajów innowacji oraz działań finansowanych w celu tworzenia warunków do skutecznego rozwoju innowacji w przyszłości.Działania mają się koncentrować na:(a) wzmocnieniu podstaw faktograficznych i wsparcia dla inicjatywy przewodniej „Unii innowacji” i EPB; (b) poszukiwaniu nowych form innowacji, ze szczególnym naciskiem na innowacje społeczne i kreatywność, oraz zrozumieniu czynników warunkujących rozwój innowacji, ich powodzenie lub porażkę;(c) wykorzystaniu potencjału innowacyjności, kreatywności i wydajności wszystkich pokoleń; (d) promowaniu spójnej i skutecznej współpracy z państwami trzecimi.

Refleksyjne społeczeństwa – dziedzictwo kulturowe i tożsamość europejska

Celem jest przyczynienie się do zrozumienia podstaw intelektualnych Europy- jej historii i licznych europejskich i pozaeuropejskich wpływów- jako inspiracji dla naszego dzisiejszego życia. Europa charakteryzuje się różnorodnością narodową (żyją tu m.in. mniejszości i społeczności autochtoniczne), tradycji i tożsamości regionalnych i narodowych, a także zróżnicowanym poziomem rozwoju gospodarczego i społecznego. Migracja i mobilność, media, przemysł i transport przyczyniają się do wielorakości poglądów i stylów życia. Należy uznać i wziąć pod uwagę tę różnorodność i szanse, jakie ona stwarza.Europejskie zbiory w bibliotekach, m.in. w bibliotekach cyfrowych, archiwach, muzeach, galeriach i innych instytucjach publicznych obfitują w bogatą, niewykorzystaną dokumentację i przedmioty badań. Te zasoby archiwalne, wraz z dziedzictwem niematerialnym, reprezentują historię poszczególnych państw członkowskich, ale również zbiorowe dziedzictwo Unii, które powstawało z biegiem czasu. Materiały takie powinny zostać udostępnione – również za pomocą nowych technologii – badaczom i obywatelom, aby im umożliwić spojrzenie w przyszłość poprzez archiwum przeszłości. Dostępność i zachowanie dziedzictwa kulturowego w tych formach są konieczne, aby podtrzymać żywotność aktywnego uczestnictwa w obrębie kultur europejskich i między nimi w chwili obecnej, i przyczyniają się do trwałego wzrostu gospodarczego.Działania mają się koncentrować na:(a) badaniu dziedzictwa Europy, jej pamięci, tożsamości, integracji oraz interakcji i translacji kulturowych, w tym jej reprezentacji w zbiorach kulturalnych i naukowych, archiwach i muzeach, co pozwoli lepiej ukształtować i zrozumieć teraźniejszość poprzez bogatsze interpretacje przeszłości; (b) badaniu historii, literatury, sztuki, filozofii i religii krajów i regionów europejskich oraz tego, w jaki sposób ukształtowały one współczesną europejską różnorodność; (c) badaniu roli Europy w świecie, wzajemnych wpływów i powiązań między regionami świata, oraz spojrzenia z zewnątrz na kultury europejskie. ";"";"H2020";"H2020-EU.3.";"";"";"2014-09-22 20:49:28";"664435" +"H2020-EU.3.6.";"de";"H2020-EU.3.6.";"";"";"GESELLSCHAFTLICHE HERAUSFORDERUNGEN - Europa in einer sich verändernden Welt: integrative, innovative und reflektierende Gesellschaften";"Inclusive, innovative and reflective societies";"

GESELLSCHAFTLICHE HERAUSFORDERUNGEN - Europa in einer sich verändernden Welt: integrative, innovative und reflektierende Gesellschaften

Einzelziel

Einzelziel ist die Förderung eines umfassenderen Verständnisses von Europa, das Finden von Lösungen und die Unterstützung integrativer, innovativer und reflektierender europäischer Gesellschaften vor dem Hintergrund eines beispiellosen Wandels und wachsender globaler Interdependenzen.Europa ist mit gewaltigen sozioökonomischen Herausforderungen konfrontiert, die sich einschneidend auf die gemeinsame Zukunft auswirken werden. Hierzu gehören unter anderem die wachsenden wirtschaftlichen und kulturellen Interdependenzen, die Bevölkerungsalterung und der demografische Wandel, soziale Ausgrenzung und Armut, Integration und Desintegration, Ungleichheiten und Migrationsströme, eine zunehmende digitale Kluft, die Förderung einer Innovations- und Kreativitätskultur in Gesellschaft und Unternehmen und das schwindende Vertrauen in demokratische Institutionen sowie zwischen Bürgern im eigenen Staat und über Grenzen hinweg. Diese Herausforderungen sind gewaltig und erfordern einen gemeinsamen europäischen Ansatz, der auf gemeinsamen wissenschaftlichen Erkenntnissen aufbaut, die u. a. die Sozial- und Geisteswissenschaften liefern können.In der Europäischen Union bestehen sowohl zwischen als auch innerhalb von Ländern immer noch erhebliche Ungleichheiten. Im Jahr 2011 erzielten die Mitgliedstaaten beim Index für die menschliche Entwicklung (dies ist ein aggregierter Messwert für den Fortschritt bei Gesundheit, Bildung und Einkommen) einen Wert zwischen 0,771 und 0,910, woraus sich erhebliche Unterschiede zwischen den Ländern ablesen lassen. Auch bestehen nach wie vor große Ungleichheiten zwischen den Geschlechtern: So fällt in der Union der geschlechtsspezifische Lohnunterschied mit durchschnittlich 17,8% immer noch zugunsten der Männer aus(23). Im Jahr 2011 war jeder sechste Unionsbürger (etwa 80 Millionen Menschen) von Armut bedroht. In den letzten beiden Jahrzehnten ist die Armut bei jungen Erwachsenen und bei Familien mit Kindern gestiegen. Die Jugendarbeitslosigkeit liegt bei über 20%. 150 Millionen Europäer (etwa 25%) haben noch nie das Internet genutzt und viele erreichen möglicherweise nie eine ausreichende digitale Kompetenz. Auch haben politische Apathie und Polarisierung bei den Wahlen zugenommen, womit deutlich wird, dass das Vertrauen der Bürger in die derzeitigen politischen Systeme schwindet.Diese Zahlen lassen darauf schließen, dass einige gesellschaftliche Gruppen und Gemeinschaften dauerhaft von der gesellschaftlichen und wirtschaftlichen Entwicklung bzw. von der demokratischen Willensbildung ausgeschlossen werden. Diese Ungleichheiten beeinträchtigen nicht nur die gesellschaftliche Entwicklung, sondern wirken sich auch störend auf die Volkswirtschaften in der Union aus und verringern die Forschungs- und Innovationskapazitäten innerhalb der einzelnen Länder und auch länderübergreifend.Bei der Beseitigung dieser Ungleichheiten wird es in erster Linie darum gehen, Rahmenbedingungen zu fördern, unter denen europäische, nationale und ethnische Identitäten nebeneinander leben und einander bereichern können.Überdies dürfte die Zahl der über 65-Jährigen in Europa zwischen 2010 und 2030 beträchtlich ansteigen, und zwar von 87 Millionen auf 124 Millionen, d. h. um 42%. Dies sind große Herausforderungen für Wirtschaft und Gesellschaft sowie für die langfristige Tragfähigkeit der öffentlichen Finanzen.Die Produktivitäts- und Wachstumsraten Europas sind über vier Jahrzehnte hinweg relativ zurückgegangen. Zudem ist der Anteil Europas an der weltweiten Wissensproduktion und sein Vorsprung in der Innovationsleistung im Vergleich zu den wichtigsten Schwellenländern wie Brasilien und China rasant geschrumpft. Europa hat zwar eine starke Wissenschaftsbasis, aber es muss daraus einen leistungsstarken Aktivposten für innovative Güter und Dienstleistungen machen.Es ist gemeinhin bekannt, dass Europa mehr in Wissenschaft und Innovation investieren muss und dass es diese Investitionen auch besser als in der Vergangenheit koordinieren muss. Seit der Finanzkrise haben sich viele wirtschaftliche und soziale Ungleichheiten in Europa noch weiter verschärft, und die Rückkehr zu einem Wirtschaftswachstum mit Zuwachsraten wie vor der Krise wird für den Großteil der Union vermutlich noch lange auf sich warten lassen. Auch legt die derzeitige Krise nahe, dass es sehr schwierig ist, Lösungen zu finden, die der Heterogenität der Mitgliedstaaten und ihrer Interessen gerecht werden.Diese Herausforderungen gilt es gemeinsam und auf innovative Art und Weise disziplinübergreifend zu bewältigen, da sie in komplexen und häufig unerwarteten Wechselbeziehungen stehen. Innovationen können die Integration schwächen, wie beispielsweise das Phänomen der digitalen Kluft oder die Arbeitsmarktsegmentierung zeigen. Gesellschaftliche Innovation und gesellschaftliches Vertrauen sind in der Politik mitunter schwer zu vereinbaren – etwa in sozial benachteiligten Vierteln von Großstädten in Europa. Abgesehen davon sehen sich politische Entscheidungsträger sowie wirtschaftliche und gesellschaftliche Akteure angesichts des Zusammenwirkens von Innovation und wachsenden Ansprüchen der Bürger veranlasst, neue Antworten zu finden, die gewachsene Grenzen zwischen Sektoren, Aktivitäten, Gütern und Dienstleistungen außer Acht lassen. Phänomene wie das Wachstum des Internet und der Finanzsysteme, die Alterung der Wirtschaft und die ökologische Gesellschaft zeigen zur Genüge, wie notwendig es ist, diese Fragen gleichzeitig unter dem Blickwinkel von Integration und Innovation zu denken und zu beantworten.Die diesen Herausforderungen innewohnende Komplexität und die Entwicklung der Ansprüche machen es daher umso dringender, innovative Forschung und neue intelligente Technologien, Prozesse und Verfahren, Mechanismen für die gesellschaftliche Innovation sowie koordinierte Maßnahmen und Strategien zu entwickeln, die für Europa wichtige Entwicklungen antizipieren oder beeinflussen. Dies erfordert ein neues Verständnis der für die Innovation entscheidenden Faktoren. Überdies macht es notwendig, die zugrunde liegenden Trends und Auswirkungen bei diesen Herausforderungen zu verstehen und erfolgreiche Formen der Solidarität, des Verhaltens sowie der Koordinierung und Kreativität wieder zu entdecken bzw. neu zu erfinden, die die Gesellschaften in Europa gegenüber anderen Regionen der Welt als integrative, innovative und reflektierende Gesellschaften hervortreten lassen.Dies erfordert auch ein stärker strategisch ausgerichtetes Konzept für die Zusammenarbeit mit Drittländern, das sich auf ein vertieftes Verständnis der Geschichte der Union und ihrer aktuellen und künftigen Rolle als globaler Akteur gründet.

Begründung und Mehrwert für die Union

Diese Herausforderungen erfordern angesichts ihres grenzübergreifenden Charakters eine vielschichtigere komparative Analyse, mit der eine Basis entwickelt werden kann, auf deren Grundlage nationale und europäische Maßnahmen besser verstanden werden können. Solche vergleichenden Analysen sollten sich mit der Mobilität (von Menschen, Gütern, Dienstleistungen und Kapital, aber auch von Kompetenzen, Wissen und Ideen) und den Formen institutioneller Zusammenarbeit, interkultureller Beziehungen und internationaler Zusammenarbeit befassen. Werden diese Herausforderungen nicht besser erforscht und antizipiert, werden die Kräfte der Globalisierung dazu führen, dass europäische Länder nicht umhin können, miteinander zu konkurrieren statt zu kooperieren und so eher die Unterschiede in Europa statt die Gemeinsamkeiten und ein ausgewogenes Verhältnis zwischen Zusammenarbeit und Wettbewerb betonen. Die Beantwortung dieser kritischen – auch sozioökonomischen – Fragen allein auf nationaler Ebene birgt die Gefahr einer ineffizienten Nutzung von Ressourcen, der Verlagerung der Probleme auf andere europäische und nichteuropäische Länder und der Verschärfung gesellschaftlicher, wirtschaftlicher und politischer Spannungen, die die Ziele Verträge, insbesondere in Titel I des Vertrags über die Europäische Union verankerten Werte direkt beeinträchtigen würden.Für das Verständnis, die Analyse und den Aufbau integrativer, innovativer und reflektierender Gesellschaften braucht Europa eine Antwort, die das Potenzial gemeinsamer Ideen für die Zukunft Europas erschließt, wenn es darum geht, neues Wissen, neue Technologien und neue Fähigkeiten zu generieren. Das Konzept integrativer Gesellschaften trägt der Vielfalt an Kulturen, Regionen und sozioökonomischen Gegebenheiten als Stärke Europas Rechnung. Die Vielfalt Europas muss als Quelle der Innovation und Entwicklung erschlossen werden. Dieses Unterfangen wird Europa bei der Bewältigung seiner Herausforderungen nicht nur im Innern, sondern als globaler Akteur auf der internationalen Bühne unterstützen. Dies wiederum bietet den Mitgliedstaaten auch die Möglichkeit, anderswo gemachte Erfahrungen zu nutzen und ihre eigenen Maßnahmen abhängig von ihren jeweiligen Gegebenheiten besser zu definieren.Die Förderung neuer Formen der Zusammenarbeit zwischen Ländern innerhalb der Union und weltweit sowie über die einschlägigen Forschungs- und Innovationsgemeinschaften hinweg wird daher eine zentrale Aufgabe innerhalb dieser gesellschaftlichen Herausforderung darstellen. Damit all diese Tätigkeiten für politische Entscheidungsträger, sozioökonomische Akteure und Bürger eine größere Relevanz haben, gilt es, die Unterstützung gesellschaftlicher und technologischer Innovationsprozesse, die Förderung einer intelligenten und partizipatorischen öffentlichen Verwaltung sowie die Vorbereitung und Unterstützung evidenzbasierter politischer Entscheidungsfindung systematisch weiterzuverfolgen. Forschung und Innovation werden zu einer Voraussetzung für die Wettbewerbsfähigkeit der europäischen Unternehmen und Dienstleistungen, unter besonderer Berücksichtigung der Nachhaltigkeit, der Bildungsförderung, des Beschäftigungswachstums und der Beseitigung der Armut.Die Unionsförderung im Rahmen dieser Herausforderung gilt damit der Entwicklung, Umsetzung und Anpassung zentraler Unionsstrategien, insbesondere der Ziele der Strategie Europa 2020. Gegebenenfalls erfolgt eine Verzahnung mit Initiativen für die gemeinsame Planung, wie ""Länger und besser leben"", ""Kulturelles Erbe"" und ""Das städtische Europa"", sowie eine Koordinierung mit den direkten Maßnahmen der Gemeinsamen Forschungsstelle.

Einzelziele und Tätigkeiten in Grundzügen

Integrative Gesellschaften Ziel ist ein besseres Verständnis des gesellschaftlichen Wandels in Europa und seiner Auswirkungen auf den sozialen Zusammenhalt sowie die Analyse und die Entwicklung der gesellschaftlichen, wirtschaftlichen und politischen Integration und einer positiven interkulturellen Dynamik in Europa und mit internationalen Partnern durch Spitzenforschung und Interdisziplinarität, technologische Fortschritte und organisatorische Innovationen. Zu den Hauptherausforderungen in Bezug auf die europäischen Modelle für den sozialen Zusammenhalt und das Wohlergehen zählen u. a.Migration, Integration, der demografische Wandel, die alternde Gesellschaft und Behinderungen, Bildung und lebenslanges Lernen sowie die Armutsbekämpfung und die soziale Ausgrenzung, wobei die unterschiedlichen regionalen und kulturellen Gegebenheiten zu beachten sind. Sozial- und Geisteswissenschaften spielen hierbei eine führende Rolle, da sie Veränderungen über Raum und Zeit hinweg erforschen und die Erforschung fiktiver Zukunftsverhältnisse ermöglichen. Europa hat eine große gemeinsame Geschichte sowohl in Form von Zusammenarbeit als auch in Form von Konflikten. Die dynamischen kulturellen Interaktionen in Europa bieten Anregungen und Chancen. Forschung ist notwendig, um die Identität von und die Zugehörigkeit zu unterschiedlichen Gemeinschaften, Regionen und Nationen zu verstehen. Die Forschung soll die politischen Entscheidungsträger bei der Festlegung von Strategien unterstützen, die der Beschäftigungsförderung, der Bekämpfung der Armut und der Vermeidung der Entwicklung verschiedener Formen von Abspaltung, Konflikten sowie politischer und sozialer Ausgrenzung, Diskriminierung und Ungleichheiten dienen, wie etwa Ungleichheiten zwischen den Geschlechtern und Generationen, Diskriminierungen aufgrund einer Behinderung oder der ethnischen Herkunft oder der digitalen Kluft oder Innovationskluft in europäischen Gesellschaften und in anderen Regionen der Welt. Sie dient insbesondere der Umsetzung und Anpassung der Strategie Europa 2020 und außenpolitischer Maßnahmen der Union im weitesten Sinn.Schwerpunkt der Tätigkeiten ist es, Folgendes zu verstehen und zu fördern bzw. einzuführen:(a) Mechanismen für die Förderung eines intelligenten, nachhaltigen und integrativen Wachstums; (b) bewährte Organisationsstrukturen, Verfahren, Dienstleistungen und Strategien, die für den Aufbau widerstandsfähiger, integrativer, offener und kreativer Gesellschaften in Europa erforderlich sind, insbesondere unter Berücksichtigung der Migration, der Integration und des demografischen Wandels; (c) Rolle Europas als globaler Akteur, insbesondere in Bezug auf Menschenrechte und globales Recht; (d) Förderung eines nachhaltigen und integrativen Umfelds durch innovative Raum- und Stadtplanung.

Innovative Gesellschaften

Ziel ist die Förderung der Entwicklung innovativer Gesellschaften und Strategien in Europa durch die Einbeziehung von Bürgern, Organisationen der Zivilgesellschaft, Unternehmen und Nutzern in Forschung und Innovation und die Unterstützung koordinierter Forschungs- und Innovationsstrategien vor dem Hintergrund der Globalisierung und der Notwendigkeit, die höchsten ethischen Standards zu fördern. Besonders unterstützt wird die Weiterentwicklung des Europäischen Forschungsraums und der Rahmenbedingungen für Innovation.Kulturelles und gesellschaftliches Wissen ist eine Hauptquelle von Kreativität und Innovation, auch von Innovation in der Wirtschaft, im öffentlichen Sektor und in der Gesellschaft. In vielen Fällen gehen gesellschaftliche und von den Nutzern angestoßene Innovationen der Entwicklung innovativer Technologien, Dienstleistungen und Wirtschaftsprozesse voraus. Die Kreativunternehmen sind eine wichtige Ressource für die Bewältigung gesellschaftlicher Herausforderungen und für die Wettbewerbsfähigkeit. Da Wechselbeziehungen zwischen gesellschaftlicher und technologischer Innovation komplex sind und selten linear verlaufen, muss die Entwicklung aller Arten von Innovationen weiter – auch sektorübergreifend und multidisziplinär – erforscht werden, und es müssen Finanzmittel für Maßnahmen zur Förderung ihrer effektiven Verwirklichung in der Zukunft bereitgestellt werden.Schwerpunkte der Tätigkeiten ist:(a) Stärkung der Evidenzbasis und Unterstützung der Leitinitiative ""Innovationsunion"" und des Europäischen Forschungsraums; (b) Erforschung neuer Innovationsformen, unter besonderer Betonung von gesellschaftlicher Innovation und Kreativität, und Gewinnung von Erkenntnissen darüber, wie alle Innovationsformen entwickelt werden und Erfolg haben oder scheitern; (c) Nutzung des innovativen, kreativen und produktiven Potenzials aller Generationen; (d) Förderung kohärenter und wirksamer Zusammenarbeit mit Drittländern. Reflektierende Gesellschaften – Kulturerbe und europäische Identität Ziel ist ein Beitrag zum Verständnis der geistigen Grundlage Europas, seiner Geschichte und der vielen europäischen und außereuropäischen Einflüsse als Quelle der Inspiration für unser Leben in heutiger Zeit. Charakteristisch für Europa sind die Vielfalt der Völker (einschließlich der Minderheiten und indigenen Völker), Traditionen sowie regionalen und nationalen Identitäten und das unterschiedliche Ausmaß an wirtschaftlicher und gesellschaftlicher Entwicklung. Migration und Mobilität, Medien, Wirtschaft und Verkehr tragen zur Vielfalt der Sichtweisen und Lebensentwürfe bei. Diese Vielfalt und die sich daraus ergebenden Möglichkeiten sollten gewürdigt und berücksichtigt werden.Die europäischen Sammlungen in Bibliotheken, auch digitalen Bibliotheken, in Archiven, Museen, Galerien und anderen öffentlichen Institutionen bieten eine Fülle von reichhaltigem, unerschlossenem Dokumentarmaterial und von Studienobjekten. Dieser Archivbestand bildet zusammen mit dem immateriellen Kulturerbe die Geschichte der einzelnen Mitgliedstaaten ab, stellt aber auch das gemeinsame Erbe einer Union dar, die sich im Laufe der Zeit geformt hat. Dieses Material sollte auch mit Hilfe der neuen Technologien Forschern und Bürgern zugänglich gemacht werden, damit sie durch die archivierte Vergangenheit einen Blick in die Zukunft werfen können. Die Zugänglichkeit und Erhaltung des in diesen Formen vorliegenden Kulturerbes ist für den dynamischen, lebendigen Austausch innerhalb der Kulturen Europas und zwischen ihnen in der Gegenwart unabdingbar und trägt zu einem nachhaltigen Wirtschaftswachstum bei.Schwerpunkte der Tätigkeiten ist:(a) Erforschung des Erbes, des Gedächtnisses, der Identität und der Integration Europas und der kulturellen Wechselwirkungen und Transfers einschließlich der Darstellung dieser Aspekte in kulturellen oder wissenschaftlichen Sammlungen, Archiven und Museen, damit durch gehaltvollere Deutungen der Vergangenheit die Gegenwart besser erfasst und verstanden werden kann;(b) Erforschung der Geschichte, Literatur, Philosophie und Religionen der Länder und Regionen Europas und der Frage, wie diese die heutige Vielfalt in Europa geprägt haben; (c) Erforschung der Rolle Europas in der Welt, der gegenseitigen Beeinflussung und der Verknüpfungen zwischen den Regionen der Welt und der Wahrnehmung der Kulturen Europas in der Welt. ";"";"H2020";"H2020-EU.3.";"";"";"2014-09-22 20:49:28";"664435" +"H2020-EU.3.6.";"it";"H2020-EU.3.6.";"";"";"SFIDE PER LA SOCIETÀ - L'Europa in un mondo che cambia - società inclusive, innovative e riflessive";"Inclusive, innovative and reflective societies";"

SFIDE PER LA SOCIETÀ - L'Europa in un mondo che cambia - società inclusive, innovative e riflessive

Obiettivo specifico

L'obiettivo specifico è promuovere una maggiore comprensione dell'Europa, fornire soluzioni e sostenere società europee inclusive, innovative e riflessive in un contesto di trasformazioni senza precedenti e interdipendenze crescenti di portata mondiale.L'Europa deve affrontare notevoli sfide socioeconomiche che incidono sostanzialmente sul suo futuro comune e che comprendono le crescenti interdipendenze economiche e culturali, l'invecchiamento e il cambiamento demografico, l'esclusione sociale e la povertà, l'integrazione e la disgregazione, le ineguaglianze e i flussi migratori, il crescente divario digitale, la promozione di una cultura dell'innovazione e della creatività nella società e nelle imprese e il calo della fiducia nelle istituzioni democratiche e fra i cittadini a livello nazionale e internazionale. Queste sfide sono enormi ed esigono un approccio europeo comune, basato sulla conoscenza scientifica condivisa che le scienze sociali e umanistiche, tra le altre, possono fornire.Nell'Unione permangono disuguaglianze di rilevo, sia all'interno dei paesi, sia fra questi. Nel 2011 l'indice di sviluppo umano, una misura aggregata del progresso in termini di salute, istruzione e reddito, valutava gli Stati membri fra 0,771 e 0,910, il che evidenzia considerevoli divergenze fra essi. Tali significative disuguaglianze sono presenti inoltre per esempio nella differenza retributiva di genere, che nell'Unione è pari in media al 17,8 % a favore degli uomini. Nel 2011 un cittadino dell'Unione su sei (circa 80 milioni di persone) era a rischio di povertà. Negli ultimi due decenni è aumentata la povertà che colpisce giovani adulti e famiglie con bambini. La disoccupazione giovanile supera il 20 %. 150 milioni di europei, ossia circa il 25 %, non hanno mai usato internet e potrebbero non raggiungere mai un livello sufficiente di alfabetizzazione digitale. Sono inoltre aumentate l'apatia politica e la polarizzazione elettorale, a riprova del fatto che vacilla la fiducia dei cittadini nei confronti degli attuali sistemi politici.Questi dati indicano che alcuni gruppi sociali e comunità sono esclusi in maniera persistente dallo sviluppo sociale ed economico e/o dalle politiche democratiche. Tali disuguaglianze non solo bloccano lo sviluppo sociale, ma ostacolano le economie dell'Unione e riducono le capacità di ricerca e innovazione sia all'interno dei singoli paesi sia tra questi.Una sfida essenziale nell'affrontare queste disuguaglianze sarà la promozione di contesti in cui identità europee, nazionali ed etniche possano coesistere e arricchirsi a vicenda.Inoltre le previsioni indicano che il numero degli europei di età superiore ai 65 anni aumenterà significativamente, passando da 87 milioni a 124 milioni tra il 2010 e il 2030, pari a un incremento del 42 %. Ciò rappresenta una grande sfida per l'economia, la società e la sostenibilità delle finanze pubbliche.La produttività e la crescita economica europee si sono attestate su un lento declino nel corso degli ultimi quattro decenni. Per di più la quota europea di produzione mondiale di conoscenze e di prestazioni innovative sono in rapido declino rispetto alle principali economie emergenti come il Brasile e la Cina. Anche se l'Europa possiede una robusta base di ricerca, è necessario che questa diventi un vantaggio potente per quanto concerne i beni e i servizi innovativi.È risaputo che l'Europa deve investire maggiormente in ambito scientifico e innovativo e che dovrà altresì coordinare questi investimenti meglio di quanto abbia fatto in passato. Dopo la crisi finanziaria molte disuguaglianze economiche e sociali in Europa sono aumentate ancora di più e il ritorno ai tassi di crescita economica precedenti la crisi sembra ancora lontano per buona parte dell'Unione. La crisi attuale suggerisce altresì che è difficile trovare soluzioni a crisi che riflettono l'eterogeneità degli Stati membri e dei loro interessi.È opportuno affrontare queste sfide congiuntamente e con modalità innovative e multidisciplinari poiché interagiscono in modi complessi e spesso inattesi. L'innovazione può portare a un indebolimento dell'inclusione, come si evince, ad esempio, dal divario digitale o dai fenomeni di segmentazione del mercato del lavoro. L'innovazione e la fiducia sociali sono talvolta difficili da conciliare nelle politiche, ad esempio in zone socialmente depresse delle grandi città europee. Inoltre, la combinazione tra l'innovazione e le richieste in evoluzione dei cittadini porta i responsabili politici e gli operatori economici e sociali a trovare nuove risposte che ignorino i confini stabiliti tra i vari settori, attività, beni o servizi. Fenomeni come la crescita di internet, dei sistemi finanziari, dell'invecchiamento dell'economia e della società ecologica dimostrano chiaramente che è necessario pensare e rispondere a tali problematiche in tutte le loro dimensioni di inclusione e innovazione nel contempo.La complessità intrinseca di queste sfide e l'evoluzione delle esigenze rende pertanto essenziale sviluppare una ricerca innovativa e tecnologie, processi e metodi nuovi e intelligenti, meccanismi di innovazione sociale, azioni e politiche coordinate in grado di anticipare o influenzare i principali sviluppi per l'Europa. È necessaria una nuova comprensione degli elementi determinanti dell'innovazione. È necessario inoltre comprendere le tendenze e gli impatti soggiacenti all'interno di tali sfide e riscoprire o reinventare forme riuscite di solidarietà, comportamento, coordinamento e creatività suscettibili di distinguere l'Europa in termini di società inclusive, innovative e riflessive rispetto ad altre regioni del mondo.A tal fine è necessario altresì un approccio più strategico nella cooperazione con i paesi terzi, basato su una comprensione più approfondita del passato dell'Unione e del suo ruolo attuale e futuro di attore globale.

Motivazione e valore aggiunto dell'Unione

Queste sfide superano i confini nazionali e richiedono quindi analisi comparative più complesse al fine di sviluppare una base per la migliore comprensione delle politiche nazionali ed europee. Tali analisi comparative dovrebbero tener conto della mobilità (delle merci, delle persone, dei servizi e dei capitali, ma anche delle competenze, delle conoscenze e delle idee), oltre a forme di cooperazione istituzionale, interazioni interculturali e cooperazione internazionale. Se tali sfide non sono comprese e previste meglio, le forze della globalizzazione possono anche spingere i paesi europei a competere tra di loro invece di cooperare, finendo così per accentuare le differenze in Europa piuttosto che i punti comuni e un corretto equilibrio fra cooperazione e concorrenza. Affrontare tali questioni fondamentali, comprese le sfide socioeconomiche, a livello esclusivamente nazionale comporta il rischio di un uso inefficiente delle risorse, di un'esternalizzazione dei problemi verso altri paesi europei e non europei e di un'accentuazione delle tensioni sociali, economiche e politiche suscettibili di incidere direttamente sugli obiettivi dei trattati per quanto riguarda i suoi valori, in particolare il titolo I del trattato sull'Unione europea.Al fine di comprendere, analizzare e costruire società inclusive, innovative e riflessive, l'Europa ha bisogno di una risposta che liberi il potenziale di idee condivise per il futuro europeo al fine di creare nuove conoscenze, tecnologie e capacità. Il concetto di società inclusiva riconosce la diversità culturale, regionale e socioeconomica quale punto di forza dell'Europa. Occorre trasformare la diversità europea in una fonte di innovazione e sviluppo. Tali tentativi consentiranno all'Europa di affrontare le sfide non solo a livello interno, ma anche come attore globale sulla scena internazionale. Questo a sua volta consentirà agli Stati membri di trarre vantaggio dalle esperienze altrui e definire meglio le proprie azioni specifiche corrispondenti ai rispettivi contesti.La promozione di nuove forme di cooperazione tra i paesi dell'Unione e a livello mondiale, nonché in tutte le pertinenti comunità della ricerca e dell'innovazione, occuperà quindi un ruolo centrale nell'ambito di questa sfida per la società. Sostenere processi di innovazione sociale e tecnologica, incoraggiare la partecipazione intelligente della pubblica amministrazione, oltre a informare e promuovere processi decisionali basati su fatti concreti, sono azioni che saranno sistematicamente perseguite al fine di migliorare la pertinenza di tutte queste attività per i responsabili politici, gli attori sociali ed economici e i cittadini. La ricerca e l'innovazione costituiscono una condizione essenziale per la competitività delle aziende e dei servizi europei, con particolare attenzione alla sostenibilità, ai progressi dell'istruzione, all'aumento dell'occupazione e alla riduzione della povertà.Il finanziamento dell'Unione nel quadro di questa sfida sosterrà quindi lo sviluppo, l'attuazione e l'adeguamento delle politiche chiave dell'Unione europea, segnatamente gli obiettivi della strategia Europa 2020. Se del caso, al momento opportuno interagirà con le iniziative di programmazione congiunta, in particolare quelle relative a ""Patrimonio culturale"", ""Vivere di più, vivere meglio"" e ""Europa urbana"" e si cercherà il coordinamento con le azioni dirette del CCR.

Le grandi linee delle attività

Società inclusive

L'obiettivo è comprendere meglio i cambiamenti sociali in atto in Europa e il loro impatto sulla coesione sociale e analizzare e sviluppare l'inclusione sociale, economica e politica e le dinamiche interculturali positive in Europa e con i partner internazionali, per mezzo di una scienza d'avanguardia e di un approccio interdisciplinare, di progressi tecnologici e innovazioni organizzative. Le sfide principali da affrontare in materia di modelli europei di coesione sociale e benessere sono tra l'altro la migrazione, l'integrazione, il cambiamento demografico, l'invecchiamento della società e la disabilità, l'istruzione e l'apprendimento permanente nonché la riduzione della povertà e dell'esclusione sociale, tenendo conto delle diverse caratteristiche regionali e culturali.La ricerca nell'ambito delle scienze sociali e delle discipline umanistiche svolge un ruolo di guida, in quanto osserva le mutazioni nel tempo e nello spazio e permette di esplorare futuri possibili. L'Europa ha una lunga storia comune di cooperazione e conflitto. Le sue interazioni culturali dinamiche offrono ispirazione e opportunità. La ricerca è necessaria per comprendere l'identità e l'appartenenza a livello di comunità, regioni e nazioni. La ricerca sosterrà i responsabili politici nella definizione di politiche che sostengano l'occupazione, lottino contro la povertà e prevengano lo sviluppo di diverse forme di separazione, conflitto ed esclusione politica e sociale, discriminazioni e disuguaglianze, quali le disuguaglianze di genere e intergenerazionali, la discriminazione a causa della disabilità o dell'origine etnica e i divari digitali o in materia di innovazione, nelle società europee e nelle altre regioni del mondo. In particolare la ricerca contribuisce all'attuazione e all'adattamento della strategia Europa 2020 e della più ampia azione esterna dell'Unione.Le attività si concentrano sulla comprensione e l'incentivazione o attuazione dei seguenti elementi:(a) i meccanismi per promuovere una crescita intelligente, sostenibile e inclusiva; (b) le organizzazioni di fiducia, le pratiche, le politiche e i servizi che sono necessari per la costruzione di società adattabili, inclusive, partecipative, aperte e creative in Europa, tenendo conto in particolare della migrazione, dell'integrazione e del cambiamento demografico; (c) il ruolo di attore mondiale dell'Europa, segnatamente per quanto riguarda i diritti umani e la giustizia nel mondo; (d) la promozione degli ambienti sostenibili e inclusivi mediante pianificazione e progettazione territoriali e urbane innovative.

Società innovative

L'obiettivo è promuovere lo sviluppo di società e politiche innovative in Europa per mezzo dell'impegno dei cittadini, delle organizzazioni della società civile, delle imprese e degli utenti per quanto concerne la ricerca e l'innovazione nonché la promozione di politiche di ricerca e innovazione coordinate nell'ambito della globalizzazione e tenuto conto dell'esigenza di promuovere i più elevati standard etici. Sarà fornito un sostegno particolare per lo sviluppo del SER nonché delle condizioni generali per l'innovazione.Le conoscenze sociali e culturali sono un'importante fonte di creatività e innovazione, anche nel settore sociale, pubblico e delle imprese. In molti casi, inoltre, le innovazioni sociali e basate sulle esigenze degli utenti precedono lo sviluppo di tecnologie, servizi e processi economici innovativi. Le industrie creative sono un'importante risorsa per affrontare le sfide per la società e la competitività. Poiché le interrelazioni tra innovazione sociale e tecnologica sono complesse e raramente lineari, occorrono ulteriori ricerche, anche intersettoriali e multidisciplinari, nello sviluppo di tutti i tipi di innovazione e attività finanziate, al fine di incoraggiarne uno sviluppo efficace nel futuro.Il centro delle attività comprende:(a) il rafforzamento della base scientifica e del sostegno per l'iniziativa faro ""Unione dell'innovazione"" e il SER; (b) l'esplorazione di nuove forme di innovazione, con particolare attenzione all'innovazione sociale e alla creatività, e la comprensione delle modalità di sviluppo, riuscita o insuccesso di tutte le forme di innovazione; (c) l'utilizzo del potenziale innovativo, creativo e produttivo di tutte le generazioni; (d) la promozione di una cooperazione coerente ed efficace con i paesi terzi.

Società riflessive - patrimonio culturale e identità europea

L'obiettivo è quello di contribuire a comprendere il fondamento intellettuale dell'Europa, la sua storia e le numerose influenze europee ed extraeuropee, che costituiscono una fonte di ispirazione per le nostre vite oggi. L'Europa è caratterizzata da una varietà di diversi popoli (compresi minoranze e popoli indigeni), tradizioni e identità regionali e nazionali nonché da livelli diversi di sviluppo economico e sociale. La migrazione e la mobilità, i mezzi di comunicazione, l'industria e i trasporti contribuiscono alla diversità di prospettive e stili di vita. Occorre riconoscere e tenere in conto tale diversità e le opportunità che ne derivano.Le collezioni europee conservate in biblioteche, anche digitali, archivi, musei, gallerie e altre istituzioni pubbliche detengono un patrimonio ricco e ancora inesplorato di documenti e oggetti di studio. Tali risorse d'archivio rappresentano, assieme al patrimonio intangibile, la storia dei singoli Stati membri ma anche il patrimonio collettivo di un'Unione emersa nel corso del tempo. Tali materiali dovrebbero essere resi accessibili a ricercatori e cittadini, anche mediante le nuove tecnologie, per consentire di guardare al futuro attraverso l'archivio del passato. L'accessibilità e la conservazione del patrimonio culturale nelle forme suddette sono necessarie per la vitalità dei rapporti esistenti tra le diverse culture e all'interno delle stesse nell'Europa di oggi e contribuiscono alla crescita economica sostenibile.Il centro delle attività comprende:(a) lo studio del patrimonio culturale, della memoria, dell'identità, dell'integrazione e delle interazioni e traduzioni culturali in Europa, compreso il modo in cui tali elementi sono rappresentati nelle collezioni a carattere culturale e scientifico, negli archivi e nei musei, allo scopo di informare e comprendere meglio il presente mediante interpretazioni più approfondite del passato; (b) la ricerca sulla storia, la letteratura, l'arte, la filosofia e le religioni dei paesi e delle regioni d'Europa e sul modo in cui queste hanno dato forma alla diversità europea contemporanea; (c) la ricerca sul ruolo dell'Europa nel mondo, sulle influenze e i legami reciproci tra le regioni del mondo e sulle culture europee viste dall'esterno. ";"";"H2020";"H2020-EU.3.";"";"";"2014-09-22 20:49:28";"664435" +"H2020-EU.3.6.";"fr";"H2020-EU.3.6.";"";"";"DÉFIS DE SOCIÉTÉ - L'Europe dans un monde en évolution - des sociétés ouvertes à tous, innovantes et capables de réflexion";"Inclusive, innovative and reflective societies";"

DÉFIS DE SOCIÉTÉ - L'Europe dans un monde en évolution - des sociétés ouvertes à tous, innovantes et capables de réflexion

Objectif spécifique

L'objectif spécifique est de promouvoir une meilleure compréhension de l'Europe, de trouver des solutions et de soutenir des sociétés européennes ouvertes à tous, innovantes et capables de réflexion dans un contexte de transformations sans précédent et d'interdépendances mondiales croissantes.L'Europe fait face à des enjeux socio-économiques qui auront des répercussions notables sur son avenir commun. Il s'agit notamment du renforcement des interdépendances économiques et culturelles, du vieillissement et de l'évolution démographique, de l'exclusion sociale et de la pauvreté, de l'intégration et de la désintégration, des inégalités et des flux migratoires, d'une fracture numérique croissante, de la promotion d'une culture de l'innovation et de la créativité dans la société et les entreprises, et d'une baisse de la confiance dans les institutions démocratiques et entre les citoyens, à l'intérieur des frontières et vis-à-vis de l'étranger. Les défis sont considérables et appellent une approche européenne commune, fondée sur des connaissances scientifiques partagées que les sciences sociales et humaines, entre autres, peuvent apporter.Il subsiste des inégalités notables au sein de l'Union, aussi bien entre les États membres qu'à l'intérieur de chacun d'eux. En 2011, l'indice de développement humain, une mesure agrégée des progrès dans le domaine de la santé, de l'éducation et des revenus, place les États membres entre 0,771 et 0,910, ce qui témoigne d'écarts considérables entre les pays. Des inégalités notables entre les sexes persistent également: l'écart de rémunération entre les hommes et les femmes au sein de l'Union s'établit ainsi en moyenne à 17,8 % en faveur des hommes. En 2011, une personne sur six au sein de l'Union (soit quelque 80 millions de personnes) était exposée au risque de pauvreté. Ces vingt dernières années, la pauvreté des jeunes adultes et des familles avec enfants a augmenté. Le taux de chômage des jeunes est supérieur à 20 %. Cent cinquante millions d'Européens (environ 25 %) n'ont jamais utilisé l'internet et pourraient ne jamais développer une culture numérique suffisante. L'apathie politique et la polarisation lors des élections ont également progressé, ce qui reflète la perte de confiance de l'opinion vis-à-vis des systèmes politiques actuels.Ces chiffres donnent à penser que certains groupes sociaux et certaines communautés sont laissés systématiquement en marge du développement social et économique et/ou de la politique démocratique. Ces inégalités étouffent non seulement le développement sociétal mais entravent les économies de l'Union et réduisent les capacités de recherche et d'innovation à l'intérieur des pays et entre eux.Pour s'attaquer à ces inégalités, l'enjeu fondamental sera de favoriser des cadres dans lesquels les identités européennes, nationales et ethniques peuvent coexister et s'enrichir mutuellement.En outre, le nombre d'Européens de plus de 65 ans devrait connaître une augmentation sensible de 42 %, passant de 87 millions en 2010 à 124 millions en 2030. Cela représente un défi majeur pour l'économie, la société et la viabilité des finances publiques.La productivité et les taux de croissance économique de l'Europe connaissent une baisse relative depuis quatre décennies. Qui plus est, sa part dans la production de connaissances à l'échelle mondiale et son avance sur le plan des performances en matière d'innovation par rapport aux grandes économies émergentes, telles que le Brésil et la Chine, diminuent rapidement. L'Europe dispose d'une solide base de recherche, qu'elle doit utiliser comme tremplin pour développer des produits et services innovants.Il est bien connu que l'Europe se doit d'investir davantage dans la science et l'innovation et qu'elle devra aussi mieux coordonner ces investissements que par le passé. Depuis le début de la crise financière, de nombreuses inégalités économiques et sociales en Europe se sont encore aggravées et le retour des taux de croissance économique antérieurs à la crise ne semble pas pour demain dans la plupart des pays de l'Union. La crise actuelle montre également qu'il est difficile de trouver des solutions à des crises qui reflètent l'hétérogénéité des États membres et de leurs intérêts.Ces défis doivent être relevés conjointement et de manière innovante et multidisciplinaire, car ils s'inscrivent dans des interactions complexes et souvent inattendues. L'innovation peut contribuer à creuser les différences, comme en témoignent, par exemple, la fracture numérique ou la segmentation du marché du travail. L'innovation sociale et la confiance sociale sont parfois difficiles à concilier dans des politiques, par exemple dans les zones socialement défavorisées des grandes villes d'Europe. Par ailleurs, la conjonction de l'innovation et de l'évolution des exigences des citoyens amène également les décideurs politiques et les acteurs économiques et sociaux à trouver de nouvelles réponses qui ignorent les frontières établies entre les secteurs, les activités, les biens ou les services. Des phénomènes tels que la croissance de l'internet et des systèmes financiers, le vieillissement de l'économie et l'avènement d'une société plus écologique démontrent abondamment à quel point il est nécessaire de réfléchir et de traiter ces questions sous l'angle à la fois de l'inclusion sociale et de l'innovation.La complexité inhérente à ces défis et les évolutions des exigences rendent dès lors indispensable de mettre en place une recherche innovante, des technologies, procédés et méthodes nouveaux et intelligents, des mécanismes d'innovation sociale ainsi que des actions et des politiques coordonnées qui anticiperont ou influenceront les grandes évolutions en Europe. Elles nécessitent une autre manière de concevoir les déterminants en matière d'innovation. En outre, elles nécessitent de comprendre les évolutions qui sous-tendent ces défis et les répercussions que ceux-ci entraînent, et de redécouvrir ou de réinventer des formes efficaces de solidarité, de comportement, de coordination et de créativité qui rendront l'Europe unique en termes de sociétés ouvertes à tous, innovantes et capables de réflexion par rapport aux autres régions du monde.Elles requièrent également une approche plus stratégique de la coopération avec les pays tiers, basée sur une compréhension plus approfondie du passé de l'Union et de son rôle actuel et futur en tant qu'acteur mondial.

Justification et valeur ajoutée de l'Union

Ces défis transcendent les frontières nationales et appellent donc des analyses comparatives plus complexes afin d'établir une base qui permettra de mieux appréhender les politiques nationales et européennes. Ces analyses comparatives devraient étudier la mobilité (des personnes, des biens, des services et des capitaux, mais aussi des compétences, des connaissances et des idées) et les formes de coopération institutionnelle, d'interactions interculturelles et de coopération internationale. Si ces défis ne sont pas mieux compris et anticipés, les forces de la mondialisation poussent par ailleurs les pays d'Europe à se faire concurrence plutôt qu'à coopérer, ce qui accentue les différences en Europe, alors qu'il conviendrait de mettre l'accent sur les points communs et de trouver un juste équilibre entre coopération et concurrence. Une approche purement nationale de questions aussi importantes, y compris des enjeux socio-économiques, entraîne un risque d'utilisation inefficace des ressources, d'exportation des problèmes vers d'autres pays d'Europe et d'ailleurs et d'accentuation des tensions sociales, économiques et politiques, qui pourrait peser directement sur les objectifs des traités relatifs aux valeurs, notamment ceux énoncés au son titre I du traité sur l'Union européenne.Pour comprendre, analyser et édifier des sociétés ouvertes à tous, innovantes et capables de réflexion, l'Europe doit réagir en déployant le potentiel des idées communes pour son avenir afin de créer de nouvelles connaissances, technologies et capacités. Le concept de sociétés inclusives tient compte de la diversité des paramètres culturels, régionaux et socio-économiques en tant qu'atout européen. Il est nécessaire de faire de la diversité européenne une source d'innovation et de développement. Une telle démarche aidera l'Europe à relever les défis qui sont les siens, non seulement sur le plan interne, mais aussi en tant qu'acteur d'envergure mondiale sur la scène internationale. Les États membres pourront, de ce fait, bénéficier d'expériences extérieures et élaborer plus efficacement leurs propres plans d'action en fonction de leur situation spécifique.La promotion de nouveaux modes de coopération internationale au sein de l'Union et dans le monde, ainsi qu'entre communautés de la recherche et de l'innovation intéressées, sera donc une tâche essentielle au titre de ce défi de société. On cherchera de manière systématique à soutenir les processus d'innovation sociale et technologique, à promouvoir une administration publique intelligente et participative, ainsi qu'à éclairer et à favoriser une prise de décisions fondée sur des éléments factuels, afin de renforcer la pertinence de toutes ces activités pour les décideurs politiques, les acteurs économiques et sociaux, et les citoyens. La recherche et l'innovation seront indispensables à la compétitivité des entreprises et des services européens et il conviendra d'accorder une attention particulière au développement durable, aux progrès de l'éducation, à l'augmentation de l'emploi et à la réduction de la pauvreté.Le financement par l'Union au titre de ce défi appuiera donc le développement, la mise en œuvre et l'adaptation de politiques fondamentales de l'Union, notamment les objectifs de la stratégie Europe 2020. Il s'articulera, selon les besoins, avec des initiatives de programmation conjointe, notamment «Patrimoine culturel», «Vivre plus longtemps et mieux» et «L'Europe urbaine», et une coordination sera instaurée avec les actions directes du JRC.

Grandes lignes des activités

Des sociétés ouvertes à tous

L'objectif est de mieux comprendre les changements de société en Europe et leurs répercussions sur la cohésion sociale, et d'analyser et de développer l'inclusion sociale, économique et politique ainsi que la dynamique interculturelle positive en Europe et avec les partenaires internationaux, au moyen d'activités scientifiques de pointe et de l'interdisciplinarité, d'avancées technologiques et d'innovations sur le plan de l'organisation. Les principaux défis à relever en ce qui concerne les modèles européens de cohésion sociale et de bien-être sont, notamment, l'immigration, l'intégration, l'évolution démographique, le vieillissement de la population et le handicap, l'éducation et l'apprentissage tout au long de la vie ainsi que la réduction de la pauvreté et de l'exclusion sociale, en tenant compte des différentes caractéristiques régionales et culturelles.La recherche en sciences sociales et humaines joue un rôle prépondérant dans ce contexte car elle étudie les changements spatiotemporels et permet l'analyse des avenirs envisagés. L'Europe a une longue histoire commune faite de coopération et de conflit. Ses interactions culturelles dynamiques servent d'inspiration et offrent des perspectives. La recherche est nécessaire pour comprendre le sentiment d'identité et d'appartenance selon les communautés, les régions et les nations. Elle aidera les décideurs politiques à élaborer des politiques qui permettent de favoriser l'emploi, de lutter contre la pauvreté et de prévenir le développement de diverses formes de divisions, de conflits et d'exclusions politiques et sociales, de discriminations et d'inégalités, telles que les inégalités entre les sexes et entre les générations, la discrimination due au handicap ou à l'origine ethnique, la fracture numérique ou les écarts en matière d'innovation, au sein des sociétés européennes et dans d'autres régions du monde. Elle doit en particulier alimenter le processus de mise en œuvre et d'adaptation de la stratégie Europe 2020 et l'action extérieure de l'Union au sens large.Les activités visent à comprendre et à promouvoir ou à mettre en œuvre:(a) les mécanismes permettant de favoriser une croissance intelligente, durable et inclusive; (b) les organisations, les pratiques, les services et les politiques dignes de confiance qui sont nécessaires pour construire des sociétés résilientes, inclusives, participatives, ouvertes et créatives en Europe, en tenant compte en particulier de l'immigration, de l'intégration et de l'évolution démographique; (c) le rôle de l'Europe en tant qu'acteur sur la scène mondiale, notamment en ce qui concerne les droits de l'homme et la justice mondiale; (d) la promotion d'environnements durables et ouverts à tous par un aménagement et une conception du territoire et de l'espace urbain innovants.

Des sociétés novatrices

L'objectif est de favoriser le développement de sociétés et de politiques novatrices en Europe, grâce à l'implication des citoyens, des organisations de la société civile, des entreprises et des utilisateurs dans les activités de recherche et d'innovation et à la promotion de politiques coordonnées en matière de recherche et d'innovation dans le contexte de la mondialisation et compte tenu de la nécessité de promouvoir les normes éthiques les plus élevées. Un soutien particulier sera accordé à la mise en place de l'Espace européen de la recherche et à l'amélioration des conditions d'encadrement de l'innovation.Les connaissances culturelles et sociétales constituent une source majeure de créativité et d'innovation, y compris l'innovation des entreprises et du secteur public et l'innovation sociale. Dans de nombreux cas, les innovations sociales et induites par les utilisateurs précèdent également l'élaboration de technologies, de services et de processus économiques innovants. Les industries créatives sont une ressource majeure pour relever les défis de société et pour stimuler la compétitivité. Les interdépendances entre l'innovation sociale et l'innovation technologique étant complexes et rarement linéaires, il est nécessaire de poursuivre les recherches, y compris les recherches transsectorielles et pluridisciplinaires, sur la mise au point de tous les types d'innovation et d'activités financés pour encourager leur développement effectif à l'avenir.Les activités visent à:(a) renforcer la base factuelle et les mesures de soutien à l'initiative phare «L'Union de l'innovation» et à l'Espace européen de la recherche; (b) explorer de nouvelles formes d'innovation, en mettant particulièrement l'accent sur l'innovation sociale et la créativité, et à comprendre comment toutes les formes d'innovation sont élaborées et comment elles se soldent par un succès ou par un échec; (c) utiliser le potentiel d'innovation, de créativité et de production de toutes les générations; (d) promouvoir une coopération cohérente et efficace avec les pays tiers.

Des sociétés de réflexion - patrimoine culturel et identité européenne

L'objectif est de contribuer à la compréhension de la base intellectuelle européenne - son histoire et les nombreuses influences européennes et non européennes - en tant qu'inspiration pour notre vie d'aujourd'hui. L'Europe se caractérise par la diversité des peuples (y compris les minorités et les populations autochtones), des traditions et des identités régionales et nationales ainsi que par des niveaux différents de développement économique et sociétal. Les migrations, la mobilité, les médias, l'industrie et les transports contribuent à la diversité des avis et des styles de vie. Cette diversité et les perspectives qu'elle offre devraient être reconnues et prises en compte.Les collections européennes dans les bibliothèques, y compris les bibliothèques numériques, les archives, les musées, les galeries et autres établissements publics disposent d'une grande quantité de documents et d'objets riches et inexploités pouvant être étudiés. Ces ressources d'archives, ainsi que le patrimoine immatériel, représentent l'histoire de chaque État membre, mais également le patrimoine collectif d'une Union qui est apparue au fil du temps. Ce matériel devrait être rendu accessible, également à l'aide des nouvelles technologies, aux chercheurs et aux citoyens pour permettre de regarder l'avenir au travers d'une archive du passé. L'accessibilité au patrimoine culturel sous ces formes et sa préservation sont nécessaires pour assurer la vitalité de relations dynamiques à l'intérieur des cultures européennes et entre celles-ci et contribuent à une croissance économique durable.Les activités visent à:(a) étudier le patrimoine, la mémoire, l'identité, l'intégration ainsi que l'interaction et la traduction culturelles au niveau européen, y compris leurs représentations dans les collections culturelles et scientifiques, les archives et les musées, afin de mieux éclairer et comprendre le présent grâce à des interprétations plus riches du passé; (b) mener des recherches sur l'histoire, la littérature, l'art, la philosophie et les religions des régions et pays européens et sur la manière dont ces éléments expliquent la diversité contemporaine européenne; (c) étudier le rôle de l'Europe dans le monde, les influences et les liens mutuels entre les régions du monde et un avis extérieur sur les cultures européennes. ";"";"H2020";"H2020-EU.3.";"";"";"2014-09-22 20:49:28";"664435" +"H2020-EU.3.6.";"es";"H2020-EU.3.6.";"";"";"RETOS DE LA SOCIEDAD - Europa en un mundo cambiante - sociedades inclusivas, innovadoras y reflexivas ";"Inclusive, innovative and reflective societies";"

RETOS DE LA SOCIEDAD - Europa en un mundo cambiante - sociedades inclusivas, innovadoras y reflexivas

Objetivo específico

El objetivo específico es fomentar una mejor comprensión de Europa, ofrecer soluciones y apoyar unas sociedades europeas inclusivas, innovadoras y reflexivas en un contexto de transformaciones sin precedentes y una creciente interdependencia mundial.Europa se enfrenta a enormes retos socioeconómicos que afectan de manera significativa a su futuro común. Entre ellos destacan: la creciente interdependencia económica y cultural, el envejecimiento y el cambio demográfico, la exclusión social y la pobreza, la integración y la desintegración, las desigualdades y los flujos migratorios, el aumento de la brecha digital, el fomento de una cultura de la innovación y la creatividad en la sociedad y las empresas, una sensación decreciente de confianza en las instituciones democráticas y entre los ciudadanos dentro y fuera de las fronteras. Se trata de retos de gran envergadura que exigen un planteamiento europeo común, basado en el conocimiento científico compartido que pueden ofrecer, entre otras cosas, las ciencias sociales y las humanidades.Persisten las acusadas desigualdades en la Unión, tanto entre países como dentro de ellos. En 2011, las puntuaciones de los Estados miembros de la Unión en el índice de desarrollo humano, cuantificador agregado del progreso en sanidad, educación y renta, se situaban entre 0,771 y 0,910, lo que refleja considerables divergencias entre países. También persisten desigualdades significativas entre los sexos: por ejemplo, la diferencia de retribución entre mujeres y hombres en la UE sigue siendo de una media del 17,8 % en favor de los hombres. Uno de cada seis ciudadanos de la Unión (alrededor de 80 millones de personas) corre actualmente riesgo de pobreza. En las dos últimas décadas, la pobreza ha aumentado entre los adultos jóvenes y las familias con niños. La tasa de desempleo juvenil es superior al 20 %. Son 150 millones (aproximadamente el 25 %) los europeos que nunca han utilizado Internet y acaso nunca disfruten de una alfabetización digital suficiente. Ha aumentado también la apatía política y la polarización en las elecciones, lo que indica que la confianza de los ciudadanos en los sistemas políticos actuales se tambalea.Estas cifras sugieren que algunos grupos y comunidades sociales quedan reiteradamente al margen del desarrollo social y económico y/o la política democrática. Estas desigualdades no solo sofocan el desarrollo de las sociedades, sino que perjudican a las economías de la Unión y reducen las capacidades de investigación e innovación dentro de cada país y entre países.Un desafío fundamental a la hora de abordar estas desigualdades será el de promover entornos en los que las identidades étnicas, nacionales y europea puedan coexistir y ser mutuamente enriquecedoras.Además, se espera que el número de europeos con edades superiores a los 65 años aumente de manera importante, en un 42 %, pasando de 87 millones en 2010 a 124 millones en 2030. Esto supone un reto de gran magnitud para la economía, la sociedad y la sostenibilidad de la Hacienda pública.Las tasas de crecimiento económico y productividad de Europa llevan cuatro décadas disminuyendo en términos relativos. Además, están disminuyendo con rapidez su cuota en la producción mundial de conocimientos y el rendimiento de su innovación en comparación con economías emergentes clave como Brasil y China. Europa cuenta con una sólida base de investigación, pero tiene que convertirla en un potente activo que permita generar bienes y servicios innovadores.Es notorio que Europa necesita invertir más en ciencia e innovación y que también habrá que coordinar estas inversiones mejor que en el pasado. Desde el inicio de la crisis financiera, muchas desigualdades económicas y sociales existentes en Europa se han agravado aún más y el retorno de las tasas de crecimiento económico anteriores a la crisis parece muy lejano para la mayoría de los países de la Unión. La crisis actual también sugiere que es un reto hallar soluciones a situaciones de crisis que son el reflejo de la heterogeneidad de los Estados miembros y sus intereses.Estos retos han de abordarse conjuntamente y de forma innovadora y multidisciplinar, puesto que interaccionan de maneras complejas y con frecuencia imprevistas. La innovación puede debilitar la inclusión, como puede observarse, por ejemplo, en los fenómenos de la brecha digital o la segmentación del mercado laboral. A veces resulta difícil conciliar en las políticas la innovación social y la confianza social, por ejemplo en las zonas socialmente deprimidas de las grandes ciudades de Europa. Además, la conjunción de la innovación y las nuevas demandas de los ciudadanos lleva también a los responsables políticos y los interlocutores económicos y sociales a encontrar nuevas respuestas que ignoran los límites establecidos entre sectores, actividades, bienes o servicios. Fenómenos como el crecimiento de Internet, de los sistemas financieros, de la economía afectada por el envejecimiento y de la sociedad ecológica demuestran patentemente que es necesario meditar sobre estas cuestiones y responder a ellas en sus dimensiones de inclusión e innovación al mismo tiempo.Así pues, la complejidad intrínseca de estos retos y la evolución de las demandas obliga a desarrollar una investigación innovadora y nuevas tecnologías, procesos y métodos inteligentes, mecanismos de innovación social, acciones y políticas coordinadas que permitan anticiparse a las evoluciones importantes para Europa o influir en ellas. Exige una renovada comprensión de los determinantes de la innovación. Además, exige comprender las tendencias subyacentes a estos retos y sus repercusiones y redescubrir o reinventar formas satisfactorias de solidaridad, conducta, coordinación y creatividad que hagan de Europa un modelo distintivo en términos de sociedades inclusivas, innovadoras y reflexivas en comparación con otras regiones del mundo.También requiere un enfoque más estratégico de la cooperación con terceros países que se base en una comprensión más profunda del pasado de la Unión y de su papel actual y futuro como actor en la escena mundial.

Justificación y valor añadido de la Unión

Estos desafíos superan las fronteras nacionales y, por tanto, exigen unos análisis comparativos más complejos para desarrollar una base a partir de la que se puedan entender mejor las políticas nacionales y europeas. Estos análisis comparativos deberían abordar la movilidad (de personas, mercancías, servicios y capitales, pero también de competencias, conocimientos e ideas) y formas de cooperación institucional, interacción intercultural y cooperación internacional. Si no se comprenden y prevén mejor, las fuerzas de la globalización también empujan a los países europeos a competir entre sí en lugar de cooperar, lo cual acentuará las diferencias en Europa, en lugar de las coincidencias y el equilibrio adecuado entre cooperación y competencia. Afrontar tales cuestiones críticas, incluidos los retos socioeconómicos, a nivel exclusivamente nacional conlleva riesgos de uso ineficiente de los recursos, externalización de los problemas a otros países europeos y no europeos y acentuación de las tensiones políticas, económicas y sociales que pueden afectar directamente a los objetivos de los Tratados en relación con sus valores, en particular el título I del Tratado de la Unión Europea.Para entender, analizar y construir sociedades inclusivas, innovadoras y reflexivas, Europa necesita una respuesta que despliegue el potencial de las ideas compartidas para que el futuro de Europa cree nuevos conocimientos, tecnologías y capacidades. El concepto de sociedades inclusivas reconoce las diversidades culturales, regionales y socioeconómicas como una de las ventajas de Europa. Es necesario convertir la diversidad europea en una fuente de innovación y desarrollo. Tal empeño ayudará a Europa a hacer frente a sus retos no solo internamente, sino también en tanto que actor en la escena internacional. Esto, a su vez, ayudará a los Estados miembros a beneficiarse de las experiencias de otros países y les permitirá definir mejor sus propias acciones específicas correspondientes a sus respectivos contextos.Por consiguiente, una tarea fundamental en relación con este reto será fomentar nuevos modos de cooperación entre países, en la Unión y en el mundo, así como a través de las comunidades de investigación e innovación pertinentes. Se intentará sistemáticamente apoyar los procesos de innovación social y tecnológica, estimular una administración pública inteligente y participativa, informar y promover al tiempo la elaboración de políticas basadas en los hechos demostrados, a fin de aumentar la pertinencia de todas estas actividades para los responsables políticos, los interlocutores sociales y agentes económicos y los ciudadanos. La investigación y la innovación serán una condición previa para la competitividad de las empresas y servicios europeos con una atención particular a la sostenibilidad, a impulsar la educación, aumentar el empleo y reducir la pobreza.La financiación de la Unión en virtud de este reto apoyará, por tanto, la elaboración, aplicación y adaptación de las políticas clave de la Unión, en particular las prioridades de la estrategia Europa 2020 para un crecimiento inteligente, sostenible e integrador. Estará en relación, cuando y según proceda, con las Iniciativas de Programación Conjunta, en especial ""Patrimonio cultural"", ""Una vida más larga y mejor"" y ""La Europa urbana"", y se coordinará con las acciones directas del Centro Común de Investigación.

Líneas generales de las actividades

Sociedades inclusivas

El objetivo es conseguir una mayor comprensión de los cambios de la sociedad europea y sus consecuencias en términos de cohesión social, y analizar y desarrollar la inclusión social, económica y política y una dinámica intercultural positiva en Europa y con los socios internacionales, a través de la ciencia de vanguardia y la interdisciplinariedad, los avances tecnológicos y las innovaciones organizativas. Las principales cuestiones que se han abordar en lo que respecta a los modelos europeos de cohesión y bienestar social son, entre otras cosas, la migración, la integración, el cambio demográfico, el envejecimiento de la población y la discapacidad, la educación y el aprendizaje permanente, así como la reducción de la pobreza y de la exclusión social, teniendo en cuenta las diferentes características regionales y culturales.La investigación en el ámbito de las Ciencias Sociales y las Humanidades desempeña aquí un papel de primer orden ya que explora los cambios que se producen en el espacio y con el transcurso del tiempo y posibilita la exploración de futuros imaginados. Europa tiene una larga historia común tanto de cooperación como de conflicto. Sus dinámicas interacciones culturales son fuente de inspiración y oportunidades. Son necesarios trabajos de investigación para comprender el sentimiento de identidad y de pertenencia en las distintas comunidades, regiones y naciones. La investigación ayudará a los responsables a diseñar políticas que promuevan el empleo, combatan la pobreza y eviten el desarrollo de diversas formas de división, conflicto y exclusión social y política, discriminación y desigualdad en las sociedades europeas, como las desigualdades de género e intergeneracionales, la discriminación por discapacidad u origen étnico, o las brechas digital y de la innovación, así como con otras regiones del mundo. En particular, efectuará aportaciones a la aplicación y adaptación de la estrategia Europa 2020 y a la acción exterior de la Unión en general.Las actividades se centrarán en la comprensión, la promoción o la aplicación de:(a) los mecanismos para promover un crecimiento inteligente, sostenible e integrador; (b) las organizaciones, prácticas, servicios y políticas fiables necesarias para construir sociedades resistentes, inclusivas, participativas, abiertas y creativas en Europa, en especial teniendo en cuenta la migración, la integración y el cambio demográfico; (c) el papel de Europa como actor mundial, en particular en cuanto a los derechos humanos y la justicia mundial; (d) la promoción de entornos sostenibles e inclusivos a través de una ordenación y concepción territorial y urbana innovadoras.

Sociedades innovadoras

El objetivo es estimular el desarrollo de sociedades y políticas innovadoras en Europa a través del compromiso de los ciudadanos, las organizaciones de la sociedad civil, las empresas y los usuarios con la investigación y la innovación y el fomento de unas políticas de investigación e innovación coordinadas en el contexto de la mundialización y de la necesidad de promover las normas éticas más elevadas. Se prestará especial apoyo al desarrollo del EEI y a la elaboración de unas condiciones marco para la innovación.El conocimiento cultural y social es una fuente importante de creatividad e innovación, incluida la innovación empresarial, del sector público y social. En muchos casos, las innovaciones sociales y orientadas al usuario preceden también al desarrollo de tecnologías, servicios y procesos económicos innovadores. Las industrias creativas son un recurso fundamental para afrontar los retos de la sociedad y para la competitividad. Dado que las interrelaciones entre la innovación social y la tecnológica son complejas y rara vez lineales, es necesario investigar más a fondo, en especial mediante la investigación intersectorial y multidisciplinar, el desarrollo de todos los tipos de innovación, y financiar actividades para favorecer su desarrollo efectivo en el futuro.Las actividades perseguirán los siguientes objetivos específicos:(a) reforzar la información basada en pruebas y el apoyo a la iniciativa emblemática ""Unión por la innovación"" y al EEI; (b) explorar nuevas formas de innovación, con insistencia particular en la innovación y la creatividad sociales, y entender el modo en que todas las formas de innovación se desarrollan, consiguen sus fines o fracasan; (c) aprovechar el potencial innovador, creativo y productivo de todas las generaciones; (d) promover una cooperación coherente y eficaz con terceros países.

Sociedades reflexivas - patrimonio cultural e identidad europea

El objetivo consiste en contribuir a la comprensión de la base intelectual de Europa: su historia y las diversas influencias europeas y extraeuropeas, como inspiración para nuestra vida actual. Europa se caracteriza por una variedad de pueblos (incluidos minorías y pueblos indígenas), tradiciones e identidades regionales y nacionales diferentes, así como por niveles diferentes de desarrollo económico y de la sociedad. Las migraciones y la movilidad, los medios de comunicación, la industria y el transporte contribuyen a la diversidad de opiniones y de estilos de vida. Debería reconocerse y tenerse en cuenta esta diversidad y las oportunidades que ofrece.Las colecciones europeas de las bibliotecas (incluidas las digitales), archivos, museos, galerías y otras instituciones públicas contienen un tesoro de documentación y objetos de estudio sin explotar. Estos recursos archivísticos, junto con el patrimonio intangible, representan la historia de cada Estado miembro pero al mismo tiempo la herencia colectiva de una Unión que ha ido creándose a lo largo del tiempo. Estos materiales deberían hacerse accesibles, incluso por medio de nuevas tecnologías, a los investigadores y a los ciudadanos, para permitirles mirar al futuro a través del archivo del pasado. La accesibilidad y la conservación de estas formas del patrimonio cultural son necesarias para mantener la vitalidad de los compromisos de vida en el seno de las culturas europeas y entre ellas hoy en día, y contribuye al crecimiento económico sostenible.Las actividades perseguirán los siguientes objetivos específicos:(a) el estudio del patrimonio, la memoria, la identidad, la integración y la interacción y traducción culturales de Europa, incluidas sus representaciones en las colecciones, archivos y museos culturales y científicos, para informar mejor al presente y entenderlo mejor, mediante unas interpretaciones más ricas del pasado, (b) la investigación de la historia, la literatura, el arte, la filosofía y las religiones de los países y regiones de Europa, y de los modos en que han conformado la diversidad europea contemporánea, (c) la investigación del papel de Europa en el mundo, de la influencia mutua y de los vínculos entre las regiones del mundo, y de la visión de las culturas europeas desde el exterior. ";"";"H2020";"H2020-EU.3.";"";"";"2014-09-22 20:49:28";"664435" +"H2020-EU.3.5.2.2.";"en";"H2020-EU.3.5.2.2.";"";"";"Developing integrated approaches to address water-related challenges and the transition to sustainable management and use of water resources and services";"";"";"";"H2020";"H2020-EU.3.5.2.";"";"";"2014-09-22 20:48:27";"664403" +"H2020-EU.3.2.1.3.";"en";"H2020-EU.3.2.1.3.";"";"";"Empowerment of rural areas, support to policies and rural innovation";"";"";"";"H2020";"H2020-EU.3.2.1.";"";"";"2014-09-22 20:44:48";"664289" +"H2020-EU.2.3.2.2.";"en";"H2020-EU.2.3.2.2.";"";"";"Enhancing the innovation capacity of SMEs";"Enhancing the innovation capacity of SMEs";"

Enhancing the innovation capacity of SMEs

Transnational activities assisting the implementation of and complementing the SME specific measures across Horizon 2020 shall be supported, notably to enhance the innovation capacity of SMEs. These activities shall be coordinated with similar national measures when appropriate. Close cooperation with the National Contact Point (NCP) Network and the Enterprise Europe Network (EEN) is envisaged.";"";"H2020";"H2020-EU.2.3.2.";"";"";"2014-09-22 20:43:02";"664231" +"H2020-EU.2.3.2.2.";"es";"H2020-EU.2.3.2.2.";"";"";"Mejorar la capacidad de innovación de las PYME";"Enhancing the innovation capacity of SMEs";"

Mejorar la capacidad de innovación de las PYME

Se prestará apoyo a las actividades transnacionales que faciliten la aplicación de las medidas específicas en favor de las PYME de Horizonte 2020 y las complementen, en particular para aumentar la capacidad de innovación de las PYME. Estas actividades se coordinarán, cuando proceda, con medidas nacionales similares. Se prevé una estrecha cooperación con la Red de Puntos Nacionales de Contacto (PCN) y la Red Europea para las Empresas (EEN).";"";"H2020";"H2020-EU.2.3.2.";"";"";"2014-09-22 20:43:02";"664231" +"H2020-EU.2.3.2.2.";"fr";"H2020-EU.2.3.2.2.";"";"";"Renforcement de la capacité d'innovation des PME";"Enhancing the innovation capacity of SMEs";"

Renforcement de la capacité d'innovation des PME

Des activités transnationales à l'appui de la mise en œuvre et en complément des mesures spécifiquement consacrées aux PME seront soutenues à tous les niveaux d'Horizon 2020, notamment en vue de renforcer la capacité d'innovation des PME. Ces activités seront coordonnées, en tant que de besoin, avec des mesures nationales équivalentes. Une coopération étroite est envisagée avec le réseau des points de contact nationaux et le réseau Entreprise Europe.";"";"H2020";"H2020-EU.2.3.2.";"";"";"2014-09-22 20:43:02";"664231" +"H2020-EU.2.3.2.2.";"pl";"H2020-EU.2.3.2.2.";"";"";"Zwiększenie zdolności MŚP pod względem innowacji";"Enhancing the innovation capacity of SMEs";"

Zwiększenie zdolności MŚP pod względem innowacji

Wspierane są transnarodowe działania wspomagające wdrażanie i uzupełnianie środków przeznaczonych dla MŚP w całym zakresie programu „Horyzont 2020”, zwłaszcza w celu zwiększania zdolności MŚP pod względem innowacji. Te działania są koordynowane – w odpowiednich przypadkach – z podobnymi środkami krajowymi. Zakłada się ścisłą współpracę z siecią krajowych punktów kontaktowych oraz Europejską Siecią Przedsiębiorczości (EEN).";"";"H2020";"H2020-EU.2.3.2.";"";"";"2014-09-22 20:43:02";"664231" +"H2020-EU.2.3.2.2.";"it";"H2020-EU.2.3.2.2.";"";"";"Rafforzare la capacità di innovazione delle PMI";"Enhancing the innovation capacity of SMEs";"

Rafforzare la capacità di innovazione delle PMI

Si sostengono le attività transnazionali che forniscono assistenza all'attuazione e all'integrazione delle misure specifiche destinate alle PMI in Orizzonte 2020, in particolare per migliorare la capacità di innovazione delle PMI. Tali attività sono coordinate, se del caso, con misure nazionali analoghe. È prevista la stretta collaborazione con la rete dei punti di contatto nazionali e la rete Enterprise Europe.";"";"H2020";"H2020-EU.2.3.2.";"";"";"2014-09-22 20:43:02";"664231" +"H2020-EU.2.3.2.2.";"de";"H2020-EU.2.3.2.2.";"";"";"Stärkung der Innovationskapazität von KMU";"Enhancing the innovation capacity of SMEs";"

Stärkung der Innovationskapazität von KMU

Transnationale Tätigkeiten zur Umsetzung und Ergänzung KMU-spezifischer Maßnahmen werden in allen Bereichen von Horizont 2020 unterstützt, insbesondere zur Erhöhung der Innovationskapazität von KMU. Diese Tätigkeiten werden gegebenenfalls mit ähnlichen nationalen Maßnahmen abgestimmt. Es ist eine enge Zusammenarbeit mit dem Netz der nationalen Kontaktstellen (NCP) und dem Netz ""Enterprise Europe Network"" (EEN) vorgesehen.";"";"H2020";"H2020-EU.2.3.2.";"";"";"2014-09-22 20:43:02";"664231" +"H2020-EU.3.2.2.";"fr";"H2020-EU.3.2.2.";"";"";"Un secteur agro-alimentaire durable et compétitif pour une alimentation sûre et saine";"Sustainable and competitive agri-food sector for a safe and healthy diet";"

Un secteur agro-alimentaire durable et compétitif pour une alimentation sûre et saine

L'objectif est de répondre aux demandes des citoyens, qui recherchent des aliments sûrs, sains et à prix abordable, ainsi qu'aux besoins environnementaux, de renforcer le caractère durable des activités de transformation, de distribution et de consommation des produits destinés à l'alimentation humaine et animale et d'accroître la compétitivité du secteur de l'alimentation tout en tenant compte des aspects culturels liés à la qualité des aliments. Les activités se concentrent sur la production d'aliments sûrs et sains pour tous, sur la possibilité pour les consommateurs de faire des choix éclairés, sur des solutions et des innovations diététiques permettant d'améliorer la santé, ainsi que sur le développement de méthodes de transformation des aliments compétitives, nécessitant moins de ressources et d'additifs et générant moins de sous-produits, de déchets et de gaz à effet de serre.";"";"H2020";"H2020-EU.3.2.";"";"";"2014-09-22 20:44:56";"664293" +"H2020-EU.3.2.2.";"pl";"H2020-EU.3.2.2.";"";"";"Zrównoważony i konkurencyjny sektor rolno-spożywczy sprzyjający bezpiecznemu i zdrowemu odżywianiu się";"Sustainable and competitive agri-food sector for a safe and healthy diet";"

Zrównoważony i konkurencyjny sektor rolno-spożywczy sprzyjający bezpiecznemu i zdrowemu odżywianiu się

Celem jest zaspokojenie wymogów obywateli i środowiska dotyczących bezpiecznej, zdrowej i przystępnej cenowo żywności oraz bardziej zrównoważone przetwarzanie, dystrybucja i konsumpcja żywności i paszy, a także większa konkurencyjność sektora spożywczego, przy jednoczesnym uwzględnieniu elementu kulturowego jakości żywności. Działania mają skupiać się na zapewnieniu zdrowej i bezpiecznej żywności dla wszystkich, umożliwieniu konsumentom podejmowania świadomych wyborów, na sposobach odżywiania się i innowacjach na rzecz poprawy stanu zdrowia oraz na konkurencyjnych metodach przetwarzania żywności wykorzystujących mniej zasobów i dodatków i generujących mniej produktów ubocznych, odpadów i gazów cieplarnianych.";"";"H2020";"H2020-EU.3.2.";"";"";"2014-09-22 20:44:56";"664293" +"H2020-EU.3.2.2.";"en";"H2020-EU.3.2.2.";"";"";"Sustainable and competitive agri-food sector for a safe and healthy diet";"Sustainable and competitive agri-food sector for a safe and healthy diet";"

Sustainable and competitive agri-food sector for a safe and healthy diet

The aim is to meet the requirements of citizens and the environment for safe, healthy and affordable food, and to make food and feed processing, distribution and consumption more sustainable and the food sector more competitive while also considering the cultural component of food quality. The activities shall focus on healthy and safe food for all, informed consumer choices, dietary solutions and innovations for improved health, and competitive food processing methods that use less resources and additives and produce less by-products, waste and greenhouse gases.";"";"H2020";"H2020-EU.3.2.";"";"";"2014-09-22 20:44:56";"664293" +"H2020-EU.3.2.2.";"de";"H2020-EU.3.2.2.";"";"";"Nachhaltiger und wettbewerbsfähiger Agrar- und Lebensmittelsektor für sichere und gesunde Ernährung ";"Sustainable and competitive agri-food sector for a safe and healthy diet";"

Nachhaltiger und wettbewerbsfähiger Agrar- und Lebensmittelsektor für sichere und gesunde Ernährung

Ziel ist es, den Anforderungen der Bürger und der Umwelt an sichere, gesunde und erschwingliche Lebensmittel gerecht zu werden, die Nachhaltigkeit von Lebens- und Futtermittelverarbeitung, -vertrieb und -verbrauch zu erhöhen und die Wettbewerbsfähigkeit des Lebensmittelsektors – auch unter Berücksichtigung der kulturellen Komponente der Lebensmittelqualität – zu stärken. Schwerpunkt der Tätigkeiten sind gesunde und sichere Lebensmittel für alle, Aufklärung der Verbraucher, ernährungsbezogene Lösungen und Innovationen im Dienste einer besseren Gesundheit sowie wettbewerbsfähige Verfahren für die Lebensmittelverarbeitung, die weniger Ressourcen und Zusatzstoffe verbrauchen und bei denen weniger Nebenprodukte, Abfälle und Treibhausgase anfallen.";"";"H2020";"H2020-EU.3.2.";"";"";"2014-09-22 20:44:56";"664293" +"H2020-EU.3.2.2.";"it";"H2020-EU.3.2.2.";"";"";"Un settore agroalimentare sostenibile e competitivo per un'alimentazione sicura e sana";"Sustainable and competitive agri-food sector for a safe and healthy diet";"

Un settore agroalimentare sostenibile e competitivo per un'alimentazione sicura e sana

L'obiettivo è soddisfare le esigenze dei cittadini e dell'ambiente in merito a prodotti alimentari sicuri, sani e a prezzi accessibili, e rendere la trasformazione, la distribuzione e il consumo dei prodotti alimentari e dei mangimi più sostenibili e più competitivo il settore alimentare, tenendo conto nel contempo della componente culturale della qualità alimentare. Le attività si concentrano su prodotti alimentari sani e sicuri per tutti, sulle scelte informate dei consumatori, su soluzioni e innovazioni alimentari per migliorare la salute e su metodi di trasformazione alimentare concorrenziali che utilizzano meno risorse e additivi e producono meno rifiuti, sottoprodotti e gas a effetto serra.";"";"H2020";"H2020-EU.3.2.";"";"";"2014-09-22 20:44:56";"664293" +"H2020-EU.3.2.2.";"es";"H2020-EU.3.2.2.";"";"";"Sector agroalimentario competitivo y sostenible para una dieta sana y segura";"Sustainable and competitive agri-food sector for a safe and healthy diet";"

Sector agroalimentario competitivo y sostenible para una dieta sana y segura

El objetivo es responder a la necesidad de que los ciudadanos dispongan de alimentos seguros, sanos y asequibles, y de respeto del medio ambiente, de que la transformación, distribución y consumo de alimentos y piensos sea más sostenible y de que el sector alimentario sea más competitivo, teniendo en cuenta asimismo el componente cultural de la calidad de los alimentos. Las actividades se centrarán en los alimentos sanos y seguros para todos, la información al consumidor, las soluciones dietéticas y las innovaciones para mejorar la salud y los métodos competitivos de transformación de alimentos que utilizan menos recursos y aditivos y producen menos subproductos, residuos y gases de efecto invernadero.";"";"H2020";"H2020-EU.3.2.";"";"";"2014-09-22 20:44:56";"664293" +"H2020-EU.3.2.2.2.";"en";"H2020-EU.3.2.2.2.";"";"";"Healthy and safe foods and diets for all";"";"";"";"H2020";"H2020-EU.3.2.2.";"";"";"2014-09-22 20:45:04";"664297" +"H2020_H2020-EU.3.4.5.10.";"en";"H2020-EU.3.4.5.10.";"";"";"Thematic Topics";"";"";"";"H2020";"H2020-EU.3.4.5";"";"";"2019-03-29 11:54:26";"704346" +"H2020-EU.3.5.1.2.";"en";"H2020-EU.3.5.1.2.";"";"";"Assess impacts, vulnerabilities and develop innovative cost-effective adaptation and risk prevention and management measures";"";"";"";"H2020";"H2020-EU.3.5.1.";"";"";"2014-09-22 20:48:12";"664395" +"H2020-EU.4.d.";"de";"H2020-EU.4.d.";"";"";"Eine Fazilität für Politikunterstützung";"Policy Support Facility (PSF)";"

Eine Fazilität für Politikunterstützung

soll die Gestaltung, Durchführung und Bewertung nationaler/regionaler forschungs- und innovationspolitischer Maßnahmen verbessern. ";"";"H2020";"H2020-EU.4.";"";"";"2014-09-22 20:51:11";"664489" +"H2020-EU.4.d.";"it";"H2020-EU.4.d.";"";"";"Un meccanismo di sostegno delle politiche";"Policy Support Facility (PSF)";"

Un meccanismo di sostegno delle politiche

inteso a migliorare la concezione, l'attuazione e la valutazione delle politiche nazionali/regionali di ricerca e innovazione.";"";"H2020";"H2020-EU.4.";"";"";"2014-09-22 20:51:11";"664489" +"H2020-EU.4.d.";"pl";"H2020-EU.4.d.";"";"";"Wprowadzeniu narzędzia wspierania polityki";"Policy Support Facility (PSF)";"

Wprowadzeniu narzędzia wspierania polityki

w celu podniesienia jakości projektowania, realizacji i oceny krajowych/regionalnych polityk w zakresie badań naukowych i innowacji. ";"";"H2020";"H2020-EU.4.";"";"";"2014-09-22 20:51:11";"664489" +"H2020-EU.4.d.";"fr";"H2020-EU.4.d.";"";"";"Mettre en place un mécanisme de soutien aux politiques";"Policy Support Facility (PSF)";"

Mettre en place un mécanisme de soutien aux politiques

afin d'améliorer la définition, la mise en œuvre et l'évaluation des politiques nationales/régionales de recherche et d'innovation.";"";"H2020";"H2020-EU.4.";"";"";"2014-09-22 20:51:11";"664489" +"H2020-EU.4.d.";"es";"H2020-EU.4.d.";"";"";"Creación de un mecanismo de apoyo a las políticas";"Policy Support Facility (PSF)";"

Creación de un mecanismo de apoyo a las políticas

para mejorar la concepción, la ejecución y la evaluación de las políticas nacionales y regionales de investigación e innovación.";"";"H2020";"H2020-EU.4.";"";"";"2014-09-22 20:51:11";"664489" +"H2020-EU.3.5.7.1.";"en";"H2020-EU.3.5.7.1.";"";"";"Reduce the use of the EU defined ""Critical raw materials"", for instance through low platinum or platinum free resources and through recycling or reducing or avoiding the use of rare earth elements";"";"";"";"H2020";"H2020-EU.3.5.7.";"";"";"2015-01-23 18:42:15";"665347" +"H2020-EU.3.1.5.2.";"en";"H2020-EU.3.1.5.2.";"";"";"Improving scientific tools and methods to support policy making and regulatory needs";"";"";"";"H2020";"H2020-EU.3.1.5.";"";"";"2014-09-22 20:44:15";"664271" +"H2020-EU.3.5.1.1.";"en";"H2020-EU.3.5.1.1.";"";"";"Improve the understanding of climate change and the provision of reliable climate projections";"";"";"";"H2020";"H2020-EU.3.5.1.";"";"";"2014-09-22 20:48:08";"664393" +"H2020-EU.2.1.4.1.";"en";"H2020-EU.2.1.4.1.";"";"";"Boosting cutting-edge biotechnologies as a future innovation driver";"Cutting-edge biotechnologies as future innovation driver";"

Boosting cutting-edge biotechnologies as a future innovation driver

Development of emerging technology areas such as synthetic biology, bioinformatics and systems biology, which hold great promise for innovative products and technologies and completely novel applications";"";"H2020";"H2020-EU.2.1.4.";"";"";"2014-09-22 20:41:48";"664191" +"H2020-EU.3.1.7.2.";"en";"H2020-EU.3.1.7.2.";"";"";"Osteoarthritis";"";"";"";"H2020";"H2020-EU.3.1.7.";"";"";"2014-09-22 21:40:35";"665353" +"H2020-Euratom-1.5.";"en";"H2020-Euratom-1.5.";"";"";"Move toward demonstration of feasibility of fusion as a power source by exploiting existing and future fusion facilities";"";"";"";"H2020";"H2020-Euratom-1.";"";"";"2014-09-22 20:52:22";"664527" +"H2020-EU.3.6.1.3.";"en";"H2020-EU.3.6.1.3.";"";"";"Europe's role as a global actor, notably regarding human rights and global justice";"";"";"";"H2020";"H2020-EU.3.6.1.";"";"";"2015-01-23 18:42:15";"664443" +"H2020-Euratom-1.2.";"en";"H2020-Euratom-1.2.";"";"";"Contribute to the development of solutions for the management of ultimate nuclear waste";"";"";"";"H2020";"H2020-Euratom-1.";"";"";"2014-09-22 20:52:11";"664521" +"H2020-EU.3.1.7.8.";"en";"H2020-EU.3.1.7.8.";"";"";"Immune-mediated diseases";"";"";"";"H2020";"H2020-EU.3.1.7.";"";"";"2014-09-22 21:40:56";"665365" +"H2020-EU.3.3.3.3.";"en";"H2020-EU.3.3.3.3.";"";"";"New alternative fuels";"";"";"";"H2020";"H2020-EU.3.3.3.";"";"";"2014-09-22 20:46:41";"664347" +"H2020-EU.2.1.3.7.";"en";"H2020-EU.2.1.3.7.";"";"";"Optimisation of the use of materials";"Optimisation of the use of materials";"

Optimisation of the use of materials

Research and development to investigate substitution and alternatives to the use of materials and innovative business model approaches and identification of critical resources.";"";"H2020";"H2020-EU.2.1.3.";"";"";"2014-09-22 20:41:41";"664187" +"H2020-EU.3.4.5.7.";"en";"H2020-EU.3.4.5.7.";"";"";"Small Air Transport (SAT) Transverse Area";"";"";"";"H2020";"H2020-EU.3.4.5";"";"";"2014-09-22 21:43:17";"665416" +"H2020-EU.3.5.4.3.";"en";"H2020-EU.3.5.4.3.";"";"";"Measure and assess progress towards a green economy";"";"";"";"H2020";"H2020-EU.3.5.4.";"";"";"2014-09-22 20:49:06";"664423" +"H2020-EU.3.6.3.3.";"en";"H2020-EU.3.6.3.3.";"";"";"Research on Europe's role in the world, on the mutual influence and ties between the world regions, and a view from outside on European cultures";"";"";"";"H2020";"H2020-EU.3.6.3.";"";"";"2015-01-23 18:42:15";"664461" +"H2020-EU.3.4.1.1.";"en";"H2020-EU.3.4.1.1.";"";"";"Making aircraft, vehicles and vessels cleaner and quieter will improve environmental performance and reduce perceived noise and vibration";"";"";"";"H2020";"H2020-EU.3.4.1.";"";"";"2014-09-22 20:47:09";"664361" +"H2020-EU.2.1.2.5.";"en";"H2020-EU.2.1.2.5.";"";"";"Developing and standardisation of capacity-enhancing techniques, measuring methods and equipment";"Capacity-enhancing techniques, measuring methods and equipment";"

Developing and standardisation of capacity-enhancing techniques, measuring methods and equipment

Focusing on the underpinning technologies supporting the development and market introduction of safe complex nanomaterials and nanosystems.";"";"H2020";"H2020-EU.2.1.2.";"";"";"2014-09-22 20:41:12";"664171" +"H2020-EU.3.6.2.4.";"en";"H2020-EU.3.6.2.4.";"";"";"Promote coherent and effective cooperation with third countries";"";"";"";"H2020";"H2020-EU.3.6.2.";"";"";"2014-09-22 20:50:05";"664453" +"H2020-EU.3.3.1.1.";"en";"H2020-EU.3.3.1.1.";"";"";"Bring to mass market technologies and services for a smart and efficient energy use";"";"";"";"H2020";"H2020-EU.3.3.1.";"";"";"2014-09-22 20:46:01";"664325" +"H2020-EU.3.4.8.4.";"en";"H2020-EU.3.4.8.4.";"";"";"Innovation Programme 4: IT Solutions for attractive railway services";"";"";"";"H2020";"H2020-EU.3.4.8.";"";"";"2016-10-19 15:33:30";"700205" +"H2020-EU.3.2.6.3.";"en";"H2020-EU.3.2.6.3.";"";"";"Sustainable biorefineries";"";"";"";"H2020";"H2020-EU.3.2.6.";"";"";"2014-09-22 21:39:35";"665321" +"H2020-EU.3.5.3.3.";"en";"H2020-EU.3.5.3.3.";"";"";"Find alternatives for critical raw materials";"";"";"";"H2020";"H2020-EU.3.5.3.";"";"";"2014-09-22 20:48:47";"664413" +"H2020-EU.4.e.";"en";"H2020-EU.4.e.";"";"";"Supporting access to international networks for excellent researchers and innovators who lack sufficient involvement in European and international networks";"";"";"";"H2020";"H2020-EU.4.";"";"";"2014-09-22 20:51:15";"664491" +"H2020-EU.2.1.3.3.";"en";"H2020-EU.2.1.3.3.";"";"";"Management of materials components";"Management of materials components";"

Management of materials components

Research and development for new and innovative techniques for materials and their components and systems.";"";"H2020";"H2020-EU.2.1.3.";"";"";"2014-09-22 20:41:26";"664179" +"H2020-EU.3.5.4.4.";"en";"H2020-EU.3.5.4.4.";"";"";"Foster resource efficiency through digital systems";"";"";"";"H2020";"H2020-EU.3.5.4.";"";"";"2014-09-22 20:49:09";"664425" +"H2020-EU.3.5.7.";"en";"H2020-EU.3.5.7.";"";"";"FCH2 (raw materials objective)";"";"";"";"H2020";"H2020-EU.3.5.";"";"";"2014-09-22 21:40:22";"665345" +"H2020-EU.3.4.5.9.";"en";"H2020-EU.3.4.5.9.";"";"";"Technology Evaluator";"";"";"";"H2020";"H2020-EU.3.4.5";"";"";"2014-09-22 21:43:24";"665420" +"H2020-EU.3.1.7.3.";"en";"H2020-EU.3.1.7.3.";"";"";"Cardiovascular diseases";"";"";"";"H2020";"H2020-EU.3.1.7.";"";"";"2014-09-22 21:40:39";"665355" +"H2020-EU.3.2.4.";"en";"H2020-EU.3.2.4.";"";"";"Sustainable and competitive bio-based industries and supporting the development of a European bioeconomy";"Bio-based industries and supporting bio-economy";"

Sustainable and competitive bio-based industries and supporting the development of a European bioeconomy

The aim is the promotion of low-carbon, resource-efficient, sustainable and competitive European bio-based industries. The activities shall focus on fostering the knowledge-based bioeconomy by transforming conventional industrial processes and products into bio-based resource and energy efficient ones, the development of integrated second and subsequent generation biorefineries, optimising the use of biomass from primary production including residues, biowaste and bio-based industry by-products, and opening new markets through supporting standardisation and certification systems as well as regulatory and demonstration/field trial activities, while taking into account the implications of the bioeconomy on land use and land use changes, as well as the views and concerns of civil society.";"";"H2020";"H2020-EU.3.2.";"";"";"2014-09-22 20:45:26";"664309" +"H2020-EU.2.1.3.2.";"en";"H2020-EU.2.1.3.2.";"";"";"Materials development and transformation";"Materials development and transformation";"

Materials development and transformation

Research and development to ensure efficient, safe and sustainable development and scale-up to enable industrial manufacturing of future design-based products towards a ""no-waste"" management of materials in Europe";"";"H2020";"H2020-EU.2.1.3.";"";"";"2014-09-22 20:41:23";"664177" +"H2020-EU.2.1.1.7.3.";"en";"H2020-EU.2.1.1.7.3.";"";"";"Multi-disciplinary approaches for smart systems, supported by developments in holistic design and advanced manufacturing to realise self-reliant and adaptable smart systems having sophisticated interfaces and offering complex functionalities based on, for example, the seamless integration of sensing, actuating, processing, energy provision and networking";"";"";"";"H2020";"H2020-EU.2.1.1.7.";"";"";"2014-09-22 21:39:57";"665331" +"H2020-EU.3.1.6.1.";"en";"H2020-EU.3.1.6.1.";"";"";"Promoting integrated care";"";"";"";"H2020";"H2020-EU.3.1.6.";"";"";"2014-09-22 20:44:26";"664277" +"H2020-EU.3.5.3.2.";"en";"H2020-EU.3.5.3.2.";"";"";"Promote the sustainable supply and use of raw materials, including mineral resources, from land and sea, covering exploration, extraction, processing, re-use, recycling and recovery";"";"";"";"H2020";"H2020-EU.3.5.3.";"";"";"2014-09-22 20:48:43";"664411" +"H2020-EU.3.5.4.1.";"en";"H2020-EU.3.5.4.1.";"";"";"Strengthen eco-innovative technologies, processes, services and products including exploring ways to reduce the quantities of raw materials in production and consumption, and overcoming barriers in this context and boost their market uptake";"";"";"";"H2020";"H2020-EU.3.5.4.";"";"";"2014-09-22 20:48:58";"664419" +"H2020-EU.3.4.1.3.";"en";"H2020-EU.3.4.1.3.";"";"";"Improving transport and mobility in urban areas";"";"";"";"H2020";"H2020-EU.3.4.1.";"";"";"2014-09-22 20:47:17";"664365" +"H2020-EU.2.3.2.1.";"en";"H2020-EU.2.3.2.1.";"";"";"Support for research intensive SMEs";"Support for research intensive SMEs";"

Support for research-intensive SMEs

The goal is to promote transnational market-oriented innovation of R&D performing SMEs. A specific action shall target research-intensive SMEs in any sectors that show the capability to commercially exploit the project results. This action will be built on the Eurostars Programme.";"";"H2020";"H2020-EU.2.3.2.";"";"";"2014-09-22 20:42:58";"664229" +"H2020-EU.3.6.2.3.";"en";"H2020-EU.3.6.2.3.";"";"";"Make use of the innovative, creative and productive potential of all generations";"";"";"";"H2020";"H2020-EU.3.6.2.";"";"";"2014-09-22 20:50:01";"664451" +"H2020-EU.3.2.1.2.";"en";"H2020-EU.3.2.1.2.";"";"";"Providing ecosystems services and public goods";"";"";"";"H2020";"H2020-EU.3.2.1.";"";"";"2014-09-22 20:44:45";"664287" +"H2020-EU.3.3.3.1.";"en";"H2020-EU.3.3.3.1.";"";"";"Make bio-energy more competitive and sustainable";"";"";"";"H2020";"H2020-EU.3.3.3.";"";"";"2014-09-22 20:46:34";"664343" +"H2020-Euratom-1.1.";"en";"H2020-Euratom-1.1.";"";"";"Support safe operation of nuclear systems";"";"";"";"H2020";"H2020-Euratom-1.";"";"";"2014-09-22 20:52:07";"664519" +"H2020-EU.3.3.1.2.";"en";"H2020-EU.3.3.1.2.";"";"";"Unlock the potential of efficient and renewable heating-cooling systems";"";"";"";"H2020";"H2020-EU.3.3.1.";"";"";"2014-09-22 20:46:05";"664327" +"H2020-EU.5.g.";"en";"H2020-EU.5.g.";"";"";"Take due and proportional precautions in research and innovation activities by anticipating and assessing potential environmental, health and safety impacts";"";"";"";"H2020";"H2020-EU.5.";"";"";"2014-09-22 20:51:45";"664507" +"H2020-EU.3.3.2.4.";"en";"H2020-EU.3.3.2.4.";"";"";"Develop geothermal, hydro, marine and other renewable energy options";"";"";"";"H2020";"H2020-EU.3.3.2.";"";"";"2014-09-22 20:46:27";"664339" +"H2020-EU.1.4.3.2.";"en";"H2020-EU.1.4.3.2.";"";"";"Facilitate strategic international cooperation";"";"";"";"H2020";"H2020-EU.1.4.3.";"";"";"2014-09-22 20:40:19";"664141" +"H2020-EU.3.5.4.";"en";"H2020-EU.3.5.4.";"";"";"Enabling the transition towards a green economy and society through eco-innovation";"A green economy and society through eco-innovation";"

Enabling the transition towards a green economy and society through eco-innovation

The aim is to foster all forms of eco-innovation that enable the transition to a green economy. Activities shall, inter alia, build upon and enhance those undertaken in the Eco-Innovation Programme and focus on strengthening eco-innovative technologies, processes, services and products, including exploring ways to reduce the quantities of raw materials in production and consumption, overcoming barriers in this context, and boosting their market uptake and replication, with special attention for SMEs; supporting innovative policies, sustainable economic models and societal changes; measuring and assessing progress towards a green economy; and fostering resource efficiency through digital systems.";"";"H2020";"H2020-EU.3.5.";"";"";"2014-09-22 20:48:54";"664417" +"H2020-EU.3.4.5.3.";"en";"H2020-EU.3.4.5.3.";"";"";"IADP Fast Rotorcraft";"";"";"";"H2020";"H2020-EU.3.4.5";"";"";"2014-09-22 21:43:01";"665408" +"H2020-EU.3.1.7.13.";"en";"H2020-EU.3.1.7.13.";"";"";"Other";"";"";"";"H2020";"H2020-EU.3.1.7.";"";"";"2014-09-22 21:41:14";"665375" +"H2020-EU.3.1.4.2.";"en";"H2020-EU.3.1.4.2.";"";"";"Individual awareness and empowerment for self-management of health";"";"";"";"H2020";"H2020-EU.3.1.4.";"";"";"2014-09-22 20:44:04";"664265" +"H2020-EU.3.1.2.1.";"en";"H2020-EU.3.1.2.1.";"";"";"Developing effective prevention and screening programmes and improving the assessment of disease susceptibility";"";"";"";"H2020";"H2020-EU.3.1.2.";"";"";"2014-09-22 20:43:35";"664249" +"H2020-EU.3.1.7.10.";"en";"H2020-EU.3.1.7.10.";"";"";"Cancer";"";"";"";"H2020";"H2020-EU.3.1.7.";"";"";"2014-09-22 21:41:03";"665369" +"H2020-EU.2.2.1.";"en";"H2020-EU.2.2.1.";"";"";"The Debt facility providing debt finance for R&I: 'Union loan and guarantee service for research and innovation'";"Debt facility";"

The Debt facility providing debt finance for R&I: 'Union loan and guarantee service for research and innovation'

The goal is to improve access to debt financing – loans, guarantees, counter-guarantees and other forms of debt and risk finance – for public and private entities and public-private partnerships engaged in research and innovation activities requiring risky investments in order to come to fruition. The focus shall be on supporting research and innovation with a high potential for excellence.Given that one of the objectives of Horizon 2020 is to contribute to narrowing the gap between R&D and innovation, helping to bring new or improved products and services to the market, and taking into account the critical role that the proof-of-concept stage plays in the knowledge transfer process, mechanisms may be introduced enabling financing for the proof-of-concept stages that are necessary in order to validate the importance, relevance and future innovatory impact of the research results or invention involved in the transfer.The target final beneficiaries shall potentially be legal entities of all sizes that can borrow and repay money and, in particular, SMEs with the potential to carry out innovation and grow rapidly; mid-caps and large firms; universities and research institutions; research infrastructures and innovation infrastructures; public-private partnerships; and special-purpose vehicles or projects.The funding of the Debt facility shall have two main components:(1)Demand-driven, providing loans and guarantees on a first-come, first-served basis, with specific support for beneficiaries such as SMEs and mid-caps. This component shall respond to the steady and continuing growth seen in the volume of RSFF lending, which is demand-led. Under the SME window, activities shall be supported that aim to improve access to finance for SMEs and other entities that are R&D- and/or innovation-driven. This could include support at phase 3 of the SME instrument, subject to the level of demand.(2)Targeted, focusing on policies and key sectors crucial for tackling societal challenges, enhancing industrial leadership and competitiveness, supporting sustainable, low-carbon, inclusive growth, and providing environmental and other public goods. This component shall help the Union address research and innovation aspects of sectoral policy objectives.";"";"H2020";"H2020-EU.2.2.";"";"";"2014-09-22 20:42:40";"664219" +"H2020-EU.3.4.3.4.";"en";"H2020-EU.3.4.3.4.";"";"";"Exploring entirely new transport concepts";"";"";"";"H2020";"H2020-EU.3.4.3.";"";"";"2014-09-22 20:47:53";"664385" +"H2020-EU.3.4.8.1.";"en";"H2020-EU.3.4.8.1.";"";"";"Innovation Programme 1 (IP1): Cost-efficient and reliable trains";"";"";"";"H2020";"H2020-EU.3.4.8.";"";"";"2016-10-19 15:32:04";"700128" +"H2020-EU.3.1.1.1.";"en";"H2020-EU.3.1.1.1.";"";"";"Understanding the determinants of health, improving health promotion and disease prevention";"";"";"";"H2020";"H2020-EU.3.1.1.";"";"";"2014-09-22 20:43:20";"664241" +"H2020-EU.3.4.2.3.";"en";"H2020-EU.3.4.2.3.";"";"";"Developing new concepts of freight transport and logistics";"";"";"";"H2020";"H2020-EU.3.4.2.";"";"";"2014-09-22 20:47:31";"664373" +"H2020-EU.3.1.7.9.";"en";"H2020-EU.3.1.7.9.";"";"";"Ageing-associated diseases";"";"";"";"H2020";"H2020-EU.3.1.7.";"";"";"2014-09-22 21:41:00";"665367" +"H2020-EU.3.1.7.4.";"en";"H2020-EU.3.1.7.4.";"";"";"Diabetes";"";"";"";"H2020";"H2020-EU.3.1.7.";"";"";"2014-09-22 21:40:42";"665357" +"H2020-EU.3.1.7.12.";"en";"H2020-EU.3.1.7.12.";"";"";"Vaccine";"";"";"";"H2020";"H2020-EU.3.1.7.";"";"";"2014-09-22 21:41:10";"665373" +"H2020-EU.3.3.2.2.";"en";"H2020-EU.3.3.2.2.";"";"";"Develop efficient, reliable and cost-competitive solar energy systems";"";"";"";"H2020";"H2020-EU.3.3.2.";"";"";"2014-09-22 20:46:19";"664335" +"H2020-EU.4.d.";"en";"H2020-EU.4.d.";"";"";"A Policy Support Facility";"Policy Support Facility (PSF)";"

A Policy Support Facility

to improve the design, implementation and evaluation of national/regional research and innovation policies.— Supporting access to international networks for excellent researchers and innovators who lack sufficient involvement in European and international networks, including COST. — Strengthening the administrative and operational capacity of transnational networks of National Contact Points, including through training, so that they can provide better support to potential participants. ";"";"H2020";"H2020-EU.4.";"";"";"2014-09-22 20:51:11";"664489" +"H2020-EU.3.2.6.2.";"en";"H2020-EU.3.2.6.2.";"";"";"Fostering the bio-economy for bio-based industrie";"";"";"";"H2020";"H2020-EU.3.2.6.";"";"";"2014-09-22 21:39:31";"665319" +"H2020-EU.3.4.2.4.";"en";"H2020-EU.3.4.2.4.";"";"";"Reducing accident rates, fatalities and casualties and improving security";"";"";"";"H2020";"H2020-EU.3.4.2.";"";"";"2014-09-22 20:47:35";"664375" +"H2020-EU.2.2.2.";"en";"H2020-EU.2.2.2.";"";"";"The Equity facility providing equity finance for R&I: 'Union equity instruments for research and innovation'";"Equity facility";"

The Equity facility providing equity finance for R&I: 'Union equity instruments for research and innovation'

The goal is to contribute to overcoming the deficiencies of the European venture capital market and provide equity and quasi-equity to cover the development and financing needs of innovating enterprises from the seed stage through to growth and expansion. The focus shall be on supporting the objectives of Horizon 2020 and related policies.The target final beneficiaries shall be potentially enterprises of all sizes undertaking or embarking on innovation activities, with a particular focus on innovative SMEs and mid-caps.The Equity facility will focus on early-stage venture capital funds and funds-of-funds providing venture capital and quasi-equity (including mezzanine capital) to individual portfolio enterprises. The facility will also have the possibility to make expansion and growth-stage investments in conjunction with the Equity Facility for Growth under COSME, to ensure a continuum of support during the start-up and development of companies.The Equity facility, which will be primarily demand-driven, shall use a portfolio approach, where venture capital funds and other comparable intermediaries select the firms to be invested in.Earmarking may be applied to help achieve particular policy goals, building on the positive experience in the Competitiveness and Innovation Framework Programme (2007 to 2013) with earmarking for eco-innovation, for example for achieving goals related to the identified societal challenges.The start-up window, supporting the seed and early stages, shall enable equity investments in, amongst others, knowledge-transfer organisations and similar bodies through support to technology transfer (including the transfer of research results and inventions stemming from the sphere of public research to the productive sector, for example through proof-of-concept), seed capital funds, cross-border seed and early-stage funds, business angel co-investment vehicles, intellectual property assets, platforms for the exchange and trading of intellectual property rights, and early-stage venture capital funds and funds-of-funds operating across borders and investing in venture capital funds. This could include support at phase 3 of the SME instrument, subject to the level of demand.The growth window shall make expansion and growth-stage investments in conjunction with the Equity Facility for Growth under COSME, including investments in private and public sector funds-of-funds operating across borders and investing in venture capital funds, most of which will have a thematic focus that supports the goals of the Europe 2020 strategy.";"";"H2020";"H2020-EU.2.2.";"";"";"2014-09-22 20:42:43";"664221" +"H2020-EU.3.6.2.";"en";"H2020-EU.3.6.2.";"";"";"Innovative societies";"Innovative societies";"

Innovative societies

The aim is to foster the development of innovative societies and policies in Europe through the engagement of citizens, civil society organisations, enterprises and users in research and innovation and the promotion of coordinated research and innovation policies in the context of globalisation and the need to promote the highest ethical standards. Particular support will be provided for the development of the ERA and the development of framework conditions for innovation.Cultural and societal knowledge is a major source of creativity and innovation, including business, public sector and social innovation. In many cases social and user-led innovations also precede the development of innovative technologies, services and economic processes. The creative industries are a major resource to tackle societal challenges and for competitiveness. As interrelations between social and technological innovation are complex, and rarely linear, further research, including cross-sectoral and multidisciplinary research, is needed into the development of all types of innovation and activities funded to encourage its effective development into the future.The focus of activities shall be to:(a) strengthen the evidence base and support for the flagship initiative ""Innovation Union"" and ERA; (b) explore new forms of innovation, with special emphasis on social innovation and creativity, and understand how all forms of innovation are developed, succeed or fail; (c) make use of the innovative, creative and productive potential of all generations; (d) promote coherent and effective cooperation with third countries. ";"";"H2020";"H2020-EU.3.6.";"";"";"2014-09-22 20:49:50";"664447" +"H2020-Euratom-1.9.";"en";"H2020-Euratom-1.9.";"";"";"European Fusion Development Agreement";"";"";"";"H2020";"H2020-Euratom-1.";"";"";"2014-09-22 20:52:37";"664535" +"H2020-EU.3.5.3.1.";"en";"H2020-EU.3.5.3.1.";"";"";"Improve the knowledge base on the availability of raw materials";"";"";"";"H2020";"H2020-EU.3.5.3.";"";"";"2014-09-22 20:48:40";"664409" +"H2020-EU.3.1.7.11.";"en";"H2020-EU.3.1.7.11.";"";"";"Rare/Orphan Diseases";"";"";"";"H2020";"H2020-EU.3.1.7.";"";"";"2014-09-22 21:41:07";"665371" +"H2020-EU.3.1.1.3.";"en";"H2020-EU.3.1.1.3.";"";"";"Improving surveillance and preparedness";"";"";"";"H2020";"H2020-EU.3.1.1.";"";"";"2014-09-22 20:43:27";"664245" +"H2020-EU.5.e.";"en";"H2020-EU.5.e.";"";"";"Develop the accessibility and the use of the results of publicly-funded research";"";"";"";"H2020";"H2020-EU.5.";"";"";"2014-09-22 20:51:37";"664503" +"H2020-EU.3.4.5.8.";"en";"H2020-EU.3.4.5.8.";"";"";"ECO Transverse Area";"";"";"";"H2020";"H2020-EU.3.4.5";"";"";"2014-09-22 21:43:21";"665418" +"H2020-EU.3.4.3.1.";"en";"H2020-EU.3.4.3.1.";"";"";"Developing the next generation of transport means as the way to secure market share in the future";"";"";"";"H2020";"H2020-EU.3.4.3.";"";"";"2014-09-22 20:47:42";"664379" +"H2020-EU.4.f.";"en";"H2020-EU.4.f.";"";"";"Strengthening the administrative and operational capacity of transnational networks of National Contact Points";"";"";"";"H2020";"H2020-EU.4.";"";"";"2014-09-22 20:51:19";"664493" +"H2020-EU.3.2.6.";"en";"H2020-EU.3.2.6.";"";"";"Bio-based Industries Joint Technology Initiative (BBI-JTI)";"";"";"";"H2020";"H2020-EU.3.2.";"";"";"2014-09-22 21:39:23";"665315" +"H2020-Euratom-1.7.";"en";"H2020-Euratom-1.7.";"";"";"Promote innovation and industry competitiveness";"";"";"";"H2020";"H2020-Euratom-1.";"";"";"2014-09-22 20:52:29";"664531" +"H2020-EU.2.1.2.1.";"en";"H2020-EU.2.1.2.1.";"";"";"Developing next generation nanomaterials, nanodevices and nanosystems ";"Next generation nanomaterials, nanodevices and nanosystems";"

Developing next generation nanomaterials, nanodevices and nanosystems

Aiming at fundamentally new products enabling sustainable solutions in a wide range of sectors.";"";"H2020";"H2020-EU.2.1.2.";"";"";"2014-09-22 20:40:58";"664163" +"H2020-EU.3.1.7.1.";"en";"H2020-EU.3.1.7.1.";"";"";"Antimicrobial resistance";"";"";"";"H2020";"H2020-EU.3.1.7.";"";"";"2014-09-22 21:40:32";"665351" +"H2020-Euratom-1.3.";"en";"H2020-Euratom-1.3.";"";"";"Support the development and sustainability of nuclear competences at Union level";"";"";"";"H2020";"H2020-Euratom-1.";"";"";"2014-09-22 20:52:14";"664523" +"H2020-EU.2.3.2.3.";"en";"H2020-EU.2.3.2.3.";"";"";"Supporting market-driven innovation";"Supporting market-driven innovation";"

Supporting market-driven innovation

Transnational market-driven innovation to improve the framework conditions for innovation shall be supported, and the specific barriers preventing, in particular, the growth of innovative SMEs shall be tackled.";"";"H2020";"H2020-EU.2.3.2.";"";"";"2014-09-22 20:43:05";"664233" +"H2020-EU.3.2.1.";"en";"H2020-EU.3.2.1.";"";"";"Sustainable agriculture and forestry";"Sustainable agriculture and forestry";"

Sustainable agriculture and forestry

The aim is to supply sufficient food, feed, biomass and other raw-materials, while safeguarding natural resources, such as water, soil and biodiversity, in a European and world-wide perspective, and enhancing ecosystems services, including coping with and mitigating climate change. The activities shall focus on increasing the quality and value of agricultural products by delivering more sustainable and productive agriculture, including animal husbandry and forestry systems, which are diverse, resilient and resource-efficient (in terms of low-carbon and low external input and water), protect natural resources, produce less waste and can adapt to a changing environment. Furthermore, the activities shall focus on developing services, concepts and policies for thriving rural livelihoods and encouraging sustainable consumption.In particular for forestry, the aim is to sustainably produce biomass and bio-based products and deliver ecosystem services, with due consideration to economic, ecological and social aspects of forestry. Activities will focus on the further development of production and sustainability of resource-efficient forestry systems which are instrumental in the strengthening of forest resilience and biodiversity protection, and which can meet increased biomass demand.The interaction of functional plants with health and well being, as well as the exploitation of horticulture and forestry for the development of urban greening, will also be considered.";"";"H2020";"H2020-EU.3.2.";"";"";"2014-09-22 20:44:37";"664283" +"H2020-EU.2.1.2.4.";"en";"H2020-EU.2.1.2.4.";"";"";"Efficient and sustainable synthesis and manufacturing of nanomaterials, components and systems";"Synthesis and manufacturing of nanomaterials, components and systems";"

Efficient and sustainable synthesis and manufacturing of nanomaterials, components and systems

Focusing on new operations, smart integration of new and existing processes, including technology convergence, as well as up-scaling to achieve high precision large-scale production of products and flexible and multi-purpose plants that ensure the efficient transfer of knowledge into industrial innovation.";"";"H2020";"H2020-EU.2.1.2.";"";"";"2014-09-22 20:41:08";"664169" +"H2020-EU.2.1.3.5.";"en";"H2020-EU.2.1.3.5.";"";"";"Materials for creative industries, including heritage";"Materials for creative industries, including heritage";"

Materials for creative industries, including heritage

Applying design and the development of converging technologies to create new business opportunities, including the preservation and restoration of materials with historical or cultural value, as well as novel materials.";"";"H2020";"H2020-EU.2.1.3.";"";"";"2014-09-22 20:41:34";"664183" +"H2020-EU.3.4.2.1.";"en";"H2020-EU.3.4.2.1.";"";"";"A substantial reduction of traffic congestion";"";"";"";"H2020";"H2020-EU.3.4.2.";"";"";"2014-09-22 20:47:24";"664369" +"H2020-EU.3.6.1.4.";"en";"H2020-EU.3.6.1.4.";"";"";"The promotion of sustainable and inclusive environments through innovative spatial and urban planning and design";"";"";"";"H2020";"H2020-EU.3.6.1.";"";"";"2014-09-22 20:49:46";"664445" +"H2020-EU.3.4.7.1";"en";"H2020-EU.3.4.7.1";"";"";"Exploratory Research";"";"";"";"H2020";"H2020-EU.3.4.7.";"";"";"2015-05-26 14:10:30";"669176" +"H2020-EU.3.1.2.3.";"en";"H2020-EU.3.1.2.3.";"";"";"Developing better preventive and therapeutic vaccines";"";"";"";"H2020";"H2020-EU.3.1.2.";"";"";"2014-09-22 20:43:42";"664253" +"H2020-EU.2.1.1.7.1.";"en";"H2020-EU.2.1.1.7.1.";"";"";"Design technologies, process and integration, equipment, materials and manufacturing for micro- and nanoelectronics while targeting miniaturisation, diversification and differentiation, heterogeneous integration";"";"";"";"H2020";"H2020-EU.2.1.1.7.";"";"";"2014-09-22 21:39:49";"665327" +"H2020-EU.2.1.1.7.2.";"en";"H2020-EU.2.1.1.7.2.";"";"";"Processes, methods, tools and platforms, reference designs and architectures, for software and/or control-intensive embedded/cyber-physical systems, addressing seamless connectivity and interoperability, functional safety, high availability, and security for professional and consumer type applications, and connected services";"";"";"";"H2020";"H2020-EU.2.1.1.7.";"";"";"2014-09-22 21:39:53";"665329" +"H2020-EU.3.1.1.2.";"en";"H2020-EU.3.1.1.2.";"";"";"Understanding disease";"";"";"";"H2020";"H2020-EU.3.1.1.";"";"";"2014-09-22 20:43:23";"664243" +"H2020-EU.3.4.8.3.";"en";"H2020-EU.3.4.8.3.";"";"";"Innovation Programme 3: Cost Efficient and Reliable High Capacity Infrastructure";"";"";"";"H2020";"H2020-EU.3.4.8.";"";"";"2016-10-19 15:36:13";"700236" +"H2020-EU.2.2.";"en";"H2020-EU.2.2.";"";"";"INDUSTRIAL LEADERSHIP - Access to risk finance";"Access to risk finance";"

INDUSTRIAL LEADERSHIP - Access to risk finance

Specific objective

The specific objective is to help address market deficiencies in accessing risk finance for research and innovation.The investment situation in the R&I domain is dire, particularly for innovative SMEs and mid-caps with a high potential for growth. There are several major market gaps in the provision of finance, as the innovations required to achieve policy goals are proving too risky, typically, for the market to bear and therefore the wider benefits to society are not fully captured.A facility for debt ('Debt facility') and a facility for equity ('Equity facility') will help overcome such problems by improving the financing and risk profiles of the R&I activities concerned. This, in turn, will ease access by firms and other beneficiaries to loans, guarantees and other forms of risk finance; promote early-stage investment and the development of existing and new venture capital funds; improve knowledge transfer and the market in intellectual property; attract funds to the venture capital market; and, overall, help catalyse the passage from the conception, development and demonstration of new products and services to their commercialisation.The overall effect will be to increase the willingness of the private sector to invest in R&I and hence contribute to reaching a key Europe 2020 target: 3 % of Union GDP invested in R&D by the end of the decade with two-thirds contributed by the private sector. The use of financial instruments will also help achieve the R&I objectives of all sectors and policy areas crucial for tackling the societal challenges, for enhancing competitiveness, and for supporting sustainable, inclusive growth and the provision of environmental and other public goods.

Rationale and Union added value

A Union-level Debt facility for R&I is needed to increase the likelihood that loans and guarantees are made and R&I policy objectives achieved. The current gap in the market between the demand for and supply of loans and guarantees for risky R&I investments, addressed by the current Risk-Sharing Finance Facility (RSFF), is likely to persist, with commercial banks remaining largely absent from higher-risk lending. Demand for RSFF loan finance has been high since the launch of the facility in mid-2007: in its first phase (2007-2010), its take-up exceeded initial expectations by more than 50 % in terms of active loan approvals (EUR 7,6 billion versus a forecast EUR 5 billion).Furthermore, banks typically lack the ability to value knowledge assets, such as intellectual property, and therefore are often unwilling to invest in knowledge-based companies. The consequence is that many established innovative companies – both large and small – cannot obtain loans for higher-risk R&I activities. In the design and implementation of its facilit(y)(ies), which will be carried out in partnership with one or several entrusted entities in compliance with Regulation (EU, Euratom) No 966/2012, the Commission will ensure that appropriate levels and forms of technological and financial risks will be taken into account, in order to meet the identified needs.These market gaps stem, at root, from uncertainties, information asymmetries and the high costs of attempting to address these issues: recently established firms have too short a track record to satisfy potential lenders, even established firms often cannot provide enough information, and at the start of an R&I investment it is not at all certain whether the efforts undertaken will actually result in a successful innovation.Additionally, enterprises at the concept development stage or working in emerging areas typically lack sufficient collateral. Another disincentive is that even if R&I activities give rise to a commercial product or process, it is not at all certain that the company that has made the effort will be able to exclusively appropriate the benefits deriving from it.In terms of Union added value, the Debt facility will help remedy market deficiencies that prevent the private sector from investing in R&I at an optimum level. Its implementation will enable the pooling of a critical mass of resources from the Union budget and, on a risk-sharing basis, from the financial institution(s) entrusted with its implementation. It will stimulate firms to invest more of their own money in R&I than they would otherwise have done. In addition, the Debt facility will help organisations, both public and private, to reduce the risks of undertaking the pre-commercial procurement or procurement of innovative products and services.A Union-level Equity facility for R&I is needed to help improve the availability of equity finance for early and growth-stage investments and to boost the development of the Union venture capital market. During the technology transfer and start-up phase, new companies face a 'valley of death' where public research grants stop and it is not possible to attract private finance. Public support aiming to leverage private seed and start-up funds to fill this gap is currently too fragmented and intermittent, or its management lacks the necessary expertise. Furthermore, most venture capital funds in Europe are too small to support the continued growth of innovative companies and do not have the critical mass to specialise and operate transnationally.The consequences are serious. Before the financial crisis, the amount invested in SMEs by European venture capital funds was about EUR 7 billion a year, while figures for 2009 and 2010 were within the EUR 3-4 billion range. Reduced funding for venture capital has affected the number of start-ups targeted by venture capital funds: in 2007, some 3 000 SMEs received venture capital funding, compared to only around 2 500 in 2010.In terms of Union added value, the Equity facility for R&I will complement national and regional schemes that cannot cater for cross-border investments in R&I. The early-stage deals will also have a demonstration effect that can benefit public and private investors across Europe. For the growth phase, only at European level is it possible to achieve the necessary scale and the strong participation of private investors that are essential to the functioning of a self-sustaining venture capital market.The Debt and Equity facilities, supported by a set of accompanying measures, will support the achievement of Horizon 2020 policy objectives. To this end, they will be dedicated to consolidating and raising the quality of Europe's science base; promoting research and innovation with a business-driven agenda; and addressing societal challenges, with a focus on activities such as piloting, demonstration, test-beds and market uptake. Specific support actions such as information and coaching activities for SMEs should be provided. Regional authorities, SMEs associations, chambers of commerce and relevant financial intermediaries may be consulted, where appropriate, in relation to the programming and implementation of these activities.In addition, they will help tackle the R&I objectives of other programmes and policy areas, such as the Common Agricultural Policy, climate action (transition to a low-carbon economy and adaptation to climate change), and the Common Fisheries Policy. Complementarities with national and regional financial instruments will be developed in the context of the Common Strategic Framework for Cohesion Policy 2014-2020, where an increased role for financial instruments is foreseen.The design of the Debt and Equity facilities takes account of the need to address the specific market deficiencies, and the characteristics (such as degree of dynamism and rate of company creation) and financing requirements of these and other areas without creating market distortions. The use of financial instruments must have a clear European added value and should provide leverage and function as a complement to national instruments. Budgetary allocations between the instruments may be adapted during the course of Horizon 2020 in response to changing economic conditions.The Equity facility and the SME window of the Debt facility will be implemented as part of two Union financial instruments that provide equity and debt to support SMEs' R&I and growth, in conjunction with the equity and debt facilities under COSME. Complementarity between Horizon 2020 and COSME will be ensured.

Broad lines of the activities

(a) The Debt facility providing debt finance for R&I: 'Union loan and guarantee service for research and innovation'

The goal is to improve access to debt financing – loans, guarantees, counter-guarantees and other forms of debt and risk finance – for public and private entities and public-private partnerships engaged in research and innovation activities requiring risky investments in order to come to fruition. The focus shall be on supporting research and innovation with a high potential for excellence.Given that one of the objectives of Horizon 2020 is to contribute to narrowing the gap between R&D and innovation, helping to bring new or improved products and services to the market, and taking into account the critical role that the proof-of-concept stage plays in the knowledge transfer process, mechanisms may be introduced enabling financing for the proof-of-concept stages that are necessary in order to validate the importance, relevance and future innovatory impact of the research results or invention involved in the transfer.The target final beneficiaries shall potentially be legal entities of all sizes that can borrow and repay money and, in particular, SMEs with the potential to carry out innovation and grow rapidly; mid-caps and large firms; universities and research institutions; research infrastructures and innovation infrastructures; public-private partnerships; and special-purpose vehicles or projects.The funding of the Debt facility shall have two main components:(1)Demand-driven, providing loans and guarantees on a first-come, first-served basis, with specific support for beneficiaries such as SMEs and mid-caps. This component shall respond to the steady and continuing growth seen in the volume of RSFF lending, which is demand-led. Under the SME window, activities shall be supported that aim to improve access to finance for SMEs and other entities that are R&D- and/or innovation-driven. This could include support at phase 3 of the SME instrument, subject to the level of demand.(2)Targeted, focusing on policies and key sectors crucial for tackling societal challenges, enhancing industrial leadership and competitiveness, supporting sustainable, low-carbon, inclusive growth, and providing environmental and other public goods. This component shall help the Union address research and innovation aspects of sectoral policy objectives.

(b) The Equity facility providing equity finance for R&I: 'Union equity instruments for research and innovation'

The goal is to contribute to overcoming the deficiencies of the European venture capital market and provide equity and quasi-equity to cover the development and financing needs of innovating enterprises from the seed stage through to growth and expansion. The focus shall be on supporting the objectives of Horizon 2020 and related policies.The target final beneficiaries shall be potentially enterprises of all sizes undertaking or embarking on innovation activities, with a particular focus on innovative SMEs and mid-caps.The Equity facility will focus on early-stage venture capital funds and funds-of-funds providing venture capital and quasi-equity (including mezzanine capital) to individual portfolio enterprises. The facility will also have the possibility to make expansion and growth-stage investments in conjunction with the Equity Facility for Growth under COSME, to ensure a continuum of support during the start-up and development of companies.The Equity facility, which will be primarily demand-driven, shall use a portfolio approach, where venture capital funds and other comparable intermediaries select the firms to be invested in.Earmarking may be applied to help achieve particular policy goals, building on the positive experience in the Competitiveness and Innovation Framework Programme (2007 to 2013) with earmarking for eco-innovation, for example for achieving goals related to the identified societal challenges.The start-up window, supporting the seed and early stages, shall enable equity investments in, amongst others, knowledge-transfer organisations and similar bodies through support to technology transfer (including the transfer of research results and inventions stemming from the sphere of public research to the productive sector, for example through proof-of-concept), seed capital funds, cross-border seed and early-stage funds, business angel co-investment vehicles, intellectual property assets, platforms for the exchange and trading of intellectual property rights, and early-stage venture capital funds and funds-of-funds operating across borders and investing in venture capital funds. This could include support at phase 3 of the SME instrument, subject to the level of demand.The growth window shall make expansion and growth-stage investments in conjunction with the Equity Facility for Growth under COSME, including investments in private and public sector funds-of-funds operating across borders and investing in venture capital funds, most of which will have a thematic focus that supports the goals of the Europe 2020 strategy. ";"";"H2020";"H2020-EU.2.";"";"";"2014-09-22 20:42:36";"664217" +"H2020-EU.2.1.2.3.";"en";"H2020-EU.2.1.2.3.";"";"";"Developing the societal dimension of nanotechnology";"Societal dimension of nanotechnology";"

Developing the societal dimension of nanotechnology

Focusing on governance of nanotechnology for societal and environmental benefit.";"";"H2020";"H2020-EU.2.1.2.";"";"";"2014-09-22 20:41:05";"664167" +"H2020-EU.3.1.7.5.";"en";"H2020-EU.3.1.7.5.";"";"";"Neurodegenerative diseases";"";"";"";"H2020";"H2020-EU.3.1.7.";"";"";"2014-09-22 21:40:46";"665359" +"H2020-EU.2.1.3.1.";"en";"H2020-EU.2.1.3.1.";"";"";"Cross-cutting and enabling materials technologies";"Cross-cutting and enabling materials technologies";"

Cross-cutting and enabling materials technologies

Research on materials by design, functional materials, multifunctional materials with higher knowledge content, new functionalities and improved performance, and structural materials for innovation in all industrial sectors, including the creative industries.";"";"H2020";"H2020-EU.2.1.3.";"";"";"2014-09-22 20:41:19";"664175" +"H2020-EU.3.1.7.7.";"en";"H2020-EU.3.1.7.7.";"";"";"Respiratory diseases";"";"";"";"H2020";"H2020-EU.3.1.7.";"";"";"2014-09-22 21:40:53";"665363" +"H2020-EU.3.4.3.3.";"en";"H2020-EU.3.4.3.3.";"";"";"Advanced production processes";"";"";"";"H2020";"H2020-EU.3.4.3.";"";"";"2014-09-22 20:47:50";"664383" +"H2020-EU.3.3.3.2.";"en";"H2020-EU.3.3.3.2.";"";"";"Reducing time to market for hydrogen and fuel cells technologies";"";"";"";"H2020";"H2020-EU.3.3.3.";"";"";"2014-09-22 20:46:38";"664345" +"H2020-EU.3.4.1.2.";"en";"H2020-EU.3.4.1.2.";"";"";"Developing smart equipment, infrastructures and services";"";"";"";"H2020";"H2020-EU.3.4.1.";"";"";"2014-09-22 20:47:13";"664363" +"H2020-EU.3.3.2.1.";"en";"H2020-EU.3.3.2.1.";"";"";"Develop the full potential of wind energy";"";"";"";"H2020";"H2020-EU.3.3.2.";"";"";"2014-09-22 20:46:16";"664333" +"H2020-EU.5.h.";"en";"H2020-EU.5.h.";"";"";"Improving knowledge on science communication in order to improve the quality and effectiveness of interactions between scientists, general media and the public";"";"";"";"H2020";"H2020-EU.5.";"";"";"2014-09-22 20:51:48";"664509" +"H2020-EU.3.4.3.2.";"en";"H2020-EU.3.4.3.2.";"";"";"On board, smart control systems";"";"";"";"H2020";"H2020-EU.3.4.3.";"";"";"2014-09-22 20:47:46";"664381" +"H2020-EU.3.4.2.2.";"en";"H2020-EU.3.4.2.2.";"";"";"Substantial improvements in the mobility of people and freight";"";"";"";"H2020";"H2020-EU.3.4.2.";"";"";"2014-09-22 20:47:27";"664371" +"H2020-EU.3.5.6.1.";"en";"H2020-EU.3.5.6.1.";"";"";"Identifying resilience levels via observations, monitoring and modelling";"";"";"";"H2020";"H2020-EU.3.5.6.";"";"";"2014-09-22 20:49:20";"664431" +"H2020-EU.3.5.3.4.";"en";"H2020-EU.3.5.3.4.";"";"";"Improve societal awareness and skills on raw materials";"";"";"";"H2020";"H2020-EU.3.5.3.";"";"";"2014-09-22 20:48:51";"664415" +"H2020-EU.2.1.4.2.";"en";"H2020-EU.2.1.4.2.";"";"";"Bio-technology based industrial products and processes";"Bio-technology based industrial products and processes";"

Biotechnology-based industrial products and processes

Developing industrial biotechnology and industrial scale bio-process design for competitive industrial products and sustainable processes (e.g. chemical, health, mining, energy, pulp and paper, fibre-based products and wood, textile, starch, food processing) and its environmental and health dimensions, including clean-up operations.";"";"H2020";"H2020-EU.2.1.4.";"";"";"2014-09-22 20:41:52";"664193" +"H2020-EU.2.1.3.6.";"en";"H2020-EU.2.1.3.6.";"";"";"Metrology, characterisation, standardisation and quality control";"Metrology, characterisation, standardisation and quality control";"

Metrology, characterisation, standardisation and quality control

Promoting technologies such as characterisation, non-destructive evaluation, continuous assessing and monitoring and predictive modelling of performance for progress and impact in materials science and engineering";"";"H2020";"H2020-EU.2.1.3.";"";"";"2014-09-22 20:41:37";"664185" +"H2020-EU.3.5.2.";"en";"H2020-EU.3.5.2.";"";"";"Protection of the environment, sustainable management of natural resources, water, biodiversity and ecosystems";"Protection of the environment";"

Protecting the environment, sustainably managing natural resources, water, biodiversity and ecosystems

The aim is to provide knowledge and tools for the management and protection of natural resources, in order to achieve a sustainable balance between limited resources and the present and future needs of society and the economy. Activities shall focus on furthering our understanding of biodiversity and the functioning of ecosystems, their interactions with social systems and their role in sustaining the economy and human well-being; developing integrated approaches to address water-related challenges and the transition to sustainable management and use of water resources and services; and providing knowledge and tools for effective decision making and public engagement.";"";"H2020";"H2020-EU.3.5.";"";"";"2014-09-22 20:48:20";"664399" +"H2020-EU.3.1.2.2.";"en";"H2020-EU.3.1.2.2.";"";"";"Improving diagnosis and prognosis";"";"";"";"H2020";"H2020-EU.3.1.2.";"";"";"2014-09-22 20:43:38";"664251" +"H2020-EU.3.1.7.6.";"en";"H2020-EU.3.1.7.6.";"";"";"Psychiatric diseases";"";"";"";"H2020";"H2020-EU.3.1.7.";"";"";"2014-09-22 21:40:49";"665361" +"H2020-Euratom-1.4.";"en";"H2020-Euratom-1.4.";"";"";"Foster radiation protection";"";"";"";"H2020";"H2020-Euratom-1.";"";"";"2014-09-22 20:52:18";"664525" +"H2020-Euratom-1.6.";"en";"H2020-Euratom-1.6.";"";"";"Lay the foundations for future fusion power plants by developing materials, technologies and conceptual design";"";"";"";"H2020";"H2020-Euratom-1.";"";"";"2014-09-22 20:52:25";"664529" +"H2020-EU.3.5.6.2.";"en";"H2020-EU.3.5.6.2.";"";"";"Providing for a better understanding on how communities perceive and respond to climate change and seismic and volcanic hazards";"";"";"";"H2020";"H2020-EU.3.5.6.";"";"";"2014-09-22 20:49:24";"664433" +"H2020-EU.2.1.4.3.";"en";"H2020-EU.2.1.4.3.";"";"";"Innovative and competitive platform technologies";"Innovative and competitive platform technologies";"

Innovative and competitive platform technologies

Development of platform technologies (e.g. genomics, meta-genomics, proteomics, metabolomics, molecular tools, expression systems, phenotyping platforms and cell-based platforms) to enhance leadership and competitive advantage in a wide number of sectors that have economic impacts.";"";"H2020";"H2020-EU.2.1.4.";"";"";"2014-09-22 20:41:55";"664195" +"H2020-EU.1.4.3.1.";"en";"H2020-EU.1.4.3.1.";"";"";"Reinforcing European policy for research infrastructures";"";"";"";"H2020";"H2020-EU.1.4.3.";"";"";"2014-09-22 20:40:15";"664139" +"H2020-EU.3.5.4.2.";"en";"H2020-EU.3.5.4.2.";"";"";"Support innovative policies and societal changes";"";"";"";"H2020";"H2020-EU.3.5.4.";"";"";"2014-09-22 20:49:02";"664421" +"H2020-EU.2.1.3.4.";"en";"H2020-EU.2.1.3.4.";"";"";"Materials for a sustainable, resource-efficient and low-emission industry";"Materials for a resource-efficient and low-emission industry";"

Materials for a sustainable, resource-efficient and low emission industry

Developing new products and applications, business models and responsible consumer behaviour that reduce energy demand and facilitate low-carbon production.";"";"H2020";"H2020-EU.2.1.3.";"";"";"2014-09-22 20:41:30";"664181" +"H2020-EU.3.2.4.3.";"en";"H2020-EU.3.2.4.3.";"";"";"Supporting market development for bio-based products and processes";"";"";"";"H2020";"H2020-EU.3.2.4.";"";"";"2014-09-22 20:45:36";"664313" +"H2020";"en";"H2020";"";"";"H2020";"";"";"";"H2020";"";"";"";"2014-09-22 17:20:57";"664086" +"H2020-EU.3.2.5.1.";"en";"H2020-EU.3.2.5.1.";"";"";"Climate change impact on marine ecosystems and maritime economy";"";"";"";"H2020";"H2020-EU.3.2.5.";"";"";"2014-09-22 20:45:43";"664315" +"H2020-EU.3.5.6.";"it";"H2020-EU.3.5.6.";"";"";"Patrimonio culturale";"Cultural heritage";"

Patrimonio culturale

L'obiettivo è la ricerca sulle strategie, le metodologie e gli strumenti necessari per garantire un patrimonio culturale dinamico e sostenibile per l'Europa in risposta al cambiamento climatico. Il patrimonio culturale nelle sue varie forme fisiche offre il contesto per la vita di comunità resilienti che rispondono a cambiamenti multivariati. La ricerca nell'ambito del patrimonio culturale richiede un approccio pluridisciplinare per migliorare la comprensione del materiale storico. Le attività si concentrano sull'individuazione di livelli di resilienza mediante osservazioni, monitoraggio e modellazione e permettono una migliore comprensione del modo in cui le comunità percepiscono il cambiamento climatico e i rischi sismici e vulcanici e reagiscono a essi.";"";"H2020";"H2020-EU.3.5.";"";"";"2014-09-22 20:49:17";"664429" +"H2020-EU.3.5.6.";"fr";"H2020-EU.3.5.6.";"";"";"Patrimoine culturel";"Cultural heritage";"

Patrimoine culturel

L'objectif est d'étudier les stratégies, les méthodologies et les outils nécessaires pour disposer d'un patrimoine culturel dynamique et durable en Europe face au changement climatique. Le patrimoine culturel sous ses diverses formes physiques constitue le cadre de vie de communautés résilientes qui réagissent aux changements multiples et variés. La recherche portant sur le patrimoine culturel nécessite une approche pluridisciplinaire pour améliorer la compréhension du matériel historique. Les activités viseront à déterminer les niveaux de résilience au moyen d'observations, d'une surveillance et d'une modélisation et à mieux comprendre la manière dont les communautés perçoivent le changement climatique, les risques sismiques et volcaniques, et la manière dont elles réagissent.";"";"H2020";"H2020-EU.3.5.";"";"";"2014-09-22 20:49:17";"664429" +"H2020-EU.3.5.6.";"de";"H2020-EU.3.5.6.";"";"";"Kulturerbe";"Cultural heritage";"

Kulturerbe

Ziel sind Forschungsarbeiten zu den Strategien, Methoden und Instrumenten, die erforderlich sind, um als Reaktion auf den Klimawandel ein dynamisches und nachhaltiges Kulturerbe in Europa zu ermöglichen. Das Kulturerbe bildet in seinen unterschiedlichen Erscheinungsformen die Existenzgrundlage der heutigen widerstandsfähigen Gemeinschaften, die mit vielfältigen Veränderungen fertig werden können. Für die Forschung über das Kulturerbe ist ein multidisziplinäres Konzept erforderlich, damit das historische Material besser verstanden werden kann. Den Schwerpunkt der Tätigkeiten bildet die Ermittlung der unterschiedlichen Ausprägungen der Widerstandsfähigkeit mittels Beobachtung, systematischer Erfassung und Modellbildung sowie die Klärung der Zusammenhänge, wie Gemeinschaften den Klimawandel, Erdbeben und Vulkanausbrüche wahrnehmen und darauf reagieren.";"";"H2020";"H2020-EU.3.5.";"";"";"2014-09-22 20:49:17";"664429" +"H2020-EU.3.5.6.";"pl";"H2020-EU.3.5.6.";"";"";"Dziedzictwo kulturowe";"Cultural heritage";"

Dziedzictwo kulturowe

Celem jest badanie strategii, metod i narzędzi niezbędnych do wykorzystania dynamicznego i zrównoważonego dziedzictwa kulturowego w Europie w odpowiedzi na zmianę klimatu. Dziedzictwo kulturowe w różnorodnych postaciach fizycznych stanowi środowisko, w jakim żyją odporne społeczności reagujące na wielorakie zmiany. Badania nad dziedzictwem kulturowym wymagają podejścia multidyscyplinarnego, sprzyjającego lepszemu zrozumieniu materiałów historycznych. Działania mają skupiać się na określeniu poziomów odporności w drodze obserwacji, monitorowania i tworzenia modeli, a także na umożliwieniu lepszego zrozumienia, jak społeczności postrzegają zmianę klimatu oraz zagrożenia sejsmiczno-wulkaniczne i jak na nie reagują. ";"";"H2020";"H2020-EU.3.5.";"";"";"2014-09-22 20:49:17";"664429" +"H2020-EU.2.1.6.4.";"pl";"H2020-EU.2.1.6.4.";"";"";"Umożliwienie prowadzenia europejskich badań naukowych wspierających międzynarodowe partnerstwa w dziedzinie przestrzeni kosmicznej";"Research in support of international space partnerships";"

Umożliwienie prowadzenia europejskich badań naukowych wspierających międzynarodowe partnerstwa w dziedzinie przestrzeni kosmicznej

Przedsięwzięcia kosmiczne mają zasadniczo globalny charakter. Jest to szczególnie wyraźne w przypadku takich operacji, jak orientacja sytuacyjna w przestrzeni kosmicznej oraz wiele kosmicznych misji naukowych i eksploracyjnych. Przełomowe technologie kosmiczne w coraz większym stopniu opracowywane są w ramach takich partnerstw międzynarodowych. Zapewnienie dostępu do nich stanowi ważny czynnik decydujący o powodzeniu europejskich naukowców i przemysłu. Kluczem do osiągnięcia tego celu jest określenie i wykonanie długoterminowych planów działań oraz koordynacja z partnerami międzynarodowymi.";"";"H2020";"H2020-EU.2.1.6.";"";"";"2014-09-22 20:42:32";"664215" +"H2020-EU.3.5.6.";"es";"H2020-EU.3.5.6.";"";"";"Patrimonio cultural";"Cultural heritage";"

Patrimonio cultural

El objetivo es investigar las estrategias, metodologías e instrumentos necesarios para posibilitar un patrimonio cultural dinámico y sostenible en Europa en respuesta al cambio climático. El patrimonio cultural en sus diversas formas materiales constituye el contexto de vida de unas comunidades resilientes que respondan a cambios multivariables. La investigación en el ámbito del patrimonio cultural exige un planteamiento pluridisciplinar que mejore la comprensión del material histórico. Las actividades se centrarán en definir niveles de resistencia mediante observaciones, vigilancia y modelización, y en facilitar una mejor comprensión de la manera en que las comunidades perciben el cambio climático y los riesgos sísmicos y volcánicos y responden a ellos.";"";"H2020";"H2020-EU.3.5.";"";"";"2014-09-22 20:49:17";"664429" +"H2020-EU.2.1.6.4.";"fr";"H2020-EU.2.1.6.4.";"";"";"Promouvoir la recherche européenne pour soutenir les partenariats internationaux dans le domaine spatial";"Research in support of international space partnerships";"

Promouvoir la recherche européenne pour soutenir les partenariats internationaux dans le domaine spatial

Les entreprises liées à l'espace ont un caractère fondamentalement mondial. C'est particulièrement manifeste dans le cas d'activités telles que le dispositif de surveillance de l'espace (SSA), ainsi que de nombreux projets scientifiques et d'exploration dans le domaine spatial. De plus en plus, le développement des technologies de pointe dans le secteur spatial a lieu dans le cadre de tels partenariats internationaux. Une participation à de tels partenariats constitue pour les chercheurs européens et les entreprises européennes un important facteur de succès. L'élaboration et la mise en œuvre de feuilles de route à long terme, ainsi que la coordination avec des partenaires au niveau international, sont autant de paramètres fondamentaux pour que cet objectif soit réalisé.";"";"H2020";"H2020-EU.2.1.6.";"";"";"2014-09-22 20:42:32";"664215" +"H2020-EU.2.1.6.4.";"it";"H2020-EU.2.1.6.4.";"";"";"Promuovere la ricerca europea per sostenere partenariati internazionali nel settore dello spazio";"Research in support of international space partnerships";"

Promuovere la ricerca europea per sostenere partenariati internazionali nel settore dello spazio

Le imprese spaziali hanno una natura intrinsecamente globale. Questo è particolarmente evidente per attività quale il sistema di sorveglianza dell'ambiente spaziale (Space Situational Awareness, SSA) e molti progetti di scienze ed esplorazione spaziali. Lo sviluppo di una tecnologia spaziale di punta avviene sempre più nell'ambito di partenariati di tipo internazionale. Garantire l'accesso a queste iniziative rappresenta un importante fattore di successo per l'industria e i ricercatori europei. La definizione e l'attuazione di tabelle di marcia a lungo termine e il coordinamento con i partner internazionali sono fondamentali per il conseguimento di tale obiettivo.";"";"H2020";"H2020-EU.2.1.6.";"";"";"2014-09-22 20:42:32";"664215" +"H2020-EU.2.1.6.4.";"de";"H2020-EU.2.1.6.4.";"";"";"Beitrag der europäischen Forschung zu internationalen Weltraumpartnerschaften";"Research in support of international space partnerships";"

Beitrag der europäischen Forschung zu internationalen Weltraumpartnerschaften

Weltraumunternehmungen haben einen grundlegend globalen Charakter Dies wird insbesondere bei Tätigkeiten wie der Weltraumlageerfassung und bei vielen Projekten der Weltraumwissenschaft und Weltraumerkundung deutlich. Die Entwicklung modernster Weltraumtechnologien findet zunehmend innerhalb solcher internationaler Partnerschaften statt. Für die europäische Forschung und Industrie wäre es ein wichtiger Erfolgsfaktor, sich den Zugang zu diesen Partnerschaften zu sichern. Die Festlegung und Umsetzung von langfristig angelegten Fahrplänen und die Abstimmung mit den Partnern auf internationaler Ebene sind wesentlich für die Verwirklichung dieses Ziels.";"";"H2020";"H2020-EU.2.1.6.";"";"";"2014-09-22 20:42:32";"664215" +"H2020-EU.2.1.6.4.";"es";"H2020-EU.2.1.6.4.";"";"";"Favorecer la investigación europea de apoyo a las asociaciones espaciales internacionales";"Research in support of international space partnerships";"

Favorecer la investigación europea de apoyo a las asociaciones espaciales internacionales

La empresa del espacio tiene un carácter fundamentalmente planetario. Esto es especialmente obvio en el caso de actividades como el Conocimiento del Medio Espacial y muchos proyectos de ciencia y exploración del espacio. El desarrollo de una tecnología espacial de vanguardia se está produciendo cada vez en mayor medida dentro de estas asociaciones internacionales. Garantizar el acceso a ellas constituye un factor de éxito importante para los investigadores y la industria europeos. La definición y utilización de hojas de ruta a largo plazo y la coordinación con los socios internacionales resultan fundamentales para este objetivo.";"";"H2020";"H2020-EU.2.1.6.";"";"";"2014-09-22 20:42:32";"664215" +"H2020-EU.3.2.2.1.";"en";"H2020-EU.3.2.2.1.";"";"";"Informed consumer choices";"";"";"";"H2020";"H2020-EU.3.2.2.";"";"";"2014-09-22 20:45:00";"664295" +"H2020-EU.3.4.6.1.";"en";"H2020-EU.3.4.6.1.";"";"";"Reduce the production cost of fuel cell systems to be used in transport applications, while increasing their lifetime to levels which can compete with conventional technologies";"";"";"";"H2020";"H2020-EU.3.4.6.";"";"";"2014-09-22 21:40:18";"665343" +"H2020-EU.3.4.8.6.";"en";"H2020-EU.3.4.8.6.";"";"";"Cross-cutting themes and activities (CCA)";"";"";"";"H2020";"H2020-EU.3.4.8.";"";"";"2016-10-19 15:23:03";"700201" +"H2020-EU.3.5.6.";"en";"H2020-EU.3.5.6.";"";"";"Cultural heritage";"Cultural heritage";"

Cultural heritage

The aim is to research into the strategies, methodologies and tools needed to enable a dynamic and sustainable cultural heritage in Europe in response to climate change. Cultural heritage in its diverse physical forms provides the living context for resilient communities responding to multivariate changes. Research in cultural heritage requires a multidisciplinary approach to improve the understanding of historical material. Activities shall focus on identifying resilience levels through observations, monitoring and modelling as well as provide for a better understanding on how communities perceive and respond to climate change and seismic and volcanic hazards.";"";"H2020";"H2020-EU.3.5.";"";"";"2014-09-22 20:49:17";"664429" +"H2020-EU.5.c.";"en";"H2020-EU.5.c.";"";"";"Integrate society in science and innovation issues, policies and activities in order to integrate citizens' interests and values and to increase the quality, relevance, social acceptability and sustainability of research and innovation outcomes in various fields of activity from social innovation to areas such as biotechnology and nanotechnology";"";"";"";"H2020";"H2020-EU.5.";"";"";"2015-01-23 18:42:15";"664501" +"H2020-EU.3.3.4.";"fr";"H2020-EU.3.3.4.";"";"";"Un réseau électrique européen unique et intelligent";"A single, smart European electricity grid";"

Un réseau électrique européen unique et intelligent

Les activités se concentrent sur la recherche, le développement et la démonstration en grandeur réelle de nouvelles technologies de réseau énergétique intelligent, de technologies d'appoint et de compensation permettant une plus grande souplesse et une plus grande efficacité, notamment des centrales électriques classiques, de systèmes souples de stockage de l'énergie et des modèles de marché devant permettre de planifier, surveiller, contrôler et exploiter en toute sécurité des réseaux interopérables, y compris en ce qui concerne les questions de normalisation, sur un marché ouvert, compétitif, décarboné, respectueux de l'environnement et capable de s'adapter au changement climatique, aussi bien dans des conditions normales qu'en situation d'urgence.";"";"H2020";"H2020-EU.3.3.";"";"";"2014-09-22 20:46:45";"664349" +"H2020-EU.3.3.4.";"es";"H2020-EU.3.3.4.";"";"";"Una red eléctrica europea única e inteligente";"A single, smart European electricity grid";"

Una red eléctrica europea única e inteligente

Las actividades se centrarán en la investigación, desarrollo y demostración a escala real de nuevas tecnologías de red energética inteligente, de tecnologías de apoyo y de compensación que permiten una mayor flexibilidad y eficiencia, incluidas las centrales eléctricas tradicionales el almacenamiento flexible de energía, los sistemas y los diseños de mercado para planificar, supervisar, controlar y explotar con seguridad las redes interoperables incluidos aspectos de normalización, en un mercado abierto, descarbonizado, medioambientalmente sostenible y resistente al cambio climático y competitivo, en condiciones normales y de emergencia.";"";"H2020";"H2020-EU.3.3.";"";"";"2014-09-22 20:46:45";"664349" +"H2020-EU.3.3.4.";"de";"H2020-EU.3.3.4.";"";"";"Ein intelligentes europäisches Stromverbundnetz ";"A single, smart European electricity grid";"

Ein intelligentes europäisches Stromverbundnetz

Schwerpunkt der Tätigkeiten sind Forschung, Entwicklung und vollmaßstäbliche Demonstration mit Blick auf intelligente neue Energienetztechnologien, Reserve- und Ausgleichstechnologien für mehr Flexibilität und Effizienz, einschließlich konventioneller Kraftwerke, flexible Energiespeicherung, Systeme und Marktkonzepte für die Planung, Überwachung, Kontrolle und den sicheren Betrieb interoperabler Netze unter normalen Bedingungen und im Notfall – unter Einbeziehung von Normungsaspekten – auf einem offenen, ökologisch nachhaltigen und wettbewerbsfähigen Markt mit niedrigen CO2-Emissionen, der gegen den Klimawandel gewappnet ist.";"";"H2020";"H2020-EU.3.3.";"";"";"2014-09-22 20:46:45";"664349" +"H2020-EU.3.3.4.";"it";"H2020-EU.3.3.4.";"";"";"Un'unica rete elettrica europea intelligente";"A single, smart European electricity grid";"

Un'unica rete elettrica europea intelligente

Le attività si concentrano sulla ricerca, lo sviluppo e la dimostrazione su scala reale di nuove tecnologie energetiche intelligenti di rete, tecnologie di bilanciamento e back-up che consentano una maggiore flessibilità ed efficienza, tra cui centrali tradizionali, stoccaggio flessibile dell'energia, sistemi e configurazioni di mercato per pianificare, monitorare, controllare e gestire in condizioni di sicurezza le reti interoperabili, comprese le questioni relative alla regolamentazione, in un mercato aperto, decarbonizzato, sostenibile sul piano ambientale, competitivo e resiliente al profilo climatico, in condizioni normali e di emergenza.";"";"H2020";"H2020-EU.3.3.";"";"";"2014-09-22 20:46:45";"664349" +"H2020-EU.3.3.4.";"pl";"H2020-EU.3.3.4.";"";"";"Jednolita inteligentna europejska sieć elektroenergetyczna";"A single, smart European electricity grid";"

Jednolita inteligentna europejska sieć elektroenergetyczna

Działania mają skupiać się na badaniach, rozwoju i pełnoskalowej demonstracji nowych technologii inteligentnych sieci energetycznych, technologii zabezpieczania i równoważenia umożliwiających większą elastyczność i efektywność, takich jak m.in. konwencjonalne elektrownie, elastyczne magazynowanie energii, systemy i mechanizmy rynkowe służące planowaniu, monitorowaniu, kontrolowaniu i bezpiecznej eksploatacji interoperacyjnych sieci – wraz z kwestiami dotyczącymi normalizacji – w otwartym, niskoemisyjnym, zrównoważonym z punktu widzenia środowiska, odpornym na zmianę klimatu i konkurencyjnym rynku, w normalnych i nadzwyczajnych warunkach.";"";"H2020";"H2020-EU.3.3.";"";"";"2014-09-22 20:46:45";"664349" +"H2020-EU.3.5.";"es";"H2020-EU.3.5.";"";"";"RETOS DE LA SOCIEDAD - Acción por el clima, medio ambiente, eficiencia de los recursos y materias primas";"Climate and environment";"

RETOS DE LA SOCIEDAD - Acción por el clima, medio ambiente, eficiencia de los recursos y materias primas

Objetivo específico

El objetivo específico es lograr una economía y una sociedad más eficientes en el uso de los recursos -y del agua- y resistentes al cambio climático, la protección y gestión sostenible de los recursos y ecosistemas naturales y un abastecimiento y uso sostenible de materias primas, a fin de satisfacer las necesidades de una población mundial cada vez mayor dentro de los límites sostenibles de los recursos naturales y ecosistemas del planeta. Las actividades contribuirán a incrementar la competitividad de Europa, la seguridad del abastecimiento de materias primas y a mejorar el bienestar, al tiempo que garantizan la integridad del medio ambiente, la resistencia y la sostenibilidad con el objetivo de mantener el calentamiento mundial medio por debajo de 2 °C y permitir a los ecosistemas y a la sociedad adaptarse al cambio climático y otros cambios medioambientales.Durante el siglo XX, el mundo decuplicó tanto su uso de los combustibles fósiles como la extracción de recursos materiales. Esta era de recursos aparentemente abundantes y baratos está llegando a su fin. Las materias primas, el agua, el aire, la biodiversidad y los ecosistemas terrestres, acuáticos y marinos se ven sometidos a una gran presión. Muchos de los principales ecosistemas del mundo están degradados, utilizándose de forma insostenible hasta el 60 % de los servicios que prestan. En la Unión, se utilizan unas 16 toneladas de materiales por persona y año, 6 de las cuales se convierten en residuos, la mitad de los cuales acaba en vertederos. La demanda mundial de recursos sigue incrementándose al aumentar la población y sus aspiraciones, en particular las de la clase media en las economías emergentes. Es preciso disociar absolutamente el crecimiento económico del uso de recursos.La temperatura media de la superficie de la Tierra aumentó en 0,8 °C, aproximadamente, en los últimos 100 años, y se prevé que aumente entre 1,8 y 4 °C para finales del siglo XXI (con respecto a la media 1980-1999). Los impactos probables sobre los sistemas naturales y humanos asociados a estos cambios plantean un reto al planeta y a su capacidad de adaptación, aparte de poner en peligro el futuro desarrollo económico y el bienestar de la humanidad.Las crecientes repercusiones del cambio climático y de los problemas ambientales, como la acidificación de los océanos, los cambios en la circulación oceánica, el incremento de la temperatura de las aguas marinas, la fusión del hielo en el Ártico y la reducción de la salinidad de las aguas marinas, la degradación y el uso del suelo, la escasez de agua, las anomalías hidrológicas, la heterogeneidad espacial y temporal de las precipitaciones, los cambios en la distribución espacial de las especies, la contaminación química, la sobreexplotación de recursos y la pérdida de biodiversidad, indican que el planeta se está acercando a los límites de su sostenibilidad. Por ejemplo, sin mejoras de la eficiencia en todos los sectores, inclusive mediante sistemas hidrológicos innovadores, se prevé que la demanda de agua exceda de la oferta en un 40 % de aquí a veinte años, lo que llevará a severas limitaciones y escasez de agua. Los bosques están desapareciendo al alarmante ritmo de 5 millones de hectáreas al año. Las interacciones entre los recursos pueden provocar riesgos sistémicos, si el agotamiento de un recurso genera un punto de inflexión irreversible para otros recursos y ecosistemas. Basándose en las tendencias actuales, para 2050 hará falta el equivalente de más de dos planetas Tierra para sostener la creciente población mundial.El abastecimiento sostenible y la gestión eficiente de las materias primas, incluyendo la exploración, extracción, transformación, reutilización, reciclado y sustitución, son esenciales para el funcionamiento de las sociedades modernas y sus economías. Sectores europeos como la construcción, las industrias química, automovilística, aeroespacial, de maquinaria y equipos, que aportan un valor añadido total de 1,3 billones de euros y dan empleo a aproximadamente 30 millones de personas, dependen enormemente del acceso a las materias primas. Sin embargo, el suministro de materias primas a la Unión está sometido a una presión creciente. Además, la Unión depende en gran medida de las importaciones de materias primas de importancia estratégica, que se ven afectadas por las distorsiones de mercado a un ritmo alarmante.Por otra parte, la Unión todavía cuenta con valiosos depósitos minerales, cuya exploración, extracción y transformación se ven limitadas por la falta de tecnologías adecuadas y una inadecuada gestión del ciclo del agua por la ausencia de inversiones y obstaculizadas por una competencia mundial cada vez mayor. Dada la importancia de las materias primas para la competitividad europea, la economía y su aplicación en productos innovadores, el suministro sostenible y la gestión eficiente de las materias primas constituye una prioridad vital para la Unión.La capacidad de la economía para adaptarse y hacerse más resistente al cambio climático y más eficiente en el uso de los recursos, al tiempo que sigue siendo competitiva, depende de unos niveles elevados de ecoinnovación, de carácter tanto social como económico, organizativo y tecnológico. Con un mercado mundial cuyo valor se aproxima a los mil millones de euros anuales y cuyo crecimiento está previsto se triplique para 2030, la ecoinnovación brinda una gran oportunidad para impulsar la competitividad y la creación de empleo en las economías europeas.

Justificación y valor añadido de la Unión

Para satisfacer los objetivos de la Unión e internacionales en materia de emisiones y concentraciones de gases de efecto invernadero y encajar los impactos del cambio climático, es necesario una transición hacia una sociedad de baja emisión de carbono y desarrollar y desplegar tecnologías rentables y soluciones tecnológicas y no tecnológicas sostenibles, así como tomar medidas de mitigación y adaptación y entender mejor las respuestas sociales a estos retos. Los marcos políticos mundial y de la Unión deberán garantizar que los ecosistemas y la biodiversidad sean protegidos, valorados y restaurados adecuadamente a fin de preservar su capacidad para proporcionar recursos y servicios en el futuro. Deben abordarse los retos que plantea la escasez de agua en los medios rurales, urbanos e industriales con el fin de promover sistemas hidrológicos innovadores y la eficiencia en la utilización de recursos, así como proteger los ecosistemas acuáticos. La investigación y la innovación pueden ayudar a garantizar un acceso a las materias primas en tierra y en el fondo marino y una explotación fiables y sostenibles y garantizar una reducción significativa del uso y el derroche de recursos.El propósito de las acciones de la Unión será, por tanto, el apoyo a los objetivos y políticas clave de la Unión que cubran el ciclo completo de innovación y los elementos del triángulo del conocimiento, incluidos: la Estrategia Europa 2020; las iniciativas emblemáticas ""Unión por la innovación"", ""Una política industrial para la era de la mundialización"", ""Agenda digital para Europa"" y ""Una Europa que utilice eficazmente los recursos"" y la correspondiente hoja de ruta; la Hoja de ruta hacia una economía hipocarbónica competitiva en 2050; ""Adaptación al cambio climático: Hacia un marco europeo de actuación""; Iniciativa sobre Materias Primas; Estrategia de la Unión a favor del desarrollo sostenible; Política marítima integrada para la Unión; Directiva marco sobre la estrategia marina; la Directiva marco sobre el agua y sus directivas derivadas; la Directiva sobre riesgos de inundación; el Plan de acción para la innovación ecológica; y Agenda Digital para Europa y el Programa General de Medio Ambiente de la Unión hasta 2020. Estas acciones, en su caso, servirán de interfaz con las Cooperaciones de Innovación Europea y las Iniciativas de Programación Conjunta. Asimismo reforzarán la capacidad de resistencia de la sociedad ante el cambio climático y ambiental y garantizarán la disponibilidad de materias primas.Dados el carácter transnacional y la naturaleza mundial del clima y del medio ambiente, su escala y complejidad, y la dimensión internacional de la cadena de suministro de materias primas, las actividades han de llevarse a cabo a nivel de la Unión y fuera de ella. El carácter multidisciplinario de la investigación necesaria exige agrupar los conocimientos y recursos complementarios para afrontar eficazmente este reto de manera sostenible. Para reducir el uso de recursos y el impacto ambiental, aumentando al mismo tiempo la competitividad, se requerirá una transición social y tecnológica decisiva hacia una economía basada en una relación sostenible entre la naturaleza y el bienestar humano. Las actividades coordinadas de investigación e innovación mejorarán la comprensión y previsión del cambio climático y ambiental en una perspectiva intersectorial y sistémica, reducirán las incertidumbres, detectarán y evaluarán los puntos vulnerables, riesgos, costes y oportunidades, y ampliarán y mejorarán la eficacia de las soluciones y respuestas sociales y políticas. Las acciones estarán encaminadas asimismo a mejorar la disponibilidad y difusión de la investigación y la innovación para apoyar la elaboración de políticas y capacitar a las partes interesadas de todos los niveles de la sociedad a participar activamente en este proceso.Abordar el uso sostenible y la disponibilidad de materias primas exige la coordinación de los esfuerzos de investigación e innovación en numerosas disciplinas y sectores para contribuir a conseguir soluciones seguras, económicamente viables, ambientalmente racionales y socialmente aceptables a lo largo de toda la cadena de valor (exploración, extracción, diseño, transformación, reutilización, reciclado y sustitución). La innovación en esos campos ofrecerá oportunidades para el crecimiento y el empleo, así como opciones innovadoras que pongan en juego la ciencia, la tecnología, la economía, la sociedad, la política y la gobernanza. Por estas razones se han emprendido las denominadas cooperaciones de Innovación Europea sobre las materias primas y sobre el agua.La ecoinnovación responsable puede proporcionar nuevas y valiosas oportunidades de crecimiento y empleo. Las soluciones aportadas mediante acciones a nivel de la Unión contrarrestarán las amenazas principales para la competitividad industrial y permitirán una rápida absorción y reproducción en el mercado único y fuera de él. De este modo será posible una transición hacia una economía ""verde"" que tenga en cuenta el uso sostenible de los recursos. Entre los socios para este planteamiento figurarán: responsables políticos nacionales, europeos e internacionales; programas de investigación e innovación de los Estados miembros e internacionales; empresas e industrias europeas; Agencia Europea de Medio Ambiente y las agencias de medio ambiente nacionales; y otras partes interesadas pertinentes.Además de la cooperación bilateral y regional, las acciones a nivel de la Unión también respaldarán los esfuerzos e iniciativas internacionales pertinentes, incluido el Grupo Intergubernamental de Expertos sobre el Cambio Climático (IPCC), la Plataforma Intergubernamental sobre Diversidad Biológica y Servicios de los Ecosistemas (IPBES) y el Grupo de Observación de la Tierra (GEO).

Líneas generales de las actividades

(a) Lucha contra el cambio climático y adaptación al mismo

El objetivo es desarrollar y evaluar medidas y estrategias de adaptación y mitigación innovadoras, rentables y sostenibles, referidas tanto al CO2 como a otros gases de efecto invernadero y aerosoles, que propongan soluciones ""verdes"" tanto tecnológicas como no tecnológicas, mediante la generación de datos para actuar con prontitud, eficacia y conocimiento de causa y poner en red las competencias necesarias. Las actividades se centrarán en: mejorar la comprensión del cambio climático y los riesgos asociados con los fenómenos extremos y los cambios abruptos relacionados con el clima con el fin de proporcionar proyecciones climáticas fiables; evaluar los impactos a escala mundial, regional y local y puntos vulnerables y elaborar medidas rentables e innovadoras de adaptación, y de prevención y gestión del riesgo; respaldar las políticas y estrategias de mitigación, incluidos los estudios que se centran en el impacto de otras políticas sectoriales.

(b) Protección del medio ambiente, gestión sostenible de los recursos naturales, el agua, la biodiversidad y los ecosistemas

El objetivo es aportar conocimientos e instrumentos para una gestión y protección de los recursos naturales que consiga un equilibrio sostenible entre los recursos limitados y las necesidades actuales y futuras de la sociedad y la economía. Las actividades se centrarán en: desarrollar nuestra comprensión de la biodiversidad y del funcionamiento de los ecosistemas, sus interacciones con los sistemas sociales y su función en el mantenimiento de la economía y el bienestar humano; impulsar planteamientos integrados para abordar los retos relacionados con el agua y la transición a hacia una gestión y uso sostenibles de los recursos y servicios hídricos, y aportar conocimientos y herramientas para la toma de decisiones efectiva y el compromiso público.

(c) Garantía de un abastecimiento sostenible de materias primas no agrícolas y no energéticas

El objetivo es mejorar la base de conocimientos sobre las materias primas y buscar soluciones innovadoras para la exploración, extracción, tratamiento, utilización, reutilización, reciclado y recuperación de materias primas de forma rentable, eficiente en la utilización de recursos y respetuosa del medio ambiente, y para su sustitución por alternativas económicamente atractivas y ecológicamente sostenibles de menor impacto ambiental inclusive sistemas y procesos de circuito cerrado. Las actividades se centrarán en: mejorar la base de conocimientos sobre la disponibilidad de materias primas; promover el abastecimiento sostenible y eficiente, la utilización y reutilización de materias primas, incluidos los recursos minerales, de la tierra y del mar; encontrar alternativas a las materias primas críticas; y mejorar la concienciación social y la capacitación en el área de las materias primas.

(d) Posibilitar la transición hacia una economía y una sociedad ""verdes"" a través de la ecoinnovación

El objetivo es promover todas las formas de ecoinnovación que hagan posible la transición a una economía ecológica. Las actividades aprovecharán e impulsarán, entre otras, las emprendidas en el Programa de ecoinnovación y se centrarán en: reforzar las tecnologías, procesos, servicios y productos ecoinnovadores, incluida la exploración de modos de reducir las cantidades de materias primas en la producción y el consumo, y la superación de las barreras en este contexto, e impulsar su absorción por el mercado y su renovación, prestando especial atención a las PYME; apoyar los cambios sociales, los modelos económicos sostenibles y las políticas innovadoras; medir y evaluar los progresos hacia una economía ecológica; y fomentar la eficiencia en el mar de los recursos a través de sistemas digitales.

(e) Desarrollo de sistemas completos y duraderos de observación e información sobre el medio ambiente mundial

El objetivo es garantizar la disponibilidad de los datos y la información de largo plazo necesarios para afrontar este reto. Las actividades se centrarán en las capacidades, tecnologías e infraestructuras de datos en materia de observación y vigilancia de la Tierra, tanto a través de sensores a distancia como de mediciones sobre el terreno, que pueden ofrecer continuamente información exacta y puntual, sobre la que se puedan elaborar previsiones y proyecciones. Se fomentará un acceso libre, abierto y sin trabas a la información y los datos interoperables. Las actividades contribuirán a definir futuras actividades operativas del Programa Europeo de Vigilancia de la Tierra (Copernicus) y a impulsar el uso de los datos de Copernicus para las actividades de investigación.

(f) Patrimonio cultural

El objetivo es investigar las estrategias, metodologías e instrumentos necesarios para posibilitar un patrimonio cultural dinámico y sostenible en Europa en respuesta al cambio climático. El patrimonio cultural en sus diversas formas materiales constituye el contexto de vida de unas comunidades resilientes que respondan a cambios multivariables. La investigación en el ámbito del patrimonio cultural exige un planteamiento pluridisciplinar que mejore la comprensión del material histórico. Las actividades se centrarán en definir niveles de resistencia mediante observaciones, vigilancia y modelización, y en facilitar una mejor comprensión de la manera en que las comunidades perciben el cambio climático y los riesgos sísmicos y volcánicos y responden a ellos.";"";"H2020";"H2020-EU.3.";"";"";"2014-09-22 20:48:01";"664389" +"H2020-EU.3.5.";"fr";"H2020-EU.3.5.";"";"";"DÉFIS DE SOCIÉTÉ - Action pour le climat, environnement, utilisation efficace des ressources et matières premières";"Climate and environment";"

DÉFIS DE SOCIÉTÉ - Action pour le climat, environnement, utilisation efficace des ressources et matières premières

Objectif spécifique

L'objectif spécifique est de parvenir à une économie et une société économes en ressources - et en eau - et résistantes vis-à-vis du changement climatique, à la protection et à la gestion durable des ressources naturelles et des écosystèmes ainsi qu'à un approvisionnement durable en matières premières et à une utilisation durable de celles-ci, afin de répondre aux besoins d'une population mondiale en expansion, dans les limites d'une exploitation durable des ressources naturelles et des écosystèmes de notre planète. Les activités contribueront à accroître la compétitivité européenne et la sécurité de l'approvisionnement en matières premières et à améliorer le bien-être, tout en assurant l'intégrité, la résilience et la viabilité environnementales, l'objectif étant de maintenir le réchauffement planétaire moyen au-dessous de 2° C et de permettre aux écosystèmes et à la société de s'adapter au changement climatique et à d'autres modifications environnementales.Au cours du XXe siècle, l'utilisation des combustibles fossiles et l'extraction des matières premières dans le monde ont été multipliées par dix. Cette ère où les ressources semblaient abondantes et bon marché touche à sa fin. Les matières premières, l'eau, l'air, la biodiversité et les écosystèmes terrestres, aquatiques et marins sont tous soumis à d'intenses pressions. Nombre des principaux écosystèmes de notre planète subissent des déprédations; jusqu'à 60 % des services qu'ils fournissent sont utilisés de manière non durable. Quelque 16 tonnes de matériaux sont utilisées par personne et par an au sein de l'Union, dont 6 tonnes sont gaspillées, la moitié étant mise en décharge. La demande mondiale de ressources continue de croître, parallèlement à l'augmentation de la population et à l'élévation des aspirations individuelles, notamment au sein des classes moyennes des économies émergentes. Il est nécessaire de découpler la croissance économique et l'utilisation des ressources.La température moyenne de la surface de la Terre a augmenté d'environ 0,8 degré au cours des cent dernières années et devrait augmenter de 1,8 à 4 degrés d'ici la fin du XXIe siècle (par rapport à la moyenne 1980-1999). Les impacts probables de ces changements sur les systèmes naturels et humains mettront au défi la planète et sa capacité d'adaptation et hypothéqueront le développement économique futur et le bien-être de l'humanité.Les effets de plus en plus marqués du changement climatique et des problèmes environnementaux, tels que l'acidification des océans, les modifications de la circulation océanique, l'augmentation de la température de l'eau de mer, la fonte des glaces en Arctique et la diminution de la salinité de l'eau de mer, la dégradation et l'utilisation des sols, la diminution de la fertilité des sols, les pénuries d'eau, les sécheresses et les inondations, les risques sismiques et volcaniques, les modifications dans la répartition géographique des espèces, les pollutions chimiques, la surexploitation des ressources et la perte de biodiversité, indiquent que la planète approche de ses limites de durabilité. Sans amélioration sur le plan de l'efficacité dans tous les secteurs, y compris par des systèmes innovants de gestion de l'eau, la demande en eau devrait ainsi dépasser l'offre de 40 % d'ici 20 ans, ce qui se traduira par d'intenses pressions sur les réserves en eau et de graves pénuries d'eau. Les forêts disparaissent à un taux alarmant de 5 millions d'hectares par an. Les interactions entre les ressources peuvent provoquer des risques systémiques, la pénurie d'une ressource amenant, de manière irréversible, d'autres ressources et écosystèmes à un point de basculement. Sur la base des tendances actuelles, l'équivalent de plus de deux planètes Terre sera nécessaire d'ici 2050 pour satisfaire les besoins d'une population mondiale en pleine croissance.L'approvisionnement durable en matières premières et leur gestion économe, y compris sur le plan de la prospection, de l'extraction, de la transformation, de la réutilisation, du recyclage et du remplacement, sont essentiels au fonctionnement des sociétés modernes et de leurs économies. Les secteurs européens de la construction, de l'industrie chimique, de la fabrication automobile, de l'aéronautique et des machines et équipements, qui représentent ensemble une valeur ajoutée de quelque 1 300 milliards d'euros et emploient environ 30 millions de personnes, dépendent fortement de l'accès aux matières premières. L'approvisionnement de l'Union en matières premières est cependant soumis à une pression croissante. L'Union dépend en outre fortement de l'importation de matières premières d'importance stratégique, qui sont affectées à un taux alarmant par les distorsions du marché.Elle conserve par ailleurs de précieux gisements minéraux, dont la prospection, l'extraction et la transformation sont limitées par l'absence de technologies appropriées, par une gestion inadéquate du cycle des déchets et par un manque d'investissements et sont entravées par l'augmentation de la concurrence mondiale. Étant donné l'importance des matières premières pour la compétitivité européenne, pour l'économie et pour la fabrication de produits innovants, l'approvisionnement durable en matières premières et la gestion économe de ces dernières constituent une priorité fondamentale pour l'Union.La capacité de l'économie à s'adapter, à mieux résister au changement climatique et à devenir plus économe en ressources tout en restant compétitive nécessite un degré élevé d'éco-innovation, sur le plan sociétal, économique, organisationnel et technologique. Le marché mondial de l'éco-innovation représente quelque 1 000 milliards d'EUR annuellement et devrait voir sa valeur tripler d'ici 2030. L'éco-innovation représente donc une excellente occasion de promouvoir la compétitivité et la création d'emplois dans les économies d'Europe.

Justification et valeur ajoutée de l'Union

La réalisation des objectifs européens et internationaux en matière d'émissions et de concentrations de gaz à effet de serre et l'adaptation aux effets du changement climatique nécessitent une transition vers une société faiblement émettrice de carbone, le développement et le déploiement de solutions technologiques et non technologiques durables et économiquement rentables, la mise en œuvre de mesures d'atténuation et d'adaptation et une meilleure compréhension des réponses de la société à ces défis. Les cadres politiques européen et mondial doivent garantir que les écosystèmes et la biodiversité soient protégés, valorisés et correctement restaurés afin de préserver leur capacité future de fournir des ressources et des services. Il convient de faire face aux enjeux de la gestion de l'eau dans les environnements ruraux, urbains et industriels afin de promouvoir l'innovation et l'utilisation efficace des ressources dans le cycle de l'eau et de protéger les écosystèmes aquatiques. La recherche et l'innovation peuvent contribuer à assurer un accès fiable et durable aux matières premières et leur exploitation fiable et durable sur terre et au fond des mers et à réduire sensiblement l'utilisation et le gaspillage des ressources.Les actions de l'Union mettent donc l'accent sur le soutien aux objectifs et aux politiques clés de l'Union portant sur l'ensemble du cycle d'innovation et les éléments du triangle de la connaissance, parmi lesquels la stratégie Europe 2020; les initiatives phares «Une Union de l'innovation», «Une politique industrielle à l'ère de la mondialisation», «Une stratégie numérique pour l'Europe», ainsi que «Une Europe efficace dans l'utilisation des ressources» et la feuille de route correspondante; la feuille de route vers une économie compétitive à faible intensité de carbone à l'horizon 2050; le livre blanc «Adaptation au changement climatique: vers un cadre d'action européen»; l'initiative «Matières premières»; la stratégie de l'Union en faveur du développement durable; Une politique maritime intégrée pour l'Union; la directive-cadre «Stratégie pour le milieu marin»; la directive-cadre sur l'eau et les directives fondées sur celle-ci; la directive sur les inondations; le plan d'action en faveur de l'éco-innovation; et le programme d'action général de l'Union pour l'environnement à l'horizon 2020. Ces actions sont coordonnées, s'il y a lieu, avec les partenariats d'innovation européens correspondants et les initiatives de programmation conjointe pertinentes. Ces actions visent à renforcer la capacité de la société à mieux résister au changement climatique et environnemental et à garantir la disponibilité des matières premières.Étant donné la nature transnationale et mondiale du climat et de l'environnement, la portée et la complexité de ces thématiques et la dimension internationale de la chaîne d'approvisionnement en matières premières, il convient d'agir au niveau de l'Union et à un niveau supérieur. Le caractère pluridisciplinaire de la recherche à entreprendre nécessite une mise en commun des connaissances et des ressources complémentaires pour pouvoir relever efficacement ce défi de manière durable. Pour réduire l'utilisation des ressources et limiter les impacts environnementaux tout en renforçant la compétitivité, il conviendra d'engager résolument une transition sociétale et technologique vers une économie fondée sur une relation durable entre la nature et le bien-être humain. Des activités de recherche et d'innovation coordonnées permettront de mieux comprendre et anticiper le changement climatique et environnemental dans une perspective systémique et transsectorielle, de réduire les incertitudes, de répertorier et d'évaluer les vulnérabilités, les risques, les coûts et les possibilités, ainsi que d'élargir la portée et d'améliorer l'efficacité des réponses et des solutions sociétales et politiques. Les actions auront également pour objet d'améliorer les résultats en matière de recherche et d'innovation et leur diffusion pour soutenir le processus de décision et de donner aux différents acteurs, à tous les niveaux de la société, les moyens de prendre une part active à ce processus.Assurer la disponibilité des matières premières nécessite de coordonner les activités de recherche et d'innovation entre de nombreuses disciplines et de nombreux secteurs, pour contribuer à l'élaboration de solutions sûres, économiquement viables, respectueuses de l'environnement et socialement acceptables à tous les niveaux de la chaîne de valeur (prospection, extraction, transformation, conception, utilisation et réutilisation durables, recyclage et remplacement). L'innovation dans ces domaines offrira des possibilités de croissance et d'emplois, ainsi que des solutions innovantes faisant appel à des éléments scientifiques, technologiques, économiques, sociétaux, politiques et de gestion. Des partenariats d'innovation européens concernant l'eau et les matières premières ont été lancés pour ces raisons.L'éco-innovation responsable peut fournir de nouvelles possibilités intéressantes sur le plan de la croissance et de l'emploi. Les solutions élaborées dans un cadre européen permettront de faire face aux principales menaces pesant sur la compétitivité industrielle et d'assurer une adoption et une première application commerciale rapides de ces innovations, au sein du marché unique et au-delà. Le passage à une économie verte prenant en considération l'utilisation durable des ressources pourra dès lors être réalisé. Seront notamment associés à cette approche les décideurs politiques internationaux, européens et nationaux; les programmes de recherche et d'innovation internationaux et ceux des États membres; les entreprises et l'industrie européennes; l'Agence européenne pour l'environnement et les agences nationales de l'environnement, ainsi que d'autres parties prenantes.Outre la coopération bilatérale et régionale, les actions menées au niveau de l'Union soutiendront les démarches et initiatives internationales pertinentes, dont le Groupe d'experts intergouvernemental sur l'évolution du climat (GIEC), la plateforme intergouvernementale sur la biodiversité et les services écosystémiques (IPBES) et le Groupe sur l'observation de la Terre (GEO).

Grandes lignes des activités

(a) Combattre le changement climatique et s'y adapter

L'objectif est de définir et d'étudier des mesures et des stratégies d'adaptation et d'atténuation qui soient à la fois novatrices, économiquement avantageuses et durables concernant les gaz à effet de serre (CO2 et autres) et les aérosols, et qui viennent appuyer des solutions écologiques, technologiques ou non, grâce à la production de données utiles à l'adoption, en connaissance de cause, de mesures précoces et efficaces et grâce à la mise en réseau des compétences requises. Les activités viseront essentiellement à améliorer la compréhension du phénomène du changement climatique et des risques associés aux évènements extrêmes et aux changements brutaux liés au climat afin de fournir des projections fiables en la matière; à évaluer les impacts au niveau mondial, régional et local, ainsi que les vulnérabilités; à élaborer des mesures d'adaptation, de prévention et de gestion des risques novatrices et présentant un bon rapport coût-efficacité; et à soutenir les politiques et stratégies d'atténuation, y compris les études qui portent sur l'impact des autres politiques sectorielles.

(b) Protéger l'environnement, gérer les ressources naturelles, l'eau, la biodiversité et les écosystèmes de manière durable

L'objectif est de fournir des connaissances et outils qui permettront de gérer et protéger les ressources naturelles afin d'instaurer un équilibre durable entre des ressources limitées et les besoins actuels et futurs de la société et de l'économie. Les activités viseront essentiellement à approfondir notre compréhension de la biodiversité et du fonctionnement des écosystèmes, de leurs interactions avec les systèmes sociaux et de leur rôle dans la prospérité économique et le bien-être humain, à mettre au point des approches intégrées pour traiter les problèmes liés à l'eau et la transition vers une gestion et une utilisation durables des ressources et des services dans le domaine de l'eau ainsi qu'à apporter les connaissances et les outils nécessaires à une prise de décision efficace et à une implication du public.

(c) Garantir un approvisionnement durable en matières premières non énergétiques et non agricoles

L'objectif est de consolider la base de connaissances sur les matières premières et de mettre au point des solutions innovantes pour assurer la prospection, l'extraction, la transformation, l'utilisation, la réutilisation, le recyclage et la récupération des matières premières à moindre coût, dans le cadre d'une utilisation efficace des ressources et dans le respect de l'environnement, et pour remplacer ces matières premières par d'autres produits intéressants du point de vue économique, respectant les principes du développement durable et moins néfastes pour l'environnement, y compris des processus et des systèmes en circuit fermé. Les activités visent avant tout à améliorer la base de connaissances sur la disponibilité des matières premières, à promouvoir l'approvisionnement durable et efficace en matières premières ainsi que l'utilisation et la réutilisation durables et efficaces de ces dernières, y compris les ressources minérales, sur terre et en mer, à trouver des matières de remplacement pour les matières premières les plus importantes et à accroître la prise de conscience de la société et les compétences en ce qui concerne les matières premières.

(d) Garantir la transition vers une économie et une société «vertes» grâce à l'éco-innovation

L'objectif est de stimuler toutes les formes d'éco-innovation qui permettent une transition vers une économie verte. Les activités se fondent notamment sur celles menées dans le cadre du programme d'éco-innovation tout en les consolidant, et elles visent avant tout à renforcer les technologies, les procédés, les services et les produits éco-innovants, notamment à étudier les moyens de réduire les quantités de matières premières dans la production et la consommation, à surmonter les obstacles dans ce contexte, et à encourager leur adoption par le marché et leur reproduction, en accordant une attention particulière aux PME; à soutenir des politiques innovantes, des modèles économiques durables et des changements sociétaux; à mesurer et évaluer les progrès vers une économie verte; et à promouvoir une utilisation efficace des ressources grâce aux systèmes numériques.

(e) Développer des systèmes complets et soutenus d'observation et d'information à l'échelle mondiale en matière d'environnement

L'objectif est d'assurer la fourniture des données et des informations à long terme nécessaires pour relever ce défi. Les activités se concentrent sur les moyens, les technologies et les infrastructures de données pour l'observation et la surveillance de la Terre au moyen de la télésurveillance et de mesures in situ, capables de fournir continuellement et en temps voulu des informations précises et de permettre ainsi des prévisions et des projections. Un accès entièrement libre aux données et informations interopérables sera encouragé. Les activités aideront à définir de futures tâches opérationnelles du programme Copernicus et à renforcer l'utilisation des données de Copernicus pour les travaux de recherche.

(f) Patrimoine culturel

L'objectif est d'étudier les stratégies, les méthodologies et les outils nécessaires pour disposer d'un patrimoine culturel dynamique et durable en Europe face au changement climatique. Le patrimoine culturel sous ses diverses formes physiques constitue le cadre de vie de communautés résilientes qui réagissent aux changements multiples et variés. La recherche portant sur le patrimoine culturel nécessite une approche pluridisciplinaire pour améliorer la compréhension du matériel historique. Les activités viseront à déterminer les niveaux de résilience au moyen d'observations, d'une surveillance et d'une modélisation et à mieux comprendre la manière dont les communautés perçoivent le changement climatique, les risques sismiques et volcaniques, et la manière dont elles réagissent.";"";"H2020";"H2020-EU.3.";"";"";"2014-09-22 20:48:01";"664389" +"H2020-EU.3.5.";"pl";"H2020-EU.3.5.";"";"";"WYZWANIA SPOŁECZNE - Działania w dziedzinie klimatu, środowisko, efektywna gospodarka zasobami i surowce";"Climate and environment";"

WYZWANIA SPOŁECZNE - Działania w dziedzinie klimatu, środowisko, efektywna gospodarka zasobami i surowce

Cel szczegółowy

Celem szczegółowym jest: doprowadzenie do tego, by gospodarka i społeczeństwo były zasobooszczędne (i wodnooszczędne) oraz odporne na zmianę klimatu, ochrona i zrównoważona gospodarka zasobami naturalnymi i ekosystemami oraz zrównoważone dostawy i wykorzystywanie surowców w celu zaspokojenia potrzeb rosnącej globalnej populacji w ramach zrównoważonych ograniczeń charakteryzujących zasoby naturalne i ekosystemy naszej planety. Działania przyczynią się do zwiększenia europejskiej konkurencyjności oraz bezpiecznego zaopatrzenia w surowce i poprawy dobrostanu, a jednocześnie zapewnią integralność, odporność i zrównoważenie środowiska w celu utrzymania globalnego ocieplenia poniżej 2°C oraz umożliwienia ekosystemom i społeczeństwu przystosowanie się do zmiany klimatu i innych zmian środowiska.W XX wieku światowe wykorzystanie paliw kopalnych, a także wydobycie zasobów materiałowych uległy dziesięciokrotnemu zwiększeniu. Ta era pozornie obfitych i tanich zasobów dobiega końca. Surowce, woda, powietrze, bioróżnorodność oraz ekosystemy lądowe, wodne i morskie są zagrożone. Wiele spośród najważniejszych ekosystemów świata ulega degradacji, a do 60% zapewnianych przez nie usług wykorzystuje się w sposób niezrównoważony. W Unii każdego roku na jedną osobę zużywanych jest 16 ton surowców, z czego 6 ton zmienia się w odpady, a połowa odpadów trafia na składowiska. Globalne zapotrzebowanie na zasoby nadal rośnie wraz ze wzrostem liczby ludności i zwiększaniem się aspiracji, w szczególności w przypadku osób o średnich dochodach w gospodarkach wschodzących. Niezbędne jest oddzielenie wzrostu gospodarczego od zużywania zasobów.Średnia temperatura powierzchni Ziemi wzrosła w ciągu ostatnich 100 lat o ok. 0,8°C i przewiduje się, że do końca XXI wieku wzrośnie o 1,8 do 4°C (w stosunku do średniej z lat 1980–1999). Prawdopodobne oddziaływanie tych zmian na systemy naturalne i ludzkie jest wyzwaniem dla planety i jej zdolności adaptacyjnych, a także stanowi zagrożenie dla przyszłego rozwoju gospodarczego i dobrostanu ludzkości.Coraz większy wpływ zmiany klimatu i problemy środowiskowe, takie jak zakwaszanie oceanów, zmiany w cyrkulacji oceanicznej, wzrost temperatury wód morskich, topnienie lodowców w Arktyce i spadek zasolenia wód morskich, degradacja gleby i jej wykorzystania, utrata urodzajności gleby, niedobory wody, susze i powodzie, zagrożenie sejsmiczne i wulkaniczne, zmiany przestrzennego rozkładu gatunków, zanieczyszczenia chemiczne, nadmierna eksploatacja zasobów i utrata bioróżnorodności świadczą o tym, że planeta zbliża się do granic stabilności. Przewiduje się przykładowo, że bez zwiększenia efektywności we wszystkich sektorach, w tym bez wprowadzenia innowacyjnych systemów wodnych, w ciągu 20 lat zapotrzebowanie na wodę o 40% przekroczy jej podaż, co będzie skutkować poważnym deficytem i niedoborem wody. Lasy znikają w alarmującym tempie 5 mln hektarów rocznie. Interakcje między zasobami mogą prowadzić do zagrożeń systemowych – wyczerpanie jednego zasobu może spowodować nieodwracalne szkody dla innych zasobów i ekosystemów. Jeśli utrzymają się obecne tendencje, do 2050 r. utrzymanie rosnącej globalnej populacji będzie wymagać odpowiednika więcej niż dwóch Ziemi.Zrównoważona dostawa surowców oraz zasobooszczędne gospodarowanie nimi, w tym ich eksploracja, wydobycie, przetworzenie, ponowne wykorzystanie, recykling i zastępowanie, jest niezbędne dla funkcjonowania nowoczesnych społeczeństw i ich gospodarek. Sektory europejskie, takie jak sektor budowlany, chemiczny, motoryzacyjny, lotniczy, maszynowy i sprzętowy, które zapewniają całkowitą wartość dodaną w wysokości ok. 1,3 bln EUR oraz zatrudnienie około 30 mln osób, w ogromnym stopniu zależne są od dostępu do surowców. Jednak podaż surowców w Unii znajduje się pod coraz większą presją. Ponadto Unia w wysokim stopniu zależy od importu strategicznych surowców, na które w alarmującym stopniu wpływają zakłócenia rynkowe.Ponadto Unia posiada nadal cenne złoża minerałów, których poszukiwanie, wydobycie i przetwarzanie są ograniczone z powodu braku adekwatnych technologii, nieodpowiedniego zarządzania obiegiem odpadów oraz braku inwestycji oraz jest utrudnione przez zwiększoną globalną konkurencję. Ze względu na znaczenie surowców dla europejskiej konkurencyjności, gospodarki oraz ich zastosowania w innowacyjnych produktach, zrównoważona podaż surowców oraz zasobooszczędne gospodarowanie nimi są ważnym priorytetem dla Unii.Zdolność gospodarki do dostosowania się i nabrania większej odporności na zmianę klimatu oraz zyskania zasobooszczędności, a zarazem utrzymania konkurencyjności, zależy od wysokiego poziomu ekoinnowacji o charakterze społecznym, gospodarczym, organizacyjnym i technologicznym. Wartość globalnego rynku ekoinnowacji wynosi ok. 1 bln EUR rocznie i oczekuje się, że do 2030 r. ulegnie potrojeniu, dlatego też ekoinnowacje stanowią istotną szansę na zwiększenie konkurencyjności i liczby miejsc pracy w europejskich gospodarkach.

Uzasadnienie i unijna wartość dodana

Osiągnięcie unijnych i międzynarodowych celów w zakresie ograniczenia emisji i stężenia gazów cieplarnianych oraz walka ze skutkami zmiany klimatu wymagają: przejścia w kierunku społeczeństwa niskoemisyjnego oraz rozwoju i wdrożenia racjonalnych pod względem kosztów i zrównoważonych rozwiązań technologicznych i nietechnologicznych, środków łagodzących zmianę klimatu i umożliwiających przystosowanie się do niej oraz lepszego zrozumienia społecznych odpowiedzi na te wyzwania. Ramy polityki unijnej i globalnej muszą zagwarantować, że ekosystemy i bioróżnorodność będą chronione, cenione i odpowiednio przywracane w celu zachowania ich zdolności do dostarczania zasobów i usług w przyszłości. Problemy z wodą w środowisku wiejskim, miejskim i przemysłowym należy rozwiązać tak, by promować innowacje w systemach wodnych i zasobooszczędność oraz by chronić ekosystemy wodne. Badania naukowe i innowacje mogą pomóc w zabezpieczeniu niezawodnego i zrównoważonego dostępu do surowców na lądzie i na dnie morskim oraz ich eksploatacji, a także zapewnić znaczne ograniczenie zużycia zasobów i marnotrawstwa.Działania Unii mają skupiać się zatem na wspieraniu zasadniczych celów i polityk Unii obejmujących cały cykl innowacji oraz elementy trójkąta wiedzy, takich jak m.in.: strategia „Europa 2020”; inicjatywy przewodnie „Unia innowacji”; „Polityka przemysłowa w erze globalizacji”, „Europejska agenda cyfrowa” i „Europa efektywnie korzystająca z zasobów” oraz odnośny plan działania; plan działania w celu przejścia na konkurencyjną gospodarkę niskoemisyjną do 2050 r.; przystosowanie się do zmiany klimatu: europejskie ramy działania; inicjatywa na rzecz surowców; strategia Unii na rzecz zrównoważonego rozwoju; zintegrowana polityka morska Unii; dyrektywa ramowa w sprawie strategii morskiej; dyrektywa ramowa w sprawie wody i jej dyrektywy na niej oparte; dyrektywa w sprawie powodzi; plan działania na rzecz ekoinnowacji oraz ogólny unijny program działań w zakresie środowiska do 2020 r. Działania te w odpowiednich przypadkach mają się zazębiać z odnośnymi europejskimi partnerstwami innowacyjnymi i inicjatywami w zakresie wspólnego programowania. Mają przyczynić się do wzmocnienia zdolności społeczeństwa do osiągnięcia większej odporności na zmiany środowiskowe i zmianę klimatu oraz zapewnią dostępność surowców.Ze względu na transnarodowy i globalny charakter klimatu i środowiska, skalę i złożoność tych kwestii oraz międzynarodowy wymiar łańcucha dostaw surowców działania muszą być prowadzone na poziomie Unii i poza nim. Wielodyscyplinarny charakter niezbędnych badań naukowych wymaga połączenia uzupełniającej się wzajemnie wiedzy i zasobów w celu skutecznego sprostania temu wyzwaniu w sposób zrównoważony. Ograniczenie zużycia zasobów i wpływu na środowisko przy jednoczesnym zwiększeniu konkurencyjności będzie wymagać definitywnego przejścia na płaszczyźnie społecznej i technologicznej do gospodarki opartej na zrównoważonym stosunku między przyrodą a dobrostanem człowieka. Skoordynowane działania w zakresie badań naukowych i innowacji poprawią zrozumienie i przewidywanie zmiany klimatu i zmian środowiskowych w perspektywie systemowej i międzysektorowej, ograniczą niepewność, umożliwią identyfikację i ocenę słabych punktów, ryzyka, kosztów i możliwości, a także poszerzenie zakresu i zwiększenie skuteczności reakcji i rozwiązań społecznych i politycznych. Działania będą także zmierzać do poprawy realizacji i upowszechniania badań naukowych i innowacji w celu wsparcia kształtowania polityki i umożliwienia podmiotom na wszystkich poziomach społeczeństwa aktywnego udziału w tym procesie.Kwestia dostępności surowców wymaga koordynacji badań naukowych i działań na rzecz innowacji między dyscyplinami i sektorami, co ma zapewnić opracowanie bezpiecznych, opłacalnych pod względem gospodarczym, przyjaznych środowisku i akceptowalnych społecznie rozwiązań w całym łańcuchu wartości (eksploracja, wydobycie, przetwarzanie, planowanie, zrównoważone użytkowanie i ponowne wykorzystanie, recykling i zastępowanie). Innowacje w tych dziedzinach zapewnią szanse na wzrost gospodarczy i tworzenie miejsc pracy, a także umożliwią znalezienie innowacyjnych rozwiązań w zakresie nauki, technologii, gospodarki, społeczeństwa, polityki i zarządzania. Z tych przyczyn utworzono europejskie partnerstwa innowacyjne w dziedzinie wody i surowców.Odpowiedzialne ekoinnowacje mogą przynieść cenne nowe szanse na wzrost gospodarczy i tworzenie miejsc pracy. Rozwiązania opracowane w drodze działań na poziomie Unii umożliwią przeciwdziałanie kluczowym zagrożeniom dla konkurencyjności przemysłowej oraz szybką absorpcję i odtworzenie innowacji na całym jednolitym rynku i poza nim. To ułatwi proces przejścia do zielonej gospodarki wykorzystującej zasoby w zrównoważony sposób. Partnerami uwzględniającymi to podejście będą m.in.: międzynarodowi, europejscy i krajowi decydenci, programy w zakresie badań naukowych i innowacji prowadzone na płaszczyźnie międzynarodowej i w państwach członkowskich, europejski biznes i przemysł, Europejska Agencja Środowiska i krajowe agencje ochrony środowiska, a także inne zainteresowane strony.Działania na poziomie Unii zapewnią wsparcie nie tylko współpracy dwustronnej i regionalnej, ale i odnośnych międzynarodowych wysiłków i inicjatyw, w tym Międzyrządowego Zespołu ds. Zmian Klimatu (IPCC), międzyrządowej platformy ds. różnorodności biologicznej i usług ekosystemowych (IPBES) oraz Grupy ds. Obserwacji Ziemi (GEO).

Ogólne kierunki działań

(a) Walka ze zmianą klimatu i przystosowanie się do niej

Celem jest rozwój i ocena innowacyjnych, racjonalnych pod względem kosztów i zrównoważonych środków i strategii łagodzących zmianę klimatu i umożliwiających przystosowanie się do niej, dotyczących emisji gazów cieplarnianych i aerozoli zawierających CO2 i niezawierających go, uwzględniających ekologiczne rozwiązania technologiczne i nietechnologiczne, poprzez gromadzenie danych na potrzeby merytorycznych, wczesnych i skutecznych działań oraz tworzenie sieci podmiotów dysponujących odpowiednimi kompetencjami. Działania mają się koncentrować na: poprawie zrozumienia zmiany klimatu i zagrożeń związanych ze zdarzeniami ekstremalnymi i nagłymi zmianami dotyczącymi klimatu, co ma służyć przygotowaniu wiarygodnych prognoz w tym zakresie; ocenie skutków na poziomie globalnym, regionalnym i lokalnym oraz słabych punktów; na opracowaniu innowacyjnych, efektywnych kosztowo środków przystosowania się do zmiany klimatu i zapobiegania ryzyku oraz zarządzania ryzykiem oraz wspieraniu polityk oraz strategii związanych z łagodzeniem zmiany klimatu, w tym badań, których głównym przedmiotem jest oddziaływanie polityk prowadzonych w innych sektorach.

(b) Ochrona środowiska, zrównoważone gospodarowanie zasobami naturalnymi, wodą, bioróżnorodnością i ekosystemami

Celem jest dostarczenie wiedzy i narzędzi na potrzeby zarządzania i ochrony zasobów naturalnych zapewniający celem osiągnięcia trwałej równowagi między ograniczonymi zasobami a obecnymi i przyszłymi potrzebami społeczeństwa i gospodarki. Działania mają koncentrować się na: poszerzaniu wiedzy na temat bioróżnorodności i funkcjonowania ekosystemów, ich interakcji z systemami społecznymi i roli w zakresie zrównoważenia gospodarki i dobrostanu ludzi; opracowaniu zintegrowanych podejść do zrównoważonego zarządzania wyzwaniami związanymi z wodą oraz przejściu do zrównoważonego zarządzania zasobami wodnymi i usługami w tym zakresie, a także zapewnieniu wiedzy i narzędzi na potrzeby skutecznego procesu decyzyjnego i udziału społeczeństwa.

(c) Zapewnienie zrównoważonych dostaw surowców nieenergetycznych i nierolniczych

Celem jest poszerzenie bazy wiedzy na temat surowców oraz rozwój innowacyjnych rozwiązań w zakresie racjonalnych pod względem kosztów, zasobooszczędnych i przyjaznych dla środowiska poszukiwań, wydobycia, przetwarzania, użytkowania oraz ponownego wykorzystywania, recyklingu i odzysku surowców oraz ich zastępowania gospodarczo atrakcyjnymi i zrównoważonymi środowiskowo alternatywami o mniejszym wpływie na środowisko, w tym procesami i systemami działającymi na zasadzie obiegu zamkniętego. Działania mają koncentrować się na: poszerzaniu bazy wiedzy na temat dostępności surowców; promowaniu zrównoważonych i efektywnych dostaw, użytkowania i ponownego wykorzystywania surowców, w tym surowców mineralnych, lądowych i morskich; nalezieniu alternatyw dla surowców krytycznych oraz podniesieniu świadomości społecznej i umiejętności związanych z surowcami.

(d) Umożliwienie ekologizacji gospodarki i społeczeństwa poprzez ekoinnowacje

Celem jest wspieranie wszystkich form ekoinnowacji umożliwiających przekształcenie gospodarki w zieloną gospodarkę. Działania mają m.in. nawiązywać do działań podjętych w ramach programu dotyczącego ekoinnowacji oraz stanowić ich uzupełnienie, a także skupiać się na: wzmocnieniu ekoinnowacyjnych technologii, procesów, usług i produktów, w tym na przeanalizowaniu sposobów ograniczenia ilości surowców w produkcji i konsumpcji, na pokonaniu barier w tym aspekcie, oraz na zwiększeniu ich wykorzystywania przez rynek i odtwarzania, ze szczególnym uwzględnieniem MŚP; wsparciu innowacyjnych kierunków polityki, zrównoważonych modeli gospodarczych i przemian społecznych; pomiarze i ocenie postępu na drodze ku zielonej gospodarce; a także wspomaganiu zasobooszczędności poprzez systemy cyfrowe.

(e) Rozwój kompleksowych i trwałych globalnych systemów obserwacji i informacji środowiskowej

Celem jest zapewnienie przygotowania długoterminowych danych i informacji potrzebnych do sprostania temu wyzwaniu. Działania mają skupiać się na zdolnościach, technologiach i infrastrukturze danych do celów obserwacji i monitorowania Ziemi, zarówno przy wykorzystaniu teledetekcji, jak i pomiarów in situ, które mogą bez przerwy dostarczać w odpowiednim terminie dokładne informacje i umożliwiać prognozy i przewidywania. Promowany będzie bezpłatny, otwarty i nieograniczony dostęp do interoperacyjnych danych i informacji. Działania mają pomóc w określaniu przyszłej działalności operacyjnej programu Copernicus i zwiększyć wykorzystywanie danych pochodzących z programu Copernicus do celów badawczych.

(f) Dziedzictwo kulturowe

Celem jest badanie strategii, metod i narzędzi niezbędnych do wykorzystania dynamicznego i zrównoważonego dziedzictwa kulturowego w Europie w odpowiedzi na zmianę klimatu. Dziedzictwo kulturowe w różnorodnych postaciach fizycznych stanowi środowisko, w jakim żyją odporne społeczności reagujące na wielorakie zmiany. Badania nad dziedzictwem kulturowym wymagają podejścia multidyscyplinarnego, sprzyjającego lepszemu zrozumieniu materiałów historycznych. Działania mają skupiać się na określeniu poziomów odporności w drodze obserwacji, monitorowania i tworzenia modeli, a także na umożliwieniu lepszego zrozumienia, jak społeczności postrzegają zmianę klimatu oraz zagrożenia sejsmiczno-wulkaniczne i jak na nie reagują.";"";"H2020";"H2020-EU.3.";"";"";"2014-09-22 20:48:01";"664389" +"H2020-EU.3.1.5.1.";"en";"H2020-EU.3.1.5.1.";"";"";"Improving halth information and better use of health data";"";"";"";"H2020";"H2020-EU.3.1.5.";"";"";"2014-09-22 20:44:11";"664269" +"H2020-EU.3.5.";"de";"H2020-EU.3.5.";"";"";"GESELLSCHAFTLICHE HERAUSFORDERUNGEN - Klimaschutz, Umwelt, Ressourceneffizienz und Rohstoffe";"Climate and environment";"

GESELLSCHAFTLICHE HERAUSFORDERUNGEN - Klimaschutz, Umwelt, Ressourceneffizienz und Rohstoffe

Einzelziel

Einzelziel ist die Verwirklichung einer Wirtschaft und Gesellschaft, die die Ressourcen – und das Wasser – schont und gegen den Klimawandel gewappnet ist, der Schutz und eine nachhaltige Bewirtschaftung der natürlichen Ressourcen und Ökosysteme und eine nachhaltige Versorgung mit und Nutzung von Rohstoffen, um die Bedürfnisse einer weltweit wachsenden Bevölkerung innerhalb der Grenzen der Nachhaltigkeit natürlicher Ressourcen und Ökosysteme der Erde zu erfüllen. Die Tätigkeiten werden die Wettbewerbsfähigkeit und Rohstoffsicherheit Europas stärken und das Wohlergehen der Menschen verbessern und gleichzeitig die Integrität, Widerstandsfähigkeit und Nachhaltigkeit der Umwelt mit dem Ziel gewährleisten, die durchschnittliche globale Erwärmung unter 2° C zu halten und Ökosysteme und die Gesellschaft in die Lage zu versetzen, sich an den Klimawandel und andere Veränderungen in der Umwelt anzupassen.Im Laufe des 20. Jahrhunderts hat sich der Verbrauch fossiler Brennstoffe und die Gewinnung rohstofflicher Ressourcen um etwa den Faktor 10 vervielfacht. Diese Ära der scheinbar im Überfluss vorhandenen und billigen Ressourcen neigt sich dem Ende zu. Rohstoffe, Wasser, Luft, biologische Vielfalt sowie terrestrische, aquatische und marine Ökosysteme stehen insgesamt unter Druck. Viele der weltweit größten Ökosysteme sind geschädigt, da bis zu 60 % der Leistungen, die sie erbringen, in nicht nachhaltiger Art und Weise genutzt werden. In der Union werden etwa 16 Tonnen Rohstoffe pro Person und Jahr verbraucht, davon werden 6 Tonnen verschwendet, die Hälfte wird auf Abfalldeponien entsorgt. Angesichts der wachsenden Bevölkerung und der steigenden Ansprüche vor allem der Bezieher mittlerer Einkommen in Schwellenländern nimmt die weltweite Nachfrage nach Ressourcen weiter zu. Eine Entkopplung des Wirtschaftswachstums vom Ressourcenverbrauch ist notwendig.In den letzten 100 Jahren ist die durchschnittliche Temperatur der Erdoberfläche um etwa 0,8° C gestiegen und wird Prognosen zufolge bis zum Ende des 21. Jahrhunderts (im Verhältnis zum Durchschnitt der Jahre 1980-1999) um 1,8 bis 4° C weiter ansteigen. Die aufgrund dieser Veränderungen voraussichtlich eintretenden Folgen für die natürlichen und menschlichen Systeme werden eine Herausforderung für die Erde und ihre Anpassungsfähigkeit darstellen und die künftige Wirtschaftsentwicklung und das Wohlergehen der Menschen gefährden.Die zunehmenden Auswirkungen des Klimawandels und Umweltprobleme – wie etwa die Versauerung der Meere, Änderungen der Meeresströmungen, Erhöhung der Meerestemperatur, die Eisschmelze in der Arktis und der abnehmende Salzgehalt des Meerwassers, die Bodenverschlechterung und der Flächenverbrauch, der Verlust der Bodenfruchtbarkeit, der Wassermangel, Dürren und Überschwemmungen, Erdbeben und Vulkanausbrüche, Veränderungen bei der räumlichen Verteilung der Arten, die Verschmutzung durch Chemikalien, die übermäßige Ausbeutung der Ressourcen und der Verlust der biologischen Vielfalt – zeigen, dass die Erde allmählich die Grenzen ihrer Nachhaltigkeit erreicht. So wird in 20 Jahren die Wassernachfrage ohne Effizienzverbesserungen in sämtlichen Sektoren, einschließlich durch innovative Wassersysteme, das Angebot um 40 % übersteigen, was zu erheblicher Wasserbelastung und -knappheit führen wird. In alarmierend hohem Tempo verschwinden jedes Jahr 5 Millionen Hektar Wald. Die Wechselwirkungen zwischen den Ressourcen können Systemrisiken in der Weise bergen, dass durch das Verschwinden einer Ressource ein Punkt erreicht wird, an dem auch andere Ressourcen und Ökosysteme irreversibel geschädigt werden. Ausgehend von der derzeitigen Entwicklung wird bis 2050 das Äquivalent von über zwei Planeten Erde benötigt, um die wachsende Weltbevölkerung tragen zu können.Die nachhaltige Versorgung mit Rohstoffen und deren ressourcenschonende Bewirtschaftung (einschließlich Exploration, Gewinnung, Verarbeitung, Wiederverwendung und -verwertung sowie Ersatz) sind für das Funktionieren moderner Gesellschaften und Volkswirtschaften unerlässlich. Unionssektoren wie der Bau-, Chemie-, Automobil-, Luftfahrt-, Maschinenbau- und Ausrüstungssektor mit einer Wertschöpfung von etwa 1,3 Billionen EUR und 30 Millionen Arbeitsplätzen sind enorm abhängig vom Zugang zu Rohstoffen. Die Belieferung der Union mit Rohstoffen steht jedoch zunehmend unter Druck. Zudem ist die Union in höchstem Maße abhängig von strategisch wichtigen Rohstoffen, deren Einfuhr durch Marktverzerrungen in alarmierendem Tempo beeinträchtigt wird.Außerdem verfügt die Union nach wie vor über wertvolle Mineralvorkommen, deren Exploration, Gewinnung und Verarbeitung durch fehlende geeignete Technologien, unzureichendes Abfallkreislaufmanagement und den Mangel an Investitionen eingeschränkt und durch den zunehmenden internationalen Wettbewerb behindert werden. Angesichts der Bedeutung von Rohstoffen für die europäische Wettbewerbsfähigkeit, die Wirtschaft und deren Anwendung in innovativen Produkten haben die nachhaltige Versorgung mit Rohstoffen und deren ressourcenschonende Bewirtschaftung für die Union größte Priorität.Inwieweit die Wirtschaft in der Lage ist, sich anzupassen, sich gegen den Klimawandel zu wappnen und die Ressourceneffizienz zu verbessern und gleichzeitig wettbewerbsfähig zu bleiben, hängt von einem hohen Maß an gesellschaftlicher, wirtschaftlicher, organisatorischer und technologischer Öko-Innovation ab. Mit einem Wert von etwa einer Billion EUR pro Jahr und der erwarteten Verdreifachung dieses Markts bis 2030 stellen Öko-Innovationen eine gewaltige Chance für die Stärkung der Wettbewerbsfähigkeit und die Schaffung von Arbeitsplätzen in der europäischen Wirtschaft dar.

Begründung und Mehrwert für die Union

Die Erreichung der von der Union und international festgesetzten Ziele für die Treibhausgasemissionen und -konzentrationen sowie die Bewältigung der Folgen des Klimawandels erfordern den Übergang zu einer CO2-armen Gesellschaft und die Entwicklung und den Einsatz von kosteneffizienten und nachhaltigen technologischen und nichttechnologischen Lösungen sowie von Minderungs- und Anpassungsmaßnahmen und ein besseres Verständnis der gesellschaftlichen Antworten auf diese Herausforderungen. Die politischen Rahmenvorgaben auf Unionsebene und auf internationaler Ebene müssen gewährleisten, dass Ökosysteme und biologische Vielfalt geschützt, geschätzt und angemessen wiederhergestellt werden, damit diese auch in Zukunft Ressourcen bereitstellen und Leistungen erbringen können. Die Wasserproblematik im ländlichen, städtischen und industriellen Umfeld muss angegangen werden, um Innovationen bei Wassersystemen und Ressourceneffizienz zu fördern und die aquatischen Ökosysteme zu schützen. Forschung und Innovation können dazu beitragen, einen zuverlässigen und nachhaltigen Zugang zu Rohstoffen auf dem Land und am Meeresboden und deren Nutzung zu sichern und die Verwendung und Verschwendung von Ressourcen deutlich zu senken.Schwerpunkt der Unionsmaßnahmen ist daher, die wichtigsten Unionsziele und -strategien zu unterstützen, die den gesamten Innovationszyklus und die Komponenten des Wissensdreiecks abdecken einschließlich der Strategie Europa 2020; der Leitinitiativen ""Innovationsunion"", ""Eine Industriepolitik für das Zeitalter der Globalisierung"", ""Eine Digitale Agenda für Europa"" und ""Ein ressourcenschonendes Europa"" und des entsprechendes Fahrplans, des Fahrplans hin zu einer wettbewerbsfähigen Wirtschaft mit niedrigem CO2-Ausstoß bis 2050; der Europäische Aktionsrahmen zur Anpassung an den Klimawandel, die Rohstoff-Initiative, die Unionsstrategie für die nachhaltige Entwicklung, die integrierte Meerespolitik der Union, die Meeresstrategie-Rahmenrichtlinie, die Wasser-Rahmenrichtlinie und der darauf basierenden Richtlinien, die Hochwasserrichtlinie, der Aktionsplan für Öko-Innovation und das allgemeine Umweltaktionsprogramm der Union bis 2020. Diese Maßnahmen werden gegebenenfalls mit einschlägigen Europäischen Innovationspartnerschaften und Initiativen für die gemeinsame Planung verzahnt. Diese Maßnahmen werden die Gesellschaft besser gegen Veränderungen der Umwelt und den Klimawandel wappnen und die Verfügbarkeit von Rohstoffen gewährleisten.Angesichts des transnationalen und globalen Charakters der Umwelt, ihrer Größe und Komplexität und der internationalen Dimension der Rohstoffversorgungskette müssen die Tätigkeiten auf Unionsebene und darüber hinaus durchgeführt werden. Die Multidisziplinarität der notwendigen Forschung erfordert die Zusammenführung sich ergänzender Kenntnisse und Ressourcen, um so diese Herausforderung nachhaltig bewältigen zu können. Die Verringerung des Ressourcenverbrauchs und der Umweltfolgen bei gleichzeitiger Erhöhung der Wettbewerbsfähigkeit der Union erfordert einen tiefgreifenden gesellschaftlichen und technologischen Wandel hin zu einer Wirtschaft, die sich auf ein nachhaltiges Verhältnis zwischen dem Wohlergehen der Natur und des Menschen stützt. Die Koordinierung der Forschungs- und Innovationstätigkeiten verbessert systematisch und bereichsübergreifend das Verständnis und die Prognosen der Union für die Klima- und Umweltveränderungen, baut Ungewissheiten ab, benennt und bewertet Schwächen, Risiken, Kosten und Möglichkeiten und erweitert die Bandbreite der gesellschaftlichen und politischen Reaktionen und Lösungen und verbessert deren Wirkung. Auch wird mit den Maßnahmen angestrebt, die Ergebnisse von Forschung und Innovation und deren Verbreitung zu verbessern, um die politische Entscheidungsfindung zu unterstützen und die Akteure auf allen gesellschaftlichen Ebenen in die Lage zu versetzen, aktiv an diesem Prozess teilzunehmen.Die Verfügbarkeit von Rohstoffen erfordert koordinierte Forschungs- und Innovationsanstrengungen über viele Fachrichtungen und Sektoren hinweg, damit entlang der gesamten Wertschöpfungskette (Exploration, Gewinnung, Verarbeitung, Konzeption, nachhaltige Nutzung und Wiederverwendung und -verwertung sowie Ersatz) sichere, wirtschaftlich machbare, ökologisch unbedenkliche und gesellschaftlich akzeptierte Lösungen bereitstehen. Innovationen auf diesen Gebieten schaffen Möglichkeiten für Wachstum und Arbeitsplätze sowie innovative Optionen, die sich auf Wissenschaft, Technik, Wirtschaft, Gesellschaft, Politik und Governance erstrecken. Aus diesen Gründen wurden europäische Innovationspartnerschaften für Wasser und Rohstoffe eingeleitet.Eine verantwortungsbewusste Öko-Innovation eröffnet möglicherweise wertvolle neue Chancen für Wachstum und Beschäftigung. Mit Hilfe von Maßnahmen auf Unionsebene entwickelte Lösungen können zur Abwehr von großen Bedrohungen der industriellen Wettbewerbsfähigkeit eingesetzt werden und ermöglichen eine rasche Einführung und Nachahmung im gesamten Binnenmarkt und darüber hinaus. Dies ermöglicht den Übergang zu einer ""grünen"" Wirtschaft, die der nachhaltigen Nutzung von Ressourcen Rechnung trägt. Partner dieses Konzepts sind u. a. internationale, europäische und nationale politische Entscheidungsträger, internationale und einzelstaatliche Forschungs- und Innovationsprogramme, europäische Unternehmen und die Industrie, die Europäische Umweltagentur und nationale Umweltämter sowie sonstige einschlägige interessierte Kreise.Über die bilaterale und regionale Zusammenarbeit hinaus unterstützen Maßnahmen auf Unionsebene auch einschlägige internationale Anstrengungen und Initiativen wie etwa den Weltklimarat (IPPC), die zwischenstaatliche Plattform für biologische Vielfalt und Ökosystemleistungen (IPBES) sowie die Gruppe für Erdbeobachtung (GEO).

Einzelziele und Tätigkeiten in Grundzügen

(a) Klimaschutz und Anpassung an den Klimawandel

Ziel ist die Entwicklung und Bewertung innovativer, kosteneffizienter und nachhaltiger Anpassungs- und Minderungsmaßnahmen und -strategien, die auf CO2 und andere Treibhausgase und Aerosole und sowohl technologische als auch nichttechnologische ""grüne"" Lösungen abstellen, indem Daten generiert werden, die es ermöglichen, in Kenntnis der Sachlage frühzeitige und wirksame Maßnahmen zu treffen und die notwendigen Kompetenzen zu vernetzen. Schwerpunkt der Tätigkeiten sind ein besseres Verständnis des Klimawandels und der Gefahren, die mit Extremereignissen und abrupten klimabezogenen Veränderungen verbunden sind, im Hinblick auf die Bereitstellung zuverlässiger Klimaprojektionen, die Bewertung der Folgen auf globaler, regionaler und lokaler Ebene, Schwachstellen, die Entwicklung innovativer und kosteneffizienter Anpassungs- und Risikovermeidungs- und -bewältigungsmaßnahmen sowie die Unterstützung von Minderungsstrategien, einschließlich Studien mit Schwerpunkt auf den Auswirkungen anderer sektorbezogener Strategien.

(b) Umweltschutz, nachhaltige Bewirtschaftung der natürlichen Ressourcen, Wasser, biologische Vielfalt und Ökosysteme

Ziel ist die Bereitstellung von Wissen und Instrumenten für die Bewirtschaftung und den Schutz natürlicher Ressourcen, um ein nachhaltiges Gleichgewicht zwischen den begrenzten Ressourcen und den aktuellen und künftigen Bedürfnissen von Gesellschaft und Wirtschaft herzustellen. Schwerpunkt der Tätigkeiten ist die Vertiefung der Erkenntnisse über die biologische Vielfalt und die Funktionsweise von Ökosystemen, deren Wechselwirkungen mit sozialen Systemen und deren Aufgabe zur Sicherung der Wirtschaft und des Wohlergehens des Menschen, die Entwicklung integrierter Konzepte für die Bewältigung der Wasserprobleme sowie den Übergang zu einer nachhaltigen Bewirtschaftung und Nutzung der Wasserressourcen und -dienstleistungen sowie die Bereitstellung von Wissen und Instrumenten für eine wirksame Entscheidungsfindung und öffentliches Engagement

(c) Gewährleistung einer nachhaltigen Versorgung mit nicht-energetischen und nicht-landwirtschaftlichen Rohstoffen

Ziel ist es, mehr Erkenntnisse über Rohstoffe zu gewinnen und innovative Lösungen für die kosteneffiziente, ressourcenschonende und umweltfreundliche Exploration, Gewinnung, Verarbeitung, Verwendung, Wiederverwendung und -verwertung sowie Rückgewinnung von Rohstoffen und für deren Ersatz durch wirtschaftlich interessante und ökologisch nachhaltige Alternativen mit besserer Umweltbilanz zu entwickeln, einschließlich Kreislaufprozessen und -systemen. Schwerpunkt der Tätigkeiten ist die Verbesserung der Wissensbasis über die Verfügbarkeit von Rohstoffen, die Förderung einer nachhaltigen und effizienten Versorgung mit und Verwendung sowie Wiederverwendung von Rohstoffen, einschließlich an Land und am Meeresboden gewonnener Mineralien, die Suche nach Alternativen für kritische Rohstoffe sowie die Schärfung des gesellschaftlichen Bewusstseins und die Verbesserung der Qualifikationen im Hinblick auf Rohstoffe.

(d) Grundlagen für den Übergang zu einer umweltfreundlichen Wirtschaft und Gesellschaft durch Öko-Innovation

Ziel ist die Förderung sämtlicher Formen von Öko-Innovation, die den Übergang zu einer ""grünen"" Wirtschaft ermöglichen. Die Tätigkeiten bauen u. a. auf den im Rahmen des Öko-Innovations-Programms durchgeführten Tätigkeiten auf und verstärken diese; Schwerpunkt ist die Stärkung von Technologien, Verfahren, Dienstleistungen und Produkten der Öko-Innovation, wozu auch die Suche nach Möglichkeiten zur Verringerung der bei der Produktion und beim Verbrauch verwendeten Rohstoffmengen gehört, die Überwindung diesbezüglicher Hindernisse und die Unterstützung ihrer Markteinführung und Nachahmung, unter besonderer Berücksichtigung von KMU, die Unterstützung innovativer Strategien, nachhaltiger Wirtschaftsmodelle und gesellschaftlicher Veränderungen, die Messung und Bewertung von Fortschritten auf dem Weg zu einer ""grünen"" Wirtschaft sowie die Förderung der Ressourceneffizienz durch digitale Systeme; die Unterstützung innovativer Strategien, nachhaltiger Wirtschaftsmodelle und gesellschaftlicher Veränderungen, die Messung und Bewertung von Fortschritten auf dem Weg zu einer ""grünen"" Wirtschaft sowie die Förderung der Ressourceneffizienz durch digitale Systeme; sowie die Förderung der Ressourceneffizienz durch digitale Systeme;

(e) Entwicklung von Systemen für die umfassende und kontinuierliche globale Umweltüberwachung und von entsprechenden Informationssystemen

Ziel ist die Bereitstellung der zur Bewältigung dieser Herausforderung notwendigen langfristigen Daten und Informationen. Schwerpunkt dieser Tätigkeiten sind die Fähigkeiten, Technologien und Dateninfrastrukturen für die Erdbeobachtung und -überwachung sowohl mittels Fernerkundung als auch durch Messungen vor Ort, die kontinuierlich zeitnahe und präzise Daten liefern können und Prognosen und Projektionen ermöglichen. Gefördert wird der freie, offene und unbeschränkte Zugang zu interoperablen Daten und Informationen. Die Tätigkeiten tragen zur Bestimmung künftiger operativer Tätigkeiten des Copernicus Programms und zur verstärkten Nutzung von Copernicus-Daten für Forschungstätigkeiten bei.

(f) Kulturerbe

Ziel sind Forschungsarbeiten zu den Strategien, Methoden und Instrumenten, die erforderlich sind, um als Reaktion auf den Klimawandel ein dynamisches und nachhaltiges Kulturerbe in Europa zu ermöglichen. Das Kulturerbe bildet in seinen unterschiedlichen Erscheinungsformen die Existenzgrundlage der heutigen widerstandsfähigen Gemeinschaften, die mit vielfältigen Veränderungen fertig werden können. Für die Forschung über das Kulturerbe ist ein multidisziplinäres Konzept erforderlich, damit das historische Material besser verstanden werden kann. Den Schwerpunkt der Tätigkeiten bildet die Ermittlung der unterschiedlichen Ausprägungen der Widerstandsfähigkeit mittels Beobachtung, systematischer Erfassung und Modellbildung sowie die Klärung der Zusammenhänge, wie Gemeinschaften den Klimawandel, Erdbeben und Vulkanausbrüche wahrnehmen und darauf reagieren.";"";"H2020";"H2020-EU.3.";"";"";"2014-09-22 20:48:01";"664389" +"H2020-EU.3.5.";"it";"H2020-EU.3.5.";"";"";"SFIDE PER LA SOCIETÀ - Azione per il clima, ambiente, efficienza delle risorse e materie prime";"Climate and environment";"

SFIDE PER LA SOCIETÀ - Azione per il clima, ambiente, efficienza delle risorse e materie prime

Obiettivo specifico

L'obiettivo specifico è conseguire un'economia e una società efficienti sotto il profilo delle risorse - e dell'acqua - e resilienti ai cambiamenti climatici, la protezione e la gestione sostenibile delle risorse naturali e degli ecosistemi e un approvvigionamento e un uso sostenibili di materie prime, al fine di rispondere alle esigenze di una popolazione mondiale in crescita entro i limiti sostenibili delle risorse naturali e degli ecosistemi del pianeta. Le attività contribuiranno ad accrescere la competitività europea e la sicurezza delle materie prime e a migliorare il benessere, garantendo nel contempo l'integrità, la resilienza e la sostenibilità ambientali, per far sì che il riscaldamento globale medio non superi i 2 °C e consentire agli ecosistemi e alla società di adattarsi al cambiamento climatico e ad altri mutamenti ambientali.Durante il XX secolo, il mondo ha decuplicato sia l'uso di combustibili fossili sia l'estrazione di risorse materiali. Quest'era apparentemente ricca di risorse abbondanti e a buon mercato sta volgendo al termine. Le materie prime, l'acqua, l'aria, la biodiversità e gli ecosistemi marini, terrestri e acquatici sono tutti sottoposti a pressione. Molti dei principali ecosistemi mondiali sono in uno stato di degrado e fino al 60 % dei servizi che essi forniscono sono utilizzati in maniera insostenibile. Nell'Unione, ogni anno si usano circa 16 tonnellate per persona di materiali, di cui 6 tonnellate sono sprecate e metà di esse è collocata in discarica. La domanda globale di risorse continua ad aumentare con l'incremento demografico e le crescenti aspirazioni, in particolare delle persone a reddito medio nelle economie emergenti. È necessario disaccoppiare la crescita economica dal consumo di risorse.La temperatura media della superficie del nostro pianeta è aumentata di circa 0,8 °C negli ultimi cento anni, ed è previsto un aumento compreso fra 1,8 e 4 °C entro la fine del XXI secolo rispetto alla media del periodo1980-1999. Il probabile impatto sui sistemi naturali e umani collegato a tali evoluzioni costituirà una sfida per il pianeta e la sua capacità di adattamento, nonché una minaccia per lo sviluppo economico futuro e il benessere dell'umanità.L'impatto crescente dei cambiamenti climatici e dei problemi ambientali, come l'acidificazione degli oceani, i mutamenti nella circolazione oceanica, l'aumento della temperatura delle acque marine, lo scioglimento dei ghiacci nell'Artico e la diminuzione della salinità dell'acqua marina, il degrado e l'uso del suolo, la perdita di fertilità del suolo, la carenza idrica, la siccità e le inondazioni, i rischi sismici e vulcanici, i mutamenti nella distribuzione spaziale delle specie, l'inquinamento chimico, l'eccessivo sfruttamento delle risorse e la perdita di biodiversità, indicano che il pianeta si sta avvicinando ai limiti della sua sostenibilità. Ad esempio, senza miglioramenti in termini di efficienza in tutti i settori, anche attraverso sistemi idrici innovativi, si stima che la domanda di acqua supererà del 40 % l'offerta nei prossimi vent'anni, il che condurrà a un grave stress idrico e a gravi carenze idriche. Le foreste stanno scomparendo all'allarmante ritmo di cinque milioni di ettari l'anno. L'interazione tra le risorse può provocare rischi sistemici, con l'esaurimento di una risorsa che determina un punto di svolta irreversibile per le altre risorse e gli ecosistemi. Sulla base delle tendenze attuali, sarà necessario l'equivalente di oltre due pianeti Terra entro il 2050 al fine di sostenere la crescita della popolazione mondiale.Un approvvigionamento sostenibile e una gestione efficiente in termini di risorse delle materie prime, compresi l'esplorazione, l'estrazione, la lavorazione, il riutilizzo, il riciclaggio e la sostituzione, sono essenziali per il funzionamento delle società moderne e delle loro economie. I settori europei come l'edilizia, la chimica, l'industria automobilistica e aerospaziale nonché l'industria dei macchinari e delle attrezzature, che rappresentano un valore aggiunto totale di circa 1 300 miliardi di EUR e occupano circa trenta milioni di persone, dipendono fortemente dall'accesso alle materie prime. Tuttavia, l'approvvigionamento di materie prime verso l'Unione è sottoposto a una pressione sempre maggiore. L'Unione è inoltre fortemente dipendente dalle importazioni di materie prime di importanza strategica, colpite a un livello allarmante dalle distorsioni del mercato.Inoltre, l''Unione dispone ancora di preziosi depositi minerari di cui l'esplorazione, l'estrazione e la lavorazione sono limitate per mancanza di tecnologie adeguate, per una gestione inadeguata del ciclo dei rifiuti e per mancanza di investimenti, e sono ostacolate da un'accresciuta concorrenza mondiale. Considerata l'importanza delle materie prime per la competitività e l'economia europee, oltre che per la loro applicazione in prodotti innovativi, un approvvigionamento sostenibile e una gestione efficiente in termini di risorse delle materie prime costituiscono una priorità fondamentale per l'Unione.La capacità dell'economia di adattarsi e di diventare più resiliente ai cambiamenti climatici ed efficiente in termini di risorse, mantenendo nel contempo la competitività, dipende da livelli elevati di ecoinnovazione di natura economica, sociale, organizzativa e tecnologica. Per un mercato globale dell'ecoinnovazione che ha un valore di circa 1 000 miliardi di EUR l'anno, destinato a triplicare entro il 2030, l'ecoinnovazione rappresenta una grande opportunità per rafforzare la competitività e la creazione di posti di lavoro nelle economie europee.

Motivazione e valore aggiunto dell'Unione

Al fine di conseguire gli obiettivi dell'Unione e internazionali relativi alle concentrazioni e alle emissioni di gas a effetto serra e far fronte alle conseguenze dei cambiamenti climatici occorrono una transizione verso una società a basse emissioni di carbonio e lo sviluppo e la diffusione di soluzioni tecnologiche e non tecnologiche efficienti in termini di costi e sostenibili, misure di mitigazione e adattamento, nonché una maggiore consapevolezza per quanto riguarda le risposte della società a queste sfide. I quadri di riferimento politici unionali e mondiali devono garantire che gli ecosistemi e la biodiversità siano protetti, valorizzati e ripristinati adeguatamente in modo da preservare la loro capacità di fornire risorse e servizi in futuro. Occorre affrontare le sfide idriche nei contesti rurali, urbani e industriali al fine di promuovere l'innovazione e l'efficienza sotto il profilo delle risorse del sistema idrico e proteggere gli ecosistemi acquatici. La ricerca e l'innovazione possono contribuire ad assicurare l'accesso e lo sfruttamento affidabili e sostenibili delle materie prime a terra e sui fondi marini e a garantire una significativa riduzione dell'uso e degli sprechi delle risorse.L'azione dell'Unione è incentrata pertanto sul sostegno agli obiettivi e alle politiche chiave dell'Unione, che coprono l'intero ciclo di innovazione e gli elementi del triangolo della conoscenza, ivi incluse la strategia ""Europa 2020"", le iniziative faro ""Unione dell'innovazione"", ""Una politica industriale per l'era della globalizzazione"", ""Un'agenda digitale europea"" e ""Un'Europa efficiente sotto il profilo delle risorse"" e la corrispondente tabella di marcia, ""Una tabella di marcia verso un'economia competitiva a basse emissioni di carbonio nel 2050"", ""L'adattamento ai cambiamenti climatici: verso un quadro d'azione europeo"", l'iniziativa ""Materie prime"", la strategia dell'Unione per lo sviluppo sostenibile, ""Una politica marittima integrata per l'Unione europea, la direttiva quadro sulla strategia per l'ambiente marino, la direttiva quadro sulle acque e le direttive basate su quest'ultima, la direttiva sulle alluvioni, il piano d'azione per l'ecoinnovazione e il programma generale di azione dell'Unione in materia di ambiente fino al 2020. Se del caso, tali azioni interagiscono con le iniziative di programmazione congiunta e i partenariati europei per l'innovazione pertinenti. Tali azioni rafforzano la capacità della società di divenire più resiliente al cambiamento ambientale e climatico e garantire la disponibilità di materie prime.Considerati il carattere transnazionale e globale del clima e dell'ambiente, la loro portata e complessità nonché la dimensione internazionale della catena di approvvigionamento delle materie prime, le attività devono essere svolte a livello unionale e superiore. Il carattere multidisciplinare della ricerca necessaria richiede la messa in comune delle conoscenze e delle risorse complementari al fine di affrontare efficacemente questa sfida in maniera sostenibile. Al fine di ridurre l'uso delle risorse e l'impatto ambientale, rafforzando nel contempo la competitività, sarà necessaria una decisiva transizione sociale e tecnologica verso un'economia basata su un rapporto sostenibile tra natura e benessere umano. Le attività coordinate di ricerca ed innovazione miglioreranno la comprensione e la previsione dei cambiamenti climatici e ambientali in una prospettiva sistemica e intersettoriale, ridurranno le incertezze, individueranno e valuteranno vulnerabilità, rischi, costi e opportunità e amplieranno la gamma e miglioreranno l'efficacia delle risposte e delle soluzioni sociali e politiche. Le azioni mireranno altresì a migliorare la produzione di ricerca e innovazione e la loro diffusione al fine di sostenere i processi decisionali e responsabilizzare gli attori a tutti i livelli della società affinché partecipino attivamente a questo processo.Affrontare la disponibilità di materie prime esige sforzi coordinati di ricerca e innovazione in diversi settori e discipline al fine di contribuire a fornire soluzioni sicure, economicamente realizzabili, compatibili con l'ambiente e socialmente accettabili lungo l'intera catena del valore (esplorazione, estrazione, lavorazione, progettazione, utilizzo e riutilizzo sostenibili, riciclaggio, sostituzione). L'innovazione in tali settori genererà opportunità di crescita e occupazione, nonché opzioni innovative che coinvolgono scienza, tecnologia, economia, società, politica e governance. Per tali motivi, sono stati avviati partenariati europei per l'innovazione sull'acqua e le materie prime.L'ecoinnovazione responsabile può fornire nuove e preziose opportunità di crescita e occupazione. Le soluzioni sviluppate per mezzo di un'azione avviata a livello unionale contrasteranno le principali minacce alla competitività industriale e consentiranno una rapida diffusione e riproduzione in tutto il mercato unico e oltre. Questo consentirà la transizione verso un'economia verde che tenga conto dell'uso sostenibile delle risorse. Le parti in questo approccio comprenderanno i responsabili politici internazionali, europei e nazionali, i programmi di ricerca e innovazione internazionali e degli Stati membri, le imprese e le industrie europee, l'Agenzia europea dell'ambiente e le agenzie ambientali nazionali e altre parti interessate.Oltre alla cooperazione bilaterale e regionale, le azioni a livello unionale sosterranno altresì gli sforzi e le iniziative internazionali pertinenti, compreso il gruppo intergovernativo di esperti dei cambiamenti climatici (IPCC), la piattaforma intergovernativa per la biodiversità e i servizi ecosistemici (IPBES) e il gruppo sull'osservazione della Terra (GEO).

Le grandi linee delle attività

(a) Lotta e adattamento ai cambiamenti climatici

Lo scopo è sviluppare e valutare misure e strategie di adattamento e attenuazione innovative, efficienti in termini di costi e sostenibili concernenti i gas ad effetto serra e gli aerosol (CO2 e diversi dal CO2), sottolineando le soluzioni verdi tecnologiche e non, attraverso la produzione di prove finalizzata a un'azione informata, tempestiva ed efficace e la messa in rete delle competenze richieste. Le attività si concentrano sul miglioramento della comprensione dei cambiamenti climatici e dei rischi associati ai fenomeni estremi nonché ai cambiamenti improvvisi legati al clima al fine di fornire proiezioni climatiche affidabili, sulla valutazione degli impatti a livello globale, regionale e locale e delle vulnerabilità, sullo sviluppo di misure di adeguamento e di prevenzione e gestione dei rischi innovative ed efficienti in termini di costi e sul sostegno alle politiche e alle strategie di mitigazione, tra cui gli studi incentrati sull'impatto di altre politiche settoriali.

(b) Protezione dell'ambiente, gestione sostenibile delle risorse naturali e idriche, della biodiversità e degli ecosistemi

L'obiettivo è fornire le conoscenze e gli strumenti per la gestione e la protezione delle risorse naturali, al fine di conseguire un equilibrio sostenibile tra risorse limitate ed esigenze presenti e future della società e dell'economia. Le attività si concentrano sullo sviluppo della nostra comprensione della biodiversità e del funzionamento degli ecosistemi, della loro interazione con i sistemi sociali e del loro ruolo nel sostenere l'economia e il benessere umano, sullo sviluppo di approcci integrati per affrontare le sfide connesse all'acqua e la transizione verso una gestione e un uso sostenibili delle risorse e dei servizi idrici e sulla fornitura di conoscenze e strumenti che consentano un processo decisionale efficace e il coinvolgimento del pubblico.

(c) Garantire un approvvigionamento sostenibile di materie prime non energetiche e non agricole

Lo scopo è migliorare la base di conoscenze sulle materie prime e sviluppare soluzioni innovative per l'esplorazione, l'estrazione, il trattamento, l'utilizzazione e la riutilizzazione, il riciclaggio e il recupero di materie prime efficienti in termini di costi e sotto il profilo delle risorse e rispettosi dell'ambiente e per la loro sostituzione con alternative a minor impatto ambientale economicamente attraenti e sostenibili sul piano ambientale, compresi processi e sistemi a ciclo chiuso. Le attività si concentrano sul miglioramento della base di conoscenze relativa alla disponibilità di materie prime, sulla promozione della fornitura, dell'utilizzo e del riutilizzo sostenibili ed efficaci delle materie prime, comprese le risorse minerarie, a terra e in mare, sull'individuazione di alternative alle materie prime essenziali e sul miglioramento della consapevolezza e delle competenze sociali riguardo alle materie prime.

(d) Agevolare la transizione verso un'economia e una società verdi per mezzo dell'ecoinnovazione

L'obiettivo è promuovere tutte le forme di ecoinnovazione che consentono la transizione verso un'economia verde. Le attività tra l'altro si basano su quelle intraprese nel quadro del programma per l'ecoinnovazione e le rafforzano, e si concentrano sul rafforzamento di tecnologie, processi, servizi e prodotti ecoinnovativi, anche attraverso l'esplorazione di modalità per ridurre la quantità di materie prime nella produzione e nel consumo, sul superamento delle barriere in tale contesto, nonché sulla loro diffusione e replicazione sul mercato, con particolare attenzione per le PMI, sul sostegno alle politiche innovative, ai modelli economici sostenibili e ai cambiamenti sociali, sulla misurazione e la valutazione dei progressi verso un'economia verde e sulla promozione dell'efficienza delle risorse per mezzo dei sistemi digitali.

(e) Sviluppare sistemi globali e continuativi di informazione e osservazione ambientali a livello mondiale

L'obiettivo è garantire la fornitura dei dati e informazioni a lungo termine necessari per far fronte a questa sfida. Le attività si concentrano sulle capacità, le tecnologie e le infrastrutture di dati relative all'osservazione e alla sorveglianza della Terra, basate sia sul telerilevamento che su misurazioni in loco, in grado di fornire costantemente informazioni tempestive e dettagliate e di consentire previsioni e proiezioni. È opportuno promuovere un accesso libero, aperto e privo di restrizioni a dati e informazioni interoperabili. Le attività contribuiscono a definire le future attività operative del programma Copernicus e a potenziare l'uso dei dati Copernicus per le attività di ricerca.

(f) Patrimonio culturale

L'obiettivo è la ricerca sulle strategie, le metodologie e gli strumenti necessari per garantire un patrimonio culturale dinamico e sostenibile per l'Europa in risposta al cambiamento climatico. Il patrimonio culturale nelle sue varie forme fisiche offre il contesto per la vita di comunità resilienti che rispondono a cambiamenti multivariati. La ricerca nell'ambito del patrimonio culturale richiede un approccio pluridisciplinare per migliorare la comprensione del materiale storico. Le attività si concentrano sull'individuazione di livelli di resilienza mediante osservazioni, monitoraggio e modellazione e permettono una migliore comprensione del modo in cui le comunità percepiscono il cambiamento climatico e i rischi sismici e vulcanici e reagiscono a essi.";"";"H2020";"H2020-EU.3.";"";"";"2014-09-22 20:48:01";"664389" +"H2020-EU.2.1.6.3.";"de";"H2020-EU.2.1.6.3.";"";"";"Grundlagen für die Nutzung von Weltraumdaten";"Enabling exploitation of space data";"

Grundlagen für die Nutzung von Weltraumdaten

Die Nutzung der Daten europäischer – wissenschaftlich, öffentlich oder kommerziell betriebener – Satelliten lässt sich deutlich erhöhen, wenn auf der Grundlage des Artikels 189 AEUV größere Anstrengungen in Bezug auf die Verarbeitung, Archivierung, Validierung, Standardisierung und nachhaltige Verfügbarkeit der Weltraumdaten sowie die Förderung der Entwicklung neuer Informationsprodukte und -dienste, die sich auf diese Daten stützen, unternommen werden, einschließlich Innovationen bei der Handhabung, Weitergabe und Kompatibilität der Daten, vor allem Förderung des Zugangs zu und des Austauschs von geowissenschaftlichen Daten und Metadaten. Diese Tätigkeiten können auch höhere Renditen der Investitionen in die Weltrauminfrastruktur sicherstellen und zur Bewältigung gesellschaftlicher Herausforderungen dann beitragen, wenn sie global koordiniert werden, etwa im Rahmen des Globalen Überwachungssystems für Erdbeobachtungssysteme (GEOSS) – insbesondere durch vollständige Ausschöpfung des Potenzials des GMES-Programms als wichtigstem europäischem Beitrag hierzu – des europäischen Satellitennavigationsprogramms Galileo oder des Zwischenstaatlichen Sachverständigenrats für Klimafragen (IPCC). Eine rasche Einbeziehung dieser Innovationen in die einschlägigen Anwendungs- und Entscheidungsprozesse wird unterstützt. Dies schließt auch die Auswertung von Daten für weitere wissenschaftliche Untersuchungen ein.";"";"H2020";"H2020-EU.2.1.6.";"";"";"2014-09-22 20:42:29";"664213" +"H2020-Euratom";"en";"H2020-Euratom";"";"";"Euratom";"";"";"";"H2020";"H2020";"";"";"2014-09-23 17:05:17";"664515" +"H2020-EU.2.1.6.3.";"es";"H2020-EU.2.1.6.3.";"";"";"Favorecer la explotación de los datos espaciales";"Enabling exploitation of space data";"

Favorecer la explotación de los datos espaciales

Resulta posible incrementar considerablemente la explotación de los datos procedentes de los satélites europeos (científicos, públicos o comerciales) si se lleva a cabo un mayor esfuerzo para el tratamiento, archivo, validación, normalización y disponibilidad sostenible de los datos espaciales, así como para apoyar la introducción de nuevos productos y servicios de información derivados de esos datos, a la vista del artículo 189 del TFUE, y las innovaciones en materia de manipulación, difusión e interoperabilidad de datos, en particular la promoción del acceso a los datos y metadatos en materia de ciencias de la Tierra y el intercambio de dichos datos, también pueden garantizar una mayor rentabilidad de la inversión en infraestructura espacial y contribuir a afrontar los retos de la sociedad, en particular si se coordinan en un esfuerzo mundial, por ejemplo a través del Sistema de Sistemas de Observación Mundial de la Tierra (GEOSS), concretamente mediante una plena explotación del programa Copernicus como contribución europea principal del citado sistema, el programa europeo de navegación por satélite Galileo, o el IPCC para las cuestiones relacionadas con el cambio climático. Se apoyará la rápida introducción de estas innovaciones en los procesos pertinentes de aplicación y de toma de decisiones. Ello incluye asimismo la explotación de los datos para investigaciones científicas ulteriores.";"";"H2020";"H2020-EU.2.1.6.";"";"";"2014-09-22 20:42:29";"664213" +"H2020-EU.2.1.6.3.";"fr";"H2020-EU.2.1.6.3.";"";"";"Permettre l'exploitation des données spatiales";"Enabling exploitation of space data";"

Permettre l'exploitation des données spatiales

L'exploitation des données provenant des satellites européens (qu'ils soient scientifiques, publics ou commerciaux) peut progresser de manière considérable moyennant un nouvel effort pour le traitement, l'archivage, la validation, la normalisation et la mise à disposition durable des données spatiales, ainsi que pour soutenir le développement de nouveaux produits et services résultant de ces données, dans le domaine de l'information, en tenant compte de l'article 189 du traité sur le fonctionnement de l'Union européenne, y compris des innovations dans le domaine du traitement, de la diffusion et de l'interopérabilité des données, notamment la promotion d'un accès aux données et métadonnées relatives aux sciences de la terre et à leur échange. Ces activités peuvent également garantir un meilleur retour sur investissement des infrastructures spatiales et contribuer à relever les défis de société, surtout si elles sont coordonnées dans le cadre d'initiatives mondiales, telles que le réseau mondial des systèmes d'observation de la Terre, en l'occurrence en exploitant pleinement le programme Copernicus, qui constitue la principale contribution européenne, le programme européen de navigation par satellite Galileo ou le Groupe d'experts intergouvernemental sur l'évolution du climat. Un soutien sera accordé à l'intégration rapide de ces innovations dans les processus de demande et de prise de décision. Cela recouvre également l'exploitation des données à des fins de recherches scientifiques complémentaires.";"";"H2020";"H2020-EU.2.1.6.";"";"";"2014-09-22 20:42:29";"664213" +"H2020-EU.2.1.6.3.";"pl";"H2020-EU.2.1.6.3.";"";"";"Umożliwienie wykorzystania danych pozyskanych w przestrzeni kosmicznej";"Enabling exploitation of space data";"

Umożliwienie wykorzystania danych pozyskanych w przestrzeni kosmicznej

Znaczną intensyfikację wykorzystania danych pochodzących z satelitów europejskich (naukowych, publicznych lub komercyjnych) można osiągnąć, jeżeli kontynuowane będą wysiłki w zakresie przetwarzania, archiwizowania, walidacji i standaryzacji oraz trwałej dostępności danych pozyskanych w przestrzeni kosmicznej, a także w zakresie wspierania rozwoju nowych produktów i usług informacyjnych opartych na tych danych – z uwzględnieniem art. 189 TFUE – w tym innowacji w zakresie przetwarzania, upowszechniania i interoperacyjności danych; w szczególności wspieranie dostępu do naukowych danych i metadanych dotyczących Ziemi oraz ich wymiana. Takie działania mogą również zapewnić większy zwrot z inwestycji w infrastrukturę kosmiczną i przyczynić się do sprostania wyzwaniom społecznym, w szczególności w przypadku ich skoordynowania w ramach globalnego wysiłku, np. poprzez Globalną Sieć Systemów Obserwacji Ziemi (GEOSS), tj. poprzez pełne wykorzystanie programu Copernicus jako głównego wkładu europejskiego w tę sieć, europejski program nawigacji satelitarnej Galileo lub Międzyrządowego Zespołu ds. Zmian Klimatu (IPCC) w odniesieniu do kwestii dotyczących zmiany klimatu. Wspierane będzie szybkie wprowadzenie tych innowacji do odpowiednich zastosowań i procesów decyzyjnych. Obejmuje to również wykorzystywanie danych do dalszych badań naukowych.";"";"H2020";"H2020-EU.2.1.6.";"";"";"2014-09-22 20:42:29";"664213" +"H2020-EU.2.1.6.3.";"it";"H2020-EU.2.1.6.3.";"";"";"Permettere lo sfruttamento dei dati spaziali";"";"

Permettere lo sfruttamento dei dati spaziali

È possibile conseguire un aumento considerevole dello sfruttamento dei dati provenienti dai satelliti europei (scientifici, pubblici o commerciali) con un ulteriore sforzo per il trattamento, l'archiviazione, la convalida, la standardizzazione e la disponibilità sostenibile dei dati spaziali, nonché per sostenere lo sviluppo di nuovi prodotti e servizi di informazione derivanti da tali dati, tenendo conto dell'articolo 189 TFUE, ivi incluse le innovazioni nella gestione, nella diffusione e nell'interoperabilità dei dati, segnatamente la promozione dell'accesso a dati e metadati delle scienze della Terra e dello scambio di questi ultimi. Tali attività possono altresì garantire un ritorno degli investimenti più elevato per le infrastrutture spaziali e contribuire ad affrontare le sfide per la società, in particolare se coordinate in uno sforzo globale, come per esempio attraverso il Sistema di sistemi per l'osservazione globale della terra (GEOSS), vale a dire sfruttando appieno il programma Copernicus in quanto principale contributo europeo, il programma europeo di navigazione satellitare Galileo o il Gruppo intergovernativo di esperti sul cambiamento climatico (IPCC) per le questioni legate ai cambiamenti climatici. Sarà dato sostegno a una rapida introduzione di tali innovazioni nei pertinenti processi decisionali e di applicazione. Ciò comprende altresì l'utilizzo dei dati per ulteriori indagini scientifiche.";"";"H2020";"H2020-EU.2.1.6.";"";"";"2014-09-22 20:42:29";"664213" +"H2020-EU.5.f.";"en";"H2020-EU.5.f.";"";"";"Develop the governance for the advancement of responsible research and innovation by all stakeholders, which is sensitive to society needs and demands and promote an ethics framework for research and innovation";"";"";"";"H2020";"H2020-EU.5.";"";"";"2014-09-22 20:51:41";"664505" +"H2020-EU.5.b.";"en";"H2020-EU.5.b.";"";"";"Promote gender equality in particular by supporting structural change in the organisation of research institutions and in the content and design of research activities";"";"";"";"H2020";"H2020-EU.5.";"";"";"2014-09-22 20:51:29";"664499" +"H2020-EU.3.2.4.1.";"en";"H2020-EU.3.2.4.1.";"";"";"Fostering the bio-economy for bio-based industries";"";"";"";"H2020";"H2020-EU.3.2.4.";"";"";"2014-09-22 20:45:29";"664311" +"H2020-EU.2.1.6.2.";"it";"H2020-EU.2.1.6.2.";"";"";"Consentire progressi nell'ambito delle tecnologie spaziali";"Enabling advances in space technology";"

Consentire progressi nell'ambito delle tecnologie spaziali

Quest'iniziativa mira a sviluppare tecnologie spaziali avanzate e abilitanti e concetti operativi dall'idea alla dimostrazione nello spazio. Ciò comprende le tecnologie a sostegno dell'accesso allo spazio, le tecnologie per la protezione dei dispositivi spaziali da minacce quali detriti spaziali ed eruzioni solari, nonché per le telecomunicazioni satellitari, la navigazione e il telerilevamento. Lo sviluppo e l'applicazione di tecnologie spaziali avanzate richiede un'istruzione e una formazione continue di ingegneri e scienziati altamente qualificati, nonché forti connessioni tra questi e gli utenti delle applicazioni spaziali.";"";"H2020";"H2020-EU.2.1.6.";"";"";"2014-09-22 20:42:25";"664211" +"H2020-EU.2.1.6.2.";"de";"H2020-EU.2.1.6.2.";"";"";"Grundlagen für Fortschritte in den Weltraumtechnologien";"Enabling advances in space technology";"

Grundlagen für Fortschritte in den Weltraumtechnologien

Ziel ist die Entwicklung fortgeschrittener und grundlegender Weltraumtechnologien und operativer Konzepte von der Idee bis zur Demonstration im Weltraum. Dies schließt Technologien für einen besseren Zugang zum Weltraum, Technologien zum Schutz der Weltraumsysteme vor Bedrohungen durch beispielsweise Weltraummüll oder Sonneneruptionen sowie Telekommunikation, Navigation und Fernerkundung über Satelliten ein. Die Entwicklung und Anwendung fortgeschrittener Weltraumtechnologien erfordert die kontinuierliche Aus- und Weiterbildung hochqualifizierter Ingenieure und Wissenschaftler sowie eine enge Verbindung zwischen diesen und den Nutzern der Raumfahrtanwendungen.";"";"H2020";"H2020-EU.2.1.6.";"";"";"2014-09-22 20:42:25";"664211" +"H2020-EU.2.1.6.2.";"pl";"H2020-EU.2.1.6.2.";"";"";"Wspomaganie postępów w zakresie technologii kosmicznych";"Enabling advances in space technology";"

Wspomaganie postępów w zakresie technologii kosmicznych

Ma to na celu opracowanie zaawansowanych i prorozwojowych technologii kosmicznych i koncepcji operacyjnych od poziomu pomysłu po demonstrację w przestrzeni kosmicznej. Obejmuje to technologie wspomagające dostęp do przestrzeni kosmicznej, technologie służące ochronie systemów kosmicznych przed zagrożeniami takimi jak kosmiczne śmieci i rozbłyski słoneczne, oraz satelitarne technologie łączności, nawigacji i teledetekcji. Opracowanie i zastosowanie zaawansowanych technologii kosmicznych wymaga ciągłego kształcenia i szkolenia wysoce wykwalifikowanych inżynierów i naukowców, a także silnych powiązań między nimi a użytkownikami zastosowań kosmicznych.";"";"H2020";"H2020-EU.2.1.6.";"";"";"2014-09-22 20:42:25";"664211" +"H2020-EU.2.1.6.2.";"fr";"H2020-EU.2.1.6.2.";"";"";"Permettre des avancées dans le domaine des technologies spatiales";"Enabling advances in space technology";"

Permettre des avancées dans le domaine des technologies spatiales

L'objectif est de permettre le développement de technologies spatiales et de concepts opérationnels avancés et catalyseurs, du stade de l'idée à celui de la démonstration en milieu spatial. Il s'agit notamment des technologies soutenant l'accès à l'espace, des technologies permettant d'assurer la protection des équipements spatiaux contre les menaces telles que les débris et les éruptions solaires ainsi que des technologies de télécommunication par satellite, de navigation et de télédétection. Le développement et la mise en œuvre de technologies spatiales avancées nécessitent un système d'éducation et de formation continues pour disposer d'ingénieurs et de scientifiques hautement qualifiés, ainsi que des liens étroits entre ceux-ci et les utilisateurs des applications spatiales.";"";"H2020";"H2020-EU.2.1.6.";"";"";"2014-09-22 20:42:25";"664211" +"H2020-EU.2.1.6.2.";"es";"H2020-EU.2.1.6.2.";"";"";"Favorecer los avances en las tecnologías espaciales";"Enabling advances in space technology";"

Favorecer los avances en las tecnologías espaciales

El objetivo es desarrollar tecnologías espaciales avanzadas y generadoras y conceptos operativos que vayan de la idea a la demostración en el espacio. Ello incluye las tecnologías de apoyo del acceso al espacio, las tecnologías para la protección del patrimonio espacial frente a amenazas tales como la basura espacial y las fulguraciones solares, así como la navegación, la teledetección y las telecomunicaciones por satélite. Para desarrollar y aplicar tecnologías espaciales avanzadas son necesarias la educación y la formación permanentes de ingenieros y científicos altamente cualificados, así como unos sólidos vínculos entre estos y los usuarios de las aplicaciones espaciales.";"";"H2020";"H2020-EU.2.1.6.";"";"";"2014-09-22 20:42:25";"664211" +"H2020-Euratom-1.8.";"en";"H2020-Euratom-1.8.";"";"";"Ensure availability and use of research infrastructures of pan_european relevance";"";"";"";"H2020";"H2020-Euratom-1.";"";"";"2014-09-22 20:52:33";"664533" +"H2020-EU.3.3.1.3.";"en";"H2020-EU.3.3.1.3.";"";"";"Foster European Smart cities and Communities";"";"";"";"H2020";"H2020-EU.3.3.1.";"";"";"2014-09-22 20:46:09";"664329" +"H2020-EU.3.7.3.";"en";"H2020-EU.3.7.3.";"";"";"Strengthen security through border management";"";"";"";"H2020";"H2020-EU.3.7.";"";"";"2014-09-22 20:50:34";"664469" +"H2020-EU.3.7.";"fr";"H2020-EU.3.7.";"";"";"DÉFIS DE SOCIÉTÉ - Sociétés sûres - Protéger la liberté et la sécurité de l'Europe et de ses citoyens";"Secure societies";"

DÉFIS DE SOCIÉTÉ - Sociétés sûres - Protéger la liberté et la sécurité de l'Europe et de ses citoyens

Objectif spécifique

L'objectif spécifique est de promouvoir des sociétés européennes sûres dans un contexte de transformations sans précédent et d'interdépendances et de menaces mondiales croissantes, tout en renforçant la culture européenne de liberté et de justice.L'Europe n'a jamais été aussi pacifiée, et les citoyens européens bénéficient de niveaux de sécurité élevés par rapport à d'autres régions du monde. Toutefois, sa vulnérabilité perdure dans un contexte de mondialisation sans cesse croissante dans lequel les sociétés font face à des menaces et à des défis pour la sécurité qui gagnent en ampleur et en complexité.La menace d'agressions militaires à grande échelle a diminué et les questions de sécurité se concentrent sur de nouvelles menaces multiformes, interdépendantes et transnationales. Il y a lieu de prendre en compte des aspects tels que les droits de l'homme, la dégradation de l'environnement, la stabilité politique et la démocratie, les questions sociales, l'identité culturelle et religieuse ou la migration. Dans ce contexte, les aspects internes et externes de la sécurité sont inextricablement liés. Afin de protéger la liberté et la sécurité, l'Union doit trouver des réponses efficaces au moyen d'un éventail complet et innovant d'instruments de sécurité. La recherche et l'innovation peuvent jouer un rôle de soutien évident bien qu'elles ne puissent, à elles seules, garantir la sécurité. Les activités de recherche et d'innovation devraient viser à comprendre, à détecter, à empêcher et à dissuader les menaces pour la sécurité, à s'y préparer et à s'en protéger. De surcroît, la sécurité implique des défis fondamentaux qui ne peuvent être relevés de manière indépendante ou sectorielle, mais exigent des approches plus ambitieuses, coordonnées et globales.Les citoyens sont de plus en plus affectés par de nombreuses formes d'insécurité, qu'elles soient dues à la criminalité, à la violence, au terrorisme, aux catastrophes naturelles/d'origine humaine, aux cyberattaques ou aux atteintes à la vie privée, ou à d'autres formes de désordres sociaux et économiques.D'après les estimations, jusqu'à 75 millions de personnes seraient chaque année directement victimes de la criminalité en Europe. Les coûts directs de la criminalité, du terrorisme, des activités illégales, de la violence et des catastrophes en Europe ont été évalués à au moins 650 milliards d'EUR en 2010 (soit environ 5 % du PIB de l'Union). Le terrorisme a eu des conséquences irréparables dans plusieurs régions d'Europe et dans le monde, en ayant provoqué la mort de très nombreuses personnes et entraîné de lourdes pertes économiques. Il a également eu des répercussions culturelles et importantes au niveau mondial.Les particuliers, les entreprises et les institutions interagissent de plus en plus souvent par voie électronique et ont de plus en plus recours aux transactions en ligne, que ce soit dans le cadre de relations sociales, financières ou commerciales. Le développement de l'internet a cependant entraîné celui de la cybercriminalité, qui représente des milliards d'euros chaque année, et son lot de cyberattaques contre des infrastructures critiques et d'atteintes à la vie privée, qui affectent les individus ou les entités sur l'ensemble du continent. Les changements liés à la nature et à la perception de l'insécurité, au jour le jour, ne peuvent qu'entamer la confiance des citoyens à l'égard non seulement des institutions, mais aussi de leurs semblables.Afin d'anticiper, de prévenir et de gérer ces menaces, il est nécessaire de comprendre les causes, de concevoir et de mettre en œuvre des technologies, des solutions, des outils de prospection et des connaissances innovants, d'intensifier la coopération entre fournisseurs et utilisateurs, de trouver des solutions en matière de sécurité civile, d'améliorer la compétitivité du secteur européen de la sécurité et des services qu'il propose, y compris dans le domaine des TIC, et de prévenir et de combattre les atteintes à la vie privée et la violation des droits de l'homme sur l'internet, et ailleurs, tout en garantissant les droits et libertés individuels des citoyens européens.Afin d'améliorer la coopération transfrontière entre les différents types de services d'urgence, il conviendrait de veiller à l'interopérabilité et à la normalisation.Enfin, puisque les politiques de sécurité devraient interagir avec diverses politiques sociales, une composante importante de ce défi consistera à renforcer la dimension sociétale de la recherche relative à la sécurité.Le respect des valeurs fondamentales telles que la liberté, la démocratie, l'égalité et l'État de droit doit être à la base de toute activité entreprise dans le cadre de ce défi de société pour apporter la sécurité aux citoyens européens.

Justification et valeur ajoutée de l'Union

L'Union et ses citoyens, ses entreprises et ses partenaires internationaux sont confrontés à une série de menaces pour la sécurité, comme la criminalité, le terrorisme, le trafic et les situations d'urgence collectives dues à des catastrophes naturelles ou d'origine humaine. Ces menaces peuvent traverser les frontières et visent tant des cibles physiques que le cyberespace, les attaques provenant de différentes sources. Les attaques contre des systèmes d'information ou de communication de pouvoirs publics et d'entités privées, par exemple, non seulement sapent la confiance des citoyens dans les systèmes d'information et de communication et entraînent des pertes financières directes et une perte de débouchés commerciaux, mais elles peuvent également porter gravement atteinte à des infrastructures et services critiques tels que l'énergie, l'aviation et d'autres moyens de transport, la fourniture d'eau et de produits alimentaires, la santé, la finance et les télécommunications.Ces menaces pourraient éventuellement mettre en danger les fondements internes de notre société. La technologie et la conception créative peuvent apporter une contribution importante à toute réponse qui sera mise au point. Toutefois, il conviendrait d'élaborer de nouvelles solutions tout en gardant à l'esprit le caractère approprié des moyens et leur adéquation avec la demande de la société, en particulier en termes de garanties pour les droits et libertés fondamentaux des citoyens.Enfin, la sécurité représente également un enjeu économique majeur, compte tenu de la place que l'Europe occupe sur le marché mondial de la sécurité, qui connaît une croissance rapide. Compte tenu de l'incidence potentielle de certaines menaces sur les services, les réseaux ou les entreprises, le déploiement de solutions de sécurité adéquates est devenu essentiel pour l'économie et la compétitivité de l'industrie manufacturière européenne. La coopération entre les États membres, mais aussi avec les pays tiers et les organisations internationales, est un élément de ce défi.Le financement de la recherche et de l'innovation par l'Union au titre de ce défi de société appuiera donc le développement, la mise en œuvre et l'adaptation de politiques fondamentales de l'Union, notamment les objectifs de la stratégie Europe 2020, la politique étrangère et de sécurité commune, la stratégie de sécurité intérieure pour l'Union et l'initiative phare «Une stratégie numérique pour l'Europe». Une coordination sera instaurée avec les actions directes du JRC.

Grandes lignes des activités

L'objectif est de soutenir les politiques de l'Union en matière de sécurité intérieure et extérieure et de veiller à la cybersécurité, à la confiance et au respect de la vie privée dans le marché unique numérique, tout en améliorant la compétitivité du secteur européen de la sécurité et des services qu'il propose, y compris dans le domaine des TIC. Les activités mettront notamment l'accent sur la recherche et le développement concernant la prochaine génération de solutions innovantes, en travaillant sur de nouveaux concepts, conceptions et normes interopérables. Il conviendra pour ce faire de développer des technologies et des solutions innovantes qui comblent les lacunes en matière de sécurité et permettent de réduire le risque lié aux menaces dans ce domaine.Ces actions axées sur la réalisation de missions intégreront les exigences de différents utilisateurs finaux (citoyens, entreprises, organisations de la société civile et administrations, y compris les autorités au niveau national et international, services de protection civile, services répressifs, gardes-frontières, etc.), afin de prendre en considération l'évolution des menaces en matière de sécurité, la protection de la vie privée et les aspects sociétaux nécessaires.Les activités visent à:(a) lutter contre la criminalité, les trafics et le terrorisme, notamment en appréhendant et en combattant les idées et les convictions terroristes; (b) protéger et améliorer la résilience des infrastructures critiques, des chaînes d'approvisionnement et des modes de transport; (c) renforcer la sécurité par la gestion des frontières; (d) améliorer la cybersécurité; (e) améliorer la résilience de l'Europe face aux crises et aux catastrophes; (f) garantir le respect de la vie privée et de la liberté, y compris sur l'internet, et renforcer la compréhension, du point de vue sociétal, juridique et éthique, de tous les domaines de la sécurité, du risque et de la gestion; (g) améliorer la normalisation et l'interopérabilité des systèmes, notamment à des fins d'urgence;(h) soutenir la politique extérieure de l'Union en matière de sécurité, y compris pour la prévention des conflits et la consolidation de la paix. ";"";"H2020";"H2020-EU.3.";"";"";"2014-09-22 20:50:23";"664463" +"H2020-EU.3.7.";"pl";"H2020-EU.3.7.";"";"";"WYZWANIA SPOŁECZNE - Bezpieczne społeczeństwa – ochrona wolności i bezpieczeństwa Europy i jej obywateli";"Secure societies";"

WYZWANIA SPOŁECZNE - Bezpieczne społeczeństwa – ochrona wolności i bezpieczeństwa Europy i jej obywateli

Cel szczegółowy

Celem szczegółowym jest wspieranie bezpiecznych społeczeństw europejskich w kontekście bezprecedensowych transformacji i nasilających się globalnych współzależności oraz zagrożeń, przy jednoczesnym wzmocnieniu europejskiej kultury wolności i sprawiedliwości.Europa nie była nigdy do tego stopnia pokojowo skonsolidowana, a poziom bezpieczeństwa obywateli w Europie jest wysoki w porównaniu z innymi częściami świata. Jednak podatność Europy na zagrożenia utrzymuje się w kontekście postępującej w niespotykanym dotąd tempie globalizacji – społeczeństwa mierzą się w dziedzinie bezpieczeństwa z ryzykiem i wyzwaniami, których skala i stopień wyrafinowania są coraz większe.Zagrożenie agresją wojskową o dużym zasięgu zmniejszyło się, a obawy dotyczące bezpieczeństwa skupiają się na nowych wieloaspektowych, powiązanych ze sobą i ponadnarodowych zagrożeniach. Pod uwagę należy wziąć aspekty takie jak prawa człowieka, degradacja środowiska, stabilność polityczna i demokracja, kwestie społeczne, tożsamość kulturowa i religijna czy migracja. W tym kontekście wewnętrzne i zewnętrzne aspekty bezpieczeństwa są ze sobą nierozerwalnie powiązane. Do ochrony wolności i bezpieczeństwa Unia potrzebuje skutecznych odpowiedzi przewidujących użycie kompleksowego i innowacyjnego zestawu instrumentów bezpieczeństwa. Badania naukowe i innowacje mogą wyraźnie odgrywać istotną rolę wspomagającą, choć nie mogą samodzielnie zagwarantować bezpieczeństwa. Działania w zakresie badań naukowych i innowacji powinny mieć na celu zrozumienie zagrożeń bezpieczeństwa, wykrywanie ich, zapobieganie im, powstrzymywanie i ochronę przed nimi oraz przygotowanie na nie. Ponadto bezpieczeństwo wiąże się z fundamentalnymi wyzwaniami, których nie można wyeliminować w sposób niezależny i sektorowy i które wymagają ambitniejszych, skoordynowanych i całościowych podejść.Obywatele coraz częściej mają do czynienia z poczuciem zagrożenia w wielu formach, niezależnie od tego, czy jest to zagrożenie przestępczością, przemocą, terroryzmem, katastrofami naturalnymi lub spowodowanymi przez człowieka, atakami cybernetycznymi lub naruszeniami prywatności czy innymi formami zaburzeń społecznych i gospodarczych.Według szacunków, co roku w Europie ofiarą przestępstw pada bezpośrednio nawet 75 mln osób. W 2010 r. bezpośredni koszt przestępczości, terroryzmu, czynów niezgodnych z prawem, przemocy i katastrof w Europie oszacowano na co najmniej 650 mld EUR (ok. 5% PKB Unii). W niektórych częściach Europy i świata dały o sobie znać fatalne skutki terroryzmu, który kosztował tysiące istnień ludzkich i spowodował znaczne straty gospodarcze. Miał on również znaczne oddziaływanie kulturowe i globalne.Obywatele, przedsiębiorstwa i instytucje są w coraz większym stopniu zaangażowane w cyfrowe interakcje i transakcje w społecznych, finansowych i handlowych obszarach życia, jednak rozwój internetu doprowadził także do pojawienia się cyberprzestępczości, przynoszącej co roku miliardy euro strat, do cyberataków na infrastrukturę krytyczną oraz naruszeń prywatności dotykających osoby fizyczne lub organizacje na całym kontynencie. Zmiany charakteru i sposobu odczuwania braku bezpieczeństwa w życiu codziennym prawdopodobnie wpłyną na zaufanie obywateli nie tylko do instytucji, lecz także do siebie nawzajem.Przewidywanie tych zagrożeń, zapobieganie im i postępowanie w przypadku ich wystąpienia wymaga zrozumienia przyczyn, opracowania i zastosowania innowacyjnych technologii, rozwiązań, narzędzi prognozowania i wiedzy, stymulowania współpracy między dostawcami i użytkownikami, poszukiwania rozwiązań w zakresie bezpieczeństwa cywilnego, podniesienia konkurencyjności europejskich sektorów i usług bezpieczeństwa, w tym ICT, oraz zapobiegania nadużyciom w zakresie prywatności i łamania praw człowieka w internecie i gdzie indziej oraz zwalczania tych nadużyć, przy czym należy zapewnić obywatelom Europy indywidualne prawa i wolność.W celu poprawy ponadgranicznej współpracy między różnego rodzaju służbami ratowniczymi należy zwrócić uwagę na kwestie interoperacyjności i normalizacji.Ponadto, ponieważ polityka bezpieczeństwa powinna współgrać z różnymi obszarami polityki społecznej, ważnym aspektem działań podejmowanych w związku z tym wyzwaniem społecznym będzie wzmocnienie społecznego wymiaru badań naukowych w zakresie bezpieczeństwa.Poszanowanie podstawowych wartości, takich jak wolność, demokracja, równość i praworządność, musi leżeć u podstaw wszelkich działań podejmowanych w związku z tym wyzwaniem, co pozwoli zapewnić bezpieczeństwo europejskim obywatelom.

Uzasadnienie i unijna wartość dodana

Unia i jej obywatele, przemysł i partnerzy międzynarodowi stykają się z wieloma zagrożeniami dla ich bezpieczeństwa, takimi jak przestępczość, terroryzm, nielegalny handel i masowe kryzysy wywołane katastrofami naturalnymi lub spowodowanymi przez człowieka. Tego rodzaju zagrożenia mogą przekraczać granice i dotyczyć obiektów fizycznych lub cyberprzestrzeni, a ataki mogą mieć różne źródła. Ataki, na przykład na systemy informacji lub komunikacji organów publicznych i podmiotów prywatnych, nie tylko podważają zaufanie obywateli do systemów informacji i komunikacji, powodują bezpośrednie straty finansowe i szkody w postaci utraty możliwości biznesowych, ale mogą również wywrzeć poważny wpływ na infrastrukturę krytyczną i sektory usługowe, takie jak energia, lotnictwo i inne rodzaje transportu, zaopatrzenie w wodę i żywność, ochrona zdrowia, finanse lub telekomunikacja.Zagrożenia te mogłyby narazić na szwank wewnętrzne podwaliny naszego społeczeństwa. Technologia i twórcze projektowanie mogą w istotny sposób przyczynić się do znalezienia sposobu reakcji na te zagrożenia. Jednak przy opracowywaniu nowych rozwiązań należy pamiętać, że wybrane środki muszą być właściwe i odpowiednie do potrzeb społecznych, w szczególności jeżeli chodzi o zagwarantowanie podstawowych praw i swobód obywatelskich.Bezpieczeństwo stanowi także istotne wyzwanie gospodarcze ze względu na udział Europy w szybko rozwijającym się światowym rynku w tej dziedzinie. Ze względu na potencjalne skutki niektórych zagrożeń dla usług, sieci i przedsiębiorstw, wdrożenie odpowiednich rozwiązań z zakresu bezpieczeństwa nabrało zasadniczego znaczenia dla gospodarki i konkurencyjności produkcji europejskiej. Współpraca między państwami członkowskimi, ale też z państwami trzecimi i organizacjami międzynarodowymi jest elementem tego wyzwania.Unijne finansowanie badań naukowych i innowacji zapewniane w związku z tym wyzwaniem społecznym będzie zatem wspierać rozwój, realizację i dostosowanie kluczowych kierunków polityki Unii, zwłaszcza celów strategii „Europa 2020”, wspólnej polityki zagranicznej i bezpieczeństwa, strategii bezpieczeństwa wewnętrznego Unii i inicjatywy przewodniej „Europejska agenda cyfrowa”. Kontynuowana będzie koordynacja z działaniami bezpośrednimi JRC.

Ogólne kierunki działań

Celem jest wsparcie polityki Unii w zakresie bezpieczeństwa wewnętrznego i zewnętrznego oraz zapewnienie bezpieczeństwa cybernetycznego, zaufania i prywatności na jednolitym rynku cyfrowym, przy jednoczesnej poprawie konkurencyjności unijnego sektora i usług bezpieczeństwa, w tym ICT. Działania te skupią się m.in. na działalności badawczo-rozwojowej w zakresie innowacyjnych rozwiązań nowej generacji i polegać będą na opracowaniu nowatorskich koncepcji, projektów oraz norm gwarantujących interoperacyjność. Nastąpi to dzięki rozwojowi innowacyjnych technologii i rozwiązań służących eliminacji braków w dziedzinie bezpieczeństwa i umożliwiających zmniejszanie ryzyka płynącego z zagrożeń dla bezpieczeństwa.Te zorientowane na realizację misji działania będą prowadzone z uwzględnieniem potrzeb różnych użytkowników końcowych (obywateli, przedsiębiorstw, organizacji społeczeństwa obywatelskiego, administracji, w tym organów krajowych i międzynarodowych, organów ds. ochrony ludności, organów ścigania, straży granicznej itd.), tak by wziąć pod uwagę ewolucję zagrożeń dla bezpieczeństwa i ochrony prywatności oraz niezbędne aspekty społeczne.Działania mają się koncentrować na:(a) zwalczaniu przestępczości, nielegalnego handlu i terroryzmu, w tym na zrozumieniu poglądów i przekonań terrorystów oraz sposobów przeciwstawienia się im; (b) ochronie i poprawie odporności infrastruktury krytycznej, łańcuchów dostaw i środków transportu; (c) zwiększeniu ochrony poprzez zarządzanie granicami; (d) poprawie bezpieczeństwa cybernetycznego; (e) zwiększaniu odporności Europy na kryzysy i katastrofy; (f) zapewnieniu prywatności i wolności, w tym w internecie, oraz lepszym poznaniu przez społeczeństwo prawnych i etycznych aspektów wszystkich obszarów bezpieczeństwa, zagrożenia i zarządzania;(g) wzmocnieniu normalizacji i interoperacyjności systemów, w tym w zakresie zastosowań w sytuacjach kryzysowych; (h) wspieraniu zewnętrznych polityk bezpieczeństwa Unii, w tym zapobiegania konfliktom i budowania pokoju. ";"";"H2020";"H2020-EU.3.";"";"";"2014-09-22 20:50:23";"664463" +"H2020-EU.3.7.";"de";"H2020-EU.3.7.";"";"";"GESELLSCHAFTLICHE HERAUSFORDERUNGEN - Sichere Gesellschaften – Schutz der Freiheit und Sicherheit Europas und seiner Bürger";"Secure societies";"

GESELLSCHAFTLICHE HERAUSFORDERUNGEN - Sichere Gesellschaften – Schutz der Freiheit und Sicherheit Europas und seiner Bürger

Einzelziel

Einzelziel ist die Förderung sicherer europäischer Gesellschaften vor dem Hintergrund eines beispiellosen Wandels und wachsender globaler Interdependenzen und Bedrohungen, unter Verstärkung der europäischen Kultur der Freiheit und des Rechts.Europa war noch nie so friedlich konsolidiert und die von den europäischen Bürgern in Anspruch genommenen Sicherheitsniveaus sind verglichen mit denen in anderen Teilen der Welt hoch. Die Anfälligkeit Europas bleibt jedoch vor dem Hintergrund einer ständig zunehmenden Globalisierung, in der die Gesellschaften sich Sicherheitsbedrohungen und Herausforderungen gegenübersehen, die sowohl vom Umfang als auch vom Anspruch eher größer werden, bestehen.Die Gefahr ausgedehnter militärischer Aggressionen hat abgenommen und Sicherheitsbedenken konzentrieren sich auf neue vielschichtige, untereinander verflochtene transnationale Bedrohungen. Aspekte wie Menschenrechte, Umweltschädigung, politische Stabilität und Demokratie, soziale Fragen, kulturelle und religiöse Identität oder Einwanderung müssen berücksichtigt werden. In diesem Kontext sind die internen und externen Sicherheitsaspekte untrennbar verbunden. Zum Schutz von Freiheit und Sicherheit benötigt die Union wirksame Antworten unter Heranziehung eines umfassenden und innovativen Satzes von Sicherheitsinstrumenten. Forschung und Innovation können eine eindeutig unterstützende Rolle spielen, wenngleich sie nicht allein die Sicherheit garantieren können. Forschung und innovative Tätigkeiten sollten darauf abzielen, Sicherheitsbedrohungen zu verstehen, aufzuspüren, zu verhindern, aufzudecken, vorzubeugen, abzuwehren, sich darauf vorzubereiten sowie sich vor ihnen zu schützen. Zudem ist die Sicherheit eine grundlegende Herausforderung, die nicht mit unabhängigen und bereichsspezifischen Maßnahmen bewältigt werden kann, sondern die ehrgeizigere, besser koordinierte sowie ganzheitliche Ansätze erfordert.Das Gefühl der Unsicherheit nimmt bei den Bürgern in vielerlei Hinsicht zu, sei es aufgrund von Kriminalität, Gewalt, Terrorismus, Naturkatastrophen bzw. vom Menschen verursachten Katastrophen, Cyberangriffen oder Verletzungen der Privatsphäre oder anderen Formen gesellschaftlicher oder ökonomischer Störungen.Schätzungen zufolge werden in Europa jedes Jahr bis zu 75 Millionen Menschen unmittelbar zu Kriminalitätsopfern(24). Die direkten Kosten von Kriminalität, Terrorismus, illegalen Aktivitäten, Gewalt und Katastrophen in Europa wurden 2010 auf mindestens 650 Mrd. EUR (etwa 5 des BIP der Union) veranschlagt. Der Terrorismus hat sich in verschiedenen Teilen Europas und weltweit mit seinen fatalen Folgen gezeigt, die zum Verlust zahlreicher Menschenleben und zu erheblichen wirtschaftlichen Verlusten geführt haben. Er hat ferner erhebliche Auswirkungen in kultureller und globaler Hinsicht.Bürger, Unternehmen und Institutionen sind im Alltag gesellschaftlich, finanziell und kommerziell zunehmend in digitale Interaktionen und Transaktionen eingebunden, doch die Entwicklung des Internet hat auch zu Computer-Kriminalität geführt, die jedes Jahr Schäden in Milliardenhöhe anrichtet, sowie zu Cyberangriffen auf kritische Infrastrukturen und zur Verletzung der Privatsphäre von Einzelnen und Einrichtungen in ganz Europa. Änderungen in Bezug auf die Art und Wahrnehmung der Unsicherheit im Alltag dürften das Vertrauen der Bürger nicht nur in Institutionen, sondern auch ihr gegenseitiges Vertrauen untergraben.Um solche Bedrohungen vorherzusehen, zu vermeiden und zu bewältigen, müssen die Ursachen verstanden, innovative Technologien, Lösungen, Prognoseinstrumente und Erkenntnisgrundlagen entwickelt und angewendet, die Zusammenarbeit zwischen Anbietern und Nutzern gefördert, Lösungen für die Sicherheit der Bürger gefunden, die Wettbewerbsfähigkeit der europäischen Sicherheitsunternehmen und -dienste, einschließlich IKT, verbessert und Verletzungen der Privatsphäre und der Menschenrechte im Internet und anderswo verhindert und bekämpft und gleichzeitig die individuellen Rechte und die Freiheit der europäischen Bürger geschützt werden.Um die grenzüberschreitende Zusammenarbeit zwischen unterschiedlichen Rettungsdiensten zu verbessern, sollte auf ihre Interoperabilität und die Festlegung von Normen geachtet werden.Da sicherheitspolitische Maßnahmen mit verschiedenen gesellschaftlichen Strategien rückgekoppelt werden sollten, ist die Stärkung der gesellschaftlichen Dimension der Sicherheitsforschung ein wichtiger Aspekt dieser gesellschaftlichen Herausforderung.Die Achtung grundlegender Werte wie Freiheit, Demokratie, Gleichheit und Rechtsstaatlichkeit muss das Fundament aller Tätigkeiten im Zusammenhang mit dieser Herausforderung sein, um den europäischen Bürgern Sicherheit zu bieten.

Begründung und Mehrwert für die Union

Die Union und ihre Bürger, Wirtschaft und internationalen Partner sehen sich einer Reihe von Sicherheitsbedrohungen gegenüber, darunter u. a. Kriminalität, Terrorismus, illegaler Handel und Massennotfälle (aufgrund von Naturkatastrophen oder vom Menschen verursachten Katastrophen). Diese Bedrohungen können grenzüberschreitend und sowohl auf physische als auch auf virtuelle Ziele (Cyberspace) gerichtet sein, wobei die Angriffe von verschiedenen Quellen ausgehen. Angriffe auf Informations- und Kommunikationssysteme von Behörden und Privatunternehmen untergraben beispielsweise nicht nur das Vertrauen der Bürger in Informations- und Kommunikationssysteme und führen nicht nur zu unmittelbaren finanziellen Verlusten und zu Verlusten an Geschäftsmöglichkeiten, sondern können auch kritische Infrastrukturen und Dienstleistungen wie die Energieversorgung, die Luftfahrt und andere Verkehrsträger, die Wasser- und Lebensmittelversorgung, das Gesundheitswesen, den Finanzsektor oder die Telekommunikation ernsthaft beeinträchtigen.Diese Bedrohungen könnten möglicherweise die inneren Fundamente unserer Gesellschaft erschüttern. Technik und kreatives Design können zu möglichen Abwehrreaktionen einen bedeutenden Beitrag leisten. Daher sollten neue Lösungen entwickelt werden, wobei jedoch die Angemessenheit der Mittel und ihre Eignung für das entsprechende gesellschaftliche Anliegen zu berücksichtigen ist; dies gilt insbesondere im Hinblick auf die Gewährleistung der Grundrechte und -freiheiten der Bürger.Darüber hinaus ist Sicherheit – angesichts des Anteils Europas am rasch wachsenden globalen Sicherheitsmarkt – auch ein wichtiger Wirtschaftsfaktor. Angesichts der möglichen Folgen einiger Bedrohungen für Dienste, Netze oder Unternehmen ist der Einsatz angemessener Sicherheitslösungen für die Wirtschaft und die Wettbewerbsfähigkeit der europäischen Industrie inzwischen unabdingbar. Die Zusammenarbeit zwischen den Mitgliedstaaten, aber auch mit Drittländern und internationalen Organisationen, ist ein Bestandteil dieser Herausforderung.Die Unionsförderung von Forschung und Innovation im Rahmen dieser gesellschaftlichen Herausforderung gilt damit der Entwicklung, Umsetzung und Anpassung zentraler Unionsstrategien, insbesondere der Ziele der Strategie Europa 2020, der Gemeinsamen Außen- und Sicherheitspolitik, der Unionsstrategie für die innere Sicherheit und der Leitinitiative ""Eine Digitale Agenda für Europa"". Es erfolgt eine Koordinierung mit den direkten Maßnahmen der Gemeinsamen Forschungsstelle.

Einzelziele und Tätigkeiten in Grundzügen

Ziel ist die Unterstützung von Unionsstrategien für die innere und äußere Sicherheit und zur Gewährleistung von Computer- und Netzsicherheit, Vertrauen und Schutz personenbezogener Daten auf dem digitalen Binnenmarkt bei gleichzeitiger Verbesserung der Wettbewerbsfähigkeit der Sicherheitsunternehmen und -dienste in der EU, einschließlich der IKT. Schwerpunkt der Tätigkeiten ist unter anderem die Erforschung und Entwicklung der nächsten Generation innovativer Lösungen, wobei an neuen Konzepten, Designs und interoperablen Normen gearbeitet wird. Hierzu werden innovative Technologien und Lösungen entwickelt, die Sicherheitslücken beheben und eine Minderung des von Sicherheitsbedrohungen ausgehenden Risikos bewirken.In diese funktionsorientierten Maßnahmen werden die Anforderungen der verschiedenen Endnutzer (Bürger, Unternehmen, Organisationen der Zivilgesellschaft, Verwaltungen, nationale und internationale Behörden, Katastrophenschutz-, Strafverfolgungs-, Grenzschutzstellen usw.) einbezogen, um die Entwicklung bei den Sicherheitsbedrohungen, beim Schutz der Privatsphäre und die notwendigen gesellschaftlichen Aspekte zu berücksichtigen.Schwerpunkte der Tätigkeiten ist:(a) Die Bekämpfung von Kriminalität, illegalem Handel und Terrorismus, einschließlich der Auseinandersetzung mit dem Gedankengut und den Überzeugungen von Terroristen und entsprechender Gegenmaßnahmen; (b) der Schutz und Stärkung der Widerstandsfähigkeit kritischer Infrastrukturen, Versorgungsketten und Verkehrsträger; (c) die Erhöhung der Sicherheit durch Grenzüberwachung; (d) die Verbesserung der Computer- und Netzsicherheit; (e) die Stärkung der Widerstandsfähigkeit Europas gegenüber Krisen und Katastrophen; (f) die Gewährleistung der Privatsphäre und der Freiheit, auch im Internet, und besseres Verständnis der gesellschaftlichen, rechtlichen und ethischen Zusammenhänge in Bezug auf alle Teilbereiche von Sicherheit, Risiko und Gefahrenabwehr; (g) die Förderung der Normung und der Interoperabilität der Systeme, auch für Notfälle; (h) die Unterstützung der externen Sicherheitspolitik der EU, einschließlich Konfliktverhütung und Friedenskonsolidierung. ";"";"H2020";"H2020-EU.3.";"";"";"2014-09-22 20:50:23";"664463" +"H2020-EU.3.7.";"it";"H2020-EU.3.7.";"";"";"SFIDE PER LA SOCIETÀ - Società sicure - proteggere la libertà e la sicurezza dell'Europa e dei suoi cittadini";"Secure societies";"

SFIDE PER LA SOCIETÀ - Società sicure - proteggere la libertà e la sicurezza dell'Europa e dei suoi cittadini

Obiettivo specifico

L'obiettivo specifico è promuovere società europee sicure in un contesto di trasformazioni senza precedenti e interdipendenze e minacce crescenti di portata mondiale, rafforzando nel contempo la cultura europea della libertà e della giustizia.L'Europa non è mai stata consolidata in modo così pacifico e i livelli di sicurezza di cui godono i cittadini europei sono elevati rispetto ad altre aree del mondo. Tuttavia, l'Europa continua a essere vulnerabile in un contesto di globalizzazione sempre maggiore, in cui le società stanno affrontando minacce e sfide alla sicurezza sempre maggiori in termini di portata e sofisticatezza.La minaccia di un attacco militare su larga scala è diminuita e le preoccupazioni di sicurezza riguardano nuove minacce sfaccettate, interconnesse e transnazionali. Occorre tenere conto di aspetti come i diritti dell'uomo, il degrado ambientale, la stabilità politica e la democrazia, le questioni sociali, l'identità culturale e religiosa o la migrazione. In tale contesto, gli aspetti interni ed esterni della sicurezza sono inestricabilmente connessi. Al fine di proteggere la libertà e la sicurezza, l'Unione richiede risposte efficaci utilizzando un vasto arsenale innovativo di strumenti per la sicurezza. La ricerca e l'innovazione possono svolgere un chiaro ruolo di sostegno, sebbene da sole non possano garantire la sicurezza. Le attività di ricerca e innovazione dovrebbero mirare a comprendere, individuare, prevenire e scoraggiare le minacce alla sicurezza, nonché a prepararsi e proteggersi da esse. Inoltre, la sicurezza presenta sfide fondamentali che non possono essere affrontate con un approccio indipendente e vincolato a uno specifico settore ma che piuttosto richiedono un'impostazione più ambiziosa, coordinata e olistica.Numerose forme di insicurezza, riguardante la criminalità, la violenza, il terrorismo, le catastrofi naturali e imputabili all'uomo, attacchi informatici o violazioni del diritto al rispetto della vita privata e altre forme di disordini economici e sociali, colpiscono sempre più i cittadini.Secondo le stime, è verosimile il dato di 75 milioni di vittime dirette di reati ogni anno in Europa. I costi diretti del crimine, del terrorismo, delle attività illecite, della violenza e delle catastrofi in Europa sono stati stimati in almeno 650 miliardi di EUR (pari a circa il 5 % del PIL dell'Unione) nel 2010. Il terrorismo ha dimostrato le sue conseguenze fatali in diverse parti d'Europa e del mondo, causando la morte di molte persone e importanti perdite economiche. Ha altresì un significativo impatto culturale e globale.I cittadini, le imprese e le istituzioni sono sempre più interessate dalle interazioni e dalle operazioni digitali nei settori sociali, commerciali e finanziari della vita, ma lo sviluppo di internet ha recato con sé reati informatici per svariati miliardi di euro l'anno, attacchi informatici contro infrastrutture critiche e violazioni del diritto al rispetto della vita privata che colpiscono i singoli o le entità in tutto il continente. I mutamenti nel carattere e nella percezione dell'insicurezza nella vita quotidiana possono influire sulla fiducia dei cittadini non solo nei confronti delle istituzioni, ma anche a livello interpersonale.Al fine di anticipare, prevenire e gestire tali minacce, è necessario comprenderne le cause, sviluppare e applicare tecnologie, soluzioni, conoscenze e strumenti di previsione innovativi, stimolare la collaborazione tra fornitori e utenti, trovare soluzioni in materia di sicurezza civile, migliorare la competitività dell'industria e dei servizi europei in materia di sicurezza, comprese le TIC, nonché prevenire e combattere le violazioni del diritto al rispetto della vita privata e dei diritti dell'uomo su internet e altrove, garantendo nel contempo i diritti e le libertà individuali dei cittadini europei.Per migliorare ulteriormente la cooperazione transfrontaliera tra diversi tipi di servizi di emergenza occorre prestare attenzione all'interoperabilità e alla standardizzazione.Infine, dal momento che le politiche di sicurezza dovrebbero interagire con diverse politiche sociali, rafforzare la dimensione sociale della ricerca in materia di sicurezza costituirà un aspetto importante della presente sfida per la società.Il rispetto di valori fondamentali quali la libertà, la democrazia, l'uguaglianza e lo stato di diritto deve costituire la base di qualunque attività intrapresa nel quadro della presente sfida al fine di garantire la sicurezza dei cittadini europei.

Motivazione e valore aggiunto dell'Unione

L'Unione, i suoi cittadini, la sua industria e i suoi partner internazionali devono far fronte a una serie di minacce a livello di sicurezza, come la criminalità, il terrorismo, i traffici illeciti e le situazioni di emergenza di grande portata dovute a calamità naturali o causate dall'uomo. Tali minacce possono attraversare le frontiere e sono rivolte a obiettivi materiali o al ciberspazio con attacchi provenienti da diverse fonti. Ad esempio, gli attacchi condotti contro i sistemi d'informazione o di comunicazione di autorità pubbliche e di enti privati non solo compromettono la fiducia dei cittadini nei sistemi di informazione e comunicazione e comportano perdite finanziarie dirette e una perdita di opportunità commerciali, ma possono anche colpire in modo grave infrastrutture e servizi essenziali, come l'energia, i trasporti aerei e altri modi di trasporto, l'approvvigionamento alimentare e idrico, la sanità, le finanze e le telecomunicazioni.Tali minacce potrebbero mettere in pericolo le fondamenta interne della nostra società. La tecnologia e la progettazione creativa possono dare un importante contributo a qualunque risposta si renda necessaria. Occorre comunque sviluppare nuove soluzioni tenendo sempre conto dell'adeguatezza degli strumenti, anche alle richieste della società, in particolare in termini di garanzie dei diritti e delle libertà fondamentali dei cittadini.Infine, la sicurezza rappresenta anche una notevole sfida economica, tenuto conto della percentuale detenuta dall'Europa nel mercato globale in forte crescita della sicurezza. Dato il potenziale impatto di determinate minacce sui servizi, sulle reti o sulle imprese, l'impiego di adeguate soluzioni di sicurezza è divenuto fondamentale per l'economia e la competitività della produzione europea. La cooperazione tra gli Stati membri e con paesi terzi e organizzazioni internazionali rientra in questa sfida.Il finanziamento dell'Unione alla ricerca e all'innovazione nel quadro di questa sfida per la società sosterrà quindi lo sviluppo, l'attuazione e l'adeguamento delle politiche chiave dell'Unione, segnatamente gli obiettivi della strategia Europa 2020, la politica estera e di sicurezza comune, la strategia per la sicurezza interna dell'Unione e l'iniziativa faro ""Agenda digitale europea"". Sarà perseguito il coordinamento con le azioni dirette del CCR.

Le grandi linee delle attività

L'obiettivo è sostenere le politiche dell'Unione di sicurezza interna ed esterna e garantire la sicurezza, la fiducia e la riservatezza informatiche sul mercato unico digitale, migliorando nel contempo la competitività dell'industria e dei servizi dell'Unione in materia di sicurezza, comprese le TIC. Le attività saranno incentrate tra l'altro sulla ricerca e lo sviluppo per quanto riguarda la prossima generazione di soluzioni innovative, lavorando su nuovi concetti e progetti e norme interoperabili. Questo sarà effettuato per mezzo dello sviluppo di tecnologie e soluzioni innovative mirate a colmare le lacune di sicurezza e a ridurre i rischi derivanti dalle minacce alla sicurezza.Queste azioni orientate alle missioni integreranno le esigenze di diversi utenti finali (cittadini, imprese, organizzazioni della società civile e amministrazioni, comprese le autorità nazionali e internazionali, la protezione civile, le autorità preposte all'applicazione della legge, le guardie di frontiera, ecc.), al fine di tenere in considerazione l'evoluzione delle minacce alla sicurezza e della protezione della vita privata e i necessari aspetti sociali.Il centro delle attività comprende:(a) la lotta alla criminalità, ai traffici illeciti e al terrorismo, anche comprendendo e affrontando le idee e le credenze dei terroristi; (b) la protezione e il potenziamento della resilienza delle infrastrutture essenziali, delle catene di approvvigionamento e dei modi di trasporto; (c) il rafforzamento della sicurezza attraverso la gestione delle frontiere; (d) il miglioramento della sicurezza informatica; (e) l'aumento della resilienza dell'Europa a crisi e catastrofi; (f) la garanzia della vita privata e della libertà, anche su internet, e il miglioramento della comprensione, da un punto di vista sociale, giuridico ed etico, di tutti i settori della sicurezza, del rischio e della relativa gestione; (g) il rafforzamento della standardizzazione e dell'interoperabilità dei sistemi, anche per fini di emergenza; (h) il sostegno delle politiche di sicurezza esterne dell'Unione, tra cui la prevenzione dei conflitti e il consolidamento della pace. ";"";"H2020";"H2020-EU.3.";"";"";"2014-09-22 20:50:23";"664463" +"H2020-EU.3.7.";"es";"H2020-EU.3.7.";"";"";"RETOS DE LA SOCIEDAD - Sociedades seguras – proteger la libertad y la seguridad de Europa y sus ciudadanos";"Secure societies";"

RETOS DE LA SOCIEDAD - Sociedades seguras – proteger la libertad y la seguridad de Europa y sus ciudadanos

Objetivo específico

El objetivo específico es fomentar unas sociedades europeas seguras en un contexto de transformaciones sin precedentes y creciente interdependencia y crecientes amenazas mundiales, al tiempo que se refuerza la cultura europea de libertad y justicia.Europa nunca antes ha gozado de una paz tan consolidada y los niveles de seguridad que disfrutan los ciudadanos europeos son considerablemente más elevados si se comparan con otras partes del mundo. No obstante, la vulnerabilidad de Europa continúa siendo una realidad en un contexto de globalización creciente en el que las sociedades se enfrentan a amenazas y retos en materia de seguridad cada vez mayores en magnitud y sofisticación.La amenaza de agresiones militares a gran escala ha disminuido y las preocupaciones relativas a la seguridad se centran en nuevas amenazas polifacéticas, interrelacionadas y transnacionales. Es necesario tomar en consideración aspectos tales como los derechos humanos, la degradación medioambiental, la estabilidad política y la democracia, las cuestiones sociales, la identidad cultural y religiosa o el fenómeno de la migración. En este contexto, los aspectos internos y externos de la seguridad están inseparablemente vinculados. Para proteger la libertad y la seguridad, la Unión requiere respuestas eficaces que utilicen un amplio abanico de instrumentos globales e innovadores en materia de seguridad. La investigación y la innovación pueden desempeñar una función clara de apoyo como elemento capacitador aunque por sí solas no pueden garantizar la seguridad. Las actividades de investigación e innovación deben encaminarse a comprender, evitar y desalentar las amenazas a la seguridad, así como a prepararse y protegerse frente a ellas. Además, la seguridad implica retos fundamentales que no pueden superarse mediante un tratamiento independiente y específico por sector, sino que requieren planteamientos más ambiciosos, coordinados y globales.Numerosas formas de inseguridad, tales como las derivadas de la delincuencia, la violencia, el terrorismo, las catástrofes naturales o las provocadas por el ser humano, los ciberataques, las violaciones de la intimidad y otros tipos de trastorno social o económico, afectan cada vez en mayor medida a los ciudadanos.Según los cálculos, es posible que el número de víctimas anuales directas de la delincuencia ascienda a 75 millones en Europa. El coste directo de la delincuencia, el terrorismo, las actividades ilícitas, la violencia y las catástrofes en Europa se cifró en al menos 650 000 millones de euros (alrededor del 5 % del PIB de la Unión) en 2010. El terrorismo ha dado muestras de sus letales consecuencias en diversas partes de Europa, al dejar miles de víctimas mortales y provocar importantes pérdidas económicas. También tuvo un impacto cultural y mundial significativo.Los ciudadanos, empresas e instituciones cada vez intervienen en más transacciones e interacciones digitales en los ámbitos social, financiero y comercial, pero el desarrollo de Internet ha creado también la ciberdelincuencia, que cuesta miles de millones de euros cada año, y los ataques informáticos a infraestructuras críticas y genera violaciones de la intimidad de particulares o asociaciones en todo el continente. Los cambios de la naturaleza y de la percepción de la inseguridad en la vida cotidiana pueden afectar no solo a la confianza de los ciudadanos en las instituciones, sino también a la confianza entre sí.Para anticipar, prevenir y gestionar estas amenazas es necesario crear y aplicar tecnologías y soluciones innovadoras e instrumentos de predicción y conocimiento, estimular la cooperación entre proveedores y usuarios, buscar soluciones de seguridad civil, mejorar la competitividad de los sectores de la seguridad, la industria y los servicios, incluidas las TIC, en Europa, y prevenir y combatir la violación de la intimidad y los derechos humanos en Internet, y otros lugares, sin dejar de garantizar los derechos y libertades individuales de los ciudadanos europeos.A fin de propiciar una mayor colaboración transfronteriza entre los distintos tipos de servicios de urgencia, debe prestarse atención a la interoperabilidad y la normalización.Por último, como las políticas de seguridad deben interactuar con diferentes políticas sociales, reforzar la dimensión social de la investigación sobre seguridad será un aspecto importante de este reto de la sociedad.El respeto a los valores fundamentales, como la libertad, la democracia, la igualdad y el Estado de Derecho debe constituir la base de cualquier actividad emprendida en el contexto de este desafío para proporcionar seguridad a los ciudadanos europeos.

Justificación y valor añadido de la Unión

La Unión y sus ciudadanos, sus industrias y sus socios internacionales se enfrentan a una serie de amenazas a la seguridad tales como la delincuencia, el terrorismo, el tráfico ilegal y las emergencias a gran escala debidas a catástrofes naturales o provocadas por el hombre. Estas amenazas pueden cruzar fronteras e ir dirigidas tanto a objetivos físicos como al ciberespacio, con ataques procedentes de diversas fuentes. Los atentados contra los sistemas de información o de comunicación de las instituciones públicas y de las entidades privadas, por ejemplo, no solo socavan la confianza del ciudadano en los sistemas de información y comunicación y dan lugar a pérdidas financieras directas y a la pérdida de oportunidades de negocio, sino que pueden también afectar gravemente a infraestructuras y servicios vitales como la energía, la aviación y demás transportes, al abastecimiento de agua y alimentos, a la salud, a las finanzas y a las telecomunicaciones.Estas amenazas pueden poner en peligro los fundamentos internos de nuestra sociedad. La tecnología y un diseño creativo pueden suponer una contribución importante a cualquier respuesta que se dé. Con todo, deben buscarse soluciones nuevas, sin perder de vista que los medios deben ser los apropiados y adecuarse a la demanda de la sociedad, en particular en lo que respecta a los derechos y libertades fundamentales del ciudadano.Por último, la seguridad representa asimismo un reto económico de primer orden, habida cuenta de la participación de Europa en un mercado de la seguridad mundial en rápido crecimiento. Dado el impacto potencial de algunas de las amenazas para los servicios, redes o empresas, la aplicación de soluciones de seguridad adecuadas se ha convertido en algo crucial para la economía y la competitividad de la industria europea. Un elemento central de este reto es la cooperación entre Estados miembros, así como con terceros países y organizaciones internacionales.La financiación de la investigación e innovación por parte de la Unión en lo que respecta a este reto supondrá, por tanto, un apoyo para la elaboración, aplicación y adaptación de las acciones clave de la Unión, en particular las prioridades de la estrategia Europa 2020 para un crecimiento inteligente, sostenible e integrador, la Política Exterior y de Seguridad Común, la Estrategia de Seguridad Interior de la Unión y la iniciativa emblemática ""Agenda Digital para Europa"". Se procurará la coordinación con las acciones directas del Centro Común de Investigación.

Líneas generales de las actividades

Se trata de apoyar las políticas de seguridad interior y exterior de la Unión y garantizar la ciberseguridad, la confianza y la privacidad en el mercado único digital, mejorando, al mismo tiempo, la competitividad de las industrias y servicios de seguridad de la Unión, incluidas las TIC. Las actividades se centrarán en la investigación y el desarrollo de la siguiente generación de soluciones innovadoras, y en la puesta a punto de conceptos, diseños novedosos y normas interoperables. Para lograrlo se recurrirá a tecnologías y soluciones innovadoras que aborden la cuestión de las brechas de seguridad y lleven a una reducción del riesgo derivado de las amenazas a la seguridad.Estas acciones orientadas a una misión concreta integrarán las demandas de diferentes usuarios finales (ciudadanos, empresas, organizaciones de la sociedad civil y administraciones, incluidas las autoridades nacionales e internacionales, protección civil, fuerzas de seguridad, guardia fronteriza, etc.), a fin de tener en cuenta la evolución de las amenazas para la seguridad, la protección de la intimidad y los necesarios aspectos sociales.Las actividades perseguirán los siguientes objetivos específicos:(a) la lucha contra la delincuencia, el tráfico ilegal y el terrorismo, lo que incluye comprender las claves del fenómeno terrorista y hacer frente a las ideas y creencias que lo alimentan; (b) la protección y mejora de la resistencia de las infraestructuras críticas, cadenas de suministro y modos de transporte; (c) el refuerzo de la seguridad a través de la gestión de las fronteras; (d) la mejora de la ciberseguridad; (e) el refuerzo de la resistencia de Europa frente a las crisis y las catástrofes;(f) la protección de la intimidad y la libertad, también en Internet, y la mejora de la comprensión social, jurídica y ética de todos los ámbitos de la seguridad, el riesgo y la gestión; (g) la mejora de la normalización e interoperabilidad de los sistemas, inclusive para fines de emergencia; (h) el apoyo a las políticas de seguridad exterior de la Unión, inclusive la prevención de conflictos y la consolidación de la paz. ";"";"H2020";"H2020-EU.3.";"";"";"2014-09-22 20:50:23";"664463" +"H2020-EU.3.7.8.";"en";"H2020-EU.3.7.8.";"";"";"Support the Union's external security policies including through conflict prevention and peace-building";"";"";"";"H2020";"H2020-EU.3.7.";"";"";"2015-01-23 18:42:15";"664479" +"H2020-EU.5.";"de";"H2020-EU.5.";"";"";"WISSENSCHAFT MIT DER UND FÜR DIE GESELLSCHAFT";"Science with and for Society";"

WISSENSCHAFT MIT DER UND FÜR DIE GESELLSCHAFT

Einzelziel

Ziel ist es, eine wirksame Zusammenarbeit zwischen Wissenschaft und Gesellschaft aufzubauen, neue Talente für die Wissenschaft zu rekrutieren und wissenschaftliche Exzellenz mit sozialem Bewusstsein und Verantwortung zu verknüpfen.

Begründung und Mehrwert für die Union

Die Stärke des europäischen Wissenschafts- und Technologiesystems hängt von seiner Fähigkeit ab, Talente und Ideen anzuziehen, wo immer diese vorhanden sind. Vertrauen kann nur entstehen, wenn ein fruchtbarer und reicher Dialog und eine aktive Zusammenarbeit zwischen Wissenschaft und Gesellschaft herbeigeführt werden, um mehr Verantwortungsbewusstsein der Wissenschaft und mehr Bürgernähe bei der Konzipierung von Maßnahmen zu gewährleisten. Schnelle Fortschritte in der aktuellen wissenschaftlichen Forschung und Innovation haben zu einer Zunahme wichtiger ethischer, rechtlicher und sozialer Fragen geführt, die die Partnerschaft zwischen Wissenschaft und Gesellschaft berühren. Die Verbesserung der Zusammenarbeit von Wissenschaft und Gesellschaft mit dem Ziel, die gesellschaftliche und politische Unterstützung für Wissenschaft und Technologie in allen Mitgliedstaaten zu fördern, ist eine zunehmend kritische Problematik, die durch die derzeitige Wirtschaftskrise stark verschärft wurde. Öffentliche Investitionen in die Wissenschaft erfordern eine große soziale und politische Wählerschaft, die die Werte der Wissenschaft teilt, in ihren Prozessen geschult und engagiert ist und Beiträge der Wissenschaft zum Wissen, zur Gesellschaft und zum wirtschaftlichen Fortschritt erkennen kann.

Einzelziele und Tätigkeiten in Grundzügen

Schwerpunkte der Tätigkeiten ist:(a) die Erhöhung der Attraktivität wissenschaftlicher und technologischer Laufbahnen für junge Schüler und Studenten und Förderung einer nachhaltigen Interaktion zwischen Schulen, Forschungseinrichtungen, Wirtschaft und Organisationen der Zivilgesellschaft; (b) die Förderung der Gleichbehandlung der Geschlechter insbesondere durch Unterstützung struktureller Veränderungen im Aufbau von Forschungseinrichtungen sowie bei Inhalt und Gestaltung von Forschungstätigkeiten; (c) die Einbeziehung der Gesellschaft in Fragen, Strategien und Tätigkeiten der Wissenschaft und Innovation, um die Interessen und Werte der Bürger zu berücksichtigen, sowie Verbesserung der Qualität, Relevanz, gesellschaftlichen Akzeptanz und Nachhaltigkeit von Forschungs- und Innovationsergebnissen in verschiedenen Tätigkeitsbereichen von gesellschaftlicher Innovation bis zu Bereichen wie Biotechnologie und Nanotechnologie; (d) die Förderung der Bürgerbeteiligung in der Wissenschaft durch formelle und informelle wissenschaftliche Bildung und die Verbreitung wissenschaftlicher Aktivitäten insbesondere in Wissenschaftszentren und über sonstige geeignete Kanäle; (e) der Ausbau der Zugänglichkeit und Nutzung der Ergebnisse von mit öffentlichen Mitteln finanzierter Forschung; (f) die Ausarbeitung einer Governance für den Ausbau von verantwortungsvoller Forschung und Innovation durch alle Akteure (Forscher, öffentliche Stellen, Industrie und Organisationen der Zivilgesellschaft), die auf gesellschaftliche Bedürfnisse und Forderungen eingeht und die Förderung eines ethischen Rahmens für Forschung und Innovation; (g) das Ergreifen ausreichender und verhältnismäßiger Vorsichtsmaßnahmen bei Forschungs- und Innovationstätigkeiten durch Antizipierung und Bewertung potenzieller Folgen für Umwelt, Gesundheit und Sicherheit; (h) die Verbesserung der Kenntnisse über Wissenschaftskommunikation, um die Qualität und Wirksamkeit von Interaktionen zwischen Wissenschaftlern, allgemeinen Medien und der Öffentlichkeit zu verbessern.";"";"H2020";"H2020-EC";"";"";"2014-09-23 20:21:13";"664495" +"H2020-EU.5.";"it";"H2020-EU.5.";"";"";"SCIENZA CON E PER LA SOCIETÀ";"Science with and for Society";"

SCIENZA CON E PER LA SOCIETÀ

Obiettivo specifico

L'obiettivo consiste nel costruire una cooperazione efficace tra scienza e società, assumere nuovi talenti per la scienza e associare l'eccellenza scientifica alla sensibilizzazione e alla responsabilità sociali.

Motivazione e valore aggiunto dell'Unione

La forza del sistema scientifico e tecnologico europeo dipende dalla sua capacità di sfruttare i talenti e le idee ovunque si trovino. Ciò può essere raggiunto solo se saranno sviluppati un dialogo ricco e proficuo e una cooperazione attiva tra scienza e società, al fine di garantire una scienza più responsabile e permettere lo sviluppo di politiche più pertinenti per i cittadini. Rapidi progressi nella ricerca e innovazione scientifica contemporanea hanno sollevato importanti questioni etiche, giuridiche e sociali che influiscono sul rapporto tra la scienza e la società. Il miglioramento della cooperazione tra la scienza e la società per consentire un ampliamento del sostegno sociale e politico per la scienza e la tecnologia in tutti gli Stati membri è una questione sempre più importante che l'attuale crisi economica ha fortemente acuito. Gli investimenti pubblici per la scienza richiedono un ampio gruppo sociale e politico che condivida i valori della scienza, che ne conosca i processi e partecipi agli stessi e sia in grado di apprezzarne il contributo alla conoscenza, alla società e al progresso economico.

Le grandi linee delle attività

Il centro delle attività comprende:(a) rendere le carriere scientifiche e tecnologiche attraenti per i giovani studenti e favorire un dialogo duraturo tra le scuole, gli istituti di ricerca, l'industria e le organizzazioni della società civile;(b) promuovere la parità di genere, in particolare favorendo cambiamenti strutturali a livello di organizzazione degli istituti di ricerca e di contenuto e progettazione delle attività di ricerca; (c) integrare la società nelle tematiche, nelle politiche e nelle attività della scienza e dell'innovazione al fine di integrare gli interessi e i valori dei cittadini e aumentare la qualità, la pertinenza, l'accettabilità sociale e la sostenibilità dei risultati della ricerca e dell'innovazione in vari settori di attività, dall'innovazione sociale a settori quali le biotecnologie e le nanotecnologie; (d) incoraggiare i cittadini a impegnarsi nella scienza attraverso un'istruzione scientifica, sia formale che informale, e promuovere la diffusione di attività basate sulla scienza, in particolare nei centri scientifici e mediante altri canali appropriati; (e) sviluppare l'accessibilità e l'uso dei risultati della ricerca finanziata con risorse pubbliche; (f) definire una governance per il progresso della ricerca e dell'innovazione responsabili da parte di tutte le parti interessate (ricercatori, autorità pubbliche, settore industriale e organizzazioni della società civile), che sia sensibile alle esigenze e alle richieste della società e promuovere un quadro deontologico per la ricerca e l'innovazione;(g) osservare debite e proporzionate cautele nelle attività di ricerca e innovazione prevedendo e valutando i possibili impatti ambientali, sulla salute e sulla sicurezza; (h) migliorare la conoscenza in materia di comunicazione scientifica al fine di migliorare la qualità e l'efficacia delle interazioni tra scienziati, media generalisti e pubblico. ";"";"H2020";"H2020-EC";"";"";"2014-09-23 20:21:13";"664495" +"H2020-EU.5.";"pl";"H2020-EU.5.";"";"";"NAUKA Z UDZIAŁEM SPOŁECZEŃSTWA I DLA SPOŁECZEŃSTWA";"Science with and for Society";"

NAUKA Z UDZIAŁEM SPOŁECZEŃSTWA I DLA SPOŁECZEŃSTWA

Cel szczegółowy

Celem jest zbudowanie skutecznej współpracy między środowiskiem naukowym a społeczeństwem, przyciągnięcie nowych talentów do działalności naukowej oraz powiązanie doskonałości naukowej ze świadomością i odpowiedzialnością społeczną.

Uzasadnienie i unijna wartość dodana

Siła europejskiej nauki i techniki zależy od jej zdolności do pozyskiwania talentów i idei wszędzie tam, gdzie zaistnieją. Można to osiągnąć jedynie w drodze owocnego i intensywnego dialogu i aktywnej współpracy między środowiskiem naukowym a społeczeństwem w celu zapewnienia większej odpowiedzialności nauki oraz umożliwienia opracowywania strategii politycznych bliższych obywatelom. Szybkie postępy we współczesnych badaniach naukowych i innowacjach doprowadziły do pojawienia się istotnych kwestii etycznych, prawnych i społecznych, które mają wpływ na relacje między środowiskiem naukowym a społeczeństwem. Zacieśnienie współpracy między środowiskiem naukowym a społeczeństwem w celu zapewnienia szerszego poparcia społecznego i politycznego dla nauki i techniki we wszystkich państwach członkowskich staje się coraz istotniejszą kwestią, której wagę podkreślił jeszcze obecny kryzys gospodarczy. Publiczne inwestycje w naukę wymagają ogromnego poparcia społecznego i politycznego osób uznających wartość nauki, znających procesy naukowe i zaangażowanych w nie oraz zdolnych docenić wkład nauki w poszerzanie wiedzy, rozwój społeczny i postęp gospodarczy.

Ogólne kierunki działań

Działania mają się koncentrować na:(a) sprawieniu, by kariera naukowo-techniczna stała się atrakcyjna dla młodych studentów, a także na wspieraniu trwałych kontaktów między szkołami, instytucjami badawczymi, przemysłem i organizacjami społeczeństwa obywatelskiego; (b) promowaniu równouprawnienia płci, w szczególności poprzez wspieranie zmian strukturalnych w organizacji instytucji badawczych oraz w treści i planowaniu działań badawczych; (c) włączeniu społeczeństwa w kwestie, polityki i działania dotyczące nauki i innowacji w celu uwzględnienia zainteresowań obywateli i wyznawanych przez nich wartości oraz podniesienia jakości, znaczenia, akceptowalności społecznej i trwałości wyników badań naukowych i innowacji w wielu dziedzinach działalności: od innowacji społecznych po obszary takie jak biotechnologia i nanotechnologia; (d) zachęcaniu obywateli do zainteresowania nauką poprzez formalną i nieformalną edukację naukową, a także na propagowaniu działań o charakterze naukowym w ośrodkach naukowych i za pomocą innych odpowiednich kanałów; (e) zwiększaniu dostępności i wykorzystywania wyników badań finansowanych ze środków publicznych; (f) ulepszaniu zarządzania na rzecz rozwoju odpowiedzialnych badań naukowych i innowacji przez wszystkie zainteresowane strony (naukowców, organy publiczne, przemysł i organizacje społeczeństwa obywatelskiego), które to zarządzanie będzie uwzględniało potrzeby i postulaty społeczne oraz propagowaniu ram etycznych w zakresie badań naukowych i innowacji; (g) stosowaniu odpowiednich i proporcjonalnych środków ostrożności w działaniach w zakresie badań naukowych i innowacji poprzez przewidywanie i ocenę ewentualnych skutków środowiskowych, zdrowotnych i w dziedzinie bezpieczeństwa; (h) poszerzaniu wiedzy na temat popularyzacji nauki w celu poprawy jakości i skuteczności interakcji między naukowcami, mediami i społeczeństwem. ";"";"H2020";"H2020-EC";"";"";"2014-09-23 20:21:13";"664495" +"H2020-EU.5.";"fr";"H2020-EU.5.";"";"";"LA SCIENCE AVEC ET POUR LA SOCIÉTÉ";"Science with and for Society";"

LA SCIENCE AVEC ET POUR LA SOCIÉTÉ

Objectif spécifique

L'objectif consiste à établir une coopération efficace entre la science et la société, à recruter de nouveaux talents scientifiques et à allier excellence scientifique, d'une part, et conscience et responsabilité sociales, d'autre part.

Justification et valeur ajoutée de l'Union

La solidité du système scientifique et technologique européen dépend de sa capacité à mettre à profit les talents et à attirer les idées, d'où qu'ils viennent. Cela n'est possible que si un dialogue fructueux et riche, ainsi qu'une coopération active entre la science et la société contribuent à rendre la science plus responsable et à élaborer des politiques plus utiles pour les citoyens. Les progrès rapides de la recherche scientifique contemporaine et de l'innovation se traduisent par une multiplication des questions éthiques, juridiques et sociales importantes qui ont une incidence sur la relation entre la science et la société. La question de plus en plus cruciale du renforcement de la coopération entre le monde scientifique et la société afin d'élargir le soutien social et politique à l'égard des sciences et des technologies dans tous les États membres se fait éminemment pressante, ce qui est exacerbé sous l'effet de la crise économique actuelle. Les investissements publics dans la science passent par une vaste mobilisation sociale et politique de personnes partageant les valeurs de la science, sensibilisées et parties prenantes à ses processus et capables de reconnaître ses contributions à la connaissance, à la société et au progrès économique.

Grandes lignes des activités

Les activités visent à:(a) rendre les carrières scientifiques et technologiques attirantes pour les jeunes étudiants et encourager une interaction durable entre les écoles, les institutions de recherche, l'industrie et les organisations de la société civile; (b) promouvoir l'égalité entre les genres, notamment par des mesures propres à favoriser des changements structurels dans l'organisation des institutions de recherche et dans le contenu et la conception des activités des chercheurs; (c) intégrer la société dans les questions, les politiques et les activités relatives aux sciences et à l'innovation afin de tenir compte des intérêts et des valeurs des citoyens, et d'améliorer la qualité, la pertinence, l'acceptabilité sociale et la durabilité des résultats de la recherche et de l'innovation dans différents domaines d'activités, depuis l'innovation sociale jusqu'à des domaines tels que les biotechnologies et les nanotechnologies; (d) encourager les citoyens à s'impliquer dans les sciences, au travers d'une éducation scientifique formelle et informelle, et promouvoir la diffusion d'activités basées sur la science, notamment dans des centres scientifiques à travers d'autres vecteurs appropriés; (e) renforcer l'accès aux résultats de la recherche financée par des fonds publics et développer l'utilisation de ces résultats; (f) mettre en place une gouvernance pour assurer le développement d'une recherche et d'une innovation responsables de la part de toutes les parties prenantes (chercheurs, pouvoirs publics, industrie et organisations de la société civile), à l'écoute des besoins et des demandes de la société, et promouvoir un cadre déontologique pour la recherche et l'innovation; (g) prendre des mesures de précaution proportionnées dans les activités de recherche et d'innovation en prévoyant et évaluant les répercussions potentielles sur l'environnement, la santé et la sécurité; (g) améliorer les connaissances en matière de communication scientifique afin d'accroître la qualité et l'efficacité des interactions entre les scientifiques, les médias et le public. ";"";"H2020";"H2020-EC";"";"";"2014-09-23 20:21:13";"664495" +"H2020-EU.5.";"es";"H2020-EU.5.";"";"";"CIENCIA CON Y PARA LA SOCIEDAD";"Science with and for Society";"

CIENCIA CON Y PARA LA SOCIEDAD

Objetivo específico

El objetivo específico es impulsar una cooperación efectiva entre ciencia y sociedad, captar nuevos talentos para la ciencia y conciliar la excelencia científica con la responsabilidad y la conciencia social.

Justificación y valor añadido de la Unión

La fortaleza del sistema científico y tecnológico europeo depende de su capacidad para aprovechar el talento y las ideas donde los haya. Esto solo puede conseguirse si se propicia un diálogo fructífero y extenso y una cooperación activa entre ciencia y sociedad para garantizar que esta última sea más responsable y permitir la adopción de medidas de mayor relevancia para los ciudadanos. Los rápidos avances en la investigación y la innovación científicas contemporáneas han conducido a un incremento de la importancia de las cuestiones éticas, jurídicas y sociales, que exige reforzar la relación entre la ciencia y la sociedad. Cada vez resulta más importante mejorar la cooperación entre ciencia y sociedad a fin de permitir una ampliación del apoyo social y político a la ciencia y la tecnología en todos los Estados miembros, una cuestión exacerbada considerablemente por la actual crisis económica. La inversión pública en ciencia requiere que una vasta capa social y política comparta los valores de la ciencia, esté educada para entender sus procesos y sea capaz de reconocer su contribución al conocimiento, a la sociedad y al progreso económico.

Líneas generales de las actividades

Las actividades perseguirán los siguientes objetivos específicos:(a) aumentar el atractivo de las carreras científicas y tecnológicas para los jóvenes estudiantes y fomentar la interacción sostenible entre las escuelas, los centros de investigación, la industria y las organizaciones de la sociedad civil; (b) promover la igualdad entre sexos, en particular, apoyando cambios estructurales de la organización de las instituciones de investigación y en el contenido y diseño de las actividades investigadoras; (c) integrar la sociedad en las cuestiones, políticas y actividades relacionadas con la ciencia y la innovación con el fin de integrar los intereses y valores de los ciudadanos y mejorar la calidad, pertinencia, aceptación social y sostenibilidad de los frutos de la ciencia y la innovación en diversos ámbitos de la actividad, desde la innovación social hasta sectores tales como los de la biotecnología y la nanotecnología; (d) animar a los ciudadanos a comprometerse con la ciencia a través de la educación científica formal e informal, y promover la difusión de actividades centradas en la ciencia, especialmente en centros científicos y mediante otros canales adecuados; (e) propiciar el fácil acceso y la utilización de los resultados de la investigación realizada con fondos públicos; (f) impulsar una gestión que propicie el progreso de una investigación e innovación responsables por parte de todas las partes interesadas (investigadores, autoridades públicas, industria y organizaciones de la sociedad civil) que son sensibles a las demandas y necesidades de la sociedad; promover un marco ético para la investigación y la innovación; (g) tomar las precauciones debidas y proporcionadas en relación con las actividades de investigación e innovación anticipando y valorando el potencial impacto medioambiental, para la salud y para la seguridad; (h) mejorar el conocimiento sobre la comunicación en materia científica a fin de mejorar la calidad y la eficacia de las interacciones entre los científicos, los medios de comunicación y el público. ";"";"H2020";"H2020-EC";"";"";"2014-09-23 20:21:13";"664495" +"H2020-EU.3.2.1.1.";"en";"H2020-EU.3.2.1.1.";"";"";"Increasing production efficiency and coping with climate change, while ensuring sustainability and resilience";"";"";"";"H2020";"H2020-EU.3.2.1.";"";"";"2014-09-22 20:44:41";"664285" +"H2020-EU.3.3.5.";"de";"H2020-EU.3.3.5.";"";"";"Neue Erkenntnisse und neue Technologien";"";"

Neue Erkenntnisse und neue Technologien

Schwerpunkt der Tätigkeiten sind die multidisziplinäre Erforschung von Technologien für saubere, sichere und nachhaltige Energien (auch visionäre Maßnahmen) und die gemeinsame Verwirklichung europaweiter Forschungsprogramme sowie erstklassiger Einrichtungen.";"";"H2020";"H2020-EU.3.3.";"";"";"2014-09-22 20:46:48";"664351" +"H2020-EU.3.3.5.";"it";"H2020-EU.3.3.5.";"";"";"Nuove conoscenze e tecnologie";"New knowledge and technologies";"

Nuove conoscenze e tecnologie

Le attività si concentrano sulla ricerca multidisciplinare nell'ambito delle tecnologie energetiche pulite, sicure e sostenibili (comprensive di azioni visionarie) e dell'attuazione congiunta di programmi di ricerca paneuropei e strutture di livello mondiale.";"";"H2020";"H2020-EU.3.3.";"";"";"2014-09-22 20:46:48";"664351" +"H2020-EU.3.3.5.";"pl";"H2020-EU.3.3.5.";"";"";"Nowa wiedza i technologie";"New knowledge and technologies";"

Nowa wiedza i technologie

Działania mają skupiać się na multidyscyplinarnych badaniach naukowych w zakresie czystych, bezpiecznych i zrównoważonych technologii energetycznych (w tym na działaniach wizjonerskich) i wspólnej realizacji ogólnoeuropejskich programów badawczych oraz tworzeniu światowej klasy obiektów.";"";"H2020";"H2020-EU.3.3.";"";"";"2014-09-22 20:46:48";"664351" +"H2020-EU.3.3.5.";"fr";"H2020-EU.3.3.5.";"";"";"Des connaissances et technologies nouvelles";"New knowledge and technologies";"

Des connaissances et technologies nouvelles

Les activités se concentrent sur la recherche pluridisciplinaire relative à des technologies énergétiques propres, sûres et durables (dont les actions visionnaires) et sur la mise en œuvre conjointe de programmes de recherche paneuropéens et l'exploitation commune d'installations de niveau mondial.";"";"H2020";"H2020-EU.3.3.";"";"";"2014-09-22 20:46:48";"664351" +"H2020-EU.3.3.5.";"es";"H2020-EU.3.3.5.";"";"";"Nuevos conocimientos y tecnologías";"New knowledge and technologies";"

Nuevos conocimientos y tecnologías

Las actividades se centrarán en la investigación multidisciplinaria de tecnologías energéticas limpias, seguras y sostenibles (incluidas acciones visionarias) y la ejecución conjunta de programas de investigación paneuropeos e instalaciones de categoría mundial.";"";"H2020";"H2020-EU.3.3.";"";"";"2014-09-22 20:46:48";"664351" +"H2020-EU.3.3.3.";"de";"H2020-EU.3.3.3.";"";"";"Alternative Brenn- bzw. Kraftstoffe und mobile Energiequellen";"Alternative fuels and mobile energy sources";"

Alternative Brenn- bzw. Kraftstoffe und mobile Energiequellen

Schwerpunkt der Tätigkeiten sind Forschung, Entwicklung und die vollmaßstäbliche Demonstration mit Blick auf Technologien und Wertschöpfungsketten, die darauf abzielen, die Wettbewerbsfähigkeit und Nachhaltigkeit von Bioenergie und anderen alternativen Brenn- bzw. Kraftstoffen für Energie- und Wärmegewinnung und für Land-, See- und Luftverkehr zu erhöhen, mit dem Potenzial einer energieeffizienteren Umwandlung, die Zeit bis zur Marktreife von Wasserstoff- und Brennstoffzellen zu verringern und neue Optionen mit langfristigem Potenzial zur Marktreife aufzuzeigen.";"";"H2020";"H2020-EU.3.3.";"";"";"2014-09-22 20:46:31";"664341" +"H2020-EU.3.3.3.";"it";"H2020-EU.3.3.3.";"";"";"Combustibili alternativi e fonti energetiche mobili";"Alternative fuels and mobile energy sources";"

Combustibili alternativi e fonti energetiche mobili

Le attività si concentrano sulla ricerca, lo sviluppo e la dimostrazione su scala reale di tecnologie e catene del valore mirate a rendere la bioenergia e altri combustibili alternativi più competitivi e sostenibili per la produzione di calore ed energia elettrica e per i trasporti di superficie, marittimi e aerei, che offrano la possibilità di una conversione energetica più efficace, al fine di ridurre i tempi di commercializzazione per l'idrogeno e le celle a combustibile e proporre nuove opzioni che dimostrino potenzialità a lungo termine per giungere a maturità.";"";"H2020";"H2020-EU.3.3.";"";"";"2014-09-22 20:46:31";"664341" +"H2020-EU.3.3.3.";"es";"H2020-EU.3.3.3.";"";"";"Combustibles alternativos y fuentes de energía móviles";"Alternative fuels and mobile energy sources";"

Combustibles alternativos y fuentes de energía móviles

Las actividades se centrarán en la investigación, desarrollo y demostración a escala real de tecnologías y cadenas de valor para hacer más competitivas y sostenibles la bioenergía y otros combustibles alternativos, la cogeneración, el transporte de superficie, marítimo y aéreo con potencial para una conversión energética más eficaz, para reducir el tiempo de llegada al mercado de las pilas de combustible e hidrógeno y aportar nuevas opciones que presenten potencial a largo plazo para alcanzar la madurez.";"";"H2020";"H2020-EU.3.3.";"";"";"2014-09-22 20:46:31";"664341" +"H2020-EU.3.3.3.";"pl";"H2020-EU.3.3.3.";"";"";"Paliwa alternatywne i mobilne źródła energii";"Alternative fuels and mobile energy sources";"

Paliwa alternatywne i mobilne źródła energii

Działania mają skupiać się na badaniach, rozwoju i pełnoskalowej demonstracji technologii oraz łańcuchów wartości, tak by bioenergia i inne paliwa alternatywne stały się bardziej konkurencyjne i zrównoważone do celów produkcji energii elektrycznej i cieplnej oraz transportu lądowego, morskiego i lotniczego, z możliwością efektywniejszej konwersji energii, co pozwoli skrócić czas wprowadzenia na rynek ogniw wodorowych i paliwowych oraz znaleźć nowe możliwości charakteryzujące się długim czasem realizacji potencjału.";"";"H2020";"H2020-EU.3.3.";"";"";"2014-09-22 20:46:31";"664341" +"H2020-EU.3.3.3.";"fr";"H2020-EU.3.3.3.";"";"";"Des combustibles de substitution et sources d'énergie mobiles";"Alternative fuels and mobile energy sources";"

Des combustibles de substitution et sources d'énergie mobiles

Les activités se concentrent sur la recherche, le développement et la démonstration en grandeur réelle de technologies et de chaînes de valeur visant à renforcer la compétitivité et la durabilité des bioénergies et des autres combustibles de substitution pour l'électricité et le chauffage, ainsi que les transports terrestres, maritimes et aériens offrant des possibilités de conversion énergétique plus efficace, à réduire les délais de mise sur le marché des piles à hydrogène et à combustible et à proposer de nouvelles possibilités présentant des perspectives de maturité à long terme.";"";"H2020";"H2020-EU.3.3.";"";"";"2014-09-22 20:46:31";"664341" +"H2020-EU.3.3.2.";"it";"H2020-EU.3.3.2.";"";"";"Energia elettrica a basso costo e a basse emissioni di carbonio";"Low-cost, low-carbon energy supply";"

Energia elettrica a basso costo e a basse emissioni di carbonio

Le attività si concentrano sulla ricerca, lo sviluppo e la dimostrazione su scala reale di fonti energetiche rinnovabili innovative, centrali elettriche a combustibili fossili efficienti, flessibili e a basse emissioni di carbonio e tecnologie per la cattura e lo stoccaggio del carbonio o la riutilizzazione del CO2, che consentano tecnologie su scala più ampia, a costi inferiori, sicure per l'ambiente, dotate di un rendimento di conversione superiore e di una più ampia disponibilità per diversi mercati e contesti operativi.";"";"H2020";"H2020-EU.3.3.";"";"";"2014-09-22 20:46:12";"664331" +"H2020-EU.3.3.2.";"pl";"H2020-EU.3.3.2.";"";"";"Zaopatrzenie w tanią, niskoemisyjną energię elektryczną";"Low-cost, low-carbon energy supply";"

Zaopatrzenie w tanią, niskoemisyjną energię elektryczną

Działania mają skupiać się na badaniach, rozwoju i pełnoskalowej demonstracji innowacyjnych odnawialnych źródeł energii, efektywnych, elastycznych i niskoemisyjnych elektrowni na paliwa kopalne oraz technologiach wychwytywania i składowania dwutlenku węgla lub ponownego wykorzystania CO2, przy większej skali i niższym koszcie, bezpiecznych dla środowiska oraz cechujących się większą efektywnością konwersji i dostępnością w różnych środowiskach rynkowych i operacyjnych.";"";"H2020";"H2020-EU.3.3.";"";"";"2014-09-22 20:46:12";"664331" +"H2020-EU.3.3.2.";"de";"H2020-EU.3.3.2.";"";"";"Kostengünstige Stromversorgung mit niedrigen CO2-Emissionen";"Low-cost, low-carbon energy supply";"

Kostengünstige Stromversorgung mit niedrigen CO2-Emissionen

Schwerpunkt der Tätigkeiten sind Forschung, Entwicklung und vollmaßstäbliche Demonstration mit Blick auf innovative erneuerbare Energieträger, effiziente und flexible Kraftwerke für fossile Energieträger mit niedrigem CO2-Ausstoß sowie Techniken für CO2-Abscheidung und -Speicherung oder -Wiederverwendung, die kostengünstiger und umweltverträglich sind und in größerem Maßstab eingesetzt werden können und gleichzeitig einen hohen Wirkungsgrad haben und für unterschiedliche Märkte und betriebliche Gegebenheiten leichter verfügbar sind.";"";"H2020";"H2020-EU.3.3.";"";"";"2014-09-22 20:46:12";"664331" +"H2020-EU.3.3.2.";"es";"H2020-EU.3.3.2.";"";"";"Suministro de electricidad a bajo coste y de baja emisión de carbono";"Low-cost, low-carbon energy supply";"

Suministro de electricidad a bajo coste y de baja emisión de carbono

Las actividades se centrarán en la investigación, desarrollo y demostración a escala real de energías renovables innovadoras, centrales eléctricas de combustibles fósiles eficiente, flexibles y con baja utilización de carbono y las tecnologías de captura y almacenamiento de carbono, o de reutilización del CO2, que ofrezcan tecnologías de mayor escala, inferior coste y respetuosas del medio ambiente, con mayor eficiencia de conversión y mayor disponibilidad para mercados y entornos operativos diferentes.";"";"H2020";"H2020-EU.3.3.";"";"";"2014-09-22 20:46:12";"664331" +"H2020-EU.3.3.2.";"fr";"H2020-EU.3.3.2.";"";"";"Un approvisionnement en électricité à faible coût et à faibles émissions de carbone";"Low-cost, low-carbon energy supply";"

Un approvisionnement en électricité à faible coût et à faibles émissions de carbone

Les activités se concentrent sur la recherche, le développement et la démonstration en grandeur réelle d'énergies renouvelables innovantes, de centrales à combustible fossile efficaces, souples et à faible émission de carbone et de technologies de captage et de stockage du carbone ou de recyclage du CO2 offrant des technologies à plus grande échelle, à moindre coût et respectueuses de l'environnement, qui présentent des rendements de conversion plus élevés et une plus grande disponibilité pour différents marchés et environnements d'exploitation.";"";"H2020";"H2020-EU.3.3.";"";"";"2014-09-22 20:46:12";"664331" +"H2020-EU.1.3.5.";"de";"H2020-EU.1.3.5.";"";"";"Besondere Unterstützung und politische Maßnahmen";"MSCA Specific support";"

Besondere Unterstützung und politische Maßnahmen

Ziel ist die Überwachung der Fortschritte, die Ermittlung von Lücken und Hindernissen bei den Marie-Skłodowska-Curie-Maßnahmen und die Stärkung ihrer Auswirkungen. In diesem Zusammenhang sind Indikatoren zu entwickeln und Daten zu Mobilität, Fähigkeiten, Laufbahn und Geschlechtergleichstellung der Forscher im Hinblick auf Synergien und eine enge Abstimmung mit den Unterstützungsmaßnahmen zu analysieren, die im Rahmen des Einzelziels ""Europa in einer sich verändernden Welt - Integrative, innovative und reflektierende Gesellschaften"" für Forscher, ihre Arbeitgeber und Geldgeber durchgeführt werden. Die Tätigkeit zielt ferner darauf ab, das Bewusstsein für die Bedeutung und Attraktivität einer wissenschaftlichen Laufbahn zu erhöhen und die Forschungs- und Innovationsergebnisse der Arbeiten zu verbreiten, die aus den Marie-Skłodowska-Curie-Maßnahmen hervorgehen.";"";"H2020";"H2020-EU.1.3.";"";"";"2014-09-22 20:39:39";"664119" +"H2020-EU.1.3.5.";"fr";"H2020-EU.1.3.5.";"";"";"Soutien spécifique et actions stratégiques";"MSCA Specific support";"

Soutien spécifique et actions stratégiques

L'objectif est d'assurer le suivi des progrès réalisés, de recenser les lacunes et les obstacles au niveau des actions Marie Skłodowska-Curie et d'accroître l'impact de ces actions. Il convient dans ce cadre de mettre au point des indicateurs et d'analyser les données concernant la mobilité, les compétences et la carrière des chercheurs ainsi que l'égalité entre chercheurs hommes et femmes, en recherchant des synergies et des coordinations approfondies avec les actions de soutien stratégique ciblant les chercheurs, leurs employeurs et leurs bailleurs de fonds réalisées au titre de l'objectif spécifique «L'Europe dans un monde en évolution - Des sociétés ouvertes à tous, innovantes et capables de réflexion». Cette activité vise également à faire comprendre l'importance et l'attractivité d'une carrière dans la recherche ainsi qu'à diffuser les résultats de la recherche et de l'innovation obtenus grâce aux travaux financés par des actions Marie Skłodowska-Curie.";"";"H2020";"H2020-EU.1.3.";"";"";"2014-09-22 20:39:39";"664119" +"H2020-EU.1.3.5.";"es";"H2020-EU.1.3.5.";"";"";"Apoyo específico y acciones políticas";"MSCA Specific support";"

Apoyo específico y acciones políticas

Los objetivos consisten en seguir de cerca los progresos logrados, detectando lagunas y obstáculos en las acciones Marie Skłodowska-Curie y aumentar su impacto. En este contexto, se crearán indicadores y se analizarán los datos relativos a la movilidad, las cualificaciones, la carrera de los investigadores y la igualdad entre sexos, procurando conseguir sinergias y una estrecha coordinación con las acciones de apoyo a las políticas sobre los investigadores, sus empleadores y entidades financiadoras realizadas en el marco del objetivo específico ""Europa en un mundo cambiante: sociedades inclusivas, innovadoras y reflexivas"". La actividad tratará además de sensibilizar sobre la importancia y el atractivo de una carrera de investigador y difundir los resultados de la investigación y la innovación derivados de los trabajos financiados por las acciones Marie Skłodowska-Curie.";"";"H2020";"H2020-EU.1.3.";"";"";"2014-09-22 20:39:39";"664119" +"H2020-EU.1.3.5.";"it";"H2020-EU.1.3.5.";"";"";"Sostegno specifico e azione strategica";"MSCA Specific support";"

Sostegno specifico e azione strategica

Gli obiettivi consistono nel monitorare i progressi, nell'identificare le lacune e gli ostacoli nelle azioni Marie Skłodowska-Curie e nell'incrementarne l'impatto. In questo contesto si sviluppano gli indicatori e si analizzano i dati relativi alla mobilità, alle competenze, alle carriere e alla parità di genere dei ricercatori, alla ricerca di sinergie e di uno stretto coordinamento con le azioni di sostegno strategico dei ricercatori, dei loro datori di lavoro e dei finanziatori, portate avanti nell'ambito dell'obiettivo specifico ""L'Europa in un mondo che cambia - Società inclusive, innovative e riflessive"". L'attività mira inoltre a sensibilizzare in merito all'importanza e all'attrattività di una carriera di ricerca e a diffondere i risultati di ricerca e innovazione generati dalle attività sostenute dalle azioni Marie Skłodowska-Curie.";"";"H2020";"H2020-EU.1.3.";"";"";"2014-09-22 20:39:39";"664119" +"H2020-EU.1.3.5.";"pl";"H2020-EU.1.3.5.";"";"";"Działania wspierające i polityczne";"MSCA Specific support";"

Działania wspierające i polityczne

Celem jest monitorowanie postępów, określenie luk i barier w działaniach „Maria Skłodowska-Curie” i zwiększenie ich oddziaływania. W tym kontekście opracowywane są wskaźniki oraz analizowane są dane odnoszące się do mobilności naukowców, ich umiejętności i karier oraz równości płci; ma to na celu zapewnienie synergii i bliskiej koordynacji z politycznymi działaniami wspierającymi dotyczącymi naukowców, ich pracodawców i sponsorów prowadzonymi w ramach celu szczegółowego „Europa w zmieniającym się świecie – integracyjne, innowacyjne i refleksyjne społeczeństwa”. Działania mają na celu zwiększenie świadomości na temat znaczenia i atrakcyjności kariery badawczej oraz upowszechnianie wyników działalności badawczej i innowacyjnej pozyskanych dzięki pracom wspieranym w ramach działań „Maria Skłodowska-Curie”.";"";"H2020";"H2020-EU.1.3.";"";"";"2014-09-22 20:39:39";"664119" +"H2020-EU.3.3.1.";"it";"H2020-EU.3.3.1.";"";"";"Ridurre il consumo di energia e le emissioni di carbonio grazie all'uso intelligente e sostenibile";"Reducing energy consumption and carbon footprint";"

Ridurre il consumo di energia e le emissioni di carbonio grazie all'uso intelligente e sostenibile

Le attività si concentrano sulla ricerca e la sperimentazione su larga scala di nuovi concetti, di soluzioni non tecnologiche, di componenti tecnologici più efficienti, socialmente accettabili e accessibili nonché su sistemi con intelligenza integrata, che permettono la gestione energetica in tempo reale di edifici nuovi ed esistenti con emissioni prossime allo zero, a consumi energetici praticamente nulli e a energia positiva, edifici, città e territori ristrutturati, energie rinnovabili per il riscaldamento e il raffreddamento, industrie altamente efficienti e adozione massiccia di soluzioni e servizi di efficienza e risparmio energetici da parte di imprese, singoli, comunità e città.";"";"H2020";"H2020-EU.3.3.";"";"";"2014-09-22 20:45:58";"664323" +"H2020-EU.3.3.1.";"es";"H2020-EU.3.3.1.";"";"";"Reducir el consumo de energía y la huella de carbono mediante un uso inteligente y sostenible";"Reducing energy consumption and carbon footprint";"

Reducir el consumo de energía y la huella de carbono mediante un uso inteligente y sostenible

Las actividades se centrarán en la investigación y ensayo a escala real de nuevos conceptos, soluciones no tecnológicas, componentes tecnológicos más eficientes, socialmente aceptables y asequibles y sistemas con inteligencia incorporada, a fin de poder gestionar la energía en tiempo real en ciudades y territorios y lograr edificios con emisiones cercanas a cero o que generen más energía de la que consumen, edificios, ciudades y barrios modernizados, calefacción y refrigeración renovables, industrias altamente eficientes y adopción masiva por parte de empresas, particulares, comunidades y ciudades de soluciones y servicios de eficiencia energética y de ahorro de energía.";"";"H2020";"H2020-EU.3.3.";"";"";"2014-09-22 20:45:58";"664323" +"H2020-EU.3.3.1.";"fr";"H2020-EU.3.3.1.";"";"";"Réduire la consommation d'énergie et l'empreinte carbone en utilisant l'énergie de manière intelligente et durable";"Reducing energy consumption and carbon footprint";"

Réduire la consommation d'énergie et l'empreinte carbone en utilisant l'énergie de manière intelligente et durable

Les activités se concentrent sur la recherche et les essais en grandeur réelle de nouveaux concepts, de solutions non technologiques, ainsi que de composants technologiques et de systèmes avec technologies intelligentes intégrées qui soient plus efficaces, socialement acceptables et financièrement abordables, afin de permettre une gestion énergétique en temps réel pour des bâtiments, des immeubles reconditionnés, des villes et des quartiers nouveaux ou existants à émissions quasi nulles, à consommation d'énergie quasi nulle et à énergie positive, des systèmes de chauffage et de refroidissement utilisant les énergies renouvelables, des industries très performantes et une adoption massive, par les entreprises, les particuliers, les collectivités et les villes, de solutions et de services assurant l'efficacité énergétique et permettant des économies d'énergie.";"";"H2020";"H2020-EU.3.3.";"";"";"2014-09-22 20:45:58";"664323" +"H2020-EU.3.3.1.";"de";"H2020-EU.3.3.1.";"";"";"Verringerung des Energieverbrauchs und Verbesserung der CO2-Bilanz durch intelligente und nachhaltige Nutzung ";"Reducing energy consumption and carbon footprint";"

Verringerung des Energieverbrauchs und Verbesserung der CO2-Bilanz durch intelligente und nachhaltige Nutzung

Schwerpunkt der Tätigkeiten sind Forschung und vollmaßstäbliche Tests neuer Konzepte, nichttechnologische Lösungen sowie technologische Komponenten und Systeme mit integrierter Intelligenz, die effizienter, gesellschaftlich akzeptabel und erschwinglich sind. Dies ermöglicht ein Energiemanagement in Echtzeit für neue und bereits vorhandene nahezu emissionsfreie, Niedrigstenergie- und Energieüberschussgebäude, nachgerüstete Gebäude, Städte und Bezirke, den Einsatz erneuerbarer Energien in Heizung und Kühlung, hocheffiziente Industrien und den flächendeckenden Einsatz von Energieeffizienz- und Energiesparlösungen und -dienstleistungen durch Unternehmen, Privathaushalte und Kommunen.";"";"H2020";"H2020-EU.3.3.";"";"";"2014-09-22 20:45:58";"664323" +"H2020-EU.3.3.1.";"pl";"H2020-EU.3.3.1.";"";"";"Ograniczenie zużycia energii i śladu węglowego poprzez inteligentne i zrównoważone użytkowanie";"Reducing energy consumption and carbon footprint";"

Ograniczenie zużycia energii i śladu węglowego poprzez inteligentne i zrównoważone użytkowanie

Działania mają skupiać się na badaniach naukowych i prowadzonych w pełnej skali testach nowych koncepcji, rozwiązaniach nietechnologicznych, na bardziej efektywnych, akceptowanych społecznie i przystępnych cenowo komponentach technologicznych oraz systemach z wbudowaną inteligencją, co ma umożliwić zarządzanie energią w czasie rzeczywistym w nowych i istniejących budynkach niskoemisyjnych, o niemal zerowym zużyciu energii i produkujących więcej energii niż wynosi jej zużycie, w przebudowywanych budynkach, miastach i dzielnicach, na ogrzewaniu i chłodzeniu z wykorzystaniem energii odnawialnej, wysoce oszczędnym przemyśle oraz masowym wprowadzeniu efektywnych energetycznie i energooszczędnych rozwiązań i usług przez przedsiębiorstwa, osoby fizyczne, społeczności i miasta.";"";"H2020";"H2020-EU.3.3.";"";"";"2014-09-22 20:45:58";"664323" +"H2020-EU.3.7.4.";"en";"H2020-EU.3.7.4.";"";"";"Improve cyber security";"";"";"";"H2020";"H2020-EU.3.7.";"";"";"2014-09-22 20:50:38";"664471" +"H2020-EU.3.2.4.2.";"fr";"H2020-EU.3.2.4.2.";"";"";"Développer des bioraffineries intégrées";"";"Un soutien sera apporté aux activités destinées à accélérer le développement de bioproduits, de produits intermédiaires et de bioénergies et biocombustibles durables, en se concentrant essentiellement sur une approche en cascade et en donnant la priorité à la production de produits à haute valeur ajoutée. Des technologies et des stratégies visant à garantir l'approvisionnement en matières premières seront mises au point. L'élargissement de l'éventail des types de biomasse utilisables dans les bioraffineries de deuxième et troisième générations, y compris ceux d'origine sylvicole, des biodéchets et des sous-produits industriels, contribuera à éviter les conflits entre production d'aliments et production de combustibles et favorisera le développement économique des zones rurales et littorales de l'Union, tout en respectant l'environnement.";"";"H2020";"H2020-EU.3.2.4.";"";"";"2018-08-03 16:31:41";"702726" +"H2020-EU.3.2.4.2.";"es";"H2020-EU.3.2.4.2.";"";"";"Desarrollar biorrefinerías integradas";"";"Se respaldarán las actividades que impulsen los bioproductos, los productos intermedios y las bioenergías o los biocombustibles sostenibles, centrándose en particular en un enfoque en cascada y dando prioridad a la generación de productos de alto valor añadido. Se desarrollarán tecnologías y estrategias que garanticen el suministro de materias primas. Una gama mejorada de tipos de biomasa que se puedan utilizar en biorrefinerías de segunda y tercera generación, incluyendo bosques, biorresiduos y subproductos industriales, contribuirá a evitar los conflictos entre alimentos y combustibles y apoyará el desarrollo económico y respetuoso del medio ambiente de las zonas rurales y costeras de la Unión.";"";"H2020";"H2020-EU.3.2.4.";"";"";"2018-08-03 16:31:05";"702726" +"H2020-EU.3.2.4.2.";"de";"H2020-EU.3.2.4.2.";"";"";"Entwicklung integrierter Bioraffinerien";"";"Es werden Tätigkeiten zur Förderung nachhaltiger Bioprodukte, Zwischenprodukte und Biokraftstoffe bzw. von Bioenergie unterstützt, wobei vor allem ein ""Kaskadenansatz"" verfolgt werden soll, bei dem der Schwerpunkt auf der Entwicklung von Produkten mit hohem Mehrwert liegt. Es werden Technologien und Strategien für die Gewährleistung der Rohstoffversorgung entwickelt. Die Erweiterung der Bandbreite von Biomassearten, die in Bioraffinerien der zweiten und dritten Generation genutzt werden können, einschließlich forstwirtschaftlicher Erzeugnisse, Bioabfällen und industrieller Nebenerzeugnisse, wird dazu beitragen, dass Konflikte bezüglich der Verwendung von Biomasse für Lebensmittelzwecke oder als Brennstoff vermieden werden, und die wirtschaftliche und umweltfreundliche Entwicklung der ländlichen Gebiete und Küstengebiete der Union unterstützen.";"";"H2020";"H2020-EU.3.2.4.";"";"";"2018-08-03 16:31:07";"702726" +"H2020-EU.3.2.4.2.";"en";"H2020-EU.3.2.4.2.";"";"";"Developing integrated biorefineries";"";"Activities will be supported to boost sustainable bioproducts, intermediates and bioenergy/biofuels, predominantly focusing on a cascade approach, prioritising the generation of high added value products. Technologies and strategies will be developed to assure the raw material supply. Enhancing the range of types of biomass for use in second and third generation biorefineries, including forestry, biowaste and industrial by-products, will help avoid food/fuel conflicts and support economic and environmentally friendly development of rural and coastal areas in the Union.";"";"H2020";"H2020-EU.3.2.4.";"";"";"2018-08-03 16:31:43";"702726" +"H2020-EU.3.2.4.2.";"it";"H2020-EU.3.2.4.2.";"";"";"Sviluppo di bioraffinerie integrate";"";"Saranno sostenute attività destinate alla promozione dei prodotti biologici sostenibili, dei prodotti intermedi e delle bioenergie/biocarburanti, concentrandosi prevalentemente su un approccio a cascata e dando la priorità alla produzione di prodotti ad elevato valore aggiunto. Si metteranno a punto tecnologie e strategie per garantire l'approvvigionamento di materie prime. Ampliando la gamma di tipologie di biomassa destinate ad essere utilizzate nelle bioraffinerie di seconda e terza generazione, ivi comprese quelle provenienti dalla silvicoltura, dai rifiuti organici e dai sottoprodotti industriali, sarà possibile evitare i conflitti tra prodotti alimentari e combustibili e sostenere uno sviluppo economico e rispettoso dell'ambiente nelle aree rurali e costiere dell'Unione.";"";"H2020";"H2020-EU.3.2.4.";"";"";"2018-08-03 16:31:07";"702726" +"H2020-EU.3.2.4.2.";"pl";"H2020-EU.3.2.4.2.";"";"";"Rozwój zintegrowanych biorafinerii";"";"Wsparcie otrzymają działania ukierunkowane na pobudzenie wytwarzania zrównoważonych bioproduktów i produktów pośrednich, bioenergii i biopaliw, ze zwróceniem uwagi przede wszystkim na podejście kaskadowe przy uznaniu za priorytet wytwarzania produktów o wysokiej wartości dodanej. W celu zapewnienia dostaw surowców opracowywane będą technologie i strategie. Zwiększenie zakresu rodzajów biomasy stosowanej w biorafineriach drugiej i trzeciej generacji, w tym produktów ubocznych pochodzących z sektora leśnictwa, odpadów biologicznych i ubocznych produktów przemysłowych, pozwoli uniknąć konfliktów między produkcją żywności a produkcją paliw i przyczyni się do przyjaznego środowisku rozwoju gospodarczego wiejskich i przybrzeżnych obszarów w Unii.";"";"H2020";"H2020-EU.3.2.4.";"";"";"2018-08-03 16:31:06";"702726" +"H2020-EU.4.";"de";"H2020-EU.4.";"";"";"VERBREITUNG VON EXZELLENZ UND AUSWEITUNG DER BETEILIGUNG";"Spreading excellence and widening participation";"

VERBREITUNG VON EXZELLENZ UND AUSWEITUNG DER BETEILIGUNG

Einzelziel

Das Einzelziel besteht darin, das Potenzial des europäischen Pools an Talenten auszuschöpfen und dafür zu sorgen, dass die Vorteile einer innovationsgesteuerten Wirtschaft maximiert und im Einklang mit dem Exzellenzprinzip umfassend über die gesamte Union verteilt werden.Trotz einer neuen Tendenz zur Annäherung der Innovationsleistungen einzelner Länder und Regionen bestehen noch immer große Unterschiede zwischen den Mitgliedstaaten. Darüber hinaus droht die derzeitige Finanzkrise durch Beschränkung der nationalen Haushalte die Kluften noch zu vergrößern. Die Nutzung des Potenzials des europäischen Pools an Talenten und die Maximierung und Verbreitung der Vorteile von Innovation in der gesamten Union ist von entscheidender Bedeutung für die Wettbewerbsfähigkeit Europas und seine Fähigkeit, künftig gesellschaftliche Herausforderungen zu bewältigen.

Begründung und Mehrwert für die Union

Damit Fortschritte auf dem Weg zu einer nachhaltigen, integrativen und intelligenten Gesellschaft gemacht werden können, muss Europa den verfügbaren Pool an Talenten in der Union so gut wie möglich nutzen und ungenutztes Forschungs- und Innovationspotenzial freisetzen.Durch die Förderung und Bündelung der Exzellenzpools werden die vorgeschlagenen Maßnahmen zur Stärkung des Europäischen Forschungsraums beitragen.Einzelziele und Tätigkeiten in GrundzügenDie Verbreitung von Exzellenz und die Ausweitung der Beteiligung wird durch folgende spezifische Maßnahmen erleichtert werden:— Zusammenführung von exzellenten Forschungseinrichtungen und hinsichtlich Forschung, Entwicklung und Innovation leistungsschwachen Regionen mit dem Ziel, neue Exzellenzzentren in den hinsichtlich Forschung, Entwicklung und Innovation leistungsschwachen Mitgliedstaaten und Regionen zu schaffen (oder bestehende Zentren umfassend aufzurüsten).— Partnerschaften zwischen Forschungseinrichtungen mit dem Ziel, einen bestimmten Forschungsbereich in einer aufstrebenden Einrichtung durch Verbindungen zu mindestens zwei international führenden Einrichtungen in diesem Bereich wesentlich zu stärken. — Einrichtung von EFR-Lehrstühlen um herausragende Wissenschaftler für Einrichtungen mit einem eindeutigen Potenzial für Exzellenz in der Forschung zu interessieren, damit diese Einrichtungen ihr Potenzial in vollem Umfang freisetzen können und so im Europäischen Forschungsraum gleichberechtigte Bedingungen für Forschung und Innovation entstehen. Mögliche Synergien mit den Tätigkeiten des ERC sollten erforscht werden.— Eine Fazilität für Politikunterstützung soll die Gestaltung, Durchführung und Bewertung nationaler/regionaler forschungs- und innovationspolitischer Maßnahmen verbessern.— Unterstützung des Zugangs herausragender Forscher und Innovatoren, die nicht ausreichend in europäische und internationale Netze eingebunden sind, zu internationalen Netzen, einschließlich COST.— Stärkung der administrativen und operativen Kapazität transnationaler Netzwerke nationaler Kontaktstellen, u. a. durch Schulung, damit sie den potenziellen Teilnehmern bessere Unterstützung bieten können.";"";"H2020";"H2020-EC";"";"";"2014-09-23 20:20:57";"664481" +"H2020-EU.4.";"es";"H2020-EU.4.";"";"";"DIFUNDIR LA EXCELENCIA Y AMPLIAR LA PARTICIPACIÓN";"Spreading excellence and widening participation";"

DIFUNDIR LA EXCELENCIA Y AMPLIAR LA PARTICIPACIÓN

Objetivo específico

El objetivo específico es explotar plenamente el potencial de talento en Europa y garantizar que los beneficios de una economía centrada en la innovación se maximicen y distribuyan equitativamente por toda la Unión, de conformidad con el principio de excelencia.A pesar de la reciente tendencia hacia una convergencia de los resultados de diversos países y regiones en materia de innovación, siguen subsistiendo agudas diferencias entre Estados miembros. Además, al someter los presupuestos nacionales a limitaciones, la actual crisis financiera amenaza con aumentar esas diferencias. Aprovechar el potencial de talento existente en Europa y maximizar y aumentar los beneficios de la innovación a través de la Unión es vital para la competitividad de Europa y su capacidad de afrontar los retos de la sociedad en el futuro.

Justificación y valor añadido de la Unión

Para avanzar hacia una sociedad sostenible, inclusiva e inteligente, Europa necesita utilizar de la mejor manera posible la inteligencia disponible en la Unión y desbloquear el potencial no aprovechado de I+i.Mediante la protección y la conexión de los centros de excelencia, las actividades propuestas contribuirán a fortalecer el EEI.

Líneas generales de las actividades

Se facilitará mediante medidas específicas la difusión de la excelencia y se ampliará la participación mediante actuaciones como las siguientes:— Creación de nuevos centros de excelencia (o mejora considerable de los ya existentes) en los Estados miembros y regiones con menor rendimiento de desarrollo tecnológico e innovación.— El hermanamiento de centros de investigación con el fin de reforzar considerablemente un campo determinado de investigación en un centro novel vinculándolo con al menos dos centros de rango internacional en dicho campo. — Establecimiento de ""cátedras del EEI"" para atraer a personal prominente de las instituciones académicas a instituciones que tengan un claro potencial para la excelencia en la investigación con el fin de ayudar a dichas instituciones a desarrollar plenamente su potencial y lograr así un contexto de igualdad de oportunidades para el impulso de la investigación y la innovación en el EEI. Deberían explorarse posibles sinergias con las actividades del Consejo Europeo de Investigación.— Creación de un mecanismo de apoyo a las políticas para mejorar la concepción, la ejecución y la evaluación de las políticas nacionales y regionales de investigación e innovación.— Apoyo al acceso a las redes internacionales de investigadores e innovadores excelentes que no participen suficientemente en las redes europeas e internacionales, inclusive COST. — Mejora de la capacidad administrativa y operativa de las redes transnacionales de puntos de contacto nacionales, por ejemplo mediante la formación, para que puedan proporcionar un mejor apoyo a los potenciales participantes. ";"";"H2020";"H2020-EC";"";"";"2014-09-23 20:20:57";"664481" +"H2020-EU.4.";"fr";"H2020-EU.4.";"";"";"PROPAGER L'EXCELLENCE ET ÉLARGIR LA PARTICIPATION";"Spreading excellence and widening participation";"

PROPAGER L'EXCELLENCE ET ÉLARGIR LA PARTICIPATION

Objectif spécifique

L'objectif spécifique est d'exploiter pleinement le potentiel des talents européens et de veiller à ce que les retombées d'une économie axée sur l'innovation soient à la fois maximisées et largement réparties au sein de l'Union, conformément au principe d'excellence.Même si les résultats des différents pays et des différentes régions tendent depuis peu à converger dans le domaine de l'innovation, il subsiste toujours des différences importantes entre les États membres. En outre, en imposant des restrictions aux budgets nationaux, la crise financière actuelle menace de creuser les écarts. Afin que l'Europe soit compétitive et à même de relever les défis de société à l'avenir, il est indispensable d'exploiter le potentiel de talents de l'Europe et de maximiser et diffuser les bénéfices de l'innovation dans toute l'Union.

Justification et valeur ajoutée de l'Union

Pour progresser sur la voie d'une société durable, inclusive et intelligente, l'Europe doit utiliser au mieux l'intelligence dont elle dispose dans l'Union et libérer son potentiel inexploité en matière de recherche et d'innovation.En favorisant et en reliant les pôles d'excellence, les activités proposées contribueront à renforcer l'EER.

Grandes lignes des activités

Des actions spécifiques faciliteront la diffusion de l'excellence et l'élargissement de la participation par l'intermédiaire des actions suivantes:— Faire travailler ensemble des institutions de recherche d'excellence et des régions peu performantes en matière de recherche, de développement et d'innovation L'objectif étant de créer de nouveaux centres d'excellence (ou de remettre à niveau ceux qui existent) dans les États membres et les régions peu performants en matière de recherche, de développement et d'innovation.— Jumeler des institutions de recherche L'objectif étant de renforcer nettement un domaine défini de recherche dans une institution émergente en établissant des liens avec au moins deux institutions de pointe au niveau international dans un domaine défini. — Instaurer des «chaires EER» Instaurer des «chaires EER» pour attirer des universitaires de renom dans des institutions ayant un clair potentiel d'excellence dans la recherche, afin d'aider ces institutions à libérer pleinement ce potentiel et créer de ce fait des conditions de concurrence égales pour la recherche et l'innovation dans l'EER. Il faudrait étudier les possibilités de synergies avec les activités du CER;— Mettre en place un mécanisme de soutien aux politiques Afin d'améliorer la définition, la mise en œuvre et l'évaluation des politiques nationales/régionales de recherche et d'innovation.— Favoriser l'accès aux réseaux internationaux de chercheurs et d'innovateurs d'excellence qui ne sont pas suffisamment présents dans les réseaux européens et internationaux, y compris COST. — Renforcer les capacités opérationnelles et administratives des réseaux transnationaux de points de contact nationaux, y compris par la formation, afin qu'ils puissent apporter un meilleur soutien aux participants potentiels.";"";"H2020";"H2020-EC";"";"";"2014-09-23 20:20:57";"664481" +"H2020-EU.4.";"pl";"H2020-EU.4.";"";"";"UPOWSZECHNIANIE DOSKONAŁOŚCI I ZAPEWNIANIE SZERSZEGO UCZESTNICTWA";"Spreading excellence and widening participation";"

UPOWSZECHNIANIE DOSKONAŁOŚCI I ZAPEWNIANIE SZERSZEGO UCZESTNICTWA

Cel szczegółowy

Celem szczegółowym jest pełne wykorzystanie potencjału europejskiej puli talentów oraz zadbanie o to, by korzyści z gospodarki opartej na innowacjach były jak największe oraz szeroko upowszechniane w całej Unii zgodnie z zasadą doskonałości.Jednak pomimo obserwowanej w ostatnim czasie tendencji do wyrównania poziomu między poszczególnymi krajami i regionami, jeżeli chodzi o wyniki w dziedzinie innowacji, wciąż istnieją ogromne różnice między państwami członkowskimi. Ponadto obecny kryzys finansowy, wymuszając ograniczenia w budżetach krajowych, grozi pogłębieniem przepaści. Wykorzystanie potencjału europejskiej puli talentów oraz zadbanie o to, by korzyści z innowacji były jak największe oraz by były upowszechniane w całej Unii, jest kluczowe dla konkurencyjności Europy i jej zdolności do stawienia czoła wyzwaniom społecznym w przyszłości.

Uzasadnienie i unijna wartość dodana

Aby osiągnąć postępy na drodze ku trwałemu, integracyjnemu i inteligentnemu społeczeństwu, Europa musi jak najlepiej wykorzystać wiedzę dostępną w Unii oraz uwolnić niewykorzystany potencjał w zakresie badań naukowych i innowacji.Proponowane działania, wspierające i łączące ośrodki doskonałości, przyczynią się do wzmocnienia EPB.

Ogólne kierunki działań

Działania szczegółowe ułatwią upowszechnianie doskonałości i zapewnianie szerszego uczestnictwa i będą polegać na:— łączeniu w zespoły najlepszych instytucji badawczych (ang. teaming) oraz przedstawicieli regionów osiągających słabe wyniki w zakresie badań, rozwoju i innowacjico będzie miało na celu utworzenie nowych (lub znaczące podniesienie statusu istniejących) centrów doskonałości w państwach członkowskich i regionach osiągających słabe wyniki w zakresie badań, rozwoju i innowacji.— tworzeniu partnerstw między instytucjami badawczymi (ang. twinning) mających na celu znaczne wzmocnienie określonej dziedziny badań naukowych w powstającej instytucji poprzez utworzenie powiązań z co najmniej dwiema instytucjami, które w danej dziedzinie odgrywają wiodącą rolę na poziomie międzynarodowym. — ustanowieniu „katedr EPB” (ang. „ERA chairs”)w celu przyciągnięcia wybitnych przedstawicieli środowisk akademickich do instytucji dysponujących wyraźnym potencjałem doskonałości badawczej, aby pomóc tym instytucjom w pełni uwolnić ich potencjał i stworzyć tym samym równe warunki działania w zakresie badań naukowych i innowacji w EPB. Należy zbadać możliwość synergii z działalnością Europejskiej Rady ds. Badań Naukowych.— wprowadzeniu narzędzia wspierania polityki w celu podniesienia jakości projektowania, realizacji i oceny krajowych/regionalnych polityk w zakresie badań naukowych i innowacji.— ułatwieniu dostępu do międzynarodowych sieci wybitnym naukowcom i innowatorom, którzy są w niewystarczającym stopniu zaangażowani w działania sieci europejskich i międzynarodowych, w tym w COST. — zwiększeniu administracyjnych i operacyjnych zdolności transnarodowych sieci krajowych punktów kontaktowych, m.in. w drodze szkoleń, tak by mogły lepiej wspierać ewentualnych uczestników. ";"";"H2020";"H2020-EC";"";"";"2014-09-23 20:20:57";"664481" +"H2020-EU.4.";"it";"H2020-EU.4.";"";"";"DIFFONDERE L'ECCELLENZA E AMPLIARE LA PARTECIPAZIONE";"Spreading excellence and widening participation";"

DIFFONDERE L'ECCELLENZA E AMPLIARE LA PARTECIPAZIONE

Obiettivo specifico

L'obiettivo specifico è sfruttare appieno il potenziale di talenti esistenti in Europa e assicurare che i benefici di un'economia basata sull'innovazione siano massimizzati e ampiamente distribuiti in tutta l'Unione secondo il principio dell'eccellenza.Nonostante la recente tendenza a una convergenza dei risultati dei singoli paesi e regioni nell'ambito dell'innovazione, permangono marcate differenze tra gli Stati membri. Inoltre, l'attuale crisi finanziaria, imponendo restrizioni ai bilanci nazionali, minaccia di ampliare i divari. Sfruttare il potenziale di talenti esistenti in Europa, ottimizzando e diffondendo i benefici dell'innovazione in tutta l'Unione, è fondamentale per la competitività dell'Europa e per la sua capacità di affrontare le sfide per la società in futuro.

Motivazione e valore aggiunto dell'Unione

Per progredire verso una società sostenibile, inclusiva e intelligente, l'Europa deve utilizzare al meglio l'intelligenza disponibile nell'Unione e mettere a frutto il potenziale inesplorato nell'ambito della ricerca e dell'innovazione.Tutelando e collegando i gruppi di eccellenza, le attività proposte contribuiranno a rafforzare il SER.

Le grandi linee delle attività

La diffusione dell'eccellenza e l'ampliamento della partecipazione saranno agevolati dalle azioni seguenti:— Raggruppamento di istituti di ricerca di eccellenza e regioni con prestazioni meno soddisfacenti dal punto di vista dell'RSI Miranti a creare nuovi centri di eccellenza (o a migliorare in modo significativo quelli esistenti) in Stati membri e regioni con prestazioni meno soddisfacenti dal punto di vista dell'RSI.— Gemellaggi di istituti di ricerca Miranti a rafforzare in modo decisivo un determinato settore di ricerca in un istituto emergente attraverso collegamenti con almeno due istituti che svolgono un ruolo guida a livello internazionale in un settore specifico. — Istituzione di cattedre ""SER"" Per attirare accademici di alto livello negli istituti con un chiaro potenziale di ricerca di eccellenza, al fine di aiutare tali istituti a realizzare pienamente il loro potenziale e creare così condizioni eque per la ricerca e l'innovazione nel SER. Occorre esplorare possibili sinergie con le attività del CER.— Un meccanismo di sostegno delle politiche Inteso a migliorare la concezione, l'attuazione e la valutazione delle politiche nazionali/regionali di ricerca e innovazione.— Sostegno dell'accesso alle reti internazionali di ricercatori e innovatori di eccellenza che non sono presenti in misura sufficiente nelle reti europee e internazionali, compresa la cooperazione europea in campo scientifico e tecnologico — Rafforzamento della capacità amministrativa e operativa delle reti transnazionali di punti di contatto nazionali, anche mediante la formazione, in modo che possano fornire migliore sostegno ai potenziali partecipanti ";"";"H2020";"H2020-EC";"";"";"2014-09-23 20:20:57";"664481" +"H2020-EU.3.3.7.";"it";"H2020-EU.3.3.7.";"";"";"Assorbimento di mercato dell'innovazione energetica - iniziative fondate sul programma ""Energia intelligente - Europa""";"Market uptake of energy innovation";"

Assorbimento di mercato dell'innovazione energetica - iniziative fondate sul programma ""Energia intelligente - Europa""

Le attività sono basate su quelle intraprese nel quadro del programma ""Energia intelligente - Europa"" e le rafforzano ulteriormente. Si concentrano sulle innovazioni applicate e sulla promozione di norme al fine di agevolare l'adozione da parte del mercato delle tecnologie e dei servizi energetici, per affrontare gli ostacoli non tecnologici e accelerare un'attuazione efficiente in termini di costi delle politiche energetiche europee. Sarà anche prestata attenzione all'innovazione per l'uso intelligente e sostenibile delle tecnologie esistenti.";"";"H2020";"H2020-EU.3.3.";"";"";"2014-09-22 20:46:56";"664355" +"H2020-EU.3.3.7.";"fr";"H2020-EU.3.3.7.";"";"";"La commercialisation des innovations dans le domaine de l'énergie en s'appuyant sur le programme «Énergie intelligente - Europe»";"Market uptake of energy innovation";"

La commercialisation des innovations dans le domaine de l'énergie en s'appuyant sur le programme «Énergie intelligente - Europe»

Les activités s'appuient sur celles menées dans le cadre du programme «Énergie intelligente - Europe» et les renforcent. Elles se concentrent sur l'innovation appliquée et la promotion des normes, afin de faciliter la commercialisation des technologies et services énergétiques, de lever les obstacles non technologiques et d'assurer une mise en œuvre plus rapide et au meilleur coût des politiques énergétiques de l'Union. Il sera également tenu compte de l'innovation pour une utilisation intelligente et durable des technologies existantes.";"";"H2020";"H2020-EU.3.3.";"";"";"2014-09-22 20:46:56";"664355" +"H2020-EU.3.3.7.";"pl";"H2020-EU.3.3.7.";"";"";"Wprowadzanie na rynek innowacji w zakresie energii – korzystanie z programu „Inteligentna energia dla Europy”";"Market uptake of energy innovation";"

Wprowadzanie na rynek innowacji w zakresie energii – korzystanie z programu „Inteligentna energia dla Europy”

Działania mają nawiązywać do działań podjętych w ramach programu „Inteligentna energia dla Europy” oraz stanowić ich uzupełnienie. Mają skupiać się na stosowaniu innowacji i promowaniu standardów, aby ułatwić wprowadzanie na rynek nowych technologii i usług w zakresie energii w celu wyeliminowania barier innych niż technologiczne oraz przyspieszenia racjonalnej pod względem kosztów realizacji unijnej polityki energetycznej. Zostanie także zwrócona uwaga na innowacje w dziedzinie inteligentnego i zrównoważonego wykorzystania istniejących technologii.";"";"H2020";"H2020-EU.3.3.";"";"";"2014-09-22 20:46:56";"664355" +"H2020-EU.3.3.7.";"de";"H2020-EU.3.3.7.";"";"";"Markteinführung von Energieinnovationen – Aufbau auf ""Intelligente Energie – Europa";"Market uptake of energy innovation";"

Markteinführung von Energieinnovationen – Aufbau auf ""Intelligente Energie – Europa

Die Tätigkeiten stützen sich auf die im Rahmen des Programms ""Intelligente Energie – Europa"" (IEE) durchgeführten Tätigkeiten und verstärken diese. Schwerpunkt ist die angewandte Innovation und ein Beitrag zur Normung, um die Einführung von Energietechnologien und -dienstleistungen auf dem Markt zu erleichtern, nichttechnologische Hemmnisse zu beseitigen und die kosteneffiziente Umsetzung der Energiepolitik der Union zu beschleunigen. Dabei wird auch Innovationen im Interesse einer intelligenten und nachhaltigen Nutzung bereits vorhandener Technologien Beachtung geschenkt.";"";"H2020";"H2020-EU.3.3.";"";"";"2014-09-22 20:46:56";"664355" +"H2020-EU.3.3.7.";"es";"H2020-EU.3.3.7.";"";"";"Absorción por el mercado de la innovación energética - explotación del Programa Energía Inteligente - Europa Europe";"Market uptake of energy innovation";"

Absorción por el mercado de la innovación energética - explotación del Programa Energía Inteligente - Europa Europe

Las actividades se basarán y potenciarán las ya emprendidas en el marco del programa Iniciativa Energía inteligente - Europa (EIE). Las actividades se centrarán en la innovación aplicada y la promoción de normas destinadas a facilitar la absorción por el mercado de las tecnologías y servicios energéticos, a combatir los obstáculos no tecnológicos y a acelerar la aplicación eficaz en relación con los costes de las políticas energéticas de la Unión. Se prestará atención igualmente a la innovación para el empleo inteligente y sostenible de las tecnologías existentes.";"";"H2020";"H2020-EU.3.3.";"";"";"2014-09-22 20:46:56";"664355" +"H2020-Topics";"en";"H2020-Topics";"";"";"H2020 Topics";"";"";"";"H2020";"";"";"";"2015-03-26 12:00:00";"20200" +"H2020-EU.2.3.2.3.";"pl";"H2020-EU.2.3.2.3.";"";"";"Wsparcie innowacji rynkowych";"Supporting market-driven innovation";"

Wsparcie innowacji rynkowych

Należy wspierać transnarodowe innowacje rynkowe w celu poprawy ramowych warunków innowacji i stawić czoło konkretnym barierom powstrzymującym w szczególności wzrost innowacyjnych MŚP.";"";"H2020";"H2020-EU.2.3.2.";"";"";"2014-09-22 20:43:05";"664233" +"H2020-EU.3.4.2.";"fr";"H2020-EU.3.4.2.";"";"";"Plus de mobilité, moins d'encombrement, plus de sûreté et de sécurité";"Mobility, safety and security";"

Plus de mobilité, moins d'encombrement, plus de sûreté et de sécurité

L'objectif est de concilier les besoins de mobilité croissants avec une plus grande fluidité des transports, grâce à des solutions innovantes en faveur de systèmes de transport cohérents, intermodaux, inclusifs, accessibles, sûrs, sécurisés, sains, solides et d'un coût abordable.Les activités visent avant tout à réduire les encombrements, à améliorer l'accessibilité, l'interopérabilité et les choix laissés aux passagers, et à répondre aux besoins des utilisateurs en développant et en promouvant les transports porte-à-porte intégrés, la gestion de la mobilité et la logistique; à renforcer l'intermodalité et le déploiement de solutions de planification et de gestion intelligentes; et à réduire considérablement le nombre d'accidents et l'impact des menaces en matière de sûreté.";"";"H2020";"H2020-EU.3.4.";"";"";"2014-09-22 20:47:20";"664367" +"H2020-EU.2.3.2.1.";"es";"H2020-EU.2.3.2.1.";"";"";"Apoyar a las PYME intensivas en investigación";"Support for research intensive SMEs";"

Apoyar a las PYME intensivas en investigación

El objetivo es promover la innovación transnacional orientada al mercado de las PYME que realizan actividades de I+D. Se dedicará una acción específica a las PYME intensivas en investigación en todos los sectores que demuestren capacidad para explotar comercialmente los resultados del proyecto. Esta acción se basará en el Programa Eurostars.";"";"H2020";"H2020-EU.2.3.2.";"";"";"2014-09-22 20:42:58";"664229" +"H2020-EU.2.3.1.";"pl";"H2020-EU.2.3.1.";"";"";"Zintegrowane działania w zakresie wsparcia dla MŚP, w szczególności za pomocą specjalnego instrumentu";"Mainstreaming SME support";"

Zintegrowane działania w zakresie wsparcia dla MŚP, w szczególności za pomocą specjalnego instrumentu

MŚP są wspomagane w związku ze wszystkimi działaniami w ramach programu „Horyzont 2020”. W tym celu, dla umożliwienia uczestnictwa w programie „Horyzont 2020”, ustanawia się lepsze warunki dla MŚP. Oprócz tego specjalny instrument MŚP zapewnia ustrukturyzowane i spójne wsparcie obejmujące cały cykl innowacji. Instrument MŚP jest przeznaczony dla wszystkich typów innowacyjnych MŚP wykazujących poważne ambicje w kierunku rozwoju, wzrostu i umiędzynarodowienia. Obejmuje wszystkie typy innowacji, w tym także innowacji w zakresie usług, innowacji nietechnologicznych i społecznych, przy założeniu, że każde z tych działań ma wyraźną europejską wartość dodaną. Celem jest rozwój i kapitalizacja potencjału innowacyjnego MŚP poprzez pomoc w eliminacji luki w finansowaniu wczesnej fazy badań naukowych i innowacji obciążonych wysokim ryzykiem, stymulowanie innowacji oraz zwiększanie handlowego wykorzystania wyników przez sektor prywatny.Instrument ten będzie funkcjonował w ramach jednego scentralizowanego systemu zarządzania, przy niewielkich obciążeniach administracyjnych i z pojedynczym punktem kontaktowym. Jest wdrażany przede wszystkim z zastosowaniem podejścia oddolnego na podstawie stale otwartego zaproszenia do składania wniosków.Wszystkie cele szczegółowe priorytetu „Wyzwań społecznych” i celu szczegółowego „Wiodącej pozycji w zakresie technologii prorozwojowych i przemysłowych” będą stosować instrument MŚP i przeznaczą na ten cel określoną kwotę.";"";"H2020";"H2020-EU.2.3.";"";"";"2014-09-22 20:42:51";"664225" +"H2020-EU.2.2.2.";"pl";"H2020-EU.2.2.2.";"";"";"Instrument finansowy zapewniający finansowanie kapitałowe badań naukowych i innowacji: „Instrumenty kapitałowe Unii w zakresie badań naukowych i innowacji”";"Equity facility";"

Instrument finansowy zapewniający finansowanie kapitałowe badań naukowych i innowacji: „Instrumenty kapitałowe Unii w zakresie badań naukowych i innowacji”

Celem jest wniesienie wkładu w przezwyciężenie problemów rynku europejskiego kapitału wysokiego ryzyka oraz zapewnienie kapitałowych i quasi-kapitałowych instrumentów inwestycyjnych na pokrycie potrzeb rozwojowych i finansowych innowacyjnych przedsiębiorstw od fazy zalążka przez wzrost po ekspansję. Działania koncentrują się na wspieraniu celów programu „Horyzont 2020” i powiązanych obszarów polityki.Docelowymi beneficjentami końcowymi są potencjalnie przedsiębiorstwa dowolnej wielkości podejmujące innowacyjną działalność lub przygotowujące się do niej, ze szczególnym naciskiem na MŚP i przedsiębiorstwa o średniej kapitalizacji.Instrument kapitałowy będzie się koncentrował na funduszach kapitału wysokiego ryzyka i funduszach funduszy ukierunkowanych na przedsięwzięcia we wczesnej fazie, zapewniając kapitałowe i quasi-kapitałowe instrumenty inwestycyjne (w tym finansowanie mezaninowe) na potrzeby przedsiębiorstw z portfeli indywidualnych. Instrument będzie również mógł być wykorzystany do celów inwestycji rozwojowych i inwestycji w fazie wzrostu, w połączeniu z instrumentem kapitałowym dla inwestycji znajdujących się na etapie wzrostu w ramach COSME, tak aby zapewnić stałe wsparcie podczas fazy rozruchu i rozwoju przedsiębiorstw.Instrument kapitałowy, stymulowany zapotrzebowaniem, bazuje na podejściu portfelowym, przewidującym, że fundusze kapitału wysokiego ryzyka i inni porównywalni pośrednicy wybierają przedsiębiorstwa, w które będą inwestować.Na przykład na potrzeby osiągnięcia określonych celów związanych z wyzwaniami społecznymi może zostać zastosowane powiązanie z celami, w oparciu o pozytywne doświadczenia Programu ramowego na rzecz konkurencyjności i innowacji (2007-2013) (CIP) pod względem powiązania z celami ekoinnowacji.Okno rozruchowe, służące wsparciu w fazie zalążkowej i wczesnego rozwoju, umożliwia inwestycje kapitałowe m.in. w organizacje zajmujące się transferem wiedzy i podobne organy, dzięki wsparciu transferu technologii (w tym transferu wyników badań i wynalazków powstałych w sferze badań ze środków publicznych do sektora produkcyjnego, na przykład poprzez weryfikację projektu), fundusze kapitału zalążkowego, transgraniczne fundusze kapitału zalążkowego i fundusze ukierunkowane na przedsięwzięcia we wczesnej fazie, instrumenty współfinansowania aniołów biznesu, aktywa w postaci własności intelektualnej, platformy wymiany praw własności intelektualnej i obrotu nimi oraz fundusze kapitału wysokiego ryzyka ukierunkowane na przedsięwzięcia we wczesnej fazie, a także fundusze funduszy działające ponad granicami i inwestujące w fundusze kapitału wysokiego ryzyka. Mogą one obejmować wsparcie dla trzeciej fazy instrumentu MŚP z uwzględnieniem poziomu zapotrzebowania.Okno wzrostowe jest ukierunkowane na inwestycje rozwojowe i inwestycje na etapie wzrostu, w połączeniu z instrumentem kapitałowym dla inwestycji znajdujących się na etapie wzrostu w ramach programu COSME, w tym inwestycje w fundusze funduszy sektora prywatnego i publicznego działające ponad granicami i inwestujące w fundusze kapitału wysokiego ryzyka, z których większość jest ukierunkowana tematycznie, w sposób wspierający osiąganie celów strategii „Europa 2020”.";"";"H2020";"H2020-EU.2.2.";"";"";"2014-09-22 20:42:43";"664221" +"H2020-EU.2.2.1.";"de";"H2020-EU.2.2.1.";"";"";"Die Kreditfazilität für FuI: ""Unionsdarlehen und Garantien für Forschung und Innovation"" ";"Debt facility";"

Die Kreditfazilität für FuI: ""Unionsdarlehen und Garantien für Forschung und Innovation""

Ziel ist ein leichterer Zugang zur Kreditfinanzierung – in Form von Darlehen, Garantien, Rückbürgschaften und sonstigen Arten der Kredit- und Risikofinanzierung – für öffentliche und private Rechtspersonen und öffentlich-private Partnerschaften, die auf dem Gebiet der Forschung und Innovation tätig sind und die bei ihren Investitionen Risiken eingehen müssen, damit diese Früchte tragen. Schwerpunkt ist die Unterstützung von Forschung und Innovation mit einem hohen Exzellenzpotenzial.Da es zu den Zielen von Horizont 2020 gehört, dazu beizutragen, die Lücke zwischen der Forschung und Entwicklung und Innovationen zu schließen und den Markteintritt neuer und verbesserter Produkte und Dienstleistungen zu befördern, und angesichts der entscheidenden Rolle der Konzepterprobung beim Wissenstransferprozess können Mechanismen zur Finanzierung der Konzepterprobungsphasen eingeführt werden, die notwendig sind, um die Bedeutung, Relevanz und künftige Innovationskraft der Forschungsergebnisse oder Erfindungen zu bewerten, die es zu transferieren gilt.Zielgruppe: Rechtspersonen jeder Größe, die Geld leihen und zurückzahlen können, KMU mit dem Potenzial, Innovationen durchzuführen und rasch zu expandieren, Unternehmen mittlerer Größe und Großunternehmen, Hochschulen und Forschungsinstitute, Forschungs- und Innovationsinfrastrukturen, öffentlich-private Partnerschaften, öffentlich-private Partnerschaften sowie Zweckgesellschaften oder Projekte;

Die Kreditfazilität beinhaltet die folgenden beiden Komponenten:

(1)Nachfrageorientierte Förderung: Darlehen und Garantien werden in der Reihenfolge des Eingangs der Anträge gewährt, wobei Empfänger wie KMU und Unternehmen mit mittlerer Kapitalausstattung besonders unterstützt werden. Diese Komponente entspricht dem stetig und kontinuierlich zu verzeichnenden Anstieg des Volumens der nachfragegesteuerten RSFF-Kreditvergabe. Im Rahmen des KMU-Teils werden Tätigkeiten gefördert, mit denen der Zugang der KMU und anderer FuE- und/oder innovationsorientierter Unternehmen zur Finanzierung verbessert werden soll. Dies könnte – je nach Nachfrage – Unterstützung in der Phase 3 des KMU-Instruments umfassen.(2) Gezielte Förderung: Konzentration auf die Strategien und Schlüsselsektoren, die für die Bewältigung der gesellschaftlichen Herausforderungen, die Stärkung der industriellen Führungsposition und der Wettbewerbsfähigkeit, die Unterstützung eines nachhaltigen und integrativen Wachstums mit niedrigem CO2-Ausstoß und die Bereitstellung ökologischer und sonstiger öffentlicher Güter entscheidend sind. Diese Komponente unterstützt die Union dabei, die forschungs- und innovationsrelevanten Aspekte der sektorspezifischen politischen Ziele anzugehen.";"";"H2020";"H2020-EU.2.2.";"";"";"2014-09-22 20:42:40";"664219" +"H2020-EU.3.2.4.";"it";"H2020-EU.3.2.4.";"";"";"Bioindustrie sostenibili e competitive e sostegno allo sviluppo di una bioeconomia europea";"Bio-based industries and supporting bio-economy";"

Bioindustrie sostenibili e competitive e sostegno allo sviluppo di una bioeconomia europea

L'obiettivo è la promozione delle bioindustrie europee a basse emissioni di carbonio, efficienti sotto il profilo delle risorse, sostenibili e competitive. Le attività si concentrano sulla promozione della bioeconomia basata sulla conoscenza mediante la trasformazione dei processi e dei prodotti industriali convenzionali in prodotti e processi biologici efficienti sotto il profilo delle risorse e dell'energia, lo sviluppo di bioraffinerie integrate di seconda generazione o di generazioni successive, l'ottimizzazione dell'uso di biomassa derivata dalla produzione primaria, compresi residui, rifiuti biologici e sottoprodotti biologici industriali e l'apertura di nuovi mercati attraverso il sostegno alla standardizzazione e ai sistemi di certificazione, nonché alle attività di regolamentazione e dimostrative/sperimentali e altri, tenendo conto delle conseguenze della bioeconomia sull'utilizzazione del terreno e sulle modifiche di destinazione del terreno, nonché delle opinioni e delle preoccupazioni della società civile.";"";"H2020";"H2020-EU.3.2.";"";"";"2014-09-22 20:45:26";"664309" +"H2020-EU.3.2.4.";"fr";"H2020-EU.3.2.4.";"";"";"Des bio-industries durables et compétitives et une aide à la création d'une bioéconomie européenne";"Bio-based industries and supporting bio-economy";"

Des bio-industries durables et compétitives et une aide à la création d'une bioéconomie européenne

L'objectif est de promouvoir des bio-industries européennes à faibles émissions de carbone, qui soient économes en ressources, durables et compétitives. Les activités visent à promouvoir la bioéconomie basée sur la connaissance en transformant les processus et les produits industriels conventionnels en bioproduits économes en ressources et en énergie, en développant des bioraffineries intégrées de deuxième génération ou d'une génération ultérieure, en optimisant l'utilisation de la biomasse issue de la production primaire, y compris des résidus, des biodéchets et des sous-produits des bio-industries, et en assurant l'ouverture de nouveaux marchés en soutenant les systèmes de normalisation et de certification, ainsi que les activités de réglementation, de démonstration/d'essai en plein champ et autres, tout en prenant en considération les implications de la bioéconomie sur l'utilisation des sols et les changements en la matière, ainsi que les avis et préoccupations de la société civile.";"";"H2020";"H2020-EU.3.2.";"";"";"2014-09-22 20:45:26";"664309" +"H2020-EU.2.1.5.4.";"fr";"H2020-EU.2.1.5.4.";"";"";"Des modèles d'entreprise nouveaux et durables";"New sustainable business models";"

Des modèles d'entreprise nouveaux et durables

S'inspirer de concepts et de méthodologies visant à élaborer des modèles d'entreprise adaptatifs et fondés sur la connaissance dans le cadre d'approches personnalisées, y compris des approches différentes en ce qui concerne la production de ressources.";"";"H2020";"H2020-EU.2.1.5.";"";"";"2014-09-22 20:42:14";"664205" +"H2020-EU.2.1.4.1.";"fr";"H2020-EU.2.1.4.1.";"";"";"Promouvoir les biotechnologies de pointe comme futur moteur d'innovation";"Cutting-edge biotechnologies as future innovation driver";"

Promouvoir les biotechnologies de pointe comme futur moteur d'innovation

Soutien aux domaines technologiques émergents, tels que la biologie synthétique, la bioinformatique et la biologie des systèmes, qui possèdent un potentiel considérable pour ce qui est du développement de produits et de technologies innovants et d'applications totalement innovantes.";"";"H2020";"H2020-EU.2.1.4.";"";"";"2014-09-22 20:41:48";"664191" +"H2020-EU.2.1.4.3.";"es";"H2020-EU.2.1.4.3.";"";"";"Tecnologías para plataformas innovadoras y competitivas";"Innovative and competitive platform technologies";"

Tecnologías para plataformas innovadoras y competitivas

Desarrollo de tecnologías de plataforma (p. ej. genómica, metagenómica, proteómica, metabolómica, herramientas moleculares, sistemas de expresión, plataformas de fenotipificación) para potenciar el liderazgo y la ventaja competitiva en un gran número de sectores económicos de gran repercusión.";"";"H2020";"H2020-EU.2.1.4.";"";"";"2014-09-22 20:41:55";"664195" +"H2020-EU.2.1.3.7.";"es";"H2020-EU.2.1.3.7.";"";"";"Optimización del uso de materiales";"Optimisation of the use of materials";"

Optimización del uso de materiales

Investigación y desarrollo para estudiar la sustitución y alternativas a la utilización de materiales y enfoques innovadores con respecto a los modelos de negocio, así como determinación de los recursos críticos.";"";"H2020";"H2020-EU.2.1.3.";"";"";"2014-09-22 20:41:41";"664187" +"H2020-EU.2.1.3.6.";"fr";"H2020-EU.2.1.3.6.";"";"";"Métrologie, caractérisation, normalisation et contrôle de la qualité";"Metrology, characterisation, standardisation and quality control";"

Métrologie, caractérisation, normalisation et contrôle de la qualité

Promotion des technologies telles que la caractérisation, l'évaluation non destructive, l'évaluation et le suivi permanents et la modélisation prédictive des performances pour permettre des avancées et des répercussions dans les domaines de la science des matériaux et de l'ingénierie.";"";"H2020";"H2020-EU.2.1.3.";"";"";"2014-09-22 20:41:37";"664185" +"H2020-EU.2.1.3.6.";"es";"H2020-EU.2.1.3.6.";"";"";"Metrología, caracterización, normalización y control de calidad";"Metrology, characterisation, standardisation and quality control";"

Metrología, caracterización, normalización y control de calidad

Promoción de tecnologías como la caracterización, la evaluación no destructiva, la evaluación y supervisión continuas y la modelización predictiva de las prestaciones para avanzar y conseguir un impacto positivo en ciencia e ingeniería de materiales.";"";"H2020";"H2020-EU.2.1.3.";"";"";"2014-09-22 20:41:37";"664185" +"H2020-EU.2.1.3.6.";"de";"H2020-EU.2.1.3.6.";"";"";"Metrologie, Merkmalsbeschreibung, Normung und Qualitätskontrolle";"Metrology, characterisation, standardisation and quality control";"

Metrologie, Merkmalsbeschreibung, Normung und Qualitätskontrolle

Förderung von Technologien wie Merkmalsbestimmung, nichtdestruktive Bewertung, laufende Beurteilung und Überwachung und Modelle für Leistungsprognosen für den Fortschritt und Folgewirkungen in der Werkstoffwissenschaft und -technik.";"";"H2020";"H2020-EU.2.1.3.";"";"";"2014-09-22 20:41:37";"664185" +"H2020-EU.2.1.3.5.";"de";"H2020-EU.2.1.3.5.";"";"";"Werkstoffe für kreative Branchen, einschließlich Kulturerbe";"Materials for creative industries, including heritage";"

Werkstoffe für kreative Branchen, einschließlich Kulturerbe

Anwendung von Design und Entwicklung konvergierender Technologien zur Erschließung neuer Geschäftsmöglichkeiten, einschließlich Erhalt und Restaurierung von Material von historischem oder kulturellem Wert, sowie neuartiger Werkstoffe.";"";"H2020";"H2020-EU.2.1.3.";"";"";"2014-09-22 20:41:34";"664183" +"H2020-EU.2.1.3.5.";"es";"H2020-EU.2.1.3.5.";"";"";"Materiales para las industrias creativas, inclusive el patrimonio";"Materials for creative industries, including heritage";"

Materiales para las industrias creativas, inclusive el patrimonio

Aplicación del diseño y el desarrollo de tecnologías convergentes para crear nuevas oportunidades empresariales, incluida la preservación y restauración de materiales de valor histórico o cultural, así como de materiales nuevos.";"";"H2020";"H2020-EU.2.1.3.";"";"";"2014-09-22 20:41:34";"664183" +"H2020-EU.2.1.3.4.";"pl";"H2020-EU.2.1.3.4.";"";"";"Materiały dla zrównoważonego, zasobooszczędnego i niskoemisyjnego przemysłu";"Materials for a resource-efficient and low-emission industry";"

Materiały dla zrównoważonego, zasobooszczędnego i niskoemisyjnego przemysłu

Rozwijanie nowych produktów i zastosowań, modeli biznesowych oraz odpowiedzialnych zachowań konsumentów ograniczających zapotrzebowanie na energię i ułatwiających produkcję niskoemisyjną.";"";"H2020";"H2020-EU.2.1.3.";"";"";"2014-09-22 20:41:30";"664181" +"H2020-EU.2.1.3.4.";"es";"H2020-EU.2.1.3.4.";"";"";"Materiales para una industria sostenible, eficiente en recursos y de bajas emisiones";"Materials for a resource-efficient and low-emission industry";"

Materiales para una industria sostenible, eficiente en recursos y de bajas emisiones

Desarrollo de nuevos productos y aplicaciones, modelos de negocio y comportamiento responsable de los consumidores que reduzca la demanda de energía, y facilitación de la producción con baja emisión de carbono.";"";"H2020";"H2020-EU.2.1.3.";"";"";"2014-09-22 20:41:30";"664181" +"H2020-EU.3.4.3.";"es";"H2020-EU.3.4.3.";"";"";"Liderazgo mundial para la industria europea del transporte";"Global leadership for the European transport industry";"

Liderazgo mundial para la industria europea del transporte

El objetivo es reforzar la competitividad y el rendimiento de las industrias europeas de fabricación para el transporte y servicios conexos (incluidos los procesos logísticos, el mantenimiento, reparación, modernización y reciclado) al tiempo que se conservar ámbitos de liderazgo europeo (como la aeronáutica).El propósito de las actividades será impulsar la próxima generación de medios de transporte aéreos, fluviales y terrestres innovadores, asegurar una fabricación sostenible de sistemas y equipos innovadores y preparar el terreno para los futuros medios de transporte, trabajando sobre nuevas tecnologías, conceptos y diseños, sistemas inteligentes de control y normas interoperables, procesos de producción eficientes, servicios y procedimientos de certificación innovadores, periodos de desarrollo más breves y costes del ciclo de vida inferiores sin poner en peligro la seguridad operativa.";"";"H2020";"H2020-EU.3.4.";"";"";"2014-09-22 20:47:39";"664377" +"H2020-EU.2.1.4.2.";"de";"H2020-EU.2.1.4.2.";"";"";"Biotechnologische Industrieprodukte und -prozesse";"Bio-technology based industrial products and processes";"

Biotechnologische Industrieprodukte und -prozesse

Entwicklung industrieller Biotechnologie und Konzeption von Bioprozessen im industriellen Maßstab für wettbewerbsfähige Industrieprodukte und nachhaltige Prozesse (z. B. in den Bereichen Chemie, Gesundheit, Mineralgewinnung, Energie, Zellstoff und Papier, Fasererzeugnisse und Holz, Textil, Stärke und Lebensmittelverarbeitung) und ihre Umwelt- und Gesundheitsdimension unter Einschluss von Clean-up-Verfahren.";"";"H2020";"H2020-EU.2.1.4.";"";"";"2014-09-22 20:41:52";"664193" +"H2020-EU.2.1.3.3.";"pl";"H2020-EU.2.1.3.3.";"";"";"Gospodarowanie składnikami materiałów";"Management of materials components";"

Gospodarowanie składnikami materiałów

Działania badawczo-rozwojowe w zakresie nowych i innowacyjnych technik produkcji materiałów, oraz ich komponentów i systemów.";"";"H2020";"H2020-EU.2.1.3.";"";"";"2014-09-22 20:41:26";"664179" +"H2020-EU.2.1.3.2.";"de";"H2020-EU.2.1.3.2.";"";"";"Entwicklung und Transformation von Werkstoffen";"Materials development and transformation";"

Entwicklung und Transformation von Werkstoffen

Forschung und Entwicklung im Hinblick auf künftige Produkte, die im Industriemaßstab effizient, sicher und nachhaltig konzipiert und hergestellt werden können, wobei das Endziel in einem ""abfallfreien"" Werkstoffmanagement in Europa besteht.";"";"H2020";"H2020-EU.2.1.3.";"";"";"2014-09-22 20:41:23";"664177" +"H2020-EU.2.1.3.4.";"de";"H2020-EU.2.1.3.4.";"";"";"Werkstoffe für eine nachhaltige und ressourcenschonende Industrie mit geringen Emissionen";"Materials for a resource-efficient and low-emission industry";"

Werkstoffe für eine nachhaltige und ressourcenschonende Industrie mit geringen Emissionen

Entwicklung neuer Produkte, Anwendungen und Geschäftsmodelle sowie Beitrag zu einem verantwortungsbewussten energiesparenden Verbraucherverhalten sowie zu einer Produktion mit niedrigem CO2-Ausstoß.";"";"H2020";"H2020-EU.2.1.3.";"";"";"2014-09-22 20:41:30";"664181" +"H2020-EU.2.1.2.4.";"pl";"H2020-EU.2.1.2.4.";"";"";"Efektywna i zrównoważona synteza i produkcja nanomateriałów, części i systemów";"Synthesis and manufacturing of nanomaterials, components and systems";"

Efektywna i zrównoważona synteza i produkcja nanomateriałów, części i systemów

Ukierunkowanie na nowe działania, inteligentną integrację nowych i istniejących procesów, w tym konwergencję technologii, a także zwiększenie skali z myślą o wysoce precyzyjnym wielkoskalowym wytwarzaniu produktów i elastycznych wielofunkcyjnych zakładach, zapewniające skuteczne przekształcenie wiedzy w innowacje przemysłowe";"";"H2020";"H2020-EU.2.1.2.";"";"";"2014-09-22 20:41:08";"664169" +"H2020-EU.2.1.2.4.";"de";"H2020-EU.2.1.2.4.";"";"";"Effiziente und nachhaltige Synthese und Herstellung von Nanowerkstoffen, Komponenten und Systemen";"Synthesis and manufacturing of nanomaterials, components and systems";"

Effiziente und nachhaltige Synthese und Herstellung von Nanowerkstoffen, Komponenten und Systemen

Schwerpunkt sind neue Abläufe, die intelligente Integration neuer und vorhandener Prozesse – einschließlich der Konvergenz verschiedener Technologien – sowie die Maßstabsvergrößerung im Hinblick auf die hochpräzise Großfertigung von Produkten und flexiblen Mehrzweckanlagen, so dass Erkenntnisse effizient in industrielle Innovationen einfließen.";"";"H2020";"H2020-EU.2.1.2.";"";"";"2014-09-22 20:41:08";"664169" +"H2020-EU.2.1.3.1.";"de";"H2020-EU.2.1.3.1.";"";"";"Übergreifende und grundlegende Werkstofftec";"Cross-cutting and enabling materials technologies";"

Übergreifende und grundlegende Werkstofftechnologien

Forschung zu individuell entwickelten Werkstoffen sowie zu funktionalen und multifunktionalen Werkstoffen mit höherem Know-how-Gehalt, neuen Funktionsmerkmalen und verbesserter Leistung und zu Strukturwerkstoffen für Innovationen in allen Industriesektoren einschließlich der Kreativbranchen.";"";"H2020";"H2020-EU.2.1.3.";"";"";"2014-09-22 20:41:19";"664175" +"H2020-EU.2.1.3.1.";"es";"H2020-EU.2.1.3.1.";"";"";"Tecnologías de materiales transversales y de capacitación";"Cross-cutting and enabling materials technologies";"

Tecnologías de materiales transversales y de capacitación

Investigación en torno a materiales diseñados, materiales funcionales, materiales multifuncionales que impliquen un mayor contenido de conocimiento, nuevas funcionalidades y mayores rendimientos, y materiales estructurales, con vistas a la innovación en todos los sectores industriales, inclusive los sectores creativos.";"";"H2020";"H2020-EU.2.1.3.";"";"";"2014-09-22 20:41:19";"664175" +"H2020-EU.2.1.2.5.";"de";"H2020-EU.2.1.2.5.";"";"";"Entwicklung und Normung kapazitätssteigernder Techniken, Messverfahren und Geräte";"Capacity-enhancing techniques, measuring methods and equipment";"

Entwicklung und Normung kapazitätssteigernder Techniken, Messverfahren und Geräte

Schwerpunkt sind die Grundlagentechnologien für die Entwicklung und Markteinführung sicherer komplexer Nanowerkstoffe und Nanosysteme.";"";"H2020";"H2020-EU.2.1.2.";"";"";"2014-09-22 20:41:12";"664171" +"H2020-EU.2.1.2.1.";"pl";"H2020-EU.2.1.2.1.";"";"";"Rozwój nowej generacji nanomateriałów, nanourządzeń i nanosystemów";"Next generation nanomaterials, nanodevices and nanosystems";"

Rozwój nowej generacji nanomateriałów, nanourządzeń i nanosystemów

Dążenie do opracowania fundamentalnie nowych produktów, umożliwiających wprowadzenie zrównoważonych rozwiązań w szerokim wachlarzu sektorów.";"";"H2020";"H2020-EU.2.1.2.";"";"";"2014-09-22 20:40:58";"664163" +"H2020-EU.2.1.2.1.";"it";"H2020-EU.2.1.2.1.";"";"";"Sviluppo di nanomateriali, nanodispositivi e nanosistemi della prossima generazione";"Next generation nanomaterials, nanodevices and nanosystems";"

Sviluppo di nanomateriali, nanodispositivi e nanosistemi della prossima generazione

Mirati a creare prodotti del tutto nuovi che consentano soluzioni sostenibili in un'ampia gamma di settori.";"";"H2020";"H2020-EU.2.1.2.";"";"";"2014-09-22 20:40:58";"664163" +"H2020-EU.2.";"fr";"H2020-EU.2.";"";"";"PRIORITÉ «Primauté industrielle»";"Industrial Leadership";"

PRIORITÉ «Primauté industrielle»

Cette section a pour objet d'accélérer le développement des technologies et des innovations qui sous-tendront les entreprises de demain et d'aider les PME européennes innovantes à devenir des acteurs majeurs sur le marché mondial. Elle se compose de trois objectifs spécifiques:a)«La primauté dans le domaine des technologies génériques et industrielles"" soutient spécifiquement les activités de recherche, de développement et de démonstration ainsi que, le cas échéant, de normalisation et de certification, dans le domaine des TIC, des nanotechnologies, des matériaux avancés, des biotechnologies, des systèmes de fabrication et de transformation avancés et de l'espace, en mettant l'accent sur les interactions et la convergence au sein des différents secteurs technologiques et entre ces derniers, et sur leurs relations avec les défis de société. Les besoins de l'utilisateur sont dûment pris en compte dans tous ces domaines; H2020-EU.2.1. (http://cordis.europa.eu/programme/rcn/664145_en.html)b)«L'accès au financement à risque» vise à remédier aux difficultés d'accès au financement par l'emprunt et les capitaux propres rencontrées par les entreprises et les projets axés sur la R&D et sur l'innovation à tous les stades de leur développement. Associé à l'instrument de capitaux propres du programme pour la compétitivité des entreprises et les petites et moyennes entreprises (COSME) (2014-2020), il soutient le développement du capital-risque à l'échelle de l'Union; H2020-EU.2.2. (http://cordis.europa.eu/programme/rcn/664217_en.html)c)«L'innovation dans les PME» fournit une aide adaptée aux PME afin d'encourager l'innovation sous toutes ses formes dans les PME, en ciblant celles qui disposent du potentiel pour croître et s'étendre au niveau international, au sein du marché unique et au-delà. H2020-EU.2.3. (http://cordis.europa.eu/programme/rcn/664223_en.html)Les activités sont organisées en fonction des entreprises. Les budgets des objectifs spécifiques «Accès au financement à risque» et «Innovation dans les PME» suivront une logique ascendante axée sur la demande. Ces budgets sont complétés par l'utilisation d'instruments financiers. Un instrument dédié aux PME est mis en œuvre essentiellement selon une approche ascendante, adaptée aux besoins des PME, en prenant en compte les objectifs spécifiques de la priorité «Défis de société» et l'objectif spécifique «Primauté dans le domaine des technologies génériques et industrielles».Horizon 2020 suivra une approche intégrée concernant la participation des PME, en prenant en compte, entre autres, leurs besoins en matière de transfert de connaissances et de technologies, qui devrait conduire à ce qu'au moins 20 % des budgets totaux combinés de tous les objectifs spécifiques de la priorité «Défis de société» et de l'objectif spécifique «Primauté dans le domaine des technologies génériques et industrielles» soient consacrés aux PME.L'objectif spécifique «Primauté dans le domaine des technologies génériques et industrielles» suit une approche axée sur les technologies, afin d'assurer le développement de technologies génériques pouvant être utilisées dans une multitude de secteurs, d'industries et de services. Les applications de ces technologies qui permettent de relever les défis de société sont soutenues en association avec la priorité «Défis de société».";"";"H2020";"H2020-EC";"";"";"2014-09-23 20:20:01";"664143" +"H2020-EU.1.4.3.";"es";"H2020-EU.1.4.3.";"";"";"Reforzar la política europea de infraestructuras de investigación y la cooperación internacional";"Research infrastructure policy and international cooperation";"

Reforzar la política europea de infraestructuras de investigación y la cooperación internacional

El objetivo será prestar apoyo a las asociaciones entre los responsables políticos pertinentes y los organismos de financiación, inventariar y hacer un seguimiento de las herramientas para la toma de decisiones, y también actividades de cooperación internacional. Las infraestructuras europeas de investigación podrán recibir apoyo para sus actividades de relaciones internacionales.Se perseguirán los objetivos expuestos en las líneas de actividad recogidas en las letras b) y c) mediante acciones bien determinadas, y siempre que sea pertinente mediante las acciones emprendidas a tenor de lo previsto en la línea de actividad recogida en la letra a).";"";"H2020";"H2020-EU.1.4.";"";"";"2014-09-22 20:40:11";"664137" +"H2020-EU.2.";"de";"H2020-EU.2.";"";"";"SCHWERPUNKT ""Führende Rolle der Industrie""";"Industrial Leadership";"

SCHWERPUNKT ""Führende Rolle der Industrie""

Ziel dieses Teils ist die beschleunigte Entwicklung der Technologien und Innovationen, die die Grundlagen für die Unternehmen von morgen bilden, und die Unterstützung innovativer europäischer KMU bei ihrer Expansion zu weltweit führenden Unternehmen. Dieser Teil umfasst drei Einzelziele:a)Das Einzelziel ""Führende Rolle bei grundlegenden und industriellen Technologien"" beinhaltet eine eigene Unterstützung für Forschung, Entwicklung und Demonstration sowie gegebenenfalls Normung und Zertifizierung in den Bereichen Informations- und Kommunikationstechnologie (IKT), Nanotechnologie, innovative Werkstoffe, Biotechnologie, fortgeschrittene Fertigung und Verarbeitung und Raumfahrt. Besondere Aufmerksamkeit gilt den Wechselbeziehungen und der Konvergenz zwischen den verschiedenen Technologien und deren Anpassungsfähigkeit in Bezug auf gesellschaftliche Herausforderungen. In allen diesen Bereichen soll die Bedürfnisse der Nutzer berücksichtigt werden. H2020-EU.2.1. (http://cordis.europa.eu/programme/rcn/664145_en.html)b)Mit dem Einzelziel ""Zugang zur Risikofinanzierung"" sollen Defizite bei der Bereitstellung der Kredit- und Beteiligungsfinanzierung für Forschung und Entwicklung und innovationsorientierte Unternehmen und Projekte in allen Entwicklungsphasen behoben werden. Zusammen mit dem Instrument für die Beteiligungsfinanzierung des Programms für Wettbewerbsfähigkeit von Unternehmen und für kleine und mittlere Unternehmen wird die Entwicklung von Risikokapital auf Unionsebene unterstützt. H2020-EU.2.2. (http://cordis.europa.eu/programme/rcn/664217_en.html)c)Das Einzelziel ""Innovation in KMU"" bietet auf KMU zugeschnittene Unterstützung zur Stimulierung der unterschiedlichsten Innovationsformen und richtet sich an solche KMU, die das Potenzial haben, zu expandieren und auf dem gesamten Binnenmarkt und darüber hinaus international tätig zu werden. H2020-EU.2.3. (http://cordis.europa.eu/programme/rcn/664223_en.html)Die Agenda der Tätigkeiten wird sich an den Bedürfnissen der Unternehmen orientieren. Die Haushaltsmittel für die Einzelziele ""Zugang zur Risikofinanzierung"" und ""Innovation in KMU"" folgen jeweils einer nachfragegesteuerten ""Bottom-up""-Logik. Ergänzend zu diesen Haushaltsmitteln sind Finanzierungsinstrumente vorgesehen. Ein KMU-spezifisches Instrument wird überwiegend nach einem auf die Bedürfnisse der KMU zugeschnittenen ""Bottom-up""-Ansatz angewandt; dabei wird den Einzelzielen des Schwerpunkts ""Gesellschaftliche Herausforderungen"" und dem Einzelziel ""Führende Rolle bei grundlegenden und industriellen Technologien"" Rechnung getragen.Horizont 2020 verfolgt einen integrierten Ansatz für die Beteiligung von KMU, unter Berücksichtigung unter anderem ihrer Bedürfnisse in Bezug auf Wissens- und Technologietransfer, was dazu führen soll, dass mindestens 20 % sämtlicher Haushaltsmittel für alle Einzelziele des Schwerpunkts ""Gesellschaftliche Herausforderungen"" und das Einzelziel ""Führende Rolle bei grundlegenden und industriellen Technologien"" zusammengenommen für KMU bereitgestellt werden.Für das Einzelziel ""Führende Rolle bei grundlegenden und industriellen Technologien"" wird ein von den Technologien ausgehendes Konzept verfolgt, damit Grundlagentechnologien entwickelt werden, die für vielfältige Bereiche, Industriesektoren und Dienstleistungen eingesetzt werden können. Anwendungen dieser Technologien zur Bewältigung gesellschaftlicher Herausforderungen werden zusammen mit dem Schwerpunkt ""Gesellschaftliche Herausforderungen"" unterstützt.";"";"H2020";"H2020-EC";"";"";"2014-09-23 20:20:01";"664143" +"H2020-EU.3.4.1.";"es";"H2020-EU.3.4.1.";"";"";"Un transporte eficiente en el uso de los recursos y que respeta el medio ambiente";"Resource efficient transport that respects the environment";"

Un transporte eficiente en el uso de los recursos y que respeta el medio ambiente

El objetivo es minimizar el impacto del sistema de transportes en el clima y el medio ambiente (incluidos el ruido y la contaminación atmosférica) mejorando su calidad y eficiencia en el uso de los recursos naturales y del combustible y reduciendo las emisiones de gases con efecto invernadero y su dependencia de los combustibles fósiles.El propósito de las actividades será reducir el consumo de recursos, particularmente de combustibles fósiles, y las emisiones de gases de invernadero y los niveles de ruido, así como mejorar la eficiencia del transporte y acelerar el desarrollo, fabricación y despliegue de una nueva generación de automóviles limpios (eléctricos, de hidrógeno y otros de emisiones bajas o nulas), incluido mediante avances importantes y optimización de los motores, el almacenamiento de energía y la infraestructura; explorar y explotar el potencial de los combustibles alternativos y sostenibles y los sistemas de propulsión y operativos innovadores y más eficientes, incluida la infraestructura del combustible y de la carga; optimizar la planificación y la utilización de las infraestructuras mediante sistemas de transporte inteligentes, logística y equipos inteligentes; e incrementar el uso de la gestión de la demanda y el transporte público y no motorizado y las cadenas de movilidad intermodales, en particular en las zonas urbanas. Se deben fomentar las innovaciones destinadas a lograr emisiones bajas o nulas en todos los modos de transporte.";"";"H2020";"H2020-EU.3.4.";"";"";"2014-09-22 20:47:04";"664359" +"H2020-EU.3.4.1.";"de";"H2020-EU.3.4.1.";"";"";"Ressourcenschonender umweltfreundlicher Verkehr";"Resource efficient transport that respects the environment";"

Ressourcenschonender umweltfreundlicher Verkehr

Ziel ist die Verringerung der Auswirkungen der Verkehrssysteme auf Klima und Umwelt (einschließlich Lärm und Luftverschmutzung) durch Qualitäts- und Effizienzsteigerungen bei der Nutzung natürlicher Ressourcen und Kraftstoffe und durch die Verringerung der Treibhausgasemissionen und der Abhängigkeit von fossilen Kraftstoffen.Schwerpunkt der Tätigkeiten sind die Verringerung des Ressourcenverbrauchs (insbesondere des Verbrauchs fossiler Kraftstoffe), der Treibhausgasemissionen und des Geräuschpegels sowie die Verbesserung der Verkehrs- und Fahrzeugeffizienz, die Beschleunigung von Entwicklung, Herstellung und Einsatz einer neuen Generation von sauberen (elektrischen, wasserstoffbetriebenen oder sonstigen emissionsarmen oder -freien) Fahrzeugen sowie Durchbrüche und Optimierungsbemühungen bei Motoren, Energiespeicherung und Infrastruktur, die Erforschung und Nutzung des Potenzials alternativer und nachhaltiger Kraftstoffe sowie innovativer und effizienterer Antriebs- und Betriebssysteme, einschließlich der Infrastruktur für Kraftstoffabgabe und Aufladung, die optimierte Planung und Nutzung der Infrastrukturen mit Hilfe intelligenter Verkehrssysteme, Logistik und Ausrüstungen sowie – insbesondere in Stadtgebieten – die verstärkte Nutzung von Nachfragemanagement sowie öffentlichem und nichtmotorisiertem Verkehr und intermodalen Mobilitätsketten Innovationen, die auf eine Reduzierung von Emissionen oder vollständige Emissionsfreiheit abzielen, werden in sämtlichen Verkehrsbereichen gefördert.";"";"H2020";"H2020-EU.3.4.";"";"";"2014-09-22 20:47:04";"664359" +"H2020-EU.1.4.2.";"it";"H2020-EU.1.4.2.";"";"";"Promuovere il potenziale di innovazione e le risorse umane delle infrastrutture di ricerca";"Research infrastructures and their human resources";"

Promuovere il potenziale di innovazione e le risorse umane delle infrastrutture di ricerca

L'obiettivo è incoraggiare le infrastrutture di ricerca ad agire in veste di pioniere o sviluppatore nell'uso delle tecnologie di punta, promuovere partenariati R&S con l'industria, agevolare l'uso industriale delle infrastrutture di ricerca e stimolare la creazione di poli di innovazione. Tale attività mira inoltre a sostenere la formazione e/o gli scambi del personale che dirige e gestisce le infrastrutture di ricerca.";"";"H2020";"H2020-EU.1.4.";"";"";"2014-09-22 20:40:01";"664131" +"H2020-EU.1.4.2.";"fr";"H2020-EU.1.4.2.";"";"";"Promouvoir le potentiel d'innovation et les ressources humaines des infrastructures de recherche";"Research infrastructures and their human resources";"

Promouvoir le potentiel d'innovation et les ressources humaines des infrastructures de recherche

Les objectifs consistent à inciter les infrastructures de recherche à jouer un rôle de pionnier dans l'adoption ou le développement des technologies de pointe, à encourager les partenariats avec les entreprises en matière de recherche et de développement, à faciliter l'utilisation des infrastructures de recherche à des fins industrielles et à stimuler la création de pôles d'innovation. Il s'agit également de soutenir la formation et/ou les échanges de personnes chargées de la gestion et de l'exploitation des infrastructures de recherche.";"";"H2020";"H2020-EU.1.4.";"";"";"2014-09-22 20:40:01";"664131" +"H2020-EU.1.4.1.";"fr";"H2020-EU.1.4.1.";"";"";"Développer les infrastructures de recherche européennes pour 2020 et au-delà";"Research infrastructures for 2020 and beyond";"

Développer les infrastructures de recherche européennes pour 2020 et au-delà

L'objectif consiste à faciliter et à soutenir les actions liées aux éléments suivants: 1) la préparation, la mise en œuvre et l'exploitation des infrastructures de recherche recensées par l'ESFRI et des autres infrastructures de recherche d'envergure mondiale, et notamment le développement d'infrastructures partenaires régionales, lorsque l'intervention de l'Union apporte une forte valeur ajoutée; 2) l'intégration des infrastructures de recherche nationales et régionales d'intérêt européen et l'accès transnational à ces infrastructures, de manière à ce que les scientifiques européens puissent les utiliser indépendamment de leur localisation pour effectuer des recherches de haut niveau; 3) le développement, le déploiement et l'exploitation des infrastructures en ligne pour garantir une capacité de premier plan au niveau mondial en matière de mise en réseau, d'informatique et de données scientifiques.";"";"H2020";"H2020-EU.1.4.";"";"";"2014-09-22 20:39:46";"664123" +"H2020-EU.1.";"fr";"H2020-EU.1.";"";"";"PRIORITÉ «Excellence scientifique»";"Excellent Science";"

PRIORITÉ «Excellence scientifique»

Cette section vise à renforcer et à développer l'excellence de la base scientifique de l'Union et à consolider l'EER afin d'accroître la compétitivité du système européen de recherche et d'innovation sur la scène mondiale. Elle se compose de quatre objectifs spécifiques:a)le Conseil européen de la recherche (CER) offre, sur la base d'une concurrence à l'échelle de l'Union, un financement attractif et flexible qui doit permettre aux chercheurs créatifs et talentueux et à leur équipe d'explorer les voies les plus prometteuses à la frontière de la science; H2020-EU.1.1. (http://cordis.europa.eu/programme/rcn/664099_en.html)b)les «Technologies futures et émergentes» (FET) soutiennent la recherche collaborative de façon à accroître la capacité de l'Europe à développer des innovations de pointe susceptibles de bouleverser les théories scientifiques traditionnelles. Elles favorisent la collaboration scientifique interdisciplinaire concernant les idées révolutionnaires à haut risque et elles accélèrent le développement des secteurs scientifiques et technologiques émergents les plus prometteurs ainsi que la structuration des communautés scientifiques correspondantes à l'échelle de l'Union; H2020-EU.1.2. (http://cordis.europa.eu/programme/rcn/664101_en.html)c)les «actions Marie Skłodowska-Curie» offrent une formation d'excellence et innovante dans le domaine de la recherche, ainsi que des possibilités de carrière attractives et des occasions de procéder à des échanges de connaissances, en encourageant la mobilité transfrontalière et intersectorielle des chercheurs de façon à les préparer au mieux à relever les défis de société actuels et futurs; H2020-EU.1.3. (http://cordis.europa.eu/programme/rcn/664109_en.html)d)les «Infrastructures de recherche» consistent à développer et à soutenir les infrastructures européennes de recherche d'excellence et à les aider à contribuer à l'EER en promouvant leur potentiel d'innovation, en attirant des chercheurs de niveau mondial et en formant le capital humain, ainsi qu'à compléter ces activités par la politique de l'Union et la coopération internationale en la matière. H2020-EU.1.4. (http://cordis.europa.eu/programme/rcn/664121_en.html)La haute valeur ajoutée européenne de chacun de ces objectifs a été démontrée. Ensemble, ceux-ci forment un éventail d'activités puissant et équilibré qui, associé aux actions nationales, régionales et locales, couvre la totalité des besoins de l'Europe dans le domaine de la science et des technologies de pointe. Les regrouper en un programme unique leur assurera un fonctionnement plus cohérent, plus rationnel, plus simple et plus ciblé, tout en préservant la continuité indispensable à leur efficacité.Ces activités sont intrinsèquement tournées vers l'avenir; elles assurent le développement des compétences sur le long terme, elles se concentrent sur la prochaine génération de connaissances scientifiques et technologiques, de chercheurs et d'innovations, et elles soutiennent les talents émergents de toute l'Union et des pays associés, ainsi que du monde entier. Elles sont par nature axées sur la science et reposent pour une large part sur des modes de financement ascendants fondés sur les initiatives des chercheurs eux-mêmes. La communauté scientifique européenne aura, de ce fait, un rôle important à jouer dans l'orientation des activités de recherche au titre d'Horizon 2020.";"";"H2020";"H2020-EC";"";"";"2014-09-23 20:18:04";"664091" +"H2020-EU.7.";"it";"H2020-EU.7.";"";"";"L'ISTITUTO EUROPEO DI INNOVAZIONE E TECNOLOGIA (EIT)";"European Institute of Innovation and Technology (EIT)";"

L'ISTITUTO EUROPEO DI INNOVAZIONE E TECNOLOGIA (EIT)

L'EIT svolge un ruolo di primo piano poiché riunisce ricerca, innovazione e istruzione superiore d'eccellenza, integrando in tal modo il triangolo della conoscenza. L'EIT si avvale principalmente delle CCI. Esso garantisce inoltre la condivisione delle esperienze tra le CCI e al di là di esse grazie a una diffusione mirata e a misure di scambio delle conoscenze, promuovendo in tal modo una più rapida diffusione dei modelli innovativi nell'Unione.

Obiettivo specifico

L'obiettivo specifico è integrare il triangolo della conoscenza costituito da istruzione superiore, ricerca e innovazione, e in tal modo rafforzare la capacità di innovazione dell'Unione e affrontare le sfide per la società.L'Europa si trova ad affrontare una serie di debolezze strutturali in materia di capacità di innovazione e di capacità di fornitura di nuovi servizi, prodotti e processi, il che è di ostacolo a una crescita economica sostenibile e alla creazione di posti di lavoro. Fra le principali questioni vi sono i risultati relativamente scarsi nella capacità dell'Europa ad attrarre e mantenere i talenti, la sottoutilizzazione delle capacità di ricerca esistenti in termini di creazione di valore economico o sociale, la scarsa commercializzazione dei risultati della ricerca, bassi livelli di attività e mentalità imprenditoriale, la scarsa mobilitazione degli investimenti privati in R&S, una scala delle risorse, comprese le risorse umane, nei poli d'eccellenza insufficiente per competere su scala mondiale e un eccessivo numero di ostacoli alla collaborazione nell'ambito del triangolo della conoscenza costituito da istruzione superiore, ricerca e innovazione a livello europeo.

Motivazione e valore aggiunto dell'Unione

Per competere su scala internazionale, l'Europa deve superare le debolezze strutturali di cui sopra. Gli elementi identificati in precedenza sono comuni a tutti gli Stati membri e compromettono la capacità di innovazione dell'Unione nel suo insieme.L'EIT affronterà questi problemi promuovendo cambiamenti strutturali nel panorama europeo dell'innovazione, attraverso uno stimolo all'integrazione della ricerca, dell'innovazione e dell'istruzione superiore ai massimi livelli, in particolare attraverso le sue comunità della conoscenza e dell'innovazione (CCI), in modo da creare nuovi ambienti propizi all'innovazione, promuovendo e sostenendo una nuova generazione di imprenditori e incentivando la creazione di spin-off e start up innovative. In tal modo, l'EIT contribuirà pienamente al conseguimento degli obiettivi della strategia Europa 2020, in particolare alle iniziative faro ""Unione dell'innovazione"" e ""Youth on the Move"".Inoltre l'EIT e le CCI dovrebbero creare sinergie e interazioni tra le priorità di Orizzonte 2020 e con altre iniziative pertinenti. In particolare, l'EIT contribuirà, tramite le CCI, al conseguimento degli obiettivi specifici della priorità ""Sfide per la società"" e dell'obiettivo specifico ""Leadership nelle tecnologie abilitanti e industriali"".

Integrare l'istruzione e l'imprenditorialità con la ricerca e l'innovazione

La caratteristica specifica dell'EIT è integrare istruzione superiore e imprenditorialità con la ricerca e l'innovazione, quali collegamenti in un'unica catena dell'innovazione in tutta l'Unione e oltre, il che dovrebbe generare, tra l'altro, un aumento dei servizi, dei prodotti e dei processi innovativi immessi sul mercato.

Logica imprenditoriale e approccio basato sui risultati

L'EIT, per mezzo delle CCI, opera in linea con la logica imprenditoriale e mantiene un approccio basato sui risultati. Una forte leadership rappresenta un prerequisito: ciascuna CCI è guidata da un amministratore delegato. I partner delle CCI sono rappresentati da persone giuridiche individuali per consentire un processo decisionale più snello. Le CCI sono tenute a produrre piani annuali di gestione chiaramente definiti, che illustrino una strategia pluriennale e comprensivi di un ambizioso portafoglio delle attività che spaziano dall'istruzione alla creazione di imprese, con obiettivi ed elementi da fornire chiari, miranti all'impatto sia sociale sia di mercato. Le attuali norme in materia di partecipazione, valutazione e controllo delle CCI consentono decisioni rapide di tipo commerciale. Le imprese e gli imprenditori dovrebbero avere un ruolo forte nel guidare le attività delle CCI e le CCI dovrebbero essere in grado di mobilitare investimenti e un impegno a lungo termine da parte del settore delle imprese.

Superare la frammentazione con l'aiuto di partenariati integrati di lungo termine

Le CCI dell'EIT sono iniziative fortemente integrate, che riuniscono in maniera aperta, responsabile e trasparente partner provenienti dall'industria, comprese le PMI, dall'istruzione superiore e dagli istituti di ricerca e tecnologici rinomati per la loro eccellenza. Le CCI consentono a partner provenienti da tutta l'Unione e oltre di unirsi in nuove configurazioni transfrontaliere, ottimizzare le risorse esistenti e spianare la via a nuove opportunità commerciali attraverso nuove catene di valore in grado di far fronte a sfide ad alto rischio su più vasta scala. Le CCI sono aperte alla partecipazioni di nuovi membri portatori di valore aggiunto al partenariato, tra cui le PMI.

Sviluppare il principale punto di forza dell'innovazione europea: le persone di talento

Il talento è una componente essenziale dell'innovazione. L'EIT favorisce le persone e le loro interazioni, ponendo studenti, ricercatori e imprenditori al centro del suo modello di innovazione. L'EIT creerà una cultura imprenditoriale e creativa e un'istruzione interdisciplinare per gli individui di talento, per mezzo di master e dottorati propri, destinati a diventare un marchio di eccellenza riconosciuto a livello internazionale. In tal modo, l'EIT promuove fortemente la mobilità e la formazione all'interno del triangolo della conoscenza.

Le grandi linee delle attività

L'EIT opera principalmente per mezzo delle CCI, in particolare nei settori che offrono un reale potenziale di innovazione. Mentre le CCI godono di una sostanziale autonomia generale nel definire le loro strategie e attività, vi è una serie di elementi innovativi comuni a tutte le CCI tra cui si cercano coordinamento e sinergie. L'EIT rafforzerà inoltre il suo impatto tramite la diffusione di buone prassi sulle modalità per integrare il triangolo della conoscenza e lo sviluppo dell'imprenditorialità, integrando nuovi partner pertinenti, qualora possano fornire valore aggiunto, e promuovendo attivamente una nuova cultura della condivisione delle conoscenze.

(a) Trasferimento e applicazione delle attività di istruzione superiore, ricerca e innovazione per la creazione di nuove imprese

L'EIT mira a creare un ambiente propizio allo sviluppo del potenziale innovativo delle persone e sfruttarne le idee, indipendentemente dalla loro posizione nella catena dell'innovazione. Pertanto l'EIT contribuirà altresì ad affrontare il ""paradosso europeo"", per cui l'eccellente ricerca esistente è ben lungi dall'essere sfruttata appieno. In tal modo, l'EIT intende portare le idee verso il mercato. Principalmente attraverso le CCI e l'accento sulla promozione dello spirito imprenditoriale si creeranno nuove opportunità commerciali in forma di operazioni di start-up e spin-off ma anche all'interno dell'industria esistente. Si porrà l'accento su tutte le forme di innovazione, compresa l'innovazione tecnologica, sociale e non tecnologica.

(b) Ricerca di punta e incentrata sull'innovazione in settori fondamentali per l'economia e la società

La strategia e le attività dell'EIT sono guidate da un'attenzione ai settori che offrono un autentico potenziale innovativo e sono chiaramente pertinenti alle sfide per la società affrontate nel quadro di Orizzonte 2020. Affrontando le sfide fondamentali per la società in modo globale, l'EIT promuoverà approcci interdisciplinari e multidisciplinari e aiuterà a concentrare gli sforzi di ricerca dei partner delle CCI.

(c) Sviluppo di individui di talento, competenti e dotati di spirito imprenditoriale con l'aiuto dell'istruzione e della formazione

L'EIT integra pienamente l'istruzione e la formazione in tutte le fasi della carriera e sostiene e facilita lo sviluppo di curricula nuovi e innovativi, che rispecchino la necessità di nuovi profili derivati dalle complesse sfide per la società ed economiche. A tal fine, l'EIT svolgerà un ruolo chiave nel promuovere nuovi titoli e diplomi congiunti o multipli negli Stati membri, nel rispetto del principio di sussidiarietà.L'EIT svolgerà inoltre un ruolo essenziale nella messa a punto del concetto di spirito imprenditoriale tramite suoi programmi di istruzione, che promuovono l'imprenditorialità in un contesto ad alta intensità di conoscenza, sulla base della ricerca innovativa e contribuendo a soluzioni di elevato interesse per la società.

(d) Diffusione delle migliori pratiche e scambio di conoscenze sistematico

L'EIT mira ad aprire la strada a nuovi approcci in materia di innovazione e a sviluppare una cultura comune dell'innovazione e del trasferimento di conoscenze, anche nelle PMI. Tale obiettivo potrebbe essere conseguito tra l'altro attraverso la condivisione delle diverse esperienze delle CCI mediante vari meccanismi di diffusione, come una piattaforma delle parti interessate e un sistema di borse.

(e) Dimensione internazionale

L'EIT agisce con la consapevolezza del contesto globale in cui è chiamato a muoversi e aiuta a instaurare relazioni con i principali partner internazionali conformemente all'articolo 27, paragrafo 2. Ampliando i centri di eccellenza attraverso le CCI e promuovendo nuove opportunità di istruzione, l'EIT mirerà a rendere l'Europa più attraente per i talenti provenienti dall'estero.

(f) Rafforzare un impatto di portata europea attraverso un modello di finanziamento innovativo

L'EIT apporta un importante contributo agli obiettivi fissati in Orizzonte 2020, in particolare affrontando le sfide per la società in modo da integrare altre iniziative in questi settori. L'EIT sperimenterà, nel quadro di Orizzonte 2020, approcci nuovi e semplificati al finanziamento e alla gestione, svolgendo così un ruolo di capofila nel panorama europeo dell'innovazione. Una quota del contributo annuale sarà assegnata alle CCI in modo concorrenziale. L'approccio dell'EIT ai finanziamenti sarà fondato solidamente su un forte effetto di leva in grado di mobilitare fondi pubblici e privati a livello nazionale e unionale e sarà comunicato in modo trasparente agli Stati membri e alle parti interessate. Inoltre impiegherà mezzi assolutamente nuovi per un sostegno mirato alle singole attività mediante la Fondazione EIT.

(g) Collegare lo sviluppo regionale alle opportunità europee

Attraverso le CCI e i loro centri di collocazione comune (nodi di eccellenza in grado di riunire l'istruzione superiore, la ricerca e le imprese partner in una data zona geografica), l'EIT sarà inoltre legato alla politica regionale. In particolare, mira a garantire un miglior collegamento fra gli istituti di istruzione superiore, il mercato del lavoro e la crescita e l'innovazione a livello regionale, nel quadro di strategie di specializzazione intelligente regionali e nazionali. In tal modo contribuirà agli obiettivi di politica di coesione dell'Unione. ";"";"H2020";"H2020-EC";"";"";"2014-09-23 20:21:45";"664513" +"H2020-EU.7.";"fr";"H2020-EU.7.";"";"";"INSTITUT EUROPÉEN D'INNOVATION ET DE TECHNOLOGIE (EIT)";"European Institute of Innovation and Technology (EIT)";"

INSTITUT EUROPÉEN D'INNOVATION ET DE TECHNOLOGIE (EIT)

L'EIT joue un rôle majeur en réunissant l'enseignement supérieur, la recherche et l'innovation d'excellence, assurant ainsi l'intégration du triangle de la connaissance. Pour ce faire, il a essentiellement recours aux communautés de la connaissance et de l'innovation (CCI). Il veille également, par des mesures ciblées de diffusion et de partage des connaissances, à ce que les expériences soient partagées entre les CCI et au-delà, ce qui permet aux modèles d'innovation d'être adoptés plus rapidement au sein de l'Union.

Objectif spécifique

L'objectif spécifique est d'intégrer le triangle de la connaissance que constituent l'enseignement supérieur, la recherche et l'innovation pour renforcer ainsi la capacité d'innovation de l'Union et relever les défis de société.L'Europe connaît un certain nombre de faiblesses structurelles en ce qui concerne sa capacité d'innover et de mettre en œuvre de nouveaux services, produits et procédés, ce qui entrave une croissance économique durable et la création d'emplois. Les principaux problèmes sont notamment les difficultés de l'Europe pour attirer et retenir des talents; la sous-utilisation des points forts existants dans le domaine de la recherche pour ce qui est de créer de la valeur économique ou sociale; la faible commercialisation des résultats de la recherche; les faibles niveaux d'activité entrepreneuriale et d'esprit d'entreprise; la faible mobilisation de fonds privés à des fins d'investissement dans la recherche et le développement; le manque de ressources, y compris de ressources humaines, dans les pôles d'excellence, ce qui ne leur permet pas d'affronter la concurrence mondiale; le nombre excessif d'obstacles, au niveau européen, à la collaboration au sein du triangle de la connaissance que constituent l'enseignement supérieur, la recherche et l'innovation.

Justification et valeur ajoutée de l'Union

Pour que l'Europe puisse être compétitive à l'échelle internationale, il convient de surmonter ces faiblesses structurelles. Les éléments susmentionnés sont communs aux États membres et nuisent à la capacité d'innovation de l'Union dans son ensemble.L'EIT répondra à ces problèmes en favorisant les changements structurels dans le paysage européen de l'innovation. Pour ce faire, il promouvra l'intégration de l'enseignement supérieur, de la recherche et de l'innovation, selon les normes les plus élevées, notamment par l'intermédiaire de ses CCI, ce qui créera de nouveaux environnements porteurs d'innovations, il encouragera et aidera une nouvelle génération d'entrepreneurs et il stimulera l'essaimage et la création de jeunes entreprises innovantes. Ainsi, l'EIT contribuera pleinement à la réalisation des objectifs de la stratégie Europe 2020, et notamment aux initiatives phares «Une Union de l'innovation» et «Jeunesse en mouvement».En outre, l'EIT et ses communautés de la connaissance et de l'innovation devraient rechercher les synergies et l'interaction entre les priorités d'Horizon 2020 et avec d'autres initiatives pertinentes. Plus particulièrement, l'EIT, par l'intermédiaire des CCI, contribuera aux objectifs spécifiques de la priorité «Défis de société» et à l'objectif spécifique «Primauté dans le domaine des technologies génériques et industrielles».

Intégrer l'éducation et l'entrepreneuriat à la recherche et à l'innovation

La caractéristique propre de l'EIT est de combiner l'enseignement supérieur et l'entrepreneuriat avec la recherche et l'innovation pour en faire les maillons d'une chaîne unique de l'innovation s'étendant dans toute l'Union et au-delà, ce qui devrait notamment se traduire par une augmentation des services, produits et processus innovants commercialisés.

Logique d'entreprise et approche axée sur les résultats

L'EIT, par l'intermédiaire de ses CCI, fonctionne selon une logique d'entreprise et adopte une approche axée sur les résultats. Une forte impulsion est nécessaire, c'est pourquoi chaque CCI est dirigée par un directeur général. Les partenaires qui composent une CCI sont représentés par une entité juridique unique afin de rationaliser la prise de décisions. Les CCI doivent élaborer des plans d'entreprise annuels clairement définis, énonçant une stratégie pluriannuelle et comprenant une gamme ambitieuse d'activités allant de l'enseignement à la création d'entreprises, avec des objectifs et des éléments à livrer clairement définis, visant à agir tant sur le marché que sur la société. Les règles actuelles concernant la participation aux CCI, l'évaluation et le suivi de celles-ci permettent des décisions rapides, sur le modèle d'une entreprise. Les entreprises et les chefs d'entreprise devraient jouer un rôle important pour dynamiser les activités dans les CCI et celles-ci devraient pouvoir mobiliser des fonds et obtenir un engagement à long terme des entreprises.

Surmonter la fragmentation à l'aide de partenariats intégrés à long terme

Les CCI de l'EIT sont des initiatives hautement intégrées qui rassemblent, de manière ouverte, responsable et transparente, des partenaires renommés pour leur excellence et qui peuvent être aussi bien des entreprises, y compris des PME, ou des établissements d'enseignement supérieur que des instituts de recherche et de technologie. Les CCI permettent à des partenaires de l'Union et au-delà de s'unir au sein de configurations nouvelles et transfrontière, d'optimiser les ressources existantes et d'accéder à de nouvelles possibilités commerciales avec de nouvelles chaînes de valeur, en relevant des défis plus risqués à plus grande échelle. Les CCI sont ouvertes à la participation de nouveaux partenaires, y compris des PME, apportant une valeur ajoutée au partenariat.

Favoriser l'émergence des personnes de talent, principaux atouts de l'Europe pour l'innovation

Le talent est un ingrédient crucial de l'innovation. L'EIT encourage les personnes et les interactions entre elles, en mettant les étudiants, les chercheurs et les entrepreneurs au centre de son modèle d'innovation. L'EIT apportera une culture entrepreneuriale et créative et un enseignement interdisciplinaire aux personnes de talent, en reconnaissant des diplômes de master et de doctorat, appelés à devenir une marque d'excellence internationalement reconnue. De cette façon, l'EIT encourage fortement la mobilité et la formation dans le triangle de la connaissance.

Grandes lignes des activités

L'EIT fonctionnera principalement par l'intermédiaire de CCI, en particulier dans des domaines qui offrent un véritable potentiel d'innovation. Les CCI disposent dans l'ensemble d'une autonomie considérable pour définir leurs propres stratégies et activités, mais elles ont en commun plusieurs caractéristiques innovantes pour lesquelles il conviendra d'assurer une coordination et de trouver des synergies. En outre, l'EIT renforcera son influence en diffusant les bonnes pratiques sur la manière d'intégrer le triangle de la connaissance et le développement de l'entrepreneuriat, en intégrant de nouveaux partenaires dès lors qu'ils peuvent apporter une valeur ajoutée et en encourageant activement une nouvelle culture du partage des connaissances.

(a) Transférer et appliquer des activités d'enseignement supérieur, de recherche et d'innovation à la création de nouvelles entreprises

L'EIT s'efforcera de créer un environnement de nature à développer le potentiel innovant des personnes et de tirer parti de leurs idées, quelle que soit leur place dans la chaîne de l'innovation. Il contribuera ainsi également à résoudre le «paradoxe européen», qui est que les excellents travaux de recherche existants sont loin d'être pleinement exploités. De cette façon, l'EIT aidera à amener des idées sur le marché. En mettant l'accent sur les CCI et sur l'esprit d'entreprise, il créera de nouvelles possibilités commerciales, non seulement sous la forme de jeunes entreprises innovantes et d'entreprises dérivées, mais aussi dans les entreprises existantes. L'accent sera mis sur toutes les formes d'innovation, y compris les innovations à caractère technologique, social et non technologique.

(b) Recherche de pointe et recherche axée sur l'innovation dans des domaines cruciaux pour l'économie et la société

La stratégie et les activités de l'EIT seront axées sur des domaines qui offrent un véritable potentiel d'innovation et qui revêtent une importance manifeste pour les défis de société relevés dans Horizon 2020. En abordant les grands défis de société de façon globale, l'EIT encouragera les approches interdisciplinaires et pluridisciplinaires et contribuera à canaliser les travaux de recherche des partenaires au sein des CCI.

(c) Développement des talents, des compétences et de l'esprit d'entreprise par l'éducation et la formation

L'EIT intégrera totalement l'éducation et la formation à tous les stades des carrières; il soutiendra et facilitera l'élaboration de programmes d'enseignement neufs et innovants pour répondre au besoin de nouveaux profils engendré par les défis complexes auxquels sont confrontées la société et l'économie. À cette fin, le rôle de l'EIT sera crucial pour promouvoir de nouveaux diplômes et certificats conjoints ou multiples dans les États membres en respectant le principe de subsidiarité.L'EIT jouera aussi un rôle important pour affiner le concept d'«entrepreneuriat» par ses programmes d'enseignement, qui encouragent l'entrepreneuriat dans un contexte à forte intensité de connaissance, en s'appuyant sur la recherche innovante et en contribuant à des solutions d'une grande utilité pour la société.

(d) Diffusion de bonnes pratiques et partage systématique des connaissances

L'EIT visera à expérimenter de nouvelles approches en matière d'innovation et à développer une culture commune d'innovation et de transfert de connaissance, y compris dans les PME. Cette objectif pourrait être atteint, entre autres, en partageant les diverses expériences des CCI par différents mécanismes de diffusion (plateforme des parties prenantes, système de bourses).

(e) Dimension internationale

L'EIT est conscient du contexte mondial dans lequel il fonctionne et contribuera à créer des liens avec de grands partenaires au niveau international, conformément à l'article 27, paragraphe 2. En donnant une ampleur accrue aux centres d'excellence via les communautés de la connaissance et de l'innovation et en favorisant les nouvelles possibilités d'enseignement, il visera à rendre l'Europe plus attrayante pour les talents étrangers.

(f) Renforcer les incidences à l'échelle de l'Europe grâce à un modèle de financement innovant

L'EIT apportera une contribution importante aux objectifs exposés dans le programme-cadre Horizon 2020, notamment en cherchant à relever les défis de société en complémentarité avec les autres initiatives prises dans les domaines concernés. Dans le cadre d'Horizon 2020, il essaiera des approches nouvelles et simplifiées en matière de financement et de gouvernance, jouant ainsi un rôle de pionnier dans le paysage européen de l'innovation. Une partie de la contribution annuelle sera attribuée aux CCI dans un esprit concurrentiel. L'approche de l'EIT en matière de financement sera clairement fondée sur un puissant effet de levier, de façon à mobiliser des fonds tant publics que privés au niveau national et de l'Union, et sera expliquée, de manière transparente, aux États membres et aux parties prenantes concernées. De plus, il utilisera des instruments de financement entièrement nouveaux pour apporter un soutien ciblé à certaines activités par l'intermédiaire de la Fondation EIT.

(g) Lier le développement régional aux possibilités européennes

Par l'intermédiaire des CCI et de leurs centres de colocalisation (des pôles d'excellence qui rassemblent des partenaires actifs dans l'enseignement supérieur, la recherche et l'entreprise en un même lieu), l'EIT sera aussi lié à la politique régionale. Il assurera en particulier un meilleur lien entre les instituts d'enseignement supérieur, le marché de l'emploi ainsi que l'innovation et la croissance au niveau régional, dans le contexte de stratégies régionales et nationales de spécialisation intelligente. Il contribuera ainsi aux objectifs de la politique de cohésion de l'Union. ";"";"H2020";"H2020-EC";"";"";"2014-09-23 20:21:45";"664513" +"H2020-EU.6.";"de";"H2020-EU.6.";"";"";"DIREKTE MASSNAHMEN DER GEMEINSAMEN FORSCHUNGSSTELLE (GFS) AUSSERHALB DES NUKLEARBEREICHS ";"Joint Research Centre (JRC) non-nuclear direct actions";"

DIREKTE MASSNAHMEN DER GEMEINSAMEN FORSCHUNGSSTELLE (GFS) AUSSERHALB DES NUKLEARBEREICHS

Integraler Bestandteil von Horizont 2020 ist die Gemeinsame Forschungsstelle, die die Unionspolitik mit belastbaren, evidenzbasierten Daten unterstützt. Dabei stehen die Bedürfnisse der Verbraucher im Vordergrund, ergänzt durch vorausschauende Tätigkeiten.

Einzelziel

Das Einzelziel besteht in der Auftraggeber orientierten wissenschaftlichen und technischen Unterstützung der Unionspolitik und in der flexiblen Reaktion auf neue politische Erfordernisse.

Begründung und Mehrwert für die Union

Die Union hat sich bis 2020 ehrgeizige politische Ziele gesteckt, die mit komplexen und miteinander verknüpften Herausforderungen im Zusammenhang stehen, wie beispielsweise nachhaltige Bewirtschaftung von Ressourcen und Wettbewerbsfähigkeit. Um diese Herausforderungen erfolgreich bewältigen zu können, bedarf es belastbarer wissenschaftlicher Erkenntnisse, die sich auf unterschiedlichste wissenschaftliche Disziplinen erstrecken und eine solide Einschätzung der politischen Optionen erlauben. Die GFS wird – in ihrer Rolle als wissenschaftlicher Dienstleister für die politische Entscheidungsfindung in der Union – in allen Phasen der Entscheidungsfindung, d. h. von der Konzeption bis hin zur Umsetzung und Bewertung, die notwendige wissenschaftlich-technische Unterstützung bereitstellen. Um zu diesem Einzelziel beizutragen wird sie ihre Forschung eindeutig auf Schwerpunkte der Unionspolitik ausrichten und bereichsübergreifende Kompetenzen fördern sowie die Zusammenarbeit mit den Mitgliedstaaten vorantreiben.Ihre Unabhängigkeit von privaten oder nationalen Einzelinteressen und ihre Rolle als maßgebliche wissenschaftlich-technische Instanz versetzen die GFS in die Lage, die notwendige Konsensbildung zwischen interessierten Kreisen und politischen Entscheidungsträgern zu erleichtern. Die Mitgliedstaaten und die Unionsbürger profitieren von der Forschung der GFS, die auf Gebieten wie Gesundheit, Verbraucherschutz, Umwelt, Sicherheit sowie Krisen- und Katastrophenmanagement am deutlichsten erkennbar wird.Konkret werden die Mitgliedstaaten und Regionen auch von der Unterstützung für ihre Strategien für eine intelligente Spezialisierung profitieren.Die GFS ist Teil des Europäischen Forschungsraums und wird auch in Zukunft dessen Verwirklichung durch die enge Zusammenarbeit mit Fachleuten und interessierten Kreisen aktiv unterstützen, indem sie einen möglichst breiten Zugang zu ihren Einrichtungen gewährt und Forscher weiterbildet und ferner eng mit den Mitgliedstaaten und den internationalen Institutionen zusammenarbeitet, die ähnliche Ziele verfolgen. Dies dient auch der Einbeziehung neuer Mitgliedstaaten und assoziierter Länder, für die die GFS auch weiterhin spezielle Lehrgänge zur wissenschaftlich-technischen Grundlage des Unionsrechts anbieten wird. Die GFS wird zwecks Koordinierung Verbindungen mit sonstigen einschlägigen Einzelzielen von Horizont 2020 herstellen. In Ergänzung ihrer direkten Maßnahmen und zur weiteren Integration und Vernetzung innerhalb des EFR kann sich die GFS auch an indirekten Maßnahmen und Koordinierungsinstrumenten in Bereichen beteiligen, in denen sie mit ihrem einschlägigen Sachverstand einen Mehrwert für die Union bewirkt.

Einzelziele und Tätigkeiten in Grundzügen

Die GFS-Tätigkeiten im Rahmen von Horizont 2020 sind auf die Schwerpunkte der Unionspolitik und auf die ihnen zugrunde liegenden gesellschaftlichen Herausforderungen ausgerichtet. Diese Aktivitäten sind mit der Strategie Europa 2020 und ihren Zielen, und mit den Rubriken ""Sicherheit und Unionsbürgerschaft"" sowie ""Globales Europa"" des Mehrjährigen Finanzrahmens für 2014-2020 abgestimmt.Die Schlüsselkompetenzen der GFS liegen in den Bereichen Energie, Verkehr, Umwelt und Klimawandel, Landwirtschaft und Lebensmittelsicherheit, Gesundheit und Verbraucherschutz, Informations- und Kommunikationstechnologien, Referenzmaterialien, Sicherheit und Gefahrenabwehr (einschließlich Sicherheit und Gefahrenabwehr im Nuklearbereich nach dem Euratom-Programm). Die Tätigkeiten der GFS auf diesen Gebieten werden unter Berücksichtigung der einschlägigen Initiativen auf der Ebene der Regionen, der Mitgliedstaaten oder der Union im Hinblick auf die Ausgestaltung des Europäischen Forschungsraums durchgeführt.Die Kapazitäten dieser Kompetenzbereiche werden deutlich aufgestockt, um den gesamten politischen Kreislauf erfassen und die politischen Optionen bewerten zu können. Dies umfasst unter anderem Folgendes:(a) Antizipierung und Prognosen: eine proaktive Strategie zur Erkennung von Trends und Ereignissen in Wissenschaft, Technik und Gesellschaft und deren möglichen Auswirkungen auf die Politik;(b) wirtschaftliche Aspekte: im Sinne einer integrierten Dienstleistung, die sich sowohl auf wissenschaftlich-technische Fragen als auch auf makroökonomische Aspekte erstreckt;(c) Modellierung: Konzentration auf Nachhaltigkeit und wirtschaftliche Zusammenhänge mit dem Ziel, bei wichtigen Szenarienanalysen die Kommission weniger abhängig von externen Anbietern zu machen;(d) politische Analysen: zur Untersuchung bereichsübergreifender politischer Optionen;(e) Folgenabschätzung: Bereitstellung wissenschaftlicher Erkenntnisse zur Untermauerung politischer Optionen.Die GFS wird auch weiterhin Exzellenz in der Forschung und eine ausgedehnte Interaktion mit Forschungseinrichtungen als Grundlage für eine glaubhafte und zuverlässige wissenschaftlich-technische Unterstützung der Politik anstreben. Hierzu wird sie die Zusammenarbeit mit europäischen und internationalen Partnern vorantreiben, unter anderem durch die Beteiligung an indirekten Maßnahmen. Ferner wird sie Sondierungsforschung betreiben und selektiv Kompetenzen in neu entstehenden, politisch relevanten Gebieten aufbauen.Schwerpunkte der GFS:

Wissenschaftsexzellenz

(Siehe SCHWERPUNKT ""Wissenschaftsexzellenz"" (H2020-EU.1.) (http://cordis.europa.eu/programme/rcn/664091_en.html)Forschungsarbeiten zur Stärkung der wissenschaftlichen Evidenzbasis für die Politikgestaltung und zur Untersuchung neu entstehender wissenschaftlicher und technologischer Gebiete, u. a. über ein Programm für die Sondierungsforschung.

Führende Rolle der Industrie

(Siehe SCHWERPUNKT ""Führende Rolle der Industrie"" (H2020-EU.2)) (http://cordis.europa.eu/programme/rcn/664143_en.html)Beitrag zur europäischen Wettbewerbsfähigkeit durch die Unterstützung von Normungsverfahren und Normen mittels pränormativer Forschung, Entwicklung von Referenzmaterialien und Referenzmessungen, Harmonisierung von Methoden in den fünf Schwerpunktbereichen (Energie, Verkehr, die Leitinitiative ""Eine Digitale Agenda für Europa"", Sicherheit und Gefahrenabwehr sowie Verbraucherschutz; Verkehr, die Leitinitiative ""Eine Digitale Agenda für Europa"", Sicherheit und Gefahrenabwehr sowie Verbraucherschutz). Sicherheitsbewertungen zu neuen Technologien in Bereichen wie Energie und Verkehr sowie Gesundheit und Verbraucherschutz. Beitrag zur Nutzung, Standardisierung und Validierung von Weltraumtechnologien und -daten, insbesondere im Hinblick auf die Bewältigung gesellschaftlicher Herausforderungen.

Gesellschaftliche Herausforderungen

(Siehe SCHWERPUNKT ""Gesellschaftliche Herausforderungen"" (H2020-EU.3.) (http://cordis.europa.eu/programme/rcn/664235_en.html)

(a) Gesundheit, demografischer Wandel und Wohlergehen

(Siehe auch H2020-EU.3,1.) (http://cordis.europa.eu/programme/rcn/664237_en.html)Beitrag zu Gesundheit und Verbraucherschutz durch wissenschaftlich-technische Unterstützung in Bereichen wie Lebens- und Futtermittel, Verbrauchsgüter, Umwelt und Gesundheit, gesundheitsbezogene Diagnose- und Screeningverfahren, Ernährung und Ernährungsgewohnheiten; Umwelt und Gesundheit, gesundheitsbezogene Diagnose- und Screeningverfahren, Ernährung und Ernährungsgewohnheiten.

(b) Ernährungs- und Lebensmittelsicherheit, nachhaltige Land- und Forstwirtschaft, marine, maritime und limnologische Forschung und Biowirtschaft

(Siehe auch H2020-EU.3,2.) (http://cordis.europa.eu/programme/rcn/664237_en.html)Unterstützung der Entwicklung, Durchführung und Überwachung der europäischen Landwirtschafts- und Fischereipolitik, einschließlich Ernährungs- und Lebensmittelsicherheit sowie Entwicklung einer Bio-Wirtschaft z. B. durch Prognosen für die Produktion von Kulturpflanzen, technische und sozioökonomische Analysen und Modellierung und Förderung gesunder und produktiver Meere.

(c) Sichere, saubere und effiziente Energieversorgung

(Siehe auch H2020-EU.3,3.) (http://cordis.europa.eu/programme/rcn/664237_en.html)Unterstützung der Klima- und Energieziele 20-20-20 durch Erforschung der technologischen und wirtschaftlichen Aspekte der Energieversorgung, der Energieeffizienz, der Technologien mit niedrigem CO2-Ausstoß sowie der Netze für die Übertragung von Energie bzw. Strom.

(d) Intelligenter, umweltfreundlicher und integrierter Verkehr

(Siehe auch H2020-EU.3,4.) (http://cordis.europa.eu/programme/rcn/664357_en.html)Unterstützung der Unionspolitik für die nachhaltige und sichere Mobilität von Personen und Gütern mit Hilfe von Laborstudien und Konzepten für die Modellierung und Überwachung, einschließlich Verkehrstechnologien mit niedrigem CO2-Ausstoß, wie saubere und effiziente Elektrofahrzeuge und alternative Kraftstoffe sowie intelligente Mobilitätssysteme.

(e)Klimaschutz, Umwelt, Ressourceneffizienz und Rohstoffe

(Siehe auch H2020-EU.3,5.) (http://cordis.europa.eu/programme/rcn/664389_en.html)Untersuchung bereichsübergreifender Herausforderungen der nachhaltigen Bewirtschaftung natürlicher Ressourcen durch die Überwachung von ökologischen Schlüsselvariablen und die Entwicklung eines integrierten Modellierungsrahmens für die Bewertung der Nachhaltigkeit.Unterstützung der Ressourceneffizienz, Emissionsreduzierung und nachhaltigen Versorgung mit Rohstoffen durch eine integrierte gesellschaftliche, ökologische und wirtschaftliche Bewertung von umweltfreundlichen Produktionsprozessen, Technologien, Produkten und Dienstleistungen.Unterstützung der entwicklungspolitischen Ziele der Union durch Forschungsbeiträge mit dem Ziel, eine angemessene Versorgung mit wichtigen Ressourcen zu gewährleisten, mit besonderem Schwerpunkt auf der Überwachung von Umwelt- und Ressourcenparametern, auf Analysen zur gesicherten Versorgung mit sicheren Lebensmitteln und auf dem Wissenstransfer.

(f) Europa in einer sich verändernden Welt: integrative, innovative und reflektierende Gesellschaften

(Siehe auch H2020-EU.3,6.) (http://cordis.europa.eu/programme/rcn/664435_en.html)Unterstützung und Begleitung der Verwirklichung der Leitinitiative ""Innovationsunion"" mit makroökonomischen Analysen zu den Triebkräften bzw. Hemmnissen für Forschung und Innovation sowie Entwicklung von Verfahren, Leistungsanzeigern und Indikatoren.Unterstützung des Europäischen Forschungsraums durch Überwachung seiner Funktionsweise und durch Analyse der Triebkräfte bzw. Hemmnisse einiger seiner wichtigsten Elemente sowie durch vernetzte Forschung, Ausbildung und Öffnung der GFS-Einrichtungen und -Datenbanken für Nutzer in den Mitgliedstaaten sowie in Bewerberländern und assoziierten Ländern.Beitrag zu den wichtigsten Zielen der Leitinitiative ""Eine Digitale Agenda für Europa"" durch qualitative und quantitative Analysen der wirtschaftlichen und gesellschaftlichen Aspekte (digitale Wirtschaft, digitale Gesellschaft, digitale Lebensführung).

(g) Sichere Gesellschaften – Schutz der Freiheit und Sicherheit Europas und seiner Bürger

(Siehe auch H2020-EU.3,7.) (http://cordis.europa.eu/programme/rcn/664463_en.html)Unterstützung der inneren Sicherheit durch Ermittlung und Bewertung von Schwachstellen kritischer Infrastrukturen als lebenswichtige Komponenten gesellschaftlicher Funktionen sowie durch Bewertung sowie soziale und ethische Evaluierung der operativen Leistungsfähigkeit von Technologien im Zusammenhang mit der digitalen Identität. Bewältigung globaler Sicherheitsgefahren, auch neu entstehender oder hybrider Bedrohungen durch die Entwicklung fortgeschrittener Instrumente für die Gewinnung von Informationen und Datenanalysen sowie für das Krisenmanagement.Ausbau der Unionskapazitäten für die Bewältigung natürlicher und vom Menschen verursachter Katastrophen durch eine verbesserte Überwachung der Infrastrukturen und die Entwicklung von Testanlagen und globaler Frühwarn- und Risikomanagementsysteme für unterschiedliche Gefahrensituationen, unter Einbeziehung der satellitengestützten Erdbeobachtung. ";"";"H2020";"H2020-EC";"";"";"2014-09-23 20:21:28";"664511" +"H2020-EU.7.";"es";"H2020-EU.7.";"";"";"INSTITUTO EUROPEO DE INNOVACIÓN Y TECNOLOGÍA (EIT)";"European Institute of Innovation and Technology (EIT)";"

INSTITUTO EUROPEO DE INNOVACIÓN Y TECNOLOGÍA (EIT)

El EIT desempeñará un importante papel al agrupar la excelencia en la investigación, la innovación y la educación superior, integrando así el triángulo del conocimiento. Esto se conseguirá principalmente a través de las CCI. Además, garantizará que se compartan experiencias entre y más allá de las CCI mediante medidas selectivas de difusión y la puesta en común de conocimientos, promoviendo así una asimilación más rápida de los modelos de innovación en toda la Unión.

Objetivo específico

El objetivo específico es integrar el triángulo del conocimiento que forman la investigación, la innovación y la educación superior y, de este modo, reforzar la capacidad de innovación de la Unión y abordar los retos de la sociedad.Europa padece varias deficiencias estructurales en lo que respecta a la capacidad de innovación y la capacidad para aportar nuevos servicios, productos y procesos, lo que entorpece el crecimiento económico sostenible y la creación de empleo. Entre los principales problemas figuran el pobre expediente de Europa en materia de atracción y retención de talentos; la infrautilización de sus puntos fuertes en investigación para crear valor económico o social; la falta de resultados de la investigación que llegan al mercado; los bajos niveles de actividad y mentalidad emprendedoras; la baja movilización de la inversión privada en I+D, una escala de recursos, incluidos los recursos humanos, en los polos de excelencia que es insuficiente para competir a escala mundial; y un número excesivo de obstáculos para la colaboración en el triángulo del conocimiento de la educación superior, la investigación y la innovación a nivel europeo.

Justificación y valor añadido de la Unión

Si Europa quiere competir a escala internacional, es preciso superar estas deficiencias estructurales. Los elementos antes mencionados son comunes a los Estados miembros de la Unión y afectan a la capacidad de innovación de la Unión en su conjunto.El EIT abordará estas cuestiones promoviendo cambios estructurales en el panorama europeo de la innovación. Lo hará mediante el fomento de la integración de la educación superior, la investigación y la innovación del más alto nivel, en particular por medio de sus Comunidades de Conocimiento e Innovación (CCI), creando así nuevos entornos favorables a la innovación, y mediante la promoción y el apoyo de una nueva generación de emprendedores, y el estímulo de la creación de spin-offs y start-ups innovadoras. De este modo, el EIT contribuirá plenamente a la consecución de los objetivos de la estrategia Europa 2020, y en especial de las iniciativas emblemáticas ""Unión por la innovación"" y ""Juventud en Movimiento"".Además, el EIT y sus CCI deben procurar las sinergias e interacción necesarias entre las prioridades de Horizonte 2020 y con otras iniciativas pertinentes. En particular el EIT contribuirá mediante sus CCI al logro de los objetivos específicos correspondientes a las prioridades ""Retos de la sociedad"" y ""Liderazgo en tecnologías industriales y de capacitación"".

Integrar la educación y el espíritu empresarial con la investigación y la innovación

La característica específica del EIT es integrar la educación superior y el espíritu empresarial con la investigación y la innovación, como eslabones de una cadena única de la innovación en toda la Unión y fuera de ella, lo que ha de conducir a un incremento de los servicios, productos y procesos innovadores que llegan al mercado.

Lógica empresarial y enfoque orientado hacia los resultados

El EIT, a través de sus CCI, operará en consonancia con la lógica empresarial y estará orientado a los resultados. Un liderazgo firme constituye un requisito previo: cada CCI está a cargo de un director general. Los socios de las CCI están representados por entidades jurídicas únicas para permitir una toma de decisiones más ágil. Las CCI deben elaborar planes de negocio anuales claramente definidos, que fijen una estrategia plurianual e incluyan una ambiciosa cartera de actividades, que van desde la educación hasta la creación de empresas, con objetivos y prestaciones claras, tratando de incidir tanto en la sociedad como en el mercado. Las normas vigentes relativas a la participación, la evaluación y el seguimiento de las CCI permiten adoptar decisiones rápidas, de tipo empresarial. Empresas y empresarios deben desempeñar un papel importante en la conducción de las actividades de las CCI, y estas deben ser capaces de movilizar inversiones y compromisos a largo plazo del sector empresarial.

Superar la fragmentación con la ayuda de asociaciones integradas a largo plazo

Las CCI del EIT son entidades muy integradas, que reúnen a socios de excelencia reconocida de la industria incluidas las PYME, la educación superior y los centros de investigación y tecnológicos, de modo abierto y transparente. Las CCI permiten reunir a socios de toda la Unión y de fuera de ella en nuevas configuraciones transfronterizas, optimizar los recursos existentes y abrir el acceso a nuevas oportunidades empresariales a través de las cadenas de valor, abordando retos de mayor envergadura y riesgo. Las CCI están abiertas a la participación de nuevos actores que aporten un valor añadido a la asociación, incluyendo a las PYME.

Nutrir el principal activo de Europa en materia de innovación: el gran talento de las personas

El talento es un ingrediente clave de la innovación. El EIT promoverá a las personas y a sus interacciones mutuas, situando a estudiantes, investigadores y empresarios en el centro de su modelo de innovación. El EIT aportará una cultura emprendedora y creativa y una educación interdisciplinaria a las personas con talento, a través de másteres y cursos de doctorado con el sello EIT, que se desea erigir como marchamo de excelencia reconocido internacionalmente. De este modo, el EIT promueve decididamente la movilidad y la formación dentro del triángulo del conocimiento.

Líneas generales de las actividades

El EIT funcionará principalmente a través de las CCI especialmente en aquellos ámbitos que ofrezcan un potencial de innovación real. Aun cuando las CCI disfrutan de una autonomía sustancial general para definir sus propias estrategias y actividades, existen varios rasgos innovadores comunes a todas ellas en las que se procurará establecer coordinación y sinergias. El EIT potenciará, además, su impacto difundiendo las buenas prácticas relativas a la manera de integrar el triángulo del conocimiento y el desarrollo del espíritu empresarial, integrando nuevos socios que puedan proporcionar valor añadido, y promoviendo activamente una nueva cultura de intercambio de conocimientos.

(a) Transferencia y aplicación de las actividades de educación superior, investigación e innovación en favor de la creación de nuevas empresas

El EIT tratará de crear un entorno para impulsar el potencial innovador de las personas y aprovechar sus ideas, independientemente del lugar que ocupen en la cadena de la innovación. Por consiguiente, también contribuirá a afrontar la ""paradoja europea"" de que la investigación excelente que existe no se aprovecha, ni con mucho, plenamente. De este modo, el EIT ayudará a llevar las ideas al mercado. Principalmente a través de sus CCI y su énfasis en la promoción de la mentalidad emprendedora, creará nuevas oportunidades comerciales en forma de empresas tanto incipientes como derivadas, pero también dentro de la industria existente. Se centrará la atención en toda forma de innovación, por ejemplo la tecnológica, la social y también aquella que no sea tecnológica.

(b) Investigación puntera e impulsada por la innovación en ámbitos esenciales de interés económico y social

La estrategia y las actividades del EIT se guiarán por un énfasis en los ámbitos que puedan ofrecer un potencial de innovación real y tengan una clara importancia para los retos de la sociedad abordados en Horizonte 2020. Al abordar los retos de la sociedad esenciales de una manera global, el EIT promoverá planteamientos interdisciplinarios y multidisciplinarios y ayudará a centrar los esfuerzos de investigación de los socios de las CCI.

(c) Generación de personas con talento, cualificadas y con espíritu empresarial gracias a la educación y la formación

El EIT integrará plenamente la educación y la formación en todas las fases de la carrera profesional y respaldará y facilitará la elaboración de nuevos planes de estudio innovadores en respuesta a la necesidad de nuevos perfiles engendrada por los complejos retos de la sociedad y económicos. A tal efecto, el EIT desempeñará un papel clave en la promoción de las nuevas titulaciones y diplomas conjuntos o múltiples en los Estados miembros, dentro del respeto del principio de subsidiariedad.El EIT también desempeñará un papel esencial en la definición más precisa del concepto de ""espíritu emprendedor"" a través de sus programas educativos, que promueven dicho espíritu en un contexto intensivo en conocimientos, basándose en la investigación para la innovación y aportando soluciones de gran pertinencia social.

(d) Difusión de las mejores prácticas y aprovechamiento compartido sistemático del conocimiento

El EIT tratará de abrir camino a nuevos planteamientos en materia de innovación y de crear una cultura común de innovación y transferencia de conocimientos, prestando especial atención a las PYME. Ello podría realizarse, entre otras cosas, compartiendo las diversas experiencias de sus CCI a través de distintos mecanismos de difusión, tales como una plataforma de partes interesadas, premios y concursos, exposiciones de procesos y productos, consorcios de patentes y derechos de autor y un régimen de becas.

(e) Dimensión internacional

El EIT es consciente del contexto mundial en el que actúa y contribuirá a forjar vínculos con los principales socios internacionales conforme a lo dispuesto en el artículo 27, apartado 2. Haciendo crecer los centros de excelencia a través de las CCI y promoviendo nuevas oportunidades educativas, tratará de que Europa resulte más atractiva para los talentos del exterior.

(f) Potenciación del impacto en toda Europa mediante un modelo de financiación innovador

El EIT efectuará una contribución importante al logro de los objetivos establecidos en Horizonte 2020, abordando en particular los retos de la sociedad de una manera que complementa otras iniciativas en estos ámbitos. En el marco de Horizonte 2020, pondrá a prueba nuevos enfoques simplificados con respecto a la financiación y la gobernanza, desempeñando así un papel pionero en el panorama europeo de la innovación. Una parte de la contribución anual se asignará a las CCI de forma competitiva. El planteamiento de las CCI con respecto a la financiación se asentará con firmeza en un potente efecto multiplicador, movilizando tanto fondos públicos como privados tanto en el nivel nacional como en el de la Unión, y se dará a conocer, de forma transparente, a los Estados miembros y las partes interesadas. Además, empleará vehículos totalmente nuevos para el apoyo focalizado a actividades individuales a través de la Fundación del EIT.

(g) Vinculación del desarrollo regional a las oportunidades europeas

A través de las CCI y de sus centros de coubicación —nodos de excelencia en los que se reúnen socios de la educación superior, la investigación y la empresa en una determinada localización geográfica— el EIT se vinculará también con la política regional. En particular, garantizará una mejor relación entre las instituciones de educación superior, el mercado de trabajo y la innovación y el crecimiento regionales, en el contexto de las estrategias regional y nacional de especialización inteligente. De este modo, contribuirá al logro de los objetivos de la política de cohesión de la Unión.";"";"H2020";"H2020-EC";"";"";"2014-09-23 20:21:45";"664513" +"H2020-EU.3.4.4.";"pl";"H2020-EU.3.4.4.";"";"";"Społeczno-gospodarcze i behawioralne badania naukowe oraz wybiegające w przyszłość działania związane z kształtowaniem polityki";"Socio-economic and behavioural research";"

Społeczno-gospodarcze i behawioralne badania naukowe oraz wybiegające w przyszłość działania związane z kształtowaniem polityki

Celem jest wsparcie usprawnionego kształtowania polityki, koniecznego dla promowania innowacji i sprostania wyzwaniom dotyczącym transportu oraz powiązanym potrzebom społecznym.Działania mają skupiać się na lepszym poznaniu społeczno-gospodarczych oddziaływań, tendencji i perspektyw związanych z transportem, w tym kształtowania się zapotrzebowania w przyszłości, oraz na zapewnieniu decydentom bazy faktograficznej i analiz. Uwzględnione zostanie także upowszechnianie wyników tych działań.";"";"H2020";"H2020-EU.3.4.";"";"";"2014-09-22 20:47:57";"664387" +"H2020-EU.3.4.4.";"de";"H2020-EU.3.4.4.";"";"";"Sozioökonomische Forschung, Verhaltensforschung und vorausschauende Tätigkeiten für die politische Entscheidungsfindung.";"Socio-economic and behavioural research";"

Sozioökonomische Forschung, Verhaltensforschung und vorausschauende Tätigkeiten für die politische Entscheidungsfindung.

Ziel ist die Erleichterung der politischen Entscheidungsfindung als notwendige Voraussetzung für die Förderung von Innovation und die Bewältigung der durch den Verkehr bedingten Herausforderungen und der entsprechenden gesellschaftlichen Anforderungen.Schwerpunkt der Tätigkeiten ist ein besseres Verständnis der verkehrsbezogenen sozioökonomischen Auswirkungen, Trends und Prognosen – auch der Entwicklung der künftigen Nachfrage – sowie die Versorgung der politischen Entscheidungsträger mit evidenzbasierten Daten und Analysen. Es wird ebenfalls ein Augenmerk auf die Verbreitung der Ergebnisse aus diesen Tätigkeiten gelegt werden.";"";"H2020";"H2020-EU.3.4.";"";"";"2014-09-22 20:47:57";"664387" +"H2020-EU.3.4.4.";"it";"H2020-EU.3.4.4.";"";"";"Ricerca socioeconomica e comportamentale e attività orientate al futuro per l'elaborazione delle strategie politiche";"Socio-economic and behavioural research";"

Ricerca socioeconomica e comportamentale e attività orientate al futuro per l'elaborazione delle strategie politiche

L'obiettivo è sostenere un processo decisionale migliorato necessario per promuovere l'innovazione e far fronte alle sfide poste dai trasporti e alle esigenze sociali a essi connesse.Il centro dell'attività è migliorare la comprensione delle incidenze, delle tendenze e delle prospettive socioeconomiche connesse ai trasporti, compresa l'evoluzione futura della domanda, e fornire ai responsabili politici informazioni e analisi basate su dati concreti. Si dedicherà inoltre attenzione alla diffusione dei risultati derivanti da tali attività.";"";"H2020";"H2020-EU.3.4.";"";"";"2014-09-22 20:47:57";"664387" +"H2020-EU.3.6.2.";"de";"H2020-EU.3.6.2.";"";"";"Innovative Gesellschaften";"Innovative societies";"

Innovative Gesellschaften

Ziel ist die Förderung der Entwicklung innovativer Gesellschaften und Strategien in Europa durch die Einbeziehung von Bürgern, Organisationen der Zivilgesellschaft, Unternehmen und Nutzern in Forschung und Innovation und die Unterstützung koordinierter Forschungs- und Innovationsstrategien vor dem Hintergrund der Globalisierung und der Notwendigkeit, die höchsten ethischen Standards zu fördern. Besonders unterstützt wird die Weiterentwicklung des Europäischen Forschungsraums und der Rahmenbedingungen für Innovation.Kulturelles und gesellschaftliches Wissen ist eine Hauptquelle von Kreativität und Innovation, auch von Innovation in der Wirtschaft, im öffentlichen Sektor und in der Gesellschaft. In vielen Fällen gehen gesellschaftliche und von den Nutzern angestoßene Innovationen der Entwicklung innovativer Technologien, Dienstleistungen und Wirtschaftsprozesse voraus. Die Kreativunternehmen sind eine wichtige Ressource für die Bewältigung gesellschaftlicher Herausforderungen und für die Wettbewerbsfähigkeit. Da Wechselbeziehungen zwischen gesellschaftlicher und technologischer Innovation komplex sind und selten linear verlaufen, muss die Entwicklung aller Arten von Innovationen weiter – auch sektorübergreifend und multidisziplinär – erforscht werden, und es müssen Finanzmittel für Maßnahmen zur Förderung ihrer effektiven Verwirklichung in der Zukunft bereitgestellt werden.Schwerpunkte der Tätigkeiten ist:(a) Stärkung der Evidenzbasis und Unterstützung der Leitinitiative ""Innovationsunion"" und des Europäischen Forschungsraums; (b) Erforschung neuer Innovationsformen, unter besonderer Betonung von gesellschaftlicher Innovation und Kreativität, und Gewinnung von Erkenntnissen darüber, wie alle Innovationsformen entwickelt werden und Erfolg haben oder scheitern; (c) Nutzung des innovativen, kreativen und produktiven Potenzials aller Generationen; (d) Förderung kohärenter und wirksamer Zusammenarbeit mit Drittländern. ";"";"H2020";"H2020-EU.3.6.";"";"";"2014-09-22 20:49:50";"664447" +"H2020-EU.3.4.2.";"pl";"H2020-EU.3.4.2.";"";"";"Usprawniona mobilność, mniejsze zagęszczenie ruchu, większe bezpieczeństwo i ochrona";"Mobility, safety and security";"

Usprawniona mobilność, mniejsze zagęszczenie ruchu, większe bezpieczeństwo i ochrona

Celem jest pogodzenie rosnących potrzeb w zakresie mobilności z poprawą płynności transportu poprzez innowacyjne rozwiązania w zakresie spójnych, intermodalnych, sprzyjających integracji, dostępnych, przystępnych cenowo, bezpiecznych, zdrowych i solidnych systemów transportowych.Działania mają skupiać się na ograniczeniu zagęszczenia ruchu, poprawie dostępności i interoperacyjności oraz wyjściu naprzeciw wyborom pasażerów i potrzebom użytkowników poprzez opracowanie i promowanie zintegrowanego transportu „od drzwi do drzwi”, zarządzania mobilnością i logistyki; na zwiększeniu intermodalności i zastosowaniu rozwiązań w zakresie inteligentnego planowania i zarządzania oraz na znacznym ograniczeniu wypadków oraz wpływu zagrożeń dla bezpieczeństwa.";"";"H2020";"H2020-EU.3.4.";"";"";"2014-09-22 20:47:20";"664367" +"H2020-EU.3.4.1.";"fr";"H2020-EU.3.4.1.";"";"";"Des transports économes en énergie et respectueux de l'environnement";"Resource efficient transport that respects the environment";"

Des transports économes en énergie et respectueux de l'environnement

L'objectif est de limiter au maximum l'impact des systèmes de transports sur le climat et l'environnement (y compris la pollution sonore et la pollution atmosphérique) en améliorant leur qualité et en rendant ceux-ci plus économes en ressources naturelles et en carburants ainsi qu'en réduisant leurs émissions de gaz à effet de serre et leur dépendance vis-à-vis des combustibles fossiles.Les activités visent prioritairement à réduire la consommation de ressources, en particulier les combustibles fossiles, les émissions de gaz à effet de serre et les niveaux de bruit ainsi qu'à améliorer l'efficacité énergétique des transports et des véhicules; à accélérer le développement, la fabrication et le déploiement d'une nouvelle génération de véhicules propres (électriques ou à l'hydrogène et autres véhicules à émissions faibles ou nulles), notamment grâce à des avancées et à une optimisation sur le plan des moteurs, du stockage d'énergie et des infrastructures; à étudier et à exploiter le potentiel des carburants durables et de substitution et des systèmes de propulsion et d'exploitation innovants et plus efficaces, y compris l'infrastructure de distribution des carburants et les techniques de charge; à optimiser la planification et l'utilisation des infrastructures au moyen de systèmes de transport et d'équipements intelligents ainsi que de la logistique; et à accroître le recours à la gestion de la demande et aux transports publics et non motorisés ainsi qu'aux chaînes de mobilité intermodale, en particulier dans les zones urbaines. L'innovation visant à parvenir à des émissions faibles ou nulles dans tous les modes de transport sera encouragée.";"";"H2020";"H2020-EU.3.4.";"";"";"2014-09-22 20:47:04";"664359" +"H2020-EU.7.";"pl";"H2020-EU.7.";"";"";"EUROPEJSKI INSTYTUT INNOWACJI I TECHNOLOGII (EIT)";"European Institute of Innovation and Technology (EIT)";"

EUROPEJSKI INSTYTUT INNOWACJI I TECHNOLOGII (EIT)

EIT odgrywa ważną rolę poprzez połączenie doskonałej jakości badań naukowych, innowacji i szkolnictwa wyższego, prowadząc tym samym do integracji trójkąta wiedzy. EIT dokonuje tego głównie poprzez WWiI. Ponadto zapewnia wymianę doświadczeń między i poza WWiI poprzez ukierunkowane środki w zakresie upowszechniania i wymiany wiedzy, promując tym samym szybsze przyjmowanie modeli innowacyjnych w całej Unii.

Cel szczegółowy

Celem szczegółowym jest integracja trójkąta wiedzy łączącego szkolnictwo wyższe, badania naukowe innowacje oraz wzmocnienie w ten sposób potencjału innowacyjnego Unii i stawienie czoła wyzwaniom społecznym.Pod kątem potencjału innowacyjnego i możliwości dostarczania nowych usług, produktów i procesów Europa cechuje się szeregiem słabości strukturalnych, co hamuje trwały wzrost gospodarczy i utrudnia tworzenie miejsc pracy. Do głównych bieżących kwestii należą stosunkowo słabe wyniki Europy w zakresie przyciągania i zatrzymywania talentów; niewystarczający stopień wykorzystania mocnych stron badań naukowych przy tworzeniu wartości gospodarczych lub społecznych; brak wprowadzania wyników badań na rynek; niski poziom przedsiębiorczości i przedsiębiorczego myślenia; niski poziom prywatnych inwestycji w badania i rozwój; niewystarczający dla konkurowania w skali globalnej zakres zasobów – w tym zasobów ludzkich – w ośrodkach doskonałości oraz zbyt wiele barier utrudniających współpracę w ramach trójkąta wiedzy łączącego szkolnictwo wyższe, badania naukowe i innowacje na szczeblu europejskim.

Uzasadnienie i unijna wartość dodana

Jeżeli Europa ma konkurować w skali międzynarodowej, te strukturalne słabości muszą zostać przezwyciężone. Powyższe czynniki są wspólne dla wszystkich państw członkowskich i wpływają na potencjał innowacyjny Unii jako całości.EIT zajmie się tymi kwestiami poprzez promowanie zmian strukturalnych w europejskim krajobrazie innowacji. Będzie on wspierał integrację szkolnictwa wyższego, badań naukowych i innowacji najwyższej jakości, w szczególności poprzez wspólnoty wiedzy i innowacji (WWiI), tworząc tym samym nowe środowiska sprzyjające innowacjom, a także promując i wspierając nowe pokolenie przedsiębiorczych osób oraz stymulując podmioty innowacyjne rozpoczynających działalność gospodarczą (start-up) i tzw. firm odpryskowych (spin-off). Tym samym EIT przyczyni się w pełni do osiągnięcia celów strategii „Europa 2020”, a w szczególności celów inicjatyw przewodnich „Unia innowacji” i „Mobilna młodzież”.Ponadto EIT i jego WWiI powinny dążyć do uzyskania synergii i interakcji między priorytetami programu „Horyzont 2020” i z innymi odnośnymi inicjatywami. W szczególności EIT przyczyni się, za pośrednictwem WWiI, do realizacji celów szczegółowych priorytetu „Wyzwania społeczne” i celu szczegółowego „Wiodąca pozycja w zakresie technologii prorozwojowych i przemysłowych”.

Integracja edukacji i przedsiębiorczości z badaniami naukowymi i innowacjami

Szczególnym zadaniem EIT jest integracja szkolnictwa wyższego i przedsiębiorczości z badaniami naukowymi i innowacjami, jako elementów jednego łańcucha innowacyjnego w Unii i poza nią, co powinno prowadzić m.in. do intensywniejszego wprowadzania na rynek innowacyjnych usług, produktów i procesów.

Logika biznesowa i podejście zorientowane na wyniki

EIT, za pośrednictwem WWiI, działa zgodnie z logiką biznesową i z zastosowaniem podejścia zorientowanego na wyniki. Warunkiem wstępnym jest silne przywództwo: każdą wspólnotą kieruje dyrektor wykonawczy. Partnerów wspólnot reprezentują pojedyncze podmioty prawne, co usprawnia proces decyzyjny. WWiI muszą tworzyć jasno zarysowane coroczne plany operacyjne, określające wieloletnią strategię i obejmujące ambitny portfel działań, od edukacji po zakładanie przedsiębiorstw, z jasnymi celami i założeniami, zmierzające do wywarcia wpływu zarówno rynkowego, jak i społecznego. Obecne zasady dotyczące uczestnictwa, oceny i monitorowania WWiI umożliwiają podejmowanie decyzji w przyspieszonym, biznesowym trybie. Biznes i przedsiębiorcy powinni mieć ważną rolę do odegrania jako motor działalności WWiI, a WWiI powinny móc mobilizować inwestycje i długoterminowe zaangażowanie sektora biznesu.

Przezwyciężanie rozdrobnienia z pomocą długoterminowych, zintegrowanych partnerstw

Wspólnoty wiedzy i innowacji EIT są wysoce zintegrowane i łączą partnerów z sektorów przemysłu – w tym MŚP – szkolnictwa wyższego, instytucji badawczych i technologicznych, znanych z najwyższej jakości swojej działalności, w sposób otwarty, odpowiedzialny i przejrzysty. WWiI umożliwiają partnerom z całej Unii i spoza niej łączenie się w nowe transgraniczne konfiguracje, optymalizację istniejących zasobów, dostęp do nowych możliwości biznesowych poprzez nowe łańcuchy wartości, podejmowanie większego ryzyka i wyzwań o większej skali. W WWiI mogą uczestniczyć nowe podmioty wnoszące wartość dodaną do partnerstwa, m.in. MŚP.

Wspieranie głównego atutu innowacyjnego Europy: wysoce utalentowanych osób

Talent to podstawowy składnik innowacji. EIT wspiera ludzi i interakcje między ludźmi, uznając studentów, naukowców i przedsiębiorców za jądro swojego modelu innowacji. EIT zapewni kulturę przedsiębiorczości i kreatywności oraz interdyscyplinarną edukację utalentowanym osobom, poprzez umożliwienie zdobycia stopnia magistra i doktora ze znakiem EIT, który w zamierzeniu ma stać się uznawanym na świecie symbolem doskonałości. W ten sposób EIT promuje mobilność i szkolenia w ramach trójkąta wiedzy.

Ogólne kierunki działań

EIT działa głównie poprzez WWiI, w szczególności w obszarach, które oferują autentyczny potencjał innowacyjny. Chociaż wspólnoty posiadają ogólną znaczną autonomię w określaniu własnej strategii i działalności, szereg innowacyjnych cech jest wspólny dla wszystkich WWiI i tam należy dążyć do koordynacji i synergii. Ponadto EIT zwiększy swoje oddziaływanie poprzez upowszechnianie dobrych praktyk w zakresie integracji trójkąta wiedzy i rozwoju przedsiębiorczości, włączając istotnych nowych partnerów, w przypadku gdy mogą oni wnieść wartość dodaną, oraz poprzez aktywne wspieranie nowej kultury wymiany wiedzy.

(a) Transfer i wykorzystanie działań z zakresu szkolnictwa wyższego, badań naukowych i innowacji w tworzeniu nowych przedsiębiorstw

EIT ma dążyć do stworzenia warunków sprzyjających rozwinięciu innowacyjnego potencjału ludzi oraz wykorzystaniu ich pomysłów bez względu na zajmowane przez nich miejsce w łańcuchu innowacji. W ten sposób EIT przyczyni się również do rozwiązania „europejskiego paradoksu”, polegającego na tym, że istniejąca doskonała baza badawcza nie jest w pełni wykorzystywana. EIT ma tym samym pomagać we wprowadzaniu pomysłów na rynek. Głównie poprzez WWiI oraz poprzez nacisk na promowanie przedsiębiorczego nastawienia będzie tworzyć nowe możliwości biznesowe, zarówno dla podmiotów rozpoczynających działalność gospodarczą (start-up) i tzw. firm odpryskowych (spin-off), jak też w istniejącym przemyśle. Nacisk zostanie położony na wszystkie formy innowacji, w tym innowacje technologiczne, społeczne i niezwiązane z technologią.

(b) Pionierskie i ukierunkowane na innowacje badania naukowe w podstawowych obszarach zainteresowania gospodarczego i społecznego

Strategia i działania EIT mają być zorientowane na obszary, które cechuje autentyczny potencjał innowacyjny i które mają wyraźnie duże znaczenie w kontekście wyzwań społecznych objętych programem „Horyzont 2020”. Podejmując w kompleksowy sposób najważniejsze wyzwania społeczne, EIT będzie promować inter- i multidyscyplinarne podejścia oraz ułatwiać koncentrację wysiłków badawczych partnerów zaangażowanych w WWiI.

(c) Rozwój utalentowanych, wykwalifikowanych i przedsiębiorczych osób w drodze kształcenia i szkoleń

EIT ma w sposób kompletny integrować edukację i szkolenia na wszystkich etapach kariery oraz wspierać i ułatwiać rozwój nowych i innowacyjnych programów nauczania odzwierciedlających zapotrzebowanie na nowe profile wynikające ze złożonych wyzwań społecznych i gospodarczych. W tym celu EIT będzie przewodzić wysiłkom na rzecz zachęcania do zdobywania nowych wspólnych lub wielokrotnych stopni naukowych i dyplomów w państwach członkowskich, z poszanowaniem zasady pomocniczości.EIT odegra również istotną rolę w dopracowaniu koncepcji „przedsiębiorczości” poprzez programy edukacyjne, promujące przedsiębiorczość w kontekście intensywnego wykorzystania wiedzy, bazując na innowacyjnych badaniach naukowych i wnosząc wkład w rozwiązania bardzo ważne pod względem społecznym.

(d) Upowszechnianie najlepszych praktyk i systematyczna wymiana wiedzy

EIT ma dążyć do promowania nowych podejść do innowacji i opracowania wspólnej kultury innowacji i transferu wiedzy, również w MŚP. Może to nastąpić między innymi poprzez upowszechnianie różnorodnych doświadczeń WWiI za pośrednictwem różnych mechanizmów, takich jak platformy zainteresowanych stron i system stypendiów.

(e) Wymiar międzynarodowy

IT funkcjonuje z uwzględnieniem globalnego kontekstu swojej działalności i ma zmierzać do nawiązania kontaktów z najważniejszymi partnerami międzynarodowymi zgodnie z art. 27 ust. 2. Poprzez zwiększanie skali ośrodków doskonałości za pośrednictwem WWiI oraz sprzyjanie nowym możliwościom edukacyjnym EIT będzie dążyć do tego, by Europa stała się bardziej atrakcyjna dla utalentowanych osób pochodzących z zagranicy.

(f) Zwiększenie wpływu europejskiego poprzez innowacyjny model finansowania

EIT wniesie duży wkład w osiąganie celów określonych w programie „Horyzont 2020”, w szczególności podejmując wyzwania społeczne w sposób uzupełniający inne inicjatywy w tych obszarach. W ramach programu „Horyzont 2020” zbada nowe, uproszczone podejścia do finansowania i zarządzania, odgrywając tym samym pionierską rolę w europejskim krajobrazie innowacyjnym. Część corocznego wkładu zostanie przyznana WWiI w sposób konkurencyjny. Podejście EIT do finansowania będzie ściśle powiązane z mocnym efektem dźwigni, co pomoże w uzyskaniu funduszy zarówno publicznych, jak i prywatnych, na szczeblu krajowym i Unii, i będzie komunikowane w przejrzysty sposób państwom członkowskim i odnośnym zainteresowanym stronom. Ponadto w ramach swojej fundacji EIT wykorzysta nowe instrumenty ukierunkowanego wsparcia indywidualnych działań.

(g) Połączenie rozwoju regionalnego z europejskimi możliwościami

EIT będzie również podejmował działania w ramach polityki regionalnej za pośrednictwem WWiI oraz ośrodków kolokacji – węzłów doskonałości łączących partnerów z dziedziny szkolnictwa wyższego, badań naukowych i biznesu z danego regionu geograficznego. W szczególności EIT zapewni lepsze powiązanie między instytucjami szkolnictwa wyższego, rynkiem pracy a regionalną innowacyjnością i wzrostem gospodarczym, w kontekście regionalnych i krajowych strategii inteligentnej specjalizacji. W ten sposób przyczyni się do osiągnięcia celów unijnej polityki spójności. ";"";"H2020";"H2020-EC";"";"";"2014-09-23 20:21:45";"664513" +"H2020-EU.6.";"pl";"H2020-EU.6.";"";"";"DZIAŁANIA BEZPOŚREDNIE WSPÓLNEGO CENTRUM BADAWCZEGO (JRC) NIENALEŻĄCE DO OBSZARU BADAŃ JĄDROWYCH";"Joint Research Centre (JRC) non-nuclear direct actions";"

DZIAŁANIA BEZPOŚREDNIE WSPÓLNEGO CENTRUM BADAWCZEGO (JRC) NIENALEŻĄCE DO OBSZARU BADAŃ JĄDROWYCH

Integralną część programu „Horyzont 2020” stanowi działalność JRC, zapewniając solidne faktograficzne wsparcie dla polityki Unii. Jest ona zorientowana na potrzeby klientów i uzupełniona działaniami wybiegającymi w przyszłość.

Cel szczegółowy

Cel szczegółowy polega na naukowym i technicznym wsparciu polityk Unii, które będzie zorientowane na klienta, a jednocześnie w sposób elastyczny będzie reagować na nowe wymogi polityki.

Uzasadnienie i unijna wartość dodana

Na okres do 2020 r. Unia ustaliła ambitną agendę polityczną, obejmującą zbiór złożonych i wzajemnie powiązanych wyzwań, takich jak zrównoważone zarządzanie zasobami i konkurencyjność. Aby podołać tym wyzwaniom, potrzebne są solidne dane naukowe obejmujące wiele różnych dyscyplin i umożliwiające rzetelną ocenę wariantów strategicznych. JRC, pełniąc rolę służby naukowej wspierającej proces decyzyjny w Unii, będzie udzielać wymaganego wsparcia naukowego i technicznego na wszystkich etapach cyklu decyzyjnego, od zamysłu po realizację i ocenę. Aby przyczynić się do realizacji tego szczegółowego celu JRC skupi się w swoich badaniach na priorytetach politycznych Unii, a jednocześnie będzie podnosić swoje kompetencje przekrojowe i zacieśni współpracę z państwami członkowskimi.Niezależność JRC od szczególnych interesów, prywatnych czy państwowych, w połączeniu z jego rolą naukowo-technicznego punktu odniesienia, umożliwia mu ułatwianie osiągnięcia niezbędnego konsensusu między zainteresowanymi stronami a decydentami. Badania naukowe JRC przynoszą korzyści państwom członkowskim i obywatelom Unii, co jest najbardziej widoczne w takich obszarach, jak zdrowie i ochrona konsumentów, środowisko, bezpieczeństwo i ochrona oraz zarządzanie kryzysami i klęskami żywiołowymi.Szczególnie państwa członkowskie i regiony skorzystają ze wsparcia na rzecz ich strategii inteligentnej specjalizacji.JRC stanowi integralną część EPB i nadal będzie aktywnie wspierać jej funkcjonowanie poprzez ścisłą współpracę z partnerami i zainteresowanymi stronami, poprzez maksymalizację dostępu do swoich obiektów i szkolenie naukowców oraz poprzez ścisłą współpracę z państwami członkowskimi i instytucjami międzynarodowymi, które realizują podobne cele. To przyczyni się również do integracji nowych państw członkowskich i państw stowarzyszonych, którym JRC będzie nadal zapewniać specjalne kursy szkoleniowe na temat podstaw naukowo-technicznych unijnego dorobku prawnego. JRC zapewni koordynację ze stosownymi pozostałymi celami szczegółowymi programu „Horyzont 2020”. W celu uzupełnienia swoich działań bezpośrednich oraz dalszej integracji i tworzenia sieci kontaktów w europejskiej przestrzeni badawczej JRC może uczestniczyć w działaniach pośrednich programu „Horyzont 2020” oraz w instrumentach koordynacji w obszarach, w których dysponuje wiedzą specjalistyczną umożliwiającą osiągnięcie wartości dodanej Unii.

Ogólne kierunki działań

Działania JRC w ramach programu „Horyzont 2020” skupią się na priorytetach polityki Unii oraz na wyzwaniach społecznych, których one dotyczą. Działania te są dostosowane do celów strategii „Europa 2020” i do tytułów „Bezpieczeństwo i obywatelstwo” oraz „Globalny wymiaru Europy” wieloletnich ram finansowych na lata 2014-2020.Głównymi obszarami kompetencji JRC będą energia, transport, środowisko i zmiana klimatu, rolnictwo i bezpieczeństwo żywnościowe, zdrowie i ochrona konsumentów, technologie informacyjno-komunikacyjne, materiały odniesienia oraz bezpieczeństwo i ochrona (w tym bezpieczeństwo jądrowe i ochrona w ramach programu Euratom). Działania JRC w tych dziedzinach będą prowadzone z uwzględnieniem odnośnych inicjatyw na szczeblu regionów, państw członkowskich lub Unii, w ramach kształtowania EPB.Te obszary kompetencji zostaną w istotny sposób wzmocnione pod względem zdolności, które umożliwią przejście całego cyklu politycznego i dokonanie oceny wariantów strategicznych. Obejmuje to:(a) przewidywania i prognozy – aktywne pozyskiwanie informacji strategicznych o tendencjach i wydarzeniach w dziedzinie naukowej, technicznej i społecznej oraz ich możliwych konsekwencji dla polityki publicznej;(b) ekonomię – do celów zintegrowanych usług obejmujących zarówno aspekty naukowo-techniczne, jak i makroekonomiczne;(c) modelowanie – z naciskiem na zrównoważony charakter i ekonomię oraz zmniejszenie zależności Komisji od zewnętrznych dostawców ważnych analiz scenariuszy;(d) analizę polityczną – co umożliwi międzysektorową analizę wariantów strategicznych;(e) ocenę skutków – dostarczanie danych naukowych na poparcie wariantów strategicznych.JRC ma nadal dążyć do doskonałości w badaniach naukowych i rozległych interakcji z instytucjami badawczymi, co ma stanowić podstawę wiarygodnego i solidnego naukowo-technicznego wsparcia polityki. W tym celu zacieśni współpracę z partnerami europejskimi i międzynarodowymi, między innymi poprzez uczestnictwo w działaniach pośrednich. Będzie także prowadzić badania poszukiwawcze i, stosując podejście selektywne, budować kompetencje w nowych dziedzinach mających znaczenie dla polityki.JRC skoncentruje się na następujących kwestiach:

Doskonała baza naukowa

(Zobacz także PRIORYTET „Doskonała baza naukowa” (H2020-EU.1.)) (http://cordis.europa.eu/programme/rcn/664091_en.html)Prowadzenie badań naukowych w celu wzmocnienia naukowej bazy faktograficznej na potrzeby kształtowania polityki oraz eksploracja nowych dziedzin nauki i techniki, w tym w drodze programu badań poszukiwawczych.

Wiodąca pozycja w przemyśle

(Patrz także PRIORYTET „Wiodąca pozycja w przemyśle” (H2020-EU.2)) (http://cordis.europa.eu/programme/rcn/664143_en.html)Wnoszenie wkładu w europejską konkurencyjność poprzez wsparcie procesu normalizacji i norm badaniami przednormatywnymi, przygotowaniem materiałów i pomiarów odniesienia oraz harmonizacją metodyki w pięciu kluczowych obszarach (energia, transport, inicjatywa przewodnia, „agenda cyfrowa dla Europy”, ochrona i bezpieczeństwo, ochrona konsumentów). Oceny bezpieczeństwa nowych technologii w takich dziedzinach, jak energia i transport oraz zdrowie i ochrona konsumentów. Wkład w ułatwianie wykorzystania, normalizacji i walidacji technologii kosmicznych i danych pozyskiwanych w przestrzeni kosmicznej, w szczególności z myślą o wyzwaniach społecznych.

Wyzwania społeczne

(Patrz także PRIORYTET „Wyzwania społeczne” (H2020-EU.3.))(http://cordis.europa.eu/programme/rcn/664235_en.html)

(a) Zdrowie, zmiany demograficzne i dobrostan

(Patrz także H2020-EU.3.1.) (http://cordis.europa.eu/programme/rcn/664237_en.html)Wkład w zdrowie i ochronę konsumentów poprzez wsparcie naukowe i techniczne w takich obszarach jak żywność, pasza i produkty konsumpcyjne; środowisko i zdrowie; diagnostyka medyczna i badania przesiewowe; żywienie i dieta.

(b) Bezpieczeństwo żywnościowe, zrównoważone rolnictwo i leśnictwo, badania mórz i wód śródlądowych i biogospodarka

(Patrz także H2020-EU.3.2.) (http://cordis.europa.eu/programme/rcn/664237_en.html)Wsparcie rozwoju, wdrożenia i monitorowania europejskiej polityki w zakresie rolnictwa i rybołówstwa, w tym dotyczącej bezpieczeństwa żywności i bezpieczeństwa żywnościowego, oraz rozwój biogospodarki poprzez np. prognozy dotyczące produkcji roślinnej, analizy techniczne i społeczno-gospodarcze oraz modelowanie, a także promowanie zdrowych i produktywnych mórz.

(c) Bezpieczna, czysta i efektywna energia

(Patrz także H2020-EU.3.3.) (http://cordis.europa.eu/programme/rcn/664237_en.html)Wsparcie celów w zakresie energii klimatu 20/20/20 poprzez badania naukowe dotyczące technologicznych i gospodarczych aspektów dostaw energii, sprawności, technologii niskoemisyjnych oraz elektroenergetycznych sieci przesyłowych.

(d) Inteligentny, zielony i zintegrowany transport

(Patrz także H2020-EU.3.4.) (http://cordis.europa.eu/programme/rcn/664357_en.html)Wsparcie unijnej polityki dotyczącej zrównoważonej i bezpiecznej mobilności osób i towarów poprzez badania laboratoryjne, podejścia oparte na modelowaniu i monitorowaniu, w tym technologie niskoemisyjne w transporcie, takie jak elektryfikacja, ekologiczne i oszczędne pojazdy, alternatywne paliwa oraz inteligentne systemy transportowe.

(e) Działania w dziedzinie klimatu, środowisko, efektywna gospodarka zasobami i surowce

(Patrz także H2020-EU.3.5.) (http://cordis.europa.eu/programme/rcn/664389_en.html)Analiza międzysektorowych wyzwań związanych ze zrównoważonym zarządzaniem zasobami naturalnymi poprzez monitorowanie kluczowych zmiennych środowiskowych i rozwój zintegrowanych ram modelowania na potrzeby oceny wpływu na zrównoważony rozwój.Wsparcie zasobooszczędności, ograniczenia emisji i zrównoważonych dostaw surowców poprzez zintegrowane społeczne, środowiskowe i gospodarcze oceny ekologicznych procesów produkcyjnych, technologii oraz produktów i usług.Wsparcie osiągania celów unijnej polityki rozwojowej poprzez badania naukowe mające ułatwić zapewnienie odpowiednich dostaw podstawowych zasobów, przy położeniu nacisku na monitorowanie parametrów środowiska i zasobów, analizy dotyczące bezpieczeństwa żywności i bezpieczeństwa żywnościowego oraz transfer wiedzy.

(f) Europa w zmieniającym się świecie – integracyjne, innowacyjne i refleksyjne społeczeństwa

(Patrz także H2020-EU.3.6.) (http://cordis.europa.eu/programme/rcn/664435_en.html)Wkład w realizację inicjatywy przewodniej „Unia innowacji” i jej monitorowanie poprzez makroekonomiczne analizy czynników stymulujących i barier dla badań naukowych i innowacji, a także opracowanie metodyki, tablic wyników oraz wskaźników.Wspieranie EPB poprzez monitorowanie funkcjonowania i analizowanie czynników stymulujących i hamujących niektóre z jej kluczowych elementów oraz poprzez tworzenie sieci badawczych, szkolenia, otwarcie obiektów i baz danych JRC dla użytkowników w państwach członkowskich, kandydujących i stowarzyszonych.Wkład w osiągnięcie kluczowych celów inicjatywy przewodniej‚ „agendy cyfrowej dla Europy” poprzez ilościowe i jakościowe analizy aspektów gospodarczych i społecznych (gospodarka cyfrowa, społeczeństwo cyfrowe, życie cyfrowe).

(g) Bezpieczne społeczeństwa – ochrona wolności i bezpieczeństwa Europy i jej obywateli

(Patrz także H2020-EU.3.7.) (http://cordis.europa.eu/programme/rcn/664463_en.html)Wsparcie bezpieczeństwa wewnętrznego poprzez identyfikację i ocenę zagrożeń dla podstawowej infrastruktury jako zasadniczego elementu funkcji społecznych, a także poprzez ocenę wyników działania oraz ocenę społeczną i etyczną technologii związanych z tożsamością cyfrową. Podjęcie wyzwań bezpieczeństwa globalnego, w tym powstających lub hybrydowych zagrożeń, poprzez rozwój zaawansowanych narzędzi eksploracji i analizy danych, a także zarządzania kryzysowego.Zwiększenie zdolności Unii w zakresie zarządzania klęskami żywiołowymi i katastrofami spowodowanymi przez człowieka poprzez wzmocnienie monitorowania infrastruktury i rozwój urządzeń do przeprowadzania testów oraz globalnych systemów informacyjnych służących wczesnemu ostrzeganiu przed różnymi zagrożeniami i zarządzaniu ryzykiem, z wykorzystaniem satelitarnych platform obserwacji Ziemi. ";"";"H2020";"H2020-EC";"";"";"2014-09-23 20:21:28";"664511" +"H2020-EU.6.";"it";"H2020-EU.6.";"";"";"AZIONI DIRETTE NON NUCLEARI DEL CENTRO COMUNE DI RICERCA (CCR)";"Joint Research Centre (JRC) non-nuclear direct actions";"

AZIONI DIRETTE NON NUCLEARI DEL CENTRO COMUNE DI RICERCA (CCR)

Le attività del CCR costituiscono parte integrante di Orizzonte 2020 al fine di fornire un sostegno solido e documentato alle politiche dell'Unione. A tal fine si tengono in considerazione le esigenze dei consumatori, integrate da attività orientate al futuro.

Obiettivo specifico

L'obiettivo specifico è fornire un sostegno scientifico e tecnico alle politiche dell'Unione, basato sulla domanda, con la flessibilità necessaria per rispondere alle nuove esigenze strategiche.

Motivazione e valore aggiunto dell'Unione

L'Unione ha definito un'ambiziosa agenda politica fino al 2020 che affronta una serie di sfide complesse e interrelate, quali la gestione sostenibile delle risorse e la competitività. Al fine di affrontare efficacemente queste sfide, è necessario disporre di solide prove scientifiche che interessano diverse discipline scientifiche e consentono una corretta valutazione delle opzioni politiche. Il CCR, che svolge il suo ruolo di servizio scientifico a beneficio delle strategie dell'Unione, fornirà il necessario sostegno scientifico e tecnico in tutte le fasi del ciclo decisionale, dalla concezione all'attuazione e alla valutazione. Al fine di contribuire a tale obiettivo specifico, esso concentrerà chiaramente la propria ricerca sulle priorità politiche dell'Unione, migliorando nel contempo le competenze trasversali e la cooperazione con gli Stati membri.L'indipendenza del CCR da interessi particolari, privati o nazionali, congiuntamente al suo ruolo di referente tecnico-scientifico, agevola il raggiungimento del necessario consenso tra le parti interessate e i responsabili politici. Gli Stati membri e i cittadini dell'Unione traggono vantaggio dalle attività di ricerca del CCR, in maniera più evidente in settori quali la sanità e la tutela dei consumatori, l'ambiente e la sicurezza, nonché la gestione delle crisi e delle catastrofi.Più nello specifico, gli Stati membri e le regioni trarranno vantaggio altresì dal sostegno alle loro strategie di specializzazione intelligente.Il CCR è parte integrante del SER e continuerà a sostenerne attivamente il funzionamento attraverso una stretta collaborazione con i suoi pari e con i soggetti interessati, massimizzando l'accesso ai suoi impianti e attraverso la formazione di ricercatori, nonché mediante la stretta collaborazione con gli Stati membri e le istituzioni internazionali che perseguono obiettivi analoghi. Ciò promuoverà inoltre l'integrazione dei nuovi Stati membri e paesi associati; per questi ultimi il CCR continuerà a fornire corsi di formazione specifica sulla base tecnico-scientifica del corpus del diritto dell'Unione. Il CCR stabilirà collegamenti di coordinamento con altri obiettivi specifici pertinenti di Orizzonte 2020. Come complemento alle sue azioni dirette e ai fini di un'ulteriore integrazione e interconnessione nel SER, il CCR può anche partecipare alle azioni indirette e agli strumenti di coordinamento di Orizzonte 2020 nei settori in cui dispone delle competenze necessarie a produrre un valore aggiunto dell'Unione.

Le grandi linee delle attività

Le attività del CCR in Orizzonte 2020 saranno incentrate sulle priorità politiche dell'Unione e sulle sfide per la società da esse affrontate. Tali attività sono in linea con gli obiettivi della strategia Europa 2020 e con le rubriche ""Sicurezza e cittadinanza"" e ""Europa globale"" del quadro finanziario pluriennale per il periodo 2014-2020.I principali settori di competenza del CCR saranno l'energia, i trasporti, l'ambiente e i cambiamenti climatici, l'agricoltura e la sicurezza alimentare, la salute e la tutela dei consumatori, le tecnologie dell'informazione e della comunicazione, i materiali di riferimento e la sicurezza (compresa la sicurezza nucleare del programma Euratom). Le attività del CCR in tali settori saranno svolte tenendo conto delle pertinenti iniziative a livello di regioni, di Stati membri o dell'Unione, nella prospettiva di dare forma al SER.Tali settori di competenza saranno notevolmente rafforzati con la capacità di affrontare l'intero ciclo programmatico e di valutare le diverse opzioni politiche. Ciò comprende:(a) anticipazione e previsione: intelligence strategica proattiva sulle tendenze e gli eventi che si verificano nella scienza, nella tecnologia e nella società e sulle loro possibili implicazioni per le politiche pubbliche;(b) economia: per un servizio integrato comprendente aspetti sia tecnico-scientifici sia macroeconomici;(c) modellizzazione: incentrate sulla sostenibilità e l'economia, per rendere la Commissione meno dipendente dai fornitori esterni per le analisi di scenario fondamentali;(d) analisi politica: per consentire l'esplorazione intersettoriale delle opzioni politiche;(e) valutazione d'impatto: produzione di prove scientifiche a sostengo delle opzioni politiche.Il CCR continuerà a perseguire l'eccellenza della ricerca e ampie interazioni con gli istituti di ricerca come base di un sostegno politico credibile e solido in ambito tecnico-scientifico. A tal fine, rafforzerà la collaborazione con partner europei e internazionali, tra l'altro, mediante la partecipazione alle azioni indirette. Effettuerà inoltre, su base selettiva, ricerca esplorativa e sviluppo di competenze nei settori emergenti e di rilievo per i processi politici.Il CCR si concentra sui seguenti aspetti:

Eccellenza scientifica

(Vedere anche la PRIORITÀ ""Eccellenza scientifica"" (H2020-EU.1.)) (http://cordis.europa.eu/programme/rcn/664091_en.html)Effettuare una ricerca volta a rafforzare la base di prove scientifiche del processo decisionale ed esaminare i settori emergenti della scienza e della tecnologia, anche per mezzo di un programma di ricerca esplorativa.

Leadership industriale

(Vedere anche la PRIORITÀ ""Leadership industriale"" (H2020-EU.2)) (http://cordis.europa.eu/programme/rcn/664143_en.html)Contribuire alla competitività europea grazie al sostegno al processo di standardizzazione e alle norme con ricerca prenormativa, sviluppo di materiali e misure di riferimento e all'armonizzazione di metodologie in cinque settori chiave (energia, trasporti, l'iniziativa faro ""Un'agenda digitale europea"", sicurezza, protezione dei consumatori). Effettuare valutazioni di sicurezza delle nuove tecnologie in settori quali energia e trasporti, salute e tutela dei consumatori. Contribuire ad agevolare l'utilizzo, la standardizzazione e la convalida delle tecnologie e dei dati spaziali, in particolare per far fronte alle sfide per la società.

Sfide per la società

(Vedere anche la PRIORITÀ ""Sfide per la società"" (H2020-EU.3.)) (http://cordis.europa.eu/programme/rcn/664235_en.html)

(a) Salute, evoluzione demografica e benessere

(Vedere anche H2020-EU.3.1.) (http://cordis.europa.eu/programme/rcn/664237_en.html)Contribuire alla salute e alla tutela dei consumatori mediante un sostegno tecnico e scientifico nei settori quali prodotti alimentari, mangimi e prodotti di consumo; ambiente e salute; diagnostiche e pratiche di screening in ambito sanitario, nonché alimentazione e diete.

(b) Sicurezza alimentare, agricoltura e silvicoltura sostenibili, ricerca marina, marittima e sulle acque interne e bioeconomia

(Vedere anche H2020-EU.3.2.) (http://cordis.europa.eu/programme/rcn/664237_en.html)Sostenere lo sviluppo, l'attuazione e il monitoraggio dell'agricoltura europea e della politica della pesca, compresi la sicurezza alimentare e lo sviluppo di una bioeconomia attraverso, ad esempio, previsioni di produzione delle colture, analisi e modellizzazione tecniche e socioeconomiche, nonché promozione di mari sani e produttivi.

(c) Energia sicura, pulita ed efficiente

(Vedere anche H2020-EU.3.3.) (http://cordis.europa.eu/programme/rcn/664237_en.html)Sostenere gli obiettivi ""20-20-20"" in materia di clima e di energia con la ricerca sugli aspetti tecnologici ed economici dell'approvvigionamento energetico, dell'efficienza, delle tecnologie a basse emissioni di carbonio e delle reti di trasmissione dell'elettricità/energia.

(d) Trasporti intelligenti, verdi e integrati

(Vedere anche H2020-EU.3.4.) (http://cordis.europa.eu/programme/rcn/664357_en.html)Sostegno della politica dell'Unione alla mobilità sostenibile e sicura di persone e di merci con studi di laboratorio, approcci di modellizzazione e di monitoraggio, comprese le tecnologie a basse emissioni di carbonio per i trasporti, quali l'elettrificazione, i veicoli puliti ed efficienti e i combustibili alternativi nonché i sistemi di mobilità intelligente.

(e) Azione per il clima, ambiente, efficienza delle risorse e materie prime

(Vedere anche H2020-EU.3.5.) (http://cordis.europa.eu/programme/rcn/664389_en.html)Esaminare le sfide intersettoriali della gestione sostenibile delle risorse naturali mediante il monitoraggio delle variabili ambientali essenziali e lo sviluppo di un quadro di modellizzazione integrato per la valutazione della sostenibilità.Sostenere l'efficienza delle risorse, la riduzione delle emissioni e l'approvvigionamento sostenibile delle materie prime attraverso valutazioni integrate in ambito sociale, ambientale ed economico dei processi produttivi, delle tecnologie, dei prodotti e dei servizi""puliti"".Sostenere gli obiettivi dell'Unione in materia di politica di sviluppo mediante la ricerca mirata a contribuire a garantire un approvvigionamento adeguato di risorse essenziali, con un'attenzione particolare al monitoraggio dei parametri ambientali e delle risorse connesse, delle analisi relative alla sicurezza alimentare, nonché del trasferimento di conoscenze.

(f) L'Europa in un mondo che cambia - società inclusive, innovative e riflessive

(Vedere anche H2020-EU.3.6.) (http://cordis.europa.eu/programme/rcn/664435_en.html)Alimentare e controllare l'attuazione dell'iniziativa faro ""Unione dell'innovazione"" grazie ad analisi macroeconomiche dei fattori e degli ostacoli alla ricerca e all'innovazione, e mediante lo sviluppo di metodologie, quadri di valutazione e indicatori.Sostegno al SER mediante il monitoraggio del funzionamento dello SER e l'analisi di fattori e ostacoli di alcuni dei suoi elementi chiave, nonché attraverso la creazione di reti di ricerca, la formazione e l'apertura delle strutture e delle banche dati del CCR per gli utenti negli Stati membri e nei paesi candidati e associati.Contribuire agli obiettivi fondamentali dell'iniziativa faro ""Un'agenda digitale europea"" mediante analisi qualitative e quantitative degli aspetti economici e sociali (economia digitale, società digitale, vita digitale).

(g) Società sicure - proteggere la libertà e la sicurezza dell'Europa e dei suoi cittadini

(Vedere anche H2020-EU.3.7.) (http://cordis.europa.eu/programme/rcn/664463_en.html)Sostegno alla sicurezza interna attraverso l'identificazione e la valutazione delle vulnerabilità delle infrastrutture cruciali quali componenti essenziali delle funzioni sociali e attraverso la valutazione operativa della prestazione e la valutazione sociale ed etica delle tecnologie connesse all'identità digitale. Affrontare le sfide mondiali per la sicurezza comprese le minacce emergenti o ibride attraverso lo sviluppo di strumenti avanzati per l'estrazione e l'analisi di informazioni nonché per la gestione delle crisi.Rafforzare la capacità dell'Unione di gestione delle catastrofi naturali o causate dall'uomo, rafforzando il monitoraggio delle infrastrutture e lo sviluppo di centri di sperimentazione e di sistemi di allerta precoce globale a impostazione multirischio e di sistemi informativi di gestione del rischio, avvalendosi dei quadri di osservazione della terra via satellite. ";"";"H2020";"H2020-EC";"";"";"2014-09-23 20:21:28";"664511" +"H2020-EU.7.";"de";"H2020-EU.7.";"";"";"DAS EUROPÄISCHE INNOVATIONS- UND TECHNOLOGIEINSTITUT (EIT)";"European Institute of Innovation and Technology (EIT)";"

DAS EUROPÄISCHE INNOVATIONS- UND TECHNOLOGIEINSTITUT (EIT)

Das EIT spielt eine wichtige Rolle bei der Zusammenführung von exzellenter Forschung, Innovation und Hochschulbildung zu einem integrierten Wissensdreieck. Hierzu stützt sich das EIT vor allem auf die KIC. Ferner sorgt es dafür, dass durch gezielte Maßnahmen zur Verbreitung und Weitergabe von Wissen die Erfahrungen zwischen den KIC und über diese hinaus weitergegeben und damit Innovationsmodelle unionsweit schneller aufgegriffen werden.

Einzelziel

Das Einzelziel besteht in der Integration des Wissensdreiecks aus Hochschulbildung, Forschung und Innovation und damit in der Stärkung der Innovationskapazität der Union und der Bewältigung gesellschaftlicher Herausforderungen.Im Hinblick auf seine Innovationskapazität und die Fähigkeit, neue Dienstleistungen, Produkte und Prozesse hervorzubringen, weist Europa einige strukturelle Schwächen auf, was ein nachhaltiges Wirtschaftswachstum und die Schaffung von Arbeitsplätzen beeinträchtigt. Zu den Hauptproblemen zählen die geringen Anreize für Talente, nach Europa zu kommen und dort zu bleiben, die zu geringe Nutzung der vorhandenen Forschungsstärken für die sozioökonomische Wertschöpfung, das Fehlen von auf den Markt gebrachten Forschungsergebnissen, der niedrige Grad unternehmerischer Tätigkeit und der Einstellung, die geringe Fremdfinanzierung privater Investitionen in Forschung und Entwicklung, der für den globalen Wettbewerb unzureichende Umfang der Ressourcen, einschließlich der Humanressourcen, in Exzellenzzentren und eine übermäßige Zahl von Hindernissen für die Zusammenarbeit im Wissensdreieck von Hochschulbildung, Forschung und Innovation auf europäischer Ebene.

Begründung und Mehrwert für die Union

Diese strukturellen Schwächen gilt es zu überwinden, wenn Europa international mithalten will. Die genannten Probleme gelten für alle Mitgliedstaaten und beeinträchtigen die Innovationskapazität der Union insgesamt.Das EIT wird sich mit diesen Fragen befassen und strukturelle Veränderungen in der europäischen Innovationslandschaft fördern. Hierzu wird es die Integration der Hochschulbildung, Forschung und Innovation auf höchstem Niveau – insbesondere durch seine KIC – unterstützen und so neue innovationsförderliche Rahmenbedingungen schaffen und eine neue Generation von Unternehmern unterstützen sowie die Schaffung innovativer Spin-offs und Start-ups anregen. Damit wird das EIT einen umfassenden Beitrag zu den Zielen der Strategie Europa 2020, insbesondere zu den Leitinitiativen ""Innovationsunion"" und ""Jugend in Bewegung"" leisten.Ferner sollten das EIT und seine KIC schwerpunktübergreifende Synergie und Interaktion im Rahmen von Horizont 2020 und mit anderen einschlägigen Initiativen anstreben. Insbesondere wird das EIT über die KIC zum Schwerpunkt ""Gesellschaftliche Herausforderungen"" und dem Einzelziel ""Führende Rolle bei grundlegenden und industriellen Technologien"" beitragen.

Verknüpfung von Bildung und unternehmerischem Denken mit Forschung und Innovation

Das besondere Merkmal des EIT ist die Verknüpfung von Hochschulbildung, unternehmerischem Denken, Forschung und Innovation zu einer einzigen Innovationskette in der Union und darüber hinaus, die unter anderem zu einer Zunahme der auf den Markt gebrachten innovativen Dienste, Produkte und Verfahren führen sollte.

Unternehmenslogik und Ergebnisorientierung

Das EIT lässt sich über seine KIC von unternehmerischem Denken leiten und ist ergebnisorientiert. Voraussetzung ist eine starke Führung: Für jede KIC ist ein Geschäftsführer zuständig. Die Partner dieser KIC sind jeweils mit einer einzigen Rechtsperson vertreten, um eine straffere Entscheidungsfindung zu ermöglichen. Die KIC müssen einen genau festgelegten jährlichen Geschäftsplan mit einer Mehrjahresstrategie und mit einem ehrgeizigen Portfolio von Tätigkeiten vorlegen, die von Bildung bis zu Unternehmensgründungen reichen, für die klare Ziele und Leistungsvorgaben festgelegt sind und deren Auswirkungen sowohl auf den Markt als auch auf die Gesellschaft berücksichtigt werden. Die derzeit geltenden Vorschriften für die Teilnahme, Bewertung und Überwachung der KIC ermöglichen zügige Entscheidungen ähnlich wie bei Unternehmen. Die Unternehmen und die Unternehmer sollten eine starke Rolle als Motor für die Tätigkeiten im Rahmen der KIC übernehmen, und die KIC sollten in der Lage sein, Investitionen und ein langfristiges Engagement seitens der Privatwirtschaft zu mobilisieren.

Überwindung der Fragmentierung mit Hilfe langfristiger integrierter Partnerschaften

Die KIC des EIT sind hoch integrierte, auf offene, rechenschaftspflichtige und transparente Art zustande gekommene Zusammenschlüsse von renommierten Partnern aus Industrie (einschließlich KMU), Hochschulen sowie Forschungs- und Technologieinstituten. Die KIC ermöglichen es Partnern aus der gesamten Union und aus Drittländern, in neuen grenzüberschreitenden Konfigurationen zusammenzuarbeiten, die vorhandenen Ressourcen zu optimieren und den Zugang zu neuen Geschäftsmöglichkeiten über neue Wertschöpfungsketten zu eröffnen, um riskantere und größere Herausforderungen zu bewältigen. Die KIC stehen der Teilnahme neuer Teilnehmer, einschließlich KMU, offen, die einen Mehrwert in die Partnerschaft einbringen.

Förderung des wichtigsten Innovationskapitals Europa, nämlich seiner hoch talentierten Menschen: nämlich seiner hoch talentierten Menschen:

Talent ist der Schlüssel zur Innovation. Das EIT unterstützt Menschen und deren Interaktionen, indem es Studierende, Forscher und Unternehmer ins Zentrum seines Innovationsmodells stellt. Das EIT bietet eine Unternehmer- und Kreativkultur sowie eine disziplinenübergreifende Bildung für talentierte Menschen mittels der Master- und PhD-Abschlüsse des EIT, die zu einem international anerkannten Markenzeichen für Exzellenz werden sollen. Hierbei legt das EIT großen Wert auf die Mobilität und die Weiterbildung innerhalb des Wissensdreiecks.

Einzelziele und Tätigkeiten in Grundzügen

Das EIT wird hauptsächlich über die KIC insbesondere in den Bereichen tätig, die ein echtes Innovationspotenzial bieten. Zwar verfügen die KIC insgesamt über ein erhebliches Maß an Autonomie bei der Festlegung ihrer Strategien und Tätigkeiten, einige Innovationsmerkmale sind jedoch allen gemein, wenn es um Koordinierung und Synergien geht. Das EIT verstärkt darüber hinaus seine Wirkung, indem es bewährte Verfahren für die Integration des Wissensdreiecks und die Entwicklung der unternehmerischen Initiative verbreitet, neue Partner integriert, wann immer diese einen Mehrwert bieten, und aktiv eine neue Kultur der Wissensweitergabe fördert.

(a) Vermittlung und praktische Anwendung von Hochschulbildung, Forschung und Innovation im Hinblick auf die Gründung neuer Unternehmen

Das EIT soll ein günstiges Umfeld mit dem Ziel schaffen, das Innovationspotenzial von Menschen weiterzuentwickeln und ihre Ideen zu nutzen, und zwar unabhängig davon, wo sie sich in der Innovationskette befinden. Damit will das EIT auch zur Lösung des ""europäischen Paradoxons"" beitragen, dass die in der Forschung vorhandene Exzellenz bei weitem nicht voll ausgeschöpft wird. Hierfür wird das EIT die Vermarktung der Ideen unterstützen. Vor allem über seine KIC und seine Ausrichtung auf unternehmerisches Denken wird es neue Geschäftsmöglichkeiten in Form von Start-ups und Spin-offs, auch innerhalb vorhandener Branchen, schaffen. Der Schwerpunkt wird auf allen Formen von Innovation liegen, einschließlich technologischer, sozialer und nichttechnologischer Innovation.

(b)Modernste innovationsorientierte Forschung auf Gebieten von besonderem Interesse für Wirtschaft und Gesellschaft

Strategie und Tätigkeiten des EIT sind auf Bereiche ausgerichtet, die ein echtes Innovationspotenzial bieten und für die im Rahmen von Horizont 2020 behandelten gesellschaftlichen Herausforderungen erkennbar von Bedeutung sind. Durch die umfassende Behandlung der größten gesellschaftlichen Herausforderungen fördert das EIT inter- und multidisziplinäre Konzepte und unterstützt die entsprechende Konzentration der Forschungsanstrengungen der Partner in den KIC.

(c) Aus- und Weiterbildung zur Förderung talentierter, qualifizierter unternehmerischer Persönlichkeiten

Das EIT bietet eine vollständige Integration von Bildung und Ausbildung in allen Phasen der beruflichen Laufbahn und unterstützt und erleichtert die Ausarbeitung von neuen und innovativen Lehrplänen, die den infolge der komplexen sozioökonomischen Herausforderungen notwendigen neuen Profilen Rechnung tragen. Dem EIT wird daher – unter Einhaltung des Subsidiaritätsprinzips – eine Schlüsselrolle bei der Förderung neuer gemeinsamer oder mehrfacher Abschlüsse und Diplome in den Mitgliedstaaten zukommen.Eine wichtige Rolle spielt das EIT auch bei der Feinabstimmung des Konzepts des ""unternehmerischen Denkens"", und zwar über seine Bildungsprogramme, die unternehmerisches Denken in einem wissensintensiven Kontext vermitteln und sich dabei auf innovative Forschung stützen und zu Lösungen von hoher gesellschaftlicher Relevanz beitragen.

(d) Verbreitung bewährter Verfahren und systematische Weitergabe von Wissen

Das EIT soll – auch in Bezug auf KMU – eine Vorreiterrolle bei neuen Innovationskonzepten einnehmen und eine gemeinsame Kultur des Innovations- und Wissenstransfers aufbauen. Dies könnte unter anderem erfolgen, indem die unterschiedlichen Erfahrungen der KIC über verschiedene Verbreitungsmechanismen, wie etwa Plattformen interessierter Kreise und Stipendienprogramme, weitergegeben werden.

(e) Internationale Dimension

Das EIT handelt im Bewusstsein seines globalen Umfelds und unterstützt die Vernetzung mit wichtigen internationalen Partnern gemäß Artikel 27 Absatz 2. Durch die Ausweitung der Exzellenzzentren mit Hilfe der KIC und durch die Förderung neuer Bildungsmöglichkeiten soll das EIT die Attraktivität Europas für Talente von außen erhöhen.

(f) Stärkung der europaweiten Wirkung mit Hilfe innovativer Finanzierungsmodelle

Das EIT wird einen beachtlichen Beitrag zu den in Horizont 2020 festgelegten Zielen leisten, indem es sich insbesondere mit den gesellschaftlichen Herausforderungen befasst und hierbei andere Initiativen auf diesem Gebiet ergänzt. Im Rahmen von Horizont 2020 wird es neue und vereinfachte Finanzierungs- und Governance-Konzepte erproben und dabei innerhalb der europäischen Innovationslandschaft eine Vorreiterrolle spielen. Ein Teil der jährlichen Zahlungen wird den KIC aufbauend auf Wettbewerbsergebnissen zugewiesen. Der Finanzierung des EIT liegt eine starke Hebelwirkung zugrunde, mit der sowohl öffentliche als auch private Mittel auf nationaler und auf Unionsebene mobilisiert werden sollen; das Konzept wird den Mitgliedstaaten und den einschlägigen Akteuren in transparenter Weise mitgeteilt. Darüber hinaus wird es auf vollständig neue Instrumente zurückgreifen, um einzelne Tätigkeiten über die EIT-Stiftung gezielt zu unterstützen.

(g) Verknüpfung der regionalen Entwicklung mit europäischen Chancen

Über die KIC und ihre gemeinsamen Exzellenzzentren, die Partner aus Bildung, Forschung und Wirtschaft an einem Standort zusammenbringen, wird das EIT auch mit der Regionalpolitik verzahnt. So sollen vor allem im Zusammenhang mit regionalen und nationalen Strategien für eine intelligente Spezialisierung Hochschuleinrichtungen besser mit dem Arbeitsmarkt und mit Innovation und Wachstum in den Regionen vernetzt werden. ";"";"H2020";"H2020-EC";"";"";"2014-09-23 20:21:45";"664513" +"H2020-EU.6.";"fr";"H2020-EU.6.";"";"";"LES ACTIONS DIRECTES NON NUCLÉAIRES DU CENTRE COMMUN DE RECHERCHE (JRC)";"Joint Research Centre (JRC) non-nuclear direct actions";"

LES ACTIONS DIRECTES NON NUCLÉAIRES DU CENTRE COMMUN DE RECHERCHE (JRC)

Les activités du JRC font partie intégrante d'Horizon 2020. Elles étaieront ainsi les politiques de l'Union par un solide corpus de données et d'informations, constitué en fonction des besoins des services demandeurs et complété par des activités de prospective.

Objectif spécifique

L'objectif spécifique est d'apporter un soutien scientifique et technique personnalisé aux politiques de l'Union en répondant avec souplesse aux nouvelles demandes.

Justification et valeur ajoutée de l'Union

L'Union a défini, à l'horizon 2020, un ambitieux programme qui concerne une série de défis complexes et interconnectés, notamment la gestion durable des ressources et la compétitivité. Afin de relever ces défis, il est nécessaire de disposer de données scientifiques solides, qui peuvent concerner plusieurs disciplines scientifiques et permettent d'évaluer rigoureusement les différentes solutions envisagées. Le JRC jouera son rôle de service scientifique pour les politiques de l'Union en fournissant le soutien scientifique et technique nécessaire à tous les stades du cycle d'élaboration des politiques, de la conception à l'évaluation en passant par la mise en œuvre. Afin de contribuer à cet objectif spécifique, il centrera clairement ses recherches sur les priorités stratégiques de l'Union, tout en renforçant ses compétences transversales et sa coopération avec les États membres.L'indépendance du JRC vis-à-vis des intérêts particuliers, qu'ils soient privés ou nationaux, conjuguée à son rôle de référence scientifique et technique, lui permet de faciliter la recherche de consensus nécessaire entre les parties prenantes et les responsables politiques. Les États membres et les habitants de l'Union bénéficient des travaux de recherche du JRC, ce qui est particulièrement visible dans des domaines comme la santé et la protection des consommateurs, l'environnement, la sécurité et la sûreté, et la gestion des crises et catastrophes.Plus particulièrement, les États membres et les régions bénéficieront également d'un appui en faveur de leurs stratégies de spécialisation intelligente.Le JRC fait partie intégrante de l'Espace européen de la recherche et continuera à soutenir activement le fonctionnement de celui-ci par une coopération étroite entre pairs et avec les parties prenantes, par l'optimisation de l'accès à ses installations et la formation de chercheurs et par une coopération étroite avec les États membres et les institutions internationales qui poursuivent les mêmes objectifs. Cela encouragera aussi l'intégration des nouveaux États membres et des pays associés, pour lesquels le JRC continuera de fournir des formations spéciales sur la base scientifique et technique de l'ensemble de la législation de l'Union. Le cas échéant, le JRC mettra en place des liens de coordination avec les autres objectifs spécifiques d'Horizon 2020. En complément de ses actions directes, et afin de renforcer l'intégration et la constitution de réseaux dans l'EER, le JRC pourrait aussi participer, dans les domaines où il possède l'expérience nécessaire pour produire de la valeur ajoutée de l'Union, à des actions indirectes et instruments de coordination dans le contexte d'Horizon 2020.

Grandes lignes des activités

Les activités du JRC dans le cadre d'Horizon 2020 seront centrées sur les priorités stratégiques de l'Union et les défis de société auxquels elles visent à répondre. Ces activités s'inscrivent dans le droit fil des objectifs de la stratégie Europe 2020, et des rubriques «Sécurité et citoyenneté» et «Une Europe dans le monde» du cadre financier pluriannuel pour 2014-2020.Les principaux domaines de compétence du JRC seront l'énergie, les transports, l'environnement et le changement climatique, l'agriculture et la sécurité alimentaire, la santé et la protection des consommateurs, les technologies de l'information et de la communication, les matériaux de référence, ainsi que la sécurité et la sûreté (y compris la sécurité et la sûreté nucléaires dans le cadre du programme Euratom). Les activités du JRC dans ces domaines seront menées en tenant compte des initiatives pertinentes au niveau des régions, des États membres ou de l'Union, en vue de façonner l'EER.Ces domaines de compétence seront fortement renforcés et le JRC aura la capacité d'agir tout au long du cycle d'élaboration des politiques et d'évaluer les possibilités envisagées. Il s'agit notamment des éléments suivants:(a) anticipation et prévisions – des renseignements stratégiques proactif concernant les tendances et événements dans les domaines des sciences, de la technologie et de la société ainsi que leurs conséquences possibles pour les politiques publiques;(b) économie – pour un service intégré couvrant à la fois les aspects scientifiques et techniques et les aspects macroéconomiques;(c) modélisation – essentiellement en matière de durabilité et d'économie, pour rendre la Commission moins dépendante de fournisseurs extérieurs pour l'analyse de scénarios dans les domaines d'importance;(d) analyse des politiques – pour permettre l'examen transsectoriel des solutions stratégiques envisagées;(e) analyse d'impact – fournir des données scientifiques pour étayer les solutions stratégiques envisagées.Le JRC continuera de viser l'excellence en matière de recherche et d'assurer une large interaction avec les instituts de recherche, qui constituent la base d'un soutien scientifique et technique des politiques crédible et solide. À cette fin, il renforcera sa collaboration avec des partenaires européens et internationaux, entre autres en participant à des actions indirectes. Il sera également actif dans la recherche exploratoire et se constituera des compétences, sur une base sélective, dans les domaines émergents pertinents.Le JRC s'attachera particulièrement aux buts ci-dessous:

Excellence scientifique

(Voir également la PRIORITÉ «Excellence scientifique» (H2020-EU.1.)) (http://cordis.europa.eu/programme/rcn/664091_en.html)Mener des travaux de recherche pour renforcer les données scientifiques pouvant étayer l'élaboration des politiques et pour examiner les domaines scientifiques et techniques émergents, y compris par un programme de recherche exploratoire.

Primauté industrielle

(Voir également la PRIORITÉ «Primauté industrielle» (H2020-EU.2)) (http://cordis.europa.eu/programme/rcn/664143_en.html)Contribuer à la compétitivité européenne par un appui au processus de normalisation et aux normes sous la forme de recherche prénormative, de développement de matériaux et mesures de référence et d'harmonisation des méthodes dans cinq domaines privilégiés (énergie; transports; l'initiative phare «Une stratégie numérique pour l'Europe»; sûreté et sécurité; protection des consommateurs). Réaliser des évaluations de la sécurité des nouvelles technologies dans des domaines tels que l'énergie et les transports ou la santé et la protection des consommateurs. Contribuer à faciliter l'utilisation, la normalisation et la validation des technologies spatiales et des données d'origine spatiale, en particulier pour relever les défis de société.

Défis de société

(Voir également la PRIORITÉ «Défis de société» (H2020-EU.3.)) (http://cordis.europa.eu/programme/rcn/664235_en.html)

(a) Santé, évolution démographique et bien-être

(Voir également H2020-EU.3.1.) (http://cordis.europa.eu/programme/rcn/664237_en.html)Contribuer à la santé et à la protection des consommateurs par un appui scientifique et technique dans des domaines tels que l'alimentation humaine et animale et les produits de consommation courante; l'environnement et la santé; les pratiques de diagnostic et de dépistage dans le domaine de la santé; la nutrition et les régimes alimentaires.

(b) Sécurité alimentaire, agriculture et sylviculture durables, recherche marine, maritime et dans le domaine des eaux intérieures et la bioéconomie

(Voir également H2020-EU.3.2.) (http://cordis.europa.eu/programme/rcn/664237_en.html)Soutenir le développement, la mise en œuvre et le suivi des politiques européennes de l'agriculture et de la pêche, notamment en ce qui concerne la sécurité et la sûreté alimentaires, et le développement d'une bioéconomie, notamment par des prévisions sur les récoltes, des analyses socioéconomiques et techniques et la modélisation, et promouvoir des mers saines et productives.

(c) Énergies sûres, propres et efficaces

(Voir également H2020-EU.3.3.) (http://cordis.europa.eu/programme/rcn/664237_en.html)Soutenir la réalisation des objectifs 20-20-20 pour le climat et l'énergie par des recherches sur les aspects technologiques et économiques de l'approvisionnement en énergie, de l'efficience, des technologies à faibles émissions de carbone, et des réseaux de transport d'énergie/d'électricité.

(d) Transports intelligents, verts et intégrés

(Voir également H2020-EU.3.4.) (http://cordis.europa.eu/programme/rcn/664357_en.html)Soutenir la politique de l'Union en faveur d'une mobilité qui réponde aux impératifs de durabilité, de sécurité et de sûreté pour les personnes et les biens, au moyen d'études de laboratoire, de techniques de modélisation et de suivi, portant notamment sur les technologies de transport à faibles émissions de carbone, comme l'électrification, les véhicules propres et économes en énergie et les carburants de substitution, ou encore les systèmes de mobilité intelligente.

(e) Lutte contre le changement climatique, environnement, utilisation efficace des ressources et matières premières

(Voir également H2020-EU.3.5.) (http://cordis.europa.eu/programme/rcn/664389_en.html)Étudier les défis transsectoriels en matière de gestion durable des ressources naturelles par le suivi de variables environnementales clés et la mise au point d'un cadre de modélisation intégré pour l'évaluation de la durabilité.Contribuer à l'augmentation du rendement des ressources, à la réduction des émissions et à l'approvisionnement durable en matières premières par des évaluations intégrées portant sur les aspects sociaux, environnementaux et économiques des procédés de production, technologies, produits et services propres.Soutenir la réalisation des objectifs de la politique de développement de l'Union par des travaux de recherche destinés à assurer un approvisionnement suffisant en ressources essentielles, centrés sur le suivi des paramètres relatifs à l'environnement et aux ressources, les analyses en matière de sécurité et de sûreté alimentaires et le transfert de connaissances.

(f) L'Europe dans un monde en évolution - Sociétés ouvertes à tous, innovantes et capables de réflexion

(Voir également H2020-EU.3.6.) (http://cordis.europa.eu/programme/rcn/664435_en.html)Contribuer à la mise en œuvre de l'initiative phare «L'Union de l'innovation» et à son suivi, par des analyses macroéconomiques portant sur les facteurs qui favorisent ou qui freinent la recherche et l'innovation ainsi que par la mise au point de méthodes, de tableaux de bord et d'indicateurs.Soutenir l'EER en assurant le suivi de son fonctionnement et en analysant les facteurs favorables ou défavorables à ses principaux aspects; le soutenir également par la constitution de réseaux de recherche, la formation ainsi que l'ouverture des installations et bases de données du JRC aux utilisateurs des États membres et des pays candidats ou associés.Contribuer aux objectifs principaux de l'initiative phare «Une stratégie numérique pour l'Europe» par des analyses qualitatives et quantitatives d'aspects économiques et sociaux (économie numérique, société numérique, mode de vie numérique).

(g) Des sociétés sûres - Protéger la liberté et la sécurité de l'Europe et de ses citoyens

(Voir également H2020-EU.3.7.) (http://cordis.europa.eu/programme/rcn/664463_en.html)Contribuer à la sécurité et à la sûreté intérieures en détectant et en évaluant les points faibles des infrastructures critiques, qui jouent un rôle vital dans différentes fonctions de la société, ainsi qu'en examinant le fonctionnement des technologies relatives à l'identité numérique et en les évaluant d'un point de vue social et éthique; apporter une réponse aux enjeux globaux en matière de sûreté, y compris les menaces émergentes ou hybrides, par le développement d'outils perfectionnés d'extraction et d'analyse d'informations, ainsi que de gestion des crises.Renforcer la capacité de l'Union de gérer les catastrophes d'origine naturelle ou humaine en renforçant le contrôle des infrastructures et le développement d'installations d'essais, et de systèmes informatiques mondiaux d'alerte rapide et de gestion des risques, valables pour plusieurs risques, fondés sur les systèmes d'observation de la Terre par satellite.";"";"H2020";"H2020-EC";"";"";"2014-09-23 20:21:28";"664511" +"H2020-EU.2.3.2.3.";"es";"H2020-EU.2.3.2.3.";"";"";"Apoyar la innovación impulsada por el mercado";"Supporting market-driven innovation";"

Apoyar la innovación impulsada por el mercado

Apoyo a la innovación transnacional impulsada por el mercado a fin de mejorar las condiciones marco para la innovación y combatir los obstáculos concretos que impiden, en particular, el crecimiento de las PYME innovadoras.";"";"H2020";"H2020-EU.2.3.2.";"";"";"2014-09-22 20:43:05";"664233" +"H2020-EU.2.3.2.3.";"de";"H2020-EU.2.3.2.3.";"";"";"Unterstützung marktorientierter Innovation";"Supporting market-driven innovation";"

Unterstützung marktorientierter Innovation

Um die Rahmenbedingungen für Innovation zu verbessern werden transnationale, vom Markt ausgehende Innovationen unterstützt, und Hemmnisse, die insbesondere das Wachstum innovativer KMU behindern, werden angegangen.";"";"H2020";"H2020-EU.2.3.2.";"";"";"2014-09-22 20:43:05";"664233" +"H2020-EU.3.4.3.";"fr";"H2020-EU.3.4.3.";"";"";"Primauté sur la scène mondiale pour l'industrie européenne des transports";"Global leadership for the European transport industry";"

Primauté sur la scène mondiale pour l'industrie européenne des transports

L'objectif est de renforcer la compétitivité et la performance des constructeurs européens d'équipements de transport et des services associés (y compris les processus logistiques, l'entretien, la réparation, la conversion et le recyclage) tout en maintenant le rôle prépondérant que joue l'Europe dans certains domaines (par exemple, l'aéronautique).Les activités visent avant tout à mettre au point la prochaine génération de moyens de transport aériens, maritimes et terrestres innovants, à assurer la fabrication durable de systèmes et d'équipements innovants et à préparer le terrain pour de futurs moyens de transport, en travaillant sur de nouveaux concepts et de nouvelles conceptions et sur des technologies originales, des systèmes de contrôle intelligents et des normes interopérables, des procédés de fabrication efficaces, des services innovants et des procédures de certification, des délais de développement plus courts et des coûts réduits tout au long du cycle de vie sans compromettre la sécurité et la sûreté opérationnelles.";"";"H2020";"H2020-EU.3.4.";"";"";"2014-09-22 20:47:39";"664377" +"H2020-EU.3.4.2.";"es";"H2020-EU.3.4.2.";"";"";"Mejor movilidad, menor congestión, mayor seguridad";"Mobility, safety and security";"

Mejor movilidad, menor congestión, mayor seguridad

El objetivo es reconciliar las crecientes necesidades de movilidad con una mayor fluidez del transporte, a través de soluciones innovadoras para unos sistemas de transporte sin discontinuidades intermodales, inclusivos, accesibles, asequibles, seguros y sólidos.El propósito de las actividades será reducir la congestión, mejorar la accesibilidad y las posibilidades de elección de los pasajeros en materia de interoperabilidad y satisfacer las posibilidades de elección de los usuarios impulsando y promoviendo el transporte, la gestión de la movilidad y la logística puerta a puerta integrados; aumentar la intermodalidad y el despliegue de soluciones inteligentes de gestión y planificación; y reducir drásticamente el número de accidentes y el impacto de las amenazas a la seguridad.";"";"H2020";"H2020-EU.3.4.";"";"";"2014-09-22 20:47:20";"664367" +"H2020-EU.3.4.2.";"de";"H2020-EU.3.4.2.";"";"";"Größere Mobilität, geringeres Verkehrsaufkommen, größere Sicherheit";"Mobility, safety and security";"

Größere Mobilität, geringeres Verkehrsaufkommen, größere Sicherheit

Ziel ist es, den wachsenden Mobilitätsbedarf mit einem besseren Verkehrsfluss in Einklang zu bringen und hierfür innovative Lösungen für nahtlose, intermodale, integrative, zugängliche, erschwingliche, sichere, gesunde und belastbare Verkehrssysteme zu erforschen.Schwerpunkte der Tätigkeiten sind eine Verringerung des Verkehrsaufkommens, ein besserer Zugang, eine bessere Interoperabilität und mehr Auswahlmöglichkeiten für die Fahrgäste, die Befriedigung der Bedürfnisse der Nutzer durch Entwicklung und Unterstützung von integrierter Beförderung, Mobilitätsmanagement und Logistik von Haus zu Haus, die Verbesserung der Intermodalität und der Einsatz intelligenter Planungs- und Managementlösungen, um die Zahl der Unfälle und die Folgen von Sicherheitsbedrohungen drastisch zu reduzieren.";"";"H2020";"H2020-EU.3.4.";"";"";"2014-09-22 20:47:20";"664367" +"H2020-EU.3.4.1.";"pl";"H2020-EU.3.4.1.";"";"";"Zasobooszczędny transport, który szanuje środowisko";"Resource efficient transport that respects the environment";"

Zasobooszczędny transport, który szanuje środowisko

Celem jest minimalizacja oddziaływania systemów transportu na klimat i środowisko (w tym hałasu i zanieczyszczenia powietrza) poprzez poprawienie ich jakości i wydajności pod względem wykorzystania zasobów naturalnych i paliw oraz poprzez zmniejszenie emisji gazów cieplarnianych i ograniczenie jego zależności od paliw kopalnych.Działania mają skoncentrować się na ograniczeniu zużycia zasobów, w szczególności paliw kopalnych, zmniejszeniu emisji gazów cieplarnianych i poziomów hałasu a także na poprawie efektywności transportu i pojazdów; przyspieszeniu rozwoju oraz opracowaniu, wyprodukowaniu i wprowadzeniu na rynek ekologicznych (elektrycznych, wodorowych i innych niskoemisyjnych lub bezemisyjnych) pojazdów nowej generacji, m.in. dzięki przełomowym osiągnięciom i optymalizacji w zakresie silników, magazynowania energii i infrastruktury; na badaniu i wykorzystaniu potencjału paliw alternatywnych i zrównoważonych oraz innowacyjnych i sprawniejszych systemów napędu i systemów operacyjnych, w tym infrastruktury paliwowej i ładowania; na optymalizacji planowania i wykorzystania infrastruktury przy użyciu inteligentnych systemów transportowych, logistyki i inteligentnego wyposażenia, a także na intensywniejszym zastosowaniu zarządzania popytem i korzystaniu z transportu publicznego i bezsilnikowego oraz łańcuchów intermodalnej mobilności, w szczególności w obszarach miejskich. Wspierać się będzie innowacje służące zapewnieniu niskich lub zerowych emisji we wszystkich rodzajach transportu.";"";"H2020";"H2020-EU.3.4.";"";"";"2014-09-22 20:47:04";"664359" +"H2020-EU.3.6.2.";"pl";"H2020-EU.3.6.2.";"";"";"Innowacyjne społeczeństwa";"Innovative societies";"

Innowacyjne społeczeństwa

Celem jest wspieranie rozwoju innowacyjnych społeczeństw i polityki w Europie poprzez zaangażowanie obywateli, organizacji społeczeństwa obywatelskiego, przedsiębiorstw i użytkowników w badania naukowe i innowacje oraz promowanie skoordynowanej polityki w zakresie badań naukowych i innowacji w kontekście globalizacji oraz potrzeby propagowania najwyższych standardów etycznych. Szczególne wsparcie zostanie zapewnione na potrzeby rozwoju EPB i ramowych warunków innowacji.Wiedza o kulturze i społeczeństwie jest ważnym źródłem kreatywności i innowacji, w tym innowacji biznesowych, innowacji w sektorze publicznym i innowacji społecznych. W wielu przypadkach innowacje społeczne i tworzone z myślą o użytkowniku poprzedzają rozwój innowacyjnych technologii, usług i procesów gospodarczych. Sektory kreatywne stanowią jeden z istotnych zasobów pozwalających stawić czoła wyzwaniom społecznym i wyzwaniu konkurencyjności. Ponieważ wzajemne zależności między innowacjami społecznymi a technicznymi są złożone i rzadko liniowe, konieczne są dalsze badania, w tym badania międzysektorowe i multidyscyplinarne, w dziedzinie rozwoju wszelkich rodzajów innowacji oraz działań finansowanych w celu tworzenia warunków do skutecznego rozwoju innowacji w przyszłości.Działania mają się koncentrować na:(a) wzmocnieniu podstaw faktograficznych i wsparcia dla inicjatywy przewodniej „Unii innowacji” i EPB; (b) poszukiwaniu nowych form innowacji, ze szczególnym naciskiem na innowacje społeczne i kreatywność, oraz zrozumieniu czynników warunkujących rozwój innowacji, ich powodzenie lub porażkę;(c) wykorzystaniu potencjału innowacyjności, kreatywności i wydajności wszystkich pokoleń; ";"";"H2020";"H2020-EU.3.6.";"";"";"2014-09-22 20:49:50";"664447" +"H2020-EU.3.6.2.";"it";"H2020-EU.3.6.2.";"";"";"Società innovative";"Innovative societies";"

Società innovative

L'obiettivo è promuovere lo sviluppo di società e politiche innovative in Europa per mezzo dell'impegno dei cittadini, delle organizzazioni della società civile, delle imprese e degli utenti per quanto concerne la ricerca e l'innovazione nonché la promozione di politiche di ricerca e innovazione coordinate nell'ambito della globalizzazione e tenuto conto dell'esigenza di promuovere i più elevati standard etici. Sarà fornito un sostegno particolare per lo sviluppo del SER nonché delle condizioni generali per l'innovazione.Le conoscenze sociali e culturali sono un'importante fonte di creatività e innovazione, anche nel settore sociale, pubblico e delle imprese. In molti casi, inoltre, le innovazioni sociali e basate sulle esigenze degli utenti precedono lo sviluppo di tecnologie, servizi e processi economici innovativi. Le industrie creative sono un'importante risorsa per affrontare le sfide per la società e la competitività. Poiché le interrelazioni tra innovazione sociale e tecnologica sono complesse e raramente lineari, occorrono ulteriori ricerche, anche intersettoriali e multidisciplinari, nello sviluppo di tutti i tipi di innovazione e attività finanziate, al fine di incoraggiarne uno sviluppo efficace nel futuro.Il centro delle attività comprende:(a) il rafforzamento della base scientifica e del sostegno per l'iniziativa faro ""Unione dell'innovazione"" e il SER; (b) l'esplorazione di nuove forme di innovazione, con particolare attenzione all'innovazione sociale e alla creatività, e la comprensione delle modalità di sviluppo, riuscita o insuccesso di tutte le forme di innovazione; (c) l'utilizzo del potenziale innovativo, creativo e produttivo di tutte le generazioni; (d) la promozione di una cooperazione coerente ed efficace con i paesi terzi. ";"";"H2020";"H2020-EU.3.6.";"";"";"2014-09-22 20:49:50";"664447" +"H2020-EU.2.3.2.1.";"it";"H2020-EU.2.3.2.1.";"";"";"Sostegno per le PMI ad elevata intensità di ricerca";"Support for research intensive SMEs";"

Sostegno per le PMI ad elevata intensità di ricerca

L'obiettivo è promuovere l'innovazione transnazionale orientata al mercato delle PMI che effettuano attività di R&S. Un'azione specifica mira alle PMI ad alta intensità di ricerca in tutti i settori che mostrano la capacità di sfruttare commercialmente i risultati dei progetti. Tale azione sarà basata sul programma Eurostars.";"";"H2020";"H2020-EU.2.3.2.";"";"";"2014-09-22 20:42:58";"664229" +"H2020-EU.2.2.";"it";"H2020-EU.2.2.";"";"";"LEADERSHIP INDUSTRIALE - Accesso al capitale di rischio";"Access to risk finance";"

LEADERSHIP INDUSTRIALE - Accesso al capitale di rischio

Obiettivo specifico

L'obiettivo specifico è contribuire ad affrontare le carenze del mercato relative all'accesso al capitale di rischio per la ricerca e l'innovazione.La situazione degli investimenti nel settore R&I è grave, in particolare per le PMI innovative e le imprese di dimensione intermedia (mid-caps) con un elevato potenziale di crescita. Esistono diverse importanti carenze di mercato nella fornitura di finanziamenti, poiché le innovazioni necessarie per conseguire gli obiettivi politici risultano di norma troppo rischiose per il mercato e pertanto non sono colti appieno i più ampi vantaggi per la società.Uno strumento prestiti (debt facility) e uno strumento di capitale proprio (equity facility) contribuiranno a superare tali problemi migliorando il finanziamento e i profili di rischio delle attività di R&I in questione. A sua volta questo faciliterà l'accesso ai prestiti, alle garanzie e ad altre forme di capitale di rischio da parte delle imprese e di altri beneficiari, promuoverà gli investimenti in fase iniziale e lo sviluppo di fondi di capitale di rischio esistenti e nuovi, migliorerà il trasferimento di conoscenze e il mercato della proprietà intellettuale, attirerà fondi per il mercato dei capitali di rischio e, complessivamente, contribuirà a catalizzare il passaggio dalla concezione, dallo sviluppo e dalla dimostrazione di nuovi prodotti e servizi alla loro commercializzazione.L'effetto globale sarà quello di aumentare la volontà del settore privato a investire nella R&I e contribuire così al raggiungimento di un obiettivo chiave di Europa 2020: il 3 % del PIL dell'Unione investito in R&S entro la fine del decennio, di cui due terzi forniti dal settore privato. L'uso di strumenti finanziari contribuirà inoltre a conseguire gli obiettivi di R&I in tutti i settori e negli ambiti politici di fondamentale importanza per affrontare le sfide per la società, rafforzare la competitività e sostenere la crescita sostenibile, inclusiva nonché la fornitura di beni pubblici ambientali e di altro genere.

Motivazione e valore aggiunto dell'Unione

È necessario uno strumento prestiti a livello di Unione per la R&I al fine di aumentare la probabilità di ottenere i prestiti e le garanzie e di raggiungere gli obiettivi politici in quest'ambito. Il divario esistente sul mercato tra la domanda e l'offerta di prestiti e garanzie per investimenti rischiosi in ambito R&I, oggetto dell'attuale meccanismo di finanziamento con ripartizione dei rischi (RSFF), è destinato a persistere se le banche commerciali restano sostanzialmente assenti dal prestito ad alto rischio. Dal varo del meccanismo a metà 2007 la domanda di prestiti nell'ambito del RSFF è stata elevata: nella sua prima fase (2007-2010), il ricorso a tale meccanismo ha superato le previsioni iniziali di oltre il 50 % in termini di approvazione di prestiti attivi (7,6 miliardi di EUR a fronte di una previsione di 5 miliardi di EUR).Di norma, inoltre, le banche sono prive della capacità di valutare i cespiti basati sulla conoscenza, quale la proprietà intellettuale, e sono quindi spesso riluttanti a investire in imprese basate sulla conoscenza. Ne consegue che molte imprese innovative consolidate grandi e piccole non riescono a ottenere prestiti per attività di R&I ad alto rischio. Nella progettazione e nell'attuazione del suo dispositivo o dei suoi dispositivi, che saranno effettuate in partenariato con una o più entità delegate conformemente al regolamento (UE, Euratom) n. 966/2012, la Commissione garantirà che siano presi in considerazione adeguati livelli e forme di rischio tecnologico e finanziario al fine di soddisfare le esigenze individuate.Tali divari di mercato derivano essenzialmente da incertezze, da asimmetrie di informazione e dai costi elevati dei tentativi di affrontare questi problemi: le imprese di recente costituzione hanno una storia imprenditoriale troppo breve per soddisfare i potenziali prestatori, ma anche le imprese consolidate spesso non sono in grado di fornire informazioni sufficienti, e all'inizio di un investimento di R&I non è affatto certo che gli sforzi intrapresi si possano tradurre effettivamente in un'innovazione di successo.Inoltre, le imprese che si trovano nella fase di sviluppo del concetto o che lavorano in settori emergenti di norma sono sprovviste di garanzie reali sufficienti. Un ulteriore elemento dissuasivo è che, anche se le attività di R&I danno origine a un prodotto o processo commerciale, non è affatto certo che l'impresa che ha svolto il lavoro sarà in grado di fruire in via esclusiva dei vantaggi da questo derivanti.In termini di valore aggiunto dell'Unione, uno strumento prestiti consentirà di rimediare alle carenze del mercato che impediscono al settore privato di investire in R&I a un livello ottimale. La sua attuazione consentirà la messa in comune di una massa critica di risorse del bilancio dell'Unione e, su una base di ripartizione dei rischi, della o delle istituzioni finanziarie incaricate dell'attuazione dello stesso. L'attuazione stimolerà le imprese a investire una quota maggiore di capitale proprio in R&I rispetto a quanto avrebbero fatto altrimenti. Inoltre, tale strumento consentirà alle organizzazioni pubbliche e private di ridurre i rischi di intrapresa dell'appalto precommerciale o dell'appalto di prodotti e servizi innovativi.Uno strumento di capitale proprio a livello di Unione per la R&I è necessaria per contribuire a migliorare la disponibilità di finanziamenti azionari per gli investimenti in fase iniziale e di crescita e per incentivare lo sviluppo del mercato del capitale di rischio nell'Unione. Nel corso della fase di avviamento e di trasferimento delle tecnologie le nuove imprese attraversano una ""valle della morte"", ossia un periodo in cui vengono meno i finanziamenti pubblici alla ricerca e al tempo stesso è impossibile attrarre finanziamenti privati. Il sostegno pubblico mirante a stimolare i finanziamenti privati e i fondi per l'avviamento destinati a colmare questa lacuna risulta attualmente troppo frammentato e discontinuo, oppure gestito da personale privo della necessaria esperienza. La maggior parte dei fondi di capitale di rischio in Europa ha inoltre dimensioni troppo ridotte per sostenere con continuità la crescita delle imprese innovative e non dispone della massa critica per specializzarsi ed operare in maniera transnazionale.Le conseguenze sono gravi. Prima della crisi finanziaria, l'importo investito nelle PMI dai fondi di capitale di rischio europei era di circa 7 miliardi di EUR l'anno, mentre le cifre per il 2009 e il 2010 erano comprese fra 3 e 4 miliardi di EUR. La riduzione dei finanziamenti per investimenti in capitale di rischio ha colpito il numero di imprese in fase di avvio interessate da tali fondi: nel 2007 circa 3 000 PMI hanno ricevuto i finanziamenti in capitali di rischio, rispetto a solo circa 2 500 nel 2010.In termini di valore aggiunto dell'Unione, lo strumento di capitale proprio per il settore R&I integrerà i programmi nazionali e regionali che non riescono a sostenere gli investimenti transfrontalieri in quest'ambito. Gli accordi della prima fase avranno inoltre un effetto dimostrativo suscettibile di tradursi in un vantaggio per gli investitori pubblici e privati in tutta Europa. Per la fase di crescita, solo a livello europeo è possibile ottenere la necessaria scala e una forte partecipazione degli investitori privati essenziali per il funzionamento di un mercato dei capitali di rischio autonomo.Lo strumento prestiti e lo strumento di capitale proprio, sostenuti da una serie di misure di accompagnamento, sosterranno la realizzazione degli obiettivi politici di Orizzonte 2020. A tal fine saranno intese a consolidare e ad aumentare la qualità della base scientifica europea, a promuovere la ricerca e l'innovazione con un programma orientato alle imprese e ad affrontare le sfide per la società, concentrandosi su attività quali il pilotaggio, la dimostrazione, i banchi di prova e lo sfruttamento commerciale. È opportuno prevedere azioni specifiche di sostegno, quali attività di informazione e di patrocinio per le PMI. Le autorità regionali, le associazioni delle PMI, le camere di commercio e i pertinenti intermediari finanziari possono essere consultati, ove opportuno, in relazione alla programmazione e all'attuazione di tali attività.Esse contribuiranno inoltre ad affrontare gli obiettivi di R&I di altri programmi e settori politici, come la politica agricola comune, l'azione per il clima (transizione verso un'economia a basse emissioni di carbonio e adattamento ai cambiamenti climatici) e la politica comune della pesca. Le complementarità con gli strumenti finanziari nazionali e regionali saranno sviluppate nel contesto del quadro strategico comune per la politica di coesione 2014-2020, in cui si prevede un ruolo accresciuto degli strumenti finanziari.L'elaborazione dello strumento prestiti e dello strumento di capitale proprio tiene conto della necessità di affrontare le specifiche carenze, caratteristiche (come il grado di dinamismo e il tasso di creazione di imprese) ed esigenze di finanziamento del mercato di questi e altri settori senza creare distorsioni del mercato. L'uso di strumenti finanziari deve avere un chiaro valore aggiunto europeo e dovrebbe esercitare un effetto leva e fungere da integrazione agli strumenti nazionali. Gli stanziamenti di bilancio tra gli strumenti possono essere adattati nel corso di Orizzonte 2020 in risposta a cambiamenti nelle condizioni economiche.Lo strumento di capitale proprio e la sezione PMI dello strumento prestiti sono attuate nell'ambito dei due strumenti finanziari dell'Unione che forniscono capitale e credito a sostegno della crescita e delle attività di R&I delle PMI, in abbinamento con i fondi di capitale e di debito del COSME. Sarà garantita la complementarità tra Orizzonte 2020 e COSME.

Le grandi linee delle attività

(a) Lo strumento prestiti che fornisce finanziamenti in ambito R&I: ""Servizio di prestiti e garanzie dell'Unione per la ricerca e l'innovazione""

La finalità è migliorare l'accesso al finanziamento tramite debito - prestiti, garanzie, controgaranzie e altre forme di debito e capitale di rischio - per le entità pubbliche e private e i partenariati pubblico-privato che esercitano attività di ricerca e innovazione che richiedono investimenti rischiosi per il loro svolgimento. L'obiettivo è sostenere la ricerca e l'innovazione con un forte potenziale d'eccellenza.Dato che uno degli obiettivi di Orizzonte 2020 è contribuire a ridurre il divario tra R&S e innovazione, favorendo l'ingresso nel mercato di prodotti e servizi nuovi o migliorati e tenendo conto del ruolo critico della fase di prova di concetto nel processo di trasferimento di conoscenza, possono essere introdotti meccanismi che permettano il finanziamento delle fasi di prova di concetto necessarie per confermare l'interesse, la pertinenza e l'impatto innovativo futuro dei risultati della ricerca o dell'invenzione oggetto del trasferimento.I beneficiari finali sono potenzialmente soggetti giuridici di tutte le dimensioni in grado di contrarre prestiti e rimborsare fondi e, in particolare, le PMI dotate del potenziale per svolgere attività innovative e crescere rapidamente, le imprese di dimensione intermedia (mid-caps) e le grandi imprese, le università e gli istituti di ricerca, le infrastrutture di ricerca e innovazione, i partenariati pubblico privato e i veicoli o i progetti per uso speciale.Il finanziamento dello strumento prestiti ha due componenti principali:(1)Un elemento basato sulla domanda, che fornisce prestiti e garanzie sulla base del principio ""primo arrivato, primo servito"" con un sostegno specifico per beneficiari quali le PMI e le mid-caps. Questa componente risponde alla progressiva e continua crescita del volume dei prestiti RSFF, che dipende dalla domanda. Nell'ambito della sezione PMI, sono sostenute le attività che mirano a migliorare l'accesso ai finanziamenti per le PMI e le altre entità promosse da attività innovative e/o di R&S. Ciò potrebbe includere il sostegno alla fase 3 dello strumento per le PMI subordinatamente al livello della domanda.(2)Un elemento mirato, concentrato sulle politiche e i settori chiave indispensabili per affrontare le sfide per la società, migliorare la leadership industriale e la competitività, promuovere la crescita sostenibile, inclusiva e a basse emissioni e fornire beni pubblici ambientali e di altro genere. Questo componente aiuta l'Unione ad affrontare gli aspetti relativi a ricerca e innovazione degli obiettivi strategici settoriali.

(b) Lo strumento di capitale proprio che fornisce finanziamenti in ambito R&I: ""Strumenti di capitale dell'Unione per la ricerca e l'innovazione""

L'obiettivo è contribuire a superare le carenze del mercato europeo dei capitali di rischio e fornire capitale proprio o assimilabile al fine di finanziare lo sviluppo e il fabbisogno di finanziamento delle imprese innovatrici dalla fase di avvio fino alla crescita e all'espansione. L'accento è posto sul sostegno degli obiettivi di Orizzonte 2020 e delle politiche afferenti.I beneficiari finali sono potenzialmente le imprese di tutte le dimensioni che esercitano o avviano attività di innovazione, con particolare attenzione per le PMI e le mid-caps innovative.Lo strumento di capitale proprio sarà incentrata su fondi e fondi di fondi di capitale di rischio di prima fase mirati a fornire capitali di rischio e quasi-equity, compreso il finanziamento ""mezzanino"", a singole imprese portafoglio. Lo strumento avrà inoltre la possibilità di effettuare investimenti in fase di espansione e di crescita congiuntamente allo strumento di capitale proprio per la crescita del COSME, al fine di garantire un sostegno continuo durante le fasi di avviamento e sviluppo delle imprese.Lo strumento di capitale proprio, principalmente basato sulla domanda, si avvale di un approccio di portafoglio, nel quale i fondi di capitale di rischio e altri intermediari analoghi scelgono le imprese nelle quali investire.È possibile destinare una parte dei fondi per contribuire a raggiungere obiettivi politici specifici, basandosi sull'esperienza positiva nell'ambito del programma quadro per la competitività e l'innovazione (2007-2013) con destinazione specifica per l'ecoinnovazione, ad esempio per conseguire obiettivi relativi alle sfide per la società individuate.La sezione di avviamento, a sostegno della costituzione e delle fasi iniziali, consente tra l'altro investimenti azionari in organizzazioni di trasferimento delle conoscenze e organismi simili attraverso il sostegno al trasferimento di tecnologie (compreso il trasferimento di risultati di ricerca e invenzioni derivanti dalla sfera della ricerca pubblica per il settore produttivo, ad esempio mediante prova di concetto), strumenti di capitale di avviamento, fondi di capitale transfrontalieri per l'avviamento e le fasi iniziali, veicoli di coinvestimento ""business angel"", attivi da proprietà intellettuale, piattaforme per lo scambio dei diritti di proprietà intellettuale e fondi e fondi-di-fondi di capitale di rischio iniziale che operano a livello transfrontaliero e su investimenti in fondi di capitale di rischio. Ciò potrebbe includere il sostegno alla fase 3 dello strumento per le PMI subordinatamente al livello della domanda.La sezione di crescita effettua investimenti in fase espansiva e di crescita congiuntamente allo strumento di capitale proprio per la crescita del COSME, compresi gli investimenti nei fondi-di-fondi del settore pubblico e privato che operano a livello transfrontaliero e su investimenti in fondi di capitali di rischio, la maggior parte dei quali ha un oggetto tematico a sostegno degli obiettivi della strategia Europa 2020.";"";"H2020";"H2020-EU.2.";"";"";"2014-09-22 20:42:36";"664217" +"H2020-EU.2.2.";"es";"H2020-EU.2.2.";"";"";"LIDERAZGO INDUSTRIAL - Acceso a la financiación de riesgo";"Access to risk finance";"

LIDERAZGO INDUSTRIAL - Acceso a la financiación de riesgo

Objetivo específico

El objetivo específico es ayudar a abordar las deficiencias del mercado en el acceso a la financiación de riesgo para la investigación y la innovación.La situación de la inversión en el ámbito de la investigación e innovación (I+i) es nefasta, especialmente para las PYME innovadoras y las empresas de capitalización media de alto potencial de crecimiento. El mercado presenta varias lagunas importantes en la oferta de financiación, ya que las innovaciones necesarias para lograr los objetivos políticos están resultando demasiado arriesgadas, por regla general, para que el mercado las asuma, por lo que no se están obteniendo plenamente los beneficios en sentido amplio para la sociedad.Un mecanismo de deuda y un mecanismo de capital ayudarán a superar estos problemas mejorando los perfiles de riesgo y de financiación de las actividades de I+i en cuestión. Esto, a su vez, facilitará el acceso de las empresas y otros beneficiarios a créditos, garantías y otras formas de financiación de riesgo; promoverá la inversión en la fase inicial y el desarrollo de fondos existentes y de nuevos fondos de capital-riesgo; mejorará la transferencia de conocimientos y el mercado de la propiedad intelectual; atraerá fondos al mercado de capital-riesgo; y, en general, ayudará a catalizar el paso de la concepción, desarrollo y demostración de nuevos productos y servicios a su comercialización.El efecto general será incrementar la disposición del sector privado a invertir en I+i y, por ende, contribuir a alcanzar un objetivo esencial de Europa 2020: la inversión en I+D de un 3 % del PIB de la Unión de aquí al final de la década, con una contribución del sector privado de dos tercios. La utilización de instrumentos financieros ayudará también a alcanzar los objetivos de I+i de todos los sectores y ámbitos políticos cruciales para afrontar los retos de la sociedad, mejorar la competitividad y apoyar el crecimiento inclusivo y sostenible y el suministro de bienes públicos medioambientales y de otro tipo.

Justificación y valor añadido de la Unión

Es necesario un mecanismo de deuda para la I+i a nivel de la Unión para aumentar la probabilidad de concesión de créditos y garantías y, por tanto, de que se alcancen los objetivos políticos de la I+i. Es probable que persista la distancia que actualmente existe en el mercado entre la demanda y la oferta de créditos y garantías para inversiones en I+i arriesgadas, objeto del actual Instrumento de Financiación de Riesgos Compartidos (IFRC), permaneciendo los bancos comerciales prácticamente ausentes de los préstamos de mayor riesgo. La demanda de créditos del IFRC ha sido elevada desde su puesta en marcha a mediados de 2007: en su primera fase (2007-2010), se superaron las expectativas iniciales en más de un 50 % en términos de créditos activos aprobados (7 600 millones EUR frente a una previsión de 5 000 millones EUR).Además, habitualmente los bancos no saben valorar los activos de conocimiento, como es la propiedad intelectual e industrial, y por ello suelen mostrarse reacios a invertir en empresas basadas en el conocimiento. La consecuencia es que muchas empresas innovadoras establecidas -grandes y pequeñas- no pueden obtener préstamos para las actividades de I+i de mayor riesgo. En la concepción y elaboración de su(s) mecanismo(s), que se llevarán a cabo en asociación con una o varias entidades responsables, en virtud de lo dispuesto en el Reglamento (UE, Euratom) no 966/2012, la Comisión se asegurará de que se tengan en cuenta los adecuados niveles y formas de riesgo tecnológico y financiero, con el fin de satisfacer las necesidades que se hayan determinado.Estas lagunas del mercado derivan, en último análisis, de las incertidumbres, las asimetrías de información y el elevado coste de intentar resolver estas cuestiones: las empresas de reciente creación tienen un historial demasiado breve para satisfacer a los posibles prestamistas, ni siquiera las empresas establecidas pueden a menudo facilitar información suficiente, y al inicio de una inversión en I+i no hay ninguna certeza de que los esfuerzos desplegados vayan a generar realmente una innovación de éxito.Además, las empresas en la fase de desarrollo conceptual o que trabajan en campos emergentes suelen carecer de suficientes activos de garantía. Otro elemento disuasorio es que, incluso si las actividades de I+i dan lugar a un producto o proceso comercial, no hay ninguna certeza de que la empresa que ha realizado el esfuerzo pueda apropiarse exclusivamente de los beneficios que deriven del mismo.En términos de valor añadido de la Unión, un mecanismo de deuda contribuirá a remediar las deficiencias del mercado que impiden al sector privado invertir en I+i a un nivel óptimo. Su aplicación permitirá la puesta en común de una masa crítica de recursos procedentes del presupuesto de la Unión y, sobre una base de repartición del riesgo, de la institución o instituciones financieras encargadas de su aplicación. Estimulará a las empresas para invertir en I+i más fondos propios de los que habrían invertido en otro caso. Además, un mecanismo de deuda ayudará a las organizaciones, tanto públicas como privadas, a reducir los riesgos de la contratación precomercial o la contratación de productos y servicios innovadores.Es necesario un mecanismo de capital a nivel de la Unión para la I+i a fin de ayudar a mejorar la disponibilidad de financiación de capital para las inversiones en las fases inicial y de crecimiento, así como para impulsar el desarrollo del mercado de capital-riesgo de la Unión. En la fase de transferencia de tecnología y de arranque, las nuevas empresas atraviesan un ""valle de la muerte"" en el que ya han acabado las subvenciones públicas a la investigación y aún no es posible atraer financiación privada. El apoyo público dirigido a movilizar fondos privados semilla y de arranque que cubran esa laguna es actualmente demasiado fragmentado e intermitente, o bien sus gestores carecen de la pericia necesaria. Además, la mayoría de los fondos europeos de capital-riesgo son demasiado pequeños para sostener el crecimiento continuado de las empresas innovadoras y carecen de masa crítica para especializarse y operar transnacionalmente.Las consecuencias son graves. Antes de la crisis financiera, el importe invertido en PYME por los fondos europeos de capital-riesgo ascendía a unos 7 000 millones euros anuales, mientras que las cifras correspondientes a 2009 y 2010 se sitúan en el intervalo de los 3 000 - 4 000 millones de euros. La reducción de la financiación de capital-riesgo ha afectado al número de empresas incipientes beneficiarias de fondos de capital-riesgo: unas 3 000 PYME recibieron este tipo de financiación en 2007, frente a solo alrededor de 2 500 en 2010.En términos de valor añadido de la Unión, el mecanismo de capital para la I+i complementará los regímenes nacionales y regionales, que no pueden ocuparse de las inversiones transfronterizas en I+i. Los acuerdos para la fase inicial tendrán también un efecto de demostración que puede beneficiar a los inversores públicos y privados en toda Europa. En cuanto a la fase de crecimiento, solo a nivel europeo es posible alcanzar la escala necesaria y la fuerte participación de inversores privados que resultan esenciales para el funcionamiento de un mercado de capital-riesgo que se autoalimente.Los mecanismos de deuda y de capital, apoyados por una serie de medidas de acompañamiento, contribuirán a la consecución de los objetivos políticos de Horizonte 2020. A tal efecto, se dedicarán a consolidar y reforzar la calidad de la base científica de Europa; promover la investigación y la innovación con una agenda impulsada por las empresas; y abordar los retos de la sociedad, centrándose en actividades tales como ejercicios piloto y de demostración, bancos de prueba y asimilación por el mercado. Se deberán ofrecer medidas de apoyo específicas, como por ejemplo actividades de información y formación para las PYME. Las autoridades regionales, las asociaciones de PYME, las cámaras de comercio y los intermediarios financieros podrán ser consultados, cuando proceda, en relación con la programación y aplicación de estas actividades.Además, ayudarán a abordar los objetivos de I+i de otros programas y ámbitos políticos, como la Política Agrícola Común, la Acción por el Clima (transición a una economía de baja emisión de carbono y adaptación al cambio climático), y la Política Pesquera Común. Se desarrollarán complementariedades con instrumentos financieros nacionales y regionales en el contexto del marco estratégico común de la política de cohesión, en el que está previsto que los instrumentos financieros adquieran mayor protagonismo.El diseño del mecanismo de deuda y de capital tiene en cuenta la necesidad de hacer frente a las deficiencias específicas del mercado, sus características (como el grado de dinamismo y el ritmo de creación de empresas) y los requisitos de financiación de estos y otros ámbitos, sin provocar distorsiones de mercado. El empleo de instrumentos financieros debe presentar un claro valor añadido europeo y debería servir de incentivo y funcionar como complemento de los instrumentos nacionales. La distribución del presupuesto entre los instrumentos podrá adaptarse en el curso de Horizonte 2020 en respuesta a cambios en la situación económica.El mecanismo de capital y el apartado PYME del mecanismo de deuda se aplicarán como parte de dos instrumentos financieros de la Unión que aportan capital y deuda para apoyar a la I+i y al crecimiento de las PYME, en conjunción con los mecanismos de capital y deuda del Programa de Competitividad de las Empresas y las PYME (COSME). Se garantizará la complementariedad entre Horizonte 2020 y el Programa COSME.

Líneas generales de las actividades

(a) Mecanismo de deuda que proporciona financiación de deuda para la I+i: ""Servicio de crédito y garantía de la Unión para la investigación y la innovación""

El objetivo es mejorar el acceso a la financiación de deuda -créditos, garantías, contragarantías y otras formas de financiación de deuda y riesgo- de las entidades públicas y privadas y las asociaciones público-privadas participantes en actividades de investigación e innovación que requieran inversiones arriesgadas para llegar a término. Se hará hincapié en apoyar la investigación y la innovación que tenga un elevado potencial de excelencia.Dado que uno de los objetivos de Horizonte 2020 es contribuir a estrechar la brecha existente entre la I+D y la innovación, favoreciendo la llegada al mercado de productos y servicios nuevos o mejorados, y teniendo en cuenta el papel crítico de la fase de prueba de concepto en el proceso de transferencia de conocimientos, se introducirán mecanismos que permitan la financiación de las fases de prueba de concepto, necesarias para validar la importancia, la pertinencia y el impacto innovador futuro de los resultados de la investigación o invención objeto de la transferencia.Los beneficiarios finales previstos serán potencialmente las entidades jurídicas de todos los tamaños que puedan pedir prestado dinero y reembolsarlo y, en particular, las PYME con potencial para innovar y crecer rápidamente; las empresas de capitalización media y las grandes empresas; las universidades y centros de investigación; las infraestructuras de investigación y las infraestructuras de innovación; las asociaciones público-privadas; y los vehículos o proyectos de propósito especial.La financiación del mecanismo de deuda tendrá dos componentes principales:(1)Uno orientado por la demanda, que facilitará créditos y garantías con arreglo al criterio del orden de llegada, con apoyo específico para beneficiarios como las PYME y las empresas de capitalización media. Este componente responderá al crecimiento constante y continuo observado en el volumen de préstamos del IFRC, que está impulsado por la demanda. En el apartado PYME, se prestará apoyo a actividades encaminadas a mejorar el acceso a la financiación para las PYME impulsadas por la I+D y/o la innovación. Ello podría incluir el apoyo en la fase 3 del instrumento consagrado a las PYME supeditado al nivel de demanda.(2)Otro focalizado, centrado en políticas y sectores fundamentales para afrontar los retos de la sociedad, potenciar el liderazgo industrial y la competitividad, apoyar el crecimiento inclusivo, sostenible y con baja emisión de carbono, y que proporciona bienes públicos medioambientales y de otro tipo. Este componente ayudará a la Unión a abordar los aspectos relacionados con la investigación y la innovación de los objetivos de la política sectorial.

(b) Mecanismo de capital que proporciona financiación de capital para la I+i: ""Instrumentos de capital de la Unión para la investigación y la innovación""

El objetivo es contribuir a superar las deficiencias del mercado de capital-riesgo europeo y proporcionar capital y cuasi capital para cubrir el desarrollo y las necesidades de financiación de las empresas innovadoras desde la fase de lanzamiento a la de crecimiento y expansión. Se hará hincapié en el apoyo a los objetivos de Horizonte 2020 y las políticas conexas.Los beneficiarios finales previstos serán potencialmente las empresas de todos los tamaños que acometan o se embarquen en actividades de innovación, con especial atención a las PYME y empresas de capitalización media innovadoras.El mecanismo de capital se centrará en los fondos de capital-riesgo y en los fondos de fondos para la fase inicial que facilitan capital-riesgo y cuasi capital (incluido capital intermedio) a empresas de cartera individual. El mecanismo contará asimismo con la posibilidad de efectuar inversiones en las fases de expansión y crecimiento en conjunción con el mecanismo de capital para el crecimiento del Programa COSME, para garantizar un apoyo continuado durante las fases de arranque y desarrollo de las empresas.El mecanismo de capital, que estará impulsado principalmente por la demanda, utilizará un planteamiento de cartera, según el cual los fondos de capital-riesgo y otros intermediarios comparables seleccionarán las empresas en las que se invierte.Se aplicará la asignación obligatoria para contribuir a la consecución de objetivos políticos concretos, basándose en la experiencia positiva del Programa Marco de Innovación y Competitividad (2007-2013) con la asignación de fondos para la ecoinnovación, en particular para alcanzar objetivos relacionados con los retos de la sociedad identificados.El apartado de arranque apoyará las fases de lanzamiento e inicial, haciendo posibles las inversiones de capital, entre otras, en organizaciones de transferencia de conocimientos y organismos similares mediante el apoyo a la transferencia de tecnología (inclusive la traslación al sector productivo de los resultados de la investigación y las invenciones generadas en el ámbito de la investigación pública, por ejemplo mediante pruebas de concepto), fondos de capital semilla, fondos semilla e iniciales transfronterizos, vehículos de coinversión para inversores providenciales, activos de propiedad intelectual, plataformas para el intercambio y comercio de derechos de propiedad intelectual y, para la etapa inicial, fondos de capital-riesgo y fondos de fondos que funcionen de modo transfronterizo e inviertan en fondos de capital-riesgo. Ello podría incluir el apoyo en la fase 3 del instrumento consagrado a las PYME supeditado al nivel de demanda.El apartado de crecimiento efectuará inversiones en las fases de expansión y crecimiento en conjunción con el mecanismo de capital para el crecimiento del Programa COSME, lo que incluye las inversiones en fondos de fondos que operan a través de las fronteras e invierten en fondos de capital-riesgo en los sectores público y privado, la mayor parte de los cuales tienen un punto focal temático que coadyuva a los objetivos de la estrategia Europa 2020.";"";"H2020";"H2020-EU.2.";"";"";"2014-09-22 20:42:36";"664217" +"H2020-EU.3.2.4.";"es";"H2020-EU.3.2.4.";"";"";"Bioindustrias sostenibles y competitivas y favorables al desarrollo de una bioeconomía europea";"Bio-based industries and supporting bio-economy";"

Bioindustrias sostenibles y competitivas y favorables al desarrollo de una bioeconomía europea

El objetivo es la promoción de unas bioindustrias europeas sostenibles y competitivas, de baja emisión de carbono y que utilicen eficazmente los recursos. Las actividades se centrarán en el fomento de la bioeconomía basada en el conocimiento, transformando los procesos y productos industriales convencionales en otros que sean eficientes desde el punto de vista de los recursos y la energía, el desarrollo de biorrefinerías integradas de segunda generación o de generaciones subsiguientes, la optimización del uso de la biomasa procedente de la producción primaria, los biorresiduos y los subproductos de la bioindustria, y la apertura de nuevos mercados a través del apoyo a los sistemas de normalización y certificación, las actividades de reglamentación, demostración/ensayos de campo y otras, al tiempo que se tienen en cuenta las consecuencias de la bioeconomía sobre el uso de los terrenos y su modificación, así como los puntos de vista e inquietudes de la sociedad civil.";"";"H2020";"H2020-EU.3.2.";"";"";"2014-09-22 20:45:26";"664309" +"H2020-EU.2.1.4.3.";"fr";"H2020-EU.2.1.4.3.";"";"";"Des technologies «plateformes» innovantes et compétitives";"Innovative and competitive platform technologies";"

Des technologies «plateformes» innovantes et compétitives

Développement des technologies «plateformes» (telles que la génomique, la métagénomique, la protéomique, la métabolimique, les instruments moléculaires, les systèmes d'expression, les plateformes de phénotypage et les plateformes cellulaires) afin de renforcer la primauté et l'avantage concurrentiel de l'Europe dans un grand nombre de secteurs ayant des retombées économiques.";"";"H2020";"H2020-EU.2.1.4.";"";"";"2014-09-22 20:41:55";"664195" +"H2020-EU.2.1.5.4.";"es";"H2020-EU.2.1.5.4.";"";"";"Nuevos modelos de negocio sostenibles";"New sustainable business models";"

Nuevos modelos de negocio sostenibles

Deducir conceptos y metodologías para unos modelos de negocio adaptables y basados en el conocimiento, con enfoques a la medida, inclusive planteamientos alternativos que resulten productivos en cuanto a su utilización de recursos.";"";"H2020";"H2020-EU.2.1.5.";"";"";"2014-09-22 20:42:14";"664205" +"H2020-EU.2.1.4.3.";"pl";"H2020-EU.2.1.4.3.";"";"";"Innowacyjne i konkurencyjne technologie platformowe";"Innovative and competitive platform technologies";"

Innowacyjne i konkurencyjne technologie platformowe

Rozwój technologii platformowych (np. genomiki, metagenomiki, proteomiki, metabolomiki, narzędzi molekularnych, systemów ekspresji, platform fenotypowania i platform komórkowych) w celu wzmacniania wiodącej pozycji i zwiększania przewagi konkurencyjnej w wielu sektorach mających wpływ na gospodarkę.";"";"H2020";"H2020-EU.2.1.4.";"";"";"2014-09-22 20:41:55";"664195" +"H2020-EU.2.1.4.1.";"de";"H2020-EU.2.1.4.1.";"";"";"Unterstützung der Spitzenforschung in der Biotechnologie als künftiger Innovationsmotor ";"Cutting-edge biotechnologies as future innovation driver";"

Unterstützung der Spitzenforschung in der Biotechnologie als künftiger Innovationsmotor

Entwicklung neu entstehender technologischer Bereiche wie synthetische Biologie, Bioinformatik und Systembiologie, die sehr vielversprechend im Hinblick auf innovative Produkte und Technologien sowie vollständig neue Anwendungen sind.";"";"H2020";"H2020-EU.2.1.4.";"";"";"2014-09-22 20:41:48";"664191" +"H2020-EU.2.1.3.5.";"fr";"H2020-EU.2.1.3.5.";"";"";"Matériaux pour des entreprises créatives, y compris dans le domaine du patrimoine";"Materials for creative industries, including heritage";"

Matériaux pour des entreprises créatives, y compris dans le domaine du patrimoine

Conception et développement de technologies convergentes en vue de créer de nouveaux débouchés commerciaux, y compris la préservation et la restauration de matériaux présentant une valeur historique ou culturelle, ainsi que des matériaux nouveaux.";"";"H2020";"H2020-EU.2.1.3.";"";"";"2014-09-22 20:41:34";"664183" +"H2020-EU.2.3.2.3.";"it";"H2020-EU.2.3.2.3.";"";"";"Sostegno all'innovazione orientata al mercato";"Supporting market-driven innovation";"

Sostegno all'innovazione orientata al mercato

Si sostengono le innovazioni transnazionali orientate al mercato al fine di migliorare le condizioni generali per l'innovazione e sono affrontati gli ostacoli specifici che impediscono, in particolare, la crescita delle PMI innovative.";"";"H2020";"H2020-EU.2.3.2.";"";"";"2014-09-22 20:43:05";"664233" +"H2020-EU.2.3.2.1.";"pl";"H2020-EU.2.3.2.1.";"";"";"Wsparcie dla MŚP intensywnie korzystających z badań naukowych";"Support for research intensive SMEs";"

Wsparcie dla MŚP intensywnie korzystających z badań naukowych

Celem jest promowanie transnarodowych rynkowo zorientowanych innowacji w MŚP prowadzących działalność badawczo-rozwojową. Działanie szczegółowe jest ukierunkowane na MŚP działające w dowolnych sektorach, wykazujące zdolność do handlowego wykorzystania wyników prowadzonych projektów. To działanie będzie oparte na programie Eurostars.";"";"H2020";"H2020-EU.2.3.2.";"";"";"2014-09-22 20:42:58";"664229" +"H2020-EU.2.1.4.2.";"pl";"H2020-EU.2.1.4.2.";"";"";"Produkty i procesy przemysłowe oparte na biotechnologii";"Bio-technology based industrial products and processes";"

Produkty i procesy przemysłowe oparte na biotechnologii

Rozwój biotechnologii przemysłowej i projektowania biotechnologicznego na skalę przemysłową w celu tworzenia konkurencyjnych produktów i zrównoważonych procesów przemysłowych (takich jak w branży chemicznej, ochrony zdrowia, górnictwa, energetycznej, celulozowo-papierniczej, produktów włóknistych i drewna, tekstylnej, skrobi, przetwarzaniu żywności) oraz jego wymiar środowiskowy i dotyczący zdrowia, w tym operacje oczyszczania.";"";"H2020";"H2020-EU.2.1.4.";"";"";"2014-09-22 20:41:52";"664193" +"H2020-EU.2.1.4.2.";"it";"H2020-EU.2.1.4.2.";"";"";"Prodotti e processi industriali basati sulla biotecnologia";"Bio-technology based industrial products and processes";"

Prodotti e processi industriali basati sulla biotecnologia

Sviluppo della biotecnologia industriale e della concezione di bioprocessi su scala industriale per prodotti industriali competitivi e processi sostenibili (ad esempio chimica, salute, industria mineraria, energia, pasta e carta, legna e prodotti a base di fibre, tessile, amido, trasformazione alimentare), nonché delle sue dimensioni ambientale e sanitaria, comprese le operazioni di pulizia.";"";"H2020";"H2020-EU.2.1.4.";"";"";"2014-09-22 20:41:52";"664193" +"H2020-EU.2.1.4.2.";"es";"H2020-EU.2.1.4.2.";"";"";"Productos y procesos industriales basados en la biotecnología";"Bio-technology based industrial products and processes";"

Productos y procesos industriales basados en la biotecnología

Impulso de la biotecnología industrial y de la concepción a escala industrial de bioprocesos para productos y procesos industriales competitivos y sostenibles (por ejemplo en química, sanidad, minería, energía, industria papelera, productos basados en fibras y madera, textil, almidón o transformación de alimentos) y su dimensión medioambiental, incluidas las operaciones de limpieza.";"";"H2020";"H2020-EU.2.1.4.";"";"";"2014-09-22 20:41:52";"664193" +"H2020-EU.2.1.3.7.";"pl";"H2020-EU.2.1.3.7.";"";"";"Optymalizacja wykorzystania materiałów";"Optimisation of the use of materials";"

Optymalizacja wykorzystania materiałów

Działania badawczo-rozwojowe służące poszukiwaniu rozwiązań zastępczych i alternatywnych w odniesieniu do zastosowań materiałów, a także innowacyjnych podejść do modeli biznesowych oraz identyfikacji kluczowych zasobów.";"";"H2020";"H2020-EU.2.1.3.";"";"";"2014-09-22 20:41:41";"664187" +"H2020-EU.2.1.3.7.";"it";"H2020-EU.2.1.3.7.";"";"";"Ottimizzazione dell'impiego di materiali";"Optimisation of the use of materials";"

Ottimizzazione dell'impiego di materiali

Ricerca e sviluppo per lo studio di surrogati e soluzioni alternative all'utilizzo di alcuni materiali e lo studio di approcci innovativi in materia di modelli aziendali e individuazione delle risorse essenziali.";"";"H2020";"H2020-EU.2.1.3.";"";"";"2014-09-22 20:41:41";"664187" +"H2020-EU.2.1.2.3.";"fr";"H2020-EU.2.1.2.3.";"";"";"Développer la dimension sociétale des nanotechnologies";"Societal dimension of nanotechnology";"

Développer la dimension sociétale des nanotechnologies

Développer une gestion des nanotechnologies centrée sur les bénéfices qu'elles apportent à la société et à l'environnement.";"";"H2020";"H2020-EU.2.1.2.";"";"";"2014-09-22 20:41:05";"664167" +"H2020-EU.2.1.3.2.";"fr";"H2020-EU.2.1.3.2.";"";"";"Développement et transformation des matériaux";"Materials development and transformation";"

Développement et transformation des matériaux

Recherche et développement à des fins de développement et de valorisation efficaces, sûrs et durables, afin de permettre la fabrication industrielle de futurs produits conçus pour progresser vers une gestion sans déchets des matériaux en Europe.";"";"H2020";"H2020-EU.2.1.3.";"";"";"2014-09-22 20:41:23";"664177" +"H2020-EU.2.";"es";"H2020-EU.2.";"";"";"PRIORIDAD ""Liderazgo industrial""";"Industrial Leadership";"

PRIORIDAD ""Liderazgo industrial""

Esta parte tiene por objeto acelerar el desarrollo de las tecnologías e innovaciones que sustentarán las empresas del mañana y ayudar a las PYME innovadoras europeas a convertirse en empresas a la vanguardia del mundo. Consta de tres objetivos específicos:a)El ""Liderazgo en tecnologías industriales y de capacitación"" prestará un apoyo específico a la investigación, desarrollo, demostración y, cuando proceda, normalización y certificación en los ámbitos de las tecnologías de la información y las comunicaciones (TIC), la nanotecnología, los materiales avanzados, la biotecnología, la fabricación y transformación avanzadas y el espacio. Se hará hincapié en la interacción y convergencia de las diferentes tecnologías y entre sí, así como en sus relaciones con los desafíos de sociedad. Se tendrán en adecuada consideración las necesidades de los usuarios en estos ámbitos. H2020-EU.2.1. (http://cordis.europa.eu/programme/rcn/664145_en.html)b)Mediante el ""Acceso a la financiación de riesgo"" se tratará de superar los déficits en la disponibilidad de financiación de deuda y de capital para las empresas y los proyectos de I+D impulsados por la innovación en todas las fases de desarrollo. Junto con el instrumento de capital del Programa de Competitividad de las Empresas y de las pequeñas y medianas empresas (COSME) (2014-2020), apoyará el desarrollo del capital-riesgo a nivel de la Unión. H2020-EU.2.2. (http://cordis.europa.eu/programme/rcn/664217_en.html)c)La ""Innovación en las PYME"" proporcionará apoyo específico a las PYME con el fin de fomentar todas las formas de innovación, centrándose en aquellas con potencial para crecer e internacionalizarse en el mercado único y fuera de él. H2020-EU.2.3. (http://cordis.europa.eu/programme/rcn/664223_en.html)El programa de estas actividades estará impulsado por las empresas. Los presupuestos para los objetivos específicos ""Acceso a la financiación de riesgo"" e ""Innovación en las PYME"" seguirán una lógica ascendente e impulsada por la demanda. Dichos presupuestos se complementarán con la utilización de instrumentos financieros. Se aplicará un instrumento dedicado a las PYME, principalmente de manera ascendente y adaptado a sus necesidades, teniéndose en cuenta los objetivos específicos de la prioridad «Retos de la sociedad» y el objetivo específico «Liderazgo en tecnologías industriales y de capacitación».Horizonte 2020 adoptará un enfoque integrado con respecto a la participación de las PYME que tendrá en cuenta, entre otras cosas, sus necesidades de transferencia de conocimientos y tecnología y llevaría a dedicarles como mínimo el 20 % de los presupuestos totales combinados de todos los objetivos específicos sobre ""Retos de la sociedad"" y el objetivo específico ""Liderazgo en tecnologías industriales y de capacitación"".El objetivo específico ""Liderazgo en tecnologías industriales y de capacitación"" seguirá un planteamiento impulsado por la tecnología para desarrollar tecnologías de capacitación que puedan utilizarse en múltiples sectores, industrias y servicios. Las aplicaciones de estas tecnologías a fin de responder a las necesidades de la sociedad se financiarán junto con la prioridad ""Retos de la sociedad"".";"";"H2020";"H2020-EC";"";"";"2014-09-23 20:20:01";"664143" +"H2020-EU.2.1.3.5.";"pl";"H2020-EU.2.1.3.5.";"";"";"Materiały dla sektorów kreatywnych, w tym związanych z dziedzictwem";"Materials for creative industries, including heritage";"

Materiały dla sektorów kreatywnych, w tym związanych z dziedzictwem

Opracowanie wzornictwa i rozwój technologii konwergencyjnych w celu tworzenia nowych możliwości biznesowych, w tym ochrona i odnawianie materiałów mających wartość historyczną lub kulturalną, jak również materiałów nowatorskich.";"";"H2020";"H2020-EU.2.1.3.";"";"";"2014-09-22 20:41:34";"664183" +"H2020-EU.2.1.3.4.";"it";"H2020-EU.2.1.3.4.";"";"";"Materiali per un'industria sostenibile, efficiente sotto il profilo delle risorse e a basse emissioni";"Materials for a resource-efficient and low-emission industry";"

Materiali per un'industria sostenibile, efficiente sotto il profilo delle risorse e a basse emissioni

Sviluppo di nuovi prodotti e applicazioni, di modelli commerciali e comportamenti responsabili dei consumatori in grado di ridurre la domanda di energia nonché di agevolare la produzione a basse emissioni di carbonio.";"";"H2020";"H2020-EU.2.1.3.";"";"";"2014-09-22 20:41:30";"664181" +"H2020-EU.2.1.3.2.";"it";"H2020-EU.2.1.3.2.";"";"";"Sviluppo e trasformazione di materiali";"Materials development and transformation";"

Sviluppo e trasformazione di materiali

Ricerca e sviluppo per garantire uno sviluppo e un ampliamento di scala efficienti, sicuri e sostenibili volti a consentire la produzione industriale di futuri prodotti basati sulla progettazione verso una gestione a bassa produzione di rifiuti dei materiali in Europa.";"";"H2020";"H2020-EU.2.1.3.";"";"";"2014-09-22 20:41:23";"664177" +"H2020-EU.2.3.2.1.";"fr";"H2020-EU.2.3.2.1.";"";"";"Soutien aux PME à forte intensité de recherche";"Support for research intensive SMEs";"

Soutien aux PME à forte intensité de recherche

L'objectif est de promouvoir, au niveau transnational, l'innovation axée sur le marché par les PME menant des activités de recherche et de développement. Une action spécifique cible les PME à forte intensité de recherche, actives dans tous les secteurs dans lesquels la capacité d'exploiter commercialement les résultats de projets est avérée. Cette action se fondera sur le programme Eurostars.";"";"H2020";"H2020-EU.2.3.2.";"";"";"2014-09-22 20:42:58";"664229" +"H2020-EU.2.1.2.5.";"pl";"H2020-EU.2.1.2.5.";"";"";"Rozwój i standaryzacja technik zwiększania przepustowości oraz metody i urządzenia pomiarowe";"Capacity-enhancing techniques, measuring methods and equipment";"

Rozwój i standaryzacja technik zwiększania przepustowości oraz metody i urządzenia pomiarowe

Ukierunkowanie na bazowe technologie wspierające rozwój i wprowadzanie na rynek bezpiecznych złożonych nanomateriałów i nanosystemów.";"";"H2020";"H2020-EU.2.1.2.";"";"";"2014-09-22 20:41:12";"664171" +"H2020-EU.2.1.2.4.";"es";"H2020-EU.2.1.2.4.";"";"";"Síntesis y fabricación eficientes y sostenibles de nanomateriales, componentes y sistemas";"Synthesis and manufacturing of nanomaterials, components and systems";"

Síntesis y fabricación eficientes y sostenibles de nanomateriales, componentes y sistemas

Centrándose en operaciones nuevas, la integración inteligente de procesos nuevos y existentes, inclusive la convergencia tecnológica, como en el caso de la nanobiotecnología, y la transposición a mayor escala para conseguir la fabricación de gran escala y alta precisión de productos y unas instalaciones flexibles y polivalentes que garanticen una transferencia eficiente de los conocimientos a la innovación industrial.";"";"H2020";"H2020-EU.2.1.2.";"";"";"2014-09-22 20:41:08";"664169" +"H2020-EU.2.1.2.5.";"fr";"H2020-EU.2.1.2.5.";"";"";"Mettre au point et standardiser des techniques, des méthodes de mesure et des équipements permettant une extension des capacités";"Capacity-enhancing techniques, measuring methods and equipment";"

Mettre au point et standardiser des techniques, des méthodes de mesure et des équipements permettant une extension des capacités

Mettre l'accent sur les technologies de soutien qui sous-tendent le développement et la mise sur le marché de nanomatériaux et de nanosystèmes complexes et sûrs.";"";"H2020";"H2020-EU.2.1.2.";"";"";"2014-09-22 20:41:12";"664171" +"H2020-EU.3.6.2.";"es";"H2020-EU.3.6.2.";"";"";"Sociedades innovadoras";"Innovative societies";"

Sociedades innovadoras

El objetivo es estimular el desarrollo de sociedades y políticas innovadoras en Europa a través del compromiso de los ciudadanos, las organizaciones de la sociedad civil, las empresas y los usuarios con la investigación y la innovación y el fomento de unas políticas de investigación e innovación coordinadas en el contexto de la mundialización y de la necesidad de promover las normas éticas más elevadas. Se prestará especial apoyo al desarrollo del EEI y a la elaboración de unas condiciones marco para la innovación.El conocimiento cultural y social es una fuente importante de creatividad e innovación, incluida la innovación empresarial, del sector público y social. En muchos casos, las innovaciones sociales y orientadas al usuario preceden también al desarrollo de tecnologías, servicios y procesos económicos innovadores. Las industrias creativas son un recurso fundamental para afrontar los retos de la sociedad y para la competitividad. Dado que las interrelaciones entre la innovación social y la tecnológica son complejas y rara vez lineales, es necesario investigar más a fondo, en especial mediante la investigación intersectorial y multidisciplinar, el desarrollo de todos los tipos de innovación, y financiar actividades para favorecer su desarrollo efectivo en el futuro.Las actividades perseguirán los siguientes objetivos específicos:(a) reforzar la información basada en pruebas y el apoyo a la iniciativa emblemática ""Unión por la innovación"" y al EEI; (b) explorar nuevas formas de innovación, con insistencia particular en la innovación y la creatividad sociales, y entender el modo en que todas las formas de innovación se desarrollan, consiguen sus fines o fracasan; (c) aprovechar el potencial innovador, creativo y productivo de todas las generaciones; (d) promover una cooperación coherente y eficaz con terceros países. ";"";"H2020";"H2020-EU.3.6.";"";"";"2014-09-22 20:49:50";"664447" +"H2020-EU.2.3.1.";"fr";"H2020-EU.2.3.1.";"";"";"Intégrer à tous les niveaux la question du soutien aux PME en particulier par l'intermédiaire d'un instrument spécifique";"Mainstreaming SME support";"

Intégrer à tous les niveaux la question du soutien aux PME en particulier par l'intermédiaire d'un instrument spécifique

Les PME sont soutenues à tous les niveaux d'Horizon 2020. À cette fin, des conditions plus favorables pour les PME sont mises en place, qui facilitent leur participation à la stratégie Horizon 2020. En outre, un instrument dédié aux PME fournit un soutien graduel et cohérent couvrant l'intégralité du cycle de l'innovation. Cet instrument cible tous les types de PME innovantes démontrant une forte ambition de se développer, de croître et de s'internationaliser. Il est disponible pour tous les types d'innovation, y compris les innovations à caractère non technologique et à caractère social et les innovations dans le domaine des services, étant donné que chaque activité apporte une valeur ajoutée européenne manifeste. L'objectif est de développer le potentiel d'innovation des PME et de capitaliser sur ce dernier, en comblant les lacunes en matière de financement qui affectent les activités de recherche et d'innovation à haut risque entreprises en phase initiale, en stimulant les innovations et en accélérant la commercialisation des résultats de la recherche par le secteur privé.L'instrument fonctionnera dans le cadre d'un système unique de gestion centralisée et d'un régime administratif allégé et selon le principe du guichet unique. Il sera essentiellement mis en œuvre selon une logique ascendante via un appel à propositions ouvert permanent.L'ensemble des objectifs spécifiques de la priorité «Défis de société», et l'objectif spécifique «Primauté dans le domaine des technologies génériques et industrielles» utiliseront l'instrument dédié aux PME et affecteront un budget à son financement.";"";"H2020";"H2020-EU.2.3.";"";"";"2014-09-22 20:42:51";"664225" +"H2020-EU.2.1.2.3.";"it";"H2020-EU.2.1.2.3.";"";"";"Sviluppare la dimensione sociale delle nanotecnologie";"Societal dimension of nanotechnology";"

Sviluppare la dimensione sociale delle nanotecnologie

Focusing on governance of nanotechnology for societal and environmental benefit.";"";"H2020";"H2020-EU.2.1.2.";"";"";"2014-09-22 20:41:05";"664167" +"H2020-EU.2.1.2.1.";"de";"H2020-EU.2.1.2.1.";"";"";"Entwicklung von Nanowerkstoffen, Nanogeräten und Nanosystemen der nächsten Generation";"Next generation nanomaterials, nanodevices and nanosystems";"

Entwicklung von Nanowerkstoffen, Nanogeräten und Nanosystemen der nächsten Generation

Ziel sind grundlegend neue Produkte, die tragfähige Lösungen in einem breiten Spektrum von Sektoren ermöglichen.";"";"H2020";"H2020-EU.2.1.2.";"";"";"2014-09-22 20:40:58";"664163" +"H2020-EU.1.4.2.";"es";"H2020-EU.1.4.2.";"";"";"Fomentar el potencial innovador de las infraestructuras de investigación y sus recursos humanos";"Research infrastructures and their human resources";"

Fomentar el potencial innovador de las infraestructuras de investigación y sus recursos humanos

El objetivo será instar a las infraestructuras de investigación a actuar como pioneras en la adopción o el desarrollo de tecnología punta, fomentar asociaciones de I+D con la industria, facilitar el uso industrial de las infraestructuras de investigación y estimular la creación de agrupaciones de innovación. Esta actividad también apoyará la formación y/o el intercambio del personal que gestiona y explota las infraestructuras de investigación.";"";"H2020";"H2020-EU.1.4.";"";"";"2014-09-22 20:40:01";"664131" +"H2020-EU.1.4.2.";"de";"H2020-EU.1.4.2.";"";"";"Steigerung des Innovationspotenzials der Forschungsinfrastrukturen und ihrer Humanressourcen";"Research infrastructures and their human resources";"

Steigerung des Innovationspotenzials der Forschungsinfrastrukturen und ihrer Humanressourcen

Ziel ist es, Forschungsinfrastrukturen dazu zu ermuntern, Spitzentechnologien in einem frühen Stadium einzusetzen oder zu entwickeln, FuE-Partnerschaften mit der Industrie zu fördern, die industrielle Nutzung von Forschungsinfrastrukturen zu erleichtern und Anreize für die Schaffung von Innovationsclustern zu geben. Unterstützt werden auch Ausbildung bzw. der Austausch von Personal, das Forschungsinfrastrukturen leitet oder betreibt.";"";"H2020";"H2020-EU.1.4.";"";"";"2014-09-22 20:40:01";"664131" +"H2020-EU.2.3.2.3.";"fr";"H2020-EU.2.3.2.3.";"";"";"Soutien à l'innovation axée sur le marché";"Supporting market-driven innovation";"

Soutien à l'innovation axée sur le marché

L'innovation axée sur le marché au niveau transnational est soutenue afin d'améliorer les conditions qui sous-tendent l'innovation, et les obstacles spécifiques qui empêchent en particulier la croissance des PME innovantes sont supprimés.";"";"H2020";"H2020-EU.2.3.2.";"";"";"2014-09-22 20:43:05";"664233" +"H2020-EU.3.2.4.";"pl";"H2020-EU.3.2.4.";"";"";"Zrównoważone i konkurencyjne sektory bioprzemysłu oraz wspieranie rozwoju europejskiej biogospodarki";"Bio-based industries and supporting bio-economy";"

Zrównoważone i konkurencyjne sektory bioprzemysłu oraz wspieranie rozwoju europejskiej biogospodarki

Celem jest promowanie niskoemisyjnych, zasobooszczędnych, zrównoważonych i konkurencyjnych europejskich sektorów bioprzemysłu. Działania mają skupiać się na wspieraniu biogospodarki opartej na wiedzy poprzez przekształcenie konwencjonalnych produktów i procesów przemysłowych w zasobooszczędne i energooszczędne bioprodukty i bioprocesy, rozwój zintegrowanych biorafinerii drugiej i kolejnych generacji, optymalizację wykorzystania biomasy z produkcji podstawowej, w tym pozostałości, bioodpadów i produktów ubocznych bioprzemysłu, a także otwarcie nowych rynków poprzez wspieranie systemów normalizacji i certyfikacji, a także działań w zakresie regulacji i demonstracji/prób terenowych i, z uwzględnieniem wpływu biogospodarki na użytkowanie gruntów i zmiany sposobu ich użytkowania, a także poglądów i wątpliwości społeczeństwa obywatelskiego.";"";"H2020";"H2020-EU.3.2.";"";"";"2014-09-22 20:45:26";"664309" +"H2020-EU.3.6.2.";"fr";"H2020-EU.3.6.2.";"";"";"Des sociétés novatrices";"Innovative societies";"

Des sociétés novatrices

L'objectif est de favoriser le développement de sociétés et de politiques novatrices en Europe, grâce à l'implication des citoyens, des organisations de la société civile, des entreprises et des utilisateurs dans les activités de recherche et d'innovation et à la promotion de politiques coordonnées en matière de recherche et d'innovation dans le contexte de la mondialisation et compte tenu de la nécessité de promouvoir les normes éthiques les plus élevées. Un soutien particulier sera accordé à la mise en place de l'Espace européen de la recherche et à l'amélioration des conditions d'encadrement de l'innovation.Les connaissances culturelles et sociétales constituent une source majeure de créativité et d'innovation, y compris l'innovation des entreprises et du secteur public et l'innovation sociale. Dans de nombreux cas, les innovations sociales et induites par les utilisateurs précèdent également l'élaboration de technologies, de services et de processus économiques innovants. Les industries créatives sont une ressource majeure pour relever les défis de société et pour stimuler la compétitivité. Les interdépendances entre l'innovation sociale et l'innovation technologique étant complexes et rarement linéaires, il est nécessaire de poursuivre les recherches, y compris les recherches transsectorielles et pluridisciplinaires, sur la mise au point de tous les types d'innovation et d'activités financés pour encourager leur développement effectif à l'avenir.Les activités visent à:(a) renforcer la base factuelle et les mesures de soutien à l'initiative phare «L'Union de l'innovation» et à l'Espace européen de la recherche; (b) explorer de nouvelles formes d'innovation, en mettant particulièrement l'accent sur l'innovation sociale et la créativité, et à comprendre comment toutes les formes d'innovation sont élaborées et comment elles se soldent par un succès ou par un échec; (c) utiliser le potentiel d'innovation, de créativité et de production de toutes les générations;(d) promouvoir une coopération cohérente et efficace avec les pays tiers. ";"";"H2020";"H2020-EU.3.6.";"";"";"2014-09-22 20:49:50";"664447" +"H2020-EU.2.3.1.";"it";"H2020-EU.2.3.1.";"";"";"Razionalizzazione del sostegno alle PMI in particolare attraverso un apposito strumento";"Mainstreaming SME support";"

Razionalizzazione del sostegno alle PMI in particolare attraverso un apposito strumento

Le PMI beneficiano di sostegno nel quadro di Orizzonte 2020 nel suo complesso. A tal fine sono create migliori condizioni per la partecipazione delle PMI a Orizzonte 2020. Inoltre, un apposito strumento per le PMI fornisce sostegno a fasi e senza soluzione di continuità per coprire l'intero ciclo dell'innovazione. Lo strumento per le PMI è rivolto a tutti i tipi di PMI innovative che presentano una forte volontà di sviluppo, crescita e internazionalizzazione. È messo a disposizione per tutti i tipi d'innovazione, compresa l'innovazione sociale, di servizio e non tecnologica, posto che ciascuna attività abbia un chiaro valore aggiunto europeo. Lo scopo è sviluppare e sfruttare il potenziale innovativo delle PMI colmando le lacune nel finanziamento della fase iniziale ad alto rischio della ricerca e dell'innovazione, stimolando le innovazioni e incrementando la commercializzazione dei risultati della ricerca da parte del settore privato.Lo strumento sarà gestito nell'ambito di un unico sistema di gestione centralizzato, caratterizzato da un regime amministrativo snello e con un unico punto di contatto. Esso è attuato principalmente con un approccio ascendente attraverso un invito aperto in modo continuativo.Tutti gli obiettivi specifici della priorità ""Sfide per la società"" e l'obiettivo specifico ""Leadership nelle tecnologie abilitanti e industriali"" applicheranno l'apposito strumento per le PMI, assegnandovi un importo.";"";"H2020";"H2020-EU.2.3.";"";"";"2014-09-22 20:42:51";"664225" +"H2020-EU.1.4.1.";"pl";"H2020-EU.1.4.1.";"";"";"Rozwijanie europejskiej infrastruktury badawczej na miarę 2020 r. i dalszej przyszłości";"Research infrastructures for 2020 and beyond";"

Rozwijanie europejskiej infrastruktury badawczej na miarę 2020 r. i dalszej przyszłości

Celem jest ułatwianie i wspieranie działań związanych z: (1) przygotowaniem, wdrożeniem i wykorzystaniem ESFRI oraz innych rodzajów światowej klasy infrastruktury badawczej, w tym rozwoju regionalnych obiektów partnerskich tam, gdzie istnieje znaczna wartość dodana interwencji unijnej; (2) integracją i zapewnieniem ponadnarodowego dostępu do krajowej i regionalnej infrastruktury badawczej o znaczeniu europejskim, aby naukowcy europejscy mogli z niej korzystać – niezależnie od umiejscowienia – do prowadzenia badań naukowych na najwyższym poziomie; (3) rozwijaniem, wdrażaniem i eksploatacją e-infrastruktury w celu zapewnienia najlepszych na świecie możliwości w zakresie łączenia w sieć, zdolności obliczeniowych oraz danych naukowych.";"";"H2020";"H2020-EU.1.4.";"";"";"2014-09-22 20:39:46";"664123" +"H2020-EU.2.3.2.1.";"de";"H2020-EU.2.3.2.1.";"";"";"Unterstützung forschungsintensiver KMU";"Support for research intensive SMEs";"

Unterstützung forschungsintensiver KMU

Ziel ist die Förderung transnationaler marktorientierter Innovation durch KMU, die auf dem Gebiet der FuE tätig sind. Eine Maßnahme richtet sich speziell an forschungsintensive KMU in allen Sektoren, die erkennbar die Fähigkeit haben, die Projektergebnisse kommerziell zu nutzen. Die Maßnahme wird auf dem Eurostars-Programm aufbauen.";"";"H2020";"H2020-EU.2.3.2.";"";"";"2014-09-22 20:42:58";"664229" +"H2020-EU.1.4.1.";"de";"H2020-EU.1.4.1.";"";"";"Ausbau der europäischen Forschungsinfrastrukturen bis 2020 und darüber hinaus";"Research infrastructures for 2020 and beyond";"

Ausbau der europäischen Forschungsinfrastrukturen bis 2020 und darüber hinaus

Ziel ist die Begünstigung und Unterstützung von Maßnahmen im Zusammenhang mit: (1) Konzeption, Verwirklichung und Betrieb des ESFRI und anderer Forschungsinfrastrukturen von Weltrang, einschließlich des Aufbaus regionaler Partnereinrichtungen in Fällen, in denen mit dem Unionsbeitrag ein erheblicher Zusatznutzen verbunden ist; (2) Integration nationaler und regionaler Forschungsinfrastrukturen von europäischem Interesse und Eröffnung des transnationalen Zugangs zu diesen, so dass sie von den europäischen Wissenschaftlern – ungeachtet ihres Standorts – für die Spitzenforschung genutzt werden können; (3) Entwicklung, Aufbau und Betrieb von e-Infrastrukturen, um weltweit eine Führungsrolle in den Bereichen Vernetzung, EDV und wissenschaftliche Daten einzunehmen.";"";"H2020";"H2020-EU.1.4.";"";"";"2014-09-22 20:39:46";"664123" +"H2020-EU.2.2.2.";"fr";"H2020-EU.2.2.2.";"";"";"Le mécanisme de fonds propres permettant le financement par les fonds propres des activités de recherche et d'innovation: «Instruments de fonds propres de l'Union pour la recherche et l'innovation»";"Equity facility";"

Le mécanisme de fonds propres permettant le financement par les fonds propres des activités de recherche et d'innovation: «Instruments de fonds propres de l'Union pour la recherche et l'innovation»

L'objectif est d'aider à surmonter les lacunes du marché européen du capital-risque et de fournir des fonds propres ou quasi-fonds propres pour couvrir les besoins de développement et de financement des entreprises innovantes, de la phase d'amorçage à celle de la croissance et de l'expansion. Il convient de soutenir en priorité les objectifs d'Horizon 2020 et des politiques connexes.Il convient, dans la mesure du possible, de cibler comme bénéficiaires finaux les entreprises de toutes tailles qui mènent des activités d'innovation ou qui s'engagent dans cette voie, en mettant particulièrement l'accent sur les PME et entreprises de taille intermédiaire innovantes.Le mécanisme de fonds propres se concentrera sur les fonds de capital-risque de départ et les fonds de fonds qui fournissent du capital-risque et des quasi-fonds propres (dont du capital mezzanine) à des entreprises individuelles. Il aura également la possibilité de réaliser des investissements en phase d'expansion et de croissance, en combinaison avec le mécanisme EFG (Equity Facility for Growth) relevant de COSME, afin de garantir un soutien continu durant les phases de démarrage et de développement des entreprises.Le mécanisme de fonds propres, qui sera essentiellement axé sur la demande, se fonde sur une approche par portefeuilles, au titre de laquelle les fonds de capital-risque et autres intermédiaires comparables sélectionnent les entreprises dans lesquelles investir.Des crédits peuvent être affectés à la réalisation de certains objectifs stratégiques, compte tenu de l'expérience positive qu'a constituée l'affectation de crédits à l'éco-innovation dans le cadre du programme-cadre pour l'innovation et la compétitivité (2007-2013), par exemple pour la réalisation d'objectifs liés aux défis de société recensés.Le volet «Démarrage», qui apporte un soutien en phase d'amorçage et en phase initiale, permet des investissements en fonds propres dans, notamment, les organismes chargés de diffuser les connaissances et dans des organismes analogues en soutenant les transferts de technologies (y compris le transfert vers le secteur productif des résultats de la recherche et des inventions procédant de la recherche publique, par exemple via la validation de concepts), les fonds de capital d'amorçage, les fonds d'amorçage et de départ transfrontières, les montages de co-investissement providentiel («business angels»), les actifs de propriété intellectuelle, les plateformes d'échange de droits de propriété intellectuelle et les fonds de capital-risque de départ, ainsi que les fonds de fonds opérant au niveau transfrontière et investissant dans des fonds de capital-risque. Dans ce cadre, l'instrument dédié aux PME pourrait aussi apporter une aide à la phase 3, en fonction du niveau de la demande.Le volet «Croissance» réalise des investissements en phase d'expansion et de croissance, en combinaison avec la facilité «capital-risque» pour la croissance relevant de COSME, et notamment des investissements dans des fonds de fonds du secteur public ou privé aux activités transfrontières qui investissent dans des fonds de capital-risque, dont la plupart se concentrent sur une thématique qui soutient les objectifs de la stratégie Europe 2020.";"";"H2020";"H2020-EU.2.2.";"";"";"2014-09-22 20:42:43";"664221" +"H2020-EU.3.2.4.";"de";"H2020-EU.3.2.4.";"";"";"Nachhaltige und wettbewerbsfähige biobasierte Industriezweige und Förderung der Entwicklung einer europäischen Biowirtschaft ";"Bio-based industries and supporting bio-economy";"

Nachhaltige und wettbewerbsfähige biobasierte Industriezweige und Förderung der Entwicklung einer europäischen Biowirtschaft

Ziel ist die Förderung ressourcenschonender, nachhaltiger und wettbewerbsfähiger europäischer biobasierter Industriezweige mit niedrigem CO2-Ausstoß. Schwerpunkt der Tätigkeiten ist die Förderung der wissensgestützten Biowirtschaft durch Umwandlung herkömmlicher Industrieverfahren und -produkte in biobasierte ressourcenschonende und energieeffiziente Verfahren und Produkte, der Aufbau integrierter Bioraffinerien der zweiten und nachfolgenden Generation, die möglichst optimale Nutzung der Biomasse aus der Primärproduktion sowie der Reststoffe, des Bioabfalls und der Nebenprodukte der biobasierten Industrie und die Öffnung neuer Märkte durch Unterstützung von Normungs- und Zertifizierungssystemen sowie von regulatorischen und Demonstrationstätigkeiten und von Feldversuchen bei gleichzeitiger Berücksichtigung der Auswirkungen der Biowirtschaft auf die (veränderte) Bodennutzung sowie der Ansichten und Bedenken der Zivilgesellschaft.";"";"H2020";"H2020-EU.3.2.";"";"";"2014-09-22 20:45:26";"664309" +"H2020-EU.2.2.2.";"it";"H2020-EU.2.2.2.";"";"";"Lo strumento di capitale proprio che fornisce finanziamenti in ambito R&I: ""Strumenti di capitale dell'Unione per la ricerca e l'innovazione""";"Equity facility";"

Lo strumento di capitale proprio che fornisce finanziamenti in ambito R&I: ""Strumenti di capitale dell'Unione per la ricerca e l'innovazione""

L'obiettivo è contribuire a superare le carenze del mercato europeo dei capitali di rischio e fornire capitale proprio o assimilabile al fine di finanziare lo sviluppo e il fabbisogno di finanziamento delle imprese innovatrici dalla fase di avvio fino alla crescita e all'espansione. L'accento è posto sul sostegno degli obiettivi di Orizzonte 2020 e delle politiche afferenti.I beneficiari finali sono potenzialmente le imprese di tutte le dimensioni che esercitano o avviano attività di innovazione, con particolare attenzione per le PMI e le mid-caps innovative.Lo strumento di capitale proprio sarà incentrata su fondi e fondi di fondi di capitale di rischio di prima fase mirati a fornire capitali di rischio e quasi-equity, compreso il finanziamento ""mezzanino"", a singole imprese portafoglio. Lo strumento avrà inoltre la possibilità di effettuare investimenti in fase di espansione e di crescita congiuntamente allo strumento di capitale proprio per la crescita del COSME, al fine di garantire un sostegno continuo durante le fasi di avviamento e sviluppo delle imprese.Lo strumento di capitale proprio, principalmente basato sulla domanda, si avvale di un approccio di portafoglio, nel quale i fondi di capitale di rischio e altri intermediari analoghi scelgono le imprese nelle quali investire.È possibile destinare una parte dei fondi per contribuire a raggiungere obiettivi politici specifici, basandosi sull'esperienza positiva nell'ambito del programma quadro per la competitività e l'innovazione (2007-2013) con destinazione specifica per l'ecoinnovazione, ad esempio per conseguire obiettivi relativi alle sfide per la società individuate.La sezione di avviamento, a sostegno della costituzione e delle fasi iniziali, consente tra l'altro investimenti azionari in organizzazioni di trasferimento delle conoscenze e organismi simili attraverso il sostegno al trasferimento di tecnologie (compreso il trasferimento di risultati di ricerca e invenzioni derivanti dalla sfera della ricerca pubblica per il settore produttivo, ad esempio mediante prova di concetto), strumenti di capitale di avviamento, fondi di capitale transfrontalieri per l'avviamento e le fasi iniziali, veicoli di coinvestimento ""business angel"", attivi da proprietà intellettuale, piattaforme per lo scambio dei diritti di proprietà intellettuale e fondi e fondi-di-fondi di capitale di rischio iniziale che operano a livello transfrontaliero e su investimenti in fondi di capitale di rischio. Ciò potrebbe includere il sostegno alla fase 3 dello strumento per le PMI subordinatamente al livello della domanda.La sezione di crescita effettua investimenti in fase espansiva e di crescita congiuntamente allo strumento di capitale proprio per la crescita del COSME, compresi gli investimenti nei fondi-di-fondi del settore pubblico e privato che operano a livello transfrontaliero e su investimenti in fondi di capitali di rischio, la maggior parte dei quali ha un oggetto tematico a sostegno degli obiettivi della strategia Europa 2020.";"";"H2020";"H2020-EU.2.2.";"";"";"2014-09-22 20:42:43";"664221" +"H2020-EU.2.3.1.";"de";"H2020-EU.2.3.1.";"";"";"Durchgehende Berücksichtigung der KMU insbesondere durch ein spezifisches Instrument";"Mainstreaming SME support";"

Durchgehende Berücksichtigung der KMU insbesondere durch ein spezifisches Instrument

KMU werden im Rahmen von Horizont 2020 bereichsübergreifend unterstützt Deshalb werden KMU bessere Bedingungen für die Teilnahme an Horizont 2020 erhalten. Zudem bietet ein eigenes KMU-Instrument eine abgestufte und nahtlose Unterstützung über den gesamten Innovationszyklus hinweg. Das KMU-Instrument richtet sich an alle Arten innovativer KMU, die deutlich und erkennbar das Ziel verfolgen, sich zu entwickeln, zu wachsen und international tätig zu werden. Es ist für alle Arten von Innovationen gedacht, auch für Dienstleistungen, nichttechnologische und soziale Innovationen, sofern jede Tätigkeit mit einem eindeutigen europäischen Mehrwert verbunden ist. Angestrebt werden Ausbau und Nutzung des Innovationspotenzials von KMU durch Überbrückung der Förderlücke bei hoch riskanter Forschung und Innovation in der Anfangsphase und durch Anreize für bahnbrechende Innovationen und die Stärkung der Vermarktung von Forschungsergebnissen durch den Privatsektor.Das Instrument erhält ein einheitliches zentralisiertes Managementsystem mit geringem Verwaltungsaufwand und einer einzigen Anlaufstelle. Es wird überwiegend nach einem Bottom-up-Ansatz über eine zeitlich unbefristete Ausschreibung durchgeführt.Bei allen Einzelzielen des Schwerpunkts ""Gesellschaftliche Herausforderungen"" und das Einzelziel ""Führenden Rolle bei grundlegenden und industriellen Technologien"" findet das KMU-Instrument Anwendung und erhält eine eigene Mittelzuweisung.";"";"H2020";"H2020-EU.2.3.";"";"";"2014-09-22 20:42:51";"664225" +"H2020-EU.2.2.";"fr";"H2020-EU.2.2.";"";"";"PRIMAUTÉ INDUSTRIELLE - Accès au financement à risque";"Access to risk finance";"

PRIMAUTÉ INDUSTRIELLE - Accès au financement à risque

Objectif spécifique

L'objectif spécifique est de contribuer à pallier les déficiences du marché sur le plan de l'accès au financement à risque à des fins de recherche et d'innovation.La situation relative aux investissements dans le domaine de la recherche et de l'innovation est désastreuse, notamment pour les PME et les entreprises de taille intermédiaire innovantes disposant d'un potentiel de croissance élevé. Le marché présente plusieurs lacunes importantes sur le plan de l'accès au financement, car les innovations qui permettraient d'atteindre les objectifs stratégiques se révèlent souvent trop risquées pour qu'il puisse les soutenir et, dès lors, la société n'en retire pas tous les avantages possibles.La création d'un mécanisme d'emprunt et d'un mécanisme de fonds propres contribuera à surmonter ces difficultés en améliorant le profil de financement et le profil de risque des activités de recherche et d'innovation concernées, ce qui, par voie de conséquence, permettra aux entreprises et aux autres bénéficiaires d'accéder plus facilement à l'emprunt, aux garanties et aux autres formes de financement à risque; encouragera l'investissement en phase de démarrage et le développement des fonds de capital-risque existants et nouveaux; améliorera le transfert de connaissances et le fonctionnement du marché de la propriété intellectuelle; renforcera l'attractivité du marché du capital-risque; et, dans l'ensemble, aidera à passer du stade de la conception, du développement et de la démonstration de nouveaux produits et services à celui de la commercialisation.Dans l'ensemble, cela encouragera le secteur privé à investir dans la recherche et l'innovation et, partant, contribuera à la réalisation d'un objectif clé de la stratégie Europe 2020: assurer, d'ici la fin de la décennie, des investissements dans la recherche et le développement à hauteur de 3 % du PIB de l'Union, dont deux tiers issus du secteur privé. Le recours aux instruments financiers contribuera également à réaliser les objectifs fixés en matière de recherche et d'innovation pour tous les secteurs et les domaines stratégiques qui jouent un rôle fondamental en vue de relever les défis de société, de renforcer la compétitivité, de promouvoir une croissance durable et inclusive et de soutenir la fourniture de biens environnementaux et autres biens publics.

Justification et valeur ajoutée de l'Union

Un mécanisme d'emprunt à l'échelle de l'Union pour les activités de recherche et d'innovation se révèle indispensable pour accroître la probabilité que des emprunts et des garanties soient accordés et que les objectifs stratégiques en matière de recherche et d'innovation soient réalisés. L'écart qui existe actuellement sur le marché entre l'offre et la demande d'emprunts et de garanties destinés à couvrir des investissements à risque dans le domaine de la recherche et de l'innovation, que cherche à combler l'actuel mécanisme de financement avec partage des risques (MFPR), devrait persister, les banques commerciales restant largement absentes du secteur des prêts à haut risque. Depuis son lancement à la mi-2007, le MFPR a reçu de nombreuses demandes de financement par l'emprunt: durant sa première phase d'activité (2007-2010), le volume d'emprunts contractés a dépassé de plus de 50 % les prévisions initiales en termes d'approbations d'emprunts en cours (7,6 milliards d'EUR, contre 5 milliards d'EUR prévus initialement).Par ailleurs, les banques ne sont généralement pas en mesure d'apprécier la valeur du capital de connaissances, tel que la propriété intellectuelle, et sont ainsi souvent réticentes à investir dans des entreprises du secteur de la connaissance. Il s'ensuit que de nombreuses entreprises innovantes établies, qu'elles soient de grande ou de petite taille, ne parviennent pas à emprunter pour financer des activités de recherche et d'innovation à haut risque. Pour le travail de conception et de mise en œuvre de son ou de ses mécanismes, qui sera mené en partenariat avec une ou plusieurs des entités qui seront chargées de l'exécution conformément au règlement (UE, Euratom) no 966/2012, la Commission veillera à ce que soient correctement pris en compte les niveaux et types de risques technologiques et financiers, afin de répondre aux besoins recensés.Ces lacunes au niveau du marché proviennent à l'origine d'incertitudes, d'asymétries sur le plan de l'information et du coût élevé des démarches visant à y remédier: les entreprises de création récente n'ont pas suffisamment fait leurs preuves pour convaincre les bailleurs de fonds potentiels, et même les entreprises de création plus ancienne ne sont souvent pas à même de fournir suffisamment d'informations. Rien ne permet par ailleurs de garantir, lorsqu'un investissement est consenti pour des activités de recherche et d'innovation, que les efforts réalisés déboucheront effectivement sur une innovation porteuse.Qui plus est, les entreprises qui en sont au stade de l'élaboration du concept ou qui sont actives dans des secteurs émergents ne disposent généralement pas de garanties suffisantes. Autre élément dissuasif: même si les activités de recherche et d'innovation donnent naissance à un produit ou à un processus commercialisable, il n'est absolument pas certain que l'entreprise qui a porté l'ensemble du projet sera le bénéficiaire exclusif des avantages qui en découlent.Pour ce qui est de la valeur ajoutée de l'Union, un mécanisme d'emprunt contribuera à pallier les déficiences du marché qui empêchent le secteur privé d'investir de manière optimale dans la recherche et l'innovation. La mise en œuvre de ce mécanisme permettra de réunir une masse critique de ressources provenant du budget de l'Union et, selon un principe de partage des risques, de la ou des institutions financières chargées de sa mise en œuvre. Elle incitera les entreprises à investir davantage de fonds propres dans des activités de recherche et d'innovation qu'elles ne l'auraient fait en l'absence de ce mécanisme. En outre, le mécanisme d'emprunt aidera les organisations, tant publiques que privées, à limiter les risques inhérents à l'achat public avant commercialisation ou aux marchés publics de produits et de services innovants.Un mécanisme de fonds propres à l'échelle de l'Union pour les activités de recherche et d'innovation est nécessaire pour permettre aux entreprises de financer plus facilement sur fonds propres leurs investissements en phase initiale et en phase de croissance et pour stimuler la croissance du marché européen du capital-risque. Lors de la phase de transfert de technologie et de démarrage, les nouvelles entreprises entrent dans une «vallée de la mort» où elles ne peuvent plus bénéficier de subventions publiques de recherche et ne peuvent pas encore attirer les investissements privés. Les aides publiques permettant de lever des fonds privés d'amorçage et de démarrage pour combler cette lacune sont encore trop fragmentées et intermittentes, ou leur gestion manque encore de savoir-faire. Par ailleurs, la plupart des fonds de capital-risque ne disposent pas, en Europe, de la taille suffisante pour financer durablement la croissance des entreprises innovantes et de la masse critique pour se spécialiser et opérer à un niveau transnational.Cette situation est lourde de conséquences. Avant la crise financière, les sommes investies dans les PME par les fonds européens de capital-risque atteignaient environ 7 milliards d'EUR annuellement. Pour 2009 et 2010, ces chiffres se situaient entre 3 et 4 milliards d'EUR. Cette baisse a eu une incidence sur le nombre de jeunes entreprises ciblées par les fonds de capital-risque: en 2007, quelque 3 000 PME avaient bénéficié de tels fonds; en 2010, elles n'étaient que 2 500 environ.Pour ce qui est de la valeur ajoutée de l'Union, le mécanisme de fonds propres pour les activités de recherche et d'innovation complétera les régimes nationaux et régionaux qui ne peuvent prendre en charge des investissements transfrontières dans ce domaine. Les accords conclus en phase initiale auront également un rôle d'exemple susceptible de bénéficier aux investisseurs publics et privés au sein de l'Union. Pour la phase de croissance, seul le niveau européen permet d'atteindre la masse critique requise et d'entraîner une forte participation des investisseurs privés, qui sont indispensables au fonctionnement d'un marché du capital-risque autonome.Les mécanismes d'emprunt et de fonds propres, qui s'appuient sur une série de mesures d'accompagnement, soutiendront la réalisation des objectifs stratégiques d'Horizon 2020. À cette fin, ils s'emploieront à consolider la base scientifique de l'Europe et à en augmenter la qualité; à promouvoir la recherche et l'innovation centrées sur les entreprises et à relever les défis de société, en mettant l'accent sur des activités telles que les projets pilotes, la démonstration, les bancs d'essai et la commercialisation. Il convient de fournir des actions spécifiques de soutien telles que des activités d'information et de parrainage pour les PME. Les autorités régionales, les associations de PME, les chambres de commerce et les intermédiaires financiers concernés pourraient être consultés, le cas échéant, dans le cadre de la programmation et de la mise en œuvre de ces activités.En outre, ils contribueront à la réalisation des objectifs en matière de recherche et d'innovation relevant d'autres programmes et d'autres domaines stratégiques, tels que la politique agricole commune, les mesures liées au climat (transition vers une économie à faibles émissions de carbone et adaptation au changement climatique) et la politique commune de la pêche. Des complémentarités avec les instruments financiers nationaux et régionaux seront développées dans le contexte du cadre stratégique commun de la politique de cohésion 2014-2020, qui prévoit un rôle accru pour les instruments financiers.La conception des mécanismes d'emprunt et de fonds propres intègre la nécessité de prendre en considération les lacunes spécifiques au niveau du marché, les caractéristiques (telles que le degré de dynamisme et le taux de création d'entreprises) et les exigences en matière de financement propres à ces domaines et à d'autres, sans créer de distorsion du marché. Le recours aux instruments financiers doit se justifier par une valeur ajoutée européenne évidente; ils devraient produire des effets de levier et compléter les instruments nationaux. La répartition de l'enveloppe budgétaire entre les différents instruments peut être adaptée au cours du programme-cadre en réaction à l'évolution de l'environnement économique.Le mécanisme de fonds propres et le volet «PME» du mécanisme d'emprunt seront mis en œuvre dans le cadre de deux instruments financiers de l'Union qui fournissent des fonds propres et des prêts pour soutenir les activités de recherche et d'innovation et la croissance des PME, en combinaison avec les mécanismes de fonds propres et d'emprunt relevant de COSME. Il faudra veiller à ce qu'Horizon 2020 et COSME soient complémentaires. Il faudra veiller à ce qu'Horizon 2020 et COSME soient complémentaires.

Grandes lignes des activités

(a) Le mécanisme d'emprunt permettant le financement par l'emprunt des activités de recherche et d'innovation: «Service de prêt et de garantie de l'Union pour la recherche et l'innovation»

L'objectif est d'améliorer l'accès au financement par l'emprunt – prêts, garanties, contre-garanties et autres formes de financement par l'emprunt et de financement à risque – pour les entités publiques et privées et les partenariats public-privé menant des activités de recherche et d'innovation qui, pour porter leurs fruits, nécessitent des investissements à risque. L'accent est mis sur le soutien aux activités de recherche et d'innovation disposant d'un potentiel élevé d'excellence.Étant donné que l'un des objectifs d'Horizon 2020 est de contribuer à combler le fossé entre, d'une part, les activités de recherche et de développement et, d'autre part, l'innovation, en favorisant la mise sur le marché de produits et de services nouveaux ou améliorés et en tenant compte du rôle déterminant de la phase de validation des concepts dans le processus de transfert de connaissances, des mécanismes nécessaires au financement des phases de validation des concepts peuvent être introduits afin de confirmer l'importance, la pertinence et l'impact futur en termes d'innovation des résultats des recherches ou d'inventions faisant l'objet du transfert.Il convient, dans la mesure du possible, de cibler comme bénéficiaires finaux les entités juridiques de toutes tailles capables de rembourser les fonds empruntés, et notamment les PME disposant d'un potentiel d'innovation et de croissance rapide, les entreprises de taille intermédiaire et les grandes entreprises, les universités et les institutions de recherche les universités et instituts de recherche, les infrastructures de recherche et infrastructures d'innovation, partenariats public-privé; et les entités ou projets à vocation spécifique.Le financement par le mécanisme d'emprunt repose sur deux grands axes:(1)la demande: les prêts et les garanties sont accordés selon le principe du «premier arrivé, premier servi», un soutien particulier étant apporté aux bénéficiaires tels que les PME et les entreprises de taille intermédiaire. Cet axe doit permettre de faire face à l'augmentation constante et continue du volume de prêts accordés par le mécanisme de financement avec partage des risques, qui repose sur la demande. Le volet «PME» soutient les activités visant à améliorer l'accès au financement des PME et d'autres entités axées sur la recherche et le développement et/ou l'innovation. Dans ce cadre, l'instrument dédié aux PME pourrait aussi apporter une aide à la phase 3, en fonction du niveau de la demande.(2)les priorités sont ciblés en priorité les politiques et les secteurs clés dont la contribution est fondamentale pour relever les défis de société, renforcer la primauté industrielle et la compétitivité, promouvoir une croissance durable, inclusive et à faibles émissions de carbone et assurer la fourniture de biens environnementaux et autres biens publics. Cet axe doit aider l'Union à prendre en charge les volets de ses objectifs de politique sectorielle ayant trait à la recherche et à l'innovation.

(b) Le mécanisme de fonds propres permettant le financement par les fonds propres des activités de recherche et d'innovation: «Instruments de fonds propres de l'Union pour la recherche et l'innovation»

L'objectif est d'aider à surmonter les lacunes du marché européen du capital-risque et de fournir des fonds propres ou quasi-fonds propres pour couvrir les besoins de développement et de financement des entreprises innovantes, de la phase d'amorçage à celle de la croissance et de l'expansion. Il convient de soutenir en priorité les objectifs d'Horizon 2020 et des politiques connexes.Il convient, dans la mesure du possible, de cibler comme bénéficiaires finaux les entreprises de toutes tailles qui mènent des activités d'innovation ou qui s'engagent dans cette voie, en mettant particulièrement l'accent sur les PME et entreprises de taille intermédiaire innovantes.Le mécanisme de fonds propres se concentrera sur les fonds de capital-risque de départ et les fonds de fonds qui fournissent du capital-risque et des quasi-fonds propres (dont du capital mezzanine) à des entreprises individuelles. Il aura également la possibilité de réaliser des investissements en phase d'expansion et de croissance, en combinaison avec le mécanisme EFG (Equity Facility for Growth) relevant de COSME, afin de garantir un soutien continu durant les phases de démarrage et de développement des entreprises.Le mécanisme de fonds propres, qui sera essentiellement axé sur la demande, se fonde sur une approche par portefeuilles, au titre de laquelle les fonds de capital-risque et autres intermédiaires comparables sélectionnent les entreprises dans lesquelles investir.Des crédits peuvent être affectés à la réalisation de certains objectifs stratégiques, compte tenu de l'expérience positive qu'a constituée l'affectation de crédits à l'éco-innovation dans le cadre du programme-cadre pour l'innovation et la compétitivité (2007-2013), par exemple pour la réalisation d'objectifs liés aux défis de société recensés.Le volet «Démarrage», qui apporte un soutien en phase d'amorçage et en phase initiale, permet des investissements en fonds propres dans, notamment, les organismes chargés de diffuser les connaissances et dans des organismes analogues en soutenant les transferts de technologies (y compris le transfert vers le secteur productif des résultats de la recherche et des inventions procédant de la recherche publique, par exemple via la validation de concepts), les fonds de capital d'amorçage, les fonds d'amorçage et de départ transfrontières, les montages de co-investissement providentiel («business angels»), les actifs de propriété intellectuelle, les plateformes d'échange de droits de propriété intellectuelle et les fonds de capital-risque de départ, ainsi que les fonds de fonds opérant au niveau transfrontière et investissant dans des fonds de capital-risque. Dans ce cadre, l'instrument dédié aux PME pourrait aussi apporter une aide à la phase 3, en fonction du niveau de la demande.Le volet «Croissance» réalise des investissements en phase d'expansion et de croissance, en combinaison avec la facilité «capital-risque» pour la croissance relevant de COSME, et notamment des investissements dans des fonds de fonds du secteur public ou privé aux activités transfrontières qui investissent dans des fonds de capital-risque, dont la plupart se concentrent sur une thématique qui soutient les objectifs de la stratégie Europe 2020.";"";"H2020";"H2020-EU.2.";"";"";"2014-09-22 20:42:36";"664217" +"H2020-EU.2.2.";"de";"H2020-EU.2.2.";"";"";"FÜHRENDE ROLLE DER INDUSTRIE - Zugang zu Risikofinanzierung";"Access to risk finance";"

FÜHRENDE ROLLE DER INDUSTRIE - Zugang zu Risikofinanzierung

Einzelziel

Ziel ist die Unterstützung der Behebung von Marktdefiziten beim Zugang zur Risikofinanzierung für Forschung und Innovation.Die Situation bei den Investitionen in FuI ist vor allem bei innovativen KMU und Unternehmen mit mittlerer Kapitalausstattung, die über ein hohes Wachstumspotenzial verfügen, bedenklich. Der Markt weist hinsichtlich der Bereitstellung von Finanzmitteln zu große Defizite auf, um die Risiken, die mit den zur Erreichung der politischen Ziele notwendigen Innovationen verbunden sind, tragen zu können, weshalb die ganze Bandbreite der Vorteile der Gesellschaft nicht voll zugute kommt.Mit einer Fazilität für Kredite (""Kreditfazilität"") und einer Fazilität für Beteiligungskapital (""Beteiligungskapital-Fazilität"") lassen sich solche Probleme überwinden, indem das Finanzierungs- und das Risikoprofil der betreffenden FuI-Tätigkeiten verbessert wird. Dies erleichtert wiederum Unternehmen und anderen Zielgruppen den Zugang zu Darlehen, Garantien und anderen Formen der Risikofinanzierung, es fördert Anschubinvestitionen und den Ausbau bestehender bzw. Aufbau neuer Risikokapitalfonds, es verbessert den Wissenstransfer und den Markt für geistiges Eigentum, es lenkt Mittel auf den Risikokapitalmarkt und trägt insgesamt dazu bei, den Übergang von der Konzeption, Entwicklung und Demonstration neuer Produkte und Dienstleistungen zu ihrer Vermarktung zu erleichtern.Insgesamt wird die Bereitschaft des Privatsektors erhöht, in FuI zu investieren und damit zur Umsetzung eines der Hauptziele der Strategie Europa 2020 beizutragen, nämlich bis zum Ende des Jahrzehnts bei den Investitionen in FuE einen Anteil von 3 % des BIP der Union zu erreichen, wobei zwei Drittel vom Privatsektor aufgebracht werden Der Einsatz der Finanzierungsinstrumente wird darüber hinaus die FuI-Ziele aller Sektoren und Politikfelder unterstützen, die für die Bewältigung der gesellschaftlichen Herausforderungen, für die Stärkung der Wettbewerbsfähigkeit und für die Förderung eines nachhaltigen, integrativen Wachstums sowie die Bereitstellung von ökologischen und sonstigen öffentlichen Gütern entscheidend sind.

Begründung und Mehrwert für die Union

Eine Kreditfazilität für FuI auf Unionsebene ist notwendig, um die Vergabe von Darlehen und Garantien zu erleichtern und um die politischen Ziele für FuI zu erreichen. Es ist davon auszugehen, dass die derzeitige Marktlücke zwischen Nachfrage und Angebot bei Darlehen und Garantien für riskante FuI-Investitionen, die derzeit unter die Fazilität für Finanzierungen auf Risikoteilungsbasis (RSFF) fallen, angesichts der nach wie vor bestehenden Zurückhaltung der Handelsbanken bei der Vergabe von Darlehen mit höherem Risiko fortbestehen wird. Die Nachfrage nach RSFF-Darlehensfinanzierung ist seit Einrichtung der RSFF Mitte 2007 unverändert hoch; die aktive Genehmigung von Darlehen überstieg in der ersten Phase (2007-2010) mit 7,6 Mrd. EUR die ursprünglichen Erwartungen von 5 Mrd. EUR um über 50 %.Außerdem sind Banken in der Regel nicht in der Lage, Vermögen in Form von Wissen – etwa geistiges Eigentum – richtig einzuschätzen, und sie sind daher häufig nicht gewillt, in wissensorientierte Unternehmen zu investieren. In der Konsequenz werden vielen etablierten innovativen Unternehmen – großen wie kleinen – keine Darlehen für FuI-Tätigkeiten mit höherem Risiko gewährt. Die Kommission wird bei der Gestaltung und Umsetzung ihrer Fazilität(en), die in Partnerschaft mit einer oder mehreren betrauten Einrichtungen im Einklang mit der Verordnung (EU, Euratom) Nr. 966/2012 erfolgt, dafür Sorge tragen, dass technologische und finanzielle Risiken in Bezug auf Ausmaß und Formen angemessen berücksichtigt werden, damit die ermittelten Erfordernisse erfüllt werden.Diese Marktlücken sind im Grunde auf Unsicherheiten, Informationsasymmetrien und höhere Kosten zurückzuführen, die bei der Klärung dieser Fragen entstehen. Neu gegründete Unternehmen sind zu kurz im Geschäft, um den Ansprüchen potenzieller Geldgeber zu genügen, selbst etablierte Unternehmen können häufig nur unzureichende Informationen vorlegen und zu Beginn einer FuI-Investition ist überhaupt nicht sicher, ob die Anstrengungen tatsächlich zu einer erfolgreichen Innovation führen werden.Darüber hinaus fehlt es Unternehmen, deren Konzept noch in der Entwicklungsphase steckt oder die auf neu entstehenden Geschäftsfeldern tätig sind, in der Regel an Nebensicherheiten. Ein weiterer Hinderungsgrund besteht darin, dass, selbst wenn aus den FuI-Tätigkeiten ein kommerzielles Produkt oder Verfahren hervorgeht, es überhaupt nicht sicher ist, dass das Unternehmen, das die Anstrengungen unternommen hat, auch der alleinige Nutznießer sein wird.Im Hinblick auf den Mehrwert für die Union wird eine Kreditfazilität dazu beitragen, Marktdefizite zu beheben, die den Privatsektor davon abhalten, FuI-Investitionen in optimaler Höhe zu tätigen. Die Umsetzung dieser Fazilität ermöglicht die Bündelung einer kritischen Masse von Ressourcen aus dem Unionshaushalt und, auf Risikoteilungsbasis, der mit der Durchführung betrauten Finanzinstitute. So erhalten Unternehmen Anreize, einen höheren Anteil ihres eigenen Kapitals in FuI zu investieren, als sie es sonst getan hätten. Ferner hilft eine Kreditfazilität öffentlichen und privaten Organisationen, die Risiken der vorkommerziellen Auftragsvergabe oder der Auftragsvergabe für innovative Produkte und Dienstleistungen zu verringern.Eine Beteiligungskapital-Fazilität für FuI auf Unionsebene ist notwendig, um bei Investitionen im Früh- und Wachstumsstadium die Verfügbarkeit von Beteiligungsfinanzierungen zu verbessern und der Entwicklung des Risikokapitalmarkts der Union einen Schub zu geben. Während des Technologietransfers und der Gründungsphase stehen neue Unternehmen vor einer Durststrecke – die öffentliche Forschungsförderung läuft aus und private Finanzmittel sind noch nicht zu beschaffen. Die öffentliche Förderung der Mobilisierung von privatem Gründungs- und Startkapital, das diese Lücke schließt, ist zurzeit zu zersplittert und unregelmäßig oder wird nicht professionell genug gehandhabt. Ferner sind die meisten Risikokapitalfonds in Europa zu klein, um das anhaltende Wachstum innovativer Unternehmen zu fördern, und verfügen auch nicht über die kritische Masse, um sich zu spezialisieren und auf transnationaler Basis zu arbeiten.Die Folgen sind schwerwiegend. Vor der Finanzkrise lag der von europäischen Risikokapitalfonds in KMU investierte Betrag bei 7 Mrd. EUR pro Jahr, während die Zahlen für 2009 und 2010 sich im Bereich von 3 bis 4 Mrd. EUR bewegen. Die geringere Risikokapitalfinanzierung wirkt sich auf die Zahl der von den Risikokapitalfonds anvisierten Firmenneugründungen aus: 2007 erhielten etwa 3 000 KMU eine Risikokapitalfinanzierung, während 2010 die Zahl bei nur etwa 2 500 lag.Im Hinblick auf den Mehrwert für die Union wird die Beteiligungskapital-Fazilität für FuI nationale und regionale Systeme ergänzen, die sich nicht auf grenzüberschreitende FuI-Investitionen erstrecken. Die Anschubunterstützung wird auch einen Demonstrationseffekt haben, von dem öffentliche und private Investoren europaweit profitieren werden. In der Wachstumsphase ist es nur auf europäischer Ebene möglich, den notwendigen Umfang und eine massive Beteiligung privater Investoren zu erreichen, die für einen funktionierenden und selbsttragenden Risikokapitalmarkt unerlässlich sind.Die Kreditfazilität und die Beteiligungskapital-Fazilität unterstützen – zusammen mit flankierenden Maßnahmen – die politischen Ziele von Horizont 2020. Daher werden sie eingesetzt für die Konsolidierung und Steigerung der Qualität der europäischen Wissenschaftsbasis, die Förderung von Forschung und Innovation mit einer unternehmensorientierten Agenda und die Bewältigung gesellschaftlicher Herausforderungen mit einem Schwerpunkt auf Tätigkeiten wie Pilotprojekten, Demonstration, Testläufen und Vermarktung. Es sollten spezielle unterstützende Maßnahmen wie Informations- und Coachingangebote für KMU bereitgestellt werden. Regionale Behörden, KMU-Verbände, Handelskammern und einschlägige Finanzvermittler können gegebenenfalls in Bezug auf die Planung und Umsetzung dieser Tätigkeiten konsultiert werden.Darüber hinaus unterstützen sie die Erreichung der FuI-Ziele anderer Programme und Politikfelder, beispielsweise der Gemeinsamen Agrarpolitik, im Klimaschutz (Übergang zu einer Wirtschaft mit niedrigem CO2-Ausstoß und Anpassung an den Klimawandel) und der Gemeinsamen Fischereipolitik. Im Zusammenhang mit dem gemeinsamen strategischen Rahmen für die Kohäsionspolitik 2014 bis 2020, der eine größere Rolle für Finanzierungsinstrumente vorsieht, werden Ergänzungen zu den nationalen und regionalen Finanzierungsinstrumenten entwickelt.Die Konzeption der Kreditfazilität und der Beteiligungskapital-Fazilität berücksichtigt die Notwendigkeit, die jeweiligen Marktdefizite zu beheben, die Merkmale (etwa Grad der Dynamik und Gründungsrate von Unternehmen) sowie der Finanzierungsbedarf in diesem und in anderen Bereichen, ohne dass dadurch Marktstörungen verursacht werden. Der Einsatz der Finanzinstrumente muss mit einem eindeutigen europäischen Mehrwert verbunden sein, eine Hebelwirkung entfalten und in Ergänzung der nationalen Instrumente erfolgen. Mittelzuweisungen zwischen den Instrumenten können im Verlauf von Horizont 2020 entsprechend den veränderten ökonomischen Rahmenbedingungen angepasst werden.Die Beteiligungskapital-Fazilität und der KMU-Teil der Kreditfazilität werden als Teil der beiden Finanzierungsinstrumente der Union umgesetzt, mit denen Beteiligungs- und Kreditkapital zur Unterstützung von FuI und Wachstum von KMU in Verbindung mit den Beteiligungs- und Kreditfazilitäten im Rahmen von COSME bereitgestellt werden. Die Komplementarität zwischen Horizont 2020 und COSMEwird sichergestellt.

Einzelziele und Tätigkeiten in Grundzügen

(a) Die Kreditfazilität für FuI: ""Unionsdarlehen und Garantien für Forschung und Innovation""

Ziel ist ein leichterer Zugang zur Kreditfinanzierung – in Form von Darlehen, Garantien, Rückbürgschaften und sonstigen Arten der Kredit- und Risikofinanzierung – für öffentliche und private Rechtspersonen und öffentlich-private Partnerschaften, die auf dem Gebiet der Forschung und Innovation tätig sind und die bei ihren Investitionen Risiken eingehen müssen, damit diese Früchte tragen. Schwerpunkt ist die Unterstützung von Forschung und Innovation mit einem hohen Exzellenzpotenzial.Da es zu den Zielen von Horizont 2020 gehört, dazu beizutragen, die Lücke zwischen der Forschung und Entwicklung und Innovationen zu schließen und den Markteintritt neuer und verbesserter Produkte und Dienstleistungen zu befördern, und angesichts der entscheidenden Rolle der Konzepterprobung beim Wissenstransferprozess können Mechanismen zur Finanzierung der Konzepterprobungsphasen eingeführt werden, die notwendig sind, um die Bedeutung, Relevanz und künftige Innovationskraft der Forschungsergebnisse oder Erfindungen zu bewerten, die es zu transferieren gilt.Zielgruppe: Rechtspersonen jeder Größe, die Geld leihen und zurückzahlen können, KMU mit dem Potenzial, Innovationen durchzuführen und rasch zu expandieren, Unternehmen mittlerer Größe und Großunternehmen, Hochschulen und Forschungsinstitute, Forschungs- und Innovationsinfrastrukturen, öffentlich-private Partnerschaften, öffentlich-private Partnerschaften sowie Zweckgesellschaften oder Projekte;Die Kreditfazilität beinhaltet die folgenden beiden Komponenten:(1)Nachfrageorientierte Förderung: Darlehen und Garantien werden in der Reihenfolge des Eingangs der Anträge gewährt, wobei Empfänger wie KMU und Unternehmen mit mittlerer Kapitalausstattung besonders unterstützt werden. Diese Komponente entspricht dem stetig und kontinuierlich zu verzeichnenden Anstieg des Volumens der nachfragegesteuerten RSFF-Kreditvergabe. Im Rahmen des KMU-Teils werden Tätigkeiten gefördert, mit denen der Zugang der KMU und anderer FuE- und/oder innovationsorientierter Unternehmen zur Finanzierung verbessert werden soll. Dies könnte – je nach Nachfrage – Unterstützung in der Phase 3 des KMU-Instruments umfassen.(2) Gezielte Förderung: Konzentration auf die Strategien und Schlüsselsektoren, die für die Bewältigung der gesellschaftlichen Herausforderungen, die Stärkung der industriellen Führungsposition und der Wettbewerbsfähigkeit, die Unterstützung eines nachhaltigen und integrativen Wachstums mit niedrigem CO2-Ausstoß und die Bereitstellung ökologischer und sonstiger öffentlicher Güter entscheidend sind. Diese Komponente unterstützt die Union dabei, die forschungs- und innovationsrelevanten Aspekte der sektorspezifischen politischen Ziele anzugehen.

(b) Die Beteiligungskapital-Fazilität für FuI: ""Unionsinstrumente für die Beteiligungsfinanzierung von Forschung und Innovation""

Angestrebt werden die Überwindung der Defizite des Risikokapitalmarkts der Union und die Bereitstellung von Beteiligungskapital und Quasi-Beteiligungskapital zur Deckung des Entwicklungs- und Finanzierungsbedarfs innovativer Unternehmen – von der Gründung bis zum Wachstum und zur Expansion. Schwerpunkt ist die Unterstützung der Ziele von Horizont 2020 und der einschlägigen Politik.Zielgruppe: Unternehmen jeder Größe, die auf dem Gebiet der Innovation tätig sind oder ihre Innovationstätigkeit aufnehmen, wobei innovativen KMU und Unternehmen mit mittlerer Kapitalausstattung besondere Aufmerksamkeit gilt.Die Beteiligungskapital-Fazilität konzentriert sich auf Frühphasen-Risikokapitalfonds und Dachfonds, mit denen einzelnen Portfolio-Unternehmen Risikokapital und Quasi-Beteiligungskapital (einschließlich Mezzanine-Kapital) zur Verfügung gestellt wird. Die Fazilität bietet auch die Möglichkeit für Investitionen in der Expansions- und Wachstumsphase in Verbindung mit der Beteiligungskapital-Fazilität für Wachstum im Rahmen von COSME, um eine kontinuierliche Unterstützung von der Gründung bis zur Expansion der Unternehmen zu gewährleisten.Die Beteiligungskapital-Fazilität, die vor allem nachfrageabhängig ist, stützt sich auf ein Portfolio-Konzept, bei dem Risikokapitalfonds und andere vergleichbare Intermediäre die für sie in Frage kommenden Unternehmen auswählen.In Anlehnung an die positiven Erfahrungen mit dem Programm für Wettbewerbsfähigkeit und Innovation (2007 bis 2013), in dem Mittel speziell für Öko-Innovationen, beispielsweise für die Erreichung von Zielen im Zusammenhang mit den festgestellten gesellschaftlichen Herausforderungen, bereitgestellt wurden, können Mittel speziell für die Unterstützung bestimmter politischer Ziele vorgesehen werden.Der Gründungsteil, mit dem die Gründungs- und die Frühphase unterstützt werden, soll Beteiligungskapitalinvestitionen u. a. in Organisationen für den Wissenstransfer und ähnliche Einrichtungen über Unterstützung für den Technologietransfer (einschließlich des Transfers von Forschungsergebnissen und Erfindungen aus dem Bereich der öffentlichen Forschung für den Produktionssektor, z. B. durch Konzepterprobung), in Gründungskapitalfonds, grenzüberschreitende Fonds für die Gründungs- und Frühphase, Business-Angel-Koinvestitionsinstrumente, Rechte an geistigem Eigentum, Plattformen für den Handel mit Rechten am geistigen Eigentum und in Risikokapitalfonds für die Frühphase sowie in grenzüberschreitend tätige und in Risikokapitalfonds investierende Dachfonds ermöglichen. Dies könnte – je nach Nachfrage – Unterstützung in der Phase 3 des KMU-Instruments umfassen.Der Wachstumsteil ermöglicht Investitionen in der Expansions- und Wachstumsphase in Verbindung mit der Beteiligungskapital-Fazilität für Wachstum im Rahmen von COSME, einschließlich Investitionen in grenzüberschreitend tätige Dachfonds des privaten sowie des öffentlichen Sektors, die in Risikokapitalfonds investieren und die überwiegend einen thematischen Schwerpunkt haben, der die Ziele der Strategie Europa 2020 unterstützt.";"";"H2020";"H2020-EU.2.";"";"";"2014-09-22 20:42:36";"664217" +"H2020-EU.2.1.4.2.";"fr";"H2020-EU.2.1.4.2.";"";"";"Produits et processus industriels fondés sur les biotechnologies";"Bio-technology based industrial products and processes";"

Produits et processus industriels fondés sur les biotechnologies

Développement des biotechnologies industrielles et de la conception de bioprocédés à l'échelle industrielle pour la mise au point de produits industriels compétitifs et de processus durables (par exemple dans le domaine de la chimie, de la santé, de l'exploitation minière, de l'énergie, du papier et de la pâte à papier, des produits à base de fibres et du bois, du textile, de la production d'amidon ou de fécule ou de la transformation des produits alimentaires) et promotion de leur dimension environnementale et sanitaire, y compris les opérations de nettoyage.";"";"H2020";"H2020-EU.2.1.4.";"";"";"2014-09-22 20:41:52";"664193" +"H2020-EU.2.1.3.2.";"es";"H2020-EU.2.1.3.2.";"";"";"Desarrollo y transformación de materiales";"Materials development and transformation";"

Desarrollo y transformación de materiales

Investigación y desarrollo a fin de garantizar un desarrollo y aumento de escala eficientes, seguros y sostenibles que hagan posible la fabricación industrial de futuros productos basados en el diseño, con vistas a una gestión de materiales ""sin desechos"" en Europa.";"";"H2020";"H2020-EU.2.1.3.";"";"";"2014-09-22 20:41:23";"664177" +"H2020-EU.2.1.4.3.";"de";"H2020-EU.2.1.4.3.";"";"";"Innovative und wettbewerbsfähige Plattformtechnologien";"Innovative and competitive platform technologies";"

Innovative und wettbewerbsfähige Plattformtechnologien

Aufbau von Plattformtechnologien (z. B. Genomik, Metagenomik, Proteomik, Metabolomik, molekulare Werkzeuge, Expressionssysteme, Phänotypisierungsplattformen und zellbasierte Plattformen) zur Festigung der Führungsrolle und für den Ausbau des Wettbewerbsvorteils in einem breiteren Spektrum von Sektoren mit wirtschaftlicher ";"";"H2020";"H2020-EU.2.1.4.";"";"";"2014-09-22 20:41:55";"664195" +"H2020-EU.2.1.3.7.";"de";"H2020-EU.2.1.3.7.";"";"";"Optimierung des Werkstoffeinsatzes";"Optimisation of the use of materials";"

Optimierung des Werkstoffeinsatzes

Forschung und Entwicklung zur Untersuchung von Substitutionen und Alternativen für den Einsatz von Werkstoffen und innovativen Ansätzen für Geschäftsmodelle sowie Identifizierung kritischer Ressourcen.";"";"H2020";"H2020-EU.2.1.3.";"";"";"2014-09-22 20:41:41";"664187" +"H2020-EU.2.1.3.3.";"es";"H2020-EU.2.1.3.3.";"";"";"Gestión de componentes de materiales";"Management of materials components";"

Gestión de componentes de materiales

Investigación y desarrollo de técnicas nuevas e innovadoras de producción de materiales, componentes y sistemas.";"";"H2020";"H2020-EU.2.1.3.";"";"";"2014-09-22 20:41:26";"664179" +"H2020-EU.2.1.3.7.";"fr";"H2020-EU.2.1.3.7.";"";"";"Optimisation de l'utilisation des matériaux";"Optimisation of the use of materials";"

Optimisation de l'utilisation des matériaux

Recherche et développement axés sur la recherche de solutions alternatives et de substitution à l'utilisation de certains matériaux, sur l'étude d'approches innovantes concernant les modèles commerciaux, et sur le recensement des ressources critiques.";"";"H2020";"H2020-EU.2.1.3.";"";"";"2014-09-22 20:41:41";"664187" +"H2020-EU.2.3.1.";"es";"H2020-EU.2.3.1.";"";"";"Integrar el apoyo a las PYME, especialmente mediante un instrumento específico";"Mainstreaming SME support";"

Integrar el apoyo a las PYME, especialmente mediante un instrumento específico

Se financiará a las PYME en todo el programa Horizonte 2020. Con este fin, se establecerán mejores condiciones para la participación de las PYME en Horizonte 2020. Además, un instrumento dedicado a las PYME facilitará un apoyo por etapas y sin fisuras que cubra todo el ciclo de la innovación. El instrumento de las PYME se destinará a todos los tipos de PYME innovadoras que demuestren una ambición firme de desarrollarse, crecer e internacionalizarse. Se facilitará para todo tipo de innovaciones, incluidas las referidas a servicios, no tecnológicas o sociales, habida cuenta de que cada actividad ofrece un claro valor añadido europeo. El objetivo es desarrollar y explotar el potencial de innovación de las PYME, colmando las lagunas que existen en la financiación de la fase inicial de la investigación e innovación de alto riesgo, estimulando las innovaciones y potenciando la comercialización por el sector privado de los resultados de la investigación.El instrumento funcionará conforme a una única estructura de gestión centralizada, un régimen administrativo ágil y una ventanilla única. Se aplicará siguiendo principalmente una lógica ascendente, mediante convocatorias públicas continuas.Todos los objetivos específicos de la prioridad ""Retos de la sociedad"" y el objetivo específico de ""Liderazgo en tecnologías industriales y de capacitación"" aplicarán el instrumento dedicado a las PYME y asignarán un importe a tal efecto.";"";"H2020";"H2020-EU.2.3.";"";"";"2014-09-22 20:42:51";"664225" +"H2020-EU.2.1.2.3.";"pl";"H2020-EU.2.1.2.3.";"";"";"Rozwój wymiaru społecznego nanotechnologii";"Societal dimension of nanotechnology";"

Rozwój wymiaru społecznego nanotechnologii

Nacisk na zarządzanie w zakresie nanotechnologii z korzyścią dla społeczeństwa i środowiska ";"";"H2020";"H2020-EU.2.1.2.";"";"";"2014-09-22 20:41:05";"664167" +"H2020-EU.2.1.3.6.";"pl";"H2020-EU.2.1.3.6.";"";"";"Metrologia, charakteryzowanie, standaryzacja i kontrola jakości";"Metrology, characterisation, standardisation and quality control";"

Metrologia, charakteryzowanie, standaryzacja i kontrola jakości

Promowanie technologii służących takim celom jak charakteryzowanie, nieniszcząca ewaluacja, stałe ocenianie i monitorowanie oraz predyktywne modelowanie wydajności na potrzeby postępów w materiałoznawstwie i inżynierii oraz ich oddziaływania.";"";"H2020";"H2020-EU.2.1.3.";"";"";"2014-09-22 20:41:37";"664185" +"H2020-EU.2.1.3.5.";"it";"H2020-EU.2.1.3.5.";"";"";"Materiali per le industrie creative, comprese quelle relative al patrimonio";"Materials for creative industries, including heritage";"

Materiali per le industrie creative, comprese quelle relative al patrimonio

Applicazione, progettazione e sviluppo di tecnologie convergenti per creare nuove opportunità commerciali, tra cui la conservazione e il ripristino dei materiali con valore storico o culturale nonché i nuovi materiali.";"";"H2020";"H2020-EU.2.1.3.";"";"";"2014-09-22 20:41:34";"664183" +"H2020-EU.2.1.3.4.";"fr";"H2020-EU.2.1.3.4.";"";"";"Matériaux pour une industrie durable, efficace dans l'utilisation des ressources et à faible émission de carbone";"Materials for a resource-efficient and low-emission industry";"

Matériaux pour une industrie durable, efficace dans l'utilisation des ressources et à faible émission de carbone

Développement de nouveaux produits et de nouvelles applications, mise au point de modèles d'entreprise et instauration d'habitudes de consommation responsables, qui réduisent la demande en énergie et facilitent une production à faibles émissions de carbone.";"";"H2020";"H2020-EU.2.1.3.";"";"";"2014-09-22 20:41:30";"664181" +"H2020-EU.2.1.3.3.";"it";"H2020-EU.2.1.3.3.";"";"";"Gestione dei componenti dei materiali";"Management of materials components";"

Gestione dei componenti dei materiali

Ricerca e sviluppo di tecniche nuove e innovative per materiali e relativi componenti e sistemi.";"";"H2020";"H2020-EU.2.1.3.";"";"";"2014-09-22 20:41:26";"664179" +"H2020-EU.3.4.4.";"es";"H2020-EU.3.4.4.";"";"";"Investigación socioeconómica y de comportamiento y actividades de prospectiva para la formulación de políticas";"Socio-economic and behavioural research";"

Investigación socioeconómica y de comportamiento y actividades de prospectiva para la formulación de políticas

El objetivo es apoyar la formulación de las políticas necesarias para promover la innovación y hacer frente a los retos que plantea el transporte y las correspondientes necesidades sociales.El propósito de las actividades será mejorar la comprensión de los impactos, tendencias y perspectivas socioeconómicas relacionadas con el transporte, incluida la evolución futura de la demanda, y facilitar a los responsables políticos datos factuales y análisis. Asimismo se prestará atención a la difusión de los resultados obtenidos merced a dichas actividades.";"";"H2020";"H2020-EU.3.4.";"";"";"2014-09-22 20:47:57";"664387" +"H2020-EU.3.4.4.";"fr";"H2020-EU.3.4.4.";"";"";"Recherche socio-économique et comportementale et activités de prospective en appui à la prise de décisions";"Socio-economic and behavioural research";"

Recherche socio-économique et comportementale et activités de prospective en appui à la prise de décisions

L'objectif est de contribuer à l'amélioration de la prise de décisions, ce qui est indispensable afin de promouvoir l'innovation, de relever les défis liés aux transports et de répondre aux besoins de société qui y sont liés.Les activités viseront avant tout à assurer une meilleure compréhension des répercussions, des tendances et des perspectives socio-économiques liées aux transports, y compris l'évolution de la demande future, et à fournir aux décideurs politiques des données et des analyses fondées sur des éléments factuels. Une attention particulière sera également accordée à la diffusion des résultats produits par ces activités.";"";"H2020";"H2020-EU.3.4.";"";"";"2014-09-22 20:47:57";"664387" +"H2020-EU.2.1.3.2.";"pl";"H2020-EU.2.1.3.2.";"";"";"Rozwój i przekształcanie materiałów";"Materials development and transformation";"

Rozwój i przekształcanie materiałów

Działania badawczo-rozwojowe mające na celu efektywne, bezpieczne i zrównoważone opracowywanie i zwiększanie skali, umożliwiające przemysłowe wytwarzanie produktów opartych na przyszłych projektach, zmierzające w kierunku bezodpadowej gospodarki materiałowej w Europie. ";"";"H2020";"H2020-EU.2.1.3.";"";"";"2014-09-22 20:41:23";"664177" +"H2020-EU.2.1.2.5.";"it";"H2020-EU.2.1.2.5.";"";"";"Sviluppo e standardizzazione di tecniche, metodi di misurazione e attrezzature abilitanti";"Capacity-enhancing techniques, measuring methods and equipment";"

Sviluppo e standardizzazione di tecniche, metodi di misurazione e attrezzature abilitanti

Accento sulle tecnologie di supporto a sostegno dello sviluppo e dell'introduzione sul mercato di nanomateriali e nanosistemi sicuri complessi.";"";"H2020";"H2020-EU.2.1.2.";"";"";"2014-09-22 20:41:12";"664171" +"H2020-EU.2.1.2.4.";"it";"H2020-EU.2.1.2.4.";"";"";"Sintesi e produzione efficienti e sostenibili di nanomateriali, componenti e sistemi";"Synthesis and manufacturing of nanomaterials, components and systems";"

Sintesi e produzione efficienti e sostenibili di nanomateriali, componenti e sistemi

Accento sulle nuove operazioni, l'integrazione intelligente di processi nuovi ed esistenti, compresa la convergenza di tecnologie, nonché ampliamento di scala per conseguire la produzione di alta precisione su vasta scala di prodotti e impianti polivalenti e flessibili, al fine di garantire un efficace trasferimento delle conoscenze verso l'innovazione industriale.";"";"H2020";"H2020-EU.2.1.2.";"";"";"2014-09-22 20:41:08";"664169" +"H2020-EU.2.1.2.3.";"de";"H2020-EU.2.1.2.3.";"";"";"Entwicklung der gesellschaftlichen Dimension der Nanotechnologie";"Societal dimension of nanotechnology";"

Entwicklung der gesellschaftlichen Dimension der Nanotechnologie

Schwerpunkt ist die Governance der Nanotechnologie zum Nutzen der Gesellschaft und der Umwelt.";"";"H2020";"H2020-EU.2.1.2.";"";"";"2014-09-22 20:41:05";"664167" +"H2020-EU.1.4.3.";"fr";"H2020-EU.1.4.3.";"";"";"Renforcer la politique européenne relative aux infrastructures de recherche ainsi que la coopération internationale";"Research infrastructure policy and international cooperation";"

Renforcer la politique européenne relative aux infrastructures de recherche ainsi que la coopération internationale

L'objectif est de soutenir les partenariats entre les décideurs politiques et les organismes de financement concernés, les outils de cartographie et de suivi utilisés pour la prise de décisions ainsi que les activités de coopération internationale. Les infrastructures européennes de recherche peuvent être soutenues dans le cadre de leurs activités dans le domaine des relations internationales.Les objectifs énoncés au titre des lignes d'activités décrites aux points b) et c) sont poursuivis au moyen d'actions spécifiques ainsi que, selon le cas, dans le cadre d'actions menées au titre de la ligne d'activité décrite au point a).";"";"H2020";"H2020-EU.1.4.";"";"";"2014-09-22 20:40:11";"664137" +"H2020-EU.1.4.2.";"pl";"H2020-EU.1.4.2.";"";"";"Wspieranie innowacyjnego potencjału infrastruktury badawczej i jej zasobów ludzkich";"Research infrastructures and their human resources";"

Wspieranie innowacyjnego potencjału infrastruktury badawczej i jej zasobów ludzkich

Celem jest wspomaganie infrastruktury badawczej w zakresie wczesnego przyjmowania lub opracowywania najnowocześniejszych technologii, promowanie partnerstw badawczo-rozwojowych z przemysłem, ułatwianie przemysłowego wykorzystania infrastruktury badawczej oraz stymulowanie tworzenia klastrów innowacyjnych. W ramach tego działania wspiera się również szkolenie lub wymiany personelu zarządzającego infrastrukturą badawczą oraz obsługującego ją.";"";"H2020";"H2020-EU.1.4.";"";"";"2014-09-22 20:40:01";"664131" +"H2020-EU.6.";"es";"H2020-EU.6.";"";"";"ACCIONES DIRECTAS NO NUCLEARES DEL CENTRO COMÚN DE INVESTIGACIÓN (CCI)";"Joint Research Centre (JRC) non-nuclear direct actions";"

ACCIONES DIRECTAS NO NUCLEARES DEL CENTRO COMÚN DE INVESTIGACIÓN (CCI)

Las actividades del Centro Común de Investigación formarán parte integrante de Horizonte 2020, con el fin de proporcionar a las políticas de la Unión un apoyo decidido y basado en los datos. Estarán impulsadas por las necesidades de los clientes, complementadas por actividades de prospectiva.

Objetivo específico

El objetivo específico es proporcionar a instancias de los clientes apoyo científico y técnico a las políticas de la Unión, respondiendo al mismo tiempo con flexibilidad a las nuevas exigencias de las políticas.

Justificación y valor añadido de la Unión

La Unión ha definido una ambiciosa agenda política para 2020 que aborda una serie de retos complejos e interrelacionados, tales como la gestión sostenible de los recursos y la competitividad. Para abordar con éxito estos desafíos son necesarios unos datos científicos sólidos que se extiendan a varias disciplinas científicas y permitan una evaluación seria de las opciones políticas. El Centro Común de Investigación desempeñando su papel de servicio científico para la formulación de políticas de la Unión, proporcionará el apoyo técnico y científico necesario a lo largo de todas las etapas del ciclo de elaboración de políticas, desde su concepción hasta su aplicación y evaluación. Con el fin de contribuir a dicho objetivo específico, centrará claramente su investigación en las prioridades políticas de la Unión y, al mismo tiempo, en la mejora de las competencias transversales y en la cooperación con los Estados miembros.La independencia del Centro Común de Investigación respecto de los intereses particulares, sean privados o nacionales, combinada con su papel de referencia científico-técnica, lo faculta para coadyuvar al necesario consenso entre las partes interesadas y los responsables políticos. Los Estados miembros y los ciudadanos de la Unión se beneficiarán de la investigación del Centro Común de Investigación, señaladamente en ámbitos como la salud y la protección de los consumidores, el medio ambiente, la seguridad y la gestión de crisis y catástrofes.En particular, los Estados miembros y regiones se beneficiarán asimismo de las ventajas de apoyar sus estrategias de especialización inteligente.El Centro Común de Investigación forma parte integrante del EEI y continuará prestando un apoyo activo a su funcionamiento mediante una estrecha colaboración con colegas y partes interesadas, permitiendo el máximo acceso a sus instalaciones y a través de la formación de investigadores, así como mediante la estrecha cooperación con los Estados miembros y con las instituciones internacionales que persiguen objetivos semejantes. También fomentará la integración de los nuevos Estados miembros y países asociados. A tal efecto, el Centro Común de Investigación seguirá proporcionando cursos de formación especializada sobre la base científico-técnica del acervo de la Unión. El Centro Común de Investigación establecerá vínculos de coordinación con otros objetivos específicos de Horizonte 2020. Como complemento de sus acciones directas y a efectos de una mayor integración y creación de redes en el Espacio Europeo de Investigación, el Centro Común de Investigación podrá participar en acciones indirectas y en los instrumentos de coordinación de Horizonte 2020 en las áreas en que cuente con los conocimientos especializados pertinentes para generar valor añadido.

Líneas generales de las actividades

Las actividades del Centro Común de Investigación en Horizonte 2020 se centrarán en las prioridades políticas de la Unión y en los retos de la sociedad que afrontan. Estas actividades estarán asimismo en consonancia con el objetivo principal de la estrategia Europa 2020 y con las rúbricas ""seguridad y ciudadanía"", y ""una Europa global"" del marco financiero plurianual para 2014-2020.Los ámbitos de competencia clave del Centro Común de Investigación serán: energía, transporte, medio ambiente y cambio climático, agricultura y seguridad alimentaria, salud y protección de los consumidores, tecnologías de la información y la comunicación, materiales de referencia y seguridad (incluida la seguridad nuclear en el programa Euratom). Las actividades del Centro Común de Investigación en estos ámbitos se llevarán a cabo teniendo en cuenta las iniciativas correspondientes en el nivel de las regiones, los Estados miembros o la Unión, con la perspectiva de la conformación del EEI.Estos ámbitos de competencia se verán considerablemente reforzados con capacidades para abordar todo el ciclo de la acción política y evaluar las opciones políticas. Esto incluye:(a) anticipación y previsión: inteligencia estratégica proactiva sobre las tendencias y acontecimientos en la ciencia, la tecnología y la sociedad y sus posibles consecuencias para la política pública;(b) economía: con vistas a un servicio integrado que cubra tanto los aspectos científico-técnicos como los macroeconómicos;(c) modelización: centrándose en la sostenibilidad y la economía y consiguiendo que la Comisión dependa menos de los proveedores externos para los análisis de escenarios vitales;(d) análisis de políticas: para permitir la investigación intersectorial de las opciones políticas;(e) evaluación del impacto: para aportar pruebas científicas que sustenten las opciones políticas.El Centro Común de Investigación seguirá buscando la excelencia en la investigación y la interacción generalizada con las instituciones de investigación como base para un apoyo científico-técnico creíble y sólido a las políticas. A tal efecto, reforzará su colaboración con socios europeos e internacionales, entre otras cosas mediante la participación en acciones indirectas. También llevará a cabo investigación exploratoria y desarrollará, con carácter selectivo, competencias en campos emergentes de interés para las políticas.El Centro Común de Investigación se centrará en:

Ciencia excelente

(Ver también la PRIORIDAD ""Ciencia excelente"" (H2020-EU.1.)) (http://cordis.europa.eu/programme/rcn/664091_en.html)Llevar a cabo actividades de investigación para mejorar la base de datos científicos utilizada en la formulación de políticas y analizar ámbitos emergentes de la ciencia y la tecnología, incluso a través de un programa de investigación exploratoria.

Liderazgo industrial

(Ver también la PRIORIDAD ""Liderazgo industrial"" (H2020-EU.2)) (http://cordis.europa.eu/programme/rcn/664143_en.html)Contribuir a la competitividad europea prestando apoyo al proceso de normalización y a las normas a través de la investigación prenormativa, el desarrollo de materiales y medidas de referencia y la armonización de métodos en cinco ámbitos fundamentales (energía, transporte, la iniciativa emblemática ""Agenda Digital para Europa"", seguridad, y protección de los consumidores). Llevar a cabo evaluaciones de la seguridad de las nuevas tecnologías en ámbitos tales como la energía y el transporte, la sanidad y la protección de los consumidores. Contribuir a facilitar la utilización, normalización y validación de las tecnologías y datos espaciales, en particular para afrontar los retos de la sociedad.

Retos de la sociedad

(Ver también la PRIORIDAD ""Retos de la sociedad"" (H2020-EU.3.)) (http://cordis.europa.eu/programme/rcn/664235_en.html)

(a) Salud, cambio demográfico y bienestar

(Ver también H2020-EU.3.1.) (http://cordis.europa.eu/programme/rcn/664237_en.html)Contribuir a la salud y la protección de los consumidores mediante el apoyo científico y técnico en ámbitos tales como los alimentos, piensos y productos de consumo; el medio ambiente y la salud; las prácticas de detección y el diagnóstico en relación con la salud; y la nutrición y las dietas.

(b) Seguridad alimentaria, agricultura y silvicultura sostenibles, investigación marina, marítima y de aguas interiores y bioeconomía

(Ver también H2020-EU.3.2.) (http://cordis.europa.eu/programme/rcn/664237_en.html)Apoyar el desarrollo, aplicación y seguimiento de la Política Agrícola Común y la Política Pesquera Común, inclusive la seguridad alimentaria y la inocuidad de los alimentos y el impulso de la bioeconomía a través de, por ejemplo, previsiones de producción de los cultivos y análisis y modelización técnicos y socioeconómicos, y promover unos mares saludables y productivos.

(c) Energía segura, limpia y eficiente

(Ver también H2020-EU.3.3.) (http://cordis.europa.eu/programme/rcn/664237_en.html)Prestar apoyo a los objetivos climáticos y energéticos 20/20/20 con investigación sobre los aspectos tecnológicos y económicos del abastecimiento energético, la eficiencia, las tecnologías de baja emisión de carbono o las redes de transporte de energía/electricidad.

(d) Transporte inteligente, ecológico e integrado

(Ver también H2020-EU.3.4.) (http://cordis.europa.eu/programme/rcn/664357_en.html)Prestar apoyo a la política de la Unión en relación con la movilidad segura y sostenible de personas y mercancías con estudios de laboratorio, enfoques de modelización y seguimiento, incluidas las tecnologías de baja emisión de carbono para el transporte, como la electrificación, los vehículos limpios y eficientes y los combustibles alternativos, y los sistemas de movilidad inteligente.

(e) Acción por el clima, medio ambiente, eficiencia de los recursos y materias primas

(Ver también H2020-EU.3.5.) (http://cordis.europa.eu/programme/rcn/664389_en.html)Investigar los retos intersectoriales de la gestión sostenible de los recursos naturales, mediante la vigilancia de las variables ambientales clave y la creación de un marco de modelización integrado para la evaluación de la sostenibilidad.Prestar apoyo al uso eficiente de los recursos, la reducción de las emisiones y el abastecimiento sostenible de materias primas gracias a evaluaciones sociales, ambientales y económicas integradas de los procesos de producción, tecnologías, productos y servicios limpios.Prestar apoyo a los objetivos de la política de desarrollo de la Unión mediante una investigación encaminada a garantizar el abastecimiento adecuado de recursos esenciales, centrada en el seguimiento de los parámetros ambientales y de los recursos, los análisis relacionados con la seguridad alimentaria y la inocuidad de los alimentos, y la transferencia de conocimientos.

(f) Europa en un mundo cambiante - sociedades inclusivas, innovadoras y reflexivas

(Ver también H2020-EU.3.6.) (http://cordis.europa.eu/programme/rcn/664435_en.html)Contribuir a la aplicación de la iniciativa emblemática ""Unión por la innovación"" y seguir de cerca su andadura mediante análisis macroeconómicos de los factores que favorecen u obstaculizan la investigación y la innovación, así como elaborando metodologías, cuadros e indicadores.Prestar apoyo al EEI mediante la supervisión de su funcionamiento y el análisis de los factores que favorecen u obstaculizan algunos de sus elementos clave; y mediante la constitución de redes de investigación, la formación y la apertura de las instalaciones y las bases de datos del Centro Común de Investigación a los usuarios de los Estados miembros y de los países candidatos y asociados.Contribuir a los objetivos clave de la iniciativa emblemática ""Agenda Digital para Europa"" mediante análisis cualitativos y cuantitativos de los aspectos económicos y sociales (economía digital, sociedad digital, vida digital).

(g) Sociedades seguras - Proteger la libertad y la seguridad de Europa y sus ciudadanos

(Ver también H2020-EU.3.7.) (http://cordis.europa.eu/programme/rcn/664463_en.html)Prestar apoyo a la seguridad interior mediante la detección y evaluación de los puntos vulnerables de las infraestructuras críticas como componentes esenciales de las funciones sociales y mediante la evaluación del rendimiento operativo, social y ético de las tecnologías relacionadas con la identidad digital. Abordar los retos planteados a la seguridad mundial, por ejemplo amenazas emergentes o híbridas, creando instrumentos avanzados de extracción y análisis de la información, así como para la gestión de las crisis.Mejorar la capacidad de la Unión para gestionar las catástrofes naturales y de origen humano mediante el refuerzo de la supervisión de las infraestructuras y el establecimiento de instalaciones de prueba, sistemas de información para la alerta precoz sobre riesgos múltiples mundiales y la gestión del riesgo, haciendo uso de marcos de observación de la Tierra por satélite.";"";"H2020";"H2020-EC";"";"";"2014-09-23 20:21:28";"664511" +"H2020-EU.2.";"pl";"H2020-EU.2.";"";"";"PRIORYTET „Wiodąca pozycja w przemyśle”";"Industrial Leadership";"

PRIORYTET „Wiodąca pozycja w przemyśle”

Ta część ma na celu przyspieszenie rozwoju technologii i innowacji, które zapewnią podstawy działania przedsiębiorstwom przyszłości i pomogą innowacyjnym europejskim MŚP przeobrazić się w firmy wiodące na rynku światowym. Składa się z trzech celów szczegółowych:a)„Wiodąca pozycja w zakresie technologii prorozwojowych i przemysłowych” zapewnia specjalne wsparcie na rzecz badań naukowych, rozwoju i demonstracji oraz – w stosownych przypadkach – normalizacji i certyfikacji, technologii informacyjno-komunikacyjnych (ICT), nanotechnologii, materiałów zaawansowanych, biotechnologii, zaawansowanych systemów produkcji i przetwarzania oraz technologii kosmicznych. Nacisk zostanie położony na interakcje i konwergencję między różnymi technologiami i w ich obrębie oraz na ich związki z wyzwaniami społecznymi. We wszystkich tych obszarach uwzględnia się potrzeby użytkowników. H2020-EU.2.1. (http://cordis.europa.eu/programme/rcn/664145_en.html)b)„Dostęp do finansowania ryzyka” służy przezwyciężeniu deficytów w dostępności finansowania dłużnego i kapitałowego w przypadku działań badawczo-rozwojowych i innowacyjnych przedsiębiorstw i projektów na wszystkich etapach rozwoju. Wraz z instrumentem kapitałowym programu konkurencyjności w biznesie oraz małych i średnich przedsiębiorstw (COSME) (2014-2020) wspiera on rozwój kapitału wysokiego ryzyka na poziomie Unii. H2020-EU.2.2. (http://cordis.europa.eu/programme/rcn/664217_en.html)c)„Innowacje w MŚP” zapewniają MŚP indywidualnie dostosowane wsparcie, by stymulować wszystkie formy innowacji w MŚP; wsparcie jest ukierunkowane na MŚP odznaczające się potencjałem wzrostu i ekspansji międzynarodowej na całym jednolitym rynku i poza nim. H2020-EU.2.3. (http://cordis.europa.eu/programme/rcn/664223_en.html)Powyższe działania są realizowane zgodnie z agendą o orientacji biznesowej. Budżetom celów szczegółowych „Dostęp do finansowania ryzyka” oraz „Innowacje w MŚP” przyświecać będzie oddolna logika nastawiona na zapotrzebowanie. Budżety te są uzupełniane o wykorzystanie instrumentów finansowych. Specjalny instrument przeznaczony dla MŚP jest wdrażany przede wszystkim przy zastosowaniu podejścia oddolnego; jest on dostosowany do potrzeb MŚP, z uwzględnieniem celów szczegółowych priorytetu „Wyzwania społeczne” i celu szczegółowego „Wiodąca pozycja w zakresie technologii prorozwojowych i przemysłowych”.Program „Horyzont 2020” przyjmie zintegrowane podejście do udziału MŚP – uwzględniając ich potrzeby w zakresie transferu wiedzy i technologii – dzięki czemu co najmniej 20% połączonych budżetów wszystkich celów szczegółowych priorytetu „Wyzwań społecznych” oraz celu szczegółowego „Wiodąca pozycja w zakresie technologii prorozwojowych i przemysłowych” powinno zostać przeznaczone na MŚP.Cel szczegółowy „Wiodąca pozycja w zakresie technologii prorozwojowych i przemysłowych” wykorzystuje podejście zorientowane na technologię, w celu rozwijania technologii prorozwojowych, które można wykorzystać w różnych dziedzinach zastosowań oraz w różnych sektorach przemysłu i usług. Zastosowania tych technologii umożliwiające stawianie czoła wyzwaniom społecznym są wspierane wraz z realizacją priorytetu „Wyzwania społeczne”.";"";"H2020";"H2020-EC";"";"";"2014-09-23 20:20:01";"664143" +"H2020-EU.2.";"it";"H2020-EU.2.";"";"";"PRIORITÀ ""Leadership industriale""";"Industrial Leadership";"

PRIORITÀ ""Leadership industriale""

La presente sezione mira ad accelerare lo sviluppo delle tecnologie e delle innovazioni a sostegno delle imprese del futuro e ad aiutare le PMI europee innovative a crescere per divenire imprese di importanza mondiale. Essa si articola in tre obiettivi specifici.a)""Leadership nelle tecnologie abilitanti e industriali"" fornisce un sostegno mirato alla ricerca, allo sviluppo e alla dimostrazione nonché, se del caso, alla standardizzazione e certificazione di tecnologie dell'informazione e della comunicazione (TIC), nanotecnologie, materiali avanzati, biotecnologie, tecnologie produttive avanzate e tecnologia spaziale. L'accento sarà posto sulle interazioni e le convergenze fra le diverse tecnologie e sulle loro relazioni con le sfide per la società. In tutti questi ambiti occorre tenere in considerazione le esigenze degli utenti. H2020-EU.2.1. (http://cordis.europa.eu/programme/rcn/664145_en.html)b)""Accesso al capitale di rischio"" mira a superare i disavanzi nella disponibilità di crediti e fondi propri per il settore R&S e per le imprese e i progetti innovativi in tutte le fasi di sviluppo. Congiuntamente allo strumento di capitale del programma per la competitività delle imprese e le piccole e medie imprese (COSME) (2014-2020), esso sostiene lo sviluppo di un capitale di rischio di livello di Unione. H2020-EU.2.2. (http://cordis.europa.eu/programme/rcn/664217_en.html)c)""Innovazione nelle PMI"" fornisce sostegno su misura per le PMI al fine di promuovere tutte le forme di innovazione nelle PMI, puntando su quelle dotate del potenziale di crescita e di internazionalizzazione sul mercato unico e oltre. H2020-EU.2.3. (http://cordis.europa.eu/programme/rcn/664223_en.html)Le attività seguono un programma determinato dalle imprese. Gli stanziamenti per gli obiettivi specifici ""Accesso al capitale di rischio"" e ""Innovazione nelle PMI"" seguono una logica ascendente basata sulla domanda. Tali stanziamenti sono integrati dall'uso di strumenti finanziari. Sarà attuato uno strumento ad hoc per le PMI principalmente in maniera ascendente, adeguato alle esigenze delle PMI, tenendo conto degli obiettivi specifici della priorità ""Sfide per la società"" e dell'obiettivo specifico ""Leadership nelle tecnologie abilitanti e industriali"".Orizzonte 2020 adotta un approccio integrato per quanto riguarda la partecipazione delle PMI, tenendo conto tra l'altro delle loro esigenze in termini di trasferimento delle conoscenze e delle tecnologie, che dovrebbe condurre ad attribuire alle PMI almeno il 20 % degli stanziamenti complessivi combinati per tutti gli obiettivi specifici della priorità ""Sfide per la società"" e per l'obiettivo specifico ""Leadership nelle tecnologie abilitanti e industriali"".L'obiettivo specifico ""Leadership nelle tecnologie abilitanti e industriali"" segue un approccio basato sulle tecnologie al fine di sviluppare tecnologie abilitanti suscettibili di essere fruite in numerosi settori, industrie e servizi. Le domande riguardanti tali tecnologie mirate alle sfide per la società sono finanziate congiuntamente alla priorità ""Sfide per la società"".";"";"H2020";"H2020-EC";"";"";"2014-09-23 20:20:01";"664143" +"H2020-EU.2.1.2.3.";"es";"H2020-EU.2.1.2.3.";"";"";"Desarrollo de la dimensión social de la nanotecnología";"Societal dimension of nanotechnology";"

Desarrollo de la dimensión social de la nanotecnología

Centrándose en la gobernanza de la nanotecnología para beneficio de la sociedad y del medio ambiente.";"";"H2020";"H2020-EU.2.1.2.";"";"";"2014-09-22 20:41:05";"664167" +"H2020-EU.3.4.3.";"pl";"H2020-EU.3.4.3.";"";"";"Wiodąca pozycja europejskiego przemysłu transportowego na świecie";"Global leadership for the European transport industry";"

Wiodąca pozycja europejskiego przemysłu transportowego na świecie

Celem jest wzmocnienie konkurencyjności i poprawa wyników europejskiego przemysłu produkcji sprzętu transportowego i powiązanych usług (w tym procesów logistyki, utrzymania, naprawy, modernizacji i recyklingu) przy jednoczesnym utrzymaniu wiodącej pozycji Europy w określonych dziedzinach (jak np. aeronautyka).Działania mają skupiać się na rozwoju nowej generacji innowacyjnych środków transportu lotniczego, wodnego i lądowego, zapewnieniu zrównoważonej produkcji innowacyjnych systemów i urządzeń oraz przygotowaniu gruntu dla przyszłych środków transportu poprzez prace nad nowatorskimi technologiami, koncepcjami i projektami, nad inteligentnymi systemami kontroli i interoperacyjnymi normami, wydajnymi procesami produkcji, innowacyjnymi usługami i procedurami certyfikacji, krótszym czasem rozwoju i ograniczonymi kosztami w cyklu życia, bez uszczerbku dla bezpieczeństwa eksploatacyjnego i ochrony. ";"";"H2020";"H2020-EU.3.4.";"";"";"2014-09-22 20:47:39";"664377" +"H2020-EU.3.4.3.";"it";"H2020-EU.3.4.3.";"";"";"Leadership mondiale per l'industria europea dei trasporti";"Global leadership for the European transport industry";"

Leadership mondiale per l'industria europea dei trasporti

L'obiettivo è rafforzare la competitività e i risultati dell'industria manifatturiera europea dei trasporti e dei servizi correlati, compresi i processi logistici, la manutenzione, la riparazione, l'ammodernamento e il riciclaggio, conservando nel contempo settori di leadership europea, ad esempio l'aeronautica.Il centro dell'attività è lo sviluppo della prossima generazione di mezzi di trasporto aereo, per via navigabile e terrestre innovativi, la produzione sostenibile di apparecchiature e sistemi innovativi e la preparazione del terreno per futuri mezzi di trasporto, lavorando su nuovi concetti, tecnologie e progetti, su sistemi di controllo intelligenti e norme interoperabili, su processi di produzione efficienti, servizi innovativi e procedure di certificazione, tempi di sviluppo minori e costi di ciclo di vita ridotti, senza compromettere la sicurezza operativa.";"";"H2020";"H2020-EU.3.4.";"";"";"2014-09-22 20:47:39";"664377" +"H2020-EU.3.4.3.";"de";"H2020-EU.3.4.3.";"";"";"Weltweit führende Rolle der europäischen Verkehrsindustrie";"Global leadership for the European transport industry";"

Weltweit führende Rolle der europäischen Verkehrsindustrie

Ziel ist die Stärkung der Wettbewerbs- und Leistungsfähigkeit der europäischen Hersteller im Verkehrssektor und zugehöriger Dienstleistungen (einschließlich Logistikprozessen, Wartung, Reparatur, Nachrüstung und Recycling) bei Aufrechterhaltung der Führungsposition Europas in bestimmten Bereichen (z. B. Luftfahrtsektor).Schwerpunkt der Tätigkeiten ist die Entwicklung der nächsten Generation innovativer Verkehrsmittel für Luft-, Wasser- und Landverkehr, die nachhaltige Fertigung innovativer Systeme und Ausrüstungen und die Grundlagenarbeit für Verkehrsträger der Zukunft durch neuartige Technologien, Konzepte und Bauformen, intelligente Kontrollsysteme und interoperable Normen, effiziente Produktionsprozesse, innovative Dienstleistungen und Zertifizierungsverfahren, kürzere Entwicklungszeiten und geringere Lebenszykluskosten, ohne dass bei der Betriebssicherheit Abstriche gemacht werden.";"";"H2020";"H2020-EU.3.4.";"";"";"2014-09-22 20:47:39";"664377" +"H2020-EU.3.4.2.";"it";"H2020-EU.3.4.2.";"";"";"Migliorare la mobilità, diminuire il traffico e aumentare la sicurezza";"Mobility, safety and security";"

Migliorare la mobilità, diminuire il traffico e aumentare la sicurezza

L'obiettivo è conciliare le crescenti esigenze di mobilità con una maggiore fluidità dei trasporti, grazie a soluzioni innovative riguardanti sistemi di trasporto senza soluzioni di continuità, intermodali, inclusivi, accessibili, a costi sostenibili, sicuri, sani e robusti.Il centro delle attività è ridurre la congestione stradale, migliorare l'accessibilità, l'interoperabilità e le scelte dei passeggeri nonché soddisfare le esigenze degli utenti grazie allo sviluppo e alla promozione dei trasporti integrati porta a porta, della gestione della mobilità e della logistica, rafforzare l'intermodalità e la diffusione delle soluzioni di pianificazione e gestione intelligenti, nonché ridurre drasticamente gli incidenti e l'impatto delle minacce alla sicurezza.";"";"H2020";"H2020-EU.3.4.";"";"";"2014-09-22 20:47:20";"664367" +"H2020-EU.3.4.1.";"it";"H2020-EU.3.4.1.";"";"";"Trasporti efficienti sotto il profilo delle risorse che rispettino l'ambiente";"Resource efficient transport that respects the environment";"

Trasporti efficienti sotto il profilo delle risorse che rispettino l'ambiente

L'obiettivo è ridurre al minimo l'impatto dei sistemi dei trasporti sul clima e sull'ambiente (compreso l'inquinamento acustico e atmosferico), migliorandone la qualità e l'efficienza nell'uso delle risorse naturali e dei combustibili e riducendone le emissioni di gas a effetto serra e la dipendenza dai combustibili fossili.Il centro dell'attività è ridurre il consumo di risorse, in particolare di combustibili fossili, le emissioni di gas a effetto serra e i livelli di rumore, migliorare l'efficienza dei trasporti e dei veicoli, accelerare lo sviluppo, la produzione e la diffusione di una nuova generazione di veicoli puliti (elettrici, a idrogeno e altri con emissioni basse o pari a zero), anche mediante progressi di rilievo e ottimizzazioni per quanto concerne motori, immagazzinamento dell'energia e infrastrutture, esaminare e sfruttare il potenziale dei carburanti alternativi e sostenibili e dei sistemi operativi e di propulsione innovativi e più efficienti, comprese le infrastrutture per il combustibile e il carico dello stesso, ottimizzare la pianificazione e l'uso delle infrastrutture, per mezzo di sistemi di trasporto intelligenti, logistica e attrezzature intelligenti, nonché incrementare l'uso della gestione della domanda e dei trasporti pubblici e non motorizzati, nonché delle catene di mobilità intermodali, in particolare nelle aree urbane. Saranno incoraggiate le innovazioni intese a ottenere emissioni basse o pari a zero in tutti i modi di trasporto.";"";"H2020";"H2020-EU.3.4.";"";"";"2014-09-22 20:47:04";"664359" +"H2020-EU.2.1.5.4.";"pl";"H2020-EU.2.1.5.4.";"";"";"Nowe zrównoważone modele biznesowe";"New sustainable business models";"

Nowe zrównoważone modele biznesowe

Opracowanie koncepcji i metodologii dla adaptacyjnych, „opartych na wiedzy” modeli biznesowych w dostosowanych do określonych warunków podejściach, w tym alternatywnych podejściach wydajnych pod względem wykorzystania zasobów.";"";"H2020";"H2020-EU.2.1.5.";"";"";"2014-09-22 20:42:14";"664205" +"H2020-EU.2.2.";"pl";"H2020-EU.2.2.";"";"";"WIODĄCA POZYCJA W PRZEMYŚLE - Dostęp do finansowania ryzyka";"Access to risk finance";"

WIODĄCA POZYCJA W PRZEMYŚLE - Dostęp do finansowania ryzyka

Cel szczegółowy

Celem szczegółowym jest pomoc w wyeliminowaniu niedoskonałości rynku związanych z dostępem do finansowania ryzyka związanego z finansowaniem badań naukowych i innowacji.Sytuacja inwestycyjna w dziedzinie badań naukowych i innowacji jest niekorzystna, zwłaszcza dla innowacyjnych MŚP i przedsiębiorstw o średniej kapitalizacji cechujących się wysokim potencjałem wzrostu. Istnieje kilka poważnych luk rynkowych pod względem finansowania, gdyż innowacje niezbędne dla osiągnięcia celów strategicznych wiążą się zwykle z ryzykiem zbyt wysokim, aby rynek był skłonny je zaakceptować, w związku z czym nie jest możliwe odniesienie pełnych korzyści społecznych.Instrument finansowania dłużnego i instrument finansowania kapitałowego pomogą w przezwyciężeniu takich problemów, poprawiając profile finansowania i ryzyka odnośnych działań w zakresie badań naukowych i innowacji. To z kolei ułatwi przedsiębiorstwom i innym beneficjentom dostęp do pożyczek, gwarancji i innych form finansowania ryzyka, zachęci do inwestycji na wczesnym etapie oraz rozwijania i tworzenia nowych funduszy kapitału wysokiego ryzyka, usprawni transfer wiedzy i rynek własności intelektualnej, przyciągnie fundusze na rynek kapitału wysokiego ryzyka, a ponadto przyczyni się do przejścia od koncepcji, rozwoju i demonstracji nowych produktów i usług do ich komercyjnego wykorzystania.Ogólnym skutkiem będzie zwiększenie gotowości sektora prywatnego do inwestowania w działania w zakresie badań naukowych i innowacji, a co za tym idzie, wniesienie wkładu w osiągnięcie kluczowego celu strategii „Europa 2020”: inwestowania 3% PKB Unii w badania naukowe i rozwój przed końcem dziesięciolecia, przy czym dwie trzecie mają pochodzić z sektora prywatnego. Zastosowanie instrumentów finansowych pomoże także osiągnąć cele badawcze i innowacyjne wszystkich sektorów i obszarów polityki istotnych dla sprostania wyzwaniom społecznym, dla podnoszenia konkurencyjności i wspierania trwałego wzrostu gospodarczego sprzyjającego włączeniu społecznemu, a także dla zapewnienia dóbr środowiskowych i innych dóbr publicznych.

Uzasadnienie i unijna wartość dodana

Potrzebny jest instrument dłużny na poziomie Unii służący celom badań naukowych i innowacji, aby zwiększyć prawdopodobieństwo udzielenia pożyczek i gwarancji oraz osiągnięcia celów strategicznych w tej dziedzinie. Istniejąca obecnie luka rynkowa między zapotrzebowaniem na pożyczki i gwarancje dla ryzykownych inwestycji w badania i innowacje a podażą takich pożyczek i gwarancji, do której zamknięcia służy Finansowy Instrument Podziału Ryzyka (Risk Sharing Finance Facility, RSFF), prawdopodobnie się utrzyma, a banki komercyjne w dużej mierze będą się wstrzymywać od udzielania pożyczek o wysokim ryzyku. Zapotrzebowanie na finansowanie pożyczkami w ramach RSFF jest wysokie od jego uruchomienia w połowie 2007 r.: na pierwszym etapie (2007-2010) zainteresowanie przekroczyło początkowe oczekiwania o ponad 50% pod względem liczby zatwierdzonych pożyczek (7,6 mld EUR w porównaniu z przewidywanymi 5 mld EUR).Ponadto banki zwykle nie są w stanie wycenić aktywów wiedzy, takich jak własność intelektualna, w związku z czym często nie są skłonne do inwestowania w przedsiębiorstwa prowadzące działalność opartą na wiedzy. W rezultacie wiele innowacyjnych przedsiębiorstw o ugruntowanej pozycji, tak dużych, jak i małych, nie może uzyskać pożyczek na obarczone wyższym ryzykiem działania w zakresie badań naukowych i innowacji. Opracowując i wdrażając taki(-e) instrument(-y), wspólnie z przynajmniej jednym podmiotem, któremu zostanie powierzone takie zadanie, zgodnie z rozporządzeniem (UE, Euratom) nr 966/2012, Komisja zapewni uwzględnienie odpowiedniego poziomu i form ryzyka technicznego i finansowego, tak aby wyjść naprzeciw określonym potrzebom.Podstawową przyczyną występowania tej luki rynkowej jest brak pewności, asymetria informacyjna oraz wysokie koszty związane z próbami rozwiązania następujących problemów: niedawno powstałe przedsiębiorstwa mają zbyt krótką historię, aby zadowolić potencjalnych pożyczkodawców, nawet przedsiębiorstwa o ugruntowanej pozycji często nie są w stanie przedstawić wystarczających informacji, a na początku inwestycji w badania naukowe i innowacje wcale nie jest pewne, czy podejmowane wysiłki rzeczywiście doprowadzą do udanej innowacji.Ponadto przedsiębiorstwa na etapie prac koncepcyjnych lub działające w nowo powstających dziedzinach zwykle nie mają wystarczającego zabezpieczenia. Kolejny czynnik zniechęcający wiąże się z faktem, że nawet jeśli podjęte działania w zakresie badań naukowych i innowacji zaowocują produktem lub procesem odpowiednim do wykorzystania komercyjnego, wcale nie jest pewne, czy przedsiębiorstwo, które podjęło takie działania będzie w stanie czerpać z nich wyłączne korzyści.Pod względem unijnej wartości dodanej dłużny instrument finansowy pomoże rozwiązać występujące na rynku problemy, ze względu na które sektor prywatny nie dokonuje optymalnych inwestycji w badania naukowe i innowacje. Jego wdrożenie umożliwi wytworzenie masy krytycznej zasobów z budżetu Unii oraz, na zasadzie podziału ryzyka, z instytucji finansowej(-ych), której(-ym) jego wdrożenie zostanie powierzone. Będzie stymulować przedsiębiorstwa do inwestowania w badania naukowe i innowacje większych własnych kwot, niż zainwestowałyby w innej sytuacji. Ponadto dłużny instrument finansowy pomoże organizacjom, zarówno publicznym, jak i prywatnym, ograniczyć ryzyko związane z przedkomercyjnymi zamówieniami publicznymi bądź zamówieniami publicznymi na innowacyjne produkty i usługi.Na szczeblu Unii potrzebny jest instrument kapitałowy służący celom badań naukowych i innowacji, aby przyczynić się do zwiększenia dostępności finansowania kapitałowego dla inwestycji we wczesnej fazie i w fazie wzrostu oraz do wsparcia rozwoju rynku kapitału wysokiego ryzyka w Unii. Podczas transferu technologii i w fazie rozruchu nowe przedsiębiorstwa znajdują się w „dolinie śmierci”, kiedy przestają napływać publiczne dotacje na badania naukowe, a nie można przyciągnąć finansowania prywatnego. Wsparcie publiczne mające na celu pozyskanie prywatnych funduszy kapitału zalążkowego lub rozruchowego z myślą o wypełnieniu tej luki jest obecnie rozdrobnione i sporadyczne lub zarządzane w sposób świadczący o braku niezbędnej wiedzy specjalistycznej. Ponadto większość funduszy kapitału wysokiego ryzyka w Europie jest zbyt mała, aby długofalowo wspierać rozwój innowacyjnych przedsiębiorstw, a także nie ma masy krytycznej potrzebnej do specjalizacji i działania transnarodowego.Konsekwencje są poważne. Przed kryzysem finansowym europejskie fundusze kapitału wysokiego ryzyka inwestowały w MŚP ok. 7 mld EUR rocznie, natomiast wartości za 2009 i 2010 r. mieściły się w zakresie 3–4 mld EUR. Ograniczone finansowanie kapitałem wysokiego ryzyka wpłynęło na liczbę podmiotów rozpoczynających działalność gospodarczą wspieranych przez fundusze tej kategorii: w 2007 r. finansowanie kapitałem wysokiego ryzyka otrzymało ok. 3 tys. MŚP, a w 2010 r. tylko ok. 2,5 tys.Pod względem wartości dodanej Unii, instrument kapitałowy służący celom badań naukowych i innowacji będzie uzupełniać programy krajowe i regionalne, które nie są w stanie wspierać transgranicznych inwestycji w badania naukowe i innowacje. Pomoc udzielana we wczesnej fazie będzie mieć również efekt demonstracji, który może korzystnie wpłynąć na inwestorów publicznych i prywatnych w całej Europie. W fazie wzrostu niezbędną skalę i silne zaangażowanie inwestorów prywatnych, mające zasadnicze znaczenie dla funkcjonowania samodzielnego rynku kapitału wysokiego ryzyka, można uzyskać tylko na poziomie europejskim.Instrumenty dłużny i kapitałowy, wsparte zbiorem środków uzupełniających, przyczynią się do realizacji celów politycznych programu „Horyzont 2020”. W tym celu będą one przeznaczone na konsolidację i podniesienie poziomu jakości europejskiej bazy naukowej, promowanie badań naukowych i innowacji o agendzie biznesowej, oraz stawianie czoła wyzwaniom społecznym, koncentrując się na działaniach takich jak pilotaż, demonstracja, poligony doświadczalne oraz absorpcja na rynku. Należy zapewnić konkretne działania wspierające, takie jak działania informacyjne i szkoleniowe dla MŚP. Podczas planowania i realizacji tych działań można, w stosownych przypadkach, zasięgać opinii organów regionalnych, stowarzyszeń MŚP, izb handlowych i odpowiednich pośredników finansowych.Ponadto działania przyczynią się do osiągnięcia celów badawczo-innowacyjnych innych programów i obszarów polityki, takich jak wspólna polityka rolna, działania w dziedzinie klimatu (przejście na gospodarkę niskoemisyjną i przystosowanie się do zmiany klimatu) i wspólna polityka rybołówstwa. W kontekście wspólnych ram strategicznych polityki spójności 2014-2020 rozwijana będzie komplementarność z krajowymi i regionalnymi instrumentami finansowymi. W tym zakresie przewiduje się większe znaczenie instrumentów finansowych.Ich konstrukcja jako instrumentów dłużnych i kapitałowych uwzględnia potrzebę rozwiązania różnych szczególnych problemów rynkowych oraz charakterystykę (np. dynamikę i tempo tworzenia przedsiębiorstw) oraz wymogi tych i innych obszarów w zakresie finansowania bez wprowadzania zakłóceń na rynku. Stosowanie instrumentów finansowych musi wnosić wyraźną europejską wartość dodaną i powinno zwiększać dźwignię finansową oraz funkcjonować jako uzupełnienie instrumentów krajowych. Przydziały budżetowe między instrumentami mogą zostać dostosowane w trakcie realizacji programu „Horyzont 2020” w odpowiedzi na zmieniające się warunki ekonomiczne.Instrument kapitałowy i okno dla MŚP instrumentu dłużnego zostaną wdrożone jako część dwóch finansowych instrumentów Unii, które zapewniają finansowanie kapitałowe i dłużne na rzecz wspierania badań naukowych i innowacji oraz wzrostu MŚP w połączeniu z instrumentem kapitałowym i dłużnym programu COSME. Zapewniona zostanie komplementarność między programami „Horyzont 2020” i programem COSME.

Ogólne kierunki działań

(a) Instrument dłużny zapewniający finansowanie dłużne badań naukowych i innowacji: „Instrument pożyczkowo-gwarancyjny Unii na rzecz badań naukowych i innowacji”

Celem jest poprawa dostępu do finansowania dłużnego (pożyczki, gwarancje, regwarancje i inne formy dłużnego finansowania ryzyka) dla podmiotów publicznych i prywatnych oraz dla partnerstw publiczno-prywatnych zaangażowanych w działania w zakresie badań naukowych i innowacji, które wymagają ryzykownych inwestycji, aby przynieść owoce. Działania koncentrują się na wspieraniu badań naukowych i innowacji o wysokim potencjale doskonałości.Zważywszy, że jednym z celów programu „Horyzont 2020” jest przyczynienie się do zmniejszenia luki między działalnością badawczo-rozwojową a innowacjami, sprzyjanie pojawianiu się na rynku nowych lub ulepszonych produktów i usług oraz uwzględnianie krytycznej roli fazy weryfikacji projektu w procesie transferu wiedzy, wprowadzone mogą zostać mechanizmy umożliwiające finansowanie fazy weryfikacji projektu, niezbędnej dla potwierdzenia znaczenia, roli i przyszłego innowacyjnego wpływu wyników badań lub wynalazków będących obiektem transferu.Docelowi beneficjenci końcowi to potencjalnie podmioty prawne dowolnej wielkości, które mogą pożyczać i zwracać środki pieniężne oraz, w szczególności, MŚP odznaczające się potencjałem wprowadzania innowacji i szybkiego wzrostu; średnie i duże przedsiębiorstwa; uniwersytety i instytucje badawcze; infrastruktura badawcza i innowacyjna; partnerstwa publiczno-prywatne oraz projekty specjalnego przeznaczenia.Finansowanie z instrumentu dłużnego obejmuje dwa główne składniki:(1)Składnik stymulowany zapotrzebowaniem, obejmujący pożyczki i gwarancje udzielane na zasadzie „kto pierwszy, ten lepszy”, przy szczególnym wsparciu dla beneficjentów takich jak MŚP i przedsiębiorstwa o średniej kapitalizacji. Ten składnik jest odpowiedzią na stabilny i nieprzerwany wzrost wolumenu pożyczek RSFF, stymulowany zapotrzebowaniem. W ramach okna dla MŚP wspiera się działania mające na celu poprawę dostępu do finansowania dla MŚP i innych podmiotów ukierunkowanych głównie na działalność w obszarze badań, rozwoju i innowacji. Mogą one obejmować wsparcie dla trzeciej fazy instrumentu MŚP z uwzględnieniem poziomu zapotrzebowania.(2)Składnik ukierunkowany, skupiający się na kierunkach polityki i kluczowych sektorach mających podstawowe znaczenie dla sprostania wyzwaniom społecznym, wzmocnienia wiodącej pozycji w przemyśle i konkurencyjności, wspierania zrównoważonego, niskoemisyjnego wzrostu gospodarczego sprzyjającego włączeniu społecznemu, a także zapewnienia środowiskowych i innych dóbr publicznych. Ten składnik pomaga Unii w działaniach związanych z aspektami sektorowych celów strategicznych, dotyczącymi badań naukowych i innowacji.

(b) Instrument finansowy zapewniający finansowanie kapitałowe badań naukowych i innowacji: „Instrumenty kapitałowe Unii w zakresie badań naukowych i innowacji”

Celem jest wniesienie wkładu w przezwyciężenie problemów rynku europejskiego kapitału wysokiego ryzyka oraz zapewnienie kapitałowych i quasi-kapitałowych instrumentów inwestycyjnych na pokrycie potrzeb rozwojowych i finansowych innowacyjnych przedsiębiorstw od fazy zalążka przez wzrost po ekspansję. Działania koncentrują się na wspieraniu celów programu „Horyzont 2020” i powiązanych obszarów polityki.Docelowymi beneficjentami końcowymi są potencjalnie przedsiębiorstwa dowolnej wielkości podejmujące innowacyjną działalność lub przygotowujące się do niej, ze szczególnym naciskiem na MŚP i przedsiębiorstwa o średniej kapitalizacji.Instrument kapitałowy będzie się koncentrował na funduszach kapitału wysokiego ryzyka i funduszach funduszy ukierunkowanych na przedsięwzięcia we wczesnej fazie, zapewniając kapitałowe i quasi-kapitałowe instrumenty inwestycyjne (w tym finansowanie mezaninowe) na potrzeby przedsiębiorstw z portfeli indywidualnych. Instrument będzie również mógł być wykorzystany do celów inwestycji rozwojowych i inwestycji w fazie wzrostu, w połączeniu z instrumentem kapitałowym dla inwestycji znajdujących się na etapie wzrostu w ramach COSME, tak aby zapewnić stałe wsparcie podczas fazy rozruchu i rozwoju przedsiębiorstw.Instrument kapitałowy, stymulowany zapotrzebowaniem, bazuje na podejściu portfelowym, przewidującym, że fundusze kapitału wysokiego ryzyka i inni porównywalni pośrednicy wybierają przedsiębiorstwa, w które będą inwestować.Na przykład na potrzeby osiągnięcia określonych celów związanych z wyzwaniami społecznymi może zostać zastosowane powiązanie z celami, w oparciu o pozytywne doświadczenia Programu ramowego na rzecz konkurencyjności i innowacji (2007-2013) (CIP) pod względem powiązania z celami ekoinnowacji.Okno rozruchowe, służące wsparciu w fazie zalążkowej i wczesnego rozwoju, umożliwia inwestycje kapitałowe m.in. w organizacje zajmujące się transferem wiedzy i podobne organy, dzięki wsparciu transferu technologii (w tym transferu wyników badań i wynalazków powstałych w sferze badań ze środków publicznych do sektora produkcyjnego, na przykład poprzez weryfikację projektu), fundusze kapitału zalążkowego, transgraniczne fundusze kapitału zalążkowego i fundusze ukierunkowane na przedsięwzięcia we wczesnej fazie, instrumenty współfinansowania aniołów biznesu, aktywa w postaci własności intelektualnej, platformy wymiany praw własności intelektualnej i obrotu nimi oraz fundusze kapitału wysokiego ryzyka ukierunkowane na przedsięwzięcia we wczesnej fazie, a także fundusze funduszy działające ponad granicami i inwestujące w fundusze kapitału wysokiego ryzyka. Mogą one obejmować wsparcie dla trzeciej fazy instrumentu MŚP z uwzględnieniem poziomu zapotrzebowania.Okno wzrostowe jest ukierunkowane na inwestycje rozwojowe i inwestycje na etapie wzrostu, w połączeniu z instrumentem kapitałowym dla inwestycji znajdujących się na etapie wzrostu w ramach programu COSME, w tym inwestycje w fundusze funduszy sektora prywatnego i publicznego działające ponad granicami i inwestujące w fundusze kapitału wysokiego ryzyka, z których większość jest ukierunkowana tematycznie, w sposób wspierający osiąganie celów strategii „Europa 2020”.";"";"H2020";"H2020-EU.2.";"";"";"2014-09-22 20:42:36";"664217" +"H2020-EU.2.1.4.1.";"es";"H2020-EU.2.1.4.1.";"";"";"Impulsar las biotecnologías de vanguardia como futuro motor de la innovación";"Cutting-edge biotechnologies as future innovation driver";"

Impulsar las biotecnologías de vanguardia como futuro motor de la innovación

Desarrollo de ámbitos tecnológicos emergentes como la biología sintética, la bioinformática y la biología de sistemas, que ofrecen buenas perspectivas en materia de productos y tecnologías innovadores y de aplicaciones completamente nuevas.";"";"H2020";"H2020-EU.2.1.4.";"";"";"2014-09-22 20:41:48";"664191" +"H2020-EU.2.1.3.1.";"pl";"H2020-EU.2.1.3.1.";"";"";"Przekrojowe i prorozwojowych technologie materiałowe";"Cross-cutting and enabling materials technologies";"

Przekrojowe i prorozwojowych technologie materiałowe

Badania naukowe w zakresie materiałów pod kątem projektowania, materiałów funkcjonalnych, materiałów wielofunkcyjnych w większym stopniu oparte na wiedzy naukowej, nowych funkcjach i udoskonalonej wydajności oraz materiałów strukturalnych na potrzeby innowacji we wszystkich sektorach przemysłu, w tym w sektorach kreatywnych.";"";"H2020";"H2020-EU.2.1.3.";"";"";"2014-09-22 20:41:19";"664175" +"H2020-EU.2.1.3.1.";"it";"H2020-EU.2.1.3.1.";"";"";"Tecnologie trasversali e abilitanti in materia di materiali";"Cross-cutting and enabling materials technologies";"

Tecnologie trasversali e abilitanti in materia di materiali

Ricerca sui materiali in base alla progettazione, sui materiali funzionali, sui materiali multifunzionali a più elevata intensità di conoscenze, dotati di nuove funzionalità e migliori prestazioni, e sui materiali strutturali per l'innovazione in tutti i settori industriali, comprese le industrie creative.";"";"H2020";"H2020-EU.2.1.3.";"";"";"2014-09-22 20:41:19";"664175" +"H2020-EU.2.1.2.4.";"fr";"H2020-EU.2.1.2.4.";"";"";"Assurer une synthèse et une fabrication efficaces et durables des nanomatériaux, de leurs composants et de leurs systèmes";"Synthesis and manufacturing of nanomaterials, components and systems";"

Assurer une synthèse et une fabrication efficaces et durables des nanomatériaux, de leurs composants et de leurs systèmes

Cibler les nouvelles exploitations, l'intégration intelligente des processus nouveaux et existants, y compris les convergences technologiques, ainsi que le passage à une production à grande échelle de grande précision et à des sites de production flexibles et polyvalents, afin d'assurer une conversion efficace du savoir en innovation industrielle.";"";"H2020";"H2020-EU.2.1.2.";"";"";"2014-09-22 20:41:08";"664169" +"H2020-EU.1.4.3.";"de";"H2020-EU.1.4.3.";"";"";"Stärkung der europäischen Forschungsinfrastrukturpolitik und der internationalen Zusammenarbeit";"Research infrastructure policy and international cooperation";"

Stärkung der europäischen Forschungsinfrastrukturpolitik und der internationalen Zusammenarbeit

Ziel ist die Unterstützung von Partnerschaften zwischen den zuständigen politischen Entscheidungsträgern und Fördergremien, die Bestandsaufnahme und Überwachung von Instrumenten für die Entscheidungsfindung sowie die Unterstützung der internationalen Zusammenarbeit. Die europäischen Forschungsinfrastrukturen können bei ihren Tätigkeiten im Rahmen internationaler Beziehungen unterstützt werden.Die unter den Buchstaben b und c aufgeführten Ziele werden durch spezifische Maßnahmen sowie gegebenenfalls im Rahmen der unter Buchstabe a dargelegten Maßnahmen verfolgt.";"";"H2020";"H2020-EU.1.4.";"";"";"2014-09-22 20:40:11";"664137" +"H2020-EU.1.4.1.";"es";"H2020-EU.1.4.1.";"";"";"Desarrollar las infraestructuras de investigación europeas para 2020 y años posteriores";"Research infrastructures for 2020 and beyond";"

Desarrollar las infraestructuras de investigación europeas para 2020 y años posteriores

Se tratará de facilitar y apoyar acciones relacionadas con: (1) la preparación, la implantación y el funcionamiento del ESFRI y otras infraestructuras de investigación de categoría mundial, incluido el desarrollo de instalaciones regionales asociadas, cuando la intervención de la Unión aporte un importante valor añadido; (2) la integración de las infraestructuras de investigación nacionales y regionales de interés y el acceso transnacional a ellas, de modo que los científicos europeos puedan utilizarlas, independientemente de su ubicación, a fin de realizar una investigación del más alto nivel; (3) el desarrollo, despliegue y uso de las infraestructuras electrónicas con el fin de garantizar una capacidad de liderazgo mundial en materia de creación de redes, informática y datos científicos.";"";"H2020";"H2020-EU.1.4.";"";"";"2014-09-22 20:39:46";"664123" +"H2020-EU.2.1.5.4.";"it";"H2020-EU.2.1.5.4.";"";"";"Nuovi modelli economici sostenibili";"New sustainable business models";"

Nuovi modelli economici sostenibili

Sviluppare concetti e metodologie relativi a modelli economici di adattamento e basati sulle conoscenze con approcci personalizzati, tra cui approcci alternativi in materia di produttività delle risorse.";"";"H2020";"H2020-EU.2.1.5.";"";"";"2014-09-22 20:42:14";"664205" +"H2020-EU.2.1.4.3.";"it";"H2020-EU.2.1.4.3.";"";"";"Tecnologie di piattaforma innovative e competitive";"Innovative and competitive platform technologies";"

Tecnologie di piattaforma innovative e competitive

Sviluppo di tecnologie di piattaforma, quali ad esempio genomica, meta-genomica, proteomica, metabolomica, strumenti molecolari, sistemi di espressione, piattaforme di fenotipizzazione e piattaforme basate sulle cellule, per rafforzare la leadership e il vantaggio competitivo in un'ampia gamma di settori che hanno un impatto economico.";"";"H2020";"H2020-EU.2.1.4.";"";"";"2014-09-22 20:41:55";"664195" +"H2020-EU.2.1.5.4.";"de";"H2020-EU.2.1.5.4.";"";"";"Neue nachhaltige Geschäftsmodelle";"New sustainable business models";"

Neue nachhaltige Geschäftsmodelle

Ableitung von Konzepten und Methoden für adaptive, wissensgestützte und maßgeschneiderte Unternehmensmodelle, einschließlich alternativer ressourcensparender Ansätze.";"";"H2020";"H2020-EU.2.1.5.";"";"";"2014-09-22 20:42:14";"664205" +"H2020-EU.2.1.3.6.";"it";"H2020-EU.2.1.3.6.";"";"";"Metrologia, caratterizzazione, standardizzazione e controllo di qualità";"Metrology, characterisation, standardisation and quality control";"

Metrologia, caratterizzazione, standardizzazione e controllo di qualità

Promozione delle tecnologie quali la caratterizzazione, la valutazione non distruttiva, l'esame e il monitoraggio continui e la modellizzazione di tipo predittivo delle prestazioni per consentire progressi e impatto nella scienza e nell'ingegneria dei materiali.";"";"H2020";"H2020-EU.2.1.3.";"";"";"2014-09-22 20:41:37";"664185" +"H2020-EU.2.1.3.3.";"fr";"H2020-EU.2.1.3.3.";"";"";"Gestion des composants de matériaux";"Management of materials components";"

Gestion des composants de matériaux

Recherche et développement portant sur des techniques nouvelles et innovantes pour les matériaux et leurs composants et systèmes.";"";"H2020";"H2020-EU.2.1.3.";"";"";"2014-09-22 20:41:26";"664179" +"H2020-EU.2.1.3.3.";"de";"H2020-EU.2.1.3.3.";"";"";"Management von Werkstoffkomponenten ";"Management of materials components";"

Management von Werkstoffkomponenten

Forschung und Entwicklung neuer und innovativer Techniken für Materialien und ihre Komponenten und Systeme.";"";"H2020";"H2020-EU.2.1.3.";"";"";"2014-09-22 20:41:26";"664179" +"H2020-EU.2.1.2.5.";"es";"H2020-EU.2.1.2.5.";"";"";"Desarrollo y normalización de técnicas, métodos de medición y equipos que potencien la capacidad";"Capacity-enhancing techniques, measuring methods and equipment";"

Desarrollo y normalización de técnicas, métodos de medición y equipos que potencien la capacidad

Centrándose en las tecnologías subyacentes para apoyar el desarrollo y la introducción en el mercado de nanomateriales y nanosistemas complejos y seguros.";"";"H2020";"H2020-EU.2.1.2.";"";"";"2014-09-22 20:41:12";"664171" +"H2020-EU.2.1.2.1.";"fr";"H2020-EU.2.1.2.1.";"";"";"Développer les nanomatériaux, les nanodispositifs et les nanosystèmes de la prochaine génération";"Next generation nanomaterials, nanodevices and nanosystems";"

Développer les nanomatériaux, les nanodispositifs et les nanosystèmes de la prochaine génération

Cibler les produits fondamentalement nouveaux permettant des solutions durables dans toute une série de secteurs.";"";"H2020";"H2020-EU.2.1.2.";"";"";"2014-09-22 20:40:58";"664163" +"H2020-EU.1.";"pl";"H2020-EU.1.";"";"";"PRIORYTET „Doskonała baza naukowa”";"Excellent Science";"

PRIORYTET „Doskonała baza naukowa”

Ta część ma na celu wzmocnienie jakości bazy naukowej Unii i jej rozszerzenie oraz konsolidację EPB w celu zwiększenia konkurencyjności systemu badań naukowych i innowacji Unii w skali globalnej. Składa się z czterech celów szczegółowych:a)„Europejska Rada ds. Badań Naukowych (ERBN)” w ramach ogólnounijnego współzawodnictwa zapewnia atrakcyjne i elastyczne finansowanie, aby umożliwić utalentowanym i kreatywnym naukowcom oraz ich zespołom koncentrację na najbardziej obiecujących kierunkach badań pionierskich. H2020-EU.1.1. (http://cordis.europa.eu/programme/rcn/664099_en.html) b)„Przyszłe i powstające technologie (FET)” wspierają wspólne badania w celu zwiększenia potencjału Europy w zakresie zaawansowanych innowacji powodujących przesunięcie paradygmatu. Wspierana jest współpraca między dyscyplinami naukowymi w odniesieniu do radykalnie nowych pomysłów obarczonych wysokim stopniem ryzyka i przyspieszane jest opracowywanie najbardziej obiecujących nowych obszarów nauki i technologii oraz strukturyzowanie odpowiednich społeczności naukowych na szczeblu Unii. H2020-EU.1.2. (/programme/rcn/664101_en.html)c)Działania „Maria Skłodowska-Curie” zapewniają najwyższej jakości innowacyjne szkolenia w zakresie badań naukowych, a także atrakcyjne możliwości rozwoju kariery i wymiany wiedzy, poprzez międzynarodową i międzysektorową mobilność naukowców, w celu jak najlepszego przygotowania ich do podjęcia obecnych i przyszłych wyzwań społecznych. H2020-EU.1.2. (http://cordis.europa.eu/programme/rcn/664109_en.html)d)„Infrastruktura badawcza” ma za zadanie rozwój i wspieranie najwyższej jakości europejskiej infrastruktury badawczej oraz wspomaganie jej w działaniu na rzecz EPB poprzez wspieranie jej potencjału w zakresie innowacji, przyciąganie światowej klasy naukowców oraz rozwój kapitału ludzkiego oraz uzupełnienie tych działań działaniami w ramach odpowiedniej polityki Unii i współpracy międzynarodowej. H2020-EU.1.4. (http://cordis.europa.eu/programme/rcn/664121_en.html)Wykazano, że każdy z tych celów ma wysoką unijną wartość dodaną. Wspólnie tworzą one efektywny i zrównoważony zbiór działań, które, wraz z działaniami na poziomie krajowym, regionalnym i lokalnym, odpowiadają na wszystkie potrzeby Europy w zakresie zaawansowanych badań naukowych i technologii. Połączenie ich w jednym programie umożliwi realizowanie ich w sposób bardziej spójny, zracjonalizowany, uproszczony i ukierunkowany, przy jednoczesnym zachowaniu ciągłości, która ma zasadnicze znaczenie dla utrzymania ich skuteczności.Są to działania z natury wybiegające w przyszłość, budujące kompetencje w długim horyzoncie czasowym, skupiające się na kolejnej generacji nauki, technologii, naukowców i innowacji oraz zapewniające wsparcie dla nowych talentów z Unii, państw stowarzyszonych i całego świata. W związku z ich zorientowanym na naukę charakterem i w dużej mierze oddolnym, nastawionym na inicjatywę badaczy sposobem finansowania, europejskie środowisko naukowe będzie mieć do odegrania istotną rolę w określaniu kierunków badań naukowych realizowanych w ramach programu „Horyzont 2020”.";"";"H2020";"H2020-EC";"";"";"2014-09-23 20:18:04";"664091" +"H2020-EU.2.1.2.1.";"es";"H2020-EU.2.1.2.1.";"";"";"Desarrollo de la próxima generación de nanomateriales, nanosistemas y nanodispositivos";"Next generation nanomaterials, nanodevices and nanosystems";"

Desarrollo de la próxima generación de nanomateriales, nanosistemas y nanodispositivos

Encaminado a obtener productos fundamentalmente nuevos que hagan posibles soluciones sostenibles en una amplia gama de sectores.";"";"H2020";"H2020-EU.2.1.2.";"";"";"2014-09-22 20:40:58";"664163" +"H2020-EU.1.4.3.";"pl";"H2020-EU.1.4.3.";"";"";"Wzmocnienie europejskiej polityki w zakresie infrastruktury badawczej i współpracy międzynarodowej";"Research infrastructure policy and international cooperation";"

Wzmocnienie europejskiej polityki w zakresie infrastruktury badawczej i współpracy międzynarodowej

Celem jest wspieranie partnerstw między odnośnymi decydentami a organami finansującymi, tworzenia narzędzi mapowania i monitorowania na potrzeby procesu decyzyjnego, a także wspieranie współpracy międzynarodowej. Należy wspierać europejską infrastrukturę badawczą w działaniach z zakresu stosunków międzynarodowych.Cele wymienione w działaniach pod pozycjami b) i c) są realizowane w drodze specjalnych działań, a także – w odpowiednich przypadkach – w ramach działań wypracowywanych zgodnie z działaniem pod pozycją a).";"";"H2020";"H2020-EU.1.4.";"";"";"2014-09-22 20:40:11";"664137" +"H2020-EU.1.4.3.";"it";"H2020-EU.1.4.3.";"";"";"Rafforzamento della politica europea in materia di infrastrutture di ricerca e della cooperazione internazionale";"Research infrastructure policy and international cooperation";"

Rafforzamento della politica europea in materia di infrastrutture di ricerca e della cooperazione internazionale

L'obiettivo è sostenere i partenariati fra i pertinenti responsabili politici e gli organismi di finanziamento, mappando e monitorando gli strumenti di decisione politica e le attività di cooperazione internazionale. Le infrastrutture di ricerca europee possono essere sostenute nell'ambito delle loro attività di relazioni internazionali.Gli obiettivi stabiliti nell'ambito delle attività di cui alle lettere b) e c) sono perseguiti mediante azioni ad hoc e all'interno delle azioni sviluppate nell'ambito delle attività di cui alla lettera a), ove opportuno.";"";"H2020";"H2020-EU.1.4.";"";"";"2014-09-22 20:40:11";"664137" +"H2020-EU.1.4.1.";"it";"H2020-EU.1.4.1.";"";"";"Sviluppare le infrastrutture di ricerca europee per il 2020 e oltre";"Research infrastructures for 2020 and beyond";"

Sviluppare le infrastrutture di ricerca europee per il 2020 e oltre

Gli obiettivi consistono nell'agevolare e sostenere azioni legate a: 1) la preparazione, l'attuazione e la gestione di ESFRI e di altre infrastrutture di ricerca di livello mondiale, compreso lo sviluppo di strutture partner regionali, ove vi sia un forte valore aggiunto per l'intervento dell'Unione; 2) l'integrazione e l'accesso transnazionale alle infrastrutture di ricerca nazionali e regionali di interesse europeo, in modo che gli scienziati europei possano utilizzarle, a prescindere dalla loro ubicazione, per condurre ricerche di alto livello; 3) lo sviluppo, l'introduzione e la gestione delle infrastrutture in rete per assicurare una capacità d'importanza mondiale nell'ambito delle strutture di rete, dell'elaborazione e dei dati scientifici.";"";"H2020";"H2020-EU.1.4.";"";"";"2014-09-22 20:39:46";"664123" +"H2020-EU.1.";"es";"H2020-EU.1.";"";"";"PRIORIDAD ""Ciencia excelente""";"Excellent Science";"

PRIORIDAD ""Ciencia excelente""

Esta parte aspira a reforzar y ampliar la excelencia de la base científica de la Unión, así como a consolidar el Espacio Europeo de Investigación para lograr que el sistema de investigación e innovación de la Unión resulte más competitivo a escala mundial. Consta de cuatro objetivos específicos:a)El Consejo Europeo de Investigación (CEI) proporcionará una financiación atractiva y flexible para permitir a investigadores de talento y creativos y a sus equipos explorar las alternativas más prometedoras en las fronteras de la ciencia, sobre la base de la competencia a escala de la Unión. H2020-EU.1.1. (http://cordis.europa.eu/programme/rcn/664099_en.html)b)Las Tecnologías Futuras y Emergentes apoyarán la investigación en colaboración a fin de ampliar la capacidad de Europa para realizar una innovación avanzada y que modifique los paradigmas. Fomentarán la colaboración científica entre disciplinas sobre ideas radicalmente nuevas y de alto riesgo y acelerarán el desarrollo de los campos emergentes más prometedores de la ciencia y la tecnología, así como la estructuración en toda la Unión de las comunidades científicas correspondientes. H2020-EU.1.2. (http://cordis.europa.eu/programme/rcn/664101_en.html)c)Las acciones Marie Skłodowska-Curie proporcionarán una formación en investigación excelente e innovadora, así como oportunidades atractivas de carrera profesional e intercambio de conocimientos, a través de la movilidad transfronteriza y transectorial de los investigadores, a fin de prepararlos óptimamente para hacer frente a los retos de la sociedad presentes y futuros. H2020-EU.1.3. (http://cordis.europa.eu/programme/rcn/664109_en.html)d)Las ""infraestructuras de investigación"" impulsarán y apoyarán las infraestructuras de investigación europeas excelentes y las ayudarán a funcionar para el EEI fomentando su potencial para la innovación, captando a investigadores de nivel mundial, formando el capital humano y complementando todo ello con la política de cooperación internacional de la Unión. H2020-EU.1.4. (http://cordis.europa.eu/programme/rcn/664121_en.html)Se ha demostrado que todos esos objetivos poseen un alto valor añadido de la Unión. Conjuntamente, forman un conjunto de actividades potente y equilibrado que, en concertación con las actividades a nivel nacional, regional y local, cubren la totalidad de las necesidades de Europa en materia de ciencia y tecnología avanzadas. Estar agrupados en un único programa les permitirá trabajar con mayor coherencia, de manera racionalizada, simplificada y más focalizada, pero manteniendo la continuidad que es vital para apuntalar su eficacia.Las actividades son intrínsecamente prospectivas, construyen competencias a largo plazo, se centran en la próxima generación en ciencia, tecnología, investigación e innovación, y prestan apoyo a los nuevos talentos de la Unión, de los países asociados y del mundo. Habida cuenta de la primacía que se concede a la ciencia y de los mecanismos de financiación en gran parte ""ascendentes"" e impulsados por los investigadores, la comunidad científica europea desempeñará un papel importante en la determinación de las líneas de investigación que se sigan en Horizonte 2020.";"";"H2020";"H2020-EC";"";"";"2014-09-23 20:18:04";"664091" +"H2020-EU.3.2.1.";"pl";"H2020-EU.3.2.1.";"";"";"Zrównoważone rolnictwo i leśnictwo";"Sustainable agriculture and forestry";"

Zrównoważone rolnictwo i leśnictwo

Celem jest zapewnienie wystarczającego zaopatrzenia w żywność, paszę, biomasę i inne surowce, przy jednoczesnym zabezpieczeniu zasobów naturalnych, takich jak woda, gleba, oraz bioróżnorodności, w europejskiej i światowej perspektywie, oraz udoskonalenie usług ekosystemowych, w tym walka ze skutkami zmiany klimatu i łagodzenie ich. Działania mają skupiać się na podniesieniu jakości i wartości produktów rolniczych poprzez wypracowanie bardziej zrównoważonych i produktywnych systemów rolnictwa – w tym chowu zwierząt – i leśnictwa, które są różnorodne, odporne i zasobooszczędne (niskoemisyjne oraz o niskich nakładach zewnętrznych, i oszczędzające wodę), chronią zasoby naturalne, produkują mniej odpadów i mają zdolność przystosowywania się do zmieniających się warunków środowiskowych. Ponadto działania mają dotyczyć rozwoju usług, koncepcji i polityk wspierających rozwój środków utrzymania na obszarach wiejskich i zachęcających do zrównoważonej konsumpcji.W szczególności w leśnictwie celem jest wytwarzanie – w zrównoważony sposób – biomasy, produktów biologicznych i dostarczanie usług ekosystemowych, z należytym uwzględnieniem aspektów gospodarczych, ekologicznych i społecznych leśnictwa. Działania skupią się na dalszym rozwijaniu produkcji i zrównoważonego charakteru zasobooszczędnych systemów leśnictwa, które będą wpływać na podniesienie poziomu odporności lasów i ochronę bioróżnorodności i które mogą zaspokoić zwiększone zapotrzebowanie na biomasę.Pod uwagę zostanie również wzięta interakcja między roślinami użytkowymi a zdrowiem i dobrostanem, a także wykorzystanie ogrodnictwa i leśnictwa do rozwoju zazieleniania miast.";"";"H2020";"H2020-EU.3.2.";"";"";"2014-09-22 20:44:37";"664283" +"H2020-EU.3.2.1.";"fr";"H2020-EU.3.2.1.";"";"";"Agriculture et sylviculture durables";"Sustainable agriculture and forestry";"

Agriculture et sylviculture durables

L'objectif est de fournir en suffisance des aliments pour les hommes et les animaux, de la biomasse et d'autres matières premières tout en préservant les ressources naturelles, telles que l'eau, les sols et la biodiversité, dans une perspective européenne et mondiale, et en renforçant les services écosystémiques, notamment en s'efforçant de lutter contre le changement climatique et de l'atténuer. Les activités viseront à augmenter la qualité et la valeur des produits agricoles en mettant en œuvre une agriculture plus durable et plus productive, y compris des systèmes d'élevage et de sylviculture qui soient diversifiés, résistants et efficaces dans l'utilisation des ressources (en termes de faible émission de carbone, de faible apport extérieur et de consommation d'eau), protègent les ressources naturelles, produisent moins de déchets et puissent s'adapter à un environnement en transformation. Elles seront en outre axées sur le développement des services, des concepts et des politiques qui aideront les populations rurales à prospérer et elles viseront à favoriser une consommation compatible avec le développement durable.Dans le domaine de la sylviculture en particulier, l'objectif est de produire de la biomasse et des bioproduits et de fournir des services écosystémiques de façon durable, tout en tenant compte des aspects économiques, écologiques et sociaux de ce secteur. Les activités seront axées sur le développement de la production et de la durabilité de systèmes sylvicoles qui soient économes en ressources et de nature à renforcer la résilience des forêts ainsi que la protection de la biodiversité, et qui puissent répondre à la hausse de la demande de biomasse.En outre, on prendra en considération l'interaction entre les plantes fonctionnelles, d'une part, et la santé et le bien-être, d'autre part, ainsi que l'exploitation de l'horticulture et de la sylviculture pour le développement de la place du végétal dans les villes.";"";"H2020";"H2020-EU.3.2.";"";"";"2014-09-22 20:44:37";"664283" +"H2020-EU.3.2.1.";"es";"H2020-EU.3.2.1.";"";"";"Agricultura y silvicultura sostenibles";"Sustainable agriculture and forestry";"

Agricultura y silvicultura sostenibles

El objetivo es suministrar suficientes alimentos, piensos, biomasa y otras materias primas, al tiempo que se salvaguardan la base de los recursos naturales como el agua y el suelo y la biodiversidad, con una perspectiva europea y mundial, y se mejoran los servicios ecosistémicos, incluida la adaptación al cambio climático y su mitigación. Las actividades se centrarán en aumentar la calidad y el valor de los productos agrícolas proporcionando una agricultura más sostenible y productiva, incluida la zootecnia y los sistemas agroforestales eficientes en la utilización de recursos (incluida una agricultura baja en carbono y en insumos externos y ecológica). Además, las actividades se centrarán en el desarrollo de servicios, conceptos y políticas para una vida rural próspera y en el fomento del consumo sostenible.En particular en lo que se refiere a la silvicultura, el objetivo es producir bioproductos, servicios ecosistémicos y suficiente biomasa, respetando debidamente los aspectos económicos, ecológicos y sociales de ese sector. Las actividades se centrarán en un mayor desarrollo de la producción y la sostenibilidad de sistemas forestales que utilicen los recursos con eficiencia y sirvan para reforzar la resiliencia forestal y la protección de la biodiversidad y que puedan hacer frente a un aumento de la demanda de biomasa.Se estudiará también la interacción de las plantas funcionales con la salud y el bienestar, así como la explotación de la horticultura y la silvicultura para el desarrollo de la ecologización urbana.";"";"H2020";"H2020-EU.3.2.";"";"";"2014-09-22 20:44:37";"664283" +"H2020-EU.3.2.1.";"de";"H2020-EU.3.2.1.";"";"";"Nachhaltige Land- und Forstwirtschaft";"Sustainable agriculture and forestry";"

Nachhaltige Land- und Forstwirtschaft

Ziel ist die ausreichende Versorgung mit Lebensmitteln, Futtermitteln, Biomasse und anderen Rohstoffen unter Wahrung der natürlichen Ressourcen wie Wasser, Boden und biologische Vielfalt, aus europäischer und globaler Perspektive, und Verbesserung der Ökosystemleistungen, einschließlich des Umgangs mit dem Klimawandel und dessen Abmilderung. Schwerpunkt der Tätigkeiten ist die Steigerung der Qualität und des Werts der landwirtschaftlichen Erzeugnisse durch eine im Ergebnis nachhaltigere und produktivere Landwirtschaft, einschließlich Tierzucht und Forstwirtschaft, die vielseitig, widerstandsfähig und ressourcenschonend ist (im Sinne eines geringen CO2-Ausstoßes, geringen externen Inputs und niedrigen Wasserverbrauchs), die natürlichen Ressourcen schützt, weniger Abfall erzeugt und, anpassungsfähig ist. Darüber hinaus geht es um die Entwicklung von Dienstleistungen, Konzepten und Strategien zur Stärkung der wirtschaftlichen Existenz in ländlichen Gebieten und zur Förderung nachhaltiger Verbrauchsmuster.Insbesondere in Bezug auf die Forstwirtschaft besteht das Ziel darin, auf nachhaltige Weise biobasierte Produkte, Ökosystemleistungen und ausreichend Biomasse zu erzeugen und dabei die wirtschaftlichen, ökologischen und sozialen Aspekte der Forstwirtschaft gebührend zu berücksichtigen. Schwerpunkt der Tätigkeiten wird die Weiterentwicklung der Produktion und Nachhaltigkeit ressourceneffizienter Forstwirtschaftssysteme sein, die für die Stärkung der Widerstandsfähigkeit der Wälder und für den Schutz der biologischen Vielfalt von entscheidender Bedeutung sind und die zunehmende Nachfrage nach Biomasse befriedigen können.Auch die Wechselwirkung zwischen Funktionspflanzen einerseits und Gesundheit und Wohlergehen andererseits sowie der Einsatz von Gartenbau und Forstwirtschaft für den Ausbau der Stadtbegrünung werden berücksichtigt.";"";"H2020";"H2020-EU.3.2.";"";"";"2014-09-22 20:44:37";"664283" +"H2020-EU.3.2.1.";"it";"H2020-EU.3.2.1.";"";"";"Agricoltura e silvicoltura sostenibili";"Sustainable agriculture and forestry";"

Agricoltura e silvicoltura sostenibili

La finalità è fornire prodotti alimentari, mangimi, biomassa e altre materie prime in quantità sufficienti, tutelando le risorse naturali quali l'acqua, il suolo e la biodiversità in una prospettiva europea e globale, e promuovendo servizi ecosistemici, anche per affrontare e attenuare il cambiamento climatico. Le attività si concentrano sull'aumento della qualità e del valore dei prodotti agricoli attraverso il conseguimento di un'agricoltura più sostenibile e produttiva, compresi il settore zootecnico e i sistemi forestali, che siano diversificati, resilienti e basati su un uso efficiente delle risorse (in termini di basse emissioni di carbonio e bassi apporti esterni e acqua), che proteggano le risorse naturali, producano meno residui e siano in grado di adeguarsi alle trasformazioni dell'ambiente. Le attività si concentrano inoltre sullo sviluppo di servizi, idee e politiche per fare prosperare i mezzi di sussistenza della popolazione rurale e promuovere il consumo sostenibile.In particolare per quanto riguarda la silvicoltura, l'obiettivo è quello di produrre in modo sostenibile biomassa e prodotti biologici e di fornire servizi ecosistemici, tenendo nella dovuta considerazione gli aspetti economici, ecologici e sociali della silvicoltura. Le attività si concentreranno sullo sviluppo ulteriore della produzione e della sostenibilità di sistemi forestali efficienti sotto il profilo delle risorse e funzionali al rafforzamento della resilienza delle foreste e della protezione della biodiversità, nonché in grado di soddisfare la crescente domanda di biomassa.Saranno considerati altresì l'interazione tra piante funzionali e salute e benessere, e lo sfruttamento dell'orticoltura e della silvicoltura per lo sviluppo del rinverdimento urbano.";"";"H2020";"H2020-EU.3.2.";"";"";"2014-09-22 20:44:37";"664283" +"H2020-EU.1.";"it";"H2020-EU.1.";"";"";"PRIORITÀ ""Eccellenza scientifica""";"Excellent Science";"

PRIORITÀ ""Eccellenza scientifica""

La presente parte mira a rafforzare e ad ampliare l'eccellenza della base scientifica dell'Unione e a consolidare il SER al fine di rendere il sistema di ricerca e innovazione dell'Unione più competitivo su scala mondiale. Essa si articola in quattro obiettivi specifici.a)""Consiglio europeo della ricerca (CER)"" fornisce finanziamenti attraenti e flessibili per consentire a singoli ricercatori creativi e di talento e alle loro équipe di esplorare le vie più promettenti alle frontiere della scienza sulla base di una concorrenza di livello unionale. H2020-EU.1.1. (http://cordis.europa.eu/programme/rcn/664099_en.html)b)""Tecnologie emergenti e future (TEF)"" sostiene la ricerca collaborativa al fine di ampliare la capacità dell'Europa di produrre innovazioni d'avanguardia e in grado di rivoluzionare il pensiero tradizionale. Esso stimola la collaborazione scientifica interdisciplinare sulla base di idee radicalmente nuove, ad alto rischio, accelerando lo sviluppo dei settori scientifici e tecnologici emergenti più promettenti nonché la strutturazione su scala unionale delle corrispondenti comunità scientifiche. H2020-EU.1.2. (http://cordis.europa.eu/programme/rcn/664101_en.html)c)""Azioni Marie Skłodowska-Curie"" fornisce un'eccellente e innovativa formazione nella ricerca nonché una carriera interessante e opportunità di scambio di conoscenze grazie alla mobilità transfrontaliera e intersettoriale dei ricercatori, al fine di prepararli al meglio ad affrontare le sfide per la società attuali e future. H2020-EU.1.3. (http://cordis.europa.eu/programme/rcn/664109_en.html)d)""Infrastrutture di ricerca"" sviluppa e sostiene le infrastrutture europee di ricerca di eccellenza e le aiutano a contribuire al SER promuovendone il potenziale innovativo, attraendo ricercatori di livello mondiale, formando il capitale umano e integrando in tal modo la corrispondente politica dell'Unione e la cooperazione internazionale. H2020-EU.1.4. (http://cordis.europa.eu/programme/rcn/664121_en.html)Ognuno di tali obiettivi ha dimostrato di possedere un elevato valore aggiunto dell'Unione. Congiuntamente generano un insieme di attività potente ed equilibrato che, associato alle attività a livello nazionale, regionale e locale, copre l'integralità dei bisogni europei relativi alla scienza e alla tecnologia di punta. Il loro raggruppamento in un unico programma consentirà loro di funzionare con maggior coerenza in modo razionale, semplificato e più mirato, mantenendo nel contempo la continuità necessaria a sostenerne l'efficacia.Queste attività sono intrinsecamente orientate al futuro e allo sviluppo di competenze a lungo termine, si incentrano sulla prossima generazione di conoscenze scientifiche, tecnologiche, di ricercatori e innovazioni e forniscono sostegno a talenti emergenti provenienti dall'Unione e dai paesi associati, nonché dal resto del mondo. Dal momento che il carattere di tali attività è orientato verso la scienza e in considerazione dei dispositivi di finanziamento ""dal basso"" basati sull'iniziativa dei ricercatori, la comunità scientifica europea svolgerà un importante ruolo nel determinare le prospettive di ricerca seguite nell'ambito di Orizzonte 2020. ";"";"H2020";"H2020-EC";"";"";"2014-09-23 20:18:04";"664091" +"H2020-EU.1.";"de";"H2020-EU.1.";"";"";"SCHWERPUNKT ""Wissenschaftsexzellenz""";"Excellent Science";"

SCHWERPUNKT ""Wissenschaftsexzellenz""

Ziel dieses Teils ist die Stärkung und Ausweitung der Exzellenz der Wissenschaftsbasis der Europäischen Union und die Konsolidierung des Europäischen Forschungsraums, um die weltweite Wettbewerbsfähigkeit des Forschungs- und Innovationssystems der Union zu erhöhen. Dieser Teil umfasst vier Einzelziele:a)Für das Einzelziel ""Europäischer Forschungsrat (ERC)"" werden attraktive und flexible Fördermittel bereitgestellt, um es einzelnen, in einem unionsweiten Wettbewerb ausgewählten talentierten und kreativen Forschern und ihren Teams zu ermöglichen, vielversprechende Wege in Pionierbereichen der Wissenschaft zu beschreiten. H2020-EU.1.1. (http://cordis.europa.eu/programme/rcn/664099_en.html)b)Im Rahmen des Einzelziels ""Künftige und neu entstehende Technologien (FET)""wird die kooperative Forschung unterstützt, um Europas Kapazitäten für fortgeschrittene, einen Paradigmenwechsel bewirkende Innovationen auszuweiten. Angestrebt werden die Förderung disziplinenübergreifender Kooperationen bei grundlegend neuen, hochriskanten Ideen, eine schnellere Entwicklung vielversprechender neu entstehender Bereiche in Wissenschaft und Technologie sowie eine schnellere unionsweite Strukturierung der entsprechenden wissenschaftlichen Gemeinschaften. H2020-EU.1.2. (http://cordis.europa.eu/programme/rcn/664101_en.html)c) Das Einzelziel ""Marie-Skłodowska-Curie-Maßnahmen"" wird Möglichkeiten für eine exzellente und innovative Ausbildung in der Forschung sowie für eine attraktive Laufbahn und den Wissensaustausch durch eine grenz- und sektorübergreifende Mobilität von Wissenschaftlern bieten, um diese optimal auf die Bewältigung der aktuellen und künftigen gesellschaftlichen Herausforderungen vorzubereiten. H2020-EU.1.3. (http://cordis.europa.eu/programme/rcn/664109_en.html)d)Mit dem Einzelziel ""Forschungsinfrastrukturen"" sollen exzellente europäische Forschungsinfrastrukturen aufgebaut und gefördert und bei ihrem Beitrag zum EFR unterstützt werden, indem ihr Innovationspotenzial ausgebaut wird, Wissenschaftler von Weltrang angeworben werden und für die Qualifizierung des Humankapitals gesorgt wird, ergänzt durch eine entsprechende Unionspolitik und internationale Zusammenarbeit. H2020-EU.1.4. (http://cordis.europa.eu/programme/rcn/664121_en.html)Jedes dieser Ziele ist für sich genommen nachweislich von hohem europäischem Mehrwert. Zusammengenommen bilden sie ein kraftvolles und ausgewogenes Paket von Tätigkeiten, die gemeinsam mit den Tätigkeiten auf nationaler, regionaler und lokaler Ebene die gesamte Bandbreite der europäischen Bedürfnisse in Bezug auf fortgeschrittene Wissenschaft und Technologie umfassen. Durch ihre Bündelung in einem einzigen Programm lassen sie sich besser aufeinander abstimmen und ihre Durchführung unter Aufrechterhaltung der für ihre Wirksamkeit notwendigen Kontinuität rationeller, einfacher und zielgerichteter gestalten.Die Tätigkeiten sind perspektivisch ausgelegt, dienen dem langfristigen Aufbau von Fähigkeiten, konzentrieren sich auf Wissenschaft, Technologie, Forschung und Innovationen der nächsten Generation und unterstützen Nachwuchstalente aus der gesamten Union, den assoziierten Ländern und weltweit. Da die Anregungen für diese Tätigkeiten aus der Wissenschaft kommen und die Förderregelungen im weitesten Sinne von der Basis, d. h. von den Forschern selbst vorgeschlagen werden, wird die europäische Wissenschaftsgemeinschaft eine große Rolle bei der Festlegung der Wege spielen, die die im Rahmen von Horizont 2020 geförderte Forschung einschlagen wird.";"";"H2020";"H2020-EC";"";"";"2014-09-23 20:18:04";"664091" +"H2020-EU.2.1.3.1.";"fr";"H2020-EU.2.1.3.1.";"";"";"Technologies des matériaux transversales et génériques";"Cross-cutting and enabling materials technologies";"

Technologies des matériaux transversales et génériques

Recherche sur les matériaux sur mesure, fonctionnels et multifonctionnels, possédant un contenu élevé de connaissances, de nouvelles fonctionnalités et une performance améliorée, ainsi que sur les matériaux structurels à des fins d'innovation dans tous les secteurs industriels, y compris les industries de la création.";"";"H2020";"H2020-EU.2.1.3.";"";"";"2014-09-22 20:41:19";"664175" +"H2020-EU.2.1.4.1.";"pl";"H2020-EU.2.1.4.1.";"";"";"Wspieranie najnowocześniejszych biotechnologii jako przyszłych czynników stymulujących innowację";"Cutting-edge biotechnologies as future innovation driver";"

Wspieranie najnowocześniejszych biotechnologii jako przyszłych czynników stymulujących innowację

Rozwój powstających dziedzin technologii, takich jak biologia syntetyczna, bioinformatyka i biologia systemowa, niosących ze sobą wielką obietnicę opracowania innowacyjnych produktów i technologii oraz zupełnie nowatorskich zastosowań.";"";"H2020";"H2020-EU.2.1.4.";"";"";"2014-09-22 20:41:48";"664191" +"H2020-EU.2.1.4.1.";"it";"H2020-EU.2.1.4.1.";"";"";"Rafforzare le biotecnologie d'avanguardia in quanto motore delle future innovazioni";"Cutting-edge biotechnologies as future innovation driver";"

Rafforzare le biotecnologie d'avanguardia in quanto motore delle future innovazioni

Sviluppo dei settori a tecnologia emergente come la biologia sintetica, la bioinformatica e la biologia dei sistemi, che risultano molto promettenti per tecnologie e prodotti innovativi e applicazioni del tutto nuove.";"";"H2020";"H2020-EU.2.1.4.";"";"";"2014-09-22 20:41:48";"664191" +"H2020-EU.2.2.2.";"es";"H2020-EU.2.2.2.";"";"";"Mecanismo de capital que proporciona financiación de capital para la I+i: ""Instrumentos de capital de la Unión para la investigación y la innovación""";"Equity facility";"

Mecanismo de capital que proporciona financiación de capital para la I+i: ""Instrumentos de capital de la Unión para la investigación y la innovación""

El objetivo es contribuir a superar las deficiencias del mercado de capital-riesgo europeo y proporcionar capital y cuasi capital para cubrir el desarrollo y las necesidades de financiación de las empresas innovadoras desde la fase de lanzamiento a la de crecimiento y expansión. Se hará hincapié en el apoyo a los objetivos de Horizonte 2020 y las políticas conexas.Los beneficiarios finales previstos serán potencialmente las empresas de todos los tamaños que acometan o se embarquen en actividades de innovación, con especial atención a las PYME y empresas de capitalización media innovadoras.El mecanismo de capital se centrará en los fondos de capital-riesgo y en los fondos de fondos para la fase inicial que facilitan capital-riesgo y cuasi capital (incluido capital intermedio) a empresas de cartera individual. El mecanismo contará asimismo con la posibilidad de efectuar inversiones en las fases de expansión y crecimiento en conjunción con el mecanismo de capital para el crecimiento del Programa COSME, para garantizar un apoyo continuado durante las fases de arranque y desarrollo de las empresas.El mecanismo de capital, que estará impulsado principalmente por la demanda, utilizará un planteamiento de cartera, según el cual los fondos de capital-riesgo y otros intermediarios comparables seleccionarán las empresas en las que se invierte.Se aplicará la asignación obligatoria para contribuir a la consecución de objetivos políticos concretos, basándose en la experiencia positiva del Programa Marco de Innovación y Competitividad (2007-2013) con la asignación de fondos para la ecoinnovación, en particular para alcanzar objetivos relacionados con los retos de la sociedad identificados.El apartado de arranque apoyará las fases de lanzamiento e inicial, haciendo posibles las inversiones de capital, entre otras, en organizaciones de transferencia de conocimientos y organismos similares mediante el apoyo a la transferencia de tecnología (inclusive la traslación al sector productivo de los resultados de la investigación y las invenciones generadas en el ámbito de la investigación pública, por ejemplo mediante pruebas de concepto), fondos de capital semilla, fondos semilla e iniciales transfronterizos, vehículos de coinversión para inversores providenciales, activos de propiedad intelectual, plataformas para el intercambio y comercio de derechos de propiedad intelectual y, para la etapa inicial, fondos de capital-riesgo y fondos de fondos que funcionen de modo transfronterizo e inviertan en fondos de capital-riesgo. Ello podría incluir el apoyo en la fase 3 del instrumento consagrado a las PYME supeditado al nivel de demanda.El apartado de crecimiento efectuará inversiones en las fases de expansión y crecimiento en conjunción con el mecanismo de capital para el crecimiento del Programa COSME, lo que incluye las inversiones en fondos de fondos que operan a través de las fronteras e invierten en fondos de capital-riesgo en los sectores público y privado, la mayor parte de los cuales tienen un punto focal temático que coadyuva a los objetivos de la estrategia Europa 2020.";"";"H2020";"H2020-EU.2.2.";"";"";"2014-09-22 20:42:43";"664221" +"H2020-EU.2.2.2.";"de";"H2020-EU.2.2.2.";"";"";"Die Beteiligungskapital-Fazilität für FuI: ""Unionsinstrumente für die Beteiligungsfinanzierung von Forschung und Innovation""";"Equity facility";"

Die Beteiligungskapital-Fazilität für FuI: ""Unionsinstrumente für die Beteiligungsfinanzierung von Forschung und Innovation""

Angestrebt werden die Überwindung der Defizite des Risikokapitalmarkts der Union und die Bereitstellung von Beteiligungskapital und Quasi-Beteiligungskapital zur Deckung des Entwicklungs- und Finanzierungsbedarfs innovativer Unternehmen – von der Gründung bis zum Wachstum und zur Expansion. Schwerpunkt ist die Unterstützung der Ziele von Horizont 2020 und der einschlägigen Politik.Zielgruppe: Unternehmen jeder Größe, die auf dem Gebiet der Innovation tätig sind oder ihre Innovationstätigkeit aufnehmen, wobei innovativen KMU und Unternehmen mit mittlerer Kapitalausstattung besondere Aufmerksamkeit gilt.Die Beteiligungskapital-Fazilität konzentriert sich auf Frühphasen-Risikokapitalfonds und Dachfonds, mit denen einzelnen Portfolio-Unternehmen Risikokapital und Quasi-Beteiligungskapital (einschließlich Mezzanine-Kapital) zur Verfügung gestellt wird. Die Fazilität bietet auch die Möglichkeit für Investitionen in der Expansions- und Wachstumsphase in Verbindung mit der Beteiligungskapital-Fazilität für Wachstum im Rahmen von COSME, um eine kontinuierliche Unterstützung von der Gründung bis zur Expansion der Unternehmen zu gewährleisten.Die Beteiligungskapital-Fazilität, die vor allem nachfrageabhängig ist, stützt sich auf ein Portfolio-Konzept, bei dem Risikokapitalfonds und andere vergleichbare Intermediäre die für sie in Frage kommenden Unternehmen auswählen.In Anlehnung an die positiven Erfahrungen mit dem Programm für Wettbewerbsfähigkeit und Innovation (2007 bis 2013), in dem Mittel speziell für Öko-Innovationen, beispielsweise für die Erreichung von Zielen im Zusammenhang mit den festgestellten gesellschaftlichen Herausforderungen, bereitgestellt wurden, können Mittel speziell für die Unterstützung bestimmter politischer Ziele vorgesehen werden.Der Gründungsteil, mit dem die Gründungs- und die Frühphase unterstützt werden, soll Beteiligungskapitalinvestitionen u. a. in Organisationen für den Wissenstransfer und ähnliche Einrichtungen über Unterstützung für den Technologietransfer (einschließlich des Transfers von Forschungsergebnissen und Erfindungen aus dem Bereich der öffentlichen Forschung für den Produktionssektor, z. B. durch Konzepterprobung), in Gründungskapitalfonds, grenzüberschreitende Fonds für die Gründungs- und Frühphase, Business-Angel-Koinvestitionsinstrumente, Rechte an geistigem Eigentum, Plattformen für den Handel mit Rechten am geistigen Eigentum und in Risikokapitalfonds für die Frühphase sowie in grenzüberschreitend tätige und in Risikokapitalfonds investierende Dachfonds ermöglichen. Dies könnte – je nach Nachfrage – Unterstützung in der Phase 3 des KMU-Instruments umfassen.Der Wachstumsteil ermöglicht Investitionen in der Expansions- und Wachstumsphase in Verbindung mit der Beteiligungskapital-Fazilität für Wachstum im Rahmen von COSME, einschließlich Investitionen in grenzüberschreitend tätige Dachfonds des privaten sowie des öffentlichen Sektors, die in Risikokapitalfonds investieren und die überwiegend einen thematischen Schwerpunkt haben, der die Ziele der Strategie Europa 2020 unterstützt.";"";"H2020";"H2020-EU.2.2.";"";"";"2014-09-22 20:42:43";"664221" +"H2020-EU.2.2.1.";"pl";"H2020-EU.2.2.1.";"";"";"Instrument dłużny zapewniający finansowanie dłużne badań naukowych i innowacji: „Instrument pożyczkowo-gwarancyjny Unii na rzecz badań naukowych i innowacji”";"Debt facility";"

Instrument dłużny zapewniający finansowanie dłużne badań naukowych i innowacji: „Instrument pożyczkowo-gwarancyjny Unii na rzecz badań naukowych i innowacji”

Celem jest poprawa dostępu do finansowania dłużnego (pożyczki, gwarancje, regwarancje i inne formy dłużnego finansowania ryzyka) dla podmiotów publicznych i prywatnych oraz dla partnerstw publiczno-prywatnych zaangażowanych w działania w zakresie badań naukowych i innowacji, które wymagają ryzykownych inwestycji, aby przynieść owoce. Działania koncentrują się na wspieraniu badań naukowych i innowacji o wysokim potencjale doskonałości.Zważywszy, że jednym z celów programu „Horyzont 2020” jest przyczynienie się do zmniejszenia luki między działalnością badawczo-rozwojową a innowacjami, sprzyjanie pojawianiu się na rynku nowych lub ulepszonych produktów i usług oraz uwzględnianie krytycznej roli fazy weryfikacji projektu w procesie transferu wiedzy, wprowadzone mogą zostać mechanizmy umożliwiające finansowanie fazy weryfikacji projektu, niezbędnej dla potwierdzenia znaczenia, roli i przyszłego innowacyjnego wpływu wyników badań lub wynalazków będących obiektem transferu.Docelowi beneficjenci końcowi to potencjalnie podmioty prawne dowolnej wielkości, które mogą pożyczać i zwracać środki pieniężne oraz, w szczególności, MŚP odznaczające się potencjałem wprowadzania innowacji i szybkiego wzrostu; średnie i duże przedsiębiorstwa; uniwersytety i instytucje badawcze; infrastruktura badawcza i innowacyjna; partnerstwa publiczno-prywatne oraz projekty specjalnego przeznaczenia.Finansowanie z instrumentu dłużnego obejmuje dwa główne składniki:(1)Składnik stymulowany zapotrzebowaniem, obejmujący pożyczki i gwarancje udzielane na zasadzie „kto pierwszy, ten lepszy”, przy szczególnym wsparciu dla beneficjentów takich jak MŚP i przedsiębiorstwa o średniej kapitalizacji. Ten składnik jest odpowiedzią na stabilny i nieprzerwany wzrost wolumenu pożyczek RSFF, stymulowany zapotrzebowaniem. W ramach okna dla MŚP wspiera się działania mające na celu poprawę dostępu do finansowania dla MŚP i innych podmiotów ukierunkowanych głównie na działalność w obszarze badań, rozwoju i innowacji. Mogą one obejmować wsparcie dla trzeciej fazy instrumentu MŚP z uwzględnieniem poziomu zapotrzebowania.(2)Składnik ukierunkowany, skupiający się na kierunkach polityki i kluczowych sektorach mających podstawowe znaczenie dla sprostania wyzwaniom społecznym, wzmocnienia wiodącej pozycji w przemyśle i konkurencyjności, wspierania zrównoważonego, niskoemisyjnego wzrostu gospodarczego sprzyjającego włączeniu społecznemu, a także zapewnienia środowiskowych i innych dóbr publicznych. Ten składnik pomaga Unii w działaniach związanych z aspektami sektorowych celów strategicznych, dotyczącymi badań naukowych i innowacji.";"";"H2020";"H2020-EU.2.2.";"";"";"2014-09-22 20:42:40";"664219" +"H2020-EU.2.2.1.";"it";"H2020-EU.2.2.1.";"";"";"Lo strumento prestiti che fornisce finanziamenti in ambito R&I: ""Servizio di prestiti e garanzie dell'Unione per la ricerca e l'innovazione""";"Debt facility";"

Lo strumento prestiti che fornisce finanziamenti in ambito R&I: ""Servizio di prestiti e garanzie dell'Unione per la ricerca e l'innovazione""

La finalità è migliorare l'accesso al finanziamento tramite debito - prestiti, garanzie, controgaranzie e altre forme di debito e capitale di rischio - per le entità pubbliche e private e i partenariati pubblico-privato che esercitano attività di ricerca e innovazione che richiedono investimenti rischiosi per il loro svolgimento. L'obiettivo è sostenere la ricerca e l'innovazione con un forte potenziale d'eccellenza.Dato che uno degli obiettivi di Orizzonte 2020 è contribuire a ridurre il divario tra R&S e innovazione, favorendo l'ingresso nel mercato di prodotti e servizi nuovi o migliorati e tenendo conto del ruolo critico della fase di prova di concetto nel processo di trasferimento di conoscenza, possono essere introdotti meccanismi che permettano il finanziamento delle fasi di prova di concetto necessarie per confermare l'interesse, la pertinenza e l'impatto innovativo futuro dei risultati della ricerca o dell'invenzione oggetto del trasferimento.I beneficiari finali sono potenzialmente soggetti giuridici di tutte le dimensioni in grado di contrarre prestiti e rimborsare fondi e, in particolare, le PMI dotate del potenziale per svolgere attività innovative e crescere rapidamente, le imprese di dimensione intermedia (mid-caps) e le grandi imprese, le università e gli istituti di ricerca, le infrastrutture di ricerca e innovazione, i partenariati pubblico privato e i veicoli o i progetti per uso speciale.Il finanziamento dello strumento prestiti ha due componenti principali:(1)Un elemento basato sulla domanda, che fornisce prestiti e garanzie sulla base del principio ""primo arrivato, primo servito"" con un sostegno specifico per beneficiari quali le PMI e le mid-caps. Questa componente risponde alla progressiva e continua crescita del volume dei prestiti RSFF, che dipende dalla domanda. Nell'ambito della sezione PMI, sono sostenute le attività che mirano a migliorare l'accesso ai finanziamenti per le PMI e le altre entità promosse da attività innovative e/o di R&S. Ciò potrebbe includere il sostegno alla fase 3 dello strumento per le PMI subordinatamente al livello della domanda.(2)Un elemento mirato, concentrato sulle politiche e i settori chiave indispensabili per affrontare le sfide per la società, migliorare la leadership industriale e la competitività, promuovere la crescita sostenibile, inclusiva e a basse emissioni e fornire beni pubblici ambientali e di altro genere. Questo componente aiuta l'Unione ad affrontare gli aspetti relativi a ricerca e innovazione degli obiettivi strategici settoriali.";"";"H2020";"H2020-EU.2.2.";"";"";"2014-09-22 20:42:40";"664219" +"H2020-EU.2.2.1.";"fr";"H2020-EU.2.2.1.";"";"";"Le mécanisme d'emprunt permettant le financement par l'emprunt des activités de recherche et d'innovation: «Service de prêt et de garantie de l'Union pour la recherche et l'innovation»";"Debt facility";"

Le mécanisme d'emprunt permettant le financement par l'emprunt des activités de recherche et d'innovation: «Service de prêt et de garantie de l'Union pour la recherche et l'innovation»

L'objectif est d'améliorer l'accès au financement par l'emprunt – prêts, garanties, contre-garanties et autres formes de financement par l'emprunt et de financement à risque – pour les entités publiques et privées et les partenariats public-privé menant des activités de recherche et d'innovation qui, pour porter leurs fruits, nécessitent des investissements à risque. L'accent est mis sur le soutien aux activités de recherche et d'innovation disposant d'un potentiel élevé d'excellence.Étant donné que l'un des objectifs d'Horizon 2020 est de contribuer à combler le fossé entre, d'une part, les activités de recherche et de développement et, d'autre part, l'innovation, en favorisant la mise sur le marché de produits et de services nouveaux ou améliorés et en tenant compte du rôle déterminant de la phase de validation des concepts dans le processus de transfert de connaissances, des mécanismes nécessaires au financement des phases de validation des concepts peuvent être introduits afin de confirmer l'importance, la pertinence et l'impact futur en termes d'innovation des résultats des recherches ou d'inventions faisant l'objet du transfert.Il convient, dans la mesure du possible, de cibler comme bénéficiaires finaux les entités juridiques de toutes tailles capables de rembourser les fonds empruntés, et notamment les PME disposant d'un potentiel d'innovation et de croissance rapide, les entreprises de taille intermédiaire et les grandes entreprises, les universités et les institutions de recherche les universités et instituts de recherche, les infrastructures de recherche et infrastructures d'innovation, partenariats public-privé; et les entités ou projets à vocation spécifique.Le financement par le mécanisme d'emprunt repose sur deux grands axes:(1)la demande: les prêts et les garanties sont accordés selon le principe du «premier arrivé, premier servi», un soutien particulier étant apporté aux bénéficiaires tels que les PME et les entreprises de taille intermédiaire. Cet axe doit permettre de faire face à l'augmentation constante et continue du volume de prêts accordés par le mécanisme de financement avec partage des risques, qui repose sur la demande. Le volet «PME» soutient les activités visant à améliorer l'accès au financement des PME et d'autres entités axées sur la recherche et le développement et/ou l'innovation. Dans ce cadre, l'instrument dédié aux PME pourrait aussi apporter une aide à la phase 3, en fonction du niveau de la demande.(2)les priorités sont ciblés en priorité les politiques et les secteurs clés dont la contribution est fondamentale pour relever les défis de société, renforcer la primauté industrielle et la compétitivité, promouvoir une croissance durable, inclusive et à faibles émissions de carbone et assurer la fourniture de biens environnementaux et autres biens publics. Cet axe doit aider l'Union à prendre en charge les volets de ses objectifs de politique sectorielle ayant trait à la recherche et à l'innovation.";"";"H2020";"H2020-EU.2.2.";"";"";"2014-09-22 20:42:40";"664219" +"H2020-EU.2.2.1.";"es";"H2020-EU.2.2.1.";"";"";"Mecanismo de deuda que proporciona financiación de deuda para la I+i: ""Servicio de crédito y garantía de la Unión para la investigación y la innovación""";"Debt facility";"

Mecanismo de deuda que proporciona financiación de deuda para la I+i: ""Servicio de crédito y garantía de la Unión para la investigación y la innovación""

El objetivo es mejorar el acceso a la financiación de deuda -créditos, garantías, contragarantías y otras formas de financiación de deuda y riesgo- de las entidades públicas y privadas y las asociaciones público-privadas participantes en actividades de investigación e innovación que requieran inversiones arriesgadas para llegar a término. Se hará hincapié en apoyar la investigación y la innovación que tenga un elevado potencial de excelencia.Dado que uno de los objetivos de Horizonte 2020 es contribuir a estrechar la brecha existente entre la I+D y la innovación, favoreciendo la llegada al mercado de productos y servicios nuevos o mejorados, y teniendo en cuenta el papel crítico de la fase de prueba de concepto en el proceso de transferencia de conocimientos, se introducirán mecanismos que permitan la financiación de las fases de prueba de concepto, necesarias para validar la importancia, la pertinencia y el impacto innovador futuro de los resultados de la investigación o invención objeto de la transferencia.Los beneficiarios finales previstos serán potencialmente las entidades jurídicas de todos los tamaños que puedan pedir prestado dinero y reembolsarlo y, en particular, las PYME con potencial para innovar y crecer rápidamente; las empresas de capitalización media y las grandes empresas; las universidades y centros de investigación; las infraestructuras de investigación y las infraestructuras de innovación; las asociaciones público-privadas; y los vehículos o proyectos de propósito especial.La financiación del mecanismo de deuda tendrá dos componentes principales:(1)Uno orientado por la demanda, que facilitará créditos y garantías con arreglo al criterio del orden de llegada, con apoyo específico para beneficiarios como las PYME y las empresas de capitalización media. Este componente responderá al crecimiento constante y continuo observado en el volumen de préstamos del IFRC, que está impulsado por la demanda. En el apartado PYME, se prestará apoyo a actividades encaminadas a mejorar el acceso a la financiación para las PYME impulsadas por la I+D y/o la innovación. Ello podría incluir el apoyo en la fase 3 del instrumento consagrado a las PYME supeditado al nivel de demanda.(2)Otro focalizado, centrado en políticas y sectores fundamentales para afrontar los retos de la sociedad, potenciar el liderazgo industrial y la competitividad, apoyar el crecimiento inclusivo, sostenible y con baja emisión de carbono, y que proporciona bienes públicos medioambientales y de otro tipo. Este componente ayudará a la Unión a abordar los aspectos relacionados con la investigación y la innovación de los objetivos de la política sectorial.";"";"H2020";"H2020-EU.2.2.";"";"";"2014-09-22 20:42:40";"664219" diff --git a/dhp-workflows/dhp-aggregation/src/test/resources/eu/dnetlib/dhp/actionmanager/project/h2020_topic.xlsx b/dhp-workflows/dhp-aggregation/src/test/resources/eu/dnetlib/dhp/actionmanager/project/h2020_topic.xlsx new file mode 100644 index 0000000000000000000000000000000000000000..82ab1fe09e817d354c2f6253e39255300d3b9342 GIT binary patch literal 4679901 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�|X_z0dH9 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 z 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

-_u?O(m{UT& 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 JdBPmV(J% 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�!nCJ!ND34gF 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%0A%CRKfjE%>*db# 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

OZ_ivAo3U?&F(+U5!lLq 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≤Rrivwf^r`A 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

uOq&e2FqZ7m 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�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

o`}#dRF?1uobRt38#w$n&nmD#6Cgpyi1oB(Ld) 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�Z_ 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%0DSxXR%Fz?{zj3DzXLT0k{nk%W!SJ&q2ta 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

M`Odo#4$SUaLHPQd01^4H3|%=sb)7O1}sO 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

  • Ou{RnpPyY%Aw8YU|A{bXR(5-aa8z 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 z z9cyUQZPNXlMpB8r>rdCB{#eY7x2cqR8f|c%FbiPCG9|l9o>1+H+Xeo4V49=lGL~91 zt7~ayr%NHIn_DCR-i*y^UUu-G8icyAnC0mNMVY(PP(p@d4j^X;I*5{l^x8O23obU# zGPO#1X(;i}J(pmh!jFilQrNc+E=M`}0F=gzsqlJ*v4}E^jHJBJ@Fhyte&}pN zrEGSGx*$gq5jMWcSWeH>gJ7$VnxK~U%lVYuV0TqLAVZKRIp8> z;>JB%71X)v^X))or!D~4Mm`DIu1if57Y6%k2Et&v#a80i_}NY=thQ3v?W&9<#7D;5 z7vA**zv|;-SiJZh2RbU}>N@gbIt#9t9MMMP8a&SxMYNB0A8B(b{rY#@NtT@~m*wZu zu;>ZdW{1AyaR1;LHaVrHXp2_+dz%%NdIf`3Xz_zc^-SBfXr8!x((Jk=;-Ut-Dt ze4y{ML41m7HqIIenxDS`jC6BY$&RMUtkxXcWm z9F>m$ho)k~xQkI__R;2tGV&7c*(f9+-o{XB)L$IwH{k-%Ln-!<5nu9G?rMtv4j(ld zj-(!TDGrgGLgz7je;KwX?tc!9gb|)yH04-8{d8iqu_5RD;v_piAEDBLw2aFWjFhB~ zQKWiyC99{)@*UY9Tvnm#d2)#DqFl;}ButpW7zY}HROT!rkU;nt?fof{NL!GFkeeI| zQF+i+#3w9~*~HO|jJCy9TQ^sVcpYZ4?(UedF~nGeYskKd6=%2Mrh^!eySD35@`Z7B zKBo<3o7W3{-Sd#?woa^A=N>OQ7UH_8KT+1Id&QwknH|**1#1*ymMvDI=(;51?9581 zl49s7ta)NgKw#{1L|x)I**l-V4?OguuWE8Q|a&H-1ZeqgG zipzII7FOj_l8{m*s=*_KUI7rX0I~*NJnNk*T=O&g#Ln0LsKp;CA#~*qUIz0iv>rrN zK@@s|Z;m9gaumwUxittpX%o!f;qIYL#>L5~Q=yK|mpI!UKVoPkfaeN_rjlF1JK=1* zeuxwIsb6Ec2Wsyru=J4)X8_eqYy}PCZ@wndmws9Mh}vQB70qw%mfr>G^3M+AfaKjH z9_y=wBAVcpwk}AUL}jT9fB#TU-Dta`hq9vtj07>I zqDZOy??oK?t4TvSBRotR`l2M>67G+mpi#)@T}J`#mF z<=%>BWqDQf@Gr=}O7(770i!9&h9Z+LKi&#}t3X5MZ-{&RYpzJ8;NVRk&P{Xn; zincXIGND{lL6ixst5AcOCr!Lg6y~^#iKgtNWQ;SpyzbSx0CtU3o;HF`P~k)31IbYg zoAHmcXP*khvojo_iq?F9hPBsqQ`TT-xFR7r*2OX!->c0OMFzHj5mPK6-Q{(SnAO7D zFgk4|`Y=RoS84&AVBt$5L90?Z@~VapK=_L@5iR&_n6Cld~5>pnCw2p5`Y zW8vUZ6Tl;V{KuuB#Xl0&4)^TpZ9BaGd=;{k5rL%giBu&o=>idqpo^6c*@Vg=?8eoW zspV2KQRWrbpyIqLZz{>bDtEy{b`U+=nnDU;#F6*N(7!H;4!Csl`U(^r^9>Te)v{~i z#A0&$s0sCU5qOunfKX;>coT%dj%he}dy1p0mpp)E_k=H6UoU2n!0O>ww~Hbp zA+}0txM;dk^p9(qq%Wp_c+l;csybK^5+tHm=+KJFK3>_bF*Lq|zD zbXLrm_(7uAgllLdK3v<0*TXA(_0>38& z$FcPmMe6vRqq*Tim<$LOrr9yeLKH|vR7-8wiL6(#DB}q3g|a{P(s*fPRuDpl&}^b) zEL%BPudJ22BfmBd+m#2%s64m6qjqw%-dxjdBPmd&o$@S~Tb3V^O{rdOrA!-Ya>HvD zo+fT%hQb539kKw4CLl|8c*BveZ5^}wpbE3 z<<#4?m>z6O5KK&5bCr0R)L9XSp1R7t`BqA|&D!dAaUj!od9DYZH2Ak*(rJv2I5leK zZ-O{CLK^NlQvhT1?;Tr$$VSC)hof>sc9E^vM=f15P$y}5qwhsR@I1u@3Wp182`F0L zis4~L@B)xw!ap$UVAVzck8D>LMs2O!J>D(0RPEA4#c)N9xfKto+j{@oqr+!Mj|a+o z2j4t<|+a`bQtn2a;`*JuAj3Nwyfk~a(x;?O_$9WE=6p+_s^zKO>wv6 z1S*0bx#SRhz_K|ImWg>WDb;{ToFdVjVD-Rb3=11~Qhc_L(pyMja^R{oWgn11vCf`p z2{;G*Yx%~!0$s^%BxUUUA!?cxreVr-5$qn&nWfopRp)|4q!xL=ptDT#^5Hv<1%XzV z&krOEkZ`?gDFG=f#2i?ZmJaqQtceurbn}V6pTf&^`&BMD4Jfom-Db=%3f*+_5 zaO;#w!LZN~X{>6enGBM^D*Um>ThEEOSWbvt0_1uMPD)1Jd>DUDl+Qt54&sScu=3hR ziv!EDizRVsdl_QaRmTMV#dXCpyus^CJn=GG!+;Fu{D+J4v^ZpK zj{3f|$TphnveZ1=obj|=f#9XHj?^+xmn?h7MGPW}c2%hwk0v`3zVcz4%dW6mT2-S) zk8rbal@F*_al%#;Rc=6eILLb&Q#E2K_+H<%l(@;3@|KEFyQc@ppMsfMk}726gK%SlyC=Dw0Y#nzF~Jt+c^v69nHOnMw15F#SfM7PnQnhS7MU z_Rmva&wQ_}ufp^BI4RINYNu)GhXGFal8%}1Z1THZEg|9BM9jR^It|V7P z2N!dVt%~5&?%)`01 zLE!{M!3vRxy4a|1$s)H|TkHAnXgUQMW_;1WysN*jSiu+cmy0N2`qtDsvz_0)xOh9V z?Z;b}@F2a}6Nq!gis>EG8O6zTrLvLe?_y_@328qwX*XRH;a3A*Gb&e#(acWf!NjJu zLBwwA>>8IV%}otCHu7ZzkbH68hxWWa5geyN*_>_aOSj%dV*rg4X>Pf03>-eRyXnnn zMRD#{IvC|l?~n>maV=u3SU!++g4mmv#iZiS;YP+vQGjVEI8!^X&Rz>YvvP#mhP6>F zss)#og!c=KEIzPFrY0SRN4rYB?&`$Oq3^CJ$;>h5OW%2NGF3iJmIA|x3u^qSZYaJG zMcTA<7*-)Vt(d91gf0!o!SXbuXrnHk@`Q>eb$nOfqfraVn>J}_TRX$qDRioB{NzG| zHZ9rO2)FxVKo6G=@*7U@A7$P`Bf;nCD2grzA9*94w)=rk3~X1U$|2#K?xN&#jX{$w zjN~Fb&(wKeG#+ilvC3X=_uR4J=GmOWqG>7~QM5)S<$CS*_LJy*x+u6QbTECWAje#s z`}BIJl!9gfYiu0yhuPtoHpOhcZG_0dw$8?(QR1k-SP3?@<8epcB>x@bK~B#yq9{>p zE9<~@ce!U=AUPt`*4gG(*0em3@AlP{!C)J$$SSoq;0aMFf^q@aQrqHR0`iFRJf^R> z9k1(g_>UugwYXoHVcBuJKgM-{FXED1a38k@<>mIc*J_0E6T*t&kU}Ygws3Nb;q=+s zQeMwGJFR{y7Boq*xpk{eF|Y)mLXgz~L7Xr}CZ%3u6f=%#$v6{^L!IR8s2kKe=Lsld z4*0s@4n%AxZkgm=dyPV2;}L&+h5^8m>^G^X=|&8*oztclc6qMefhtmPzMpF8a#33I z-Rvb1RcRk{80>Ik=@&yK)g71i8U#ANB6EY z(Gk<(#JOEdh>u#8)Kk%s-N~x>elO?VB@)>2DCh(XMt@+8DM?zVm-E?@)?7=ks~m>i z^rmDquIOdd;tLamJ0l_#C}AgzXK>8e>3p^8B=|V{G3XDWnwxt4hGyLDuqTh00wcrKGz2cuV5*-lWX$T1W0lc zEK2s6_~$NURln0v@5Dwl);Yr*b%sTl75igDftkTUf+337UBjfkwpQ`>To?9n2L=YHb{GojrY0SgoqTn!M3&X>NU+ldK z|95tpq(rF}+}_lyg!x~8nfsc{CqjcVg9fbtst7alAfg7&R&YA2>LJDp%|A*?^8s%o z7lDQiQ7NSPEYf^yC&j9aRSJ4zOekTxK+DgD&o<&hTn7r_1#(1TwR`e#`fDGB^_3F! zu4Nint?ybC1hltDqJ0H^Yr|^TyqTF%VICn4-qewGNNwxH;{9(mtxk5_(tQc)FjWvv zp{1$-PC&80Wx^F&4#>%crwmALE#REkqRLq7t0gLT?@aJ8@9zoV41MpBW9Fi*2&^mB zmNfWJGFg_cQGuD{5bhoSA%I^n1qK5t;$ca>wrmx{@UPh0mNs+KZom`@N|`GxnuO@P zx!oS%m)dd1tUra*Vw2T6>cvSvgnQ z!aEi?y$n~PArY~PQ1BXxnRJRod)7TupoW>fRvW}_qqNm)kp6Q%k1>GfR2V8HNnQ>;i3&!-buO-YPfta9> z6K@MK9M~-A?4=K>1f3y6;>eskEw5hcq@)5tq0Zr*UJ;|>Nb;BNtbvWy{p#f%rFyP` zcVrAY)pzb-TDlKkncf7c_=5!aI{|XFVzMz&zkb^W1eLp@3$giln+wEelSfg z!$|KrfiI4h#KzKi`XU$aNamp#o1sVvf#B6pCX5oJi$y)Pt~vQU-i3mjd5jTF2j1~E zcm_Tgt9EVe8+1ID4Fk}IWsA2KYj`86?D)X+bgm~|DIzl@))Gh3O7_oYHRT5Wt!7t@ z?P_B!MmVde-<~r*kvus%t1M(B2Qbq%vo;sCZ*&{k8KMCmDC(2f^s zj;2X6$Ce$mT(W(xcRJSZb=XqCOpM*#iuOI=7+iO#YZT#PaCI5Bk-GPtB*C=Q(f+eRwcf{14q&py^XC&! z&STIGCfo4+`9$?P{m8C>R{o`O&lM=75w^p_&|@f_WP_+M5g4_wf|R~kP^ndTm7-w9 z=e?UWfJjthceQ4?mx{3ijwbcaf63I4Xe z6io<>;Hjz@Aw*7zH786)gQghK*TZEvRg=V&K#_8$N1m4nWO+Qw%{qb)_*jdFa7;)G ziM`~a@$yX>N$C`FMLt2pmYT-6O&Kk9)rhsU6{3TTw4U)pQD+2zXN5KrS_|h#_e^&S7f0T@nW)TaO$d<%R~R7|x8X%-!2$IoHA;#aR@BcJMBgd<1AMLbQ~^ zY(|Q~+cf>$Wq(yno6R-Z%HpaH8+Czr1cm(@<6xzZEUfn1;Qvb4qiTLTv}BNHo0Oy6 z88u~zAzNZhu!O&&Vaz@%(OGIKkJBpt$QxN~Fx@9J(R(eJ#*nOdq}&DuCJYfweIE)< z%i!eQ>kBtoS{9{si?4HMEde;SOz5YA9oamN0_wGKAUxiT^Ahg;`OO7rWotTp^T#7~ zDbtPE)fbT!gGv#tUO^5^Axy6`tfNVyxP_lIO&08CZ~b|PU0sLpWyuM|mTHS(wrSY)OcScQFvy|+AF16< z=AQi%Q@ZDBkZ3A$IqPcEP)j6P&0HpE+Sm7ycZN}kNU_ngGV@s!6;*RMVdP<$sOGR*W$Fg^n z=gwilR^L-gn5XZ3t905z9wW>tD|BMT#@OhnVd+?TESiDnfF{0YdKuUY@_=W8*cqHc z+DqKk-SMn+WegSk!i}(;a8*9Sz<|6Q^FJbTXg7P_WtVTu0e1tp%!9WZ4%$`OS^q9g z$`+jR>`r_tb=nMgH7%tH)BgdAaoms4N*R|$gUnMy<5jw�QOb@TJ-S7wg~>k^Y29)QemGS63rCN@T=ZBV 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 P524DqCvxW{8* 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

    (V4Hb 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[G!x8p)8lX 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�h`-Qq3rO^xzk_0H^S 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%0Dj){)Svu0`5@gEYg7h#{~Q?E7(R_a_0 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 DZJdT7umC?y{qh87#f}F6$TzR5U*5wgzO% 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%0ApJF6$-fJBAJM25nNJ-K#+Y?q-hIB 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೰~ojS`G2Jc>MwfL0zm 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 z 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⩔}>#5y4s23A(WB79Os%7 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 z zC8af<6Xmk!azI$lM_(QuWtwp`4e7=*Cd}iB9JrC><0Jp6kM0DgnZ`g^pzq=wE~*fn-Dou4RN94_ZuY2jt))P z+DPHJgK|x1X$CF)Sfz+(a_HihiNbTE4g5BM2~V-kYqBUc=B8T@-1absBTEne&CqleO68m zy!ncv$142FSw6)$#G}lLZ|GALR(OquS1OU58R}W1I3DYV;r*sA+}Q`9u`5zd0RUpTF+uIz}cZd?9j`yZtPZ zVGf(vK0snD8s4hQB0jX?m>3r)ZKUA~3+qx6_l|{n5NF2y^-SUW1ayfl4vh9$tR=bgdekxq2JyMI} zr!~lTF(6@x3dWxO2yGB_0V)qviSD{l_`R;C;hewC>&k?MXw-^X%q|c=k%-6VU~>kzQxduucEWs1S%PSq zBB2A*kb$}m{ri9$l`d1mY}x30l<8Ku<0J;vjR)vjxPqxp11q3JMe;>2D{B)MqA9_c z@$(A!QJ`Ub8lkBcAz&Eyo2|6r0yFG*{S_PTaB(RSs6_ar>pq?pu8d+Ui$`ojWl>q* z;p;S!8cMy|Sc`-0V;s9itwE|rEQ2jC#z#6dF=5mi~k+Lm>twDBEXHPetO3#u_ zvjLLGSkxLPA9EC7kk+zLt~F2=pYUSa2-h}KI=eKW#+ZdRrp8INi_5ionk!n-kS=Z^ zPr|uNB?lQ>@dxpeRz9*cAiDdXz(HS zkDfe@-#@bN?`N+|5v=5im7_!R6a0|8j-(Li#AD$!C-qJTL4xeo&!V$Qb73Qo)FOj$ zxc8nGhgz_eY+O!CXio!8cr_+U*3Ip^5%rb_vG-&vypY`-hH?K=1)Wg_0|5-@mKqYNBiMvp3wiEzy0RHxBLsQ{h(9U z5g|2OKn!R=v?^RLZEbEj(Sl2!lh9mwxW9BE|7dt7@eS z5xRZORZ`V%PBm6H4SQvFaz8tDNjE-QseI&n;?jN*q$^<*nVymM**~E0gYj7?2+w?AgCi)?0@U$ ztt@0$4?moeVvc|o{)~Az6tT*zr{@vhmiCN0#3VSed9>OJs;=^{<`ca&uqeStIt{twP zwwII!);`f7ViYuv!OeNvJIS(USN~DG{14Fze0!V}1-{M>_Ya>u$v)nOPY&M5pPSR? zeowQ(?Ey(aYp=VU)eARx`Yih=5+6ItVtzHtfrKX1sw zqdnVyk^NIkW)tdf*e-6M=)>&k;o-0U<9{7supUUk^LL+TlQ04YcLzjOnmv1#{m1`( z)_A@hj#evG|F)vE{6{otlI+K-w#2n;g_u}ozP(^i3UVNCu=ObjW-@Oh0fLM*UJypu zTLw=x^z5rcJU7lM%iSQNch$0Bz&GFy{+zdaq-OGUcJ%DU{xcNy|Gd$n)MUOP^1fxe zs&Ya=PaVuLhaE>p(3`}Ur01rRQI>BUA1B{fXJ7udN8DvuT!KuTG)Z^=W%_^SYXGi<* zk2|Gl9{KocRSebyP}K;07L02}kF%i?EFb8oy@$yuSmSSw5D}SjK};z}VjV$-aw(-+ zkqgr3t(bUj2kz&UQ5!FlN0U?zJ4pV4hy#p^BDHXt?0&v-aaWE@^bO`j=N_Afi`~y& zZ*KEdeC%vXtm`o^FES(ed1}m-x)$4&}b-aw3LM$|?(RhDE z5-jQNo?9A+l2PcoJGi6S!521!8xO83rY?-+A`d}XMdJav7G7evEd9NuWic-(5b68C%4#e7**j#1O{i$Xoo`%3$?ws`K{mCZ zhn#<`zpa*KR!+uL1_ITB8x zw>04M*iBgU-zWKMMZFGm3!elmXr(E3rj0wTlNRKz^%^&T2W!$JO@e32Ib^~ZQ{|jV98X3-ExwN9`3xXTQepmMHFGBsBy29 zVp1nzg=(;lHP0krS~gKk?JVkelX$#=ZG!r1sW5{QkGEp#3;|wL?ic%P7!Krgl1yID zJWBl?FLmC5$>FWsUD#Uaal$4dl>`+_yaOQQE?-gn-v_-tG>H?YM_K @5iwrtC8P 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

    |X$itCl}qmTEN*Zx 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

    bJT51;MRub*t;v%Nk$$Y0*P&iB9WZ|{5f&w#@b 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

  • As a use case, it processes data from a collaborative problem solving + activity named JUSThink [1, 2], i.e. + JUSThink Dialogue and Actions Corpus data set that is available from the + Zenodo Repository, DOI: 10.5281/zenodo.4627104, and reproduces the results and figures + in [3].