Merge "Sonar: Reduce cyclomatic complexity"
[portal.git] / ecomp-portal-BE-common / src / main / java / org / onap / portalapp / portal / service / EPAppCommonServiceImpl.java
index 8c055b2..bbb8382 100644 (file)
@@ -4,6 +4,8 @@
  * ===================================================================
  * Copyright (C) 2017 AT&T Intellectual Property. All rights reserved.
  * ===================================================================
+ * Modifications Copyright (c) 2019 Samsung
+ * ===================================================================
  *
  * Unless otherwise specified, all software contained herein is licensed
  * under the Apache License, Version 2.0 (the "License");
@@ -33,7 +35,7 @@
  *
  * ============LICENSE_END============================================
  *
- * ECOMP is a trademark and service mark of AT&T Intellectual Property.
+ * 
  */
 package org.onap.portalapp.portal.service;
 
@@ -47,6 +49,7 @@ import java.util.LinkedList;
 import java.util.List;
 import java.util.Map;
 import java.util.Set;
+import java.util.UUID;
 
 import javax.annotation.PostConstruct;
 import javax.servlet.http.HttpServletResponse;
@@ -82,7 +85,6 @@ import org.onap.portalapp.portal.transport.FieldsValidator;
 import org.onap.portalapp.portal.transport.FunctionalMenuItem;
 import org.onap.portalapp.portal.transport.LocalRole;
 import org.onap.portalapp.portal.transport.OnboardingApp;
-import org.onap.portalapp.portal.ueb.EPUebHelper;
 import org.onap.portalapp.portal.utils.EPCommonSystemProperties;
 import org.onap.portalapp.portal.utils.EcompPortalUtils;
 import org.onap.portalsdk.core.logging.logic.EELFLoggerDelegate;
@@ -100,7 +102,6 @@ import com.att.nsa.cambria.client.CambriaClient.CambriaApiException;
 import com.att.nsa.cambria.client.CambriaClientBuilders;
 import com.att.nsa.cambria.client.CambriaIdentityManager;
 import com.att.nsa.cambria.client.CambriaTopicManager;
