[PORTAL-16 PORTAL-18] Widget ms; staging
[portal.git] / ecomp-portal-BE-common / src / main / java / org / openecomp / portalapp / portal / utils / EcompPortalUtils.java
index adf36b2..48c2dbe 100644 (file)
-/*-\r
- * ================================================================================\r
- * ECOMP Portal\r
- * ================================================================================\r
- * Copyright (C) 2017 AT&T Intellectual Property\r
- * ================================================================================\r
- * Licensed under the Apache License, Version 2.0 (the "License");\r
- * you may not use this file except in compliance with the License.\r
- * You may obtain a copy of the License at\r
- * \r
- *      http://www.apache.org/licenses/LICENSE-2.0\r
- * \r
- * Unless required by applicable law or agreed to in writing, software\r
- * distributed under the License is distributed on an "AS IS" BASIS,\r
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\r
- * See the License for the specific language governing permissions and\r
- * limitations under the License.\r
- * ================================================================================\r
- */\r
-package org.openecomp.portalapp.portal.utils;\r
-\r
-import java.io.PrintWriter;\r
-import java.io.StringWriter;\r
-import java.net.InetAddress;\r
-import java.net.UnknownHostException;\r
-import java.text.SimpleDateFormat;\r
-import java.util.ArrayList;\r
-import java.util.Date;\r
-import java.util.List;\r
-\r
-import javax.servlet.http.HttpServletResponse;\r
-\r
-import org.hibernate.Session;\r
-import org.hibernate.Transaction;\r
-import org.openecomp.portalapp.portal.domain.EPUser;\r
-import org.openecomp.portalapp.portal.logging.format.EPAppMessagesEnum;\r
-import org.openecomp.portalapp.portal.logging.logic.EPLogUtil;\r
-import org.openecomp.portalsdk.core.logging.logic.EELFLoggerDelegate;\r
-import org.openecomp.portalsdk.core.util.SystemProperties;\r
-import org.slf4j.MDC;\r
-\r
-import com.fasterxml.jackson.core.JsonProcessingException;\r
-import com.fasterxml.jackson.databind.ObjectMapper;\r
-\r
-public class EcompPortalUtils {\r
-\r
-       private static EELFLoggerDelegate logger = EELFLoggerDelegate.getLogger(EcompPortalUtils.class);\r
-\r
-       /**\r
-        * @param orgUserId\r
-        * @return true if orgUserId is not empty and contains only alphanumeric,\r
-        *         false otherwise\r
-        */\r
-       public static boolean legitimateUserId(String orgUserId) {\r
-               return orgUserId.matches("^[a-zA-Z0-9]+$");\r
-       }\r
-\r
-       /**\r
-        * Splits the string into a list of tokens using the specified regular\r
-        * expression\r
-        * \r
-        * @param source\r
-        * @param regex\r
-        * @return List of tokens split from the source\r
-        */\r
-       public static List<String> parsingByRegularExpression(String source, String regex) {\r
-               List<String> tokens = new ArrayList<String>();\r
-               if (source != null && source.length() > 0) {\r
-                       String[] parsed = source.split(regex);\r
-                       for (String token : parsed) {\r
-                               if (token.length() > 0) {\r
-                                       tokens.add(token);\r
-                               }\r
-                       }\r
-               }\r
-               return tokens;\r
-       }\r
-\r
-       /**\r
-        * Builds a JSON object with error code and message information.\r
-        * \r
-        * @param errorCode\r
-        * @param errorMessage\r
-        * @return JSON object as a String\r
-        */\r
-       public static String jsonErrorMessageResponse(int errorCode, String errorMessage) {\r
-               return "{\"error\":{\"code\":" + errorCode + "," + "\"message\":\"" + errorMessage + "\"}}";\r
-       }\r
-\r
-       /**\r
-        * Builds a JSON object with the specified message\r
-        * \r
-        * @param message\r
-        * @return JSON object as a String\r
-        */\r
-       public static String jsonMessageResponse(String message) {\r
-               return String.format("{\"message\":\"%s\"}", message);\r
-       }\r
-\r
-       /**\r
-        * Serializes the specified object as JSON and writes the result to the\r
-        * debug log. If serialization fails, logs a message to the error logger.\r
-        * \r
-        * @param logger\r
-        *            Logger for the class where the object was built; the logger\r
-        *            carries the class name.\r
-        * @param source\r
-        *            First portion of the log message\r
-        * @param msg\r
-        *            Second portion of the log message\r
-        * @param obj\r
-        *            Object to serialize as JSON\r
-        */\r
-       public static void logAndSerializeObject(EELFLoggerDelegate logger, String source, String msg, Object obj) {\r
-               try {\r
-                       String objectAsJson = new ObjectMapper().writeValueAsString(obj);\r
-                       logger.debug(EELFLoggerDelegate.debugLogger,\r
-                                       String.format("source= [%s]; %s [%s];", source, msg, objectAsJson));\r
-               } catch (JsonProcessingException e) {\r
-                       logger.warn(EELFLoggerDelegate.errorLogger, "logAndSerializedObject failed to serialize", e);\r
-                       EPLogUtil.logEcompError(logger, EPAppMessagesEnum.BeInvalidJsonInput, e);\r
-               } catch (Exception e) {\r
-                       logger.error(EELFLoggerDelegate.errorLogger, "logAndSerializedObject failed", e);\r
-                       EPLogUtil.logEcompError(logger, EPAppMessagesEnum.BeInvalidJsonInput, e);\r
-               }\r
-       }\r
-\r
-       /**\r
-        * Serializes the specified object as JSON and writes the result to the\r
-        * debug log. If serialization fails, logs a message to the error logger.\r
-        * \r
-        * @param source\r
-        *            First portion of the log message\r
-        * @param msg\r
-        *            Second portion of the log message\r
-        * @param obj\r
-        *            Object to serialize as JSON\r
-        */\r
-       public static void logAndSerializeObject(String source, String msg, Object obj) {\r
-               logAndSerializeObject(logger, source, msg, obj);\r
-       }\r
-\r
-       public static void rollbackTransaction(Transaction transaction, String errorMessage) {\r
-               logger.error(EELFLoggerDelegate.errorLogger, errorMessage);\r
-               try {\r
-                       if (transaction != null) {\r
-                               transaction.rollback();\r
-                       }\r
-               } catch (Exception e) {\r
-                       EPLogUtil.logEcompError(logger, EPAppMessagesEnum.BeExecuteRollbackError, e);\r
-                       logger.error(EELFLoggerDelegate.errorLogger, "Exception occurred while performing a rollback transaction",\r
-                                       e);\r
-               }\r
-       }\r
-\r
-       public static void closeLocalSession(Session localSession, String errorMessage) {\r
-               logger.error(EELFLoggerDelegate.errorLogger, errorMessage);\r
-               try {\r
-                       if (localSession != null) {\r
-                               localSession.close();\r
-                       }\r
-               } catch (Exception e) {\r
-                       EPLogUtil.logEcompError(logger, EPAppMessagesEnum.BeDaoCloseSessionError, e);\r
-                       logger.error(EELFLoggerDelegate.errorLogger, errorMessage + ", closeLocalSession exception", e);\r
-               }\r
-       }\r
-\r
-       // TODO: GLOBAL_LOGIN_URL is the same as in SessionTimeoutInterceptor.\r
-       // It should be defined in SystemProperties.\r
-       private static final String GLOBAL_LOGIN_URL = "global-login-url";\r
-\r
-       /**\r
-        * Set response status to Unauthorized if user == null and to Forbidden in\r
-        * all (!) other cases. Logging is not performed if invocator == null\r
-        * \r
-        * @param user\r
-        * @param response\r
-        * @param invocator\r
-        *            - may be null\r
-        */\r
-       public static void setBadPermissions(EPUser user, HttpServletResponse response, String invocator) {\r
-               if (user == null) {\r
-                       String loginUrl = SystemProperties.getProperty(EPCommonSystemProperties.LOGIN_URL_NO_RET_VAL);\r
-                       response.setHeader(GLOBAL_LOGIN_URL, loginUrl);\r
-                       response.setStatus(HttpServletResponse.SC_UNAUTHORIZED);\r
-                       MDC.put(EPCommonSystemProperties.RESPONSE_CODE, Integer.toString(HttpServletResponse.SC_UNAUTHORIZED));\r
-               } else {\r
-                       response.setStatus(HttpServletResponse.SC_FORBIDDEN);\r
-                       MDC.put(EPCommonSystemProperties.RESPONSE_CODE, Integer.toString(HttpServletResponse.SC_FORBIDDEN));\r
-               }\r
-               if (invocator != null) {\r
-                       logger.warn(EELFLoggerDelegate.errorLogger,\r
-                                       invocator + ", permissions problem, response status = " + response.getStatus());\r
-               }\r
-       }\r
-\r
-       public static int getExternalAppResponseCode() {\r
-               String responseCode = MDC.get(EPCommonSystemProperties.EXTERNAL_API_RESPONSE_CODE);\r
-               int responseCodeInt = 0;\r
-               try {\r
-                       if (responseCode != null && responseCode != "") {\r
-                               responseCodeInt = Integer.valueOf(responseCode);\r
-                       }\r
-               } catch (Exception e) {\r
-                       logger.error(EELFLoggerDelegate.errorLogger,\r
-                                       "Exception occurred in getResponseCode(). Details: " + EcompPortalUtils.getStackTrace(e));\r
-               }\r
-               return responseCodeInt;\r
-       }\r
-\r
-       // This method might be just for testing purposes.\r
-       public static void setExternalAppResponseCode(int responseCode) {\r
-               try {\r
-                       String responseCodeString = String.valueOf(responseCode);\r
-                       MDC.put(EPCommonSystemProperties.EXTERNAL_API_RESPONSE_CODE, responseCodeString);\r
-               } catch (Exception e) {\r
-                       logger.error(EELFLoggerDelegate.errorLogger,\r
-                                       "Exception occurred in setResponseCode(). Details: " + EcompPortalUtils.getStackTrace(e));\r
-               }\r
-       }\r
-\r
-       public static String getHTTPStatusString(int httpStatusCode) {\r
-               String httpStatusString = "unknown_error";\r
-               try {\r
-                       httpStatusString = org.springframework.http.HttpStatus.valueOf(httpStatusCode).name();\r
-                       if (httpStatusString != null) {\r
-                               httpStatusString = httpStatusString.toLowerCase();\r
-                       }\r
-               } catch (Exception e) {\r
-                       logger.error(EELFLoggerDelegate.errorLogger,\r
-                                       "Exception occurred in getHTTPStatusString(). Details: " + EcompPortalUtils.getStackTrace(e));\r
-               }\r
-               return httpStatusString;\r
-       }\r
-\r
-       public static String getFEErrorString(Boolean internal, int responseCode) {\r
-               // Return a String like the following:\r
-               // "Internal Ecomp Error: 500 internal_server_error" or\r
-               // "External App Error: 404 not_found"\r
-               // TODO: create our own Ecomp error codes, starting with 1000 and up.\r
-               String responseString = "";\r
-               String internalExternalString = internal ? "Ecomp Error: " : "App Error: ";\r
-               String httpStatusString = "unknown_error";\r
-               try {\r
-                       if (responseCode < 1000) {\r
-                               httpStatusString = getHTTPStatusString(responseCode);\r
-                       }\r
-               } catch (Exception e) {\r
-                       logger.error(EELFLoggerDelegate.errorLogger,\r
-                                       "Exception occurred in getFEErrorString(). Details: " + EcompPortalUtils.getStackTrace(e));\r
-               }\r
-               responseString = internalExternalString + responseCode + " " + httpStatusString;\r
-               return responseString;\r
-       }\r
-\r
-       public static boolean isProductionBuild() {\r
-               boolean productionBuild = true;\r
-               String epVersion = EcompVersion.buildNumber;\r
-               if (epVersion != null) {\r
-                       int buildNum = epVersion.lastIndexOf('.');\r
-                       if (buildNum > 0) {\r
-                               int buildNumber = Integer.parseInt(epVersion.substring(buildNum + 1));\r
-                               if (buildNumber < 3000) // Production versions are 3000+, (ie\r
-                                                                               // 1.0.3003)\r
-                               {\r
-                                       productionBuild = false;\r
-                               }\r
-                       }\r
-               }\r
-               return productionBuild;\r
-       }\r
-\r
-       private static final Object stackTraceLock = new Object();\r
-\r
-       public static String getStackTrace(Throwable t) {\r
-               synchronized (stackTraceLock) {\r
-                       StringWriter sw = new StringWriter();\r
-                       PrintWriter pw = new PrintWriter(sw);\r
-                       t.printStackTrace(pw);\r
-                       return sw.toString();\r
-               }\r
-       }\r
-\r
-       public static String getMyIpAdddress() {\r
-               InetAddress ip;\r
-               String localIp;\r
-               try {\r
-                       ip = InetAddress.getLocalHost();\r
-                       localIp = ip.getHostAddress();\r
-               } catch (UnknownHostException e) {\r
-                       localIp = "unknown";\r
-                       logger.error(EELFLoggerDelegate.errorLogger, EcompPortalUtils.getStackTrace(e));\r
-               }\r
-               return localIp;\r
-       }\r
-\r
-       public static String getMyHostName() {\r
-               InetAddress ip;\r
-               String hostName;\r
-               try {\r
-                       ip = InetAddress.getLocalHost();\r
-                       hostName = ip.getHostName();\r
-               } catch (UnknownHostException e) {\r
-                       hostName = "unknown";\r
-                       logger.error(EELFLoggerDelegate.errorLogger, EcompPortalUtils.getStackTrace(e));\r
-               }\r
-               return hostName;\r
-       }\r
-\r
-       /* return a default property if the expected one is not available */\r
-       public static String getPropertyOrDefault(String property, String defaultValue) {\r
-               return ((null == SystemProperties.getProperty(property) || SystemProperties.getProperty(property).equals(""))\r
-                               ? defaultValue : SystemProperties.getProperty(property));\r
-       }\r
-\r
-       public static void calculateDateTimeDifferenceForLog(String beginDateTime, String endDateTime) {\r
-               if (beginDateTime != null && endDateTime != null) {\r
-                       try {\r
-                               SimpleDateFormat ecompLogDateFormat = new SimpleDateFormat("yyyy-MM-dd'T'HH:mm:ss.SSSXXX");\r
-\r
-                               Date beginDate = ecompLogDateFormat.parse(beginDateTime);\r
-                               Date endDate = ecompLogDateFormat.parse(endDateTime);\r
-                               String timeDifference = String.format("%d", endDate.getTime() - beginDate.getTime());\r
-                               MDC.put(SystemProperties.MDC_TIMER, timeDifference);\r
-                       } catch (Exception e) {\r
-                               logger.error(EELFLoggerDelegate.errorLogger, EcompPortalUtils.getStackTrace(e));\r
-                       }\r
-               }\r
-       }\r
-\r
-}\r
+/*-
+ * ================================================================================
+ * ECOMP Portal
+ * ================================================================================
+ * Copyright (C) 2017 AT&T Intellectual Property
+ * ================================================================================
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ * 
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ * 
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ * ================================================================================
+ */
+package org.openecomp.portalapp.portal.utils;
+
+import java.io.PrintWriter;
+import java.io.StringWriter;
+import java.net.InetAddress;
+import java.net.UnknownHostException;
+import java.text.SimpleDateFormat;
+import java.util.ArrayList;
+import java.util.Date;
+import java.util.List;
+
+import javax.servlet.http.HttpServletResponse;
+
+import org.hibernate.Session;
+import org.hibernate.Transaction;
+import org.openecomp.portalapp.portal.domain.EPUser;
+import org.openecomp.portalapp.portal.logging.format.EPAppMessagesEnum;
+import org.openecomp.portalapp.portal.logging.logic.EPLogUtil;
+import org.openecomp.portalsdk.core.logging.logic.EELFLoggerDelegate;
+import org.openecomp.portalsdk.core.util.SystemProperties;
+import org.slf4j.MDC;
+
+import com.fasterxml.jackson.core.JsonProcessingException;
+import com.fasterxml.jackson.databind.ObjectMapper;
+
+public class EcompPortalUtils {
+
+       private static EELFLoggerDelegate logger = EELFLoggerDelegate.getLogger(EcompPortalUtils.class);
+
+       /**
+        * @param orgUserId
+        * @return true if orgUserId is not empty and contains only alphanumeric,
+        *         false otherwise
+        */
+       public static boolean legitimateUserId(String orgUserId) {
+               return orgUserId.matches("^[a-zA-Z0-9]+$");
+       }
+
+       /**
+        * Splits the string into a list of tokens using the specified regular
+        * expression
+        * 
+        * @param source
+        * @param regex
+        * @return List of tokens split from the source
+        */
+       public static List<String> parsingByRegularExpression(String source, String regex) {
+               List<String> tokens = new ArrayList<String>();
+               if (source != null && source.length() > 0) {
+                       String[] parsed = source.split(regex);
+                       for (String token : parsed) {
+                               if (token.length() > 0) {
+                                       tokens.add(token);
+                               }
+                       }
+               }
+               return tokens;
+       }
+
+       /**
+        * Builds a JSON object with error code and message information.
+        * 
+        * @param errorCode
+        * @param errorMessage
+        * @return JSON object as a String
+        */
+       public static String jsonErrorMessageResponse(int errorCode, String errorMessage) {
+               return "{\"error\":{\"code\":" + errorCode + "," + "\"message\":\"" + errorMessage + "\"}}";
+       }
+
+       /**
+        * Builds a JSON object with the specified message
+        * 
+        * @param message
+        * @return JSON object as a String
+        */
+       public static String jsonMessageResponse(String message) {
+               return String.format("{\"message\":\"%s\"}", message);
+       }
+
+       /**
+        * Serializes the specified object as JSON and writes the result to the
+        * debug log. If serialization fails, logs a message to the error logger.
+        * 
+        * @param logger
+        *            Logger for the class where the object was built; the logger
+        *            carries the class name.
+        * @param source
+        *            First portion of the log message
+        * @param msg
+        *            Second portion of the log message
+        * @param obj
+        *            Object to serialize as JSON
+        */
+       public static void logAndSerializeObject(EELFLoggerDelegate logger, String source, String msg, Object obj) {
+               try {
+                       String objectAsJson = new ObjectMapper().writeValueAsString(obj);
+                       logger.debug(EELFLoggerDelegate.debugLogger,
+                                       String.format("source= [%s]; %s [%s];", source, msg, objectAsJson));
+               } catch (JsonProcessingException e) {
+                       logger.warn(EELFLoggerDelegate.errorLogger, "logAndSerializedObject failed to serialize", e);
+                       EPLogUtil.logEcompError(logger, EPAppMessagesEnum.BeInvalidJsonInput, e);
+               } catch (Exception e) {
+                       logger.error(EELFLoggerDelegate.errorLogger, "logAndSerializedObject failed", e);
+                       EPLogUtil.logEcompError(logger, EPAppMessagesEnum.BeInvalidJsonInput, e);
+               }
+       }
+
+       /**
+        * Serializes the specified object as JSON and writes the result to the
+        * debug log. If serialization fails, logs a message to the error logger.
+        * 
+        * @param source
+        *            First portion of the log message
+        * @param msg
+        *            Second portion of the log message
+        * @param obj
+        *            Object to serialize as JSON
+        */
+       public static void logAndSerializeObject(String source, String msg, Object obj) {
+               logAndSerializeObject(logger, source, msg, obj);
+       }
+
+       public static void rollbackTransaction(Transaction transaction, String errorMessage) {
+               logger.error(EELFLoggerDelegate.errorLogger, errorMessage);
+               try {
+                       if (transaction != null) {
+                               transaction.rollback();
+                       }
+               } catch (Exception e) {
+                       EPLogUtil.logEcompError(logger, EPAppMessagesEnum.BeExecuteRollbackError, e);
+                       logger.error(EELFLoggerDelegate.errorLogger, "Exception occurred while performing a rollback transaction",
+                                       e);
+               }
+       }
+
+       public static void closeLocalSession(Session localSession, String errorMessage) {
+               logger.error(EELFLoggerDelegate.errorLogger, errorMessage);
+               try {
+                       if (localSession != null) {
+                               localSession.close();
+                       }
+               } catch (Exception e) {
+                       EPLogUtil.logEcompError(logger, EPAppMessagesEnum.BeDaoCloseSessionError, e);
+                       logger.error(EELFLoggerDelegate.errorLogger, errorMessage + ", closeLocalSession exception", e);
+               }
+       }
+
+       // TODO: GLOBAL_LOGIN_URL is the same as in SessionTimeoutInterceptor.
+       // It should be defined in SystemProperties.
+       private static final String GLOBAL_LOGIN_URL = "global-login-url";
+
+       /**
+        * Set response status to Unauthorized if user == null and to Forbidden in
+        * all (!) other cases. Logging is not performed if invocator == null
+        * 
+        * @param user
+        * @param response
+        * @param invocator
+        *            - may be null
+        */
+       public static void setBadPermissions(EPUser user, HttpServletResponse response, String invocator) {
+               if (user == null) {
+                       String loginUrl = SystemProperties.getProperty(EPCommonSystemProperties.LOGIN_URL_NO_RET_VAL);
+                       response.setHeader(GLOBAL_LOGIN_URL, loginUrl);
+                       response.setStatus(HttpServletResponse.SC_UNAUTHORIZED);
+                       MDC.put(EPCommonSystemProperties.RESPONSE_CODE, Integer.toString(HttpServletResponse.SC_UNAUTHORIZED));
+               } else {
+                       response.setStatus(HttpServletResponse.SC_FORBIDDEN);
+                       MDC.put(EPCommonSystemProperties.RESPONSE_CODE, Integer.toString(HttpServletResponse.SC_FORBIDDEN));
+               }
+               if (invocator != null) {
+                       logger.warn(EELFLoggerDelegate.errorLogger,
+                                       invocator + ", permissions problem, response status = " + response.getStatus());
+               }
+       }
+
+       public static int getExternalAppResponseCode() {
+               String responseCode = MDC.get(EPCommonSystemProperties.EXTERNAL_API_RESPONSE_CODE);
+               int responseCodeInt = 0;
+               try {
+                       if (responseCode != null && responseCode != "") {
+                               responseCodeInt = Integer.valueOf(responseCode);
+                       }
+               } catch (Exception e) {
+                       logger.error(EELFLoggerDelegate.errorLogger,
+                                       "Exception occurred in getResponseCode(). Details: " + EcompPortalUtils.getStackTrace(e));
+               }
+               return responseCodeInt;
+       }
+
+       // This method might be just for testing purposes.
+       public static void setExternalAppResponseCode(int responseCode) {
+               try {
+                       String responseCodeString = String.valueOf(responseCode);
+                       MDC.put(EPCommonSystemProperties.EXTERNAL_API_RESPONSE_CODE, responseCodeString);
+               } catch (Exception e) {
+                       logger.error(EELFLoggerDelegate.errorLogger,
+                                       "Exception occurred in setResponseCode(). Details: " + EcompPortalUtils.getStackTrace(e));
+               }
+       }
+
+       public static String getHTTPStatusString(int httpStatusCode) {
+               String httpStatusString = "unknown_error";
+               try {
+                       httpStatusString = org.springframework.http.HttpStatus.valueOf(httpStatusCode).name();
+                       if (httpStatusString != null) {
+                               httpStatusString = httpStatusString.toLowerCase();
+                       }
+               } catch (Exception e) {
+                       logger.error(EELFLoggerDelegate.errorLogger,
+                                       "Exception occurred in getHTTPStatusString(). Details: " + EcompPortalUtils.getStackTrace(e));
+               }
+               return httpStatusString;
+       }
+
+       public static String getFEErrorString(Boolean internal, int responseCode) {
+               // Return a String like the following:
+               // "Internal Ecomp Error: 500 internal_server_error" or
+               // "External App Error: 404 not_found"
+               // TODO: create our own Ecomp error codes, starting with 1000 and up.
+               String responseString = "";
+               String internalExternalString = internal ? "Ecomp Error: " : "App Error: ";
+               String httpStatusString = "unknown_error";
+               try {
+                       if (responseCode < 1000) {
+                               httpStatusString = getHTTPStatusString(responseCode);
+                       }
+               } catch (Exception e) {
+                       logger.error(EELFLoggerDelegate.errorLogger,
+                                       "Exception occurred in getFEErrorString(). Details: " + EcompPortalUtils.getStackTrace(e));
+               }
+               responseString = internalExternalString + responseCode + " " + httpStatusString;
+               return responseString;
+       }
+
+       public static boolean isProductionBuild() {
+               boolean productionBuild = true;
+               String epVersion = EcompVersion.buildNumber;
+               if (epVersion != null) {
+                       int buildNum = epVersion.lastIndexOf('.');
+                       if (buildNum > 0) {
+                               int buildNumber = Integer.parseInt(epVersion.substring(buildNum + 1));
+                               if (buildNumber < 3000) // Production versions are 3000+, (ie
+                                                                               // 1.0.3003)
+                               {
+                                       productionBuild = false;
+                               }
+                       }
+               }
+               return productionBuild;
+       }
+
+       private static final Object stackTraceLock = new Object();
+
+       public static String getStackTrace(Throwable t) {
+               synchronized (stackTraceLock) {
+                       StringWriter sw = new StringWriter();
+                       PrintWriter pw = new PrintWriter(sw);
+                       t.printStackTrace(pw);
+                       return sw.toString();
+               }
+       }
+
+       public static String getMyIpAdddress() {
+               InetAddress ip;
+               String localIp;
+               try {
+                       ip = InetAddress.getLocalHost();
+                       localIp = ip.getHostAddress();
+               } catch (UnknownHostException e) {
+                       localIp = "unknown";
+                       logger.error(EELFLoggerDelegate.errorLogger, EcompPortalUtils.getStackTrace(e));
+               }
+               return localIp;
+       }
+
+       public static String getMyHostName() {
+               InetAddress ip;
+               String hostName;
+               try {
+                       ip = InetAddress.getLocalHost();
+                       hostName = ip.getHostName();
+               } catch (UnknownHostException e) {
+                       hostName = "unknown";
+                       logger.error(EELFLoggerDelegate.errorLogger, EcompPortalUtils.getStackTrace(e));
+               }
+               return hostName;
+       }
+
+       /* return a default property if the expected one is not available */
+       public static String getPropertyOrDefault(String property, String defaultValue) {
+               return ((null == SystemProperties.getProperty(property) || SystemProperties.getProperty(property).equals(""))
+                               ? defaultValue : SystemProperties.getProperty(property));
+       }
+
+       /**
+        * Calculates the time duration of a function call for logging purpose. It
+        * stores the result by using "MDC.put(SystemProperties.MDC_TIMER,
+        * timeDifference);" It is important to call
+        * "MDC.remove(SystemProperties.MDC_TIMER);" after this method call to clean
+        * up the record in MDC
+        *
+        * @param beginDateTime
+        *            the given begin time for the call
+        * @param endDateTime
+        *            the given end time for the call
+        * 
+        */
+       public static void calculateDateTimeDifferenceForLog(String beginDateTime, String endDateTime) {
+               if (beginDateTime != null && endDateTime != null) {
+                       try {
+                               SimpleDateFormat ecompLogDateFormat = new SimpleDateFormat("yyyy-MM-dd'T'HH:mm:ss.SSSXXX");
+
+                               Date beginDate = ecompLogDateFormat.parse(beginDateTime);
+                               Date endDate = ecompLogDateFormat.parse(endDateTime);
+                               String timeDifference = String.format("%d", endDate.getTime() - beginDate.getTime());
+                               MDC.put(SystemProperties.MDC_TIMER, timeDifference);
+                       } catch (Exception e) {
+                               logger.error(EELFLoggerDelegate.errorLogger, EcompPortalUtils.getStackTrace(e));
+                       }
+               }
+       }
+
+}