@@ -67,7 +67,7 @@ protected UpdateByQueryRequest buildRequest(RestRequest request) throws IOExcept
67
67
68
68
Map <String , Consumer <Object >> consumers = new HashMap <>();
69
69
consumers .put ("conflicts" , o -> internal .setConflicts ((String ) o ));
70
- consumers .put ("script" , o -> internal .setScript (parseScript (( Map < String , Object >) o )));
70
+ consumers .put ("script" , o -> internal .setScript (parseScript (o )));
71
71
72
72
parseInternalRequest (internal , request , consumers );
73
73
@@ -76,49 +76,58 @@ protected UpdateByQueryRequest buildRequest(RestRequest request) throws IOExcept
76
76
}
77
77
78
78
@ SuppressWarnings ("unchecked" )
79
- private static Script parseScript (Map <String , Object > config ) {
80
- String script = null ;
81
- ScriptType type = null ;
82
- String lang = DEFAULT_SCRIPT_LANG ;
83
- Map <String , Object > params = Collections .emptyMap ();
84
- for (Iterator <Map .Entry <String , Object >> itr = config .entrySet ().iterator (); itr .hasNext ();) {
85
- Map .Entry <String , Object > entry = itr .next ();
86
- String parameterName = entry .getKey ();
87
- Object parameterValue = entry .getValue ();
88
- if (Script .LANG_PARSE_FIELD .match (parameterName )) {
89
- if (parameterValue instanceof String || parameterValue == null ) {
90
- lang = (String ) parameterValue ;
91
- } else {
92
- throw new ElasticsearchParseException ("Value must be of type String: [" + parameterName + "]" );
93
- }
94
- } else if (Script .PARAMS_PARSE_FIELD .match (parameterName )) {
95
- if (parameterValue instanceof Map || parameterValue == null ) {
96
- params = (Map <String , Object >) parameterValue ;
97
- } else {
98
- throw new ElasticsearchParseException ("Value must be of type String: [" + parameterName + "]" );
99
- }
100
- } else if (ScriptType .INLINE .getParseField ().match (parameterName )) {
101
- if (parameterValue instanceof String || parameterValue == null ) {
102
- script = (String ) parameterValue ;
103
- type = ScriptType .INLINE ;
104
- } else {
105
- throw new ElasticsearchParseException ("Value must be of type String: [" + parameterName + "]" );
106
- }
107
- } else if (ScriptType .STORED .getParseField ().match (parameterName )) {
108
- if (parameterValue instanceof String || parameterValue == null ) {
109
- script = (String ) parameterValue ;
110
- type = ScriptType .STORED ;
111
- } else {
112
- throw new ElasticsearchParseException ("Value must be of type String: [" + parameterName + "]" );
79
+ private static Script parseScript (Object config ) {
80
+ assert config != null : "Script should not be null" ;
81
+
82
+ if (config instanceof String ) {
83
+ return new Script ((String ) config );
84
+ } else if (config instanceof Map ) {
85
+ Map <String ,Object > configMap = (Map <String , Object >) config ;
86
+ String script = null ;
87
+ ScriptType type = null ;
88
+ String lang = DEFAULT_SCRIPT_LANG ;
89
+ Map <String , Object > params = Collections .emptyMap ();
90
+ for (Iterator <Map .Entry <String , Object >> itr = configMap .entrySet ().iterator (); itr .hasNext ();) {
91
+ Map .Entry <String , Object > entry = itr .next ();
92
+ String parameterName = entry .getKey ();
93
+ Object parameterValue = entry .getValue ();
94
+ if (Script .LANG_PARSE_FIELD .match (parameterName )) {
95
+ if (parameterValue instanceof String || parameterValue == null ) {
96
+ lang = (String ) parameterValue ;
97
+ } else {
98
+ throw new ElasticsearchParseException ("Value must be of type String: [" + parameterName + "]" );
99
+ }
100
+ } else if (Script .PARAMS_PARSE_FIELD .match (parameterName )) {
101
+ if (parameterValue instanceof Map || parameterValue == null ) {
102
+ params = (Map <String , Object >) parameterValue ;
103
+ } else {
104
+ throw new ElasticsearchParseException ("Value must be of type String: [" + parameterName + "]" );
105
+ }
106
+ } else if (ScriptType .INLINE .getParseField ().match (parameterName )) {
107
+ if (parameterValue instanceof String || parameterValue == null ) {
108
+ script = (String ) parameterValue ;
109
+ type = ScriptType .INLINE ;
110
+ } else {
111
+ throw new ElasticsearchParseException ("Value must be of type String: [" + parameterName + "]" );
112
+ }
113
+ } else if (ScriptType .STORED .getParseField ().match (parameterName )) {
114
+ if (parameterValue instanceof String || parameterValue == null ) {
115
+ script = (String ) parameterValue ;
116
+ type = ScriptType .STORED ;
117
+ } else {
118
+ throw new ElasticsearchParseException ("Value must be of type String: [" + parameterName + "]" );
119
+ }
113
120
}
114
121
}
115
- }
116
- if (script == null ) {
117
- throw new ElasticsearchParseException ("expected one of [{}] or [{}] fields, but found none" ,
122
+ if (script == null ) {
123
+ throw new ElasticsearchParseException ("expected one of [{}] or [{}] fields, but found none" ,
118
124
ScriptType .INLINE .getParseField ().getPreferredName (), ScriptType .STORED .getParseField ().getPreferredName ());
119
- }
120
- assert type != null : "if script is not null, type should definitely not be null" ;
125
+ }
126
+ assert type != null : "if script is not null, type should definitely not be null" ;
121
127
122
- return new Script (type , lang , script , params );
128
+ return new Script (type , lang , script , params );
129
+ } else {
130
+ throw new IllegalArgumentException ("Script value should be a String or a Map" );
131
+ }
123
132
}
124
133
}
0 commit comments