Skip to content

Commit dfbaafe

Browse files
author
Vali (Vasile Baluta)
committed
more integration for handling events depending on other events
Change-Id: I8553791d77dbc602225cc820d68f5f80da4a600b
1 parent 67de747 commit dfbaafe

18 files changed

+171
-219
lines changed
Lines changed: 95 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -1,14 +1,28 @@
11
package com.ericsson.ei.handlers;
22

3+
import java.io.IOException;
34
import java.util.ArrayList;
5+
import java.util.HashMap;
46
import java.util.List;
57
import java.util.Map;
68

9+
import org.slf4j.Logger;
10+
import org.slf4j.LoggerFactory;
711
import org.springframework.beans.factory.annotation.Autowired;
812
import org.springframework.beans.factory.annotation.Value;
913
import org.springframework.stereotype.Component;
1014

15+
import com.ericsson.ei.jmespath.JmesPathInterface;
1116
import com.ericsson.ei.mongodbhandler.MongoDBHandler;
17+
import com.ericsson.ei.rules.RulesHandler;
18+
import com.ericsson.ei.rules.RulesObject;
19+
import com.fasterxml.jackson.core.JsonParseException;
20+
import com.fasterxml.jackson.core.type.TypeReference;
21+
import com.fasterxml.jackson.databind.JsonMappingException;
22+
import com.fasterxml.jackson.databind.JsonNode;
23+
import com.fasterxml.jackson.databind.ObjectMapper;
24+
import com.fasterxml.jackson.databind.node.ArrayNode;
25+
import com.fasterxml.jackson.databind.node.ObjectNode;
1226

