Extend SDNC persistent service to store CM
[ccsdk/features.git] / sdnr / wt / data-provider / provider / src / main / java / org / onap / ccsdk / features / sdnr / wt / dataprovider / database / elasticsearch / impl / HtUserdataManagerImpl.java
index 9dbdb13..7b7dccc 100644 (file)
  */
 package org.onap.ccsdk.features.sdnr.wt.dataprovider.database.elasticsearch.impl;
 
-import java.io.File;
-import java.io.IOException;
-import java.nio.file.Files;
-import org.json.JSONException;
 import org.json.JSONObject;
 import org.onap.ccsdk.features.sdnr.wt.common.database.HtDatabaseClient;
 import org.onap.ccsdk.features.sdnr.wt.common.database.SearchHit;
 import org.onap.ccsdk.features.sdnr.wt.common.database.SearchResult;
 import org.onap.ccsdk.features.sdnr.wt.common.database.queries.QueryBuilders;
-import org.onap.ccsdk.features.sdnr.wt.dataprovider.model.HtUserdataManager;
+import org.onap.ccsdk.features.sdnr.wt.dataprovider.database.sqldb.data.HtUserdataManagerBase;
 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.data.provider.rev201110.Entity;
-import org.slf4j.Logger;
-import org.slf4j.LoggerFactory;
-
-public class HtUserdataManagerImpl implements HtUserdataManager {
-
-    private static final Logger LOG = LoggerFactory.getLogger(HtUserdataManagerImpl.class);
-
-    private static final String USERDATA_DEFAULTS_FILENAME = "etc/userdata-defaults.json";
-    private static final JSONObject USERDATA_DEFAULTS_CONTENT = loadDefaults();
-
-    private static JSONObject loadDefaults() {
-        File f = new File(USERDATA_DEFAULTS_FILENAME);
-        String content;
-        JSONObject o = null;
-        if (f.exists()) {
-            try {
-                content = Files.readString(f.toPath());
-                o = new JSONObject(content);
-            } catch (IOException e) {
-                LOG.warn("problem loading defaults: ", e);
-            } catch (JSONException e) {
-                LOG.warn("problem parsing defaults: ", e);
-            }
-        }
-        return o;
-    }
 
+public class HtUserdataManagerImpl extends HtUserdataManagerBase {
 
     private final HtDatabaseClient dbClient;
 
@@ -67,84 +38,23 @@ public class HtUserdataManagerImpl implements HtUserdataManager {
     }
 
     @Override
-    public String getUserdata(String username) {
+    protected String readUserdata(String username, String defaultValue) {
+
         SearchResult<SearchHit> result = this.dbClient.doReadByQueryJsonData(Entity.Userdata.getName(),
                 QueryBuilders.matchQuery("_id", username));
-        String json = result.getHits().size() > 0 ? result.getHits().get(0).getSourceAsString() : "{}";
-        if (USERDATA_DEFAULTS_CONTENT != null) {
-            JSONObject merge = mergeData(new JSONObject(json), USERDATA_DEFAULTS_CONTENT);
-            json = merge.toString();
-        }
-        return json;
-    }
-
-    @Override
-    public String getUserdata(String username, String key) {
-        JSONObject o = new JSONObject(this.getUserdata(username));
-        return o.has(key) ? o.get(key).toString() : "{}";
+        return result.getHits().size() > 0 ? result.getHits().get(0).getSourceAsString() : defaultValue;
     }
 
     @Override
     public boolean setUserdata(String username, String data) {
         JSONObject o = new JSONObject(this.getUserdata(username));
-        JSONObject merge = mergeData(o, new JSONObject(data));
+        JSONObject merge = mergeData(new JSONObject(data), o);
         return this.dbClient.doWriteRaw(Entity.Userdata.getName(), username, merge.toString()) != null;
     }
 
-    @Override
-    public boolean setUserdata(String username, String key, String data) {
-        JSONObject o = new JSONObject(this.getUserdata(username));
-        o = mergeData(o, key, new JSONObject(data));
-        return this.dbClient.doWriteRaw(Entity.Userdata.getName(), username, o.toString()) != null;
-    }
-
     @Override
     public boolean removeUserdata(String username) {
         return this.dbClient.doRemove(Entity.Userdata.getName(), username);
     }
 
-    @Override
-    public boolean removeUserdata(String username, String key) {
-        JSONObject o = new JSONObject(this.getUserdata(username));
-        if (o.has(key)) {
-            o.remove(key);
-            return this.setUserdata(username, o.toString());
-        }
-        return true;
-    }
-
-    private static JSONObject mergeData(JSONObject o, String key, JSONObject subObject) {
-        if (!o.has(key)) {
-            o.put(key, subObject);
-        } else {
-            JSONObject tmp = new JSONObject();
-            tmp.put(key, subObject);
-            o = mergeData(tmp, o);
-        }
-        return o;
-    }
-
-    private static JSONObject mergeData(JSONObject source, JSONObject target) throws JSONException {
-        String[] keys = JSONObject.getNames(source);
-        if (keys == null) {
-            return target;
-        }
-        for (String key : keys) {
-            Object value = source.get(key);
-            if (!target.has(key)) {
-                // new value for "key":
-                target.put(key, value);
-            } else {
-                // existing value for "key" - recursively deep merge:
-                if (value instanceof JSONObject) {
-                    JSONObject valueJson = (JSONObject) value;
-                    mergeData(valueJson, target.getJSONObject(key));
-                } else {
-                    target.put(key, value);
-                }
-            }
-        }
-        return target;
-    }
-
 }