-import com.google.common.primitives.Ints;
 
 public class EPAppCommonServiceImpl implements EPAppService {
 
@@ -119,9 +120,7 @@ public class EPAppCommonServiceImpl implements EPAppService {
        @Autowired
        protected SessionFactory sessionFactory;
        @Autowired
-       private DataAccessService dataAccessService;
-       @Autowired
-       private EPUebHelper epUebHelper;        
+       private DataAccessService dataAccessService;    
 
        @PostConstruct
        private void init() {
@@ -146,12 +145,15 @@ public class EPAppCommonServiceImpl implements EPAppService {
                                EPLogUtil.logEcompError(logger, EPAppMessagesEnum.BeDaoSystemError, e);
                                return null;
                        }
+                       
                } else {
                        logger.error(EELFLoggerDelegate.errorLogger,
                                        "getUserAsAdminApps: only Account Admin may invoke this function!");
                        return new ArrayList<EPApp>();
                }
        }
+       
+       
 
        @Override
        public List<EPApp> getUserByOrgUserIdAsAdminApps(String orgUserId) {
@@ -198,7 +200,7 @@ public class EPAppCommonServiceImpl implements EPAppService {
                        ecompApp.setUrl(app.getUrl());
                        ecompApp.setAlternateUrl(app.getAlternateUrl());
                        ecompApp.setUebTopicName(app.getUebTopicName());
-                       ecompApp.setUebKey(app.getUebKey());
+                       //ecompApp.setUebKey(app.getUebKey());
                        ecompApp.setUebSecret(app.getUebSecret());
                        ecompApp.setEnabled(app.getEnabled());
                        ecompApp.setCentralAuth(app.getCentralAuth());
@@ -219,25 +221,66 @@ public class EPAppCommonServiceImpl implements EPAppService {
                }
        }
 
+       
+       
        @SuppressWarnings("unchecked")
        @Override
        public List<AppIdAndNameTransportModel> getAdminApps(EPUser user) {
-               if (adminRolesService.isAccountAdmin(user)) {
-                       String format = "SELECT app.APP_ID, app.APP_NAME, app.APP_TYPE FROM FN_APP app inner join FN_USER_ROLE userrole ON userrole.APP_ID=app.APP_ID "
-                                       + "where userrole.USER_ID = %d AND userrole.ROLE_ID=" + ACCOUNT_ADMIN_ROLE_ID
-                                       + " AND (app.ENABLED = 'Y' OR app.APP_ID=1)";
-                       String sql = String.format(format, user.getId());
-                       // sql += " AND app.APP_REST_ENDPOINT IS NOT NULL AND
-                       // app.APP_REST_ENDPOINT <> ''";
-                       logQuery(sql);
+
+               if (adminRolesService.isAccountAdmin(user) && adminRolesService.isRoleAdmin(user)) {
+                       final Map<String, Long> params = new HashMap<>();
+                       params.put("userId", user.getId());
+                       List applicationRoleswithAccountandRoleadmin = dataAccessService
+                                       .executeNamedQuery("getApplicationsofTheUserwithAdminAndRoleAdmin", params, null);
                        try {
-                               return dataAccessService.executeSQLQuery(sql, AppIdAndNameTransportModel.class, null);
+                               return applicationRoleswithAccountandRoleadmin;
                        } catch (Exception e) {
                                EPLogUtil.logEcompError(logger, EPAppMessagesEnum.BeDaoSystemError, e);
                                logger.error(EELFLoggerDelegate.errorLogger,
-                                               "Exception occurred while fetching the adminApps for user " + user.getLoginId(), e);
+                                               "Exception occurred while fetching the list of user who has type account and role approver "
+                                                               + user.getLoginId(),
+                                               e);
+                       }
+               }
+
+               else {
+                       if (adminRolesService.isAccountAdmin(user)) {
+                               String format = "SELECT app.APP_ID, app.APP_NAME, app.APP_TYPE FROM FN_APP app inner join FN_USER_ROLE userrole ON userrole.APP_ID=app.APP_ID "
+                                               + "where userrole.USER_ID = %d AND userrole.ROLE_ID=" + ACCOUNT_ADMIN_ROLE_ID
+                                               + " AND (app.ENABLED = 'Y' OR app.APP_ID=1)";
+                               String sql = String.format(format, user.getId());
+                               logQuery(sql);
+                               try {
+                                       return dataAccessService.executeSQLQuery(sql, AppIdAndNameTransportModel.class, null);
+                               } catch (Exception e) {
+                                       EPLogUtil.logEcompError(logger, EPAppMessagesEnum.BeDaoSystemError, e);
+                                       logger.error(EELFLoggerDelegate.errorLogger,
+                                                       "Exception occurred while fetching the adminApps for user " + user.getLoginId(), e);
+                               }
+
+                       }
+
+                       if (adminRolesService.isRoleAdmin(user)) {
+                               final Map<String, Long> params = new HashMap<>();
+                               params.put("userId", user.getId());
+                               List applicationRoles = dataAccessService.executeNamedQuery("getApplicationsofTheUserContainsApprover",
+                                               params, null);
+
+                               try {
+                                       return applicationRoles;
+                               } catch (Exception e) {
+                                       EPLogUtil.logEcompError(logger, EPAppMessagesEnum.BeDaoSystemError, e);
+                                       logger.error(EELFLoggerDelegate.errorLogger,
+                                                       "Exception occurred while fetching the list of user who has type approver "
+                                                                       + user.getLoginId(),
+                                                       e);
+                               }
+
                        }
                }
+               // sql += " AND app.APP_REST_ENDPOINT IS NOT NULL AND
+               // app.APP_REST_ENDPOINT <> ''";
+
                return new ArrayList<AppIdAndNameTransportModel>();
        }
 
@@ -447,17 +490,40 @@ public class EPAppCommonServiceImpl implements EPAppService {
 
        protected FieldsValidator onboardingAppFieldsChecker(OnboardingApp onboardingApp) {
                FieldsValidator fieldsValidator = new FieldsValidator();
+               if(onboardingApp.isCentralAuth){
                if (onboardingApp.name == null || onboardingApp.name.length() == 0 || onboardingApp.url == null
                                || onboardingApp.url.length() == 0 || onboardingApp.restrictedApp == null
                                || onboardingApp.isOpen == null || onboardingApp.isEnabled == null
-                               || (onboardingApp.id != null && onboardingApp.id.equals(ECOMP_APP_ID))
-                               // For a normal app (appType==1), these fields must be filled
+                               || (onboardingApp.id != null && ECOMP_APP_ID.equals(onboardingApp.id.toString()))
+                               // For a normal app (appType == PortalConstants.PortalAppId),
+                               // these fields must be filled
                                // in.
                                // For a restricted app (appType==2), they will be empty.
-                               || ((!onboardingApp.restrictedApp)
-                                               && (onboardingApp.username == null || onboardingApp.username.length() == 0
-                                                               || onboardingApp.appPassword == null || onboardingApp.appPassword.length() == 0))) {
+                               || ((!onboardingApp.restrictedApp) && (onboardingApp.myLoginsAppName == null
+                                               || onboardingApp.myLoginsAppName.length() == 0 || onboardingApp.myLoginsAppOwner == null
+                                               || onboardingApp.myLoginsAppOwner.length() == 0 || onboardingApp.username == null
+                                               || onboardingApp.username.length() == 0 ))) {
                        fieldsValidator.httpStatusCode = new Long(HttpServletResponse.SC_BAD_REQUEST);
+               }
+               }else{
+
+                       if (onboardingApp.name == null || onboardingApp.name.length() == 0 || onboardingApp.url == null
+                                       || onboardingApp.url.length() == 0 || onboardingApp.restrictedApp == null
+                                       || onboardingApp.isOpen == null || onboardingApp.isEnabled == null
+                                       || (onboardingApp.id != null && ECOMP_APP_ID.equals(onboardingApp.id.toString()))
+                                       // For a normal app (appType == PortalConstants.PortalAppId),
+                                       // these fields must be filled
+                                       // in.
+                                       // For a restricted app (appType==2), they will be empty.
+                                       || ((!onboardingApp.restrictedApp) && (onboardingApp.myLoginsAppName == null
+                                                       || onboardingApp.myLoginsAppName.length() == 0 || onboardingApp.myLoginsAppOwner == null
+                                                       || onboardingApp.myLoginsAppOwner.length() == 0 || onboardingApp.username == null
+                                                       || onboardingApp.username.length() == 0 || onboardingApp.appPassword == null
+                                                       || onboardingApp.appPassword.length() == 0))) {
+                               fieldsValidator.httpStatusCode = new Long(HttpServletResponse.SC_BAD_REQUEST);
+                       }
+                       
+                       
                }
                return fieldsValidator;
        }
@@ -515,8 +581,8 @@ public class EPAppCommonServiceImpl implements EPAppService {
         * (non-Javadoc)
         *
         * @see
-        * org.openecomp.portalapp.portal.service.EPAppService#getAppCatalog(
-        * org.openecomp.portalapp.portal.domain.EPUser)
+        * org.onap.portalapp.portal.service.EPAppService#getAppCatalog(
+        * org.onap.portalapp.portal.domain.EPUser)
         */
        @Override
        public List<AppCatalogItem> getUserAppCatalog(EPUser user) {
@@ -532,8 +598,8 @@ public class EPAppCommonServiceImpl implements EPAppService {
         * (non-Javadoc)
         *
         * @see
-        * org.openecomp.portalapp.portal.service.EPAppService#getAdminAppCatalog(
-        * org.openecomp.portalapp.portal.domain.EPUser)
+        * org.onap.portalapp.portal.service.EPAppService#getAdminAppCatalog(
+        * org.onap.portalapp.portal.domain.EPUser)
         */
        @Override
        public List<AppCatalogItem> getAdminAppCatalog(EPUser user) {
@@ -667,6 +733,7 @@ public class EPAppCommonServiceImpl implements EPAppService {
                List<OnboardingApp> onboardingAppsList = new ArrayList<OnboardingApp>();
                for (EPApp app : apps) {
                        OnboardingApp onboardingApp = new OnboardingApp();
+                       app.setAppPassword(EPCommonSystemProperties.APP_DISPLAY_PASSWORD);//to hide password from get request
                        createOnboardingFromApp(app, onboardingApp);
                        onboardingAppsList.add(onboardingApp);
                }
@@ -681,6 +748,7 @@ public class EPAppCommonServiceImpl implements EPAppService {
                List<OnboardingApp> onboardingAppsList = new ArrayList<OnboardingApp>();
                for (EPApp app : apps) {
                        OnboardingApp onboardingApp = new OnboardingApp();
+                       app.setAppPassword(EPCommonSystemProperties.APP_DISPLAY_PASSWORD); //to hide password from get request
                        createOnboardingFromApp(app, onboardingApp);
                        onboardingAppsList.add(onboardingApp);
                }
@@ -1066,9 +1134,79 @@ public class EPAppCommonServiceImpl implements EPAppService {
                        
                }
        }
+       
 
        protected void updateRestrictedApp(Long appId, OnboardingApp onboardingApp, FieldsValidator fieldsValidator,
                        EPUser user) {
+               synchronized (syncRests) {
+                       boolean result = false;
+                       Session localSession = null;
+                       Transaction transaction = null;
+                       try {
+                               localSession = sessionFactory.openSession();
+                               transaction = localSession.beginTransaction();
+                               EPApp app;
+                               if (appId == null) {
+                                       app = new EPApp();
+                                       /*
+                                        * In the parent class, the UEB code is responsible for generating the
+                                        * keys/secret/mailbox but UEB Messaging is not actually being used currently;
+                                        * may be used in future at which point we can just remove this method and
+                                        * depend on parent class's method So, using UUID generator to generate the
+                                        * unique key instead.
+                                        */
+                                       String uuidStr = UUID.randomUUID().toString();
+                                       String appKey = uuidStr;
+                                       String appSecret = uuidStr;
+                                       String appMailboxName = "ECOMP-PORTAL-OUTBOX";
+                                       onboardingApp.setUebTopicName(appMailboxName);
+                                       onboardingApp.setUebKey(appKey);
+                                       onboardingApp.setUebSecret(appSecret);
+                               } else {
+                                       app = (EPApp) localSession.get(EPApp.class, appId);
+                                       if (app == null || app.getId() == null) {
+                                               // App is already deleted!
+                                               transaction.commit();
+                                               localSession.close();
+                                               fieldsValidator.httpStatusCode = new Long(HttpServletResponse.SC_NOT_FOUND);
+                                               return;
+                                       }
+                               }
+                               logger.debug(EELFLoggerDelegate.debugLogger,
+                                               "updateRestrictedApp: about to call createAppFromOnboarding");
+                               createAppFromOnboarding(app, onboardingApp, localSession);
+                               logger.debug(EELFLoggerDelegate.debugLogger,
+                                               "updateRestrictedApp: finished calling createAppFromOnboarding");
+                               localSession.saveOrUpdate(app);
+                               logger.debug(EELFLoggerDelegate.debugLogger,
+                                               "updateRestrictedApp: finished calling localSession.saveOrUpdate");
+                               // Enable or disable all menu items associated with this app
+                               setFunctionalMenuItemsEnabled(localSession, onboardingApp.isEnabled, appId);
+                               logger.debug(EELFLoggerDelegate.debugLogger,
+                                               "updateRestrictedApp: finished calling setFunctionalMenuItemsEnabled");
+                               transaction.commit();
+                               logger.debug(EELFLoggerDelegate.debugLogger,
+                                               "updateRestrictedApp: finished calling transaction.commit");
+                               result = true;
+                       } catch (Exception e) {
+                               logger.error(EELFLoggerDelegate.errorLogger, "updateRestrictedApp failed", e);
+                               EPLogUtil.logEcompError(logger, EPAppMessagesEnum.BeUebRegisterOnboardingAppError, e);
+                               EPLogUtil.logEcompError(logger, EPAppMessagesEnum.BeDaoSystemError, e);
+                               EcompPortalUtils.rollbackTransaction(transaction,
+                                               "updateRestrictedApp rollback, exception = " + e.toString());
+                       } finally {
+                               EcompPortalUtils.closeLocalSession(localSession, "updateRestrictedApp");
+                       }
+                       if (!result) {
+                               fieldsValidator.httpStatusCode = new Long(HttpServletResponse.SC_INTERNAL_SERVER_ERROR);
+                       }
+               }
+
+       }
+
+       @Deprecated
+       protected void updateRestrictedAppUeb(Long appId, OnboardingApp onboardingApp, FieldsValidator fieldsValidator,
+                       EPUser user) {
                synchronized (syncRests) {
                        boolean result = false;
                        Session localSession = null;
@@ -1086,7 +1224,7 @@ public class EPAppCommonServiceImpl implements EPAppService {
                                        // name and keys to the FN_APP table. The App's mailbox
                                        // and
                                        // keys will be visible to the
-                                       // admin on the ECOMP portal.
+                                       // admin on the ONAP portal.
                                        // -------------------------------------------------------------------------------------------
                                        TopicManager topicManager = new TopicManager() {
 
@@ -1134,7 +1272,7 @@ public class EPAppCommonServiceImpl implements EPAppService {
                                        final CambriaIdentityManager im = new CambriaClientBuilders.IdentityManagerBuilder()
                                                        .usingHosts(Helper.uebUrlList()).build();
                                        com.att.nsa.apiClient.credentials.ApiCredential credential = im.createApiKey(user.getEmail(),
-                                                       "ECOMP Portal Owner");
+                                                       "ONAP Portal Owner");
                                        String appKey = credential.getApiKey();
                                        String appSecret = credential.getApiSecret();
                                        String appMailboxName = null;
@@ -1235,7 +1373,6 @@ public class EPAppCommonServiceImpl implements EPAppService {
                                                "LR: updateApp: finished calling setFunctionalMenuItemsEnabled");
                                transaction.commit();
                                logger.debug(EELFLoggerDelegate.debugLogger, "LR: updateApp: finished calling transaction.commit");
-                               epUebHelper.addPublisher(app);
                                logger.debug(EELFLoggerDelegate.debugLogger,
                                                "LR: updateApp: finished calling epUebHelper.addPublisher");
                                result = true;
@@ -1283,7 +1420,7 @@ public class EPAppCommonServiceImpl implements EPAppService {
                onboardingApp.isOpen = app.getOpen();
                onboardingApp.isEnabled = app.getEnabled();
                onboardingApp.username = app.getUsername();
-               onboardingApp.appPassword = decryptedPassword(app.getAppPassword(), app);
+               onboardingApp.appPassword = (app.getAppPassword().equals(EPCommonSystemProperties.APP_DISPLAY_PASSWORD)) ? EPCommonSystemProperties.APP_DISPLAY_PASSWORD :decryptedPassword(app.getAppPassword(), app);
                onboardingApp.uebTopicName = app.getUebTopicName();
                onboardingApp.uebKey = app.getUebKey();
                onboardingApp.uebSecret = app.getUebSecret();
@@ -1314,8 +1451,9 @@ public class EPAppCommonServiceImpl implements EPAppService {
                app.setOpen(onboardingApp.isOpen);
                app.setEnabled(onboardingApp.isEnabled);
                app.setUsername(onboardingApp.username);
+               if(!onboardingApp.appPassword.equals(EPCommonSystemProperties.APP_DISPLAY_PASSWORD))
                app.setAppPassword(this.encryptedPassword(onboardingApp.appPassword, app));
-               app.setUebTopicName(onboardingApp.uebTopicName);
+               //app.setUebTopicName(onboardingApp.uebTopicName);
                app.setUebKey(onboardingApp.uebKey);
                app.setUebSecret(onboardingApp.uebSecret);
                app.setCentralAuth(onboardingApp.isCentralAuth);
@@ -1357,7 +1495,7 @@ public class EPAppCommonServiceImpl implements EPAppService {
        // Don't encrypt or decrypt the password if it is null or the empty string
        private String decryptedPassword(String encryptedAppPwd, EPApp app) {
                String result = "";
-               if (encryptedAppPwd != null & encryptedAppPwd.length() > 0) {
+               if (encryptedAppPwd != null && !encryptedAppPwd.isEmpty()) {
                        try {
                                result = CipherUtil.decryptPKC(encryptedAppPwd,
                                                SystemProperties.getProperty(SystemProperties.Decryption_Key));
@@ -1370,7 +1508,7 @@ public class EPAppCommonServiceImpl implements EPAppService {
 
        protected String encryptedPassword(String decryptedAppPwd, EPApp app) {
                String result = "";
-               if (decryptedAppPwd != null & decryptedAppPwd.length() > 0) {
+               if (decryptedAppPwd != null && !decryptedAppPwd.isEmpty()) {
                        try {
                                result = CipherUtil.encryptPKC(decryptedAppPwd,
                                                SystemProperties.getProperty(SystemProperties.Decryption_Key));
@@ -1404,7 +1542,7 @@ public class EPAppCommonServiceImpl implements EPAppService {
                                                epWidgetsManualSort.setWidgetCol(epWidgetsManPref.getCol());
                                                epWidgetsManualSort.setWidgetWidth(epWidgetsManPref.getSizeX());
                                                epWidgetsManualSort.setWidgetHeight(epWidgetsManPref.getSizeY());
-                                               HashMap<String, Integer> additionalUpdateParam = new HashMap<String, Integer>();
+                                               HashMap<String, Long> additionalUpdateParam = new HashMap<>();
                                                additionalUpdateParam.put("userId", epWidgetsManualSort.getUserId());
                                                dataAccessService.saveDomainObject(epWidgetsManualSort, additionalUpdateParam);
                                        } else {
@@ -1414,7 +1552,7 @@ public class EPAppCommonServiceImpl implements EPAppService {
                                                epWidgetsManualSort.setWidgetCol(epWidgetsManPref.getCol());
                                                epWidgetsManualSort.setWidgetWidth(epWidgetsManPref.getSizeX());
                                                epWidgetsManualSort.setWidgetHeight(epWidgetsManPref.getSizeY());
-                                               epWidgetsManualSort.setUserId(Ints.checkedCast(user.getId()));
+                                               epWidgetsManualSort.setUserId(user.getId());
                                                dataAccessService.saveDomainObject(epWidgetsManualSort, null);
                                        }
                                        fieldsValidator.httpStatusCode = new Long(HttpServletResponse.SC_OK);
@@ -1485,7 +1623,7 @@ public class EPAppCommonServiceImpl implements EPAppService {
                                                EPUserAppsManualSortPreference epAppsManualSort = existingAppIds.get(appid);
                                                epAppsManualSort
                                                                .setAppManualSortOrder((epAppsManPref.getCol() + (6 * epAppsManPref.getRow())) + 1);
-                                               HashMap<String, Integer> additionalUpdateParam = new HashMap<String, Integer>();
+                                               HashMap<String, Long> additionalUpdateParam = new HashMap<>();
                                                additionalUpdateParam.put("userId", epAppsManualSort.getUserId());
                                                dataAccessService.saveDomainObject(epAppsManualSort, additionalUpdateParam);
                                        } else {
@@ -1493,7 +1631,7 @@ public class EPAppCommonServiceImpl implements EPAppService {
                                                epAppsManualSort.setAppId(epAppsManPref.getAppid());
                                                epAppsManualSort
                                                                .setAppManualSortOrder((epAppsManPref.getCol() + (6 * epAppsManPref.getRow())) + 1);
-                                               epAppsManualSort.setUserId(Ints.checkedCast(user.getId()));
+                                               epAppsManualSort.setUserId(user.getId());
                                                dataAccessService.saveDomainObject(epAppsManualSort, null);
                                        }
                                        fieldsValidator.httpStatusCode = new Long(HttpServletResponse.SC_OK);
@@ -1509,9 +1647,9 @@ public class EPAppCommonServiceImpl implements EPAppService {
        /*
         * (non-Javadoc)
         *
-        * @see org.openecomp.portalapp.portal.service.EPAppService#
+        * @see org.onap.portalapp.portal.service.EPAppService#
         * deleteUserAppSortManual(java.lang.String,
-        * org.openecomp.portalapp.portal.domain.EPUser)
+        * org.onap.portalapp.portal.domain.EPUser)
         */
        @SuppressWarnings("unchecked")
        @Override
@@ -1550,7 +1688,7 @@ public class EPAppCommonServiceImpl implements EPAppService {
                        epSortTypes = dataAccessService.executeNamedQuery("userAppsSortPreferenceQuery", params, null);
                        if (epSortTypes.size() == 0) {
                                usrSortPr = new EPUserAppsSortPreference();
-                               usrSortPr.setUserId(Ints.checkedCast(user.getId()));
+                               usrSortPr.setUserId((int)(long)(user.getId()));
                                usrSortPr.setSortPref(appsSortPreference.getValue());
                                dataAccessService.saveDomainObject(usrSortPr, null);
                                fieldsValidator.httpStatusCode = new Long(HttpServletResponse.SC_OK);