1327
/**
1428
* @author evasiba
@@ -19,21 +33,97 @@
1933
*/
2034
@Component
2135
public class EventToObjectMapHandler {
36+
37+
static Logger log = (Logger) LoggerFactory.getLogger(ExtractionHandler.class);
38+
2239
@Value("${event_object_map.collection.name}") private String collectionName;
2340
@Value("${database.name}") private String databaseName;
2441

42+
private final String listPropertyName = "objects";
43+
2544
@Autowired
2645
MongoDBHandler mongodbhandler;
2746

28-
public ArrayList<String> getEventsForObject(String object) {
29-
return null;
47+
@Autowired
48+
JmesPathInterface jmesPathInterface;
49+
50+
public void setCollectionName(String collectionName) {
51+
this.collectionName = collectionName;
3052
}
3153

32-
public void updateEventToObjectMapInMemoryDB(String event, String object) {
54+
public void setDatabaseName(String databaseName) {
55+
this.databaseName = databaseName;
56+
}
3357

58+
public void setMongodbhandler(MongoDBHandler mongodbhandler) {
59+
this.mongodbhandler = mongodbhandler;
3460
}
3561

36-
public Map<String, List<String>> getEventToObjectMap() {
37-
return null;
62+
public void setJmesPathInterface(JmesPathInterface jmesPathInterface) {
63+
this.jmesPathInterface = jmesPathInterface;
3864
}
65+
66+
public ArrayList<String> getObjectsForEvent(RulesObject rulesObject, String event) {
67+
String eventId = getEventId(rulesObject, event);
68+
return getEventToObjectList(eventId);
69+
}
70+
71+
public ArrayList<String> getObjectsForEventId(String eventId) {
72+
return getEventToObjectList(eventId);
73+
}
74+
75+
public void updateEventToObjectMapInMemoryDB(RulesObject rulesObject, String event, String objectId) {
76+
String eventId = getEventId(rulesObject, event);
77+
String condition = "{\"_id\" : \"" + eventId + "\"}";
78+
ArrayList<String> list = getEventToObjectList(eventId);
79+
boolean firstTime = list.isEmpty();
80+
list = updateList(list, eventId, objectId);
81+
ObjectMapper mapper = new ObjectMapper();
82+
JsonNode entry = null;
83+
84+
try {
85+
entry = new ObjectMapper().readValue(condition, JsonNode.class);
86+
ArrayNode jsonNode = mapper.convertValue(list, ArrayNode.class);
87+
((ObjectNode) entry).put(listPropertyName, jsonNode);
88+
String mapStr = entry.toString();
89+
if (firstTime) {
90+
mongodbhandler.insertDocument(databaseName, collectionName, mapStr);
91+
} else {
92+
mongodbhandler.updateDocument(databaseName, collectionName, condition, mapStr);
93+
}
94+
} catch (Exception e) {
95+
log.info(e.getMessage(),e);
96+
}
97+
}
98+
99+
public String getEventId(RulesObject rulesObject, String event) {
100+
String idRule = rulesObject.getIdRule();
101+
JsonNode eventIdJson = jmesPathInterface.runRuleOnEvent(idRule, event);
102+
return eventIdJson.textValue();
103+
}
104+
105+
public ArrayList<String> updateList(ArrayList<String> list, String eventId, String objectId) {
106+
list.add(objectId);
107+
return list;
108+
}
109+
110+
public ArrayList<String> getEventToObjectList(String eventId) {
111+
ArrayList<String> list = new ArrayList<String>();
112+
String condition = "{\"_id\" : \"" + eventId + "\"}";
113+
ArrayList<String> documents = mongodbhandler.find(databaseName, collectionName, condition);
114+
if (!documents.isEmpty()) {
115+
String mapStr = documents.get(0);
116+
ObjectMapper mapper = new ObjectMapper();
117+
try {
118+
JsonNode document = mapper.readValue(mapStr, JsonNode.class);
119+
JsonNode value = document.get(listPropertyName);
120+
list = new ObjectMapper().readValue(value.traverse(), new TypeReference<ArrayList<String>>(){});
121+
} catch (Exception e) {
122+
log.info(e.getMessage(),e);
123+
}
124+
}
125+
return list;
126+
}
127+
128+
39129
}

src/main/java/com/ericsson/ei/handlers/ExtractionHandler.java

Lines changed: 7 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -24,6 +24,7 @@ public class ExtractionHandler {
2424

2525
@Autowired private JmesPathInterface jmesPathInterface;
2626
@Autowired private MergeHandler mergeHandler;
27+
@Autowired private ObjectHandler objectHandler;
2728
//TODO:@Autowired private ProcessRulesHandler processRulesHandler;
2829
//TODO:@Autowired private HistoryIdRulesHandler historyIdRulesHandler;
2930

@@ -43,6 +44,10 @@ public void setMergeHandler(MergeHandler mergeHandler) {
4344
// this.historyIdRulesHandler = historyIdRulesHandler;
4445
// }
4546

47+
public void setObjectHandler(ObjectHandler objectHandler) {
48+
this.objectHandler = objectHandler;
49+
}
50+
4651
public void runExtraction(RulesObject rulesObject, String id, String event, String aggregatedDbObject) {
4752
try {
4853
ObjectMapper mapper = new ObjectMapper();
@@ -58,7 +63,8 @@ public void runExtraction(RulesObject rulesObject, String id, String event, Json
5863
extractedContent = extractContent(rulesObject, event);
5964

6065
if(aggregatedDbObject != null) {
61-
String mergedContent = mergeHandler.mergeObject(id, rulesObject, event, extractedContent);
66+
String object_id = objectHandler.extractObjectId(aggregatedDbObject);
67+
String mergedContent = mergeHandler.mergeObject(object_id, rulesObject, event, extractedContent);
6268
//aggregationObject = processRulesHandler.runProcessRules(aggregationObject, rulesObject);
6369
//historyIdRulesHandler.runHistoryIdRules(aggregationObject, rulesObject, event);
6470
} else {

src/main/java/com/ericsson/ei/handlers/MatchIdRulesHandler.java

Lines changed: 9 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -13,10 +13,18 @@ public class MatchIdRulesHandler {
1313
@Autowired
1414
private ObjectHandler objHandler;
1515

16+
@Autowired
17+
private EventToObjectMapHandler eventToObjectMapHandler;
18+
1619
public ArrayList<String> fetchObjectsById(RulesObject ruleObject, String id) {
1720
String matchIdString = ruleObject.getMatchIdRules();
1821
String fetchQuerry = replaceIdInRules(matchIdString, id);
19-
return objHandler.findObjectsByCondition(fetchQuerry);
22+
ArrayList<String> objects = objHandler.findObjectsByCondition(fetchQuerry);
23+
if (objects.isEmpty()) {
24+
ArrayList<String> objectIds = eventToObjectMapHandler.getObjectsForEventId(id);
25+
objects = objHandler.findObjectsByIds(objectIds);
26+
}
27+
return objects;
2028
}
2129

2230
public static String replaceIdInRules(String matchIdString, String id) {

src/main/java/com/ericsson/ei/handlers/ObjectHandler.java

Lines changed: 32 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,5 @@
11
package com.ericsson.ei.handlers;
22

3-
import java.io.IOException;
43
import java.util.ArrayList;
54

65
import org.slf4j.Logger;
@@ -12,16 +11,14 @@
1211
import com.ericsson.ei.jmespath.JmesPathInterface;
1312
import com.ericsson.ei.mongodbhandler.MongoDBHandler;
1413
import com.ericsson.ei.rules.RulesObject;
15-
import com.fasterxml.jackson.core.JsonParseException;
16-
import com.fasterxml.jackson.databind.JsonMappingException;
1714
import com.fasterxml.jackson.databind.JsonNode;
1815
import com.fasterxml.jackson.databind.ObjectMapper;
1916
import com.fasterxml.jackson.databind.node.ObjectNode;
2017

2118
@Component
2219
public class ObjectHandler {
2320

24-
static Logger log = (Logger) LoggerFactory.getLogger(ObjectHandler.class);
21+
static Logger log = (Logger) LoggerFactory.getLogger(ObjectHandler.class);
2522

2623
@Value("${aggregated.collection.name}") private String collectionName;
2724
@Value("${database.name}") private String databaseName;
@@ -48,6 +45,13 @@ public void setJmespathInterface(JmesPathInterface jmespathInterface) {
4845
this.jmespathInterface = jmespathInterface;
4946
}
5047

48+
@Autowired
49+
private EventToObjectMapHandler eventToObjectMap;
50+
51+
public void setEventToObjectMap(EventToObjectMapHandler eventToObjectMap) {
52+
this.eventToObjectMap = eventToObjectMap;
53+
}
54+
5155
public boolean insertObject(String aggregatedObject, RulesObject rulesObject, String event, String id) {
5256
if (id == null) {
5357
String idRules = rulesObject.getIdRule();
@@ -56,7 +60,10 @@ public boolean insertObject(String aggregatedObject, RulesObject rulesObject, St
5660
}
5761
JsonNode document = prepareDocumentForInsertion(id, aggregatedObject);
5862
String documentStr = document.toString();
59-
return mongoDbHandler.insertDocument(databaseName, collectionName, documentStr);
63+
boolean result = mongoDbHandler.insertDocument(databaseName, collectionName, documentStr);
64+
if (result)
65+
eventToObjectMap.updateEventToObjectMapInMemoryDB(rulesObject, event, id);
66+
return result;
6067
}
6168

6269
public boolean insertObject(JsonNode aggregatedObject, RulesObject rulesObject, String event, String id) {
@@ -70,8 +77,12 @@ public boolean updateObject(String aggregatedObject, RulesObject rulesObject, St
7077
id = idNode.textValue();
7178
}
7279
JsonNode document = prepareDocumentForInsertion(id, aggregatedObject);
80+
String condition = "{\"_id\" : \"" + id + "\"}";
7381
String documentStr = document.toString();
74-
return mongoDbHandler.updateDocument(databaseName, collectionName, documentStr, documentStr);
82+
boolean result = mongoDbHandler.updateDocument(databaseName, collectionName, condition, documentStr);
83+
if (result)
84+
eventToObjectMap.updateEventToObjectMapInMemoryDB(rulesObject, event, id);
85+
return result;
7586
}
7687

7788
public boolean updateObject(JsonNode aggregatedObject, RulesObject rulesObject, String event, String id) {
@@ -85,12 +96,20 @@ public ArrayList<String> findObjectsByCondition(String condition) {
8596
public String findObjectById(String id) {
8697
String condition = "{\"_id\" : \"" + id + "\"}";
8798
String document = findObjectsByCondition(condition).get(0);
88-
JsonNode result = getAggregatedObject(document);
89-
if (result != null)
90-
return result.asText();
99+
// JsonNode result = getAggregatedObject(document);
100+
// if (result != null)
101+
// return result.asText();
91102
return document;
92103
}
93104

105+
public ArrayList<String> findObjectsByIds(ArrayList<String> ids) {
106+
ArrayList<String> objects = new ArrayList<String>();
107+
for (String id : ids) {
108+
objects.add(findObjectById(id));
109+
}
110+
return objects;
111+
}
112+
94113
private JsonNode prepareDocumentForInsertion(String id, String object) {
95114
ObjectMapper mapper = new ObjectMapper();
96115
try {
@@ -115,4 +134,8 @@ public JsonNode getAggregatedObject(String dbDocument) {
115134
}
116135
return null;
117136
}
137+
138+
public String extractObjectId(JsonNode aggregatedDbObject) {
139+
return aggregatedDbObject.get("_id").asText();
140+
}
118141
}

src/main/java/com/ericsson/ei/handlers/ProcessRulesHandler.java

Lines changed: 0 additions & 36 deletions
This file was deleted.

src/main/java/com/ericsson/ei/jmespath/DiffFunction.java

Lines changed: 0 additions & 27 deletions
This file was deleted.

src/main/java/com/ericsson/ei/jmespath/JmesPathInterface.java

Lines changed: 2 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -9,31 +9,22 @@
99

1010
import io.burt.jmespath.Expression;
1111
import io.burt.jmespath.JmesPath;
12-
import io.burt.jmespath.function.FunctionRegistry;
1312
import io.burt.jmespath.jackson.JacksonRuntime;
1413

1514
@Component
1615
public class JmesPathInterface {
1716

1817
static Logger log = (Logger) LoggerFactory.getLogger(JmesPathInterface.class);
1918

20-
private JmesPath<JsonNode> jmespath;
21-
22-
public JmesPathInterface() {
23-
FunctionRegistry defaultFunctions = FunctionRegistry.defaultRegistry();
24-
FunctionRegistry customFunctions = defaultFunctions.extend(new DiffFunction());
25-
jmespath = new JacksonRuntime(customFunctions);
26-
}
27-
28-
2919
public JsonNode runRuleOnEvent(String rule, String input) {
3020
JsonNode event = null;
21+
JmesPath<JsonNode> jmespath = new JacksonRuntime();
3122
Expression<JsonNode> expression = jmespath.compile(rule);
3223
ObjectMapper objectMapper = new ObjectMapper();
3324
try {
3425
event = objectMapper.readValue(input, JsonNode.class);
3526
} catch (Exception e) {
36-
log.info(e.getMessage(), e);
27+
log.info(e.getMessage(),e);
3728
}
3829
JsonNode result = expression.search(event);
3930
return result;

0 commit comments

Comments
 (0)