889020ac8a7851bfbb98041ac8da0efa440bcd09
[aai/sparky-fe.git] / src / app / contextHandler / ContextHandlerActions.js
1 /*
2  * ============LICENSE_START=======================================================
3  * org.onap.aai
4  * ================================================================================
5  * Copyright © 2017 AT&T Intellectual Property. All rights reserved.
6  * Copyright © 2017 Amdocs
7  * ================================================================================
8  * Licensed under the Apache License, Version 2.0 (the "License");
9  * you may not use this file except in compliance with the License.
10  * You may obtain a copy of the License at
11  *
12  *       http://www.apache.org/licenses/LICENSE-2.0
13  *
14  * Unless required by applicable law or agreed to in writing, software
15  * distributed under the License is distributed on an "AS IS" BASIS,
16  * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
17  * See the License for the specific language governing permissions and
18  * limitations under the License.
19  * ============LICENSE_END=========================================================
20  *
21  * ECOMP is a trademark and service mark of AT&T Intellectual Property.
22  */
23
24 import {
25   POST,
26   POST_HEADER,
27   GET
28 } from 'app/networking/NetworkConstants.js';
29 import networkCall from 'app/networking/NetworkCalls.js';
30 import {EXTERNAL_REQ_ENTITY_SEARCH_URL,
31 WRONG_EXTERNAL_REQUEST_MESSAGE,
32   WRONG_RESULT,
33   ZERO_RESULT,
34   MULTIPLE_RESULT,
35   FAILED_REQUEST,
36   SUBSCRIPTION_FAILED_MESSAGE,
37   SUBSCRIPTION_PAYLOAD_URL
38 } from 'app/contextHandler/ContextHandlerConstants';
39 import {
40   getSetGlobalMessageEvent,
41   getClearGlobalMessageEvent
42 } from 'app/globalInlineMessageBar/GlobalInlineMessageBarActions.js';
43
44 import {  STATUS_CODE_204_NO_CONTENT,
45   STATUS_CODE_3XX_REDIRECTION,
46   MESSAGE_LEVEL_DANGER,
47   MESSAGE_LEVEL_WARNING
48 } from 'utils/GlobalConstants.js';
49
50
51 import {
52   contextHandlerActionTypes
53 } from 'app/contextHandler/ContextHandlerConstants.js';
54
55 function getExternalParamValues(urlParams) {
56   var pairs = decodeURIComponent(urlParams).replace('?','').replace(/\r\n|\n/,'').split('&');
57
58   var externalparamObject = {};
59   pairs.forEach(function(pair) {
60     pair = pair.split('=');
61     externalparamObject[pair[0]] = pair[1] || '';
62   });
63   return externalparamObject;
64
65 }
66
67 function createSubscriptionPayloadEvent(payload) {
68   return {
69     type: contextHandlerActionTypes.SUBSCRIPTION_PAYLOAD_FOUND,
70     data: payload
71   };
72 }
73
74 function createSubscriptionIsEmptyEvent() {
75   return {
76     type: contextHandlerActionTypes.SUBSCRIPTION_PAYLOAD_EMPTY,
77     data: {}
78   };
79 }
80
81 function fetchSubscriptionPayload(fetchRequestCallback) {
82   return dispatch => {
83     return fetchRequestCallback().then(
84       (response) => {
85         if (response.status >= STATUS_CODE_3XX_REDIRECTION) {
86           return Promise.reject(new Error(response.status));
87         } else {
88           // assume 200 status
89           return response;
90         }
91       }
92     ).then(
93       (results)=> {
94         dispatch(createSubscriptionPayloadEvent(results));
95
96       }
97     ).catch(
98       (e) => {
99         if(e.name === 'EmptyResponseException'){
100           dispatch(getClearGlobalMessageEvent());
101           dispatch(createSubscriptionIsEmptyEvent());
102         } else{
103           dispatch(getSetGlobalMessageEvent(SUBSCRIPTION_FAILED_MESSAGE , MESSAGE_LEVEL_WARNING));
104         }
105       }
106     );
107   };
108 }
109 export function getSubscriptionPayload() {
110   let externalfetchRequest =
111     () => networkCall.getRequest(SUBSCRIPTION_PAYLOAD_URL, GET);
112   return dispatch => {
113     dispatch(fetchSubscriptionPayload(externalfetchRequest));
114   };
115 }
116 function validateExternalParams(externalURLParams) {
117   if(externalURLParams.view && externalURLParams.entityId && externalURLParams.entityType) {
118     return true;
119   }
120   return false;
121
122 }
123
124
125 function createSuggestionFoundEvent(suggestion) {
126   return {
127     type: contextHandlerActionTypes.SINGLE_SUGGESTION_FOUND,
128     data: suggestion
129   };
130 }
131
132
133 function fetchDataForExternalRequest(fetchRequestCallback) {
134   return dispatch => {
135     return fetchRequestCallback().then(
136       (response) => {
137         if (response.status === STATUS_CODE_204_NO_CONTENT || response.status >= STATUS_CODE_3XX_REDIRECTION) {
138           return Promise.reject(new Error(response.status));
139         } else {
140           // assume 200 status
141           return response.json();
142         }
143       }
144     ).then(
145       (results)=> {
146         if (results.suggestions !== undefined) {
147           if( results.suggestions.length === 1) {
148             dispatch(getClearGlobalMessageEvent());
149             dispatch(createSuggestionFoundEvent({suggestion: results.suggestions[0]}));
150           } else if(results.totalFound === 0 ) {
151             dispatch(getSetGlobalMessageEvent(ZERO_RESULT, MESSAGE_LEVEL_DANGER));
152           } else {
153             dispatch(getSetGlobalMessageEvent(MULTIPLE_RESULT, MESSAGE_LEVEL_DANGER));          }
154         } else {
155           dispatch(getSetGlobalMessageEvent(WRONG_RESULT, MESSAGE_LEVEL_DANGER));
156         }
157       }
158     ).catch(
159       () => {
160         dispatch(getSetGlobalMessageEvent(FAILED_REQUEST , MESSAGE_LEVEL_DANGER));
161       }
162     );
163   };
164 }
165
166 function validateAndFetchExternalParams(externalParams) {
167   if(!validateExternalParams(externalParams)) {
168     return dispatch => {
169       dispatch(
170         getSetGlobalMessageEvent(WRONG_EXTERNAL_REQUEST_MESSAGE, MESSAGE_LEVEL_DANGER));
171     };
172   } else {
173     let postBody = JSON.stringify(externalParams);
174     let externalfetchRequest =
175       () => networkCall.fetchRequestObj(EXTERNAL_REQ_ENTITY_SEARCH_URL, POST,
176         POST_HEADER, postBody);
177     return dispatch => {
178       dispatch(fetchDataForExternalRequest(externalfetchRequest));
179     };
180   }
181 }
182 export function externalUrlRequest(urlParams) {
183   let externalURLParams = getExternalParamValues(urlParams);
184   return dispatch => {
185     dispatch(
186       validateAndFetchExternalParams(externalURLParams));
187   };
188 }
189 export function externalMessageRequest(jsonParams) {
190   return dispatch => {
191     dispatch(
192       validateAndFetchExternalParams(jsonParams));
193   };
194
195 }
196