[VID-6] Initial rebase push
[vid.git] / vid-app-common / src / main / java / org / openecomp / vid / mso / MsoRestInterface.java
1 /*-\r
2  * ============LICENSE_START=======================================================\r
3  * VID\r
4  * ================================================================================\r
5  * Copyright (C) 2017 AT&T Intellectual Property. All rights reserved.\r
6  * ================================================================================\r
7  * Licensed under the Apache License, Version 2.0 (the "License");\r
8  * you may not use this file except in compliance with the License.\r
9  * You may obtain a copy of the License at\r
10  * \r
11  *      http://www.apache.org/licenses/LICENSE-2.0\r
12  * \r
13  * Unless required by applicable law or agreed to in writing, software\r
14  * distributed under the License is distributed on an "AS IS" BASIS,\r
15  * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\r
16  * See the License for the specific language governing permissions and\r
17  * limitations under the License.\r
18  * ============LICENSE_END=========================================================\r
19  */\r
20 \r
21 package org.openecomp.vid.mso;\r
22 \r
23 \r
24 import java.text.DateFormat;\r
25 import java.text.SimpleDateFormat;\r
26 import java.util.Collections;\r
27 import java.util.Date;\r
28 \r
29 import javax.ws.rs.client.Client;\r
30 import javax.ws.rs.client.Entity;\r
31 import javax.ws.rs.core.MediaType;\r
32 import javax.ws.rs.core.MultivaluedHashMap;\r
33 import javax.ws.rs.core.Response;\r
34 \r
35 import org.openecomp.portalsdk.core.logging.logic.EELFLoggerDelegate;\r
36 import org.openecomp.portalsdk.core.util.SystemProperties;\r
37 \r
38 import org.apache.commons.codec.binary.Base64;\r
39 import org.eclipse.jetty.util.security.Password;\r
40 import org.openecomp.vid.client.HttpBasicClient;\r
41 import org.openecomp.vid.client.HttpsBasicClient;\r
42 import org.openecomp.vid.mso.rest.RequestDetails;\r
43 \r
44 /**\r
45  * The Class MsoRestInterface.\r
46  */\r
47 public class MsoRestInterface extends MsoRestInt implements MsoRestInterfaceIfc {\r
48 \r
49         /** The logger. */\r
50         EELFLoggerDelegate logger = EELFLoggerDelegate.getLogger(MsoRestInterface.class);\r
51         \r
52         /** The Constant dateFormat. */\r
53         final static DateFormat dateFormat = new SimpleDateFormat("HH:mm:ss:SSSS");\r
54         \r
55         /** The client. */\r
56         private static Client client = null;\r
57         \r
58         /** The common headers. */\r
59         private MultivaluedHashMap<String, Object> commonHeaders;\r
60         \r
61         /**\r
62          * Instantiates a new mso rest interface.\r
63          */\r
64         public MsoRestInterface() {\r
65                 super();\r
66         }\r
67         \r
68         /* (non-Javadoc)\r
69          * @see org.openecomp.vid.mso.MsoRestInterfaceIfc#initRestClient()\r
70          */\r
71         public void initRestClient()\r
72         {\r
73                 final String methodname = "initRestClient()";\r
74                 \r
75                 final String username = SystemProperties.getProperty(MsoProperties.MSO_USER_NAME);\r
76                 final String password = SystemProperties.getProperty(MsoProperties.MSO_PASSWORD);\r
77                 final String mso_url = SystemProperties.getProperty(MsoProperties.MSO_SERVER_URL);\r
78                 final String decrypted_password = Password.deobfuscate(password);\r
79                 \r
80                 String authString = username + ":" + decrypted_password;\r
81                 \r
82                 byte[] authEncBytes = Base64.encodeBase64(authString.getBytes());\r
83                 String authStringEnc = new String(authEncBytes);\r
84 \r
85                 commonHeaders = new MultivaluedHashMap<String, Object> ();\r
86                 commonHeaders.put("Authorization",  Collections.singletonList((Object) ("Basic " + authStringEnc)));\r
87                 \r
88                 boolean use_ssl = true;\r
89                 if ( (mso_url != null) && ( !(mso_url.isEmpty()) ) ) {\r
90                         if ( mso_url.startsWith("https")) {\r
91                                 use_ssl = true;\r
92                         }\r
93                         else {\r
94                                 use_ssl = false;\r
95                         }\r
96                 }\r
97                 if (client == null) {\r
98                         \r
99                         try {\r
100                                 if ( use_ssl ) { \r
101                                         //logger.info(EELFLoggerDelegate.errorLogger, dateFormat.format(new Date()) +  methodname + " getting HttpsBasicClient with username=" + username\r
102                                         //              + " password=" + password);\r
103                                         client = HttpsBasicClient.getClient();\r
104                                 }\r
105                                 else {\r
106                                         //logger.info(EELFLoggerDelegate.errorLogger, dateFormat.format(new Date()) +  methodname + " getting HttpsBasicClient with username=" + username\r
107                                         //              + " password=" + password);\r
108                                         client = HttpBasicClient.getClient();\r
109                                 }\r
110                         } catch (Exception e) {\r
111                                 logger.info(EELFLoggerDelegate.errorLogger, dateFormat.format(new Date()) +  methodname + " Unable to get the SSL client");\r
112                         }\r
113                 }\r
114         }\r
115         \r
116         /* (non-Javadoc)\r
117          * @see org.openecomp.vid.mso.MsoRestInterfaceIfc#Get(java.lang.Object, java.lang.String, java.lang.String, org.openecomp.vid.mso.RestObject)\r
118          */\r
119         @SuppressWarnings("unchecked")\r
120         public <T> void  Get (T t, String sourceId, String path, RestObject<T> restObject ) throws Exception {\r
121                 String methodName = "Get";\r
122                 \r
123                 logger.debug(EELFLoggerDelegate.debugLogger, methodName + " start");\r
124                 \r
125                 String url="";\r
126                 restObject.set(t);\r
127                 \r
128                 url = SystemProperties.getProperty(MsoProperties.MSO_SERVER_URL) + path;\r
129         logger.debug(EELFLoggerDelegate.debugLogger, dateFormat.format(new Date()) + "<== " +  methodName + " sending request to url= " + url);\r
130                 \r
131         initRestClient();\r
132                 \r
133                 final Response cres = client.target(url)\r
134                          .request()\r
135                  .accept("application/json")\r
136                  .headers(commonHeaders)\r
137                  .get();\r
138                 \r
139                 int status = cres.getStatus();\r
140                 restObject.setStatusCode (status);\r
141                 \r
142                 if (status == 200) {\r
143                          t = (T) cres.readEntity(t.getClass());\r
144                          restObject.set(t);\r
145                          logger.debug(EELFLoggerDelegate.debugLogger, dateFormat.format(new Date()) + methodName + " REST api was successfull!");\r
146                     \r
147                  } else {\r
148                      throw new Exception(methodName + " with status="+ status + ", url= " + url );\r
149                  }\r
150 \r
151                 logger.debug(EELFLoggerDelegate.debugLogger,methodName + " received status=" + status );\r
152                 \r
153                 return;\r
154         }\r
155    \r
156    /* (non-Javadoc)\r
157     * @see org.openecomp.vid.mso.MsoRestInterfaceIfc#Delete(java.lang.Object, org.openecomp.vid.mso.rest.RequestDetails, java.lang.String, java.lang.String, org.openecomp.vid.mso.RestObject)\r
158     */\r
159    @SuppressWarnings("unchecked")\r
160          public <T> void Delete(T t, RequestDetails r, String sourceID, String path, RestObject<T> restObject) {\r
161          \r
162                 String methodName = "Delete";\r
163                 String url="";\r
164                 Response cres = null;\r
165                 \r
166                 logger.debug(EELFLoggerDelegate.debugLogger,dateFormat.format(new Date()) + "<== " +  methodName + " start");\r
167                 logRequest (r);\r
168 \r
169                 try {\r
170                         initRestClient();\r
171                         \r
172                         url = SystemProperties.getProperty(MsoProperties.MSO_SERVER_URL) + path;\r
173                         logger.debug(EELFLoggerDelegate.debugLogger,dateFormat.format(new Date()) + " methodName sending request to: " + url);\r
174         \r
175                         cres = client.target(url)\r
176                                          .request()\r
177                                  .accept("application/json")\r
178                                  .headers(commonHeaders)\r
179                                  //.entity(r)\r
180                                  .build("DELETE", Entity.entity(r, MediaType.APPLICATION_JSON)).invoke();\r
181                                //  .method("DELETE", Entity.entity(r, MediaType.APPLICATION_JSON));\r
182                                  //.delete(Entity.entity(r, MediaType.APPLICATION_JSON));\r
183                         \r
184                         int status = cres.getStatus();\r
185                 restObject.setStatusCode (status);\r
186                 \r
187                         if (status == 404) { // resource not found\r
188                                 String msg = "Resource does not exist...: " + cres.getStatus();\r
189                                 logger.debug(EELFLoggerDelegate.debugLogger,dateFormat.format(new Date()) + "<== " + msg);\r
190                         } else if (status == 200  || status == 204){\r
191                                 logger.debug(EELFLoggerDelegate.debugLogger,dateFormat.format(new Date()) + "<== " + "Resource " + url + " deleted");\r
192                         } else if (status == 202) {\r
193                                 String msg = "Delete in progress: " + status;\r
194                                 logger.debug(EELFLoggerDelegate.debugLogger,dateFormat.format(new Date()) + "<== " + msg);\r
195                         }\r
196                         else {\r
197                                 String msg = "Deleting Resource failed: " + status;\r
198                                         logger.debug(EELFLoggerDelegate.debugLogger,dateFormat.format(new Date()) + "<== " + msg);\r
199                         }\r
200                         \r
201                         try {\r
202                                 t = (T) cres.readEntity(t.getClass());\r
203                                 restObject.set(t);\r
204             }\r
205             catch ( Exception e ) {\r
206                 logger.debug(EELFLoggerDelegate.debugLogger,dateFormat.format(new Date()) + "<== " + methodName + " No response entity, this is probably ok, e="\r
207                                 + e.getMessage());\r
208             }\r
209    \r
210         } \r
211                 catch (Exception e)\r
212         {\r
213                  logger.debug(EELFLoggerDelegate.debugLogger,dateFormat.format(new Date()) + "<== " + methodName + " with url="+url+ ", Exception: " + e.toString());\r
214                  throw e;\r
215         \r
216         }\r
217         }\r
218         \r
219         /* (non-Javadoc)\r
220          * @see org.openecomp.vid.mso.MsoRestInterfaceIfc#Post(java.lang.Object, org.openecomp.vid.mso.rest.RequestDetails, java.lang.String, java.lang.String, org.openecomp.vid.mso.RestObject)\r
221          */\r
222         @SuppressWarnings("unchecked")\r
223         public <T> void Post(T t, RequestDetails r, String sourceID, String path, RestObject<T> restObject) throws Exception {\r
224 \r
225         String methodName = "Post";\r
226         String url="";\r
227         \r
228         logger.debug(EELFLoggerDelegate.debugLogger,dateFormat.format(new Date()) + "<== " +  methodName + " start");\r
229        \r
230         logRequest (r);\r
231         try {\r
232             \r
233             initRestClient();    \r
234     \r
235             url = SystemProperties.getProperty(MsoProperties.MSO_SERVER_URL) + path;\r
236             logger.debug(EELFLoggerDelegate.debugLogger,dateFormat.format(new Date()) + "<== " +  methodName + " sending request to url= " + url);\r
237             // Change the content length\r
238             final Response cres = client.target(url)\r
239                  .request()\r
240                  .accept("application/json")\r
241                          .headers(commonHeaders)\r
242                  //.header("content-length", 201)\r
243                  //.header("X-FromAppId",  sourceID)\r
244                  .post(Entity.entity(r, MediaType.APPLICATION_JSON));\r
245             \r
246             try {\r
247                                 t = (T) cres.readEntity(t.getClass());\r
248                                 restObject.set(t);\r
249             }\r
250             catch ( Exception e ) {\r
251                 logger.debug(EELFLoggerDelegate.debugLogger,dateFormat.format(new Date()) + "<== " + methodName + " No response entity, this is probably ok, e="\r
252                                 + e.getMessage());\r
253             }\r
254 \r
255             int status = cres.getStatus();\r
256                 restObject.setStatusCode (status);\r
257                 \r
258                 if ( status >= 200 && status <= 299 ) {\r
259                         logger.info(EELFLoggerDelegate.errorLogger, dateFormat.format(new Date()) + "<== " + methodName + " REST api POST was successful!");\r
260                         logger.debug(EELFLoggerDelegate.debugLogger,dateFormat.format(new Date()) + "<== " + methodName + " REST api POST was successful!");\r
261                 \r
262              } else {\r
263                  logger.debug(EELFLoggerDelegate.debugLogger,dateFormat.format(new Date()) + "<== " + methodName + " with status="+status+", url="+url);\r
264              }    \r
265    \r
266         } catch (Exception e)\r
267         {\r
268                  logger.debug(EELFLoggerDelegate.debugLogger,dateFormat.format(new Date()) + "<== " + methodName + " with url="+url+ ", Exception: " + e.toString());\r
269                  throw e;\r
270         \r
271         }\r
272     }\r
273 \r
274         \r
275     /**\r
276      * Gets the single instance of MsoRestInterface.\r
277      *\r
278      * @param <T> the generic type\r
279      * @param clazz the clazz\r
280      * @return single instance of MsoRestInterface\r
281      * @throws IllegalAccessException the illegal access exception\r
282      * @throws InstantiationException the instantiation exception\r
283      */\r
284     public <T> T getInstance(Class<T> clazz) throws IllegalAccessException, InstantiationException\r
285         {\r
286                 return clazz.newInstance();\r
287         } \r
288         \r
289     \r
290 }\r