Extend SDNC persistent service to store CM
[ccsdk/features.git] / sdnr / wt / data-provider / dblib / src / main / java / org / onap / ccsdk / features / sdnr / wt / dataprovider / database / sqldb / data / HtUserdataManagerImpl.java
index 9dd1adb..79d9637 100644 (file)
  */
 package org.onap.ccsdk.features.sdnr.wt.dataprovider.database.sqldb.data;
 
-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.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;
-    }
-
-
-    private final HtDatabaseClient dbClient;
-
-    public HtUserdataManagerImpl(HtDatabaseClient rawClient) {
-        this.dbClient = rawClient;
-    }
-
-    @Override
-    public String getUserdata(String username) {
-        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() : "{}";
+import java.util.Arrays;
+import java.util.List;
+import org.onap.ccsdk.features.sdnr.wt.dataprovider.database.sqldb.data.rpctypehelper.QueryResult;
+import org.onap.ccsdk.features.sdnr.wt.dataprovider.database.sqldb.database.SqlDBReaderWriterUserdata;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.data.provider.rev201110.EntityInput;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.data.provider.rev201110.ReadFaultcurrentListInputBuilder;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.data.provider.rev201110.entity.input.FilterBuilder;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.data.provider.rev201110.entity.input.PaginationBuilder;
+import org.opendaylight.yangtools.yang.common.Uint32;
+import org.opendaylight.yangtools.yang.common.Uint64;
+
+public class HtUserdataManagerImpl extends HtUserdataManagerBase {
+
+    private final SqlDBReaderWriterUserdata rw;
+
+    public HtUserdataManagerImpl(SqlDBReaderWriterUserdata rw) {
+        this.rw = rw;
     }
 
     @Override
     public boolean setUserdata(String username, String data) {
-        JSONObject o = new JSONObject(this.getUserdata(username));
-        JSONObject merge = mergeData(o, new JSONObject(data));
-        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;
+        return this.rw.write(new UserdataBuilder().setId(username).setValue(data).build(), username) != null;
     }
 
     @Override
     public boolean removeUserdata(String username) {
-        return this.dbClient.doRemove(Entity.Userdata.getName(), username);
+        return this.rw.remove(username) > 0;
     }
 
     @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);
-                }
-            }
+    protected String readUserdata(String username, String defaultValue) {
+        EntityInput input = new ReadFaultcurrentListInputBuilder()
+                .setFilter(Arrays.asList(new FilterBuilder().setProperty("id").setFiltervalue(username).build()))
+                .setPagination(new PaginationBuilder().setPage(Uint64.valueOf(1)).setSize(Uint32.valueOf(1)).build())
+                .build();
+        QueryResult<Userdata> result = this.rw.getData(input);
+        if (result != null) {
+            List<Userdata> data = result.getResult();
+            Userdata user = (data != null && !data.isEmpty()) ? data.get(0) : null;
+            return user == null ? defaultValue : user.getValue();
         }
-        return target;
+        return defaultValue;
     }
 
 }