You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@solr.apache.org by no...@apache.org on 2021/04/29 13:21:11 UTC
[solr] branch jira/solr_15337 updated: refactored
This is an automated email from the ASF dual-hosted git repository.
noble pushed a commit to branch jira/solr_15337
in repository https://gitbox.apache.org/repos/asf/solr.git
The following commit(s) were added to refs/heads/jira/solr_15337 by this push:
new 1ce5414 refactored
1ce5414 is described below
commit 1ce541429591cba4e615effded06345d12d3e4a1
Author: Noble Paul <no...@gmail.com>
AuthorDate: Thu Apr 29 23:20:54 2021 +1000
refactored
---
.../org/apache/solr/core/OverlaidConfigNode.java | 92 ++++++++++++++++++++++
.../src/java/org/apache/solr/core/SolrConfig.java | 80 +------------------
.../java/org/apache/solr/common/util/DOMUtil.java | 4 +-
3 files changed, 96 insertions(+), 80 deletions(-)
diff --git a/solr/core/src/java/org/apache/solr/core/OverlaidConfigNode.java b/solr/core/src/java/org/apache/solr/core/OverlaidConfigNode.java
new file mode 100644
index 0000000..7770789
--- /dev/null
+++ b/solr/core/src/java/org/apache/solr/core/OverlaidConfigNode.java
@@ -0,0 +1,92 @@
+package org.apache.solr.core;
+
+import java.util.ArrayList;
+import java.util.List;
+import java.util.function.Function;
+import java.util.function.Predicate;
+
+import org.apache.solr.cluster.api.SimpleMap;
+import org.apache.solr.common.ConfigNode;
+
+/**A config node impl which has an overlay
+ *
+ */
+class OverlaidConfigNode implements ConfigNode {
+
+ private final ConfigOverlay overlay;
+ private final String _name;
+ private final ConfigNode delegate;
+ private final OverlaidConfigNode parent;
+
+ OverlaidConfigNode(ConfigOverlay overlay, String name, OverlaidConfigNode parent, ConfigNode delegate) {
+ this.overlay = overlay;
+ this._name = name;
+ this.delegate = delegate;
+ this.parent = parent;
+ }
+
+ private List<String> path(List<String> path) {
+ if(path== null) path = new ArrayList<>(5);
+ try {
+ if (parent != null) return parent.path(path);
+ } finally {
+ path.add(_name);
+ }
+ return path;
+ }
+
+ @Override
+ public ConfigNode get(String name) {
+ return wrap(delegate.get(name), name);
+ }
+
+ private ConfigNode wrap(ConfigNode n, String name) {
+ return new OverlaidConfigNode(overlay, name,this, n);
+ }
+
+ @Override
+ public ConfigNode get(String name, Predicate<ConfigNode> test) {
+ return wrap(delegate.get(name, test), name);
+ }
+
+ @Override
+ public String txt() {
+ return overlayText(delegate.txt(), null);
+ }
+
+ @Override
+ public ConfigNode get(String name, int idx) {
+ return wrap(delegate.get(name, idx), name);
+ }
+
+ @Override
+ public String name() {
+ return delegate.name();
+ }
+ @Override
+ public SimpleMap<String> attributes() {
+ return delegate.attributes();
+ }
+
+ @Override
+ public boolean exists() {
+ return delegate.exists();
+ }
+
+ @Override
+ public String attr(String name) {
+ return overlayText(delegate.attr(name),name);
+ }
+
+ private String overlayText(String def, String appendToPath) {
+ List<String> path = path(null);
+ if(appendToPath !=null) path.add(appendToPath);
+ Object val = overlay.getXPathProperty(path);
+ return val ==null? def: val.toString();
+ }
+
+ @Override
+ public void forEachChild(Function<ConfigNode, Boolean> fun) {
+ delegate.forEachChild(fun);
+ }
+}
diff --git a/solr/core/src/java/org/apache/solr/core/SolrConfig.java b/solr/core/src/java/org/apache/solr/core/SolrConfig.java
index 9fafda4..9231286 100644
--- a/solr/core/src/java/org/apache/solr/core/SolrConfig.java
+++ b/solr/core/src/java/org/apache/solr/core/SolrConfig.java
@@ -54,7 +54,6 @@ import org.apache.lucene.util.Version;
import org.apache.solr.client.solrj.io.stream.expr.Expressible;
import org.apache.solr.cloud.RecoveryStrategy;
import org.apache.solr.cloud.ZkSolrResourceLoader;
-import org.apache.solr.cluster.api.SimpleMap;
import org.apache.solr.common.ConfigNode;
import org.apache.solr.common.MapSerializable;
import org.apache.solr.common.SolrException;
@@ -1051,87 +1050,10 @@ public class SolrConfig implements MapSerializable {
//there is no overlay
return root.get(name);
}
- return new OverlaidConfigNode(name, null,root.get(name));
+ return new OverlaidConfigNode(overlay, name, null,root.get(name));
}
public ConfigNode get(String name, Predicate<ConfigNode> test) {
return root.get(name, test);
}
- private class OverlaidConfigNode implements ConfigNode {
-
- private final String _name;
- private final ConfigNode delegate;
- private final OverlaidConfigNode parent;
-
- private OverlaidConfigNode(String name, OverlaidConfigNode parent, ConfigNode delegate) {
- this._name = name;
- this.delegate = delegate;
- this.parent = parent;
- }
-
- private List<String> path(List<String> path) {
- if(path== null) path = new ArrayList<>(5);
- try {
- if (parent != null) return parent.path(path);
- } finally {
- path.add(_name);
- }
- return path;
- }
-
- @Override
- public ConfigNode get(String name) {
- return wrap(delegate.get(name), name);
- }
-
- private ConfigNode wrap(ConfigNode n, String name) {
- return new OverlaidConfigNode(name,this, n);
- }
-
- @Override
- public ConfigNode get(String name, Predicate<ConfigNode> test) {
- return wrap(delegate.get(name, test), name);
- }
-
- @Override
- public String txt() {
- return overlayText(delegate.txt(), null);
- }
-
- @Override
- public ConfigNode get(String name, int idx) {
- return wrap(delegate.get(name, idx), name);
- }
-
- @Override
- public String name() {
- return delegate.name();
- }
- @Override
- public SimpleMap<String> attributes() {
- return delegate.attributes();
- }
-
- @Override
- public boolean exists() {
- return delegate.exists();
- }
-
- @Override
- public String attr(String name) {
- return overlayText(delegate.attr(name),name);
- }
-
- private String overlayText(String def, String appendToPath) {
- List<String> path = path(null);
- if(appendToPath !=null) path.add(appendToPath);
- Object val = overlay.getXPathProperty(path);
- return val ==null? def: val.toString();
- }
-
- @Override
- public void forEachChild(Function<ConfigNode, Boolean> fun) {
- delegate.forEachChild(fun);
- }
- }
}
diff --git a/solr/solrj/src/java/org/apache/solr/common/util/DOMUtil.java b/solr/solrj/src/java/org/apache/solr/common/util/DOMUtil.java
index dc1e22f..1fe7df2 100644
--- a/solr/solrj/src/java/org/apache/solr/common/util/DOMUtil.java
+++ b/solr/solrj/src/java/org/apache/solr/common/util/DOMUtil.java
@@ -17,7 +17,9 @@
package org.apache.solr.common.util;
import java.util.ArrayList;
+import java.util.Arrays;
import java.util.HashMap;
+import java.util.HashSet;
import java.util.Iterator;
import java.util.List;
import java.util.Map;
@@ -39,7 +41,7 @@ public class DOMUtil {
public static final String XML_RESERVED_PREFIX = "xml";
- public static final Set<String> NL_TAGS = Set.of("str", "int","long","float","double","bool");
+ public static final Set<String> NL_TAGS = new HashSet<>(Arrays.asList("str", "int", "long", "float", "double", "bool", "null"));
public static Map<String,String> toMap(NamedNodeMap attrs) {