From 15e1034370fb970dc6a27e6f8fed5b29be1994ea Mon Sep 17 00:00:00 2001 From: Oliver Bertuch Date: Thu, 26 Aug 2021 15:19:02 +0200 Subject: [PATCH] feat(index): make SolrStaticField + SolrDynamicField buildable from SolrJ field Map #5989 --- .../search/schema/SolrDynamicField.java | 20 +++++++++++++++++++ .../search/schema/SolrStaticField.java | 20 +++++++++++++++++++ 2 files changed, 40 insertions(+) diff --git a/src/main/java/edu/harvard/iq/dataverse/search/schema/SolrDynamicField.java b/src/main/java/edu/harvard/iq/dataverse/search/schema/SolrDynamicField.java index 28a0b57c112..e9472ec6a87 100644 --- a/src/main/java/edu/harvard/iq/dataverse/search/schema/SolrDynamicField.java +++ b/src/main/java/edu/harvard/iq/dataverse/search/schema/SolrDynamicField.java @@ -51,4 +51,24 @@ boolean isValidName(String name) { if (name == null) return false; return validNameMatcher.reset(name).matches(); } + + /** + * Create a modelled Solr Field from a raw schema response, containing the attributes. + * + * @param rawMap The attributes map as given by {@ SchemaResponse} + * @return An instance of the Solr Field ready for our internal usage. + * @throws IllegalArgumentException if any attributes are not known/invalid or the type has not been implemented by us + */ + public static SolrDynamicField build(Map rawMap) throws IllegalArgumentException { + Map properties = SolrField.convertToProperties(rawMap); + + String name = properties.remove(SolrFieldProperty.NAME); + String typeName = properties.remove(SolrFieldProperty.TYPE); + SolrFieldType type = SolrFieldType.ALL.stream() + .filter(t -> t.getName().equals(typeName)) + .findFirst() + .orElseThrow(() -> new IllegalArgumentException("Given type \""+typeName+"\" from Solr not implemented")); + + return new SolrDynamicField(name, type, properties); + } } diff --git a/src/main/java/edu/harvard/iq/dataverse/search/schema/SolrStaticField.java b/src/main/java/edu/harvard/iq/dataverse/search/schema/SolrStaticField.java index dfb327bb967..e8567f80235 100644 --- a/src/main/java/edu/harvard/iq/dataverse/search/schema/SolrStaticField.java +++ b/src/main/java/edu/harvard/iq/dataverse/search/schema/SolrStaticField.java @@ -33,4 +33,24 @@ public SolrStaticField(String nameProperty, SolrFieldType type, Map rawMap) throws IllegalArgumentException { + Map properties = SolrField.convertToProperties(rawMap); + + String name = properties.remove(SolrFieldProperty.NAME); + String typeName = properties.remove(SolrFieldProperty.TYPE); + SolrFieldType type = SolrFieldType.ALL.stream() + .filter(t -> t.getName().equals(typeName)) + .findFirst() + .orElseThrow(() -> new IllegalArgumentException("Given type \""+typeName+"\" from Solr not implemented")); + + return new SolrStaticField(name, type, properties); + } }