17
17
*/
18
18
package com .ericsson .ei .erqueryservice ;
19
19
20
- import java .util .HashMap ;
21
- import java .util .Map ;
22
-
23
- import javax .annotation .PostConstruct ;
24
-
20
+ import com .fasterxml .jackson .databind .JsonNode ;
25
21
import lombok .Getter ;
26
22
import org .slf4j .Logger ;
27
23
import org .slf4j .LoggerFactory ;
33
29
import org .springframework .http .MediaType ;
34
30
import org .springframework .http .ResponseEntity ;
35
31
import org .springframework .stereotype .Component ;
32
+ import org .springframework .web .client .RestClientException ;
36
33
import org .springframework .web .client .RestOperations ;
34
+ import org .springframework .web .util .UriComponents ;
37
35
import org .springframework .web .util .UriComponentsBuilder ;
38
36
39
- import com .fasterxml .jackson .databind .JsonNode ;
40
- import com .fasterxml .jackson .databind .ObjectMapper ;
41
- import com .fasterxml .jackson .databind .node .ArrayNode ;
42
- import com .fasterxml .jackson .databind .node .ObjectNode ;
37
+ import javax .annotation .PostConstruct ;
38
+ import java .net .URI ;
39
+ import java .util .ArrayList ;
40
+ import java .util .Collections ;
41
+ import java .util .List ;
42
+ import java .util .Map ;
43
43
44
44
/**
45
45
* @author evasiba
46
- *
47
46
*/
48
47
@ Component
49
48
public class ERQueryService {
50
49
51
50
static Logger log = (Logger ) LoggerFactory .getLogger (ERQueryService .class );
52
-
53
51
private RestOperations rest ;
54
-
55
- public final static int DOWNSTREAM = 0 ;
56
- public final static int UPSTREAM = 1 ;
57
- public final static int DOWNANDUPSTREAM = 2 ;
58
-
59
52
@ Getter
60
53
@ Value ("${er.url}" )
61
54
private String url ;
@@ -73,102 +66,104 @@ public void setRest(RestOperations rest) {
73
66
* eventID.
74
67
*
75
68
* @param eventId
69
+ * the id of the event.
76
70
* @return ResponseEntity
77
71
*/
78
72
public ResponseEntity <String > getEventDataById (String eventId ) {
79
- String erUrl = url .trim () + "{id}" ;
80
- log .info ("The url is : " + erUrl );
81
- Map <String , String > params = new HashMap <>();
82
- params .put ("id" , eventId );
83
- ResponseEntity <String > response = null ;
84
- log .info ("The ID parameter is set" );
73
+ final String erUrl = URI .create (url .trim () + "/" + "{id}" ).normalize ().toString ();
74
+ log .debug ("The URL to ER is: " + erUrl );
75
+
76
+ final Map <String , String > params = Collections .singletonMap ("id" , eventId );
77
+ log .trace ("The ID parameter is set" );
85
78
try {
86
- response = rest .getForEntity (erUrl , String .class , params );
87
- log .info ("The response is : " + response .toString ());
88
- } catch (Exception e ) {
89
- log .error (e . getMessage () , e );
79
+ final ResponseEntity < String > response = rest .getForEntity (erUrl , String .class , params );
80
+ log .trace ("The response is : " + response .toString ());
81
+ } catch (RestClientException e ) {
82
+ log .error ("Error occurred while executing REST GET to: " + erUrl + " for " + eventId , e );
90
83
}
91
- return response ;
84
+
85
+ return null ;
92
86
}
93
87
94
88
/**
95
89
* This method is used to fetch only the upstream or downstream or both
96
- * event information from ER2.0 based on the eventID and searchAction
90
+ * event information from ER2.0 based on the eventID and searchOption
97
91
* conditions.
98
92
*
99
93
* @param eventId
100
- * @param searchAction
101
- * @param limitParam
102
- * @param levelsParam
94
+ * the id of the event.
95
+ * @param searchOption
96
+ * the SearchOption to indicate whether to search up, down or
97
+ * both ways from the eventId.
98
+ * @param limit
99
+ * sets the limit of how many events up and/or down stream from
100
+ * the eventId to include in the result.
101
+ * @param levels
102
+ * sets the limit of how many levels up and/or down stream from
103
+ * the eventId to include in the result.
103
104
* @param tree
105
+ * whether or not to retain the tree structure in the result.
104
106
* @return ResponseEntity
105
107
*/
108
+ public ResponseEntity <JsonNode > getEventStreamDataById (String eventId , SearchOption searchOption , int limit ,
109
+ int levels , boolean tree ) {
106
110
107
- public ResponseEntity <JsonNode > getEventStreamDataById (String eventId , int searchAction , int limitParam ,
108
- int levelsParam , boolean tree ) {
109
-
110
- String erUrl = url .trim () + eventId ;
111
- log .info ("The url is : " + erUrl );
111
+ final String erUrl = URI .create (url .trim () + "/" + eventId ).normalize ().toString ();
112
+ log .debug ("The URL to ER is: " + erUrl );
112
113
113
114
// Request Body parameters
114
- JsonNode uriParams = getSearchParameters (searchAction );
115
-
116
- // Add query parameter
117
- UriComponentsBuilder builder = UriComponentsBuilder .fromUriString (erUrl ).queryParam ("limit" , limitParam )
118
- .queryParam ("levels" , levelsParam ).queryParam ("tree" , tree );
115
+ final SearchParameters searchParameters = getSearchParameters (searchOption );
119
116
120
- HttpHeaders headers = new HttpHeaders ();
117
+ // Build query parameters
118
+ final UriComponentsBuilder builder = UriComponentsBuilder .fromUriString (erUrl ).queryParam ("limit" , limit )
119
+ .queryParam ("levels" , levels ).queryParam ("tree" , tree );
120
+ final HttpHeaders headers = new HttpHeaders ();
121
121
headers .setContentType (MediaType .APPLICATION_JSON );
122
122
123
- HttpEntity <JsonNode > requestEntity = new HttpEntity <>(uriParams , headers );
124
- log .info ("The request is : " + builder .buildAndExpand (uriParams ).toUri ().toString ());
125
-
126
- ResponseEntity <JsonNode > response = rest .exchange (builder .buildAndExpand (uriParams ).toUri (), HttpMethod .POST ,
127
- requestEntity , JsonNode .class );
128
- return response ;
129
- }
130
-
131
- /** Generates the json object used as body for downstream/upstream
132
- * query requests
133
- * @param searchAction - one of DOWNSTREAM, UPSTREAM or DOWNANDUPSTREAM
134
- * @return
135
- */
136
- public JsonNode getSearchParameters (int searchAction ) {
137
- JsonNode uriParams = null ;
138
- ObjectMapper objectmapper = new ObjectMapper ();
139
-
140
- String [] linkTypes = {"ALL" };
123
+ final HttpEntity <SearchParameters > requestEntity = new HttpEntity <>(searchParameters , headers );
124
+ final UriComponents uriComponents = builder .buildAndExpand (searchParameters );
125
+ log .debug ("The request is : " + uriComponents .toUri ().toString ());
141
126
142
127
try {
143
- uriParams = objectmapper .readTree ("{}" );
144
- if (searchAction == DOWNSTREAM ) {
145
- putSearchParameter (uriParams , "dlt" , linkTypes );
146
- } else if (searchAction == UPSTREAM ) {
147
- putSearchParameter (uriParams , "ult" , linkTypes );
148
- } else if (searchAction == DOWNANDUPSTREAM ) {
149
- putSearchParameter (uriParams , "dlt" , linkTypes );
150
- putSearchParameter (uriParams , "ult" , linkTypes );
151
- }
152
- } catch (Exception e ) {
153
- log .error (e .getMessage (), e );
128
+ return rest .exchange (uriComponents .toUri (), HttpMethod .POST , requestEntity , JsonNode .class );
129
+ } catch (RestClientException e ) {
130
+ log .error ("Error occurred while executing REST POST to: " + erUrl + " for\n " + requestEntity , e );
154
131
}
155
- return uriParams ;
132
+
133
+ return null ;
156
134
}
157
135
158
- /** Create an array node with link types for upstream or downstream query
159
- * @param params
160
- * @param actionString
161
- * @param linkTypes
136
+ /**
137
+ * Build the search parameters to be used to query ER.
138
+ *
139
+ * @param searchOption
140
+ * one of UP_STREAM, DOWN_STREAM or UP_AND_DOWN_STREAM
141
+ * @return the search parameters to be used
162
142
*/
163
- public void putSearchParameter (JsonNode params , String actionString , String [] linkTypes ) {
164
- ArrayNode node =((ObjectNode ) params ).putArray (actionString );
165
- for (String string : linkTypes ) {
166
- node .add (string );
143
+ private SearchParameters getSearchParameters (SearchOption searchOption ) {
144
+ final SearchParameters searchParameters = new SearchParameters ();
145
+ final List <LinkType > allLinkTypes = Collections .singletonList (LinkType .ALL );
146
+ switch (searchOption ) {
147
+ case DOWN_STREAM :
148
+ searchParameters .setUlt (new ArrayList <>());
149
+ searchParameters .setDlt (allLinkTypes );
150
+ break ;
151
+ case UP_STREAM :
152
+ searchParameters .setUlt (allLinkTypes );
153
+ searchParameters .setDlt (new ArrayList <>());
154
+ break ;
155
+ case UP_AND_DOWN_STREAM :
156
+ searchParameters .setUlt (allLinkTypes );
157
+ searchParameters .setDlt (allLinkTypes );
158
+ break ;
167
159
}
160
+
161
+ return searchParameters ;
168
162
}
169
163
170
164
@ PostConstruct
171
165
public void init () {
166
+ // TODO: is this needed?
172
167
log .debug ("The url parameter is : " + url );
173
168
}
174
169
}
0 commit comments