1717*/
1818package com .ericsson .ei .erqueryservice ;
1919
20- import java .util .HashMap ;
21- import java .util .Map ;
22-
23- import javax .annotation .PostConstruct ;
24-
20+ import com .fasterxml .jackson .databind .JsonNode ;
2521import lombok .Getter ;
2622import org .slf4j .Logger ;
2723import org .slf4j .LoggerFactory ;
3329import org .springframework .http .MediaType ;
3430import org .springframework .http .ResponseEntity ;
3531import org .springframework .stereotype .Component ;
32+ import org .springframework .web .client .RestClientException ;
3633import org .springframework .web .client .RestOperations ;
34+ import org .springframework .web .util .UriComponents ;
3735import org .springframework .web .util .UriComponentsBuilder ;
3836
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 ;
4343
4444/**
4545 * @author evasiba
46- *
4746 */
4847@ Component
4948public class ERQueryService {
5049
5150 static Logger log = (Logger ) LoggerFactory .getLogger (ERQueryService .class );
52-
5351 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-
5952 @ Getter
6053 @ Value ("${er.url}" )
6154 private String url ;
@@ -73,102 +66,104 @@ public void setRest(RestOperations rest) {
7366 * eventID.
7467 *
7568 * @param eventId
69+ * the id of the event.
7670 * @return ResponseEntity
7771 */
7872 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" );
8578 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 );
9083 }
91- return response ;
84+
85+ return null ;
9286 }
9387
9488 /**
9589 * 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
9791 * conditions.
9892 *
9993 * @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.
103104 * @param tree
105+ * whether or not to retain the tree structure in the result.
104106 * @return ResponseEntity
105107 */
108+ public ResponseEntity <JsonNode > getEventStreamDataById (String eventId , SearchOption searchOption , int limit ,
109+ int levels , boolean tree ) {
106110
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 );
112113
113114 // 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 );
119116
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 ();
121121 headers .setContentType (MediaType .APPLICATION_JSON );
122122
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 ());
141126
142127 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 );
154131 }
155- return uriParams ;
132+
133+ return null ;
156134 }
157135
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
162142 */
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 ;
167159 }
160+
161+ return searchParameters ;
168162 }
169163
170164 @ PostConstruct
171165 public void init () {
166+ // TODO: is this needed?
172167 log .debug ("The url parameter is : " + url );
173168 }
174169}
0 commit comments