- private JsonNotification constructJsonNotification(JSONCallbackResponse jsonResponse, JsonCallback baseRequestObj) {
-
- JsonNotification jsonNotification = new JsonNotification();
- try {
- jsonNotification.setNotify_field(baseRequestObj.getNotifyOn());
- jsonNotification.setEndpoint(baseRequestObj.getApplicationNotificationEndpoint());
- jsonNotification.setUsername(baseRequestObj.getApplicationUsername());
- jsonNotification.setPassword(baseRequestObj.getApplicationPassword());
- String pkValue = jsonResponse.getPrimary_key();
-
- String[] fullNotifyArr = baseRequestObj.getNotifyOn().split(":");
-
- String[] tableArr = fullNotifyArr[0].split("\\.");
- TableMetadata tableInfo = MusicCore.returnColumnMetadata(tableArr[0], tableArr[1]);
- DataType primaryIdType = tableInfo.getPrimaryKey().get(0).getType();
- String primaryId = tableInfo.getPrimaryKey().get(0).getName();
-
- Map<String, String> responseBodyMap = baseRequestObj.getResponseBody();
- for (Entry<String, String> entry : new HashSet<>(responseBodyMap.entrySet())) {
- String trimmed = entry.getKey().trim();
- if (!trimmed.equals(entry.getKey())) {
- responseBodyMap.remove(entry.getKey());
- responseBodyMap.put(trimmed, entry.getValue());
- }
- }
-
- Set<String> keySet = responseBodyMap.keySet();
- Map<String, String> newMap = new HashMap<>();
- if(responseBodyMap.size() == 1 && responseBodyMap.containsKey("")) {
- jsonNotification.setResponse_body(newMap);
- return jsonNotification;
- }
- logger.info(EELFLoggerDelegate.applicationLogger, "responseBodyMap is not blank: "+responseBodyMap);
- String cql = "select *";
- /*for(String keys: keySet) {
- cql = cql + keys + ",";
- }*/
- //cql = cql.substring(0, cql.length()-1);
- cql = cql + " FROM "+fullNotifyArr[0]+" WHERE "+primaryId+" = ?";
- logger.info(EELFLoggerDelegate.applicationLogger, "CQL in constructJsonNotification: "+cql);
- PreparedQueryObject pQuery = new PreparedQueryObject();
- pQuery.appendQueryString(cql);
- pQuery.addValue(MusicUtil.convertToActualDataType(primaryIdType, pkValue));
- Row row = MusicCore.get(pQuery).one();
- if(row != null) {
- ColumnDefinitions colInfo = row.getColumnDefinitions();
- for (Definition definition : colInfo) {
- String colName = definition.getName();
- if(keySet.contains(colName)) {
- DataType colType = definition.getType();
- Object valueObj = MusicCore.getDSHandle().getColValue(row, colName, colType);
- Object valueString = MusicUtil.convertToActualDataType(colType, valueObj);
- logger.info(colName+" : "+valueString);
- newMap.put(colName, valueString.toString());
- keySet.remove(colName);
- }
- }
- }
- if(! keySet.isEmpty()) {
- Iterator<String> iterator = keySet.iterator();
- while (iterator.hasNext()) {
- String element = iterator.next();
- newMap.put(element,"COLUMN_NOT_FOUND");
- }
- }
-
- if("delete".equals(jsonResponse.getOperation()) || newMap.isEmpty()) {
- newMap.put(primaryId, pkValue);
- }
- jsonNotification.setResponse_body(newMap);
- } catch(Exception e) {
- e.printStackTrace();
- }
- return jsonNotification;
- }
-
-
-
- private void constructJsonCallbackFromCache() throws Exception{
- PreparedQueryObject pQuery = new PreparedQueryObject();
- JsonCallback jsonCallback = null;
- List<String> notifyList = new java.util.ArrayList<>();
- String cql =
- "select id, endpoint_userid, endpoint_password, notify_to_endpoint, notify_insert_on,"
- + " notify_delete_on, notify_update_on, request, notifyon from admin.notification_master allow filtering";
- pQuery.appendQueryString(cql);
- //pQuery.addValue(MusicUtil.convertToActualDataType(DataType.text(), fullTable));
-
- ResultSet rs = MusicCore.get(pQuery);
- Iterator<Row> it = rs.iterator();
- while (it.hasNext()) {
- Row row = (Row) it.next();
- String endpoint = row.getString("notify_to_endpoint");
- String username = row.getString("endpoint_userid");
- ByteBuffer passwordBytes = row.getBytes("endpoint_password");
- String insert = row.getString("notify_insert_on");
- String delete = row.getString("notify_delete_on");
- String update = row.getString("notify_update_on");
- String request = row.getString("request");
- String notifyon = row.getString("notifyon");
- String uuid = row.getUUID("id").toString();
- notifyList.add(notifyon);
- jsonCallback = new JsonCallback();
- jsonCallback.setApplicationNotificationEndpoint(endpoint);
-
- Charset charset = Charset.forName("ISO-8859-1");
- String decodedPwd = charset.decode(passwordBytes).toString();
- jsonCallback.setApplicationPassword(decodedPwd);
- jsonCallback.setApplicationUsername(username);
- jsonCallback.setNotifyOn(notifyon);
- jsonCallback.setNotifyWhenInsertsIn(insert);
- jsonCallback.setNotifyWhenDeletesIn(delete);
- jsonCallback.setNotifyWhenChangeIn(update);
- jsonCallback.setUuid(uuid);
- logger.info(EELFLoggerDelegate.applicationLogger, "From DB. Saved request_body: "+request);
- request = request.substring(1, request.length()-1);
- String[] keyValuePairs = request.split(",");
- Map<String,String> responseBody = new HashMap<>();
-
- for(String pair : keyValuePairs) {
- String[] entry = pair.split("=");
- String val = "";
- if(entry.length == 2)
- val = entry[1];
- responseBody.put(entry[0], val);
- }
- logger.info(EELFLoggerDelegate.applicationLogger, "After parsing. Saved request_body: "+responseBody);
- jsonCallback.setResponseBody(responseBody);
- logger.info(EELFLoggerDelegate.applicationLogger, "Updating Cache with updateCallBackCache: "+notifyon+ " :::: "+jsonCallback);
- CachingUtil.updateCallBackCache(notifyon, jsonCallback);
- }
- CachingUtil.updateCallbackNotifyList(notifyList);
- }