2 * ============LICENSE_START=======================================================
3 * ONAP : ccsdk features
4 * ================================================================================
5 * Copyright (C) 2019 highstreet technologies GmbH Intellectual Property.
7 * ================================================================================
8 * Licensed under the Apache License, Version 2.0 (the "License");
9 * you may not use this file except in compliance with the License.
10 * You may obtain a copy of the License at
12 * http://www.apache.org/licenses/LICENSE-2.0
14 * Unless required by applicable law or agreed to in writing, software
15 * distributed under the License is distributed on an "AS IS" BASIS,
16 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
17 * See the License for the specific language governing permissions and
18 * limitations under the License.
19 * ============LICENSE_END=========================================================
22 package org.onap.ccsdk.features.sdnr.wt.common.database.requests;
24 import java.util.ArrayList;
25 import java.util.List;
27 import org.json.JSONArray;
28 import org.json.JSONObject;
29 import org.slf4j.Logger;
30 import org.slf4j.LoggerFactory;
33 public class UpdateRequest extends BaseRequest {
35 private static final Logger LOG = LoggerFactory.getLogger(UpdateRequest.class);
36 private JSONObject params;
41 public UpdateRequest(String alias, String dataType, String esId) {
42 this(alias, dataType, esId, BaseRequest.DEFAULT_RETRIES);
45 public UpdateRequest(String alias, String dataType, String esId, boolean refresh) {
46 this(alias, dataType, esId, BaseRequest.DEFAULT_RETRIES, refresh);
49 public UpdateRequest(String alias, String dataType, String esId, int retries) {
50 this(alias, dataType, esId, retries, false);
53 public UpdateRequest(String alias, String dataType, String esId, int retries, boolean refresh) {
54 this(String.format("/%s/%s/%s/_update", alias, dataType, BaseRequest.urlEncodeValue(esId)), refresh);
57 this.retries = retries;
60 public UpdateRequest(String uri, boolean refresh) {
61 super("POST", uri, refresh, BaseRequest.DEFAULT_RETRIES);
69 private UpdateRequest withParam(String key, JSONObject p) {
70 if (this.params == null) {
71 this.params = new JSONObject();
73 this.params.put(key, p);
77 private UpdateRequest withParam(String key, JSONArray p) {
78 if (this.params == null) {
79 this.params = new JSONObject();
81 this.params.put(key, p);
85 public void source(JSONObject map) {
86 this.source(map, null);
89 public void source(JSONObject map, List<String> onlyForInsert) {
90 JSONObject outer = new JSONObject();
91 JSONObject script = new JSONObject();
92 script.put("lang", "painless");
93 script.put("source", this.createInline(map, onlyForInsert));
94 if (this.params != null) {
95 script.put("params", this.params);
97 outer.put("script", script);
98 outer.put("upsert", map);
99 LOG.debug("update payload: " + outer.toString());
100 super.setQuery(outer.toString());
103 private String createInline(JSONObject map, List<String> onlyForInsert) {
104 if (onlyForInsert == null) {
105 onlyForInsert = new ArrayList<String>();
107 String s = "", k = "";
111 for (Object key : map.keySet()) {
112 k = String.valueOf(key);
113 if (onlyForInsert.contains(k)) {
117 if (value instanceof JSONObject || value instanceof JSONArray) {
118 pkey = String.format("p%d", i++);
119 if (value instanceof JSONObject) {
120 this.withParam(pkey, (JSONObject) value);
122 this.withParam(pkey, (JSONArray) value);
125 s += String.format("ctx._source['%s']=%s;", key, "params." + pkey);
127 s += String.format("ctx._source['%s']=%s;", key, escpaped(value));
133 private String escpaped(Object value) {
135 if (value instanceof Boolean || value instanceof Integer || value instanceof Long || value instanceof Float
136 || value instanceof Double) {
137 s = String.valueOf(value);
139 s = "\"" + String.valueOf(value) + "\"";
145 protected String getAlias() {
149 protected String getEsId() {
153 protected int getRetries() {