*/
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;
}
}