summaryrefslogtreecommitdiffstats
path: root/ecomp-portal-BE-common/src/main/java/org/onap/portalapp
diff options
context:
space:
mode:
Diffstat (limited to 'ecomp-portal-BE-common/src/main/java/org/onap/portalapp')
-rw-r--r--ecomp-portal-BE-common/src/main/java/org/onap/portalapp/command/EPLoginBean.java204
-rw-r--r--ecomp-portal-BE-common/src/main/java/org/onap/portalapp/command/PostSearchBean.java391
-rw-r--r--ecomp-portal-BE-common/src/main/java/org/onap/portalapp/config/ExternalSecurityConfig.java74
-rw-r--r--ecomp-portal-BE-common/src/main/java/org/onap/portalapp/config/NotificationCleanup.java58
-rw-r--r--ecomp-portal-BE-common/src/main/java/org/onap/portalapp/config/NotificationCleanupConfig.java80
-rw-r--r--ecomp-portal-BE-common/src/main/java/org/onap/portalapp/config/PortalCentralAccessConfiguration.java66
-rw-r--r--ecomp-portal-BE-common/src/main/java/org/onap/portalapp/config/SwaggerConfig.java76
-rw-r--r--ecomp-portal-BE-common/src/main/java/org/onap/portalapp/config/SwaggerMVCConfig.java55
-rw-r--r--ecomp-portal-BE-common/src/main/java/org/onap/portalapp/controller/EPFusionBaseController.java122
-rw-r--r--ecomp-portal-BE-common/src/main/java/org/onap/portalapp/controller/EPRestrictedBaseController.java70
-rw-r--r--ecomp-portal-BE-common/src/main/java/org/onap/portalapp/controller/EPRestrictedRESTfulBaseController.java72
-rw-r--r--ecomp-portal-BE-common/src/main/java/org/onap/portalapp/controller/EPUnRestrictedBaseController.java60
-rw-r--r--ecomp-portal-BE-common/src/main/java/org/onap/portalapp/controller/sessionmgt/SessionCommunicationController.java90
-rw-r--r--ecomp-portal-BE-common/src/main/java/org/onap/portalapp/externalsystemapproval/model/ExternalSystemRoleApproval.java56
-rw-r--r--ecomp-portal-BE-common/src/main/java/org/onap/portalapp/externalsystemapproval/model/ExternalSystemUser.java92
-rw-r--r--ecomp-portal-BE-common/src/main/java/org/onap/portalapp/model/Result.java55
-rw-r--r--ecomp-portal-BE-common/src/main/java/org/onap/portalapp/portal/controller/AppCatalogController.java148
-rw-r--r--ecomp-portal-BE-common/src/main/java/org/onap/portalapp/portal/controller/AppContactUsController.java242
-rw-r--r--ecomp-portal-BE-common/src/main/java/org/onap/portalapp/portal/controller/AppsController.java812
-rw-r--r--ecomp-portal-BE-common/src/main/java/org/onap/portalapp/portal/controller/AppsControllerExternalRequest.java392
-rw-r--r--ecomp-portal-BE-common/src/main/java/org/onap/portalapp/portal/controller/AuditLogController.java129
-rw-r--r--ecomp-portal-BE-common/src/main/java/org/onap/portalapp/portal/controller/BEPropertyReaderController.java63
-rw-r--r--ecomp-portal-BE-common/src/main/java/org/onap/portalapp/portal/controller/BasicAuthAccountController.java215
-rw-r--r--ecomp-portal-BE-common/src/main/java/org/onap/portalapp/portal/controller/BasicAuthenticationController.java46
-rw-r--r--ecomp-portal-BE-common/src/main/java/org/onap/portalapp/portal/controller/CommonWidgetController.java99
-rw-r--r--ecomp-portal-BE-common/src/main/java/org/onap/portalapp/portal/controller/ConsulClientController.java113
-rw-r--r--ecomp-portal-BE-common/src/main/java/org/onap/portalapp/portal/controller/DashboardController.java414
-rw-r--r--ecomp-portal-BE-common/src/main/java/org/onap/portalapp/portal/controller/DashboardSearchResultController.java261
-rw-r--r--ecomp-portal-BE-common/src/main/java/org/onap/portalapp/portal/controller/EncryptAdminController.java220
-rw-r--r--ecomp-portal-BE-common/src/main/java/org/onap/portalapp/portal/controller/ExternalAccessRolesController.java807
-rw-r--r--ecomp-portal-BE-common/src/main/java/org/onap/portalapp/portal/controller/ExternalAppsRestfulController.java231
-rw-r--r--ecomp-portal-BE-common/src/main/java/org/onap/portalapp/portal/controller/FunctionalMenuController.java666
-rw-r--r--ecomp-portal-BE-common/src/main/java/org/onap/portalapp/portal/controller/GetAccessController.java90
-rw-r--r--ecomp-portal-BE-common/src/main/java/org/onap/portalapp/portal/controller/HealthCheckController.java249
-rw-r--r--ecomp-portal-BE-common/src/main/java/org/onap/portalapp/portal/controller/ManifestController.java108
-rw-r--r--ecomp-portal-BE-common/src/main/java/org/onap/portalapp/portal/controller/MicroserviceController.java156
-rw-r--r--ecomp-portal-BE-common/src/main/java/org/onap/portalapp/portal/controller/MicroserviceProxyController.java115
-rw-r--r--ecomp-portal-BE-common/src/main/java/org/onap/portalapp/portal/controller/PortalAdminController.java230
-rw-r--r--ecomp-portal-BE-common/src/main/java/org/onap/portalapp/portal/controller/RoleManageController.java747
-rw-r--r--ecomp-portal-BE-common/src/main/java/org/onap/portalapp/portal/controller/RolesApprovalSystemController.java232
-rw-r--r--ecomp-portal-BE-common/src/main/java/org/onap/portalapp/portal/controller/SchedulerAuxController.java141
-rw-r--r--ecomp-portal-BE-common/src/main/java/org/onap/portalapp/portal/controller/SchedulerController.java348
-rw-r--r--ecomp-portal-BE-common/src/main/java/org/onap/portalapp/portal/controller/SharedContextRestController.java384
-rw-r--r--ecomp-portal-BE-common/src/main/java/org/onap/portalapp/portal/controller/TicketEventController.java229
-rw-r--r--ecomp-portal-BE-common/src/main/java/org/onap/portalapp/portal/controller/UserController.java141
-rw-r--r--ecomp-portal-BE-common/src/main/java/org/onap/portalapp/portal/controller/UserNotificationController.java234
-rw-r--r--ecomp-portal-BE-common/src/main/java/org/onap/portalapp/portal/controller/UserRolesController.java546
-rw-r--r--ecomp-portal-BE-common/src/main/java/org/onap/portalapp/portal/controller/WebAnalyticsExtAppController.java257
-rw-r--r--ecomp-portal-BE-common/src/main/java/org/onap/portalapp/portal/controller/WidgetsCatalogController.java417
-rw-r--r--ecomp-portal-BE-common/src/main/java/org/onap/portalapp/portal/controller/WidgetsCatalogMarkupController.java103
-rw-r--r--ecomp-portal-BE-common/src/main/java/org/onap/portalapp/portal/controller/WidgetsController.java186
-rw-r--r--ecomp-portal-BE-common/src/main/java/org/onap/portalapp/portal/domain/AdminUserApp.java106
-rw-r--r--ecomp-portal-BE-common/src/main/java/org/onap/portalapp/portal/domain/AdminUserApplications.java114
-rw-r--r--ecomp-portal-BE-common/src/main/java/org/onap/portalapp/portal/domain/App.java80
-rw-r--r--ecomp-portal-BE-common/src/main/java/org/onap/portalapp/portal/domain/AppContactUs.java103
-rw-r--r--ecomp-portal-BE-common/src/main/java/org/onap/portalapp/portal/domain/AppIdAndNameTransportModel.java81
-rw-r--r--ecomp-portal-BE-common/src/main/java/org/onap/portalapp/portal/domain/AppsResponse.java94
-rw-r--r--ecomp-portal-BE-common/src/main/java/org/onap/portalapp/portal/domain/BEProperty.java96
-rw-r--r--ecomp-portal-BE-common/src/main/java/org/onap/portalapp/portal/domain/BasicAuthCredentials.java113
-rw-r--r--ecomp-portal-BE-common/src/main/java/org/onap/portalapp/portal/domain/CentralV2RoleFunction.java188
-rw-r--r--ecomp-portal-BE-common/src/main/java/org/onap/portalapp/portal/domain/CentralizedApp.java81
-rw-r--r--ecomp-portal-BE-common/src/main/java/org/onap/portalapp/portal/domain/EPApp.java484
-rw-r--r--ecomp-portal-BE-common/src/main/java/org/onap/portalapp/portal/domain/EPAppRoleFunction.java101
-rw-r--r--ecomp-portal-BE-common/src/main/java/org/onap/portalapp/portal/domain/EPEndpoint.java74
-rw-r--r--ecomp-portal-BE-common/src/main/java/org/onap/portalapp/portal/domain/EPEndpointAccount.java83
-rw-r--r--ecomp-portal-BE-common/src/main/java/org/onap/portalapp/portal/domain/EPRole.java221
-rw-r--r--ecomp-portal-BE-common/src/main/java/org/onap/portalapp/portal/domain/EPUser.java668
-rw-r--r--ecomp-portal-BE-common/src/main/java/org/onap/portalapp/portal/domain/EPUserApp.java137
-rw-r--r--ecomp-portal-BE-common/src/main/java/org/onap/portalapp/portal/domain/EPUserAppCatalogRoles.java110
-rw-r--r--ecomp-portal-BE-common/src/main/java/org/onap/portalapp/portal/domain/EPUserAppRoles.java81
-rw-r--r--ecomp-portal-BE-common/src/main/java/org/onap/portalapp/portal/domain/EPUserAppRolesRequest.java158
-rw-r--r--ecomp-portal-BE-common/src/main/java/org/onap/portalapp/portal/domain/EPUserAppRolesRequestDetail.java111
-rw-r--r--ecomp-portal-BE-common/src/main/java/org/onap/portalapp/portal/domain/EPUserAppsManualSortPreference.java68
-rw-r--r--ecomp-portal-BE-common/src/main/java/org/onap/portalapp/portal/domain/EPUserAppsSortPreference.java62
-rw-r--r--ecomp-portal-BE-common/src/main/java/org/onap/portalapp/portal/domain/EPUserNotification.java75
-rw-r--r--ecomp-portal-BE-common/src/main/java/org/onap/portalapp/portal/domain/EPWidgetsManualSortPreference.java88
-rw-r--r--ecomp-portal-BE-common/src/main/java/org/onap/portalapp/portal/domain/EcompApp.java186
-rw-r--r--ecomp-portal-BE-common/src/main/java/org/onap/portalapp/portal/domain/EcompAppRole.java98
-rw-r--r--ecomp-portal-BE-common/src/main/java/org/onap/portalapp/portal/domain/EcompAppRoleId.java101
-rw-r--r--ecomp-portal-BE-common/src/main/java/org/onap/portalapp/portal/domain/EcompAuditLog.java84
-rw-r--r--ecomp-portal-BE-common/src/main/java/org/onap/portalapp/portal/domain/ExternalRoleDetails.java115
-rw-r--r--ecomp-portal-BE-common/src/main/java/org/onap/portalapp/portal/domain/ExternalSystemAccess.java67
-rw-r--r--ecomp-portal-BE-common/src/main/java/org/onap/portalapp/portal/domain/FunctionalMenuItemWithAppID.java114
-rw-r--r--ecomp-portal-BE-common/src/main/java/org/onap/portalapp/portal/domain/GetAccessResult.java132
-rw-r--r--ecomp-portal-BE-common/src/main/java/org/onap/portalapp/portal/domain/GetAccessResultId.java82
-rw-r--r--ecomp-portal-BE-common/src/main/java/org/onap/portalapp/portal/domain/MicroserviceData.java164
-rw-r--r--ecomp-portal-BE-common/src/main/java/org/onap/portalapp/portal/domain/MicroserviceParameter.java96
-rw-r--r--ecomp-portal-BE-common/src/main/java/org/onap/portalapp/portal/domain/PersUserAppSelection.java133
-rw-r--r--ecomp-portal-BE-common/src/main/java/org/onap/portalapp/portal/domain/PersUserWidgetSelection.java136
-rw-r--r--ecomp-portal-BE-common/src/main/java/org/onap/portalapp/portal/domain/RoleApp.java132
-rw-r--r--ecomp-portal-BE-common/src/main/java/org/onap/portalapp/portal/domain/SharedContext.java191
-rw-r--r--ecomp-portal-BE-common/src/main/java/org/onap/portalapp/portal/domain/UserIdRoleId.java95
-rw-r--r--ecomp-portal-BE-common/src/main/java/org/onap/portalapp/portal/domain/UserRole.java109
-rw-r--r--ecomp-portal-BE-common/src/main/java/org/onap/portalapp/portal/domain/UserRoles.java131
-rw-r--r--ecomp-portal-BE-common/src/main/java/org/onap/portalapp/portal/domain/Widget.java123
-rw-r--r--ecomp-portal-BE-common/src/main/java/org/onap/portalapp/portal/domain/WidgetCatalog.java127
-rw-r--r--ecomp-portal-BE-common/src/main/java/org/onap/portalapp/portal/domain/WidgetCatalogParameter.java108
-rw-r--r--ecomp-portal-BE-common/src/main/java/org/onap/portalapp/portal/domain/WidgetParameterResult.java88
-rw-r--r--ecomp-portal-BE-common/src/main/java/org/onap/portalapp/portal/domain/WidgetServiceHeaders.java71
-rw-r--r--ecomp-portal-BE-common/src/main/java/org/onap/portalapp/portal/ecomp/model/AppCatalogItem.java276
-rw-r--r--ecomp-portal-BE-common/src/main/java/org/onap/portalapp/portal/ecomp/model/AppCategoryFunctionsItem.java158
-rw-r--r--ecomp-portal-BE-common/src/main/java/org/onap/portalapp/portal/ecomp/model/AppContactUsItem.java189
-rw-r--r--ecomp-portal-BE-common/src/main/java/org/onap/portalapp/portal/ecomp/model/CommonWidgetsEnum.java54
-rw-r--r--ecomp-portal-BE-common/src/main/java/org/onap/portalapp/portal/ecomp/model/PortalRestResponse.java119
-rw-r--r--ecomp-portal-BE-common/src/main/java/org/onap/portalapp/portal/ecomp/model/PortalRestStatusEnum.java54
-rw-r--r--ecomp-portal-BE-common/src/main/java/org/onap/portalapp/portal/ecomp/model/SearchResultItem.java104
-rw-r--r--ecomp-portal-BE-common/src/main/java/org/onap/portalapp/portal/exceptions/DeleteDomainObjectFailedException.java47
-rw-r--r--ecomp-portal-BE-common/src/main/java/org/onap/portalapp/portal/exceptions/DuplicateRecordException.java47
-rw-r--r--ecomp-portal-BE-common/src/main/java/org/onap/portalapp/portal/exceptions/ExternalAuthSystemException.java47
-rw-r--r--ecomp-portal-BE-common/src/main/java/org/onap/portalapp/portal/exceptions/InactiveApplicationException.java47
-rw-r--r--ecomp-portal-BE-common/src/main/java/org/onap/portalapp/portal/exceptions/InvalidApplicationException.java47
-rw-r--r--ecomp-portal-BE-common/src/main/java/org/onap/portalapp/portal/exceptions/InvalidRoleException.java47
-rw-r--r--ecomp-portal-BE-common/src/main/java/org/onap/portalapp/portal/exceptions/InvalidUserException.java47
-rw-r--r--ecomp-portal-BE-common/src/main/java/org/onap/portalapp/portal/exceptions/NoHealthyServiceException.java54
-rw-r--r--ecomp-portal-BE-common/src/main/java/org/onap/portalapp/portal/exceptions/NonCentralizedAppException.java56
-rw-r--r--ecomp-portal-BE-common/src/main/java/org/onap/portalapp/portal/exceptions/RoleFunctionException.java53
-rw-r--r--ecomp-portal-BE-common/src/main/java/org/onap/portalapp/portal/exceptions/SecurityVulnerabilitiesException.java45
-rw-r--r--ecomp-portal-BE-common/src/main/java/org/onap/portalapp/portal/interceptor/PortalResourceInterceptor.java369
-rw-r--r--ecomp-portal-BE-common/src/main/java/org/onap/portalapp/portal/listener/HealthMonitor.java364
-rw-r--r--ecomp-portal-BE-common/src/main/java/org/onap/portalapp/portal/listener/UserContextListener.java69
-rw-r--r--ecomp-portal-BE-common/src/main/java/org/onap/portalapp/portal/listener/UserSessionListener.java140
-rw-r--r--ecomp-portal-BE-common/src/main/java/org/onap/portalapp/portal/logging/aop/EPAuditLog.java49
-rw-r--r--ecomp-portal-BE-common/src/main/java/org/onap/portalapp/portal/logging/aop/EPEELFLoggerAdvice.java400
-rw-r--r--ecomp-portal-BE-common/src/main/java/org/onap/portalapp/portal/logging/aop/EPMetricsLog.java49
-rw-r--r--ecomp-portal-BE-common/src/main/java/org/onap/portalapp/portal/logging/format/ApplicationCodes.properties141
-rw-r--r--ecomp-portal-BE-common/src/main/java/org/onap/portalapp/portal/logging/format/EPAppMessagesEnum.java298
-rw-r--r--ecomp-portal-BE-common/src/main/java/org/onap/portalapp/portal/logging/format/EPErrorCodesEnum.java121
-rw-r--r--ecomp-portal-BE-common/src/main/java/org/onap/portalapp/portal/logging/logic/EPLogUtil.java328
-rw-r--r--ecomp-portal-BE-common/src/main/java/org/onap/portalapp/portal/scheduler/RestObject.java62
-rw-r--r--ecomp-portal-BE-common/src/main/java/org/onap/portalapp/portal/scheduler/SchedulerProperties.java164
-rw-r--r--ecomp-portal-BE-common/src/main/java/org/onap/portalapp/portal/scheduler/SchedulerResponseWrapper.java118
-rw-r--r--ecomp-portal-BE-common/src/main/java/org/onap/portalapp/portal/scheduler/SchedulerRestInt.java60
-rw-r--r--ecomp-portal-BE-common/src/main/java/org/onap/portalapp/portal/scheduler/SchedulerRestInterface.java270
-rw-r--r--ecomp-portal-BE-common/src/main/java/org/onap/portalapp/portal/scheduler/SchedulerRestInterfaceFactory.java51
-rw-r--r--ecomp-portal-BE-common/src/main/java/org/onap/portalapp/portal/scheduler/SchedulerRestInterfaceIfc.java58
-rw-r--r--ecomp-portal-BE-common/src/main/java/org/onap/portalapp/portal/scheduler/SchedulerUtil.java136
-rw-r--r--ecomp-portal-BE-common/src/main/java/org/onap/portalapp/portal/scheduler/client/HttpBasicClient.java85
-rw-r--r--ecomp-portal-BE-common/src/main/java/org/onap/portalapp/portal/scheduler/client/HttpsBasicClient.java162
-rw-r--r--ecomp-portal-BE-common/src/main/java/org/onap/portalapp/portal/scheduler/policy/rest/RequestDetails.java125
-rw-r--r--ecomp-portal-BE-common/src/main/java/org/onap/portalapp/portal/scheduler/restobjects/GetTimeSlotsRestObject.java48
-rw-r--r--ecomp-portal-BE-common/src/main/java/org/onap/portalapp/portal/scheduler/restobjects/PostCreateNewVnfRestObject.java47
-rw-r--r--ecomp-portal-BE-common/src/main/java/org/onap/portalapp/portal/scheduler/restobjects/PostSubmitVnfChangeRestObject.java47
-rw-r--r--ecomp-portal-BE-common/src/main/java/org/onap/portalapp/portal/scheduler/restobjects/RestObject.java57
-rw-r--r--ecomp-portal-BE-common/src/main/java/org/onap/portalapp/portal/scheduler/util/CustomJacksonJaxBJsonProvider.java91
-rw-r--r--ecomp-portal-BE-common/src/main/java/org/onap/portalapp/portal/scheduler/wrapper/GetTimeSlotsWrapper.java42
-rw-r--r--ecomp-portal-BE-common/src/main/java/org/onap/portalapp/portal/scheduler/wrapper/PostCreateNewVnfWrapper.java84
-rw-r--r--ecomp-portal-BE-common/src/main/java/org/onap/portalapp/portal/scheduler/wrapper/PostSubmitVnfChangeTimeSlotsWrapper.java84
-rw-r--r--ecomp-portal-BE-common/src/main/java/org/onap/portalapp/portal/scheduler/wrapper/SchedulerResponseWrapper.java107
-rw-r--r--ecomp-portal-BE-common/src/main/java/org/onap/portalapp/portal/scheduleraux/RestObject.java86
-rw-r--r--ecomp-portal-BE-common/src/main/java/org/onap/portalapp/portal/scheduleraux/SchedulerAuxResponseWrapper.java93
-rw-r--r--ecomp-portal-BE-common/src/main/java/org/onap/portalapp/portal/scheduleraux/SchedulerAuxRestInt.java85
-rw-r--r--ecomp-portal-BE-common/src/main/java/org/onap/portalapp/portal/scheduleraux/SchedulerAuxRestInterface.java278
-rw-r--r--ecomp-portal-BE-common/src/main/java/org/onap/portalapp/portal/scheduleraux/SchedulerAuxRestInterfaceFactory.java50
-rw-r--r--ecomp-portal-BE-common/src/main/java/org/onap/portalapp/portal/scheduleraux/SchedulerAuxRestInterfaceIfc.java94
-rw-r--r--ecomp-portal-BE-common/src/main/java/org/onap/portalapp/portal/scheduleraux/SchedulerAuxUtil.java108
-rw-r--r--ecomp-portal-BE-common/src/main/java/org/onap/portalapp/portal/service/AdminRolesService.java77
-rw-r--r--ecomp-portal-BE-common/src/main/java/org/onap/portalapp/portal/service/AdminRolesServiceImpl.java529
-rw-r--r--ecomp-portal-BE-common/src/main/java/org/onap/portalapp/portal/service/AppContactUsService.java73
-rw-r--r--ecomp-portal-BE-common/src/main/java/org/onap/portalapp/portal/service/AppContactUsServiceImpl.java206
-rw-r--r--ecomp-portal-BE-common/src/main/java/org/onap/portalapp/portal/service/ApplicationsRestClientService.java71
-rw-r--r--ecomp-portal-BE-common/src/main/java/org/onap/portalapp/portal/service/ApplicationsRestClientServiceImpl.java428
-rw-r--r--ecomp-portal-BE-common/src/main/java/org/onap/portalapp/portal/service/AppsCacheService.java60
-rw-r--r--ecomp-portal-BE-common/src/main/java/org/onap/portalapp/portal/service/AppsCacheServiceImple.java155
-rw-r--r--ecomp-portal-BE-common/src/main/java/org/onap/portalapp/portal/service/BasicAuthAccountService.java101
-rw-r--r--ecomp-portal-BE-common/src/main/java/org/onap/portalapp/portal/service/BasicAuthAccountServiceImpl.java247
-rw-r--r--ecomp-portal-BE-common/src/main/java/org/onap/portalapp/portal/service/BasicAuthenticationCredentialService.java53
-rw-r--r--ecomp-portal-BE-common/src/main/java/org/onap/portalapp/portal/service/BasicAuthenticationCredentialServiceImpl.java103
-rw-r--r--ecomp-portal-BE-common/src/main/java/org/onap/portalapp/portal/service/ConsulHealthService.java62
-rw-r--r--ecomp-portal-BE-common/src/main/java/org/onap/portalapp/portal/service/ConsulHealthServiceImpl.java114
-rw-r--r--ecomp-portal-BE-common/src/main/java/org/onap/portalapp/portal/service/DashboardSearchService.java55
-rw-r--r--ecomp-portal-BE-common/src/main/java/org/onap/portalapp/portal/service/DashboardSearchServiceImpl.java117
-rw-r--r--ecomp-portal-BE-common/src/main/java/org/onap/portalapp/portal/service/EPAppCommonServiceImpl.java1666
-rw-r--r--ecomp-portal-BE-common/src/main/java/org/onap/portalapp/portal/service/EPAppService.java248
-rw-r--r--ecomp-portal-BE-common/src/main/java/org/onap/portalapp/portal/service/EPAuditService.java45
-rw-r--r--ecomp-portal-BE-common/src/main/java/org/onap/portalapp/portal/service/EPAuditServiceImpl.java129
-rw-r--r--ecomp-portal-BE-common/src/main/java/org/onap/portalapp/portal/service/EPLdapService.java49
-rw-r--r--ecomp-portal-BE-common/src/main/java/org/onap/portalapp/portal/service/EPLdapServiceImpl.java269
-rw-r--r--ecomp-portal-BE-common/src/main/java/org/onap/portalapp/portal/service/EPLeftMenuService.java62
-rw-r--r--ecomp-portal-BE-common/src/main/java/org/onap/portalapp/portal/service/EPLeftMenuServiceImpl.java179
-rw-r--r--ecomp-portal-BE-common/src/main/java/org/onap/portalapp/portal/service/EPLoginService.java90
-rw-r--r--ecomp-portal-BE-common/src/main/java/org/onap/portalapp/portal/service/EPLoginServiceImpl.java240
-rw-r--r--ecomp-portal-BE-common/src/main/java/org/onap/portalapp/portal/service/EPRoleFunctionService.java71
-rw-r--r--ecomp-portal-BE-common/src/main/java/org/onap/portalapp/portal/service/EPRoleFunctionServiceCentralizedImpl.java132
-rw-r--r--ecomp-portal-BE-common/src/main/java/org/onap/portalapp/portal/service/EPRoleFunctionServiceImpl.java116
-rw-r--r--ecomp-portal-BE-common/src/main/java/org/onap/portalapp/portal/service/EPRoleService.java55
-rw-r--r--ecomp-portal-BE-common/src/main/java/org/onap/portalapp/portal/service/EPRoleServiceImpl.java196
-rw-r--r--ecomp-portal-BE-common/src/main/java/org/onap/portalapp/portal/service/ExternalAccessRolesService.java436
-rw-r--r--ecomp-portal-BE-common/src/main/java/org/onap/portalapp/portal/service/ExternalAccessRolesServiceImpl.java3497
-rw-r--r--ecomp-portal-BE-common/src/main/java/org/onap/portalapp/portal/service/FunctionalMenuService.java76
-rw-r--r--ecomp-portal-BE-common/src/main/java/org/onap/portalapp/portal/service/FunctionalMenuServiceImpl.java1016
-rw-r--r--ecomp-portal-BE-common/src/main/java/org/onap/portalapp/portal/service/GetAccessService.java51
-rw-r--r--ecomp-portal-BE-common/src/main/java/org/onap/portalapp/portal/service/GetAccessServiceImpl.java78
-rw-r--r--ecomp-portal-BE-common/src/main/java/org/onap/portalapp/portal/service/ManifestService.java51
-rw-r--r--ecomp-portal-BE-common/src/main/java/org/onap/portalapp/portal/service/ManifestServiceImpl.java79
-rw-r--r--ecomp-portal-BE-common/src/main/java/org/onap/portalapp/portal/service/MicroserviceProxyService.java77
-rw-r--r--ecomp-portal-BE-common/src/main/java/org/onap/portalapp/portal/service/MicroserviceProxyServiceImpl.java242
-rw-r--r--ecomp-portal-BE-common/src/main/java/org/onap/portalapp/portal/service/MicroserviceService.java105
-rw-r--r--ecomp-portal-BE-common/src/main/java/org/onap/portalapp/portal/service/MicroserviceServiceImpl.java227
-rw-r--r--ecomp-portal-BE-common/src/main/java/org/onap/portalapp/portal/service/PersUserAppService.java60
-rw-r--r--ecomp-portal-BE-common/src/main/java/org/onap/portalapp/portal/service/PersUserAppServiceImpl.java175
-rw-r--r--ecomp-portal-BE-common/src/main/java/org/onap/portalapp/portal/service/PersUserWidgetService.java57
-rw-r--r--ecomp-portal-BE-common/src/main/java/org/onap/portalapp/portal/service/PersUserWidgetServiceImpl.java106
-rw-r--r--ecomp-portal-BE-common/src/main/java/org/onap/portalapp/portal/service/PortalAdminService.java49
-rw-r--r--ecomp-portal-BE-common/src/main/java/org/onap/portalapp/portal/service/PortalAdminServiceImpl.java305
-rw-r--r--ecomp-portal-BE-common/src/main/java/org/onap/portalapp/portal/service/SearchService.java48
-rw-r--r--ecomp-portal-BE-common/src/main/java/org/onap/portalapp/portal/service/SearchServiceImpl.java195
-rw-r--r--ecomp-portal-BE-common/src/main/java/org/onap/portalapp/portal/service/SharedContextService.java118
-rw-r--r--ecomp-portal-BE-common/src/main/java/org/onap/portalapp/portal/service/SharedContextServiceImpl.java194
-rw-r--r--ecomp-portal-BE-common/src/main/java/org/onap/portalapp/portal/service/TicketEventService.java46
-rw-r--r--ecomp-portal-BE-common/src/main/java/org/onap/portalapp/portal/service/UserNotificationService.java158
-rw-r--r--ecomp-portal-BE-common/src/main/java/org/onap/portalapp/portal/service/UserNotificationServiceImpl.java262
-rw-r--r--ecomp-portal-BE-common/src/main/java/org/onap/portalapp/portal/service/UserRolesCommonServiceImpl.java1950
-rw-r--r--ecomp-portal-BE-common/src/main/java/org/onap/portalapp/portal/service/UserRolesService.java111
-rw-r--r--ecomp-portal-BE-common/src/main/java/org/onap/portalapp/portal/service/UserService.java54
-rw-r--r--ecomp-portal-BE-common/src/main/java/org/onap/portalapp/portal/service/UserServiceImpl.java288
-rw-r--r--ecomp-portal-BE-common/src/main/java/org/onap/portalapp/portal/service/WidgetParameterService.java82
-rw-r--r--ecomp-portal-BE-common/src/main/java/org/onap/portalapp/portal/service/WidgetParameterServiceImpl.java109
-rw-r--r--ecomp-portal-BE-common/src/main/java/org/onap/portalapp/portal/service/WidgetService.java54
-rw-r--r--ecomp-portal-BE-common/src/main/java/org/onap/portalapp/portal/service/WidgetServiceImpl.java310
-rw-r--r--ecomp-portal-BE-common/src/main/java/org/onap/portalapp/portal/transport/AllAppsWithRolesForUser.java58
-rw-r--r--ecomp-portal-BE-common/src/main/java/org/onap/portalapp/portal/transport/Analytics.java84
-rw-r--r--ecomp-portal-BE-common/src/main/java/org/onap/portalapp/portal/transport/AppCatalogPersonalization.java112
-rw-r--r--ecomp-portal-BE-common/src/main/java/org/onap/portalapp/portal/transport/AppNameIdIsAdmin.java132
-rw-r--r--ecomp-portal-BE-common/src/main/java/org/onap/portalapp/portal/transport/AppWithRolesForUser.java90
-rw-r--r--ecomp-portal-BE-common/src/main/java/org/onap/portalapp/portal/transport/AppsListWithAdminRole.java104
-rw-r--r--ecomp-portal-BE-common/src/main/java/org/onap/portalapp/portal/transport/BulkUploadRoleFunction.java105
-rw-r--r--ecomp-portal-BE-common/src/main/java/org/onap/portalapp/portal/transport/BulkUploadUserRoles.java120
-rw-r--r--ecomp-portal-BE-common/src/main/java/org/onap/portalapp/portal/transport/BusinessCardApplicationRole.java126
-rw-r--r--ecomp-portal-BE-common/src/main/java/org/onap/portalapp/portal/transport/BusinessCardApplicationRolesList.java104
-rw-r--r--ecomp-portal-BE-common/src/main/java/org/onap/portalapp/portal/transport/CentralApp.java400
-rw-r--r--ecomp-portal-BE-common/src/main/java/org/onap/portalapp/portal/transport/CentralRole.java279
-rw-r--r--ecomp-portal-BE-common/src/main/java/org/onap/portalapp/portal/transport/CentralRoleFunction.java251
-rw-r--r--ecomp-portal-BE-common/src/main/java/org/onap/portalapp/portal/transport/CentralUser.java965
-rw-r--r--ecomp-portal-BE-common/src/main/java/org/onap/portalapp/portal/transport/CentralUserApp.java144
-rw-r--r--ecomp-portal-BE-common/src/main/java/org/onap/portalapp/portal/transport/CentralV2Role.java246
-rw-r--r--ecomp-portal-BE-common/src/main/java/org/onap/portalapp/portal/transport/CentralV2User.java1250
-rw-r--r--ecomp-portal-BE-common/src/main/java/org/onap/portalapp/portal/transport/CentralV2UserApp.java113
-rw-r--r--ecomp-portal-BE-common/src/main/java/org/onap/portalapp/portal/transport/CommonWidget.java156
-rw-r--r--ecomp-portal-BE-common/src/main/java/org/onap/portalapp/portal/transport/CommonWidgetMeta.java68
-rw-r--r--ecomp-portal-BE-common/src/main/java/org/onap/portalapp/portal/transport/EPAppsManualPreference.java132
-rw-r--r--ecomp-portal-BE-common/src/main/java/org/onap/portalapp/portal/transport/EPAppsSortPreference.java65
-rw-r--r--ecomp-portal-BE-common/src/main/java/org/onap/portalapp/portal/transport/EPDeleteAppsManualSortPref.java69
-rw-r--r--ecomp-portal-BE-common/src/main/java/org/onap/portalapp/portal/transport/EPUserAppCurrentRoles.java135
-rw-r--r--ecomp-portal-BE-common/src/main/java/org/onap/portalapp/portal/transport/EPWidgetsSortPreference.java110
-rw-r--r--ecomp-portal-BE-common/src/main/java/org/onap/portalapp/portal/transport/EcompUserAppRoles.java103
-rw-r--r--ecomp-portal-BE-common/src/main/java/org/onap/portalapp/portal/transport/EcompUserRoles.java209
-rw-r--r--ecomp-portal-BE-common/src/main/java/org/onap/portalapp/portal/transport/EpNotificationItem.java357
-rw-r--r--ecomp-portal-BE-common/src/main/java/org/onap/portalapp/portal/transport/EpNotificationItemExtVO.java137
-rw-r--r--ecomp-portal-BE-common/src/main/java/org/onap/portalapp/portal/transport/EpNotificationItemVO.java221
-rw-r--r--ecomp-portal-BE-common/src/main/java/org/onap/portalapp/portal/transport/EpRoleNotificationItem.java108
-rw-r--r--ecomp-portal-BE-common/src/main/java/org/onap/portalapp/portal/transport/EventWidget.java156
-rw-r--r--ecomp-portal-BE-common/src/main/java/org/onap/portalapp/portal/transport/EventWidgetMeta.java70
-rw-r--r--ecomp-portal-BE-common/src/main/java/org/onap/portalapp/portal/transport/ExternalAccessPerms.java180
-rw-r--r--ecomp-portal-BE-common/src/main/java/org/onap/portalapp/portal/transport/ExternalAccessPermsDetail.java127
-rw-r--r--ecomp-portal-BE-common/src/main/java/org/onap/portalapp/portal/transport/ExternalAccessRole.java76
-rw-r--r--ecomp-portal-BE-common/src/main/java/org/onap/portalapp/portal/transport/ExternalAccessRolePerms.java66
-rw-r--r--ecomp-portal-BE-common/src/main/java/org/onap/portalapp/portal/transport/ExternalAccessUser.java65
-rw-r--r--ecomp-portal-BE-common/src/main/java/org/onap/portalapp/portal/transport/ExternalAccessUserRoleDetail.java104
-rw-r--r--ecomp-portal-BE-common/src/main/java/org/onap/portalapp/portal/transport/ExternalAuthUserRole.java74
-rw-r--r--ecomp-portal-BE-common/src/main/java/org/onap/portalapp/portal/transport/ExternalRequestFieldsValidator.java65
-rw-r--r--ecomp-portal-BE-common/src/main/java/org/onap/portalapp/portal/transport/ExternalRoleDescription.java140
-rw-r--r--ecomp-portal-BE-common/src/main/java/org/onap/portalapp/portal/transport/FavoritesFunctionalMenuItem.java63
-rw-r--r--ecomp-portal-BE-common/src/main/java/org/onap/portalapp/portal/transport/FavoritesFunctionalMenuItemJson.java75
-rw-r--r--ecomp-portal-BE-common/src/main/java/org/onap/portalapp/portal/transport/FieldsValidator.java143
-rw-r--r--ecomp-portal-BE-common/src/main/java/org/onap/portalapp/portal/transport/FunctionalMenuItem.java118
-rw-r--r--ecomp-portal-BE-common/src/main/java/org/onap/portalapp/portal/transport/FunctionalMenuItemWithRoles.java78
-rw-r--r--ecomp-portal-BE-common/src/main/java/org/onap/portalapp/portal/transport/FunctionalMenuRole.java133
-rw-r--r--ecomp-portal-BE-common/src/main/java/org/onap/portalapp/portal/transport/GlobalRoleWithApplicationRoleFunction.java130
-rw-r--r--ecomp-portal-BE-common/src/main/java/org/onap/portalapp/portal/transport/LocalRole.java77
-rw-r--r--ecomp-portal-BE-common/src/main/java/org/onap/portalapp/portal/transport/OnboardingApp.java123
-rw-r--r--ecomp-portal-BE-common/src/main/java/org/onap/portalapp/portal/transport/OnboardingWidget.java83
-rw-r--r--ecomp-portal-BE-common/src/main/java/org/onap/portalapp/portal/transport/PortalAdmin.java103
-rw-r--r--ecomp-portal-BE-common/src/main/java/org/onap/portalapp/portal/transport/PortalAdminUserRole.java66
-rw-r--r--ecomp-portal-BE-common/src/main/java/org/onap/portalapp/portal/transport/ProfileDetail.java97
-rw-r--r--ecomp-portal-BE-common/src/main/java/org/onap/portalapp/portal/transport/RemoteRole.java91
-rw-r--r--ecomp-portal-BE-common/src/main/java/org/onap/portalapp/portal/transport/RemoteUserWithRoles.java214
-rw-r--r--ecomp-portal-BE-common/src/main/java/org/onap/portalapp/portal/transport/RoleInAppForUser.java123
-rw-r--r--ecomp-portal-BE-common/src/main/java/org/onap/portalapp/portal/transport/RolesInAppForUser.java51
-rw-r--r--ecomp-portal-BE-common/src/main/java/org/onap/portalapp/portal/transport/UserApplicationRoles.java104
-rw-r--r--ecomp-portal-BE-common/src/main/java/org/onap/portalapp/portal/transport/UserWithNameSurnameTitle.java100
-rw-r--r--ecomp-portal-BE-common/src/main/java/org/onap/portalapp/portal/transport/WidgetCatalogPersonalization.java75
-rw-r--r--ecomp-portal-BE-common/src/main/java/org/onap/portalapp/portal/ueb/EPUebHelper.java229
-rw-r--r--ecomp-portal-BE-common/src/main/java/org/onap/portalapp/portal/ueb/EPUebMsgTypes.java45
-rw-r--r--ecomp-portal-BE-common/src/main/java/org/onap/portalapp/portal/utils/CustomLoggingFilter.java72
-rw-r--r--ecomp-portal-BE-common/src/main/java/org/onap/portalapp/portal/utils/EPCommonSystemProperties.java95
-rw-r--r--ecomp-portal-BE-common/src/main/java/org/onap/portalapp/portal/utils/EcompPortalUtils.java563
-rw-r--r--ecomp-portal-BE-common/src/main/java/org/onap/portalapp/portal/utils/EcompVersion.java51
-rw-r--r--ecomp-portal-BE-common/src/main/java/org/onap/portalapp/portal/utils/HashMapFromList.java115
-rw-r--r--ecomp-portal-BE-common/src/main/java/org/onap/portalapp/portal/utils/ParallelExecutor.java101
-rw-r--r--ecomp-portal-BE-common/src/main/java/org/onap/portalapp/portal/utils/PortalConstants.java50
-rw-r--r--ecomp-portal-BE-common/src/main/java/org/onap/portalapp/service/AdminAuthExtension.java53
-rw-r--r--ecomp-portal-BE-common/src/main/java/org/onap/portalapp/service/EPProfileService.java54
-rw-r--r--ecomp-portal-BE-common/src/main/java/org/onap/portalapp/service/EPProfileServiceImpl.java89
-rw-r--r--ecomp-portal-BE-common/src/main/java/org/onap/portalapp/service/RemoteWebServiceCallService.java72
-rw-r--r--ecomp-portal-BE-common/src/main/java/org/onap/portalapp/service/sessionmgt/CoreTimeoutHandler.java183
-rw-r--r--ecomp-portal-BE-common/src/main/java/org/onap/portalapp/service/sessionmgt/ManageService.java125
-rw-r--r--ecomp-portal-BE-common/src/main/java/org/onap/portalapp/service/sessionmgt/SessionCommunication.java290
-rw-r--r--ecomp-portal-BE-common/src/main/java/org/onap/portalapp/service/sessionmgt/TimeoutHandler.java269
-rw-r--r--ecomp-portal-BE-common/src/main/java/org/onap/portalapp/util/EPUserUtils.java401
-rw-r--r--ecomp-portal-BE-common/src/main/java/org/onap/portalapp/util/SystemType.java44
300 files changed, 53451 insertions, 0 deletions
diff --git a/ecomp-portal-BE-common/src/main/java/org/onap/portalapp/command/EPLoginBean.java b/ecomp-portal-BE-common/src/main/java/org/onap/portalapp/command/EPLoginBean.java
new file mode 100644
index 00000000..99677b3d
--- /dev/null
+++ b/ecomp-portal-BE-common/src/main/java/org/onap/portalapp/command/EPLoginBean.java
@@ -0,0 +1,204 @@
+/*-
+ * ============LICENSE_START==========================================
+ * ONAP Portal
+ * ===================================================================
+ * Copyright (C) 2017 AT&T Intellectual Property. All rights reserved.
+ * ===================================================================
+ *
+ * Unless otherwise specified, all software contained herein is licensed
+ * under the Apache License, Version 2.0 (the "License");
+ * you may not use this software 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.
+ *
+ * Unless otherwise specified, all documentation contained herein is licensed
+ * under the Creative Commons License, Attribution 4.0 Intl. (the "License");
+ * you may not use this documentation except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * https://creativecommons.org/licenses/by/4.0/
+ *
+ * Unless required by applicable law or agreed to in writing, documentation
+ * 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.
+ *
+ * ============LICENSE_END============================================
+ *
+ * ECOMP is a trademark and service mark of AT&T Intellectual Property.
+ */
+package org.onap.portalapp.command;
+
+import java.util.Set;
+
+import org.onap.portalapp.portal.domain.EPUser;
+import org.onap.portalsdk.core.domain.support.FusionCommand;
+
+public class EPLoginBean extends FusionCommand {
+ private String loginId;
+ private String loginPwd;
+ private String hrid;
+ private String orgUserId;
+ private String siteAccess;
+ private String loginErrorMessage;
+
+ private EPUser user;
+ private Set<?> menu;
+ private Set<?> businessDirectMenu;
+
+ /**
+ * getLoginId
+ *
+ * @return String
+ */
+ public String getLoginId() {
+ return loginId;
+ }
+
+ /**
+ * getLoginPwd
+ *
+ * @return String
+ */
+ public String getLoginPwd() {
+ return loginPwd;
+ }
+
+ /**
+ * getMenu
+ *
+ * @return Set
+ */
+ public Set<?> getMenu() {
+ return menu;
+ }
+
+ /**
+ * getUser
+ *
+ * @return User
+ */
+ public EPUser getUser() {
+ return user;
+ }
+
+ /**
+ * getHrid
+ *
+ * @return String
+ */
+ public String getHrid() {
+ return hrid;
+ }
+
+ /**
+ * getSiteAccess
+ *
+ * @return String
+ */
+ public String getSiteAccess() {
+ return siteAccess;
+ }
+
+ /**
+ * getBusinessDirectMenu
+ *
+ * @return Set
+ */
+ public Set<?> getBusinessDirectMenu() {
+ return businessDirectMenu;
+ }
+
+ /**
+ * getLoginErrorMessage
+ *
+ * @return String
+ */
+ public String getLoginErrorMessage() {
+ return loginErrorMessage;
+ }
+
+ public String getOrgUserId() {
+ return orgUserId;
+ }
+
+ /**
+ * setLoginId
+ *
+ * @param loginId String
+ */
+ public void setLoginId(String loginId) {
+ this.loginId = loginId;
+ }
+
+ /**
+ * setLoginPwd
+ *
+ * @param loginPwd String
+ */
+ public void setLoginPwd(String loginPwd) {
+ this.loginPwd = loginPwd;
+ }
+
+ public void setMenu(Set<?> menu) {
+ this.menu = menu;
+ }
+
+ /**
+ * setUser
+ *
+ * @param user User
+ */
+ public void setUser(EPUser user) {
+ this.user = user;
+ }
+
+ /**
+ * setHrid
+ *
+ * @param hrid String
+ */
+ public void setHrid(String hrid) {
+ this.hrid = hrid;
+ }
+
+ /**
+ * setSiteAccess
+ *
+ * @param siteAccess String
+ */
+ public void setSiteAccess(String siteAccess) {
+ this.siteAccess = siteAccess;
+ }
+
+ /**
+ * setBusinessDirectMenu
+ *
+ * @param businessDirectMenu Set
+ */
+ public void setBusinessDirectMenu(Set<?> businessDirectMenu) {
+ this.businessDirectMenu = businessDirectMenu;
+ }
+
+ /**
+ * setLoginErrorMessage
+ *
+ * @param loginErrorMessage String
+ */
+ public void setLoginErrorMessage(String loginErrorMessage) {
+ this.loginErrorMessage = loginErrorMessage;
+ }
+
+ public void setOrgUserId(String orgUserId) {
+ this.orgUserId = orgUserId;
+ }
+}
+
diff --git a/ecomp-portal-BE-common/src/main/java/org/onap/portalapp/command/PostSearchBean.java b/ecomp-portal-BE-common/src/main/java/org/onap/portalapp/command/PostSearchBean.java
new file mode 100644
index 00000000..6fc8f2a5
--- /dev/null
+++ b/ecomp-portal-BE-common/src/main/java/org/onap/portalapp/command/PostSearchBean.java
@@ -0,0 +1,391 @@
+/*-
+ * ============LICENSE_START==========================================
+ * ONAP Portal
+ * ===================================================================
+ * Copyright (C) 2017 AT&T Intellectual Property. All rights reserved.
+ * ===================================================================
+ *
+ * Unless otherwise specified, all software contained herein is licensed
+ * under the Apache License, Version 2.0 (the "License");
+ * you may not use this software 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.
+ *
+ * Unless otherwise specified, all documentation contained herein is licensed
+ * under the Creative Commons License, Attribution 4.0 Intl. (the "License");
+ * you may not use this documentation except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * https://creativecommons.org/licenses/by/4.0/
+ *
+ * Unless required by applicable law or agreed to in writing, documentation
+ * 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.
+ *
+ * ============LICENSE_END============================================
+ *
+ * ECOMP is a trademark and service mark of AT&T Intellectual Property.
+ */
+package org.onap.portalapp.command;
+
+import java.util.List;
+
+import org.onap.portalapp.portal.domain.EPUser;
+import org.onap.portalsdk.core.command.support.SearchBase;
+
+import com.fasterxml.jackson.databind.annotation.JsonSerialize;
+
+@JsonSerialize
+public class PostSearchBean extends SearchBase {
+
+ private EPUser user = null;
+ private EPUser userOrig = null;
+ private String[] selected;
+ private String[] postHrid;
+ private String[] postOrgUserId;
+ private String[] postFirstName;
+ private String[] postLastName;
+ private String[] postOrgCode;
+ private String[] postPhone;
+ private String[] postEmail;
+ private String[] postAddress1;
+ private String[] postAddress2;
+ private String[] postCity;
+ private String[] postState;
+ private String[] postZipCode;
+ private String[] postLocationClli;
+ private String[] postBusinessCountryCode;
+ private String[] postBusinessCountryName;
+ private String[] postDepartment;
+ private String[] postDepartmentName;
+ private String[] postBusinessUnit;
+ private String[] postBusinessUnitName;
+ private String[] postJobTitle;
+ private String[] postOrgManagerUserId;
+ private String[] postCommandChain;
+ private String[] postCompanyCode;
+ private String[] postCompany;
+ private String[] postCostCenter;
+ private String[] postSiloStatus;
+ private String[] postFinancialLocCode;
+
+
+ public PostSearchBean() {
+ this(null);
+ } // PostSearchBean
+
+ public PostSearchBean(List<?> items) {
+ super(items);
+
+ user = new EPUser();
+ userOrig = new EPUser();
+
+ setSortBy1("");
+ setSortBy1Orig("");
+
+ //setSortByList(...);
+ } // PostSearchBean
+
+
+ public String getFirstName() { return user.getFirstName(); }
+ public String getLastName() { return user.getLastName(); }
+ public String getHrid() { return user.getHrid(); }
+ public String getOrgUserId() { return user.getOrgUserId(); }
+ public String getOrgCode() { return user.getOrgCode(); }
+ public String getEmail() { return user.getEmail(); }
+ public String getOrgManagerUserId() { return user.getOrgManagerUserId(); }
+
+ public String getFirstNameOrig() { return user.getFirstName(); }
+ public String getLastNameOrig() { return user.getLastName(); }
+ public String getHridOrig() { return user.getHrid(); }
+ public String getOrgUserIdOrig() { return user.getOrgUserId(); }
+ public String getOrgCodeOrig() { return user.getOrgCode(); }
+ public String getEmailOrig() { return user.getEmail(); }
+ public String getOrgManagerUserIdOrig() { return user.getOrgManagerUserId(); }
+
+
+ public EPUser getUser() { return user; }
+
+ public String[] getPostEmail() {
+ return postEmail;
+ }
+
+ public String[] getPostFirstName() {
+ return postFirstName;
+ }
+
+ public String[] getPostHrid() {
+ return postHrid;
+ }
+
+ public String[] getPostLastName() {
+ return postLastName;
+ }
+
+ public String[] getPostOrgCode() {
+ return postOrgCode;
+ }
+
+ public String[] getPostPhone() {
+ return postPhone;
+ }
+
+ public String[] getPostOrgUserId() {
+ return postOrgUserId;
+ }
+
+ public String[] getSelected() {
+ return selected;
+ }
+
+ public String[] getPostAddress1() {
+ return postAddress1;
+ }
+
+ public String[] getPostBusinessCountryCode() {
+ return postBusinessCountryCode;
+ }
+
+ public String[] getPostCity() {
+ return postCity;
+ }
+
+ public String[] getPostCommandChain() {
+ return postCommandChain;
+ }
+
+ public String[] getPostCompany() {
+ return postCompany;
+ }
+
+ public String[] getPostCompanyCode() {
+ return postCompanyCode;
+ }
+
+ public String[] getPostDepartment() {
+ return postDepartment;
+ }
+
+ public String[] getPostDepartmentName() {
+ return postDepartmentName;
+ }
+
+ public String[] getPostBusinessCountryName() {
+ return postBusinessCountryName;
+ }
+
+ public String[] getPostJobTitle() {
+ return postJobTitle;
+ }
+
+ public String[] getPostLocationClli() {
+ return postLocationClli;
+ }
+
+ public String[] getPostManagerUserId() {
+ return postOrgManagerUserId;
+ }
+
+ public String[] getPostState() {
+ return postState;
+ }
+
+ public String[] getPostZipCode() {
+ return postZipCode;
+ }
+
+ public void setFirstName(String value) { user.setFirstName(value); }
+ public void setLastName(String value) { user.setLastName(value); }
+ public void setHrid(String value) { user.setHrid(value); }
+ public void setOrgUserId(String value) { user.setOrgUserId(value); }
+ public void setOrgCode(String value) { user.setOrgCode(value); }
+ public void setEmail(String value) { user.setEmail(value); }
+ public void setOrgManagerUserId(String value) { user.setOrgManagerUserId(value); }
+
+ public void setFirstNameOrig(String value) { userOrig.setFirstName(value); }
+ public void setLastNameOrig(String value) { userOrig.setLastName(value); }
+ public void setHridOrig(String value) { userOrig.setHrid(value); }
+ public void setOrgUserIdOrig(String value) { userOrig.setOrgUserId(value); }
+ public void setOrgCodeOrig(String value) { userOrig.setOrgCode(value); }
+ public void setEmailOrig(String value) { userOrig.setEmail(value); }
+ public void setOrgManagerUserIdOrig(String value) { userOrig.setOrgManagerUserId(value); }
+
+ public void setUser(EPUser value) { this.user = value; }
+
+ public void setPostEmail(String[] postEmail) {
+ this.postEmail = postEmail;
+ }
+
+ public void setPostFirstName(String[] postFirstName) {
+ this.postFirstName = postFirstName;
+ }
+
+ public void setPostHrid(String[] postHrid) {
+ this.postHrid = postHrid;
+ }
+
+ public void setPostLastName(String[] postLastName) {
+ this.postLastName = postLastName;
+ }
+
+ public void setPostOrgCode(String[] postOrgCode) {
+ this.postOrgCode = postOrgCode;
+ }
+
+ public void setPostPhone(String[] postPhone) {
+ this.postPhone = postPhone;
+ }
+
+ public void setPostUserId(String[] postOrgUserId) {
+ this.postOrgUserId = postOrgUserId;
+ }
+
+ public void setSelected(String[] selected) {
+ this.selected = selected;
+ }
+
+ public void setPostAddress1(String[] postAddress1) {
+ this.postAddress1 = postAddress1;
+ }
+
+ public void setPostBusinessCountryCode(String[] postBusinessCountryCode) {
+ this.postBusinessCountryCode = postBusinessCountryCode;
+ }
+
+ public void setPostCity(String[] postCity) {
+ this.postCity = postCity;
+ }
+
+ public void setPostCommandChain(String[] postCommandChain) {
+ this.postCommandChain = postCommandChain;
+ }
+
+ public void setPostCompany(String[] postCompany) {
+ this.postCompany = postCompany;
+ }
+
+ public void setPostCompanyCode(String[] postCompanyCode) {
+ this.postCompanyCode = postCompanyCode;
+ }
+
+ public void setPostDepartment(String[] postDepartment) {
+ this.postDepartment = postDepartment;
+ }
+
+ public void setPostDepartmentName(String[] postDepartmentName) {
+ this.postDepartmentName = postDepartmentName;
+ }
+
+ public void setPostBusinessCountryName(String[] postBusinessCountryName) {
+ this.postBusinessCountryName = postBusinessCountryName;
+ }
+
+ public void setPostJobTitle(String[] postJobTitle) {
+ this.postJobTitle = postJobTitle;
+ }
+
+ public void setPostLocationClli(String[] postLocationClli) {
+ this.postLocationClli = postLocationClli;
+ }
+
+ public void setPostManagerUserId(String[] postOrgManagerUserId) {
+ this.postOrgManagerUserId = postOrgManagerUserId;
+ }
+
+ public void setPostState(String[] postState) {
+ this.postState = postState;
+ }
+
+ public void setPostZipCode(String[] postZipCode) {
+ this.postZipCode = postZipCode;
+ }
+
+ public String[] getPostAddress2() {
+ return postAddress2;
+ }
+
+ public void setPostAddress2(String[] postAddress2) {
+ this.postAddress2 = postAddress2;
+ }
+
+ public EPUser getUserOrig() {
+ return userOrig;
+ }
+
+ public void setUserOrig(EPUser userOrig) {
+ this.userOrig = userOrig;
+ }
+
+ public String[] getPostBusinessUnit() {
+ return postBusinessUnit;
+ }
+
+ public void setPostBusinessUnit(String[] postBusinessUnit) {
+ this.postBusinessUnit = postBusinessUnit;
+ }
+
+ public String[] getPostBusinessUnitName() {
+ return postBusinessUnitName;
+ }
+
+ public void setPostBusinessUnitName(String[] postBusinessUnitName) {
+ this.postBusinessUnitName = postBusinessUnitName;
+ }
+
+ public String[] getPostCostCenter() {
+ return postCostCenter;
+ }
+
+ public void setPostCostCenter(String[] postCostCenter) {
+ this.postCostCenter = postCostCenter;
+ }
+
+ public String[] getPostSiloStatus() {
+ return postSiloStatus;
+ }
+
+ public void setPostSiloStatus(String[] postSiloStatus) {
+ this.postSiloStatus = postSiloStatus;
+ }
+
+ public String[] getPostFinancialLocCode() {
+ return postFinancialLocCode;
+ }
+
+ public void setPostFinancialLocCode(String[] postFinancialLocCode) {
+ this.postFinancialLocCode = postFinancialLocCode;
+ }
+
+ public void resetSearch() {
+ super.resetSearch();
+ setUser(new EPUser());
+ } // resetSearch
+
+
+ public boolean isCriteriaUpdated() {
+ if(user==null&&userOrig==null)
+ return false;
+ else if(user==null||userOrig==null)
+ return true;
+ else
+ return (! (
+ Utilities.nvl(user.getFirstName()).equals(Utilities.nvl(userOrig.getFirstName()))&&
+ Utilities.nvl(user.getLastName()).equals(Utilities.nvl(userOrig.getLastName()))&&
+ //Utilities.nvl(user.getHrid()).equals(Utilities.nvl(userOrig.getHrid()))&&
+ Utilities.nvl(user.getOrgUserId()).equals(Utilities.nvl(userOrig.getOrgUserId()))&&
+ Utilities.nvl(user.getOrgCode()).equals(Utilities.nvl(userOrig.getOrgCode()))&&
+ Utilities.nvl(user.getEmail()).equals(Utilities.nvl(userOrig.getEmail()))&&
+ Utilities.nvl(user.getOrgManagerUserId()).equals(Utilities.nvl(userOrig.getOrgManagerUserId()))&&
+ true));
+ } // isCriteriaUpdated
+
+} // PostSearchBean
diff --git a/ecomp-portal-BE-common/src/main/java/org/onap/portalapp/config/ExternalSecurityConfig.java b/ecomp-portal-BE-common/src/main/java/org/onap/portalapp/config/ExternalSecurityConfig.java
new file mode 100644
index 00000000..f509dd21
--- /dev/null
+++ b/ecomp-portal-BE-common/src/main/java/org/onap/portalapp/config/ExternalSecurityConfig.java
@@ -0,0 +1,74 @@
+/*-
+ * ============LICENSE_START==========================================
+ * ONAP Portal
+ * ===================================================================
+ * Copyright (C) 2017 AT&T Intellectual Property. All rights reserved.
+ * ===================================================================
+ *
+ * Unless otherwise specified, all software contained herein is licensed
+ * under the Apache License, Version 2.0 (the "License");
+ * you may not use this software 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.
+ *
+ * Unless otherwise specified, all documentation contained herein is licensed
+ * under the Creative Commons License, Attribution 4.0 Intl. (the "License");
+ * you may not use this documentation except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * https://creativecommons.org/licenses/by/4.0/
+ *
+ * Unless required by applicable law or agreed to in writing, documentation
+ * 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.
+ *
+ * ============LICENSE_END============================================
+ *
+ * ECOMP is a trademark and service mark of AT&T Intellectual Property.
+ */
+package org.onap.portalapp.config;
+
+import java.util.regex.Pattern;
+
+import javax.servlet.http.HttpServletRequest;
+
+import org.springframework.context.annotation.Configuration;
+import org.springframework.security.config.annotation.web.builders.HttpSecurity;
+import org.springframework.security.config.annotation.web.configuration.EnableWebSecurity;
+import org.springframework.security.config.annotation.web.configuration.WebSecurityConfigurerAdapter;
+import org.springframework.security.web.csrf.CookieCsrfTokenRepository;
+import org.springframework.security.web.util.matcher.RegexRequestMatcher;
+import org.springframework.security.web.util.matcher.RequestMatcher;
+
+
+@Configuration
+@EnableWebSecurity
+public class ExternalSecurityConfig extends WebSecurityConfigurerAdapter {
+ @Override
+ protected void configure(HttpSecurity http) throws Exception {
+ RequestMatcher csrfRequestMatcher = new RequestMatcher() {
+ private RegexRequestMatcher requestMatcher = new RegexRequestMatcher("/portalApi/.*", null);
+ private Pattern allowedMethods = Pattern.compile("^(GET|HEAD|TRACE|OPTIONS)$");
+ @Override
+ public boolean matches(HttpServletRequest request) {
+ if(allowedMethods.matcher(request.getMethod()).matches())
+ return false;
+
+ if(requestMatcher.matches(request))
+ return true;
+
+ return false;
+ }
+ };
+ http.csrf().csrfTokenRepository(CookieCsrfTokenRepository.withHttpOnlyFalse()).requireCsrfProtectionMatcher(csrfRequestMatcher);
+ }
+}
diff --git a/ecomp-portal-BE-common/src/main/java/org/onap/portalapp/config/NotificationCleanup.java b/ecomp-portal-BE-common/src/main/java/org/onap/portalapp/config/NotificationCleanup.java
new file mode 100644
index 00000000..60148f9e
--- /dev/null
+++ b/ecomp-portal-BE-common/src/main/java/org/onap/portalapp/config/NotificationCleanup.java
@@ -0,0 +1,58 @@
+/*-
+ * ============LICENSE_START==========================================
+ * ONAP Portal
+ * ===================================================================
+ * Copyright (C) 2017 AT&T Intellectual Property. All rights reserved.
+ * ===================================================================
+ *
+ * Unless otherwise specified, all software contained herein is licensed
+ * under the Apache License, Version 2.0 (the "License");
+ * you may not use this software 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.
+ *
+ * Unless otherwise specified, all documentation contained herein is licensed
+ * under the Creative Commons License, Attribution 4.0 Intl. (the "License");
+ * you may not use this documentation except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * https://creativecommons.org/licenses/by/4.0/
+ *
+ * Unless required by applicable law or agreed to in writing, documentation
+ * 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.
+ *
+ * ============LICENSE_END============================================
+ *
+ * ECOMP is a trademark and service mark of AT&T Intellectual Property.
+ */
+package org.onap.portalapp.config;
+
+import java.util.TimerTask;
+
+import org.onap.portalapp.portal.service.UserNotificationService;
+import org.onap.portalsdk.core.logging.logic.EELFLoggerDelegate;
+
+public class NotificationCleanup extends TimerTask {
+ private EELFLoggerDelegate logger = EELFLoggerDelegate.getLogger(NotificationCleanup.class);
+
+ @Override
+ public void run() {
+ logger.debug(EELFLoggerDelegate.debugLogger, "run: cleaning the ep-notification table");
+ UserNotificationService notificationService = NotificationCleanupConfig.getApplicationContext()
+ .getBean(UserNotificationService.class);
+ notificationService.deleteNotificationsFromEpUserNotificationTable();
+ notificationService.deleteNotificationsFromEpRoleNotificationTable();
+ notificationService.deleteNotificationsFromEpNotificationTable();
+ }
+
+} \ No newline at end of file
diff --git a/ecomp-portal-BE-common/src/main/java/org/onap/portalapp/config/NotificationCleanupConfig.java b/ecomp-portal-BE-common/src/main/java/org/onap/portalapp/config/NotificationCleanupConfig.java
new file mode 100644
index 00000000..1cf4091c
--- /dev/null
+++ b/ecomp-portal-BE-common/src/main/java/org/onap/portalapp/config/NotificationCleanupConfig.java
@@ -0,0 +1,80 @@
+/*-
+ * ============LICENSE_START==========================================
+ * ONAP Portal
+ * ===================================================================
+ * Copyright (C) 2017 AT&T Intellectual Property. All rights reserved.
+ * ===================================================================
+ *
+ * Unless otherwise specified, all software contained herein is licensed
+ * under the Apache License, Version 2.0 (the "License");
+ * you may not use this software 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.
+ *
+ * Unless otherwise specified, all documentation contained herein is licensed
+ * under the Creative Commons License, Attribution 4.0 Intl. (the "License");
+ * you may not use this documentation except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * https://creativecommons.org/licenses/by/4.0/
+ *
+ * Unless required by applicable law or agreed to in writing, documentation
+ * 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.
+ *
+ * ============LICENSE_END============================================
+ *
+ * ECOMP is a trademark and service mark of AT&T Intellectual Property.
+ */
+package org.onap.portalapp.config;
+
+import java.util.Timer;
+import java.util.TimerTask;
+
+import javax.annotation.PostConstruct;
+
+import org.springframework.beans.BeansException;
+import org.springframework.context.ApplicationContext;
+import org.springframework.context.ApplicationContextAware;
+import org.springframework.context.annotation.Bean;
+import org.springframework.context.annotation.Configuration;
+
+@Configuration
+public class NotificationCleanupConfig implements ApplicationContextAware {
+
+ // Once every 10 minutes should be adequate
+ public final static int CLEANUP_PERIOD_MINUTES = 10;
+
+ private static ApplicationContext applicationContext;
+
+ public void setApplicationContext(ApplicationContext context) throws BeansException {
+ applicationContext = context;
+ }
+
+ public static ApplicationContext getApplicationContext() {
+ return applicationContext;
+
+ }
+
+ @PostConstruct
+ public void StartSchedular() {
+ TimerTask task = new NotificationCleanup();
+ Timer timer = new Timer();
+ timer.schedule(task, 1000, CLEANUP_PERIOD_MINUTES * 60 * 1000);
+ }
+
+ @Bean
+ public NotificationCleanupConfig getConfig() {
+ return new NotificationCleanupConfig();
+ }
+
+} \ No newline at end of file
diff --git a/ecomp-portal-BE-common/src/main/java/org/onap/portalapp/config/PortalCentralAccessConfiguration.java b/ecomp-portal-BE-common/src/main/java/org/onap/portalapp/config/PortalCentralAccessConfiguration.java
new file mode 100644
index 00000000..f19f238e
--- /dev/null
+++ b/ecomp-portal-BE-common/src/main/java/org/onap/portalapp/config/PortalCentralAccessConfiguration.java
@@ -0,0 +1,66 @@
+/*-
+ * ============LICENSE_START==========================================
+ * ONAP Portal
+ * ===================================================================
+ * Copyright (C) 2017 AT&T Intellectual Property. All rights reserved.
+ * ===================================================================
+ *
+ * Unless otherwise specified, all software contained herein is licensed
+ * under the Apache License, Version 2.0 (the "License");
+ * you may not use this software 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.
+ *
+ * Unless otherwise specified, all documentation contained herein is licensed
+ * under the Creative Commons License, Attribution 4.0 Intl. (the "License");
+ * you may not use this documentation except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * https://creativecommons.org/licenses/by/4.0/
+ *
+ * Unless required by applicable law or agreed to in writing, documentation
+ * 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.
+ *
+ * ============LICENSE_END============================================
+ *
+ * ECOMP is a trademark and service mark of AT&T Intellectual Property.
+ */
+package org.onap.portalapp.config;
+
+import org.onap.portalapp.portal.service.EPRoleFunctionService;
+import org.onap.portalapp.portal.service.EPRoleFunctionServiceCentralizedImpl;
+import org.onap.portalapp.portal.service.EPRoleFunctionServiceImpl;
+import org.onap.portalsdk.core.service.CentralAccessCondition;
+import org.onap.portalsdk.core.service.LocalAccessCondition;
+import org.springframework.context.annotation.Bean;
+import org.springframework.context.annotation.Conditional;
+import org.springframework.context.annotation.Configuration;
+
+@Configuration
+public class PortalCentralAccessConfiguration {
+
+
+ @Bean
+ @Conditional(LocalAccessCondition.class)
+ public EPRoleFunctionService ePRoleFunctionServiceImpl() {
+ return new EPRoleFunctionServiceImpl();
+ }
+
+
+ @Bean
+ @Conditional(CentralAccessCondition.class)
+ public EPRoleFunctionService ePRoleFunctionServiceCentralizedImpl() {
+ return new EPRoleFunctionServiceCentralizedImpl();
+ }
+
+}
diff --git a/ecomp-portal-BE-common/src/main/java/org/onap/portalapp/config/SwaggerConfig.java b/ecomp-portal-BE-common/src/main/java/org/onap/portalapp/config/SwaggerConfig.java
new file mode 100644
index 00000000..96aaaebe
--- /dev/null
+++ b/ecomp-portal-BE-common/src/main/java/org/onap/portalapp/config/SwaggerConfig.java
@@ -0,0 +1,76 @@
+/*-
+ * ============LICENSE_START==========================================
+ * ONAP Portal
+ * ===================================================================
+ * Copyright (C) 2017 AT&T Intellectual Property. All rights reserved.
+ * ===================================================================
+ *
+ * Unless otherwise specified, all software contained herein is licensed
+ * under the Apache License, Version 2.0 (the "License");
+ * you may not use this software 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.
+ *
+ * Unless otherwise specified, all documentation contained herein is licensed
+ * under the Creative Commons License, Attribution 4.0 Intl. (the "License");
+ * you may not use this documentation except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * https://creativecommons.org/licenses/by/4.0/
+ *
+ * Unless required by applicable law or agreed to in writing, documentation
+ * 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.
+ *
+ * ============LICENSE_END============================================
+ *
+ * ECOMP is a trademark and service mark of AT&T Intellectual Property.
+ */
+package org.onap.portalapp.config;
+
+import org.springframework.context.annotation.Bean;
+import org.springframework.context.annotation.Configuration;
+
+import springfox.documentation.builders.ApiInfoBuilder;
+import springfox.documentation.builders.PathSelectors;
+import springfox.documentation.builders.RequestHandlerSelectors;
+import springfox.documentation.service.ApiInfo;
+import springfox.documentation.spi.DocumentationType;
+import springfox.documentation.spring.web.plugins.Docket;
+import springfox.documentation.swagger2.annotations.EnableSwagger2;
+
+@Configuration
+@EnableSwagger2
+public class SwaggerConfig {
+
+ @Bean
+ public Docket api(){
+ return new Docket(DocumentationType.SWAGGER_2)
+ .select()
+ .apis(RequestHandlerSelectors.any())
+ .paths(PathSelectors.regex("/auxapi/.*"))
+ .build()
+ .apiInfo(apiInfo());
+ }
+
+ private ApiInfo apiInfo() {
+ return new ApiInfoBuilder()
+ .title("ONAP Portal API")
+ .description("ONAP Portal API Documentation")
+ .version("2.1")
+ .termsOfServiceUrl("http://www.onap.org")
+ .license("Apache 2.0")
+ .licenseUrl("https://www.apache.org/licenses/LICENSE-2.0")
+ .build();
+ }
+
+}
diff --git a/ecomp-portal-BE-common/src/main/java/org/onap/portalapp/config/SwaggerMVCConfig.java b/ecomp-portal-BE-common/src/main/java/org/onap/portalapp/config/SwaggerMVCConfig.java
new file mode 100644
index 00000000..668c3f35
--- /dev/null
+++ b/ecomp-portal-BE-common/src/main/java/org/onap/portalapp/config/SwaggerMVCConfig.java
@@ -0,0 +1,55 @@
+/*-
+ * ============LICENSE_START==========================================
+ * ONAP Portal
+ * ===================================================================
+ * Copyright (C) 2017 AT&T Intellectual Property. All rights reserved.
+ * ===================================================================
+ *
+ * Unless otherwise specified, all software contained herein is licensed
+ * under the Apache License, Version 2.0 (the "License");
+ * you may not use this software 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.
+ *
+ * Unless otherwise specified, all documentation contained herein is licensed
+ * under the Creative Commons License, Attribution 4.0 Intl. (the "License");
+ * you may not use this documentation except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * https://creativecommons.org/licenses/by/4.0/
+ *
+ * Unless required by applicable law or agreed to in writing, documentation
+ * 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.
+ *
+ * ============LICENSE_END============================================
+ *
+ * ECOMP is a trademark and service mark of AT&T Intellectual Property.
+ */
+package org.onap.portalapp.config;
+
+import org.springframework.context.annotation.Configuration;
+import org.springframework.web.servlet.config.annotation.EnableWebMvc;
+import org.springframework.web.servlet.config.annotation.ResourceHandlerRegistry;
+import org.springframework.web.servlet.config.annotation.WebMvcConfigurerAdapter;
+
+@Configuration
+@EnableWebMvc
+public class SwaggerMVCConfig extends WebMvcConfigurerAdapter {
+
+ @Override
+ public void addResourceHandlers(ResourceHandlerRegistry registry) {
+ registry.addResourceHandler("swagger-ui.html").addResourceLocations("classpath:/META-INF/resources/");
+ registry.addResourceHandler("/webjars/**").addResourceLocations("classpath:/META-INF/resources/webjars/");
+ }
+
+}
diff --git a/ecomp-portal-BE-common/src/main/java/org/onap/portalapp/controller/EPFusionBaseController.java b/ecomp-portal-BE-common/src/main/java/org/onap/portalapp/controller/EPFusionBaseController.java
new file mode 100644
index 00000000..a425812f
--- /dev/null
+++ b/ecomp-portal-BE-common/src/main/java/org/onap/portalapp/controller/EPFusionBaseController.java
@@ -0,0 +1,122 @@
+/*-
+ * ============LICENSE_START==========================================
+ * ONAP Portal
+ * ===================================================================
+ * Copyright (C) 2017 AT&T Intellectual Property. All rights reserved.
+ * ===================================================================
+ *
+ * Unless otherwise specified, all software contained herein is licensed
+ * under the Apache License, Version 2.0 (the "License");
+ * you may not use this software 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.
+ *
+ * Unless otherwise specified, all documentation contained herein is licensed
+ * under the Creative Commons License, Attribution 4.0 Intl. (the "License");
+ * you may not use this documentation except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * https://creativecommons.org/licenses/by/4.0/
+ *
+ * Unless required by applicable law or agreed to in writing, documentation
+ * 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.
+ *
+ * ============LICENSE_END============================================
+ *
+ * ECOMP is a trademark and service mark of AT&T Intellectual Property.
+ */
+package org.onap.portalapp.controller;
+
+import java.util.ArrayList;
+import java.util.HashMap;
+import java.util.List;
+import java.util.Map;
+import java.util.Set;
+
+import javax.servlet.http.HttpServletRequest;
+import javax.servlet.http.HttpSession;
+
+import org.onap.portalapp.portal.domain.EPUser;
+import org.onap.portalapp.util.EPUserUtils;
+import org.onap.portalsdk.core.controller.FusionBaseController;
+import org.onap.portalsdk.core.domain.MenuData;
+import org.onap.portalsdk.core.logging.logic.EELFLoggerDelegate;
+import org.onap.portalsdk.core.util.SystemProperties;
+import org.springframework.stereotype.Controller;
+import org.springframework.web.bind.annotation.ModelAttribute;
+
+import com.fasterxml.jackson.databind.ObjectMapper;
+
+@Controller
+public abstract class EPFusionBaseController extends FusionBaseController {
+
+ private EELFLoggerDelegate logger = EELFLoggerDelegate.getLogger(EPFusionBaseController.class);
+
+ @Override
+ public boolean isAccessible() {
+ return true;
+ }
+
+ public boolean isRESTfulCall() {
+ return true;
+ }
+
+ @ModelAttribute("menu")
+ public Map<String, Object> messages(HttpServletRequest request) {
+ HttpSession session = null;
+ Map<String, Object> model = new HashMap<String, Object>();
+ session = request.getSession();
+ EPUser user = EPUserUtils.getUserSession(request);
+ if (session != null && user != null) {
+ @SuppressWarnings("unchecked")
+ Set<MenuData> menuResult = (Set<MenuData>) session
+ .getAttribute(SystemProperties.getProperty(SystemProperties.APPLICATION_MENU_ATTRIBUTE_NAME));
+ try {
+ model = setMenu(menuResult);
+ } catch (Exception e) {
+ logger.error(EELFLoggerDelegate.errorLogger, "messages failed", e);
+ }
+ }
+
+ return model;
+ }
+
+ public Map<String, Object> setMenu(Set<MenuData> menuResult) throws Exception {
+ ObjectMapper mapper = new ObjectMapper();
+ List<List<MenuData>> childItemList = new ArrayList<List<MenuData>>();
+
+ List<MenuData> parentList = new ArrayList<MenuData>();
+
+ Map<String, Object> model = new HashMap<String, Object>();
+ for (MenuData menu : menuResult) {
+ MenuData parentData = new MenuData();
+ parentData.setLabel(menu.getLabel());
+ parentData.setAction(menu.getAction());
+ parentData.setImageSrc(menu.getImageSrc());
+ parentList.add(parentData);
+ List<MenuData> tempList = new ArrayList<MenuData>();
+ for (Object o : menu.getChildMenus()) {
+ MenuData m = (MenuData) o;
+ MenuData data = new MenuData();
+ data.setLabel(m.getLabel());
+ data.setAction(m.getAction());
+ data.setImageSrc(m.getImageSrc());
+ tempList.add(data);
+ }
+ childItemList.add(tempList);
+ }
+ model.put("childItemList", mapper.writeValueAsString(childItemList));
+ model.put("parentList", mapper.writeValueAsString(parentList));
+ return model;
+ }
+}
diff --git a/ecomp-portal-BE-common/src/main/java/org/onap/portalapp/controller/EPRestrictedBaseController.java b/ecomp-portal-BE-common/src/main/java/org/onap/portalapp/controller/EPRestrictedBaseController.java
new file mode 100644
index 00000000..82931249
--- /dev/null
+++ b/ecomp-portal-BE-common/src/main/java/org/onap/portalapp/controller/EPRestrictedBaseController.java
@@ -0,0 +1,70 @@
+/*-
+ * ============LICENSE_START==========================================
+ * ONAP Portal
+ * ===================================================================
+ * Copyright (C) 2017 AT&T Intellectual Property. All rights reserved.
+ * ===================================================================
+ *
+ * Unless otherwise specified, all software contained herein is licensed
+ * under the Apache License, Version 2.0 (the "License");
+ * you may not use this software 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.
+ *
+ * Unless otherwise specified, all documentation contained herein is licensed
+ * under the Creative Commons License, Attribution 4.0 Intl. (the "License");
+ * you may not use this documentation except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * https://creativecommons.org/licenses/by/4.0/
+ *
+ * Unless required by applicable law or agreed to in writing, documentation
+ * 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.
+ *
+ * ============LICENSE_END============================================
+ *
+ * ECOMP is a trademark and service mark of AT&T Intellectual Property.
+ */
+package org.onap.portalapp.controller;
+
+public class EPRestrictedBaseController extends EPFusionBaseController{
+
+ protected String viewName;
+ private String exceptionView;
+
+ @Override
+ public boolean isAccessible() {
+ return false;
+ }
+
+ @Override
+ public boolean isRESTfulCall(){
+ return false;
+ }
+
+ protected String getViewName() {
+ return viewName;
+ }
+
+ protected void setViewName(String viewName) {
+ this.viewName = viewName;
+ }
+
+ public String getExceptionView() {
+ return (exceptionView == null) ? "runtime_error_handler" : exceptionView;
+ }
+
+ public void setExceptionView(String exceptionView) {
+ this.exceptionView = exceptionView;
+ }
+}
diff --git a/ecomp-portal-BE-common/src/main/java/org/onap/portalapp/controller/EPRestrictedRESTfulBaseController.java b/ecomp-portal-BE-common/src/main/java/org/onap/portalapp/controller/EPRestrictedRESTfulBaseController.java
new file mode 100644
index 00000000..1532f688
--- /dev/null
+++ b/ecomp-portal-BE-common/src/main/java/org/onap/portalapp/controller/EPRestrictedRESTfulBaseController.java
@@ -0,0 +1,72 @@
+/*-
+ * ============LICENSE_START==========================================
+ * ONAP Portal
+ * ===================================================================
+ * Copyright (C) 2017 AT&T Intellectual Property. All rights reserved.
+ * ===================================================================
+ *
+ * Unless otherwise specified, all software contained herein is licensed
+ * under the Apache License, Version 2.0 (the "License");
+ * you may not use this software 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.
+ *
+ * Unless otherwise specified, all documentation contained herein is licensed
+ * under the Creative Commons License, Attribution 4.0 Intl. (the "License");
+ * you may not use this documentation except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * https://creativecommons.org/licenses/by/4.0/
+ *
+ * Unless required by applicable law or agreed to in writing, documentation
+ * 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.
+ *
+ * ============LICENSE_END============================================
+ *
+ * ECOMP is a trademark and service mark of AT&T Intellectual Property.
+ */
+package org.onap.portalapp.controller;
+
+public class EPRestrictedRESTfulBaseController extends EPFusionBaseController{
+
+ protected String viewName;
+ private String exceptionView;
+
+ @Override
+ public boolean isAccessible() {
+ return false;
+ }
+
+ @Override
+ public boolean isRESTfulCall(){
+ return true;
+ }
+
+ protected String getViewName() {
+ return viewName;
+ }
+
+ protected void setViewName(String viewName) {
+ this.viewName = viewName;
+ }
+
+ public String getExceptionView() {
+ return (exceptionView == null) ? "runtime_error_handler" : exceptionView;
+ }
+
+ public void setExceptionView(String exceptionView) {
+ this.exceptionView = exceptionView;
+ }
+
+
+}
diff --git a/ecomp-portal-BE-common/src/main/java/org/onap/portalapp/controller/EPUnRestrictedBaseController.java b/ecomp-portal-BE-common/src/main/java/org/onap/portalapp/controller/EPUnRestrictedBaseController.java
new file mode 100644
index 00000000..7d0c18f6
--- /dev/null
+++ b/ecomp-portal-BE-common/src/main/java/org/onap/portalapp/controller/EPUnRestrictedBaseController.java
@@ -0,0 +1,60 @@
+/*-
+ * ============LICENSE_START==========================================
+ * ONAP Portal
+ * ===================================================================
+ * Copyright (C) 2017 AT&T Intellectual Property. All rights reserved.
+ * ===================================================================
+ *
+ * Unless otherwise specified, all software contained herein is licensed
+ * under the Apache License, Version 2.0 (the "License");
+ * you may not use this software 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.
+ *
+ * Unless otherwise specified, all documentation contained herein is licensed
+ * under the Creative Commons License, Attribution 4.0 Intl. (the "License");
+ * you may not use this documentation except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * https://creativecommons.org/licenses/by/4.0/
+ *
+ * Unless required by applicable law or agreed to in writing, documentation
+ * 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.
+ *
+ * ============LICENSE_END============================================
+ *
+ * ECOMP is a trademark and service mark of AT&T Intellectual Property.
+ */
+package org.onap.portalapp.controller;
+
+public class EPUnRestrictedBaseController extends EPFusionBaseController{
+ protected String viewName;
+
+ @Override
+ public boolean isAccessible() {
+ return true;
+ }
+
+ @Override
+ public boolean isRESTfulCall(){
+ return false;
+ }
+
+ protected String getViewName() {
+ return viewName;
+ }
+
+ protected void setViewName(String viewName) {
+ this.viewName = viewName;
+ }
+}
diff --git a/ecomp-portal-BE-common/src/main/java/org/onap/portalapp/controller/sessionmgt/SessionCommunicationController.java b/ecomp-portal-BE-common/src/main/java/org/onap/portalapp/controller/sessionmgt/SessionCommunicationController.java
new file mode 100644
index 00000000..e17c67c5
--- /dev/null
+++ b/ecomp-portal-BE-common/src/main/java/org/onap/portalapp/controller/sessionmgt/SessionCommunicationController.java
@@ -0,0 +1,90 @@
+/*-
+ * ============LICENSE_START==========================================
+ * ONAP Portal
+ * ===================================================================
+ * Copyright (C) 2017 AT&T Intellectual Property. All rights reserved.
+ * ===================================================================
+ *
+ * Unless otherwise specified, all software contained herein is licensed
+ * under the Apache License, Version 2.0 (the "License");
+ * you may not use this software 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.
+ *
+ * Unless otherwise specified, all documentation contained herein is licensed
+ * under the Creative Commons License, Attribution 4.0 Intl. (the "License");
+ * you may not use this documentation except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * https://creativecommons.org/licenses/by/4.0/
+ *
+ * Unless required by applicable law or agreed to in writing, documentation
+ * 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.
+ *
+ * ============LICENSE_END============================================
+ *
+ * ECOMP is a trademark and service mark of AT&T Intellectual Property.
+ */
+package org.onap.portalapp.controller.sessionmgt;
+
+import javax.servlet.http.HttpServletRequest;
+import javax.servlet.http.HttpServletResponse;
+
+import org.onap.portalapp.controller.EPRestrictedRESTfulBaseController;
+import org.onap.portalapp.portal.logging.aop.EPAuditLog;
+import org.onap.portalapp.portal.utils.PortalConstants;
+import org.onap.portalapp.service.sessionmgt.ManageService;
+import org.onap.portalsdk.core.logging.logic.EELFLoggerDelegate;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.context.annotation.Configuration;
+import org.springframework.context.annotation.EnableAspectJAutoProxy;
+import org.springframework.web.bind.annotation.RequestMapping;
+import org.springframework.web.bind.annotation.RequestMethod;
+import org.springframework.web.bind.annotation.RequestParam;
+import org.springframework.web.bind.annotation.RestController;
+
+import io.swagger.annotations.ApiOperation;
+
+
+@RestController
+@RequestMapping(PortalConstants.REST_AUX_API)
+@Configuration
+@EnableAspectJAutoProxy
+@EPAuditLog
+public class SessionCommunicationController extends EPRestrictedRESTfulBaseController {
+ private EELFLoggerDelegate logger = EELFLoggerDelegate.getLogger(SessionCommunicationController.class);
+
+ @Autowired
+ private ManageService manageService;
+
+ protected boolean isAuxRESTfulCall(){
+ return true;
+ }
+
+ @ApiOperation(value = "Gets session slot-check interval, a duration in milliseconds.",
+ response = Integer.class)
+ @RequestMapping(value={"/getSessionSlotCheckInterval"}, method = RequestMethod.GET, produces = "application/json")
+ public Integer getSessionSlotCheckInterval(HttpServletRequest request, HttpServletResponse response) throws Exception {
+ return manageService.fetchSessionSlotCheckInterval();
+ }
+
+ @ApiOperation(value = "Extends session timeout values for all on-boarded applications.",
+ response = Boolean.class)
+ @RequestMapping(value={"/extendSessionTimeOuts"}, method = RequestMethod.POST)
+ public Boolean extendSessionTimeOuts(HttpServletRequest request, HttpServletResponse response, @RequestParam String sessionMap) throws Exception {
+ manageService.extendSessionTimeOuts(sessionMap);
+
+ return true;
+ }
+
+}
diff --git a/ecomp-portal-BE-common/src/main/java/org/onap/portalapp/externalsystemapproval/model/ExternalSystemRoleApproval.java b/ecomp-portal-BE-common/src/main/java/org/onap/portalapp/externalsystemapproval/model/ExternalSystemRoleApproval.java
new file mode 100644
index 00000000..5c6ca1ad
--- /dev/null
+++ b/ecomp-portal-BE-common/src/main/java/org/onap/portalapp/externalsystemapproval/model/ExternalSystemRoleApproval.java
@@ -0,0 +1,56 @@
+/*-
+ * ============LICENSE_START==========================================
+ * ONAP Portal
+ * ===================================================================
+ * Copyright (C) 2017 AT&T Intellectual Property. All rights reserved.
+ * ===================================================================
+ *
+ * Unless otherwise specified, all software contained herein is licensed
+ * under the Apache License, Version 2.0 (the "License");
+ * you may not use this software 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.
+ *
+ * Unless otherwise specified, all documentation contained herein is licensed
+ * under the Creative Commons License, Attribution 4.0 Intl. (the "License");
+ * you may not use this documentation except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * https://creativecommons.org/licenses/by/4.0/
+ *
+ * Unless required by applicable law or agreed to in writing, documentation
+ * 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.
+ *
+ * ============LICENSE_END============================================
+ *
+ * ECOMP is a trademark and service mark of AT&T Intellectual Property.
+ */
+package org.onap.portalapp.externalsystemapproval.model;
+
+import java.io.Serializable;
+
+public class ExternalSystemRoleApproval implements Serializable {
+
+ private static final long serialVersionUID = 6048830318039958615L;
+
+ private String roleName;
+
+ public String getRoleName() {
+ return roleName;
+ }
+
+ public void setRoleName(String roleName) {
+ this.roleName = roleName;
+ }
+
+}
diff --git a/ecomp-portal-BE-common/src/main/java/org/onap/portalapp/externalsystemapproval/model/ExternalSystemUser.java b/ecomp-portal-BE-common/src/main/java/org/onap/portalapp/externalsystemapproval/model/ExternalSystemUser.java
new file mode 100644
index 00000000..47128ca5
--- /dev/null
+++ b/ecomp-portal-BE-common/src/main/java/org/onap/portalapp/externalsystemapproval/model/ExternalSystemUser.java
@@ -0,0 +1,92 @@
+/*-
+ * ============LICENSE_START==========================================
+ * ONAP Portal
+ * ===================================================================
+ * Copyright (C) 2017 AT&T Intellectual Property. All rights reserved.
+ * ===================================================================
+ *
+ * Unless otherwise specified, all software contained herein is licensed
+ * under the Apache License, Version 2.0 (the "License");
+ * you may not use this software 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.
+ *
+ * Unless otherwise specified, all documentation contained herein is licensed
+ * under the Creative Commons License, Attribution 4.0 Intl. (the "License");
+ * you may not use this documentation except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * https://creativecommons.org/licenses/by/4.0/
+ *
+ * Unless required by applicable law or agreed to in writing, documentation
+ * 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.
+ *
+ * ============LICENSE_END============================================
+ *
+ * ECOMP is a trademark and service mark of AT&T Intellectual Property.
+ */
+package org.onap.portalapp.externalsystemapproval.model;
+
+
+import java.util.ArrayList;
+import java.util.List;
+
+public class ExternalSystemUser {
+
+ private String loginId;
+
+ private String applicationName;
+
+ private String myloginrequestId;
+
+ private List<ExternalSystemRoleApproval> roles;
+
+ public ExternalSystemUser() {
+ roles = new ArrayList<ExternalSystemRoleApproval>();
+ }
+
+ public String getApplicationName() {
+ return applicationName;
+ }
+
+ public void setApplicationName(String applicationName) {
+ this.applicationName = applicationName;
+ }
+
+ public String getLoginId() {
+ return loginId;
+ }
+
+ public void setLoginId(String loginId) {
+ this.loginId = loginId;
+ }
+
+ public List<ExternalSystemRoleApproval> getRoles() {
+ return roles;
+ }
+
+ public void setRoles(List<ExternalSystemRoleApproval> roles) {
+ this.roles = roles;
+ }
+
+ public String getMyloginrequestId() {
+ return myloginrequestId;
+ }
+
+ public void setMyloginrequestId(String myloginrequestId) {
+ this.myloginrequestId = myloginrequestId;
+ }
+
+
+
+}
diff --git a/ecomp-portal-BE-common/src/main/java/org/onap/portalapp/model/Result.java b/ecomp-portal-BE-common/src/main/java/org/onap/portalapp/model/Result.java
new file mode 100644
index 00000000..ce50d564
--- /dev/null
+++ b/ecomp-portal-BE-common/src/main/java/org/onap/portalapp/model/Result.java
@@ -0,0 +1,55 @@
+/*-
+ * ============LICENSE_START==========================================
+ * ONAP Portal
+ * ===================================================================
+ * Copyright (C) 2017 AT&T Intellectual Property. All rights reserved.
+ * ===================================================================
+ *
+ * Unless otherwise specified, all software contained herein is licensed
+ * under the Apache License, Version 2.0 (the "License");
+ * you may not use this software 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.
+ *
+ * Unless otherwise specified, all documentation contained herein is licensed
+ * under the Creative Commons License, Attribution 4.0 Intl. (the "License");
+ * you may not use this documentation except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * https://creativecommons.org/licenses/by/4.0/
+ *
+ * Unless required by applicable law or agreed to in writing, documentation
+ * 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.
+ *
+ * ============LICENSE_END============================================
+ *
+ * ECOMP is a trademark and service mark of AT&T Intellectual Property.
+ */
+package org.onap.portalapp.model;
+
+public class Result {
+ private String result;
+
+ public Result(String result) {
+ this.result = result;
+ }
+
+ public String getResult() {
+ return result;
+ }
+
+ public void setResult(String result) {
+ this.result = result;
+ }
+
+}
diff --git a/ecomp-portal-BE-common/src/main/java/org/onap/portalapp/portal/controller/AppCatalogController.java b/ecomp-portal-BE-common/src/main/java/org/onap/portalapp/portal/controller/AppCatalogController.java
new file mode 100644
index 00000000..80a236df
--- /dev/null
+++ b/ecomp-portal-BE-common/src/main/java/org/onap/portalapp/portal/controller/AppCatalogController.java
@@ -0,0 +1,148 @@
+/*-
+ * ============LICENSE_START==========================================
+ * ONAP Portal
+ * ===================================================================
+ * Copyright (C) 2017 AT&T Intellectual Property. All rights reserved.
+ * ===================================================================
+ *
+ * Unless otherwise specified, all software contained herein is licensed
+ * under the Apache License, Version 2.0 (the "License");
+ * you may not use this software 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.
+ *
+ * Unless otherwise specified, all documentation contained herein is licensed
+ * under the Creative Commons License, Attribution 4.0 Intl. (the "License");
+ * you may not use this documentation except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * https://creativecommons.org/licenses/by/4.0/
+ *
+ * Unless required by applicable law or agreed to in writing, documentation
+ * 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.
+ *
+ * ============LICENSE_END============================================
+ *
+ * ECOMP is a trademark and service mark of AT&T Intellectual Property.
+ */
+package org.onap.portalapp.portal.controller;
+
+import java.io.IOException;
+import java.util.List;
+
+import javax.servlet.http.HttpServletRequest;
+import javax.servlet.http.HttpServletResponse;
+
+import org.onap.portalapp.controller.EPRestrictedBaseController;
+import org.onap.portalapp.portal.domain.EPApp;
+import org.onap.portalapp.portal.domain.EPUser;
+import org.onap.portalapp.portal.ecomp.model.AppCatalogItem;
+import org.onap.portalapp.portal.logging.aop.EPAuditLog;
+import org.onap.portalapp.portal.service.AdminRolesService;
+import org.onap.portalapp.portal.service.EPAppService;
+import org.onap.portalapp.portal.service.PersUserAppService;
+import org.onap.portalapp.portal.transport.AppCatalogPersonalization;
+import org.onap.portalapp.portal.transport.FieldsValidator;
+import org.onap.portalapp.portal.utils.EcompPortalUtils;
+import org.onap.portalapp.util.EPUserUtils;
+import org.onap.portalsdk.core.logging.logic.EELFLoggerDelegate;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.context.annotation.EnableAspectJAutoProxy;
+import org.springframework.web.bind.annotation.RequestBody;
+import org.springframework.web.bind.annotation.RequestMapping;
+import org.springframework.web.bind.annotation.RequestMethod;
+import org.springframework.web.bind.annotation.RestController;
+
+@RestController
+@org.springframework.context.annotation.Configuration
+@EnableAspectJAutoProxy
+@EPAuditLog
+public class AppCatalogController extends EPRestrictedBaseController {
+
+ private EELFLoggerDelegate logger = EELFLoggerDelegate.getLogger(AppCatalogController.class);
+
+ @Autowired
+ private AdminRolesService adminRolesService;
+ @Autowired
+ private EPAppService appService;
+ @Autowired
+ private PersUserAppService persUserAppService;
+
+ /**
+ * RESTful service method to fetch all enabled applications, with details
+ * about which are accessible to the current user, selected by the current
+ * user.
+ *
+ * @param request
+ * HttpServletRequest
+ * @param response
+ * HttpServletResponse
+ * @throws IOException If sendError fails
+ * @return List of items suitable for display
+ */
+ @RequestMapping(value = { "/portalApi/appCatalog" }, method = RequestMethod.GET, produces = "application/json")
+ public List<AppCatalogItem> getAppCatalog(HttpServletRequest request, HttpServletResponse response)
+ throws IOException {
+ EPUser user = EPUserUtils.getUserSession(request);
+ List<AppCatalogItem> appCatalog = null;
+ try {
+ if (user == null) {
+ EcompPortalUtils.setBadPermissions(user, response, "getAppCatalog");
+ } else {
+ if (adminRolesService.isSuperAdmin(user))
+ appCatalog = appService.getAdminAppCatalog(user);
+ else
+ appCatalog = appService.getUserAppCatalog(user);
+ EcompPortalUtils.logAndSerializeObject(logger, "/portalApi/getAppCatalog", "GET result =", appCatalog);
+ }
+ } catch (Exception e) {
+ logger.error(EELFLoggerDelegate.errorLogger, "getAppCatalog failed", e);
+ response.sendError(HttpServletResponse.SC_INTERNAL_SERVER_ERROR, e.toString());
+ }
+ return appCatalog;
+ }
+
+ /**
+ * RESTful service to accept a user's action made on the application
+ * catalog.
+ *
+ * @param request
+ * HttpServletRequest
+ * @param persRequest
+ * JSON with data including application ID
+ * @param response
+ * HttpServletResponse
+ * @return FieldsValidator
+ * @throws IOException If sendError fails
+ */
+ @RequestMapping(value = { "/portalApi/appCatalog" }, method = RequestMethod.PUT, produces = "application/json")
+ public FieldsValidator putAppCatalogSelection(HttpServletRequest request,
+ @RequestBody AppCatalogPersonalization persRequest, HttpServletResponse response) throws IOException {
+ FieldsValidator result = new FieldsValidator();
+ EPApp app = appService.getApp(persRequest.getAppId());
+ EPUser user = EPUserUtils.getUserSession(request);
+ try {
+ if (app == null || user == null) {
+ EcompPortalUtils.setBadPermissions(user, response, "putAppCatalogSelection");
+ } else {
+ persUserAppService.setPersUserAppValue(user, app, persRequest.getSelect(), persRequest.getPending());
+ }
+ } catch (Exception e) {
+ logger.error(EELFLoggerDelegate.errorLogger, "putAppCatalogSelection failed", e);
+ response.sendError(HttpServletResponse.SC_INTERNAL_SERVER_ERROR, e.toString());
+ }
+ result.httpStatusCode = new Long(HttpServletResponse.SC_OK);
+ return result;
+ }
+
+} \ No newline at end of file
diff --git a/ecomp-portal-BE-common/src/main/java/org/onap/portalapp/portal/controller/AppContactUsController.java b/ecomp-portal-BE-common/src/main/java/org/onap/portalapp/portal/controller/AppContactUsController.java
new file mode 100644
index 00000000..409b75d2
--- /dev/null
+++ b/ecomp-portal-BE-common/src/main/java/org/onap/portalapp/portal/controller/AppContactUsController.java
@@ -0,0 +1,242 @@
+/*-
+ * ============LICENSE_START==========================================
+ * ONAP Portal
+ * ===================================================================
+ * Copyright (C) 2017 AT&T Intellectual Property. All rights reserved.
+ * ===================================================================
+ *
+ * Unless otherwise specified, all software contained herein is licensed
+ * under the Apache License, Version 2.0 (the "License");
+ * you may not use this software 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.
+ *
+ * Unless otherwise specified, all documentation contained herein is licensed
+ * under the Creative Commons License, Attribution 4.0 Intl. (the "License");
+ * you may not use this documentation except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * https://creativecommons.org/licenses/by/4.0/
+ *
+ * Unless required by applicable law or agreed to in writing, documentation
+ * 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.
+ *
+ * ============LICENSE_END============================================
+ *
+ * ECOMP is a trademark and service mark of AT&T Intellectual Property.
+ */
+package org.onap.portalapp.portal.controller;
+
+import java.util.Collections;
+import java.util.Comparator;
+import java.util.HashMap;
+import java.util.List;
+
+import javax.servlet.http.HttpServletRequest;
+
+import org.json.JSONObject;
+import org.onap.portalapp.controller.EPRestrictedBaseController;
+import org.onap.portalapp.portal.ecomp.model.AppCategoryFunctionsItem;
+import org.onap.portalapp.portal.ecomp.model.AppContactUsItem;
+import org.onap.portalapp.portal.ecomp.model.PortalRestResponse;
+import org.onap.portalapp.portal.ecomp.model.PortalRestStatusEnum;
+import org.onap.portalapp.portal.logging.aop.EPAuditLog;
+import org.onap.portalapp.portal.service.AppContactUsService;
+import org.onap.portalapp.portal.utils.EPCommonSystemProperties;
+import org.onap.portalsdk.core.logging.logic.EELFLoggerDelegate;
+import org.onap.portalsdk.core.util.SystemProperties;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.context.annotation.EnableAspectJAutoProxy;
+import org.springframework.web.bind.annotation.PathVariable;
+import org.springframework.web.bind.annotation.RequestBody;
+import org.springframework.web.bind.annotation.RequestMapping;
+import org.springframework.web.bind.annotation.RequestMethod;
+import org.springframework.web.bind.annotation.RestController;
+
+@RestController
+@RequestMapping("/portalApi/contactus")
+@org.springframework.context.annotation.Configuration
+@EnableAspectJAutoProxy
+@EPAuditLog
+public class AppContactUsController extends EPRestrictedBaseController {
+
+ static final String FAILURE = "failure";
+
+ private static EELFLoggerDelegate logger = EELFLoggerDelegate.getLogger(AppContactUsController.class);
+
+ @Autowired
+ private AppContactUsService contactUsService;
+
+ /**
+ * Answers a JSON object with three items from the system.properties file:
+ * user self-help ticket URL, email for feedback, and Portal info link.
+ *
+ * @param request HttpServletRequest
+ * @return PortalRestResponse
+ */
+ @RequestMapping(value = "/feedback", method = RequestMethod.GET, produces = "application/json")
+ public PortalRestResponse<String> getPortalDetails(HttpServletRequest request) {
+ PortalRestResponse<String> portalRestResponse = null;
+ try {
+ final String ticketUrl = SystemProperties.getProperty(EPCommonSystemProperties.USH_TICKET_URL);
+ final String portalInfoUrl = SystemProperties.getProperty(EPCommonSystemProperties.PORTAL_INFO_URL);
+ final String feedbackEmail = SystemProperties.getProperty(EPCommonSystemProperties.FEEDBACK_EMAIL_ADDRESS);
+ HashMap<String, String> map = new HashMap<String, String>();
+ map.put(EPCommonSystemProperties.USH_TICKET_URL, ticketUrl);
+ map.put(EPCommonSystemProperties.PORTAL_INFO_URL, portalInfoUrl);
+ map.put(EPCommonSystemProperties.FEEDBACK_EMAIL_ADDRESS, feedbackEmail);
+ JSONObject j = new JSONObject(map);
+ String contactUsPortalResponse = j.toString();
+ portalRestResponse = new PortalRestResponse<String>(PortalRestStatusEnum.OK, "success",
+ contactUsPortalResponse);
+ } catch (Exception e) {
+ return new PortalRestResponse<String>(PortalRestStatusEnum.ERROR, FAILURE, e.getMessage());
+ }
+ return portalRestResponse;
+ }
+
+ /**
+ * Answers the contents of the contact-us table, extended with the
+ * application name.
+ *
+ * @param request HttpServletRequest
+ * @return PortalRestResponse<List<AppContactUsItem>>
+ */
+ @RequestMapping(value = "/list", method = RequestMethod.GET, produces = "application/json")
+ public PortalRestResponse<List<AppContactUsItem>> getAppContactUsList(HttpServletRequest request) {
+ PortalRestResponse<List<AppContactUsItem>> portalRestResponse = null;
+ try {
+ List<AppContactUsItem> contents = contactUsService.getAppContactUs();
+ portalRestResponse = new PortalRestResponse<List<AppContactUsItem>>(PortalRestStatusEnum.OK, "success",
+ contents);
+ } catch (Exception e) {
+ logger.error(EELFLoggerDelegate.errorLogger, "getAppContactUsList failed", e);
+ portalRestResponse = new PortalRestResponse<List<AppContactUsItem>>(PortalRestStatusEnum.ERROR,
+ e.getMessage(), null);
+ }
+ return portalRestResponse;
+ }
+
+ /**
+ * Answers a list of objects, one per application, extended with available
+ * data on how to contact that app's organization (possibly none).
+ *
+ * @param request HttpServletRequest
+ * @return PortalRestResponse<List<AppContactUsItem>>
+ */
+ @RequestMapping(value = "/allapps", method = RequestMethod.GET, produces = "application/json")
+ public PortalRestResponse<List<AppContactUsItem>> getAppsAndContacts(HttpServletRequest request) {
+ PortalRestResponse<List<AppContactUsItem>> portalRestResponse = null;
+ try {
+ List<AppContactUsItem> contents = contactUsService.getAppsAndContacts();
+ portalRestResponse = new PortalRestResponse<List<AppContactUsItem>>(PortalRestStatusEnum.OK, "success",
+ contents);
+ } catch (Exception e) {
+ logger.error(EELFLoggerDelegate.errorLogger, "getAllAppsAndContacts failed", e);
+ portalRestResponse = new PortalRestResponse<List<AppContactUsItem>>(PortalRestStatusEnum.ERROR,
+ e.getMessage(), null);
+ }
+ return portalRestResponse;
+ }
+
+ /**
+ * Sorts by category name.
+ */
+ private Comparator<AppCategoryFunctionsItem> appCategoryFunctionsItemComparator = new Comparator<AppCategoryFunctionsItem>() {
+ @Override
+ public int compare(AppCategoryFunctionsItem o1, AppCategoryFunctionsItem o2) {
+ return o1.getCategory().compareTo(o2.getCategory());
+ }
+ };
+
+ /**
+ * Answers a list of objects with category-application-function details. Not
+ * all applications participate in the functional menu.
+ *
+ * @param request HttpServletRequest
+ * @return PortalRestResponse<List<AppCategoryFunctionsItem>>
+ */
+ @RequestMapping(value = "/functions", method = RequestMethod.GET, produces = "application/json")
+ public PortalRestResponse<List<AppCategoryFunctionsItem>> getAppCategoryFunctions(HttpServletRequest request) {
+ PortalRestResponse<List<AppCategoryFunctionsItem>> portalRestResponse = null;
+ try {
+ List<AppCategoryFunctionsItem> contents = contactUsService.getAppCategoryFunctions();
+ // logger.debug(EELFLoggerDelegate.debugLogger,
+ // "getAppCategoryFunctions: result list size is " +
+ // contents.size());
+ Collections.sort(contents, appCategoryFunctionsItemComparator);
+ portalRestResponse = new PortalRestResponse<List<AppCategoryFunctionsItem>>(PortalRestStatusEnum.OK,
+ "success", contents);
+ } catch (Exception e) {
+ logger.error(EELFLoggerDelegate.errorLogger, "getAppCategoryFunctions failed", e);
+ // TODO build JSON error
+ portalRestResponse = new PortalRestResponse<List<AppCategoryFunctionsItem>>(PortalRestStatusEnum.ERROR,
+ e.getMessage(), null);
+ }
+ return portalRestResponse;
+ }
+
+ /**
+ * Accepts a new application's contact us details.
+ *
+ * @param contactUs AppContactUsItem
+ * @return PortalRestResponse<String>
+ */
+ @RequestMapping(value = "/save", method = RequestMethod.POST, produces = "application/json")
+ public PortalRestResponse<String> save(@RequestBody AppContactUsItem contactUs) {
+
+ if (contactUs == null || contactUs.getAppName() == null)
+ return new PortalRestResponse<String>(PortalRestStatusEnum.ERROR, FAILURE,
+ "AppName cannot be null or empty");
+
+ String saveAppContactUs = FAILURE;
+ try {
+ saveAppContactUs = contactUsService.saveAppContactUs(contactUs);
+ } catch (Exception e) {
+ return new PortalRestResponse<String>(PortalRestStatusEnum.ERROR, saveAppContactUs, e.getMessage());
+ }
+ return new PortalRestResponse<String>(PortalRestStatusEnum.OK, saveAppContactUs, "");
+ }
+
+ @RequestMapping(value = "/saveAll", method = RequestMethod.POST, produces = "application/json")
+ public PortalRestResponse<String> save(@RequestBody List<AppContactUsItem> contactUsList) {
+
+ String saveAppContactUs = FAILURE;
+ try {
+ saveAppContactUs = contactUsService.saveAppContactUs(contactUsList);
+ } catch (Exception e) {
+ return new PortalRestResponse<String>(PortalRestStatusEnum.ERROR, saveAppContactUs, e.getMessage());
+ }
+ return new PortalRestResponse<String>(PortalRestStatusEnum.OK, saveAppContactUs, "");
+ }
+
+ /**
+ * Deletes the specified application's contact-us details entry from the
+ * table.
+ *
+ * @param id app ID
+ * @return PortalRestResponse<String>
+ */
+ @RequestMapping(value = "/delete/{appid}", method = RequestMethod.POST, produces = "application/json")
+ public PortalRestResponse<String> delete(@PathVariable("appid") Long id) {
+
+ String saveAppContactUs = FAILURE;
+ try {
+ saveAppContactUs = contactUsService.deleteContactUs(id);
+ } catch (Exception e) {
+ return new PortalRestResponse<String>(PortalRestStatusEnum.ERROR, saveAppContactUs, e.getMessage());
+ }
+ return new PortalRestResponse<String>(PortalRestStatusEnum.OK, saveAppContactUs, "");
+ }
+
+} \ No newline at end of file
diff --git a/ecomp-portal-BE-common/src/main/java/org/onap/portalapp/portal/controller/AppsController.java b/ecomp-portal-BE-common/src/main/java/org/onap/portalapp/portal/controller/AppsController.java
new file mode 100644
index 00000000..3ddfc7c3
--- /dev/null
+++ b/ecomp-portal-BE-common/src/main/java/org/onap/portalapp/portal/controller/AppsController.java
@@ -0,0 +1,812 @@
+/*-
+ * ============LICENSE_START==========================================
+ * ONAP Portal
+ * ===================================================================
+ * Copyright (C) 2017 AT&T Intellectual Property. All rights reserved.
+ * ===================================================================
+ *
+ * Unless otherwise specified, all software contained herein is licensed
+ * under the Apache License, Version 2.0 (the "License");
+ * you may not use this software 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.
+ *
+ * Unless otherwise specified, all documentation contained herein is licensed
+ * under the Creative Commons License, Attribution 4.0 Intl. (the "License");
+ * you may not use this documentation except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * https://creativecommons.org/licenses/by/4.0/
+ *
+ * Unless required by applicable law or agreed to in writing, documentation
+ * 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.
+ *
+ * ============LICENSE_END============================================
+ *
+ * ECOMP is a trademark and service mark of AT&T Intellectual Property.
+ */
+package org.onap.portalapp.portal.controller;
+
+import java.io.IOException;
+import java.util.List;
+import java.util.Set;
+
+import javax.servlet.http.HttpServletRequest;
+import javax.servlet.http.HttpServletResponse;
+
+import org.onap.portalapp.controller.EPRestrictedBaseController;
+import org.onap.portalapp.portal.domain.AdminUserApplications;
+import org.onap.portalapp.portal.domain.AppIdAndNameTransportModel;
+import org.onap.portalapp.portal.domain.AppsResponse;
+import org.onap.portalapp.portal.domain.EPApp;
+import org.onap.portalapp.portal.domain.EPUser;
+import org.onap.portalapp.portal.domain.EcompApp;
+import org.onap.portalapp.portal.domain.UserRoles;
+import org.onap.portalapp.portal.logging.aop.EPAuditLog;
+import org.onap.portalapp.portal.service.AdminRolesService;
+import org.onap.portalapp.portal.service.EPAppService;
+import org.onap.portalapp.portal.service.EPLeftMenuService;
+import org.onap.portalapp.portal.transport.EPAppsManualPreference;
+import org.onap.portalapp.portal.transport.EPAppsSortPreference;
+import org.onap.portalapp.portal.transport.EPDeleteAppsManualSortPref;
+import org.onap.portalapp.portal.transport.EPWidgetsSortPreference;
+import org.onap.portalapp.portal.transport.FieldsValidator;
+import org.onap.portalapp.portal.transport.LocalRole;
+import org.onap.portalapp.portal.transport.OnboardingApp;
+import org.onap.portalapp.portal.utils.EcompPortalUtils;
+import org.onap.portalapp.portal.utils.PortalConstants;
+import org.onap.portalapp.util.EPUserUtils;
+import org.onap.portalsdk.core.logging.logic.EELFLoggerDelegate;
+import org.onap.portalsdk.core.util.SystemProperties;
+import org.onap.portalsdk.core.web.support.AppUtils;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.context.annotation.EnableAspectJAutoProxy;
+import org.springframework.http.HttpEntity;
+import org.springframework.http.HttpHeaders;
+import org.springframework.http.MediaType;
+import org.springframework.web.bind.annotation.PathVariable;
+import org.springframework.web.bind.annotation.RequestBody;
+import org.springframework.web.bind.annotation.RequestMapping;
+import org.springframework.web.bind.annotation.RequestMethod;
+import org.springframework.web.bind.annotation.RestController;
+
+@RestController
+@EnableAspectJAutoProxy
+@EPAuditLog
+public class AppsController extends EPRestrictedBaseController {
+ private EELFLoggerDelegate logger = EELFLoggerDelegate.getLogger(AppsController.class);
+
+ @Autowired
+ private AdminRolesService adminRolesService;
+
+ @Autowired
+ private EPAppService appService;
+
+ @Autowired
+ private EPLeftMenuService leftMenuService;
+
+ /**
+ * RESTful service method to fetch all Applications available to current
+ * user
+ *
+ * @param request
+ * HttpServletRequest
+ * @param response
+ * HttpServletResponse
+ * @return List<EcompApp>
+ */
+ @RequestMapping(value = { "/portalApi/userApps" }, method = RequestMethod.GET, produces = "application/json")
+ public List<EcompApp> getUserApps(HttpServletRequest request, HttpServletResponse response) {
+ EPUser user = EPUserUtils.getUserSession(request);
+ List<EcompApp> ecompApps = null;
+
+ try {
+ if (user == null) {
+ EcompPortalUtils.setBadPermissions(user, response, "getUserApps");
+ } else {
+ ecompApps = appService.transformAppsToEcompApps(appService.getUserApps(user));
+ EcompPortalUtils.logAndSerializeObject(logger, "/portalApi/userApps", "GET result =", ecompApps);
+ }
+ } catch (Exception e) {
+ logger.error(EELFLoggerDelegate.errorLogger, "getUserApps failed", e);
+ }
+
+ return ecompApps;
+ }
+
+ /**
+ * RESTful service method to fetch all applications accessible to the
+ * current user, with personalizations.
+ *
+ * @param request
+ * HttpServletRequest
+ * @param response
+ * HttpServletResponse
+ * @return List<EcompApp>
+ * @throws IOException
+ * if sendError fails
+ */
+ @RequestMapping(value = { "/portalApi/persUserApps" }, method = RequestMethod.GET, produces = "application/json")
+ public List<EcompApp> getPersUserApps(HttpServletRequest request, HttpServletResponse response) throws IOException {
+ EPUser user = EPUserUtils.getUserSession(request);
+ List<EcompApp> ecompApps = null;
+ try {
+ if (user == null) {
+ EcompPortalUtils.setBadPermissions(user, response, "getPersUserApps");
+ } else {
+ List<EPApp> apps = null;
+ if (adminRolesService.isSuperAdmin(user))
+ apps = appService.getPersAdminApps(user);
+ else
+ apps = appService.getPersUserApps(user);
+ ecompApps = appService.transformAppsToEcompApps(apps);
+ EcompPortalUtils.logAndSerializeObject(logger, "/portalApi/userPersApps", "GET result =", ecompApps);
+ }
+ } catch (Exception e) {
+ logger.error(EELFLoggerDelegate.errorLogger, "getPersUserApps failed", e);
+ response.sendError(HttpServletResponse.SC_INTERNAL_SERVER_ERROR, e.toString());
+ }
+ return ecompApps;
+ }
+
+ /**
+ * RESTful service method to fetch applications for which the current user
+ * is an Administrator
+ *
+ * @param request
+ * HttpServletRequest
+ * @param response
+ * HttpServletResponse
+ * @return List<AppIdAndNameTransportModel>
+ */
+ @RequestMapping(value = { "/portalApi/adminApps" }, method = RequestMethod.GET, produces = "application/json")
+ public List<AppIdAndNameTransportModel> getAdminApps(HttpServletRequest request, HttpServletResponse response) {
+ EPUser user = EPUserUtils.getUserSession(request);
+ List<AppIdAndNameTransportModel> adminApps = null;
+
+ try {
+ if (!adminRolesService.isAccountAdmin(user)) {
+ EcompPortalUtils.setBadPermissions(user, response, "getAdminApps");
+ } else {
+ adminApps = appService.getAdminApps(user);
+ EcompPortalUtils.logAndSerializeObject(logger, "/portalApi/adminApps", "GET result =", adminApps);
+ }
+ } catch (Exception e) {
+ logger.error(EELFLoggerDelegate.errorLogger, "getAdminApps failed", e);
+ }
+
+ return adminApps;
+ }
+
+ /**
+ * RESTful service method to fetch Applications for user who is super admin
+ * and/or app admin.
+ *
+ * @param request
+ * HttpServletRequest
+ * @param response
+ * HttpServletResponse
+ * @return List<AppIdAndNameTransportModel>
+ */
+ @RequestMapping(value = {
+ "/portalApi/appsForSuperAdminAndAccountAdmin" }, method = RequestMethod.GET, produces = "application/json")
+ public List<AppIdAndNameTransportModel> getAppsForSuperAdminAndAccountAdmin(HttpServletRequest request,
+ HttpServletResponse response) {
+ EPUser user = EPUserUtils.getUserSession(request);
+ List<AppIdAndNameTransportModel> adminApps = null;
+
+ try {
+ if (!adminRolesService.isSuperAdmin(user) && !adminRolesService.isAccountAdmin(user)) {
+ EcompPortalUtils.setBadPermissions(user, response, "getAdminApps");
+ } else {
+ adminApps = appService.getAppsForSuperAdminAndAccountAdmin(user);
+ EcompPortalUtils.logAndSerializeObject(logger, "/portalApi/appsForSuperAdminAndAccountAdmin",
+ "GET result =", adminApps);
+ }
+ } catch (Exception e) {
+ logger.error(EELFLoggerDelegate.errorLogger, "getAppsForSuperAdminAndAccountAdmin failed", e);
+ }
+
+ return adminApps;
+ }
+
+ /**
+ * RESTful service method to fetch left menu items from the user's session.
+ *
+ * @param request
+ * HttpServletRequest
+ * @param response
+ * HttpServletResponse
+ * @return JSON with left menu
+ */
+ @SuppressWarnings({ "rawtypes", "unchecked" })
+ @RequestMapping(value = { "/portalApi/leftmenuItems" }, method = RequestMethod.GET, produces = "application/json")
+ public String getLeftMenuItems(HttpServletRequest request, HttpServletResponse response) {
+ String menuList = null;
+ Set menuSet = (Set) AppUtils.getSession(request)
+ .getAttribute(SystemProperties.getProperty(SystemProperties.APPLICATION_MENU_ATTRIBUTE_NAME));
+
+ Set roleFunctionSet = (Set) AppUtils.getSession(request)
+ .getAttribute(SystemProperties.getProperty(SystemProperties.ROLE_FUNCTIONS_ATTRIBUTE_NAME));
+
+ EPUser user = EPUserUtils.getUserSession(request);
+
+ try {
+ menuList = leftMenuService.getLeftMenuItems(user, menuSet, roleFunctionSet);
+ EcompPortalUtils.logAndSerializeObject(logger, "/portalApi/leftmenuItems", "GET result =", menuList);
+ } catch (Exception e) {
+ logger.error(EELFLoggerDelegate.errorLogger, "getLeftMenuItems failed", e);
+ }
+ return menuList;
+ }
+
+ @RequestMapping(value = {
+ "/portalApi/userAppsOrderBySortPref" }, method = RequestMethod.GET, produces = "application/json")
+ public List<EcompApp> getUserAppsOrderBySortPref(HttpServletRequest request, HttpServletResponse response) {
+ EPUser user = EPUserUtils.getUserSession(request);
+ List<EcompApp> ecompApps = null;
+ try {
+ if (user == null) {
+ EcompPortalUtils.setBadPermissions(user, response, "getUserAppsOrderBySortPref");
+ } else {
+ String usrSortPref = request.getParameter("mparams");
+ if (usrSortPref.equals("")) {
+ usrSortPref = "N";
+ }
+ switch (usrSortPref) {
+ case "N":
+ ecompApps = appService.transformAppsToEcompApps(appService.getAppsOrderByName(user));
+ EcompPortalUtils.logAndSerializeObject(logger, "/portalApi/userAppsOrderBySortPref", "GET result =",
+ ecompApps);
+ break;
+ case "L":
+ ecompApps = appService.transformAppsToEcompApps(appService.getAppsOrderByLastUsed(user));
+ EcompPortalUtils.logAndSerializeObject(logger, "/portalApi/userAppsOrderBySortPref", "GET result =",
+ ecompApps);
+ break;
+ case "F":
+ ecompApps = appService.transformAppsToEcompApps(appService.getAppsOrderByMostUsed(user));
+ EcompPortalUtils.logAndSerializeObject(logger, "/portalApi/userAppsOrderBySortPref", "GET result =",
+ ecompApps);
+ break;
+ case "M":
+ ecompApps = appService.transformAppsToEcompApps(appService.getAppsOrderByManual(user));
+ EcompPortalUtils.logAndSerializeObject(logger, "/portalApi/userAppsOrderBySortPref", "GET result =",
+ ecompApps);
+ break;
+ default:
+ logger.error(EELFLoggerDelegate.errorLogger,
+ "getUserAppsOrderBySortPref failed: no match for " + usrSortPref);
+ }
+ }
+ } catch (Exception e) {
+ logger.error(EELFLoggerDelegate.errorLogger, "getUserAppsOrderBySortPref failed", e);
+ }
+ return ecompApps;
+ }
+
+ /**
+ * Sets the user apps manual sort preference
+ *
+ * @param request
+ * HTTP servlet request
+ * @param response
+ * HTTP servlet response
+ * @param epAppsManualPref
+ * sort pref
+ * @return FieldsValidator
+ */
+ @RequestMapping(value = {
+ "/portalApi/saveUserAppsSortingManual" }, method = RequestMethod.PUT, produces = "application/json")
+ public FieldsValidator putUserAppsSortingManual(HttpServletRequest request,
+ @RequestBody List<EPAppsManualPreference> epAppsManualPref, HttpServletResponse response) {
+ FieldsValidator fieldsValidator = null;
+ try {
+ EPUser user = EPUserUtils.getUserSession(request);
+ fieldsValidator = appService.saveAppsSortManual(epAppsManualPref, user);
+ response.setStatus(fieldsValidator.httpStatusCode.intValue());
+ } catch (Exception e) {
+ logger.error(EELFLoggerDelegate.errorLogger, "putUserAppsSortingManual failed", e);
+ }
+ EcompPortalUtils.logAndSerializeObject(logger, "/portalApi/saveUserAppsSortingManual", "PUT result =",
+ response.getStatus());
+ return fieldsValidator;
+ }
+
+ @RequestMapping(value = {
+ "/portalApi/saveUserWidgetsSortManual" }, method = RequestMethod.PUT, produces = "application/json")
+ public FieldsValidator putUserWidgetsSortManual(HttpServletRequest request,
+ @RequestBody List<EPWidgetsSortPreference> saveManualWidgetSData, HttpServletResponse response) {
+ FieldsValidator fieldsValidator = null;
+ try {
+ EPUser user = EPUserUtils.getUserSession(request);
+ fieldsValidator = appService.saveWidgetsSortManual(saveManualWidgetSData, user);
+ response.setStatus(fieldsValidator.httpStatusCode.intValue());
+ } catch (Exception e) {
+ logger.error(EELFLoggerDelegate.errorLogger, "putUserWidgetsSortManual failed", e);
+ }
+ // return fieldsValidator;
+ EcompPortalUtils.logAndSerializeObject(logger, "/portalApi/putUserWidgetsSortManual", "PUT result =",
+ response.getStatus());
+ return fieldsValidator;
+ }
+
+ @RequestMapping(value = {
+ "/portalApi/updateWidgetsSortPref" }, method = RequestMethod.PUT, produces = "application/json")
+ public FieldsValidator putUserWidgetsSortPref(HttpServletRequest request,
+ @RequestBody List<EPWidgetsSortPreference> delManualWidgetData, HttpServletResponse response) {
+ FieldsValidator fieldsValidator = null;
+ try {
+ EPUser user = EPUserUtils.getUserSession(request);
+ fieldsValidator = appService.deleteUserWidgetSortPref(delManualWidgetData, user);
+ response.setStatus(fieldsValidator.httpStatusCode.intValue());
+ } catch (Exception e) {
+ logger.error(EELFLoggerDelegate.errorLogger, "putUserWidgetsSortPref failed", e);
+
+ }
+ // return fieldsValidator;
+ EcompPortalUtils.logAndSerializeObject(logger, "/portalApi/putUserWidgetsSortPref", "PUT result =",
+ response.getStatus());
+ return fieldsValidator;
+ }
+
+ /**
+ * Deletes the user app manual sort preference record
+ *
+ * @param request
+ * HTTP servlet request
+ * @param response
+ * HTTP servlet response
+ * @param delManualAppData
+ * data to delete
+ * @return FieldsValidator
+ */
+ @RequestMapping(value = {
+ "/portalApi/UpdateUserAppsSortManual" }, method = RequestMethod.PUT, produces = "application/json")
+ public FieldsValidator deleteUserAppSortManual(HttpServletRequest request,
+ @RequestBody EPDeleteAppsManualSortPref delManualAppData, HttpServletResponse response) {
+ FieldsValidator fieldsValidator = null;
+ try {
+ EPUser user = EPUserUtils.getUserSession(request);
+ fieldsValidator = appService.deleteUserAppSortManual(delManualAppData, user);
+ response.setStatus(fieldsValidator.httpStatusCode.intValue());
+ } catch (Exception e) {
+ logger.error(EELFLoggerDelegate.errorLogger, "deleteUserAppSortManual failed", e);
+
+ }
+ // return fieldsValidator;
+ EcompPortalUtils.logAndSerializeObject(logger, "/portalApi/deleteUserAppSortManual", "PUT result =",
+ response.getStatus());
+ return fieldsValidator;
+ }
+
+ @RequestMapping(value = {
+ "/portalApi/saveUserAppsSortingPreference" }, method = RequestMethod.PUT, produces = "application/json")
+ public FieldsValidator putUserAppsSortingPreference(HttpServletRequest request,
+ @RequestBody EPAppsSortPreference userAppsValue, HttpServletResponse response) {
+ FieldsValidator fieldsValidator = null;
+ try {
+ EPUser user = EPUserUtils.getUserSession(request);
+ fieldsValidator = appService.saveAppsSortPreference(userAppsValue, user);
+ response.setStatus(fieldsValidator.httpStatusCode.intValue());
+ } catch (Exception e) {
+ logger.error(EELFLoggerDelegate.errorLogger, "putUserAppsSortingPreference failed", e);
+
+ }
+
+ // return fieldsValidator;
+ EcompPortalUtils.logAndSerializeObject(logger, "/portalApi/putUserAppsSortingPreference", "PUT result =",
+ response.getStatus());
+ return fieldsValidator;
+ }
+
+ @RequestMapping(value = {
+ "/portalApi/userAppsSortTypePreference" }, method = RequestMethod.GET, produces = "application/String")
+ public String getUserAppsSortTypePreference(HttpServletRequest request, HttpServletResponse response) {
+ EPUser user = EPUserUtils.getUserSession(request);
+ String userSortPreference = null;
+
+ try {
+ if (user == null) {
+ EcompPortalUtils.setBadPermissions(user, response, "userAppsSortTypePreference");
+ } else {
+ userSortPreference = appService.getUserAppsSortTypePreference(user);
+ EcompPortalUtils.logAndSerializeObject(logger, "/portalApi/userAppsSortTypePreference", "GET result =",
+ userSortPreference);
+ }
+ } catch (Exception e) {
+ logger.error(EELFLoggerDelegate.errorLogger, "getUserAppsSortTypePreference failed", e);
+ }
+
+ return userSortPreference;
+ }
+
+ /**
+ * RESTful service method to fetch Application Administrators to Super
+ * Administrator user. Attention: Users which have Super Administrator roles
+ * only are not included!
+ *
+ * @param request
+ * HTTP servlet request
+ * @param response
+ * HTTP servlet response
+ * @return List<AdminUserApplications>
+ */
+ @RequestMapping(value = { "/portalApi/accountAdmins" }, method = RequestMethod.GET, produces = "application/json")
+ public List<AdminUserApplications> getAppsAdministrators(HttpServletRequest request, HttpServletResponse response) {
+ EPUser user = EPUserUtils.getUserSession(request);
+ List<AdminUserApplications> admins = null;
+ try {
+ if (!adminRolesService.isSuperAdmin(user)) {
+ EcompPortalUtils.setBadPermissions(user, response, "getAppsAdministrators");
+ } else {
+ admins = appService.getAppsAdmins();
+ EcompPortalUtils.logAndSerializeObject(logger, "/portalApi/accountAdmins", "GET result =", admins);
+ }
+ } catch (Exception e) {
+ logger.error(EELFLoggerDelegate.errorLogger, "getAppsAdministrators failed", e);
+ }
+
+ return admins;
+ }
+
+ @RequestMapping(value = { "/portalApi/availableApps" }, method = RequestMethod.GET, produces = "application/json")
+ public List<AppsResponse> getApps(HttpServletRequest request, HttpServletResponse response) {
+ EPUser user = EPUserUtils.getUserSession(request);
+ List<AppsResponse> apps = null;
+ try {
+ if (!adminRolesService.isSuperAdmin(user)) {
+ EcompPortalUtils.setBadPermissions(user, response, "getApps");
+ } else {
+ apps = appService.getAllApps(false);
+ EcompPortalUtils.logAndSerializeObject(logger, "/portalApi/availableApps", "GET result =", apps);
+ }
+ } catch (Exception e) {
+ logger.error(EELFLoggerDelegate.errorLogger, "getApps failed", e);
+ }
+
+ return apps;
+ }
+
+ /**
+ * Gets all apps, both active and inactive; i.e., all on-boarded apps,
+ * regardless of enabled status.
+ *
+ * @param request
+ * HTTP servlet request
+ * @param response
+ * HTTP servlet response
+ * @return List of applications
+ */
+ @RequestMapping(value = {
+ "/portalApi/allAvailableApps" }, method = RequestMethod.GET, produces = "application/json")
+ public List<AppsResponse> getAllApps(HttpServletRequest request, HttpServletResponse response) {
+ EPUser user = EPUserUtils.getUserSession(request);
+ List<AppsResponse> apps = null;
+ try {
+ if (!adminRolesService.isSuperAdmin(user)) {
+ EcompPortalUtils.setBadPermissions(user, response, "getApps");
+ } else {
+ apps = appService.getAllApps(true);
+ EcompPortalUtils.logAndSerializeObject(logger, "/portalApi/availableApps", "GET result =", apps);
+ }
+ } catch (Exception e) {
+ logger.error(EELFLoggerDelegate.errorLogger, "getAllApps failed", e);
+ }
+
+ return apps;
+ }
+
+ /**
+ *
+ * @param request
+ * HTTP servlet request
+ * @param response
+ * HTTP servlet response
+ * @return List of applications
+ */
+ @RequestMapping(value = { "/portalApi/appsFullList" }, method = RequestMethod.GET, produces = "application/json")
+ public List<EcompApp> getAppsFullList(HttpServletRequest request, HttpServletResponse response) {
+ EPUser user = EPUserUtils.getUserSession(request);
+ List<EcompApp> ecompApps = null;
+ if (user == null) {
+ EcompPortalUtils.setBadPermissions(user, response, "getAppsFullList");
+ } else {
+ ecompApps = appService.getEcompAppAppsFullList();
+ EcompPortalUtils.logAndSerializeObject(logger, "/portalApi/appsFullList", "GET result =", ecompApps);
+ }
+ return ecompApps;
+ }
+
+ /**
+ *
+ * @param request
+ * HTTP servlet request
+ * @param response
+ * HTTP servlet response
+ * @return UserRoles
+ */
+ @RequestMapping(value = { "/portalApi/userProfile" }, method = RequestMethod.GET, produces = "application/json")
+ public UserRoles getUserProfile(HttpServletRequest request, HttpServletResponse response) {
+ EPUser user = EPUserUtils.getUserSession(request);
+ UserRoles userAndRoles = null;
+ try {
+ if (user == null) {
+ EcompPortalUtils.setBadPermissions(user, response, "getUserProfile");
+ } else {
+ userAndRoles = appService.getUserProfileNormalized(user);
+ }
+ } catch (Exception e) {
+ logger.error(EELFLoggerDelegate.errorLogger, "getUserProfile failed", e);
+ }
+
+ EcompPortalUtils.logAndSerializeObject(logger, "/portalApi/userProfile", "getUserProfile result =",
+ userAndRoles);
+ return userAndRoles;
+ }
+
+ /**
+ *
+ * @param request
+ * HTTP servlet request
+ * @param appId
+ * application ID
+ * @return List<LocalRole>
+ */
+ @RequestMapping(value = { "/portalApi/appRoles/{appId}" }, method = {
+ RequestMethod.GET }, produces = "application/json")
+ public List<LocalRole> getAppRoles(HttpServletRequest request, @PathVariable("appId") Long appId,
+ HttpServletResponse response) {
+ List<LocalRole> roleList = null;
+ EPUser user = EPUserUtils.getUserSession(request);
+ EPApp requestedApp = appService.getApp(appId);
+ if (user != null && (adminRolesService.isAccountAdminOfApplication(user, requestedApp)
+ || (adminRolesService.isSuperAdmin(user) && requestedApp.getId() == PortalConstants.PORTAL_APP_ID))) {
+ try {
+ roleList = appService.getAppRoles(appId);
+ EcompPortalUtils.logAndSerializeObject(logger, "/portalApi/appRoles/" + appId, "GET result =",
+ roleList);
+ } catch (Exception e) {
+ logger.error(EELFLoggerDelegate.errorLogger, "getAppRoles failed", e);
+ }
+ } else {
+ EcompPortalUtils.setBadPermissions(user, response, "getAppRoles");
+ }
+ return roleList;
+ }
+
+ /**
+ *
+ * Return single app information with appName as parameter
+ *
+ * @param request
+ * @param response
+ * @return EPApp object
+ */
+ @RequestMapping(value = { "/portalApi/singleAppInfo" }, method = {
+ RequestMethod.GET }, produces = "application/json")
+ public EPApp getSingleAppInfo(HttpServletRequest request, HttpServletResponse response) {
+ EPApp app = null;
+ EPUser user = EPUserUtils.getUserSession(request);
+ try {
+ String appName = request.getParameter("appParam");
+ app = appService.getAppDetailByAppName(appName);
+ if (user != null && (adminRolesService.isAccountAdminOfApplication(user, app)
+ || (adminRolesService.isSuperAdmin(user) && app.getId() == PortalConstants.PORTAL_APP_ID)))
+ EcompPortalUtils.logAndSerializeObject(logger, "/portalApi/singleAppInfo" + appName, "GET result =", app);
+ else{
+ app= null;
+ EcompPortalUtils.setBadPermissions(user, response, "createAdmin");
+ }
+
+ } catch (Exception e) {
+ logger.error(EELFLoggerDelegate.errorLogger, "getSingleAppInfo failed", e);
+ }
+ return app;
+ }
+
+ /**
+ *
+ * Return single app information with appId as parameter
+ *
+ * @param request
+ * @param response
+ * @return EPApp object
+ */
+ @RequestMapping(value = { "/portalApi/singleAppInfoById" }, method = {
+ RequestMethod.GET }, produces = "application/json")
+ public EPApp getSingleAppInfoById(HttpServletRequest request, HttpServletResponse response) {
+ EPApp app = null;
+ EPUser user = EPUserUtils.getUserSession(request);
+ try {
+ String appId = request.getParameter("appParam");
+ app = appService.getApp(Long.valueOf(appId));
+ if(!EcompPortalUtils.checkIfRemoteCentralAccessAllowed()) {
+ app.setCentralAuth(false);
+ }
+ if (user != null && (adminRolesService.isAccountAdminOfApplication(user, app)
+ || (adminRolesService.isSuperAdmin(user) && app.getId() == PortalConstants.PORTAL_APP_ID)))
+ EcompPortalUtils.logAndSerializeObject(logger, "/portalApi/singleAppInfoById" + appId, "GET result =", app);
+ else{
+ app= null;
+ EcompPortalUtils.setBadPermissions(user, response, "createAdmin");
+ }
+
+ } catch (Exception e) {
+ logger.error(EELFLoggerDelegate.errorLogger, "getSingleAppInfo failed", e);
+ }
+ return app;
+ }
+
+ /**
+ *
+ * @param request
+ * HTTP servlet request
+ * @param response
+ * HTTP servlet response
+ * @return List<OnboardingApp>
+ */
+ @RequestMapping(value = { "/portalApi/onboardingApps" }, method = RequestMethod.GET, produces = "application/json")
+ public List<OnboardingApp> getOnboardingApps(HttpServletRequest request, HttpServletResponse response) {
+ EPUser user = EPUserUtils.getUserSession(request);
+ List<OnboardingApp> onboardingApps = null;
+ try {
+ if (!adminRolesService.isSuperAdmin(user)) {
+ EcompPortalUtils.setBadPermissions(user, response, "getOnboardingApps");
+ } else {
+ onboardingApps = appService.getOnboardingApps();
+ EcompPortalUtils.logAndSerializeObject(logger, "/portalApi/onboardingApps", "GET result =",
+ "onboardingApps of size " + onboardingApps.size());
+ }
+ } catch (Exception e) {
+ logger.error(EELFLoggerDelegate.errorLogger, "getOnboardingApps failed", e);
+ }
+
+ return onboardingApps;
+ }
+
+ /**
+ *
+ * @param request
+ * HTTP servlet request
+ * @param response
+ * HTTP servlet response
+ * @param modifiedOnboardingApp
+ * app to update
+ * @return FieldsValidator
+ */
+ @RequestMapping(value = { "/portalApi/onboardingApps" }, method = RequestMethod.PUT, produces = "application/json")
+ public FieldsValidator putOnboardingApp(HttpServletRequest request,
+ @RequestBody OnboardingApp modifiedOnboardingApp, HttpServletResponse response) {
+ FieldsValidator fieldsValidator = null;
+ try {
+ EPUser user = EPUserUtils.getUserSession(request);
+ if (!adminRolesService.isSuperAdmin(user)) {
+ EcompPortalUtils.setBadPermissions(user, response, "putOnboardingApp");
+ } else {
+ modifiedOnboardingApp.normalize();
+ fieldsValidator = appService.modifyOnboardingApp(modifiedOnboardingApp, user);
+ response.setStatus(fieldsValidator.httpStatusCode.intValue());
+ }
+ } catch (Exception e) {
+ logger.error(EELFLoggerDelegate.errorLogger, "putOnboardingApps failed", e);
+ }
+
+ EcompPortalUtils.logAndSerializeObject(logger, "/portalApi/onboardingApps", "PUT result =",
+ response.getStatus());
+ return fieldsValidator;
+ }
+
+ /**
+ *
+ * @param request
+ * HTTP servlet request
+ * @param response
+ * HTTP servlet response
+ * @param newOnboardingApp
+ * app to add
+ * @return FieldsValidator
+ */
+ @RequestMapping(value = { "/portalApi/onboardingApps" }, method = RequestMethod.POST, produces = "application/json")
+ public FieldsValidator postOnboardingApp(HttpServletRequest request, @RequestBody OnboardingApp newOnboardingApp,
+ HttpServletResponse response) {
+ FieldsValidator fieldsValidator = null;
+ try {
+ EPUser user = EPUserUtils.getUserSession(request);
+ if (!adminRolesService.isSuperAdmin(user)) {
+ EcompPortalUtils.setBadPermissions(user, response, "postOnboardingApps");
+ } else {
+ newOnboardingApp.normalize();
+ fieldsValidator = appService.addOnboardingApp(newOnboardingApp, user);
+ response.setStatus(fieldsValidator.httpStatusCode.intValue());
+ }
+ } catch (Exception e) {
+ logger.error(EELFLoggerDelegate.errorLogger, "postOnboardingApp failed", e);
+ }
+
+ EcompPortalUtils.logAndSerializeObject(logger, "/portalApi/onboardingApps", "POST result =",
+ response.getStatus());
+ return fieldsValidator;
+ }
+
+ /**
+ * REST endpoint to process a request to delete an on-boarded application.
+ *
+ * @param request
+ * HTTP servlet request
+ * @param response
+ * HTTP servlet response
+ * @param appId
+ * ID of app to delete
+ * @return FieldsValidator
+ */
+ @RequestMapping(value = { "/portalApi/onboardingApps/{appId}" }, method = {
+ RequestMethod.DELETE }, produces = "application/json")
+ public FieldsValidator deleteOnboardingApp(HttpServletRequest request, @PathVariable("appId") Long appId,
+ HttpServletResponse response) {
+ FieldsValidator fieldsValidator = null;
+ try {
+ EPUser user = EPUserUtils.getUserSession(request);
+ if (!adminRolesService.isSuperAdmin(user)) {
+ EcompPortalUtils.setBadPermissions(user, response, "deleteOnboardingApps");
+ } else {
+ fieldsValidator = appService.deleteOnboardingApp(user, appId);
+ response.setStatus(fieldsValidator.httpStatusCode.intValue());
+ }
+ } catch (Exception e) {
+ logger.error(EELFLoggerDelegate.errorLogger, "deleteOnboardingApp failed", e);
+ response.setStatus(HttpServletResponse.SC_INTERNAL_SERVER_ERROR);
+ }
+
+ EcompPortalUtils.logAndSerializeObject(logger, "/portalApi/onboardingApps" + appId, "DELETE result =",
+ response.getStatus());
+ return fieldsValidator;
+ }
+
+ /**
+ * Gets the application thumbnail image; sets status 404 if none exists.
+ *
+ * @param request
+ * HTTP servlet request
+ * @param response
+ * HTTP servlet response
+ * @param appId
+ * Application ID
+ * @return Bytes with the app thumbnail image; null if not available.
+ */
+ @RequestMapping(value = { "/portalApi/appThumbnail/{appId}" }, method = { RequestMethod.GET })
+ public HttpEntity<byte[]> getAppThumbnail(HttpServletRequest request, @PathVariable("appId") Long appId,
+ HttpServletResponse response) {
+ EPApp app = appService.getApp(appId);
+ if (app == null || app.getImageUrl() == null || app.getThumbnail() == null || app.getThumbnail().length == 0) {
+ logger.debug(EELFLoggerDelegate.debugLogger,
+ "getAppThumbnail: no app and/or no thumbnail for app " + appId);
+ response.setStatus(HttpServletResponse.SC_NOT_FOUND);
+ return null;
+ }
+ String url = app.getImageUrl();
+ int indexOfDot = url.lastIndexOf('.');
+ String urlSuffix = indexOfDot > 0 ? url.substring(indexOfDot + 1).toLowerCase() : "UNK";
+ // Default to JPG if no usable suffix.
+ MediaType mediaType = MediaType.IMAGE_JPEG;
+ if ("png".equals(urlSuffix))
+ mediaType = MediaType.IMAGE_PNG;
+ else if ("gif".equals(urlSuffix))
+ mediaType = MediaType.IMAGE_GIF;
+ HttpHeaders header = new HttpHeaders();
+ header.setContentType(mediaType);
+ header.setContentLength(app.getThumbnail().length);
+ return new HttpEntity<byte[]>(app.getThumbnail(), header);
+ }
+
+}
diff --git a/ecomp-portal-BE-common/src/main/java/org/onap/portalapp/portal/controller/AppsControllerExternalRequest.java b/ecomp-portal-BE-common/src/main/java/org/onap/portalapp/portal/controller/AppsControllerExternalRequest.java
new file mode 100644
index 00000000..34aa481e
--- /dev/null
+++ b/ecomp-portal-BE-common/src/main/java/org/onap/portalapp/portal/controller/AppsControllerExternalRequest.java
@@ -0,0 +1,392 @@
+/*-
+ * ============LICENSE_START==========================================
+ * ONAP Portal
+ * ===================================================================
+ * Copyright (C) 2017 AT&T Intellectual Property. All rights reserved.
+ * ===================================================================
+ *
+ * Unless otherwise specified, all software contained herein is licensed
+ * under the Apache License, Version 2.0 (the "License");
+ * you may not use this software 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.
+ *
+ * Unless otherwise specified, all documentation contained herein is licensed
+ * under the Creative Commons License, Attribution 4.0 Intl. (the "License");
+ * you may not use this documentation except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * https://creativecommons.org/licenses/by/4.0/
+ *
+ * Unless required by applicable law or agreed to in writing, documentation
+ * 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.
+ *
+ * ============LICENSE_END============================================
+ *
+ * ECOMP is a trademark and service mark of AT&T Intellectual Property.
+ */
+package org.onap.portalapp.portal.controller;
+
+import java.util.List;
+
+import javax.servlet.http.HttpServletRequest;
+import javax.servlet.http.HttpServletResponse;
+
+import org.onap.portalapp.portal.domain.EPApp;
+import org.onap.portalapp.portal.domain.EPUser;
+import org.onap.portalapp.portal.ecomp.model.PortalRestResponse;
+import org.onap.portalapp.portal.ecomp.model.PortalRestStatusEnum;
+import org.onap.portalapp.portal.logging.aop.EPAuditLog;
+import org.onap.portalapp.portal.service.AdminRolesService;
+import org.onap.portalapp.portal.service.EPAppService;
+import org.onap.portalapp.portal.service.PortalAdminService;
+import org.onap.portalapp.portal.service.UserService;
+import org.onap.portalapp.portal.transport.FieldsValidator;
+import org.onap.portalapp.portal.transport.OnboardingApp;
+import org.onap.portalapp.portal.utils.EcompPortalUtils;
+import org.onap.portalapp.portal.utils.PortalConstants;
+import org.onap.portalsdk.core.logging.logic.EELFLoggerDelegate;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.context.annotation.Configuration;
+import org.springframework.context.annotation.EnableAspectJAutoProxy;
+import org.springframework.web.bind.annotation.PathVariable;
+import org.springframework.web.bind.annotation.RequestBody;
+import org.springframework.web.bind.annotation.RequestMapping;
+import org.springframework.web.bind.annotation.RequestMethod;
+import org.springframework.web.bind.annotation.ResponseBody;
+import org.springframework.web.bind.annotation.RestController;
+
+import io.swagger.annotations.ApiOperation;
+
+/**
+ * Processes requests from external systems (i.e., not the front-end web UI).
+ * First use case is ECOMP Controller, which has to create an admin and onboard
+ * itself upon launch of a fresh Portal.
+ *
+ * Listens on the "auxapi" path prefix. Provides alternate implementations of
+ * methods in several existing controllers because an EPUser object is not
+ * available in the session for these requests.
+ *
+ * Checks credentials sent via HTTP Basic Authentication. The Portal's basic
+ * HTTP authentication system requires that the user names and endpoints are
+ * registered together.
+ */
+@RestController
+@RequestMapping(PortalConstants.REST_AUX_API)
+@Configuration
+@EnableAspectJAutoProxy
+@EPAuditLog
+public class AppsControllerExternalRequest implements BasicAuthenticationController {
+
+ private EELFLoggerDelegate logger = EELFLoggerDelegate.getLogger(AppsControllerExternalRequest.class);
+
+ private static final String ONBOARD_APP = "/onboardApp";
+
+ // Where is this used?
+ public boolean isAuxRESTfulCall() {
+ return true;
+ }
+
+ /**
+ * For testing whether a user is a superadmin.
+ */
+ @Autowired
+ private AdminRolesService adminRolesService;
+
+ /**
+ * For onboarding or updating an app
+ */
+ @Autowired
+ private EPAppService appService;
+
+ /**
+ * For promoting a user to Portal admin
+ */
+ @Autowired
+ private PortalAdminService portalAdminService;
+
+ /**
+ * For creating a new user
+ */
+ @Autowired
+ private UserService userService;
+
+ /**
+ * Creates a new user as a Portal administrator.
+ *
+ * <PRE>
+ {
+ "loginId" : "abc123",
+ "loginPwd": "",
+ "email":"ecomp@controller"
+ }
+ * </PRE>
+ *
+ * @param request
+ * HttpServletRequest
+ * @param epUser
+ * User details; the email and orgUserId fields are mandatory
+ * @param response
+ * HttpServletResponse
+ * @return PortalRestResponse with success or failure
+ */
+ @ApiOperation(value = "Creates a new user as a Portal administrator.", response = PortalRestResponse.class)
+ @RequestMapping(value = "/portalAdmin", method = RequestMethod.POST, produces = "application/json")
+ @ResponseBody
+ public PortalRestResponse<String> postPortalAdmin(HttpServletRequest request, HttpServletResponse response,
+ @RequestBody EPUser epUser) {
+ EcompPortalUtils.logAndSerializeObject(logger, "postPortalAdmin", "request", epUser);
+ PortalRestResponse<String> portalResponse = new PortalRestResponse<>();
+
+ // Check mandatory fields.
+ if (epUser.getEmail() == null || epUser.getEmail().trim().length() == 0 //
+ || epUser.getLoginId() == null || epUser.getLoginId().trim().length() == 0 //
+ || epUser.getLoginPwd() == null) {
+ portalResponse.setStatus(PortalRestStatusEnum.ERROR);
+ portalResponse.setMessage("Missing required field: email, loginId, or loginPwd");
+ return portalResponse;
+ }
+
+ try {
+ // Check for existing user; create if not found.
+ List<EPUser> userList = userService.getUserByUserId(epUser.getOrgUserId());
+ if (userList == null || userList.size() == 0) {
+ // Create user with first, last names etc.; do check for
+ // duplicates.
+ String userCreateResult = userService.saveNewUser(epUser, "Yes");
+ if (!"success".equals(userCreateResult)) {
+ portalResponse.setStatus(PortalRestStatusEnum.ERROR);
+ portalResponse.setMessage(userCreateResult);
+ return portalResponse;
+ }
+ }
+
+ // Check for Portal admin status; promote if not.
+ if (adminRolesService.isSuperAdmin(epUser)) {
+ portalResponse.setStatus(PortalRestStatusEnum.OK);
+ } else {
+ FieldsValidator fv = portalAdminService.createPortalAdmin(epUser.getOrgUserId());
+ if (fv.httpStatusCode.intValue() == HttpServletResponse.SC_OK) {
+ portalResponse.setStatus(PortalRestStatusEnum.OK);
+ } else {
+ portalResponse.setStatus(PortalRestStatusEnum.ERROR);
+ portalResponse.setMessage(fv.toString());
+ }
+ }
+ } catch (Exception ex) {
+ // Uncaught exceptions yield 404 and an empty error page
+ response.setStatus(HttpServletResponse.SC_INTERNAL_SERVER_ERROR);
+ portalResponse.setStatus(PortalRestStatusEnum.ERROR);
+ portalResponse.setMessage(ex.toString());
+ }
+
+ EcompPortalUtils.logAndSerializeObject(logger, "postPortalAdmin", "response", portalResponse);
+ return portalResponse;
+ }
+
+ /**
+ * Gets the specified application that is on-boarded in Portal.
+ *
+ * @param request
+ * HttpServletRequest
+ * @param appId
+ * Application ID to get
+ * @param response
+ * httpServletResponse
+ * @return OnboardingApp objects
+ */
+ @ApiOperation(value = "Gets the specified application that is on-boarded in Portal.", response = OnboardingApp.class)
+ @RequestMapping(value = { ONBOARD_APP + "/{appId}" }, method = RequestMethod.GET, produces = "application/json")
+ @ResponseBody
+ public OnboardingApp getOnboardAppExternal(HttpServletRequest request, HttpServletResponse response,
+ @PathVariable("appId") Long appId) {
+ EPApp epApp = appService.getApp(appId);
+ OnboardingApp obApp = new OnboardingApp();
+ appService.createOnboardingFromApp(epApp, obApp);
+ EcompPortalUtils.logAndSerializeObject(logger, "getOnboardAppExternal", "response", obApp);
+ return obApp;
+ }
+
+ /**
+ * Adds a new application to Portal. The My Logins App Owner in the request
+ * must be the organization user ID of a person who is a Portal
+ * administrator.
+ *
+ * <pre>
+ * {
+ "myLoginsAppOwner" : "abc123",
+ "name": "dashboard",
+ "url": "http://k8s/something",
+ "restUrl" : "http://targeturl.com",
+ "restrictedApp" : true,
+ "isOpen" : true,
+ "isEnabled": false
+ }
+ * </pre>
+ *
+ * @param request
+ * HttpServletRequest
+ * @param response
+ * httpServletResponse
+ * @param newOnboardApp
+ * Message with details about the app to add
+ * @return PortalRestResponse
+ */
+ @ApiOperation(value = "Adds a new application to Portal.", response = PortalRestResponse.class)
+ @RequestMapping(value = { ONBOARD_APP }, method = RequestMethod.POST, produces = "application/json")
+ @ResponseBody
+ public PortalRestResponse<String> postOnboardAppExternal(HttpServletRequest request, HttpServletResponse response,
+ @RequestBody OnboardingApp newOnboardApp) {
+ EcompPortalUtils.logAndSerializeObject(logger, "postOnboardAppExternal", "request", newOnboardApp);
+ PortalRestResponse<String> portalResponse = new PortalRestResponse<>();
+
+ // Validate fields
+ if (newOnboardApp.id != null) {
+ portalResponse.setStatus(PortalRestStatusEnum.ERROR);
+ portalResponse.setMessage("Unexpected field: id");
+ return portalResponse;
+ }
+ if (newOnboardApp.name == null || newOnboardApp.name.trim().length() == 0 //
+ || newOnboardApp.url == null || newOnboardApp.url.trim().length() == 0 //
+ || newOnboardApp.restUrl == null || newOnboardApp.restUrl.trim().length() == 0
+ || newOnboardApp.myLoginsAppOwner == null || newOnboardApp.myLoginsAppOwner.trim().length() == 0
+ || newOnboardApp.restrictedApp == null //
+ || newOnboardApp.isOpen == null //
+ || newOnboardApp.isEnabled == null) {
+ portalResponse.setStatus(PortalRestStatusEnum.ERROR);
+ portalResponse.setMessage(
+ "Missing required field: name, url, restUrl, restrictedApp, isOpen, isEnabled, myLoginsAppOwner");
+ return portalResponse;
+ }
+
+ try {
+ List<EPUser> userList = userService.getUserByUserId(newOnboardApp.myLoginsAppOwner);
+ if (userList == null || userList.size() != 1) {
+ portalResponse.setStatus(PortalRestStatusEnum.ERROR);
+ portalResponse.setMessage("Failed to find user: " + newOnboardApp.myLoginsAppOwner);
+ return portalResponse;
+ }
+
+ EPUser epUser = userList.get(0);
+ // Check for Portal admin status
+ if (! adminRolesService.isSuperAdmin(epUser)) {
+ portalResponse.setStatus(PortalRestStatusEnum.ERROR);
+ portalResponse.setMessage("User lacks Portal admin role: " + epUser.getLoginId());
+ return portalResponse;
+ }
+
+ newOnboardApp.normalize();
+ FieldsValidator fv = appService.addOnboardingApp(newOnboardApp, epUser);
+ if (fv.httpStatusCode.intValue() == HttpServletResponse.SC_OK) {
+ portalResponse.setStatus(PortalRestStatusEnum.OK);
+ } else {
+ portalResponse.setStatus(PortalRestStatusEnum.ERROR);
+ portalResponse.setMessage(fv.toString());
+ }
+ } catch (Exception ex) {
+ // Uncaught exceptions yield 404 and an empty error page
+ response.setStatus(HttpServletResponse.SC_INTERNAL_SERVER_ERROR);
+ portalResponse.setStatus(PortalRestStatusEnum.ERROR);
+ portalResponse.setMessage(ex.toString());
+ }
+ EcompPortalUtils.logAndSerializeObject(logger, "postOnboardAppExternal", "response", portalResponse);
+ return portalResponse;
+ }
+
+ /**
+ * Updates information about an on-boarded application in Portal. The My
+ * Logins App Owner in the request must be the organization user ID of a
+ * person who is a Portal administrator.
+ * <pre>
+ {
+ "id" : 123,
+ "myLoginsAppOwner" : "abc123",
+ "name": "dashboard",
+ "url": "http://k8s/something",
+ "restUrl" : "http://targeturl.com",
+ "restrictedApp" : true,
+ "isOpen" : true,
+ "isEnabled": false
+ }
+ </pre>
+ * @param request
+ * HttpServletRequest
+ * @param response
+ * httpServletResponse
+ * @param appId
+ * application id
+ * @param oldOnboardApp
+ * Message with details about the app to add
+ * @return PortalRestResponse
+ */
+ @ApiOperation(value = "Updates information about an on-boarded application in Portal.", response = PortalRestResponse.class)
+ @RequestMapping(value = { ONBOARD_APP + "/{appId}" }, method = RequestMethod.PUT, produces = "application/json")
+ @ResponseBody
+ public PortalRestResponse<String> putOnboardAppExternal(HttpServletRequest request, HttpServletResponse response,
+ @PathVariable("appId") Long appId, @RequestBody OnboardingApp oldOnboardApp) {
+ EcompPortalUtils.logAndSerializeObject(logger, "putOnboardAppExternal", "request", oldOnboardApp);
+ PortalRestResponse<String> portalResponse = new PortalRestResponse<>();
+ // Validate fields.
+ if (oldOnboardApp.id == null || !appId.equals(oldOnboardApp.id)) {
+ portalResponse.setStatus(PortalRestStatusEnum.ERROR);
+ portalResponse.setMessage("Unexpected value for field: id");
+ return portalResponse;
+ }
+ if (oldOnboardApp.name == null || oldOnboardApp.name.trim().length() == 0 //
+ || oldOnboardApp.url == null || oldOnboardApp.url.trim().length() == 0 //
+ || oldOnboardApp.restUrl == null || oldOnboardApp.restUrl.trim().length() == 0
+ || oldOnboardApp.myLoginsAppOwner == null || oldOnboardApp.myLoginsAppOwner.trim().length() == 0
+ || oldOnboardApp.restrictedApp == null //
+ || oldOnboardApp.isOpen == null //
+ || oldOnboardApp.isEnabled == null) {
+ portalResponse.setStatus(PortalRestStatusEnum.ERROR);
+ portalResponse.setMessage(
+ "Missing required field: name, url, restUrl, restrictedApp, isOpen, isEnabled, myLoginsAppOwner");
+ return portalResponse;
+ }
+
+ try {
+ List<EPUser> userList = userService.getUserByUserId(oldOnboardApp.myLoginsAppOwner);
+ if (userList == null || userList.size() != 1) {
+ portalResponse.setStatus(PortalRestStatusEnum.ERROR);
+ portalResponse.setMessage("Failed to find user: " + oldOnboardApp.myLoginsAppOwner);
+ return portalResponse;
+ }
+
+ EPUser epUser = userList.get(0);
+ // Check for Portal admin status
+ if (! adminRolesService.isSuperAdmin(epUser)) {
+ portalResponse.setStatus(PortalRestStatusEnum.ERROR);
+ portalResponse.setMessage("User lacks Portal admin role: " + epUser.getLoginId());
+ return portalResponse;
+ }
+
+ oldOnboardApp.normalize();
+ FieldsValidator fv = appService.modifyOnboardingApp(oldOnboardApp, epUser);
+ if (fv.httpStatusCode.intValue() == HttpServletResponse.SC_OK) {
+ portalResponse.setStatus(PortalRestStatusEnum.OK);
+ } else {
+ portalResponse.setStatus(PortalRestStatusEnum.ERROR);
+ portalResponse.setMessage(fv.toString());
+ }
+ } catch (Exception ex) {
+ // Uncaught exceptions yield 404 and an empty error page
+ response.setStatus(HttpServletResponse.SC_INTERNAL_SERVER_ERROR);
+ portalResponse.setStatus(PortalRestStatusEnum.ERROR);
+ portalResponse.setMessage(ex.toString());
+ }
+ EcompPortalUtils.logAndSerializeObject(logger, "putOnboardAppExternal", "response", portalResponse);
+ return portalResponse;
+ }
+
+}
diff --git a/ecomp-portal-BE-common/src/main/java/org/onap/portalapp/portal/controller/AuditLogController.java b/ecomp-portal-BE-common/src/main/java/org/onap/portalapp/portal/controller/AuditLogController.java
new file mode 100644
index 00000000..e0232850
--- /dev/null
+++ b/ecomp-portal-BE-common/src/main/java/org/onap/portalapp/portal/controller/AuditLogController.java
@@ -0,0 +1,129 @@
+/*-
+ * ============LICENSE_START==========================================
+ * ONAP Portal
+ * ===================================================================
+ * Copyright (C) 2017 AT&T Intellectual Property. All rights reserved.
+ * ===================================================================
+ *
+ * Unless otherwise specified, all software contained herein is licensed
+ * under the Apache License, Version 2.0 (the "License");
+ * you may not use this software 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.
+ *
+ * Unless otherwise specified, all documentation contained herein is licensed
+ * under the Creative Commons License, Attribution 4.0 Intl. (the "License");
+ * you may not use this documentation except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * https://creativecommons.org/licenses/by/4.0/
+ *
+ * Unless required by applicable law or agreed to in writing, documentation
+ * 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.
+ *
+ * ============LICENSE_END============================================
+ *
+ * ECOMP is a trademark and service mark of AT&T Intellectual Property.
+ */
+package org.onap.portalapp.portal.controller;
+
+import javax.servlet.http.HttpServletRequest;
+
+import org.slf4j.MDC;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.web.bind.annotation.RequestMapping;
+import org.springframework.web.bind.annotation.RequestMethod;
+import org.springframework.web.bind.annotation.RequestParam;
+import org.springframework.web.bind.annotation.RestController;
+import org.onap.portalapp.controller.EPRestrictedBaseController;
+import org.onap.portalapp.portal.domain.EPUser;
+import org.onap.portalapp.portal.logging.aop.EPEELFLoggerAdvice;
+import org.onap.portalapp.portal.logging.logic.EPLogUtil;
+import org.onap.portalapp.portal.utils.EPCommonSystemProperties;
+import org.onap.portalapp.portal.utils.EcompPortalUtils;
+import org.onap.portalapp.portal.utils.PortalConstants;
+import org.onap.portalapp.util.EPUserUtils;
+import org.onap.portalsdk.core.domain.AuditLog;
+import org.onap.portalsdk.core.logging.logic.EELFLoggerDelegate;
+import org.onap.portalsdk.core.service.AuditService;
+
+@RestController
+@RequestMapping("/portalApi/auditLog")
+public class AuditLogController extends EPRestrictedBaseController {
+ private static EELFLoggerDelegate logger = EELFLoggerDelegate.getLogger(DashboardController.class);
+
+ @Autowired
+ private AuditService auditService;
+
+ /**
+ * Store audit log of the specified access type.
+ *
+ * @param request
+ * HttpServletRequest
+ * @param affectedAppId
+ * App ID
+ * @param type
+ * Access type
+ * @param comment
+ * Comment
+ */
+ @RequestMapping(value = "/store", method = RequestMethod.GET, produces = "application/json")
+ public void auditLog(HttpServletRequest request, @RequestParam String affectedAppId, @RequestParam String type,
+ @RequestParam String comment) {
+ logger.debug(EELFLoggerDelegate.debugLogger, "auditLog: appId {}, type {], comment {}", affectedAppId, type,
+ comment);
+ String cd_type = null;
+ try {
+ EPUser user = EPUserUtils.getUserSession(request);
+ /* Check type of Activity CD */
+ if (type.equals("app")) {
+ cd_type = AuditLog.CD_ACTIVITY_APP_ACCESS;
+ } else if (type.equals("tab")) {
+ cd_type = AuditLog.CD_ACTIVITY_TAB_ACCESS;
+ } else if (type.equals("functional")) {
+ cd_type = AuditLog.CD_ACTIVITY_FUNCTIONAL_ACCESS;
+ } else if (type.equals("leftMenu")) {
+ cd_type = AuditLog.CD_ACTIVITY_LEFT_MENU_ACCESS;
+ } else {
+ logger.error(EELFLoggerDelegate.errorLogger,
+ "Storing auditLog failed! Activity CD type is not correct.");
+ }
+ /* Store the audit log only if it contains valid Activity CD */
+ if (cd_type != null) {
+ AuditLog auditLog = new AuditLog();
+ auditLog.setActivityCode(cd_type);
+ /*
+ * Check affectedAppId and comment and see if these two values are valid
+ */
+ if (comment != null && !comment.equals("") && !comment.equals("undefined"))
+ auditLog.setComments(EcompPortalUtils.truncateString(comment, PortalConstants.AUDIT_LOG_COMMENT_SIZE));
+ if (affectedAppId != null && !affectedAppId.equals("") && !affectedAppId.equals("undefined"))
+ auditLog.setAffectedRecordId(affectedAppId);
+ long userId = EPUserUtils.getUserId(request);
+ auditLog.setUserId(userId);
+ auditService.logActivity(auditLog, null);
+
+ // Log file
+ MDC.put(EPCommonSystemProperties.AUDITLOG_BEGIN_TIMESTAMP, EPEELFLoggerAdvice.getCurrentDateTimeUTC());
+ MDC.put(EPCommonSystemProperties.AUDITLOG_END_TIMESTAMP, EPEELFLoggerAdvice.getCurrentDateTimeUTC());
+ logger.info(EELFLoggerDelegate.auditLogger, EPLogUtil.formatAuditLogMessage(
+ "AuditLogController.auditLog", cd_type, user.getOrgUserId(), affectedAppId, comment));
+ MDC.remove(EPCommonSystemProperties.AUDITLOG_BEGIN_TIMESTAMP);
+ MDC.remove(EPCommonSystemProperties.AUDITLOG_END_TIMESTAMP);
+ }
+ } catch (Exception e) {
+ logger.error(EELFLoggerDelegate.errorLogger, "auditLog failed", e);
+ }
+ }
+
+}
diff --git a/ecomp-portal-BE-common/src/main/java/org/onap/portalapp/portal/controller/BEPropertyReaderController.java b/ecomp-portal-BE-common/src/main/java/org/onap/portalapp/portal/controller/BEPropertyReaderController.java
new file mode 100644
index 00000000..6b5d31d7
--- /dev/null
+++ b/ecomp-portal-BE-common/src/main/java/org/onap/portalapp/portal/controller/BEPropertyReaderController.java
@@ -0,0 +1,63 @@
+/*-
+ * ============LICENSE_START==========================================
+ * ONAP Portal
+ * ===================================================================
+ * Copyright (C) 2017 AT&T Intellectual Property. All rights reserved.
+ * ===================================================================
+ *
+ * Unless otherwise specified, all software contained herein is licensed
+ * under the Apache License, Version 2.0 (the "License");
+ * you may not use this software 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.
+ *
+ * Unless otherwise specified, all documentation contained herein is licensed
+ * under the Creative Commons License, Attribution 4.0 Intl. (the "License");
+ * you may not use this documentation except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * https://creativecommons.org/licenses/by/4.0/
+ *
+ * Unless required by applicable law or agreed to in writing, documentation
+ * 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.
+ *
+ * ============LICENSE_END============================================
+ *
+ * ECOMP is a trademark and service mark of AT&T Intellectual Property.
+ */
+package org.onap.portalapp.portal.controller;
+
+import javax.servlet.http.HttpServletRequest;
+
+import org.springframework.web.bind.annotation.RequestMapping;
+import org.springframework.web.bind.annotation.RequestMethod;
+import org.springframework.web.bind.annotation.RequestParam;
+import org.springframework.web.bind.annotation.RestController;
+import org.onap.portalapp.portal.domain.BEProperty;
+import org.onap.portalapp.portal.ecomp.model.PortalRestResponse;
+import org.onap.portalapp.portal.ecomp.model.PortalRestStatusEnum;
+import org.onap.portalsdk.core.controller.FusionBaseController;
+import org.onap.portalsdk.core.util.SystemProperties;
+
+@RestController
+@RequestMapping("/portalApi/properties")
+public class BEPropertyReaderController extends FusionBaseController{
+ @RequestMapping(value = "/readProperty", method = RequestMethod.GET, produces = "application/json")
+ public PortalRestResponse<BEProperty> readProperty(HttpServletRequest request, @RequestParam String key) {
+ try {
+ return new PortalRestResponse<>(PortalRestStatusEnum.OK, "success", new BEProperty(key, SystemProperties.getProperty(key)));
+ } catch (Exception e) {
+ return new PortalRestResponse<>(PortalRestStatusEnum.ERROR, e.toString(), null);
+ }
+ }
+}
diff --git a/ecomp-portal-BE-common/src/main/java/org/onap/portalapp/portal/controller/BasicAuthAccountController.java b/ecomp-portal-BE-common/src/main/java/org/onap/portalapp/portal/controller/BasicAuthAccountController.java
new file mode 100644
index 00000000..f02d8fce
--- /dev/null
+++ b/ecomp-portal-BE-common/src/main/java/org/onap/portalapp/portal/controller/BasicAuthAccountController.java
@@ -0,0 +1,215 @@
+/*-
+ * ============LICENSE_START==========================================
+ * ONAP Portal
+ * ===================================================================
+ * Copyright (C) 2017 AT&T Intellectual Property. All rights reserved.
+ * ===================================================================
+ *
+ * Unless otherwise specified, all software contained herein is licensed
+ * under the Apache License, Version 2.0 (the "License");
+ * you may not use this software 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.
+ *
+ * Unless otherwise specified, all documentation contained herein is licensed
+ * under the Creative Commons License, Attribution 4.0 Intl. (the "License");
+ * you may not use this documentation except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * https://creativecommons.org/licenses/by/4.0/
+ *
+ * Unless required by applicable law or agreed to in writing, documentation
+ * 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.
+ *
+ * ============LICENSE_END============================================
+ *
+ * ECOMP is a trademark and service mark of AT&T Intellectual Property.
+ */
+package org.onap.portalapp.portal.controller;
+
+import java.util.ArrayList;
+import java.util.List;
+
+import javax.servlet.http.HttpServletRequest;
+import javax.servlet.http.HttpServletResponse;
+
+import org.onap.portalapp.controller.EPRestrictedBaseController;
+import org.onap.portalapp.portal.domain.BasicAuthCredentials;
+import org.onap.portalapp.portal.domain.EPEndpoint;
+import org.onap.portalapp.portal.domain.EPUser;
+import org.onap.portalapp.portal.ecomp.model.PortalRestResponse;
+import org.onap.portalapp.portal.ecomp.model.PortalRestStatusEnum;
+import org.onap.portalapp.portal.logging.aop.EPAuditLog;
+import org.onap.portalapp.portal.service.AdminRolesService;
+import org.onap.portalapp.portal.service.BasicAuthAccountService;
+import org.onap.portalapp.util.EPUserUtils;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.context.annotation.EnableAspectJAutoProxy;
+import org.springframework.web.bind.annotation.PathVariable;
+import org.springframework.web.bind.annotation.RequestBody;
+import org.springframework.web.bind.annotation.RequestMapping;
+import org.springframework.web.bind.annotation.RequestMethod;
+import org.springframework.web.bind.annotation.RestController;
+
+@RestController
+@org.springframework.context.annotation.Configuration
+@EnableAspectJAutoProxy
+@EPAuditLog
+public class BasicAuthAccountController extends EPRestrictedBaseController {
+
+ @Autowired
+ private BasicAuthAccountService basicAuthAccountService;
+
+ @Autowired
+ private AdminRolesService adminRolesService;
+
+ /**
+ * Saves Basic Authentication account for external systems
+ *
+ * @param request
+ * HttpServletRequest
+ * @param response
+ * HttpServletResponse
+ * @param newBasicAuthAccount
+ * BasicAuthCredentials
+ * @return Id of the newly created account
+ * @throws Exception
+ * on failure
+ */
+ @RequestMapping(value = { "/portalApi/basicAuthAccount" }, method = RequestMethod.POST)
+ public PortalRestResponse<String> createBasicAuthAccount(HttpServletRequest request, HttpServletResponse response,
+ @RequestBody BasicAuthCredentials newBasicAuthAccount) throws Exception {
+
+ EPUser user = EPUserUtils.getUserSession(request);
+ if (!adminRolesService.isSuperAdmin(user)) {
+ return new PortalRestResponse<String>(PortalRestStatusEnum.ERROR, "Authorization Required",
+ "Admin Only Operation! ");
+ }
+
+ if (newBasicAuthAccount == null) {
+ return new PortalRestResponse<String>(PortalRestStatusEnum.ERROR, "FAILURE",
+ "newBasicAuthAccount cannot be null or empty");
+ }
+ long accountId = basicAuthAccountService.saveBasicAuthAccount(newBasicAuthAccount);
+
+ List<Long> endpointIdList = new ArrayList<>();
+ try {
+ for (EPEndpoint ep : newBasicAuthAccount.getEndpoints()) {
+ endpointIdList.add(basicAuthAccountService.saveEndpoints(ep));
+ }
+ for (Long endpointId : endpointIdList) {
+ basicAuthAccountService.saveEndpointAccount(accountId, endpointId);
+ }
+ } catch (Exception e) {
+ return new PortalRestResponse<String>(PortalRestStatusEnum.ERROR, "FAILURE", e.getMessage());
+ }
+
+ return new PortalRestResponse<String>(PortalRestStatusEnum.OK, "SUCCESS", "");
+ }
+
+ /**
+ * Returns list of all BasicAuthCredentials in the system
+ *
+ * @param request
+ * HttpServletRequest
+ * @param response
+ * HttpServletResponse
+ * @return List<BasicAuthCredentials>
+ * @throws Exception
+ * on failure
+ */
+
+ @RequestMapping(value = { "/portalApi/basicAuthAccount" }, method = RequestMethod.GET)
+ public PortalRestResponse<List<BasicAuthCredentials>> getBasicAuthAccount(HttpServletRequest request,
+ HttpServletResponse response) throws Exception {
+
+ EPUser user = EPUserUtils.getUserSession(request);
+ if (!adminRolesService.isSuperAdmin(user)) {
+ return new PortalRestResponse<List<BasicAuthCredentials>>(PortalRestStatusEnum.ERROR,
+ "UnAuthorized! Admin Only Operation", new ArrayList<>());
+ }
+
+ return new PortalRestResponse<List<BasicAuthCredentials>>(PortalRestStatusEnum.OK, "Success",
+ basicAuthAccountService.getAccountData());
+ }
+
+ /**
+ * Updates an existing BasicAuthCredentials account
+ *
+ * @param request
+ * HttpServletRequest
+ * @param response
+ * HttpServletResponse
+ * @param accountId
+ * account ID
+ * @param newBasicAuthAccount
+ * BasicAuthCredentials
+ * @return PortalRestResponse<String>
+ * @throws Exception
+ * on failure
+ */
+ @RequestMapping(value = { "/portalApi/basicAuthAccount/{accountId}" }, method = RequestMethod.PUT)
+ public PortalRestResponse<String> updateAccount(HttpServletRequest request, HttpServletResponse response,
+ @PathVariable("accountId") long accountId, @RequestBody BasicAuthCredentials newBasicAuthAccount)
+ throws Exception {
+
+ EPUser user = EPUserUtils.getUserSession(request);
+ if (!adminRolesService.isSuperAdmin(user)) {
+ return new PortalRestResponse<String>(PortalRestStatusEnum.ERROR, "Authorization Required",
+ "Admin Only Operation! ");
+ }
+
+ if (newBasicAuthAccount == null) {
+ return new PortalRestResponse<String>(PortalRestStatusEnum.ERROR, "FAILURE",
+ "BasicAuthCredentials cannot be null or empty");
+ }
+ try {
+ basicAuthAccountService.updateBasicAuthAccount(accountId, newBasicAuthAccount);
+ } catch (Exception e) {
+ return new PortalRestResponse<String>(PortalRestStatusEnum.ERROR, "FAILURE", e.getMessage());
+ }
+ return new PortalRestResponse<String>(PortalRestStatusEnum.OK, "SUCCESS", "");
+ }
+
+ /**
+ * deletes an existing BasicAuthCredentials account
+ *
+ * @param request
+ * HttpServletRequest
+ * @param response
+ * HttpServletResponse
+ * @param accountId
+ * account ID
+ * @return PortalRestResponse<String>
+ * @throws Exception
+ * on failure
+ */
+ @RequestMapping(value = { "/portalApi/basicAuthAccount/{accountId}" }, method = RequestMethod.DELETE)
+ public PortalRestResponse<String> deleteAccount(HttpServletRequest request, HttpServletResponse response,
+ @PathVariable("accountId") long accountId) throws Exception {
+
+ EPUser user = EPUserUtils.getUserSession(request);
+ if (!adminRolesService.isSuperAdmin(user)) {
+ return new PortalRestResponse<String>(PortalRestStatusEnum.ERROR, "Authorization Required",
+ "Admin Only Operation! ");
+ }
+
+ try {
+ basicAuthAccountService.deleteEndpointAccout(accountId);
+ } catch (Exception e) {
+ return new PortalRestResponse<String>(PortalRestStatusEnum.ERROR, "FAILURE", e.getMessage());
+ }
+ return new PortalRestResponse<String>(PortalRestStatusEnum.OK, "SUCCESS", "");
+ }
+
+}
diff --git a/ecomp-portal-BE-common/src/main/java/org/onap/portalapp/portal/controller/BasicAuthenticationController.java b/ecomp-portal-BE-common/src/main/java/org/onap/portalapp/portal/controller/BasicAuthenticationController.java
new file mode 100644
index 00000000..94e38286
--- /dev/null
+++ b/ecomp-portal-BE-common/src/main/java/org/onap/portalapp/portal/controller/BasicAuthenticationController.java
@@ -0,0 +1,46 @@
+/*-
+ * ============LICENSE_START==========================================
+ * ONAP Portal
+ * ===================================================================
+ * Copyright (C) 2017 AT&T Intellectual Property. All rights reserved.
+ * ===================================================================
+ *
+ * Unless otherwise specified, all software contained herein is licensed
+ * under the Apache License, Version 2.0 (the "License");
+ * you may not use this software 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.
+ *
+ * Unless otherwise specified, all documentation contained herein is licensed
+ * under the Creative Commons License, Attribution 4.0 Intl. (the "License");
+ * you may not use this documentation except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * https://creativecommons.org/licenses/by/4.0/
+ *
+ * Unless required by applicable law or agreed to in writing, documentation
+ * 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.
+ *
+ * ============LICENSE_END============================================
+ *
+ * ECOMP is a trademark and service mark of AT&T Intellectual Property.
+ */
+package org.onap.portalapp.portal.controller;
+
+/**
+ * Marker interface to indicate that requests to this controller present HTTP
+ * Basic Authentication credentials.
+ */
+public interface BasicAuthenticationController {
+
+}
diff --git a/ecomp-portal-BE-common/src/main/java/org/onap/portalapp/portal/controller/CommonWidgetController.java b/ecomp-portal-BE-common/src/main/java/org/onap/portalapp/portal/controller/CommonWidgetController.java
new file mode 100644
index 00000000..0ede833b
--- /dev/null
+++ b/ecomp-portal-BE-common/src/main/java/org/onap/portalapp/portal/controller/CommonWidgetController.java
@@ -0,0 +1,99 @@
+/*
+ * ============LICENSE_START==========================================
+ * ONAP Portal
+ * ===================================================================
+ * Copyright (C) 2017 AT&T Intellectual Property. All rights reserved.
+ * ===================================================================
+ *
+ * Unless otherwise specified, all software contained herein is licensed
+ * under the Apache License, Version 2.0 (the "License");
+ * you may not use this software 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.
+ *
+ * Unless otherwise specified, all documentation contained herein is licensed
+ * under the Creative Commons License, Attribution 4.0 Intl. (the "License");
+ * you may not use this documentation except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * https://creativecommons.org/licenses/by/4.0/
+ *
+ * Unless required by applicable law or agreed to in writing, documentation
+ * 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.
+ *
+ * ============LICENSE_END============================================
+ *
+ * ECOMP is a trademark and service mark of AT&T Intellectual Property.
+ */
+package org.onap.portalapp.portal.controller;
+
+import javax.servlet.http.HttpServletRequest;
+
+import org.onap.portalapp.controller.EPRestrictedBaseController;
+import org.onap.portalapp.portal.controller.DashboardController.WidgetCategory;
+import org.onap.portalapp.portal.ecomp.model.PortalRestResponse;
+import org.onap.portalapp.portal.ecomp.model.PortalRestStatusEnum;
+import org.onap.portalapp.portal.service.DashboardSearchService;
+import org.onap.portalapp.portal.transport.CommonWidgetMeta;
+import org.onap.portalsdk.core.logging.logic.EELFLoggerDelegate;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.web.bind.annotation.RequestMapping;
+import org.springframework.web.bind.annotation.RequestMethod;
+import org.springframework.web.bind.annotation.RequestParam;
+import org.springframework.web.bind.annotation.RestController;
+
+@RestController
+public class CommonWidgetController extends EPRestrictedBaseController implements BasicAuthenticationController{
+
+
+ private static EELFLoggerDelegate logger = EELFLoggerDelegate.getLogger(CommonWidgetController.class);
+ @Autowired
+ private DashboardSearchService searchService;
+
+ /**
+ * Validates the resource type parameter.
+ *
+ * @param resourceType
+ * @return True if known in the enum WidgetCategory, else false.
+ */
+ private boolean isValidResourceType(String resourceType) {
+ if (resourceType == null)
+ return false;
+ for (WidgetCategory wc : WidgetCategory.values())
+ if (wc.name().equals(resourceType))
+ return true;
+ return false;
+ }
+
+ /**
+ * Gets all widgets of the specified resource type.
+ *
+ * @param request
+ * @param resourceType
+ * Request parameter.
+ * @return Rest response wrapped around a CommonWidgetMeta object.
+ */
+ @RequestMapping(value = "/commonWidgets", method = RequestMethod.GET, produces = "application/json")
+ public PortalRestResponse<CommonWidgetMeta> getWidgetData(HttpServletRequest request,
+ @RequestParam String resourceType) {
+ if (!isValidResourceType(resourceType)){
+ logger.debug(EELFLoggerDelegate.debugLogger, "Unexpected resource type {}", resourceType);
+ return new PortalRestResponse<CommonWidgetMeta>(PortalRestStatusEnum.ERROR,
+ "Unexpected resource type " + resourceType, null);
+ }
+ return new PortalRestResponse<CommonWidgetMeta>(PortalRestStatusEnum.OK, "success",
+ searchService.getWidgetData(resourceType));
+ }
+
+
+}
diff --git a/ecomp-portal-BE-common/src/main/java/org/onap/portalapp/portal/controller/ConsulClientController.java b/ecomp-portal-BE-common/src/main/java/org/onap/portalapp/portal/controller/ConsulClientController.java
new file mode 100644
index 00000000..3a8f6c8d
--- /dev/null
+++ b/ecomp-portal-BE-common/src/main/java/org/onap/portalapp/portal/controller/ConsulClientController.java
@@ -0,0 +1,113 @@
+/*-
+ * ============LICENSE_START==========================================
+ * ONAP Portal
+ * ===================================================================
+ * Copyright (C) 2017 AT&T Intellectual Property. All rights reserved.
+ * ===================================================================
+ *
+ * Unless otherwise specified, all software contained herein is licensed
+ * under the Apache License, Version 2.0 (the "License");
+ * you may not use this software 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.
+ *
+ * Unless otherwise specified, all documentation contained herein is licensed
+ * under the Creative Commons License, Attribution 4.0 Intl. (the "License");
+ * you may not use this documentation except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * https://creativecommons.org/licenses/by/4.0/
+ *
+ * Unless required by applicable law or agreed to in writing, documentation
+ * 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.
+ *
+ * ============LICENSE_END============================================
+ *
+ * ECOMP is a trademark and service mark of AT&T Intellectual Property.
+ */
+package org.onap.portalapp.portal.controller;
+
+import java.util.ArrayList;
+import java.util.List;
+
+import javax.servlet.http.HttpServletRequest;
+import javax.servlet.http.HttpServletResponse;
+
+import org.onap.portalapp.controller.EPRestrictedBaseController;
+import org.onap.portalapp.portal.ecomp.model.PortalRestResponse;
+import org.onap.portalapp.portal.ecomp.model.PortalRestStatusEnum;
+import org.onap.portalapp.portal.service.ConsulHealthService;
+import org.onap.portalsdk.core.logging.logic.EELFLoggerDelegate;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.web.bind.annotation.PathVariable;
+import org.springframework.web.bind.annotation.RequestMapping;
+import org.springframework.web.bind.annotation.RequestMethod;
+import org.springframework.web.bind.annotation.RestController;
+
+import com.orbitz.consul.ConsulException;
+import com.orbitz.consul.model.health.ServiceHealth;
+
+import io.searchbox.client.config.exception.NoServerConfiguredException;
+
+@RestController
+@RequestMapping("/portalApi/consul")
+public class ConsulClientController extends EPRestrictedBaseController {
+ private EELFLoggerDelegate logger = EELFLoggerDelegate.getLogger(ConsulClientController.class);
+
+ @Autowired
+ private ConsulHealthService consulHealthService;
+
+ // Get location of a healthy node running our service
+ @RequestMapping(value = { "/service/{service}" }, method = RequestMethod.GET, produces = "application/json")
+ public PortalRestResponse<String> getServiceLocation(HttpServletRequest request, HttpServletResponse response,
+ @PathVariable("service") String service) {
+
+ try {
+ return new PortalRestResponse<String>(PortalRestStatusEnum.OK, "Success!",
+ consulHealthService.getServiceLocation(service, null));
+ } catch (NoServerConfiguredException e) {
+ logger.error(logger.errorLogger, "No healthy service exception!");
+ return new PortalRestResponse<String>(PortalRestStatusEnum.WARN, "Warning!",
+ "No healthy service exception!");
+ } catch (ConsulException e) {
+ logger.error(logger.errorLogger, "Couldn't connect ot consul - Is consul running?");
+ return new PortalRestResponse<String>(PortalRestStatusEnum.ERROR, "Error!",
+ "Couldn't connect ot consul - Is consul running?");
+ }
+ }
+
+ @RequestMapping(value = { "/service/healthy/{service}" }, method = RequestMethod.GET, produces = "application/json")
+ public PortalRestResponse<List<ServiceHealth>> getAllHealthyNodes(HttpServletRequest request,
+ HttpServletResponse response, @PathVariable("service") String service) {
+ try {
+ return new PortalRestResponse<List<ServiceHealth>>(PortalRestStatusEnum.OK, "Success!",
+ consulHealthService.getAllHealthyNodes(service));
+ } catch (ConsulException e) {
+ logger.error(logger.errorLogger, "Couldn't connect to consul - shouldn't break anything.");
+ return new PortalRestResponse<List<ServiceHealth>>(PortalRestStatusEnum.ERROR, "Error!", new ArrayList<>());
+ }
+ }
+
+ @RequestMapping(value = { "/service/all/{service}" }, method = RequestMethod.GET, produces = "application/json")
+ public PortalRestResponse<List<ServiceHealth>> getAllNodes(HttpServletRequest request, HttpServletResponse response,
+ @PathVariable("service") String service) {
+ try {
+ return new PortalRestResponse<List<ServiceHealth>>(PortalRestStatusEnum.OK, "Success!",
+ consulHealthService.getAllNodes(service));
+ } catch (ConsulException e) {
+ logger.error(logger.errorLogger, "Couldn't connect to consul - shouldn't break anything.");
+ return new PortalRestResponse<List<ServiceHealth>>(PortalRestStatusEnum.ERROR, "Error!", new ArrayList<>());
+ }
+ }
+
+}
diff --git a/ecomp-portal-BE-common/src/main/java/org/onap/portalapp/portal/controller/DashboardController.java b/ecomp-portal-BE-common/src/main/java/org/onap/portalapp/portal/controller/DashboardController.java
new file mode 100644
index 00000000..d8e8aeb0
--- /dev/null
+++ b/ecomp-portal-BE-common/src/main/java/org/onap/portalapp/portal/controller/DashboardController.java
@@ -0,0 +1,414 @@
+/*-
+ * ============LICENSE_START==========================================
+ * ONAP Portal
+ * ===================================================================
+ * Copyright (C) 2017 AT&T Intellectual Property. All rights reserved.
+ * ===================================================================
+ *
+ * Unless otherwise specified, all software contained herein is licensed
+ * under the Apache License, Version 2.0 (the "License");
+ * you may not use this software 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.
+ *
+ * Unless otherwise specified, all documentation contained herein is licensed
+ * under the Creative Commons License, Attribution 4.0 Intl. (the "License");
+ * you may not use this documentation except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * https://creativecommons.org/licenses/by/4.0/
+ *
+ * Unless required by applicable law or agreed to in writing, documentation
+ * 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.
+ *
+ * ============LICENSE_END============================================
+ *
+ * ECOMP is a trademark and service mark of AT&T Intellectual Property.
+ */
+package org.onap.portalapp.portal.controller;
+
+import java.text.ParseException;
+import java.text.SimpleDateFormat;
+import java.util.ArrayList;
+import java.util.Date;
+import java.util.HashMap;
+import java.util.HashSet;
+import java.util.List;
+import java.util.Map;
+
+import javax.servlet.http.HttpServletRequest;
+import javax.servlet.http.HttpServletResponse;
+
+import org.onap.portalapp.controller.EPRestrictedBaseController;
+import org.onap.portalapp.portal.domain.EPUser;
+import org.onap.portalapp.portal.domain.EcompAuditLog;
+import org.onap.portalapp.portal.ecomp.model.PortalRestResponse;
+import org.onap.portalapp.portal.ecomp.model.PortalRestStatusEnum;
+import org.onap.portalapp.portal.ecomp.model.SearchResultItem;
+import org.onap.portalapp.portal.logging.aop.EPAuditLog;
+import org.onap.portalapp.portal.logging.aop.EPEELFLoggerAdvice;
+import org.onap.portalapp.portal.logging.logic.EPLogUtil;
+import org.onap.portalapp.portal.service.AdminRolesService;
+import org.onap.portalapp.portal.service.DashboardSearchService;
+import org.onap.portalapp.portal.transport.CommonWidget;
+import org.onap.portalapp.portal.transport.CommonWidgetMeta;
+import org.onap.portalapp.portal.utils.EPCommonSystemProperties;
+import org.onap.portalapp.portal.utils.EcompPortalUtils;
+import org.onap.portalapp.portal.utils.PortalConstants;
+import org.onap.portalapp.util.EPUserUtils;
+import org.onap.portalsdk.core.domain.AuditLog;
+import org.onap.portalsdk.core.domain.support.CollaborateList;
+import org.onap.portalsdk.core.logging.logic.EELFLoggerDelegate;
+import org.onap.portalsdk.core.service.AuditService;
+import org.onap.portalsdk.core.util.SystemProperties;
+import org.slf4j.MDC;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.context.annotation.Configuration;
+import org.springframework.web.bind.annotation.RequestBody;
+import org.springframework.web.bind.annotation.RequestMapping;
+import org.springframework.web.bind.annotation.RequestMethod;
+import org.springframework.web.bind.annotation.RequestParam;
+import org.springframework.web.bind.annotation.RestController;
+
+/**
+ * Controller supplies data to Angular services on the dashboard page.
+ */
+@Configuration
+@RestController
+@RequestMapping("/portalApi/dashboard")
+public class DashboardController extends EPRestrictedBaseController {
+
+ private static EELFLoggerDelegate logger = EELFLoggerDelegate.getLogger(DashboardController.class);
+
+ @Autowired
+ private DashboardSearchService searchService;
+ @Autowired
+ private AuditService auditService;
+
+ @Autowired
+ private AdminRolesService adminRolesService;
+
+ public enum WidgetCategory {
+ EVENTS, NEWS, IMPORTANTRESOURCES;
+ }
+
+ /**
+ * Validates the resource type parameter.
+ *
+ * @param resourceType
+ * @return True if known in the enum WidgetCategory, else false.
+ */
+ private boolean isValidResourceType(String resourceType) {
+ if (resourceType == null)
+ return false;
+ for (WidgetCategory wc : WidgetCategory.values())
+ if (wc.name().equals(resourceType))
+ return true;
+ return false;
+ }
+
+ /**
+ * Gets all widgets of the specified resource type.
+ * In iteration 41 (when widget will utilized service onboarding), this method can be removed, instead we will use CommonWidgetController.java (basic auth based)
+ *
+ * @param request
+ * @param resourceType
+ * Request parameter.
+ * @return Rest response wrapped around a CommonWidgetMeta object.
+ */
+ @RequestMapping(value = "/widgetData", method = RequestMethod.GET, produces = "application/json")
+ public PortalRestResponse<CommonWidgetMeta> getWidgetData(HttpServletRequest request,
+ @RequestParam String resourceType) {
+ if (!isValidResourceType(resourceType))
+ return new PortalRestResponse<CommonWidgetMeta>(PortalRestStatusEnum.ERROR,
+ "Unexpected resource type " + resourceType, null);
+ return new PortalRestResponse<CommonWidgetMeta>(PortalRestStatusEnum.OK, "success",
+ searchService.getWidgetData(resourceType));
+ }
+
+
+ /**
+ * Saves a batch of events, news or resources.
+ *
+ * @param commonWidgetMeta
+ * read from POST body.
+ * @return Rest response wrapped around a String; e.g., "success" or "ERROR"
+ */
+ @RequestMapping(value = "/widgetDataBulk", method = RequestMethod.POST, produces = "application/json")
+ public PortalRestResponse<String> saveWidgetDataBulk(@RequestBody CommonWidgetMeta commonWidgetMeta) {
+ logger.debug(EELFLoggerDelegate.debugLogger, "saveWidgetDataBulk: argument is {}", commonWidgetMeta);
+ if (commonWidgetMeta.getCategory() == null || commonWidgetMeta.getCategory().trim().equals(""))
+ return new PortalRestResponse<String>(PortalRestStatusEnum.ERROR, "ERROR",
+ "Category cannot be null or empty");
+ if (!isValidResourceType(commonWidgetMeta.getCategory()))
+ return new PortalRestResponse<String>(PortalRestStatusEnum.ERROR,
+ "Unexpected resource type " + commonWidgetMeta.getCategory(), null);
+ // validate dates
+ for (CommonWidget cw : commonWidgetMeta.getItems()) {
+ String err = validateCommonWidget(cw);
+ if (err != null)
+ return new PortalRestResponse<String>(PortalRestStatusEnum.ERROR, err, null);
+ }
+ return new PortalRestResponse<String>(PortalRestStatusEnum.OK, "success",
+ searchService.saveWidgetDataBulk(commonWidgetMeta));
+ }
+
+ /**
+ * Saves one: event, news or resource
+ *
+ * @param commonWidget
+ * read from POST body
+ * @return Rest response wrapped around a String; e.g., "success" or "ERROR"
+ */
+ @RequestMapping(value = "/widgetData", method = RequestMethod.POST, produces = "application/json")
+ public PortalRestResponse<String> saveWidgetData(@RequestBody CommonWidget commonWidget, HttpServletRequest request,
+ HttpServletResponse response) {
+ logger.debug(EELFLoggerDelegate.debugLogger, "saveWidgetData: argument is {}", commonWidget);
+ EPUser user = EPUserUtils.getUserSession(request);
+ if (adminRolesService.isSuperAdmin(user)) {
+ if (commonWidget.getCategory() == null || commonWidget.getCategory().trim().isEmpty())
+ return new PortalRestResponse<String>(PortalRestStatusEnum.ERROR, "ERROR",
+ "Category cannot be null or empty");
+ String err = validateCommonWidget(commonWidget);
+ if (err != null)
+ return new PortalRestResponse<String>(PortalRestStatusEnum.ERROR, err, null);
+ return new PortalRestResponse<String>(PortalRestStatusEnum.OK, "success",
+ searchService.saveWidgetData(commonWidget));
+ } else {
+ EcompPortalUtils.setBadPermissions(user, response, "saveWidgetData");
+ return new PortalRestResponse<String>(PortalRestStatusEnum.ERROR, "Failed", null);
+ }
+ }
+
+ /**
+ * Used by the validate function
+ */
+ private final SimpleDateFormat yearMonthDayFormat = new SimpleDateFormat("yyyy-MM-dd");
+
+ /**
+ * Validates the content of a common widget.
+ *
+ * @param cw
+ * @return null on success; an error message if validation fails.
+ * @throws Exception
+ */
+ private String validateCommonWidget(CommonWidget cw) {
+ if (!isValidResourceType(cw.getCategory()))
+ return "Invalid category: " + cw.getCategory();
+ if (cw.getTitle() == null || cw.getTitle().trim().length() == 0)
+ return "Title is missing";
+ if (cw.getHref() == null || cw.getHref().trim().length() == 0)
+ return "HREF is missing";
+ if (!cw.getHref().toLowerCase().startsWith("http"))
+ return "HREF does not start with http";
+ if (cw.getSortOrder() == null)
+ return "Sort order is null";
+ if (cw.getEventDate() == null || cw.getEventDate().trim().length() == 0)
+ return "Date is missing";
+ try {
+ yearMonthDayFormat.setLenient(false);
+ Date date = yearMonthDayFormat.parse(cw.getEventDate());
+ if (date == null)
+ return "Failed to parse date " + cw.getEventDate();
+ } catch (ParseException ex) {
+ return "Invalid date format " +ex.toString();
+ }
+ return null;
+ }
+
+ /**
+ * Deletes one: event, news or resource
+ *
+ * @param commonWidget
+ * read from POST body
+ * @return Rest response wrapped around a String; e.g., "success" or "ERROR"
+ */
+ @RequestMapping(value = "/deleteData", method = RequestMethod.POST, produces = "application/json")
+ public PortalRestResponse<String> deleteWidgetData(@RequestBody CommonWidget commonWidget) {
+ logger.debug(EELFLoggerDelegate.debugLogger, "deleteWidgetData: argument is {}", commonWidget);
+ return new PortalRestResponse<String>(PortalRestStatusEnum.OK, "success",
+ searchService.deleteWidgetData(commonWidget));
+ }
+
+ /**
+ * Searches all portal for the input string.
+ *
+ * @param request
+ * @param searchString
+ * @return Rest response wrapped around a Map of String to List of Search
+ * Result Item.
+ */
+ @EPAuditLog
+ @RequestMapping(value = "/search", method = RequestMethod.GET, produces = "application/json")
+ public PortalRestResponse<Map<String, List<SearchResultItem>>> searchPortal(HttpServletRequest request,
+ @RequestParam String searchString) {
+
+ if (searchString != null)
+ searchString = searchString.trim();
+ EPUser user = EPUserUtils.getUserSession(request);
+ try {
+ if (user == null) {
+ return new PortalRestResponse<>(PortalRestStatusEnum.ERROR,
+ "searchPortal: User object is null? - check logs",
+ new HashMap<String, List<SearchResultItem>>());
+ } else if (searchString == null || searchString.length() == 0) {
+ return new PortalRestResponse<>(PortalRestStatusEnum.ERROR, "searchPortal: String string is null",
+ new HashMap<String, List<SearchResultItem>>());
+ } else {
+ logger.debug(EELFLoggerDelegate.debugLogger, "searchPortal: user {}, search string '{}'",
+ user.getLoginId(), searchString);
+ Map<String, List<SearchResultItem>> results = searchService.searchResults(user.getLoginId(),
+ searchString);
+ /*Audit log the search*/
+ AuditLog auditLog = new AuditLog();
+ auditLog.setUserId(user.getId());
+ auditLog.setActivityCode(EcompAuditLog.CD_ACTIVITY_SEARCH);
+ auditLog.setComments(EcompPortalUtils.truncateString(searchString, PortalConstants.AUDIT_LOG_COMMENT_SIZE));
+ MDC.put(EPCommonSystemProperties.AUDITLOG_BEGIN_TIMESTAMP,EPEELFLoggerAdvice.getCurrentDateTimeUTC());
+ auditService.logActivity(auditLog, null);
+ MDC.put(EPCommonSystemProperties.AUDITLOG_END_TIMESTAMP,EPEELFLoggerAdvice.getCurrentDateTimeUTC());
+ EcompPortalUtils.calculateDateTimeDifferenceForLog(MDC.get(EPCommonSystemProperties.AUDITLOG_BEGIN_TIMESTAMP),MDC.get(EPCommonSystemProperties.AUDITLOG_END_TIMESTAMP));
+ logger.info(EELFLoggerDelegate.auditLogger, EPLogUtil.formatAuditLogMessage("DashboardController.PortalRestResponse",
+ EcompAuditLog.CD_ACTIVITY_SEARCH, user.getOrgUserId(), null, searchString));
+ MDC.remove(EPCommonSystemProperties.AUDITLOG_BEGIN_TIMESTAMP);
+ MDC.remove(EPCommonSystemProperties.AUDITLOG_END_TIMESTAMP);
+ MDC.remove(SystemProperties.MDC_TIMER);
+ return new PortalRestResponse<>(PortalRestStatusEnum.OK, "success", results);
+ }
+ } catch (Exception e) {
+ logger.error(EELFLoggerDelegate.errorLogger, "searchPortal failed", e);
+ return new PortalRestResponse<>(PortalRestStatusEnum.ERROR, e.getMessage() + " - check logs.",
+ new HashMap<String, List<SearchResultItem>>());
+ }
+ }
+
+ /**
+ * Gets all active users.
+ *
+ * TODO: should only the superuser be allowed to use this API?
+ *
+ * @param request
+ * @return Rest response wrapped around a list of String
+ */
+ @RequestMapping(value = "/activeUsers", method = RequestMethod.GET, produces = "application/json")
+ public List<String> getActiveUsers(HttpServletRequest request) {
+ List<String> activeUsers = null;
+ List<String> onlineUsers = new ArrayList<>();
+ try {
+ EPUser user = EPUserUtils.getUserSession(request);
+ String userId = user.getOrgUserId();
+
+ activeUsers = searchService.getRelatedUsers(userId);
+ HashSet<String> usersSet = (HashSet<String>) CollaborateList.getInstance().getAllUserName();
+ for (String users : activeUsers) {
+ if (usersSet.contains(users)) {
+ onlineUsers.add(users);
+ }
+ }
+
+ } catch (Exception e) {
+ logger.error(EELFLoggerDelegate.errorLogger, "getActiveUsers failed", e);
+ }
+ return onlineUsers;
+ }
+
+ /**
+ * Gets the refresh interval and duration of a cycle of continuous refreshing for the online users side panel, both in milliseconds.
+ *
+ * @param request
+ * @return Rest response wrapped around a number that is the number of milliseconds.
+ */
+ @RequestMapping(value = "/onlineUserUpdateRate", method = RequestMethod.GET, produces = "application/json")
+ public PortalRestResponse<Map<String, String>> getOnlineUserUpdateRate(HttpServletRequest request) {
+ try {
+ String updateRate = SystemProperties.getProperty(EPCommonSystemProperties.ONLINE_USER_UPDATE_RATE);
+ String updateDuration = SystemProperties.getProperty(EPCommonSystemProperties.ONLINE_USER_UPDATE_DURATION);
+ Integer rateInMiliSec = Integer.valueOf(updateRate)*1000;
+ Integer durationInMiliSec = Integer.valueOf(updateDuration)*1000;
+ Map<String, String> results = new HashMap<String,String>();
+ results.put("onlineUserUpdateRate", String.valueOf(rateInMiliSec));
+ results.put("onlineUserUpdateDuration", String.valueOf(durationInMiliSec));
+ return new PortalRestResponse<>(PortalRestStatusEnum.OK, "success", results);
+ } catch (Exception e) {
+ logger.error(EELFLoggerDelegate.errorLogger, "getOnlineUserUpdateRate failed", e);
+ return new PortalRestResponse<>(PortalRestStatusEnum.ERROR, e.toString(), null);
+ }
+ }
+
+ /**
+ * Gets the window width threshold for collapsing right menu from system.properties.
+ *
+ * @param request
+ * @return Rest response wrapped around a number that is the window width threshold to collapse right menu.
+ */
+ @RequestMapping(value = "/windowWidthThresholdRightMenu", method = RequestMethod.GET, produces = "application/json")
+ public PortalRestResponse<Map<String, String>> getWindowWidthThresholdForRightMenu(HttpServletRequest request) {
+ try {
+ String windowWidthString = SystemProperties.getProperty(EPCommonSystemProperties.WINDOW_WIDTH_THRESHOLD_RIGHT_MENU);
+ Integer windowWidth = Integer.valueOf(windowWidthString);
+ Map<String, String> results = new HashMap<String,String>();
+ results.put("windowWidth", String.valueOf(windowWidth));
+ return new PortalRestResponse<>(PortalRestStatusEnum.OK, "success", results);
+ } catch (Exception e) {
+ logger.error(EELFLoggerDelegate.errorLogger, "getWindowWidthThresholdForRightMenu failed", e);
+ return new PortalRestResponse<>(PortalRestStatusEnum.ERROR, e.toString(), null);
+ }
+ }
+
+
+ /**
+ * Gets the window width threshold for collapsing left menu from system.properties.
+ *
+ * @param request
+ * @return Rest response wrapped around a number that is the window width threshold to collapse the left menu.
+ */
+ @RequestMapping(value = "/windowWidthThresholdLeftMenu", method = RequestMethod.GET, produces = "application/json")
+ public PortalRestResponse<Map<String, String>> getWindowWidthThresholdForLeftMenu(HttpServletRequest request) {
+ try {
+ String windowWidthString = SystemProperties.getProperty(EPCommonSystemProperties.WINDOW_WIDTH_THRESHOLD_LEFT_MENU);
+ Integer windowWidth = Integer.valueOf(windowWidthString);
+ Map<String, String> results = new HashMap<String,String>();
+ results.put("windowWidth", String.valueOf(windowWidth));
+ return new PortalRestResponse<>(PortalRestStatusEnum.OK, "success", results);
+ } catch (Exception e) {
+ logger.error(EELFLoggerDelegate.errorLogger, "getWindowWidthThresholdForLeftMenu failed", e);
+ return new PortalRestResponse<>(PortalRestStatusEnum.ERROR, e.toString(), null);
+ }
+ }
+
+ /**
+ * Gets only those users that are 'related' to the currently logged-in user.
+ *
+ * @param request
+ * @return Rest response wrapped around a List of String
+ */
+ @RequestMapping(value = "/relatedUsers", method = RequestMethod.GET, produces = "application/json")
+ public PortalRestResponse<List<String>> activeUsers(HttpServletRequest request) {
+ EPUser user = EPUserUtils.getUserSession(request);
+ try {
+ if (user == null) {
+ return new PortalRestResponse<>(PortalRestStatusEnum.ERROR, "User object is null? - check logs",
+ new ArrayList<>());
+ } else {
+ logger.debug(EELFLoggerDelegate.debugLogger, "activeUsers: searching for user {}", user.getLoginId());
+ return new PortalRestResponse<>(PortalRestStatusEnum.OK, "success",
+ searchService.getRelatedUsers(user.getLoginId()));
+ }
+ } catch (Exception e) {
+ logger.error(EELFLoggerDelegate.errorLogger, "activeUsers failed", e);
+ return new PortalRestResponse<>(PortalRestStatusEnum.ERROR, e.getMessage() + " - check logs.",
+ new ArrayList<>());
+ }
+ }
+
+}
diff --git a/ecomp-portal-BE-common/src/main/java/org/onap/portalapp/portal/controller/DashboardSearchResultController.java b/ecomp-portal-BE-common/src/main/java/org/onap/portalapp/portal/controller/DashboardSearchResultController.java
new file mode 100644
index 00000000..b26bd1bc
--- /dev/null
+++ b/ecomp-portal-BE-common/src/main/java/org/onap/portalapp/portal/controller/DashboardSearchResultController.java
@@ -0,0 +1,261 @@
+/*-
+ * ============LICENSE_START==========================================
+ * ONAP Portal
+ * ===================================================================
+ * Copyright (C) 2017 AT&T Intellectual Property. All rights reserved.
+ * ===================================================================
+ *
+ * Unless otherwise specified, all software contained herein is licensed
+ * under the Apache License, Version 2.0 (the "License");
+ * you may not use this software 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.
+ *
+ * Unless otherwise specified, all documentation contained herein is licensed
+ * under the Creative Commons License, Attribution 4.0 Intl. (the "License");
+ * you may not use this documentation except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * https://creativecommons.org/licenses/by/4.0/
+ *
+ * Unless required by applicable law or agreed to in writing, documentation
+ * 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.
+ *
+ * ============LICENSE_END============================================
+ *
+ * ECOMP is a trademark and service mark of AT&T Intellectual Property.
+ */
+package org.onap.portalapp.portal.controller;
+
+import java.text.ParseException;
+import java.text.SimpleDateFormat;
+import java.util.ArrayList;
+import java.util.HashMap;
+import java.util.HashSet;
+import java.util.List;
+import java.util.Map;
+
+import javax.servlet.http.HttpServletRequest;
+
+import org.onap.portalapp.controller.EPRestrictedBaseController;
+import org.onap.portalapp.portal.domain.EPUser;
+import org.onap.portalapp.portal.ecomp.model.PortalRestResponse;
+import org.onap.portalapp.portal.ecomp.model.PortalRestStatusEnum;
+import org.onap.portalapp.portal.ecomp.model.SearchResultItem;
+import org.onap.portalapp.portal.service.DashboardSearchService;
+import org.onap.portalapp.portal.transport.CommonWidget;
+import org.onap.portalapp.portal.transport.CommonWidgetMeta;
+import org.onap.portalapp.util.EPUserUtils;
+import org.onap.portalsdk.core.domain.support.CollaborateList;
+import org.onap.portalsdk.core.logging.logic.EELFLoggerDelegate;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.web.bind.annotation.RequestBody;
+import org.springframework.web.bind.annotation.RequestMapping;
+import org.springframework.web.bind.annotation.RequestMethod;
+import org.springframework.web.bind.annotation.RequestParam;
+import org.springframework.web.bind.annotation.RestController;
+
+@RestController
+@RequestMapping("/portalApi/search")
+public class DashboardSearchResultController extends EPRestrictedBaseController {
+
+ private static EELFLoggerDelegate logger = EELFLoggerDelegate.getLogger(DashboardSearchResultController.class);
+
+ @Autowired
+ private DashboardSearchService searchService;
+
+ /**
+ * Gets all widgets by type: NEW or RESOURCE
+ *
+ * @param request
+ * @param resourceType
+ * Request parameter.
+ * @return Rest response wrapped around a CommonWidgetMeta object.
+ */
+ @RequestMapping(value = "/widgetData", method = RequestMethod.GET, produces = "application/json")
+ public PortalRestResponse<CommonWidgetMeta> getWidgetData(HttpServletRequest request,
+ @RequestParam String resourceType) {
+ return new PortalRestResponse<CommonWidgetMeta>(PortalRestStatusEnum.OK, "success",
+ searchService.getWidgetData(resourceType));
+ }
+
+ /**
+ * Saves all: news and resources
+ *
+ * @param commonWidgetMeta
+ * read from POST body.
+ * @return Rest response wrapped around a String; e.g., "success" or "ERROR"
+ */
+ @RequestMapping(value = "/widgetDataBulk", method = RequestMethod.POST, produces = "application/json")
+ public PortalRestResponse<String> saveWidgetDataBulk(@RequestBody CommonWidgetMeta commonWidgetMeta) {
+ logger.debug(EELFLoggerDelegate.debugLogger, "saveWidgetDataBulk: argument is {}", commonWidgetMeta);
+ if (commonWidgetMeta.getCategory() == null || commonWidgetMeta.getCategory().trim().equals(""))
+ return new PortalRestResponse<String>(PortalRestStatusEnum.ERROR, "ERROR",
+ "Category cannot be null or empty");
+ // validate dates
+ for (CommonWidget cw : commonWidgetMeta.getItems()) {
+ String err = validateCommonWidget(cw);
+ if (err != null)
+ return new PortalRestResponse<String>(PortalRestStatusEnum.ERROR, err, null);
+ }
+ return new PortalRestResponse<String>(PortalRestStatusEnum.OK, "success",
+ searchService.saveWidgetDataBulk(commonWidgetMeta));
+ }
+
+ /**
+ * Saves one: news or resource
+ *
+ * @param commonWidget
+ * read from POST body
+ * @return Rest response wrapped around a String; e.g., "success" or "ERROR"
+ */
+ @RequestMapping(value = "/widgetData", method = RequestMethod.POST, produces = "application/json")
+ public PortalRestResponse<String> saveWidgetData(@RequestBody CommonWidget commonWidget) {
+ logger.debug(EELFLoggerDelegate.debugLogger, "saveWidgetData: argument is {}", commonWidget);
+ if (commonWidget.getCategory() == null || commonWidget.getCategory().trim().equals(""))
+ return new PortalRestResponse<String>(PortalRestStatusEnum.ERROR, "ERROR",
+ "Cateogry cannot be null or empty");
+ String err = validateCommonWidget(commonWidget);
+ if (err != null)
+ return new PortalRestResponse<String>(PortalRestStatusEnum.ERROR, err, null);
+ return new PortalRestResponse<String>(PortalRestStatusEnum.OK, "success",
+ searchService.saveWidgetData(commonWidget));
+ }
+
+ /**
+ * Used by the validate function
+ */
+ private final SimpleDateFormat yearMonthDayFormat = new SimpleDateFormat("yyyy-MM-dd");
+
+ /**
+ * Validates the content of a common widget.
+ *
+ * @param cw
+ * @return null on success; an error message if validation fails.
+ * @throws Exception
+ */
+ private String validateCommonWidget(CommonWidget cw) {
+ try {
+ if (cw.getEventDate() != null && cw.getEventDate().trim().length() > 0)
+ yearMonthDayFormat.parse(cw.getEventDate());
+ } catch (ParseException ex) {
+ return ex.toString();
+ }
+ return null;
+ }
+
+ /**
+ * Deletes one: news or resource
+ *
+ * @param commonWidget
+ * read from POST body
+ * @return Rest response wrapped around a String; e.g., "success" or "ERROR"
+ */
+ @RequestMapping(value = "/deleteData", method = RequestMethod.POST, produces = "application/json")
+ public PortalRestResponse<String> deleteWidgetData(@RequestBody CommonWidget commonWidget) {
+ logger.debug(EELFLoggerDelegate.debugLogger, "deleteWidgetData: argument is {}", commonWidget);
+ return new PortalRestResponse<String>(PortalRestStatusEnum.OK, "success",
+ searchService.deleteWidgetData(commonWidget));
+ }
+
+ /**
+ * Searches all portal for the input string.
+ *
+ * @param request
+ * @param searchString
+ * @return Rest response wrapped around a Map of String to List of Search
+ * Result Item.
+ */
+ @RequestMapping(value = "/allPortal", method = RequestMethod.GET, produces = "application/json")
+ public PortalRestResponse<Map<String, List<SearchResultItem>>> searchPortal(HttpServletRequest request,
+ @RequestParam String searchString) {
+
+ EPUser user = EPUserUtils.getUserSession(request);
+ try {
+ if (user == null) {
+ return new PortalRestResponse<>(PortalRestStatusEnum.ERROR,
+ "searchPortal: User object is null? - check logs",
+ new HashMap<String, List<SearchResultItem>>());
+ } else if (searchString == null || searchString.trim().length() == 0) {
+ return new PortalRestResponse<>(PortalRestStatusEnum.ERROR, "searchPortal: String string is null",
+ new HashMap<String, List<SearchResultItem>>());
+ } else {
+ logger.debug(EELFLoggerDelegate.debugLogger, "searchPortal: user {}, search string '{}'",
+ user.getLoginId(), searchString);
+ Map<String, List<SearchResultItem>> results = searchService.searchResults(user.getLoginId(),
+ searchString);
+ return new PortalRestResponse<>(PortalRestStatusEnum.OK, "success", results);
+ }
+ } catch (Exception e) {
+ logger.error(EELFLoggerDelegate.errorLogger, "searchPortal failed", e);
+ return new PortalRestResponse<>(PortalRestStatusEnum.ERROR, e.getMessage() + " - check logs.",
+ new HashMap<String, List<SearchResultItem>>());
+ }
+ }
+
+ /**
+ * Gets all active users.
+ *
+ * TODO: should only the superuser be allowed to use this API?
+ *
+ * @param request
+ * @return Rest response wrapped around a list of String
+ */
+ @RequestMapping(value = "/activeUsers", method = RequestMethod.GET, produces = "application/json")
+ public List<String> getActiveUsers(HttpServletRequest request) {
+ List<String> activeUsers = null;
+ List<String> onlineUsers = new ArrayList<>();
+ try {
+ EPUser user = EPUserUtils.getUserSession(request);
+ String userId = user.getOrgUserId();
+
+ activeUsers = searchService.getRelatedUsers(userId);
+ HashSet<String> usersSet = (HashSet<String>) CollaborateList.getInstance().getAllUserName();
+ for (String users : activeUsers) {
+ if (usersSet.contains(users)) {
+ onlineUsers.add(users);
+ }
+ }
+
+ } catch (Exception e) {
+ logger.error(EELFLoggerDelegate.errorLogger, "getActiveUsers failed", e);
+ }
+ return onlineUsers;
+ }
+
+ /**
+ * Gets only those users that are 'related' to the currently logged-in user.
+ *
+ * @param request
+ * @return Rest response wrapped around a List of String
+ */
+ @RequestMapping(value = "/relatedUsers", method = RequestMethod.GET, produces = "application/json")
+ public PortalRestResponse<List<String>> activeUsers(HttpServletRequest request) {
+ EPUser user = EPUserUtils.getUserSession(request);
+ try {
+ if (user == null) {
+ return new PortalRestResponse<>(PortalRestStatusEnum.ERROR, "User object is null? - check logs",
+ new ArrayList<>());
+ } else {
+ logger.debug(EELFLoggerDelegate.debugLogger, "activeUsers: searching for user {}", user.getLoginId());
+ return new PortalRestResponse<>(PortalRestStatusEnum.OK, "success",
+ searchService.getRelatedUsers(user.getLoginId()));
+ }
+ } catch (Exception e) {
+ logger.error(EELFLoggerDelegate.errorLogger, "activeUsers failed", e);
+ return new PortalRestResponse<>(PortalRestStatusEnum.ERROR, e.getMessage() + " - check logs.",
+ new ArrayList<>());
+ }
+ }
+
+}
diff --git a/ecomp-portal-BE-common/src/main/java/org/onap/portalapp/portal/controller/EncryptAdminController.java b/ecomp-portal-BE-common/src/main/java/org/onap/portalapp/portal/controller/EncryptAdminController.java
new file mode 100644
index 00000000..65b24707
--- /dev/null
+++ b/ecomp-portal-BE-common/src/main/java/org/onap/portalapp/portal/controller/EncryptAdminController.java
@@ -0,0 +1,220 @@
+/*-
+ * ============LICENSE_START==========================================
+ * ONAP Portal
+ * ===================================================================
+ * Copyright (C) 2017 AT&T Intellectual Property. All rights reserved.
+ * ===================================================================
+ *
+ * Unless otherwise specified, all software contained herein is licensed
+ * under the Apache License, Version 2.0 (the "License");
+ * you may not use this software 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.
+ *
+ * Unless otherwise specified, all documentation contained herein is licensed
+ * under the Creative Commons License, Attribution 4.0 Intl. (the "License");
+ * you may not use this documentation except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * https://creativecommons.org/licenses/by/4.0/
+ *
+ * Unless required by applicable law or agreed to in writing, documentation
+ * 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.
+ *
+ * ============LICENSE_END============================================
+ *
+ * ECOMP is a trademark and service mark of AT&T Intellectual Property.
+ */
+package org.onap.portalapp.portal.controller;
+
+import java.util.Iterator;
+import java.util.LinkedHashMap;
+import java.util.List;
+import java.util.Map;
+
+import javax.servlet.http.HttpServletRequest;
+import javax.servlet.http.HttpServletResponse;
+
+import org.apache.commons.lang.StringUtils;
+import org.hibernate.Query;
+import org.hibernate.Session;
+import org.hibernate.SessionFactory;
+import org.onap.portalapp.portal.logging.aop.EPAuditLog;
+import org.onap.portalapp.portal.utils.EcompPortalUtils;
+import org.onap.portalapp.portal.utils.PortalConstants;
+import org.onap.portalsdk.core.logging.logic.EELFLoggerDelegate;
+import org.onap.portalsdk.core.onboarding.exception.CipherUtilException;
+import org.onap.portalsdk.core.onboarding.util.CipherUtil;
+import org.onap.portalsdk.core.service.DataAccessService;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.context.annotation.EnableAspectJAutoProxy;
+import org.springframework.web.bind.annotation.RequestMapping;
+import org.springframework.web.bind.annotation.RequestMethod;
+import org.springframework.web.bind.annotation.RestController;
+
+@RestController
+@RequestMapping(PortalConstants.REST_AUX_API)
+@org.springframework.context.annotation.Configuration
+@EnableAspectJAutoProxy
+@EPAuditLog
+public class EncryptAdminController implements BasicAuthenticationController {
+ @Autowired
+ DataAccessService dataAccessService;
+ @Autowired
+ protected SessionFactory sessionFactory;
+
+ EELFLoggerDelegate logger = EELFLoggerDelegate.getLogger(EncryptAdminController.class);
+
+ @RequestMapping(value = { "/executeEncryptQuery" }, method = RequestMethod.POST)
+ public Map<Long, String> executeEncrypt(HttpServletRequest request, HttpServletResponse response)
+ throws CipherUtilException {
+
+ return fetchRecords();
+ }
+
+ public Map<Long, String> fetchRecords() throws CipherUtilException {
+ List appPassword = null;
+ Session localSession = null;
+ Map<Long, String> responsemap;
+ try {
+ localSession = sessionFactory.openSession();
+ responsemap = new LinkedHashMap<Long, String>();
+ appPassword = dataAccessService.executeNamedQuery("getAppPassword", null, null);
+ if (appPassword != null) {
+ Iterator i = appPassword.iterator();
+ while (i.hasNext()) {
+ Object[] user = (Object[]) i.next();
+ Long app_id = (Long) user[0];
+ String app_password = (String) user[1];
+ if (app_id != null && StringUtils.isNotEmpty(app_password)) {
+ try {
+ final String pass = CipherUtil.encryptPKC(CipherUtil.decrypt(app_password));
+ Query query = null;
+ try {
+ localSession.getTransaction().begin();
+ query = localSession.createSQLQuery(
+ "UPDATE fn_app m SET m.app_password= :pass " + " where m.app_id = :app_id");
+ query.setParameter("pass", pass);
+ query.setParameter("app_id", app_id);
+ int result = query.executeUpdate();
+ localSession.getTransaction().commit();
+ logger.debug(EELFLoggerDelegate.debugLogger,
+ "--------------getAppPassword-------query successfull------------------"
+ + query);
+
+ } catch (Exception e) {
+ localSession.getTransaction().rollback();
+ logger.debug(EELFLoggerDelegate.debugLogger,
+ "--------------getAppPassword--------query failed-----------------" + query);
+ responsemap.put(app_id, "-------query failed-----------------" + query);
+ logger.error(EELFLoggerDelegate.errorLogger,
+ "getAppPassword error while executing the query", e);
+
+ }
+ } catch (Exception e) {
+ logger.error(EELFLoggerDelegate.errorLogger,
+ "getAppPassword error while executing the query", e);
+ }
+ }
+ }
+ }
+ appPassword = dataAccessService.executeNamedQuery("getBasicauthAccount", null, null);
+ if (appPassword != null) {
+ Iterator i = appPassword.iterator();
+ while (i.hasNext()) {
+ Object[] user = (Object[]) i.next();
+ Long app_id = (Long) user[0];
+ String password = (String) user[1];
+ if (app_id != null && StringUtils.isNotEmpty(password)) {
+ try {
+ final String pass = CipherUtil.encryptPKC(CipherUtil.decrypt(password));
+ Query query = null;
+ try {
+ localSession.getTransaction().begin();
+ query = localSession
+ .createSQLQuery("UPDATE ep_basic_auth_account m SET m.password = :pass"
+ + " where m.id = :app_id");
+ query.setParameter("pass", pass);
+ query.setParameter("app_id", app_id);
+ int result = query.executeUpdate();
+ localSession.getTransaction().commit();
+ logger.debug(EELFLoggerDelegate.debugLogger,
+ "--------------getAppPassword-------query successfull------------------"
+ + query);
+
+ } catch (Exception e) {
+ localSession.getTransaction().rollback();
+ logger.debug(EELFLoggerDelegate.debugLogger,
+ "--------------getAppPassword--------query failed-----------------" + query);
+ responsemap.put(app_id, "-------query failed-----------------" + query);
+ logger.error(EELFLoggerDelegate.errorLogger,
+ "getAppPassword error while executing the query", e);
+
+ }
+ } catch (Exception e) {
+ logger.error(EELFLoggerDelegate.errorLogger,
+ "getAppPassword error while executing the query", e);
+ }
+
+ }
+
+ }
+ }
+ appPassword = dataAccessService.executeNamedQuery("getMicroserviceInfo", null, null);
+ if (appPassword != null) {
+ Iterator i = appPassword.iterator();
+ while (i.hasNext()) {
+ Object[] user = (Object[]) i.next();
+ Long app_id = (Long) user[0];
+ String password = (String) user[1];
+ if (app_id != null && StringUtils.isNotEmpty(password)) {
+ try {
+ final String pass = CipherUtil.encryptPKC(CipherUtil.decrypt(password));
+ Query query = null;
+ try {
+ localSession.getTransaction().begin();
+ query = localSession.createSQLQuery(
+ "UPDATE ep_microservice m SET m.password = :pass" + " WHERE m.id = :app_id");
+ query.setParameter("pass", pass);
+ query.setParameter("app_id", app_id);
+ int result = query.executeUpdate();
+ localSession.getTransaction().commit();
+ logger.debug(EELFLoggerDelegate.debugLogger,
+ "--------------getAppPassword-------query successfull------------------"
+ + query);
+
+ } catch (Exception e) {
+ localSession.getTransaction().rollback();
+ logger.debug(EELFLoggerDelegate.debugLogger,
+ "--------------getAppPassword--------query failed-----------------" + query);
+ responsemap.put(app_id, "-------query failed-----------------" + query);
+ logger.error(EELFLoggerDelegate.errorLogger,
+ "getAppPassword error while executing the query", e);
+
+ }
+ } catch (Exception e) {
+ logger.error(EELFLoggerDelegate.errorLogger,
+ "getAppPassword error while executing the query", e);
+ }
+
+ }
+
+ }
+ }
+
+ } finally {
+ EcompPortalUtils.closeLocalSession(localSession, "updateRecords");
+ }
+ return responsemap;
+ }
+}
diff --git a/ecomp-portal-BE-common/src/main/java/org/onap/portalapp/portal/controller/ExternalAccessRolesController.java b/ecomp-portal-BE-common/src/main/java/org/onap/portalapp/portal/controller/ExternalAccessRolesController.java
new file mode 100644
index 00000000..0be015ee
--- /dev/null
+++ b/ecomp-portal-BE-common/src/main/java/org/onap/portalapp/portal/controller/ExternalAccessRolesController.java
@@ -0,0 +1,807 @@
+/*-
+ * ============LICENSE_START==========================================
+ * ONAP Portal
+ * ===================================================================
+ * Copyright (C) 2017 AT&T Intellectual Property. All rights reserved.
+ * ===================================================================
+ *
+ * Unless otherwise specified, all software contained herein is licensed
+ * under the Apache License, Version 2.0 (the "License");
+ * you may not use this software 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.
+ *
+ * Unless otherwise specified, all documentation contained herein is licensed
+ * under the Creative Commons License, Attribution 4.0 Intl. (the "License");
+ * you may not use this documentation except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * https://creativecommons.org/licenses/by/4.0/
+ *
+ * Unless required by applicable law or agreed to in writing, documentation
+ * 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.
+ *
+ * ============LICENSE_END============================================
+ *
+ * ECOMP is a trademark and service mark of AT&T Intellectual Property.
+ */
+package org.onap.portalapp.portal.controller;
+
+
+import java.io.IOException;
+import java.util.HashMap;
+import java.util.List;
+import java.util.Map;
+
+import javax.servlet.http.HttpServletRequest;
+import javax.servlet.http.HttpServletResponse;
+
+import org.apache.commons.lang.StringUtils;
+import org.onap.portalapp.portal.domain.CentralV2RoleFunction;
+import org.onap.portalapp.portal.domain.EPApp;
+import org.onap.portalapp.portal.domain.EPUser;
+import org.onap.portalapp.portal.domain.EcompAuditLog;
+import org.onap.portalapp.portal.ecomp.model.PortalRestResponse;
+import org.onap.portalapp.portal.ecomp.model.PortalRestStatusEnum;
+import org.onap.portalapp.portal.exceptions.InvalidRoleException;
+import org.onap.portalapp.portal.logging.aop.EPAuditLog;
+import org.onap.portalapp.portal.logging.aop.EPEELFLoggerAdvice;
+import org.onap.portalapp.portal.logging.logic.EPLogUtil;
+import org.onap.portalapp.portal.service.ExternalAccessRolesService;
+import org.onap.portalapp.portal.transport.CentralRole;
+import org.onap.portalapp.portal.transport.CentralRoleFunction;
+import org.onap.portalapp.portal.transport.CentralUser;
+import org.onap.portalapp.portal.transport.CentralV2Role;
+import org.onap.portalapp.portal.transport.ExternalRequestFieldsValidator;
+import org.onap.portalapp.portal.utils.EPCommonSystemProperties;
+import org.onap.portalapp.portal.utils.EcompPortalUtils;
+import org.onap.portalapp.portal.utils.PortalConstants;
+import org.onap.portalsdk.core.domain.AuditLog;
+import org.onap.portalsdk.core.domain.Role;
+import org.onap.portalsdk.core.domain.RoleFunction;
+import org.onap.portalsdk.core.logging.logic.EELFLoggerDelegate;
+import org.onap.portalsdk.core.restful.domain.EcompUser;
+import org.onap.portalsdk.core.service.AuditService;
+import org.onap.portalsdk.core.util.SystemProperties;
+import org.slf4j.MDC;
+import org.springframework.beans.BeanUtils;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.context.annotation.EnableAspectJAutoProxy;
+import org.springframework.http.ResponseEntity;
+import org.springframework.web.bind.annotation.PathVariable;
+import org.springframework.web.bind.annotation.RequestBody;
+import org.springframework.web.bind.annotation.RequestMapping;
+import org.springframework.web.bind.annotation.RequestMethod;
+import org.springframework.web.bind.annotation.RestController;
+import org.springframework.web.client.RestTemplate;
+
+import com.fasterxml.jackson.databind.DeserializationFeature;
+import com.fasterxml.jackson.databind.ObjectMapper;
+
+import io.swagger.annotations.ApiOperation;
+
+@RestController
+@RequestMapping("/auxapi")
+@org.springframework.context.annotation.Configuration
+@EnableAspectJAutoProxy
+@EPAuditLog
+public class ExternalAccessRolesController implements BasicAuthenticationController {
+
+ private static final String ROLE_INVALID_CHARS = "%=():,\"\"";
+
+ private static final String SUCCESSFULLY_DELETED = "Successfully Deleted";
+
+ private static final String INVALID_UEB_KEY = "Invalid uebkey!";
+
+ private static final String LOGIN_ID = "LoginId";
+
+ RestTemplate template = new RestTemplate();
+
+ @Autowired
+ private AuditService auditService;
+
+ private static final String UEBKEY = "uebkey";
+
+ private static EELFLoggerDelegate logger = EELFLoggerDelegate.getLogger(ExternalAccessRolesController.class);
+
+ @Autowired
+ private ExternalAccessRolesService externalAccessRolesService;
+
+ @ApiOperation(value = "Gets user role for an application.", response = CentralUser.class, responseContainer="List")
+ @RequestMapping(value = {
+ "/user/{loginId}" }, method = RequestMethod.GET, produces = "application/json")
+ public CentralUser getUser(HttpServletRequest request, HttpServletResponse response,
+ @PathVariable("loginId") String loginId) throws Exception {
+
+ CentralUser answer = null;
+ try {
+ fieldsValidation(request);
+ answer = externalAccessRolesService.getUserRoles(loginId, request.getHeader(UEBKEY));
+ } catch (Exception e) {
+ sendErrorResponse(response, e);
+ logger.error(EELFLoggerDelegate.errorLogger, "getUser failed", e);
+ }
+ return answer;
+ }
+
+ @ApiOperation(value = "Gets user roles for an application which is upgraded to newer version.", response = String.class, responseContainer="List")
+ @RequestMapping(value = {
+ "/v2/user/{loginId}" }, method = RequestMethod.GET, produces = "application/json")
+ public String getV2UserList(HttpServletRequest request, HttpServletResponse response,
+ @PathVariable("loginId") String loginId) throws Exception {
+ String answer = null;
+ try {
+ fieldsValidation(request);
+ answer = externalAccessRolesService.getV2UserWithRoles(loginId, request.getHeader(UEBKEY));
+ } catch (Exception e) {
+ sendErrorResponse(response, e);
+ logger.error(EELFLoggerDelegate.errorLogger, "getV2UserList failed", e);
+ }
+ return answer;
+ }
+
+ @ApiOperation(value = "Gets roles for an application.", response = CentralRole.class, responseContainer="Json")
+ @RequestMapping(value = {
+ "/roles" }, method = RequestMethod.GET, produces = "application/json")
+ public List<CentralRole> getRolesForApp(HttpServletRequest request, HttpServletResponse response) throws Exception {
+ logger.debug(EELFLoggerDelegate.debugLogger, "Request received for getRolesForApp");
+ List<CentralV2Role> v2CenRole = null;
+ List<CentralRole> cenRole = null;
+ try {
+ fieldsValidation(request);
+ EPApp app = externalAccessRolesService.getApp(request.getHeader(UEBKEY)).get(0);
+ // Sync all roles from external system into Ecomp portal DB
+ logger.debug(EELFLoggerDelegate.debugLogger, "getRolesForApp: Entering into syncApplicationRolesWithEcompDB");
+ externalAccessRolesService.syncApplicationRolesWithEcompDB(app);
+ logger.debug(EELFLoggerDelegate.debugLogger, "getRolesForApp: Finished syncApplicationRolesWithEcompDB");
+ v2CenRole = externalAccessRolesService.getRolesForApp(request.getHeader(UEBKEY));
+ cenRole = externalAccessRolesService.convertV2CentralRoleListToOldVerisonCentralRoleList(v2CenRole);
+ } catch (Exception e) {
+ sendErrorResponse(response, e);
+ logger.error(EELFLoggerDelegate.errorLogger, "getRolesForApp failed", e);
+ }
+ logger.debug(EELFLoggerDelegate.debugLogger, "Request completed for getRolesForApp");
+ return cenRole;
+ }
+
+ @ApiOperation(value = "Gets roles for an application which is upgraded to newer version.", response = CentralV2Role.class, responseContainer="Json")
+ @RequestMapping(value = {
+ "/v2/roles" }, method = RequestMethod.GET, produces = "application/json")
+ public List<CentralV2Role> getV2RolesForApp(HttpServletRequest request, HttpServletResponse response) throws Exception {
+ logger.debug(EELFLoggerDelegate.debugLogger, "Request received for getV2RolesForApp");
+ List<CentralV2Role> answer = null;
+ try {
+ fieldsValidation(request);
+ EPApp app = externalAccessRolesService.getApp(request.getHeader(UEBKEY)).get(0);
+ // Sync all roles from external system into Ecomp portal DB
+ logger.debug(EELFLoggerDelegate.debugLogger, "getV2RolesForApp: Entering into syncApplicationRolesWithEcompDB");
+ externalAccessRolesService.syncApplicationRolesWithEcompDB(app);
+ logger.debug(EELFLoggerDelegate.debugLogger, "getV2RolesForApp: Finished syncApplicationRolesWithEcompDB");
+ answer = externalAccessRolesService.getRolesForApp(request.getHeader(UEBKEY));
+ } catch (Exception e) {
+ sendErrorResponse(response, e);
+ logger.error(EELFLoggerDelegate.errorLogger, "getV2RolesForApp failed", e);
+ }
+ logger.debug(EELFLoggerDelegate.debugLogger, "Request completed for getV2RolesForApp");
+ return answer;
+ }
+
+ @ApiOperation(value = "Gets all role functions for an application for older version.", response = CentralRoleFunction.class, responseContainer="Json")
+ @RequestMapping(value = {
+ "/functions" }, method = RequestMethod.GET, produces = "application/json")
+ public List<RoleFunction> getRoleFunctionsList(HttpServletRequest request, HttpServletResponse response)
+ throws Exception {
+ List<CentralV2RoleFunction> answer = null;
+ List<RoleFunction> roleFuncList = null;
+ logger.debug(EELFLoggerDelegate.debugLogger, "Request received for getRoleFunctionsList");
+ try {
+ fieldsValidation(request);
+ EPApp app = externalAccessRolesService.getApp(request.getHeader(UEBKEY)).get(0);
+ // Sync all functions from external system into Ecomp portal DB
+ logger.debug(EELFLoggerDelegate.debugLogger, "getRoleFunctionsList: Entering into syncRoleFunctionFromExternalAccessSystem");
+ externalAccessRolesService.syncRoleFunctionFromExternalAccessSystem(app);
+ logger.debug(EELFLoggerDelegate.debugLogger, "getRoleFunctionsList: Finished syncRoleFunctionFromExternalAccessSystem");
+ answer = externalAccessRolesService.getRoleFuncList(request.getHeader(UEBKEY));
+ roleFuncList = externalAccessRolesService.convertCentralRoleFunctionToRoleFunctionObject(answer);
+ } catch (Exception e) {
+ sendErrorResponse(response, e);
+ logger.error(EELFLoggerDelegate.errorLogger, "getRoleFunctionsList failed", e);
+ }
+ logger.debug(EELFLoggerDelegate.debugLogger, "Request completed for getRoleFunctionsList");
+ return roleFuncList;
+ }
+
+ @ApiOperation(value = "Gets all role functions for an application which is upgraded to newer version.", response = CentralV2RoleFunction.class, responseContainer="Json")
+ @RequestMapping(value = {
+ "/v2/functions" }, method = RequestMethod.GET, produces = "application/json")
+ public List<CentralV2RoleFunction> getV2RoleFunctionsList(HttpServletRequest request, HttpServletResponse response)
+ throws Exception {
+ List<CentralV2RoleFunction> cenRoleFuncList = null;
+ logger.debug(EELFLoggerDelegate.debugLogger, "Request received for getV2RoleFunctionsList");
+ try {
+ fieldsValidation(request);
+ EPApp app = externalAccessRolesService.getApp(request.getHeader(UEBKEY)).get(0);
+ // Sync all functions from external system into Ecomp portal DB
+ logger.debug(EELFLoggerDelegate.debugLogger, "getV2RoleFunctionsList: Entering into syncRoleFunctionFromExternalAccessSystem");
+ externalAccessRolesService.syncRoleFunctionFromExternalAccessSystem(app);
+ logger.debug(EELFLoggerDelegate.debugLogger, "getV2RoleFunctionsList: Finished syncRoleFunctionFromExternalAccessSystem");
+ cenRoleFuncList = externalAccessRolesService.getRoleFuncList(request.getHeader(UEBKEY));
+ } catch (Exception e) {
+ sendErrorResponse(response, e);
+ logger.error(EELFLoggerDelegate.errorLogger, "getV2RoleFunctionsList failed", e);
+ }
+ logger.debug(EELFLoggerDelegate.debugLogger, "Request completed for getV2RoleFunctionsList");
+ return cenRoleFuncList;
+ }
+
+ @ApiOperation(value = "Gets role information for an application.", response = CentralRole.class, responseContainer="Json")
+ @RequestMapping(value = {
+ "/role/{role_id}" }, method = RequestMethod.GET, produces = "application/json")
+ public CentralRole getRoleInfo(HttpServletRequest request, HttpServletResponse response,
+ @PathVariable("role_id") Long roleId) throws Exception {
+ CentralV2Role answer = null;
+ CentralRole cenRole = null;
+ logger.debug(EELFLoggerDelegate.debugLogger, "Request received for getRoleInfo");
+ try {
+ fieldsValidation(request);
+ answer = externalAccessRolesService.getRoleInfo(roleId, request.getHeader(UEBKEY));
+ cenRole = externalAccessRolesService.convertV2CentralRoleToOldVerisonCentralRole(answer);
+ } catch (Exception e) {
+ sendErrorResponse(response, e);
+ logger.error(EELFLoggerDelegate.errorLogger, "getRoleInfo failed", e);
+ }
+ logger.debug(EELFLoggerDelegate.debugLogger, "Request completed for getRoleInfo");
+ return cenRole;
+ }
+
+ @ApiOperation(value = "Gets v2 role information for an application which is upgraded to newer version.", response = CentralV2Role.class, responseContainer="Json")
+ @RequestMapping(value = {
+ "/v2/role/{role_id}" }, method = RequestMethod.GET, produces = "application/json")
+ public CentralV2Role getV2RoleInfo(HttpServletRequest request, HttpServletResponse response,
+ @PathVariable("role_id") Long roleId) throws Exception {
+ CentralV2Role answer = null;
+ logger.debug(EELFLoggerDelegate.debugLogger, "Request received for getV2RoleInfo");
+ try {
+ fieldsValidation(request);
+ answer = externalAccessRolesService.getRoleInfo(roleId, request.getHeader(UEBKEY));
+ } catch (Exception e) {
+ sendErrorResponse(response, e);
+ logger.error(EELFLoggerDelegate.errorLogger, "getV2RoleInfo failed", e);
+ }
+ logger.debug(EELFLoggerDelegate.debugLogger, "Request completed for getV2RoleInfo");
+ return answer;
+ }
+
+ @ApiOperation(value = "Gets role information for an application provided by function code.", response = CentralRoleFunction.class, responseContainer = "Json")
+ @RequestMapping(value = { "/function/{code}" }, method = RequestMethod.GET, produces = "application/json")
+ public CentralRoleFunction getRoleFunction(HttpServletRequest request, HttpServletResponse response,
+ @PathVariable("code") String code) throws Exception {
+ CentralV2RoleFunction centralV2RoleFunction = null;
+ CentralRoleFunction centralRoleFunction = new CentralRoleFunction();
+ try {
+ fieldsValidation(request);
+ centralV2RoleFunction = externalAccessRolesService.getRoleFunction(code, request.getHeader(UEBKEY));
+ if(centralV2RoleFunction != null && EcompPortalUtils.getFunctionCode(centralV2RoleFunction.getCode()).equals(code)) {
+ BeanUtils.copyProperties(centralV2RoleFunction, centralRoleFunction, "type","action");
+ }
+ } catch (Exception e) {
+ sendErrorResponse(response, e);
+ logger.error(EELFLoggerDelegate.errorLogger, "getRoleFunction failed", e);
+ }
+ return centralRoleFunction;
+ }
+
+ @ApiOperation(value = "Gets role information for an application provided by function code.", response = CentralV2RoleFunction.class, responseContainer = "Json")
+ @RequestMapping(value = { "/v2/function/{code}" }, method = RequestMethod.GET, produces = "application/json")
+ public CentralV2RoleFunction getV2RoleFunction(HttpServletRequest request, HttpServletResponse response,
+ @PathVariable("code") String code) throws Exception {
+ CentralV2RoleFunction centralV2RoleFunction = null;
+ try {
+ fieldsValidation(request);
+ centralV2RoleFunction = externalAccessRolesService.getRoleFunction(code, request.getHeader(UEBKEY));
+ if(centralV2RoleFunction == null || !EcompPortalUtils.getFunctionCode(centralV2RoleFunction.getCode()).equals(code)) {
+ centralV2RoleFunction = new CentralV2RoleFunction();
+ }
+ } catch (Exception e) {
+ sendErrorResponse(response, e);
+ logger.error(EELFLoggerDelegate.errorLogger, "getV2RoleFunction failed", e);
+ }
+ return centralV2RoleFunction;
+ }
+
+ @ApiOperation(value = "Saves role function for an application.", response = PortalRestResponse.class, responseContainer = "Json")
+ @RequestMapping(value = { "/roleFunction" }, method = RequestMethod.POST, produces = "application/json")
+ public PortalRestResponse<String> saveRoleFunction(HttpServletRequest request, HttpServletResponse response,
+ @RequestBody String roleFunc) throws Exception {
+ try {
+ fieldsValidation(request);
+ String data = roleFunc;
+ ObjectMapper mapper = new ObjectMapper();
+ List<EPApp> applicationList = externalAccessRolesService.getApp(request.getHeader(UEBKEY));
+ EPApp requestedApp = applicationList.get(0);
+ mapper.configure(DeserializationFeature.FAIL_ON_UNKNOWN_PROPERTIES, false);
+ CentralV2RoleFunction availableRoleFunction = mapper.readValue(data, CentralV2RoleFunction.class);
+ CentralV2RoleFunction domainRoleFunction = externalAccessRolesService.getRoleFunction(availableRoleFunction.getCode(),
+ requestedApp.getUebKey());
+ boolean saveOrUpdateResponse = false;
+ if (domainRoleFunction != null) {
+ domainRoleFunction.setName(availableRoleFunction.getName());
+ saveOrUpdateResponse = externalAccessRolesService.saveCentralRoleFunction(domainRoleFunction,
+ requestedApp);
+ } else {
+ availableRoleFunction.setAppId(requestedApp.getId());
+ saveOrUpdateResponse = externalAccessRolesService.saveCentralRoleFunction(availableRoleFunction,
+ requestedApp);
+ }
+ if (saveOrUpdateResponse) {
+ EPUser user = externalAccessRolesService.getUser(request.getHeader(LOGIN_ID)).get(0);
+ EPApp app = externalAccessRolesService.getApp(request.getHeader(UEBKEY)).get(0);
+ CentralV2RoleFunction function = externalAccessRolesService
+ .getRoleFunction(availableRoleFunction.getCode(), request.getHeader(UEBKEY));
+ String activityCode = (function.getCode() == null)
+ ? EcompAuditLog.CD_ACTIVITY_EXTERNAL_AUTH_ADD_FUNCTION
+ : EcompAuditLog.CD_ACTIVITY_EXTERNAL_AUTH_UPDATE_FUNCTION;
+ logger.info(EELFLoggerDelegate.applicationLogger, "saveRoleFunction: succeeded for app {}, function {}",
+ app.getId(), availableRoleFunction.getCode());
+ AuditLog auditLog = new AuditLog();
+ auditLog.setUserId(user.getId());
+ auditLog.setActivityCode(activityCode);
+ auditLog.setComments(
+ EcompPortalUtils.truncateString(
+ "saveRoleFunction role for app:" + app.getId() + " and function:'"
+ + availableRoleFunction.getCode() + "'",
+ PortalConstants.AUDIT_LOG_COMMENT_SIZE));
+ auditLog.setAffectedRecordId(user.getOrgUserId());
+ auditService.logActivity(auditLog, null);
+ MDC.put(EPCommonSystemProperties.AUDITLOG_BEGIN_TIMESTAMP, EPEELFLoggerAdvice.getCurrentDateTimeUTC());
+ MDC.put(EPCommonSystemProperties.AUDITLOG_END_TIMESTAMP, EPEELFLoggerAdvice.getCurrentDateTimeUTC());
+ EcompPortalUtils.calculateDateTimeDifferenceForLog(
+ MDC.get(EPCommonSystemProperties.AUDITLOG_BEGIN_TIMESTAMP),
+ MDC.get(EPCommonSystemProperties.AUDITLOG_END_TIMESTAMP));
+ logger.info(EELFLoggerDelegate.auditLogger,
+ EPLogUtil.formatAuditLogMessage("ExternalAccessRolesController.saveRoleFunction", activityCode,
+ String.valueOf(user.getId()), user.getOrgUserId(), availableRoleFunction.getCode()));
+ MDC.remove(EPCommonSystemProperties.AUDITLOG_BEGIN_TIMESTAMP);
+ MDC.remove(EPCommonSystemProperties.AUDITLOG_END_TIMESTAMP);
+ MDC.remove(SystemProperties.MDC_TIMER);
+ } else {
+ logger.error(EELFLoggerDelegate.errorLogger, "saveRoleFunction failed");
+ return new PortalRestResponse<String>(PortalRestStatusEnum.ERROR,
+ "Failed to saveRoleFunction for '" + availableRoleFunction.getCode() + "'", "Failed");
+ }
+ } catch (Exception e) {
+ if (e.getMessage().contains(INVALID_UEB_KEY)) {
+ response.setStatus(HttpServletResponse.SC_BAD_REQUEST);
+ }else {
+ response.setStatus(HttpServletResponse.SC_INTERNAL_SERVER_ERROR);
+ }
+ logger.error(EELFLoggerDelegate.errorLogger, "saveRoleFunction failed", e);
+ return new PortalRestResponse<String>(PortalRestStatusEnum.ERROR, e.getMessage(), "Failed");
+ }
+ return new PortalRestResponse<String>(PortalRestStatusEnum.OK, "Successfully Saved", "Success");
+ }
+
+ @ApiOperation(value = "Deletes role function for an application.", response = PortalRestResponse.class, responseContainer = "Json")
+ @RequestMapping(value = { "/roleFunction/{code}" }, method = RequestMethod.DELETE, produces = "application/json")
+ public PortalRestResponse<String> deleteRoleFunction(HttpServletRequest request, HttpServletResponse response,
+ @PathVariable("code") String code) throws Exception {
+ try {
+ fieldsValidation(request);
+ EPUser user = externalAccessRolesService.getUser(request.getHeader(LOGIN_ID)).get(0);
+ EPApp app = externalAccessRolesService.getApp(request.getHeader(UEBKEY)).get(0);
+ boolean getDelFuncResponse = externalAccessRolesService.deleteCentralRoleFunction(code, app);
+ if (getDelFuncResponse) {
+ logger.info(EELFLoggerDelegate.applicationLogger, "deleteRoleFunction: succeeded for app {}, role {}",
+ app.getId(), code);
+ AuditLog auditLog = new AuditLog();
+ auditLog.setUserId(user.getId());
+ auditLog.setActivityCode(EcompAuditLog.CD_ACTIVITY_EXTERNAL_AUTH_DELETE_FUNCTION);
+ auditLog.setComments(EcompPortalUtils.truncateString(
+ "Deleted function for app:" + app.getId() + " and function code:'" + code + "'",
+ PortalConstants.AUDIT_LOG_COMMENT_SIZE));
+ auditLog.setAffectedRecordId(user.getOrgUserId());
+ auditService.logActivity(auditLog, null);
+ MDC.put(EPCommonSystemProperties.AUDITLOG_BEGIN_TIMESTAMP, EPEELFLoggerAdvice.getCurrentDateTimeUTC());
+ MDC.put(EPCommonSystemProperties.AUDITLOG_END_TIMESTAMP, EPEELFLoggerAdvice.getCurrentDateTimeUTC());
+ EcompPortalUtils.calculateDateTimeDifferenceForLog(
+ MDC.get(EPCommonSystemProperties.AUDITLOG_BEGIN_TIMESTAMP),
+ MDC.get(EPCommonSystemProperties.AUDITLOG_END_TIMESTAMP));
+ logger.info(EELFLoggerDelegate.auditLogger,
+ EPLogUtil.formatAuditLogMessage("ExternalAccessRolesController.deleteRoleFunction",
+ EcompAuditLog.CD_ACTIVITY_EXTERNAL_AUTH_DELETE_FUNCTION, String.valueOf(user.getId()),
+ user.getOrgUserId(), code));
+ MDC.remove(EPCommonSystemProperties.AUDITLOG_BEGIN_TIMESTAMP);
+ MDC.remove(EPCommonSystemProperties.AUDITLOG_END_TIMESTAMP);
+ MDC.remove(SystemProperties.MDC_TIMER);
+ } else {
+ logger.error(EELFLoggerDelegate.errorLogger, "deleteRoleFunction failed");
+ return new PortalRestResponse<String>(PortalRestStatusEnum.ERROR,
+ "Failed to deleteRoleFunction for '" + code + "'", "Failed");
+ }
+ } catch (Exception e) {
+ if (e.getMessage().contains(INVALID_UEB_KEY)) {
+ response.setStatus(HttpServletResponse.SC_BAD_REQUEST);
+ } else {
+ response.setStatus(HttpServletResponse.SC_BAD_REQUEST);
+ }
+ logger.error(EELFLoggerDelegate.errorLogger, "deleteRoleFunction failed", e);
+ return new PortalRestResponse<>(PortalRestStatusEnum.ERROR, e.getMessage(), "Failed");
+ }
+ return new PortalRestResponse<>(PortalRestStatusEnum.OK, SUCCESSFULLY_DELETED, "Success");
+
+ }
+
+ @ApiOperation(value = "Saves role for an application.", response = PortalRestResponse.class, responseContainer = "Json")
+ @RequestMapping(value = { "/role" }, method = RequestMethod.POST, produces = "application/json")
+ public PortalRestResponse<String> saveRole(HttpServletRequest request, HttpServletResponse response,
+ @RequestBody Role role) throws Exception {
+ try {
+ fieldsValidation(request);
+ ExternalRequestFieldsValidator saveRoleResult = null;
+ EPUser user = externalAccessRolesService.getUser(request.getHeader(LOGIN_ID)).get(0);
+ EPApp app = externalAccessRolesService.getApp(request.getHeader(UEBKEY)).get(0);
+ if(role.getId()!=null && StringUtils.containsAny(role.getName(), ROLE_INVALID_CHARS)) {
+ throw new InvalidRoleException("Invalid role name found for '" + role.getName() + "'. Any one of the following characters '%,(),=,:,comma, and double quotes' are not allowed");
+ }
+ saveRoleResult = externalAccessRolesService.saveRoleForApplication(role, request.getHeader(UEBKEY));
+ if (saveRoleResult.isResult()) {
+ String activityCode = (role.getId() == null) ? EcompAuditLog.CD_ACTIVITY_EXTERNAL_AUTH_ADD_ROLE
+ : EcompAuditLog.CD_ACTIVITY_EXTERNAL_AUTH_UPDATE_ROLE_AND_FUNCTION;
+ logger.info(EELFLoggerDelegate.applicationLogger, "saveRole: succeeded for app {}, role {}",
+ app.getId(), role.getName());
+ AuditLog auditLog = new AuditLog();
+ auditLog.setUserId(user.getId());
+ auditLog.setActivityCode(activityCode);
+ auditLog.setComments(EcompPortalUtils.truncateString(
+ "saveRole role for app:" + app.getId() + " and role:'" + role.getName() + "'",
+ PortalConstants.AUDIT_LOG_COMMENT_SIZE));
+ auditLog.setAffectedRecordId(user.getOrgUserId());
+ auditService.logActivity(auditLog, null);
+ MDC.put(EPCommonSystemProperties.AUDITLOG_BEGIN_TIMESTAMP, EPEELFLoggerAdvice.getCurrentDateTimeUTC());
+ MDC.put(EPCommonSystemProperties.AUDITLOG_END_TIMESTAMP, EPEELFLoggerAdvice.getCurrentDateTimeUTC());
+ EcompPortalUtils.calculateDateTimeDifferenceForLog(
+ MDC.get(EPCommonSystemProperties.AUDITLOG_BEGIN_TIMESTAMP),
+ MDC.get(EPCommonSystemProperties.AUDITLOG_END_TIMESTAMP));
+ logger.info(EELFLoggerDelegate.auditLogger,
+ EPLogUtil.formatAuditLogMessage("ExternalAccessRolesController.saveRole", activityCode,
+ String.valueOf(user.getId()), user.getOrgUserId(), role.getName()));
+ MDC.remove(EPCommonSystemProperties.AUDITLOG_BEGIN_TIMESTAMP);
+ MDC.remove(EPCommonSystemProperties.AUDITLOG_END_TIMESTAMP);
+ MDC.remove(SystemProperties.MDC_TIMER);
+ } else {
+ if(saveRoleResult.getDetailMessage().contains("406")){
+ response.setStatus(HttpServletResponse.SC_NOT_ACCEPTABLE);
+ return new PortalRestResponse<>(PortalRestStatusEnum.ERROR,
+ "Failed to create a role for '" + role.getName() + "'. Any one of the following characters '%,(),=,:,comma, and double quotes' are not allowed"
+ , "Failed");
+ } else{
+ response.setStatus(HttpServletResponse.SC_INTERNAL_SERVER_ERROR);
+ return new PortalRestResponse<>(PortalRestStatusEnum.ERROR,
+ "Failed to saveRole for '" + role.getName() + "'", "Failed");
+ }
+ }
+ } catch (Exception e) {
+ if (e.getMessage().contains(INVALID_UEB_KEY)) {
+ response.setStatus(HttpServletResponse.SC_BAD_REQUEST);
+ }else {
+ response.setStatus(HttpServletResponse.SC_INTERNAL_SERVER_ERROR);
+ }
+ logger.error(EELFLoggerDelegate.errorLogger, "saveRole failed", e);
+ return new PortalRestResponse<String>(PortalRestStatusEnum.ERROR, e.getMessage(), "Failed");
+ }
+ return new PortalRestResponse<String>(PortalRestStatusEnum.OK, "Successfully Saved", "Success");
+ }
+
+ @ApiOperation(value = "Deletes role for an application.", response = PortalRestResponse.class, responseContainer = "Json")
+ @RequestMapping(value = { "/deleteRole/{code}" }, method = RequestMethod.DELETE, produces = "application/json")
+ public PortalRestResponse<String> deleteRole(HttpServletRequest request, HttpServletResponse response,
+ @PathVariable String code) throws Exception {
+ try {
+ fieldsValidation(request);
+ boolean deleteResponse = externalAccessRolesService.deleteRoleForApplication(code,
+ request.getHeader(UEBKEY));
+ if (deleteResponse) {
+ EPUser user = externalAccessRolesService.getUser(request.getHeader(LOGIN_ID)).get(0);
+ EPApp app = externalAccessRolesService.getApp(request.getHeader(UEBKEY)).get(0);
+ logger.info(EELFLoggerDelegate.applicationLogger, "deleteRole: succeeded for app {}, role {}",
+ app.getId(), code);
+ AuditLog auditLog = new AuditLog();
+ auditLog.setUserId(user.getId());
+ auditLog.setActivityCode(EcompAuditLog.CD_ACTIVITY_EXTERNAL_AUTH_DELETE_ROLE);
+ auditLog.setComments(EcompPortalUtils.truncateString(
+ "Deleted role for app:" + app.getId() + " and role:'" + code + "'",
+ PortalConstants.AUDIT_LOG_COMMENT_SIZE));
+ auditLog.setAffectedRecordId(user.getOrgUserId());
+ auditService.logActivity(auditLog, null);
+ MDC.put(EPCommonSystemProperties.AUDITLOG_BEGIN_TIMESTAMP, EPEELFLoggerAdvice.getCurrentDateTimeUTC());
+ MDC.put(EPCommonSystemProperties.AUDITLOG_END_TIMESTAMP, EPEELFLoggerAdvice.getCurrentDateTimeUTC());
+ EcompPortalUtils.calculateDateTimeDifferenceForLog(
+ MDC.get(EPCommonSystemProperties.AUDITLOG_BEGIN_TIMESTAMP),
+ MDC.get(EPCommonSystemProperties.AUDITLOG_END_TIMESTAMP));
+ logger.info(EELFLoggerDelegate.auditLogger,
+ EPLogUtil.formatAuditLogMessage("ExternalAccessRolesController.deleteRole",
+ EcompAuditLog.CD_ACTIVITY_EXTERNAL_AUTH_DELETE_ROLE, String.valueOf(user.getId()),
+ user.getOrgUserId(), code));
+ MDC.remove(EPCommonSystemProperties.AUDITLOG_BEGIN_TIMESTAMP);
+ MDC.remove(EPCommonSystemProperties.AUDITLOG_END_TIMESTAMP);
+ MDC.remove(SystemProperties.MDC_TIMER);
+ } else {
+ logger.error(EELFLoggerDelegate.errorLogger, "deleteRole failed");
+ return new PortalRestResponse<String>(PortalRestStatusEnum.ERROR,
+ "Failed to deleteRole for '" + code + "'", "Failed");
+ }
+ } catch (Exception e) {
+ if (e.getMessage().contains(INVALID_UEB_KEY)) {
+ response.setStatus(HttpServletResponse.SC_BAD_REQUEST);
+ } else {
+ response.setStatus(HttpServletResponse.SC_BAD_REQUEST);
+ }
+ logger.error(EELFLoggerDelegate.errorLogger, "deleteRole failed", e);
+ return new PortalRestResponse<String>(PortalRestStatusEnum.ERROR, e.getMessage(), "Failed");
+ }
+ return new PortalRestResponse<String>(PortalRestStatusEnum.OK, SUCCESSFULLY_DELETED, "Success");
+ }
+
+ @ApiOperation(value = "Gets active roles for an application.", response = CentralV2Role.class, responseContainer = "Json")
+ @RequestMapping(value = { "/activeRoles" }, method = RequestMethod.GET, produces = "application/json")
+ public List<CentralV2Role> getActiveRoles(HttpServletRequest request, HttpServletResponse response) throws Exception {
+ List<CentralV2Role> cenRole = null;
+ try {
+ fieldsValidation(request);
+ cenRole = externalAccessRolesService.getActiveRoles(request.getHeader(UEBKEY));
+ } catch (Exception e) {
+ sendErrorResponse(response, e);
+ logger.error(EELFLoggerDelegate.errorLogger, "getActiveRoles failed", e);
+ }
+ return cenRole;
+
+ }
+
+ @ApiOperation(value = "deletes user roles for an application.", response = PortalRestResponse.class, responseContainer = "Json")
+ @RequestMapping(value = { "/deleteDependcyRoleRecord/{roleId}" }, method = RequestMethod.DELETE, produces = "application/json")
+ public PortalRestResponse<String> deleteDependencyRoleRecord(HttpServletRequest request, HttpServletResponse response,
+ @PathVariable("roleId") Long roleId) throws Exception {
+ ExternalRequestFieldsValidator removeResult = null;
+ try {
+ fieldsValidation(request);
+ removeResult = externalAccessRolesService.deleteDependencyRoleRecord(roleId,
+ request.getHeader(UEBKEY), request.getHeader(LOGIN_ID));
+ if (!removeResult.isResult()) {
+ response.setStatus(HttpServletResponse.SC_BAD_REQUEST);
+ return new PortalRestResponse<>(PortalRestStatusEnum.ERROR, "Failed to deleteDependencyRoleRecord",
+ "Failed");
+ }
+ } catch (Exception e) {
+ if (e.getMessage().contains(INVALID_UEB_KEY)) {
+ response.setStatus(HttpServletResponse.SC_BAD_REQUEST);
+ } else {
+ response.setStatus(HttpServletResponse.SC_INTERNAL_SERVER_ERROR);
+ }
+ logger.error(EELFLoggerDelegate.errorLogger, "deleteDependencyRoleRecord failed", e);
+ return new PortalRestResponse<>(PortalRestStatusEnum.ERROR, e.getMessage(), "Failed");
+ }
+ return new PortalRestResponse<>(PortalRestStatusEnum.OK, SUCCESSFULLY_DELETED, "Success");
+ }
+
+
+ @ApiOperation(value = "deletes roles for an application.", response = PortalRestResponse.class, responseContainer = "Json")
+ @RequestMapping(value = { "/v2/deleteRole/{roleId}" }, method = RequestMethod.DELETE, produces = "application/json")
+ public PortalRestResponse<String> deleteRole(HttpServletRequest request, HttpServletResponse response,
+ @PathVariable("roleId") Long roleId) throws Exception {
+ ExternalRequestFieldsValidator removeResult = null;
+ try {
+ fieldsValidation(request);
+ removeResult = externalAccessRolesService.deleteDependencyRoleRecord(roleId,
+ request.getHeader(UEBKEY), request.getHeader(LOGIN_ID));
+ if (!removeResult.isResult()) {
+ response.setStatus(HttpServletResponse.SC_BAD_REQUEST);
+ return new PortalRestResponse<>(PortalRestStatusEnum.ERROR, "Failed to deleteRole",
+ "Failed");
+ }
+ } catch (Exception e) {
+ if (e.getMessage().contains(INVALID_UEB_KEY)) {
+ response.setStatus(HttpServletResponse.SC_BAD_REQUEST);
+ } else {
+ response.setStatus(HttpServletResponse.SC_INTERNAL_SERVER_ERROR);
+ }
+ logger.error(EELFLoggerDelegate.errorLogger, "deleteRole failed", e);
+ return new PortalRestResponse<>(PortalRestStatusEnum.ERROR, e.getMessage(), "Failed");
+ }
+ return new PortalRestResponse<>(PortalRestStatusEnum.OK, SUCCESSFULLY_DELETED, "Success");
+ }
+
+
+ @ApiOperation(value = "Bulk upload functions for an application.", response = PortalRestResponse.class, responseContainer = "Json")
+ @RequestMapping(value = { "/upload/portal/functions" }, method = RequestMethod.POST, produces = "application/json")
+ public PortalRestResponse<String> bulkUploadFunctions(HttpServletRequest request, HttpServletResponse response) throws Exception {
+ Integer result = 0;
+ try {
+ result = externalAccessRolesService.bulkUploadFunctions(request.getHeader(UEBKEY));
+ } catch (Exception e) {
+ response.setStatus(HttpServletResponse.SC_INTERNAL_SERVER_ERROR);
+ logger.error(EELFLoggerDelegate.errorLogger, "bulkUploadFunctions failed", e);
+ return new PortalRestResponse<String>(PortalRestStatusEnum.ERROR, "Failed to bulkUploadFunctions", "Failed");
+ }
+ return new PortalRestResponse<String>(PortalRestStatusEnum.OK, "Successfully added: "+result, "Success");
+ }
+
+ @ApiOperation(value = "Bulk upload roles for an application.", response = PortalRestResponse.class, responseContainer = "Json")
+ @RequestMapping(value = { "/upload/portal/roles" }, method = RequestMethod.POST, produces = "application/json")
+ public PortalRestResponse<String> bulkUploadRoles(HttpServletRequest request, HttpServletResponse response) throws Exception {
+ Integer result = 0;
+ try {
+ result = externalAccessRolesService.bulkUploadRoles(request.getHeader(UEBKEY));
+ } catch (Exception e) {
+ response.setStatus(HttpServletResponse.SC_INTERNAL_SERVER_ERROR);
+ logger.error(EELFLoggerDelegate.errorLogger, "bulkUploadRoles failed", e);
+ return new PortalRestResponse<String>(PortalRestStatusEnum.ERROR, "Failed to bulkUploadRoles", "Failed");
+ }
+ return new PortalRestResponse<String>(PortalRestStatusEnum.OK, "Successfully added: "+result, "Success");
+ }
+
+ @ApiOperation(value = "Bulk upload role functions for an application.", response = PortalRestResponse.class, responseContainer = "Json")
+ @RequestMapping(value = { "/upload/portal/roleFunctions" }, method = RequestMethod.POST, produces = "application/json")
+ public PortalRestResponse<String> bulkUploadRoleFunctions(HttpServletRequest request, HttpServletResponse response) throws Exception {
+ Integer result = 0;
+ try {
+ result = externalAccessRolesService.bulkUploadRolesFunctions(request.getHeader(UEBKEY));
+ } catch (Exception e) {
+ response.setStatus(HttpServletResponse.SC_INTERNAL_SERVER_ERROR);
+ logger.error(EELFLoggerDelegate.errorLogger, "bulkUploadRoleFunctions failed", e);
+ return new PortalRestResponse<String>(PortalRestStatusEnum.ERROR, "Failed to bulkUploadRoleFunctions", "Failed");
+ }
+ return new PortalRestResponse<String>(PortalRestStatusEnum.OK, "Successfully added: "+result, "Success");
+ }
+
+ @ApiOperation(value = "Bulk upload user roles for an application.", response = PortalRestResponse.class, responseContainer = "Json")
+ @RequestMapping(value = { "/upload/portal/userRoles" }, method = RequestMethod.POST, produces = "application/json")
+ public PortalRestResponse<String> bulkUploadUserRoles(HttpServletRequest request, HttpServletResponse response) throws Exception {
+ Integer result = 0;
+ try {
+ result = externalAccessRolesService.bulkUploadUserRoles(request.getHeader(UEBKEY));
+ } catch (Exception e) {
+ response.setStatus(HttpServletResponse.SC_INTERNAL_SERVER_ERROR);
+ logger.error(EELFLoggerDelegate.errorLogger, "bulkUploadUserRoles failed", e);
+ return new PortalRestResponse<String>(PortalRestStatusEnum.ERROR, "Failed to bulkUploadUserRoles", "Failed");
+ }
+ return new PortalRestResponse<String>(PortalRestStatusEnum.OK, "Successfully added: "+result, "Success");
+ }
+
+ @ApiOperation(value = "Bulk upload users for renamed role of an application.", response = PortalRestResponse.class, responseContainer = "Json")
+ @RequestMapping(value = { "/upload/portal/userRole/{roleId}" }, method = RequestMethod.POST, produces = "application/json")
+ public PortalRestResponse<String> bulkUploadUsersSingleRole(HttpServletRequest request, HttpServletResponse response, @PathVariable Long roleId) throws Exception {
+ Integer result = 0;
+ try {
+ String roleName = request.getHeader("RoleName");
+ result = externalAccessRolesService.bulkUploadUsersSingleRole(request.getHeader(UEBKEY), roleId, roleName);
+ } catch (Exception e) {
+ response.setStatus(HttpServletResponse.SC_INTERNAL_SERVER_ERROR);
+ logger.error(EELFLoggerDelegate.errorLogger, "bulkUploadUsersSingleRole failed", e);
+ return new PortalRestResponse<String>(PortalRestStatusEnum.ERROR, "Failed to bulkUploadUsersSingleRole", "Failed");
+ }
+ return new PortalRestResponse<String>(PortalRestStatusEnum.OK, "Successfully added: "+result, "Success");
+ }
+
+ @ApiOperation(value = "Bulk upload functions for an partner application.", response = PortalRestResponse.class, responseContainer = "Json")
+ @RequestMapping(value = { "/upload/partner/functions" }, method = RequestMethod.POST, produces = "application/json")
+ public PortalRestResponse<String> bulkUploadPartnerFunctions(HttpServletRequest request, HttpServletResponse response, @RequestBody List<RoleFunction> upload) throws Exception {
+ try {
+ externalAccessRolesService.bulkUploadPartnerFunctions(request.getHeader(UEBKEY), upload);
+ } catch (Exception e) {
+ response.setStatus(HttpServletResponse.SC_INTERNAL_SERVER_ERROR);
+ logger.error(EELFLoggerDelegate.errorLogger, "bulkUploadFunctions failed", e);
+ return new PortalRestResponse<String>(PortalRestStatusEnum.ERROR, "Failed to bulkUploadFunctions", "Failed");
+ }
+ return new PortalRestResponse<String>(PortalRestStatusEnum.OK, "Successfully added", "Success");
+ }
+
+ @ApiOperation(value = "Bulk upload roles for an partner application.", response = PortalRestResponse.class, responseContainer = "Json")
+ @RequestMapping(value = { "/upload/partner/roles" }, method = RequestMethod.POST, produces = "application/json")
+ public PortalRestResponse<String> bulkUploadPartnerRoles(HttpServletRequest request, HttpServletResponse response, @RequestBody List<Role> upload) throws Exception {
+ try {
+ externalAccessRolesService.bulkUploadPartnerRoles(request.getHeader(UEBKEY), upload);
+ } catch (Exception e) {
+ response.setStatus(HttpServletResponse.SC_INTERNAL_SERVER_ERROR);
+ logger.error(EELFLoggerDelegate.errorLogger, "bulkUploadRoles failed", e);
+ return new PortalRestResponse<String>(PortalRestStatusEnum.ERROR, "Failed to bulkUploadRoles", "Failed");
+ }
+ return new PortalRestResponse<String>(PortalRestStatusEnum.OK, "Successfully added", "Success");
+ }
+
+ @ApiOperation(value = "Bulk upload role functions for an partner application.", response = PortalRestResponse.class, responseContainer = "Json")
+ @RequestMapping(value = { "/upload/partner/roleFunctions" }, method = RequestMethod.POST, produces = "application/json")
+ public PortalRestResponse<String> bulkUploadPartnerRoleFunctions(HttpServletRequest request, HttpServletResponse response, @RequestBody List<Role> upload) throws Exception {
+ try {
+ externalAccessRolesService.bulkUploadPartnerRoleFunctions(request.getHeader(UEBKEY), upload);
+ } catch (Exception e) {
+ response.setStatus(HttpServletResponse.SC_INTERNAL_SERVER_ERROR);
+ logger.error(EELFLoggerDelegate.errorLogger, "bulkUploadRoles failed", e);
+ return new PortalRestResponse<String>(PortalRestStatusEnum.ERROR, "Failed to bulkUploadPartnerRoleFunctions", "Failed");
+ }
+ return new PortalRestResponse<String>(PortalRestStatusEnum.OK, "Successfully added", "Success");
+ }
+
+ @ApiOperation(value = "Gets all functions along with global functions", response = List.class, responseContainer = "Json")
+ @RequestMapping(value = { "/menuFunctions" }, method = RequestMethod.GET, produces = "application/json")
+ public List<String> getMenuFunctions(HttpServletRequest request, HttpServletResponse response) throws Exception {
+ List<String> functionsList = null;
+ try {
+ fieldsValidation(request);
+ functionsList = externalAccessRolesService.getMenuFunctionsList(request.getHeader(UEBKEY));
+ } catch (Exception e) {
+ sendErrorResponse(response, e);
+ logger.error(EELFLoggerDelegate.errorLogger, "getMenuFunctions failed", e);
+ }
+ return functionsList;
+ }
+
+ @ApiOperation(value = "Gets all active Users of application", response = String.class, responseContainer = "Json")
+ @RequestMapping(value = { "/users" }, method = RequestMethod.GET, produces = "application/json")
+ public List<EcompUser> getUsersOfApplication(HttpServletRequest request, HttpServletResponse response) throws Exception {
+ List<EcompUser> users = null;
+ try {
+ users = externalAccessRolesService.getAllAppUsers(request.getHeader(UEBKEY));
+ } catch (Exception e) {
+ response.setStatus(HttpServletResponse.SC_BAD_REQUEST);
+ logger.error(EELFLoggerDelegate.errorLogger, "getUsersOfApplication failed", e);
+ throw new Exception(e.getMessage());
+ }
+ return users;
+ }
+
+ /**
+ *
+ * It checks the input uebkey of the application and throws exception if it is invalid key
+ *
+ * @param request
+ * @throws Exception
+ */
+ private void fieldsValidation(HttpServletRequest request) throws Exception{
+ List<EPApp> app = externalAccessRolesService.getApp(request.getHeader(UEBKEY));
+ if(app.isEmpty()){
+ throw new Exception(INVALID_UEB_KEY);
+ }
+ if(!app.isEmpty() && app.get(0).getCentralAuth()){
+ ResponseEntity<String> response = externalAccessRolesService.getNameSpaceIfExists(app.get(0));
+ if (response.getStatusCode().value() == HttpServletResponse.SC_NOT_FOUND)
+ throw new Exception("Invalid NameSpace");
+ }
+ }
+
+ /**
+ *
+ * It returns http response with appropriate message
+ *
+ * @param response
+ * @param e
+ * @throws IOException
+ */
+ private void sendErrorResponse(HttpServletResponse response, Exception e) throws IOException {
+ response.setContentType("application/json");
+ response.setCharacterEncoding("UTF-8");
+ final Map<String,String> uebkeyResponse = new HashMap<>();
+ ObjectMapper mapper = new ObjectMapper();
+ String reason = "";
+ if (e.getMessage().contains(INVALID_UEB_KEY)) {
+ uebkeyResponse.put("error",INVALID_UEB_KEY);
+ reason = mapper.writeValueAsString(uebkeyResponse);
+ response.getWriter().write(reason);
+ response.setStatus(HttpServletResponse.SC_NOT_FOUND);
+ } else {
+ uebkeyResponse.put("error",e.getMessage());
+ reason = mapper.writeValueAsString(uebkeyResponse);
+ response.getWriter().write(reason);
+ response.setStatus(HttpServletResponse.SC_BAD_REQUEST);
+ }
+ }
+}
diff --git a/ecomp-portal-BE-common/src/main/java/org/onap/portalapp/portal/controller/ExternalAppsRestfulController.java b/ecomp-portal-BE-common/src/main/java/org/onap/portalapp/portal/controller/ExternalAppsRestfulController.java
new file mode 100644
index 00000000..bd2b0a1a
--- /dev/null
+++ b/ecomp-portal-BE-common/src/main/java/org/onap/portalapp/portal/controller/ExternalAppsRestfulController.java
@@ -0,0 +1,231 @@
+/*-
+ * ============LICENSE_START==========================================
+ * ONAP Portal
+ * ===================================================================
+ * Copyright (C) 2017 AT&T Intellectual Property. All rights reserved.
+ * ===================================================================
+ *
+ * Unless otherwise specified, all software contained herein is licensed
+ * under the Apache License, Version 2.0 (the "License");
+ * you may not use this software 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.
+ *
+ * Unless otherwise specified, all documentation contained herein is licensed
+ * under the Creative Commons License, Attribution 4.0 Intl. (the "License");
+ * you may not use this documentation except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * https://creativecommons.org/licenses/by/4.0/
+ *
+ * Unless required by applicable law or agreed to in writing, documentation
+ * 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.
+ *
+ * ============LICENSE_END============================================
+ *
+ * ECOMP is a trademark and service mark of AT&T Intellectual Property.
+ */
+package org.onap.portalapp.portal.controller;
+
+import java.io.IOException;
+import java.util.ArrayList;
+import java.util.Calendar;
+import java.util.HashMap;
+import java.util.List;
+import java.util.Map;
+
+import javax.servlet.http.HttpServletRequest;
+import javax.servlet.http.HttpServletResponse;
+
+import org.onap.portalapp.controller.EPRestrictedRESTfulBaseController;
+import org.onap.portalapp.portal.domain.EPApp;
+import org.onap.portalapp.portal.domain.EPRole;
+import org.onap.portalapp.portal.domain.EPUser;
+import org.onap.portalapp.portal.logging.aop.EPAuditLog;
+import org.onap.portalapp.portal.service.AdminRolesService;
+import org.onap.portalapp.portal.service.EPLoginService;
+import org.onap.portalapp.portal.service.EPRoleService;
+import org.onap.portalapp.portal.service.FunctionalMenuService;
+import org.onap.portalapp.portal.service.UserNotificationService;
+import org.onap.portalapp.portal.transport.EpNotificationItem;
+import org.onap.portalapp.portal.transport.FavoritesFunctionalMenuItemJson;
+import org.onap.portalapp.portal.transport.FieldsValidator;
+import org.onap.portalapp.portal.transport.FunctionalMenuItem;
+import org.onap.portalapp.portal.utils.EPCommonSystemProperties;
+import org.onap.portalapp.portal.utils.EcompPortalUtils;
+import org.onap.portalapp.portal.utils.PortalConstants;
+import org.onap.portalsdk.core.logging.logic.EELFLoggerDelegate;
+import org.onap.portalsdk.core.onboarding.crossapi.PortalAPIResponse;
+import org.slf4j.MDC;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.context.annotation.Configuration;
+import org.springframework.context.annotation.EnableAspectJAutoProxy;
+import org.springframework.http.HttpStatus;
+import org.springframework.web.bind.annotation.ExceptionHandler;
+import org.springframework.web.bind.annotation.RequestBody;
+import org.springframework.web.bind.annotation.RequestMapping;
+import org.springframework.web.bind.annotation.RequestMethod;
+import org.springframework.web.bind.annotation.ResponseBody;
+import org.springframework.web.bind.annotation.RestController;
+
+import io.swagger.annotations.ApiOperation;
+
+@RestController
+@RequestMapping(PortalConstants.REST_AUX_API)
+@Configuration
+@EnableAspectJAutoProxy
+@EPAuditLog
+public class ExternalAppsRestfulController extends EPRestrictedRESTfulBaseController {
+
+ private EELFLoggerDelegate logger = EELFLoggerDelegate.getLogger(ExternalAppsRestfulController.class);
+
+ @Autowired
+ private FunctionalMenuService functionalMenuService;
+
+ @Autowired
+ private EPLoginService epLoginService;
+
+ @Autowired
+ private AdminRolesService adminRolesService;
+
+ @Autowired
+ private UserNotificationService userNotificationService;
+
+ @Autowired
+ private EPRoleService epRoleService;
+
+ @ApiOperation(value = "Creates a Portal user notification for roles identified in the content from an external application.", response = PortalAPIResponse.class)
+ @RequestMapping(value = { "/publishNotification" }, method = RequestMethod.POST, produces = "application/json")
+ @ResponseBody
+ public PortalAPIResponse publishNotification(HttpServletRequest request,
+ @RequestBody EpNotificationItem notificationItem) throws Exception {
+ String appKey = request.getHeader("uebkey");
+ EPApp app = findEpApp(appKey);
+ List<Long> postRoleIds = new ArrayList<Long>();
+ for (Long roleId : notificationItem.getRoleIds()) {
+ EPRole role = epRoleService.getRole(app.getId(), roleId);
+ if (role != null)
+ postRoleIds.add(role.getId());
+ }
+
+ // --- recreate the user notification object with the POrtal Role Ids
+ EpNotificationItem postItem = new EpNotificationItem();
+ postItem.setRoleIds(postRoleIds);
+ postItem.setIsForAllRoles("N");
+ postItem.setIsForOnlineUsers("N");
+ postItem.setActiveYn("Y");
+ postItem.setPriority(notificationItem.getPriority());
+ postItem.setMsgHeader(notificationItem.getMsgHeader());
+ postItem.setMsgDescription(notificationItem.getMsgDescription());
+ postItem.setStartTime(notificationItem.getStartTime());
+ postItem.setEndTime(notificationItem.getEndTime());
+ postItem.setCreatedDate(Calendar.getInstance().getTime());
+ // default creator to 1 for now
+ postItem.setCreatorId(PortalConstants.DEFAULT_NOTIFICATION_CREATOR);
+ // ----
+
+ try {
+ userNotificationService.saveNotification(postItem);
+ } catch (Exception e) {
+ return new PortalAPIResponse(false, e.getMessage());
+ }
+
+ PortalAPIResponse response = new PortalAPIResponse(true, "success");
+ return response;
+ }
+
+ private EPApp findEpApp(String uebKey) {
+ List<?> list = null;
+ Map<String, String> params = new HashMap<>();
+ params.put("appKey", uebKey);
+ try {
+ list = this.getDataAccessService().executeNamedQuery("getMyAppDetailsByUebKey", params, null);
+ } catch (Exception e) {
+ logger.error(EELFLoggerDelegate.errorLogger, "getMyAppDetailsByUebKey failed", e);
+ }
+
+ return (list == null || list.size() == 0) ? null : (EPApp) list.get(0);
+ }
+
+ @ApiOperation(value = "Gets favorite items within the functional menu for the current user.", response = FavoritesFunctionalMenuItemJson.class, responseContainer="List")
+ @RequestMapping(value = { "/getFavorites" }, method = RequestMethod.GET, produces = "application/json")
+ public List<FavoritesFunctionalMenuItemJson> getFavoritesForUser(HttpServletRequest request,
+ HttpServletResponse response) throws Exception {
+ String loginId = "";
+ String userAgent = "";
+ List<FavoritesFunctionalMenuItemJson> favorites = null;
+
+ loginId = request.getHeader(EPCommonSystemProperties.MDC_LOGIN_ID);
+ userAgent = MDC.get(EPCommonSystemProperties.PARTNER_NAME);
+
+ EPUser epUser = epLoginService.findUserWithoutPwd(loginId);
+ logger.info(EELFLoggerDelegate.errorLogger,
+ "getFavorites request was received from " + userAgent + " for the user " + loginId + ".");
+ if (epUser == null || epUser.getId() == null) {
+ logger.error(EELFLoggerDelegate.errorLogger,
+ "No User record found for the LoginId '" + loginId + "' in the database.");
+ throw new Exception("Received null for Login-Id.");
+ } else {
+ favorites = functionalMenuService.getFavoriteItems(epUser.getId());
+ FieldsValidator fieldsValidator = new FieldsValidator();
+ response.setStatus(fieldsValidator.httpStatusCode.intValue());
+
+ EcompPortalUtils.logAndSerializeObject(logger, "/getFavorites", "result = ", favorites);
+ }
+
+ return favorites;
+ }
+
+ @ApiOperation(value = "Gets functional menu items appropriate for the current user.", response = FunctionalMenuItem.class, responseContainer="List")
+ @RequestMapping(value = {
+ "/functionalMenuItemsForUser" }, method = RequestMethod.GET, produces = "application/json")
+ public List<FunctionalMenuItem> getFunctionalMenuItemsForUser(HttpServletRequest request,
+ HttpServletResponse response) throws Exception {
+ String loginId = "";
+ String userAgent = "";
+ List<FunctionalMenuItem> fnMenuItems = null;
+
+ loginId = request.getHeader("LoginId");
+ userAgent = MDC.get(EPCommonSystemProperties.PARTNER_NAME);
+
+ EPUser epUser = epLoginService.findUserWithoutPwd(loginId);
+ logger.info(EELFLoggerDelegate.errorLogger, "getFunctionalMenuItemsForUser request was received from "
+ + userAgent + " for the user " + loginId + ".");
+ if (epUser == null || epUser.getId() == null) {
+ logger.error(EELFLoggerDelegate.errorLogger,
+ "No User record found for the LoginId '" + loginId + "' in the database.");
+ throw new Exception("Received null for Login-Id.");
+ } else if (adminRolesService.isSuperAdmin(epUser)) {
+ logger.debug(EELFLoggerDelegate.debugLogger,
+ "FunctionalMenuHandler: SuperUser, about to call getFunctionalMenuItems()");
+ fnMenuItems = functionalMenuService.getFunctionalMenuItems();
+ } else {
+ logger.debug(EELFLoggerDelegate.debugLogger,
+ "getMenuItemsForAuthUser: about to call getFunctionalMenuItemsForUser()");
+ fnMenuItems = functionalMenuService.getFunctionalMenuItemsForUser(epUser.getOrgUserId());
+ }
+
+ FieldsValidator fieldsValidator = new FieldsValidator();
+ response.setStatus(fieldsValidator.httpStatusCode.intValue());
+
+ EcompPortalUtils.logAndSerializeObject(logger, "/functionalMenuItemsForUser", "result = ", fnMenuItems);
+
+ return fnMenuItems;
+ }
+
+ @ExceptionHandler(Exception.class)
+ protected void handleBadRequests(Exception e, HttpServletResponse response) throws IOException {
+ logger.warn(EELFLoggerDelegate.errorLogger, "Handling bad request", e);
+ response.sendError(HttpStatus.BAD_REQUEST.value(), e.getMessage());
+ }
+}
diff --git a/ecomp-portal-BE-common/src/main/java/org/onap/portalapp/portal/controller/FunctionalMenuController.java b/ecomp-portal-BE-common/src/main/java/org/onap/portalapp/portal/controller/FunctionalMenuController.java
new file mode 100644
index 00000000..1b54ebb4
--- /dev/null
+++ b/ecomp-portal-BE-common/src/main/java/org/onap/portalapp/portal/controller/FunctionalMenuController.java
@@ -0,0 +1,666 @@
+/*-
+ * ============LICENSE_START==========================================
+ * ONAP Portal
+ * ===================================================================
+ * Copyright (C) 2017 AT&T Intellectual Property. All rights reserved.
+ * ===================================================================
+ *
+ * Unless otherwise specified, all software contained herein is licensed
+ * under the Apache License, Version 2.0 (the "License");
+ * you may not use this software 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.
+ *
+ * Unless otherwise specified, all documentation contained herein is licensed
+ * under the Creative Commons License, Attribution 4.0 Intl. (the "License");
+ * you may not use this documentation except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * https://creativecommons.org/licenses/by/4.0/
+ *
+ * Unless required by applicable law or agreed to in writing, documentation
+ * 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.
+ *
+ * ============LICENSE_END============================================
+ *
+ * ECOMP is a trademark and service mark of AT&T Intellectual Property.
+ */
+package org.onap.portalapp.portal.controller;
+
+import java.io.IOException;
+import java.text.SimpleDateFormat;
+import java.util.ArrayList;
+import java.util.Collections;
+import java.util.Comparator;
+import java.util.Date;
+import java.util.HashMap;
+import java.util.List;
+import java.util.Map;
+
+import javax.servlet.http.HttpServletRequest;
+import javax.servlet.http.HttpServletResponse;
+
+import org.json.JSONObject;
+import org.onap.portalapp.controller.EPRestrictedBaseController;
+import org.onap.portalapp.portal.domain.EPUser;
+import org.onap.portalapp.portal.domain.SharedContext;
+import org.onap.portalapp.portal.ecomp.model.PortalRestResponse;
+import org.onap.portalapp.portal.ecomp.model.PortalRestStatusEnum;
+import org.onap.portalapp.portal.logging.aop.EPAuditLog;
+import org.onap.portalapp.portal.service.AdminRolesService;
+import org.onap.portalapp.portal.service.FunctionalMenuService;
+import org.onap.portalapp.portal.service.SearchService;
+import org.onap.portalapp.portal.service.SharedContextService;
+import org.onap.portalapp.portal.transport.BusinessCardApplicationRole;
+import org.onap.portalapp.portal.transport.BusinessCardApplicationRolesList;
+import org.onap.portalapp.portal.transport.FavoritesFunctionalMenuItem;
+import org.onap.portalapp.portal.transport.FavoritesFunctionalMenuItemJson;
+import org.onap.portalapp.portal.transport.FieldsValidator;
+import org.onap.portalapp.portal.transport.FunctionalMenuItem;
+import org.onap.portalapp.portal.transport.FunctionalMenuItemWithRoles;
+import org.onap.portalapp.portal.utils.EPCommonSystemProperties;
+import org.onap.portalapp.portal.utils.EcompPortalUtils;
+import org.onap.portalapp.util.EPUserUtils;
+import org.onap.portalsdk.core.logging.logic.EELFLoggerDelegate;
+import org.onap.portalsdk.core.util.SystemProperties;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.context.annotation.EnableAspectJAutoProxy;
+import org.springframework.web.bind.annotation.PathVariable;
+import org.springframework.web.bind.annotation.RequestBody;
+import org.springframework.web.bind.annotation.RequestMapping;
+import org.springframework.web.bind.annotation.RequestMethod;
+import org.springframework.web.bind.annotation.RequestParam;
+import org.springframework.web.bind.annotation.RestController;
+
+/**
+ * Supports menus at the top of the Portal app landing page.
+ */
+@RestController
+@org.springframework.context.annotation.Configuration
+@EnableAspectJAutoProxy
+@EPAuditLog
+public class FunctionalMenuController extends EPRestrictedBaseController {
+
+ private EELFLoggerDelegate logger = EELFLoggerDelegate.getLogger(FunctionalMenuController.class);
+
+ @Autowired
+ private AdminRolesService adminRolesService;
+ @Autowired
+ private FunctionalMenuService functionalMenuService;
+ @Autowired
+ private SharedContextService sharedContextService;
+ @Autowired
+ private SearchService searchService;
+
+ /**
+ * RESTful service method to fetch all the FunctionalMenuItems.
+ *
+ * @param request
+ * HttpServletRequest
+ * @param response
+ * HttpServletResponse
+ * @return List of FunctionalMenuItem objects
+ */
+ @RequestMapping(value = { "/portalApi/functionalMenu" }, method = RequestMethod.GET, produces = "application/json")
+ public List<FunctionalMenuItem> getMenuItems(HttpServletRequest request, HttpServletResponse response) {
+ // TODO: should only the superuser be allowed to use this API?
+ List<FunctionalMenuItem> menuItems = null;
+ try {
+ menuItems = functionalMenuService.getFunctionalMenuItems();
+ functionalMenuService.assignHelpURLs(menuItems);
+ EcompPortalUtils.logAndSerializeObject(logger, "/portalApi/functionalMenu", "result =", menuItems);
+ } catch (Exception e) {
+ logger.error(EELFLoggerDelegate.errorLogger, "getMenuItems failed", e);
+ }
+ return menuItems;
+ }
+
+ /**
+ * RESTful service method to get ECOMP Portal Title.
+ *
+ * @param request
+ * HttpServletRequest
+ * @param response
+ * HttpServletResponse
+ * @return PortalRestResponse of ECOMP portal title
+ */
+ @RequestMapping(value = { "/portalApi/ecompTitle" }, method = RequestMethod.GET, produces = "application/json")
+ public PortalRestResponse<String> getECOMPTitle(HttpServletRequest request, HttpServletResponse response) {
+ PortalRestResponse<String> portalRestResponse = null;
+ try {
+ String ecompTitle = SystemProperties.getProperty(SystemProperties.APP_DISPLAY_NAME);
+ portalRestResponse = new PortalRestResponse<String>(PortalRestStatusEnum.OK, "success", ecompTitle);
+ EcompPortalUtils.logAndSerializeObject(logger, "/portalApi/ecompTitle", "result =", ecompTitle);
+ } catch (Exception e) {
+ portalRestResponse = new PortalRestResponse<String>(PortalRestStatusEnum.ERROR, e.getMessage(), null);
+ logger.error(EELFLoggerDelegate.errorLogger, "getEcompTitle failed", e);
+ }
+ return portalRestResponse;
+ }
+
+ /**
+ * RESTful service method to fetch all the FunctionalMenuItems, both active and
+ * inactive, for the EditFunctionalMenu feature. Can only be accessed by the
+ * portal admin.
+ *
+ * @param request
+ * HttpServletRequest
+ * @param response
+ * HttpServletResponse
+ * @return List of FunctionalMenuItem objects
+ */
+ @RequestMapping(value = {
+ "/portalApi/functionalMenuForEditing" }, method = RequestMethod.GET, produces = "application/json")
+ public List<FunctionalMenuItem> getMenuItemsForEditing(HttpServletRequest request, HttpServletResponse response) {
+ // TODO: should only the superuser be allowed to use this API?
+ EPUser user = EPUserUtils.getUserSession(request);
+ List<FunctionalMenuItem> menuItems = null;
+ try {
+ if (!adminRolesService.isSuperAdmin(user)) {
+ EcompPortalUtils.setBadPermissions(user, response, "getFunctionalMenuItemDetails");
+ } else {
+ menuItems = functionalMenuService.getFunctionalMenuItems(true);
+ }
+ EcompPortalUtils.logAndSerializeObject(logger, "/portalApi/functionalMenuForEditing", "result =",
+ menuItems);
+ } catch (Exception e) {
+ logger.error(EELFLoggerDelegate.errorLogger, "getMenuItemsForEditing failed", e);
+ }
+ return menuItems;
+ }
+
+ /**
+ * RESTful service method to fetch all the FunctionalMenuItems, active , for the
+ * Functional menu in notification Tree feature.
+ *
+ * @param request
+ * HttpServletRequest
+ * @param response
+ * HttpServletResponse
+ * @return List of FunctionalMenuItem objects
+ */
+ @RequestMapping(value = {
+ "/portalApi/functionalMenuForNotificationTree" }, method = RequestMethod.GET, produces = "application/json")
+ public List<FunctionalMenuItem> getMenuItemsForNotifications(HttpServletRequest request,
+ HttpServletResponse response) {
+ // TODO: should only the superuser be allowed to use this API?
+ // EPUser user = EPUserUtils.getUserSession(request);
+ List<FunctionalMenuItem> menuItems = null;
+ try {
+ menuItems = functionalMenuService.getFunctionalMenuItemsForNotificationTree(true);
+ EcompPortalUtils.logAndSerializeObject(logger, "/portalApi/functionalMenuForNotificationTree", "result =",
+ menuItems);
+ } catch (Exception e) {
+ logger.error(EELFLoggerDelegate.errorLogger, "getMenuItemsForNotifications failed", e);
+ }
+ return menuItems;
+ }
+
+ /**
+ * RESTful service method to fetch all FunctionalMenuItems associated with an
+ * application.
+ *
+ * @param request
+ * HttpServletRequest
+ * @param appId
+ * application ID
+ * @return List of FunctionalMenuItem objects
+ */
+ @RequestMapping(value = {
+ "/portalApi/functionalMenuForApp/{appId}" }, method = RequestMethod.GET, produces = "application/json")
+ public List<FunctionalMenuItem> getMenuItemsForApp(HttpServletRequest request,
+ @PathVariable("appId") Integer appId) {
+ // TODO: should only the superuser be allowed to use this API?
+ List<FunctionalMenuItem> menuItems = null;
+ try {
+ menuItems = functionalMenuService.getFunctionalMenuItemsForApp(appId);
+ functionalMenuService.assignHelpURLs(menuItems);
+ EcompPortalUtils.logAndSerializeObject(logger, "/portalApi/functionalMenuForApp/" + appId, "result =",
+ menuItems);
+ } catch (Exception e) {
+ logger.error(EELFLoggerDelegate.errorLogger, "getMenuItemsForApp failed", e);
+ }
+ return menuItems;
+ }
+
+ /**
+ * RESTful service method to fetch all FunctionalMenuItems associated with the
+ * applications and roles that a user has access to.
+ *
+ * @param request
+ * HttpServletRequest
+ * @param orgUserId
+ * user ID
+ * @return List of FunctionalMenuItem objects
+ */
+ @RequestMapping(value = {
+ "/portalApi/functionalMenuForUser/{orgUserId}" }, method = RequestMethod.GET, produces = "application/json")
+ public List<FunctionalMenuItem> getMenuItemsForUser(HttpServletRequest request,
+ @PathVariable("orgUserId") String orgUserId) {
+ // TODO: should only the superuser be allowed to use this API?
+ List<FunctionalMenuItem> menuItems = null;
+ try {
+ menuItems = functionalMenuService.getFunctionalMenuItemsForUser(orgUserId);
+ functionalMenuService.assignHelpURLs(menuItems);
+ EcompPortalUtils.logAndSerializeObject(logger, "/portalApi/functionalMenuForUser/" + orgUserId, "result =",
+ menuItems);
+ } catch (Exception e) {
+ logger.error(EELFLoggerDelegate.errorLogger, "getMenuItemsForUser failed", e);
+ }
+
+ return menuItems;
+ }
+
+ /**
+ * RESTful service method to fetch all FunctionalMenuItems associated with the
+ * applications and roles that the authenticated user has access to.
+ *
+ * @param request
+ * HttpServletRequest
+ * @param response
+ * HttpServletResponse
+ * @return List of FunctionalMenuItem objects
+ */
+ @RequestMapping(value = {
+ "/portalApi/functionalMenuForAuthUser" }, method = RequestMethod.GET, produces = "application/json")
+ public List<FunctionalMenuItem> getMenuItemsForAuthUser(HttpServletRequest request, HttpServletResponse response) {
+
+ EPUser user = EPUserUtils.getUserSession(request);
+ List<FunctionalMenuItem> menuItems = null;
+ try {
+ if (user == null) {
+ EcompPortalUtils.setBadPermissions(user, response, "getMenuItemsForAuthUser");
+ } else if (adminRolesService.isSuperAdmin(user)) {
+ menuItems = functionalMenuService.getFunctionalMenuItems();
+ } else {
+ // calculate the menu items
+ String orgUserId = user.getOrgUserId();
+ menuItems = functionalMenuService.getFunctionalMenuItemsForUser(orgUserId);
+ EcompPortalUtils.logAndSerializeObject(logger, "/portalApi/functionalMenuForUser/" + orgUserId,
+ "result =", menuItems);
+ }
+ functionalMenuService.assignHelpURLs(menuItems);
+ } catch (Exception e) {
+ logger.error(EELFLoggerDelegate.errorLogger, "getMenuItemsForAuthUser failed", e);
+ }
+ return menuItems;
+ }
+
+ /**
+ * RESTful service method to fetch the details for a functional menu item.
+ * Requirement: you must be the Ecomp portal super admin user.
+ *
+ * @param request
+ * HttpServletRequest
+ * @param response
+ * HttpServletResponse
+ * @param menuId
+ * menu ID
+ * @return FunctionalMenuItem object
+ */
+ @RequestMapping(value = {
+ "/portalApi/functionalMenuItemDetails/{menuId}" }, method = RequestMethod.GET, produces = "application/json")
+ public FunctionalMenuItem getFunctionalMenuItemDetails(HttpServletRequest request,
+ @PathVariable("menuId") Long menuId, HttpServletResponse response) {
+ // TODO: return FunctionalMenuItemJson
+ // TODO: modify FunctionalMenuItem to not include the transient fields
+ FunctionalMenuItem menuItem = null;
+ try {
+ EPUser user = EPUserUtils.getUserSession(request);
+ if (!adminRolesService.isSuperAdmin(user)) {
+ EcompPortalUtils.setBadPermissions(user, response, "getFunctionalMenuItemDetails");
+ } else {
+ menuItem = functionalMenuService.getFunctionalMenuItemDetails(menuId);
+ EcompPortalUtils.logAndSerializeObject(logger, "/portalApi/functionalMenuItemDetails/" + menuId,
+ "result =", menuItem);
+ }
+ } catch (Exception e) {
+ logger.error(EELFLoggerDelegate.errorLogger, "getFunctionalMenuItemDetails failed", e);
+ }
+
+ return menuItem;
+ }
+
+ /**
+ * RESTful service method to create a new menu item.
+ *
+ * Requirement: you must be the Ecomp portal super admin user.
+ *
+ * @param request
+ * HttpServletRequest
+ * @param response
+ * HttpServletResponse
+ * @param menuItemJson
+ * FunctionalMenuItemWithRoles
+ * @return FieldsValidator
+ */
+ @RequestMapping(value = { "/portalApi/functionalMenuItem" }, method = RequestMethod.POST)
+ public FieldsValidator createFunctionalMenuItem(HttpServletRequest request,
+ @RequestBody FunctionalMenuItemWithRoles menuItemJson, HttpServletResponse response) {
+ EPUser user = EPUserUtils.getUserSession(request);
+ FieldsValidator fieldsValidator = null;
+ if (!adminRolesService.isSuperAdmin(user)) {
+ logger.debug(EELFLoggerDelegate.debugLogger,
+ "FunctionalMenuController.createFunctionalMenuItem bad permissions");
+ EcompPortalUtils.setBadPermissions(user, response, "createFunctionalMenuItem");
+ } else {
+ fieldsValidator = functionalMenuService.createFunctionalMenuItem(menuItemJson);
+ response.setStatus(fieldsValidator.httpStatusCode.intValue());
+ EcompPortalUtils.logAndSerializeObject(logger, "/portalApi/functionalMenuItem", "POST result =",
+ response.getStatus());
+ }
+
+ return fieldsValidator;
+ }
+
+ /**
+ * RESTful service method to update an existing menu item
+ *
+ * Requirement: you must be the Ecomp portal super admin user.
+ *
+ * @param request
+ * HttpServletRequest
+ * @param response
+ * HttpServletResponse
+ * @param menuItemJson
+ * FunctionalMenuItemWithRoles
+ * @return FieldsValidator
+ */
+ @RequestMapping(value = { "/portalApi/functionalMenuItem" }, method = RequestMethod.PUT)
+ public FieldsValidator editFunctionalMenuItem(HttpServletRequest request,
+ @RequestBody FunctionalMenuItemWithRoles menuItemJson, HttpServletResponse response) {
+ EPUser user = EPUserUtils.getUserSession(request);
+ FieldsValidator fieldsValidator = null;
+ if (!adminRolesService.isSuperAdmin(user)) {
+ EcompPortalUtils.setBadPermissions(user, response, "editFunctionalMenuItem");
+ } else {
+ fieldsValidator = functionalMenuService.editFunctionalMenuItem(menuItemJson);
+ response.setStatus(fieldsValidator.httpStatusCode.intValue());
+ EcompPortalUtils.logAndSerializeObject(logger, "/portalApi/functionalMenuItem", "PUT result =",
+ response.getStatus());
+ }
+
+ return fieldsValidator;
+ }
+
+ /**
+ * RESTful service method to delete a menu item
+ *
+ * @param request
+ * HttpServletRequest
+ * @param response
+ * HttpServletResponse
+ * @param menuId
+ * menu identifier
+ * @return FieldsValidator
+ */
+ @RequestMapping(value = { "/portalApi/functionalMenuItem/{menuId}" }, method = RequestMethod.DELETE)
+ public FieldsValidator deleteFunctionalMenuItem(HttpServletRequest request, @PathVariable("menuId") Long menuId,
+ HttpServletResponse response) {
+ EPUser user = EPUserUtils.getUserSession(request);
+ FieldsValidator fieldsValidator = null;
+ if (!adminRolesService.isSuperAdmin(user)) {
+ EcompPortalUtils.setBadPermissions(user, response, "deleteFunctionalMenuItem");
+ } else {
+ fieldsValidator = functionalMenuService.deleteFunctionalMenuItem(menuId);
+ response.setStatus(fieldsValidator.httpStatusCode.intValue());
+ EcompPortalUtils.logAndSerializeObject(logger, "/portalApi/functionalMenuItem", "DELETE result =",
+ response.getStatus());
+ }
+
+ return fieldsValidator;
+ }
+
+ /**
+ * RESTful service to regenerate table
+ *
+ * @param request
+ * HttpServletRequest
+ * @param response
+ * HttpServletResponse
+ * @return FieldsValidator
+ */
+ @RequestMapping(value = { "/portalApi/regenerateFunctionalMenuAncestors" }, method = RequestMethod.GET)
+ public FieldsValidator regenerateAncestorTable(HttpServletRequest request, HttpServletResponse response) {
+ // TODO: should only the superuser be allowed to use this API?
+ EPUser user = EPUserUtils.getUserSession(request);
+ FieldsValidator fieldsValidator = null;
+
+ if (!adminRolesService.isSuperAdmin(user)) {
+ EcompPortalUtils.setBadPermissions(user, response, "deleteFunctionalMenuItem");
+ } else {
+ fieldsValidator = functionalMenuService.regenerateAncestorTable();
+ response.setStatus(fieldsValidator.httpStatusCode.intValue());
+ EcompPortalUtils.logAndSerializeObject(logger, "/portalApi/regenerateAncestorTable", "GET result =",
+ response.getStatus());
+ }
+
+ return fieldsValidator;
+ }
+
+ /**
+ * RESful service to set a favorite item.
+ *
+ * @param request
+ * HttpServletRequest
+ * @param response
+ * HttpServletResponse
+ * @param menuItemJson
+ * FunctionalMenuItemWithRoles
+ * @return FieldsValidator
+ */
+ @RequestMapping(value = { "/portalApi/setFavoriteItem" }, method = RequestMethod.POST)
+ public FieldsValidator addFavoriteItem(HttpServletRequest request,
+ @RequestBody FavoritesFunctionalMenuItem menuItemJson, HttpServletResponse response) {
+ EPUser user = EPUserUtils.getUserSession(request);
+ FieldsValidator fieldsValidator = null;
+ menuItemJson.userId = user.getId();
+ fieldsValidator = functionalMenuService.setFavoriteItem(menuItemJson);
+ response.setStatus(fieldsValidator.httpStatusCode.intValue());
+ EcompPortalUtils.logAndSerializeObject(logger, "/portalApi/setFavoriteItem", "Post result =",
+ response.getStatus());
+
+ return fieldsValidator;
+ }
+
+ /**
+ * RESTful service to get favorites for the current user as identified in the
+ * session
+ *
+ * @param request
+ * HttpServletRequest
+ * @param response
+ * HttpServletResponse
+ * @return List of FavoritesFunctionalMenuItemJson
+ */
+ @RequestMapping(value = {
+ "/portalApi/getFavoriteItems" }, method = RequestMethod.GET, produces = "application/json")
+ public List<FavoritesFunctionalMenuItemJson> getFavoritesForUser(HttpServletRequest request,
+ HttpServletResponse response) {
+ EPUser user = EPUserUtils.getUserSession(request);
+ List<FavoritesFunctionalMenuItemJson> favorites = functionalMenuService.getFavoriteItems(user.getId());
+ FieldsValidator fieldsValidator = new FieldsValidator();
+ response.setStatus(fieldsValidator.httpStatusCode.intValue());
+ EcompPortalUtils.logAndSerializeObject(logger, "/portalApi/getFavoriteItems", "GET result =",
+ response.getStatus());
+ return favorites;
+ }
+
+ /**
+ * RESTful service to delete a favorite menu item for the current user as
+ * identified in the session.
+ *
+ * @param request
+ * HttpServletRequest
+ * @param response
+ * HttpServletResponse
+ * @param menuId
+ * menu identifier
+ * @return FieldsValidator
+ */
+ @RequestMapping(value = { "/portalApi/removeFavoriteItem/{menuId}" }, method = RequestMethod.DELETE)
+ public FieldsValidator deleteFavoriteItem(HttpServletRequest request, @PathVariable("menuId") Long menuId,
+ HttpServletResponse response) {
+ EPUser user = EPUserUtils.getUserSession(request);
+ FieldsValidator fieldsValidator = null;
+ Long userId = user.getId();
+ fieldsValidator = functionalMenuService.removeFavoriteItem(userId, menuId);
+ response.setStatus(fieldsValidator.httpStatusCode.intValue());
+ EcompPortalUtils.logAndSerializeObject(logger, "/deleteFavoriteItem", "DELETE result =", response.getStatus());
+
+ return fieldsValidator;
+ }
+
+ /**
+ * RESTful service to get user information: user's first and last names, org
+ * user ID, email and last-login. (Actually has nothing to do with the real
+ * functional menu.) First attempts to get the information from the Tomcat
+ * session (i.e., the CSP cookie); if that fails, calls the shared context
+ * service to read the information from the database. Gives back what it found,
+ * any of which may be null, as a JSON collection.
+ *
+ * @param request
+ * HttpServletRequest
+ * @param response
+ * HttpServletResponse
+ * @return JSON collection of key-value pairs shown below.
+ */
+ @RequestMapping(value = {
+ "/portalApi/functionalMenuStaticInfo" }, method = RequestMethod.GET, produces = "application/json")
+ public String getFunctionalMenuStaticInfo(HttpServletRequest request, HttpServletResponse response) {
+
+ // Get user details from session
+ logger.debug(EELFLoggerDelegate.debugLogger, "getFunctionalMenuStaticInfo: getting user info");
+ String fnMenuStaticResponse = null;
+ try {
+ String orgUserIdStr = null, firstNameStr = null, lastNameStr = null, emailStr = null, lastLogin = null;
+ EPUser user = EPUserUtils.getUserSession(request);
+ firstNameStr = user.getFirstName();
+ lastNameStr = user.getLastName();
+ orgUserIdStr = user.getOrgUserId();
+ emailStr = user.getEmail();
+ if (emailStr == null || emailStr.equals("")) {
+ EPUser userResult = searchService.searchUserByUserId(orgUserIdStr);
+ emailStr = userResult.getEmail();
+ }
+ SimpleDateFormat sdf = new SimpleDateFormat("MM/dd/yyyy hh:mm:ssZ");
+ Date lastLoginDate = user.getLastLoginDate();
+ if (lastLoginDate == null) {
+ // should never happen
+ logger.error(EELFLoggerDelegate.errorLogger, "getFunctionalMenuStaticInfo: no last login in session");
+ lastLogin = "no last login available";
+ } else {
+ lastLogin = sdf.format(lastLoginDate);
+ }
+
+ // If any item is missing from session, try the Shared Context
+ // service.
+ SharedContext orgUserIdSC = null, firstNameSC = null, lastNameSC = null, emailSC = null;
+ String sessionId = request.getSession().getId();
+ if (firstNameStr == null)
+ firstNameSC = sharedContextService.getSharedContext(sessionId,
+ EPCommonSystemProperties.USER_FIRST_NAME);
+ if (lastNameStr == null)
+ lastNameSC = sharedContextService.getSharedContext(sessionId, EPCommonSystemProperties.USER_LAST_NAME);
+ if (emailStr == null)
+ emailSC = sharedContextService.getSharedContext(sessionId, EPCommonSystemProperties.USER_EMAIL);
+ if (orgUserIdStr == null)
+ orgUserIdSC = sharedContextService.getSharedContext(sessionId,
+ EPCommonSystemProperties.USER_ORG_USERID);
+
+ // Build the response
+ Map<String, String> map = new HashMap<String, String>();
+ map.put("firstName",
+ firstNameStr != null ? firstNameStr : (firstNameSC != null ? firstNameSC.getCvalue() : null));
+ map.put("lastName",
+ lastNameStr != null ? lastNameStr : (lastNameSC != null ? lastNameSC.getCvalue() : null));
+ map.put("email", emailStr != null ? emailStr : (emailSC != null ? emailSC.getCvalue() : null));
+ map.put("userId",
+ orgUserIdStr != null ? orgUserIdStr : (orgUserIdSC != null ? orgUserIdSC.getCvalue() : null));
+ map.put("last_login", lastLogin);
+ JSONObject j = new JSONObject(map);
+ fnMenuStaticResponse = j.toString();
+ // Be chatty in the log
+ EcompPortalUtils.logAndSerializeObject(logger, "/portalApi/functionalMenuStaticInfo", "GET result =",
+ fnMenuStaticResponse);
+ } catch (Exception e) {
+ // Should never happen.
+ logger.error(EELFLoggerDelegate.errorLogger, "getFunctionalMenuStaticInfo failed", e);
+ // Return a real error?
+ // fnMenuStaticResponse = "{ \"status\": \"error\", \"message\": \""
+ // + e.toString() + "\" }";
+ // But the angular controller expects null on error.
+ }
+ return fnMenuStaticResponse;
+ }
+
+ private Comparator<BusinessCardApplicationRole> getUserAppRolesComparator = new Comparator<BusinessCardApplicationRole>() {
+ public int compare(BusinessCardApplicationRole o1, BusinessCardApplicationRole o2) {
+ return o1.getAppName().compareTo(o2.getAppName());
+ }
+ };
+
+ /**
+ *
+ * @param request
+ * HttpServletRequest
+ * @param userId
+ * user ID
+ * @return List<BusinessCardApplicationRolesList>
+ * @throws IOException
+ * on error
+ */
+ @RequestMapping(value = {
+ "/portalApi/userApplicationRoles" }, method = RequestMethod.GET, produces = "application/json")
+ public List<BusinessCardApplicationRolesList> getAppList(HttpServletRequest request,
+ @RequestParam("userId") String userId) throws IOException {
+
+ List<BusinessCardApplicationRolesList> AppRoles = null;
+ try {
+ List<BusinessCardApplicationRole> userAppRoleList = functionalMenuService.getUserAppRolesList(userId);
+
+ Collections.sort(userAppRoleList, getUserAppRolesComparator);
+ EcompPortalUtils.logAndSerializeObject(logger, "/portalApi/userApplicationRoles", "result =",
+ userAppRoleList);
+
+ AppRoles = new ArrayList<BusinessCardApplicationRolesList>();
+ for (BusinessCardApplicationRole userAppRole : userAppRoleList) {
+ boolean found = false;
+ List<String> roles = null;
+
+ for (BusinessCardApplicationRolesList app : AppRoles) {
+ if (app.getAppName().equals(userAppRole.getAppName())) {
+ roles = app.getRoleNames();
+ roles.add(userAppRole.getRoleName());
+ app.setRoleNames(roles);
+ found = true;
+ break;
+ }
+ }
+
+ if (!found) {
+ roles = new ArrayList<String>();
+ roles.add(userAppRole.getRoleName());
+ AppRoles.add(new BusinessCardApplicationRolesList(userAppRole.getAppName(), roles));
+ }
+
+ Collections.sort(roles);
+ }
+ } catch (Exception e) {
+ logger.error(EELFLoggerDelegate.errorLogger, "getAppList failed", e);
+ }
+
+ return AppRoles;
+
+ }
+}
diff --git a/ecomp-portal-BE-common/src/main/java/org/onap/portalapp/portal/controller/GetAccessController.java b/ecomp-portal-BE-common/src/main/java/org/onap/portalapp/portal/controller/GetAccessController.java
new file mode 100644
index 00000000..b590c5ea
--- /dev/null
+++ b/ecomp-portal-BE-common/src/main/java/org/onap/portalapp/portal/controller/GetAccessController.java
@@ -0,0 +1,90 @@
+/*-
+ * ============LICENSE_START==========================================
+ * ONAP Portal
+ * ===================================================================
+ * Copyright (C) 2017 AT&T Intellectual Property. All rights reserved.
+ * ===================================================================
+ *
+ * Unless otherwise specified, all software contained herein is licensed
+ * under the Apache License, Version 2.0 (the "License");
+ * you may not use this software 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.
+ *
+ * Unless otherwise specified, all documentation contained herein is licensed
+ * under the Creative Commons License, Attribution 4.0 Intl. (the "License");
+ * you may not use this documentation except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * https://creativecommons.org/licenses/by/4.0/
+ *
+ * Unless required by applicable law or agreed to in writing, documentation
+ * 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.
+ *
+ * ============LICENSE_END============================================
+ *
+ * ECOMP is a trademark and service mark of AT&T Intellectual Property.
+ */
+package org.onap.portalapp.portal.controller;
+
+import java.io.IOException;
+import java.util.Collections;
+import java.util.Comparator;
+import java.util.List;
+
+import javax.servlet.http.HttpServletRequest;
+
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.context.annotation.EnableAspectJAutoProxy;
+import org.springframework.web.bind.annotation.RequestMapping;
+import org.springframework.web.bind.annotation.RequestMethod;
+import org.springframework.web.bind.annotation.RestController;
+import org.onap.portalapp.controller.EPUnRestrictedBaseController;
+import org.onap.portalapp.portal.domain.EPUser;
+import org.onap.portalapp.portal.domain.GetAccessResult;
+import org.onap.portalapp.portal.logging.aop.EPAuditLog;
+import org.onap.portalapp.portal.service.GetAccessService;
+import org.onap.portalapp.portal.utils.EcompPortalUtils;
+import org.onap.portalapp.util.EPUserUtils;
+import org.onap.portalsdk.core.logging.logic.EELFLoggerDelegate;
+
+@RestController
+@org.springframework.context.annotation.Configuration
+@EnableAspectJAutoProxy
+@EPAuditLog
+public class GetAccessController extends EPUnRestrictedBaseController {
+
+ private EELFLoggerDelegate logger = EELFLoggerDelegate.getLogger(GetAccessController.class);
+
+ @Autowired
+ private GetAccessService getAccessService;
+
+ /**
+ * Sorts the list by ECOMP function name.
+ */
+ private Comparator<GetAccessResult> getAccessComparator = new Comparator<GetAccessResult>() {
+ public int compare(GetAccessResult o1, GetAccessResult o2) {
+ return o1.getAppName().compareTo(o2.getAppName());
+ }
+ };
+
+ @RequestMapping(value = { "/portalApi/getAppList" }, method = RequestMethod.GET, produces = "application/json")
+ public List<GetAccessResult> getAppList(HttpServletRequest request) throws IOException {
+ List<GetAccessResult> appsList = null;
+ EPUser user = EPUserUtils.getUserSession(request);
+ appsList = getAccessService.getAppAccessList(user);
+ Collections.sort(appsList, getAccessComparator);
+ EcompPortalUtils.logAndSerializeObject(logger, "/portalApi/getAppList", "result =", appsList);
+ return appsList;
+ }
+}
diff --git a/ecomp-portal-BE-common/src/main/java/org/onap/portalapp/portal/controller/HealthCheckController.java b/ecomp-portal-BE-common/src/main/java/org/onap/portalapp/portal/controller/HealthCheckController.java
new file mode 100644
index 00000000..80e16b59
--- /dev/null
+++ b/ecomp-portal-BE-common/src/main/java/org/onap/portalapp/portal/controller/HealthCheckController.java
@@ -0,0 +1,249 @@
+/*-
+ * ============LICENSE_START==========================================
+ * ONAP Portal
+ * ===================================================================
+ * Copyright (C) 2017 AT&T Intellectual Property. All rights reserved.
+ * ===================================================================
+ *
+ * Unless otherwise specified, all software contained herein is licensed
+ * under the Apache License, Version 2.0 (the "License");
+ * you may not use this software 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.
+ *
+ * Unless otherwise specified, all documentation contained herein is licensed
+ * under the Creative Commons License, Attribution 4.0 Intl. (the "License");
+ * you may not use this documentation except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * https://creativecommons.org/licenses/by/4.0/
+ *
+ * Unless required by applicable law or agreed to in writing, documentation
+ * 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.
+ *
+ * ============LICENSE_END============================================
+ *
+ * ECOMP is a trademark and service mark of AT&T Intellectual Property.
+ */
+package org.onap.portalapp.portal.controller;
+
+import java.util.ArrayList;
+import java.util.List;
+
+import javax.servlet.http.HttpServletRequest;
+import javax.servlet.http.HttpServletResponse;
+
+import org.slf4j.MDC;
+import org.springframework.context.annotation.EnableAspectJAutoProxy;
+import org.springframework.web.bind.annotation.RequestMapping;
+import org.springframework.web.bind.annotation.RequestMethod;
+import org.springframework.web.bind.annotation.RestController;
+import org.onap.portalapp.controller.EPUnRestrictedBaseController;
+import org.onap.portalapp.portal.listener.HealthMonitor;
+import org.onap.portalapp.portal.logging.aop.EPAuditLog;
+import org.onap.portalapp.portal.logging.format.EPAppMessagesEnum;
+import org.onap.portalapp.portal.logging.logic.EPLogUtil;
+import org.onap.portalapp.portal.utils.EPCommonSystemProperties;
+import org.onap.portalapp.portal.utils.EcompPortalUtils;
+import org.onap.portalsdk.core.logging.logic.EELFLoggerDelegate;
+
+import com.google.gson.Gson;
+
+/**
+ * This controller processes requests for the health-check feature implemented
+ * in the HealthMonitor, which runs in its own thread. These requests do not
+ * require any authentication nor an active user session.
+ */
+@RestController
+@org.springframework.context.annotation.Configuration
+@EnableAspectJAutoProxy
+@EPAuditLog
+public class HealthCheckController extends EPUnRestrictedBaseController {
+
+ private EELFLoggerDelegate logger = EELFLoggerDelegate.getLogger(HealthCheckController.class);
+
+ private class HealthStatus {
+ public int statusCode;
+ @SuppressWarnings("unused")
+ public String body;
+
+ public HealthStatus(int code, String body) {
+ this.statusCode = code;
+ this.body = body;
+ }
+ }
+
+ private class HealthStatusInfo {
+ HealthStatusInfo(String healthCheckComponent) {
+ this.healthCheckComponent = healthCheckComponent;
+ this.healthCheckStatus = statusUp; // Default value
+ this.version = "";
+ this.description = statusOk; // Default value
+ this.hostName = "";
+ this.ipAddress = "";
+ this.dbClusterStatus = "";
+ this.dbPermissions = "";
+ }
+
+ @SuppressWarnings("unused")
+ public String healthCheckComponent;
+ @SuppressWarnings("unused")
+ public String healthCheckStatus;
+ @SuppressWarnings("unused")
+ public String version;
+ @SuppressWarnings("unused")
+ public String description;
+ @SuppressWarnings("unused")
+ public String hostName;
+ @SuppressWarnings("unused")
+ public String ipAddress;
+ @SuppressWarnings("unused")
+ public String dbClusterStatus;
+ @SuppressWarnings("unused")
+ public String dbPermissions;
+ }
+
+ private final String statusUp = "UP";
+ private final String statusDown = "DOWN";
+ private final String statusOk = "OK";
+
+ @RequestMapping(value = { "/portalApi/healthCheck" }, method = RequestMethod.GET, produces = "application/json")
+ public HealthStatus healthCheck(HttpServletRequest request, HttpServletResponse response) {
+ HealthStatus healthStatus = new HealthStatus(500, "");
+
+ // Return the status as 500 if it suspended due to manual fail over
+ if (HealthMonitor.isSuspended) {
+ healthStatus.body = "Suspended";
+ response.setStatus(HttpServletResponse.SC_INTERNAL_SERVER_ERROR);
+ MDC.put(EPCommonSystemProperties.RESPONSE_CODE,
+ Integer.toString(HttpServletResponse.SC_INTERNAL_SERVER_ERROR));
+ return healthStatus;
+ }
+
+ try {
+ boolean overallStatus = true;
+
+ List<HealthStatusInfo> statusCollection = new ArrayList<HealthStatusInfo>();
+
+ HealthStatusInfo beInfo = new HealthStatusInfo("BE");
+ beInfo.hostName = EcompPortalUtils.getMyHostName();
+ beInfo.ipAddress = EcompPortalUtils.getMyIpAdddress();
+ if (!HealthMonitor.isBackEndUp()) {
+ overallStatus = false;
+ beInfo.healthCheckStatus = statusDown;
+ beInfo.description = "Check the logs for more details";
+ EPLogUtil.logEcompError(logger, EPAppMessagesEnum.BeHealthCheckError);
+ }
+ statusCollection.add(beInfo);
+
+ HealthStatusInfo feInfo = new HealthStatusInfo("FE");
+ if (!HealthMonitor.isFrontEndUp()) {
+ overallStatus = false;
+ feInfo.healthCheckStatus = statusDown;
+ feInfo.description = "Check the logs for more details";
+ EPLogUtil.logEcompError(logger, EPAppMessagesEnum.FeHealthCheckError);
+ }
+ statusCollection.add(feInfo);
+
+ HealthStatusInfo dbInfo = new HealthStatusInfo("DB");
+ if (!HealthMonitor.isDatabaseUp()) {
+ overallStatus = false;
+ dbInfo.healthCheckStatus = statusDown;
+ dbInfo.description = "Check the logs for more details";
+ EPLogUtil.logEcompError(logger, EPAppMessagesEnum.BeDaoSystemError);
+ }
+
+ if (!HealthMonitor.isClusterStatusOk()) {
+ dbInfo.dbClusterStatus = "Problem, check the logs for more details";
+ EPLogUtil.logEcompError(logger, EPAppMessagesEnum.BeDaoSystemError);
+ } else {
+ dbInfo.dbClusterStatus = statusOk;
+ }
+
+ if (!HealthMonitor.isDatabasePermissionsOk()) {
+ dbInfo.dbPermissions = "Problem, check the logs for more details";
+ EPLogUtil.logEcompError(logger, EPAppMessagesEnum.BeDaoSystemError);
+ } else {
+ dbInfo.dbPermissions = statusOk;
+ }
+ statusCollection.add(dbInfo);
+
+ HealthStatusInfo uebInfo = new HealthStatusInfo("UEB");
+ if (!HealthMonitor.isUebUp()) {
+ // As per test case review meeting, UEB is considered as
+ // critical as DB. Hence commenting
+ // overallStatus = false;
+ uebInfo.healthCheckStatus = statusDown;
+ uebInfo.description = "Check the logs for more details";
+ EPLogUtil.logEcompError(logger, EPAppMessagesEnum.BeUebConnectionError);
+ }
+ statusCollection.add(uebInfo);
+
+ String json = "";
+ try {
+ json = new Gson().toJson(statusCollection);
+ } catch (Exception e) {
+ EPLogUtil.logEcompError(logger, EPAppMessagesEnum.BeInvalidJsonInput);
+ }
+ logger.info(EELFLoggerDelegate.debugLogger, json);
+
+ if (overallStatus) {
+ healthStatus = new HealthStatus(200, json);
+ } else {
+ healthStatus = new HealthStatus(500, json);
+ response.setStatus(HttpServletResponse.SC_INTERNAL_SERVER_ERROR);
+ }
+ MDC.put(EPCommonSystemProperties.RESPONSE_CODE, Integer.toString(healthStatus.statusCode));
+ } catch (Exception e) {
+ logger.error(EELFLoggerDelegate.errorLogger, "healthCheck failed", e);
+ }
+
+ EcompPortalUtils.logAndSerializeObject(logger, "/portalApi/healthCheck", "GET result =", response.getStatus());
+
+ return healthStatus;
+ }
+
+ @RequestMapping(value = {
+ "/portalApi/healthCheckSuspend" }, method = RequestMethod.GET, produces = "application/json")
+ public HealthStatus healthCheckSuspend(HttpServletRequest request, HttpServletResponse response) {
+ HealthStatus healthStatus = new HealthStatus(500, "Suspended for manual failover mechanism");
+
+ HealthMonitor.isSuspended = true;
+ healthStatus.statusCode = 200;
+
+ EcompPortalUtils.logAndSerializeObject(logger, "/portalApi/healthCheckSuspend", "GET result =",
+ response.getStatus());
+
+ return healthStatus;
+ }
+
+ @RequestMapping(value = {
+ "/portalApi/healthCheckResume" }, method = RequestMethod.GET, produces = "application/json")
+ public HealthStatus healthCheckResume(HttpServletRequest request, HttpServletResponse response) {
+ HealthStatus healthStatus = new HealthStatus(500, "Resumed from manual failover mechanism");
+
+ HealthMonitor.isSuspended = false;
+ healthStatus.statusCode = 200;
+ EcompPortalUtils.logAndSerializeObject(logger, "/portalApi/healthCheckResume", "GET result =",
+ response.getStatus());
+ return healthStatus;
+ }
+
+ @RequestMapping(value = { "/portalApi/ping" }, method = RequestMethod.GET, produces = "application/json")
+ public HealthStatus ping(HttpServletRequest request, HttpServletResponse response) {
+ HealthStatus healthStatus = new HealthStatus(200, "OK");
+ EcompPortalUtils.logAndSerializeObject(logger, "/portalApi/ping", "GET result =", response.getStatus());
+
+ return healthStatus;
+ }
+}
diff --git a/ecomp-portal-BE-common/src/main/java/org/onap/portalapp/portal/controller/ManifestController.java b/ecomp-portal-BE-common/src/main/java/org/onap/portalapp/portal/controller/ManifestController.java
new file mode 100644
index 00000000..7f68ab21
--- /dev/null
+++ b/ecomp-portal-BE-common/src/main/java/org/onap/portalapp/portal/controller/ManifestController.java
@@ -0,0 +1,108 @@
+/*-
+ * ============LICENSE_START==========================================
+ * ONAP Portal
+ * ===================================================================
+ * Copyright (C) 2017 AT&T Intellectual Property. All rights reserved.
+ * ===================================================================
+ *
+ * Unless otherwise specified, all software contained herein is licensed
+ * under the Apache License, Version 2.0 (the "License");
+ * you may not use this software 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.
+ *
+ * Unless otherwise specified, all documentation contained herein is licensed
+ * under the Creative Commons License, Attribution 4.0 Intl. (the "License");
+ * you may not use this documentation except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * https://creativecommons.org/licenses/by/4.0/
+ *
+ * Unless required by applicable law or agreed to in writing, documentation
+ * 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.
+ *
+ * ============LICENSE_END============================================
+ *
+ * ECOMP is a trademark and service mark of AT&T Intellectual Property.
+ */
+package org.onap.portalapp.portal.controller;
+
+import java.util.HashMap;
+import java.util.Map;
+import java.util.jar.Attributes;
+
+import javax.servlet.http.HttpServletRequest;
+
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.context.annotation.Configuration;
+import org.springframework.context.annotation.EnableAspectJAutoProxy;
+import org.springframework.web.bind.annotation.RequestMapping;
+import org.springframework.web.bind.annotation.RequestMethod;
+import org.springframework.web.bind.annotation.ResponseBody;
+import org.springframework.web.bind.annotation.RestController;
+import org.onap.portalapp.portal.logging.aop.EPAuditLog;
+import org.onap.portalapp.portal.service.ManifestService;
+import org.onap.portalsdk.core.controller.RestrictedBaseController;
+import org.onap.portalsdk.core.logging.logic.EELFLoggerDelegate;
+
+/**
+ * This controller responds to a request for the web application manifest,
+ * returning a JSON with the information that was created at build time.
+ *
+ * Manifest entries have names with hyphens, which means Javascript code can't
+ * simply use the shorthand object.key; instead use object['key'].
+ */
+@RestController
+@Configuration("manifestPortalController")
+@EnableAspectJAutoProxy
+@RequestMapping("/")
+@EPAuditLog
+public class ManifestController extends RestrictedBaseController {
+
+ private EELFLoggerDelegate logger = EELFLoggerDelegate.getLogger(ManifestController.class);
+
+ @Autowired
+ private ManifestService manifestService;
+
+ /**
+ * Gets the webapp manifest contents as a JSON object.
+ *
+ * @param request
+ * HttpServletRequest
+ * @return A map of key-value pairs. On success:
+ *
+ * <pre>
+ * { "manifest" : { "key1": "value1", "key2": "value2" } }
+ * </pre>
+ *
+ * On failure:
+ *
+ * <pre>
+ * { "error": "message" }
+ * </pre>
+ */
+ @RequestMapping(value = { "/portalApi/manifest" }, method = RequestMethod.GET, produces = "application/json")
+ @ResponseBody
+ public Map<String, Object> getManifest(HttpServletRequest request) {
+ Map<String, Object> response = new HashMap<String, Object>();
+ try {
+ Attributes attributes = manifestService.getWebappManifest();
+ response.put("manifest", attributes);
+ } catch (Exception ex) {
+ logger.error(EELFLoggerDelegate.errorLogger, "getManifest: failed to read manifest", ex);
+ response.put("error", "failed to get manifest: " + ex.toString());
+ }
+ return response;
+ }
+
+} \ No newline at end of file
diff --git a/ecomp-portal-BE-common/src/main/java/org/onap/portalapp/portal/controller/MicroserviceController.java b/ecomp-portal-BE-common/src/main/java/org/onap/portalapp/portal/controller/MicroserviceController.java
new file mode 100644
index 00000000..4530266a
--- /dev/null
+++ b/ecomp-portal-BE-common/src/main/java/org/onap/portalapp/portal/controller/MicroserviceController.java
@@ -0,0 +1,156 @@
+/*-
+ * ============LICENSE_START==========================================
+ * ONAP Portal
+ * ===================================================================
+ * Copyright (C) 2017 AT&T Intellectual Property. All rights reserved.
+ * ===================================================================
+ *
+ * Unless otherwise specified, all software contained herein is licensed
+ * under the Apache License, Version 2.0 (the "License");
+ * you may not use this software 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.
+ *
+ * Unless otherwise specified, all documentation contained herein is licensed
+ * under the Creative Commons License, Attribution 4.0 Intl. (the "License");
+ * you may not use this documentation except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * https://creativecommons.org/licenses/by/4.0/
+ *
+ * Unless required by applicable law or agreed to in writing, documentation
+ * 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.
+ *
+ * ============LICENSE_END============================================
+ *
+ * ECOMP is a trademark and service mark of AT&T Intellectual Property.
+ */
+package org.onap.portalapp.portal.controller;
+
+import java.util.List;
+
+import javax.servlet.http.HttpServletRequest;
+import javax.servlet.http.HttpServletResponse;
+
+import org.onap.portalapp.controller.EPRestrictedBaseController;
+import org.onap.portalapp.portal.domain.MicroserviceData;
+import org.onap.portalapp.portal.domain.WidgetCatalog;
+import org.onap.portalapp.portal.domain.WidgetServiceHeaders;
+import org.onap.portalapp.portal.ecomp.model.PortalRestResponse;
+import org.onap.portalapp.portal.ecomp.model.PortalRestStatusEnum;
+import org.onap.portalapp.portal.logging.aop.EPAuditLog;
+import org.onap.portalapp.portal.service.ConsulHealthService;
+import org.onap.portalapp.portal.service.MicroserviceService;
+import org.onap.portalapp.portal.utils.EcompPortalUtils;
+import org.onap.portalsdk.core.util.SystemProperties;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.context.annotation.EnableAspectJAutoProxy;
+import org.springframework.core.ParameterizedTypeReference;
+import org.springframework.http.HttpEntity;
+import org.springframework.http.HttpMethod;
+import org.springframework.http.ResponseEntity;
+import org.springframework.web.bind.annotation.PathVariable;
+import org.springframework.web.bind.annotation.RequestBody;
+import org.springframework.web.bind.annotation.RequestMapping;
+import org.springframework.web.bind.annotation.RequestMethod;
+import org.springframework.web.bind.annotation.RestController;
+import org.springframework.web.client.RestTemplate;
+
+@SuppressWarnings("unchecked")
+@RestController
+@org.springframework.context.annotation.Configuration
+@EnableAspectJAutoProxy
+@EPAuditLog
+public class MicroserviceController extends EPRestrictedBaseController {
+
+ String whatService = "widgets-service";
+ RestTemplate template = new RestTemplate();
+
+ @Autowired
+ private ConsulHealthService consulHealthService;
+
+ @Autowired
+ private MicroserviceService microserviceService;
+
+ @RequestMapping(value = { "/portalApi/microservices" }, method = RequestMethod.POST)
+ public PortalRestResponse<String> createMicroservice(HttpServletRequest request, HttpServletResponse response,
+ @RequestBody MicroserviceData newServiceData) throws Exception {
+ if (newServiceData == null) {
+ return new PortalRestResponse<String>(PortalRestStatusEnum.ERROR, "FAILURE",
+ "MicroserviceData cannot be null or empty");
+ }
+ long serviceId = microserviceService.saveMicroservice(newServiceData);
+
+ try {
+ microserviceService.saveServiceParameters(serviceId, newServiceData.getParameterList());
+ } catch (Exception e) {
+ return new PortalRestResponse<String>(PortalRestStatusEnum.ERROR, "FAILURE", e.getMessage());
+ }
+
+ return new PortalRestResponse<String>(PortalRestStatusEnum.OK, "SUCCESS", "");
+ }
+
+ @RequestMapping(value = { "/portalApi/microservices" }, method = RequestMethod.GET)
+ public List<MicroserviceData> getMicroservice(HttpServletRequest request, HttpServletResponse response)
+ throws Exception {
+ List<MicroserviceData> list = microserviceService.getMicroserviceData();
+ return list;
+ }
+
+ @RequestMapping(value = { "/portalApi/microservices/{serviceId}" }, method = RequestMethod.PUT)
+ public PortalRestResponse<String> updateMicroservice(HttpServletRequest request, HttpServletResponse response,
+ @PathVariable("serviceId") long serviceId, @RequestBody MicroserviceData newServiceData) throws Exception {
+
+ if (newServiceData == null) {
+ return new PortalRestResponse<String>(PortalRestStatusEnum.ERROR, "FAILURE",
+ "MicroserviceData cannot be null or empty");
+ }
+ try {
+ microserviceService.updateMicroservice(serviceId, newServiceData);
+ } catch (Exception e) {
+ return new PortalRestResponse<String>(PortalRestStatusEnum.ERROR, "FAILURE", e.getMessage());
+ }
+ return new PortalRestResponse<String>(PortalRestStatusEnum.OK, "SUCCESS", "");
+ }
+
+ @RequestMapping(value = { "/portalApi/microservices/{serviceId}" }, method = RequestMethod.DELETE)
+ public PortalRestResponse<String> deleteMicroservice(HttpServletRequest request, HttpServletResponse response,
+ @PathVariable("serviceId") long serviceId) throws Exception {
+ try {
+ ParameterizedTypeReference<List<WidgetCatalog>> typeRef = new ParameterizedTypeReference<List<WidgetCatalog>>() {
+ };
+ // If this service is assoicated with widgets, cannnot be deleted
+ ResponseEntity<List<WidgetCatalog>> ans = (ResponseEntity<List<WidgetCatalog>>) template.exchange(
+ EcompPortalUtils.widgetMsProtocol() + "://" + consulHealthService.getServiceLocation(whatService, SystemProperties.getProperty("microservices.widget.local.port"))
+ + "/widget/microservices/widgetCatalog/service/" + serviceId,
+ HttpMethod.GET, new HttpEntity(WidgetServiceHeaders.getInstance()), typeRef);
+ List<WidgetCatalog> widgets = ans.getBody();
+ if(widgets.size() == 0)
+ microserviceService.deleteMicroservice(serviceId);
+ else{
+ StringBuilder sb = new StringBuilder();
+ for(int i = 0; i < widgets.size(); i++){
+ sb.append("'" + widgets.get(i).getName() + "' ");
+ if(i < (widgets.size()-1)){
+ sb.append(",");
+ }
+ }
+ return new PortalRestResponse<String>(PortalRestStatusEnum.WARN, "SOME WIDGETS ASSOICATE WITH THIS SERVICE", sb.toString());
+ }
+ } catch (Exception e) {
+ return new PortalRestResponse<String>(PortalRestStatusEnum.ERROR, "FAILURE", e.getMessage());
+ }
+ return new PortalRestResponse<String>(PortalRestStatusEnum.OK, "SUCCESS", "");
+ }
+
+}
diff --git a/ecomp-portal-BE-common/src/main/java/org/onap/portalapp/portal/controller/MicroserviceProxyController.java b/ecomp-portal-BE-common/src/main/java/org/onap/portalapp/portal/controller/MicroserviceProxyController.java
new file mode 100644
index 00000000..934d8f50
--- /dev/null
+++ b/ecomp-portal-BE-common/src/main/java/org/onap/portalapp/portal/controller/MicroserviceProxyController.java
@@ -0,0 +1,115 @@
+/*-
+ * ============LICENSE_START==========================================
+ * ONAP Portal
+ * ===================================================================
+ * Copyright (C) 2017 AT&T Intellectual Property. All rights reserved.
+ * ===================================================================
+ *
+ * Unless otherwise specified, all software contained herein is licensed
+ * under the Apache License, Version 2.0 (the "License");
+ * you may not use this software 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.
+ *
+ * Unless otherwise specified, all documentation contained herein is licensed
+ * under the Creative Commons License, Attribution 4.0 Intl. (the "License");
+ * you may not use this documentation except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * https://creativecommons.org/licenses/by/4.0/
+ *
+ * Unless required by applicable law or agreed to in writing, documentation
+ * 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.
+ *
+ * ============LICENSE_END============================================
+ *
+ * ECOMP is a trademark and service mark of AT&T Intellectual Property.
+ */
+package org.onap.portalapp.portal.controller;
+
+import java.io.IOException;
+
+import javax.servlet.http.HttpServletRequest;
+import javax.servlet.http.HttpServletResponse;
+
+import org.onap.portalapp.controller.EPUnRestrictedBaseController;
+import org.onap.portalapp.portal.domain.EPUser;
+import org.onap.portalapp.portal.logging.aop.EPAuditLog;
+import org.onap.portalapp.portal.service.MicroserviceProxyService;
+import org.onap.portalapp.util.EPUserUtils;
+import org.onap.portalsdk.core.logging.logic.EELFLoggerDelegate;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.context.annotation.EnableAspectJAutoProxy;
+import org.springframework.web.bind.annotation.PathVariable;
+import org.springframework.web.bind.annotation.RequestMapping;
+import org.springframework.web.bind.annotation.RequestMethod;
+import org.springframework.web.bind.annotation.RestController;
+import org.springframework.web.client.HttpClientErrorException;
+
+import com.fasterxml.jackson.databind.ObjectMapper;
+
+@RestController
+@org.springframework.context.annotation.Configuration
+@EnableAspectJAutoProxy
+@EPAuditLog
+public class MicroserviceProxyController extends EPUnRestrictedBaseController {
+
+ private EELFLoggerDelegate logger = EELFLoggerDelegate.getLogger(MicroserviceProxyController.class);
+
+ @Autowired
+ private MicroserviceProxyService microserviceProxyService;
+
+ @RequestMapping(value = { "/portalApi/microservice/proxy/{serviceId}" }, method = {
+ RequestMethod.GET }, produces = "application/json")
+ public String getMicroserviceProxy(HttpServletRequest request, HttpServletResponse response,
+ @PathVariable("serviceId") long serviceId) throws Exception {
+ EPUser user = EPUserUtils.getUserSession(request);
+ String answer = "";
+ try {
+ answer = microserviceProxyService.proxyToDestination(serviceId, user, request);
+ } catch (HttpClientErrorException e) {
+ answer = e.getResponseBodyAsString();
+ }
+ return isValidJSON(answer) ? answer : "{\"error\":\"" + answer.replace(System.getProperty("line.separator"), "") + "\"}";
+ }
+
+ @RequestMapping(value = { "/portalApi/microservice/proxy/parameter/{widgetId}" }, method = {
+ RequestMethod.GET }, produces = "application/json")
+ public String getMicroserviceProxyByWidgetId(HttpServletRequest request, HttpServletResponse response,
+ @PathVariable("widgetId") long widgetId) throws Exception {
+ EPUser user = EPUserUtils.getUserSession(request);
+ String answer = "";
+ try {
+ answer = microserviceProxyService.proxyToDestinationByWidgetId(widgetId, user, request);
+ } catch (HttpClientErrorException e) {
+ answer = e.getResponseBodyAsString();
+ }
+ return isValidJSON(answer) ? answer : "{\"error\":\"" + answer.replace(System.getProperty("line.separator"), "") + "\"}";
+ }
+
+ /**
+ * Check whether the response is a valid JSON
+ * @param response
+ * @return true if the response is valid JSON, otherwise, false
+ */
+ private boolean isValidJSON(String response) {
+ try {
+ final ObjectMapper mapper = new ObjectMapper();
+ mapper.readTree(response);
+ return true;
+ } catch (IOException e) {
+ logger.debug(EELFLoggerDelegate.debugLogger, "isValidJSON failed", e);
+ return false;
+ }
+ }
+}
diff --git a/ecomp-portal-BE-common/src/main/java/org/onap/portalapp/portal/controller/PortalAdminController.java b/ecomp-portal-BE-common/src/main/java/org/onap/portalapp/portal/controller/PortalAdminController.java
new file mode 100644
index 00000000..e77f8f95
--- /dev/null
+++ b/ecomp-portal-BE-common/src/main/java/org/onap/portalapp/portal/controller/PortalAdminController.java
@@ -0,0 +1,230 @@
+/*-
+ * ============LICENSE_START==========================================
+ * ONAP Portal
+ * ===================================================================
+ * Copyright (C) 2017 AT&T Intellectual Property. All rights reserved.
+ * ===================================================================
+ *
+ * Unless otherwise specified, all software contained herein is licensed
+ * under the Apache License, Version 2.0 (the "License");
+ * you may not use this software 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.
+ *
+ * Unless otherwise specified, all documentation contained herein is licensed
+ * under the Creative Commons License, Attribution 4.0 Intl. (the "License");
+ * you may not use this documentation except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * https://creativecommons.org/licenses/by/4.0/
+ *
+ * Unless required by applicable law or agreed to in writing, documentation
+ * 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.
+ *
+ * ============LICENSE_END============================================
+ *
+ * ECOMP is a trademark and service mark of AT&T Intellectual Property.
+ */
+package org.onap.portalapp.portal.controller;
+
+import java.util.List;
+
+import javax.servlet.http.HttpServletRequest;
+import javax.servlet.http.HttpServletResponse;
+
+import org.onap.portalapp.controller.EPRestrictedBaseController;
+import org.onap.portalapp.portal.domain.EPRole;
+import org.onap.portalapp.portal.domain.EPUser;
+import org.onap.portalapp.portal.domain.EcompAuditLog;
+import org.onap.portalapp.portal.logging.aop.EPAuditLog;
+import org.onap.portalapp.portal.logging.aop.EPEELFLoggerAdvice;
+import org.onap.portalapp.portal.logging.logic.EPLogUtil;
+import org.onap.portalapp.portal.service.AdminRolesService;
+import org.onap.portalapp.portal.service.PortalAdminService;
+import org.onap.portalapp.portal.transport.FieldsValidator;
+import org.onap.portalapp.portal.transport.PortalAdmin;
+import org.onap.portalapp.portal.utils.EPCommonSystemProperties;
+import org.onap.portalapp.portal.utils.EcompPortalUtils;
+import org.onap.portalapp.util.EPUserUtils;
+import org.onap.portalsdk.core.domain.AuditLog;
+import org.onap.portalsdk.core.logging.logic.EELFLoggerDelegate;
+import org.onap.portalsdk.core.service.AuditService;
+import org.onap.portalsdk.core.util.SystemProperties;
+import org.slf4j.MDC;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.context.annotation.EnableAspectJAutoProxy;
+import org.springframework.web.bind.annotation.PathVariable;
+import org.springframework.web.bind.annotation.RequestBody;
+import org.springframework.web.bind.annotation.RequestMapping;
+import org.springframework.web.bind.annotation.RequestMethod;
+import org.springframework.web.bind.annotation.RestController;
+
+@RestController
+@org.springframework.context.annotation.Configuration
+@EnableAspectJAutoProxy
+@EPAuditLog
+public class PortalAdminController extends EPRestrictedBaseController {
+ @Autowired
+ PortalAdminService portalAdminService;
+ @Autowired
+ AdminRolesService adminRolesService;
+ @Autowired
+ AuditService auditService;
+
+ EELFLoggerDelegate logger = EELFLoggerDelegate.getLogger(PortalAdminController.class);
+
+ @RequestMapping(value = { "/portalApi/portalAdmins" }, method = RequestMethod.GET, produces = "application/json")
+ public List<PortalAdmin> getPortalAdmins(HttpServletRequest request, HttpServletResponse response) {
+ EPUser user = EPUserUtils.getUserSession(request);
+ List<PortalAdmin> portalAdmins = null;
+ if (user == null) {
+ logger.debug(EELFLoggerDelegate.debugLogger, "PortalAdminController.getPortalAdmins, null user");
+ EcompPortalUtils.setBadPermissions(user, response, "getPortalAdmins");
+ } else if (!adminRolesService.isSuperAdmin(user)) {
+ logger.debug(EELFLoggerDelegate.debugLogger, "PortalAdminController.getPortalAdmins, bad permissions");
+ EcompPortalUtils.setBadPermissions(user, response, "createPortalAdmin");
+ } else {
+ // return the list of portal admins
+ portalAdmins = portalAdminService.getPortalAdmins();
+ logger.debug(EELFLoggerDelegate.debugLogger, "portalAdmins: called getPortalAdmins()");
+ EcompPortalUtils.logAndSerializeObject(logger, "/portalApi/getPortalAdmins", "result =", portalAdmins);
+ }
+
+ return portalAdmins;
+ }
+
+ /**
+ * RESTful service method to create a new portal admin. Requirement: you
+ * must be the Ecomp portal super admin user.
+ * @param request
+ * @param userId
+ * @param response
+ * @return FieldsValidator
+ */
+ @RequestMapping(value = { "/portalApi/portalAdmin" }, method = RequestMethod.POST)
+ public FieldsValidator createPortalAdmin(HttpServletRequest request, @RequestBody String userId,
+ HttpServletResponse response) {
+ EPUser user = EPUserUtils.getUserSession(request);
+ FieldsValidator fieldsValidator = null;
+ if (user == null) {
+ logger.debug(EELFLoggerDelegate.debugLogger, "PortalAdminController.createPortalAdmin, null user");
+ EcompPortalUtils.setBadPermissions(user, response, "createPortalAdmin");
+ } else if (!adminRolesService.isSuperAdmin(user)) {
+ logger.debug(EELFLoggerDelegate.debugLogger, "PortalAdminController.createPortalAdmin bad permissions");
+ EcompPortalUtils.setBadPermissions(user, response, "createPortalAdmin");
+ } else {
+ fieldsValidator = portalAdminService.createPortalAdmin(userId);
+ int statusCode = fieldsValidator.httpStatusCode.intValue();
+ response.setStatus(statusCode);
+ if (statusCode == 200) {
+ AuditLog auditLog = new AuditLog();
+ auditLog.setUserId(user.getId());
+ auditLog.setActivityCode(EcompAuditLog.CD_ACTIVITY_ADD_PORTAL_ADMIN);
+ auditLog.setAffectedRecordId(userId);
+ try {
+ auditService.logActivity(auditLog, null);
+ } catch (Exception e) {
+ logger.error(EELFLoggerDelegate.errorLogger, "createPortalAdmin: failed for save audit log", e);
+ }
+ MDC.put(EPCommonSystemProperties.AUDITLOG_BEGIN_TIMESTAMP, EPEELFLoggerAdvice.getCurrentDateTimeUTC());
+ MDC.put(EPCommonSystemProperties.AUDITLOG_END_TIMESTAMP, EPEELFLoggerAdvice.getCurrentDateTimeUTC());
+ EcompPortalUtils.calculateDateTimeDifferenceForLog(
+ MDC.get(EPCommonSystemProperties.AUDITLOG_BEGIN_TIMESTAMP),
+ MDC.get(EPCommonSystemProperties.AUDITLOG_END_TIMESTAMP));
+ logger.info(EELFLoggerDelegate.auditLogger,
+ EPLogUtil.formatAuditLogMessage("PortalAdminController.createPortalAdmin",
+ EcompAuditLog.CD_ACTIVITY_ADD_PORTAL_ADMIN, user.getOrgUserId(), userId,
+ "A new Portal Admin has been added"));
+ MDC.remove(EPCommonSystemProperties.AUDITLOG_BEGIN_TIMESTAMP);
+ MDC.remove(EPCommonSystemProperties.AUDITLOG_END_TIMESTAMP);
+ MDC.remove(SystemProperties.MDC_TIMER);
+ }
+ }
+ EcompPortalUtils.logAndSerializeObject(logger, "/portalAdmin", "POST result =", response.getStatus());
+
+ return fieldsValidator;
+ }
+
+ @RequestMapping(value = { "/portalApi/portalAdmin/{userInfo}" }, method = RequestMethod.DELETE)
+ public FieldsValidator deletePortalAdmin(HttpServletRequest request, @PathVariable("userInfo") String userInfo,
+ HttpServletResponse response) {
+ int userIdIdx = userInfo.indexOf("-");
+ Long userId = null;
+ String sbcid = null;
+ FieldsValidator fieldsValidator = null;
+ try {
+ if (userIdIdx == -1) {
+ logger.error(EELFLoggerDelegate.errorLogger, "deletePortalAdmin missing userId");
+ return fieldsValidator;
+ } else {
+ String userIdStr = userInfo.substring(0, userIdIdx);
+ userId = Long.valueOf(userIdStr);
+ sbcid = userInfo.substring(userIdIdx + 1, userInfo.length());
+ }
+ } catch (Exception e) {
+ logger.error(EELFLoggerDelegate.errorLogger, "deletePortalAdmin error while parsing the userInfo", e);
+ }
+ EPUser user = EPUserUtils.getUserSession(request);
+ if (!adminRolesService.isSuperAdmin(user)) {
+ EcompPortalUtils.setBadPermissions(user, response, "deletePortalAdmin");
+ } else {
+ fieldsValidator = portalAdminService.deletePortalAdmin(userId);
+ int statusCode = fieldsValidator.httpStatusCode.intValue();
+ response.setStatus(statusCode);
+ if (statusCode == 200) {
+ AuditLog auditLog = new AuditLog();
+ auditLog.setUserId(user.getId());
+ auditLog.setActivityCode(EcompAuditLog.CD_ACTIVITY_DELETE_PORTAL_ADMIN);
+ auditLog.setAffectedRecordId(sbcid);
+ auditService.logActivity(auditLog, null);
+
+ MDC.put(EPCommonSystemProperties.AUDITLOG_BEGIN_TIMESTAMP, EPEELFLoggerAdvice.getCurrentDateTimeUTC());
+ MDC.put(EPCommonSystemProperties.AUDITLOG_END_TIMESTAMP, EPEELFLoggerAdvice.getCurrentDateTimeUTC());
+ EcompPortalUtils.calculateDateTimeDifferenceForLog(
+ MDC.get(EPCommonSystemProperties.AUDITLOG_BEGIN_TIMESTAMP),
+ MDC.get(EPCommonSystemProperties.AUDITLOG_END_TIMESTAMP));
+ logger.info(EELFLoggerDelegate.auditLogger,
+ EPLogUtil.formatAuditLogMessage("PortalAdminController.deletePortalAdmin",
+ EcompAuditLog.CD_ACTIVITY_DELETE_PORTAL_ADMIN, user.getOrgUserId(), sbcid,
+ "A Portal Admin has been deleted"));
+ MDC.remove(EPCommonSystemProperties.AUDITLOG_BEGIN_TIMESTAMP);
+ MDC.remove(EPCommonSystemProperties.AUDITLOG_END_TIMESTAMP);
+ MDC.remove(SystemProperties.MDC_TIMER);
+ }
+ }
+ EcompPortalUtils.logAndSerializeObject(logger, "/portalAdmin", "DELETE result =", response.getStatus());
+
+ return fieldsValidator;
+ }
+
+ @RequestMapping(value = {
+ "/portalApi/adminAppsRoles/{appId}" }, method = RequestMethod.GET, produces = "application/json")
+ public List<EPRole> getRolesByApp(HttpServletRequest request, @PathVariable("appId") Long appId,
+ HttpServletResponse response) {
+ EPUser user = EPUserUtils.getUserSession(request);
+ List<EPRole> rolesByApp = null;
+
+ try {
+ if (user == null) {
+ EcompPortalUtils.setBadPermissions(user, response, "getUserApps");
+ } else {
+ rolesByApp = adminRolesService.getRolesByApp(user, appId);
+ }
+ } catch (Exception e) {
+ logger.error(EELFLoggerDelegate.errorLogger, "getRolesByApp failed", e);
+ }
+
+ return rolesByApp;
+ }
+
+}
diff --git a/ecomp-portal-BE-common/src/main/java/org/onap/portalapp/portal/controller/RoleManageController.java b/ecomp-portal-BE-common/src/main/java/org/onap/portalapp/portal/controller/RoleManageController.java
new file mode 100644
index 00000000..1433fb21
--- /dev/null
+++ b/ecomp-portal-BE-common/src/main/java/org/onap/portalapp/portal/controller/RoleManageController.java
@@ -0,0 +1,747 @@
+/*-
+ * ============LICENSE_START==========================================
+ * ONAP Portal
+ * ===================================================================
+ * Copyright (C) 2017 AT&T Intellectual Property. All rights reserved.
+ * ===================================================================
+ *
+ * Unless otherwise specified, all software contained herein is licensed
+ * under the Apache License, Version 2.0 (the "License");
+ * you may not use this software 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.
+ *
+ * Unless otherwise specified, all documentation contained herein is licensed
+ * under the Creative Commons License, Attribution 4.0 Intl. (the "License");
+ * you may not use this documentation except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * https://creativecommons.org/licenses/by/4.0/
+ *
+ * Unless required by applicable law or agreed to in writing, documentation
+ * 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.
+ *
+ * ============LICENSE_END============================================
+ *
+ * ECOMP is a trademark and service mark of AT&T Intellectual Property.
+ */
+package org.onap.portalapp.portal.controller;
+
+import java.io.IOException;
+import java.util.HashMap;
+import java.util.Iterator;
+import java.util.List;
+import java.util.Map;
+import java.util.Set;
+import java.util.TreeSet;
+
+import javax.servlet.http.HttpServletRequest;
+import javax.servlet.http.HttpServletResponse;
+
+import org.apache.commons.lang.StringUtils;
+import org.json.JSONObject;
+import org.onap.portalapp.controller.EPRestrictedBaseController;
+import org.onap.portalapp.controller.core.RoleController;
+import org.onap.portalapp.controller.core.RoleListController;
+import org.onap.portalapp.portal.domain.CentralV2RoleFunction;
+import org.onap.portalapp.portal.domain.CentralizedApp;
+import org.onap.portalapp.portal.domain.EPApp;
+import org.onap.portalapp.portal.domain.EPUser;
+import org.onap.portalapp.portal.domain.EcompAuditLog;
+import org.onap.portalapp.portal.ecomp.model.PortalRestResponse;
+import org.onap.portalapp.portal.ecomp.model.PortalRestStatusEnum;
+import org.onap.portalapp.portal.exceptions.DuplicateRecordException;
+import org.onap.portalapp.portal.exceptions.InvalidApplicationException;
+import org.onap.portalapp.portal.exceptions.InvalidRoleException;
+import org.onap.portalapp.portal.exceptions.NonCentralizedAppException;
+import org.onap.portalapp.portal.logging.aop.EPAuditLog;
+import org.onap.portalapp.portal.logging.aop.EPEELFLoggerAdvice;
+import org.onap.portalapp.portal.logging.logic.EPLogUtil;
+import org.onap.portalapp.portal.service.AdminRolesService;
+import org.onap.portalapp.portal.service.EPAppService;
+import org.onap.portalapp.portal.service.ExternalAccessRolesService;
+import org.onap.portalapp.portal.transport.CentralV2Role;
+import org.onap.portalapp.portal.transport.ExternalRequestFieldsValidator;
+import org.onap.portalapp.portal.utils.EPCommonSystemProperties;
+import org.onap.portalapp.portal.utils.EcompPortalUtils;
+import org.onap.portalapp.portal.utils.PortalConstants;
+import org.onap.portalapp.util.EPUserUtils;
+import org.onap.portalsdk.core.domain.AuditLog;
+import org.onap.portalsdk.core.domain.Role;
+import org.onap.portalsdk.core.logging.logic.EELFLoggerDelegate;
+import org.onap.portalsdk.core.service.AuditService;
+import org.onap.portalsdk.core.util.SystemProperties;
+import org.onap.portalsdk.core.web.support.JsonMessage;
+import org.slf4j.MDC;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.context.annotation.EnableAspectJAutoProxy;
+import org.springframework.http.ResponseEntity;
+import org.springframework.web.bind.annotation.PathVariable;
+import org.springframework.web.bind.annotation.RequestBody;
+import org.springframework.web.bind.annotation.RequestMapping;
+import org.springframework.web.bind.annotation.RequestMethod;
+import org.springframework.web.bind.annotation.RestController;
+import org.springframework.web.servlet.ModelAndView;
+
+import com.fasterxml.jackson.databind.DeserializationFeature;
+import com.fasterxml.jackson.databind.JsonNode;
+import com.fasterxml.jackson.databind.ObjectMapper;
+import com.fasterxml.jackson.databind.type.TypeFactory;
+
+/**
+ * Proxies REST calls to role-management functions that arrive on paths
+ * /portalApi/* over to controller methods provided by the SDK-Core library.
+ * Those controller methods are mounted on paths not exposed by the Portal FE.
+ */
+@RestController
+@org.springframework.context.annotation.Configuration
+@EnableAspectJAutoProxy
+@EPAuditLog
+public class RoleManageController extends EPRestrictedBaseController {
+ private static final String ROLE_INVALID_CHARS = "%=():,\"\"";
+
+ private static EELFLoggerDelegate logger = EELFLoggerDelegate.getLogger(RoleManageController.class);
+
+ @Autowired
+ private RoleController roleController;
+
+ @Autowired
+ private RoleListController roleListController;
+
+ @Autowired
+ private EPAppService appService;
+
+ @Autowired
+ private AuditService auditService;
+
+ @Autowired
+ private ExternalAccessRolesService externalAccessRolesService;
+
+
+ @Autowired
+ private AdminRolesService adminRolesService;
+
+ /**
+ * Calls an SDK-Core library method that gets the available roles and writes
+ * them to the request object. Portal specifies a Hibernate mappings from
+ * the Role class to the fn_role_v view, which ensures that only Portal
+ * (app_id is null) roles are fetched.
+ *
+ * Any method declared void (no return value) or returning null causes the
+ * audit log aspect method to declare failure. TODO: should return a JSON
+ * string.
+ *
+ * @param request
+ * @param response
+ * @throws Exception
+ */
+
+ @RequestMapping(value = { "/portalApi/get_roles/{appId}" }, method = RequestMethod.GET)
+ public void getRoles(HttpServletRequest request, HttpServletResponse response, @PathVariable("appId") Long appId) throws Exception {
+ try {
+ EPUser user = EPUserUtils.getUserSession(request);
+ EPApp requestedApp = appService.getApp(appId);
+ if (isAuthorizedUser(user, requestedApp)) {
+ fieldsValidation(requestedApp);
+ if (requestedApp.getCentralAuth()) {
+ List<CentralV2Role> answer = null;
+ Map<String, Object> model = new HashMap<>();
+ ObjectMapper mapper = new ObjectMapper();
+ answer = externalAccessRolesService.getRolesForApp(requestedApp.getUebKey());
+ model.put("availableRoles", answer);
+ JsonMessage msg = new JsonMessage(mapper.writeValueAsString(model));
+ JSONObject j = new JSONObject(msg);
+ response.getWriter().write(j.toString());
+ } else
+ throw new NonCentralizedAppException(requestedApp.getName());
+ } else {
+ logger.info(EELFLoggerDelegate.auditLogger, "RoleManageController.getRoles, Unauthorized user");
+ SendErrorForUnauthorizedUser(response, user);
+ }
+
+ } catch (Exception e) {
+ logger.error(EELFLoggerDelegate.errorLogger, "getRoles failed", e);
+ }
+ }
+
+
+
+ @RequestMapping(value = { "/portalApi/role_list/toggleRole/{appId}/{roleId}" }, method = RequestMethod.POST)
+ public Map<String, Object> toggleRole(HttpServletRequest request, HttpServletResponse response, @PathVariable("appId") Long appId,
+ @PathVariable("roleId") Long roleId) throws Exception {
+ EPApp requestedApp = null;
+ String restcallStatus = null;
+ HashMap<String, Object> responseMap = new HashMap<>();
+ EPUser user = EPUserUtils.getUserSession(request);
+ try {
+ requestedApp = appService.getApp(appId);
+ if (isAuthorizedUser(user, requestedApp)) {
+ fieldsValidation(requestedApp);
+ ObjectMapper mapper = new ObjectMapper();
+ mapper.configure(DeserializationFeature.FAIL_ON_UNKNOWN_PROPERTIES, false);
+ CentralV2Role domainRole = externalAccessRolesService.getRoleInfo(roleId, requestedApp.getUebKey());
+ // role. toggle active ind
+ boolean active = domainRole.isActive();
+ domainRole.setActive(!active);
+
+ String result = mapper.writeValueAsString(domainRole);
+ Role newRole = externalAccessRolesService.ConvertCentralRoleToRole(result);
+ ExternalRequestFieldsValidator externalRequestFieldsValidator = externalAccessRolesService
+ .saveRoleForApplication(newRole, requestedApp.getUebKey());
+ boolean getAddResponse = externalRequestFieldsValidator.isResult();
+ if (getAddResponse) {
+ restcallStatus = "Success";
+ logger.info(EELFLoggerDelegate.auditLogger, "Toggle active status for role " + domainRole.getId());
+ } else {
+ restcallStatus = "Toggle Role Failed";
+ logger.info(EELFLoggerDelegate.auditLogger, "Toggle Role Failed " + domainRole.getId());
+ }
+ responseMap.put("restcallStatus", restcallStatus);
+ responseMap.put("availableRoles", externalAccessRolesService.getRolesForApp(requestedApp.getUebKey()));
+ } else {
+ logger.info(EELFLoggerDelegate.auditLogger, "RoleManageController.toggleRole, Unauthorized user");
+ EcompPortalUtils.setBadPermissions(user, response, "createAdmin");
+ responseMap.put("restcallStatus", " Unauthorized user");
+ }
+ } catch (Exception e) {
+ logger.error(EELFLoggerDelegate.errorLogger, "toggleRole failed", e);
+ throw e;
+ }
+ return responseMap;
+ }
+
+ @RequestMapping(value = { "/portalApi/role_list/removeRole/{appId}/{roleId}" }, method = RequestMethod.POST)
+ public Map<String, Object> removeRole(HttpServletRequest request, HttpServletResponse response, @PathVariable("appId") Long appId,
+ @PathVariable("roleId") Long roleId) throws Exception {
+
+ EPUser user = EPUserUtils.getUserSession(request);
+ EPApp requestedApp = null;
+ String restCallStatus = null;
+ HashMap<String, Object> responseMap = new HashMap<>();
+ ExternalRequestFieldsValidator externalRequestFieldsValidator = null;
+ try {
+ requestedApp = appService.getApp(appId);
+ if (isAuthorizedUser(user, requestedApp)) {
+ fieldsValidation(requestedApp);
+ if (requestedApp.getCentralAuth()) {
+ externalRequestFieldsValidator = externalAccessRolesService.deleteDependencyRoleRecord(roleId,
+ requestedApp.getUebKey(), user.getOrgUserId());
+ boolean deleteResponse = externalRequestFieldsValidator.isResult();
+ if (deleteResponse) {
+ restCallStatus = "Success";
+ EPUser requestedUser = (EPUser) externalAccessRolesService.getUser(user.getOrgUserId()).get(0);
+ EPApp app = (EPApp) externalAccessRolesService.getApp(requestedApp.getUebKey()).get(0);
+ logger.info(EELFLoggerDelegate.applicationLogger, "deleteRole: succeeded for app {}, role {}",
+ app.getId(), roleId);
+ String activityCode = EcompAuditLog.CD_ACTIVITY_EXTERNAL_AUTH_DELETE_ROLE;
+ AuditLog auditLog = getAuditInfo(requestedUser, activityCode);
+ auditLog.setComments(EcompPortalUtils.truncateString(
+ "Deleted role for app:" + app.getId() + " and role:'" + roleId + "'",
+ PortalConstants.AUDIT_LOG_COMMENT_SIZE));
+ auditService.logActivity(auditLog, null);
+ MDC.put(EPCommonSystemProperties.AUDITLOG_BEGIN_TIMESTAMP,
+ EPEELFLoggerAdvice.getCurrentDateTimeUTC());
+ MDC.put(EPCommonSystemProperties.AUDITLOG_END_TIMESTAMP,
+ EPEELFLoggerAdvice.getCurrentDateTimeUTC());
+ EcompPortalUtils.calculateDateTimeDifferenceForLog(
+ MDC.get(EPCommonSystemProperties.AUDITLOG_BEGIN_TIMESTAMP),
+ MDC.get(EPCommonSystemProperties.AUDITLOG_END_TIMESTAMP));
+ logger.info(EELFLoggerDelegate.auditLogger,
+ EPLogUtil.formatAuditLogMessage("RoleManageController.removeRole",
+ EcompAuditLog.CD_ACTIVITY_EXTERNAL_AUTH_DELETE_ROLE,
+ String.valueOf(requestedUser.getId()), requestedUser.getOrgUserId(),
+ roleId.toString()));
+ MDC.remove(EPCommonSystemProperties.AUDITLOG_BEGIN_TIMESTAMP);
+ MDC.remove(EPCommonSystemProperties.AUDITLOG_END_TIMESTAMP);
+ MDC.remove(SystemProperties.MDC_TIMER);
+ } else {
+ restCallStatus = "Remove Role failed";
+ responseMap.put("error", externalRequestFieldsValidator.getDetailMessage());
+ logger.error(EELFLoggerDelegate.errorLogger, "removeRole failed");
+ }
+ responseMap.put("restCallStatus", restCallStatus);
+ responseMap.put("availableRoles",
+ externalAccessRolesService.getRolesForApp(requestedApp.getUebKey()));
+ } else
+ throw new NonCentralizedAppException(requestedApp.getName());
+ } else {
+ logger.info(EELFLoggerDelegate.auditLogger, "RoleManageController.removeRole, Unauthorized user");
+ EcompPortalUtils.setBadPermissions(user, response, "createAdmin");
+ responseMap.put("restCallStatus", " Unauthorized user");
+ }
+ } catch (Exception e) {
+ logger.error(EELFLoggerDelegate.errorLogger, "removeRole failed", e);
+ throw e;
+ }
+ return responseMap;
+ }
+
+ @RequestMapping(value = { "/portalApi/role/saveRole/{appId}" }, method = RequestMethod.POST)
+ public Map<String, Object> saveRole(HttpServletRequest request, HttpServletResponse response,
+ @PathVariable("appId") Long appId) throws Exception {
+ EPUser user = EPUserUtils.getUserSession(request);
+ String responseString = null;
+ HashMap<String, Object> responseMap = new HashMap<>();
+ try {
+ EPApp requestedApp = appService.getApp(appId);
+ if (isAuthorizedUser(user, requestedApp)) {
+ fieldsValidation(requestedApp);
+ if (requestedApp != null && requestedApp.getCentralAuth().equals(true)) {
+ ObjectMapper mapper = new ObjectMapper();
+ mapper.configure(DeserializationFeature.FAIL_ON_UNKNOWN_PROPERTIES, false);
+ JsonNode root = mapper.readTree(request.getReader());
+ CentralV2Role role = mapper.readValue(root.get("role").toString(), CentralV2Role.class);
+
+ List<CentralV2Role> childRoles = mapper.readValue(root.get("childRoles").toString(),
+ TypeFactory.defaultInstance().constructCollectionType(List.class, CentralV2Role.class));
+ List<CentralV2RoleFunction> roleFunctions = mapper.readValue(root.get("roleFunctions").toString(),
+ TypeFactory.defaultInstance().constructCollectionType(List.class,
+ CentralV2RoleFunction.class));
+ if (role.getId() != null && StringUtils.containsAny(role.getName(), ROLE_INVALID_CHARS)) {
+ throw new InvalidRoleException("Invalid role name found for '" + role.getName()
+ + "'. Any one of the following characters '%,(),=,:,comma, and double quotes' are not allowed");
+ }
+ CentralV2Role domainRole;
+ if (role.getId() != null) {
+ domainRole = externalAccessRolesService.getRoleInfo(role.getId(), requestedApp.getUebKey());
+ domainRole.setName(role.getName());
+ domainRole.setPriority(role.getPriority());
+ } else {
+ // check for existing role of same name
+ List<CentralV2Role> roles = externalAccessRolesService.getRolesForApp(requestedApp.getUebKey());
+ for (CentralV2Role existRole : roles)
+ if (existRole.getName().equalsIgnoreCase(role.getName()))
+ throw new DuplicateRecordException("role already exists: " + existRole.getName());
+
+ domainRole = new CentralV2Role();
+ domainRole.setName(role.getName());
+ domainRole.setPriority(role.getPriority());
+ if (role.getChildRoles() != null && role.getChildRoles().size() > 0) {
+ for (Object childRole : childRoles) {
+ domainRole.addChildRole((CentralV2Role) childRole);
+ }
+ }
+ }
+ if (role.getRoleFunctions() != null && role.getRoleFunctions().size() > 0) {
+ domainRole.setRoleFunctions(new TreeSet<CentralV2RoleFunction>());
+ for (CentralV2RoleFunction roleFunction : roleFunctions) {
+ if (roleFunction.getType() == null && roleFunction.getAction() == null) {
+ throw new InvalidRoleException("Invalid role function type:" + roleFunction.getType()
+ + " and action: " + roleFunction.getAction() + " found while saving!");
+ }
+ roleFunction.setCode(externalAccessRolesService.encodeFunctionCode(roleFunction.getCode()));
+ roleFunction.setCode(roleFunction.getType() + "|" + roleFunction.getCode() + "|"
+ + roleFunction.getAction());
+ domainRole.addRoleFunction((CentralV2RoleFunction) roleFunction);
+ }
+ } else {
+ domainRole.setRoleFunctions(new TreeSet<>());
+ }
+ String result = mapper.writeValueAsString(domainRole);
+ Role newRole = externalAccessRolesService.ConvertCentralRoleToRole(result);
+ ExternalRequestFieldsValidator externalRequestFieldsValidator = externalAccessRolesService
+ .saveRoleForApplication(newRole, requestedApp.getUebKey());
+ boolean getAddResponse = externalRequestFieldsValidator.isResult();
+ if (getAddResponse) {
+ String activityCode = (role.getId() == null) ? EcompAuditLog.CD_ACTIVITY_EXTERNAL_AUTH_ADD_ROLE
+ : EcompAuditLog.CD_ACTIVITY_EXTERNAL_AUTH_UPDATE_ROLE_AND_FUNCTION;
+ logger.info(EELFLoggerDelegate.applicationLogger, "saveRole: succeeded for app {}, role {}",
+ requestedApp.getId(), role.getName());
+ AuditLog auditLog = new AuditLog();
+ auditLog.setUserId(user.getId());
+ auditLog.setActivityCode(activityCode);
+ auditLog.setComments(EcompPortalUtils.truncateString(
+ "saveRole role for app:" + requestedApp.getId() + " and role:'" + role.getName() + "'",
+ PortalConstants.AUDIT_LOG_COMMENT_SIZE));
+ auditLog.setAffectedRecordId(user.getOrgUserId());
+ auditService.logActivity(auditLog, null);
+ MDC.put(EPCommonSystemProperties.AUDITLOG_BEGIN_TIMESTAMP,
+ EPEELFLoggerAdvice.getCurrentDateTimeUTC());
+ MDC.put(EPCommonSystemProperties.AUDITLOG_END_TIMESTAMP,
+ EPEELFLoggerAdvice.getCurrentDateTimeUTC());
+ EcompPortalUtils.calculateDateTimeDifferenceForLog(
+ MDC.get(EPCommonSystemProperties.AUDITLOG_BEGIN_TIMESTAMP),
+ MDC.get(EPCommonSystemProperties.AUDITLOG_END_TIMESTAMP));
+ logger.info(EELFLoggerDelegate.auditLogger,
+ EPLogUtil.formatAuditLogMessage("RoleManageController.saveRole", activityCode,
+ String.valueOf(user.getId()), user.getOrgUserId(), role.getName()));
+ MDC.remove(EPCommonSystemProperties.AUDITLOG_BEGIN_TIMESTAMP);
+ MDC.remove(EPCommonSystemProperties.AUDITLOG_END_TIMESTAMP);
+ MDC.remove(SystemProperties.MDC_TIMER);
+ responseMap.put("status", "Success");
+ responseMap.put("role", domainRole);
+ } else {
+ if (externalRequestFieldsValidator.getDetailMessage().contains("406")) {
+ externalRequestFieldsValidator.setDetailMessage("Failed to save role for '" + role.getName()
+ + "'. Any one of the following characters '%,(),=,:,comma, and double quotes' are not allowed");
+ }
+ responseMap.put("status", "SaveRole Failed");
+ responseMap.put("role", responseString);
+ responseMap.put("error", externalRequestFieldsValidator.getDetailMessage());
+ logger.error(EELFLoggerDelegate.errorLogger, "saveRole failed");
+ }
+ }
+ } else {
+ logger.info(EELFLoggerDelegate.auditLogger, "RoleManageController.saveRole, Unauthorized user");
+ EcompPortalUtils.setBadPermissions(user, response, "createAdmin");
+ responseMap.put("error", " Unauthorized user");
+ }
+ } catch (Exception e) {
+ logger.error(EELFLoggerDelegate.errorLogger, "saveRole failed", e);
+ responseMap.put("error", e.getMessage());
+ }
+ return responseMap;
+ }
+
+ @RequestMapping(value = { "/portalApi/role/removeRoleFunction" }, method = RequestMethod.POST)
+ public ModelAndView removeRoleRoleFunction(HttpServletRequest request, HttpServletResponse response)
+ throws Exception {
+ return getRoleController().removeRoleFunction(request, response);
+ }
+
+ @RequestMapping(value = { "/portalApi/role/addRoleFunction" }, method = RequestMethod.POST)
+ public ModelAndView addRoleRoRoleFunction(HttpServletRequest request, HttpServletResponse response)
+ throws Exception {
+ return getRoleController().addRoleFunction(request, response);
+ }
+
+ @RequestMapping(value = { "/portalApi/role/removeChildRole" }, method = RequestMethod.POST)
+ public ModelAndView removeChildRole(HttpServletRequest request, HttpServletResponse response) throws Exception {
+ return getRoleController().removeChildRole(request, response);
+ }
+
+ @RequestMapping(value = { "/portalApi/role/addChildRole" }, method = RequestMethod.POST)
+ public ModelAndView addChildRole(HttpServletRequest request, HttpServletResponse response) throws Exception {
+ return getRoleController().addChildRole(request, response);
+ }
+
+ @RequestMapping(value = { "/portalApi/get_role/{appId}/{roleId}" }, method = RequestMethod.GET)
+ public void getRole(HttpServletRequest request, HttpServletResponse response, @PathVariable("appId") Long appId,
+ @PathVariable("roleId") Long roleId) throws Exception {
+ try {
+ EPUser user = EPUserUtils.getUserSession(request);
+ ObjectMapper mapper = new ObjectMapper();
+ EPApp requestedApp = appService.getApp(appId);
+ if (isAuthorizedUser(user, requestedApp)) {
+ fieldsValidation(requestedApp);
+ if (requestedApp.getCentralAuth()) {
+ CentralV2Role answer = externalAccessRolesService.getRoleInfo(roleId, requestedApp.getUebKey());
+ logger.info(EELFLoggerDelegate.applicationLogger, "role_id" + roleId);
+ Map<String, Object> model = new HashMap<>();
+ model.put("availableRoleFunctions", mapper.writeValueAsString(
+ externalAccessRolesService.getRoleFuncList(requestedApp.getUebKey())));
+ model.put("availableRoles",
+ mapper.writeValueAsString(getAvailableChildRoles(requestedApp.getUebKey(), roleId)));
+ model.put("role", mapper.writeValueAsString(answer));
+ JsonMessage msg = new JsonMessage(mapper.writeValueAsString(model));
+ JSONObject j = new JSONObject(msg);
+ response.getWriter().write(j.toString());
+ } else
+ throw new NonCentralizedAppException(requestedApp.getName());
+ } else {
+ logger.info(EELFLoggerDelegate.auditLogger,
+ "RoleManageController.getRoleFunctionList, Unauthorized user");
+ SendErrorForUnauthorizedUser(response, user);
+ }
+ } catch (Exception e) {
+ logger.error(EELFLoggerDelegate.errorLogger, "getRole failed", e);
+ throw e;
+ }
+ }
+
+ @RequestMapping(value = { "/portalApi/get_role_functions/{appId}" }, method = RequestMethod.GET)
+ public void getRoleFunctionList(HttpServletRequest request, HttpServletResponse response,
+ @PathVariable("appId") Long appId) throws Exception {
+ try {
+ EPUser user = EPUserUtils.getUserSession(request);
+ EPApp requestedApp = appService.getApp(appId);
+ if (isAuthorizedUser(user, requestedApp)) {
+ fieldsValidation(requestedApp);
+ if (requestedApp.getCentralAuth()) {
+ List<CentralV2RoleFunction> answer = null;
+ Map<String, Object> model = new HashMap<>();
+ ObjectMapper mapper = new ObjectMapper();
+ answer = externalAccessRolesService.getRoleFuncList(requestedApp.getUebKey());
+ model.put("availableRoleFunctions", answer);
+ JsonMessage msg = new JsonMessage(mapper.writeValueAsString(model));
+ JSONObject j = new JSONObject(msg);
+ response.getWriter().write(j.toString());
+ } else
+ throw new NonCentralizedAppException(requestedApp.getName());
+ } else {
+ logger.info(EELFLoggerDelegate.auditLogger,
+ "RoleManageController.getRoleFunctionList, Unauthorized user");
+ EcompPortalUtils.setBadPermissions(user, response, "createAdmin");
+ response.getWriter().write("Unauthorized User");
+ }
+ } catch (Exception e) {
+ logger.error(EELFLoggerDelegate.errorLogger, "getRoleFunctionList failed", e);
+ throw e;
+ }
+ }
+
+ @RequestMapping(value = { "/portalApi/role_function_list/saveRoleFunction/{appId}" }, method = RequestMethod.POST)
+ public PortalRestResponse<String> saveRoleFunction(HttpServletRequest request, HttpServletResponse response, @RequestBody CentralV2RoleFunction roleFunc,
+ @PathVariable("appId") Long appId) throws Exception {
+ EPUser user = EPUserUtils.getUserSession(request);
+ boolean saveOrUpdateResponse = false;
+ try {
+ EPApp requestedApp = appService.getApp(appId);
+ if (isAuthorizedUser(user, requestedApp)) {
+ fieldsValidation(requestedApp);
+ if (requestedApp.getCentralAuth()) {
+ saveOrUpdateResponse = externalAccessRolesService.saveCentralRoleFunction(roleFunc, requestedApp);
+ if (saveOrUpdateResponse) {
+ EPUser requestedUser = externalAccessRolesService.getUser(user.getOrgUserId()).get(0);
+ EPApp app = externalAccessRolesService.getApp(requestedApp.getUebKey()).get(0);
+ CentralV2RoleFunction function = externalAccessRolesService.getRoleFunction(roleFunc.getCode(),
+ requestedApp.getUebKey());
+ String activityCode = (function.getCode() == null)
+ ? EcompAuditLog.CD_ACTIVITY_EXTERNAL_AUTH_ADD_FUNCTION
+ : EcompAuditLog.CD_ACTIVITY_EXTERNAL_AUTH_UPDATE_FUNCTION;
+ logger.info(EELFLoggerDelegate.applicationLogger,
+ "saveRoleFunction: succeeded for app {}, function {}", app.getId(), roleFunc.getCode());
+ AuditLog auditLog = getAuditInfo(requestedUser, activityCode);
+ auditLog.setComments(EcompPortalUtils.truncateString("saveRoleFunction role for app:"
+ + app.getId() + " and function:'" + roleFunc.getCode() + "'",
+ PortalConstants.AUDIT_LOG_COMMENT_SIZE));
+ auditService.logActivity(auditLog, null);
+ MDC.put(EPCommonSystemProperties.AUDITLOG_BEGIN_TIMESTAMP,
+ EPEELFLoggerAdvice.getCurrentDateTimeUTC());
+ MDC.put(EPCommonSystemProperties.AUDITLOG_END_TIMESTAMP,
+ EPEELFLoggerAdvice.getCurrentDateTimeUTC());
+ EcompPortalUtils.calculateDateTimeDifferenceForLog(
+ MDC.get(EPCommonSystemProperties.AUDITLOG_BEGIN_TIMESTAMP),
+ MDC.get(EPCommonSystemProperties.AUDITLOG_END_TIMESTAMP));
+ logger.info(EELFLoggerDelegate.auditLogger,
+ EPLogUtil.formatAuditLogMessage("RoleManageController.saveRoleFunction", activityCode,
+ String.valueOf(requestedUser.getId()), requestedUser.getOrgUserId(),
+ roleFunc.getCode()));
+ MDC.remove(EPCommonSystemProperties.AUDITLOG_BEGIN_TIMESTAMP);
+ MDC.remove(EPCommonSystemProperties.AUDITLOG_END_TIMESTAMP);
+ MDC.remove(SystemProperties.MDC_TIMER);
+ }
+ } else
+ throw new NonCentralizedAppException(requestedApp.getName() + " is not Centralized Application");
+ } else {
+ logger.info(EELFLoggerDelegate.auditLogger,
+ "RoleManageController.saveRoleFunction, Unauthorized user");
+ EcompPortalUtils.setBadPermissions(user, response, "createAdmin");
+ return new PortalRestResponse<>(PortalRestStatusEnum.ERROR, "Unauthorized User", "Failure");
+ }
+ } catch (Exception e) {
+ logger.error(EELFLoggerDelegate.errorLogger, "saveRoleFunction: Failed", e);
+ return new PortalRestResponse<>(PortalRestStatusEnum.ERROR, e.getMessage(), "Failure");
+ }
+ return new PortalRestResponse<>(PortalRestStatusEnum.OK, "Saved Successfully!", "Success");
+ }
+
+ @RequestMapping(value = { "/portalApi/role_function_list/removeRoleFunction/{appId}" }, method = RequestMethod.POST)
+ public PortalRestResponse<String> removeRoleFunction(HttpServletRequest request, HttpServletResponse response,
+ @RequestBody String roleFunc, @PathVariable("appId") Long appId) throws Exception {
+ EPUser user = EPUserUtils.getUserSession(request);
+ try {
+ EPApp requestedApp = appService.getApp(appId);
+ if (isAuthorizedUser(user, requestedApp)) {
+ fieldsValidation(requestedApp);
+ if (requestedApp.getCentralAuth()) {
+ ObjectMapper mapper = new ObjectMapper();
+ String data = roleFunc;
+ CentralV2RoleFunction availableRoleFunction = mapper.readValue(data, CentralV2RoleFunction.class);
+ CentralV2RoleFunction domainRoleFunction = externalAccessRolesService
+ .getRoleFunction(availableRoleFunction.getCode(), requestedApp.getUebKey());
+ boolean getDelFuncResponse = externalAccessRolesService
+ .deleteCentralRoleFunction(domainRoleFunction.getCode(), requestedApp);
+ if (getDelFuncResponse) {
+ logger.info(EELFLoggerDelegate.applicationLogger,
+ "deleteRoleFunction: succeeded for app {}, role {}", requestedApp.getId(),
+ domainRoleFunction.getCode());
+ String activityCode = EcompAuditLog.CD_ACTIVITY_EXTERNAL_AUTH_DELETE_FUNCTION;
+ AuditLog auditLog = getAuditInfo(user, activityCode);
+ auditLog.setComments(
+ EcompPortalUtils.truncateString(
+ "Deleted function for app:" + requestedApp.getId() + " and function code:'"
+ + domainRoleFunction.getCode() + "'",
+ PortalConstants.AUDIT_LOG_COMMENT_SIZE));
+ auditService.logActivity(auditLog, null);
+ MDC.put(EPCommonSystemProperties.AUDITLOG_BEGIN_TIMESTAMP,
+ EPEELFLoggerAdvice.getCurrentDateTimeUTC());
+ MDC.put(EPCommonSystemProperties.AUDITLOG_END_TIMESTAMP,
+ EPEELFLoggerAdvice.getCurrentDateTimeUTC());
+ EcompPortalUtils.calculateDateTimeDifferenceForLog(
+ MDC.get(EPCommonSystemProperties.AUDITLOG_BEGIN_TIMESTAMP),
+ MDC.get(EPCommonSystemProperties.AUDITLOG_END_TIMESTAMP));
+ logger.info(EELFLoggerDelegate.auditLogger,
+ EPLogUtil.formatAuditLogMessage("RoleManageController.removeRoleFunction",
+ EcompAuditLog.CD_ACTIVITY_EXTERNAL_AUTH_DELETE_FUNCTION,
+ String.valueOf(user.getId()), user.getOrgUserId(),
+ domainRoleFunction.getCode()));
+ MDC.remove(EPCommonSystemProperties.AUDITLOG_BEGIN_TIMESTAMP);
+ MDC.remove(EPCommonSystemProperties.AUDITLOG_END_TIMESTAMP);
+ MDC.remove(SystemProperties.MDC_TIMER);
+ logger.info(EELFLoggerDelegate.auditLogger,
+ "Remove role function " + domainRoleFunction.getName());
+ }
+ } else
+ throw new NonCentralizedAppException(requestedApp.getName() + " is not Centralized Application");
+ } else {
+ logger.info(EELFLoggerDelegate.auditLogger,
+ "RoleManageController.removeRoleFunction, Unauthorized user");
+ EcompPortalUtils.setBadPermissions(user, response, "createAdmin");
+ return new PortalRestResponse<>(PortalRestStatusEnum.ERROR, "Unauthorized User", "Failure");
+ }
+ } catch (Exception e) {
+ logger.error(EELFLoggerDelegate.errorLogger, "removeRoleFunction failed", e);
+ return new PortalRestResponse<>(PortalRestStatusEnum.ERROR, e.getMessage(), "Failure");
+ }
+ return new PortalRestResponse<>(PortalRestStatusEnum.OK, "Deleted Successfully!", "Success");
+ }
+
+ @RequestMapping(value = { "/portalApi/centralizedApps" }, method = RequestMethod.GET)
+ public List<CentralizedApp> getCentralizedAppRoles(HttpServletRequest request, HttpServletResponse response, String userId) throws IOException {
+ EPUser user = EPUserUtils.getUserSession(request);
+ List<CentralizedApp> applicationsList = null;
+ if (adminRolesService.isAccountAdmin(user) || adminRolesService.isSuperAdmin(user)) {
+ applicationsList = externalAccessRolesService.getCentralizedAppsOfUser(userId);
+ } else {
+ logger.info(EELFLoggerDelegate.auditLogger,
+ "RoleManageController.getCentralizedAppRoles, Unauthorized user");
+ EcompPortalUtils.setBadPermissions(user, response, "createAdmin");
+ }
+ return applicationsList;
+ }
+
+ public RoleListController getRoleListController() {
+ return roleListController;
+ }
+
+ public void setRoleListController(RoleListController roleListController) {
+ this.roleListController = roleListController;
+ }
+
+ public RoleController getRoleController() {
+ return roleController;
+ }
+
+ public void setRoleController(RoleController roleController) {
+ this.roleController = roleController;
+ }
+
+
+ @RequestMapping(value = { "/portalApi/syncRoles" }, method = RequestMethod.POST, produces = "application/json")
+ public PortalRestResponse<String> syncRoles(HttpServletRequest request, HttpServletResponse response,
+ @RequestBody Long appId) {
+ EPUser user = EPUserUtils.getUserSession(request);
+ try {
+ EPApp app = appService.getApp(appId);
+ if (isAuthorizedUser(user, app)) {
+ fieldsValidation(app);
+ externalAccessRolesService.syncApplicationRolesWithEcompDB(app);
+ } else {
+ logger.info(EELFLoggerDelegate.auditLogger,
+ "RoleManageController.syncRoles, Unauthorized user:" + user.getOrgUserId());
+ EcompPortalUtils.setBadPermissions(user, response, "createAdmin");
+ return new PortalRestResponse<>(PortalRestStatusEnum.ERROR, "Unauthorized User", "Failure");
+ }
+ } catch (Exception e) {
+ logger.error(EELFLoggerDelegate.errorLogger, "failed syncRoles", e);
+ return new PortalRestResponse<>(PortalRestStatusEnum.ERROR, e.getMessage(), "Failed");
+ }
+ return new PortalRestResponse<>(PortalRestStatusEnum.OK, "Sync roles completed successfully!", "Success");
+ }
+
+ @RequestMapping(value = { "/portalApi/syncFunctions" }, method = RequestMethod.POST, produces = "application/json")
+ public PortalRestResponse<String> syncFunctions(HttpServletRequest request, HttpServletResponse response,
+ @RequestBody Long appId) {
+ EPUser user = EPUserUtils.getUserSession(request);
+ try {
+ EPApp app = appService.getApp(appId);
+ if (isAuthorizedUser(user, app)) {
+ fieldsValidation(app);
+ externalAccessRolesService.syncRoleFunctionFromExternalAccessSystem(app);;
+ } else {
+ logger.info(EELFLoggerDelegate.auditLogger,
+ "RoleManageController.syncFunctions, Unauthorized user:" + user.getOrgUserId());
+ EcompPortalUtils.setBadPermissions(user, response, "createAdmin");
+ return new PortalRestResponse<>(PortalRestStatusEnum.ERROR, "Unauthorized User", "Failure");
+ }
+ } catch (Exception e) {
+ logger.error(EELFLoggerDelegate.errorLogger, "failed syncFunctions", e);
+ return new PortalRestResponse<>(PortalRestStatusEnum.ERROR, e.getMessage(), "Failed");
+ }
+ return new PortalRestResponse<>(PortalRestStatusEnum.OK, "Sync Functions completed successfully!", "Success");
+ }
+
+ public List<CentralV2Role> getAvailableChildRoles(String uebKey, Long roleId) throws Exception {
+ List<CentralV2Role> availableChildRoles = externalAccessRolesService.getRolesForApp(uebKey);
+ if (roleId == null || roleId == 0) {
+ return availableChildRoles;
+ }
+ CentralV2Role currentRole = externalAccessRolesService.getRoleInfo(roleId, uebKey);
+ Set<CentralV2Role> allParentRoles = new TreeSet<>();
+ allParentRoles = getAllParentRolesAsList(currentRole, allParentRoles);
+ Iterator<CentralV2Role> availableChildRolesIterator = availableChildRoles.iterator();
+ while (availableChildRolesIterator.hasNext()) {
+ CentralV2Role role = availableChildRolesIterator.next();
+ if (!role.isActive() || allParentRoles.contains(role) || role.getId().equals(roleId)) {
+ availableChildRolesIterator.remove();
+ }
+ }
+ return availableChildRoles;
+ }
+
+ private Set<CentralV2Role> getAllParentRolesAsList(CentralV2Role role, Set<CentralV2Role> allParentRoles) {
+ Set<CentralV2Role> parentRoles = role.getParentRoles();
+ allParentRoles.addAll(parentRoles);
+ Iterator<CentralV2Role> parentRolesIterator = parentRoles.iterator();
+ while (parentRolesIterator.hasNext()) {
+ getAllParentRolesAsList(parentRolesIterator.next(), allParentRoles);
+ }
+ return allParentRoles;
+ }
+
+ public AuditLog getAuditInfo(EPUser user, String activityCode)
+ {
+ AuditLog auditLog = new AuditLog();
+ auditLog.setUserId(user.getId());
+ auditLog.setActivityCode(activityCode);
+ auditLog.setAffectedRecordId(user.getOrgUserId());
+
+ return auditLog;
+ }
+
+ private void fieldsValidation(EPApp app) throws Exception{
+ app.getUebKey();
+ List<EPApp> appInfo = externalAccessRolesService.getApp(app.getUebKey());
+ if(appInfo.isEmpty()){
+ throw new InvalidApplicationException("Invalid uebkey");
+ }
+ if(!appInfo.isEmpty() && EcompPortalUtils.checkIfRemoteCentralAccessAllowed() && appInfo.get(0).getCentralAuth()){
+ ResponseEntity<String> response = externalAccessRolesService.getNameSpaceIfExists(appInfo.get(0));
+ if (response.getStatusCode().value() == HttpServletResponse.SC_NOT_FOUND)
+ throw new InvalidApplicationException("Invalid NameSpace");
+ }
+ }
+
+ private boolean isAuthorizedUser(EPUser user, EPApp requestedApp) {
+ if (user != null && (adminRolesService.isAccountAdminOfApplication(user, requestedApp)
+ || (adminRolesService.isSuperAdmin(user) && requestedApp.getId() == PortalConstants.PORTAL_APP_ID)))
+ return true;
+ return false;
+ }
+
+ private void SendErrorForUnauthorizedUser(HttpServletResponse response, EPUser user) throws IOException {
+ EcompPortalUtils.setBadPermissions(user, response, "createAdmin");
+ response.getWriter().write("Unauthorized User");
+ }
+}
diff --git a/ecomp-portal-BE-common/src/main/java/org/onap/portalapp/portal/controller/RolesApprovalSystemController.java b/ecomp-portal-BE-common/src/main/java/org/onap/portalapp/portal/controller/RolesApprovalSystemController.java
new file mode 100644
index 00000000..b4babfdf
--- /dev/null
+++ b/ecomp-portal-BE-common/src/main/java/org/onap/portalapp/portal/controller/RolesApprovalSystemController.java
@@ -0,0 +1,232 @@
+/*-
+ * ============LICENSE_START==========================================
+ * ONAP Portal
+ * ===================================================================
+ * Copyright (C) 2017 AT&T Intellectual Property. All rights reserved.
+ * ===================================================================
+ *
+ * Unless otherwise specified, all software contained herein is licensed
+ * under the Apache License, Version 2.0 (the "License");
+ * you may not use this software 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.
+ *
+ * Unless otherwise specified, all documentation contained herein is licensed
+ * under the Creative Commons License, Attribution 4.0 Intl. (the "License");
+ * you may not use this documentation except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * https://creativecommons.org/licenses/by/4.0/
+ *
+ * Unless required by applicable law or agreed to in writing, documentation
+ * 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.
+ *
+ * ============LICENSE_END============================================
+ *
+ * ECOMP is a trademark and service mark of AT&T Intellectual Property.
+ */
+
+package org.onap.portalapp.portal.controller;
+
+import java.util.ArrayList;
+
+import javax.servlet.http.HttpServletRequest;
+import javax.servlet.http.HttpServletResponse;
+
+import org.onap.portalapp.externalsystemapproval.model.ExternalSystemRoleApproval;
+import org.onap.portalapp.externalsystemapproval.model.ExternalSystemUser;
+import org.onap.portalapp.portal.ecomp.model.PortalRestResponse;
+import org.onap.portalapp.portal.ecomp.model.PortalRestStatusEnum;
+import org.onap.portalapp.portal.logging.aop.EPAuditLog;
+import org.onap.portalapp.portal.service.UserRolesService;
+import org.onap.portalapp.portal.transport.ExternalRequestFieldsValidator;
+import org.onap.portalsdk.core.logging.logic.EELFLoggerDelegate;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.context.annotation.Configuration;
+import org.springframework.context.annotation.EnableAspectJAutoProxy;
+import org.springframework.web.bind.annotation.RequestBody;
+import org.springframework.web.bind.annotation.RequestMapping;
+import org.springframework.web.bind.annotation.RequestMethod;
+import org.springframework.web.bind.annotation.RestController;
+
+import io.swagger.annotations.ApiOperation;
+
+@RestController
+@RequestMapping("/auxapi")
+@Configuration
+@EnableAspectJAutoProxy
+@EPAuditLog
+public class RolesApprovalSystemController implements BasicAuthenticationController {
+
+ private EELFLoggerDelegate logger = EELFLoggerDelegate.getLogger(RolesApprovalSystemController.class);
+
+ @Autowired
+ private UserRolesService userRolesService;
+
+ /**
+ * Creates an application user with the specified roles.
+ *
+ * @param request
+ * @param extSysUser
+ * @return PortalRestResponse with appropriate status value and message
+ */
+ @ApiOperation(value = "Creates an application user with the specified roles.", response = PortalRestResponse.class)
+ @RequestMapping(value = { "/userProfile" }, method = RequestMethod.POST, produces = "application/json")
+ public PortalRestResponse<String> postUserProfile(HttpServletRequest request,
+ @RequestBody ExternalSystemUser extSysUser, HttpServletResponse response) {
+ ExternalRequestFieldsValidator reqResult = null;
+ try {
+ logger.info(EELFLoggerDelegate.debugLogger, "postUserProfile: request received for app {}, user {}",
+ extSysUser.getApplicationName(), extSysUser.getLoginId());
+
+ validateExtSystemUser(extSysUser, true);
+ reqResult = userRolesService.setExternalRequestUserAppRole(extSysUser, "POST");
+ if (!reqResult.isResult())
+ throw new Exception(reqResult.getDetailMessage());
+ } catch (Exception e) {
+ logger.error(EELFLoggerDelegate.errorLogger, "postUserProfile: failed for app {}, user {}",
+ extSysUser.getApplicationName(), extSysUser.getLoginId(), e);
+ if(reqResult == null || (!reqResult.isResult() && !e.getMessage().contains("404") && !e.getMessage().contains("405"))){
+ response.setStatus(HttpServletResponse.SC_BAD_REQUEST);
+ return new PortalRestResponse<String>(PortalRestStatusEnum.ERROR,
+ e.getMessage(), "save user profile failed");
+ } else if(e.getMessage().contains("404")){
+ response.setStatus(HttpServletResponse.SC_NOT_FOUND);
+ return new PortalRestResponse<String>(PortalRestStatusEnum.ERROR,
+ e.getMessage(), "save user profile failed");
+ } else if(e.getMessage().contains("500")){
+ response.setStatus(HttpServletResponse.SC_INTERNAL_SERVER_ERROR);
+ return new PortalRestResponse<String>(PortalRestStatusEnum.ERROR,
+ e.getMessage(), "save user profile failed");
+ } else if (e.getMessage().contains("405")) {
+ response.setStatus(HttpServletResponse.SC_METHOD_NOT_ALLOWED);
+ return new PortalRestResponse<String>(PortalRestStatusEnum.ERROR, e.getMessage(),
+ "save user profile failed");
+ } else {
+ response.setStatus(HttpServletResponse.SC_INTERNAL_SERVER_ERROR);
+ return new PortalRestResponse<String>(PortalRestStatusEnum.ERROR, e.getMessage(),
+ "save user profile failed");
+ }
+ }
+ return new PortalRestResponse<String>(PortalRestStatusEnum.OK, reqResult.getDetailMessage(), "Success");
+ }
+
+ /**
+ * Updates an application user to have only the specified roles.
+ *
+ * @param request
+ * @param extSysUser
+ * @return PortalRestResponse with appropriate status value and message
+ */
+ @ApiOperation(value = "Updates an application user to have only the specified roles.", response = PortalRestResponse.class)
+ @RequestMapping(value = { "/userProfile" }, method = RequestMethod.PUT, produces = "application/json")
+ public PortalRestResponse<String> putUserProfile(HttpServletRequest request,
+ @RequestBody ExternalSystemUser extSysUser, HttpServletResponse response) {
+ ExternalRequestFieldsValidator reqResult = null;
+ try {
+ logger.info(EELFLoggerDelegate.debugLogger, "putUserProfile: request received for app {}, user {}",
+ extSysUser.getApplicationName(), extSysUser.getLoginId());
+ validateExtSystemUser(extSysUser, true);
+ reqResult = userRolesService.setExternalRequestUserAppRole(extSysUser, "PUT");
+ if (!reqResult.isResult())
+ throw new Exception(reqResult.getDetailMessage());
+ } catch (Exception e) {
+ logger.error(EELFLoggerDelegate.errorLogger, "putUserProfile: failed for app {}, user {}",
+ extSysUser.getApplicationName(), extSysUser.getLoginId(), e);
+ if(reqResult == null || (!reqResult.isResult() && !e.getMessage().contains("404") && !e.getMessage().contains("405"))){
+ response.setStatus(HttpServletResponse.SC_BAD_REQUEST);
+ return new PortalRestResponse<String>(PortalRestStatusEnum.ERROR,
+ e.getMessage(), "save user profile failed");
+ } else if(e.getMessage().contains("404")){
+ response.setStatus(HttpServletResponse.SC_NOT_FOUND);
+ return new PortalRestResponse<String>(PortalRestStatusEnum.ERROR,
+ e.getMessage(), "save user profile failed");
+ } else if(e.getMessage().contains("500")){
+ response.setStatus(HttpServletResponse.SC_INTERNAL_SERVER_ERROR);
+ return new PortalRestResponse<String>(PortalRestStatusEnum.ERROR,
+ e.getMessage(), "save user profile failed");
+ } else if (e.getMessage().contains("405")) {
+ response.setStatus(HttpServletResponse.SC_METHOD_NOT_ALLOWED);
+ return new PortalRestResponse<String>(PortalRestStatusEnum.ERROR, e.getMessage(), "save user profile failed");
+ } else{
+ response.setStatus(HttpServletResponse.SC_INTERNAL_SERVER_ERROR);
+ return new PortalRestResponse<String>(PortalRestStatusEnum.ERROR,
+ e.getMessage(), "save user profile failed");
+ }
+ }
+ return new PortalRestResponse<String>(PortalRestStatusEnum.OK, reqResult.getDetailMessage() , "Success");
+ }
+
+ /**
+ * Deletes an application user by removing all assigned roles.
+ *
+ * @param request
+ * @param extSysUser
+ * This object must have zero roles.
+ * @return PortalRestResponse with appropriate status value and message
+ */
+ @ApiOperation(value = "Processes a request to delete one or more application roles for one specified user who has roles.", response = PortalRestResponse.class)
+ @RequestMapping(value = { "/userProfile" }, method = RequestMethod.DELETE, produces = "application/json")
+ public PortalRestResponse<String> deleteUserProfile(HttpServletRequest request,
+ @RequestBody ExternalSystemUser extSysUser, HttpServletResponse response) {
+ ExternalRequestFieldsValidator reqResult = null;
+ try {
+ logger.info(EELFLoggerDelegate.debugLogger, "deleteUserProfile: request received for app {}, user {}",
+ extSysUser.getApplicationName(), extSysUser.getLoginId());
+ validateExtSystemUser(extSysUser, false);
+ // Ignore any roles that might be mistakenly present in the request
+ extSysUser.setRoles(new ArrayList<ExternalSystemRoleApproval>());
+ reqResult = userRolesService.setExternalRequestUserAppRole(extSysUser, "DELETE");
+ if (!reqResult.isResult())
+ throw new Exception(reqResult.getDetailMessage());
+ } catch (Exception e) {
+ logger.error(EELFLoggerDelegate.errorLogger, "deleteUserProfile: failed for app {}, user {}",
+ extSysUser.getApplicationName(), extSysUser.getLoginId(), e);
+ if(reqResult == null || (!reqResult.isResult() && !e.getMessage().contains("404"))){
+ response.setStatus(HttpServletResponse.SC_BAD_REQUEST);
+ return new PortalRestResponse<String>(PortalRestStatusEnum.ERROR,
+ e.getMessage(), "delete user profile failed");
+ }else if(e.getMessage().contains("404")){
+ response.setStatus(HttpServletResponse.SC_NOT_FOUND);
+ return new PortalRestResponse<String>(PortalRestStatusEnum.ERROR,
+ e.getMessage(), "delete user profile failed");
+ } else{
+ response.setStatus(HttpServletResponse.SC_INTERNAL_SERVER_ERROR);
+ return new PortalRestResponse<String>(PortalRestStatusEnum.ERROR,
+ e.getMessage(), "delete user profile failed");
+ }
+ }
+ return new PortalRestResponse<String>(PortalRestStatusEnum.OK, "Deleted Successfully", "Success");
+ }
+
+ /**
+ * Checks for presence of required fields.
+ *
+ * @param extSysUser
+ * @param rolesRequired
+ * If true, checks whether roles are present
+ * @throws Exception
+ * If any field is missing.
+ */
+ private void validateExtSystemUser(ExternalSystemUser extSysUser, boolean rolesRequired) throws Exception {
+ if (extSysUser.getLoginId() == null || extSysUser.getLoginId() == "")
+ throw new Exception("Request has no login ID");
+ if (extSysUser.getApplicationName() == null || extSysUser.getApplicationName() == "")
+ throw new Exception("Request has no application name");
+ if (extSysUser.getMyloginrequestId() == null)
+ throw new Exception("Request has no request ID");
+ if (rolesRequired && (extSysUser.getRoles() == null || extSysUser.getRoles().size() == 0))
+ throw new Exception("Request has no roles");
+ }
+
+} \ No newline at end of file
diff --git a/ecomp-portal-BE-common/src/main/java/org/onap/portalapp/portal/controller/SchedulerAuxController.java b/ecomp-portal-BE-common/src/main/java/org/onap/portalapp/portal/controller/SchedulerAuxController.java
new file mode 100644
index 00000000..c676fa98
--- /dev/null
+++ b/ecomp-portal-BE-common/src/main/java/org/onap/portalapp/portal/controller/SchedulerAuxController.java
@@ -0,0 +1,141 @@
+/*-
+ * ============LICENSE_START==========================================
+ * ONAP Portal
+ * ===================================================================
+ * Copyright (C) 2017 AT&T Intellectual Property. All rights reserved.
+ * ===================================================================
+ *
+ * Unless otherwise specified, all software contained herein is licensed
+ * under the Apache License, Version 2.0 (the "License");
+ * you may not use this software 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.
+ *
+ * Unless otherwise specified, all documentation contained herein is licensed
+ * under the Creative Commons License, Attribution 4.0 Intl. (the "License");
+ * you may not use this documentation except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * https://creativecommons.org/licenses/by/4.0/
+ *
+ * Unless required by applicable law or agreed to in writing, documentation
+ * 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.
+ *
+ * ============LICENSE_END============================================
+ *
+ * ECOMP is a trademark and service mark of AT&T Intellectual Property.
+ */
+package org.onap.portalapp.portal.controller;
+
+import java.util.Date;
+import java.util.HashMap;
+import java.util.Map;
+import java.util.UUID;
+
+import javax.servlet.http.HttpServletRequest;
+
+import org.json.simple.JSONObject;
+import org.onap.portalapp.controller.EPRestrictedBaseController;
+import org.onap.portalapp.portal.logging.aop.EPAuditLog;
+import org.onap.portalapp.portal.logging.logic.EPLogUtil;
+import org.onap.portalapp.portal.scheduler.SchedulerProperties;
+import org.onap.portalapp.portal.scheduleraux.RestObject;
+import org.onap.portalapp.portal.scheduleraux.SchedulerAuxResponseWrapper;
+import org.onap.portalapp.portal.scheduleraux.SchedulerAuxRestInterfaceFactory;
+import org.onap.portalapp.portal.scheduleraux.SchedulerAuxRestInterfaceIfc;
+import org.onap.portalapp.portal.scheduleraux.SchedulerAuxUtil;
+import org.onap.portalapp.portal.utils.PortalConstants;
+import org.onap.portalsdk.core.logging.logic.EELFLoggerDelegate;
+import org.springframework.context.annotation.Configuration;
+import org.springframework.context.annotation.EnableAspectJAutoProxy;
+/*import org.openecomp.vid.policy.PolicyProperties;
+import org.openecomp.vid.policy.PolicyResponseWrapper;
+import org.openecomp.vid.policy.PolicyRestInterfaceFactory;
+import org.openecomp.vid.policy.PolicyRestInterfaceIfc;
+import org.openecomp.vid.policy.PolicyUtil;*/
+import org.springframework.http.HttpStatus;
+import org.springframework.http.ResponseEntity;
+import org.springframework.web.bind.annotation.RequestMapping;
+import org.springframework.web.bind.annotation.RequestMethod;
+import org.springframework.web.bind.annotation.RestController;
+
+/**
+ * Controller to handle Policy requests.
+ */
+
+@RestController
+@RequestMapping(PortalConstants.PORTAL_AUX_API)
+@Configuration
+@EnableAspectJAutoProxy
+@EPAuditLog
+public class SchedulerAuxController extends EPRestrictedBaseController {
+
+ /** The logger. */
+ private static EELFLoggerDelegate logger = EELFLoggerDelegate.getLogger(SchedulerAuxController.class);
+
+ @RequestMapping(value = "/get_policy", method = RequestMethod.GET, produces = "application/json")
+ public ResponseEntity<String> getPolicyInfo(HttpServletRequest request) throws Exception {
+ try {
+
+ logger.debug(EELFLoggerDelegate.debugLogger,
+ "SchedulerAux Controller Call Started: " + SchedulerProperties.SCHEDULERAUX_GET_CONFIG_VAL);
+ String path = SchedulerProperties.getProperty(SchedulerProperties.SCHEDULERAUX_GET_CONFIG_VAL);
+ SchedulerAuxResponseWrapper policyResWrapper = getPolicyConfig(path);
+
+ logger.debug(EELFLoggerDelegate.debugLogger, "SchedulerAux Request END : Response: ",
+ new ResponseEntity<String>(policyResWrapper.getResponse(), HttpStatus.OK).toString());
+
+ return (new ResponseEntity<String>(policyResWrapper.getResponse(),
+ HttpStatus.valueOf(policyResWrapper.getStatus())));
+ } catch (Exception e) {
+ SchedulerAuxResponseWrapper policyResWrapper = new SchedulerAuxResponseWrapper();
+ policyResWrapper.setStatus(HttpStatus.INTERNAL_SERVER_ERROR.value());
+ policyResWrapper.setEntity(e.getMessage());
+ logger.error(EELFLoggerDelegate.errorLogger, "Exception with getpolicy ", e);
+ return (new ResponseEntity<String>(policyResWrapper.getResponse(), HttpStatus.INTERNAL_SERVER_ERROR));
+ }
+ }
+
+ protected static SchedulerAuxResponseWrapper getPolicyConfig(String path) throws Exception {
+ String methodName = "getPolicyConfig";
+ String uuid = UUID.randomUUID().toString();
+ logger.debug(EELFLoggerDelegate.debugLogger, "starting getPolicyConfig ");
+
+ try {
+ // STARTING REST API CALL AS AN FACTORY INSTACE
+ SchedulerAuxRestInterfaceIfc policyRestController = SchedulerAuxRestInterfaceFactory.getInstance();
+ JSONObject request = new JSONObject();
+ String policyName = SchedulerProperties.getProperty(SchedulerProperties.SCHEDULER_POLICY_NAME);
+ request.put("policyName", policyName);
+ RestObject<String> restObjStr = new RestObject<String>();
+ String str = new String();
+ restObjStr.set(str);
+ policyRestController.<String>Post(str, request, uuid, path, restObjStr);
+ SchedulerAuxResponseWrapper policyRespWrapper = SchedulerAuxUtil.wrapResponse(restObjStr);
+ logger.debug(EELFLoggerDelegate.debugLogger, "Getpolicy Request END : Response: ", methodName,
+ policyRespWrapper.getResponse());
+ if (policyRespWrapper.getStatus() != 200) {
+ String message = String.format(
+ " get policy Information failed . MethodName: %s, PolicyRespWrapperResponse: %s", methodName,
+ policyRespWrapper.getResponse());
+ logger.error(EELFLoggerDelegate.errorLogger, message);
+ EPLogUtil.schedulerAccessAlarm(logger, policyRespWrapper.getStatus());
+ }
+ return policyRespWrapper;
+ } catch (Exception e) {
+ String message = String.format(" EXCEPTION in getPolicyConfig . MethodName: %s and Exception: %s", methodName, e);
+ logger.error(EELFLoggerDelegate.errorLogger, "EXCEPTION in getPolicyConfig", message);
+ throw e;
+ }
+ }
+}
diff --git a/ecomp-portal-BE-common/src/main/java/org/onap/portalapp/portal/controller/SchedulerController.java b/ecomp-portal-BE-common/src/main/java/org/onap/portalapp/portal/controller/SchedulerController.java
new file mode 100644
index 00000000..f7d90db1
--- /dev/null
+++ b/ecomp-portal-BE-common/src/main/java/org/onap/portalapp/portal/controller/SchedulerController.java
@@ -0,0 +1,348 @@
+/*-
+ * ============LICENSE_START==========================================
+ * ONAP Portal
+ * ===================================================================
+ * Copyright (C) 2017 AT&T Intellectual Property. All rights reserved.
+ * ===================================================================
+ *
+ * Unless otherwise specified, all software contained herein is licensed
+ * under the Apache License, Version 2.0 (the "License");
+ * you may not use this software 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.
+ *
+ * Unless otherwise specified, all documentation contained herein is licensed
+ * under the Creative Commons License, Attribution 4.0 Intl. (the "License");
+ * you may not use this documentation except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * https://creativecommons.org/licenses/by/4.0/
+ *
+ * Unless required by applicable law or agreed to in writing, documentation
+ * 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.
+ *
+ * ============LICENSE_END============================================
+ *
+ * ECOMP is a trademark and service mark of AT&T Intellectual Property.
+ */
+package org.onap.portalapp.portal.controller;
+
+import java.text.DateFormat;
+import java.text.SimpleDateFormat;
+import java.util.Date;
+import java.util.HashMap;
+import java.util.Map;
+import java.util.UUID;
+
+import javax.servlet.http.HttpServletRequest;
+import javax.servlet.http.HttpServletResponse;
+
+import org.json.simple.JSONObject;
+import org.onap.portalapp.controller.EPRestrictedBaseController;
+import org.onap.portalapp.portal.ecomp.model.PortalRestResponse;
+import org.onap.portalapp.portal.ecomp.model.PortalRestStatusEnum;
+import org.onap.portalapp.portal.logging.aop.EPAuditLog;
+import org.onap.portalapp.portal.logging.logic.EPLogUtil;
+import org.onap.portalapp.portal.scheduler.SchedulerProperties;
+import org.onap.portalapp.portal.scheduler.SchedulerRestInterface;
+import org.onap.portalapp.portal.scheduler.SchedulerUtil;
+import org.onap.portalapp.portal.scheduler.restobjects.GetTimeSlotsRestObject;
+import org.onap.portalapp.portal.scheduler.restobjects.PostCreateNewVnfRestObject;
+import org.onap.portalapp.portal.scheduler.restobjects.PostSubmitVnfChangeRestObject;
+import org.onap.portalapp.portal.scheduler.wrapper.GetTimeSlotsWrapper;
+import org.onap.portalapp.portal.scheduler.wrapper.PostCreateNewVnfWrapper;
+import org.onap.portalapp.portal.scheduler.wrapper.PostSubmitVnfChangeTimeSlotsWrapper;
+import org.onap.portalapp.portal.utils.PortalConstants;
+import org.onap.portalsdk.core.logging.logic.EELFLoggerDelegate;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.context.annotation.Configuration;
+import org.springframework.context.annotation.EnableAspectJAutoProxy;
+import org.springframework.http.HttpStatus;
+import org.springframework.http.ResponseEntity;
+import org.springframework.web.bind.annotation.PathVariable;
+import org.springframework.web.bind.annotation.RequestBody;
+import org.springframework.web.bind.annotation.RequestMapping;
+import org.springframework.web.bind.annotation.RequestMethod;
+import org.springframework.web.bind.annotation.RestController;
+
+@RestController
+@RequestMapping(PortalConstants.PORTAL_AUX_API)
+@Configuration
+@EnableAspectJAutoProxy
+@EPAuditLog
+public class SchedulerController extends EPRestrictedBaseController {
+
+ @Autowired
+ private SchedulerRestInterface schedulerRestController;
+
+ private static EELFLoggerDelegate logger = EELFLoggerDelegate.getLogger(SchedulerController.class);
+
+ /** The request date format. */
+ public DateFormat requestDateFormat = new SimpleDateFormat("EEE, dd MMM YYYY HH:mm:ss z");
+
+ @RequestMapping(value = "/get_time_slots/{scheduler_request}", method = RequestMethod.GET, produces = "application/json")
+ public ResponseEntity<String> getTimeSlots(HttpServletRequest request,
+ @PathVariable("scheduler_request") String scheduler_request) throws Exception {
+ try {
+
+ Date startingTime = new Date();
+ String startTimeRequest = requestDateFormat.format(startingTime);
+ logger.debug(EELFLoggerDelegate.debugLogger, "Controller Scheduler GET Timeslots for startTimeRequest: ",
+ startTimeRequest);
+ logger.debug(EELFLoggerDelegate.debugLogger, "Original Request : \n ", scheduler_request);
+ String path = SchedulerProperties.getProperty(SchedulerProperties.SCHEDULER_GET_TIME_SLOTS)
+ + scheduler_request;
+
+ GetTimeSlotsWrapper schedulerResWrapper = getTimeSlots(scheduler_request, path, scheduler_request);
+
+ Date endTime = new Date();
+ String endTimeRequest = requestDateFormat.format(endTime);
+ logger.debug(EELFLoggerDelegate.debugLogger, "Controller Scheduler - GET for EndTimeRequest",
+ endTimeRequest);
+ return (new ResponseEntity<String>(schedulerResWrapper.getResponse(),
+ HttpStatus.valueOf(schedulerResWrapper.getStatus())));
+ } catch (Exception e) {
+ GetTimeSlotsWrapper schedulerResWrapper=new GetTimeSlotsWrapper();
+ schedulerResWrapper.setStatus(HttpStatus.INTERNAL_SERVER_ERROR.value());
+ schedulerResWrapper.setEntity(e.getMessage());
+ logger.error(EELFLoggerDelegate.errorLogger, "Exception with getTimeslots", e);
+ return (new ResponseEntity<String>(schedulerResWrapper.getResponse(), HttpStatus.INTERNAL_SERVER_ERROR));
+ }
+
+ }
+
+ protected GetTimeSlotsWrapper getTimeSlots(String request, String path, String uuid) throws Exception {
+
+ try {
+ // STARTING REST API CALL AS AN FACTORY INSTACE
+ logger.debug(EELFLoggerDelegate.debugLogger, "Get Time Slots Request START");
+
+ GetTimeSlotsRestObject<String> restObjStr = new GetTimeSlotsRestObject<String>();
+ String str = new String();
+
+ restObjStr.set(str);
+
+ schedulerRestController.Get(str, uuid, path, restObjStr);
+ GetTimeSlotsWrapper schedulerRespWrapper = SchedulerUtil.getTimeSlotsWrapResponse(restObjStr);
+ logger.debug(EELFLoggerDelegate.debugLogger, "Get Time Slots Request END : Response: ",
+ schedulerRespWrapper.getResponse());
+ if (schedulerRespWrapper.getStatus() != 200 && schedulerRespWrapper.getStatus() != 204
+ && schedulerRespWrapper.getStatus() != 202) {
+ String message = String.format(
+ " getTimeslots Information failed . SchedulerResponseWrapper for gettimeslots: %s", schedulerRespWrapper.getResponse());
+ logger.error(EELFLoggerDelegate.errorLogger, message);
+ EPLogUtil.schedulerAccessAlarm(logger, schedulerRespWrapper.getStatus());
+
+ }
+ return schedulerRespWrapper;
+
+ } catch (Exception e) {
+ logger.error(EELFLoggerDelegate.errorLogger, "Get Time Slots Request ERROR : Exception:",e);
+ throw e;
+ }
+ }
+
+ @SuppressWarnings("unchecked")
+ @RequestMapping(value = "/post_create_new_vnf_change", method = RequestMethod.POST, produces = "application/json")
+ public ResponseEntity<String> postCreateNewVNFChange(HttpServletRequest request,
+ @RequestBody JSONObject scheduler_request) throws Exception {
+ try {
+ Date startingTime = new Date();
+ String startTimeRequest = requestDateFormat.format(startingTime);
+
+ logger.debug(EELFLoggerDelegate.debugLogger, "Controller Scheduler POST : post_create_new_vnf_change",
+ startTimeRequest);
+
+ // Generating uuid
+ String uuid = UUID.randomUUID().toString();
+
+ scheduler_request.put("scheduleId", uuid);
+ logger.debug(EELFLoggerDelegate.debugLogger, "UUID : ", uuid);
+
+ // adding uuid to the request payload
+ scheduler_request.put("scheduleId", uuid);
+ logger.debug(EELFLoggerDelegate.debugLogger, "Original Request ", scheduler_request.toString());
+
+ String path = SchedulerProperties
+ .getProperty(SchedulerProperties.SCHEDULER_CREATE_NEW_VNF_CHANGE_INSTANCE_VAL) + uuid;
+
+ PostCreateNewVnfWrapper responseWrapper = postSchedulingRequest(scheduler_request, path, uuid);
+
+ Date endTime = new Date();
+ String endTimeRequest = requestDateFormat.format(endTime);
+ logger.debug(EELFLoggerDelegate.debugLogger, "Controller Scheduler - POST", endTimeRequest);
+
+ return new ResponseEntity<String>(responseWrapper.getResponse(),
+ HttpStatus.valueOf(responseWrapper.getStatus()));
+ } catch (Exception e) {
+ PostCreateNewVnfWrapper responseWrapper=new PostCreateNewVnfWrapper();
+ responseWrapper.setStatus(HttpStatus.INTERNAL_SERVER_ERROR.value());
+ responseWrapper.setEntity(e.getMessage());
+ logger.error(EELFLoggerDelegate.errorLogger, "Exception with postCreateNewVNFChange ", e);
+ return (new ResponseEntity<String>(responseWrapper.getResponse(), HttpStatus.INTERNAL_SERVER_ERROR));
+
+ }
+
+ }
+
+ protected PostCreateNewVnfWrapper postSchedulingRequest(JSONObject request, String path, String uuid)
+ throws Exception {
+
+ try {
+ // STARTING REST API CALL AS AN FACTORY INSTACE
+
+ PostCreateNewVnfRestObject<String> restObjStr = new PostCreateNewVnfRestObject<String>();
+ String str = new String();
+
+ restObjStr.set(str);
+ schedulerRestController.<String>Post(str, request, path, restObjStr);
+
+ int status = restObjStr.getStatusCode();
+ if (status >= 200 && status <= 299) {
+ restObjStr.setUUID(uuid);
+ }
+
+ PostCreateNewVnfWrapper responseWrapper = SchedulerUtil.postCreateNewVnfWrapResponse(restObjStr);
+
+ logger.debug(EELFLoggerDelegate.debugLogger, " Post Create New Vnf Scheduling Request END : Response: ",
+ responseWrapper.getResponse());
+ if (responseWrapper.getStatus() != 200 && responseWrapper.getStatus() != 202 && responseWrapper.getStatus() != 204) {
+ logger.error(EELFLoggerDelegate.errorLogger, "PostCreateNewVnfWrapper Information failed", responseWrapper.getResponse());
+ EPLogUtil.schedulerAccessAlarm(logger, responseWrapper.getStatus());
+
+ }
+ return responseWrapper;
+
+ } catch (Exception e) {
+ logger.error(EELFLoggerDelegate.errorLogger, "PostCreateNewVnfWrapper failed . Post Create New Vnf Scheduling Request ERROR :",e);
+ throw e;
+ }
+ }
+
+ @RequestMapping(value = "/submit_vnf_change_timeslots", method = RequestMethod.POST, produces = "application/json")
+ public ResponseEntity<String> postSubmitVnfChangeTimeslots(HttpServletRequest request,
+ @RequestBody JSONObject scheduler_request) throws Exception {
+ try {
+ Date startingTime = new Date();
+ String startTimeRequest = requestDateFormat.format(startingTime);
+ logger.debug(EELFLoggerDelegate.debugLogger, " Controller Scheduler POST : submit_vnf_change_timeslots",
+ startTimeRequest);
+
+ // Generating uuid
+ String uuid = (String) scheduler_request.get("scheduleId");
+ logger.debug(EELFLoggerDelegate.debugLogger, "UUID : ", uuid);
+
+ scheduler_request.remove("scheduleId");
+ logger.debug(EELFLoggerDelegate.debugLogger, "Original Request for the schedulerId: ",
+ scheduler_request.toString());
+
+ String path = SchedulerProperties.getProperty(SchedulerProperties.SCHEDULER_SUBMIT_NEW_VNF_CHANGE)
+ .replace("{scheduleId}", uuid);
+
+ PostSubmitVnfChangeTimeSlotsWrapper responseWrapper = postSubmitSchedulingRequest(scheduler_request, path,
+ uuid);
+
+ Date endTime = new Date();
+ String endTimeRequest = requestDateFormat.format(endTime);
+ logger.debug(EELFLoggerDelegate.debugLogger, " Controller Scheduler - POST Submit for end time request",
+ endTimeRequest);
+
+ return (new ResponseEntity<String>(responseWrapper.getResponse(),HttpStatus.valueOf(responseWrapper.getStatus())));
+ } catch (Exception e) {
+ PostSubmitVnfChangeTimeSlotsWrapper responseWrapper=new PostSubmitVnfChangeTimeSlotsWrapper();
+ responseWrapper.setStatus(HttpStatus.INTERNAL_SERVER_ERROR.value());
+ responseWrapper.setEntity(e.getMessage());
+ logger.error(EELFLoggerDelegate.errorLogger, "Exception with Post submit Vnf change Timeslots", e);
+ return (new ResponseEntity<String>(responseWrapper.getResponse(), HttpStatus.INTERNAL_SERVER_ERROR));
+
+ }
+ }
+
+ protected PostSubmitVnfChangeTimeSlotsWrapper postSubmitSchedulingRequest(JSONObject request, String path,
+ String uuid) throws Exception {
+
+ try {
+ // STARTING REST API CALL AS AN FACTORY INSTACE
+
+ PostSubmitVnfChangeRestObject<String> restObjStr = new PostSubmitVnfChangeRestObject<String>();
+ String str = new String();
+
+ restObjStr.set(str);
+ schedulerRestController.<String>Post(str, request, path, restObjStr);
+
+ int status = restObjStr.getStatusCode();
+ if (status >= 200 && status <= 299) {
+ status=(status==204)?200:status;
+ restObjStr.setStatusCode(status);
+ restObjStr.setUUID(uuid);
+ }
+
+ PostSubmitVnfChangeTimeSlotsWrapper responseWrapper = SchedulerUtil
+ .postSubmitNewVnfWrapResponse(restObjStr);
+ logger.debug(EELFLoggerDelegate.debugLogger, "Post Submit Scheduling Request END : Response = ",
+ responseWrapper.getResponse());
+ if (responseWrapper.getStatus() != 200 && responseWrapper.getStatus() != 202
+ && responseWrapper.getStatus() != 204) {
+ logger.error(EELFLoggerDelegate.errorLogger, "PostCreateNewVnfWrapper Information failed", responseWrapper.getResponse());
+ EPLogUtil.schedulerAccessAlarm(logger, responseWrapper.getStatus());
+
+ }
+ return responseWrapper;
+
+ } catch (Exception e) {
+ logger.error(EELFLoggerDelegate.errorLogger, " PostCreateNewVnfWrapper failed . Post Submit Scheduling Request ERROR :",e);
+ throw e;
+ }
+ }
+
+ /**
+ * Get Scheduler UI constant values from properties file
+ *
+ * @return Rest response wrapped around a String; e.g., "success" or "ERROR"
+ */
+ @RequestMapping(value = "/get_scheduler_constant", method = RequestMethod.GET, produces = "application/json")
+ public PortalRestResponse<Map<String, String>> getSchedulerConstant(HttpServletRequest request,
+ HttpServletResponse response) {
+ logger.debug(EELFLoggerDelegate.debugLogger, "get scheduler constant");
+
+ PortalRestResponse<Map<String, String>> portalRestResponse = null;
+ String errorMsg = " is not defined in property file. Please check the property file and make sure all the schedule constant values are defined";
+ HashMap<String, String> constantMap = new HashMap<>();
+ constantMap.put(SchedulerProperties.SCHEDULER_DOMAIN_NAME, "domainName");
+ constantMap.put(SchedulerProperties.SCHEDULER_SCHEDULE_NAME, "scheduleName");
+ constantMap.put(SchedulerProperties.SCHEDULER_WORKFLOW_NAME, "workflowName");
+ constantMap.put(SchedulerProperties.SCHEDULER_CALLBACK_URL, "callbackUrl");
+ constantMap.put(SchedulerProperties.SCHEDULER_APPROVAL_TYPE, "approvalType");
+ constantMap.put(SchedulerProperties.SCHEDULER_APPROVAL_SUBMIT_STATUS, "approvalSubmitStatus");
+ constantMap.put(SchedulerProperties.SCHEDULER_APPROVAL_REJECT_STATUS, "approvalRejectStatus");
+ constantMap.put(SchedulerProperties.SCHEDULER_POLICY_NAME, "policyName");
+ constantMap.put(SchedulerProperties.SCHEDULER_INTERVAL_GET_TIMESLOT_RATE, "intervalRate");
+ constantMap.put(SchedulerProperties.SCHEDULER_GROUP_ID, "groupId");
+ try {
+ Map<String, String> map = new HashMap<>();
+ for (Map.Entry<String, String> entry : constantMap.entrySet()) {
+ if (SchedulerProperties.containsProperty(entry.getKey()))
+ map.put(entry.getValue(), SchedulerProperties.getProperty(entry.getKey()));
+ else
+ throw new Exception(entry.getKey() + errorMsg);
+ }
+ portalRestResponse = new PortalRestResponse<Map<String, String>>(PortalRestStatusEnum.OK, "success", map);
+ } catch (Exception e) {
+ logger.error(EELFLoggerDelegate.errorLogger, "getSchedulerConstant failed", e);
+ portalRestResponse = new PortalRestResponse<Map<String, String>>(PortalRestStatusEnum.ERROR, e.getMessage(),
+ null);
+ }
+ return portalRestResponse;
+ }
+
+}
diff --git a/ecomp-portal-BE-common/src/main/java/org/onap/portalapp/portal/controller/SharedContextRestController.java b/ecomp-portal-BE-common/src/main/java/org/onap/portalapp/portal/controller/SharedContextRestController.java
new file mode 100644
index 00000000..9a684966
--- /dev/null
+++ b/ecomp-portal-BE-common/src/main/java/org/onap/portalapp/portal/controller/SharedContextRestController.java
@@ -0,0 +1,384 @@
+/*-
+ * ============LICENSE_START==========================================
+ * ONAP Portal
+ * ===================================================================
+ * Copyright (C) 2017 AT&T Intellectual Property. All rights reserved.
+ * ===================================================================
+ *
+ * Unless otherwise specified, all software contained herein is licensed
+ * under the Apache License, Version 2.0 (the "License");
+ * you may not use this software 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.
+ *
+ * Unless otherwise specified, all documentation contained herein is licensed
+ * under the Creative Commons License, Attribution 4.0 Intl. (the "License");
+ * you may not use this documentation except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * https://creativecommons.org/licenses/by/4.0/
+ *
+ * Unless required by applicable law or agreed to in writing, documentation
+ * 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.
+ *
+ * ============LICENSE_END============================================
+ *
+ * ECOMP is a trademark and service mark of AT&T Intellectual Property.
+ */
+package org.onap.portalapp.portal.controller;
+
+import java.io.IOException;
+import java.util.ArrayList;
+import java.util.HashMap;
+import java.util.List;
+import java.util.Map;
+
+import javax.servlet.http.HttpServletRequest;
+import javax.servlet.http.HttpServletResponse;
+
+import org.onap.portalapp.controller.EPRestrictedRESTfulBaseController;
+import org.onap.portalapp.portal.domain.SharedContext;
+import org.onap.portalapp.portal.logging.aop.EPAuditLog;
+import org.onap.portalapp.portal.service.SharedContextService;
+import org.onap.portalapp.portal.utils.EPCommonSystemProperties;
+import org.onap.portalapp.portal.utils.PortalConstants;
+import org.onap.portalsdk.core.logging.logic.EELFLoggerDelegate;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.context.annotation.Configuration;
+import org.springframework.context.annotation.EnableAspectJAutoProxy;
+import org.springframework.http.HttpStatus;
+import org.springframework.web.bind.annotation.ExceptionHandler;
+import org.springframework.web.bind.annotation.RequestBody;
+import org.springframework.web.bind.annotation.RequestMapping;
+import org.springframework.web.bind.annotation.RequestMethod;
+import org.springframework.web.bind.annotation.RequestParam;
+import org.springframework.web.bind.annotation.RestController;
+
+import com.fasterxml.jackson.core.JsonProcessingException;
+import com.fasterxml.jackson.databind.ObjectMapper;
+
+import io.swagger.annotations.ApiOperation;
+
+/**
+ * The shared-context feature allows onboarded applications to share data among
+ * themselves easily for a given session. It basically implements a Java map:
+ * put or get a key-value pair within a map identified by a session ID.
+ *
+ * This REST endpoint listens on the Portal app server and answers requests made
+ * by back-end application servers. Reads and writes values to the database
+ * using a Hibernate service to ensure all servers in a high-availability
+ * cluster see the same data.
+ */
+@Configuration
+@RestController
+@RequestMapping(PortalConstants.REST_AUX_API + "/context")
+@EnableAspectJAutoProxy
+@EPAuditLog
+public class SharedContextRestController extends EPRestrictedRESTfulBaseController {
+
+ /**
+ * Model for a one-element JSON object returned by many methods.
+ */
+ class SharedContextJsonResponse {
+ String response;
+ }
+
+ /**
+ * Access to the database
+ */
+ @Autowired
+ private SharedContextService contextService;
+
+ /**
+ * Logger for debug etc.
+ */
+ private EELFLoggerDelegate logger = EELFLoggerDelegate.getLogger(SharedContextRestController.class);
+
+ /**
+ * Reusable JSON (de)serializer
+ */
+ private final ObjectMapper mapper = new ObjectMapper();
+
+ /**
+ * Gets a value for the specified context and key (RESTful service method).
+ *
+ * @param request
+ * HTTP servlet request
+ * @param context_id
+ * ID that identifies the context, usually the ECOMP Portal
+ * session key.
+ * @param ckey
+ * Key for the key-value pair to fetch
+ * @return JSON with shared context object; response=null if not found.
+ * @throws Exception
+ * on bad arguments
+ */
+ @ApiOperation(value = "Gets a value for the specified context and key.", response = SharedContext.class)
+ @RequestMapping(value = { "/get" }, method = RequestMethod.GET, produces = "application/json")
+ public String getContext(HttpServletRequest request, @RequestParam String context_id, @RequestParam String ckey)
+ throws Exception {
+
+ logger.debug(EELFLoggerDelegate.debugLogger, "getContext for ID " + context_id + ", key " + ckey);
+ if (context_id == null || ckey == null)
+ throw new Exception("Received null for context_id and/or ckey");
+
+ SharedContext context = contextService.getSharedContext(context_id, ckey);
+ String jsonResponse = "";
+ if (context == null)
+ jsonResponse = convertResponseToJSON(context);
+ else
+ jsonResponse = mapper.writeValueAsString(context);
+
+ return jsonResponse;
+ }
+
+ /**
+ * Gets user information for the specified context (RESTful service method).
+ *
+ * @param request
+ * HTTP servlet request
+ * @param context_id
+ * ID that identifies the context, usually the ECOMP Portal
+ * session key.
+ * @return List of shared-context objects as JSON; should have user's first
+ * name, last name and email address; null if none found
+ * @throws Exception
+ * on bad arguments
+ */
+ @ApiOperation(value = "Gets user information for the specified context.", response = SharedContext.class, responseContainer = "List")
+ @RequestMapping(value = { "/get_user" }, method = RequestMethod.GET, produces = "application/json")
+ public String getUserContext(HttpServletRequest request, @RequestParam String context_id) throws Exception {
+
+ logger.debug(EELFLoggerDelegate.debugLogger, "getUserContext for ID " + context_id);
+ if (context_id == null)
+ throw new Exception("Received null for context_id");
+
+ List<SharedContext> listSharedContext = new ArrayList<SharedContext>();
+ SharedContext firstNameContext = contextService.getSharedContext(context_id,
+ EPCommonSystemProperties.USER_FIRST_NAME);
+ SharedContext lastNameContext = contextService.getSharedContext(context_id,
+ EPCommonSystemProperties.USER_LAST_NAME);
+ SharedContext emailContext = contextService.getSharedContext(context_id, EPCommonSystemProperties.USER_EMAIL);
+ SharedContext orgUserIdContext = contextService.getSharedContext(context_id,
+ EPCommonSystemProperties.USER_ORG_USERID);
+ if (firstNameContext != null)
+ listSharedContext.add(firstNameContext);
+ if (lastNameContext != null)
+ listSharedContext.add(lastNameContext);
+ if (emailContext != null)
+ listSharedContext.add(emailContext);
+ if (orgUserIdContext != null)
+ listSharedContext.add(orgUserIdContext);
+ String jsonResponse = convertResponseToJSON(listSharedContext);
+ return jsonResponse;
+ }
+
+ /**
+ * Tests for presence of the specified key in the specified context (RESTful
+ * service method).
+ *
+ * @param request
+ * HTTP servlet request
+ * @param context_id
+ * ID that identifies the context, usually the ECOMP Portal
+ * session key.
+ * @param ckey
+ * Key for the key-value pair to test
+ * @return JSON with result indicating whether the context and key were
+ * found.
+ * @throws Exception
+ * on bad arguments
+ */
+ @ApiOperation(value = "Tests for presence of the specified key in the specified context.", response = SharedContextJsonResponse.class)
+ @RequestMapping(value = { "/check" }, method = RequestMethod.GET, produces = "application/json")
+ public String checkContext(HttpServletRequest request, @RequestParam String context_id, @RequestParam String ckey)
+ throws Exception {
+
+ logger.debug(EELFLoggerDelegate.debugLogger, "checkContext for " + context_id + ", key " + ckey);
+ if (context_id == null || ckey == null)
+ throw new Exception("Received null for contextId and/or key");
+
+ String response = null;
+ SharedContext context = contextService.getSharedContext(context_id, ckey);
+ if (context != null)
+ response = "exists";
+
+ String jsonResponse = convertResponseToJSON(response);
+ return jsonResponse;
+ }
+
+ /**
+ * Removes the specified key in the specified context (RESTful service
+ * method).
+ *
+ * @param request
+ * HTTP servlet request
+ * @param context_id
+ * ID that identifies the context, usually the ECOMP Portal
+ * session key.
+ * @param ckey
+ * Key for the key-value pair to remove
+ * @return JSON with result indicating whether the context and key were
+ * found.
+ * @throws Exception
+ * on bad arguments
+ */
+ @ApiOperation(value = "Removes the specified key in the specified context.", response = SharedContextJsonResponse.class)
+ @RequestMapping(value = { "/remove" }, method = RequestMethod.GET, produces = "application/json")
+ public String removeContext(HttpServletRequest request, @RequestParam String context_id, @RequestParam String ckey)
+ throws Exception {
+
+ logger.debug(EELFLoggerDelegate.debugLogger, "removeContext for " + context_id + ", key " + ckey);
+ if (context_id == null || ckey == null)
+ throw new Exception("Received null for contextId and/or key");
+
+ SharedContext context = contextService.getSharedContext(context_id, ckey);
+ String response = null;
+ if (context != null) {
+ contextService.deleteSharedContext(context);
+ response = "removed";
+ }
+
+ String jsonResponse = convertResponseToJSON(response);
+ return jsonResponse;
+ }
+
+ /**
+ * Clears all key-value pairs in the specified context (RESTful service
+ * method).
+ *
+ * @param request
+ * HTTP servlet request
+ * @param context_id
+ * ID that identifies the context, usually the ECOMP Portal
+ * session key.
+ * @return JSON with result indicating the number of key-value pairs
+ * removed.
+ * @throws Exception
+ * on bad arguments
+ */
+ @ApiOperation(value = "Clears all key-value pairs in the specified context.", response = SharedContextJsonResponse.class)
+ @RequestMapping(value = { "/clear" }, method = RequestMethod.GET, produces = "application/json")
+ public String clearContext(HttpServletRequest request, @RequestParam String context_id) throws Exception {
+
+ logger.debug(EELFLoggerDelegate.debugLogger, "clearContext for " + context_id);
+ if (context_id == null)
+ throw new Exception("clearContext: Received null for contextId");
+
+ int count = contextService.deleteSharedContexts(context_id);
+ String jsonResponse = convertResponseToJSON(Integer.toString(count));
+ return jsonResponse;
+ }
+
+ /**
+ * Sets a context value for the specified context and key (RESTful service
+ * method). Creates the context if no context with the specified ID-key pair
+ * exists, overwrites the value if it exists already.
+ *
+ * @param request
+ * HTTP servlet request
+ * @param userJson
+ * JSON block with these tag-value pairs:
+ * <UL>
+ * <LI>context_id: ID that identifies the context
+ * <LI>ckey: Key for the key-value pair to store
+ * <LI>cvalue: Value to store
+ * </UL>
+ * @return JSON with result indicating whether the value was added (key not
+ * previously known) or replaced (key previously known).
+ * @throws Exception
+ * on bad arguments
+ */
+ @ApiOperation(value = "Sets a context value for the specified context and key. Creates the context if no context with the specified ID-key pair exists, overwrites the value if it exists already.", response = SharedContextJsonResponse.class)
+ @RequestMapping(value = { "/set" }, method = RequestMethod.POST, produces = "application/json")
+ public String setContext(HttpServletRequest request, @RequestBody String userJson) throws Exception {
+
+ @SuppressWarnings("unchecked")
+ Map<String, Object> userData = mapper.readValue(userJson, Map.class);
+ // Use column names as JSON tags
+ final String contextId = (String) userData.get("context_id");
+ final String key = (String) userData.get("ckey");
+ final String value = (String) userData.get("cvalue");
+ if (contextId == null || key == null)
+ throw new Exception("setContext: received null for contextId and/or key");
+
+ logger.debug(EELFLoggerDelegate.debugLogger, "setContext: ID " + contextId + ", key " + key + "->" + value);
+ String response = null;
+ SharedContext existing = contextService.getSharedContext(contextId, key);
+ if (existing == null) {
+ contextService.addSharedContext(contextId, key, value);
+ } else {
+ existing.setCvalue(value);
+ contextService.saveSharedContext(existing);
+ }
+ response = existing == null ? "added" : "replaced";
+ String jsonResponse = convertResponseToJSON(response);
+ return jsonResponse;
+ }
+
+ /**
+ * Creates a two-element JSON object tagged "response".
+ *
+ * @param responseBody
+ * @return JSON object as String
+ * @throws JsonProcessingException
+ */
+ private String convertResponseToJSON(String responseBody) throws JsonProcessingException {
+ Map<String, String> responseMap = new HashMap<String, String>();
+ responseMap.put("response", responseBody);
+ String response = mapper.writeValueAsString(responseMap);
+ return response;
+ }
+
+ /**
+ * Converts a list of SharedContext objects to a JSON array.
+ *
+ * @param contextList
+ * @return JSON array as String
+ * @throws JsonProcessingException
+ */
+ private String convertResponseToJSON(List<SharedContext> contextList) throws JsonProcessingException {
+ String jsonArray = mapper.writeValueAsString(contextList);
+ return jsonArray;
+ }
+
+ /**
+ * Creates a JSON object with the content of the shared context; null is ok.
+ *
+ * @param context
+ * @return tag "response" with collection of context object's fields
+ * @throws JsonProcessingException
+ */
+ private String convertResponseToJSON(SharedContext context) throws JsonProcessingException {
+ Map<String, Object> responseMap = new HashMap<String, Object>();
+ responseMap.put("response", context);
+ String responseBody = mapper.writeValueAsString(responseMap);
+ return responseBody;
+ }
+
+ /**
+ * Handles any exception thrown by a method in this controller.
+ *
+ * @param e
+ * Exception
+ * @param response
+ * HttpServletResponse
+ * @throws IOException
+ */
+ @ExceptionHandler(Exception.class)
+ protected void handleBadRequests(Exception e, HttpServletResponse response) throws IOException {
+ logger.error(EELFLoggerDelegate.errorLogger, "handleBadRequest caught exception", e);
+ response.sendError(HttpStatus.BAD_REQUEST.value(), e.getMessage());
+ }
+
+}
diff --git a/ecomp-portal-BE-common/src/main/java/org/onap/portalapp/portal/controller/TicketEventController.java b/ecomp-portal-BE-common/src/main/java/org/onap/portalapp/portal/controller/TicketEventController.java
new file mode 100644
index 00000000..522c7aea
--- /dev/null
+++ b/ecomp-portal-BE-common/src/main/java/org/onap/portalapp/portal/controller/TicketEventController.java
@@ -0,0 +1,229 @@
+/*-
+ * ============LICENSE_START==========================================
+ * ONAP Portal
+ * ===================================================================
+ * Copyright (C) 2017 AT&T Intellectual Property. All rights reserved.
+ * ===================================================================
+ *
+ * Unless otherwise specified, all software contained herein is licensed
+ * under the Apache License, Version 2.0 (the "License");
+ * you may not use this software 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.
+ *
+ * Unless otherwise specified, all documentation contained herein is licensed
+ * under the Creative Commons License, Attribution 4.0 Intl. (the "License");
+ * you may not use this documentation except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * https://creativecommons.org/licenses/by/4.0/
+ *
+ * Unless required by applicable law or agreed to in writing, documentation
+ * 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.
+ *
+ * ============LICENSE_END============================================
+ *
+ * ECOMP is a trademark and service mark of AT&T Intellectual Property.
+ */
+package org.onap.portalapp.portal.controller;
+
+import java.util.Arrays;
+import java.util.Calendar;
+import java.util.Date;
+import java.util.HashSet;
+import java.util.List;
+import java.util.Set;
+
+import javax.servlet.http.HttpServletRequest;
+import javax.servlet.http.HttpServletResponse;
+
+import org.onap.portalapp.portal.domain.EPUser;
+import org.onap.portalapp.portal.ecomp.model.PortalRestResponse;
+import org.onap.portalapp.portal.ecomp.model.PortalRestStatusEnum;
+import org.onap.portalapp.portal.logging.aop.EPAuditLog;
+import org.onap.portalapp.portal.service.TicketEventService;
+import org.onap.portalapp.portal.service.UserNotificationService;
+import org.onap.portalapp.portal.transport.EpNotificationItem;
+import org.onap.portalapp.portal.transport.EpRoleNotificationItem;
+import org.onap.portalapp.portal.utils.PortalConstants;
+import org.onap.portalsdk.core.logging.logic.EELFLoggerDelegate;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.context.annotation.Configuration;
+import org.springframework.context.annotation.EnableAspectJAutoProxy;
+import org.springframework.web.bind.annotation.RequestBody;
+import org.springframework.web.bind.annotation.RequestMapping;
+import org.springframework.web.bind.annotation.RequestMethod;
+import org.springframework.web.bind.annotation.RestController;
+
+import com.fasterxml.jackson.databind.JsonNode;
+import com.fasterxml.jackson.databind.ObjectMapper;
+
+import io.swagger.annotations.ApiOperation;
+
+/**
+ * Receives messages from the Collaboration Bus (C-BUS) notification and event
+ * brokering tool. Creates notifications for ECOMP Portal users.
+ */
+@RestController
+@RequestMapping(PortalConstants.REST_AUX_API)
+@Configuration
+@EnableAspectJAutoProxy
+@EPAuditLog
+public class TicketEventController implements BasicAuthenticationController {
+
+
+ @Autowired
+ private UserNotificationService userNotificationService;
+
+ @Autowired
+ private TicketEventService ticketEventService;
+
+ private EELFLoggerDelegate logger = EELFLoggerDelegate.getLogger(TicketEventController.class);
+
+ public boolean isAuxRESTfulCall() {
+ return true;
+ }
+
+ private final ObjectMapper mapper = new ObjectMapper();
+
+
+
+ @ApiOperation(value = "Accepts messages from external ticketing systems and creates notifications for Portal users.", response = PortalRestResponse.class)
+ @RequestMapping(value = { "/ticketevent" }, method = RequestMethod.POST)
+ public PortalRestResponse<String> handleRequest(HttpServletRequest request, HttpServletResponse response,
+ @RequestBody String ticketEventJson) throws Exception {
+
+ logger.debug(EELFLoggerDelegate.debugLogger, "Ticket Event notification" + ticketEventJson);
+ PortalRestResponse<String> portalResponse = new PortalRestResponse<>();
+ try {
+ JsonNode ticketEventNotif = mapper.readTree(ticketEventJson);
+
+ // Reject request if required fields are missing.
+ String error = validateTicketEventMessage(ticketEventNotif);
+ if (error != null) {
+ portalResponse.setStatus(PortalRestStatusEnum.ERROR);
+ portalResponse.setMessage(error);
+ response.setStatus(400);
+ return portalResponse;
+ }
+
+ EpNotificationItem epItem = new EpNotificationItem();
+ epItem.setCreatedDate(new Date());
+ epItem.setIsForOnlineUsers("Y");
+ epItem.setIsForAllRoles("N");
+ epItem.setActiveYn("Y");
+
+ JsonNode event = ticketEventNotif.get("event");
+ JsonNode header = event.get("header");
+ JsonNode body = event.get("body");
+ JsonNode application = ticketEventNotif.get("application");
+ epItem.setMsgDescription(body.toString());
+ Long eventDate = System.currentTimeMillis();
+ if (body.get("eventDate") != null) {
+ eventDate = body.get("eventDate").asLong();
+ }
+ String eventSource = header.get("eventSource").asText();
+ epItem.setMsgSource(eventSource);
+ String ticket = body.get("ticketNum").asText();
+ String hyperlink = ticketEventService.getNotificationHyperLink(application, ticket, eventSource);
+ if(body.get("notificationHyperlink")!=null){
+ hyperlink=body.get("notificationHyperlink").asText();
+ }
+ epItem.setNotificationHyperlink(hyperlink);
+ epItem.setStartTime(new Date(eventDate));
+ Calendar calendar = Calendar.getInstance();
+ calendar.setTime(epItem.getStartTime());
+ int dayOfMonth = calendar.get(Calendar.DAY_OF_MONTH);
+ calendar.set(Calendar.DAY_OF_MONTH, dayOfMonth + 30);
+ epItem.setEndTime(calendar.getTime());
+ String severityString = "1";
+ if (body.get("severity") != null) {
+ severityString = (body.get("severity").toString()).substring(1, 2);
+ }
+ Long severity = Long.parseLong(severityString);
+ epItem.setPriority(severity);
+ epItem.setCreatorId(null);
+ Set<EpRoleNotificationItem> roles = new HashSet<>();
+ JsonNode SubscriberInfo = ticketEventNotif.get("SubscriberInfo");
+ JsonNode userList = SubscriberInfo.get("UserList");
+ String UserIds[] = userList.toString().replace("[", "").replace("]", "").trim().replace("\"", "")
+ .split(",");
+ String assetID = eventSource + ' '
+ + userList.toString().replace("[", "").replace("]", "").trim().replace("\"", "") + ' '
+ + new Date(eventDate);
+ if (body.get("assetID") != null) {
+ assetID = body.get("assetID").asText();
+ }
+ epItem.setMsgHeader(assetID);
+ List<EPUser> users = userNotificationService.getUsersByOrgIds(Arrays.asList(UserIds));
+ for (String userId : UserIds) {
+ EpRoleNotificationItem roleNotifItem = new EpRoleNotificationItem();
+ for (EPUser user : users) {
+ if (user.getOrgUserId().equals(userId)) {
+ roleNotifItem.setRecvUserId(user.getId().intValue());
+ roles.add(roleNotifItem);
+ break;
+ }
+ }
+
+ }
+ epItem.setRoles(roles);
+ userNotificationService.saveNotification(epItem);
+
+ portalResponse.setStatus(PortalRestStatusEnum.OK);
+ portalResponse.setMessage("processEventNotification: notification created");
+ portalResponse.setResponse("NotificationId is :" + epItem.notificationId);
+ } catch (Exception ex) {
+ portalResponse.setStatus(PortalRestStatusEnum.ERROR);
+ response.setStatus(400);
+ portalResponse.setMessage(ex.toString());
+ }
+ return portalResponse;
+ }
+
+ /**
+ * Validates that mandatory fields are present.
+ *
+ * @param ticketEventNotif
+ * @return Error message if a problem is found; null if all is well.
+ */
+ private String validateTicketEventMessage(JsonNode ticketEventNotif) {
+ JsonNode application = ticketEventNotif.get("application");
+ JsonNode event = ticketEventNotif.get("event");
+ JsonNode header = event.get("header");
+ JsonNode eventSource=header.get("eventSource");
+ JsonNode body = event.get("body");
+ JsonNode SubscriberInfo = ticketEventNotif.get("SubscriberInfo");
+ JsonNode userList = SubscriberInfo.get("UserList");
+
+ if (application == null||application.asText().length()==0||application.asText().equalsIgnoreCase("null"))
+ return "Application is mandatory";
+ if (body == null)
+ return "body is mandatory";
+ if (eventSource == null||eventSource.asText().trim().length()==0||eventSource.asText().equalsIgnoreCase("null"))
+ return "Message Source is mandatory";
+ if (userList == null)
+ return "At least one user Id is mandatory";
+ JsonNode eventDate=body.get("eventDate");
+
+ if(eventDate!=null&&eventDate.asText().length()==8)
+ return "EventDate is invalid";
+ String UserIds[] = userList.toString().replace("[", "").replace("]", "").trim().replace("\"", "")
+ .split(",");
+ List<EPUser> users = userNotificationService.getUsersByOrgIds(Arrays.asList(UserIds));
+ if(users==null||users.size()==0)
+ return "Invalid Org User ID";
+ return null;
+ }
+
+}
diff --git a/ecomp-portal-BE-common/src/main/java/org/onap/portalapp/portal/controller/UserController.java b/ecomp-portal-BE-common/src/main/java/org/onap/portalapp/portal/controller/UserController.java
new file mode 100644
index 00000000..cbcd2639
--- /dev/null
+++ b/ecomp-portal-BE-common/src/main/java/org/onap/portalapp/portal/controller/UserController.java
@@ -0,0 +1,141 @@
+/*-
+ * ============LICENSE_START==========================================
+ * ONAP Portal
+ * ===================================================================
+ * Copyright (C) 2017 AT&T Intellectual Property. All rights reserved.
+ * ===================================================================
+ *
+ * Unless otherwise specified, all software contained herein is licensed
+ * under the Apache License, Version 2.0 (the "License");
+ * you may not use this software 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.
+ *
+ * Unless otherwise specified, all documentation contained herein is licensed
+ * under the Creative Commons License, Attribution 4.0 Intl. (the "License");
+ * you may not use this documentation except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * https://creativecommons.org/licenses/by/4.0/
+ *
+ * Unless required by applicable law or agreed to in writing, documentation
+ * 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.
+ *
+ * ============LICENSE_END============================================
+ *
+ * ECOMP is a trademark and service mark of AT&T Intellectual Property.
+ */
+package org.onap.portalapp.portal.controller;
+
+import javax.servlet.http.HttpServletRequest;
+
+import org.onap.portalapp.controller.EPRestrictedBaseController;
+import org.onap.portalapp.portal.domain.EPUser;
+import org.onap.portalapp.portal.ecomp.model.PortalRestResponse;
+import org.onap.portalapp.portal.ecomp.model.PortalRestStatusEnum;
+import org.onap.portalapp.portal.logging.aop.EPAuditLog;
+import org.onap.portalapp.portal.service.UserService;
+import org.onap.portalapp.portal.transport.ProfileDetail;
+import org.onap.portalapp.portal.utils.EcompPortalUtils;
+import org.onap.portalapp.util.EPUserUtils;
+import org.onap.portalsdk.core.logging.logic.EELFLoggerDelegate;
+import org.onap.portalsdk.core.onboarding.util.CipherUtil;
+import org.onap.portalsdk.core.util.SystemProperties;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.context.annotation.EnableAspectJAutoProxy;
+import org.springframework.web.bind.annotation.RequestBody;
+import org.springframework.web.bind.annotation.RequestMapping;
+import org.springframework.web.bind.annotation.RequestMethod;
+import org.springframework.web.bind.annotation.RestController;
+
+@RestController
+@org.springframework.context.annotation.Configuration
+@EnableAspectJAutoProxy
+@EPAuditLog
+public class UserController extends EPRestrictedBaseController {
+
+ private EELFLoggerDelegate logger = EELFLoggerDelegate.getLogger(UserController.class);
+
+ @Autowired
+ private UserService userService;
+
+ /**
+ * RESTful service method to get ECOMP Logged in User details.
+ *
+ * @param request
+ * HttpServletRequest
+ *
+ * @return PortalRestResponse of EPUser
+ */
+ @RequestMapping(value = { "/portalApi/loggedinUser" }, method = RequestMethod.GET, produces = "application/json")
+ public PortalRestResponse<ProfileDetail> getLoggedinUser(HttpServletRequest request) {
+ PortalRestResponse<ProfileDetail> portalRestResponse = null;
+ try {
+ EPUser user = EPUserUtils.getUserSession(request);
+ ProfileDetail profileDetail = new ProfileDetail(user.getFirstName(), user.getLastName(),
+ user.getMiddleInitial(), user.getEmail(), user.getLoginId(), CipherUtil.decryptPKC(user.getLoginPwd()));
+ portalRestResponse = new PortalRestResponse<ProfileDetail>(PortalRestStatusEnum.OK, "success",
+ profileDetail);
+ EcompPortalUtils.logAndSerializeObject(logger, "/portalApi/loggedinUser", "result =", profileDetail);
+ } catch (Exception e) {
+ portalRestResponse = new PortalRestResponse<ProfileDetail>(PortalRestStatusEnum.ERROR, e.getMessage(),
+ null);
+ logger.error(EELFLoggerDelegate.errorLogger, "getLoggedinUser failed", e);
+ }
+ return portalRestResponse;
+ }
+
+ /**
+ * RESTful service method to update ECOMP Logged in User in DB.
+ *
+ * @param request
+ * HttpServletRequest
+ * @param profileDetail
+ * Body with user information
+ * @return PortalRestResponse of String
+ */
+ @RequestMapping(value = {
+ "/portalApi/modifyLoggedinUser" }, method = RequestMethod.PUT, produces = "application/json")
+ public PortalRestResponse<String> modifyLoggedinUser(HttpServletRequest request,
+ @RequestBody ProfileDetail profileDetail) {
+ PortalRestResponse<String> portalRestResponse = null;
+ try {
+ String errorMsg = "";
+ if (profileDetail.getFirstName().equals("") || profileDetail.getLastName().equals("")
+ || profileDetail.getEmail().equals("") || profileDetail.getLoginId().equals("")
+ || profileDetail.getLoginPassword().equals("")) {
+ errorMsg = "Required field(s) is missing";
+ portalRestResponse = new PortalRestResponse<String>(PortalRestStatusEnum.ERROR, errorMsg, null);
+ logger.error(EELFLoggerDelegate.errorLogger, "modifyLoggedinUser failed", errorMsg);
+ } else {
+ EPUser user = EPUserUtils.getUserSession(request);
+ user.setFirstName(profileDetail.getFirstName());
+ user.setLastName(profileDetail.getLastName());
+ user.setEmail(profileDetail.getEmail());
+ user.setMiddleInitial(profileDetail.getMiddleName());
+ user.setLoginId(profileDetail.getLoginId());
+ user.setLoginPwd(CipherUtil.encryptPKC(profileDetail.getLoginPassword()));
+ userService.saveUser(user);
+ // Update user info in the session
+ request.getSession().setAttribute(SystemProperties.getProperty(SystemProperties.USER_ATTRIBUTE_NAME),
+ user);
+ portalRestResponse = new PortalRestResponse<String>(PortalRestStatusEnum.OK, "success", null);
+ EcompPortalUtils.logAndSerializeObject(logger, "/portalApi/modifyLoggedinUser", "result =", user);
+ }
+ } catch (Exception e) {
+ portalRestResponse = new PortalRestResponse<String>(PortalRestStatusEnum.ERROR, e.toString(), null);
+ logger.error(EELFLoggerDelegate.errorLogger, "modifyLoggedinUser failed", e);
+ }
+ return portalRestResponse;
+ }
+}
diff --git a/ecomp-portal-BE-common/src/main/java/org/onap/portalapp/portal/controller/UserNotificationController.java b/ecomp-portal-BE-common/src/main/java/org/onap/portalapp/portal/controller/UserNotificationController.java
new file mode 100644
index 00000000..d25ad2c7
--- /dev/null
+++ b/ecomp-portal-BE-common/src/main/java/org/onap/portalapp/portal/controller/UserNotificationController.java
@@ -0,0 +1,234 @@
+/*-
+ * ============LICENSE_START==========================================
+ * ONAP Portal
+ * ===================================================================
+ * Copyright (C) 2017 AT&T Intellectual Property. All rights reserved.
+ * ===================================================================
+ *
+ * Unless otherwise specified, all software contained herein is licensed
+ * under the Apache License, Version 2.0 (the "License");
+ * you may not use this software 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.
+ *
+ * Unless otherwise specified, all documentation contained herein is licensed
+ * under the Creative Commons License, Attribution 4.0 Intl. (the "License");
+ * you may not use this documentation except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * https://creativecommons.org/licenses/by/4.0/
+ *
+ * Unless required by applicable law or agreed to in writing, documentation
+ * 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.
+ *
+ * ============LICENSE_END============================================
+ *
+ * ECOMP is a trademark and service mark of AT&T Intellectual Property.
+ */
+package org.onap.portalapp.portal.controller;
+
+import java.util.ArrayList;
+import java.util.HashMap;
+import java.util.List;
+import java.util.Map;
+
+import javax.servlet.http.HttpServletRequest;
+import javax.servlet.http.HttpServletResponse;
+
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.context.annotation.EnableAspectJAutoProxy;
+import org.springframework.web.bind.annotation.PathVariable;
+import org.springframework.web.bind.annotation.RequestBody;
+import org.springframework.web.bind.annotation.RequestMapping;
+import org.springframework.web.bind.annotation.RequestMethod;
+import org.springframework.web.bind.annotation.RequestParam;
+import org.springframework.web.bind.annotation.RestController;
+import org.onap.portalapp.controller.EPRestrictedBaseController;
+import org.onap.portalapp.portal.domain.EPUser;
+import org.onap.portalapp.portal.domain.EcompAppRole;
+import org.onap.portalapp.portal.ecomp.model.PortalRestResponse;
+import org.onap.portalapp.portal.ecomp.model.PortalRestStatusEnum;
+import org.onap.portalapp.portal.logging.aop.EPAuditLog;
+import org.onap.portalapp.portal.service.FunctionalMenuService;
+import org.onap.portalapp.portal.service.UserNotificationService;
+import org.onap.portalapp.portal.transport.EpNotificationItem;
+import org.onap.portalapp.portal.transport.EpNotificationItemVO;
+import org.onap.portalapp.portal.transport.EpRoleNotificationItem;
+import org.onap.portalapp.portal.transport.FunctionalMenuRole;
+import org.onap.portalapp.portal.utils.EPCommonSystemProperties;
+import org.onap.portalapp.util.EPUserUtils;
+import org.onap.portalsdk.core.logging.logic.EELFLoggerDelegate;
+import org.onap.portalsdk.core.util.SystemProperties;
+import org.onap.portalsdk.core.web.support.UserUtils;
+
+@RestController
+@org.springframework.context.annotation.Configuration
+@EnableAspectJAutoProxy
+@EPAuditLog
+public class UserNotificationController extends EPRestrictedBaseController {
+
+ @Autowired
+ FunctionalMenuService functionalMenuService;
+
+ @Autowired
+ UserNotificationService userNotificationService;
+
+ EELFLoggerDelegate logger = EELFLoggerDelegate.getLogger(UserNotificationController.class);
+
+ @RequestMapping(value = {
+ "/portalApi/getFunctionalMenuRole" }, method = RequestMethod.GET, produces = "application/json")
+ public List<FunctionalMenuRole> getMenuIdRoleId(HttpServletRequest request, HttpServletResponse response) {
+ // EPUser user = EPUserUtils.getUserSession(request);
+ List<FunctionalMenuRole> menuRoleList = null;
+ menuRoleList = functionalMenuService.getFunctionalMenuRole();
+ return menuRoleList;
+ }
+
+ @RequestMapping(value = {
+ "/portalApi/getNotifications" }, method = RequestMethod.GET, produces = "application/json")
+ public PortalRestResponse<List<EpNotificationItem>> getNotifications(HttpServletRequest request,
+ HttpServletResponse response) {
+ EPUser user = EPUserUtils.getUserSession(request);
+ PortalRestResponse<List<EpNotificationItem>> portalRestResponse = null;
+ try {
+ List<EpNotificationItem> notificationList = userNotificationService.getNotifications(user.getId());
+ portalRestResponse = new PortalRestResponse<List<EpNotificationItem>>(PortalRestStatusEnum.OK, "success",
+ notificationList);
+ } catch (Exception e) {
+ logger.error(EELFLoggerDelegate.errorLogger, "getAllAppsAndContacts failed", e);
+ portalRestResponse = new PortalRestResponse<List<EpNotificationItem>>(PortalRestStatusEnum.ERROR,
+ e.getMessage(), null);
+ }
+ return portalRestResponse;
+ }
+
+ @RequestMapping(value = {
+ "/portalApi/getAdminNotifications" }, method = RequestMethod.GET, produces = "application/json")
+ public List<EpNotificationItemVO> getAdminNotifications(HttpServletRequest request, HttpServletResponse response) {
+ List<EpNotificationItemVO> adminNotificationList = null;
+ EPUser user = EPUserUtils.getUserSession(request);
+ adminNotificationList = userNotificationService.getAdminNotificationVOS(user.getId());
+ return adminNotificationList;
+ }
+
+ @RequestMapping(value = "/portalApi/saveNotification", method = RequestMethod.POST, produces = "application/json")
+ public PortalRestResponse<String> save(HttpServletRequest request, HttpServletResponse response,
+ @RequestBody EpNotificationItem notificationItem) {
+
+ if (notificationItem == null || notificationItem.getMsgHeader() == null)
+ return new PortalRestResponse<String>(PortalRestStatusEnum.ERROR, "FAILURE",
+ "Notification Header cannot be null or empty");
+ if (notificationItem.getEndTime().compareTo(notificationItem.getStartTime()) < 0) {
+ return new PortalRestResponse<String>(PortalRestStatusEnum.ERROR, "FAILURE",
+ "End Time should be greater than start time");
+ }
+
+ if ((notificationItem.getIsForAllRoles() == "N") && notificationItem.getRoleIds().isEmpty()) {
+ return new PortalRestResponse<String>(PortalRestStatusEnum.ERROR, "FAILURE",
+ "No Roles Ids Exist for the selected Roles");
+ }
+
+ Long creatorId = UserUtils.getUserIdAsLong(request);
+ notificationItem.setCreatorId(creatorId);
+
+ // Front-end date picker does not accept a time value, so all
+ // values are the start of the chosen day in the local time zone.
+ // Move the end time value to the very end of the chosen day.
+ // Avoid Calendar.getDefault() which uses the server's locale.
+ Long endTime = notificationItem.getEndTime().getTime();
+ endTime += (23 * 3600 + 59 * 60 + 59) * 1000;
+ notificationItem.getEndTime().setTime(endTime);
+
+ try {
+ userNotificationService.saveNotification(notificationItem);
+ } catch (Exception e) {
+ return new PortalRestResponse<String>(PortalRestStatusEnum.ERROR, "FAILURE", e.getMessage());
+ }
+ return new PortalRestResponse<String>(PortalRestStatusEnum.OK, "SUCCESS", "");
+ }
+
+ @RequestMapping(value = {
+ "/portalApi/notificationUpdateRate" }, method = RequestMethod.GET, produces = "application/json")
+ public PortalRestResponse<Map<String, String>> getNotificationUpdateRate(HttpServletRequest request) {
+ try {
+ String updateRate = SystemProperties.getProperty(EPCommonSystemProperties.NOTIFICATION_UPDATE_RATE);
+ String updateDuration = SystemProperties.getProperty(EPCommonSystemProperties.NOTIFICATION_UPDATE_DURATION);
+ Integer rateInMiliSec = Integer.valueOf(updateRate) * 1000;
+ Integer durationInMiliSec = Integer.valueOf(updateDuration) * 1000;
+ Map<String, String> results = new HashMap<String, String>();
+ results.put("updateRate", String.valueOf(rateInMiliSec));
+ results.put("updateDuration", String.valueOf(durationInMiliSec));
+ return new PortalRestResponse<>(PortalRestStatusEnum.OK, "success", results);
+ } catch (Exception e) {
+ logger.error(EELFLoggerDelegate.errorLogger, "getNotificationUpdateRate failed", e);
+ return new PortalRestResponse<>(PortalRestStatusEnum.ERROR, e.toString(), null);
+ }
+ }
+
+ @RequestMapping(value = {
+ "/portalApi/notificationRead" }, method = RequestMethod.GET, produces = "application/json")
+ public PortalRestResponse<Map<String, String>> notificationRead(
+ @RequestParam("notificationId") String notificationID, HttpServletRequest request) {
+ try {
+ userNotificationService.setNotificationRead(Long.parseLong(notificationID), UserUtils.getUserId(request));
+ return new PortalRestResponse<>(PortalRestStatusEnum.OK, "success", null);
+ } catch (Exception e) {
+ logger.error(EELFLoggerDelegate.errorLogger, "notificationRead failed", e);
+ return new PortalRestResponse<>(PortalRestStatusEnum.ERROR, e.toString(), null);
+ }
+ }
+
+ @RequestMapping(value = {
+ "/portalApi/getNotificationHistory" }, method = RequestMethod.GET, produces = "application/json")
+ public List<EpNotificationItemVO> getNotificationHistory(HttpServletRequest request, HttpServletResponse response) {
+ EPUser user = EPUserUtils.getUserSession(request);
+ List<EpNotificationItemVO> notificationList = null;
+ notificationList = userNotificationService.getNotificationHistoryVO(user.getId());
+ return notificationList;
+ }
+
+ @RequestMapping(value = { "/portalApi/notificationRole/{notificationId}/roles" }, method = {
+ RequestMethod.GET }, produces = "application/json")
+ public List<Integer> testGetRoles(HttpServletRequest request, @PathVariable("notificationId") Long notificationId) {
+ List<EpRoleNotificationItem> NotifRoles = userNotificationService.getNotificationRoles(notificationId);
+ ArrayList<Integer> rolesList = new ArrayList<Integer>();
+ for (EpRoleNotificationItem notifRole : NotifRoles) {
+ rolesList.add(notifRole.roleId);
+ }
+ return rolesList;
+ }
+
+ @RequestMapping(value = { "/portalApi/getNotificationAppRoles" }, method = {
+ RequestMethod.GET }, produces = "application/json")
+ public List<EcompAppRole> getNotificationAppRoles(HttpServletRequest request, HttpServletResponse response) {
+ List<EcompAppRole> epAppRoleList = null;
+ try {
+ epAppRoleList = userNotificationService.getAppRoleList();
+ } catch (Exception e) {
+ logger.error(EELFLoggerDelegate.errorLogger,
+ "Exception occurred while performing UserNofiticationController.getNotificationAppRoles. Details: ",
+ e);
+ }
+ return epAppRoleList;
+ }
+
+ @RequestMapping(value = {
+ "/portalApi/getMessageRecipients" }, method = RequestMethod.GET, produces = "application/json")
+ public List<String> getMessageRecipients(@RequestParam("notificationId") Long notificationID) {
+ // EPUser user = EPUserUtils.getUserSession(request);
+ List<String> messageUserRecipients = null;
+ messageUserRecipients = userNotificationService.getMessageRecipients(notificationID);
+ return messageUserRecipients;
+ }
+
+}
diff --git a/ecomp-portal-BE-common/src/main/java/org/onap/portalapp/portal/controller/UserRolesController.java b/ecomp-portal-BE-common/src/main/java/org/onap/portalapp/portal/controller/UserRolesController.java
new file mode 100644
index 00000000..167fa2e8
--- /dev/null
+++ b/ecomp-portal-BE-common/src/main/java/org/onap/portalapp/portal/controller/UserRolesController.java
@@ -0,0 +1,546 @@
+/*-
+ * ============LICENSE_START==========================================
+ * ONAP Portal
+ * ===================================================================
+ * Copyright (C) 2017 AT&T Intellectual Property. All rights reserved.
+ * ===================================================================
+ *
+ * Unless otherwise specified, all software contained herein is licensed
+ * under the Apache License, Version 2.0 (the "License");
+ * you may not use this software 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.
+ *
+ * Unless otherwise specified, all documentation contained herein is licensed
+ * under the Creative Commons License, Attribution 4.0 Intl. (the "License");
+ * you may not use this documentation except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * https://creativecommons.org/licenses/by/4.0/
+ *
+ * Unless required by applicable law or agreed to in writing, documentation
+ * 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.
+ *
+ * ============LICENSE_END============================================
+ *
+ * ECOMP is a trademark and service mark of AT&T Intellectual Property.
+ */
+package org.onap.portalapp.portal.controller;
+
+import java.util.ArrayList;
+import java.util.Arrays;
+import java.util.Collections;
+import java.util.Comparator;
+import java.util.List;
+
+import javax.servlet.http.HttpServletRequest;
+import javax.servlet.http.HttpServletResponse;
+
+import org.apache.cxf.transport.http.HTTPException;
+import org.onap.portalapp.controller.EPRestrictedBaseController;
+import org.onap.portalapp.portal.domain.EPRole;
+import org.onap.portalapp.portal.domain.EPUser;
+import org.onap.portalapp.portal.domain.EPUserAppCatalogRoles;
+import org.onap.portalapp.portal.domain.EcompAuditLog;
+import org.onap.portalapp.portal.domain.ExternalSystemAccess;
+import org.onap.portalapp.portal.ecomp.model.PortalRestResponse;
+import org.onap.portalapp.portal.ecomp.model.PortalRestStatusEnum;
+import org.onap.portalapp.portal.logging.aop.EPAuditLog;
+import org.onap.portalapp.portal.logging.aop.EPEELFLoggerAdvice;
+import org.onap.portalapp.portal.logging.logic.EPLogUtil;
+import org.onap.portalapp.portal.service.AdminRolesService;
+import org.onap.portalapp.portal.service.ApplicationsRestClientService;
+import org.onap.portalapp.portal.service.SearchService;
+import org.onap.portalapp.portal.service.UserRolesService;
+import org.onap.portalapp.portal.transport.AppNameIdIsAdmin;
+import org.onap.portalapp.portal.transport.AppWithRolesForUser;
+import org.onap.portalapp.portal.transport.AppsListWithAdminRole;
+import org.onap.portalapp.portal.transport.FieldsValidator;
+import org.onap.portalapp.portal.transport.RoleInAppForUser;
+import org.onap.portalapp.portal.transport.UserApplicationRoles;
+import org.onap.portalapp.portal.utils.EPCommonSystemProperties;
+import org.onap.portalapp.portal.utils.EcompPortalUtils;
+import org.onap.portalapp.portal.utils.PortalConstants;
+import org.onap.portalapp.util.EPUserUtils;
+import org.onap.portalsdk.core.domain.AuditLog;
+import org.onap.portalsdk.core.logging.logic.EELFLoggerDelegate;
+import org.onap.portalsdk.core.restful.domain.EcompRole;
+import org.onap.portalsdk.core.service.AuditService;
+import org.onap.portalsdk.core.util.SystemProperties;
+import org.slf4j.MDC;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.context.annotation.EnableAspectJAutoProxy;
+import org.springframework.web.bind.annotation.PathVariable;
+import org.springframework.web.bind.annotation.RequestBody;
+import org.springframework.web.bind.annotation.RequestMapping;
+import org.springframework.web.bind.annotation.RequestMethod;
+import org.springframework.web.bind.annotation.RequestParam;
+import org.springframework.web.bind.annotation.RestController;
+
+@RestController
+@org.springframework.context.annotation.Configuration
+@EnableAspectJAutoProxy
+@EPAuditLog
+public class UserRolesController extends EPRestrictedBaseController {
+
+ private EELFLoggerDelegate logger = EELFLoggerDelegate.getLogger(UserRolesController.class);
+
+ @Autowired
+ private SearchService searchService;
+ @Autowired
+ private AdminRolesService adminRolesService;
+ private @Autowired UserRolesService userRolesService;
+ @Autowired
+ private ApplicationsRestClientService applicationsRestClientService;
+ @Autowired
+ private AuditService auditService;
+
+ private static final String FAILURE = "failure";
+
+ /**
+ * RESTful service method to fetch users in the WebPhone external service
+ *
+ * @param request
+ * HttpServletRequest
+ * @param searchString
+ * search string
+ * @param response
+ * HttpServletResponse
+ * @return array of found users as json
+ */
+ @RequestMapping(value = { "/portalApi/queryUsers" }, method = RequestMethod.GET, produces = "application/json")
+ public String getPhoneBookSearchResult(HttpServletRequest request, @RequestParam("search") String searchString,
+ HttpServletResponse response) {
+ EPUser user = EPUserUtils.getUserSession(request);
+ String searchResult = null;
+ if (!adminRolesService.isSuperAdmin(user) && !adminRolesService.isAccountAdmin(user)) {
+ EcompPortalUtils.setBadPermissions(user, response, "getPhoneBookSearchResult");
+ } else {
+ searchString = searchString.trim();
+ if (searchString.length() > 2) {
+ searchResult = searchService.searchUsersInPhoneBook(searchString);
+ } else {
+ logger.info(EELFLoggerDelegate.errorLogger,
+ "getPhoneBookSearchResult - too short search string: " + searchString);
+ }
+ }
+ EcompPortalUtils.logAndSerializeObject(logger, "/portalApi/queryUsers", "result =", searchResult);
+
+ return searchResult;
+ }
+
+ /**
+ * RESTful service method to fetch applications where user is admin
+ *
+ * @param request
+ * HttpServletRequest
+ * @param orgUserId
+ * search string
+ * @param response
+ * HttpServletResponse
+ * @return for GET: array of all applications with boolean
+ * isAdmin=true/false for each application
+ */
+ @RequestMapping(value = { "/portalApi/adminAppsRoles" }, method = {
+ RequestMethod.GET }, produces = "application/json")
+ public AppsListWithAdminRole getAppsWithAdminRoleStateForUser(HttpServletRequest request,
+ @RequestParam("user") String orgUserId, HttpServletResponse response) {
+
+ EPUser user = EPUserUtils.getUserSession(request);
+ AppsListWithAdminRole result = null;
+ if (!adminRolesService.isSuperAdmin(user)) {
+ EcompPortalUtils.setBadPermissions(user, response, "getAppsWithAdminRoleStateForUser");
+ } else {
+ if (EcompPortalUtils.legitimateUserId(orgUserId)) {
+ result = adminRolesService.getAppsWithAdminRoleStateForUser(orgUserId);
+ } else {
+ logger.info(EELFLoggerDelegate.errorLogger,
+ "getAppsWithAdminRoleStateForUser - parms error, no Organization User ID");
+ response.setStatus(HttpServletResponse.SC_BAD_REQUEST);
+ }
+ }
+
+ StringBuilder adminAppRoles = new StringBuilder();
+ if(result != null){
+ if ( result.appsRoles.size() >= 1) {
+ adminAppRoles.append("User '" + result.orgUserId + "' has admin role to the apps = {");
+ for (AppNameIdIsAdmin adminAppRole : result.appsRoles) {
+ if (adminAppRole.isAdmin) {
+ adminAppRoles.append(adminAppRole.appName + ", ");
+ }
+ }
+ adminAppRoles.append("}.");
+ } else {
+ adminAppRoles.append("User '" + result.orgUserId + "' has no Apps with Admin Role.");
+ }
+ }else{
+ logger.error(EELFLoggerDelegate.errorLogger, "putAppWithUserRoleStateForUser: getAppsWithAdminRoleStateForUser result is null");
+ }
+
+ logger.info(EELFLoggerDelegate.errorLogger, adminAppRoles.toString());
+
+ EcompPortalUtils.logAndSerializeObject(logger, "/portalApi/adminAppsRoles", "get result =", result);
+
+ return result;
+ }
+
+ /**
+ *
+ * @param request
+ * HttpServletRequest
+ * @param newAppsListWithAdminRoles
+ * new apps
+ * @param response
+ * HttpServletResponse
+ * @return FieldsValidator
+ */
+ @RequestMapping(value = { "/portalApi/adminAppsRoles" }, method = {
+ RequestMethod.PUT }, produces = "application/json")
+ public FieldsValidator putAppsWithAdminRoleStateForUser(HttpServletRequest request,
+ @RequestBody AppsListWithAdminRole newAppsListWithAdminRoles, HttpServletResponse response) {
+
+ // newAppsListWithAdminRoles.appsRoles
+ FieldsValidator fieldsValidator = new FieldsValidator();
+ StringBuilder newAppRoles = new StringBuilder();
+ if(newAppsListWithAdminRoles != null ){
+ if (newAppsListWithAdminRoles.appsRoles.size() >= 1) {
+ newAppRoles.append("User '" + newAppsListWithAdminRoles.orgUserId + "' has admin role to the apps = { ");
+ for (AppNameIdIsAdmin adminAppRole : newAppsListWithAdminRoles.appsRoles) {
+ if (adminAppRole.isAdmin) {
+ newAppRoles.append(adminAppRole.appName + " ,");
+ }
+ }
+ newAppRoles.deleteCharAt(newAppRoles.length() - 1);
+ newAppRoles.append("}.");
+ } else {
+ newAppRoles.append("User '" + newAppsListWithAdminRoles.orgUserId + "' has no Apps with Admin Role.");
+ }
+ }else{
+ logger.error(EELFLoggerDelegate.errorLogger, "putAppWithUserRoleStateForUser: putAppsWithAdminRoleStateForUser result is null");
+ }
+
+ logger.info(EELFLoggerDelegate.errorLogger, newAppRoles.toString());
+
+ EPUser user = EPUserUtils.getUserSession(request);
+ boolean changesApplied = false;
+
+ if (!adminRolesService.isSuperAdmin(user)) {
+ EcompPortalUtils.setBadPermissions(user, response, "putAppsWithAdminRoleStateForUser");
+ } else {
+ changesApplied = adminRolesService.setAppsWithAdminRoleStateForUser(newAppsListWithAdminRoles);
+ AuditLog auditLog = new AuditLog();
+ auditLog.setUserId(user.getId());
+ auditLog.setActivityCode(EcompAuditLog.CD_ACTIVITY_UPDATE_ACCOUNT_ADMIN);
+ auditLog.setAffectedRecordId(newAppsListWithAdminRoles.orgUserId);
+ auditLog.setComments(EcompPortalUtils.truncateString(newAppRoles.toString(), PortalConstants.AUDIT_LOG_COMMENT_SIZE));
+ auditService.logActivity(auditLog, null);
+
+ MDC.put(EPCommonSystemProperties.AUDITLOG_BEGIN_TIMESTAMP, EPEELFLoggerAdvice.getCurrentDateTimeUTC());
+ MDC.put(EPCommonSystemProperties.AUDITLOG_END_TIMESTAMP, EPEELFLoggerAdvice.getCurrentDateTimeUTC());
+ EcompPortalUtils.calculateDateTimeDifferenceForLog(
+ MDC.get(EPCommonSystemProperties.AUDITLOG_BEGIN_TIMESTAMP),
+ MDC.get(EPCommonSystemProperties.AUDITLOG_END_TIMESTAMP));
+ logger.info(EELFLoggerDelegate.auditLogger,
+ EPLogUtil.formatAuditLogMessage("UserRolesController.putAppsWithAdminRoleStateForUser",
+ EcompAuditLog.CD_ACTIVITY_UPDATE_ACCOUNT_ADMIN, user.getOrgUserId(),
+ newAppsListWithAdminRoles.orgUserId, newAppRoles.toString()));
+ MDC.remove(EPCommonSystemProperties.AUDITLOG_BEGIN_TIMESTAMP);
+ MDC.remove(EPCommonSystemProperties.AUDITLOG_END_TIMESTAMP);
+ MDC.remove(SystemProperties.MDC_TIMER);
+ }
+ EcompPortalUtils.logAndSerializeObject(logger, "/portalApi/adminAppsRoles", "put result =", changesApplied);
+
+ return fieldsValidator;
+ }
+
+ /**
+ * It returns a list of user app roles for single app
+ *
+ * @param request
+ * HttpServletRequest
+ * @param response
+ * HttpServletResponse
+ * @param orgUserId
+ * user ID
+ * @param appid
+ * application ID
+ * @param extRequestValue
+ * set to false if request is from users page otherwise true
+ * @return List<RoleInAppForUser>
+ */
+ @RequestMapping(value = { "/portalApi/userAppRoles" }, method = {
+ RequestMethod.GET }, produces = "application/json")
+ public List<RoleInAppForUser> getAppRolesForUser(HttpServletRequest request, @RequestParam("user") String orgUserId,
+ @RequestParam("app") Long appid, @RequestParam("externalRequest") Boolean extRequestValue,
+ HttpServletResponse response) {
+ EPUser user = EPUserUtils.getUserSession(request);
+ List<RoleInAppForUser> result = null;
+ String feErrorString = "";
+ if (!adminRolesService.isAccountAdmin(user)) {
+ EcompPortalUtils.setBadPermissions(user, response, "getAppRolesForUser");
+ feErrorString = EcompPortalUtils.getFEErrorString(true, response.getStatus());
+ } else {
+ if (EcompPortalUtils.legitimateUserId(orgUserId)) {
+ result = userRolesService.getAppRolesForUser(appid, orgUserId, extRequestValue);
+ int responseCode = EcompPortalUtils.getExternalAppResponseCode();
+ if (responseCode != 0 && responseCode != 200) {
+ // external error
+ response.setStatus(responseCode);
+ feErrorString = EcompPortalUtils.getFEErrorString(false, responseCode);
+ } else if (result == null) {
+ // If the result is null, there was an internal ecomp error
+ // in the service call.
+ response.setStatus(HttpServletResponse.SC_INTERNAL_SERVER_ERROR);
+ feErrorString = EcompPortalUtils.getFEErrorString(true,
+ HttpServletResponse.SC_INTERNAL_SERVER_ERROR);
+ }
+ } else {
+ logger.info(EELFLoggerDelegate.errorLogger, "getAppRolesForUser - no Organization User ID");
+ response.setStatus(HttpServletResponse.SC_BAD_REQUEST);
+ feErrorString = EcompPortalUtils.getFEErrorString(true, HttpServletResponse.SC_BAD_REQUEST);
+ }
+ }
+
+ StringBuilder sbUserApps = new StringBuilder();
+ if (result != null && result.size() >= 1) {
+ sbUserApps.append("User '" + orgUserId + "' has Roles={");
+ for (RoleInAppForUser appRole : result) {
+ if (appRole.isApplied) {
+ sbUserApps.append(appRole.roleName + ", ");
+ }
+ }
+ sbUserApps.append("} assigned to the appId '" + appid + "'.");
+ } else {
+ // Not sure creating an empty object will make any difference
+ // but would like to give it a shot for defect #DE221057
+ if (result == null) {
+ result = new ArrayList<RoleInAppForUser>();
+ }
+ sbUserApps.append("User '" + orgUserId + "' and appid " + appid + " has no roles");
+ }
+ logger.info(EELFLoggerDelegate.errorLogger, sbUserApps.toString());
+
+ EcompPortalUtils.logAndSerializeObject(logger, "/portalApi/userAppRoles", "get result =", result);
+ if (feErrorString != "") {
+ logger.debug(EELFLoggerDelegate.debugLogger, "LR: FEErrorString to header: " + feErrorString);
+
+ response.addHeader("FEErrorString", feErrorString);
+ response.addHeader("Access-Control-Expose-Headers", "FEErrorString");
+ }
+ return result;
+ }
+
+ @RequestMapping(value = { "/portalApi/userAppRoles" }, method = {
+ RequestMethod.PUT }, produces = "application/json")
+ public FieldsValidator putAppWithUserRoleStateForUser(HttpServletRequest request,
+ @RequestBody AppWithRolesForUser newAppRolesForUser, HttpServletResponse response) {
+ FieldsValidator fieldsValidator = new FieldsValidator();
+ StringBuilder sbUserApps = new StringBuilder();
+ if (newAppRolesForUser != null) {
+ sbUserApps.append("User '" + newAppRolesForUser.orgUserId);
+ if (newAppRolesForUser.appRoles != null && newAppRolesForUser.appRoles.size() >= 1) {
+ sbUserApps.append("' has roles = { ");
+ for (RoleInAppForUser appRole : newAppRolesForUser.appRoles) {
+ if (appRole.isApplied) {
+ sbUserApps.append(appRole.roleName + " ,");
+ }
+ }
+ sbUserApps.deleteCharAt(sbUserApps.length() - 1);
+ sbUserApps.append("} assigned for the app " + newAppRolesForUser.appId);
+ } else {
+ sbUserApps.append("' has no roles assigned for app " + newAppRolesForUser.appId);
+ }
+ }
+ logger.info(EELFLoggerDelegate.applicationLogger, "putAppWithUserRoleStateForUser: {}", sbUserApps.toString());
+
+ EPUser user = EPUserUtils.getUserSession(request);
+ boolean changesApplied = false;
+ if (!adminRolesService.isAccountAdmin(user)) {
+ EcompPortalUtils.setBadPermissions(user, response, "putAppWithUserRoleStateForUser");
+ } else if(newAppRolesForUser==null){
+ logger.error(EELFLoggerDelegate.errorLogger, "putAppWithUserRoleStateForUser: newAppRolesForUser is null");
+ } else{
+ changesApplied = userRolesService.setAppWithUserRoleStateForUser(user, newAppRolesForUser);
+ if (changesApplied) {
+ logger.info(EELFLoggerDelegate.applicationLogger,
+ "putAppWithUserRoleStateForUser: succeeded for app {}, user {}", newAppRolesForUser.appId,
+ newAppRolesForUser.orgUserId);
+
+ MDC.put(EPCommonSystemProperties.AUDITLOG_BEGIN_TIMESTAMP, EPEELFLoggerAdvice.getCurrentDateTimeUTC());
+ AuditLog auditLog = new AuditLog();
+ auditLog.setUserId(user.getId());
+ auditLog.setActivityCode(EcompAuditLog.CD_ACTIVITY_UPDATE_USER);
+ auditLog.setAffectedRecordId(newAppRolesForUser.orgUserId);
+ auditLog.setComments(EcompPortalUtils.truncateString(sbUserApps.toString(), PortalConstants.AUDIT_LOG_COMMENT_SIZE));
+ auditService.logActivity(auditLog, null);
+
+ MDC.put(EPCommonSystemProperties.AUDITLOG_END_TIMESTAMP, EPEELFLoggerAdvice.getCurrentDateTimeUTC());
+ EcompPortalUtils.calculateDateTimeDifferenceForLog(
+ MDC.get(EPCommonSystemProperties.AUDITLOG_BEGIN_TIMESTAMP),
+ MDC.get(EPCommonSystemProperties.AUDITLOG_END_TIMESTAMP));
+ logger.info(EELFLoggerDelegate.auditLogger,
+ EPLogUtil.formatAuditLogMessage("UserRolesController.putAppWithUserRoleStateForUser",
+ EcompAuditLog.CD_ACTIVITY_UPDATE_USER, user.getOrgUserId(),
+ newAppRolesForUser.orgUserId, sbUserApps.toString()));
+ MDC.remove(EPCommonSystemProperties.AUDITLOG_BEGIN_TIMESTAMP);
+ MDC.remove(EPCommonSystemProperties.AUDITLOG_END_TIMESTAMP);
+ MDC.remove(SystemProperties.MDC_TIMER);
+ } else {
+ logger.error(EELFLoggerDelegate.errorLogger,
+ "putAppWithUserRoleStateForUser: failed for app {}, user {}", newAppRolesForUser.appId,
+ newAppRolesForUser.orgUserId);
+ }
+ }
+
+ EcompPortalUtils.logAndSerializeObject(logger, "/portalApi/userAppRoles", "put result =", changesApplied);
+ return fieldsValidator;
+ }
+
+ @RequestMapping(value = { "/portalApi/updateRemoteUserProfile" }, method = {
+ RequestMethod.GET }, produces = "application/json")
+ public PortalRestResponse<String> updateRemoteUserProfile(HttpServletRequest request,
+ HttpServletResponse response) {
+
+ String updateRemoteUserFlag = FAILURE;
+ try {
+ // saveNewUser = userService.saveNewUser(newUser);
+ String orgUserId = request.getParameter("loginId");
+ Long appId = Long.parseLong(request.getParameter("appId"));
+ userRolesService.updateRemoteUserProfile(orgUserId, appId);
+
+ } catch (Exception e) {
+ return new PortalRestResponse<String>(PortalRestStatusEnum.OK, updateRemoteUserFlag, e.getMessage());
+ }
+ return new PortalRestResponse<String>(PortalRestStatusEnum.ERROR, updateRemoteUserFlag, "");
+
+ }
+
+ @RequestMapping(value = { "/portalApi/app/{appId}/users" }, method = {
+ RequestMethod.GET }, produces = "application/json")
+ public List<UserApplicationRoles> getUsersFromAppEndpoint(HttpServletRequest request,
+ @PathVariable("appId") Long appId) throws HTTPException {
+ try {
+ logger.debug(EELFLoggerDelegate.debugLogger, "/portalApi/app/{}/users was invoked", appId);
+ List<UserApplicationRoles> appUsers = userRolesService.getUsersFromAppEndpoint(appId);
+ return appUsers;
+ } catch (Exception e) {
+ logger.error(EELFLoggerDelegate.errorLogger, "getUsersFromAppEndpoint failed", e);
+ return new ArrayList<UserApplicationRoles>();
+ }
+ }
+
+ @RequestMapping(value = { "/portalApi/app/{appId}/roles" }, method = {
+ RequestMethod.GET }, produces = "application/json")
+ public List<EcompRole> testGetRoles(HttpServletRequest request, @PathVariable("appId") Long appId)
+ throws HTTPException {
+ EcompRole[] appRoles = applicationsRestClientService.get(EcompRole[].class, appId, "/roles");
+ List<EcompRole> rolesList = Arrays.asList(appRoles);
+ EcompPortalUtils.logAndSerializeObject(logger, "/portalApi/app/{appId}/roles", "response for appId=" + appId,
+ rolesList);
+
+ return rolesList;
+ }
+
+ @RequestMapping(value = { "/portalApi/admin/import/app/{appId}/roles" }, method = {
+ RequestMethod.GET }, produces = "application/json")
+ public List<EPRole> importRolesFromRemoteApplication(HttpServletRequest request, @PathVariable("appId") Long appId)
+ throws HTTPException {
+ List<EPRole> rolesList = userRolesService.importRolesFromRemoteApplication(appId);
+ EcompPortalUtils.logAndSerializeObject(logger, "/portalApi/admin/import/app/{appId}/roles",
+ "response for appId=" + appId, rolesList);
+
+ return rolesList;
+ }
+
+ @RequestMapping(value = { "/portalApi/app/{appId}/user/{orgUserId}/roles" }, method = {
+ RequestMethod.GET }, produces = "application/json")
+ public EcompRole testGetRoles(HttpServletRequest request, @PathVariable("appId") Long appId,
+ @PathVariable("orgUserId") String orgUserId) throws Exception {
+ if (!EcompPortalUtils.legitimateUserId(orgUserId)) {
+ String msg = "Error /user/<user>/roles not legitimate orgUserId = " + orgUserId;
+ logger.error(EELFLoggerDelegate.errorLogger, msg);
+ throw new Exception(msg);
+ }
+ EcompRole[] roles = applicationsRestClientService.get(EcompRole[].class, appId,
+ String.format("/user/%s/roles", orgUserId));
+ if (roles.length != 1) {
+ String msg = "Error /user/<user>/roles returned array. expected size 1 recieved size = " + roles.length;
+ logger.error(EELFLoggerDelegate.errorLogger, msg);
+ throw new Exception(msg);
+ }
+
+ EcompPortalUtils.logAndSerializeObject(logger, "/portalApi/app/{appId}/user/{orgUserId}/roles",
+ "response for appId='" + appId + "' and orgUserId='" + orgUserId + "'", roles[0]);
+ return roles[0];
+ }
+
+ @RequestMapping(value = { "/portalApi/saveUserAppRoles" }, method = {
+ RequestMethod.PUT }, produces = "application/json")
+ public FieldsValidator putAppWithUserRoleRequest(HttpServletRequest request,
+ @RequestBody AppWithRolesForUser newAppRolesForUser, HttpServletResponse response) {
+ FieldsValidator fieldsValidator = null;
+ try {
+
+ EPUser user = EPUserUtils.getUserSession(request);
+ fieldsValidator = userRolesService.putUserAppRolesRequest(newAppRolesForUser, user);
+ response.setStatus(fieldsValidator.httpStatusCode.intValue());
+
+ } catch (Exception e) {
+ logger.error(EELFLoggerDelegate.errorLogger, "putAppWithUserRoleRequest failed", e);
+
+ }
+ // return fieldsValidator;
+ EcompPortalUtils.logAndSerializeObject(logger, "/portalApi/saveUserAppRoles", "PUT result =",
+ response.getStatus());
+ return fieldsValidator;
+ }
+
+ @RequestMapping(value = { "/portalApi/appCatalogRoles" }, method = {
+ RequestMethod.GET }, produces = "application/json")
+ public List<EPUserAppCatalogRoles> getUserAppCatalogRoles(HttpServletRequest request,
+ @RequestParam("appName") String appName) {
+ EPUser user = EPUserUtils.getUserSession(request);
+ List<EPUserAppCatalogRoles> userAppRoleList = null;
+ try {
+ userAppRoleList = userRolesService.getUserAppCatalogRoles(user, appName);
+ } catch (Exception e) {
+ logger.error(EELFLoggerDelegate.errorLogger, "putUserWidgetsSortPref failed", e);
+
+ }
+ Collections.sort(userAppRoleList, getUserAppCatalogRolesComparator);
+ EcompPortalUtils.logAndSerializeObject(logger, "/portalApi/userApplicationRoles", "result =", userAppRoleList);
+
+ return userAppRoleList;
+
+ }
+
+ private Comparator<EPUserAppCatalogRoles> getUserAppCatalogRolesComparator = new Comparator<EPUserAppCatalogRoles>() {
+ public int compare(EPUserAppCatalogRoles o1, EPUserAppCatalogRoles o2) {
+ return o1.getRolename().compareTo(o2.getRolename());
+ }
+ };
+
+ @RequestMapping(value = "/portalApi/externalRequestAccessSystem", method = RequestMethod.GET, produces = "application/json")
+ public ExternalSystemAccess readExternalRequestAccess(HttpServletRequest request) {
+ ExternalSystemAccess result = null;
+ try {
+ result = userRolesService.getExternalRequestAccess();
+ EcompPortalUtils.logAndSerializeObject(logger, "/portalApi/externalRequestAccessSystem", "GET result =",
+ result);
+ } catch (Exception e) {
+ logger.error(EELFLoggerDelegate.errorLogger, "readExternalRequestAccess failed: " + e.getMessage());
+ }
+ return result;
+ }
+
+}
diff --git a/ecomp-portal-BE-common/src/main/java/org/onap/portalapp/portal/controller/WebAnalyticsExtAppController.java b/ecomp-portal-BE-common/src/main/java/org/onap/portalapp/portal/controller/WebAnalyticsExtAppController.java
new file mode 100644
index 00000000..35e26c04
--- /dev/null
+++ b/ecomp-portal-BE-common/src/main/java/org/onap/portalapp/portal/controller/WebAnalyticsExtAppController.java
@@ -0,0 +1,257 @@
+/*-
+ * ============LICENSE_START==========================================
+ * ONAP Portal
+ * ===================================================================
+ * Copyright (C) 2017 AT&T Intellectual Property. All rights reserved.
+ * ===================================================================
+ *
+ * Unless otherwise specified, all software contained herein is licensed
+ * under the Apache License, Version 2.0 (the "License");
+ * you may not use this software 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.
+ *
+ * Unless otherwise specified, all documentation contained herein is licensed
+ * under the Creative Commons License, Attribution 4.0 Intl. (the "License");
+ * you may not use this documentation except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * https://creativecommons.org/licenses/by/4.0/
+ *
+ * Unless required by applicable law or agreed to in writing, documentation
+ * 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.
+ *
+ * ============LICENSE_END============================================
+ *
+ * ECOMP is a trademark and service mark of AT&T Intellectual Property.
+ */
+package org.onap.portalapp.portal.controller;
+
+import java.io.InputStream;
+import java.nio.charset.StandardCharsets;
+import java.util.HashMap;
+import java.util.Map;
+
+import javax.servlet.http.HttpServletRequest;
+
+import org.apache.commons.io.IOUtils;
+import org.onap.portalapp.controller.EPRestrictedRESTfulBaseController;
+import org.onap.portalapp.portal.domain.EPApp;
+import org.onap.portalapp.portal.domain.EcompAuditLog;
+import org.onap.portalapp.portal.logging.aop.EPAuditLog;
+import org.onap.portalapp.portal.logging.aop.EPEELFLoggerAdvice;
+import org.onap.portalapp.portal.logging.logic.EPLogUtil;
+import org.onap.portalapp.portal.service.AppsCacheService;
+import org.onap.portalapp.portal.service.ConsulHealthService;
+import org.onap.portalapp.portal.transport.Analytics;
+import org.onap.portalapp.portal.utils.EPCommonSystemProperties;
+import org.onap.portalapp.portal.utils.EcompPortalUtils;
+import org.onap.portalapp.portal.utils.PortalConstants;
+import org.onap.portalsdk.core.logging.logic.EELFLoggerDelegate;
+import org.onap.portalsdk.core.onboarding.crossapi.PortalAPIResponse;
+import org.onap.portalsdk.core.service.AuditService;
+import org.onap.portalsdk.core.util.SystemProperties;
+import org.slf4j.MDC;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.context.annotation.Configuration;
+import org.springframework.context.annotation.EnableAspectJAutoProxy;
+import org.springframework.http.HttpEntity;
+import org.springframework.http.HttpHeaders;
+import org.springframework.http.HttpMethod;
+import org.springframework.http.MediaType;
+import org.springframework.http.ResponseEntity;
+import org.springframework.util.concurrent.FailureCallback;
+import org.springframework.util.concurrent.ListenableFuture;
+import org.springframework.util.concurrent.SuccessCallback;
+import org.springframework.web.bind.annotation.RequestBody;
+import org.springframework.web.bind.annotation.RequestMapping;
+import org.springframework.web.bind.annotation.RequestMethod;
+import org.springframework.web.bind.annotation.ResponseBody;
+import org.springframework.web.bind.annotation.RestController;
+import org.springframework.web.client.AsyncRestTemplate;
+
+import io.swagger.annotations.ApiOperation;
+
+@RestController
+@RequestMapping(PortalConstants.REST_AUX_API)
+@Configuration
+@EnableAspectJAutoProxy
+@EPAuditLog
+public class WebAnalyticsExtAppController extends EPRestrictedRESTfulBaseController {
+
+ @Autowired
+ private ConsulHealthService consulHealthService;
+
+ private static final String MACHINE_LEARNING_SERVICE_CTX = "/ml_api";
+ private static final String REGISTER_ACTION = MACHINE_LEARNING_SERVICE_CTX + "/" + "registerAction";
+ private static final String CONSUL_ML_SERVICE_ID = "machine-learning";
+ private static final String APP_KEY = "uebkey";
+ private EELFLoggerDelegate logger = EELFLoggerDelegate.getLogger(WebAnalyticsExtAppController.class);
+ private AsyncRestTemplate restTemplate = new AsyncRestTemplate();
+
+
+ @Autowired
+ AuditService auditService;
+
+ @Autowired
+ AppsCacheService appCacheService;
+
+ SuccessCallback<ResponseEntity<String>> successCallback = new SuccessCallback<ResponseEntity<String>>() {
+ @Override
+ public void onSuccess(ResponseEntity<String> arg) {
+ logger.info(EELFLoggerDelegate.debugLogger, arg.getBody());
+ }
+ };
+
+ FailureCallback failureCallback = new FailureCallback() {
+ @Override
+ public void onFailure(Throwable arg) {
+ logger.error(EELFLoggerDelegate.errorLogger, "storeAuxAnalytics failed", arg);
+ }
+ };
+
+ protected boolean isAuxRESTfulCall() {
+ return true;
+ }
+
+ /**
+ * Answers requests from partner applications for a file that is expected to
+ * contain javascript to support web analytics.
+ *
+ * @param request
+ * HttpServletRequest
+ * @return String
+ * @throws Exception
+ * on failure
+ */
+ @ApiOperation(value = "Gets javascript with functions that support gathering and reporting web analytics.", response = String.class)
+ @RequestMapping(value = { "/analytics" }, method = RequestMethod.GET, produces = "application/javascript")
+ public String getAnalyticsScript(HttpServletRequest request) throws Exception {
+ String responseText = "";
+ final String fileName = "analytics.txt";
+ InputStream analyticsFileStream = null;
+ try {
+ analyticsFileStream = this.getClass().getClassLoader().getResourceAsStream(fileName);
+ responseText = IOUtils.toString(analyticsFileStream, StandardCharsets.UTF_8.name());
+ } catch (Exception e) {
+ logger.error(EELFLoggerDelegate.errorLogger, "Error reading contents of the file " + fileName, e);
+ } finally {
+ if (analyticsFileStream != null)
+ analyticsFileStream.close();
+ }
+
+ String feURLContext = SystemProperties.getProperty("frontend_url");
+ String feURL = feURLContext.substring(0, feURLContext.lastIndexOf('/'));
+
+ responseText = responseText.replace("PORTAL_ENV_URL", feURL);
+ return responseText;
+ }
+
+ /**
+ * Accepts data from partner applications with web analytics data.
+ *
+ * @param request
+ * HttpServletRequest
+ * @param analyticsMap
+ * Analytics
+ * @return PortalAPIResponse
+ * @throws Exception
+ * on failure
+ */
+ @RequestMapping(value = { "/storeAnalytics" }, method = RequestMethod.POST, produces = "application/json")
+ @ResponseBody
+ @ApiOperation(value = "Accepts data from partner applications with web analytics data.", response = PortalAPIResponse.class)
+ public PortalAPIResponse storeAnalyticsScript(HttpServletRequest request, @RequestBody Analytics analyticsMap)
+ throws Exception {
+ try {
+ MDC.put(EPCommonSystemProperties.AUDITLOG_BEGIN_TIMESTAMP, EPEELFLoggerAdvice.getCurrentDateTimeUTC());
+ String appName = "";
+ try {
+ appName = getAppName(request, appName);
+ } catch (Exception e) {
+ logger.error(EELFLoggerDelegate.errorLogger,
+ " Error retrieving Application to capture app name for analytics; Proceeding with empty app name");
+ }
+
+ try {
+ storeAuxAnalytics(analyticsMap, appName);
+ } catch (Exception e) {
+ logger.error(EELFLoggerDelegate.errorLogger,
+ " Error retrieving Application to capture app name for analytics; Proceeding with empty app name");
+ }
+
+ MDC.put(EPCommonSystemProperties.AUDITLOG_END_TIMESTAMP, EPEELFLoggerAdvice.getCurrentDateTimeUTC());
+
+ EcompPortalUtils.calculateDateTimeDifferenceForLog(
+ MDC.get(EPCommonSystemProperties.AUDITLOG_BEGIN_TIMESTAMP),
+ MDC.get(EPCommonSystemProperties.AUDITLOG_END_TIMESTAMP));
+ logger.info(EELFLoggerDelegate.auditLogger,
+ EPLogUtil.formatStoreAnalyticsAuditLogMessage(analyticsMap.getUserid(), appName,
+ "WebAnalyticsExtAppController.postWebAnalyticsData",
+ EcompAuditLog.CD_ACTIVITY_STORE_ANALYTICS, analyticsMap.getAction(), analyticsMap.getPage(),
+ analyticsMap.getFunction(), analyticsMap.getType()));
+
+ MDC.remove(EPCommonSystemProperties.AUDITLOG_BEGIN_TIMESTAMP);
+ MDC.remove(EPCommonSystemProperties.AUDITLOG_END_TIMESTAMP);
+ MDC.remove(SystemProperties.MDC_TIMER);
+
+ PortalAPIResponse response = new PortalAPIResponse(true, "success");
+ return response;
+ } catch (Exception e) {
+ logger.error(EELFLoggerDelegate.errorLogger, "storeAnalytics failed", e);
+ PortalAPIResponse response = new PortalAPIResponse(true, "error");
+ return response;
+ }
+ }
+
+ protected String getAppName(HttpServletRequest request, String appName) {
+ String appKeyValue = request.getHeader(APP_KEY);
+ if (appKeyValue == null || appKeyValue.equals("")) {
+ logger.error(EELFLoggerDelegate.errorLogger, " App Key unavailable; Proceeding with null app name");
+ } else {
+ EPApp appRecord = appCacheService.getAppForAnalytics(appKeyValue);
+ if (appRecord == null) {
+ logger.error(EELFLoggerDelegate.errorLogger, " App could not be found for the key " + appKeyValue);
+ } else
+ appName = appRecord.getName();
+
+ }
+ return appName;
+ }
+
+ protected void storeAuxAnalytics(Analytics analyticsMap, String appName) {
+ logger.info(EELFLoggerDelegate.debugLogger,
+ " Registering an action for recommendation: AppName/Function/UserId " + appName + "/"
+ + analyticsMap.getFunction() + "/" + analyticsMap.getUserid());
+
+ Map<String, String> requestMapping = new HashMap<String, String>();
+ requestMapping.put("id", analyticsMap.getUserid());
+ requestMapping.put("action", appName + "|" + analyticsMap.getFunction());
+
+ HttpHeaders headers = new HttpHeaders();
+ headers.setContentType(MediaType.APPLICATION_JSON);
+
+ // set your entity to send
+ HttpEntity<Map<String, String>> entity = new HttpEntity<Map<String, String>>(requestMapping, headers);
+
+ // send it!
+ ListenableFuture<ResponseEntity<String>> out = restTemplate.exchange(
+ EcompPortalUtils.widgetMsProtocol() + "://"
+ + consulHealthService.getServiceLocation(CONSUL_ML_SERVICE_ID,
+ SystemProperties.getProperty("microservices.m-learn.local.port"))
+ + REGISTER_ACTION,
+ HttpMethod.POST, entity, String.class);
+ out.addCallback(successCallback, failureCallback);
+ }
+
+}
diff --git a/ecomp-portal-BE-common/src/main/java/org/onap/portalapp/portal/controller/WidgetsCatalogController.java b/ecomp-portal-BE-common/src/main/java/org/onap/portalapp/portal/controller/WidgetsCatalogController.java
new file mode 100644
index 00000000..15e19829
--- /dev/null
+++ b/ecomp-portal-BE-common/src/main/java/org/onap/portalapp/portal/controller/WidgetsCatalogController.java
@@ -0,0 +1,417 @@
+/*-
+ * ============LICENSE_START==========================================
+ * ONAP Portal
+ * ===================================================================
+ * Copyright (C) 2017 AT&T Intellectual Property. All rights reserved.
+ * ===================================================================
+ *
+ * Unless otherwise specified, all software contained herein is licensed
+ * under the Apache License, Version 2.0 (the "License");
+ * you may not use this software 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.
+ *
+ * Unless otherwise specified, all documentation contained herein is licensed
+ * under the Creative Commons License, Attribution 4.0 Intl. (the "License");
+ * you may not use this documentation except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * https://creativecommons.org/licenses/by/4.0/
+ *
+ * Unless required by applicable law or agreed to in writing, documentation
+ * 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.
+ *
+ * ============LICENSE_END============================================
+ *
+ * ECOMP is a trademark and service mark of AT&T Intellectual Property.
+ */
+package org.onap.portalapp.portal.controller;
+
+import java.io.File;
+import java.io.FileInputStream;
+import java.io.FileOutputStream;
+import java.io.IOException;
+import java.io.OutputStream;
+import java.util.ArrayList;
+import java.util.List;
+
+import javax.servlet.ServletContext;
+import javax.servlet.http.HttpServletRequest;
+import javax.servlet.http.HttpServletResponse;
+
+import org.onap.portalapp.controller.EPRestrictedBaseController;
+import org.onap.portalapp.portal.domain.EPUser;
+import org.onap.portalapp.portal.domain.MicroserviceParameter;
+import org.onap.portalapp.portal.domain.WidgetCatalog;
+import org.onap.portalapp.portal.domain.WidgetCatalogParameter;
+import org.onap.portalapp.portal.domain.WidgetParameterResult;
+import org.onap.portalapp.portal.domain.WidgetServiceHeaders;
+import org.onap.portalapp.portal.ecomp.model.PortalRestResponse;
+import org.onap.portalapp.portal.ecomp.model.PortalRestStatusEnum;
+import org.onap.portalapp.portal.logging.aop.EPAuditLog;
+import org.onap.portalapp.portal.service.ConsulHealthService;
+import org.onap.portalapp.portal.service.MicroserviceService;
+import org.onap.portalapp.portal.service.WidgetParameterService;
+import org.onap.portalapp.portal.utils.EcompPortalUtils;
+import org.onap.portalapp.util.EPUserUtils;
+import org.onap.portalsdk.core.logging.logic.EELFLoggerDelegate;
+import org.onap.portalsdk.core.util.SystemProperties;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.context.annotation.Bean;
+import org.springframework.context.annotation.EnableAspectJAutoProxy;
+import org.springframework.core.io.FileSystemResource;
+import org.springframework.http.HttpEntity;
+import org.springframework.http.HttpHeaders;
+import org.springframework.http.HttpMethod;
+import org.springframework.http.MediaType;
+import org.springframework.http.ResponseEntity;
+import org.springframework.util.LinkedMultiValueMap;
+import org.springframework.util.MultiValueMap;
+import org.springframework.web.bind.annotation.PathVariable;
+import org.springframework.web.bind.annotation.RequestBody;
+import org.springframework.web.bind.annotation.RequestMapping;
+import org.springframework.web.bind.annotation.RequestMethod;
+import org.springframework.web.bind.annotation.RestController;
+import org.springframework.web.client.RestClientException;
+import org.springframework.web.client.RestTemplate;
+import org.springframework.web.multipart.MultipartFile;
+import org.springframework.web.multipart.MultipartHttpServletRequest;
+import org.springframework.web.multipart.commons.CommonsMultipartResolver;
+
+@SuppressWarnings("unchecked")
+@RestController
+@org.springframework.context.annotation.Configuration
+@EnableAspectJAutoProxy
+@EPAuditLog
+public class WidgetsCatalogController extends EPRestrictedBaseController {
+
+ private EELFLoggerDelegate logger = EELFLoggerDelegate.getLogger(WidgetsCatalogController.class);
+
+ private static final String MS_WIDGET_LOCAL_PORT = "microservices.widget.local.port";
+
+ private RestTemplate template = new RestTemplate();
+
+ private String whatService = "widgets-service";
+
+ @Autowired
+ private ConsulHealthService consulHealthService;
+
+ @Autowired
+ private MicroserviceService microserviceService;
+
+ @Autowired
+ private WidgetParameterService widgetParameterService;
+
+ @Bean
+ public CommonsMultipartResolver multipartResolver() {
+ return new CommonsMultipartResolver();
+ }
+
+ static {
+ // for localhost testing only
+ javax.net.ssl.HttpsURLConnection.setDefaultHostnameVerifier(new javax.net.ssl.HostnameVerifier() {
+ public boolean verify(String hostname, javax.net.ssl.SSLSession sslSession) {
+ if ("localhost".equals(hostname))
+ return true;
+ return false;
+ }
+ });
+ }
+
+ @RequestMapping(value = { "/portalApi/microservices/widgetCatalog/{loginName}" }, method = RequestMethod.GET)
+ public List<WidgetCatalog> getUserWidgetCatalog(@PathVariable("loginName") String loginName) {
+ List<WidgetCatalog> widgets = new ArrayList<>();
+ try {
+ ResponseEntity<List> ans = template.exchange(
+ EcompPortalUtils.widgetMsProtocol() + "://"
+ + consulHealthService.getServiceLocation(whatService,
+ SystemProperties.getProperty(MS_WIDGET_LOCAL_PORT))
+ + "/widget/microservices/widgetCatalog/" + loginName,
+ HttpMethod.GET, new HttpEntity<>(WidgetServiceHeaders.getInstance()), List.class);
+ widgets = ans.getBody();
+ } catch (Exception e) {
+ logger.error(EELFLoggerDelegate.errorLogger, "getUserWidgetCatalog failed", e);
+ // returning null because null help check on the UI if there was a
+ // communication problem with Microservice.
+ return null;
+ }
+ return widgets;
+ }
+
+ @RequestMapping(value = { "/portalApi/microservices/widgetCatalog" }, method = RequestMethod.GET)
+ public List<WidgetCatalog> getWidgetCatalog() {
+ List<WidgetCatalog> widgets = new ArrayList<>();
+ try {
+ ResponseEntity<List> ans = template.exchange(
+ EcompPortalUtils.widgetMsProtocol() + "://"
+ + consulHealthService.getServiceLocation(whatService,
+ SystemProperties.getProperty(MS_WIDGET_LOCAL_PORT))
+ + "/widget/microservices/widgetCatalog",
+ HttpMethod.GET, new HttpEntity<>(WidgetServiceHeaders.getInstance()), List.class);
+ widgets = ans.getBody();
+ } catch (Exception e) {
+ logger.error(EELFLoggerDelegate.errorLogger, "getWidgetCatalog failed", e);
+ // returning null because null help check on the UI if there was a
+ // communication problem with Microservice.
+ return null;
+ }
+ return widgets;
+ }
+
+ @RequestMapping(value = {
+ "/portalApi/microservices/widgetCatalog/{widgetId}" }, method = RequestMethod.PUT, produces = "application/json")
+ public void updateWidgetCatalog(@RequestBody WidgetCatalog newWidgetCatalog, @PathVariable("widgetId") long widgetId) throws Exception {
+ template.exchange(
+ EcompPortalUtils.widgetMsProtocol() + "://"
+ + consulHealthService.getServiceLocation(whatService,
+ SystemProperties.getProperty(MS_WIDGET_LOCAL_PORT))
+ + "/widget/microservices/widgetCatalog/" + widgetId,
+ HttpMethod.PUT, new HttpEntity<>(newWidgetCatalog, WidgetServiceHeaders.getInstance()), String.class);
+ }
+
+ @RequestMapping(value = { "/portalApi/microservices/widgetCatalog/{widgetId}" }, method = RequestMethod.DELETE)
+ public void deleteOnboardingWidget(@PathVariable("widgetId") long widgetId) throws Exception {
+ template.exchange(
+ EcompPortalUtils.widgetMsProtocol() + "://"
+ + consulHealthService.getServiceLocation(whatService,
+ SystemProperties.getProperty(MS_WIDGET_LOCAL_PORT))
+ + "/widget/microservices/widgetCatalog/" + widgetId,
+ HttpMethod.DELETE, new HttpEntity<>(WidgetServiceHeaders.getInstance()), String.class);
+ }
+
+ @RequestMapping(value = { "/portalApi/microservices/widgetCatalog/{widgetId}" }, method = RequestMethod.POST)
+ public String updateWidgetCatalogWithFiles(HttpServletRequest request,
+ @PathVariable("widgetId") long widgetId) throws RestClientException, Exception {
+ MultipartHttpServletRequest mRequest;
+ MultiValueMap<String, Object> multipartRequest = new LinkedMultiValueMap<>();
+ String fileName;
+ String tmpFolderName = "/tmp/";
+ String respond = null;
+ FileOutputStream fo = null;
+ try {
+ mRequest = (MultipartHttpServletRequest) request;
+ MultipartFile mFile = mRequest.getFile("file");
+ fileName = mFile.getOriginalFilename();
+ fo = new FileOutputStream(tmpFolderName + fileName);
+ fo.write(mFile.getBytes());
+ // silence sonar scan by calling close here
+ fo.close();
+ fo = null;
+
+ HttpHeaders header = new HttpHeaders();
+ header.setContentType(MediaType.MULTIPART_FORM_DATA);
+ multipartRequest.add("file", new FileSystemResource(tmpFolderName + fileName));
+ multipartRequest.add("widget", request.getParameter("newWidget"));
+ respond = template.postForObject(
+ EcompPortalUtils.widgetMsProtocol() + "://"
+ + consulHealthService.getServiceLocation(whatService,
+ SystemProperties.getProperty(MS_WIDGET_LOCAL_PORT))
+ + "/widget/microservices/widgetCatalog/" + widgetId,
+ new HttpEntity<>(multipartRequest, WidgetServiceHeaders.getInstance()), String.class);
+ File f = new File(tmpFolderName + fileName);
+ f.delete();
+ } catch (Exception e) {
+ logger.error(EELFLoggerDelegate.errorLogger, "updateWidgetCatalogWithFiles failed", e);
+ } finally {
+ try {
+ if (fo != null)
+ fo.close();
+ } catch (IOException e) {
+ logger.error(EELFLoggerDelegate.errorLogger, "updateWidgetCatalogWithFiles failed 2", e);
+ }
+ }
+ return respond;
+ }
+
+ @RequestMapping(value = { "/portalApi/microservices/widgetCatalog" }, method = RequestMethod.POST)
+ public String createWidgetCatalog(HttpServletRequest request)
+ throws Exception {
+ MultipartHttpServletRequest mRequest;
+ MultiValueMap<String, Object> multipartRequest = new LinkedMultiValueMap<>();
+ String fileName;
+ String tmpFolderName = "/tmp/";
+ String respond = null;
+ FileOutputStream fo = null;
+ try {
+ mRequest = (MultipartHttpServletRequest) request;
+ MultipartFile mFile = mRequest.getFile("file");
+ fileName = mFile.getOriginalFilename();
+ fo = new FileOutputStream(tmpFolderName + fileName);
+ fo.write(mFile.getBytes());
+ // silence sonar scan by calling close here
+ fo.close();
+ fo = null;
+
+ HttpHeaders header = new HttpHeaders();
+ header.setContentType(MediaType.MULTIPART_FORM_DATA);
+ multipartRequest.add("file", new FileSystemResource(tmpFolderName + fileName));
+ multipartRequest.add("widget", request.getParameter("newWidget"));
+
+ respond = template.postForObject(
+ EcompPortalUtils.widgetMsProtocol() + "://"
+ + consulHealthService.getServiceLocation(whatService,
+ SystemProperties.getProperty(MS_WIDGET_LOCAL_PORT))
+ + "/widget/microservices/widgetCatalog",
+ new HttpEntity<>(multipartRequest, WidgetServiceHeaders.getInstance()), String.class);
+ File f = new File(tmpFolderName + fileName);
+ f.delete();
+ } catch (Exception e) {
+ logger.error(EELFLoggerDelegate.errorLogger, "createWidgetCatalog failed", e);
+ } finally {
+ try {
+ if (fo != null)
+ fo.close();
+ } catch (IOException e) {
+ logger.error(EELFLoggerDelegate.errorLogger, "createWidgetCatalog failed 2", e);
+ }
+ }
+ return respond;
+ }
+
+ @RequestMapping(value = "/portalApi/microservices/{widgetId}/framework.js", method = RequestMethod.GET)
+ public String getWidgetFramework(@PathVariable("widgetId") long widgetId) throws Exception {
+ return template.getForObject(EcompPortalUtils.widgetMsProtocol() + "://"
+ + consulHealthService.getServiceLocation(whatService,
+ SystemProperties.getProperty(MS_WIDGET_LOCAL_PORT))
+ + "/widget/microservices/" + widgetId + "/framework.js", String.class,
+ WidgetServiceHeaders.getInstance());
+ }
+
+ @RequestMapping(value = "/portalApi/microservices/{widgetId}/controller.js", method = RequestMethod.GET)
+ public String getWidgetController(@PathVariable("widgetId") long widgetId) throws Exception {
+ return template.getForObject(EcompPortalUtils.widgetMsProtocol() + "://"
+ + consulHealthService.getServiceLocation(whatService,
+ SystemProperties.getProperty(MS_WIDGET_LOCAL_PORT))
+ + "/widget/microservices/" + widgetId + "/controller.js", String.class,
+ WidgetServiceHeaders.getInstance());
+ }
+
+ @RequestMapping(value = "/portalApi/microservices/{widgetId}/style.css", method = RequestMethod.GET)
+ public String getWidgetCSS(@PathVariable("widgetId") long widgetId) throws Exception {
+ return template.getForObject(EcompPortalUtils.widgetMsProtocol() + "://"
+ + consulHealthService.getServiceLocation(whatService,
+ SystemProperties.getProperty(MS_WIDGET_LOCAL_PORT))
+ + "/widget/microservices/" + widgetId + "/styles.css", String.class,
+ WidgetServiceHeaders.getInstance());
+ }
+
+ @RequestMapping(value = { "/portalApi/microservices/parameters/{widgetId}" }, method = RequestMethod.GET)
+ public PortalRestResponse<List<WidgetParameterResult>> getWidgetParameterResult(HttpServletRequest request,
+ @PathVariable("widgetId") long widgetId) throws Exception {
+ EPUser user = EPUserUtils.getUserSession(request);
+
+ List<WidgetParameterResult> list = new ArrayList<>();
+ Long serviceId = template.exchange(
+ EcompPortalUtils.widgetMsProtocol() + "://"
+ + consulHealthService.getServiceLocation(whatService,
+ SystemProperties.getProperty(MS_WIDGET_LOCAL_PORT))
+ + "/widget/microservices/widgetCatalog/parameters/" + widgetId,
+ HttpMethod.GET, new HttpEntity<>(WidgetServiceHeaders.getInstance()), Long.class).getBody();
+ if (serviceId == null) {
+ // return ok/sucess and no service parameter for this widget
+ return new PortalRestResponse<List<WidgetParameterResult>>(PortalRestStatusEnum.WARN,
+ "No service parameters for this widget", list);
+ } else {
+ List<MicroserviceParameter> defaultParam = microserviceService.getParametersById(serviceId);
+ for (MicroserviceParameter param : defaultParam) {
+ WidgetParameterResult userResult = new WidgetParameterResult();
+ userResult.setParam_id(param.getId());
+ userResult.setDefault_value(param.getPara_value());
+ userResult.setParam_key(param.getPara_key());
+ WidgetCatalogParameter userValue = widgetParameterService.getUserParamById(widgetId, user.getId(),
+ param.getId());
+ if (userValue == null)
+ userResult.setUser_value(param.getPara_value());
+ else {
+ userResult.setUser_value(userValue.getUser_value());
+ }
+ list.add(userResult);
+ }
+ }
+ return new PortalRestResponse<List<WidgetParameterResult>>(PortalRestStatusEnum.OK, "SUCCESS", list);
+ }
+
+ @RequestMapping(value = { "/portalApi/microservices/services/{paramId}" }, method = RequestMethod.GET)
+ public List<WidgetCatalogParameter> getUserParameterById( @PathVariable("paramId") long paramId) {
+ List<WidgetCatalogParameter> list = widgetParameterService.getUserParameterById(paramId);
+ return list;
+ }
+
+ @RequestMapping(value = { "/portalApi/microservices/services/{paramId}" }, method = RequestMethod.DELETE)
+ public void deleteUserParameterById(@PathVariable("paramId") long paramId) {
+ widgetParameterService.deleteUserParameterById(paramId);
+ }
+
+ @RequestMapping(value = { "/portalApi/microservices/download/{widgetId}" }, method = RequestMethod.GET)
+ public void doDownload(HttpServletRequest request, HttpServletResponse response,
+ @PathVariable("widgetId") long widgetId) throws Exception {
+
+ ServletContext context = request.getServletContext();
+ byte[] byteFile = template
+ .exchange(
+ EcompPortalUtils.widgetMsProtocol() + "://"
+ + consulHealthService.getServiceLocation(whatService,
+ SystemProperties.getProperty(MS_WIDGET_LOCAL_PORT))
+ + "/widget/microservices/download/" + widgetId,
+ HttpMethod.GET, new HttpEntity<>(WidgetServiceHeaders.getInstance()), byte[].class)
+ .getBody();
+
+ File downloadFile = File.createTempFile("temp", ".zip");
+ FileOutputStream stream = new FileOutputStream(downloadFile.getPath());
+ stream.write(byteFile);
+ stream.close();
+
+ FileInputStream inputStream = new FileInputStream(downloadFile);
+ String mimeType = context.getMimeType(downloadFile.getPath());
+ if (mimeType == null) {
+ mimeType = "application/octet-stream";
+ }
+
+ response.setContentType(mimeType);
+ response.setContentLength((int) downloadFile.length());
+ String headerKey = "Content-Disposition";
+ String headerValue = String.format("attachment; filename=\"%s\"", downloadFile.getName());
+ downloadFile.delete();
+ response.setHeader(headerKey, headerValue);
+
+ OutputStream outStream = response.getOutputStream();
+ byte[] buffer = new byte[32 * 1024];
+ int bytesRead;
+ while ((bytesRead = inputStream.read(buffer)) != -1) {
+ outStream.write(buffer, 0, bytesRead);
+ }
+
+ inputStream.close();
+ outStream.close();
+ }
+
+ @RequestMapping(value = { "/portalApi/microservices/parameters" }, method = RequestMethod.POST)
+ public PortalRestResponse<String> saveWidgetParameter(HttpServletRequest request,
+ @RequestBody WidgetCatalogParameter widgetParameters) {
+ EPUser user = EPUserUtils.getUserSession(request);
+ widgetParameters.setUserId(user.getId());
+ try {
+ WidgetCatalogParameter oldParam = widgetParameterService.getUserParamById(widgetParameters.getWidgetId(),
+ widgetParameters.getUserId(), widgetParameters.getParamId());
+ if (oldParam != null) {
+ widgetParameters.setId(oldParam.getId());
+ }
+ widgetParameterService.saveUserParameter(widgetParameters);
+
+ } catch (Exception e) {
+ logger.error(EELFLoggerDelegate.errorLogger, "saveWidgetParameter failed", e);
+ return new PortalRestResponse<String>(PortalRestStatusEnum.ERROR, "FAILURE", e.getMessage());
+ }
+ return new PortalRestResponse<String>(PortalRestStatusEnum.OK, "SUCCESS", "");
+ }
+}
diff --git a/ecomp-portal-BE-common/src/main/java/org/onap/portalapp/portal/controller/WidgetsCatalogMarkupController.java b/ecomp-portal-BE-common/src/main/java/org/onap/portalapp/portal/controller/WidgetsCatalogMarkupController.java
new file mode 100644
index 00000000..f7210881
--- /dev/null
+++ b/ecomp-portal-BE-common/src/main/java/org/onap/portalapp/portal/controller/WidgetsCatalogMarkupController.java
@@ -0,0 +1,103 @@
+/*-
+ * ============LICENSE_START==========================================
+ * ONAP Portal
+ * ===================================================================
+ * Copyright (C) 2017 AT&T Intellectual Property. All rights reserved.
+ * ===================================================================
+ *
+ * Unless otherwise specified, all software contained herein is licensed
+ * under the Apache License, Version 2.0 (the "License");
+ * you may not use this software 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.
+ *
+ * Unless otherwise specified, all documentation contained herein is licensed
+ * under the Creative Commons License, Attribution 4.0 Intl. (the "License");
+ * you may not use this documentation except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * https://creativecommons.org/licenses/by/4.0/
+ *
+ * Unless required by applicable law or agreed to in writing, documentation
+ * 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.
+ *
+ * ============LICENSE_END============================================
+ *
+ * ECOMP is a trademark and service mark of AT&T Intellectual Property.
+ */
+package org.onap.portalapp.portal.controller;
+
+import javax.servlet.http.HttpServletRequest;
+import javax.servlet.http.HttpServletResponse;
+
+import org.onap.portalapp.controller.EPUnRestrictedBaseController;
+import org.onap.portalapp.portal.domain.WidgetServiceHeaders;
+import org.onap.portalapp.portal.logging.aop.EPAuditLog;
+import org.onap.portalapp.portal.service.ConsulHealthService;
+import org.onap.portalapp.portal.utils.EcompPortalUtils;
+import org.onap.portalsdk.core.logging.logic.EELFLoggerDelegate;
+import org.onap.portalsdk.core.util.SystemProperties;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.context.annotation.Bean;
+import org.springframework.context.annotation.EnableAspectJAutoProxy;
+import org.springframework.web.bind.annotation.PathVariable;
+import org.springframework.web.bind.annotation.RequestMapping;
+import org.springframework.web.bind.annotation.RequestMethod;
+import org.springframework.web.bind.annotation.RestController;
+import org.springframework.web.client.RestClientException;
+import org.springframework.web.client.RestTemplate;
+import org.springframework.web.multipart.commons.CommonsMultipartResolver;
+
+@RestController
+@org.springframework.context.annotation.Configuration
+@EnableAspectJAutoProxy
+@EPAuditLog
+public class WidgetsCatalogMarkupController extends EPUnRestrictedBaseController {
+
+ private EELFLoggerDelegate logger = EELFLoggerDelegate.getLogger(WidgetsCatalogMarkupController.class);
+ private RestTemplate template = new RestTemplate();
+ private final String whatService = "widgets-service";
+
+ @Autowired
+ private ConsulHealthService consulHealthService;
+
+ @Bean
+ public CommonsMultipartResolver multipartResolver() {
+ return new CommonsMultipartResolver();
+ }
+
+ static {
+ // for localhost testing only
+ javax.net.ssl.HttpsURLConnection.setDefaultHostnameVerifier(new javax.net.ssl.HostnameVerifier() {
+
+ public boolean verify(String hostname, javax.net.ssl.SSLSession sslSession) {
+ if (hostname.equals("localhost")) {
+ return true;
+ }
+ return false;
+ }
+ });
+ }
+
+ @RequestMapping(value = "/portalApi/microservices/markup/{widgetId}", method = RequestMethod.GET)
+ public String getWidgetMarkup(HttpServletRequest request, HttpServletResponse response,
+ @PathVariable("widgetId") long widgetId) throws RestClientException, Exception {
+ return template
+ .getForObject(
+ EcompPortalUtils.widgetMsProtocol() + "://"
+ + consulHealthService.getServiceLocation(whatService,
+ SystemProperties.getProperty("microservices.widget.local.port"))
+ + "/widget/microservices/markup/" + widgetId,
+ String.class, WidgetServiceHeaders.getInstance());
+ }
+}
diff --git a/ecomp-portal-BE-common/src/main/java/org/onap/portalapp/portal/controller/WidgetsController.java b/ecomp-portal-BE-common/src/main/java/org/onap/portalapp/portal/controller/WidgetsController.java
new file mode 100644
index 00000000..fec16b0c
--- /dev/null
+++ b/ecomp-portal-BE-common/src/main/java/org/onap/portalapp/portal/controller/WidgetsController.java
@@ -0,0 +1,186 @@
+/*-
+ * ============LICENSE_START==========================================
+ * ONAP Portal
+ * ===================================================================
+ * Copyright © 2017 AT&T Intellectual Property. All rights reserved.
+ * ===================================================================
+ *
+ * Unless otherwise specified, all software contained herein is licensed
+ * under the Apache License, Version 2.0 (the "License");
+ * you may not use this software 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.
+ *
+ * Unless otherwise specified, all documentation contained herein is licensed
+ * under the Creative Commons License, Attribution 4.0 Intl. (the "License");
+ * you may not use this documentation except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * https://creativecommons.org/licenses/by/4.0/
+ *
+ * Unless required by applicable law or agreed to in writing, documentation
+ * 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.
+ *
+ * ============LICENSE_END============================================
+ *
+ * ECOMP is a trademark and service mark of AT&T Intellectual Property.
+ */
+package org.onap.portalapp.portal.controller;
+
+import java.io.IOException;
+import java.util.List;
+
+import javax.servlet.http.HttpServletRequest;
+import javax.servlet.http.HttpServletResponse;
+
+import org.apache.cxf.common.util.StringUtils;
+import org.onap.portalapp.controller.EPRestrictedBaseController;
+import org.onap.portalapp.portal.domain.EPUser;
+import org.onap.portalapp.portal.logging.aop.EPAuditLog;
+import org.onap.portalapp.portal.service.AdminRolesService;
+import org.onap.portalapp.portal.service.PersUserWidgetService;
+import org.onap.portalapp.portal.service.WidgetService;
+import org.onap.portalapp.portal.transport.FieldsValidator;
+import org.onap.portalapp.portal.transport.OnboardingWidget;
+import org.onap.portalapp.portal.utils.EcompPortalUtils;
+import org.onap.portalapp.util.EPUserUtils;
+import org.onap.portalsdk.core.logging.logic.EELFLoggerDelegate;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.context.annotation.EnableAspectJAutoProxy;
+import org.springframework.web.bind.annotation.PathVariable;
+import org.springframework.web.bind.annotation.RequestBody;
+import org.springframework.web.bind.annotation.RequestMapping;
+import org.springframework.web.bind.annotation.RequestMethod;
+import org.springframework.web.bind.annotation.RestController;
+
+@RestController
+@org.springframework.context.annotation.Configuration
+@EnableAspectJAutoProxy
+@EPAuditLog
+public class WidgetsController extends EPRestrictedBaseController {
+ private EELFLoggerDelegate logger = EELFLoggerDelegate.getLogger(WidgetsController.class);
+
+ @Autowired
+ private AdminRolesService adminRolesService;
+ @Autowired
+ private WidgetService widgetService;
+ @Autowired
+ private PersUserWidgetService persUserWidgetService;
+
+ @RequestMapping(value = { "/portalApi/widgets" }, method = RequestMethod.GET, produces = "application/json")
+ public List<OnboardingWidget> getOnboardingWidgets(HttpServletRequest request, HttpServletResponse response) {
+ EPUser user = EPUserUtils.getUserSession(request);
+ List<OnboardingWidget> onboardingWidgets = null;
+
+ if (user == null || user.isGuest()) {
+ EcompPortalUtils.setBadPermissions(user, response, "getOnboardingWidgets");
+ } else {
+ String getType = request.getHeader("X-Widgets-Type");
+ if (!StringUtils.isEmpty(getType) && (getType.equals("managed") || getType.equals("all"))) {
+ onboardingWidgets = widgetService.getOnboardingWidgets(user, getType.equals("managed"));
+ } else {
+ logger.debug(EELFLoggerDelegate.debugLogger, "WidgetsController.getOnboardingApps - request must contain header 'X-Widgets-Type' with 'all' or 'managed'");
+ response.setStatus(HttpServletResponse.SC_BAD_REQUEST);
+ }
+ }
+
+ EcompPortalUtils.logAndSerializeObject(logger, "/portalApi/widgets", "GET result =", response.getStatus());
+ return onboardingWidgets;
+ }
+
+ private boolean userHasPermissions(EPUser user, HttpServletResponse response, String invocator) {
+ if (!adminRolesService.isSuperAdmin(user) && !adminRolesService.isAccountAdmin(user)) {
+ EcompPortalUtils.setBadPermissions(user, response, invocator);
+ return false;
+ }
+ return true;
+ }
+
+ // Attention: real json has all OnboardingWidget fields except "id", we use OnboardingWidget for not to create new class for parsing
+ @RequestMapping(value = { "/portalApi/widgets/{widgetId}" }, method = { RequestMethod.PUT }, produces = "application/json")
+ public FieldsValidator putOnboardingWidget(HttpServletRequest request, @PathVariable("widgetId") Long widgetId,
+ @RequestBody OnboardingWidget onboardingWidget, HttpServletResponse response) {
+ EPUser user = EPUserUtils.getUserSession(request);
+ FieldsValidator fieldsValidator = null;
+ if (userHasPermissions(user, response, "putOnboardingWidget")) {
+ onboardingWidget.id = widgetId; // !
+ onboardingWidget.normalize();
+ fieldsValidator = widgetService.setOnboardingWidget(user, onboardingWidget);
+ response.setStatus(fieldsValidator.httpStatusCode.intValue());
+ }
+ EcompPortalUtils.logAndSerializeObject(logger, "/portalApi/widgets/" + widgetId, "GET result =", response.getStatus());
+
+ return fieldsValidator;
+ }
+
+ // Attention: real json has all OnboardingWidget fields except "id", we use OnboardingWidget for not to create new class for parsing
+ @RequestMapping(value = { "/portalApi/widgets" }, method = { RequestMethod.POST }, produces = "application/json")
+ public FieldsValidator postOnboardingWidget(HttpServletRequest request, @RequestBody OnboardingWidget onboardingWidget, HttpServletResponse response) {
+ EPUser user = EPUserUtils.getUserSession(request);
+ FieldsValidator fieldsValidator = null; ;
+
+ if (userHasPermissions(user, response, "postOnboardingWidget")) {
+ onboardingWidget.id = null; // !
+ onboardingWidget.normalize();
+ fieldsValidator = widgetService.setOnboardingWidget(user, onboardingWidget);
+ response.setStatus(fieldsValidator.httpStatusCode.intValue());
+ }
+
+ EcompPortalUtils.logAndSerializeObject(logger, "/portalApi/widgets", "POST result =", response.getStatus());
+ return fieldsValidator;
+ }
+
+ @RequestMapping(value = { "/portalApi/widgets/{widgetId}" }, method = { RequestMethod.DELETE }, produces = "application/json")
+ public FieldsValidator deleteOnboardingWidget(HttpServletRequest request, @PathVariable("widgetId") Long widgetId, HttpServletResponse response) {
+ EPUser user = EPUserUtils.getUserSession(request);
+ FieldsValidator fieldsValidator = null; ;
+
+ if (userHasPermissions(user, response, "deleteOnboardingWidget")) {
+ fieldsValidator = widgetService.deleteOnboardingWidget(user, widgetId);
+ response.setStatus(fieldsValidator.httpStatusCode.intValue());
+ }
+
+ EcompPortalUtils.logAndSerializeObject(logger, "/portalApi/widgets/" + widgetId, "DELETE result =", response.getStatus());
+ return fieldsValidator;
+ }
+
+ /**
+ * service to accept a user's action made on the application
+ * catalog.
+ *
+ * @param request
+ * @param selectRequest
+ * JSON with data including application ID
+ * @param response
+ * @return FieldsValidator
+ * @throws IOException
+ */
+ @RequestMapping(value = { "portalApi/widgetCatalogSelection" }, method = RequestMethod.PUT, produces = "application/json")
+ public FieldsValidator putWidgetCatalogSelection(HttpServletRequest request,
+ @RequestBody org.onap.portalapp.portal.transport.WidgetCatalogPersonalization persRequest, HttpServletResponse response) throws IOException {
+ FieldsValidator result = new FieldsValidator();
+ EPUser user = EPUserUtils.getUserSession(request);
+ try {
+ if (persRequest.getWidgetId() == null || user == null) {
+ EcompPortalUtils.setBadPermissions(user, response, "putWidgetCatalogSelection");
+ } else {
+ persUserWidgetService.setPersUserAppValue(user, persRequest.getWidgetId(), persRequest.getSelect());
+ }
+ } catch (Exception e) {
+ logger.error(EELFLoggerDelegate.errorLogger, "Failed in putAppCatalogSelection", e);
+ response.sendError(HttpServletResponse.SC_INTERNAL_SERVER_ERROR, e.toString());
+ }
+ result.httpStatusCode = new Long(HttpServletResponse.SC_OK);
+ return result;
+ }
+} \ No newline at end of file
diff --git a/ecomp-portal-BE-common/src/main/java/org/onap/portalapp/portal/domain/AdminUserApp.java b/ecomp-portal-BE-common/src/main/java/org/onap/portalapp/portal/domain/AdminUserApp.java
new file mode 100644
index 00000000..72bd798d
--- /dev/null
+++ b/ecomp-portal-BE-common/src/main/java/org/onap/portalapp/portal/domain/AdminUserApp.java
@@ -0,0 +1,106 @@
+/*-
+ * ============LICENSE_START==========================================
+ * ONAP Portal
+ * ===================================================================
+ * Copyright (C) 2017 AT&T Intellectual Property. All rights reserved.
+ * ===================================================================
+ *
+ * Unless otherwise specified, all software contained herein is licensed
+ * under the Apache License, Version 2.0 (the "License");
+ * you may not use this software 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.
+ *
+ * Unless otherwise specified, all documentation contained herein is licensed
+ * under the Creative Commons License, Attribution 4.0 Intl. (the "License");
+ * you may not use this documentation except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * https://creativecommons.org/licenses/by/4.0/
+ *
+ * Unless required by applicable law or agreed to in writing, documentation
+ * 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.
+ *
+ * ============LICENSE_END============================================
+ *
+ * ECOMP is a trademark and service mark of AT&T Intellectual Property.
+ */
+package org.onap.portalapp.portal.domain;
+
+import java.io.Serializable;
+
+import javax.persistence.Column;
+import javax.persistence.Entity;
+import javax.persistence.Id;
+
+@Entity
+public class AdminUserApp implements Serializable{
+ private static final long serialVersionUID = 1L;
+
+ @Id
+ @Column(name="USER_ID")
+ private Long user_Id;
+
+ @Column(name="FIRST_NAME")
+ private String firstName;
+
+ @Column(name="LAST_NAME")
+ private String lastName;
+
+ @Column(name="ORG_USER_ID")
+ private String orgUserId;
+
+ @Id
+ @Column(name="APP_ID")
+ private Long appId;
+
+ @Column(name="APP_NAME")
+ private String appName;
+
+ public Long getAppId() {
+ return appId;
+ }
+ public void setAppId(Long appId) {
+ this.appId = appId;
+ }
+ public Long getUser_Id() {
+ return user_Id;
+ }
+ public void setUserId(Long user_Id) {
+ this.user_Id = user_Id;
+ }
+ public String getFirstName() {
+ return firstName;
+ }
+ public void setFirstName(String firstName) {
+ this.firstName = firstName;
+ }
+ public String getLastName() {
+ return lastName;
+ }
+ public void setLastName(String lastName) {
+ this.lastName = lastName;
+ }
+ public String getOrgUserId() {
+ return orgUserId;
+ }
+ public void setOrgUserId(String orgUserId) {
+ this.orgUserId = orgUserId;
+ }
+ public String getAppName() {
+ return appName;
+ }
+ public void setAppName(String appName) {
+ this.appName = appName;
+ }
+}
diff --git a/ecomp-portal-BE-common/src/main/java/org/onap/portalapp/portal/domain/AdminUserApplications.java b/ecomp-portal-BE-common/src/main/java/org/onap/portalapp/portal/domain/AdminUserApplications.java
new file mode 100644
index 00000000..ca54d236
--- /dev/null
+++ b/ecomp-portal-BE-common/src/main/java/org/onap/portalapp/portal/domain/AdminUserApplications.java
@@ -0,0 +1,114 @@
+/*-
+ * ============LICENSE_START==========================================
+ * ONAP Portal
+ * ===================================================================
+ * Copyright (C) 2017 AT&T Intellectual Property. All rights reserved.
+ * ===================================================================
+ *
+ * Unless otherwise specified, all software contained herein is licensed
+ * under the Apache License, Version 2.0 (the "License");
+ * you may not use this software 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.
+ *
+ * Unless otherwise specified, all documentation contained herein is licensed
+ * under the Creative Commons License, Attribution 4.0 Intl. (the "License");
+ * you may not use this documentation except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * https://creativecommons.org/licenses/by/4.0/
+ *
+ * Unless required by applicable law or agreed to in writing, documentation
+ * 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.
+ *
+ * ============LICENSE_END============================================
+ *
+ * ECOMP is a trademark and service mark of AT&T Intellectual Property.
+ */
+package org.onap.portalapp.portal.domain;
+
+import java.util.ArrayList;
+import java.util.List;
+
+public class AdminUserApplications {
+ private List<Application> apps = new ArrayList<Application>();
+
+ private Long user_Id;
+ private String firstName;
+ private String lastName;
+ private String orgUserId;
+
+ public AdminUserApplications(AdminUserApp app) {
+ setUser_Id(app.getUser_Id());
+ setOrgUserId(app.getOrgUserId());
+ setFirstName(app.getFirstName());
+ setLastName(app.getLastName());
+
+ addApp(app.getAppId(), app.getAppName());
+ }
+ public Long getUser_Id() {
+ return user_Id;
+ }
+ public void setUser_Id(Long user_Id) {
+ this.user_Id = user_Id;
+ }
+ public String getFirstName() {
+ return firstName;
+ }
+ public void setFirstName(String firstName) {
+ this.firstName = firstName;
+ }
+ public String getLastName() {
+ return lastName;
+ }
+ public void setLastName(String lastName) {
+ this.lastName = lastName;
+ }
+ public String getOrgUserId() {
+ return orgUserId;
+ }
+ public void setOrgUserId(String orgUserId) {
+ this.orgUserId = orgUserId;
+ }
+ public List<Application> getApps() {
+ return apps;
+ }
+ public void setApps(List<Application> apps) {
+ this.apps = apps;
+ }
+ public void addApp(Long otherAppId, String otherAppName) {
+ apps.add(new Application(otherAppId, otherAppName));
+ }
+
+ public class Application {
+ private Long appId;
+ private String appName;
+
+ public Application(Long otherAppId, String otherAppName) {
+ setAppId(otherAppId);
+ setAppName(otherAppName);
+ }
+ public Long getAppId() {
+ return appId;
+ }
+ public void setAppId(Long appId) {
+ this.appId = appId;
+ }
+ public String getAppName() {
+ return appName;
+ }
+ public void setAppName(String appName) {
+ this.appName = appName;
+ }
+ }
+}
diff --git a/ecomp-portal-BE-common/src/main/java/org/onap/portalapp/portal/domain/App.java b/ecomp-portal-BE-common/src/main/java/org/onap/portalapp/portal/domain/App.java
new file mode 100644
index 00000000..aa5a4b8d
--- /dev/null
+++ b/ecomp-portal-BE-common/src/main/java/org/onap/portalapp/portal/domain/App.java
@@ -0,0 +1,80 @@
+/*-
+ * ============LICENSE_START==========================================
+ * ONAP Portal
+ * ===================================================================
+ * Copyright (C) 2017 AT&T Intellectual Property. All rights reserved.
+ * ===================================================================
+ *
+ * Unless otherwise specified, all software contained herein is licensed
+ * under the Apache License, Version 2.0 (the "License");
+ * you may not use this software 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.
+ *
+ * Unless otherwise specified, all documentation contained herein is licensed
+ * under the Creative Commons License, Attribution 4.0 Intl. (the "License");
+ * you may not use this documentation except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * https://creativecommons.org/licenses/by/4.0/
+ *
+ * Unless required by applicable law or agreed to in writing, documentation
+ * 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.
+ *
+ * ============LICENSE_END============================================
+ *
+ * ECOMP is a trademark and service mark of AT&T Intellectual Property.
+ */
+package org.onap.portalapp.portal.domain;
+
+import java.io.Serializable;
+
+import javax.persistence.Column;
+import javax.persistence.GeneratedValue;
+import javax.persistence.GenerationType;
+import javax.persistence.Id;
+
+//@Entity
+//@Table(name = "FN_APP")
+public class App implements Serializable{
+
+ private static final long serialVersionUID = 1L;
+
+ //@Id
+ //@Column(name = "APP_ID")
+ //@GeneratedValue(strategy=GenerationType.AUTO)
+ private Long appId;
+
+ //@Column(name = "APP_Name")
+ private String appName;
+
+ public Long getAppId() {
+ return appId;
+ }
+
+ public void setAppId(Long appId) {
+ this.appId = appId;
+ }
+
+ public String getAppName() {
+ return appName;
+ }
+
+ public void setAppName(String appName) {
+ this.appName = appName;
+ }
+
+
+
+
+}
diff --git a/ecomp-portal-BE-common/src/main/java/org/onap/portalapp/portal/domain/AppContactUs.java b/ecomp-portal-BE-common/src/main/java/org/onap/portalapp/portal/domain/AppContactUs.java
new file mode 100644
index 00000000..f3117622
--- /dev/null
+++ b/ecomp-portal-BE-common/src/main/java/org/onap/portalapp/portal/domain/AppContactUs.java
@@ -0,0 +1,103 @@
+/*-
+ * ============LICENSE_START==========================================
+ * ONAP Portal
+ * ===================================================================
+ * Copyright (C) 2017 AT&T Intellectual Property. All rights reserved.
+ * ===================================================================
+ *
+ * Unless otherwise specified, all software contained herein is licensed
+ * under the Apache License, Version 2.0 (the "License");
+ * you may not use this software 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.
+ *
+ * Unless otherwise specified, all documentation contained herein is licensed
+ * under the Creative Commons License, Attribution 4.0 Intl. (the "License");
+ * you may not use this documentation except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * https://creativecommons.org/licenses/by/4.0/
+ *
+ * Unless required by applicable law or agreed to in writing, documentation
+ * 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.
+ *
+ * ============LICENSE_END============================================
+ *
+ * ECOMP is a trademark and service mark of AT&T Intellectual Property.
+ */
+package org.onap.portalapp.portal.domain;
+
+import org.onap.portalsdk.core.domain.support.DomainVo;
+
+import com.fasterxml.jackson.annotation.JsonBackReference;
+
+public class AppContactUs extends DomainVo {
+
+ private static final long serialVersionUID = -2742197830465055134L;
+
+ @JsonBackReference private EPApp app;
+ private String description;
+ private String contactEmail;
+ private String contactName;
+ private String url;
+ private String activeYN;
+
+ public EPApp getApp() {
+ return app;
+ }
+
+ public void setApp(EPApp app) {
+ this.app = app;
+ }
+
+ public String getDescription() {
+ return description;
+ }
+
+ public void setDescription(String description) {
+ this.description = description;
+ }
+
+ public String getContactEmail() {
+ return contactEmail;
+ }
+
+ public void setContactEmail(String contactEmail) {
+ this.contactEmail = contactEmail;
+ }
+
+ public String getContactName() {
+ return contactName;
+ }
+
+ public void setContactName(String contactName) {
+ this.contactName = contactName;
+ }
+
+ public String getUrl() {
+ return url;
+ }
+
+ public void setUrl(String url) {
+ this.url = url;
+ }
+
+ public String getActiveYN() {
+ return activeYN;
+ }
+
+ public void setActiveYN(String activeYN) {
+ this.activeYN = activeYN;
+ }
+
+}
diff --git a/ecomp-portal-BE-common/src/main/java/org/onap/portalapp/portal/domain/AppIdAndNameTransportModel.java b/ecomp-portal-BE-common/src/main/java/org/onap/portalapp/portal/domain/AppIdAndNameTransportModel.java
new file mode 100644
index 00000000..d57e2828
--- /dev/null
+++ b/ecomp-portal-BE-common/src/main/java/org/onap/portalapp/portal/domain/AppIdAndNameTransportModel.java
@@ -0,0 +1,81 @@
+/*-
+ * ============LICENSE_START==========================================
+ * ONAP Portal
+ * ===================================================================
+ * Copyright (C) 2017 AT&T Intellectual Property. All rights reserved.
+ * ===================================================================
+ *
+ * Unless otherwise specified, all software contained herein is licensed
+ * under the Apache License, Version 2.0 (the "License");
+ * you may not use this software 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.
+ *
+ * Unless otherwise specified, all documentation contained herein is licensed
+ * under the Creative Commons License, Attribution 4.0 Intl. (the "License");
+ * you may not use this documentation except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * https://creativecommons.org/licenses/by/4.0/
+ *
+ * Unless required by applicable law or agreed to in writing, documentation
+ * 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.
+ *
+ * ============LICENSE_END============================================
+ *
+ * ECOMP is a trademark and service mark of AT&T Intellectual Property.
+ */
+package org.onap.portalapp.portal.domain;
+
+import java.io.Serializable;
+
+import javax.persistence.Column;
+import javax.persistence.Entity;
+import javax.persistence.Id;
+
+@Entity
+public class AppIdAndNameTransportModel implements Serializable{
+ private static final long serialVersionUID = 1L;
+
+ @Id
+ @Column(name="APP_ID")
+ private Long id;
+
+ @Column(name="APP_NAME")
+ private String name;
+
+ @Column(name="APP_TYPE")
+ private Integer appType;
+
+ public Long getId() {
+ return id;
+ }
+
+ public void setId(Long id) {
+ this.id = id;
+ }
+
+ public String getName() {
+ return name;
+ }
+
+ public void setName(String name) {
+ this.name = name;
+ }
+
+ public Boolean isRestrictedApp() {
+ return (this.appType == 2 ? true : false);
+ }
+
+
+}
diff --git a/ecomp-portal-BE-common/src/main/java/org/onap/portalapp/portal/domain/AppsResponse.java b/ecomp-portal-BE-common/src/main/java/org/onap/portalapp/portal/domain/AppsResponse.java
new file mode 100644
index 00000000..a7835fd5
--- /dev/null
+++ b/ecomp-portal-BE-common/src/main/java/org/onap/portalapp/portal/domain/AppsResponse.java
@@ -0,0 +1,94 @@
+/*-
+ * ============LICENSE_START==========================================
+ * ONAP Portal
+ * ===================================================================
+ * Copyright (C) 2017 AT&T Intellectual Property. All rights reserved.
+ * ===================================================================
+ *
+ * Unless otherwise specified, all software contained herein is licensed
+ * under the Apache License, Version 2.0 (the "License");
+ * you may not use this software 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.
+ *
+ * Unless otherwise specified, all documentation contained herein is licensed
+ * under the Creative Commons License, Attribution 4.0 Intl. (the "License");
+ * you may not use this documentation except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * https://creativecommons.org/licenses/by/4.0/
+ *
+ * Unless required by applicable law or agreed to in writing, documentation
+ * 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.
+ *
+ * ============LICENSE_END============================================
+ *
+ * ECOMP is a trademark and service mark of AT&T Intellectual Property.
+ */
+package org.onap.portalapp.portal.domain;
+
+public class AppsResponse {
+
+ public AppsResponse(Long id, String name, Boolean restrictedApp, Boolean enabled) {
+ this.index = id;
+ this.title = this.value = name;
+ this.restrictedApp = restrictedApp;
+ this.enabled = enabled;
+ }
+
+ public Long getIndex() {
+ return index;
+ }
+
+ public void setIndex(Long index) {
+ this.index = index;
+ }
+
+ public String getTitle() {
+ return title;
+ }
+
+ public void setTitle(String title) {
+ this.title = title;
+ }
+
+ public String getValue() {
+ return value;
+ }
+
+ public void setValue(String value) {
+ this.value = value;
+ }
+
+ // Hide the implementation of restricted and normal app from the front end.
+ // The json sent and received will include restrictedApp but not appType.
+
+ public void setRestrictedApp(Boolean restrictedApp) {
+ this.restrictedApp = restrictedApp;
+ }
+
+ public Boolean getEnabled() {
+ return enabled;
+ }
+
+ public void setEnabled(Boolean enabled) {
+ this.enabled = enabled;
+ }
+
+ private Long index;
+ private String title;
+ private String value;
+ public Boolean restrictedApp;
+ public Boolean enabled;
+
+}
diff --git a/ecomp-portal-BE-common/src/main/java/org/onap/portalapp/portal/domain/BEProperty.java b/ecomp-portal-BE-common/src/main/java/org/onap/portalapp/portal/domain/BEProperty.java
new file mode 100644
index 00000000..737f4ab3
--- /dev/null
+++ b/ecomp-portal-BE-common/src/main/java/org/onap/portalapp/portal/domain/BEProperty.java
@@ -0,0 +1,96 @@
+/*-
+ * ============LICENSE_START==========================================
+ * ONAP Portal
+ * ===================================================================
+ * Copyright (C) 2017 AT&T Intellectual Property. All rights reserved.
+ * ===================================================================
+ *
+ * Unless otherwise specified, all software contained herein is licensed
+ * under the Apache License, Version 2.0 (the "License");
+ * you may not use this software 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.
+ *
+ * Unless otherwise specified, all documentation contained herein is licensed
+ * under the Creative Commons License, Attribution 4.0 Intl. (the "License");
+ * you may not use this documentation except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * https://creativecommons.org/licenses/by/4.0/
+ *
+ * Unless required by applicable law or agreed to in writing, documentation
+ * 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.
+ *
+ * ============LICENSE_END============================================
+ *
+ * ECOMP is a trademark and service mark of AT&T Intellectual Property.
+ */
+package org.onap.portalapp.portal.domain;
+
+public class BEProperty {
+ private String key;
+ private String value;
+
+ public BEProperty(String key, String value) {
+ this.key = key;
+ this.value = value;
+ }
+
+ public String getKey() {
+ return key;
+ }
+
+ public void setKey(String key) {
+ this.key = key;
+ }
+
+ public String getValue() {
+ return value;
+ }
+
+ public void setValue(String value) {
+ this.value = value;
+ }
+
+ @Override
+ public int hashCode() {
+ final int prime = 31;
+ int result = 1;
+ result = prime * result + ((key == null) ? 0 : key.hashCode());
+ result = prime * result + ((value == null) ? 0 : value.hashCode());
+ return result;
+ }
+
+ @Override
+ public boolean equals(Object obj) {
+ if (this == obj)
+ return true;
+ if (obj == null)
+ return false;
+ if (getClass() != obj.getClass())
+ return false;
+ BEProperty other = (BEProperty) obj;
+ if (key == null) {
+ if (other.key != null)
+ return false;
+ } else if (!key.equals(other.key))
+ return false;
+ if (value == null) {
+ if (other.value != null)
+ return false;
+ } else if (!value.equals(other.value))
+ return false;
+ return true;
+ }
+
+}
diff --git a/ecomp-portal-BE-common/src/main/java/org/onap/portalapp/portal/domain/BasicAuthCredentials.java b/ecomp-portal-BE-common/src/main/java/org/onap/portalapp/portal/domain/BasicAuthCredentials.java
new file mode 100644
index 00000000..30dad848
--- /dev/null
+++ b/ecomp-portal-BE-common/src/main/java/org/onap/portalapp/portal/domain/BasicAuthCredentials.java
@@ -0,0 +1,113 @@
+/*-
+ * ============LICENSE_START==========================================
+ * ONAP Portal
+ * ===================================================================
+ * Copyright (C) 2017 AT&T Intellectual Property. All rights reserved.
+ * ===================================================================
+ *
+ * Unless otherwise specified, all software contained herein is licensed
+ * under the Apache License, Version 2.0 (the "License");
+ * you may not use this software 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.
+ *
+ * Unless otherwise specified, all documentation contained herein is licensed
+ * under the Creative Commons License, Attribution 4.0 Intl. (the "License");
+ * you may not use this documentation except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * https://creativecommons.org/licenses/by/4.0/
+ *
+ * Unless required by applicable law or agreed to in writing, documentation
+ * 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.
+ *
+ * ============LICENSE_END============================================
+ *
+ * ECOMP is a trademark and service mark of AT&T Intellectual Property.
+ */
+package org.onap.portalapp.portal.domain;
+
+import java.util.List;
+
+import org.onap.portalsdk.core.domain.support.DomainVo;
+
+public class BasicAuthCredentials extends DomainVo {
+
+ private static final long serialVersionUID = 1L;
+
+ public BasicAuthCredentials() {
+
+ }
+
+ private Long id;
+ private String applicationName;
+ private String username;
+ private String password;
+ private String isActive;
+ private List<EPEndpoint> endpoints;
+
+ public Long getId() {
+ return id;
+ }
+
+ public void setId(Long id) {
+ this.id = id;
+ }
+
+ public String getApplicationName() {
+ return applicationName;
+ }
+
+ public void setApplicationName(String applicationName) {
+ this.applicationName = applicationName;
+ }
+
+ public String getUsername() {
+ return username;
+ }
+
+ public void setUsername(String username) {
+ this.username = username;
+ }
+
+ public String getPassword() {
+ return password;
+ }
+
+ public void setPassword(String password) {
+ this.password = password;
+ }
+
+ public String getIsActive() {
+ return isActive;
+ }
+
+ public void setIsActive(String isActive) {
+ this.isActive = isActive;
+ }
+
+ public List<EPEndpoint> getEndpoints() {
+ return endpoints;
+ }
+
+ public void setEndpoints(List<EPEndpoint> endpoints) {
+ this.endpoints = endpoints;
+ }
+
+ @Override
+ public String toString() {
+ return "BasicAuthCredentials [id=" + id + ", applicationName=" + applicationName + ", username=" + username
+ + ", password=" + password + ", isActive=" + isActive + "]";
+ }
+
+}
diff --git a/ecomp-portal-BE-common/src/main/java/org/onap/portalapp/portal/domain/CentralV2RoleFunction.java b/ecomp-portal-BE-common/src/main/java/org/onap/portalapp/portal/domain/CentralV2RoleFunction.java
new file mode 100644
index 00000000..05c87ba6
--- /dev/null
+++ b/ecomp-portal-BE-common/src/main/java/org/onap/portalapp/portal/domain/CentralV2RoleFunction.java
@@ -0,0 +1,188 @@
+/*-
+ * ============LICENSE_START==========================================
+ * ONAP Portal
+ * ===================================================================
+ * Copyright (C) 2017 AT&T Intellectual Property. All rights reserved.
+ * ===================================================================
+ *
+ * Unless otherwise specified, all software contained herein is licensed
+ * under the Apache License, Version 2.0 (the "License");
+ * you may not use this software 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.
+ *
+ * Unless otherwise specified, all documentation contained herein is licensed
+ * under the Creative Commons License, Attribution 4.0 Intl. (the "License");
+ * you may not use this documentation except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * https://creativecommons.org/licenses/by/4.0/
+ *
+ * Unless required by applicable law or agreed to in writing, documentation
+ * 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.
+ *
+ * ============LICENSE_END============================================
+ *
+ * ECOMP is a trademark and service mark of AT&T Intellectual Property.
+ */
+package org.onap.portalapp.portal.domain;
+
+import java.io.Serializable;
+
+import org.onap.portalsdk.core.domain.support.DomainVo;
+
+import com.fasterxml.jackson.annotation.JsonIgnore;
+
+@SuppressWarnings("rawtypes")
+public class CentralV2RoleFunction extends DomainVo implements Serializable, Comparable{
+
+ /**
+ *
+ */
+ private static final long serialVersionUID = -4018975640065252688L;
+ private String code;
+ private String name;
+ @JsonIgnore
+ private Long appId;
+ @JsonIgnore
+ private Long roleId;
+ private String type;
+ private String action;
+ private String editUrl;
+
+
+ public CentralV2RoleFunction() {
+
+ }
+
+
+ public CentralV2RoleFunction(Long id, String code, String name, Long appId, String type, String action,String editUrl) {
+ super();
+ this.id = id;
+ this.code = code;
+ this.name = name;
+ this.appId = appId;
+ this.type = type;
+ this.action = action;
+ this.editUrl = editUrl;
+ }
+
+ public CentralV2RoleFunction(Long id, String code, String name, Long appId,String editUrl) {
+ super();
+ this.id = id;
+ this.code = code;
+ this.name = name;
+ this.appId = appId;
+ this.editUrl = editUrl;
+ }
+
+
+
+ public CentralV2RoleFunction(String code, String name) {
+ super();
+ this.code = code;
+ this.name = name;
+ }
+
+ /**
+ * @return the code
+ */
+ public String getCode() {
+ return code;
+ }
+ /**
+ * @param code the code to set
+ */
+ public void setCode(String code) {
+ this.code = code;
+ }
+ /**
+ * @return the name
+ */
+ public String getName() {
+ return name;
+ }
+ /**
+ * @param name the name to set
+ */
+ public void setName(String name) {
+ this.name = name;
+ }
+ /**
+ * @return the appId
+ */
+ public Long getAppId() {
+ return appId;
+ }
+ /**
+ * @param appId the appId to set
+ */
+ public void setAppId(Long appId) {
+ this.appId = appId;
+ }
+ /**
+ * @return the editUrl
+ */
+ public String getEditUrl() {
+ return editUrl;
+ }
+ /**
+ * @param editUrl the editUrl to set
+ */
+ public void setEditUrl(String editUrl) {
+ this.editUrl = editUrl;
+ }
+
+
+ /**
+ * @return the type
+ */
+ public String getType() {
+ return type;
+ }
+
+
+ /**
+ * @param type the type to set
+ */
+ public void setType(String type) {
+ this.type = type;
+ }
+
+
+ /**
+ * @return the action
+ */
+ public String getAction() {
+ return action;
+ }
+
+
+ /**
+ * @param action the action to set
+ */
+ public void setAction(String action) {
+ this.action = action;
+ }
+
+
+ public int compareTo(Object obj){
+ String c1 = getName();
+ String c2 = ((CentralV2RoleFunction)obj).getName();
+
+ return (c1 == null || c2 == null) ? 1 : c1.compareTo(c2);
+ }
+
+
+
+}
diff --git a/ecomp-portal-BE-common/src/main/java/org/onap/portalapp/portal/domain/CentralizedApp.java b/ecomp-portal-BE-common/src/main/java/org/onap/portalapp/portal/domain/CentralizedApp.java
new file mode 100644
index 00000000..2e902b83
--- /dev/null
+++ b/ecomp-portal-BE-common/src/main/java/org/onap/portalapp/portal/domain/CentralizedApp.java
@@ -0,0 +1,81 @@
+/*-
+ * ============LICENSE_START==========================================
+ * ONAP Portal
+ * ===================================================================
+ * Copyright (C) 2017 AT&T Intellectual Property. All rights reserved.
+ * ===================================================================
+ *
+ * Unless otherwise specified, all software contained herein is licensed
+ * under the Apache License, Version 2.0 (the "License");
+ * you may not use this software 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.
+ *
+ * Unless otherwise specified, all documentation contained herein is licensed
+ * under the Creative Commons License, Attribution 4.0 Intl. (the "License");
+ * you may not use this documentation except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * https://creativecommons.org/licenses/by/4.0/
+ *
+ * Unless required by applicable law or agreed to in writing, documentation
+ * 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.
+ *
+ * ============LICENSE_END============================================
+ *
+ * ECOMP is a trademark and service mark of AT&T Intellectual Property.
+ */
+package org.onap.portalapp.portal.domain;
+
+import java.io.Serializable;
+
+import javax.persistence.Column;
+import javax.persistence.Entity;
+import javax.persistence.Id;
+
+import com.fasterxml.jackson.annotation.JsonInclude;
+
+@Entity
+@JsonInclude(JsonInclude.Include.NON_NULL)
+public class CentralizedApp implements Serializable{
+
+ /**
+ *
+ */
+ private static final long serialVersionUID = -3773410386555027935L;
+
+ @Id
+ @Column(name="app_id")
+ private int appId;
+
+ @Id
+ @Column(name="app_name")
+ private String appName;
+
+ public int getAppId() {
+ return appId;
+ }
+
+ public void setAppId(int appId) {
+ this.appId = appId;
+ }
+
+ public String getAppName() {
+ return appName;
+ }
+
+ public void setAppName(String appName) {
+ this.appName = appName;
+ }
+
+}
diff --git a/ecomp-portal-BE-common/src/main/java/org/onap/portalapp/portal/domain/EPApp.java b/ecomp-portal-BE-common/src/main/java/org/onap/portalapp/portal/domain/EPApp.java
new file mode 100644
index 00000000..6f593df3
--- /dev/null
+++ b/ecomp-portal-BE-common/src/main/java/org/onap/portalapp/portal/domain/EPApp.java
@@ -0,0 +1,484 @@
+/*-
+ * ============LICENSE_START==========================================
+ * ONAP Portal
+ * ===================================================================
+ * Copyright (C) 2017 AT&T Intellectual Property. All rights reserved.
+ * ===================================================================
+ *
+ * Unless otherwise specified, all software contained herein is licensed
+ * under the Apache License, Version 2.0 (the "License");
+ * you may not use this software 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.
+ *
+ * Unless otherwise specified, all documentation contained herein is licensed
+ * under the Creative Commons License, Attribution 4.0 Intl. (the "License");
+ * you may not use this documentation except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * https://creativecommons.org/licenses/by/4.0/
+ *
+ * Unless required by applicable law or agreed to in writing, documentation
+ * 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.
+ *
+ * ============LICENSE_END============================================
+ *
+ * ECOMP is a trademark and service mark of AT&T Intellectual Property.
+ */
+package org.onap.portalapp.portal.domain;
+
+import java.util.Arrays;
+
+import javax.persistence.Lob;
+
+import org.apache.commons.lang.StringUtils;
+import org.onap.portalsdk.core.domain.support.DomainVo;
+
+/**
+ * Model for all columns in the fn_app table.
+ */
+public class EPApp extends DomainVo {
+
+ private static final long serialVersionUID = 1L;
+
+ private String name;
+ private String imageUrl;
+ private String description;
+ private String notes;
+ private String url;
+ private String alternateUrl;
+ private String appRestEndpoint;
+ private String mlAppName;
+ private String mlAppAdminId;
+ private Long motsId;
+ private String username;
+ private String appPassword;
+ @Lob
+ private byte[] thumbnail;
+ private Boolean open;
+ private Boolean enabled;
+ private String uebTopicName;
+ private String uebKey;
+ private String uebSecret;
+ private Integer appType;
+ private AppContactUs contactUs;
+ private Boolean centralAuth;
+ private String nameSpace;
+
+ public EPApp() {
+ // Attention!!!
+ // We set here all default values. We also place protection
+ // into setters for fields with default values.
+ // If we don't use such protection we are able to place null
+ // to these fields and save such fields into DB even if DB has
+ // default values for these fields.
+ this.name = "";
+ this.mlAppName = "";
+ this.mlAppAdminId = "";
+ this.username = "";
+ this.appPassword = "";
+ this.open = new Boolean(false);
+ this.enabled = new Boolean(true);
+ this.uebTopicName = "";
+ this.uebKey = "";
+ this.uebSecret = "";
+ this.appType = 1;
+ }
+
+ public String getName() {
+ return name;
+ }
+
+ public void setName(String name) {
+ if (StringUtils.isEmpty(name)) {
+ name = "";
+ }
+ this.name = name;
+ }
+
+ public String getImageUrl() {
+ return imageUrl;
+ }
+
+ public void setImageUrl(String imageUrl) {
+ this.imageUrl = imageUrl;
+ }
+
+
+
+ public byte[] getThumbnail() {
+ return this.thumbnail;
+ }
+
+ public void setThumbnail(byte[] thumbnail) {
+ this.thumbnail = thumbnail;
+ }
+
+ public String getDescription() {
+ return description;
+ }
+
+ public void setDescription(String description) {
+ this.description = description;
+ }
+
+ public String getNotes() {
+ return notes;
+ }
+
+ public void setNotes(String notes) {
+ this.notes = notes;
+ }
+
+ public String getUrl() {
+ return url;
+ }
+
+ public void setUrl(String url) {
+ this.url = url;
+ }
+
+ public String getAlternateUrl() {
+ return alternateUrl;
+ }
+
+ public void setAlternateUrl(String alternateUrl) {
+ this.alternateUrl = alternateUrl;
+ }
+
+ public String getAppRestEndpoint() {
+ return appRestEndpoint;
+ }
+
+ public void setAppRestEndpoint(String appRestEndpoint) {
+ this.appRestEndpoint = appRestEndpoint;
+ }
+
+ public String getMlAppName() {
+ return mlAppName;
+ }
+
+ public void setMlAppName(String mlAppName) {
+ if (StringUtils.isEmpty(mlAppName)) {
+ mlAppName = "";
+ }
+ this.mlAppName = mlAppName;
+ }
+
+ public String getMlAppAdminId() {
+ return mlAppAdminId;
+ }
+
+ public void setMlAppAdminId(String mlAppAdminId) {
+ if (StringUtils.isEmpty(mlAppAdminId)) {
+ mlAppAdminId = "";
+ }
+ this.mlAppAdminId = mlAppAdminId;
+ }
+
+ public Long getMotsId() {
+ return motsId;
+ }
+
+ public void setMotsId(Long motsId) {
+ this.motsId = motsId;
+ }
+
+ public String getUsername() {
+ return username;
+ }
+
+ public void setUsername(String username) {
+ this.username = username;
+ }
+
+ public String getAppPassword() {
+ return appPassword;
+ }
+
+ public void setAppPassword(String appPassword) {
+ if (StringUtils.isEmpty(appPassword)) {
+ appPassword = "";
+ }
+ this.appPassword = appPassword;
+ }
+
+ public Boolean getOpen() {
+ return open;
+ }
+
+ public void setOpen(Boolean open) {
+ if (open == null) {
+ open = new Boolean(false);
+ }
+ this.open = open;
+ }
+
+ public Boolean getEnabled() {
+ return enabled;
+ }
+
+ public void setEnabled(Boolean enabled) {
+ if (enabled == null) {
+ enabled = new Boolean(true);
+ }
+ this.enabled = enabled;
+ }
+
+ public Integer getAppType() {
+ return appType;
+ }
+
+ public void setAppType(Integer appType) {
+ if (appType == null) {
+ appType = new Integer(1);
+ }
+ this.appType = appType;
+ }
+
+ public void setRestrictedApp(Boolean restrictedApp) {
+ Integer result = 1;
+ if (restrictedApp) {
+ result = 2;
+ }
+ this.appType = result;
+ }
+
+ public Boolean isRestrictedApp() {
+ return (this.appType == 2 ? true : false);
+ }
+
+ public int compareTo(Object obj) {
+ Long c1 = getId();
+ Long c2 = ((EPApp) obj).getId();
+
+ return c1.compareTo(c2);
+ }
+
+ public String getUebTopicName() {
+ return this.uebTopicName;
+ }
+
+ public void setUebTopicName(String topicName) {
+ if (StringUtils.isEmpty(topicName)) {
+ this.uebTopicName = "";
+ }
+ this.uebTopicName = topicName;
+ }
+
+ public String getUebKey() {
+ return this.uebKey;
+ }
+
+ public void setUebKey(String uebKey) {
+ if (StringUtils.isEmpty(uebKey)) {
+ this.uebKey = "";
+ }
+ this.uebKey = uebKey;
+ }
+
+ public String getUebSecret() {
+ return this.uebSecret;
+ }
+
+ public void setUebSecret(String uebSecret) {
+ if (StringUtils.isEmpty(uebSecret)) {
+ this.uebSecret = "";
+ }
+ this.uebSecret = uebSecret;
+ }
+
+ public AppContactUs getContactUs() {
+ return contactUs;
+ }
+
+ public void setContactUs(AppContactUs contactUs) {
+ this.contactUs = contactUs;
+ }
+
+ public Boolean getCentralAuth() {
+ return centralAuth;
+ }
+
+ public void setCentralAuth(Boolean centralAuth) {
+ if (centralAuth == null) {
+ centralAuth = new Boolean(false);
+ }
+ this.centralAuth = centralAuth;
+ }
+
+ public String getNameSpace() {
+ return nameSpace;
+ }
+
+ public void setNameSpace(String nameSpace) {
+ if (StringUtils.isEmpty(nameSpace)) {
+ nameSpace = null;
+ }
+ this.nameSpace = nameSpace;
+ }
+
+ @Override
+ public String toString() {
+ String str = "[" + getId() + ":" + getName() + "]";
+ return str;
+ }
+
+ @Override
+ public int hashCode() {
+ final int prime = 31;
+ int result = 1;
+ result = prime * result + ((alternateUrl == null) ? 0 : alternateUrl.hashCode());
+ result = prime * result + ((appPassword == null) ? 0 : appPassword.hashCode());
+ result = prime * result + ((appRestEndpoint == null) ? 0 : appRestEndpoint.hashCode());
+ result = prime * result + ((appType == null) ? 0 : appType.hashCode());
+ result = prime * result + ((centralAuth == null) ? 0 : centralAuth.hashCode());
+ result = prime * result + ((contactUs == null) ? 0 : contactUs.hashCode());
+ result = prime * result + ((description == null) ? 0 : description.hashCode());
+ result = prime * result + ((enabled == null) ? 0 : enabled.hashCode());
+ result = prime * result + ((imageUrl == null) ? 0 : imageUrl.hashCode());
+ result = prime * result + ((mlAppAdminId == null) ? 0 : mlAppAdminId.hashCode());
+ result = prime * result + ((mlAppName == null) ? 0 : mlAppName.hashCode());
+ result = prime * result + ((motsId == null) ? 0 : motsId.hashCode());
+ result = prime * result + ((name == null) ? 0 : name.hashCode());
+ result = prime * result + ((nameSpace == null) ? 0 : nameSpace.hashCode());
+ result = prime * result + ((notes == null) ? 0 : notes.hashCode());
+ result = prime * result + ((open == null) ? 0 : open.hashCode());
+ result = prime * result + Arrays.hashCode(thumbnail);
+ result = prime * result + ((uebKey == null) ? 0 : uebKey.hashCode());
+ result = prime * result + ((uebSecret == null) ? 0 : uebSecret.hashCode());
+ result = prime * result + ((uebTopicName == null) ? 0 : uebTopicName.hashCode());
+ result = prime * result + ((url == null) ? 0 : url.hashCode());
+ result = prime * result + ((username == null) ? 0 : username.hashCode());
+ return result;
+ }
+
+ @Override
+ public boolean equals(Object obj) {
+ if (this == obj)
+ return true;
+ if (obj == null)
+ return false;
+ if (getClass() != obj.getClass())
+ return false;
+ EPApp other = (EPApp) obj;
+ if (alternateUrl == null) {
+ if (other.alternateUrl != null)
+ return false;
+ } else if (!alternateUrl.equals(other.alternateUrl))
+ return false;
+ if (appPassword == null) {
+ if (other.appPassword != null)
+ return false;
+ } else if (!appPassword.equals(other.appPassword))
+ return false;
+ if (appRestEndpoint == null) {
+ if (other.appRestEndpoint != null)
+ return false;
+ } else if (!appRestEndpoint.equals(other.appRestEndpoint))
+ return false;
+ if (appType == null) {
+ if (other.appType != null)
+ return false;
+ } else if (!appType.equals(other.appType))
+ return false;
+ if (centralAuth == null) {
+ if (other.centralAuth != null)
+ return false;
+ } else if (!centralAuth.equals(other.centralAuth))
+ return false;
+ if (contactUs == null) {
+ if (other.contactUs != null)
+ return false;
+ } else if (!contactUs.equals(other.contactUs))
+ return false;
+ if (description == null) {
+ if (other.description != null)
+ return false;
+ } else if (!description.equals(other.description))
+ return false;
+ if (enabled == null) {
+ if (other.enabled != null)
+ return false;
+ } else if (!enabled.equals(other.enabled))
+ return false;
+ if (imageUrl == null) {
+ if (other.imageUrl != null)
+ return false;
+ } else if (!imageUrl.equals(other.imageUrl))
+ return false;
+ if (mlAppAdminId == null) {
+ if (other.mlAppAdminId != null)
+ return false;
+ } else if (!mlAppAdminId.equals(other.mlAppAdminId))
+ return false;
+ if (mlAppName == null) {
+ if (other.mlAppName != null)
+ return false;
+ } else if (!mlAppName.equals(other.mlAppName))
+ return false;
+ if (motsId == null) {
+ if (other.motsId != null)
+ return false;
+ } else if (!motsId.equals(other.motsId))
+ return false;
+ if (name == null) {
+ if (other.name != null)
+ return false;
+ } else if (!name.equals(other.name))
+ return false;
+ if (nameSpace == null) {
+ if (other.nameSpace != null)
+ return false;
+ } else if (!nameSpace.equals(other.nameSpace))
+ return false;
+ if (notes == null) {
+ if (other.notes != null)
+ return false;
+ } else if (!notes.equals(other.notes))
+ return false;
+ if (open == null) {
+ if (other.open != null)
+ return false;
+ } else if (!open.equals(other.open))
+ return false;
+ if (!Arrays.equals(thumbnail, other.thumbnail))
+ return false;
+ if (uebKey == null) {
+ if (other.uebKey != null)
+ return false;
+ } else if (!uebKey.equals(other.uebKey))
+ return false;
+ if (uebSecret == null) {
+ if (other.uebSecret != null)
+ return false;
+ } else if (!uebSecret.equals(other.uebSecret))
+ return false;
+ if (uebTopicName == null) {
+ if (other.uebTopicName != null)
+ return false;
+ } else if (!uebTopicName.equals(other.uebTopicName))
+ return false;
+ if (url == null) {
+ if (other.url != null)
+ return false;
+ } else if (!url.equals(other.url))
+ return false;
+ if (username == null) {
+ if (other.username != null)
+ return false;
+ } else if (!username.equals(other.username))
+ return false;
+ return true;
+ }
+}
diff --git a/ecomp-portal-BE-common/src/main/java/org/onap/portalapp/portal/domain/EPAppRoleFunction.java b/ecomp-portal-BE-common/src/main/java/org/onap/portalapp/portal/domain/EPAppRoleFunction.java
new file mode 100644
index 00000000..559050b9
--- /dev/null
+++ b/ecomp-portal-BE-common/src/main/java/org/onap/portalapp/portal/domain/EPAppRoleFunction.java
@@ -0,0 +1,101 @@
+/*-
+ * ============LICENSE_START==========================================
+ * ONAP Portal
+ * ===================================================================
+ * Copyright (C) 2017 AT&T Intellectual Property. All rights reserved.
+ * ===================================================================
+ *
+ * Unless otherwise specified, all software contained herein is licensed
+ * under the Apache License, Version 2.0 (the "License");
+ * you may not use this software 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.
+ *
+ * Unless otherwise specified, all documentation contained herein is licensed
+ * under the Creative Commons License, Attribution 4.0 Intl. (the "License");
+ * you may not use this documentation except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * https://creativecommons.org/licenses/by/4.0/
+ *
+ * Unless required by applicable law or agreed to in writing, documentation
+ * 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.
+ *
+ * ============LICENSE_END============================================
+ *
+ * ECOMP is a trademark and service mark of AT&T Intellectual Property.
+ */
+package org.onap.portalapp.portal.domain;
+
+import org.onap.portalsdk.core.domain.support.DomainVo;
+
+public class EPAppRoleFunction extends DomainVo implements java.io.Serializable{
+
+ private static final long serialVersionUID = 7752385247460299630L;
+
+ private Long roleId;
+ private Long appId;
+ private String code;
+ private String roleAppId;
+
+ /**
+ * @return the roleId
+ */
+ public Long getRoleId() {
+ return roleId;
+ }
+ /**
+ * @param roleId the roleId to set
+ */
+ public void setRoleId(Long roleId) {
+ this.roleId = roleId;
+ }
+ /**
+ * @return the appId
+ */
+ public Long getAppId() {
+ return appId;
+ }
+ /**
+ * @param appId the appId to set
+ */
+ public void setAppId(Long appId) {
+ this.appId = appId;
+ }
+ /**
+ * @return the code
+ */
+ public String getCode() {
+ return code;
+ }
+ /**
+ * @param code the code to set
+ */
+ public void setCode(String code) {
+ this.code = code;
+ }
+ /**
+ *
+ * @return the roles app Id
+ */
+ public String getRoleAppId() {
+ return roleAppId;
+ }
+ /**
+ *
+ * @param roleAppId
+ */
+ public void setRoleAppId(String roleAppId) {
+ this.roleAppId = roleAppId;
+ }
+}
diff --git a/ecomp-portal-BE-common/src/main/java/org/onap/portalapp/portal/domain/EPEndpoint.java b/ecomp-portal-BE-common/src/main/java/org/onap/portalapp/portal/domain/EPEndpoint.java
new file mode 100644
index 00000000..c967919d
--- /dev/null
+++ b/ecomp-portal-BE-common/src/main/java/org/onap/portalapp/portal/domain/EPEndpoint.java
@@ -0,0 +1,74 @@
+/*-
+ * ============LICENSE_START==========================================
+ * ONAP Portal
+ * ===================================================================
+ * Copyright (C) 2017 AT&T Intellectual Property. All rights reserved.
+ * ===================================================================
+ *
+ * Unless otherwise specified, all software contained herein is licensed
+ * under the Apache License, Version 2.0 (the "License");
+ * you may not use this software 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.
+ *
+ * Unless otherwise specified, all documentation contained herein is licensed
+ * under the Creative Commons License, Attribution 4.0 Intl. (the "License");
+ * you may not use this documentation except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * https://creativecommons.org/licenses/by/4.0/
+ *
+ * Unless required by applicable law or agreed to in writing, documentation
+ * 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.
+ *
+ * ============LICENSE_END============================================
+ *
+ * ECOMP is a trademark and service mark of AT&T Intellectual Property.
+ */
+package org.onap.portalapp.portal.domain;
+
+import org.onap.portalsdk.core.domain.support.DomainVo;
+
+public class EPEndpoint extends DomainVo {
+
+ private static final long serialVersionUID = 1L;
+
+ public EPEndpoint() {
+
+ }
+
+ private Long id;
+ private String name;
+
+ public Long getId() {
+ return id;
+ }
+
+ public void setId(Long id) {
+ this.id = id;
+ }
+
+ public String getName() {
+ return name;
+ }
+
+ public void setName(String name) {
+ this.name = name;
+ }
+
+ @Override
+ public String toString() {
+ return "EPEndpoint [id=" + id + ", name=" + name + "]";
+ }
+
+}
diff --git a/ecomp-portal-BE-common/src/main/java/org/onap/portalapp/portal/domain/EPEndpointAccount.java b/ecomp-portal-BE-common/src/main/java/org/onap/portalapp/portal/domain/EPEndpointAccount.java
new file mode 100644
index 00000000..3184be41
--- /dev/null
+++ b/ecomp-portal-BE-common/src/main/java/org/onap/portalapp/portal/domain/EPEndpointAccount.java
@@ -0,0 +1,83 @@
+/*-
+ * ============LICENSE_START==========================================
+ * ONAP Portal
+ * ===================================================================
+ * Copyright (C) 2017 AT&T Intellectual Property. All rights reserved.
+ * ===================================================================
+ *
+ * Unless otherwise specified, all software contained herein is licensed
+ * under the Apache License, Version 2.0 (the "License");
+ * you may not use this software 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.
+ *
+ * Unless otherwise specified, all documentation contained herein is licensed
+ * under the Creative Commons License, Attribution 4.0 Intl. (the "License");
+ * you may not use this documentation except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * https://creativecommons.org/licenses/by/4.0/
+ *
+ * Unless required by applicable law or agreed to in writing, documentation
+ * 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.
+ *
+ * ============LICENSE_END============================================
+ *
+ * ECOMP is a trademark and service mark of AT&T Intellectual Property.
+ */
+package org.onap.portalapp.portal.domain;
+
+import org.onap.portalsdk.core.domain.support.DomainVo;
+
+public class EPEndpointAccount extends DomainVo {
+
+ private static final long serialVersionUID = 1L;
+
+ public EPEndpointAccount() {
+
+ }
+
+ private Long id;
+ private Long ep_id;
+ private Long account_id;
+
+ public Long getId() {
+ return id;
+ }
+
+ public void setId(Long id) {
+ this.id = id;
+ }
+
+ public Long getEp_id() {
+ return ep_id;
+ }
+
+ public void setEp_id(Long ep_id) {
+ this.ep_id = ep_id;
+ }
+
+ public Long getAccount_id() {
+ return account_id;
+ }
+
+ public void setAccount_id(Long account_id) {
+ this.account_id = account_id;
+ }
+
+ @Override
+ public String toString() {
+ return "EPEndpointAccount [id=" + id + ", ep_id=" + ep_id + ", account_id=" + account_id + "]";
+ }
+
+}
diff --git a/ecomp-portal-BE-common/src/main/java/org/onap/portalapp/portal/domain/EPRole.java b/ecomp-portal-BE-common/src/main/java/org/onap/portalapp/portal/domain/EPRole.java
new file mode 100644
index 00000000..601c7633
--- /dev/null
+++ b/ecomp-portal-BE-common/src/main/java/org/onap/portalapp/portal/domain/EPRole.java
@@ -0,0 +1,221 @@
+/*-
+ * ============LICENSE_START==========================================
+ * ONAP Portal
+ * ===================================================================
+ * Copyright (C) 2017 AT&T Intellectual Property. All rights reserved.
+ * ===================================================================
+ *
+ * Unless otherwise specified, all software contained herein is licensed
+ * under the Apache License, Version 2.0 (the "License");
+ * you may not use this software 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.
+ *
+ * Unless otherwise specified, all documentation contained herein is licensed
+ * under the Creative Commons License, Attribution 4.0 Intl. (the "License");
+ * you may not use this documentation except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * https://creativecommons.org/licenses/by/4.0/
+ *
+ * Unless required by applicable law or agreed to in writing, documentation
+ * 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.
+ *
+ * ============LICENSE_END============================================
+ *
+ * ECOMP is a trademark and service mark of AT&T Intellectual Property.
+ */
+package org.onap.portalapp.portal.domain;
+
+import java.util.Iterator;
+import java.util.SortedSet;
+import java.util.TreeSet;
+
+import org.onap.portalsdk.core.domain.RoleFunction;
+import org.onap.portalsdk.core.domain.support.DomainVo;
+import com.fasterxml.jackson.annotation.JsonIgnore;
+
+public class EPRole extends DomainVo {
+
+ private static final long serialVersionUID = 1L;
+ private String name;
+ private boolean active;
+ private Integer priority;
+
+ // ECOMP will identify the specific remote application role id by appID;appRoleId among all the application roles it persists.
+ private Long appId; // used by ECOMP only
+ private Long appRoleId; // used by ECOMP only
+
+ private SortedSet<RoleFunction> roleFunctions = new TreeSet<RoleFunction>();
+
+ private SortedSet<EPRole> childRoles = new TreeSet<EPRole>();
+
+ @JsonIgnore
+ private SortedSet<EPRole> parentRoles = new TreeSet<EPRole>();
+
+ public EPRole() {}
+
+ public String getName() {
+ return name;
+ }
+
+ public boolean getActive() {
+ return active;
+ }
+
+ public SortedSet<RoleFunction> getRoleFunctions() {
+ return roleFunctions;
+ }
+
+ public Integer getPriority() {
+ return priority;
+ }
+
+ public SortedSet<EPRole> getChildRoles() {
+ return childRoles;
+ }
+
+ public SortedSet<EPRole> getParentRoles() {
+ return parentRoles;
+ }
+
+ public void setName(String name) {
+ this.name = name;
+ }
+
+ public void setActive(boolean active) {
+ this.active = active;
+ }
+
+ public void setRoleFunctions(SortedSet<RoleFunction> roleFunctions) {
+ this.roleFunctions = roleFunctions;
+ }
+
+ public void setPriority(Integer priority) {
+ this.priority = priority;
+ }
+
+ public void setChildRoles(SortedSet<EPRole> childRoles) {
+ this.childRoles = childRoles;
+ }
+
+ public void setParentRoles(SortedSet<EPRole> parentRoles) {
+ this.parentRoles = parentRoles;
+ }
+
+ public void addRoleFunction(RoleFunction roleFunction) {
+ this.roleFunctions.add(roleFunction);
+ }
+
+ public void addChildRole(EPRole role) {
+ this.childRoles.add(role);
+ }
+
+ public void addParentRole(EPRole role) {
+ this.parentRoles.add(role);
+ }
+
+ public String getEditUrl() {
+ return "/role.htm?role_id=" + getId();
+ }
+
+ public String getToggleActiveImage() {
+ return "/static/fusion/images/" + (getActive() ? "active.png" : "inactive.png" );
+ }
+
+ public String getToggleActiveAltText() {
+ return getActive() ? "Click to Deactivate Role" : "Click to Activate Role";
+ }
+
+ public void removeChildRole(Long roleId) {
+ Iterator<EPRole> i = this.childRoles.iterator();
+
+ while (i.hasNext()) {
+ EPRole childRole = (EPRole)i.next();
+ if (childRole.getId().equals(roleId)) {
+ this.childRoles.remove(childRole);
+ break;
+ }
+ }
+ }
+
+ public void removeParentRole(Long roleId) {
+ Iterator<EPRole> i = this.parentRoles.iterator();
+
+ while (i.hasNext()) {
+ EPRole parentRole = (EPRole)i.next();
+ if (parentRole.getId().equals(roleId)) {
+ this.parentRoles.remove(parentRole);
+ break;
+ }
+ }
+ }
+
+ public void removeRoleFunction(String roleFunctionCd) {
+ Iterator<RoleFunction> i = this.roleFunctions.iterator();
+
+ while (i.hasNext()) {
+ RoleFunction roleFunction = (RoleFunction)i.next();
+ if (roleFunction.getCode().equals(roleFunctionCd)) {
+ this.roleFunctions.remove(roleFunction);
+ break;
+ }
+ }
+ }
+
+ public int compareTo(Object obj){
+ EPRole other = (EPRole)obj;
+
+ if(this.appId == null)
+ if(other.getAppId() == null)
+ return compareByName(other); //equal
+ else
+ return -1;
+ else // this.appId != null
+ if(other.getAppId() == null)
+ return 1; // appId != null, but others is null
+ else{
+ int appIdCompareResult = appId.compareTo(other.getAppId());
+ return appIdCompareResult == 0? compareByName(other) : appIdCompareResult;
+ }
+ }
+
+ private int compareByName(EPRole other) {
+ String c1 = getName();
+ String c2 = other.getName();
+
+ return (c1 == null || c2 == null) ? 1 : c1.compareTo(c2);
+ }
+
+ public Long getAppId() {
+ return appId;
+ }
+
+ public void setAppId(Long appId) {
+ this.appId = appId;
+ }
+
+ public Long getAppRoleId() {
+ return appRoleId;
+ }
+
+ public void setAppRoleId(Long appRoleId) {
+ this.appRoleId = appRoleId;
+ }
+
+ @Override
+ public String toString() {
+ return "[Id = " + id + ", name = " + name + "]";
+ }
+
+}
diff --git a/ecomp-portal-BE-common/src/main/java/org/onap/portalapp/portal/domain/EPUser.java b/ecomp-portal-BE-common/src/main/java/org/onap/portalapp/portal/domain/EPUser.java
new file mode 100644
index 00000000..e7435203
--- /dev/null
+++ b/ecomp-portal-BE-common/src/main/java/org/onap/portalapp/portal/domain/EPUser.java
@@ -0,0 +1,668 @@
+/*-
+ * ============LICENSE_START==========================================
+ * ONAP Portal
+ * ===================================================================
+ * Copyright (C) 2017 AT&T Intellectual Property. All rights reserved.
+ * ===================================================================
+ *
+ * Unless otherwise specified, all software contained herein is licensed
+ * under the Apache License, Version 2.0 (the "License");
+ * you may not use this software 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.
+ *
+ * Unless otherwise specified, all documentation contained herein is licensed
+ * under the Creative Commons License, Attribution 4.0 Intl. (the "License");
+ * you may not use this documentation except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * https://creativecommons.org/licenses/by/4.0/
+ *
+ * Unless required by applicable law or agreed to in writing, documentation
+ * 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.
+ *
+ * ============LICENSE_END============================================
+ *
+ * ECOMP is a trademark and service mark of AT&T Intellectual Property.
+ */
+package org.onap.portalapp.portal.domain;
+
+import java.util.Date;
+import java.util.Iterator;
+import java.util.SortedSet;
+import java.util.TreeSet;
+
+import org.onap.portalapp.portal.utils.PortalConstants;
+import org.onap.portalsdk.core.domain.User;
+import org.onap.portalsdk.core.logging.logic.EELFLoggerDelegate;
+
+import com.fasterxml.jackson.annotation.JsonIgnore;
+
+public class EPUser extends User {
+
+ private Long orgId;
+ private Long managerId;
+ private String firstName;
+ private String middleInitial;
+ private String lastName;
+ private String phone;
+ private String fax;
+ private String cellular;
+ private String email;
+ private Long addressId;
+ private String alertMethodCd;
+ private String hrid;
+ private String orgUserId;
+ private String orgCode;
+ private String address1;
+ private String address2;
+ private String city;
+ private String state;
+ private String zipCode;
+ private String country;
+ private String orgManagerUserId;
+ private String locationClli;
+ private String businessCountryCode;
+ private String businessCountryName;
+ private String businessUnit;
+ private String businessUnitName;
+ private String department;
+ private String departmentName;
+ private String companyCode;
+ private String company;
+ private String zipCodeSuffix;
+ private String jobTitle;
+ private String commandChain;
+ private String siloStatus;
+ private String costCenter;
+ private String financialLocCode;
+
+
+
+ private String loginId;
+ private String loginPwd;
+ private Date lastLoginDate;
+ private boolean active;
+ private boolean internal;
+ private Long selectedProfileId;
+ private Long timeZoneId;
+ private boolean online;
+ private String chatId;
+
+ private static final long serialVersionUID = 1L;
+
+ private static EELFLoggerDelegate logger = EELFLoggerDelegate.getLogger(EPUser.class);
+ private static final String ECOMP_PORTAL_NAME = "ECOMP";
+ private boolean isGuest = false;
+
+ private SortedSet<EPUserApp> userApps = new TreeSet<EPUserApp>();
+ private SortedSet<EPRole> pseudoRoles = new TreeSet<EPRole>();
+
+ public EPUser() {}
+
+ public Long getAddressId() {
+ return addressId;
+ }
+
+ public String getAlertMethodCd() {
+ return alertMethodCd;
+ }
+
+ public String getCellular() {
+ return cellular;
+ }
+
+ public String getEmail() {
+ return email;
+ }
+
+ public String getFax() {
+ return fax;
+ }
+
+ public String getFirstName() {
+ return firstName;
+ }
+
+ public String getHrid() {
+ return hrid;
+ }
+
+ public Date getLastLoginDate() {
+ return lastLoginDate;
+ }
+
+ public String getLastName() {
+ return lastName;
+ }
+
+ @JsonIgnore
+ public String getFullName() {
+ return getFirstName() + " " + getLastName();
+ }
+
+ public String getLoginId() {
+ return loginId;
+ }
+
+ public String getLoginPwd() {
+ return loginPwd;
+ }
+
+ public Long getManagerId() {
+ return managerId;
+ }
+
+ public String getMiddleInitial() {
+ return middleInitial;
+ }
+
+ public String getOrgCode() {
+ return orgCode;
+ }
+
+ public Long getOrgId() {
+ return orgId;
+ }
+
+ public String getPhone() {
+ return phone;
+ }
+
+ public String getOrgUserId() {
+ return orgUserId;
+ }
+
+ public boolean getActive() {
+ return active;
+ }
+
+ public boolean getInternal() {
+ return internal;
+ }
+
+ public String getAddress1() {
+ return address1;
+ }
+
+ public String getAddress2() {
+ return address2;
+ }
+
+ public String getCity() {
+ return city;
+ }
+
+ public String getCountry() {
+ return country;
+ }
+
+ public String getState() {
+ return state;
+ }
+
+ public String getZipCode() {
+ return zipCode;
+ }
+
+ public String getBusinessCountryCode() {
+ return businessCountryCode;
+ }
+
+ public String getCommandChain() {
+ return commandChain;
+ }
+
+ public String getCompany() {
+ return company;
+ }
+
+ public String getCompanyCode() {
+ return companyCode;
+ }
+
+ public String getDepartment() {
+ return department;
+ }
+
+ public String getJobTitle() {
+ return jobTitle;
+ }
+
+ public String getLocationClli() {
+ return locationClli;
+ }
+
+ public String getOrgManagerUserId() {
+ return orgManagerUserId;
+ }
+
+ public String getZipCodeSuffix() {
+ return zipCodeSuffix;
+ }
+
+ public String getBusinessCountryName() {
+ return businessCountryName;
+ }
+
+ public Long getSelectedProfileId() {
+ return selectedProfileId;
+ }
+
+ public void setAddressId(Long addressId) {
+ this.addressId = addressId;
+ }
+
+ public void setAlertMethodCd(String alertMethodCd) {
+ this.alertMethodCd = alertMethodCd;
+ }
+
+ public void setCellular(String cellular) {
+ this.cellular = cellular;
+ }
+
+ public void setEmail(String email) {
+ this.email = email;
+ }
+
+ public void setFax(String fax) {
+ this.fax = fax;
+ }
+
+ public void setFirstName(String firstName) {
+ this.firstName = firstName;
+ }
+
+ public void setHrid(String hrid) {
+ this.hrid = hrid;
+ }
+
+ public void setLastLoginDate(Date lastLoginDate) {
+ this.lastLoginDate = lastLoginDate;
+ }
+
+ public void setLastName(String lastName) {
+ this.lastName = lastName;
+ }
+
+ public void setLoginId(String loginId) {
+ this.loginId = loginId;
+ }
+
+ public void setLoginPwd(String loginPwd) {
+ this.loginPwd = loginPwd;
+ }
+
+ public void setManagerId(Long managerId) {
+ this.managerId = managerId;
+ }
+
+ public void setMiddleInitial(String middleInitial) {
+ this.middleInitial = middleInitial;
+ }
+
+ public void setOrgCode(String orgCode) {
+ this.orgCode = orgCode;
+ }
+
+ public void setOrgId(Long orgId) {
+ this.orgId = orgId;
+ }
+
+ public void setPhone(String phone) {
+ this.phone = phone;
+ }
+
+ public void setOrgUserId(String orgUserId) {
+ this.orgUserId = orgUserId;
+ }
+
+ public void setActive(boolean active) {
+ this.active = active;
+ }
+
+ public void setInternal(boolean internal) {
+ this.internal = internal;
+ }
+
+ public void setAddress1(String address1) {
+ this.address1 = address1;
+ }
+
+ public void setAddress2(String address2) {
+ this.address2 = address2;
+ }
+
+ public void setCity(String city) {
+ this.city = city;
+ }
+
+ public void setCountry(String country) {
+ this.country = country;
+ }
+
+ public void setState(String state) {
+ this.state = state;
+ }
+
+ public void setZipCode(String zipCode) {
+ this.zipCode = zipCode;
+ }
+
+ public void setBusinessCountryCode(String businessCountryCode) {
+ this.businessCountryCode = businessCountryCode;
+ }
+
+ public void setCommandChain(String commandChain) {
+ this.commandChain = commandChain;
+ }
+
+ public void setCompany(String company) {
+ this.company = company;
+ }
+
+ public void setCompanyCode(String companyCode) {
+ this.companyCode = companyCode;
+ }
+
+ public void setDepartment(String department) {
+ this.department = department;
+ }
+
+ public void setJobTitle(String jobTitle) {
+ this.jobTitle = jobTitle;
+ }
+
+ public void setLocationClli(String locationClli) {
+ this.locationClli = locationClli;
+ }
+
+ public void setOrgManagerUserId(String orgManagerUserId) {
+ this.orgManagerUserId = orgManagerUserId;
+ }
+
+ public void setZipCodeSuffix(String zipCodeSuffix) {
+ this.zipCodeSuffix = zipCodeSuffix;
+ }
+
+ public void setBusinessCountryName(String businessCountryName) {
+ this.businessCountryName = businessCountryName;
+ }
+
+ public SortedSet<EPRole> getPseudoRoles() {
+ return pseudoRoles;
+ }
+
+ public void setPseudoRoles(SortedSet<EPRole> pseudoRoles) {
+ this.pseudoRoles = pseudoRoles;
+ }
+
+ public void setSelectedProfileId(Long selectedProfileId) {
+ this.selectedProfileId = selectedProfileId;
+ }
+
+ public Long getTimeZoneId() {
+ return timeZoneId;
+ }
+
+ public void setTimeZoneId(Long timeZoneId) {
+ this.timeZoneId = timeZoneId;
+ }
+
+ public String getBusinessUnit() {
+ return businessUnit;
+ }
+
+ public void setBusinessUnit(String businessUnit) {
+ this.businessUnit = businessUnit;
+ }
+
+ public String getSiloStatus() {
+ return siloStatus;
+ }
+
+ public void setSiloStatus(String siloStatus) {
+ this.siloStatus = siloStatus;
+ }
+
+ public String getCostCenter() {
+ return costCenter;
+ }
+
+ public void setCostCenter(String costCenter) {
+ this.costCenter = costCenter;
+ }
+
+ public String getFinancialLocCode() {
+ return financialLocCode;
+ }
+
+ public void setFinancialLocCode(String financialLocCode) {
+ this.financialLocCode = financialLocCode;
+ }
+
+ public String getBusinessUnitName() {
+ return businessUnitName;
+ }
+
+ public void setBusinessUnitName(String businessUnitName) {
+ this.businessUnitName = businessUnitName;
+ }
+
+ public String getDepartmentName() {
+ return departmentName;
+ }
+
+ public void setDepartmentName(String departmentName) {
+ this.departmentName = departmentName;
+ }
+
+ public int compareTo(Object obj){
+ EPUser user = (EPUser)obj;
+
+ String c1 = getLastName() + getFirstName() + getMiddleInitial();
+ String c2 = user.getLastName() + user.getFirstName() + user.getMiddleInitial();
+
+ return c1.compareTo(c2);
+ }
+
+ public boolean isOnline() {
+ return online;
+ }
+
+ public void setOnline(boolean online) {
+ this.online = online;
+ }
+
+ public String getChatId() {
+ return chatId;
+ }
+
+ public void setChatId(String chatId) {
+ this.chatId = chatId;
+ }
+
+
+ public void setPseudoEPRoles(SortedSet<EPRole> pseudoRoles) {
+ this.pseudoRoles = pseudoRoles;
+ }
+
+ public SortedSet<EPUserApp> getEPUserApps() {
+ return userApps;
+ }
+
+ public void setEPUserApps(SortedSet<EPUserApp> userApps) {
+ this.userApps = userApps;
+ }
+
+ public void addUserApp(EPUserApp userApp) {
+ userApps.add(userApp);
+ }
+
+ public void addAppRoles(EPApp app, SortedSet<EPRole> roles) {
+ if (roles != null) {
+ // add all
+ SortedSet<EPUserApp> userApps = new TreeSet<EPUserApp>();
+ // this.userApps.removeAll(this.userApps);
+ Iterator<EPRole> itr = roles.iterator();
+ while (itr.hasNext()) {
+ EPRole role = (EPRole) itr.next();
+ EPUserApp userApp = new EPUserApp();
+ userApp.setUserId(this.id);
+ userApp.setApp(app);
+ userApp.setRole(role);
+ userApps.add(userApp);
+ }
+ setEPUserApps(userApps);
+ } else {
+ // remove all
+ setEPUserApps(null);
+ }
+
+ }
+
+ public SortedSet<EPRole> getAppEPRoles(EPApp app) {
+
+ logger.debug(EELFLoggerDelegate.debugLogger, "In EPUser.getAppEPRoles() - app = {}", app.getName());
+
+ SortedSet<EPRole> roles = new TreeSet<EPRole>();
+ SortedSet<EPUserApp> userAppRoles = getEPUserApps();
+
+ logger.debug(EELFLoggerDelegate.debugLogger, "In EPUser.getAppEPRoles() - userApps = ", userAppRoles.size());
+
+ Iterator<EPUserApp> userAppRolesIterator = userAppRoles.iterator();
+ EPUserApp userAppRole = null;
+ // getting default app
+ while (userAppRolesIterator.hasNext()) {
+ EPUserApp tempUserApp = (EPUserApp) userAppRolesIterator.next();
+ if (tempUserApp.getApp().getId().equals(app.getId())) {
+
+ logger.debug(EELFLoggerDelegate.debugLogger, "In EPUser.getAppEPRoles() - for user {}, found application {}", this.getFullName(), app.getName());
+
+ userAppRole = tempUserApp;
+
+ EPRole role = userAppRole.getRole();
+ if(role.getActive()){
+ logger.debug(EELFLoggerDelegate.debugLogger, "In EPUser.getAppEPRoles() - Role {} is active - adding for user {} and app {}", role.getName(), this.getFullName(), app.getName());
+ roles.add((EPRole) role);
+ }
+ else{
+ logger.debug(EELFLoggerDelegate.debugLogger, "In EPUser.getAppEPRoles() - Role {} is NOT active - NOT adding for user {} and app {}", role.getName(), this.getFullName(), app.getName());
+ }
+ }
+ }
+ logger.debug(EELFLoggerDelegate.debugLogger, "In EPUser.getAppEPRoles() - roles = ", roles.size());
+
+ return roles;
+ }
+
+
+ /**
+ * Attention! Not for use in ECOMP
+ */
+ public SortedSet<EPRole> getAppRoles(EPApp app) {
+ SortedSet<EPRole> roles = new TreeSet<EPRole>();
+ SortedSet<EPUserApp> apps = getEPUserApps();
+ Iterator<EPUserApp> appsItr = apps.iterator();
+ EPUserApp userApp = null;
+ // getting default app
+ while (appsItr.hasNext()) {
+ EPUserApp tempUserApp = (EPUserApp) appsItr.next();
+ if (tempUserApp.getApp().getId().equals(app.getId())) {
+ userApp = tempUserApp;
+ roles.add((EPRole) userApp.getRole());
+ }
+ }
+ return roles;
+ }
+
+
+
+ /**
+ * Attention! Not for use in ECOMP
+ */
+ public SortedSet<EPRole> getEPRoles() {
+ EPApp app = new EPApp();
+ app.setId(new Long(PortalConstants.PORTAL_APP_ID));
+ app.setName(ECOMP_PORTAL_NAME);
+ return getAppEPRoles(app);
+ }
+
+ /**
+ * Attention! Not for use in ECOMP
+ */
+ public void setEPRoles(SortedSet<EPRole> roles) {
+ EPApp app = new EPApp();
+ app.setId(new Long(PortalConstants.PORTAL_APP_ID));
+ app.setName(ECOMP_PORTAL_NAME);
+ addAppRoles(app, roles);
+ }
+
+ /**
+ * Attention! Not for use in ECOMP
+ */
+ public void removeEPRole(Long roleId) {
+ SortedSet<EPUserApp> apps = getEPUserApps();
+ Iterator<EPUserApp> appsItr = apps.iterator();
+ // getting default app
+ while (appsItr.hasNext()) {
+ EPUserApp tempUserApp = (EPUserApp) appsItr.next();
+ if (tempUserApp.equals(new Long(PortalConstants.PORTAL_APP_ID)) && tempUserApp.getRole().getId().equals(roleId)) {
+ appsItr.remove();
+ }
+ }
+ }
+
+ /**
+ * Attention! Not for use in ECOMP
+ */
+ public void addEPRole(EPRole role) {
+ if (role != null) {
+ SortedSet<EPRole> roles = getEPRoles();
+ if (roles == null) {
+ roles = new TreeSet<EPRole>();
+ }
+ roles.add(role);
+ setEPRoles(roles);
+ }
+ }
+
+ public boolean isGuest() {
+ return isGuest;
+ }
+
+ public void setGuest(boolean isGuest) {
+ this.isGuest = isGuest;
+ }
+
+ @Override
+ public String toString() {
+ return "EPUser [orgId=" + orgId + ", managerId=" + managerId + ", firstName=" + firstName + ", middleInitial="
+ + middleInitial + ", lastName=" + lastName + ", phone=" + phone + ", fax=" + fax + ", cellular="
+ + cellular + ", email=" + email + ", addressId=" + addressId + ", alertMethodCd=" + alertMethodCd
+ + ", hrid=" + hrid + ", orgUserId=" + orgUserId + ", orgCode=" + orgCode + ", address1=" + address1
+ + ", address2=" + address2 + ", city=" + city + ", state=" + state + ", zipCode=" + zipCode
+ + ", country=" + country + ", orgManagerUserId=" + orgManagerUserId + ", locationClli=" + locationClli
+ + ", businessCountryCode=" + businessCountryCode + ", businessCountryName=" + businessCountryName
+ + ", businessUnit=" + businessUnit + ", businessUnitName=" + businessUnitName + ", department="
+ + department + ", departmentName=" + departmentName + ", companyCode=" + companyCode + ", company="
+ + company + ", zipCodeSuffix=" + zipCodeSuffix + ", jobTitle=" + jobTitle + ", commandChain="
+ + commandChain + ", siloStatus=" + siloStatus + ", costCenter=" + costCenter + ", financialLocCode="
+ + financialLocCode + ", loginId=" + loginId + ", loginPwd=" + loginPwd + ", lastLoginDate="
+ + lastLoginDate + ", active=" + active + ", internal=" + internal + ", selectedProfileId="
+ + selectedProfileId + ", timeZoneId=" + timeZoneId + ", online=" + online + ", chatId=" + chatId
+ + ", isGuest=" + isGuest + ", userApps=" + userApps + ", pseudoRoles=" + pseudoRoles + "]";
+ }
+
+
+}
diff --git a/ecomp-portal-BE-common/src/main/java/org/onap/portalapp/portal/domain/EPUserApp.java b/ecomp-portal-BE-common/src/main/java/org/onap/portalapp/portal/domain/EPUserApp.java
new file mode 100644
index 00000000..1449af76
--- /dev/null
+++ b/ecomp-portal-BE-common/src/main/java/org/onap/portalapp/portal/domain/EPUserApp.java
@@ -0,0 +1,137 @@
+/*-
+ * ============LICENSE_START==========================================
+ * ONAP Portal
+ * ===================================================================
+ * Copyright (C) 2017 AT&T Intellectual Property. All rights reserved.
+ * ===================================================================
+ *
+ * Unless otherwise specified, all software contained herein is licensed
+ * under the Apache License, Version 2.0 (the "License");
+ * you may not use this software 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.
+ *
+ * Unless otherwise specified, all documentation contained herein is licensed
+ * under the Creative Commons License, Attribution 4.0 Intl. (the "License");
+ * you may not use this documentation except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * https://creativecommons.org/licenses/by/4.0/
+ *
+ * Unless required by applicable law or agreed to in writing, documentation
+ * 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.
+ *
+ * ============LICENSE_END============================================
+ *
+ * ECOMP is a trademark and service mark of AT&T Intellectual Property.
+ */
+package org.onap.portalapp.portal.domain;
+
+
+@SuppressWarnings("rawtypes")
+public class EPUserApp implements java.io.Serializable, Comparable {
+
+ private static final long serialVersionUID = 1L;
+
+ private Long userId;
+ private EPApp app;
+ private EPRole role;
+ private Short priority;
+
+ public EPUserApp() {
+ }
+
+ public Long getAppId() {
+ return this.getApp().getId();
+ }
+
+ public Long getRoleId() {
+ return (role == null) ? null : role.getId();
+ }
+
+ public Long getAppRoleId() {
+ return (role.getAppRoleId() == null) ? null : role.getAppRoleId();
+ }
+
+ @Override
+ public String toString() {
+ String str = "[u: "+getUserId()+"; a: "+getAppId()+", r: "+getRoleId()+"; appRoleId: "+getAppRoleId()+"]";
+ return str;
+ }
+
+ public Long getUserId() {
+ return userId;
+ }
+
+ public void setUserId(Long id) {
+ this.userId = id;
+ }
+
+ public EPApp getApp() {
+ return app;
+ }
+
+ public void setApp(EPApp app) {
+ this.app = app;
+ }
+
+ public EPRole getRole() {
+ return role;
+ }
+
+ public void setRole(EPRole role) {
+ this.role = role;
+ }
+
+ public Short getPriority() {
+ return this.priority;
+ }
+
+ public void setPriority(Short priority) {
+ this.priority = priority;
+ }
+
+ public boolean equals(Object other) {
+ if ((this == other))
+ return true;
+ if ((other == null))
+ return false;
+ if (!(other instanceof EPUserApp))
+ return false;
+ EPUserApp castOther = (EPUserApp) other;
+
+ return (this.getUserId().equals(castOther.getUserId()))
+ && (this.getApp().getId().equals(castOther.getApp().getId()))
+ && (this.getRole().getId().equals(castOther.getRole().getId()))
+ && ((this.priority==null && castOther.getPriority()==null) || this.getPriority().equals(castOther.getPriority()));
+ }
+
+ public int hashCode() {
+ int result = 17;
+
+ result = 37 * result + (int) (this.getUserId()==null ? 0 : this.getUserId().intValue());
+ result = 37 * result + (int) (this.getApp().getId()==null ? 0 : this.getApp().getId().intValue());
+ result = 37 * result + (int) (this.getRole().getId()==null ? 0 : this.getRole().getId().intValue());
+ result = 37 * result + (int) (this.priority==null ? 0 : this.priority);
+ return result;
+ }
+
+ public int compareTo(Object other){
+ EPUserApp castOther = (EPUserApp) other;
+
+ Long c1 = (this.getUserId()==null ? 0 : this.getUserId()) + (this.getApp()==null||this.getApp().getId()==null ? 0 : this.getApp().getId()) + (this.getRole()==null||this.getRole().getId()==null ? 0 : this.getRole().getId()) + (this.priority==null ? 0 : this.priority);
+ Long c2 = (castOther.getUserId()==null ? 0 : castOther.getUserId()) + (castOther.getApp()==null||castOther.getApp().getId()==null ? 0 : castOther.getApp().getId()) + (castOther.getRole()==null||castOther.getRole().getId()==null ? 0 : castOther.getRole().getId()) + (castOther.priority==null ? 0 : castOther.priority);
+
+ return c1.compareTo(c2);
+ }
+}
diff --git a/ecomp-portal-BE-common/src/main/java/org/onap/portalapp/portal/domain/EPUserAppCatalogRoles.java b/ecomp-portal-BE-common/src/main/java/org/onap/portalapp/portal/domain/EPUserAppCatalogRoles.java
new file mode 100644
index 00000000..f6d42b70
--- /dev/null
+++ b/ecomp-portal-BE-common/src/main/java/org/onap/portalapp/portal/domain/EPUserAppCatalogRoles.java
@@ -0,0 +1,110 @@
+/*-
+ * ============LICENSE_START==========================================
+ * ONAP Portal
+ * ===================================================================
+ * Copyright (C) 2017 AT&T Intellectual Property. All rights reserved.
+ * ===================================================================
+ *
+ * Unless otherwise specified, all software contained herein is licensed
+ * under the Apache License, Version 2.0 (the "License");
+ * you may not use this software 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.
+ *
+ * Unless otherwise specified, all documentation contained herein is licensed
+ * under the Creative Commons License, Attribution 4.0 Intl. (the "License");
+ * you may not use this documentation except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * https://creativecommons.org/licenses/by/4.0/
+ *
+ * Unless required by applicable law or agreed to in writing, documentation
+ * 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.
+ *
+ * ============LICENSE_END============================================
+ *
+ * ECOMP is a trademark and service mark of AT&T Intellectual Property.
+ */
+package org.onap.portalapp.portal.domain;
+
+import javax.persistence.Column;
+import javax.persistence.Entity;
+import javax.persistence.Id;
+
+import org.onap.portalsdk.core.domain.support.DomainVo;
+
+import com.fasterxml.jackson.annotation.JsonInclude;
+
+@Entity
+@JsonInclude
+public class EPUserAppCatalogRoles extends DomainVo {
+
+ private static final long serialVersionUID = -5259869298825093816L;
+
+
+ @Id
+ @Column(name="requested_role_id")
+ public Long requestedRoleId;
+
+
+ @Id
+ @Column(name="role_name")
+ public String rolename;
+
+ @Id
+ @Column(name="request_status")
+ public String requestStatus;
+
+ @Id
+ @Column(name="app_id")
+ public Long appId;
+
+ public Long getRequestedRoleId() {
+ return requestedRoleId;
+ }
+
+ public void setRequestedRoleId(Long requestedRoleId) {
+ this.requestedRoleId = requestedRoleId;
+ }
+
+ public String getRolename() {
+ return rolename;
+ }
+
+ public void setRolename(String rolename) {
+ this.rolename = rolename;
+ }
+
+ public String getRequestStatus() {
+ return requestStatus;
+ }
+
+ public void setRequestStatus(String requestStatus) {
+ this.requestStatus = requestStatus;
+ }
+
+ public Long getAppId() {
+ return appId;
+ }
+
+ public void setAppId(Long appId) {
+ this.appId = appId;
+ }
+
+ public String toString() {
+ return "EPUserAppCatalogRoles [requestedRoleId=" + requestedRoleId + ", rolename=" + rolename
+ + ", requestStatus=" + requestStatus + ", appId=" + appId + "]";
+ }
+
+
+}
diff --git a/ecomp-portal-BE-common/src/main/java/org/onap/portalapp/portal/domain/EPUserAppRoles.java b/ecomp-portal-BE-common/src/main/java/org/onap/portalapp/portal/domain/EPUserAppRoles.java
new file mode 100644
index 00000000..3e681081
--- /dev/null
+++ b/ecomp-portal-BE-common/src/main/java/org/onap/portalapp/portal/domain/EPUserAppRoles.java
@@ -0,0 +1,81 @@
+/*-
+ * ============LICENSE_START==========================================
+ * ONAP Portal
+ * ===================================================================
+ * Copyright (C) 2017 AT&T Intellectual Property. All rights reserved.
+ * ===================================================================
+ *
+ * Unless otherwise specified, all software contained herein is licensed
+ * under the Apache License, Version 2.0 (the "License");
+ * you may not use this software 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.
+ *
+ * Unless otherwise specified, all documentation contained herein is licensed
+ * under the Creative Commons License, Attribution 4.0 Intl. (the "License");
+ * you may not use this documentation except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * https://creativecommons.org/licenses/by/4.0/
+ *
+ * Unless required by applicable law or agreed to in writing, documentation
+ * 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.
+ *
+ * ============LICENSE_END============================================
+ *
+ * ECOMP is a trademark and service mark of AT&T Intellectual Property.
+ */
+package org.onap.portalapp.portal.domain;
+
+
+import javax.persistence.Column;
+import javax.persistence.Entity;
+import javax.persistence.Id;
+
+import org.onap.portalsdk.core.domain.support.DomainVo;
+
+import com.fasterxml.jackson.annotation.JsonInclude;
+
+@Entity
+@JsonInclude(JsonInclude.Include.NON_NULL)
+public class EPUserAppRoles extends DomainVo {
+
+ private static final long serialVersionUID = -1484592641766545668L;
+
+ @Id
+ @Column(name ="role_id")
+ public Long roleId;
+
+ @Id
+ @Column(name ="app_id")
+ public Long appId;
+
+ public Long getRoleId() {
+ return roleId;
+ }
+ public void setRoleId(Long roleId) {
+ this.roleId = roleId;
+ }
+ public Long getAppId() {
+ return appId;
+ }
+ public void setAppId(Long appId) {
+ this.appId = appId;
+ }
+
+ @Override
+ public String toString() {
+ return "EpUserAppRoles [roleId=" + roleId + ", appId=" + appId + "]";
+ }
+}
+
diff --git a/ecomp-portal-BE-common/src/main/java/org/onap/portalapp/portal/domain/EPUserAppRolesRequest.java b/ecomp-portal-BE-common/src/main/java/org/onap/portalapp/portal/domain/EPUserAppRolesRequest.java
new file mode 100644
index 00000000..923d2444
--- /dev/null
+++ b/ecomp-portal-BE-common/src/main/java/org/onap/portalapp/portal/domain/EPUserAppRolesRequest.java
@@ -0,0 +1,158 @@
+/*-
+ * ============LICENSE_START==========================================
+ * ONAP Portal
+ * ===================================================================
+ * Copyright (C) 2017 AT&T Intellectual Property. All rights reserved.
+ * ===================================================================
+ *
+ * Unless otherwise specified, all software contained herein is licensed
+ * under the Apache License, Version 2.0 (the "License");
+ * you may not use this software 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.
+ *
+ * Unless otherwise specified, all documentation contained herein is licensed
+ * under the Creative Commons License, Attribution 4.0 Intl. (the "License");
+ * you may not use this documentation except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * https://creativecommons.org/licenses/by/4.0/
+ *
+ * Unless required by applicable law or agreed to in writing, documentation
+ * 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.
+ *
+ * ============LICENSE_END============================================
+ *
+ * ECOMP is a trademark and service mark of AT&T Intellectual Property.
+ */
+package org.onap.portalapp.portal.domain;
+
+import java.util.Date;
+import java.util.Set;
+
+import org.onap.portalsdk.core.domain.support.DomainVo;
+
+public class EPUserAppRolesRequest extends DomainVo {
+
+ private static final long serialVersionUID = -7225288307806389019L;
+ private Long userId;
+ private Long appId;
+ private Date createdDate;
+ private Date updatedDate;
+ private String requestStatus;
+
+ private Set<EPUserAppRolesRequestDetail> epRequestIdDetail;
+
+ public Long getUserId() {
+ return userId;
+ }
+
+ public void setUserId(Long userId) {
+ this.userId = userId;
+ }
+
+ public Long getAppId() {
+ return appId;
+ }
+
+ public void setAppId(Long appId) {
+ this.appId = appId;
+ }
+
+ public Date getCreatedDate() {
+ return createdDate;
+ }
+
+ public void setCreatedDate(Date createdDate) {
+ this.createdDate = createdDate;
+ }
+
+ public Date getUpdatedDate() {
+ return updatedDate;
+ }
+
+ public void setUpdatedDate(Date updatedDate) {
+ this.updatedDate = updatedDate;
+ }
+
+ public String getRequestStatus() {
+ return requestStatus;
+ }
+
+ public void setRequestStatus(String requestStatus) {
+ this.requestStatus = requestStatus;
+ }
+
+ public Set<EPUserAppRolesRequestDetail> getEpRequestIdDetail() {
+ return epRequestIdDetail;
+ }
+
+ public void setEpRequestIdDetail(Set<EPUserAppRolesRequestDetail> epMyLoginsDetail) {
+ this.epRequestIdDetail = epMyLoginsDetail;
+ }
+
+ @Override
+ public int hashCode() {
+ final int prime = 31;
+ int result = 1;
+ result = prime * result + ((appId == null) ? 0 : appId.hashCode());
+ result = prime * result + ((createdDate == null) ? 0 : createdDate.hashCode());
+ result = prime * result + ((epRequestIdDetail == null) ? 0 : epRequestIdDetail.hashCode());
+ result = prime * result + ((requestStatus == null) ? 0 : requestStatus.hashCode());
+ result = prime * result + ((updatedDate == null) ? 0 : updatedDate.hashCode());
+ result = prime * result + ((userId == null) ? 0 : userId.hashCode());
+ return result;
+ }
+
+ @Override
+ public boolean equals(Object obj) {
+ if (this == obj)
+ return true;
+ if (obj == null)
+ return false;
+ if (getClass() != obj.getClass())
+ return false;
+ EPUserAppRolesRequest other = (EPUserAppRolesRequest) obj;
+ if (appId == null) {
+ if (other.appId != null)
+ return false;
+ } else if (!appId.equals(other.appId))
+ return false;
+ if (createdDate == null) {
+ if (other.createdDate != null)
+ return false;
+ } else if (!createdDate.equals(other.createdDate))
+ return false;
+ if (epRequestIdDetail == null) {
+ if (other.epRequestIdDetail != null)
+ return false;
+ } else if (!epRequestIdDetail.equals(other.epRequestIdDetail))
+ return false;
+ if (requestStatus == null) {
+ if (other.requestStatus != null)
+ return false;
+ } else if (!requestStatus.equals(other.requestStatus))
+ return false;
+ if (updatedDate == null) {
+ if (other.updatedDate != null)
+ return false;
+ } else if (!updatedDate.equals(other.updatedDate))
+ return false;
+ if (userId == null) {
+ if (other.userId != null)
+ return false;
+ } else if (!userId.equals(other.userId))
+ return false;
+ return true;
+ }
+}
diff --git a/ecomp-portal-BE-common/src/main/java/org/onap/portalapp/portal/domain/EPUserAppRolesRequestDetail.java b/ecomp-portal-BE-common/src/main/java/org/onap/portalapp/portal/domain/EPUserAppRolesRequestDetail.java
new file mode 100644
index 00000000..42373853
--- /dev/null
+++ b/ecomp-portal-BE-common/src/main/java/org/onap/portalapp/portal/domain/EPUserAppRolesRequestDetail.java
@@ -0,0 +1,111 @@
+/*-
+ * ============LICENSE_START==========================================
+ * ONAP Portal
+ * ===================================================================
+ * Copyright (C) 2017 AT&T Intellectual Property. All rights reserved.
+ * ===================================================================
+ *
+ * Unless otherwise specified, all software contained herein is licensed
+ * under the Apache License, Version 2.0 (the "License");
+ * you may not use this software 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.
+ *
+ * Unless otherwise specified, all documentation contained herein is licensed
+ * under the Creative Commons License, Attribution 4.0 Intl. (the "License");
+ * you may not use this documentation except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * https://creativecommons.org/licenses/by/4.0/
+ *
+ * Unless required by applicable law or agreed to in writing, documentation
+ * 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.
+ *
+ * ============LICENSE_END============================================
+ *
+ * ECOMP is a trademark and service mark of AT&T Intellectual Property.
+ */
+package org.onap.portalapp.portal.domain;
+
+import org.onap.portalsdk.core.domain.support.DomainVo;
+
+public class EPUserAppRolesRequestDetail extends DomainVo {
+
+ private static final long serialVersionUID = -4908856671135348157L;
+
+ private Long reqRoleId;
+ private String reqType;
+ private EPUserAppRolesRequest epRequestIdData;
+
+ public EPUserAppRolesRequest getEpRequestIdData() {
+ return epRequestIdData;
+ }
+
+ public void setEpRequestIdData(EPUserAppRolesRequest epRequestIdData) {
+ this.epRequestIdData = epRequestIdData;
+ }
+
+ public Long getReqRoleId() {
+ return reqRoleId;
+ }
+
+ public void setReqRoleId(Long reqRoleId) {
+ this.reqRoleId = reqRoleId;
+ }
+
+ public String getReqType() {
+ return reqType;
+ }
+
+ public void setReqType(String reqType) {
+ this.reqType = reqType;
+ }
+
+ @Override
+ public int hashCode() {
+ final int prime = 31;
+ int result = 1;
+ result = prime * result + ((epRequestIdData == null) ? 0 : epRequestIdData.hashCode());
+ result = prime * result + ((reqRoleId == null) ? 0 : reqRoleId.hashCode());
+ result = prime * result + ((reqType == null) ? 0 : reqType.hashCode());
+ return result;
+ }
+
+ @Override
+ public boolean equals(Object obj) {
+ if (this == obj)
+ return true;
+ if (obj == null)
+ return false;
+ if (getClass() != obj.getClass())
+ return false;
+ EPUserAppRolesRequestDetail other = (EPUserAppRolesRequestDetail) obj;
+ if (epRequestIdData == null) {
+ if (other.epRequestIdData != null)
+ return false;
+ } else if (!epRequestIdData.equals(other.epRequestIdData))
+ return false;
+ if (reqRoleId == null) {
+ if (other.reqRoleId != null)
+ return false;
+ } else if (!reqRoleId.equals(other.reqRoleId))
+ return false;
+ if (reqType == null) {
+ if (other.reqType != null)
+ return false;
+ } else if (!reqType.equals(other.reqType))
+ return false;
+ return true;
+ }
+
+}
diff --git a/ecomp-portal-BE-common/src/main/java/org/onap/portalapp/portal/domain/EPUserAppsManualSortPreference.java b/ecomp-portal-BE-common/src/main/java/org/onap/portalapp/portal/domain/EPUserAppsManualSortPreference.java
new file mode 100644
index 00000000..4d943f62
--- /dev/null
+++ b/ecomp-portal-BE-common/src/main/java/org/onap/portalapp/portal/domain/EPUserAppsManualSortPreference.java
@@ -0,0 +1,68 @@
+/*-
+ * ============LICENSE_START==========================================
+ * ONAP Portal
+ * ===================================================================
+ * Copyright (C) 2017 AT&T Intellectual Property. All rights reserved.
+ * ===================================================================
+ *
+ * Unless otherwise specified, all software contained herein is licensed
+ * under the Apache License, Version 2.0 (the "License");
+ * you may not use this software 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.
+ *
+ * Unless otherwise specified, all documentation contained herein is licensed
+ * under the Creative Commons License, Attribution 4.0 Intl. (the "License");
+ * you may not use this documentation except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * https://creativecommons.org/licenses/by/4.0/
+ *
+ * Unless required by applicable law or agreed to in writing, documentation
+ * 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.
+ *
+ * ============LICENSE_END============================================
+ *
+ * ECOMP is a trademark and service mark of AT&T Intellectual Property.
+ */
+package org.onap.portalapp.portal.domain;
+
+import org.onap.portalsdk.core.domain.support.DomainVo;
+
+public class EPUserAppsManualSortPreference extends DomainVo {
+
+ private static final long serialVersionUID = -6270136291139278216L;
+ private int userId;
+ private Long appId;
+ private int appManualSortOrder;
+
+ public int getUserId() {
+ return userId;
+ }
+ public void setUserId(int userId) {
+ this.userId = userId;
+ }
+ public Long getAppId() {
+ return appId;
+ }
+ public void setAppId(Long appId) {
+ this.appId = appId;
+ }
+ public int getAppManualSortOrder() {
+ return appManualSortOrder;
+ }
+ public void setAppManualSortOrder(int appManualSortOrder) {
+ this.appManualSortOrder = appManualSortOrder;
+ }
+
+}
diff --git a/ecomp-portal-BE-common/src/main/java/org/onap/portalapp/portal/domain/EPUserAppsSortPreference.java b/ecomp-portal-BE-common/src/main/java/org/onap/portalapp/portal/domain/EPUserAppsSortPreference.java
new file mode 100644
index 00000000..1fc7b8e9
--- /dev/null
+++ b/ecomp-portal-BE-common/src/main/java/org/onap/portalapp/portal/domain/EPUserAppsSortPreference.java
@@ -0,0 +1,62 @@
+/*-
+ * ============LICENSE_START==========================================
+ * ONAP Portal
+ * ===================================================================
+ * Copyright (C) 2017 AT&T Intellectual Property. All rights reserved.
+ * ===================================================================
+ *
+ * Unless otherwise specified, all software contained herein is licensed
+ * under the Apache License, Version 2.0 (the "License");
+ * you may not use this software 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.
+ *
+ * Unless otherwise specified, all documentation contained herein is licensed
+ * under the Creative Commons License, Attribution 4.0 Intl. (the "License");
+ * you may not use this documentation except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * https://creativecommons.org/licenses/by/4.0/
+ *
+ * Unless required by applicable law or agreed to in writing, documentation
+ * 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.
+ *
+ * ============LICENSE_END============================================
+ *
+ * ECOMP is a trademark and service mark of AT&T Intellectual Property.
+ */
+package org.onap.portalapp.portal.domain;
+
+import org.onap.portalsdk.core.domain.support.DomainVo;
+
+public class EPUserAppsSortPreference extends DomainVo{
+
+ private static final long serialVersionUID = -5267000174894006433L;
+
+ private int userId;
+ private String sortPref;
+
+ public int getUserId() {
+ return userId;
+ }
+ public void setUserId(final int userId) {
+ this.userId = userId;
+ }
+ public String getSortPref() {
+ return sortPref;
+ }
+ public void setSortPref(final String sortPref) {
+ this.sortPref = sortPref;
+ }
+
+}
diff --git a/ecomp-portal-BE-common/src/main/java/org/onap/portalapp/portal/domain/EPUserNotification.java b/ecomp-portal-BE-common/src/main/java/org/onap/portalapp/portal/domain/EPUserNotification.java
new file mode 100644
index 00000000..1cb85a55
--- /dev/null
+++ b/ecomp-portal-BE-common/src/main/java/org/onap/portalapp/portal/domain/EPUserNotification.java
@@ -0,0 +1,75 @@
+/*-
+ * ============LICENSE_START==========================================
+ * ONAP Portal
+ * ===================================================================
+ * Copyright (C) 2017 AT&T Intellectual Property. All rights reserved.
+ * ===================================================================
+ *
+ * Unless otherwise specified, all software contained herein is licensed
+ * under the Apache License, Version 2.0 (the "License");
+ * you may not use this software 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.
+ *
+ * Unless otherwise specified, all documentation contained herein is licensed
+ * under the Creative Commons License, Attribution 4.0 Intl. (the "License");
+ * you may not use this documentation except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * https://creativecommons.org/licenses/by/4.0/
+ *
+ * Unless required by applicable law or agreed to in writing, documentation
+ * 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.
+ *
+ * ============LICENSE_END============================================
+ *
+ * ECOMP is a trademark and service mark of AT&T Intellectual Property.
+ */
+package org.onap.portalapp.portal.domain;
+
+import java.util.Date;
+
+import org.onap.portalsdk.core.domain.support.DomainVo;
+
+
+public class EPUserNotification extends DomainVo {
+ private Long userId;
+ private Long notificationId;
+ private String viewed;
+ private Date updateTime;
+
+ public Long getUserId() {
+ return userId;
+ }
+ public void setUserId(Long userId) {
+ this.userId = userId;
+ }
+ public Long getNotificationId() {
+ return notificationId;
+ }
+ public void setNotificationId(Long notificationId) {
+ this.notificationId = notificationId;
+ }
+ public String getViewed() {
+ return viewed;
+ }
+ public void setViewed(String viewed) {
+ this.viewed = viewed;
+ }
+ public Date getUpdateTime() {
+ return updateTime;
+ }
+ public void setUpdateTime(Date updateTime) {
+ this.updateTime = updateTime;
+ }
+}
diff --git a/ecomp-portal-BE-common/src/main/java/org/onap/portalapp/portal/domain/EPWidgetsManualSortPreference.java b/ecomp-portal-BE-common/src/main/java/org/onap/portalapp/portal/domain/EPWidgetsManualSortPreference.java
new file mode 100644
index 00000000..552e2e0f
--- /dev/null
+++ b/ecomp-portal-BE-common/src/main/java/org/onap/portalapp/portal/domain/EPWidgetsManualSortPreference.java
@@ -0,0 +1,88 @@
+/*-
+ * ============LICENSE_START==========================================
+ * ONAP Portal
+ * ===================================================================
+ * Copyright (C) 2017 AT&T Intellectual Property. All rights reserved.
+ * ===================================================================
+ *
+ * Unless otherwise specified, all software contained herein is licensed
+ * under the Apache License, Version 2.0 (the "License");
+ * you may not use this software 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.
+ *
+ * Unless otherwise specified, all documentation contained herein is licensed
+ * under the Creative Commons License, Attribution 4.0 Intl. (the "License");
+ * you may not use this documentation except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * https://creativecommons.org/licenses/by/4.0/
+ *
+ * Unless required by applicable law or agreed to in writing, documentation
+ * 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.
+ *
+ * ============LICENSE_END============================================
+ *
+ * ECOMP is a trademark and service mark of AT&T Intellectual Property.
+ */
+package org.onap.portalapp.portal.domain;
+
+import org.onap.portalsdk.core.domain.support.DomainVo;
+
+public class EPWidgetsManualSortPreference extends DomainVo{
+
+ private static final long serialVersionUID = 4607102334801223570L;
+ private int userId;
+ private Long widgetId;
+ private int widgetRow;
+ private int widgetCol;
+ private int widgetWidth;
+ private int widgetHeight;
+
+ public int getUserId() {
+ return userId;
+ }
+ public void setUserId(int userId) {
+ this.userId = userId;
+ }
+ public Long getWidgetId() {
+ return widgetId;
+ }
+ public void setWidgetId(Long widgetId) {
+ this.widgetId = widgetId;
+ }
+ public int getWidgetRow() {
+ return widgetRow;
+ }
+ public void setWidgetRow(int widgetRow) {
+ this.widgetRow = widgetRow;
+ }
+ public int getWidgetCol() {
+ return widgetCol;
+ }
+ public void setWidgetCol(int widgetCol) {
+ this.widgetCol = widgetCol;
+ }
+ public int getWidgetWidth() {
+ return widgetWidth;
+ }
+ public void setWidgetWidth(int widgetWidth) {
+ this.widgetWidth = widgetWidth;
+ }
+ public int getWidgetHeight() {
+ return widgetHeight;
+ }
+ public void setWidgetHeight(int widgetHeight) {
+ this.widgetHeight = widgetHeight;
+ }
+}
diff --git a/ecomp-portal-BE-common/src/main/java/org/onap/portalapp/portal/domain/EcompApp.java b/ecomp-portal-BE-common/src/main/java/org/onap/portalapp/portal/domain/EcompApp.java
new file mode 100644
index 00000000..6fafbba4
--- /dev/null
+++ b/ecomp-portal-BE-common/src/main/java/org/onap/portalapp/portal/domain/EcompApp.java
@@ -0,0 +1,186 @@
+/*-
+ * ============LICENSE_START==========================================
+ * ONAP Portal
+ * ===================================================================
+ * Copyright (C) 2017 AT&T Intellectual Property. All rights reserved.
+ * ===================================================================
+ *
+ * Unless otherwise specified, all software contained herein is licensed
+ * under the Apache License, Version 2.0 (the "License");
+ * you may not use this software 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.
+ *
+ * Unless otherwise specified, all documentation contained herein is licensed
+ * under the Creative Commons License, Attribution 4.0 Intl. (the "License");
+ * you may not use this documentation except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * https://creativecommons.org/licenses/by/4.0/
+ *
+ * Unless required by applicable law or agreed to in writing, documentation
+ * 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.
+ *
+ * ============LICENSE_END============================================
+ *
+ * ECOMP is a trademark and service mark of AT&T Intellectual Property.
+ */
+package org.onap.portalapp.portal.domain;
+
+/**
+ * Model for a subset of the columns in the fn_app table.
+ */
+public class EcompApp {
+
+ protected Long id;
+
+ public Long getId() {
+ return id;
+ }
+
+ public void setId(Long id) {
+ this.id = id;
+ }
+
+ private String name;
+
+ public String getName() {
+ return name;
+ }
+
+ public void setName(String name) {
+ this.name = name;
+ }
+
+ private String imageUrl;
+
+ public String getImageUrl() {
+ return imageUrl;
+ }
+
+ public void setImageUrl(String imageUrl) {
+ this.imageUrl = imageUrl;
+ }
+
+ private String description;
+
+ public String getDescription() {
+ return description;
+ }
+
+ public void setDescription(String description) {
+ this.description = description;
+ }
+
+ private String notes;
+
+ public String getNotes() {
+ return notes;
+ }
+
+ public void setNotes(String notes) {
+ this.notes = notes;
+ }
+
+ private String url;
+
+ public String getUrl() {
+ return url;
+ }
+
+ public void setUrl(String url) {
+ this.url = url;
+ }
+
+ private String alternateUrl;
+
+ public String getAlternateUrl() {
+ return alternateUrl;
+ }
+
+ public void setAlternateUrl(String alternateUrl) {
+ this.alternateUrl = alternateUrl;
+ }
+
+ private String uebTopicName;
+
+ public String getUebTopicName() {
+ return uebTopicName;
+ }
+
+ public void setUebTopicName(String topicName) {
+ this.uebTopicName = topicName;
+ }
+
+ private String uebKey;
+
+ public String getUebKey() {
+ return uebKey;
+ }
+
+ public void setUebKey(String uebKey) {
+ this.uebKey = uebKey;
+ }
+
+ private String uebSecret;
+
+ public String getUebSecret() {
+ return uebSecret;
+ }
+
+ public void setUebSecret(String secret) {
+ this.uebSecret = secret;
+ }
+
+ private Boolean enabled;
+
+ public Boolean isEnabled() {
+ return enabled;
+ }
+
+ public void setEnabled(Boolean enable) {
+ this.enabled = enable;
+ }
+
+ private Boolean restrictedApp;
+
+ public Boolean isRestrictedApp() {
+ return restrictedApp;
+ }
+
+ public void setRestrictedApp(Boolean restrictedApp) {
+ this.restrictedApp = restrictedApp;
+ }
+
+ private Boolean centralAuth;
+
+ public Boolean getCentralAuth() {
+ return centralAuth;
+ }
+
+ public void setCentralAuth(Boolean centralAuth) {
+ this.centralAuth = centralAuth;
+ }
+
+ private String nameSpace;
+
+ public String getNameSpace() {
+ return nameSpace;
+ }
+
+ public void setNameSpace(String nameSpace) {
+ this.nameSpace = nameSpace;
+ }
+
+
+}
diff --git a/ecomp-portal-BE-common/src/main/java/org/onap/portalapp/portal/domain/EcompAppRole.java b/ecomp-portal-BE-common/src/main/java/org/onap/portalapp/portal/domain/EcompAppRole.java
new file mode 100644
index 00000000..e6176ebb
--- /dev/null
+++ b/ecomp-portal-BE-common/src/main/java/org/onap/portalapp/portal/domain/EcompAppRole.java
@@ -0,0 +1,98 @@
+/*-
+ * ============LICENSE_START==========================================
+ * ONAP Portal
+ * ===================================================================
+ * Copyright (C) 2017 AT&T Intellectual Property. All rights reserved.
+ * ===================================================================
+ *
+ * Unless otherwise specified, all software contained herein is licensed
+ * under the Apache License, Version 2.0 (the "License");
+ * you may not use this software 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.
+ *
+ * Unless otherwise specified, all documentation contained herein is licensed
+ * under the Creative Commons License, Attribution 4.0 Intl. (the "License");
+ * you may not use this documentation except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * https://creativecommons.org/licenses/by/4.0/
+ *
+ * Unless required by applicable law or agreed to in writing, documentation
+ * 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.
+ *
+ * ============LICENSE_END============================================
+ *
+ * ECOMP is a trademark and service mark of AT&T Intellectual Property.
+ */
+package org.onap.portalapp.portal.domain;
+
+import javax.persistence.Column;
+import javax.persistence.Entity;
+import javax.persistence.Id;
+import javax.persistence.IdClass;
+
+@Entity
+@IdClass(EcompAppRoleId.class)
+public class EcompAppRole {
+
+ @Id
+ @Column(name="app_id")
+ private Long appId;
+
+ @Id
+ @Column(name="app_name")
+ private String appName;
+
+ @Id
+ @Column(name="role_id")
+ private Integer roleId;
+
+ @Id
+ @Column(name="role_name")
+ private String roleName;
+
+ public Long getAppId() {
+ return appId;
+ }
+
+ public void setAppId(Long appId) {
+ this.appId = appId;
+ }
+
+ public String getAppName() {
+ return appName;
+ }
+
+ public void setAppName(String appName) {
+ this.appName = appName;
+ }
+
+ public Integer getRoleId() {
+ return roleId;
+ }
+
+ public void setRoleId(Integer roleId) {
+ this.roleId = roleId;
+ }
+
+ public String getRoleName() {
+ return roleName;
+ }
+
+ public void setRoleName(String roleName) {
+ this.roleName = roleName;
+ }
+
+
+}
diff --git a/ecomp-portal-BE-common/src/main/java/org/onap/portalapp/portal/domain/EcompAppRoleId.java b/ecomp-portal-BE-common/src/main/java/org/onap/portalapp/portal/domain/EcompAppRoleId.java
new file mode 100644
index 00000000..063714ee
--- /dev/null
+++ b/ecomp-portal-BE-common/src/main/java/org/onap/portalapp/portal/domain/EcompAppRoleId.java
@@ -0,0 +1,101 @@
+/*-
+ * ============LICENSE_START==========================================
+ * ONAP Portal
+ * ===================================================================
+ * Copyright (C) 2017 AT&T Intellectual Property. All rights reserved.
+ * ===================================================================
+ *
+ * Unless otherwise specified, all software contained herein is licensed
+ * under the Apache License, Version 2.0 (the "License");
+ * you may not use this software 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.
+ *
+ * Unless otherwise specified, all documentation contained herein is licensed
+ * under the Creative Commons License, Attribution 4.0 Intl. (the "License");
+ * you may not use this documentation except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * https://creativecommons.org/licenses/by/4.0/
+ *
+ * Unless required by applicable law or agreed to in writing, documentation
+ * 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.
+ *
+ * ============LICENSE_END============================================
+ *
+ * ECOMP is a trademark and service mark of AT&T Intellectual Property.
+ */
+package org.onap.portalapp.portal.domain;
+
+import java.io.Serializable;
+
+import javax.persistence.Column;
+import javax.persistence.Id;
+
+public class EcompAppRoleId implements Serializable{
+
+ /**
+ *
+ */
+ private static final long serialVersionUID = 1L;
+
+ @Id
+ @Column(name="app_id")
+ private Long appId;
+
+ @Id
+ @Column(name="app_name")
+ private String appName;
+
+ @Id
+ @Column(name="role_id")
+ private Integer roleId;
+
+ @Id
+ @Column(name="role_name")
+ private String roleName;
+
+ public Long getAppId() {
+ return appId;
+ }
+
+ public void setAppId(Long appId) {
+ this.appId = appId;
+ }
+
+ public String getAppName() {
+ return appName;
+ }
+
+ public void setAppName(String appName) {
+ this.appName = appName;
+ }
+
+ public Integer getRoleId() {
+ return roleId;
+ }
+
+ public void setRoleId(Integer roleId) {
+ this.roleId = roleId;
+ }
+
+ public String getRoleName() {
+ return roleName;
+ }
+
+ public void setRoleName(String roleName) {
+ this.roleName = roleName;
+ }
+
+
+}
diff --git a/ecomp-portal-BE-common/src/main/java/org/onap/portalapp/portal/domain/EcompAuditLog.java b/ecomp-portal-BE-common/src/main/java/org/onap/portalapp/portal/domain/EcompAuditLog.java
new file mode 100644
index 00000000..72307eb6
--- /dev/null
+++ b/ecomp-portal-BE-common/src/main/java/org/onap/portalapp/portal/domain/EcompAuditLog.java
@@ -0,0 +1,84 @@
+/*-
+ * ============LICENSE_START==========================================
+ * ONAP Portal
+ * ===================================================================
+ * Copyright (C) 2017 AT&T Intellectual Property. All rights reserved.
+ * ===================================================================
+ *
+ * Unless otherwise specified, all software contained herein is licensed
+ * under the Apache License, Version 2.0 (the "License");
+ * you may not use this software 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.
+ *
+ * Unless otherwise specified, all documentation contained herein is licensed
+ * under the Creative Commons License, Attribution 4.0 Intl. (the "License");
+ * you may not use this documentation except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * https://creativecommons.org/licenses/by/4.0/
+ *
+ * Unless required by applicable law or agreed to in writing, documentation
+ * 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.
+ *
+ * ============LICENSE_END============================================
+ *
+ * ECOMP is a trademark and service mark of AT&T Intellectual Property.
+ */
+package org.onap.portalapp.portal.domain;
+
+import java.util.Date;
+
+import org.onap.portalsdk.core.domain.AuditLog;
+
+public class EcompAuditLog extends AuditLog {
+
+ private static final long serialVersionUID = 7970458389782626231L;
+
+ // values of activity_cd column in table fu_lu_activity
+ // as loaded by DML sql script
+ public static final String CD_ACTIVITY_ADD_CHILD_ROLE = "add_child_role";
+ public static final String CD_ACTIVITY_ADD_ROLE = "add_role";
+ public static final String CD_ACTIVITY_ADD_ROLE_FUNCTION = "add_role_function";
+ public static final String CD_ACTIVITY_ADD_USER_ROLE = "add_user_role";
+ public static final String CD_ACTIVITY_APP_ACCESS = "app_access";
+ public static final String CD_ACTIVITY_FUNCTIONAL_ACCESS = "functional_access";
+ public static final String CD_ACTIVITY_GUEST_LOGIN = "guest_login";
+ public static final String CD_ACTIVITY_LOGIN = "login";
+ public static final String CD_ACTIVITY_LOGOUT = "logout";
+ public static final String CD_ACTIVITY_MOBILE_LOGIN = "mobile_login";
+ public static final String CD_ACTIVITY_MOBILE_LOGOUT = "mobile_logout";
+ public static final String CD_ACTIVITY_REMOVE_CHILD_ROLE = "remove_child_role";
+ public static final String CD_ACTIVITY_REMOVE_ROLE = "remove_role";
+ public static final String CD_ACTIVITY_REMOVE_ROLE_FUNCTION = "remove_role_function";
+ public static final String CD_ACTIVITY_REMOVE_USER_ROLE = "remove_user_role";
+ public static final String CD_ACTIVITY_TAB_ACCESS = "tab_access";
+ public static final String CD_ACTIVITY_SEARCH = "search";
+ public static final String CD_ACTIVITY_ADD_PORTAL_ADMIN = "apa ";
+ public static final String CD_ACTIVITY_DELETE_PORTAL_ADMIN = "dpa";
+ public static final String CD_ACTIVITY_UPDATE_USER = "uu ";
+ public static final String CD_ACTIVITY_UPDATE_ACCOUNT_ADMIN = "uaa ";
+ public static final String CD_ACTIVITY_STORE_ANALYTICS = "store_analytics";
+ public static final String CD_ACTIVITY_EXTERNAL_AUTH_ADD_ROLE = "eaar";
+ public static final String CD_ACTIVITY_EXTERNAL_AUTH_ADD_FUNCTION = "eaaf";
+ public static final String CD_ACTIVITY_EXTERNAL_AUTH_UPDATE_FUNCTION = "eauf";
+ public static final String CD_ACTIVITY_EXTERNAL_AUTH_UPDATE_ROLE_AND_FUNCTION = "eaurf";
+ public static final String CD_ACTIVITY_EXTERNAL_AUTH_DELETE_ROLE = "eadr";
+ public static final String CD_ACTIVITY_EXTERNAL_AUTH_DELETE_FUNCTION = "eadf";
+ /**
+ * Creates a new object with the created field set to the current date-time.
+ */
+ public EcompAuditLog() {
+ setCreated(new Date());
+ }
+}
diff --git a/ecomp-portal-BE-common/src/main/java/org/onap/portalapp/portal/domain/ExternalRoleDetails.java b/ecomp-portal-BE-common/src/main/java/org/onap/portalapp/portal/domain/ExternalRoleDetails.java
new file mode 100644
index 00000000..6c8a548a
--- /dev/null
+++ b/ecomp-portal-BE-common/src/main/java/org/onap/portalapp/portal/domain/ExternalRoleDetails.java
@@ -0,0 +1,115 @@
+/*-
+ * ============LICENSE_START==========================================
+ * ONAP Portal
+ * ===================================================================
+ * Copyright (C) 2017 AT&T Intellectual Property. All rights reserved.
+ * ===================================================================
+ *
+ * Unless otherwise specified, all software contained herein is licensed
+ * under the Apache License, Version 2.0 (the "License");
+ * you may not use this software 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.
+ *
+ * Unless otherwise specified, all documentation contained herein is licensed
+ * under the Creative Commons License, Attribution 4.0 Intl. (the "License");
+ * you may not use this documentation except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * https://creativecommons.org/licenses/by/4.0/
+ *
+ * Unless required by applicable law or agreed to in writing, documentation
+ * 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.
+ *
+ * ============LICENSE_END============================================
+ *
+ * ECOMP is a trademark and service mark of AT&T Intellectual Property.
+ */
+package org.onap.portalapp.portal.domain;
+
+import java.util.List;
+
+public class ExternalRoleDetails implements Comparable {
+
+
+ private String name;
+ private boolean active;
+ private Integer priority;
+
+ private Long appId; // used by ECOMP only
+ private Long appRoleId; // used by ECOMP only
+
+ private List<EPAppRoleFunction> perms;
+
+ public String getName() {
+ return name;
+ }
+
+ public void setName(String name) {
+ this.name = name;
+ }
+
+ public boolean isActive() {
+ return active;
+ }
+
+ public void setActive(boolean active) {
+ this.active = active;
+ }
+
+ public Integer getPriority() {
+ return priority;
+ }
+
+ public void setPriority(Integer priority) {
+ this.priority = priority;
+ }
+
+ public Long getAppId() {
+ return appId;
+ }
+
+ public void setAppId(Long appId) {
+ this.appId = appId;
+ }
+
+ public Long getAppRoleId() {
+ return appRoleId;
+ }
+
+ public void setAppRoleId(Long appRoleId) {
+ this.appRoleId = appRoleId;
+ }
+
+
+
+ public List<EPAppRoleFunction> getPerms() {
+ return perms;
+ }
+
+ public void setPerms(List<EPAppRoleFunction> perms) {
+ this.perms = perms;
+ }
+
+ @Override
+ public int compareTo(Object obj) {
+ EPRole other = (EPRole)obj;
+
+ String c1 = getName();
+ String c2 = other.getName();
+
+ return (c1 == null || c2 == null) ? 1 : c1.compareTo(c2);
+ }
+
+
+}
diff --git a/ecomp-portal-BE-common/src/main/java/org/onap/portalapp/portal/domain/ExternalSystemAccess.java b/ecomp-portal-BE-common/src/main/java/org/onap/portalapp/portal/domain/ExternalSystemAccess.java
new file mode 100644
index 00000000..29b4fe35
--- /dev/null
+++ b/ecomp-portal-BE-common/src/main/java/org/onap/portalapp/portal/domain/ExternalSystemAccess.java
@@ -0,0 +1,67 @@
+/*-
+ * ============LICENSE_START==========================================
+ * ONAP Portal
+ * ===================================================================
+ * Copyright (C) 2017 AT&T Intellectual Property. All rights reserved.
+ * ===================================================================
+ *
+ * Unless otherwise specified, all software contained herein is licensed
+ * under the Apache License, Version 2.0 (the "License");
+ * you may not use this software 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.
+ *
+ * Unless otherwise specified, all documentation contained herein is licensed
+ * under the Creative Commons License, Attribution 4.0 Intl. (the "License");
+ * you may not use this documentation except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * https://creativecommons.org/licenses/by/4.0/
+ *
+ * Unless required by applicable law or agreed to in writing, documentation
+ * 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.
+ *
+ * ============LICENSE_END============================================
+ *
+ * ECOMP is a trademark and service mark of AT&T Intellectual Property.
+ */
+package org.onap.portalapp.portal.domain;
+
+public class ExternalSystemAccess {
+
+ private String key;
+ private Boolean accessValue;
+
+ public ExternalSystemAccess(String key, Boolean accessValue){
+ this.key = key;
+ this.accessValue = accessValue;
+ }
+
+ public String getKey() {
+ return key;
+ }
+ public void setKey(String key) {
+ this.key = key;
+ }
+
+ public Boolean getAccessValue() {
+ return accessValue;
+ }
+
+ public void setAccessValue(Boolean accessValue) {
+ this.accessValue = accessValue;
+ }
+
+
+
+}
diff --git a/ecomp-portal-BE-common/src/main/java/org/onap/portalapp/portal/domain/FunctionalMenuItemWithAppID.java b/ecomp-portal-BE-common/src/main/java/org/onap/portalapp/portal/domain/FunctionalMenuItemWithAppID.java
new file mode 100644
index 00000000..a9455d61
--- /dev/null
+++ b/ecomp-portal-BE-common/src/main/java/org/onap/portalapp/portal/domain/FunctionalMenuItemWithAppID.java
@@ -0,0 +1,114 @@
+/*-
+ * ============LICENSE_START==========================================
+ * ONAP Portal
+ * ===================================================================
+ * Copyright (C) 2017 AT&T Intellectual Property. All rights reserved.
+ * ===================================================================
+ *
+ * Unless otherwise specified, all software contained herein is licensed
+ * under the Apache License, Version 2.0 (the "License");
+ * you may not use this software 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.
+ *
+ * Unless otherwise specified, all documentation contained herein is licensed
+ * under the Creative Commons License, Attribution 4.0 Intl. (the "License");
+ * you may not use this documentation except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * https://creativecommons.org/licenses/by/4.0/
+ *
+ * Unless required by applicable law or agreed to in writing, documentation
+ * 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.
+ *
+ * ============LICENSE_END============================================
+ *
+ * ECOMP is a trademark and service mark of AT&T Intellectual Property.
+ */
+package org.onap.portalapp.portal.domain;
+
+import java.util.List;
+
+import javax.persistence.Column;
+import javax.persistence.Entity;
+import javax.persistence.GeneratedValue;
+import javax.persistence.GenerationType;
+import javax.persistence.Id;
+import javax.persistence.Transient;
+/***
+ *
+ * This class is almost identical to org.openecomp.portalapp.portal.transport.FunctionalMenuItem
+ * The only difference is the appId field. In FunctionMenuItem, we used @Transient as an attribute, and we are using @Column in this class.
+ * In some sql queries, we need to have appId, but it's not a field in fn_menu_functional table.
+ *
+ * @author robertlo
+ *
+ */
+@Entity
+public class FunctionalMenuItemWithAppID{
+ private static final long serialVersionUID = 1L;
+
+ @Id
+ @GeneratedValue(strategy=GenerationType.IDENTITY)
+ @Column(name = "MENU_ID")
+ public Long menuId;
+
+ @Column(name = "COLUMN_NUM")
+ public Integer column;
+
+ @Column(name = "TEXT")
+ public String text;
+
+ @Column(name = "PARENT_MENU_ID")
+ public Integer parentMenuId;
+
+ @Column(name = "URL")
+ public String url;
+
+ @Column(name="ACTIVE_YN")
+ public String active_yn;
+
+ @Column(name="APP_ID")
+ public Integer appid;
+
+ @Transient
+ public List<Integer> roles;
+
+ @Transient
+ public Boolean restrictedApp;
+
+ public void normalize() {
+ if (this.column == null)
+ this.column = new Integer(1);
+ this.text = (this.text == null) ? "" : this.text.trim();
+ if (this.parentMenuId == null)
+ this.parentMenuId = new Integer(-1);
+ this.url = (this.url == null) ? "" : this.url.trim();
+ }
+
+ @Override
+ public String toString() {
+ return "FunctionalMenuItem [menuId=" + menuId + ", column=" + column + ", text=" + text + ", parentMenuId="
+ + parentMenuId + ", url=" + url + ", active_yn=" + active_yn + ", appid=" + appid + ", roles=" + roles
+ + ", restrictedApp=" + restrictedApp + "]";
+ }
+
+ public void setUrl(String url) {
+ this.url = url;
+ }
+
+ public void setRestrictedApp(Boolean restrictedApp) {
+ this.restrictedApp = restrictedApp;
+ }
+}
+
diff --git a/ecomp-portal-BE-common/src/main/java/org/onap/portalapp/portal/domain/GetAccessResult.java b/ecomp-portal-BE-common/src/main/java/org/onap/portalapp/portal/domain/GetAccessResult.java
new file mode 100644
index 00000000..f64810d7
--- /dev/null
+++ b/ecomp-portal-BE-common/src/main/java/org/onap/portalapp/portal/domain/GetAccessResult.java
@@ -0,0 +1,132 @@
+/*-
+ * ============LICENSE_START==========================================
+ * ONAP Portal
+ * ===================================================================
+ * Copyright (C) 2017 AT&T Intellectual Property. All rights reserved.
+ * ===================================================================
+ *
+ * Unless otherwise specified, all software contained herein is licensed
+ * under the Apache License, Version 2.0 (the "License");
+ * you may not use this software 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.
+ *
+ * Unless otherwise specified, all documentation contained herein is licensed
+ * under the Creative Commons License, Attribution 4.0 Intl. (the "License");
+ * you may not use this documentation except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * https://creativecommons.org/licenses/by/4.0/
+ *
+ * Unless required by applicable law or agreed to in writing, documentation
+ * 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.
+ *
+ * ============LICENSE_END============================================
+ *
+ * ECOMP is a trademark and service mark of AT&T Intellectual Property.
+ */
+package org.onap.portalapp.portal.domain;
+
+import java.io.Serializable;
+
+import javax.persistence.Column;
+import javax.persistence.Entity;
+import javax.persistence.Id;
+
+import com.fasterxml.jackson.annotation.JsonInclude;
+
+@Entity
+@JsonInclude
+public class GetAccessResult implements Serializable{
+
+
+ private static final long serialVersionUID = 5239527705869613411L;
+
+ @Id
+ @Column(name="row_id")
+ private String rowId;
+
+ @Column(name="role_id")
+ private Long roleId;
+
+ @Column(name="ecomp_function",nullable=true)
+ private String ecompFunction;
+
+ @Column(name="app_name")
+ private String appName;
+
+ @Column(name="app_mots_id",nullable=true)
+ private Integer appMotsId;
+
+ @Column(name="role_name")
+ private String roleName;
+
+ @Column(name="role_actv",nullable=true)
+ private String roleActive;
+
+
+ @Column(name="request_type",nullable=true)
+ private String reqType;
+
+
+
+ public String getRowId() {
+ return rowId;
+ }
+ public void setRowId(String rowId) {
+ this.rowId = rowId;
+ }
+ public Long getRoleId() {
+ return roleId;
+ }
+ public void setRoleId(Long roleId) {
+ this.roleId = roleId;
+ }
+ public String getEcompFunction() {
+ return ecompFunction;
+ }
+ public void setEcompFunction(String ecompFunction) {
+ this.ecompFunction = ecompFunction;
+ }
+ public String getAppName() {
+ return appName;
+ }
+ public void setAppName(String appName) {
+ this.appName = appName;
+ }
+ public Integer getAppMotsId() {
+ return appMotsId;
+ }
+ public void setAppMotsId(Integer appMotsId) {
+ this.appMotsId = appMotsId;
+ }
+ public String getRoleName() {
+ return roleName;
+ }
+ public void setRoleName(String roleName) {
+ this.roleName = roleName;
+ }
+ public String getRoleActive() {
+ return roleActive;
+ }
+ public void setRoleActive(String roleActive) {
+ this.roleActive = roleActive;
+ }
+ public String getReqType() {
+ return reqType;
+ }
+ public void setReqType(String reqType) {
+ this.reqType = reqType;
+ }
+
+}
diff --git a/ecomp-portal-BE-common/src/main/java/org/onap/portalapp/portal/domain/GetAccessResultId.java b/ecomp-portal-BE-common/src/main/java/org/onap/portalapp/portal/domain/GetAccessResultId.java
new file mode 100644
index 00000000..a9cd69a2
--- /dev/null
+++ b/ecomp-portal-BE-common/src/main/java/org/onap/portalapp/portal/domain/GetAccessResultId.java
@@ -0,0 +1,82 @@
+/*-
+ * ============LICENSE_START==========================================
+ * ONAP Portal
+ * ===================================================================
+ * Copyright (C) 2017 AT&T Intellectual Property. All rights reserved.
+ * ===================================================================
+ *
+ * Unless otherwise specified, all software contained herein is licensed
+ * under the Apache License, Version 2.0 (the "License");
+ * you may not use this software 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.
+ *
+ * Unless otherwise specified, all documentation contained herein is licensed
+ * under the Creative Commons License, Attribution 4.0 Intl. (the "License");
+ * you may not use this documentation except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * https://creativecommons.org/licenses/by/4.0/
+ *
+ * Unless required by applicable law or agreed to in writing, documentation
+ * 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.
+ *
+ * ============LICENSE_END============================================
+ *
+ * ECOMP is a trademark and service mark of AT&T Intellectual Property.
+ */
+package org.onap.portalapp.portal.domain;
+
+import java.io.Serializable;
+
+import javax.persistence.Column;
+import javax.persistence.Id;
+
+public class GetAccessResultId implements Serializable{
+
+ /**
+ *
+ */
+ private static final long serialVersionUID = 1L;
+
+ @Id
+ @Column(name="ecomp_function")
+ private String ecompFunction;
+
+ @Id
+ @Column(name="app_name")
+ private String appName;
+
+ @Id
+ @Column(name="role_name")
+ private String roleName;
+
+ public String getEcompFunction() {
+ return ecompFunction;
+ }
+ public void setEcompFunction(String ecompFunction) {
+ this.ecompFunction = ecompFunction;
+ }
+ public String getAppName() {
+ return appName;
+ }
+ public void setAppName(String appName) {
+ this.appName = appName;
+ }
+ public String getRoleName() {
+ return roleName;
+ }
+ public void setRoleName(String roleName) {
+ this.roleName = roleName;
+ }
+}
diff --git a/ecomp-portal-BE-common/src/main/java/org/onap/portalapp/portal/domain/MicroserviceData.java b/ecomp-portal-BE-common/src/main/java/org/onap/portalapp/portal/domain/MicroserviceData.java
new file mode 100644
index 00000000..a7129d58
--- /dev/null
+++ b/ecomp-portal-BE-common/src/main/java/org/onap/portalapp/portal/domain/MicroserviceData.java
@@ -0,0 +1,164 @@
+/*-
+ * ============LICENSE_START==========================================
+ * ONAP Portal
+ * ===================================================================
+ * Copyright (C) 2017 AT&T Intellectual Property. All rights reserved.
+ * ===================================================================
+ *
+ * Unless otherwise specified, all software contained herein is licensed
+ * under the Apache License, Version 2.0 (the "License");
+ * you may not use this software 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.
+ *
+ * Unless otherwise specified, all documentation contained herein is licensed
+ * under the Creative Commons License, Attribution 4.0 Intl. (the "License");
+ * you may not use this documentation except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * https://creativecommons.org/licenses/by/4.0/
+ *
+ * Unless required by applicable law or agreed to in writing, documentation
+ * 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.
+ *
+ * ============LICENSE_END============================================
+ *
+ * ECOMP is a trademark and service mark of AT&T Intellectual Property.
+ */
+package org.onap.portalapp.portal.domain;
+
+import java.util.List;
+
+import javax.persistence.Column;
+import javax.persistence.GeneratedValue;
+import javax.persistence.GenerationType;
+import javax.persistence.Id;
+
+import org.onap.portalsdk.core.domain.support.DomainVo;
+
+public class MicroserviceData extends DomainVo {
+
+ private static final long serialVersionUID = 1L;
+
+ public MicroserviceData() {
+
+ }
+
+ private Long id;
+
+ private String name;
+
+ private String active;
+
+ private String desc;
+
+ private long appId;
+
+ private String url;
+
+ private String securityType;
+
+ private String username;
+
+ private String password;
+
+ private List<MicroserviceParameter> parameterList;
+
+ public Long getId() {
+ return id;
+ }
+
+ public void setId(Long id) {
+ this.id = id;
+ }
+
+ public String getName() {
+ return name;
+ }
+
+ public void setName(String name) {
+ this.name = name;
+ }
+
+ public String getActive() {
+ return active;
+ }
+
+ public void setActive(String active) {
+ this.active = active;
+ }
+
+ public String getDesc() {
+ return desc;
+ }
+
+ public void setDesc(String desc) {
+ this.desc = desc;
+ }
+
+ public long getAppId() {
+ return appId;
+ }
+
+ public void setAppId(long appId) {
+ this.appId = appId;
+ }
+
+ public String getUrl() {
+ return url;
+ }
+
+ public void setUrl(String url) {
+ this.url = url;
+ }
+
+ public String getSecurityType() {
+ return securityType;
+ }
+
+ public void setSecurityType(String securityType) {
+ this.securityType = securityType;
+ }
+
+ public String getUsername() {
+ return username;
+ }
+
+ public void setUsername(String username) {
+ this.username = username;
+ }
+
+ public String getPassword() {
+ return password;
+ }
+
+ public void setPassword(String password) {
+ this.password = password;
+ }
+
+ public List<MicroserviceParameter> getParameterList() {
+ return parameterList;
+ }
+
+ public void setParameterList(List<MicroserviceParameter> parameterList) {
+ this.parameterList = parameterList;
+ }
+
+ @Override
+ public String toString() {
+ return "MicroserviceData [id=" + id + ", name=" + name + ", desc=" + desc + ", appId=" + appId + ", url=" + url
+ + ", securityType=" + securityType + ", username=" + username + ", password=" + password
+ + ", parameterList=" + parameterList + "]";
+ }
+
+}
diff --git a/ecomp-portal-BE-common/src/main/java/org/onap/portalapp/portal/domain/MicroserviceParameter.java b/ecomp-portal-BE-common/src/main/java/org/onap/portalapp/portal/domain/MicroserviceParameter.java
new file mode 100644
index 00000000..a761f754
--- /dev/null
+++ b/ecomp-portal-BE-common/src/main/java/org/onap/portalapp/portal/domain/MicroserviceParameter.java
@@ -0,0 +1,96 @@
+/*-
+ * ============LICENSE_START==========================================
+ * ONAP Portal
+ * ===================================================================
+ * Copyright (C) 2017 AT&T Intellectual Property. All rights reserved.
+ * ===================================================================
+ *
+ * Unless otherwise specified, all software contained herein is licensed
+ * under the Apache License, Version 2.0 (the "License");
+ * you may not use this software 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.
+ *
+ * Unless otherwise specified, all documentation contained herein is licensed
+ * under the Creative Commons License, Attribution 4.0 Intl. (the "License");
+ * you may not use this documentation except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * https://creativecommons.org/licenses/by/4.0/
+ *
+ * Unless required by applicable law or agreed to in writing, documentation
+ * 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.
+ *
+ * ============LICENSE_END============================================
+ *
+ * ECOMP is a trademark and service mark of AT&T Intellectual Property.
+ */
+package org.onap.portalapp.portal.domain;
+
+import org.onap.portalsdk.core.domain.support.DomainVo;
+
+public class MicroserviceParameter extends DomainVo {
+
+ private static final long serialVersionUID = 1L;
+
+ public MicroserviceParameter() {
+
+ }
+
+ private Long id;
+
+ private long serviceId;
+
+ private String para_key;
+
+ private String para_value;
+
+ public Long getId() {
+ return id;
+ }
+
+ public void setId(Long id) {
+ this.id = id;
+ }
+
+ public long getServiceId() {
+ return serviceId;
+ }
+
+ public void setServiceId(long serviceId) {
+ this.serviceId = serviceId;
+ }
+
+ public String getPara_key() {
+ return para_key;
+ }
+
+ public void setPara_key(String para_key) {
+ this.para_key = para_key;
+ }
+
+ public String getPara_value() {
+ return para_value;
+ }
+
+ public void setPara_value(String para_value) {
+ this.para_value = para_value;
+ }
+
+ @Override
+ public String toString() {
+ return "MicroserviceParameter [id=" + id + ", serviceId=" + serviceId + ", para_key=" + para_key
+ + ", para_value=" + para_value + "]";
+ }
+
+}
diff --git a/ecomp-portal-BE-common/src/main/java/org/onap/portalapp/portal/domain/PersUserAppSelection.java b/ecomp-portal-BE-common/src/main/java/org/onap/portalapp/portal/domain/PersUserAppSelection.java
new file mode 100644
index 00000000..13e58dc0
--- /dev/null
+++ b/ecomp-portal-BE-common/src/main/java/org/onap/portalapp/portal/domain/PersUserAppSelection.java
@@ -0,0 +1,133 @@
+/*-
+ * ============LICENSE_START==========================================
+ * ONAP Portal
+ * ===================================================================
+ * Copyright (C) 2017 AT&T Intellectual Property. All rights reserved.
+ * ===================================================================
+ *
+ * Unless otherwise specified, all software contained herein is licensed
+ * under the Apache License, Version 2.0 (the "License");
+ * you may not use this software 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.
+ *
+ * Unless otherwise specified, all documentation contained herein is licensed
+ * under the Creative Commons License, Attribution 4.0 Intl. (the "License");
+ * you may not use this documentation except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * https://creativecommons.org/licenses/by/4.0/
+ *
+ * Unless required by applicable law or agreed to in writing, documentation
+ * 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.
+ *
+ * ============LICENSE_END============================================
+ *
+ * ECOMP is a trademark and service mark of AT&T Intellectual Property.
+ */
+package org.onap.portalapp.portal.domain;
+
+import org.onap.portalsdk.core.domain.support.DomainVo;
+
+/**
+ * Models a row in the table with personalization of user app selections.
+ */
+public class PersUserAppSelection extends DomainVo {
+
+ private static final long serialVersionUID = 1545308654500121206L;
+
+ private Long userId;
+
+ private Long appId;
+
+ private String statusCode;
+
+ public PersUserAppSelection() {}
+
+ /**
+ * Convenience constructor
+ *
+ * @param id
+ * @param userId
+ * @param appId
+ * @param statusCode
+ */
+ public PersUserAppSelection(final Long id, final Long userId, final Long appId, final String statusCode) {
+ super.id = id;
+ this.userId = userId;
+ this.appId = appId;
+ this.statusCode = statusCode;
+ }
+
+ public Long getAppId() {
+ return appId;
+ }
+
+ public void setAppId(Long appId) {
+ this.appId = appId;
+ }
+
+ public Long getUserId() {
+ return userId;
+ }
+
+ public void setUserId(Long userId) {
+ this.userId = userId;
+ }
+
+ public String getStatusCode() {
+ return statusCode;
+ }
+
+ public void setStatusCode(String statusCode) {
+ this.statusCode = statusCode;
+ }
+
+ @Override
+ public int hashCode() {
+ final int prime = 31;
+ int result = 1;
+ result = prime * result + ((appId == null) ? 0 : appId.hashCode());
+ result = prime * result + ((statusCode == null) ? 0 : statusCode.hashCode());
+ result = prime * result + ((userId == null) ? 0 : userId.hashCode());
+ return result;
+ }
+
+ @Override
+ public boolean equals(Object obj) {
+ if (this == obj)
+ return true;
+ if (obj == null)
+ return false;
+ if (getClass() != obj.getClass())
+ return false;
+ PersUserAppSelection other = (PersUserAppSelection) obj;
+ if (appId == null) {
+ if (other.appId != null)
+ return false;
+ } else if (!appId.equals(other.appId))
+ return false;
+ if (statusCode == null) {
+ if (other.statusCode != null)
+ return false;
+ } else if (!statusCode.equals(other.statusCode))
+ return false;
+ if (userId == null) {
+ if (other.userId != null)
+ return false;
+ } else if (!userId.equals(other.userId))
+ return false;
+ return true;
+ }
+
+}
diff --git a/ecomp-portal-BE-common/src/main/java/org/onap/portalapp/portal/domain/PersUserWidgetSelection.java b/ecomp-portal-BE-common/src/main/java/org/onap/portalapp/portal/domain/PersUserWidgetSelection.java
new file mode 100644
index 00000000..833934db
--- /dev/null
+++ b/ecomp-portal-BE-common/src/main/java/org/onap/portalapp/portal/domain/PersUserWidgetSelection.java
@@ -0,0 +1,136 @@
+/*-
+ * ============LICENSE_START==========================================
+ * ONAP Portal
+ * ===================================================================
+ * Copyright (C) 2017 AT&T Intellectual Property. All rights reserved.
+ * ===================================================================
+ *
+ * Unless otherwise specified, all software contained herein is licensed
+ * under the Apache License, Version 2.0 (the "License");
+ * you may not use this software 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.
+ *
+ * Unless otherwise specified, all documentation contained herein is licensed
+ * under the Creative Commons License, Attribution 4.0 Intl. (the "License");
+ * you may not use this documentation except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * https://creativecommons.org/licenses/by/4.0/
+ *
+ * Unless required by applicable law or agreed to in writing, documentation
+ * 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.
+ *
+ * ============LICENSE_END============================================
+ *
+ * ECOMP is a trademark and service mark of AT&T Intellectual Property.
+ */
+package org.onap.portalapp.portal.domain;
+
+import org.onap.portalsdk.core.domain.support.DomainVo;
+
+/**
+ * Models a row in the table with personalization of user widget selections.
+ */
+public class PersUserWidgetSelection extends DomainVo {
+
+ /**
+ *
+ */
+ private static final long serialVersionUID = -6547880514779039200L;
+
+ private Long userId;
+
+ private Long widgetId;
+
+ private String statusCode;
+
+ public PersUserWidgetSelection() {}
+
+ /**
+ * Convenience constructor
+ *
+ * @param id
+ * @param userId
+ * @param widgetId
+ * @param statusCode
+ */
+ public PersUserWidgetSelection(final Long id, final Long userId, final Long widgetId, final String statusCode) {
+ super.id = id;
+ this.userId = userId;
+ this.widgetId = widgetId;
+ this.statusCode = statusCode;
+ }
+
+ public Long getWidgetId() {
+ return widgetId;
+ }
+
+ public void setWidgetId(Long widgetId) {
+ this.widgetId = widgetId;
+ }
+
+ public Long getUserId() {
+ return userId;
+ }
+
+ public void setUserId(Long userId) {
+ this.userId = userId;
+ }
+
+ public String getStatusCode() {
+ return statusCode;
+ }
+
+ public void setStatusCode(String statusCode) {
+ this.statusCode = statusCode;
+ }
+
+ @Override
+ public int hashCode() {
+ final int prime = 31;
+ int result = 1;
+ result = prime * result + ((statusCode == null) ? 0 : statusCode.hashCode());
+ result = prime * result + ((userId == null) ? 0 : userId.hashCode());
+ result = prime * result + ((widgetId == null) ? 0 : widgetId.hashCode());
+ return result;
+ }
+
+ @Override
+ public boolean equals(Object obj) {
+ if (this == obj)
+ return true;
+ if (obj == null)
+ return false;
+ if (getClass() != obj.getClass())
+ return false;
+ PersUserWidgetSelection other = (PersUserWidgetSelection) obj;
+ if (statusCode == null) {
+ if (other.statusCode != null)
+ return false;
+ } else if (!statusCode.equals(other.statusCode))
+ return false;
+ if (userId == null) {
+ if (other.userId != null)
+ return false;
+ } else if (!userId.equals(other.userId))
+ return false;
+ if (widgetId == null) {
+ if (other.widgetId != null)
+ return false;
+ } else if (!widgetId.equals(other.widgetId))
+ return false;
+ return true;
+ }
+
+}
diff --git a/ecomp-portal-BE-common/src/main/java/org/onap/portalapp/portal/domain/RoleApp.java b/ecomp-portal-BE-common/src/main/java/org/onap/portalapp/portal/domain/RoleApp.java
new file mode 100644
index 00000000..1b52b8b1
--- /dev/null
+++ b/ecomp-portal-BE-common/src/main/java/org/onap/portalapp/portal/domain/RoleApp.java
@@ -0,0 +1,132 @@
+/*-
+ * ============LICENSE_START==========================================
+ * ONAP Portal
+ * ===================================================================
+ * Copyright (C) 2017 AT&T Intellectual Property. All rights reserved.
+ * ===================================================================
+ *
+ * Unless otherwise specified, all software contained herein is licensed
+ * under the Apache License, Version 2.0 (the "License");
+ * you may not use this software 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.
+ *
+ * Unless otherwise specified, all documentation contained herein is licensed
+ * under the Creative Commons License, Attribution 4.0 Intl. (the "License");
+ * you may not use this documentation except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * https://creativecommons.org/licenses/by/4.0/
+ *
+ * Unless required by applicable law or agreed to in writing, documentation
+ * 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.
+ *
+ * ============LICENSE_END============================================
+ *
+ * ECOMP is a trademark and service mark of AT&T Intellectual Property.
+ */
+package org.onap.portalapp.portal.domain;
+
+import java.io.Serializable;
+import java.util.Set;
+
+import javax.persistence.CascadeType;
+import javax.persistence.Column;
+import javax.persistence.FetchType;
+import javax.persistence.GeneratedValue;
+import javax.persistence.GenerationType;
+import javax.persistence.Id;
+import javax.persistence.JoinColumn;
+import javax.persistence.ManyToMany;
+import javax.persistence.ManyToOne;
+
+import com.fasterxml.jackson.annotation.JsonIgnore;
+
+//@Entity
+//@Table(name = "FN_ROLE")
+public class RoleApp implements Serializable{
+ private static final long serialVersionUID = 1L;
+
+ //@Id
+ //@Column(name = "ROLE_ID")
+ //@GeneratedValue(strategy=GenerationType.AUTO)
+ private Long roleId;
+
+
+ //@Column(name = "ROLE_Name")
+ private String roleName;
+
+ //@ManyToOne(fetch = FetchType.EAGER)
+ //@JoinColumn(name="APP_ID")
+ private App app;
+
+ //@JsonIgnore
+ //@ManyToMany(fetch = FetchType.EAGER, cascade = {CascadeType.MERGE, CascadeType.PERSIST, CascadeType.REFRESH}, mappedBy="widgetRoles")
+ private Set<WidgetCatalog> widgets;
+
+ /*@PreRemove
+ private void removeGroupsFromUsers() {
+ for (WidgetCatalog w : widgets) {
+ w.getWidgetRoles().remove(this);
+ }
+ }*/
+
+ /*@ManyToOne
+ @JoinColumn(name = "WIDGET_ID", nullable = false)
+ WidgetCatalog widgetCatalog;*/
+
+ //@JsonIgnore
+ //@ManyToMany(mappedBy = "widgetRoles")
+ //@ManyToMany(fetch = FetchType.EAGER, mappedBy = "widgetRoles")
+ //private Set<WidgetCatalog> widgets = new HashSet<WidgetCatalog>();
+
+ public Long getRoleId() {
+ return roleId;
+ }
+
+ public void setRoleId(Long roleId) {
+ this.roleId = roleId;
+ }
+
+ public String getRoleName() {
+ return roleName;
+ }
+
+ public void setRoleName(String roleName) {
+ this.roleName = roleName;
+ }
+
+ public App getApp() {
+ return app;
+ }
+
+ public void setApp(App app) {
+ this.app = app;
+ }
+
+
+
+ public Set<WidgetCatalog> getWidgets() {
+ return widgets;
+ }
+
+ public void setWidgets(Set<WidgetCatalog> widgets) {
+ this.widgets = widgets;
+ }
+
+ @Override
+ public String toString() {
+ return "Role [roleId=" + roleId + ", roleName=" + roleName + ", app=" + app + "]";
+ }
+
+}
diff --git a/ecomp-portal-BE-common/src/main/java/org/onap/portalapp/portal/domain/SharedContext.java b/ecomp-portal-BE-common/src/main/java/org/onap/portalapp/portal/domain/SharedContext.java
new file mode 100644
index 00000000..ebfb2855
--- /dev/null
+++ b/ecomp-portal-BE-common/src/main/java/org/onap/portalapp/portal/domain/SharedContext.java
@@ -0,0 +1,191 @@
+/*-
+ * ============LICENSE_START==========================================
+ * ONAP Portal
+ * ===================================================================
+ * Copyright (C) 2017 AT&T Intellectual Property. All rights reserved.
+ * ===================================================================
+ *
+ * Unless otherwise specified, all software contained herein is licensed
+ * under the Apache License, Version 2.0 (the "License");
+ * you may not use this software 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.
+ *
+ * Unless otherwise specified, all documentation contained herein is licensed
+ * under the Creative Commons License, Attribution 4.0 Intl. (the "License");
+ * you may not use this documentation except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * https://creativecommons.org/licenses/by/4.0/
+ *
+ * Unless required by applicable law or agreed to in writing, documentation
+ * 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.
+ *
+ * ============LICENSE_END============================================
+ *
+ * ECOMP is a trademark and service mark of AT&T Intellectual Property.
+ */
+package org.onap.portalapp.portal.domain;
+
+import java.util.Date;
+
+import javax.persistence.Entity;
+import javax.persistence.GeneratedValue;
+import javax.persistence.GenerationType;
+import javax.persistence.Id;
+import javax.persistence.Table;
+
+import org.onap.portalsdk.core.domain.support.DomainVo;
+
+/**
+ * A shared context is a key-value pair in a session. All shared-context objects
+ * should be dropped when a session is destroyed. Because there's always a
+ * chance of missing that event, this object notes its creation time so that it
+ * can be expired after a suitable time interval.
+ */
+@Entity
+@Table(name = "fn_shared_context")
+public class SharedContext extends DomainVo {
+
+ // generated
+ private static final long serialVersionUID = 7287469622586677888L;
+
+ @Id
+ @GeneratedValue(strategy = GenerationType.AUTO)
+ private Long id;
+ private Date create_time;
+ private String context_id;
+ private String ckey;
+ private String cvalue;
+
+ /**
+ * Mandatory no-argument constructor
+ */
+ public SharedContext() {
+ }
+
+ /**
+ * Convenience constructor. The database ID and creation timestamp are
+ * populated when the object is added to the database.
+ *
+ * @param contextId
+ * context ID
+ * @param key
+ * context key
+ * @param value
+ * context value
+ */
+ public SharedContext(final String contextId, final String key, final String value) {
+ this.context_id = contextId;
+ this.ckey = key;
+ this.cvalue = value;
+ }
+
+ /**
+ * Gets the database row ID.
+ *
+ * @return Database row ID
+ */
+ public Long getId() {
+ return id;
+ }
+
+ /**
+ * Sets the database row ID.
+ *
+ * @param id
+ * database row ID
+ */
+ public void setId(final Long id) {
+ this.id = id;
+ }
+
+ /**
+ * Gets the creation time
+ *
+ * @return Creation time as a Date
+ */
+ public Date getCreate_time() {
+ return create_time;
+ }
+
+ /**
+ * Sets the creation time
+ *
+ * @param create_time
+ * Date
+ */
+ public void setCreate_time(final Date create_time) {
+ this.create_time = create_time;
+ }
+
+ /**
+ * Gets the context ID
+ *
+ * @return Context ID
+ */
+ public String getContext_id() {
+ return context_id;
+ }
+
+ /**
+ * Sets the context ID
+ *
+ * @param context_id
+ * String
+ */
+ public void setContext_id(final String context_id) {
+ this.context_id = context_id;
+ }
+
+ /**
+ * Gets the key of the key-value pair. Called ckey because "key" is a
+ * reserved word in Mysql.
+ *
+ * @return The key
+ */
+ public String getCkey() {
+ return ckey;
+ }
+
+ /**
+ * Sets the key of the key-value pair.
+ *
+ * @param ckey
+ * String
+ */
+ public void setCkey(final String ckey) {
+ this.ckey = ckey;
+ }
+
+ /**
+ * Gets the value of the key-value pair. Called cvalue because "value" is a
+ * reserved word in Mysql.
+ *
+ * @return value
+ */
+ public String getCvalue() {
+ return cvalue;
+ }
+
+ /**
+ * Sets the value of the key-value pair.
+ *
+ * @param cvalue
+ * value
+ */
+ public void setCvalue(final String cvalue) {
+ this.cvalue = cvalue;
+ }
+
+}
diff --git a/ecomp-portal-BE-common/src/main/java/org/onap/portalapp/portal/domain/UserIdRoleId.java b/ecomp-portal-BE-common/src/main/java/org/onap/portalapp/portal/domain/UserIdRoleId.java
new file mode 100644
index 00000000..e267e925
--- /dev/null
+++ b/ecomp-portal-BE-common/src/main/java/org/onap/portalapp/portal/domain/UserIdRoleId.java
@@ -0,0 +1,95 @@
+/*-
+ * ============LICENSE_START==========================================
+ * ONAP Portal
+ * ===================================================================
+ * Copyright (C) 2017 AT&T Intellectual Property. All rights reserved.
+ * ===================================================================
+ *
+ * Unless otherwise specified, all software contained herein is licensed
+ * under the Apache License, Version 2.0 (the "License");
+ * you may not use this software 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.
+ *
+ * Unless otherwise specified, all documentation contained herein is licensed
+ * under the Creative Commons License, Attribution 4.0 Intl. (the "License");
+ * you may not use this documentation except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * https://creativecommons.org/licenses/by/4.0/
+ *
+ * Unless required by applicable law or agreed to in writing, documentation
+ * 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.
+ *
+ * ============LICENSE_END============================================
+ *
+ * ECOMP is a trademark and service mark of AT&T Intellectual Property.
+ */
+package org.onap.portalapp.portal.domain;
+
+import java.io.Serializable;
+
+import javax.persistence.Column;
+import javax.persistence.Entity;
+import javax.persistence.Id;
+
+@Entity
+public class UserIdRoleId implements Serializable{
+
+ private static final long serialVersionUID = 1L;
+
+ @Id
+ @Column(name="USER_ID")
+ private String user_Id;
+
+ @Column(name="ROLE_ID")
+ private String roleId;
+
+ @Column(name="ORG_USER_ID")
+ private String orgUserId;
+
+ @Column(name="APP_ID")
+ private String appId;
+
+ public String getUser_Id() {
+ return user_Id;
+ }
+
+ public void setUser_Id(String id) {
+ this.user_Id = id;
+ }
+
+ public String getRoleId() {
+ return roleId;
+ }
+
+ public void setRoleId(String roleId) {
+ this.roleId = roleId;
+ }
+
+ public String getAppId() {
+ return appId;
+ }
+
+ public void setAppId(String appId) {
+ this.appId = appId;
+ }
+
+ public String getOrgUserId() {
+ return orgUserId;
+ }
+
+ public void setOrgUserId(String orgUserId) {
+ this.orgUserId = orgUserId;
+ }
+}
diff --git a/ecomp-portal-BE-common/src/main/java/org/onap/portalapp/portal/domain/UserRole.java b/ecomp-portal-BE-common/src/main/java/org/onap/portalapp/portal/domain/UserRole.java
new file mode 100644
index 00000000..eda4eeef
--- /dev/null
+++ b/ecomp-portal-BE-common/src/main/java/org/onap/portalapp/portal/domain/UserRole.java
@@ -0,0 +1,109 @@
+/*-
+ * ============LICENSE_START==========================================
+ * ONAP Portal
+ * ===================================================================
+ * Copyright (C) 2017 AT&T Intellectual Property. All rights reserved.
+ * ===================================================================
+ *
+ * Unless otherwise specified, all software contained herein is licensed
+ * under the Apache License, Version 2.0 (the "License");
+ * you may not use this software 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.
+ *
+ * Unless otherwise specified, all documentation contained herein is licensed
+ * under the Creative Commons License, Attribution 4.0 Intl. (the "License");
+ * you may not use this documentation except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * https://creativecommons.org/licenses/by/4.0/
+ *
+ * Unless required by applicable law or agreed to in writing, documentation
+ * 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.
+ *
+ * ============LICENSE_END============================================
+ *
+ * ECOMP is a trademark and service mark of AT&T Intellectual Property.
+ */
+package org.onap.portalapp.portal.domain;
+
+import java.io.Serializable;
+
+import javax.persistence.Column;
+import javax.persistence.Entity;
+import javax.persistence.Id;
+
+@Entity
+public class UserRole implements Serializable{
+ private static final long serialVersionUID = 1L;
+
+
+ @Id
+ @Column(name="USER_ID")
+ private Long user_Id;
+
+ @Id
+ @Column(name="ROLE_ID")
+ private Long roleId;
+
+ @Column(name="ORG_USER_ID")
+ private String orgUserId;
+
+
+ @Column(name="FIRST_NAME")
+ private String firstName;
+
+ @Column(name="LAST_NAME")
+ private String lastName;
+
+
+ @Column(name="ROLE_NAME")
+ private String roleName;
+
+ public String getFirstName() {
+ return firstName;
+ }
+ public void setFirstName(String firstName) {
+ this.firstName = firstName;
+ }
+ public String getLastName() {
+ return lastName;
+ }
+ public void setLastName(String lastName) {
+ this.lastName = lastName;
+ }
+ public String getOrgUserId() {
+ return orgUserId;
+ }
+ public void setOrgUserId(String orgUserId) {
+ this.orgUserId = orgUserId;
+ }
+ public String getRoleName() {
+ return roleName;
+ }
+ public void setRoleName(String roleName) {
+ this.roleName = roleName;
+ }
+ public Long getUser_Id() {
+ return user_Id;
+ }
+ public void setUser_Id(Long user_Id) {
+ this.user_Id = user_Id;
+ }
+ public Long getRoleId() {
+ return roleId;
+ }
+ public void setRoleId(Long roleId) {
+ this.roleId = roleId;
+ }
+}
diff --git a/ecomp-portal-BE-common/src/main/java/org/onap/portalapp/portal/domain/UserRoles.java b/ecomp-portal-BE-common/src/main/java/org/onap/portalapp/portal/domain/UserRoles.java
new file mode 100644
index 00000000..0efaaea2
--- /dev/null
+++ b/ecomp-portal-BE-common/src/main/java/org/onap/portalapp/portal/domain/UserRoles.java
@@ -0,0 +1,131 @@
+/*-
+ * ============LICENSE_START==========================================
+ * ONAP Portal
+ * ===================================================================
+ * Copyright (C) 2017 AT&T Intellectual Property. All rights reserved.
+ * ===================================================================
+ *
+ * Unless otherwise specified, all software contained herein is licensed
+ * under the Apache License, Version 2.0 (the "License");
+ * you may not use this software 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.
+ *
+ * Unless otherwise specified, all documentation contained herein is licensed
+ * under the Creative Commons License, Attribution 4.0 Intl. (the "License");
+ * you may not use this documentation except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * https://creativecommons.org/licenses/by/4.0/
+ *
+ * Unless required by applicable law or agreed to in writing, documentation
+ * 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.
+ *
+ * ============LICENSE_END============================================
+ *
+ * ECOMP is a trademark and service mark of AT&T Intellectual Property.
+ */
+package org.onap.portalapp.portal.domain;
+
+import java.io.Serializable;
+import java.util.ArrayList;
+import java.util.HashMap;
+import java.util.List;
+
+import org.onap.portalapp.portal.utils.EPCommonSystemProperties;
+import org.onap.portalsdk.core.util.SystemProperties;
+
+public class UserRoles implements Serializable {
+ private static final long serialVersionUID = 1L;
+
+ /*
+ private static final HashMap<Long, String> rolesDictionary;
+ // remove hard coded roles
+ static {
+ rolesDictionary = new HashMap<Long, String>();
+ rolesDictionary.put(Long.valueOf(SystemProperties.getProperty(SystemProperties.SYS_ADMIN_ROLE_ID)).longValue(), "superAdmin");
+ rolesDictionary.put(Long.valueOf(SystemProperties.getProperty(EPCommonSystemProperties.ACCOUNT_ADMIN_ROLE_ID)).longValue(), "admin");
+ }
+ */
+
+ public UserRoles(UserRole user) {
+ setOrgUserId(user.getOrgUserId());
+ setFirstName(user.getFirstName());
+ setLastName(user.getLastName());
+ setGuestSession(user.getUser_Id()==-1 ? true : false);
+
+ addRole(user.getRoleName());
+ }
+
+ public void addRole(String roleName) {
+ //String normalizedRole = normalizeRole(roleId);
+ if (!getRoles().contains(roleName)) {
+ this.roles.add(roleName);
+ }
+ }
+
+ /*
+ public static String normalizeRole(Long role) {
+ String roleTranslated = rolesDictionary.get(role);
+ return roleTranslated == null ? "user" : roleTranslated;
+ }
+ */
+
+ private String orgUserId;
+ private String firstName;
+ private String lastName;
+ private boolean guestSession;
+
+ // TODO: Make into set
+ private List<String> roles = new ArrayList<String>();
+
+ public String getFirstName() {
+ return firstName;
+ }
+
+ public void setFirstName(String firstName) {
+ this.firstName = firstName;
+ }
+
+ public String getLastName() {
+ return lastName;
+ }
+
+ public void setLastName(String lastName) {
+ this.lastName = lastName;
+ }
+
+ public String getOrgUserId() {
+ return orgUserId;
+ }
+
+ public void setOrgUserId(String orgUserId) {
+ this.orgUserId = orgUserId;
+ }
+
+ public List<String> getRoles() {
+ return roles;
+ }
+
+ public void setRoles(List<String> roles) {
+ this.roles = roles;
+ }
+
+ public void setGuestSession(boolean guestSession) {
+ this.guestSession = guestSession;
+ }
+
+ public boolean getGuestSession() {
+ return this.guestSession;
+ }
+}
diff --git a/ecomp-portal-BE-common/src/main/java/org/onap/portalapp/portal/domain/Widget.java b/ecomp-portal-BE-common/src/main/java/org/onap/portalapp/portal/domain/Widget.java
new file mode 100644
index 00000000..98cfd155
--- /dev/null
+++ b/ecomp-portal-BE-common/src/main/java/org/onap/portalapp/portal/domain/Widget.java
@@ -0,0 +1,123 @@
+/*-
+ * ============LICENSE_START==========================================
+ * ONAP Portal
+ * ===================================================================
+ * Copyright (C) 2017 AT&T Intellectual Property. All rights reserved.
+ * ===================================================================
+ *
+ * Unless otherwise specified, all software contained herein is licensed
+ * under the Apache License, Version 2.0 (the "License");
+ * you may not use this software 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.
+ *
+ * Unless otherwise specified, all documentation contained herein is licensed
+ * under the Creative Commons License, Attribution 4.0 Intl. (the "License");
+ * you may not use this documentation except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * https://creativecommons.org/licenses/by/4.0/
+ *
+ * Unless required by applicable law or agreed to in writing, documentation
+ * 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.
+ *
+ * ============LICENSE_END============================================
+ *
+ * ECOMP is a trademark and service mark of AT&T Intellectual Property.
+ */
+package org.onap.portalapp.portal.domain;
+
+import org.apache.commons.lang.StringUtils;
+
+import org.onap.portalsdk.core.domain.support.DomainVo;
+
+public class Widget extends DomainVo {
+
+ private static final long serialVersionUID = 1L;
+
+ private String name;
+
+ private Integer width;
+
+ private Integer height;
+
+ private String url;
+
+ private Long appId;
+
+ public Widget() {
+ // Attention!!!
+ // We set here all default values. We also place protection
+ // into setters for fields with default values.
+ // If we don't use such protection we are able to place null
+ // to these fields and save such fields into DB even if DB has
+ // default values for these fields.
+ this.name = "";
+ this.width = new Integer(0);
+ this.height = new Integer(0);
+ this.url = "";
+ }
+
+ public String getName() {
+ return name;
+ }
+
+ public void setName(String name) {
+ if (StringUtils.isEmpty(name)) {
+ name = "";
+ }
+ this.name = name;
+ }
+
+ public Integer getWidth() {
+ return width;
+ }
+
+ public void setWidth(Integer width) {
+ if (width == null) {
+ width = new Integer(0);
+ }
+ this.width = width;
+ }
+
+ public Integer getHeight() {
+ return height;
+ }
+
+ public void setHeight(Integer height) {
+ if (height == null) {
+ height = new Integer(0);
+ }
+ this.height = height;
+ }
+
+ public String getUrl() {
+ return url;
+ }
+
+ public void setUrl(String url) {
+ if (StringUtils.isEmpty(url)) {
+ url = "";
+ }
+ this.url = url;
+ }
+
+ public Long getAppId() {
+ return appId;
+ }
+
+ public void setAppId(Long appId) {
+ this.appId = appId;
+ }
+
+}
diff --git a/ecomp-portal-BE-common/src/main/java/org/onap/portalapp/portal/domain/WidgetCatalog.java b/ecomp-portal-BE-common/src/main/java/org/onap/portalapp/portal/domain/WidgetCatalog.java
new file mode 100644
index 00000000..7ddb5a4a
--- /dev/null
+++ b/ecomp-portal-BE-common/src/main/java/org/onap/portalapp/portal/domain/WidgetCatalog.java
@@ -0,0 +1,127 @@
+/*-
+ * ============LICENSE_START==========================================
+ * ONAP Portal
+ * ===================================================================
+ * Copyright (C) 2017 AT&T Intellectual Property. All rights reserved.
+ * ===================================================================
+ *
+ * Unless otherwise specified, all software contained herein is licensed
+ * under the Apache License, Version 2.0 (the "License");
+ * you may not use this software 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.
+ *
+ * Unless otherwise specified, all documentation contained herein is licensed
+ * under the Creative Commons License, Attribution 4.0 Intl. (the "License");
+ * you may not use this documentation except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * https://creativecommons.org/licenses/by/4.0/
+ *
+ * Unless required by applicable law or agreed to in writing, documentation
+ * 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.
+ *
+ * ============LICENSE_END============================================
+ *
+ * ECOMP is a trademark and service mark of AT&T Intellectual Property.
+ */
+package org.onap.portalapp.portal.domain;
+
+import java.io.Serializable;
+import java.util.Set;
+
+public class WidgetCatalog implements Serializable{
+
+ private static final long serialVersionUID = 1L;
+
+ private long id;
+
+ private String name;
+
+ private String desc;
+
+ private String fileLocation;
+
+ private String allowAllUser;
+
+ private Long serviceId;
+
+ private String sortOrder;
+
+ private String statusCode;
+
+ private Set<RoleApp> widgetRoles;
+
+ public long getId() {
+ return id;
+ }
+ public void setId(long id) {
+ this.id = id;
+ }
+ public String getName() {
+ return name;
+ }
+ public void setName(String name) {
+ this.name = name;
+ }
+
+ public Long getServiceId() {
+ return serviceId;
+ }
+ public void setServiceId(Long serviceId) {
+ this.serviceId = serviceId;
+ }
+ public String getDesc() {
+ return desc;
+ }
+ public void setDesc(String desc) {
+ this.desc = desc;
+ }
+ public String getFileLocation() {
+ return fileLocation;
+ }
+ public void setFileLocation(String fileLocation) {
+ this.fileLocation = fileLocation;
+ }
+
+ public String getAllowAllUser() {
+ return allowAllUser;
+ }
+ public void setAllowAllUser(String allowAllUser) {
+ this.allowAllUser = allowAllUser;
+ }
+ public Set<RoleApp> getWidgetRoles() {
+ return widgetRoles;
+ }
+ public void setWidgetRoles(Set<RoleApp> widgetRoles) {
+ this.widgetRoles = widgetRoles;
+ }
+
+ public String getSortOrder() {
+ return sortOrder;
+ }
+ public void setSortOrder(String sortOrder) {
+ this.sortOrder = sortOrder;
+ }
+ public String getStatusCode() {
+ return statusCode;
+ }
+ public void setStatusCode(String statusCode) {
+ this.statusCode = statusCode;
+ }
+ @Override
+ public String toString() {
+ return "WidgetCatalog [id=" + id + ", name=" + name + ", desc=" + desc + ", fileLocation=" + fileLocation
+ + ", allowAllUser=" + allowAllUser + "]";
+ }
+}
diff --git a/ecomp-portal-BE-common/src/main/java/org/onap/portalapp/portal/domain/WidgetCatalogParameter.java b/ecomp-portal-BE-common/src/main/java/org/onap/portalapp/portal/domain/WidgetCatalogParameter.java
new file mode 100644
index 00000000..2e5940ff
--- /dev/null
+++ b/ecomp-portal-BE-common/src/main/java/org/onap/portalapp/portal/domain/WidgetCatalogParameter.java
@@ -0,0 +1,108 @@
+/*-
+ * ============LICENSE_START==========================================
+ * ONAP Portal
+ * ===================================================================
+ * Copyright (C) 2017 AT&T Intellectual Property. All rights reserved.
+ * ===================================================================
+ *
+ * Unless otherwise specified, all software contained herein is licensed
+ * under the Apache License, Version 2.0 (the "License");
+ * you may not use this software 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.
+ *
+ * Unless otherwise specified, all documentation contained herein is licensed
+ * under the Creative Commons License, Attribution 4.0 Intl. (the "License");
+ * you may not use this documentation except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * https://creativecommons.org/licenses/by/4.0/
+ *
+ * Unless required by applicable law or agreed to in writing, documentation
+ * 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.
+ *
+ * ============LICENSE_END============================================
+ *
+ * ECOMP is a trademark and service mark of AT&T Intellectual Property.
+ */
+package org.onap.portalapp.portal.domain;
+
+import org.onap.portalsdk.core.domain.support.DomainVo;
+
+public class WidgetCatalogParameter extends DomainVo{
+
+ private static final long serialVersionUID = 1L;
+
+ public WidgetCatalogParameter() {
+
+ }
+ private Long id;
+
+ private Long widgetId;
+
+ private Long userId;
+
+ private Long paramId;
+
+ private String user_value;
+
+ public Long getId() {
+ return id;
+ }
+
+ public void setId(Long id) {
+ this.id = id;
+ }
+
+ public Long getWidgetId() {
+ return widgetId;
+ }
+
+ public void setWidgetId(Long widgetId) {
+ this.widgetId = widgetId;
+ }
+
+ public String getUser_value() {
+ return user_value;
+ }
+
+ public void setUser_value(String user_value) {
+ this.user_value = user_value;
+ }
+
+ public Long getParamId() {
+ return paramId;
+ }
+
+ public void setParamId(Long paramId) {
+ this.paramId = paramId;
+ }
+
+ public Long getUserId() {
+ return userId;
+ }
+
+ public void setUserId(Long userId) {
+ this.userId = userId;
+ }
+
+ @Override
+ public String toString() {
+ return "WidgetCatalogParameter [id=" + id + ", widgetId=" + widgetId + ", userId=" + userId + ", paramId="
+ + paramId + ", user_value=" + user_value + "]";
+ }
+
+
+
+
+}
diff --git a/ecomp-portal-BE-common/src/main/java/org/onap/portalapp/portal/domain/WidgetParameterResult.java b/ecomp-portal-BE-common/src/main/java/org/onap/portalapp/portal/domain/WidgetParameterResult.java
new file mode 100644
index 00000000..0251c326
--- /dev/null
+++ b/ecomp-portal-BE-common/src/main/java/org/onap/portalapp/portal/domain/WidgetParameterResult.java
@@ -0,0 +1,88 @@
+/*-
+ * ============LICENSE_START==========================================
+ * ONAP Portal
+ * ===================================================================
+ * Copyright (C) 2017 AT&T Intellectual Property. All rights reserved.
+ * ===================================================================
+ *
+ * Unless otherwise specified, all software contained herein is licensed
+ * under the Apache License, Version 2.0 (the "License");
+ * you may not use this software 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.
+ *
+ * Unless otherwise specified, all documentation contained herein is licensed
+ * under the Creative Commons License, Attribution 4.0 Intl. (the "License");
+ * you may not use this documentation except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * https://creativecommons.org/licenses/by/4.0/
+ *
+ * Unless required by applicable law or agreed to in writing, documentation
+ * 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.
+ *
+ * ============LICENSE_END============================================
+ *
+ * ECOMP is a trademark and service mark of AT&T Intellectual Property.
+ */
+package org.onap.portalapp.portal.domain;
+
+public class WidgetParameterResult {
+
+ private Long param_id;
+
+ private String param_key;
+
+ private String user_value;
+
+ private String default_value;
+
+ public Long getParam_id() {
+ return param_id;
+ }
+
+ public void setParam_id(Long param_id) {
+ this.param_id = param_id;
+ }
+
+ public String getParam_key() {
+ return param_key;
+ }
+
+ public void setParam_key(String param_key) {
+ this.param_key = param_key;
+ }
+
+ public String getUser_value() {
+ return user_value;
+ }
+
+ public void setUser_value(String user_value) {
+ this.user_value = user_value;
+ }
+
+ public String getDefault_value() {
+ return default_value;
+ }
+
+ public void setDefault_value(String default_value) {
+ this.default_value = default_value;
+ }
+
+ @Override
+ public String toString() {
+ return "WidgetParameterResult [param_id=" + param_id + ", param_key=" + param_key + ", user_value=" + user_value
+ + ", default_value=" + default_value + "]";
+ }
+
+}
diff --git a/ecomp-portal-BE-common/src/main/java/org/onap/portalapp/portal/domain/WidgetServiceHeaders.java b/ecomp-portal-BE-common/src/main/java/org/onap/portalapp/portal/domain/WidgetServiceHeaders.java
new file mode 100644
index 00000000..e6360e5b
--- /dev/null
+++ b/ecomp-portal-BE-common/src/main/java/org/onap/portalapp/portal/domain/WidgetServiceHeaders.java
@@ -0,0 +1,71 @@
+/*-
+ * ============LICENSE_START==========================================
+ * ONAP Portal
+ * ===================================================================
+ * Copyright (C) 2017 AT&T Intellectual Property. All rights reserved.
+ * ===================================================================
+ *
+ * Unless otherwise specified, all software contained herein is licensed
+ * under the Apache License, Version 2.0 (the "License");
+ * you may not use this software 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.
+ *
+ * Unless otherwise specified, all documentation contained herein is licensed
+ * under the Creative Commons License, Attribution 4.0 Intl. (the "License");
+ * you may not use this documentation except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * https://creativecommons.org/licenses/by/4.0/
+ *
+ * Unless required by applicable law or agreed to in writing, documentation
+ * 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.
+ *
+ * ============LICENSE_END============================================
+ *
+ * ECOMP is a trademark and service mark of AT&T Intellectual Property.
+ */
+package org.onap.portalapp.portal.domain;
+
+import java.nio.charset.Charset;
+
+import org.apache.commons.codec.binary.Base64;
+import org.springframework.http.HttpHeaders;
+import org.onap.portalapp.portal.utils.EcompPortalUtils;
+import org.onap.portalsdk.core.onboarding.util.CipherUtil;
+
+public class WidgetServiceHeaders {
+
+ private static HttpHeaders widgetHeaders;
+
+ private WidgetServiceHeaders(){}
+
+ public static HttpHeaders getInstance() throws Exception{
+ if(null == widgetHeaders){
+ return new HttpHeaders(){{
+
+ String username = EcompPortalUtils.getPropertyOrDefault("microservices.widget.username", "widget_user");
+ String password = CipherUtil.decryptPKC(EcompPortalUtils.getPropertyOrDefault("microservices.widget.password", "widget_password"));
+ String auth = username + ":" + password;
+ byte[] encodedAuth = Base64.encodeBase64(
+ auth.getBytes(Charset.forName("US-ASCII")) );
+ String authHeader = "Basic " + new String( encodedAuth );
+ set( "Authorization", authHeader );
+ }
+ };
+ }
+ else
+ return widgetHeaders;
+
+ }
+}
diff --git a/ecomp-portal-BE-common/src/main/java/org/onap/portalapp/portal/ecomp/model/AppCatalogItem.java b/ecomp-portal-BE-common/src/main/java/org/onap/portalapp/portal/ecomp/model/AppCatalogItem.java
new file mode 100644
index 00000000..9701dd5d
--- /dev/null
+++ b/ecomp-portal-BE-common/src/main/java/org/onap/portalapp/portal/ecomp/model/AppCatalogItem.java
@@ -0,0 +1,276 @@
+/*-
+ * ============LICENSE_START==========================================
+ * ONAP Portal
+ * ===================================================================
+ * Copyright (C) 2017 AT&T Intellectual Property. All rights reserved.
+ * ===================================================================
+ *
+ * Unless otherwise specified, all software contained herein is licensed
+ * under the Apache License, Version 2.0 (the "License");
+ * you may not use this software 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.
+ *
+ * Unless otherwise specified, all documentation contained herein is licensed
+ * under the Creative Commons License, Attribution 4.0 Intl. (the "License");
+ * you may not use this documentation except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * https://creativecommons.org/licenses/by/4.0/
+ *
+ * Unless required by applicable law or agreed to in writing, documentation
+ * 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.
+ *
+ * ============LICENSE_END============================================
+ *
+ * ECOMP is a trademark and service mark of AT&T Intellectual Property.
+ */
+package org.onap.portalapp.portal.ecomp.model;
+
+import javax.persistence.Entity;
+import javax.persistence.Id;
+
+import org.onap.portalsdk.core.domain.support.DomainVo;
+import com.fasterxml.jackson.annotation.JsonInclude;
+
+/**
+ * This model of an application catalog entry has some EPApp fields plus
+ * additional fields to indicate access(ible) and select(ed) statuses.
+ */
+@Entity
+@JsonInclude(JsonInclude.Include.NON_NULL)
+public class AppCatalogItem extends DomainVo {
+
+ private static final long serialVersionUID = 6619663784935017846L;
+
+ @Id
+ private Long id;
+ private String name;
+ private String mlAppName;
+ private String imageUrl;
+ private String description;
+ private String notes;
+ private String url;
+ private String alternateUrl;
+ private Boolean restricted;
+ private Boolean open;
+ private Boolean access;
+ private Boolean select;
+ private Boolean pending;
+
+ public Long getId() {
+ return id;
+ }
+
+ public void setId(Long id) {
+ this.id = id;
+ }
+
+ public String getName() {
+ return name;
+ }
+
+ public void setName(String name) {
+ this.name = name;
+ }
+
+ public String getMlAppName() {
+ return mlAppName;
+ }
+
+ public void setMlAppName(String mlAppName) {
+ this.mlAppName = mlAppName;
+ }
+
+ public String getImageUrl() {
+ return imageUrl;
+ }
+
+ public void setImageUrl(String imageUrl) {
+ this.imageUrl = imageUrl;
+ }
+
+ public String getDescription() {
+ return description;
+ }
+
+ public void setDescription(String description) {
+ this.description = description;
+ }
+
+ public String getNotes() {
+ return notes;
+ }
+
+ public void setNotes(String notes) {
+ this.notes = notes;
+ }
+
+ public String getUrl() {
+ return url;
+ }
+
+ public void setUrl(String url) {
+ this.url = url;
+ }
+
+ public String getAlternateUrl() {
+ return alternateUrl;
+ }
+
+ public void setAlternateUrl(String alternateUrl) {
+ this.alternateUrl = alternateUrl;
+ }
+
+ public Boolean getRestricted() {
+ return restricted;
+ }
+
+ public void setRestricted(Boolean restricted) {
+ this.restricted = restricted;
+ }
+
+ public Boolean getOpen() {
+ return open;
+ }
+
+ public void setOpen(Boolean open) {
+ this.open = open;
+ }
+
+ public Boolean getAccess() {
+ return access;
+ }
+
+ public void setAccess(Boolean access) {
+ this.access = access;
+ }
+
+ public Boolean getSelect() {
+ return select;
+ }
+
+ public void setSelect(Boolean select) {
+ this.select = select;
+ }
+
+ public Boolean getPending() {
+ return pending;
+ }
+
+ public void setPending(Boolean pending) {
+ this.pending = pending;
+ }
+
+ public static long getSerialversionuid() {
+ return serialVersionUID;
+ }
+
+ @Override
+ public String toString() {
+ return "AppCatalogItem [id=" + id + ", name=" + name + ", access=" + access + ", select=" + select
+ + ", pending=" + pending + "]";
+ }
+
+ @Override
+ public int hashCode() {
+ final int prime = 31;
+ int result = 1;
+ result = prime * result + ((access == null) ? 0 : access.hashCode());
+ result = prime * result + ((alternateUrl == null) ? 0 : alternateUrl.hashCode());
+ result = prime * result + ((description == null) ? 0 : description.hashCode());
+ result = prime * result + ((id == null) ? 0 : id.hashCode());
+ result = prime * result + ((imageUrl == null) ? 0 : imageUrl.hashCode());
+ result = prime * result + ((name == null) ? 0 : name.hashCode());
+ result = prime * result + ((notes == null) ? 0 : notes.hashCode());
+ result = prime * result + ((open == null) ? 0 : open.hashCode());
+ result = prime * result + ((pending == null) ? 0 : pending.hashCode());
+ result = prime * result + ((restricted == null) ? 0 : restricted.hashCode());
+ result = prime * result + ((select == null) ? 0 : select.hashCode());
+ result = prime * result + ((url == null) ? 0 : url.hashCode());
+ return result;
+ }
+
+ @Override
+ public boolean equals(Object obj) {
+ if (this == obj)
+ return true;
+ if (obj == null)
+ return false;
+ if (getClass() != obj.getClass())
+ return false;
+ AppCatalogItem other = (AppCatalogItem) obj;
+ if (access == null) {
+ if (other.access != null)
+ return false;
+ } else if (!access.equals(other.access))
+ return false;
+ if (alternateUrl == null) {
+ if (other.alternateUrl != null)
+ return false;
+ } else if (!alternateUrl.equals(other.alternateUrl))
+ return false;
+ if (description == null) {
+ if (other.description != null)
+ return false;
+ } else if (!description.equals(other.description))
+ return false;
+ if (id == null) {
+ if (other.id != null)
+ return false;
+ } else if (!id.equals(other.id))
+ return false;
+ if (imageUrl == null) {
+ if (other.imageUrl != null)
+ return false;
+ } else if (!imageUrl.equals(other.imageUrl))
+ return false;
+ if (name == null) {
+ if (other.name != null)
+ return false;
+ } else if (!name.equals(other.name))
+ return false;
+ if (notes == null) {
+ if (other.notes != null)
+ return false;
+ } else if (!notes.equals(other.notes))
+ return false;
+ if (open == null) {
+ if (other.open != null)
+ return false;
+ } else if (!open.equals(other.open))
+ return false;
+ if (pending == null) {
+ if (other.pending != null)
+ return false;
+ } else if (!pending.equals(other.pending))
+ return false;
+ if (restricted == null) {
+ if (other.restricted != null)
+ return false;
+ } else if (!restricted.equals(other.restricted))
+ return false;
+ if (select == null) {
+ if (other.select != null)
+ return false;
+ } else if (!select.equals(other.select))
+ return false;
+ if (url == null) {
+ if (other.url != null)
+ return false;
+ } else if (!url.equals(other.url))
+ return false;
+ return true;
+ }
+
+}
diff --git a/ecomp-portal-BE-common/src/main/java/org/onap/portalapp/portal/ecomp/model/AppCategoryFunctionsItem.java b/ecomp-portal-BE-common/src/main/java/org/onap/portalapp/portal/ecomp/model/AppCategoryFunctionsItem.java
new file mode 100644
index 00000000..d22c26d7
--- /dev/null
+++ b/ecomp-portal-BE-common/src/main/java/org/onap/portalapp/portal/ecomp/model/AppCategoryFunctionsItem.java
@@ -0,0 +1,158 @@
+/*-
+ * ============LICENSE_START==========================================
+ * ONAP Portal
+ * ===================================================================
+ * Copyright (C) 2017 AT&T Intellectual Property. All rights reserved.
+ * ===================================================================
+ *
+ * Unless otherwise specified, all software contained herein is licensed
+ * under the Apache License, Version 2.0 (the "License");
+ * you may not use this software 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.
+ *
+ * Unless otherwise specified, all documentation contained herein is licensed
+ * under the Creative Commons License, Attribution 4.0 Intl. (the "License");
+ * you may not use this documentation except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * https://creativecommons.org/licenses/by/4.0/
+ *
+ * Unless required by applicable law or agreed to in writing, documentation
+ * 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.
+ *
+ * ============LICENSE_END============================================
+ *
+ * ECOMP is a trademark and service mark of AT&T Intellectual Property.
+ */
+package org.onap.portalapp.portal.ecomp.model;
+
+import javax.persistence.Entity;
+import javax.persistence.Id;
+
+import org.onap.portalsdk.core.domain.support.DomainVo;
+import com.fasterxml.jackson.annotation.JsonInclude;
+
+/**
+ * Carries row information for the functional table on the Contact Us page.
+ */
+@Entity
+@JsonInclude(JsonInclude.Include.NON_NULL)
+public class AppCategoryFunctionsItem extends DomainVo {
+
+ private static final long serialVersionUID = -1573834082471206458L;
+
+ @Id
+ private String rowId;
+ private String appId;
+ private String application;
+ private String category;
+ private String functions;
+
+ public String getRowId() {
+ return rowId;
+ }
+
+ public void setRowId(String rowId) {
+ this.rowId = rowId;
+ }
+
+ public String getAppId() {
+ return appId;
+ }
+
+ public void setAppId(String appId) {
+ this.appId = appId;
+ }
+
+ public String getApplication() {
+ return application;
+ }
+
+ public void setApplication(String appName) {
+ this.application = appName;
+ }
+
+ public String getCategory() {
+ return category;
+ }
+
+ public void setCategory(String category) {
+ this.category = category;
+ }
+
+ public String getFunctions() {
+ return functions;
+ }
+
+ public void setFunctions(String functions) {
+ this.functions = functions;
+ }
+
+ @Override
+ public String toString() {
+ return "AppCategoryFunctionsItem [rowId=" + rowId + ", appId=" + appId + ", application=" + application
+ + ", category=" + category + ", functions=" + functions + "]";
+ }
+
+ @Override
+ public int hashCode() {
+ final int prime = 31;
+ int result = 1;
+ result = prime * result + ((appId == null) ? 0 : appId.hashCode());
+ result = prime * result + ((application == null) ? 0 : application.hashCode());
+ result = prime * result + ((category == null) ? 0 : category.hashCode());
+ result = prime * result + ((functions == null) ? 0 : functions.hashCode());
+ result = prime * result + ((rowId == null) ? 0 : rowId.hashCode());
+ return result;
+ }
+
+ @Override
+ public boolean equals(Object obj) {
+ if (this == obj)
+ return true;
+ if (obj == null)
+ return false;
+ if (getClass() != obj.getClass())
+ return false;
+ AppCategoryFunctionsItem other = (AppCategoryFunctionsItem) obj;
+ if (appId == null) {
+ if (other.appId != null)
+ return false;
+ } else if (!appId.equals(other.appId))
+ return false;
+ if (application == null) {
+ if (other.application != null)
+ return false;
+ } else if (!application.equals(other.application))
+ return false;
+ if (category == null) {
+ if (other.category != null)
+ return false;
+ } else if (!category.equals(other.category))
+ return false;
+ if (functions == null) {
+ if (other.functions != null)
+ return false;
+ } else if (!functions.equals(other.functions))
+ return false;
+ if (rowId == null) {
+ if (other.rowId != null)
+ return false;
+ } else if (!rowId.equals(other.rowId))
+ return false;
+ return true;
+ }
+
+
+}
diff --git a/ecomp-portal-BE-common/src/main/java/org/onap/portalapp/portal/ecomp/model/AppContactUsItem.java b/ecomp-portal-BE-common/src/main/java/org/onap/portalapp/portal/ecomp/model/AppContactUsItem.java
new file mode 100644
index 00000000..9afde2b9
--- /dev/null
+++ b/ecomp-portal-BE-common/src/main/java/org/onap/portalapp/portal/ecomp/model/AppContactUsItem.java
@@ -0,0 +1,189 @@
+/*-
+ * ============LICENSE_START==========================================
+ * ONAP Portal
+ * ===================================================================
+ * Copyright (C) 2017 AT&T Intellectual Property. All rights reserved.
+ * ===================================================================
+ *
+ * Unless otherwise specified, all software contained herein is licensed
+ * under the Apache License, Version 2.0 (the "License");
+ * you may not use this software 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.
+ *
+ * Unless otherwise specified, all documentation contained herein is licensed
+ * under the Creative Commons License, Attribution 4.0 Intl. (the "License");
+ * you may not use this documentation except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * https://creativecommons.org/licenses/by/4.0/
+ *
+ * Unless required by applicable law or agreed to in writing, documentation
+ * 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.
+ *
+ * ============LICENSE_END============================================
+ *
+ * ECOMP is a trademark and service mark of AT&T Intellectual Property.
+ */
+package org.onap.portalapp.portal.ecomp.model;
+
+import javax.persistence.Entity;
+import javax.persistence.Id;
+
+import org.onap.portalsdk.core.domain.support.DomainVo;
+import com.fasterxml.jackson.annotation.JsonInclude;
+
+/**
+ * An easily serializable version of row information from the fn_app_contact_us
+ * table; specifically this has an app ID instead of an EPApp object.
+ */
+@Entity
+@JsonInclude(JsonInclude.Include.NON_NULL)
+public class AppContactUsItem extends DomainVo {
+
+ private static final long serialVersionUID = 6964210807573346262L;
+
+ @Id
+ private Long appId;
+ private String appName;
+ private String description;
+ private String contactName;
+ private String contactEmail;
+ private String url;
+ private String activeYN;
+
+ public Long getAppId() {
+ return appId;
+ }
+
+ public void setAppId(Long appId) {
+ this.appId = appId;
+ }
+
+ public String getAppName() {
+ return appName;
+ }
+
+ public void setAppName(String appName) {
+ this.appName = appName;
+ }
+
+ public String getDescription() {
+ return description;
+ }
+
+ public void setDescription(String description) {
+ this.description = description;
+ }
+
+ public String getContactName() {
+ return contactName;
+ }
+
+ public void setContactName(String contactName) {
+ this.contactName = contactName;
+ }
+
+ public String getContactEmail() {
+ return contactEmail;
+ }
+
+ public void setContactEmail(String contactEmail) {
+ this.contactEmail = contactEmail;
+ }
+
+ public String getUrl() {
+ return url;
+ }
+
+ public void setUrl(String url) {
+ this.url = url;
+ }
+
+ public String getActiveYN() {
+ return activeYN;
+ }
+
+ public void setActiveYN(String activeYN) {
+ this.activeYN = activeYN;
+ }
+
+ @Override
+ public int hashCode() {
+ final int prime = 31;
+ int result = 1;
+ result = prime * result + ((activeYN == null) ? 0 : activeYN.hashCode());
+ result = prime * result + ((appId == null) ? 0 : appId.hashCode());
+ result = prime * result + ((appName == null) ? 0 : appName.hashCode());
+ result = prime * result + ((contactEmail == null) ? 0 : contactEmail.hashCode());
+ result = prime * result + ((contactName == null) ? 0 : contactName.hashCode());
+ result = prime * result + ((description == null) ? 0 : description.hashCode());
+ result = prime * result + ((url == null) ? 0 : url.hashCode());
+ return result;
+ }
+
+ @Override
+ public boolean equals(Object obj) {
+ if (this == obj)
+ return true;
+ if (obj == null)
+ return false;
+ if (getClass() != obj.getClass())
+ return false;
+ AppContactUsItem other = (AppContactUsItem) obj;
+ if (activeYN == null) {
+ if (other.activeYN != null)
+ return false;
+ } else if (!activeYN.equals(other.activeYN))
+ return false;
+ if (appId == null) {
+ if (other.appId != null)
+ return false;
+ } else if (!appId.equals(other.appId))
+ return false;
+ if (appName == null) {
+ if (other.appName != null)
+ return false;
+ } else if (!appName.equals(other.appName))
+ return false;
+ if (contactEmail == null) {
+ if (other.contactEmail != null)
+ return false;
+ } else if (!contactEmail.equals(other.contactEmail))
+ return false;
+ if (contactName == null) {
+ if (other.contactName != null)
+ return false;
+ } else if (!contactName.equals(other.contactName))
+ return false;
+ if (description == null) {
+ if (other.description != null)
+ return false;
+ } else if (!description.equals(other.description))
+ return false;
+ if (url == null) {
+ if (other.url != null)
+ return false;
+ } else if (!url.equals(other.url))
+ return false;
+ return true;
+ }
+
+ @Override
+ public String toString() {
+ return "AppContactUsItem [appId=" + appId + ", appName=" + appName + ", description=" + description
+ + ", contactName=" + contactName + ", contactEmail=" + contactEmail + ", url=" + url + ", activeYN="
+ + activeYN + "]";
+ }
+
+}
diff --git a/ecomp-portal-BE-common/src/main/java/org/onap/portalapp/portal/ecomp/model/CommonWidgetsEnum.java b/ecomp-portal-BE-common/src/main/java/org/onap/portalapp/portal/ecomp/model/CommonWidgetsEnum.java
new file mode 100644
index 00000000..43079a77
--- /dev/null
+++ b/ecomp-portal-BE-common/src/main/java/org/onap/portalapp/portal/ecomp/model/CommonWidgetsEnum.java
@@ -0,0 +1,54 @@
+/*-
+ * ============LICENSE_START==========================================
+ * ONAP Portal
+ * ===================================================================
+ * Copyright (C) 2017 AT&T Intellectual Property. All rights reserved.
+ * ===================================================================
+ *
+ * Unless otherwise specified, all software contained herein is licensed
+ * under the Apache License, Version 2.0 (the "License");
+ * you may not use this software 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.
+ *
+ * Unless otherwise specified, all documentation contained herein is licensed
+ * under the Creative Commons License, Attribution 4.0 Intl. (the "License");
+ * you may not use this documentation except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * https://creativecommons.org/licenses/by/4.0/
+ *
+ * Unless required by applicable law or agreed to in writing, documentation
+ * 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.
+ *
+ * ============LICENSE_END============================================
+ *
+ * ECOMP is a trademark and service mark of AT&T Intellectual Property.
+ */
+package org.onap.portalapp.portal.ecomp.model;
+
+public enum CommonWidgetsEnum{
+ NEWS("news"),
+ EVENTS("events"),
+ RESOURCES("resources");
+
+ private String value;
+ private CommonWidgetsEnum(String value){
+ this.value = value;
+ }
+
+ @Override
+ public String toString() {
+ return value;
+ }
+}
diff --git a/ecomp-portal-BE-common/src/main/java/org/onap/portalapp/portal/ecomp/model/PortalRestResponse.java b/ecomp-portal-BE-common/src/main/java/org/onap/portalapp/portal/ecomp/model/PortalRestResponse.java
new file mode 100644
index 00000000..7d1f432e
--- /dev/null
+++ b/ecomp-portal-BE-common/src/main/java/org/onap/portalapp/portal/ecomp/model/PortalRestResponse.java
@@ -0,0 +1,119 @@
+/*-
+ * ============LICENSE_START==========================================
+ * ONAP Portal
+ * ===================================================================
+ * Copyright (C) 2017 AT&T Intellectual Property. All rights reserved.
+ * ===================================================================
+ *
+ * Unless otherwise specified, all software contained herein is licensed
+ * under the Apache License, Version 2.0 (the "License");
+ * you may not use this software 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.
+ *
+ * Unless otherwise specified, all documentation contained herein is licensed
+ * under the Creative Commons License, Attribution 4.0 Intl. (the "License");
+ * you may not use this documentation except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * https://creativecommons.org/licenses/by/4.0/
+ *
+ * Unless required by applicable law or agreed to in writing, documentation
+ * 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.
+ *
+ * ============LICENSE_END============================================
+ *
+ * ECOMP is a trademark and service mark of AT&T Intellectual Property.
+ */
+package org.onap.portalapp.portal.ecomp.model;
+
+public class PortalRestResponse<T> {
+
+ private PortalRestStatusEnum status;
+ private String message;
+
+ private T response;
+
+ public PortalRestResponse(){};
+
+ public PortalRestResponse(PortalRestStatusEnum status, String message, T response){
+ this.status = status;
+ this.message = message;
+ this.response = response;
+ }
+
+ public PortalRestStatusEnum getStatus() {
+ return status;
+ }
+
+ public void setStatus(PortalRestStatusEnum status) {
+ this.status = status;
+ }
+
+ public String getMessage() {
+ return message;
+ }
+
+ public void setMessage(String message) {
+ this.message = message;
+ }
+
+ public T getResponse() {
+ return response;
+ }
+
+ public void setResponse(T response) {
+ this.response = response;
+ }
+
+ @Override
+ public String toString() {
+ return "PortalRestResponse [status=" + status + ", message=" + message + ", response=" + response + "]";
+ }
+
+ @Override
+ public int hashCode() {
+ final int prime = 31;
+ int result = 1;
+ result = prime * result + ((message == null) ? 0 : message.hashCode());
+ result = prime * result + ((response == null) ? 0 : response.hashCode());
+ result = prime * result + ((status == null) ? 0 : status.hashCode());
+ return result;
+ }
+
+ @Override
+ public boolean equals(Object obj) {
+ if (this == obj)
+ return true;
+ if (obj == null)
+ return false;
+ if (getClass() != obj.getClass())
+ return false;
+ PortalRestResponse other = (PortalRestResponse) obj;
+ if (message == null) {
+ if (other.message != null)
+ return false;
+ } else if (!message.equals(other.message))
+ return false;
+ if (response == null) {
+ if (other.response != null)
+ return false;
+ } else if (!response.equals(other.response))
+ return false;
+ if (status != other.status)
+ return false;
+ return true;
+ };
+
+
+}
diff --git a/ecomp-portal-BE-common/src/main/java/org/onap/portalapp/portal/ecomp/model/PortalRestStatusEnum.java b/ecomp-portal-BE-common/src/main/java/org/onap/portalapp/portal/ecomp/model/PortalRestStatusEnum.java
new file mode 100644
index 00000000..5989ff8c
--- /dev/null
+++ b/ecomp-portal-BE-common/src/main/java/org/onap/portalapp/portal/ecomp/model/PortalRestStatusEnum.java
@@ -0,0 +1,54 @@
+/*-
+ * ============LICENSE_START==========================================
+ * ONAP Portal
+ * ===================================================================
+ * Copyright (C) 2017 AT&T Intellectual Property. All rights reserved.
+ * ===================================================================
+ *
+ * Unless otherwise specified, all software contained herein is licensed
+ * under the Apache License, Version 2.0 (the "License");
+ * you may not use this software 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.
+ *
+ * Unless otherwise specified, all documentation contained herein is licensed
+ * under the Creative Commons License, Attribution 4.0 Intl. (the "License");
+ * you may not use this documentation except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * https://creativecommons.org/licenses/by/4.0/
+ *
+ * Unless required by applicable law or agreed to in writing, documentation
+ * 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.
+ *
+ * ============LICENSE_END============================================
+ *
+ * ECOMP is a trademark and service mark of AT&T Intellectual Property.
+ */
+package org.onap.portalapp.portal.ecomp.model;
+
+public enum PortalRestStatusEnum{
+ OK("ok"),
+ WARN("WARNING"),
+ ERROR("error");
+
+ private String value;
+ private PortalRestStatusEnum(String value){
+ this.value = value;
+ }
+
+ @Override
+ public String toString() {
+ return value;
+ }
+}
diff --git a/ecomp-portal-BE-common/src/main/java/org/onap/portalapp/portal/ecomp/model/SearchResultItem.java b/ecomp-portal-BE-common/src/main/java/org/onap/portalapp/portal/ecomp/model/SearchResultItem.java
new file mode 100644
index 00000000..6a62543e
--- /dev/null
+++ b/ecomp-portal-BE-common/src/main/java/org/onap/portalapp/portal/ecomp/model/SearchResultItem.java
@@ -0,0 +1,104 @@
+/*-
+ * ============LICENSE_START==========================================
+ * ONAP Portal
+ * ===================================================================
+ * Copyright (C) 2017 AT&T Intellectual Property. All rights reserved.
+ * ===================================================================
+ *
+ * Unless otherwise specified, all software contained herein is licensed
+ * under the Apache License, Version 2.0 (the "License");
+ * you may not use this software 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.
+ *
+ * Unless otherwise specified, all documentation contained herein is licensed
+ * under the Creative Commons License, Attribution 4.0 Intl. (the "License");
+ * you may not use this documentation except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * https://creativecommons.org/licenses/by/4.0/
+ *
+ * Unless required by applicable law or agreed to in writing, documentation
+ * 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.
+ *
+ * ============LICENSE_END============================================
+ *
+ * ECOMP is a trademark and service mark of AT&T Intellectual Property.
+ */
+package org.onap.portalapp.portal.ecomp.model;
+
+import javax.persistence.Entity;
+import javax.persistence.Id;
+
+import org.onap.portalsdk.core.domain.support.DomainVo;
+import com.fasterxml.jackson.annotation.JsonInclude;
+import com.fasterxml.jackson.annotation.JsonProperty;
+
+@Entity
+@JsonInclude(JsonInclude.Include.NON_NULL)
+public class SearchResultItem extends DomainVo{
+
+ @Id
+ private String rowId;
+
+ @JsonProperty("category")
+ private String category;
+
+ @JsonProperty("name")
+ private String name;
+
+ @JsonProperty("target")
+ private String target;
+
+ @JsonProperty("uuid")
+ private String uuid;
+
+ public String getUuid() {
+ return uuid;
+ }
+ public void setUuid(String uuid) {
+ this.uuid = uuid;
+ }
+ public String getRowId() {
+ return rowId;
+ }
+ public void setRowId(String rowId) {
+ this.rowId = rowId;
+ }
+ public String getCategory() {
+ return category;
+ }
+ public void setCategory(String category) {
+ this.category = category;
+ }
+ public String getName() {
+ return name;
+ }
+ public void setName(String name) {
+ this.name = name;
+ }
+
+ public String getTarget() {
+ return target;
+ }
+ public void setTarget(String target) {
+ this.target = target;
+ }
+ @Override
+ public String toString() {
+ return "SearchResultItem [rowId=" + rowId + ", category=" + category + ", name=" + name + ", target=" + target
+ + ", uuid=" + uuid + "]";
+ }
+
+
+}
diff --git a/ecomp-portal-BE-common/src/main/java/org/onap/portalapp/portal/exceptions/DeleteDomainObjectFailedException.java b/ecomp-portal-BE-common/src/main/java/org/onap/portalapp/portal/exceptions/DeleteDomainObjectFailedException.java
new file mode 100644
index 00000000..420184f0
--- /dev/null
+++ b/ecomp-portal-BE-common/src/main/java/org/onap/portalapp/portal/exceptions/DeleteDomainObjectFailedException.java
@@ -0,0 +1,47 @@
+/*-
+ * ============LICENSE_START==========================================
+ * ONAP Portal
+ * ===================================================================
+ * Copyright (C) 2017 AT&T Intellectual Property. All rights reserved.
+ * ===================================================================
+ *
+ * Unless otherwise specified, all software contained herein is licensed
+ * under the Apache License, Version 2.0 (the "License");
+ * you may not use this software 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.
+ *
+ * Unless otherwise specified, all documentation contained herein is licensed
+ * under the Creative Commons License, Attribution 4.0 Intl. (the "License");
+ * you may not use this documentation except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * https://creativecommons.org/licenses/by/4.0/
+ *
+ * Unless required by applicable law or agreed to in writing, documentation
+ * 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.
+ *
+ * ============LICENSE_END============================================
+ *
+ * ECOMP is a trademark and service mark of AT&T Intellectual Property.
+ */
+package org.onap.portalapp.portal.exceptions;
+
+public class DeleteDomainObjectFailedException extends Exception{
+
+ private static final long serialVersionUID = -4591508985449251121L;
+
+ public DeleteDomainObjectFailedException(String msg) {
+ super(msg);
+ }
+}
diff --git a/ecomp-portal-BE-common/src/main/java/org/onap/portalapp/portal/exceptions/DuplicateRecordException.java b/ecomp-portal-BE-common/src/main/java/org/onap/portalapp/portal/exceptions/DuplicateRecordException.java
new file mode 100644
index 00000000..1f279f40
--- /dev/null
+++ b/ecomp-portal-BE-common/src/main/java/org/onap/portalapp/portal/exceptions/DuplicateRecordException.java
@@ -0,0 +1,47 @@
+/*-
+ * ============LICENSE_START==========================================
+ * ONAP Portal
+ * ===================================================================
+ * Copyright (C) 2017 AT&T Intellectual Property. All rights reserved.
+ * ===================================================================
+ *
+ * Unless otherwise specified, all software contained herein is licensed
+ * under the Apache License, Version 2.0 (the "License");
+ * you may not use this software 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.
+ *
+ * Unless otherwise specified, all documentation contained herein is licensed
+ * under the Creative Commons License, Attribution 4.0 Intl. (the "License");
+ * you may not use this documentation except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * https://creativecommons.org/licenses/by/4.0/
+ *
+ * Unless required by applicable law or agreed to in writing, documentation
+ * 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.
+ *
+ * ============LICENSE_END============================================
+ *
+ * ECOMP is a trademark and service mark of AT&T Intellectual Property.
+ */
+package org.onap.portalapp.portal.exceptions;
+
+public class DuplicateRecordException extends Exception{
+
+ private static final long serialVersionUID = 2759542750310357001L;
+
+ public DuplicateRecordException(String msg) {
+ super(msg);
+ }
+}
diff --git a/ecomp-portal-BE-common/src/main/java/org/onap/portalapp/portal/exceptions/ExternalAuthSystemException.java b/ecomp-portal-BE-common/src/main/java/org/onap/portalapp/portal/exceptions/ExternalAuthSystemException.java
new file mode 100644
index 00000000..1c17c2c0
--- /dev/null
+++ b/ecomp-portal-BE-common/src/main/java/org/onap/portalapp/portal/exceptions/ExternalAuthSystemException.java
@@ -0,0 +1,47 @@
+/*-
+ * ============LICENSE_START==========================================
+ * ONAP Portal
+ * ===================================================================
+ * Copyright (C) 2017 AT&T Intellectual Property. All rights reserved.
+ * ===================================================================
+ *
+ * Unless otherwise specified, all software contained herein is licensed
+ * under the Apache License, Version 2.0 (the "License");
+ * you may not use this software 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.
+ *
+ * Unless otherwise specified, all documentation contained herein is licensed
+ * under the Creative Commons License, Attribution 4.0 Intl. (the "License");
+ * you may not use this documentation except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * https://creativecommons.org/licenses/by/4.0/
+ *
+ * Unless required by applicable law or agreed to in writing, documentation
+ * 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.
+ *
+ * ============LICENSE_END============================================
+ *
+ * ECOMP is a trademark and service mark of AT&T Intellectual Property.
+ */
+package org.onap.portalapp.portal.exceptions;
+
+public class ExternalAuthSystemException extends Exception {
+
+ private static final long serialVersionUID = -4576754924998287267L;
+
+ public ExternalAuthSystemException(String msg) {
+ super(msg);
+ }
+}
diff --git a/ecomp-portal-BE-common/src/main/java/org/onap/portalapp/portal/exceptions/InactiveApplicationException.java b/ecomp-portal-BE-common/src/main/java/org/onap/portalapp/portal/exceptions/InactiveApplicationException.java
new file mode 100644
index 00000000..8a7d70c5
--- /dev/null
+++ b/ecomp-portal-BE-common/src/main/java/org/onap/portalapp/portal/exceptions/InactiveApplicationException.java
@@ -0,0 +1,47 @@
+/*-
+ * ============LICENSE_START==========================================
+ * ONAP Portal
+ * ===================================================================
+ * Copyright (C) 2017 AT&T Intellectual Property. All rights reserved.
+ * ===================================================================
+ *
+ * Unless otherwise specified, all software contained herein is licensed
+ * under the Apache License, Version 2.0 (the "License");
+ * you may not use this software 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.
+ *
+ * Unless otherwise specified, all documentation contained herein is licensed
+ * under the Creative Commons License, Attribution 4.0 Intl. (the "License");
+ * you may not use this documentation except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * https://creativecommons.org/licenses/by/4.0/
+ *
+ * Unless required by applicable law or agreed to in writing, documentation
+ * 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.
+ *
+ * ============LICENSE_END============================================
+ *
+ * ECOMP is a trademark and service mark of AT&T Intellectual Property.
+ */
+package org.onap.portalapp.portal.exceptions;
+
+public class InactiveApplicationException extends Exception{
+
+ private static final long serialVersionUID = -4641226040102977745L;
+
+ public InactiveApplicationException(String msg) {
+ super(msg);
+ }
+}
diff --git a/ecomp-portal-BE-common/src/main/java/org/onap/portalapp/portal/exceptions/InvalidApplicationException.java b/ecomp-portal-BE-common/src/main/java/org/onap/portalapp/portal/exceptions/InvalidApplicationException.java
new file mode 100644
index 00000000..d48e60f6
--- /dev/null
+++ b/ecomp-portal-BE-common/src/main/java/org/onap/portalapp/portal/exceptions/InvalidApplicationException.java
@@ -0,0 +1,47 @@
+/*-
+ * ============LICENSE_START==========================================
+ * ONAP Portal
+ * ===================================================================
+ * Copyright (C) 2017 AT&T Intellectual Property. All rights reserved.
+ * ===================================================================
+ *
+ * Unless otherwise specified, all software contained herein is licensed
+ * under the Apache License, Version 2.0 (the "License");
+ * you may not use this software 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.
+ *
+ * Unless otherwise specified, all documentation contained herein is licensed
+ * under the Creative Commons License, Attribution 4.0 Intl. (the "License");
+ * you may not use this documentation except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * https://creativecommons.org/licenses/by/4.0/
+ *
+ * Unless required by applicable law or agreed to in writing, documentation
+ * 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.
+ *
+ * ============LICENSE_END============================================
+ *
+ * ECOMP is a trademark and service mark of AT&T Intellectual Property.
+ */
+package org.onap.portalapp.portal.exceptions;
+
+public class InvalidApplicationException extends Exception{
+
+ private static final long serialVersionUID = -5454293609563606255L;
+
+ public InvalidApplicationException(String msg) {
+ super(msg);
+ }
+}
diff --git a/ecomp-portal-BE-common/src/main/java/org/onap/portalapp/portal/exceptions/InvalidRoleException.java b/ecomp-portal-BE-common/src/main/java/org/onap/portalapp/portal/exceptions/InvalidRoleException.java
new file mode 100644
index 00000000..bf19f4a5
--- /dev/null
+++ b/ecomp-portal-BE-common/src/main/java/org/onap/portalapp/portal/exceptions/InvalidRoleException.java
@@ -0,0 +1,47 @@
+/*-
+ * ============LICENSE_START==========================================
+ * ONAP Portal
+ * ===================================================================
+ * Copyright (C) 2017 AT&T Intellectual Property. All rights reserved.
+ * ===================================================================
+ *
+ * Unless otherwise specified, all software contained herein is licensed
+ * under the Apache License, Version 2.0 (the "License");
+ * you may not use this software 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.
+ *
+ * Unless otherwise specified, all documentation contained herein is licensed
+ * under the Creative Commons License, Attribution 4.0 Intl. (the "License");
+ * you may not use this documentation except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * https://creativecommons.org/licenses/by/4.0/
+ *
+ * Unless required by applicable law or agreed to in writing, documentation
+ * 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.
+ *
+ * ============LICENSE_END============================================
+ *
+ * ECOMP is a trademark and service mark of AT&T Intellectual Property.
+ */
+package org.onap.portalapp.portal.exceptions;
+
+public class InvalidRoleException extends Exception{
+
+ private static final long serialVersionUID = -7453145846850741282L;
+
+ public InvalidRoleException(String message){
+ super(message);
+ }
+}
diff --git a/ecomp-portal-BE-common/src/main/java/org/onap/portalapp/portal/exceptions/InvalidUserException.java b/ecomp-portal-BE-common/src/main/java/org/onap/portalapp/portal/exceptions/InvalidUserException.java
new file mode 100644
index 00000000..00650108
--- /dev/null
+++ b/ecomp-portal-BE-common/src/main/java/org/onap/portalapp/portal/exceptions/InvalidUserException.java
@@ -0,0 +1,47 @@
+/*-
+ * ============LICENSE_START==========================================
+ * ONAP Portal
+ * ===================================================================
+ * Copyright (C) 2017 AT&T Intellectual Property. All rights reserved.
+ * ===================================================================
+ *
+ * Unless otherwise specified, all software contained herein is licensed
+ * under the Apache License, Version 2.0 (the "License");
+ * you may not use this software 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.
+ *
+ * Unless otherwise specified, all documentation contained herein is licensed
+ * under the Creative Commons License, Attribution 4.0 Intl. (the "License");
+ * you may not use this documentation except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * https://creativecommons.org/licenses/by/4.0/
+ *
+ * Unless required by applicable law or agreed to in writing, documentation
+ * 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.
+ *
+ * ============LICENSE_END============================================
+ *
+ * ECOMP is a trademark and service mark of AT&T Intellectual Property.
+ */
+package org.onap.portalapp.portal.exceptions;
+
+public class InvalidUserException extends Exception{
+
+ private static final long serialVersionUID = 273572212076653743L;
+
+ public InvalidUserException(String msg) {
+ super(msg);
+ }
+}
diff --git a/ecomp-portal-BE-common/src/main/java/org/onap/portalapp/portal/exceptions/NoHealthyServiceException.java b/ecomp-portal-BE-common/src/main/java/org/onap/portalapp/portal/exceptions/NoHealthyServiceException.java
new file mode 100644
index 00000000..d210b415
--- /dev/null
+++ b/ecomp-portal-BE-common/src/main/java/org/onap/portalapp/portal/exceptions/NoHealthyServiceException.java
@@ -0,0 +1,54 @@
+/*-
+ * ============LICENSE_START==========================================
+ * ONAP Portal
+ * ===================================================================
+ * Copyright (C) 2017 AT&T Intellectual Property. All rights reserved.
+ * ===================================================================
+ *
+ * Unless otherwise specified, all software contained herein is licensed
+ * under the Apache License, Version 2.0 (the "License");
+ * you may not use this software 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.
+ *
+ * Unless otherwise specified, all documentation contained herein is licensed
+ * under the Creative Commons License, Attribution 4.0 Intl. (the "License");
+ * you may not use this documentation except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * https://creativecommons.org/licenses/by/4.0/
+ *
+ * Unless required by applicable law or agreed to in writing, documentation
+ * 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.
+ *
+ * ============LICENSE_END============================================
+ *
+ * ECOMP is a trademark and service mark of AT&T Intellectual Property.
+ */
+package org.onap.portalapp.portal.exceptions;
+
+import com.ecwid.consul.ConsulException;
+
+public class NoHealthyServiceException extends ConsulException{
+
+ private static final long serialVersionUID = -7089437673127729813L;
+
+ public NoHealthyServiceException(String message){
+ super(message);
+ }
+
+ @Override
+ public String toString() {
+ return "NoHealthyServiceException [] " + this.getMessage();
+ }
+}
diff --git a/ecomp-portal-BE-common/src/main/java/org/onap/portalapp/portal/exceptions/NonCentralizedAppException.java b/ecomp-portal-BE-common/src/main/java/org/onap/portalapp/portal/exceptions/NonCentralizedAppException.java
new file mode 100644
index 00000000..4bfde355
--- /dev/null
+++ b/ecomp-portal-BE-common/src/main/java/org/onap/portalapp/portal/exceptions/NonCentralizedAppException.java
@@ -0,0 +1,56 @@
+/*-
+ * ============LICENSE_START==========================================
+ * ONAP Portal
+ * ===================================================================
+ * Copyright (C) 2017 AT&T Intellectual Property. All rights reserved.
+ * ===================================================================
+ *
+ * Unless otherwise specified, all software contained herein is licensed
+ * under the Apache License, Version 2.0 (the "License");
+ * you may not use this software 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.
+ *
+ * Unless otherwise specified, all documentation contained herein is licensed
+ * under the Creative Commons License, Attribution 4.0 Intl. (the "License");
+ * you may not use this documentation except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * https://creativecommons.org/licenses/by/4.0/
+ *
+ * Unless required by applicable law or agreed to in writing, documentation
+ * 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.
+ *
+ * ============LICENSE_END============================================
+ *
+ * ECOMP is a trademark and service mark of AT&T Intellectual Property.
+ */
+
+package org.onap.portalapp.portal.exceptions;
+
+public class NonCentralizedAppException extends Exception {
+
+ String appName;
+
+ private static final long serialVersionUID = 1L;
+
+ public NonCentralizedAppException(String name) {
+ this.appName= name;
+ }
+
+ @Override
+ public String toString() {
+ return appName + " is not Centralized Application";
+ }
+
+}
diff --git a/ecomp-portal-BE-common/src/main/java/org/onap/portalapp/portal/exceptions/RoleFunctionException.java b/ecomp-portal-BE-common/src/main/java/org/onap/portalapp/portal/exceptions/RoleFunctionException.java
new file mode 100644
index 00000000..b189ca47
--- /dev/null
+++ b/ecomp-portal-BE-common/src/main/java/org/onap/portalapp/portal/exceptions/RoleFunctionException.java
@@ -0,0 +1,53 @@
+/*-
+ * ============LICENSE_START==========================================
+ * ONAP Portal
+ * ===================================================================
+ * Copyright (C) 2017 AT&T Intellectual Property. All rights reserved.
+ * ===================================================================
+ *
+ * Unless otherwise specified, all software contained herein is licensed
+ * under the Apache License, Version 2.0 (the "License");
+ * you may not use this software 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.
+ *
+ * Unless otherwise specified, all documentation contained herein is licensed
+ * under the Creative Commons License, Attribution 4.0 Intl. (the "License");
+ * you may not use this documentation except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * https://creativecommons.org/licenses/by/4.0/
+ *
+ * Unless required by applicable law or agreed to in writing, documentation
+ * 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.
+ *
+ * ============LICENSE_END============================================
+ *
+ * ECOMP is a trademark and service mark of AT&T Intellectual Property.
+ */
+
+package org.onap.portalapp.portal.exceptions;
+
+import org.apache.commons.codec.DecoderException;
+
+public class RoleFunctionException extends Exception{
+
+ /**
+ *
+ */
+ private static final long serialVersionUID = -3280548136475923423L;
+
+ public RoleFunctionException(String msg, DecoderException e) {
+ super(msg,e);
+ }
+}
diff --git a/ecomp-portal-BE-common/src/main/java/org/onap/portalapp/portal/exceptions/SecurityVulnerabilitiesException.java b/ecomp-portal-BE-common/src/main/java/org/onap/portalapp/portal/exceptions/SecurityVulnerabilitiesException.java
new file mode 100644
index 00000000..8fffbc39
--- /dev/null
+++ b/ecomp-portal-BE-common/src/main/java/org/onap/portalapp/portal/exceptions/SecurityVulnerabilitiesException.java
@@ -0,0 +1,45 @@
+/*-
+ * ============LICENSE_START==========================================
+ * ONAP Portal
+ * ===================================================================
+ * Copyright (C) 2017 AT&T Intellectual Property. All rights reserved.
+ * ===================================================================
+ *
+ * Unless otherwise specified, all software contained herein is licensed
+ * under the Apache License, Version 2.0 (the "License");
+ * you may not use this software 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.
+ *
+ * Unless otherwise specified, all documentation contained herein is licensed
+ * under the Creative Commons License, Attribution 4.0 Intl. (the "License");
+ * you may not use this documentation except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * https://creativecommons.org/licenses/by/4.0/
+ *
+ * Unless required by applicable law or agreed to in writing, documentation
+ * 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.
+ *
+ * ============LICENSE_END============================================
+ *
+ * ECOMP is a trademark and service mark of AT&T Intellectual Property.
+ */
+package org.onap.portalapp.portal.exceptions;
+
+@SuppressWarnings("serial")
+public class SecurityVulnerabilitiesException extends Exception {
+ SecurityVulnerabilitiesException(String msg) {
+ super(msg);
+ }
+ } \ No newline at end of file
diff --git a/ecomp-portal-BE-common/src/main/java/org/onap/portalapp/portal/interceptor/PortalResourceInterceptor.java b/ecomp-portal-BE-common/src/main/java/org/onap/portalapp/portal/interceptor/PortalResourceInterceptor.java
new file mode 100644
index 00000000..5d2f399b
--- /dev/null
+++ b/ecomp-portal-BE-common/src/main/java/org/onap/portalapp/portal/interceptor/PortalResourceInterceptor.java
@@ -0,0 +1,369 @@
+/*-
+ * ============LICENSE_START==========================================
+ * ONAP Portal
+ * ===================================================================
+ * Copyright (C) 2017 AT&T Intellectual Property. All rights reserved.
+ * ===================================================================
+ *
+ * Unless otherwise specified, all software contained herein is licensed
+ * under the Apache License, Version 2.0 (the "License");
+ * you may not use this software 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.
+ *
+ * Unless otherwise specified, all documentation contained herein is licensed
+ * under the Creative Commons License, Attribution 4.0 Intl. (the "License");
+ * you may not use this documentation except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * https://creativecommons.org/licenses/by/4.0/
+ *
+ * Unless required by applicable law or agreed to in writing, documentation
+ * 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.
+ *
+ * ============LICENSE_END============================================
+ *
+ * ECOMP is a trademark and service mark of AT&T Intellectual Property.
+ */
+package org.onap.portalapp.portal.interceptor;
+
+import java.nio.charset.Charset;
+import java.util.ArrayList;
+import java.util.Base64;
+import java.util.List;
+import java.util.Set;
+import java.util.regex.Matcher;
+import java.util.regex.Pattern;
+import java.util.stream.Collectors;
+
+import javax.servlet.http.HttpServletRequest;
+import javax.servlet.http.HttpServletResponse;
+
+import org.apache.commons.codec.binary.Hex;
+import org.onap.portalapp.controller.sessionmgt.SessionCommunicationController;
+import org.onap.portalapp.portal.controller.BasicAuthenticationController;
+import org.onap.portalapp.portal.controller.ExternalAppsRestfulController;
+import org.onap.portalapp.portal.controller.SharedContextRestController;
+import org.onap.portalapp.portal.controller.WebAnalyticsExtAppController;
+import org.onap.portalapp.portal.domain.BasicAuthCredentials;
+import org.onap.portalapp.portal.domain.EPEndpoint;
+import org.onap.portalapp.portal.domain.EPRole;
+import org.onap.portalapp.portal.domain.EPUser;
+import org.onap.portalapp.portal.logging.aop.EPEELFLoggerAdvice;
+import org.onap.portalapp.portal.logging.format.EPAppMessagesEnum;
+import org.onap.portalapp.portal.logging.logic.EPLogUtil;
+import org.onap.portalapp.portal.service.BasicAuthenticationCredentialService;
+import org.onap.portalapp.portal.utils.EcompPortalUtils;
+import org.onap.portalapp.service.RemoteWebServiceCallService;
+import org.onap.portalapp.service.sessionmgt.ManageService;
+import org.onap.portalapp.util.EPUserUtils;
+import org.onap.portalsdk.core.controller.FusionBaseController;
+import org.onap.portalsdk.core.exception.UrlAccessRestrictedException;
+import org.onap.portalsdk.core.interceptor.ResourceInterceptor;
+import org.onap.portalsdk.core.logging.logic.EELFLoggerDelegate;
+import org.onap.portalsdk.core.onboarding.listener.PortalTimeoutHandler;
+import org.onap.portalsdk.core.onboarding.util.CipherUtil;
+import org.onap.portalsdk.core.util.SystemProperties;
+import org.onap.portalsdk.core.util.SystemProperties.SecurityEventTypeEnum;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.web.method.HandlerMethod;
+
+public class PortalResourceInterceptor extends ResourceInterceptor {
+ private static final String APP_KEY = "uebkey";
+
+ private EELFLoggerDelegate logger = EELFLoggerDelegate.getLogger(PortalResourceInterceptor.class);
+
+ @Autowired
+ private RemoteWebServiceCallService remoteWebServiceCallService;
+
+ @Autowired
+ private ManageService manageService;
+
+ @Autowired
+ private EPEELFLoggerAdvice epAdvice;
+
+ @Autowired
+ private BasicAuthenticationCredentialService basicAuthService;
+
+ @SuppressWarnings("unchecked")
+ @Override
+ public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler)
+ throws Exception {
+
+ if (handler instanceof HandlerMethod) {
+ HandlerMethod method = (HandlerMethod) handler;
+
+ /**
+ * These classes provide REST endpoints used by other application
+ * servers, NOT by an end user's browser.
+ */
+ if (method.getBean() instanceof FusionBaseController) {
+ FusionBaseController controller = (FusionBaseController) method.getBean();
+ if (!controller.isAccessible()) {
+
+ // authorize portalApi requests by user role
+ String requestURI = request.getRequestURI();
+ if (requestURI != null) {
+ String[] uriArray = requestURI.split("/portalApi/");
+ if (uriArray.length > 1) {
+ String portalApiPath = uriArray[1];
+
+ Set<? extends String> roleFunctions = (Set<? extends String>) request.getSession()
+ .getAttribute(SystemProperties
+ .getProperty(SystemProperties.ROLE_FUNCTIONS_ATTRIBUTE_NAME));
+ Set<? extends String> allRoleFunctions = (Set<? extends String>) request.getSession()
+ .getAttribute(EPUserUtils.ALL_ROLE_FUNCTIONS);
+ // Defend against code error to avoid throwing NPE
+ if (roleFunctions == null || allRoleFunctions == null) {
+ logger.error(EELFLoggerDelegate.errorLogger,
+ "preHandle: failed to get role functions attribute(s) from session!!");
+ EPLogUtil.logEcompError(logger, EPAppMessagesEnum.BeInitializationError);
+ return false;
+ }
+ // check to see if roleFunctions of the user is in
+ // the
+ // list of all role functions
+ // if not, ignore to prevent restricting every
+ // trivial
+ // call; otherwise, if it is, then check for the
+ // access
+ if (matchRoleFunctions(portalApiPath, allRoleFunctions)
+ && !matchRoleFunctions(portalApiPath, roleFunctions)) {
+ EPUser user = (EPUser) request.getSession().getAttribute(
+ SystemProperties.getProperty(SystemProperties.USER_ATTRIBUTE_NAME));
+ logger.error(EELFLoggerDelegate.errorLogger,
+ "preHandle: User {} not authorized for path {} ", user.getOrgUserId(),
+ portalApiPath);
+ EcompPortalUtils.setBadPermissions(user, response, portalApiPath);
+ EPLogUtil.logEcompError(logger, EPAppMessagesEnum.BeRestApiAuthenticationError);
+ return false;
+ } // failed to match
+
+ } // is portalApi
+
+ } // requestURI
+ } // instance check
+ } // not accessible
+ else if (method.getBean() instanceof BasicAuthenticationController) {
+ return checkBasicAuth(request, response);
+ }
+ Object controllerObj = method.getBean();
+ if (controllerObj instanceof SessionCommunicationController
+ || controllerObj instanceof SharedContextRestController
+ || controllerObj instanceof ExternalAppsRestfulController) {
+ // check user authentication for RESTful calls
+ String secretKey = null;
+ try {
+ epAdvice.loadServletRequestBasedDefaults(request, SecurityEventTypeEnum.INCOMING_REST_MESSAGE);
+ if (!remoteWebServiceCallService.verifyRESTCredential(secretKey, request.getHeader(APP_KEY),
+ request.getHeader("username"), request.getHeader("password"))) {
+ throw new UrlAccessRestrictedException();
+ }
+ } catch (Exception e) {
+ logger.error(EELFLoggerDelegate.errorLogger, "preHandle: failed to authenticate RESTful service",
+ e);
+ EPLogUtil.logEcompError(logger, EPAppMessagesEnum.BeRestApiAuthenticationError, e);
+ throw new UrlAccessRestrictedException();
+ }
+ }
+
+ if (controllerObj instanceof WebAnalyticsExtAppController) {
+ if (!remoteWebServiceCallService.verifyAppKeyCredential(request.getHeader(APP_KEY))) {
+ logger.error(EELFLoggerDelegate.errorLogger,
+ "preHandle: failed to verify app key for web analytics call");
+ throw new UrlAccessRestrictedException();
+ }
+ }
+ }
+
+ handleSessionUpdates(request);
+ return true;
+ }
+
+ /**
+ * Sets the status code and sends a response. Factors code out of many
+ * methods.
+ *
+ * @param response
+ * HttpServletResponse
+ * @param statusCode
+ * HTTP status code like 404
+ * @param message
+ * Message to send in a JSON error object
+ */
+ private void sendErrorResponse(HttpServletResponse response, final int statusCode, final String message)
+ throws Exception {
+ response.setStatus(statusCode);
+ response.setContentType("application/json");
+ response.getWriter().write("{\"error\":\"" + message + "\"}");
+ response.getWriter().flush();
+ }
+
+ /**
+ * Gets HTTP basic authentication information from the request and checks
+ * whether those credentials are authorized for the request path.
+ *
+ * @param request
+ * HttpServletRequest
+ * @param response
+ * HttpServletResponse
+ * @return True if the request is authorized, else false
+ * @throws Exception
+ */
+ private boolean checkBasicAuth(HttpServletRequest request, HttpServletResponse response) throws Exception {
+ String uri = request.getRequestURI().toString();
+ uri = uri.substring(uri.indexOf("/", 1));
+
+ final String authHeader = request.getHeader("Authorization");
+
+ // Unauthorized access due to missing HTTP Authorization request header
+ if (authHeader == null) {
+ final String msg = "no authorization found";
+ logger.debug(EELFLoggerDelegate.debugLogger, "checkBasicAuth: {}", msg);
+ sendErrorResponse(response, HttpServletResponse.SC_UNAUTHORIZED, msg);
+ return false;
+ }
+
+ String[] accountNamePassword = getUserNamePassword(authHeader);
+ if (accountNamePassword == null || accountNamePassword.length != 2) {
+ final String msg = "failed to get username and password from Atuhorization header";
+ logger.debug(EELFLoggerDelegate.debugLogger, "checkBasicAuth: {}", msg);
+ sendErrorResponse(response, HttpServletResponse.SC_UNAUTHORIZED, msg);
+ return false;
+ }
+
+ BasicAuthCredentials creds;
+ try {
+ creds = basicAuthService.getBasicAuthCredentialByUsernameAndPassword(accountNamePassword[0],
+ encrypted(accountNamePassword[1]));
+ } catch (Exception e) {
+ logger.error(EELFLoggerDelegate.errorLogger, "checkBasicAuth failed to get credentials", e);
+ final String msg = "Failed while getting basic authentication credential: ";
+ sendErrorResponse(response, HttpServletResponse.SC_INTERNAL_SERVER_ERROR, msg);
+ throw e;
+ }
+
+ // Unauthorized access due to invalid credentials (username and
+ // password)
+ if (creds == null || !creds.getUsername().equals(accountNamePassword[0])) {
+ final String msg = "Unauthorized: Access denied";
+ logger.debug(EELFLoggerDelegate.debugLogger, "checkBasicAuth: {}", msg);
+ sendErrorResponse(response, HttpServletResponse.SC_UNAUTHORIZED, msg);
+ return false;
+ }
+
+ // Unauthorized access due to inactive account
+ if (creds.getIsActive().equals("N")) {
+ final String msg = "Unauthorized: The account is inactive";
+ logger.debug(EELFLoggerDelegate.debugLogger, "checkBasicAuth: {}", msg);
+ sendErrorResponse(response, HttpServletResponse.SC_UNAUTHORIZED, msg);
+ return false;
+ }
+ boolean isAllowedEp = false;
+ for (EPEndpoint ep : creds.getEndpoints()) {
+ if (ep.getName().equals(uri)) {
+ isAllowedEp = true;
+ break;
+ }
+ }
+
+ // If user doesn't specify any endpoint, allow all endpoints for that
+ // account
+ if (creds.getEndpoints().size() == 0)
+ isAllowedEp = true;
+
+ // Unauthorized access due to the invalid endpoints
+ if (!isAllowedEp) {
+ final String msg = "Unauthorized: Endpoint access denied";
+ logger.debug(EELFLoggerDelegate.debugLogger, "checkBasicAuth: {}", msg);
+ sendErrorResponse(response, HttpServletResponse.SC_UNAUTHORIZED, msg);
+ return false;
+ }
+
+ // Made it to the end!
+ return true;
+ }
+
+ private String[] getUserNamePassword(String authValue) {
+ String base64Credentials = authValue.substring("Basic".length()).trim();
+ String credentials = new String(Base64.getDecoder().decode(base64Credentials), Charset.forName("UTF-8"));
+ final String[] values = credentials.split(":", 2);
+ return values;
+ }
+
+ @SuppressWarnings("unused")
+ private String decrypted(String encrypted) throws Exception {
+ String result = "";
+ if (encrypted != null & encrypted.length() > 0) {
+ try {
+ result = CipherUtil.decryptPKC(encrypted, SystemProperties.getProperty(SystemProperties.Decryption_Key));
+ } catch (Exception e) {
+ logger.error(EELFLoggerDelegate.errorLogger, "decryptedPassword failed", e);
+ throw e;
+ }
+ }
+ return result;
+ }
+
+ private String encrypted(String decryptedPwd) throws Exception {
+ String result = "";
+ if (decryptedPwd != null & decryptedPwd.length() > 0) {
+ try {
+ result = CipherUtil.encryptPKC(decryptedPwd,
+ SystemProperties.getProperty(SystemProperties.Decryption_Key));
+ } catch (Exception e) {
+ logger.error(EELFLoggerDelegate.errorLogger, "encryptedPassword() failed", e);
+ throw e;
+ }
+ }
+ return result;
+ }
+
+ private Boolean matchRoleFunctions(String portalApiPath, Set<? extends String> roleFunctions) {
+ String[] path = portalApiPath.split("/");
+ List<String> roleFunList = new ArrayList<>();
+ if (path.length > 1) {
+ roleFunList = roleFunctions.stream().filter(item -> item.startsWith(path[0])).collect(Collectors.toList());
+ if (roleFunList.size() >= 1) {
+ for (String roleFunction : roleFunList) {
+ String[] roleFunctionArray = roleFunction.split("/");
+ boolean b = true;
+ if (roleFunctionArray.length == path.length) {
+ for (int i = 0; i < roleFunctionArray.length; i++) {
+ if (b) {
+ if (!roleFunctionArray[i].equals("*")) {
+ Pattern p = Pattern.compile(Pattern.quote(path[i]), Pattern.CASE_INSENSITIVE);
+ Matcher m = p.matcher(roleFunctionArray[i]);
+ b = m.matches();
+
+ }
+ }
+ }
+ if (b)
+ return b;
+ }
+ }
+ }
+ } else {
+ for (String roleFunction : roleFunctions) {
+ if (portalApiPath.matches(roleFunction))
+ return true;
+ }
+ }
+ return false;
+ }
+
+ protected void handleSessionUpdates(HttpServletRequest request) {
+ PortalTimeoutHandler.handleSessionUpdatesNative(request, null, null, null, null, manageService);
+ }
+}
diff --git a/ecomp-portal-BE-common/src/main/java/org/onap/portalapp/portal/listener/HealthMonitor.java b/ecomp-portal-BE-common/src/main/java/org/onap/portalapp/portal/listener/HealthMonitor.java
new file mode 100644
index 00000000..0bc5c4c8
--- /dev/null
+++ b/ecomp-portal-BE-common/src/main/java/org/onap/portalapp/portal/listener/HealthMonitor.java
@@ -0,0 +1,364 @@
+/*-
+ * ============LICENSE_START==========================================
+ * ONAP Portal
+ * ===================================================================
+ * Copyright (C) 2017 AT&T Intellectual Property. All rights reserved.
+ * ===================================================================
+ *
+ * Unless otherwise specified, all software contained herein is licensed
+ * under the Apache License, Version 2.0 (the "License");
+ * you may not use this software 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.
+ *
+ * Unless otherwise specified, all documentation contained herein is licensed
+ * under the Creative Commons License, Attribution 4.0 Intl. (the "License");
+ * you may not use this documentation except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * https://creativecommons.org/licenses/by/4.0/
+ *
+ * Unless required by applicable law or agreed to in writing, documentation
+ * 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.
+ *
+ * ============LICENSE_END============================================
+ *
+ * ECOMP is a trademark and service mark of AT&T Intellectual Property.
+ */
+package org.onap.portalapp.portal.listener;
+
+import java.util.List;
+
+import javax.annotation.PostConstruct;
+import javax.annotation.PreDestroy;
+
+import org.hibernate.Query;
+import org.hibernate.Session;
+import org.hibernate.SessionFactory;
+import org.onap.portalapp.portal.logging.aop.EPMetricsLog;
+import org.onap.portalapp.portal.logging.format.EPAppMessagesEnum;
+import org.onap.portalapp.portal.logging.logic.EPLogUtil;
+import org.onap.portalapp.portal.ueb.EPUebHelper;
+import org.onap.portalapp.portal.utils.EPCommonSystemProperties;
+import org.onap.portalsdk.core.logging.logic.EELFLoggerDelegate;
+import org.onap.portalsdk.core.util.SystemProperties;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.context.annotation.EnableAspectJAutoProxy;
+import org.springframework.transaction.annotation.Transactional;
+
+@Transactional
+@org.springframework.context.annotation.Configuration
+@EnableAspectJAutoProxy
+@EPMetricsLog
+public class HealthMonitor {
+
+ private EELFLoggerDelegate logger = EELFLoggerDelegate.getLogger(HealthMonitor.class);
+
+ @Autowired
+ private SessionFactory sessionFactory;
+
+ @Autowired
+ private EPUebHelper epUebHelper;
+
+ private static boolean databaseUp;
+ private static boolean uebUp;
+ private static boolean frontEndUp;
+ private static boolean backEndUp;
+ private static boolean dbClusterStatusOk;
+ private static boolean dbPermissionsOk;
+
+ /**
+ * Read directly by external classes.
+ */
+ public static boolean isSuspended = false;
+
+ private Thread healthMonitorThread;
+
+ public HealthMonitor() {
+ }
+
+ public static boolean isDatabaseUp() {
+ return databaseUp;
+ }
+
+ public static boolean isClusterStatusOk() {
+ return dbClusterStatusOk;
+ }
+
+ public static boolean isDatabasePermissionsOk() {
+ return dbPermissionsOk;
+ }
+
+ public static boolean isUebUp() {
+ return uebUp;
+ }
+
+ public static boolean isFrontEndUp() {
+ return frontEndUp;
+ }
+
+ public static boolean isBackEndUp() {
+ return backEndUp;
+ }
+
+ private void monitorEPHealth() throws InterruptedException {
+
+ int numIntervalsDatabaseHasBeenDown = 0;
+ int numIntervalsClusterNotHealthy = 0;
+ int numIntervalsDatabasePermissionsIncorrect = 0;
+ int numIntervalsUebHasBeenDown = 0;
+
+ logger.debug(EELFLoggerDelegate.debugLogger, "monitorEPHealth thread started");
+
+ long sleepInterval = (Long
+ .valueOf(SystemProperties.getProperty(EPCommonSystemProperties.HEALTH_POLL_INTERVAL_SECONDS)) * 1000);
+ long numIntervalsBetweenAlerts = Long
+ .valueOf(SystemProperties.getProperty(EPCommonSystemProperties.HEALTHFAIL_ALERT_EVERY_X_INTERVALS));
+ logger.debug(EELFLoggerDelegate.debugLogger,
+ "monitorEPHealth: Polling health every " + sleepInterval + " milliseconds. Alerting every "
+ + (sleepInterval * numIntervalsBetweenAlerts) / 1000 + " seconds when component remains down.");
+
+ while (true) {
+ //
+ // Get DB status. If down, signal alert once every X intervals.
+ //
+ databaseUp = this.checkIfDatabaseUp();
+ if (databaseUp == false) {
+ if ((numIntervalsDatabaseHasBeenDown % numIntervalsBetweenAlerts) == 0) {
+ logger.debug(EELFLoggerDelegate.debugLogger,
+ "monitorEPHealth: database down, logging to error log to trigger alert.");
+ // Write a Log entry that will generate an alert
+ EPLogUtil.logEcompError(logger, EPAppMessagesEnum.BeHealthCheckMySqlError);
+ numIntervalsDatabaseHasBeenDown++;
+ } else {
+ numIntervalsDatabaseHasBeenDown = 0;
+ }
+ }
+
+ dbClusterStatusOk = this.checkClusterStatus();
+ if (dbClusterStatusOk == false) {
+ if ((numIntervalsClusterNotHealthy % numIntervalsBetweenAlerts) == 0) {
+ logger.debug(EELFLoggerDelegate.debugLogger,
+ "monitorEPHealth: cluster nodes down, logging to error log to trigger alert.");
+ EPLogUtil.logEcompError(logger, EPAppMessagesEnum.BeHealthCheckMySqlError);
+ numIntervalsClusterNotHealthy++;
+ } else {
+ numIntervalsClusterNotHealthy = 0;
+ }
+ }
+
+ dbPermissionsOk = this.checkDatabasePermissions();
+ if (dbPermissionsOk == false) {
+ if ((numIntervalsDatabasePermissionsIncorrect % numIntervalsBetweenAlerts) == 0) {
+ logger.debug(EELFLoggerDelegate.debugLogger,
+ "monitorEPHealth: database permissions incorrect, logging to error log to trigger alert.");
+ EPLogUtil.logEcompError(logger, EPAppMessagesEnum.BeHealthCheckMySqlError);
+ numIntervalsDatabasePermissionsIncorrect++;
+ } else {
+ numIntervalsDatabasePermissionsIncorrect = 0;
+ }
+ }
+
+ //
+ // Get UEB status. Publish a bogus message to EP inbox, if 200 OK
+ // returned, status is Up.
+ // If down, signal alert once every X intervals.
+ // EP will ignore this bogus message.
+ //
+ uebUp = this.checkIfUebUp();
+ if (uebUp == false) {
+
+ if ((numIntervalsUebHasBeenDown % numIntervalsBetweenAlerts) == 0) {
+ logger.debug(EELFLoggerDelegate.debugLogger,
+ "monitorEPHealth: UEB down, logging to error log to trigger alert");
+ // Write a Log entry that will generate an alert
+ EPLogUtil.logEcompError(logger, EPAppMessagesEnum.BeHealthCheckUebClusterError);
+ numIntervalsUebHasBeenDown++;
+ } else {
+ numIntervalsUebHasBeenDown = 0;
+ }
+ }
+
+ // The front end should be up because the API is called through
+ // proxy front end server.
+ frontEndUp = true;
+
+ // If the rest API called, the backend is always up
+ backEndUp = true;
+
+ //
+ // future nice to have...get Partner status
+ //
+ // For all apps exposing a rest url, query one of the rest
+ // urls(/roles?) and manage a list
+ // of app name/status. We might not return back a non 200 OK in
+ // health check, but we
+ // could return information in the json content of a health check.
+ //
+
+ //
+ // Get DB status. If down, signal alert once every X intervals.
+ //
+ if (Thread.interrupted()) {
+ logger.info(EELFLoggerDelegate.errorLogger, "monitorEPHealth: thread interrupted");
+ break;
+ }
+
+ try {
+ Thread.sleep(sleepInterval);
+ } catch (InterruptedException e) {
+ logger.error(EELFLoggerDelegate.errorLogger, "monitorEPHealth: sleep interrupted", e);
+ Thread.currentThread().interrupt();
+ }
+ }
+ }
+
+ @PostConstruct
+ public void initHealthMonitor() {
+ healthMonitorThread = new Thread("EP HealthMonitor thread") {
+ public void run() {
+ try {
+ monitorEPHealth();
+ } catch (InterruptedException e) {
+ logger.debug(EELFLoggerDelegate.debugLogger, "healthMonitorThread interrupted", e);
+ } catch (Exception e) {
+ logger.error(EELFLoggerDelegate.errorLogger, "healthMonitorThread failed", e);
+ }
+ }
+ };
+ healthMonitorThread.start();
+
+ }
+
+ @PreDestroy
+ public void closeHealthMonitor() {
+ this.healthMonitorThread.interrupt();
+ }
+
+ /**
+ * This routine checks whether the database can be read. In June 2017 we
+ * experimented with checking if the database can be WRITTEN. Writes failed
+ * with some regularity in a MariaDB Galera cluster, and in that
+ * environment, the resulting alerts in the log triggered a health monitor
+ * cron job to shut down the Tomcat instance. The root cause of the cluster
+ * write failures was not determined.
+ *
+ * @return true if the database can be read.
+ */
+ private boolean checkIfDatabaseUp() {
+ boolean isUp = false;
+ Session localSession = null;
+ try {
+ localSession = sessionFactory.openSession();
+ if (localSession != null) {
+ String sql = "select app_name from fn_app where app_id=1";
+ Query query = localSession.createSQLQuery(sql);
+ @SuppressWarnings("unchecked")
+ List<String> queryList = query.list();
+ if (queryList != null) {
+ isUp = true;
+ }
+ }
+ } catch (Exception e) {
+ logger.debug(EELFLoggerDelegate.debugLogger, "checkIfDatabaseUp failed", e);
+ isUp = false;
+ } finally {
+ if (localSession != null)
+ localSession.close();
+ }
+ return isUp;
+ }
+
+ private boolean checkClusterStatus() {
+ boolean isUp = false;
+ Session localSession = null;
+ try {
+ localSession = sessionFactory.openSession();
+ if (localSession != null) {
+ // If all nodes are unhealthy in a cluster, this will throw an
+ // exception
+ String sql = "select * from mysql.user";
+ Query query = localSession.createSQLQuery(sql);
+ @SuppressWarnings("unchecked")
+ List<String> queryList = query.list();
+ if (queryList != null) {
+ isUp = true;
+ }
+ }
+ } catch (Exception e) {
+ logger.error(EELFLoggerDelegate.errorLogger, "checkClusterStatus failed", e);
+ if ((e.getCause() != null) && (e.getCause().getMessage() != null)) {
+ logger.error(EELFLoggerDelegate.errorLogger, "checkClusterStatus failure cause", e.getCause());
+ }
+ isUp = false;
+ } finally {
+ if (localSession != null) {
+ localSession.close();
+ }
+ }
+ return isUp;
+ }
+
+ private boolean checkDatabasePermissions() {
+ boolean isUp = false;
+ Session localSession = null;
+ try {
+ localSession = sessionFactory.openSession();
+ if (localSession != null) {
+ String sql = "SHOW GRANTS FOR CURRENT_USER";
+ Query query = localSession.createSQLQuery(sql);
+ @SuppressWarnings("unchecked")
+ List<String> grantsList = query.list();
+ for (String str : grantsList) {
+ if ((str.toUpperCase().contains("ALL"))
+ || (str.toUpperCase().contains("DELETE") && str.toUpperCase().contains("SELECT")
+ && str.toUpperCase().contains("UPDATE") && str.toUpperCase().contains("INSERT"))) {
+ isUp = true;
+ break;
+ }
+ }
+ if (isUp == false) {
+ logger.error(EELFLoggerDelegate.errorLogger,
+ "checkDatabasePermissions returning false. SHOW GRANTS FOR CURRENT_USER being dumped:");
+ for (String str : grantsList) {
+ logger.error(EELFLoggerDelegate.errorLogger, "grants output item = [" + str + "]");
+ }
+ }
+ }
+ } catch (Exception e) {
+ logger.error(EELFLoggerDelegate.errorLogger, "checkDatabasePermissions failed", e);
+ if ((e.getCause() != null) && (e.getCause().getMessage() != null)) {
+ logger.error(EELFLoggerDelegate.errorLogger, "checkDatabasePermissions failure cause", e.getCause());
+ }
+ isUp = false;
+ } finally {
+ if (localSession != null) {
+ localSession.close();
+ }
+ }
+ return isUp;
+ }
+
+ private boolean checkIfUebUp() {
+ boolean uebUp = false;
+ try {
+ boolean isAvailable = epUebHelper.checkAvailability();
+ boolean messageCanBeSent = epUebHelper.MessageCanBeSentToTopic();
+ uebUp = (isAvailable && messageCanBeSent);
+ } catch (Exception e) {
+ logger.error(EELFLoggerDelegate.errorLogger, "checkIfUebUp failed", e);
+ }
+ return uebUp;
+ }
+
+}
diff --git a/ecomp-portal-BE-common/src/main/java/org/onap/portalapp/portal/listener/UserContextListener.java b/ecomp-portal-BE-common/src/main/java/org/onap/portalapp/portal/listener/UserContextListener.java
new file mode 100644
index 00000000..2d0570f8
--- /dev/null
+++ b/ecomp-portal-BE-common/src/main/java/org/onap/portalapp/portal/listener/UserContextListener.java
@@ -0,0 +1,69 @@
+/*-
+ * ============LICENSE_START==========================================
+ * ONAP Portal
+ * ===================================================================
+ * Copyright (C) 2017 AT&T Intellectual Property. All rights reserved.
+ * ===================================================================
+ *
+ * Unless otherwise specified, all software contained herein is licensed
+ * under the Apache License, Version 2.0 (the "License");
+ * you may not use this software 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.
+ *
+ * Unless otherwise specified, all documentation contained herein is licensed
+ * under the Creative Commons License, Attribution 4.0 Intl. (the "License");
+ * you may not use this documentation except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * https://creativecommons.org/licenses/by/4.0/
+ *
+ * Unless required by applicable law or agreed to in writing, documentation
+ * 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.
+ *
+ * ============LICENSE_END============================================
+ *
+ * ECOMP is a trademark and service mark of AT&T Intellectual Property.
+ */
+package org.onap.portalapp.portal.listener;
+
+import java.util.HashMap;
+
+import javax.servlet.ServletContext;
+import javax.servlet.ServletContextEvent;
+import javax.servlet.ServletContextListener;
+import javax.servlet.annotation.WebListener;
+
+@WebListener
+public class UserContextListener implements ServletContextListener{
+ @SuppressWarnings("rawtypes")
+ public void contextInitialized(ServletContextEvent event){
+ ServletContext context = event.getServletContext();
+ //
+ // instanciate a map to store references to all the active
+ // sessions and bind it to context scope.
+ //
+ HashMap activeUsers = new HashMap();
+ context.setAttribute("activeUsers", activeUsers);
+ }
+
+ /**
+ * Needed for the ServletContextListener interface.
+ */
+ public void contextDestroyed(ServletContextEvent event){
+ // To overcome the problem with losing the session references
+ // during server restarts, put code here to serialize the
+ // activeUsers HashMap. Then put code in the contextInitialized
+ // method that reads and reloads it if it exists...
+ }
+}
diff --git a/ecomp-portal-BE-common/src/main/java/org/onap/portalapp/portal/listener/UserSessionListener.java b/ecomp-portal-BE-common/src/main/java/org/onap/portalapp/portal/listener/UserSessionListener.java
new file mode 100644
index 00000000..8633a415
--- /dev/null
+++ b/ecomp-portal-BE-common/src/main/java/org/onap/portalapp/portal/listener/UserSessionListener.java
@@ -0,0 +1,140 @@
+/*-
+ * ============LICENSE_START==========================================
+ * ONAP Portal
+ * ===================================================================
+ * Copyright (C) 2017 AT&T Intellectual Property. All rights reserved.
+ * ===================================================================
+ *
+ * Unless otherwise specified, all software contained herein is licensed
+ * under the Apache License, Version 2.0 (the "License");
+ * you may not use this software 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.
+ *
+ * Unless otherwise specified, all documentation contained herein is licensed
+ * under the Creative Commons License, Attribution 4.0 Intl. (the "License");
+ * you may not use this documentation except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * https://creativecommons.org/licenses/by/4.0/
+ *
+ * Unless required by applicable law or agreed to in writing, documentation
+ * 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.
+ *
+ * ============LICENSE_END============================================
+ *
+ * ECOMP is a trademark and service mark of AT&T Intellectual Property.
+ */
+
+package org.onap.portalapp.portal.listener;
+
+import java.util.HashMap;
+
+import javax.servlet.ServletConfig;
+import javax.servlet.ServletContext;
+import javax.servlet.annotation.WebListener;
+import javax.servlet.http.HttpSession;
+import javax.servlet.http.HttpSessionEvent;
+import javax.servlet.http.HttpSessionListener;
+
+import org.onap.portalapp.portal.domain.EPUser;
+import org.onap.portalapp.portal.service.SharedContextService;
+import org.onap.portalsdk.core.domain.support.CollaborateList;
+import org.onap.portalsdk.core.logging.logic.EELFLoggerDelegate;
+import org.onap.portalsdk.core.util.SystemProperties;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.context.ApplicationContext;
+import org.springframework.util.StringUtils;
+
+/**
+ * Listens for session-create and session-destroy events.
+ */
+@WebListener
+@SuppressWarnings({ "unchecked", "rawtypes" })
+public class UserSessionListener implements HttpSessionListener {
+ EELFLoggerDelegate logger = EELFLoggerDelegate.getLogger(UserSessionListener.class);
+
+ /**
+ * Access to the database
+ */
+ @Autowired
+ SharedContextService sharedContextService;
+
+ public void init(ServletConfig config) {
+ }
+
+ /**
+ * Adds sessions to the context scoped HashMap when they begin.
+ */
+ public void sessionCreated(HttpSessionEvent event) {
+ HttpSession session = event.getSession();
+ ServletContext context = session.getServletContext();
+ HashMap activeUsers = (HashMap) context.getAttribute("activeUsers");
+
+ activeUsers.put(session.getId(), session);
+ context.setAttribute("activeUsers", activeUsers);
+ logger.info(EELFLoggerDelegate.debugLogger, "Session Created : " + session.getId());
+ }
+
+ /**
+ * Removes sessions from the context scoped HashMap when they expire or are
+ * invalidated.
+ */
+ public void sessionDestroyed(HttpSessionEvent event) {
+ try {
+ HttpSession session = event.getSession();
+ ServletContext context = session.getServletContext();
+ HashMap activeUsers = (HashMap) context.getAttribute("activeUsers");
+ activeUsers.remove(session.getId());
+
+ EPUser user = (EPUser) session
+ .getAttribute(SystemProperties.getProperty(SystemProperties.USER_ATTRIBUTE_NAME));
+ if (user != null && !StringUtils.isEmpty(user.getOrgUserId())) {
+ CollaborateList.delUserName(user.getOrgUserId());
+ }
+
+ // Remove any shared context entries for this session.
+ if (getSharedContextService() != null) {
+ getSharedContextService().deleteSharedContexts(session.getId());
+
+ // Clean the shared context each time a session is destroyed.
+ // TODO: move the threshold to configuration file.
+ getSharedContextService().expireSharedContexts(60 * 60 * 8);
+ }
+
+ logger.info(EELFLoggerDelegate.debugLogger, "Session Destroyed : " + session.getId());
+
+ } catch (Exception e) {
+ logger.warn(EELFLoggerDelegate.errorLogger, "sessionDestroyed failed", e);
+ }
+ }
+
+ private static ApplicationContext applicationContext;
+
+ public static void setApplicationContext(ApplicationContext _applicationContext) {
+ applicationContext = _applicationContext;
+ }
+
+ public SharedContextService getSharedContextService() {
+ if (sharedContextService == null) {
+ if (applicationContext != null)
+ sharedContextService = (SharedContextService) applicationContext.getBean("sharedContextService");
+ }
+
+ return sharedContextService;
+ }
+
+ public void setSharedContextService(SharedContextService sharedContextService) {
+ this.sharedContextService = sharedContextService;
+ }
+}
diff --git a/ecomp-portal-BE-common/src/main/java/org/onap/portalapp/portal/logging/aop/EPAuditLog.java b/ecomp-portal-BE-common/src/main/java/org/onap/portalapp/portal/logging/aop/EPAuditLog.java
new file mode 100644
index 00000000..8c72ed73
--- /dev/null
+++ b/ecomp-portal-BE-common/src/main/java/org/onap/portalapp/portal/logging/aop/EPAuditLog.java
@@ -0,0 +1,49 @@
+/*-
+ * ============LICENSE_START==========================================
+ * ONAP Portal
+ * ===================================================================
+ * Copyright (C) 2017 AT&T Intellectual Property. All rights reserved.
+ * ===================================================================
+ *
+ * Unless otherwise specified, all software contained herein is licensed
+ * under the Apache License, Version 2.0 (the "License");
+ * you may not use this software 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.
+ *
+ * Unless otherwise specified, all documentation contained herein is licensed
+ * under the Creative Commons License, Attribution 4.0 Intl. (the "License");
+ * you may not use this documentation except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * https://creativecommons.org/licenses/by/4.0/
+ *
+ * Unless required by applicable law or agreed to in writing, documentation
+ * 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.
+ *
+ * ============LICENSE_END============================================
+ *
+ * ECOMP is a trademark and service mark of AT&T Intellectual Property.
+ */
+package org.onap.portalapp.portal.logging.aop;
+
+import java.lang.annotation.ElementType;
+import java.lang.annotation.Retention;
+import java.lang.annotation.RetentionPolicy;
+import java.lang.annotation.Target;
+
+@Target({ElementType.METHOD, ElementType.TYPE})
+@Retention(RetentionPolicy.RUNTIME)
+public @interface EPAuditLog {
+ String value() default "";
+}
diff --git a/ecomp-portal-BE-common/src/main/java/org/onap/portalapp/portal/logging/aop/EPEELFLoggerAdvice.java b/ecomp-portal-BE-common/src/main/java/org/onap/portalapp/portal/logging/aop/EPEELFLoggerAdvice.java
new file mode 100644
index 00000000..11fb2fb5
--- /dev/null
+++ b/ecomp-portal-BE-common/src/main/java/org/onap/portalapp/portal/logging/aop/EPEELFLoggerAdvice.java
@@ -0,0 +1,400 @@
+/*-
+ * ============LICENSE_START==========================================
+ * ONAP Portal
+ * ===================================================================
+ * Copyright (C) 2017 AT&T Intellectual Property. All rights reserved.
+ * ===================================================================
+ *
+ * Unless otherwise specified, all software contained herein is licensed
+ * under the Apache License, Version 2.0 (the "License");
+ * you may not use this software 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.
+ *
+ * Unless otherwise specified, all documentation contained herein is licensed
+ * under the Creative Commons License, Attribution 4.0 Intl. (the "License");
+ * you may not use this documentation except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * https://creativecommons.org/licenses/by/4.0/
+ *
+ * Unless required by applicable law or agreed to in writing, documentation
+ * 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.
+ *
+ * ============LICENSE_END============================================
+ *
+ * ECOMP is a trademark and service mark of AT&T Intellectual Property.
+ */
+package org.onap.portalapp.portal.logging.aop;
+
+import java.net.InetAddress;
+import java.text.SimpleDateFormat;
+import java.util.Date;
+import java.util.UUID;
+
+import javax.servlet.http.HttpServletRequest;
+
+import org.onap.portalapp.portal.domain.EPUser;
+import org.onap.portalapp.portal.utils.EPCommonSystemProperties;
+import org.onap.portalapp.util.EPUserUtils;
+import org.onap.portalsdk.core.exception.SessionExpiredException;
+import org.onap.portalsdk.core.logging.format.AlarmSeverityEnum;
+import org.onap.portalsdk.core.logging.format.AuditLogFormatter;
+import org.onap.portalsdk.core.logging.logic.EELFLoggerDelegate;
+import org.onap.portalsdk.core.util.SystemProperties;
+import org.onap.portalsdk.core.util.SystemProperties.SecurityEventTypeEnum;
+import org.onap.portalsdk.core.web.support.UserUtils;
+import org.slf4j.MDC;
+
+import com.att.eelf.configuration.Configuration;
+
+@org.springframework.context.annotation.Configuration
+public class EPEELFLoggerAdvice {
+
+ private EELFLoggerDelegate adviceLogger = EELFLoggerDelegate.getLogger(EPEELFLoggerAdvice.class);
+
+ /**
+ * DateTime Format according to the ECOMP Application Logging Guidelines.
+ */
+
+ /**
+ * @return Current date and time in the format specified by the ECOMP
+ * Application Logging Guidelines.
+ */
+ public static String getCurrentDateTimeUTC() {
+ SimpleDateFormat ecompLogDateFormat = new SimpleDateFormat("yyyy-MM-dd'T'HH:mm:ss.SSSXXX");
+ String currentDateTime = ecompLogDateFormat.format(new Date());
+ return currentDateTime;
+ }
+
+ /**
+ * Sets logging context with values from HttpServletRequest object.
+ *
+ * @param req
+ * HttpServletRequest
+ * @param securityEventType
+ * SecurityEventTypeEnum
+ */
+ public void loadServletRequestBasedDefaults(HttpServletRequest req, SecurityEventTypeEnum securityEventType) {
+ try {
+ setHttpRequestBasedDefaultsIntoGlobalLoggingContext(req, securityEventType, req.getServletPath());
+ } catch (Exception e) {
+ adviceLogger.error(EELFLoggerDelegate.errorLogger, "loadServletRequestBasedDefaults failed", e);
+ }
+ }
+
+ /**
+ *
+ * @param securityEventType
+ * @param args
+ * @param passOnArgs
+ * @return Object array
+ */
+ public Object[] before(SecurityEventTypeEnum securityEventType, Object[] args, Object[] passOnArgs) {
+ String className = "";
+ if (passOnArgs.length > 0 && passOnArgs[0] != null)
+ className = passOnArgs[0].toString();
+ String methodName = "";
+ if (passOnArgs.length > 1 && passOnArgs[1] != null)
+ methodName = passOnArgs[1].toString();
+
+ // Initialize Request defaults only for controller methods.
+ MDC.put(className + methodName + EPCommonSystemProperties.METRICSLOG_BEGIN_TIMESTAMP, getCurrentDateTimeUTC());
+ MDC.put(EPCommonSystemProperties.TARGET_ENTITY, EPCommonSystemProperties.ECOMP_PORTAL_BE);
+ MDC.put(EPCommonSystemProperties.TARGET_SERVICE_NAME, methodName);
+ if (MDC.get(Configuration.MDC_KEY_REQUEST_ID) == null){
+ String requestId = UUID.randomUUID().toString();
+ MDC.put(Configuration.MDC_KEY_REQUEST_ID, requestId);
+ }
+ MDC.put(EPCommonSystemProperties.PARTNER_NAME, "Unknown");
+ MDC.put(Configuration.MDC_SERVICE_NAME, EPCommonSystemProperties.ECOMP_PORTAL_BE);
+
+ if (securityEventType != null) {
+ MDC.put(className + methodName + EPCommonSystemProperties.AUDITLOG_BEGIN_TIMESTAMP,
+ getCurrentDateTimeUTC());
+ HttpServletRequest req = null;
+ if (args.length > 0 && args[0] != null && args[0] instanceof HttpServletRequest) {
+ req = (HttpServletRequest) args[0];
+ this.setHttpRequestBasedDefaultsIntoGlobalLoggingContext(req, securityEventType, methodName);
+ }
+ }
+
+ EELFLoggerDelegate logger = EELFLoggerDelegate.getLogger(className);
+ logger.debug(EELFLoggerDelegate.debugLogger, "EPEELFLoggerAdvice#before: entering {}", methodName);
+ return new Object[] { "" };
+ }
+
+ /**
+ *
+ * @param securityEventType
+ * @param statusCode
+ * @param responseCode
+ * @param args
+ * @param returnArgs
+ * @param passOnArgs
+ */
+ public void after(SecurityEventTypeEnum securityEventType, String statusCode, String responseCode, Object[] args,
+ Object[] returnArgs, Object[] passOnArgs) {
+ String className = "";
+ if (passOnArgs.length > 0 && passOnArgs[0] != null)
+ className = passOnArgs[0].toString();
+ // Method Name
+ String methodName = "";
+ if (passOnArgs.length > 1 && passOnArgs[1] != null)
+ methodName = passOnArgs[1].toString();
+
+ if (MDC.get(EPCommonSystemProperties.TARGET_SERVICE_NAME) == null
+ || MDC.get(EPCommonSystemProperties.TARGET_SERVICE_NAME) == "")
+ MDC.put(EPCommonSystemProperties.TARGET_SERVICE_NAME, methodName);
+
+ if (MDC.get(EPCommonSystemProperties.TARGET_ENTITY) == null
+ || MDC.get(EPCommonSystemProperties.TARGET_ENTITY) == "")
+ MDC.put(EPCommonSystemProperties.TARGET_ENTITY, EPCommonSystemProperties.ECOMP_PORTAL_BE);
+
+ MDC.put(EPCommonSystemProperties.METRICSLOG_BEGIN_TIMESTAMP,
+ MDC.get(className + methodName + EPCommonSystemProperties.METRICSLOG_BEGIN_TIMESTAMP));
+ MDC.put(EPCommonSystemProperties.METRICSLOG_END_TIMESTAMP, getCurrentDateTimeUTC());
+ this.calculateDateTimeDifference(MDC.get(EPCommonSystemProperties.METRICSLOG_BEGIN_TIMESTAMP),
+ MDC.get(EPCommonSystemProperties.METRICSLOG_END_TIMESTAMP));
+
+ // Making sure to reload the INCOMING request MDC defaults if they have
+ // been wiped out by either Outgoing or LDAP Phone book search
+ // operations.
+ if (securityEventType != null && args.length > 0 && args[0] != null && args[0] instanceof HttpServletRequest
+ && securityEventType == SecurityEventTypeEnum.INCOMING_REST_MESSAGE
+ && (MDC.get(EPCommonSystemProperties.FULL_URL) == null
+ || MDC.get(EPCommonSystemProperties.FULL_URL) == "")) {
+ HttpServletRequest req = (HttpServletRequest) args[0];
+ this.setHttpRequestBasedDefaultsIntoGlobalLoggingContext(req, securityEventType, methodName);
+ }
+
+ // Use external API response code in case if it resulted in an error.
+ String externalAPIResponseCode = MDC.get(EPCommonSystemProperties.EXTERNAL_API_RESPONSE_CODE);
+ if (externalAPIResponseCode == null || externalAPIResponseCode == ""
+ || externalAPIResponseCode.trim().equalsIgnoreCase("200")) {
+ MDC.put(EPCommonSystemProperties.RESPONSE_CODE, responseCode);
+ MDC.put(EPCommonSystemProperties.STATUS_CODE, statusCode);
+ } else {
+ MDC.put(EPCommonSystemProperties.RESPONSE_CODE, externalAPIResponseCode);
+ MDC.put(EPCommonSystemProperties.STATUS_CODE, "ERROR");
+ }
+
+ EELFLoggerDelegate logger = EELFLoggerDelegate.getLogger(className);
+ logger.debug(EELFLoggerDelegate.debugLogger, "EPEELFLoggerAdvice#after: finished {}", methodName);
+ // add the metrics log
+ logger.info(EELFLoggerDelegate.metricsLogger, methodName + " operation is completed.");
+
+ // Log security message, if necessary
+ if (securityEventType != null) {
+ MDC.put(EPCommonSystemProperties.AUDITLOG_BEGIN_TIMESTAMP,
+ MDC.get(className + methodName + EPCommonSystemProperties.AUDITLOG_BEGIN_TIMESTAMP));
+ MDC.put(EPCommonSystemProperties.AUDITLOG_END_TIMESTAMP, getCurrentDateTimeUTC());
+ this.calculateDateTimeDifference(MDC.get(EPCommonSystemProperties.AUDITLOG_BEGIN_TIMESTAMP),
+ MDC.get(EPCommonSystemProperties.AUDITLOG_END_TIMESTAMP));
+
+ this.logSecurityMessage(logger, securityEventType, methodName);
+
+ // Outgoing & LDAP messages are part of Incoming requests so,
+ // keep "RequestId", "PartnerName", "ServiceName", "LoginId" &
+ // "ResponseCode" etc. in memory and remove it only when
+ // finished processing the parent incoming message.
+ if (securityEventType != SecurityEventTypeEnum.OUTGOING_REST_MESSAGE
+ && securityEventType != SecurityEventTypeEnum.LDAP_PHONEBOOK_USER_SEARCH) {
+ MDC.remove(Configuration.MDC_KEY_REQUEST_ID);
+ MDC.remove(EPCommonSystemProperties.PARTNER_NAME);
+ MDC.remove(Configuration.MDC_SERVICE_NAME);
+ MDC.remove(EPCommonSystemProperties.MDC_LOGIN_ID);
+ MDC.remove(EPCommonSystemProperties.EXTERNAL_API_RESPONSE_CODE);
+ }else{
+ MDC.remove(Configuration.MDC_KEY_REQUEST_ID);
+ MDC.remove(EPCommonSystemProperties.PARTNER_NAME);
+ MDC.remove(Configuration.MDC_SERVICE_NAME);
+ }
+
+ // clear when finishes audit logging
+ MDC.remove(EPCommonSystemProperties.FULL_URL);
+ MDC.remove(EPCommonSystemProperties.PROTOCOL);
+ MDC.remove(EPCommonSystemProperties.STATUS_CODE);
+ MDC.remove(className + methodName + EPCommonSystemProperties.AUDITLOG_BEGIN_TIMESTAMP);
+ MDC.remove(EPCommonSystemProperties.AUDITLOG_BEGIN_TIMESTAMP);
+ MDC.remove(EPCommonSystemProperties.AUDITLOG_END_TIMESTAMP);
+ MDC.remove(EPCommonSystemProperties.RESPONSE_CODE);
+ }
+ MDC.remove(className + methodName + EPCommonSystemProperties.METRICSLOG_BEGIN_TIMESTAMP);
+ MDC.remove(EPCommonSystemProperties.METRICSLOG_BEGIN_TIMESTAMP);
+ MDC.remove(EPCommonSystemProperties.METRICSLOG_END_TIMESTAMP);
+ MDC.remove(EPCommonSystemProperties.MDC_TIMER);
+ MDC.remove(EPCommonSystemProperties.TARGET_ENTITY);
+ MDC.remove(EPCommonSystemProperties.TARGET_SERVICE_NAME);
+
+ }
+
+ /**
+ *
+ * @param logger
+ * @param securityEventType
+ * @param restMethod
+ */
+ private void logSecurityMessage(EELFLoggerDelegate logger, SecurityEventTypeEnum securityEventType,
+ String restMethod) {
+ StringBuilder additionalInfoAppender = new StringBuilder();
+ String auditMessage = "";
+
+ if (securityEventType == SecurityEventTypeEnum.OUTGOING_REST_MESSAGE) {
+ additionalInfoAppender.append(String.format("%s '%s' request was initiated.", restMethod,
+ MDC.get(EPCommonSystemProperties.TARGET_SERVICE_NAME)));
+ } else if (securityEventType == SecurityEventTypeEnum.LDAP_PHONEBOOK_USER_SEARCH) {
+ additionalInfoAppender.append("LDAP Phonebook search operation is performed.");
+ } else {
+ additionalInfoAppender.append(String.format("%s request was received.", restMethod));
+
+ if (securityEventType == SecurityEventTypeEnum.FE_LOGIN_ATTEMPT) {
+ String loginId = "";
+ String additionalMessage = " Successfully authenticated.";
+ loginId = MDC.get(EPCommonSystemProperties.MDC_LOGIN_ID);
+ if (loginId == null || loginId == "" || loginId == EPCommonSystemProperties.UNKNOWN) {
+ additionalMessage = " No cookies are found.";
+ }
+ additionalInfoAppender.append(additionalMessage);
+ } else if (securityEventType == SecurityEventTypeEnum.FE_LOGOUT) {
+ additionalInfoAppender.append(" User has been successfully logged out.");
+ }
+ }
+
+ String fullURL = MDC.get(EPCommonSystemProperties.FULL_URL);
+ if (fullURL != null && fullURL != "") {
+ additionalInfoAppender.append(" Request-URL:" + MDC.get(EPCommonSystemProperties.FULL_URL));
+ }
+
+ auditMessage = AuditLogFormatter.getInstance().createMessage(MDC.get(EPCommonSystemProperties.PROTOCOL),
+ securityEventType.name(), MDC.get(EPCommonSystemProperties.MDC_LOGIN_ID),
+ additionalInfoAppender.toString());
+
+ logger.info(EELFLoggerDelegate.auditLogger, auditMessage);
+ }
+
+ /**
+ *
+ * @param req
+ * @param securityEventType
+ * @param restMethod
+ */
+ private void setHttpRequestBasedDefaultsIntoGlobalLoggingContext(HttpServletRequest req,
+ SecurityEventTypeEnum securityEventType, String restMethod) {
+ /**
+ * No need to load the request based defaults for the following security
+ * messages since either they are initiated by the Portal BE or not Http
+ * request based.
+ */
+ if (req != null) {
+ if (securityEventType != SecurityEventTypeEnum.OUTGOING_REST_MESSAGE
+ && securityEventType != SecurityEventTypeEnum.LDAP_PHONEBOOK_USER_SEARCH
+ && securityEventType != SecurityEventTypeEnum.INCOMING_UEB_MESSAGE) {
+ // Load the RequestID (aka TrasactionId) into MDC context.
+ String requestId = UserUtils.getRequestId(req);
+ if (requestId == null||requestId.trim().length()==0) {
+ requestId = UUID.randomUUID().toString();
+ }
+ MDC.put(Configuration.MDC_KEY_REQUEST_ID, requestId);
+
+ // Load user agent into MDC context, if available.
+ String accessingClient = "Unknown";
+ accessingClient = req.getHeader(SystemProperties.USERAGENT_NAME);
+ if (accessingClient != null && accessingClient.trim().length()==0 && (accessingClient.contains("Mozilla")
+ || accessingClient.contains("Chrome") || accessingClient.contains("Safari"))) {
+ accessingClient = EPCommonSystemProperties.ECOMP_PORTAL_FE;
+ }
+ MDC.put(EPCommonSystemProperties.PARTNER_NAME, accessingClient);
+
+ // Load loginId into MDC context.
+ EPUser user = null;
+ try {
+ user = EPUserUtils.getUserSession(req);
+ } catch (SessionExpiredException se) {
+ adviceLogger.debug(EELFLoggerDelegate.debugLogger,
+ "setHttpRequestBasedDefaultsIntoGlobalLoggingContext: No user found in session");
+ }
+
+ MDC.put(EPCommonSystemProperties.MDC_LOGIN_ID, (user != null ? user.getOrgUserId() : "NoUser"));
+
+ // Rest URL & Protocol
+ String restURL = "";
+ MDC.put(EPCommonSystemProperties.FULL_URL, EPCommonSystemProperties.UNKNOWN);
+ MDC.put(EPCommonSystemProperties.PROTOCOL, EPCommonSystemProperties.HTTP);
+ restURL = UserUtils.getFullURL(req);
+ if (restURL != null && restURL != "") {
+ MDC.put(EPCommonSystemProperties.FULL_URL, restURL);
+ if (restURL.toLowerCase().contains("https")) {
+ MDC.put(EPCommonSystemProperties.PROTOCOL, EPCommonSystemProperties.HTTPS);
+ }
+ }
+
+ // Rest Path
+ MDC.put(Configuration.MDC_SERVICE_NAME, restMethod);
+ String restPath = req.getServletPath();
+ if (restPath != null && restPath != "") {
+ MDC.put(Configuration.MDC_SERVICE_NAME, restPath);
+ }
+
+ // Client IPAddress i.e. IPAddress of the remote host who is
+ // making this request.
+ String clientIPAddress = "";
+ clientIPAddress = req.getHeader("X-FORWARDED-FOR");
+ if (clientIPAddress == null) {
+ clientIPAddress = req.getRemoteAddr();
+ }
+ MDC.put(EPCommonSystemProperties.CLIENT_IP_ADDRESS, clientIPAddress);
+ } else if (securityEventType == SecurityEventTypeEnum.LDAP_PHONEBOOK_USER_SEARCH) {
+ MDC.put(EPCommonSystemProperties.TARGET_ENTITY, "Phonebook");
+ MDC.put(EPCommonSystemProperties.TARGET_SERVICE_NAME, "search");
+ }
+ } else {
+ MDC.put(Configuration.MDC_SERVICE_NAME, restMethod);
+ MDC.put(EPCommonSystemProperties.PARTNER_NAME, EPCommonSystemProperties.ECOMP_PORTAL_FE);
+ }
+
+ MDC.put(Configuration.MDC_SERVICE_INSTANCE_ID, "");
+ MDC.put(Configuration.MDC_ALERT_SEVERITY, AlarmSeverityEnum.INFORMATIONAL.severity());
+ try {
+ MDC.put(Configuration.MDC_SERVER_FQDN, InetAddress.getLocalHost().getCanonicalHostName());
+ MDC.put(Configuration.MDC_SERVER_IP_ADDRESS, InetAddress.getLocalHost().getHostAddress());
+ MDC.put(Configuration.MDC_INSTANCE_UUID, SystemProperties.getProperty(SystemProperties.INSTANCE_UUID));
+ } catch (Exception e) {
+ adviceLogger.error(EELFLoggerDelegate.errorLogger,
+ "setHttpRequestBasedDefaultsIntoGlobalLoggingContext failed", e);
+ }
+ }
+
+ /**
+ *
+ * @param beginDateTime
+ * @param endDateTime
+ */
+ private void calculateDateTimeDifference(String beginDateTime, String endDateTime) {
+ if (beginDateTime != null && endDateTime != null && !beginDateTime.isEmpty()&&!endDateTime.isEmpty()) {
+ 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) {
+ adviceLogger.error(EELFLoggerDelegate.errorLogger, "calculateDateTimeDifference failed", e);
+ }
+ }
+ }
+
+ public String getInternalResponseCode() {
+ return MDC.get(EPCommonSystemProperties.RESPONSE_CODE);
+ }
+}
diff --git a/ecomp-portal-BE-common/src/main/java/org/onap/portalapp/portal/logging/aop/EPMetricsLog.java b/ecomp-portal-BE-common/src/main/java/org/onap/portalapp/portal/logging/aop/EPMetricsLog.java
new file mode 100644
index 00000000..ee52dd81
--- /dev/null
+++ b/ecomp-portal-BE-common/src/main/java/org/onap/portalapp/portal/logging/aop/EPMetricsLog.java
@@ -0,0 +1,49 @@
+/*-
+ * ============LICENSE_START==========================================
+ * ONAP Portal
+ * ===================================================================
+ * Copyright (C) 2017 AT&T Intellectual Property. All rights reserved.
+ * ===================================================================
+ *
+ * Unless otherwise specified, all software contained herein is licensed
+ * under the Apache License, Version 2.0 (the "License");
+ * you may not use this software 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.
+ *
+ * Unless otherwise specified, all documentation contained herein is licensed
+ * under the Creative Commons License, Attribution 4.0 Intl. (the "License");
+ * you may not use this documentation except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * https://creativecommons.org/licenses/by/4.0/
+ *
+ * Unless required by applicable law or agreed to in writing, documentation
+ * 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.
+ *
+ * ============LICENSE_END============================================
+ *
+ * ECOMP is a trademark and service mark of AT&T Intellectual Property.
+ */
+package org.onap.portalapp.portal.logging.aop;
+
+import java.lang.annotation.ElementType;
+import java.lang.annotation.Retention;
+import java.lang.annotation.RetentionPolicy;
+import java.lang.annotation.Target;
+
+@Target({ElementType.METHOD, ElementType.TYPE})
+@Retention(RetentionPolicy.RUNTIME)
+public @interface EPMetricsLog {
+ String value() default "";
+}
diff --git a/ecomp-portal-BE-common/src/main/java/org/onap/portalapp/portal/logging/format/ApplicationCodes.properties b/ecomp-portal-BE-common/src/main/java/org/onap/portalapp/portal/logging/format/ApplicationCodes.properties
new file mode 100644
index 00000000..cd686ce2
--- /dev/null
+++ b/ecomp-portal-BE-common/src/main/java/org/onap/portalapp/portal/logging/format/ApplicationCodes.properties
@@ -0,0 +1,141 @@
+###
+# ================================================================================
+# 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.
+# ================================================================================
+###
+########################################################################
+#Resource key=Error Code|Message text|Resolution text |Description text
+#######
+#Newlines can be utilized to add some clarity ensuring continuing line
+#has atleast one leading space
+#ResourceKey=\
+# ERR0000E\
+# Sample error msg txt\
+# Sample resolution msg\
+# Sample description txt
+#
+######
+#Error code classification category
+#100 Permission errors
+#200 Availability errors/Timeouts
+#300 Data errors
+#400 Schema Interface type/validation errors
+#500 Business process errors
+#900 Unknown errors
+#
+########################################################################
+
+# Define Alarm Codes Specific to ECOMP Portal
+BEUEBAUTHENTICATIONERROR_ONE_ARGUMENT= ||Reason: {0}.|\
+ An Authentication failure occurred during access to UEB server. Please check that UEB keys are configured correctly under fusion.properties file.
+
+BERESTAPIAUTHENTICATIONERROR = |||Please check application credentials defined in Database or portal.properties file.
+
+INTERNALAUTHENTICATIONINFO_ONE_ARGUMENT=||Description: {0}.|Please check the logs for more information.
+
+INTERNALAUTHENTICATIONWARNING_ONE_ARGUMENT=||Description: {0}.|Please check the logs for more information.
+
+INTERNALAUTHENTICATIONERROR_ONE_ARGUMENT=||Description: {0}.|Please check the logs for more information.
+
+INTERNALAUTHENTICATIONFATAL_ONE_ARGUMENT=||Description: {0}.|Please check the logs for more information.
+
+BEHEALTHCHECKERROR= |||Please check the logs for more information.
+
+BEHEALTHCHECKMYSQLERROR= ||Please check the logs for more information.|\
+ Check connectivity to MYSQL is configured correctly under system.properties file.
+
+BEHEALTHCHECKUEBCLUSTERERROR= ||Please check the logs for more information.|\
+ Check connectivity to UEB cluster which is configured under portal.properties file.
+
+FEHEALTHCHECKERROR= |||Please check connectivity from this FE instance towards BE or BE Load Balancer.
+
+BEHEALTHCHECKRECOVERY= |||Please check logs for more specific information about the problem.
+
+BEHEALTHCHECKMYSQLRECOVERY= |||Please check logs for more specific information about the problem.
+
+BEHEALTHCHECKUEBCLUSTERRECOVERY= |||Please check logs for more specific information about the problem.
+
+FEHEALTHCHECKRECOVERY= |||Please check logs for more specific information about the problem.
+
+#UEB communication
+BEUEBCONNECTIONERROR_ONE_ARGUMENT= ||Reason: {0}.|\
+ Please check UEB server list and keys configured under Portal.Properties file.
+
+BEUEBUNKOWNHOSTERROR_ONE_ARGUMENT= ||Cannot reach host {0}.|\
+ Please check UEB server list and keys configured under Portal.Properties file.
+
+#Onboarding apps
+BEUEBREGISTERONBOARDINGAPPERROR= ||Reason: {0}.|\
+ Please check UEB server list and keys configured under Portal.Properties file.
+
+#HTTP communication
+BEHTTPCONNECTIONERROR_ONE_ARGUMENT= ||Reason: {0}.|Please check the logs for more information.
+
+INTERNALCONNECTIONINFO_ONE_ARGUMENT= ||Description: {0}.|Please check the logs for more information.
+
+INTERNALCONNECTIONWARNING_ONE_ARGUMENT= ||Description: {0}.|Please check the logs for more information.
+
+INTERNALCONNECTIONERROR_ONE_ARGUMENT= ||Description: {0}.|Please check the logs for more information.
+
+INTERNALCONNECTIONFATAL_ONE_ARGUMENT= ||Description: {0}.|Please check the logs for more information.
+
+BEUEBOBJECTNOTFOUNDERROR_ONE_ARGUMENT= ||Data not found: {0}.|\
+ An error occurred during access to UEB Server, {1} failed to either register or unregister to/from UEB topic.
+
+#Login error codes
+BEUSERMISSINGERROR_ONE_ARGUMENT= |||\
+ User {0} must be added to the corresponding application with proper user roles.
+
+BEUSERINACTIVEWARNING_ONE_ARGUMENT= |||\
+ User {0} must be added to the corresponding application with proper user roles.
+
+BEUSERADMINPRIVILEGESINFO_ONE_ARGUMENT= |||\
+ User {0} should be given proper administrator role for the corresponding application to perform the necessary actions.
+
+BEINVALIDJSONINPUT= |||Please check error logs for more information.
+
+BEINCORRECTHTTPSTATUSERROR= |||Please check logs for more information.
+
+BEINITIALIZATIONERROR= |||Please check logs for more information.
+
+BEUEBSYSTEMERROR= ||\
+ Operation: {0}.|\
+ An error occurred in {1} distribution mechanism. Please check the logs for more information.
+
+BEDAOSYSTEMERROR= |||Please check MySQL DB health or look at the logs for more details.
+
+BESYSTEMERROR= |||Please check logs for more information.
+
+BEEXECUTEROLLBACKERROR= |||Please check MYSQL DB health or look at the logs for more details.
+
+FEHTTPLOGGINGERROR= |||Please check MYSQL DB health or look at the logs for more details.
+
+FEPORTALSERVLETERROR= |||Please check logs for more specific information about the problem.
+
+BEDAOCLOSESESSIONERROR= |||Please check MYSQL DB health or look at the logs form more details.
+
+BERESTAPIGENERALERROR= |||Please check error log for more information.
+
+FEHEALTHCHECKGENERALERROR= |||Please check error log for more information.
+
+INTERNALUNEXPECTEDINFO_ONE_ARGUMENT= |||Description: {0}.
+
+INTERNALUNEXPECTEDWARNING_ONE_ARGUMENT= |||Description: {0}.
+
+INTERNALUNEXPECTEDERROR_ONE_ARGUMENT= |||Description: {0}.
+
+INTERNALUNEXPECTEDFATAL_ONE_ARGUMENT= |||Description: {0}.
diff --git a/ecomp-portal-BE-common/src/main/java/org/onap/portalapp/portal/logging/format/EPAppMessagesEnum.java b/ecomp-portal-BE-common/src/main/java/org/onap/portalapp/portal/logging/format/EPAppMessagesEnum.java
new file mode 100644
index 00000000..d7536bf7
--- /dev/null
+++ b/ecomp-portal-BE-common/src/main/java/org/onap/portalapp/portal/logging/format/EPAppMessagesEnum.java
@@ -0,0 +1,298 @@
+/*-
+ * ============LICENSE_START==========================================
+ * ONAP Portal
+ * ===================================================================
+ * Copyright (C) 2017 AT&T Intellectual Property. All rights reserved.
+ * ===================================================================
+ *
+ * Unless otherwise specified, all software contained herein is licensed
+ * under the Apache License, Version 2.0 (the "License");
+ * you may not use this software 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.
+ *
+ * Unless otherwise specified, all documentation contained herein is licensed
+ * under the Creative Commons License, Attribution 4.0 Intl. (the "License");
+ * you may not use this documentation except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * https://creativecommons.org/licenses/by/4.0/
+ *
+ * Unless required by applicable law or agreed to in writing, documentation
+ * 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.
+ *
+ * ============LICENSE_END============================================
+ *
+ * ECOMP is a trademark and service mark of AT&T Intellectual Property.
+ */
+package org.onap.portalapp.portal.logging.format;
+
+import org.onap.portalsdk.core.logging.format.AlarmSeverityEnum;
+import org.onap.portalsdk.core.logging.format.ErrorSeverityEnum;
+import org.onap.portalsdk.core.logging.format.ErrorTypeEnum;
+
+/**
+ *
+ * Add ECOMP Portal Specific Error Code Enums here, for generic
+ * ones (ones you think are useful not only Portal but also SDK), add it
+ * to the enum class AppMessagesEnum defined in SDK.
+ */
+public enum EPAppMessagesEnum {
+ /*
+ 100-199 Security/Permission Related
+ - Authentication problems (from external client, to external server)
+ - Certification errors
+ -
+
+ 200-299 Availability/Timeout Related
+ - connectivity error
+ - connection timeout
+
+ 300-399 Data Access/Integrity Related
+ - Data in graph in invalid(E.g. no creator is found for service)
+ - Artifact is missing in ES, but exists in graph.
+
+ 400-499 Schema Interface Type/Validation
+ - received Pay-load checksum is invalid
+ - received JSON is not valid
+
+ 500-599 Business/Flow Processing Related
+ - check out to service is not allowed
+ - Roll-back is done
+ - failed to generate heat file
+
+
+ 600-899 Reserved - do not use
+
+ 900-999 Unknown Errors
+ - Unexpected exception
+ */
+
+ BeUebAuthenticationError(EPErrorCodesEnum.BEUEBAUTHENTICATIONERROR_ONE_ARGUMENT, ErrorTypeEnum.AUTHENTICATION_PROBLEM, AlarmSeverityEnum.MAJOR, ErrorSeverityEnum.ERROR,
+ "ERR100E", "An Authentication failure occurred during access to UEB server", "Details: {0}.", "Please check UEB server list and keys configured under Portal.Properties file."),
+
+ BeRestApiAuthenticationError(EPErrorCodesEnum.BERESTAPIAUTHENTICATIONERROR, ErrorTypeEnum.AUTHENTICATION_PROBLEM, AlarmSeverityEnum.MAJOR, ErrorSeverityEnum.ERROR,
+ "ERR101E", "Rejected an incoming REST API request due to invalid credentials", "", "Please check application credentials defined in Database or properties files."),
+
+ InternalAuthenticationInfo(EPErrorCodesEnum.INTERNALAUTHENTICATIONINFO_ONE_ARGUMENT, ErrorTypeEnum.AUTHENTICATION_PROBLEM, AlarmSeverityEnum.INFORMATIONAL, ErrorSeverityEnum.INFO,
+ "ERR199I", "Internal authentication problem", "Details: {0}.", "Please check the logs for more information."),
+
+ InternalAuthenticationWarning(EPErrorCodesEnum.INTERNALAUTHENTICATIONWARNING_ONE_ARGUMENT, ErrorTypeEnum.AUTHENTICATION_PROBLEM, AlarmSeverityEnum.MINOR, ErrorSeverityEnum.WARN,
+ "ERR199W", "Internal authentication problem", "Details: {0}.", "Please check the logs for more information."),
+
+ InternalAuthenticationError(EPErrorCodesEnum.INTERNALAUTHENTICATIONERROR_ONE_ARGUMENT, ErrorTypeEnum.AUTHENTICATION_PROBLEM, AlarmSeverityEnum.MAJOR, ErrorSeverityEnum.ERROR,
+ "ERR199E", "Internal authentication problem", "Details: {0}.", "Please check the logs for more information."),
+
+ InternalAuthenticationFatal(EPErrorCodesEnum.INTERNALAUTHENTICATIONFATAL_ONE_ARGUMENT, ErrorTypeEnum.AUTHENTICATION_PROBLEM, AlarmSeverityEnum.CRITICAL, ErrorSeverityEnum.FATAL,
+ "ERR199F", "Internal authentication problem", "Details: {0}.", "Please check the logs for more information."),
+
+ BeHealthCheckError(EPErrorCodesEnum.BeHEALTHCHECKERROR, ErrorTypeEnum.SYSTEM_ERROR, AlarmSeverityEnum.CRITICAL, ErrorSeverityEnum.ERROR,
+ "ERR200E", "ECOMP-PORTAL Back-end probably lost connectivity to either one of the following components: MySQL DB, UEB Cluster", "", "Please check the logs for more information."),
+
+ BeHealthCheckMySqlError(EPErrorCodesEnum.BEHEALTHCHECKMYSQLERROR, ErrorTypeEnum.SYSTEM_ERROR, AlarmSeverityEnum.CRITICAL, ErrorSeverityEnum.ERROR,
+ "ERR201E", "ECOMP-PORTAL Back-end probably lost connectivity to MySQL DB", "", "Check connectivity to MYSQL is configured correctly under system.properties file."),
+
+ BeHealthCheckUebClusterError(EPErrorCodesEnum.BEHEALTHCHECKUEBCLUSTERERROR, ErrorTypeEnum.SYSTEM_ERROR, AlarmSeverityEnum.CRITICAL, ErrorSeverityEnum.ERROR,
+ "ERR203E", "ECOMP-PORTAL Back-end probably lost connectivity to UEB Cluster", "", "Check connectivity to UEB cluster which is configured under portal.properties file."),
+
+ FeHealthCheckError(EPErrorCodesEnum.FEHEALTHCHECKERROR, ErrorTypeEnum.SYSTEM_ERROR, AlarmSeverityEnum.CRITICAL, ErrorSeverityEnum.ERROR,
+ "ERR204E", "Unable to connect to a valid ECOMP-PORTAL Back-end Server.", "", "Please check connectivity from this FE instance towards BE or BE Load Balancer."),
+
+ BeHealthCheckRecovery(EPErrorCodesEnum.BEHEALTHCHECKRECOVERY, ErrorTypeEnum.RECOVERY, AlarmSeverityEnum.INFORMATIONAL, ErrorSeverityEnum.INFO,
+ "ERR205I", "ECOMP-PORTAL Back-end Recovery to either one of the following components: MySQL DB, UEB Cluster", "", "Please check logs for more specific information about the problem."),
+
+ BeHealthCheckMySqlRecovery(EPErrorCodesEnum.BEHEALTHCHECKMYSQLRECOVERY, ErrorTypeEnum.RECOVERY, AlarmSeverityEnum.INFORMATIONAL, ErrorSeverityEnum.INFO,
+ "ERR206I", "ECOMP-PORTAL Back-end connection recovery to MySQL DB", "", "Please check logs for more specific information about the problem."),
+
+ BeHealthCheckUebClusterRecovery(EPErrorCodesEnum.BEHEALTHCHECKUEBCLUSTERRECOVERY, ErrorTypeEnum.RECOVERY, AlarmSeverityEnum.INFORMATIONAL, ErrorSeverityEnum.INFO,
+ "ERR208I", "ECOMP-PORTAL Back-end connection recovery to UEB Cluster", "", "Please check logs for more specific information about the problem."),
+
+ FeHealthCheckRecovery(EPErrorCodesEnum.FEHEALTHCHECKRECOVERY, ErrorTypeEnum.RECOVERY, AlarmSeverityEnum.INFORMATIONAL, ErrorSeverityEnum.INFO,
+ "ERR209I", "Connectivity to ECOMP-PORTAL Front-end Server is recovered", "", "Please check logs for more specific information about the problem."),
+
+ BeUebConnectionError(EPErrorCodesEnum.BEUEBCONNECTIONERROR_ONE_ARGUMENT, ErrorTypeEnum.CONNECTION_PROBLEM, AlarmSeverityEnum.MAJOR, ErrorSeverityEnum.ERROR,
+ "ERR210E", "ECOMP-PORTAL Back-end probably lost connectivity to UEB Cluster", "Details: {0}.", "Please check UEB server list and keys configured under Portal.Properties file."),
+
+ BeUebUnkownHostError(EPErrorCodesEnum.BEUEBUNKOWNHOSTERROR_ONE_ARGUMENT, ErrorTypeEnum.CONNECTION_PROBLEM, AlarmSeverityEnum.MAJOR, ErrorSeverityEnum.ERROR,
+ "ERR211E", "ECOMP-PORTAL Back-end probably lost connectivity to UEB Cluster", "Cannot reach host: {0}.", "Please check UEB server list and keys configured under Portal.Properties file."),
+
+ BeUebRegisterOnboardingAppError(EPErrorCodesEnum.BEUEBREGISTERONBOARDINGAPPERROR, ErrorTypeEnum.CONNECTION_PROBLEM, AlarmSeverityEnum.MAJOR, ErrorSeverityEnum.ERROR,
+ "ERR212E", "Failed to register the On-boarding application with UEB Communication server", "Details: {0}.", "Please check UEB server list and keys configured under Portal.Properties file."),
+
+ BeHttpConnectionError(EPErrorCodesEnum.BEHTTPCONNECTIONERROR_ONE_ARGUMENT, ErrorTypeEnum.CONNECTION_PROBLEM, AlarmSeverityEnum.MAJOR, ErrorSeverityEnum.ERROR,
+ "ERR213E", "It could be that communication to an external application might resulted an exception or failed to reach the external application",
+ "Details: {0}.", "Please check logs for more information."),
+
+ InternalConnectionInfo(EPErrorCodesEnum.INTERNALCONNECTIONINFO_ONE_ARGUMENT, ErrorTypeEnum.CONNECTION_PROBLEM, AlarmSeverityEnum.INFORMATIONAL, ErrorSeverityEnum.INFO,
+ "ERR299I", "Internal Connection problem", "Details: {0}.", "Please check logs for more information."),
+
+ InternalConnectionWarning(EPErrorCodesEnum.INTERNALCONNECTIONWARNING_ONE_ARGUMENT, ErrorTypeEnum.CONNECTION_PROBLEM, AlarmSeverityEnum.MINOR, ErrorSeverityEnum.WARN,
+ "ERR299W", "Internal Connection problem", "Details: {0}.", "Please check logs for more information."),
+
+ InternalConnectionError(EPErrorCodesEnum.INTERNALCONNECTIONERROR_ONE_ARGUMENT, ErrorTypeEnum.CONNECTION_PROBLEM, AlarmSeverityEnum.MAJOR, ErrorSeverityEnum.ERROR,
+ "ERR299E", "Internal Connection problem", "Details: {0}.", "Please check logs for more information."),
+
+ InternalConnectionFatal(EPErrorCodesEnum.INTERNALCONNECTIONFATAL_ONE_ARGUMENT, ErrorTypeEnum.CONNECTION_PROBLEM, AlarmSeverityEnum.CRITICAL, ErrorSeverityEnum.FATAL,
+ "ERR299F", "Internal Connection problem", "Details: {0}.", "Please check logs for more information."),
+
+ BeUebObjectNotFoundError(EPErrorCodesEnum.BEUEBOBJECTNOTFOUNDERROR_ONE_ARGUMENT, ErrorTypeEnum.DATA_ERROR, AlarmSeverityEnum.MAJOR, ErrorSeverityEnum.ERROR,
+ "ERR303E", "Error occurred during access to U-EB Server.", "Data not found: {0}.", "An error occurred during access to UEB Server, {1} failed to either register or unregister to/from UEB topic."),
+
+ BeUserMissingError(EPErrorCodesEnum.BEUSERMISSINGERROR_ONE_ARGUMENT, ErrorTypeEnum.DATA_ERROR, AlarmSeverityEnum.MAJOR, ErrorSeverityEnum.ERROR,
+ "ERR310E", "User is not found", "", "User {0} must be added to the corresponding application with proper user roles."),
+
+ BeUserInactiveWarning(EPErrorCodesEnum.BEUSERINACTIVEWARNING_ONE_ARGUMENT, ErrorTypeEnum.DATA_ERROR, AlarmSeverityEnum.MINOR, ErrorSeverityEnum.WARN,
+ "ERR313W", "User is found but in-active", "", "User {0} must be added to the corresponding application with proper user roles."),
+
+ BeUserAdminPrivilegesInfo(EPErrorCodesEnum.BEUSERADMINPRIVILEGESINFO_ONE_ARGUMENT, ErrorTypeEnum.DATA_ERROR, AlarmSeverityEnum.MINOR, ErrorSeverityEnum.WARN,
+ "ERR314W", "User is found but don't have administrative privileges", "", "User {0} should be given administrator role for the corresponding application to perform the necessary actions."),
+
+ BeInvalidJsonInput(EPErrorCodesEnum.BEINVALIDJSONINPUT, ErrorTypeEnum.SYSTEM_ERROR, AlarmSeverityEnum.MAJOR, ErrorSeverityEnum.ERROR,
+ "ERR405E", "Failed to convert JSON input to object", "", "Please check logs for more information."),
+
+ BeIncorrectHttpStatusError(EPErrorCodesEnum.BEINCORRECTHTTPSTATUSERROR, ErrorTypeEnum.SYSTEM_ERROR, AlarmSeverityEnum.MAJOR, ErrorSeverityEnum.ERROR,
+ "ERR407E", "Communication to an external application is resulted in with Incorrect Http response code", "", "Please check logs for more information."),
+
+ BeInitializationError(EPErrorCodesEnum.BEINITIALIZATIONERROR, ErrorTypeEnum.SYSTEM_ERROR, AlarmSeverityEnum.CRITICAL, ErrorSeverityEnum.ERROR,
+ "ERR500E", "ECOMP-PORTAL Back-end was not initialized properly", "", "Please check logs for more information."),
+
+ BeUebSystemError(EPErrorCodesEnum.BEUEBSYSTEMERROR, ErrorTypeEnum.SYSTEM_ERROR, AlarmSeverityEnum.MAJOR, ErrorSeverityEnum.ERROR,
+ "ERR502E", "Error occurred during access to U-EB Server", "Details: {0}.", "An error occurred in {1} distribution mechanism. Please check the logs for more information."),
+
+ BeDaoSystemError(EPErrorCodesEnum.BEDAOSYSTEMERROR, ErrorTypeEnum.SYSTEM_ERROR, AlarmSeverityEnum.CRITICAL, ErrorSeverityEnum.ERROR,
+ "ERR505E", "Performing DDL or DML operations on database might have failed", "", "Please check MySQL DB health or look at the logs for more details."),
+
+ BeSystemError(EPErrorCodesEnum.BESYSTEMERROR, ErrorTypeEnum.SYSTEM_ERROR, AlarmSeverityEnum.CRITICAL, ErrorSeverityEnum.ERROR,
+ "ERR506E", "Unexpected error during operation", "", "Please check logs for more information."),
+
+ BeExecuteRollbackError(EPErrorCodesEnum.BEEXECUTEROLLBACKERROR, ErrorTypeEnum.DATA_ERROR, AlarmSeverityEnum.MAJOR, ErrorSeverityEnum.ERROR,
+ "ERR507E", "Roll-back operation towards database has failed", "", "Please check MYSQL DB health or look at the logs for more details."),
+
+ FeHttpLoggingError(EPErrorCodesEnum.FEHTTPLOGGINGERROR, ErrorTypeEnum.SYSTEM_ERROR, AlarmSeverityEnum.MINOR, ErrorSeverityEnum.ERROR,
+ "ERR517E", "Error when logging FE HTTP request/response", "", "Please check MYSQL DB health or look at the logs for more details."),
+
+ FePortalServletError(EPErrorCodesEnum.FEPORTALSERVLETERROR, ErrorTypeEnum.SYSTEM_ERROR, AlarmSeverityEnum.MAJOR, ErrorSeverityEnum.ERROR,
+ "ERR518E", "Error when trying to access FE Portal page.", "", "Please check logs for more information."),
+
+ BeDaoCloseSessionError(EPErrorCodesEnum.BEDAOCLOSESESSIONERROR, ErrorTypeEnum.SYSTEM_ERROR, AlarmSeverityEnum.MAJOR, ErrorSeverityEnum.ERROR,
+ "ERR519E", "Close local session operation with database failed", "", "Please check MYSQL DB health or look at the logs form more details."),
+
+ BeRestApiGeneralError(EPErrorCodesEnum.BERESTAPIGENERALERROR, ErrorTypeEnum.SYSTEM_ERROR, AlarmSeverityEnum.CRITICAL, ErrorSeverityEnum.ERROR,
+ "ERR900E", "Unexpected error during ECOMP-PORTAL Back-end REST API execution", "", "Please check error log for more information."),
+
+ FeHealthCheckGeneralError(EPErrorCodesEnum.FEHEALTHCHECKGENERALERROR, ErrorTypeEnum.SYSTEM_ERROR, AlarmSeverityEnum.CRITICAL, ErrorSeverityEnum.ERROR,
+ "ERR901E", "General error during FE Health Check", "", "Please check error log for more information."),
+
+ InternalUnexpectedInfo(EPErrorCodesEnum.INTERNALUNEXPECTEDINFO_ONE_ARGUMENT, ErrorTypeEnum.SYSTEM_ERROR, AlarmSeverityEnum.INFORMATIONAL, ErrorSeverityEnum.INFO,
+ "ERR999I", "Unexpected error", "Details: {0}.", "Please check logs for more information."),
+
+ InternalUnexpectedWarning(EPErrorCodesEnum.INTERNALUNEXPECTEDWARNING_ONE_ARGUMENT, ErrorTypeEnum.SYSTEM_ERROR, AlarmSeverityEnum.MINOR, ErrorSeverityEnum.WARN,
+ "ERR999W", "Unexpected error", "Details: {0}.", "Please check logs for more information."),
+
+ InternalUnexpectedError(EPErrorCodesEnum.INTERNALUNEXPECTEDERROR_ONE_ARGUMENT, ErrorTypeEnum.SYSTEM_ERROR, AlarmSeverityEnum.MAJOR, ErrorSeverityEnum.ERROR,
+ "ERR999E", "Unexpected error", "Details: {0}.", "Please check logs for more information."),
+
+ InternalUnexpectedFatal(EPErrorCodesEnum.INTERNALUNEXPECTEDFATAL_ONE_ARGUMENT, ErrorTypeEnum.SYSTEM_ERROR, AlarmSeverityEnum.CRITICAL, ErrorSeverityEnum.FATAL,
+ "ERR999F", "Unexpected error", "Details: {0}.", "Please check logs for more information."),
+
+ ExternalAuthAccessConnectionError(EPErrorCodesEnum.EXTERNALAUTHACCESS_CONNECTIONERROR, ErrorTypeEnum.CONNECTION_PROBLEM, AlarmSeverityEnum.MAJOR, ErrorSeverityEnum.ERROR,
+ "ERR220E", "AAF Connection problem", "Details: {0}.", "Please check logs for more information."),
+
+ ExternalAuthAccessAuthenticationError(EPErrorCodesEnum.EXTERNALAUTHACCESS_AUTHENTICATIONERROR, ErrorTypeEnum.AUTHENTICATION_PROBLEM, AlarmSeverityEnum.MAJOR, ErrorSeverityEnum.ERROR,
+ "ERR120E", "AAF authentication problem", "Details: {0}.", "Please check logs for more information."),
+
+ ExternalAuthAccessGeneralError(EPErrorCodesEnum.EXTERNALAUTHACCESS_GENERALERROR, ErrorTypeEnum.SYSTEM_ERROR, AlarmSeverityEnum.MAJOR, ErrorSeverityEnum.ERROR,
+ "ERR520E", "Unexpected error", "Details: {0}.", "Please check logs for more information."),
+
+ SchedulerAccessConnectionError(EPErrorCodesEnum.SCHEDULER_ACCESS_CONNECTIONERROR, ErrorTypeEnum.CONNECTION_PROBLEM, AlarmSeverityEnum.MAJOR, ErrorSeverityEnum.ERROR,
+ "ERR240E", "Scheduler Connection problem", "Details: {0}.", "Please check logs for more information."),
+
+ SchedulerAuxAccessAuthenticationError(EPErrorCodesEnum.SCHEDULERAUX_ACCESS_AUTHENTICATIONERROR, ErrorTypeEnum.AUTHENTICATION_PROBLEM, AlarmSeverityEnum.MAJOR, ErrorSeverityEnum.ERROR,
+ "ERR140E", "SchedulerAux authentication problem", "Details: {0}.", "Please check logs for more information."),
+
+ SchedulerAccessGeneralError(EPErrorCodesEnum.SCHEDULER_ACCESS_GENERALERROR, ErrorTypeEnum.SYSTEM_ERROR, AlarmSeverityEnum.MAJOR, ErrorSeverityEnum.ERROR,
+ "ERR540E", "Unexpected Scheduler error", "Details: {0}.", "Please check logs for more information."),
+
+ SchedulerInvalidAttributeError(EPErrorCodesEnum.SCHEDULER_INVALID_ATTRIBUTEERROR, ErrorTypeEnum.SYSTEM_ERROR, AlarmSeverityEnum.MAJOR, ErrorSeverityEnum.ERROR,
+ "ERR505E", "Unable to create Scheduler", "Details: {0}.", "Please check logs for more information."),
+
+ ;
+
+ ErrorTypeEnum eType;
+ AlarmSeverityEnum alarmSeverity;
+ EPErrorCodesEnum messageCode;
+ ErrorSeverityEnum errorSeverity;
+ String errorCode;
+ String errorDescription;
+ String details;
+ String resolution;
+
+ EPAppMessagesEnum(EPErrorCodesEnum messageCode, ErrorTypeEnum eType, AlarmSeverityEnum alarmSeverity, ErrorSeverityEnum errorSeverity, String errorCode, String errorDescription,
+ String details, String resolution) {
+ this.messageCode = messageCode;
+ this.eType = eType;
+ this.alarmSeverity = alarmSeverity;
+ this.errorSeverity = errorSeverity;
+ this.errorCode = errorCode;
+ this.errorDescription = errorDescription;
+ this.details = details;
+ this.resolution = resolution;
+ }
+
+ public String getDetails() {
+ return this.details;
+ }
+
+ public String getResolution() {
+ return this.resolution;
+ }
+ public String getErrorCode() {
+ return this.errorCode;
+ }
+
+ public String getErrorDescription() {
+ return this.errorDescription;
+ }
+
+ public ErrorSeverityEnum getErrorSeverity() {
+ return this.errorSeverity;
+ }
+
+ public void setErrorSeverity(ErrorSeverityEnum errorSeverity) {
+ this.errorSeverity = errorSeverity;
+ }
+
+ public EPErrorCodesEnum getMessageCode() {
+ return messageCode;
+ }
+
+ public void setMessageCode(EPErrorCodesEnum messageCode) {
+ this.messageCode = messageCode;
+ }
+
+ public AlarmSeverityEnum getAlarmSeverity() {
+ return alarmSeverity;
+ }
+
+ public void setAlarmSeverity(AlarmSeverityEnum alarmSeverity) {
+ this.alarmSeverity = alarmSeverity;
+ }
+
+ public ErrorTypeEnum getErrorType() {
+ return eType;
+ }
+
+ public void setErrorType(ErrorTypeEnum eType) {
+ this.eType = eType;
+ }
+}
diff --git a/ecomp-portal-BE-common/src/main/java/org/onap/portalapp/portal/logging/format/EPErrorCodesEnum.java b/ecomp-portal-BE-common/src/main/java/org/onap/portalapp/portal/logging/format/EPErrorCodesEnum.java
new file mode 100644
index 00000000..e4cd38e7
--- /dev/null
+++ b/ecomp-portal-BE-common/src/main/java/org/onap/portalapp/portal/logging/format/EPErrorCodesEnum.java
@@ -0,0 +1,121 @@
+/*-
+ * ============LICENSE_START==========================================
+ * ONAP Portal
+ * ===================================================================
+ * Copyright (C) 2017 AT&T Intellectual Property. All rights reserved.
+ * ===================================================================
+ *
+ * Unless otherwise specified, all software contained herein is licensed
+ * under the Apache License, Version 2.0 (the "License");
+ * you may not use this software 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.
+ *
+ * Unless otherwise specified, all documentation contained herein is licensed
+ * under the Creative Commons License, Attribution 4.0 Intl. (the "License");
+ * you may not use this documentation except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * https://creativecommons.org/licenses/by/4.0/
+ *
+ * Unless required by applicable law or agreed to in writing, documentation
+ * 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.
+ *
+ * ============LICENSE_END============================================
+ *
+ * ECOMP is a trademark and service mark of AT&T Intellectual Property.
+ */
+package org.onap.portalapp.portal.logging.format;
+
+import com.att.eelf.i18n.EELFResolvableErrorEnum;
+import com.att.eelf.i18n.EELFResourceManager;
+
+/**
+ *
+ * Add ECOMP Portal Specific Error Code Enums here, for generic
+ * ones (ones you think are useful not only Portal but also SDK), add it
+ * to the enum class AppMessagesEnum defined in SDK.
+ */
+public enum EPErrorCodesEnum implements EELFResolvableErrorEnum {
+ BERESTAPIAUTHENTICATIONERROR,
+ BEHTTPCONNECTIONERROR_ONE_ARGUMENT,
+ BEUEBAUTHENTICATIONERROR_ONE_ARGUMENT,
+
+ INTERNALAUTHENTICATIONINFO_ONE_ARGUMENT,
+ INTERNALAUTHENTICATIONWARNING_ONE_ARGUMENT,
+ INTERNALAUTHENTICATIONERROR_ONE_ARGUMENT,
+ INTERNALAUTHENTICATIONFATAL_ONE_ARGUMENT,
+
+ BEHEALTHCHECKRECOVERY,
+ BEHEALTHCHECKMYSQLRECOVERY,
+ BEHEALTHCHECKUEBCLUSTERRECOVERY,
+ FEHEALTHCHECKRECOVERY,
+ BeHEALTHCHECKERROR,
+
+ BEHEALTHCHECKMYSQLERROR,
+ BEHEALTHCHECKUEBCLUSTERERROR,
+ FEHEALTHCHECKERROR,
+ BEUEBCONNECTIONERROR_ONE_ARGUMENT,
+ BEUEBUNKOWNHOSTERROR_ONE_ARGUMENT,
+ BEUEBREGISTERONBOARDINGAPPERROR,
+
+ INTERNALCONNECTIONINFO_ONE_ARGUMENT,
+ INTERNALCONNECTIONWARNING_ONE_ARGUMENT,
+ INTERNALCONNECTIONERROR_ONE_ARGUMENT,
+ INTERNALCONNECTIONFATAL_ONE_ARGUMENT,
+
+ BEUEBOBJECTNOTFOUNDERROR_ONE_ARGUMENT,
+ BEUSERMISSINGERROR_ONE_ARGUMENT,
+
+ BEUSERINACTIVEWARNING_ONE_ARGUMENT,
+ BEUSERADMINPRIVILEGESINFO_ONE_ARGUMENT,
+
+ BEINVALIDJSONINPUT,
+ BEINCORRECTHTTPSTATUSERROR,
+
+ BEINITIALIZATIONERROR,
+ BEUEBSYSTEMERROR,
+ BEDAOSYSTEMERROR,
+ BESYSTEMERROR,
+ BEEXECUTEROLLBACKERROR,
+
+ FEHTTPLOGGINGERROR,
+ FEPORTALSERVLETERROR,
+ BEDAOCLOSESESSIONERROR,
+
+ BERESTAPIGENERALERROR,
+ FEHEALTHCHECKGENERALERROR,
+
+ INTERNALUNEXPECTEDINFO_ONE_ARGUMENT,
+ INTERNALUNEXPECTEDWARNING_ONE_ARGUMENT,
+ INTERNALUNEXPECTEDERROR_ONE_ARGUMENT,
+ INTERNALUNEXPECTEDFATAL_ONE_ARGUMENT,
+
+ EXTERNALAUTHACCESS_CONNECTIONERROR,
+ EXTERNALAUTHACCESS_AUTHENTICATIONERROR,
+ EXTERNALAUTHACCESS_GENERALERROR,
+
+ SCHEDULER_ACCESS_CONNECTIONERROR,
+ SCHEDULERAUX_ACCESS_AUTHENTICATIONERROR,
+ SCHEDULER_ACCESS_GENERALERROR,
+ SCHEDULER_INVALID_ATTRIBUTEERROR,
+ ;
+
+ /**
+ * Static initializer to ensure the resource bundles for this class are loaded...
+ * Here this application loads messages from three bundles
+ */
+ static {
+ EELFResourceManager.loadMessageBundle("org/openecomp/portalapp/portal/logging/format/ApplicationCodes");
+ }
+}
diff --git a/ecomp-portal-BE-common/src/main/java/org/onap/portalapp/portal/logging/logic/EPLogUtil.java b/ecomp-portal-BE-common/src/main/java/org/onap/portalapp/portal/logging/logic/EPLogUtil.java
new file mode 100644
index 00000000..c47fb9da
--- /dev/null
+++ b/ecomp-portal-BE-common/src/main/java/org/onap/portalapp/portal/logging/logic/EPLogUtil.java
@@ -0,0 +1,328 @@
+/*-
+ * ============LICENSE_START==========================================
+ * ONAP Portal
+ * ===================================================================
+ * Copyright (C) 2017 AT&T Intellectual Property. All rights reserved.
+ * ===================================================================
+ *
+ * Unless otherwise specified, all software contained herein is licensed
+ * under the Apache License, Version 2.0 (the "License");
+ * you may not use this software 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.
+ *
+ * Unless otherwise specified, all documentation contained herein is licensed
+ * under the Creative Commons License, Attribution 4.0 Intl. (the "License");
+ * you may not use this documentation except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * https://creativecommons.org/licenses/by/4.0/
+ *
+ * Unless required by applicable law or agreed to in writing, documentation
+ * 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.
+ *
+ * ============LICENSE_END============================================
+ *
+ * ECOMP is a trademark and service mark of AT&T Intellectual Property.
+ */
+package org.onap.portalapp.portal.logging.logic;
+
+import static com.att.eelf.configuration.Configuration.MDC_ALERT_SEVERITY;
+
+import java.text.MessageFormat;
+
+import org.onap.portalapp.portal.logging.format.EPAppMessagesEnum;
+import org.onap.portalsdk.core.logging.format.AlarmSeverityEnum;
+import org.onap.portalsdk.core.logging.format.ErrorSeverityEnum;
+import org.onap.portalsdk.core.logging.logic.EELFLoggerDelegate;
+import org.slf4j.MDC;
+import org.springframework.http.HttpStatus;
+
+import com.att.eelf.configuration.EELFLogger;
+import com.att.eelf.configuration.EELFManager;
+
+public class EPLogUtil {
+
+ // This class has no logger of its own; it uses loggers passed to it.
+ private static EELFLogger errorLogger = EELFManager.getInstance().getErrorLogger();
+
+ /**
+ * Formats and writes a message to the error log with the class name and the
+ * specified parameters, using log level info, warn or error appropriate for
+ * the specified severity
+ *
+ * @param classLogger
+ * Logger for the class where the error occurred; the logger
+ * carries the class name.
+ * @param epMessageEnum
+ * Enum carrying alarm and error severity
+ * @param param
+ * Values used to build the message.
+ */
+ public static void logEcompError(EELFLoggerDelegate classLogger, EPAppMessagesEnum epMessageEnum, String... param) {
+ logEcompError(classLogger, epMessageEnum, null, param);
+ }
+
+ /**
+ * Formats and writes a message to the error log with the class name and the
+ * specified parameters, using log level info, warn or error appropriate for
+ * the specified severity
+ *
+ * @param epMessageEnum
+ * Enum carrying alarm and error severity
+ * @param param
+ * Values used to build the message.
+ */
+ public static void logEcompError(EPAppMessagesEnum epMessageEnum, String... param) {
+ try {
+ AlarmSeverityEnum alarmSeverityEnum = epMessageEnum.getAlarmSeverity();
+ ErrorSeverityEnum errorSeverityEnum = epMessageEnum.getErrorSeverity();
+
+ MDC.put(MDC_ALERT_SEVERITY, alarmSeverityEnum.severity());
+ MDC.put("ErrorCode", epMessageEnum.getErrorCode());
+ MDC.put("ErrorDescription", epMessageEnum.getErrorDescription());
+ MDC.put("ClassName", EPLogUtil.class.getName());
+
+ String resolution = EPLogUtil
+ .formatMessage(epMessageEnum.getDetails() + " " + epMessageEnum.getResolution(), (Object[]) param);
+ if (errorSeverityEnum == ErrorSeverityEnum.WARN) {
+ errorLogger.warn(resolution);
+ } else if (errorSeverityEnum == ErrorSeverityEnum.INFO) {
+ errorLogger.info(resolution);
+ } else {
+ errorLogger.error(resolution);
+ }
+ } catch (Exception e) {
+ errorLogger.error("logEcompError failed", e);
+ } finally {
+ MDC.remove("ErrorCode");
+ MDC.remove("ErrorDescription");
+ MDC.remove("ClassName");
+ MDC.remove(MDC_ALERT_SEVERITY);
+ }
+ }
+
+ /**
+ * Formats and writes a message to the error log with the class name,
+ * throwable and the specified parameters, using log level info, warn or
+ * error appropriate for the specified severity
+ *
+ * @param classLogger
+ * Logger for the class where the error occurred; the logger
+ * carries the class name.
+ * @param epMessageEnum
+ * Enum carrying alarm and error severity
+ * @param th
+ * Throwable; ignored if null
+ * @param param
+ * Array of Strings used to build the message.
+ */
+ @SuppressWarnings("static-access")
+ public static void logEcompError(EELFLoggerDelegate classLogger, EPAppMessagesEnum epMessageEnum, Throwable th,
+ String... param) {
+
+ AlarmSeverityEnum alarmSeverityEnum = epMessageEnum.getAlarmSeverity();
+ ErrorSeverityEnum errorSeverityEnum = epMessageEnum.getErrorSeverity();
+
+ MDC.put(MDC_ALERT_SEVERITY, alarmSeverityEnum.severity());
+ MDC.put("ErrorCode", epMessageEnum.getErrorCode());
+ MDC.put("ErrorDescription", epMessageEnum.getErrorDescription());
+
+ final String message = EPLogUtil.formatMessage(epMessageEnum.getDetails() + " " + epMessageEnum.getResolution(),
+ (Object[]) param);
+ if (errorSeverityEnum == ErrorSeverityEnum.INFO) {
+ if (th == null)
+ classLogger.info(classLogger.errorLogger, message);
+ else
+ classLogger.info(classLogger.errorLogger, message, th);
+ } else if (errorSeverityEnum == ErrorSeverityEnum.WARN) {
+ if (th == null)
+ classLogger.warn(classLogger.errorLogger, message);
+ else
+ classLogger.warn(classLogger.errorLogger, message, th);
+ } else {
+ if (th == null)
+ classLogger.error(classLogger.errorLogger, message);
+ else
+ classLogger.error(classLogger.errorLogger, message, th);
+ }
+
+ // Clean up
+ MDC.remove(MDC_ALERT_SEVERITY);
+ MDC.remove("ErrorCode");
+ MDC.remove("ErrorDescription");
+ }
+
+ /**
+ * Builds a string using the format and parameters.
+ *
+ * @param message
+ * @param args
+ * @return
+ */
+ private static String formatMessage(String message, Object... args) {
+ StringBuilder sbFormattedMessage = new StringBuilder();
+ if (args != null && args.length > 0 && message != null && message != "") {
+ MessageFormat mf = new MessageFormat(message);
+ sbFormattedMessage.append(mf.format(args));
+ } else {
+ sbFormattedMessage.append(message);
+ }
+ return sbFormattedMessage.toString();
+ }
+
+ /**
+ * Builds a comma-separated string of values to document a user action.
+ *
+ * @param action
+ * String
+ * @param activity
+ * String
+ * @param userId
+ * String
+ * @param affectedId
+ * String
+ * @param comment
+ * String
+ * @return Value suitable for writing to the audit log file.
+ */
+ public static String formatAuditLogMessage(String action, String activity, String userId, String affectedId,
+ String comment) {
+ StringBuilder auditLogMsg = new StringBuilder();
+ auditLogMsg.append("Click_A:[");
+ if (action != null && !action.equals("")) {
+ auditLogMsg.append(" Action: ");
+ auditLogMsg.append(action);
+ }
+
+ if (activity != null && !activity.equals("")) {
+ auditLogMsg.append(",Activity CD: ");
+ auditLogMsg.append(activity);
+ }
+
+ if (userId != null && !userId.equals("")) {
+ auditLogMsg.append(",User ID: ");
+ auditLogMsg.append(userId);
+ }
+
+ if (affectedId != null && !affectedId.equals("")) {
+ auditLogMsg.append(",Affected ID: ");
+ auditLogMsg.append(affectedId);
+ }
+
+ if (comment != null && !comment.equals("")) {
+ auditLogMsg.append(",Comment: ");
+ auditLogMsg.append(comment);
+ }
+ auditLogMsg.append("]");
+ return auditLogMsg.toString();
+ }
+
+ /**
+ * Builds a comma-separated string of values to document a user browser
+ * action.
+ *
+ * @param orgUserId
+ * String
+ * @param appName
+ * String
+ * @param action
+ * String
+ * @param activity
+ * String
+ * @param actionLink
+ * String
+ * @param page
+ * String
+ * @param function
+ * String
+ * @param type
+ * String
+ * @return String value suitable for writing to the audit log file.
+ */
+ public static String formatStoreAnalyticsAuditLogMessage(String orgUserId, String appName, String action,
+ String activity, String actionLink, String page, String function, String type) {
+ StringBuilder auditLogStoreAnalyticsMsg = new StringBuilder();
+ auditLogStoreAnalyticsMsg.append("Click_Analytics:[");
+ if (orgUserId != null && !orgUserId.equals("")) {
+ auditLogStoreAnalyticsMsg.append(" Organization User ID: ");
+ auditLogStoreAnalyticsMsg.append(orgUserId);
+ }
+
+ if (appName != null && !appName.equals("")) {
+ auditLogStoreAnalyticsMsg.append(",AppName: ");
+ auditLogStoreAnalyticsMsg.append(appName);
+ }
+
+ if (action != null && !action.equals("")) {
+ auditLogStoreAnalyticsMsg.append(",Action: ");
+ auditLogStoreAnalyticsMsg.append(action);
+ }
+
+ if (activity != null && !activity.equals("")) {
+ auditLogStoreAnalyticsMsg.append(",Activity: ");
+ auditLogStoreAnalyticsMsg.append(activity);
+ }
+
+ if (actionLink != null && !actionLink.equals("")) {
+ auditLogStoreAnalyticsMsg.append(",ActionLink: ");
+ auditLogStoreAnalyticsMsg.append(actionLink);
+ }
+
+ if (page != null && !page.equals("")) {
+ auditLogStoreAnalyticsMsg.append(",Page: ");
+ auditLogStoreAnalyticsMsg.append(page);
+ }
+
+ if (function != null && !function.equals("")) {
+ auditLogStoreAnalyticsMsg.append(",Function: ");
+ auditLogStoreAnalyticsMsg.append(function);
+ }
+
+ if (type != null && !type.equals("")) {
+ auditLogStoreAnalyticsMsg.append(",Type: ");
+ auditLogStoreAnalyticsMsg.append(type);
+ }
+ auditLogStoreAnalyticsMsg.append("]");
+ return auditLogStoreAnalyticsMsg.toString();
+ }
+
+ public static void logExternalAuthAccessAlarm(EELFLoggerDelegate logger, HttpStatus res) {
+ if (res.equals(HttpStatus.UNAUTHORIZED) || res.equals(HttpStatus.FORBIDDEN)) {
+ EPLogUtil.logEcompError(logger, EPAppMessagesEnum.ExternalAuthAccessAuthenticationError);
+ } else if (res.equals(HttpStatus.NOT_FOUND) || res.equals(HttpStatus.NOT_ACCEPTABLE)
+ || res.equals(HttpStatus.CONFLICT) || res.equals(HttpStatus.BAD_REQUEST)) {
+ EPLogUtil.logEcompError(logger, EPAppMessagesEnum.ExternalAuthAccessConnectionError);
+ } else if (!res.equals(HttpStatus.ACCEPTED) && !res.equals(HttpStatus.OK)) {
+ EPLogUtil.logEcompError(logger, EPAppMessagesEnum.ExternalAuthAccessGeneralError);
+ }
+ }
+
+ public static void schedulerAccessAlarm(EELFLoggerDelegate logger, int res) {
+ if (res == HttpStatus.UNAUTHORIZED.value() || res == HttpStatus.FORBIDDEN.value()) {
+ EPLogUtil.logEcompError(logger, EPAppMessagesEnum.SchedulerAuxAccessAuthenticationError);
+ } else if (res == HttpStatus.NOT_FOUND.value() || res == HttpStatus.NOT_ACCEPTABLE.value()
+ || res == HttpStatus.CONFLICT.value() || res == HttpStatus.BAD_REQUEST.value()
+ || res == HttpStatus.REQUEST_TIMEOUT.value()||res==HttpStatus.INTERNAL_SERVER_ERROR.value()) {
+ EPLogUtil.logEcompError(logger, EPAppMessagesEnum.SchedulerAccessConnectionError);
+ } else if (res == HttpStatus.PRECONDITION_FAILED.value() || res == HttpStatus.EXPECTATION_FAILED.value()) {
+ EPLogUtil.logEcompError(logger, EPAppMessagesEnum.SchedulerInvalidAttributeError);
+ } else if (res != HttpStatus.ACCEPTED.value() && res != HttpStatus.OK.value()
+ && res != HttpStatus.NO_CONTENT.value()) {
+ EPLogUtil.logEcompError(logger, EPAppMessagesEnum.SchedulerAccessGeneralError);
+ } else {
+ logger.error(EELFLoggerDelegate.errorLogger, "Other SchedulerErrors failed", res);
+ }
+ }
+
+}
diff --git a/ecomp-portal-BE-common/src/main/java/org/onap/portalapp/portal/scheduler/RestObject.java b/ecomp-portal-BE-common/src/main/java/org/onap/portalapp/portal/scheduler/RestObject.java
new file mode 100644
index 00000000..327354c6
--- /dev/null
+++ b/ecomp-portal-BE-common/src/main/java/org/onap/portalapp/portal/scheduler/RestObject.java
@@ -0,0 +1,62 @@
+/*-
+ * ============LICENSE_START==========================================
+ * ONAP Portal
+ * ===================================================================
+ * Copyright (C) 2017 AT&T Intellectual Property. All rights reserved.
+ * ===================================================================
+ *
+ * Unless otherwise specified, all software contained herein is licensed
+ * under the Apache License, Version 2.0 (the "License");
+ * you may not use this software 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.
+ *
+ * Unless otherwise specified, all documentation contained herein is licensed
+ * under the Creative Commons License, Attribution 4.0 Intl. (the "License");
+ * you may not use this documentation except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * https://creativecommons.org/licenses/by/4.0/
+ *
+ * Unless required by applicable law or agreed to in writing, documentation
+ * 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.
+ *
+ * ============LICENSE_END============================================
+ *
+ * ECOMP is a trademark and service mark of AT&T Intellectual Property.
+ */
+
+package org.onap.portalapp.portal.scheduler;
+
+
+public class RestObject<T> {
+
+ private T t;
+
+ private int statusCode= 0;
+
+ public String uuid;
+
+ public void set(T t) { this.t = t; }
+
+ public T get() { return t; }
+
+ public void setStatusCode(int v) { this.statusCode = v; }
+
+ public int getStatusCode() { return this.statusCode; }
+
+ public void setUUID(String uuid) { this.uuid = uuid; }
+
+ public String getUUID() { return this.uuid; }
+}
+
diff --git a/ecomp-portal-BE-common/src/main/java/org/onap/portalapp/portal/scheduler/SchedulerProperties.java b/ecomp-portal-BE-common/src/main/java/org/onap/portalapp/portal/scheduler/SchedulerProperties.java
new file mode 100644
index 00000000..4fcdc4d7
--- /dev/null
+++ b/ecomp-portal-BE-common/src/main/java/org/onap/portalapp/portal/scheduler/SchedulerProperties.java
@@ -0,0 +1,164 @@
+/*-
+ * ============LICENSE_START==========================================
+ * ONAP Portal
+ * ===================================================================
+ * Copyright (C) 2017 AT&T Intellectual Property. All rights reserved.
+ * ===================================================================
+ *
+ * Unless otherwise specified, all software contained herein is licensed
+ * under the Apache License, Version 2.0 (the "License");
+ * you may not use this software 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.
+ *
+ * Unless otherwise specified, all documentation contained herein is licensed
+ * under the Creative Commons License, Attribution 4.0 Intl. (the "License");
+ * you may not use this documentation except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * https://creativecommons.org/licenses/by/4.0/
+ *
+ * Unless required by applicable law or agreed to in writing, documentation
+ * 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.
+ *
+ * ============LICENSE_END============================================
+ *
+ * ECOMP is a trademark and service mark of AT&T Intellectual Property.
+ */
+package org.onap.portalapp.portal.scheduler;
+
+import org.onap.portalsdk.core.logging.logic.EELFLoggerDelegate;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.context.annotation.Configuration;
+import org.springframework.context.annotation.PropertySource;
+import org.springframework.core.env.Environment;
+
+@Configuration
+@PropertySource(value = { "${container.classpath:}/WEB-INF/conf/scheduler.properties" })
+
+public class SchedulerProperties {
+
+ private static EELFLoggerDelegate logger = EELFLoggerDelegate.getLogger(SchedulerProperties.class);
+
+ private static Environment environment;
+
+
+ public SchedulerProperties() {
+ }
+
+ protected Environment getEnvironment() {
+ return environment;
+ }
+
+ @Autowired
+ public void setEnvironment(Environment environment) {
+ SchedulerProperties.environment = environment;
+ }
+
+ /**
+ * Tests whether a property value is available for the specified key.
+ *
+ * @param key
+ * Property key
+ * @return True if the key is known, otherwise false.
+ */
+ public static boolean containsProperty(String key) {
+ return environment.containsProperty(key);
+ }
+
+ /**
+ * Returns the property value associated with the given key (never
+ * {@code null}), after trimming any trailing space.
+ *
+ * @param key
+ * Property key
+ * @return Property value; the empty string if the environment was not
+ * autowired, which should never happen.
+ * @throws IllegalStateException
+ * if the key cannot be resolved
+ */
+ public static String getProperty(String key) {
+ String value = "";
+ if (environment == null) {
+ logger.error(EELFLoggerDelegate.errorLogger, "getProperty: environment is null, should never happen!");
+ } else {
+ value = environment.getRequiredProperty(key);
+ // java.util.Properties preserves trailing space
+ if (value != null)
+ value = value.trim();
+ }
+ return value;
+ }
+
+ public static final String SCHEDULER_USER_NAME_VAL = "scheduler.user.name";
+
+ public static final String SCHEDULER_PASSWORD_VAL = "scheduler.password";
+
+ public static final String SCHEDULER_SERVER_URL_VAL = "scheduler.server.url";
+
+ public static final String SCHEDULER_CREATE_NEW_VNF_CHANGE_INSTANCE_VAL = "scheduler.create.new.vnf.change.instance";
+
+ public static final String SCHEDULER_GET_TIME_SLOTS = "scheduler.get.time.slots";
+
+ public static final String SCHEDULER_SUBMIT_NEW_VNF_CHANGE = "scheduler.submit.new.vnf.change";
+
+ public static final String SCHEDULERAUX_CLIENTAUTH_VAL = "scheduleraux.ClientAuth";
+
+ public static final String SCHEDULERAUX_CLIENT_MECHID_VAL = "scheduleraux.client.mechId";
+
+ public static final String SCHEDULERAUX_CLIENT_PASSWORD_VAL = "scheduleraux.client.password";
+
+ public static final String SCHEDULERAUX_USERNAME_VAL = "scheduleraux.username";
+
+ public static final String SCHEDULERAUX_PASSWORD_VAL = "scheduleraux.password";
+
+ public static final String SCHEDULERAUX_AUTHORIZATION_VAL = "scheduleraux.Authorization";
+
+ public static final String SCHEDULERAUX_SERVER_URL_VAL = "scheduleraux.server.url";
+
+ public static final String SCHEDULERAUX_ENVIRONMENT_VAL = "scheduleraux.environment";
+
+ public static final String SCHEDULERAUX_GET_CONFIG_VAL = "scheduleraux.get.config";
+
+
+ /** The Constant VID_TRUSTSTORE_FILENAME. */
+ public static final String VID_TRUSTSTORE_FILENAME = "vid.truststore.filename";
+
+ /** The Constant VID_TRUSTSTORE_PASSWD_X. */
+ public static final String VID_TRUSTSTORE_PASSWD_X = "vid.truststore.passwd.x";
+
+ /** The Constant FILESEPARATOR. */
+ public static final String FILESEPARATOR = (System.getProperty("file.separator") == null) ? "/" : System.getProperty("file.separator");
+
+ /** Scheduler UI constant **/
+ public static final String SCHEDULER_DOMAIN_NAME = "scheduler.domain.name";
+
+ public static final String SCHEDULER_SCHEDULE_NAME = "scheduler.schedule.name";
+
+ public static final String SCHEDULER_WORKFLOW_NAME = "scheduler.workflow.name";
+
+ public static final String SCHEDULER_CALLBACK_URL = "scheduler.callback.url";
+
+ public static final String SCHEDULER_APPROVAL_TYPE = "scheduler.approval.type";
+
+ public static final String SCHEDULER_APPROVAL_SUBMIT_STATUS = "scheduler.approval.submit.status";
+
+ public static final String SCHEDULER_APPROVAL_REJECT_STATUS = "scheduler.approval.reject.status";
+
+ public static final String SCHEDULER_INTERVAL_GET_TIMESLOT_RATE = "scheduler.interval.get.timeslot.rate";
+
+ public static final String SCHEDULER_POLICY_NAME = "scheduler.policy.name";
+
+ public static final String SCHEDULER_GROUP_ID = "scheduler.group.id";
+
+}
diff --git a/ecomp-portal-BE-common/src/main/java/org/onap/portalapp/portal/scheduler/SchedulerResponseWrapper.java b/ecomp-portal-BE-common/src/main/java/org/onap/portalapp/portal/scheduler/SchedulerResponseWrapper.java
new file mode 100644
index 00000000..510c7cd9
--- /dev/null
+++ b/ecomp-portal-BE-common/src/main/java/org/onap/portalapp/portal/scheduler/SchedulerResponseWrapper.java
@@ -0,0 +1,118 @@
+/*-
+ * ============LICENSE_START==========================================
+ * ONAP Portal
+ * ===================================================================
+ * Copyright (C) 2017 AT&T Intellectual Property. All rights reserved.
+ * ===================================================================
+ *
+ * Unless otherwise specified, all software contained herein is licensed
+ * under the Apache License, Version 2.0 (the "License");
+ * you may not use this software 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.
+ *
+ * Unless otherwise specified, all documentation contained herein is licensed
+ * under the Creative Commons License, Attribution 4.0 Intl. (the "License");
+ * you may not use this documentation except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * https://creativecommons.org/licenses/by/4.0/
+ *
+ * Unless required by applicable law or agreed to in writing, documentation
+ * 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.
+ *
+ * ============LICENSE_END============================================
+ *
+ * ECOMP is a trademark and service mark of AT&T Intellectual Property.
+ */
+package org.onap.portalapp.portal.scheduler;
+
+import com.fasterxml.jackson.annotation.JsonInclude;
+import com.fasterxml.jackson.annotation.JsonProperty;
+import com.fasterxml.jackson.annotation.JsonPropertyOrder;
+import com.fasterxml.jackson.core.JsonProcessingException;
+import com.fasterxml.jackson.databind.ObjectMapper;
+
+import java.io.IOException;
+import java.util.LinkedHashMap;
+import java.util.Map;
+
+import org.apache.commons.lang.builder.ToStringBuilder;
+
+/**
+ * This wrapper encapsulates the Scheduler response
+ */
+@JsonInclude(JsonInclude.Include.NON_NULL)
+@JsonPropertyOrder({
+ "status",
+ "entity",
+ "uuid"
+})
+
+public class SchedulerResponseWrapper {
+
+ @JsonProperty("status")
+ private int status;
+
+ @JsonProperty("entity")
+ private String entity;
+
+ @JsonProperty("uuid")
+ private String uuid;
+
+ @JsonProperty("entity")
+ public String getEntity() {
+ return entity;
+ }
+
+ @JsonProperty("status")
+ public int getStatus() {
+ return status;
+ }
+
+ @JsonProperty("uuid")
+ public String getUuid() {
+ return uuid;
+ }
+
+ @JsonProperty("status")
+ public void setStatus(int v) {
+ this.status = v;
+ }
+
+ @JsonProperty("entity")
+ public void setEntity(String v) {
+ this.entity = v;
+ }
+
+ @JsonProperty("uuid")
+ public void setUuid(String v) {
+ this.uuid = v;
+ }
+
+ @Override
+ public String toString() {
+ return ToStringBuilder.reflectionToString(this);
+ }
+
+ public String getResponse () throws JsonProcessingException,IOException {
+ Map<String, Object> map = new LinkedHashMap<>();
+ map.put("status", getStatus());
+ map.put("entity", getEntity());
+ map.put("uuid", getUuid());
+ ObjectMapper objectMapper = new ObjectMapper();
+ String jsonResponse = objectMapper.writeValueAsString(map);
+ return jsonResponse;
+ }
+
+}
diff --git a/ecomp-portal-BE-common/src/main/java/org/onap/portalapp/portal/scheduler/SchedulerRestInt.java b/ecomp-portal-BE-common/src/main/java/org/onap/portalapp/portal/scheduler/SchedulerRestInt.java
new file mode 100644
index 00000000..7ada83bf
--- /dev/null
+++ b/ecomp-portal-BE-common/src/main/java/org/onap/portalapp/portal/scheduler/SchedulerRestInt.java
@@ -0,0 +1,60 @@
+/*-
+ * ============LICENSE_START==========================================
+ * ONAP Portal
+ * ===================================================================
+ * Copyright (C) 2017 AT&T Intellectual Property. All rights reserved.
+ * ===================================================================
+ *
+ * Unless otherwise specified, all software contained herein is licensed
+ * under the Apache License, Version 2.0 (the "License");
+ * you may not use this software 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.
+ *
+ * Unless otherwise specified, all documentation contained herein is licensed
+ * under the Creative Commons License, Attribution 4.0 Intl. (the "License");
+ * you may not use this documentation except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * https://creativecommons.org/licenses/by/4.0/
+ *
+ * Unless required by applicable law or agreed to in writing, documentation
+ * 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.
+ *
+ * ============LICENSE_END============================================
+ *
+ * ECOMP is a trademark and service mark of AT&T Intellectual Property.
+ */
+
+package org.onap.portalapp.portal.scheduler;
+
+import java.text.DateFormat;
+import java.text.SimpleDateFormat;
+
+import org.onap.portalsdk.core.logging.logic.EELFLoggerDelegate;
+
+public class SchedulerRestInt {
+
+ /** The logger. */
+ EELFLoggerDelegate logger = EELFLoggerDelegate.getLogger(SchedulerRestInterface.class);
+
+ /** The Constant dateFormat. */
+ final static DateFormat dateFormat = new SimpleDateFormat("HH:mm:ss:SSSS");
+
+ /** The request date format. */
+ public DateFormat requestDateFormat = new SimpleDateFormat("EEE, dd MMM YYYY HH:mm:ss z");
+
+ public SchedulerRestInt() {
+ requestDateFormat.setTimeZone(java.util.TimeZone.getTimeZone("GMT"));
+ }
+}
diff --git a/ecomp-portal-BE-common/src/main/java/org/onap/portalapp/portal/scheduler/SchedulerRestInterface.java b/ecomp-portal-BE-common/src/main/java/org/onap/portalapp/portal/scheduler/SchedulerRestInterface.java
new file mode 100644
index 00000000..26e40c9a
--- /dev/null
+++ b/ecomp-portal-BE-common/src/main/java/org/onap/portalapp/portal/scheduler/SchedulerRestInterface.java
@@ -0,0 +1,270 @@
+/*-
+ * ============LICENSE_START==========================================
+ * ONAP Portal
+ * ===================================================================
+ * Copyright (C) 2017 AT&T Intellectual Property. All rights reserved.
+ * ===================================================================
+ *
+ * Unless otherwise specified, all software contained herein is licensed
+ * under the Apache License, Version 2.0 (the "License");
+ * you may not use this software 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.
+ *
+ * Unless otherwise specified, all documentation contained herein is licensed
+ * under the Creative Commons License, Attribution 4.0 Intl. (the "License");
+ * you may not use this documentation except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * https://creativecommons.org/licenses/by/4.0/
+ *
+ * Unless required by applicable law or agreed to in writing, documentation
+ * 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.
+ *
+ * ============LICENSE_END============================================
+ *
+ * ECOMP is a trademark and service mark of AT&T Intellectual Property.
+ */
+package org.onap.portalapp.portal.scheduler;
+
+import java.util.Collections;
+
+import javax.security.auth.login.CredentialException;
+import javax.ws.rs.client.Client;
+import javax.ws.rs.client.Entity;
+import javax.ws.rs.core.MediaType;
+import javax.ws.rs.core.MultivaluedHashMap;
+import javax.ws.rs.core.Response;
+
+import org.apache.commons.codec.binary.Base64;
+import org.apache.commons.lang.StringUtils;
+import org.drools.compiler.lang.DRL5Expressions.neg_operator_key_return;
+import org.eclipse.jetty.util.security.Password;
+import org.json.simple.JSONObject;
+import org.onap.portalapp.portal.logging.logic.EPLogUtil;
+import org.onap.portalapp.portal.scheduler.client.HttpBasicClient;
+import org.onap.portalapp.portal.scheduler.client.HttpsBasicClient;
+import org.onap.portalapp.portal.scheduler.restobjects.RestObject;
+import org.onap.portalsdk.core.logging.logic.EELFLoggerDelegate;
+import org.springframework.http.HttpStatus;
+import org.springframework.stereotype.Service;
+import org.springframework.web.client.HttpClientErrorException;
+
+@Service
+public class SchedulerRestInterface implements SchedulerRestInterfaceIfc {
+
+ private static final String PASSWORD_IS_EMPTY = "Password is Empty";
+
+ private static Client client = null;
+
+ private MultivaluedHashMap<String, Object> commonHeaders;
+
+ /** The logger. */
+ static EELFLoggerDelegate logger = EELFLoggerDelegate.getLogger(SchedulerRestInterface.class);
+
+ public SchedulerRestInterface() {
+ super();
+ }
+
+ public void initRestClient() {
+ logger.debug(EELFLoggerDelegate.debugLogger, "Starting to initialize rest client");
+
+ final String username;
+ final String password;
+
+ String methodName = "initRestClient";
+ /* Setting user name based on properties */
+ String retrievedUsername = SchedulerProperties.getProperty(SchedulerProperties.SCHEDULER_USER_NAME_VAL);
+ if (retrievedUsername.isEmpty()) {
+ username = "";
+ } else {
+ username = retrievedUsername;
+ }
+
+ /* Setting password based on properties */
+ String retrievedPassword = SchedulerProperties.getProperty(SchedulerProperties.SCHEDULER_PASSWORD_VAL);
+ if (retrievedPassword.isEmpty()) {
+ password = StringUtils.EMPTY;
+ } else {
+ if (retrievedPassword.contains("OBF:")) {
+ password = Password.deobfuscate(retrievedPassword);
+ } else {
+ password = retrievedPassword;
+ }
+ }
+ try {
+ if (StringUtils.isBlank(password)) {
+ throw new CredentialException(PASSWORD_IS_EMPTY);
+ }
+ } catch (Exception ex) {
+ logger.error(EELFLoggerDelegate.errorLogger, "Unable to initialize rest client", ex);
+ }
+ String authString = username + ":" + password;
+ byte[] authEncBytes = Base64.encodeBase64(authString.getBytes());
+ String authStringEnc = new String(authEncBytes);
+
+ commonHeaders = new MultivaluedHashMap<String, Object>();
+ commonHeaders.put("Authorization", Collections.singletonList((Object) ("Basic " + authStringEnc)));
+
+ try {
+ if (!username.isEmpty()) {
+
+ client = HttpBasicClient.getClient();
+ } else {
+
+ client = HttpsBasicClient.getClient();
+ }
+ } catch (Exception e) {
+ logger.debug(EELFLoggerDelegate.debugLogger, "Unable to initialize rest client");
+
+ }
+ logger.debug(EELFLoggerDelegate.debugLogger, "Client Initialized");
+
+ }
+
+ @SuppressWarnings("unchecked")
+ public <T> void Get(T t, String sourceId, String path,
+ org.onap.portalapp.portal.scheduler.restobjects.RestObject<T> restObject) throws Exception {
+
+ String methodName = "Get";
+ String url = SchedulerProperties.getProperty(SchedulerProperties.SCHEDULER_SERVER_URL_VAL) + path;
+
+ logger.debug(EELFLoggerDelegate.debugLogger, "URL FOR GET : ", url);
+ try {
+ initRestClient();
+
+ final Response cres = client.target(url).request().accept("application/json").headers(commonHeaders).get();
+
+ int status = cres.getStatus();
+ restObject.setStatusCode(status);
+
+ t = (T) cres.readEntity(t.getClass());
+ if (t.equals("")) {
+ restObject.set(null);
+ } else {
+ restObject.set(t);
+ }
+ } catch (HttpClientErrorException e) {
+ String message = String.format(
+ " HttpClientErrorException: Exception For the POST . MethodName: %s, Url: %s", methodName,url);
+ logger.error(EELFLoggerDelegate.errorLogger, message, e);
+ EPLogUtil.schedulerAccessAlarm(logger, e.getStatusCode().value());
+ } catch (Exception e) {
+ String message = String.format(
+ "Exception For the POST . MethodName: %s, Url: %s", methodName,url);
+
+ logger.error(EELFLoggerDelegate.errorLogger, message, e);
+ EPLogUtil.schedulerAccessAlarm(logger, HttpStatus.INTERNAL_SERVER_ERROR.value());
+
+ throw e;
+
+ }
+
+ }
+
+ @SuppressWarnings("unchecked")
+ public <T> void Post(T t, JSONObject requestDetails, String path, RestObject<T> restObject) throws Exception {
+
+ String methodName = "Post";
+ String url = SchedulerProperties.getProperty(SchedulerProperties.SCHEDULER_SERVER_URL_VAL) + path;
+ logger.debug(EELFLoggerDelegate.debugLogger, "URL FOR POST : "+ url);
+
+ try {
+
+ initRestClient();
+
+ // Change the content length
+ final Response cres = client.target(url).request().accept("application/json").headers(commonHeaders)
+ .post(Entity.entity(requestDetails, MediaType.APPLICATION_JSON));
+
+ if (cres.getEntity() != null) {
+ t = (T) cres.readEntity(t.getClass());
+ restObject.set(t);
+ } else {
+ t = null;
+ restObject.set(t);
+ }
+
+ int status = cres.getStatus();
+ restObject.setStatusCode(status);
+
+ if (status >= 200 && status <= 299) {
+ String message = String.format(
+ " REST api POST was successful!", methodName);
+ logger.debug(EELFLoggerDelegate.debugLogger, message);
+
+ } else {
+ String message = String.format(
+ " FAILED with http status . MethodName: %s, Status: %s, Url: %s", methodName,status,url);
+ logger.debug(EELFLoggerDelegate.debugLogger, message);
+ }
+
+ } catch (HttpClientErrorException e) {
+ String message = String.format(
+ " HttpClientErrorException: Exception For the POST . MethodName: %s, Url: %s", methodName,url);
+ logger.error(EELFLoggerDelegate.errorLogger, message, e);
+ EPLogUtil.schedulerAccessAlarm(logger, e.getStatusCode().value());
+ } catch (Exception e) {
+ String message = String.format(
+ " HttpClientErrorException: Exception For the POST . MethodName: %s, Url: %s", methodName,url);
+ logger.error(EELFLoggerDelegate.errorLogger, message, e);
+ EPLogUtil.schedulerAccessAlarm(logger, HttpStatus.INTERNAL_SERVER_ERROR.value());
+ throw e;
+ }
+ }
+
+ @Override
+ public void logRequest(JSONObject requestDetails) {
+ }
+
+ @SuppressWarnings("unchecked")
+ public <T> void Delete(T t, JSONObject requestDetails, String sourceID, String path, RestObject<T> restObject) {
+
+ String methodName = "Delete";
+ String url = "";
+ Response cres = null;
+
+ try {
+ initRestClient();
+
+ url = SchedulerProperties.getProperty(SchedulerProperties.SCHEDULER_SERVER_URL_VAL) + path;
+
+ cres = client.target(url).request().accept("application/json").headers(commonHeaders)
+ // .entity(r)
+ .build("DELETE", Entity.entity(requestDetails, MediaType.APPLICATION_JSON)).invoke();
+ // .method("DELETE", Entity.entity(r, MediaType.APPLICATION_JSON));
+ // .delete(Entity.entity(r, MediaType.APPLICATION_JSON));
+
+ int status = cres.getStatus();
+ restObject.setStatusCode(status);
+ if (cres.getEntity() != null) {
+ t = (T) cres.readEntity(t.getClass());
+ restObject.set(t);
+ }
+
+ } catch (HttpClientErrorException e) {
+ logger.error(EELFLoggerDelegate.errorLogger, " HttpClientErrorException:Exception For the Delete",
+ methodName, url, e);
+ EPLogUtil.schedulerAccessAlarm(logger, e.getStatusCode().value());
+ } catch (Exception e) {
+ logger.error(EELFLoggerDelegate.errorLogger, "Exception For the Delete", methodName, url, e);
+ EPLogUtil.schedulerAccessAlarm(logger, HttpStatus.INTERNAL_SERVER_ERROR.value());
+ throw e;
+ }
+ }
+
+ public <T> T getInstance(Class<T> clazz) throws IllegalAccessException, InstantiationException {
+ return clazz.newInstance();
+ }
+
+}
diff --git a/ecomp-portal-BE-common/src/main/java/org/onap/portalapp/portal/scheduler/SchedulerRestInterfaceFactory.java b/ecomp-portal-BE-common/src/main/java/org/onap/portalapp/portal/scheduler/SchedulerRestInterfaceFactory.java
new file mode 100644
index 00000000..75ae6d3a
--- /dev/null
+++ b/ecomp-portal-BE-common/src/main/java/org/onap/portalapp/portal/scheduler/SchedulerRestInterfaceFactory.java
@@ -0,0 +1,51 @@
+/*-
+ * ============LICENSE_START==========================================
+ * ONAP Portal
+ * ===================================================================
+ * Copyright (C) 2017 AT&T Intellectual Property. All rights reserved.
+ * ===================================================================
+ *
+ * Unless otherwise specified, all software contained herein is licensed
+ * under the Apache License, Version 2.0 (the "License");
+ * you may not use this software 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.
+ *
+ * Unless otherwise specified, all documentation contained herein is licensed
+ * under the Creative Commons License, Attribution 4.0 Intl. (the "License");
+ * you may not use this documentation except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * https://creativecommons.org/licenses/by/4.0/
+ *
+ * Unless required by applicable law or agreed to in writing, documentation
+ * 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.
+ *
+ * ============LICENSE_END============================================
+ *
+ * ECOMP is a trademark and service mark of AT&T Intellectual Property.
+ */
+package org.onap.portalapp.portal.scheduler;
+
+public class SchedulerRestInterfaceFactory {
+
+
+ public static SchedulerRestInterfaceIfc getInstance () {
+ SchedulerRestInterfaceIfc obj = null;
+
+ obj = new SchedulerRestInterface();
+
+ return ( obj );
+ }
+
+}
diff --git a/ecomp-portal-BE-common/src/main/java/org/onap/portalapp/portal/scheduler/SchedulerRestInterfaceIfc.java b/ecomp-portal-BE-common/src/main/java/org/onap/portalapp/portal/scheduler/SchedulerRestInterfaceIfc.java
new file mode 100644
index 00000000..5d1da5e3
--- /dev/null
+++ b/ecomp-portal-BE-common/src/main/java/org/onap/portalapp/portal/scheduler/SchedulerRestInterfaceIfc.java
@@ -0,0 +1,58 @@
+/*-
+ * ============LICENSE_START==========================================
+ * ONAP Portal
+ * ===================================================================
+ * Copyright (C) 2017 AT&T Intellectual Property. All rights reserved.
+ * ===================================================================
+ *
+ * Unless otherwise specified, all software contained herein is licensed
+ * under the Apache License, Version 2.0 (the "License");
+ * you may not use this software 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.
+ *
+ * Unless otherwise specified, all documentation contained herein is licensed
+ * under the Creative Commons License, Attribution 4.0 Intl. (the "License");
+ * you may not use this documentation except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * https://creativecommons.org/licenses/by/4.0/
+ *
+ * Unless required by applicable law or agreed to in writing, documentation
+ * 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.
+ *
+ * ============LICENSE_END============================================
+ *
+ * ECOMP is a trademark and service mark of AT&T Intellectual Property.
+ */
+package org.onap.portalapp.portal.scheduler;
+
+import org.json.simple.JSONObject;
+import org.onap.portalapp.portal.scheduler.restobjects.RestObject;
+import org.springframework.stereotype.Service;
+
+
+@Service
+public interface SchedulerRestInterfaceIfc {
+
+ public void initRestClient();
+
+ public <T> void Get(T t, String sourceId, String path, org.onap.portalapp.portal.scheduler.restobjects.RestObject<T> restObject ) throws Exception;
+
+ public <T> void Delete(T t, JSONObject requestDetails, String sourceID, String path, RestObject<T> restObject)
+ throws Exception;
+
+ public <T> void Post(T t, JSONObject r, String path, RestObject<T> restObject) throws Exception;
+
+ public void logRequest(JSONObject requestDetails);
+} \ No newline at end of file
diff --git a/ecomp-portal-BE-common/src/main/java/org/onap/portalapp/portal/scheduler/SchedulerUtil.java b/ecomp-portal-BE-common/src/main/java/org/onap/portalapp/portal/scheduler/SchedulerUtil.java
new file mode 100644
index 00000000..2da5f696
--- /dev/null
+++ b/ecomp-portal-BE-common/src/main/java/org/onap/portalapp/portal/scheduler/SchedulerUtil.java
@@ -0,0 +1,136 @@
+/*-
+ * ============LICENSE_START==========================================
+ * ONAP Portal
+ * ===================================================================
+ * Copyright (C) 2017 AT&T Intellectual Property. All rights reserved.
+ * ===================================================================
+ *
+ * Unless otherwise specified, all software contained herein is licensed
+ * under the Apache License, Version 2.0 (the "License");
+ * you may not use this software 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.
+ *
+ * Unless otherwise specified, all documentation contained herein is licensed
+ * under the Creative Commons License, Attribution 4.0 Intl. (the "License");
+ * you may not use this documentation except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * https://creativecommons.org/licenses/by/4.0/
+ *
+ * Unless required by applicable law or agreed to in writing, documentation
+ * 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.
+ *
+ * ============LICENSE_END============================================
+ *
+ * ECOMP is a trademark and service mark of AT&T Intellectual Property.
+ */
+package org.onap.portalapp.portal.scheduler;
+
+import java.text.DateFormat;
+import java.text.SimpleDateFormat;
+import java.util.Date;
+
+import org.onap.portalapp.portal.scheduler.restobjects.GetTimeSlotsRestObject;
+import org.onap.portalapp.portal.scheduler.restobjects.PostCreateNewVnfRestObject;
+import org.onap.portalapp.portal.scheduler.restobjects.PostSubmitVnfChangeRestObject;
+import org.onap.portalapp.portal.scheduler.wrapper.GetTimeSlotsWrapper;
+import org.onap.portalapp.portal.scheduler.wrapper.PostCreateNewVnfWrapper;
+import org.onap.portalapp.portal.scheduler.wrapper.PostSubmitVnfChangeTimeSlotsWrapper;
+import org.onap.portalsdk.core.logging.logic.EELFLoggerDelegate;
+
+import com.fasterxml.jackson.databind.ObjectMapper;
+
+public class SchedulerUtil {
+
+ private static EELFLoggerDelegate logger = EELFLoggerDelegate.getLogger(SchedulerUtil.class);
+
+ final static DateFormat dateFormat = new SimpleDateFormat("HH:mm:ss:SSSS");
+
+ public static GetTimeSlotsWrapper getTimeSlotsWrapResponse (GetTimeSlotsRestObject<String> rs) {
+
+ String resp_str = "";
+ int status = 0;
+
+ if ( rs != null ) {
+ resp_str = rs.get();
+ status = rs.getStatusCode();
+ }
+
+ GetTimeSlotsWrapper w = new GetTimeSlotsWrapper();
+
+ w.setEntity(resp_str);
+ w.setStatus (status);
+
+ return (w);
+ }
+
+ public static PostSubmitVnfChangeTimeSlotsWrapper postSubmitNewVnfWrapResponse (PostSubmitVnfChangeRestObject<String> rs) {
+
+ String resp_str = "";
+ int status = 0;
+ String uuid = "";
+
+ if ( rs != null ) {
+ resp_str = rs.get();
+ status = rs.getStatusCode();
+ uuid = rs.getUUID();
+ }
+
+ PostSubmitVnfChangeTimeSlotsWrapper w = new PostSubmitVnfChangeTimeSlotsWrapper();
+
+ w.setEntity(resp_str);
+ w.setStatus (status);
+ w.setUuid(uuid);
+
+ return (w);
+ }
+
+ public static PostCreateNewVnfWrapper postCreateNewVnfWrapResponse (PostCreateNewVnfRestObject<String> rs) {
+
+ String resp_str = "";
+ int status = 0;
+ String uuid = "";
+
+ if ( rs != null ) {
+ resp_str = rs.get();
+ status = rs.getStatusCode();
+ uuid = rs.getUUID();
+ }
+
+ PostCreateNewVnfWrapper w = new PostCreateNewVnfWrapper();
+
+ w.setEntity(resp_str);
+ w.setStatus (status);
+ w.setUuid(uuid);
+
+ return (w);
+ }
+
+ public static <T> String convertPojoToString ( T t ) throws com.fasterxml.jackson.core.JsonProcessingException {
+
+ String methodName = "convertPojoToString";
+ ObjectMapper mapper = new ObjectMapper();
+ String r_json_str = "";
+ if ( t != null ) {
+ try {
+ r_json_str = mapper.writeValueAsString(t);
+ }
+ catch ( com.fasterxml.jackson.core.JsonProcessingException j ) {
+ logger.debug(EELFLoggerDelegate.debugLogger,dateFormat.format(new Date()) + "<== " + methodName + " Unable to parse object as json");
+ }
+ }
+ return (r_json_str);
+ }
+
+}
diff --git a/ecomp-portal-BE-common/src/main/java/org/onap/portalapp/portal/scheduler/client/HttpBasicClient.java b/ecomp-portal-BE-common/src/main/java/org/onap/portalapp/portal/scheduler/client/HttpBasicClient.java
new file mode 100644
index 00000000..8d64b2e4
--- /dev/null
+++ b/ecomp-portal-BE-common/src/main/java/org/onap/portalapp/portal/scheduler/client/HttpBasicClient.java
@@ -0,0 +1,85 @@
+/*-
+ * ============LICENSE_START==========================================
+ * ONAP Portal
+ * ===================================================================
+ * Copyright (C) 2017 AT&T Intellectual Property. All rights reserved.
+ * ===================================================================
+ *
+ * Unless otherwise specified, all software contained herein is licensed
+ * under the Apache License, Version 2.0 (the "License");
+ * you may not use this software 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.
+ *
+ * Unless otherwise specified, all documentation contained herein is licensed
+ * under the Creative Commons License, Attribution 4.0 Intl. (the "License");
+ * you may not use this documentation except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * https://creativecommons.org/licenses/by/4.0/
+ *
+ * Unless required by applicable law or agreed to in writing, documentation
+ * 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.
+ *
+ * ============LICENSE_END============================================
+ *
+ * ECOMP is a trademark and service mark of AT&T Intellectual Property.
+ */
+
+package org.onap.portalapp.portal.scheduler.client;
+
+
+import java.text.DateFormat;
+import java.text.SimpleDateFormat;
+
+import javax.servlet.ServletContext;
+import javax.ws.rs.client.Client;
+import javax.ws.rs.client.ClientBuilder;
+
+import org.glassfish.jersey.client.ClientConfig;
+import org.glassfish.jersey.client.ClientProperties;
+import org.onap.portalapp.portal.scheduler.util.CustomJacksonJaxBJsonProvider;
+import org.onap.portalsdk.core.logging.logic.EELFLoggerDelegate;
+import org.springframework.beans.factory.annotation.Autowired;
+
+/**
+ * General HTTP client.
+ */
+
+public class HttpBasicClient{
+
+ /** The servlet context. */
+ @Autowired
+ private ServletContext servletContext;
+
+ /** The logger. */
+ EELFLoggerDelegate logger = EELFLoggerDelegate.getLogger(HttpBasicClient.class);
+
+ /** The Constant dateFormat. */
+ final static DateFormat dateFormat = new SimpleDateFormat("HH:mm:ss:SSSS");
+
+ /**
+ * Obtain a basic HTTP client .
+ *
+ * @return Client client object
+ * @throws Exception the exception
+ */
+ public static Client getClient() throws Exception {
+
+ ClientConfig config = new ClientConfig();
+ config.property(ClientProperties.SUPPRESS_HTTP_COMPLIANCE_VALIDATION, true);
+
+ return ClientBuilder.newClient(config)
+ .register(CustomJacksonJaxBJsonProvider.class);
+ }
+}
diff --git a/ecomp-portal-BE-common/src/main/java/org/onap/portalapp/portal/scheduler/client/HttpsBasicClient.java b/ecomp-portal-BE-common/src/main/java/org/onap/portalapp/portal/scheduler/client/HttpsBasicClient.java
new file mode 100644
index 00000000..53848e02
--- /dev/null
+++ b/ecomp-portal-BE-common/src/main/java/org/onap/portalapp/portal/scheduler/client/HttpsBasicClient.java
@@ -0,0 +1,162 @@
+/*-
+ * ============LICENSE_START==========================================
+ * ONAP Portal
+ * ===================================================================
+ * Copyright (C) 2017 AT&T Intellectual Property. All rights reserved.
+ * ===================================================================
+ *
+ * Unless otherwise specified, all software contained herein is licensed
+ * under the Apache License, Version 2.0 (the "License");
+ * you may not use this software 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.
+ *
+ * Unless otherwise specified, all documentation contained herein is licensed
+ * under the Creative Commons License, Attribution 4.0 Intl. (the "License");
+ * you may not use this documentation except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * https://creativecommons.org/licenses/by/4.0/
+ *
+ * Unless required by applicable law or agreed to in writing, documentation
+ * 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.
+ *
+ * ============LICENSE_END============================================
+ *
+ * ECOMP is a trademark and service mark of AT&T Intellectual Property.
+ */
+
+package org.onap.portalapp.portal.scheduler.client;
+
+import java.io.File;
+import java.text.DateFormat;
+import java.text.SimpleDateFormat;
+import java.util.Date;
+
+import javax.net.ssl.HostnameVerifier;
+import javax.net.ssl.HttpsURLConnection;
+import javax.net.ssl.SSLContext;
+import javax.net.ssl.SSLSession;
+import javax.ws.rs.client.Client;
+import javax.ws.rs.client.ClientBuilder;
+
+import org.eclipse.jetty.util.security.Password;
+import org.glassfish.jersey.client.ClientConfig;
+import org.glassfish.jersey.client.ClientProperties;
+import org.onap.portalapp.portal.scheduler.SchedulerProperties;
+import org.onap.portalapp.portal.scheduler.util.CustomJacksonJaxBJsonProvider;
+import org.onap.portalsdk.core.logging.logic.EELFLoggerDelegate;
+import org.onap.portalsdk.core.util.SystemProperties;
+
+ /**
+ * General SSL client using the VID tomcat keystore. It doesn't use client certificates.
+ */
+
+public class HttpsBasicClient{
+
+ /** The logger. */
+ static EELFLoggerDelegate logger = EELFLoggerDelegate.getLogger(HttpsBasicClient.class);
+
+ /** The Constant dateFormat. */
+ final static DateFormat dateFormat = new SimpleDateFormat("HH:mm:ss:SSSS");
+
+ /**
+ * Retrieve an SSL client.
+ *
+ * @return Client The SSL client
+ * @throws Exception the exception
+ */
+ public static Client getClient() throws Exception {
+ String methodName = "getClient";
+ ClientConfig config = new ClientConfig();
+ //config.getFeatures().put(JSONConfiguration.FEATURE_POJO_MAPPING, Boolean.TRUE);
+ //config.getClasses().add(org.openecomp.aai.util.CustomJacksonJaxBJsonProvider.class);
+
+ SSLContext ctx = null;
+
+ try {
+
+ config.property(ClientProperties.SUPPRESS_HTTP_COMPLIANCE_VALIDATION, true);
+
+ String truststore_path = SchedulerProperties.getProperty(SchedulerProperties.VID_TRUSTSTORE_FILENAME);
+ logger.debug(EELFLoggerDelegate.debugLogger, dateFormat.format(new Date()) + " " + methodName + " truststore_path=" + truststore_path);
+ String truststore_password = SchedulerProperties.getProperty(SchedulerProperties.VID_TRUSTSTORE_PASSWD_X);
+
+
+ String decrypted_truststore_password = Password.deobfuscate(truststore_password);
+ //logger.debug(dateFormat.format(new Date()) + " " + methodName + " decrypted_truststore_password=" + decrypted_truststore_password);
+
+ File tr = new File (truststore_path);
+ logger.debug(EELFLoggerDelegate.debugLogger, dateFormat.format(new Date()) + " " + methodName + " absolute truststore path=" + tr.getAbsolutePath());
+
+ //String keystore_path = certFilePath + AAIProperties.FILESEPARTOR + SystemProperties.getProperty(AAIProperties.AAI_KEYSTORE_FILENAME);
+ //String keystore_password = SystemProperties.getProperty(AAIProperties.AAI_KEYSTORE_PASSWD_X);
+ //String decrypted_keystore_password = EncryptedPropValue.decryptTriple(keystore_password);
+
+ System.setProperty("javax.net.ssl.trustStore", truststore_path);
+ System.setProperty("javax.net.ssl.trustStorePassword", decrypted_truststore_password);
+ HttpsURLConnection.setDefaultHostnameVerifier( new HostnameVerifier(){
+ public boolean verify(String string,SSLSession ssls) {
+ return true;
+ }
+ });
+
+ //May need to make the algorithm a parameter. MSO requires TLSv1.1 or TLSv1.2
+ ctx = SSLContext.getInstance("TLSv1.2");
+
+ /*
+ KeyManagerFactory kmf = null;
+ try {
+ kmf = KeyManagerFactory.getInstance("SunX509");
+ FileInputStream fin = new FileInputStream(keystore_path);
+ KeyStore ks = KeyStore.getInstance("PKCS12");
+ char[] pwd = decrypted_keystore_password.toCharArray();
+ ks.load(fin, pwd);
+ kmf.init(ks, pwd);
+ } catch (Exception e) {
+ System.out.println("Error setting up kmf: exiting");
+ e.printStackTrace();
+ System.exit(1);
+ }
+
+ ctx.init(kmf.getKeyManagers(), null, null);
+ */
+ ctx.init(null, null, null);
+ //config.getProperties().put(HTTPSProperties.PROPERTY_HTTPS_PROPERTIES,
+ // new HTTPSProperties( , ctx));
+
+ return ClientBuilder.newBuilder()
+ .sslContext(ctx)
+ .hostnameVerifier(new HostnameVerifier() {
+ @Override
+ public boolean verify( String s, SSLSession sslSession ) {
+ return true;
+ }
+ }).withConfig(config)
+ .build()
+ .register(CustomJacksonJaxBJsonProvider.class);
+
+ } catch (Exception e) {
+ logger.debug(EELFLoggerDelegate.debugLogger, "Error setting up config: exiting");
+ //System.out.println("Error setting up config: exiting");
+ e.printStackTrace();
+ return null;
+ }
+
+ //Client client = ClientBuilder.newClient(config);
+ // uncomment this line to get more logging for the request/response
+ // client.addFilter(new LoggingFilter(System.out));
+
+ //return client;
+ }
+}
diff --git a/ecomp-portal-BE-common/src/main/java/org/onap/portalapp/portal/scheduler/policy/rest/RequestDetails.java b/ecomp-portal-BE-common/src/main/java/org/onap/portalapp/portal/scheduler/policy/rest/RequestDetails.java
new file mode 100644
index 00000000..66b77faf
--- /dev/null
+++ b/ecomp-portal-BE-common/src/main/java/org/onap/portalapp/portal/scheduler/policy/rest/RequestDetails.java
@@ -0,0 +1,125 @@
+/*-
+ * ============LICENSE_START==========================================
+ * ONAP Portal
+ * ===================================================================
+ * Copyright (C) 2017 AT&T Intellectual Property. All rights reserved.
+ * ===================================================================
+ *
+ * Unless otherwise specified, all software contained herein is licensed
+ * under the Apache License, Version 2.0 (the "License");
+ * you may not use this software 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.
+ *
+ * Unless otherwise specified, all documentation contained herein is licensed
+ * under the Creative Commons License, Attribution 4.0 Intl. (the "License");
+ * you may not use this documentation except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * https://creativecommons.org/licenses/by/4.0/
+ *
+ * Unless required by applicable law or agreed to in writing, documentation
+ * 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.
+ *
+ * ============LICENSE_END============================================
+ *
+ * ECOMP is a trademark and service mark of AT&T Intellectual Property.
+ */
+
+package org.onap.portalapp.portal.scheduler.policy.rest;
+
+import com.fasterxml.jackson.annotation.JsonInclude;
+import com.fasterxml.jackson.annotation.JsonProperty;
+import com.fasterxml.jackson.annotation.JsonPropertyOrder;
+
+/*
+ [
+ {
+ "policyConfigMessage": "Config Retrieved! ",
+ "policyConfigStatus": "CONFIG_RETRIEVED",
+ "type": "JSON",
+ "config": "{\"service\":\"TimeLimitAndVerticalTopology\",\"policyName\":\"SNIRO_CM_1707.Demo_TimeLimitAndVerticalTopology_zone_localTime\",\"description\":\"dev instance\",\"templateVersion\":\"1702.03\",\"version\":\"1707\",\"priority\":\"4\",\"riskType\":\"test\",\"riskLevel\":\"3\",\"guard\":\"False\",\"content\":{\"serviceType\":\"networkOnDemand\",\"identity\":\"vnf_upgrade_policy\",\"policyScope\":{\"serviceType\":[\"networkOnDemand\"],\"aicZone\":[\" \"],\"entityType\":[\"vnf\"]},\"timeSchedule\":{\"allowedPeriodicTime\":[{\"day\":\"weekday\",\"timeRange\":[{\"start_time\":\"04:00:00\",\"end_time\":\"13:00:00\"}]}]},\"nodeType\":[\"vnf\"],\"type\":\"timeLimitAndVerticalTopology\",\"conflictScope\":\"vnf_zone\"}}",
+ "policyName": "SNIRO_CM_1707.Config_MS_Demo_TimeLimitAndVerticalTopology_zone_localTime.1.xml",
+ "policyVersion": "1",
+ "matchingConditions": {
+ "ECOMPName": "SNIRO-Placement",
+ "ConfigName": "",
+ "service": "TimeLimitAndVerticalTopology",
+ "uuid": "",
+ "Location": ""
+ },
+ "responseAttributes": {},
+ "property": null
+ },
+ {
+ "policyConfigMessage": "Config Retrieved! ",
+ "policyConfigStatus": "CONFIG_RETRIEVED",
+ "type": "JSON",
+ "config": "{\"service\":\"TimeLimitAndVerticalTopology\",\"policyName\":\"SNIRO_CM_1707.Demo_TimeLimitAndVerticalTopology_pserver_localTime\",\"description\":\"dev instance\",\"templateVersion\":\"1702.03\",\"version\":\"1707\",\"priority\":\"4\",\"riskType\":\"test\",\"riskLevel\":\"3\",\"guard\":\"False\",\"content\":{\"serviceType\":\"networkOnDemand\",\"identity\":\"vnf_upgrade_policy\",\"policyScope\":{\"serviceType\":[\"networkOnDemand\"],\"aicZone\":[\" \"],\"entityType\":[\"vnf\"]},\"timeSchedule\":{\"allowedPeriodicTime\":[{\"day\":\"weekday\",\"timeRange\":[{\"start_time\":\"04:00:00\",\"end_time\":\"13:00:00\"}]}]},\"nodeType\":[\"vnf\"],\"type\":\"timeLimitAndVerticalTopology\",\"conflictScope\":\"vnf_pserver\"}}",
+ "policyName": "SNIRO_CM_1707.Config_MS_Demo_TimeLimitAndVerticalTopology_pserver_localTime.1.xml",
+ "policyVersion": "1",
+ "matchingConditions": {
+ "ECOMPName": "SNIRO-Placement",
+ "ConfigName": "",
+ "service": "TimeLimitAndVerticalTopology",
+ "uuid": "",
+ "Location": ""
+ },
+ "responseAttributes": {},
+ "property": null
+ },
+ {
+ "policyConfigMessage": "Config Retrieved! ",
+ "policyConfigStatus": "CONFIG_RETRIEVED",
+ "type": "JSON",
+ "config": "{\"service\":\"TimeLimitAndVerticalTopology\",\"policyName\":\"SNIRO_CM_1707.Demo_TimeLimitAndVerticalTopology_vnf_localTime\",\"description\":\"dev instance\",\"templateVersion\":\"1702.03\",\"version\":\"1707\",\"priority\":\"4\",\"riskType\":\"test\",\"riskLevel\":\"3\",\"guard\":\"False\",\"content\":{\"serviceType\":\"networkOnDemand\",\"identity\":\"vnf_upgrade_policy\",\"policyScope\":{\"serviceType\":[\"networkOnDemand\"],\"aicZone\":[\" \"],\"entityType\":[\"vnf\"]},\"timeSchedule\":{\"allowedPeriodicTime\":[{\"day\":\"weekday\",\"timeRange\":[{\"start_time\":\"04:00:00\",\"end_time\":\"13:00:00\"}]}]},\"nodeType\":[\"vnf\"],\"type\":\"timeLimitAndVerticalTopology\",\"conflictScope\":\"vnf\"}}",
+ "policyName": "SNIRO_CM_1707.Config_MS_Demo_TimeLimitAndVerticalTopology_vnf_localTime.1.xml",
+ "policyVersion": "1",
+ "matchingConditions": {
+ "ECOMPName": "SNIRO-Placement",
+ "ConfigName": "",
+ "service": "TimeLimitAndVerticalTopology",
+ "uuid": "",
+ "Location": ""
+ },
+ "responseAttributes": {},
+ "property": null
+ }
+ ]
+*/
+@JsonInclude(JsonInclude.Include.NON_NULL)
+@JsonPropertyOrder({
+ "policyConfigMessage",
+ "policyConfigStatus",
+ "type",
+ "config",
+ "policyName",
+ "policyVersion",
+ "matchingConditions"
+})
+public class RequestDetails {
+
+ @JsonProperty("policyName")
+ private String policyName;
+
+ @JsonProperty("policyName")
+ public String getPolicyName() {
+ return policyName;
+ }
+
+ @JsonProperty("policyName")
+ public void setPolicyName(String policyName) {
+ this.policyName = policyName;
+ }
+
+} \ No newline at end of file
diff --git a/ecomp-portal-BE-common/src/main/java/org/onap/portalapp/portal/scheduler/restobjects/GetTimeSlotsRestObject.java b/ecomp-portal-BE-common/src/main/java/org/onap/portalapp/portal/scheduler/restobjects/GetTimeSlotsRestObject.java
new file mode 100644
index 00000000..6adf59c7
--- /dev/null
+++ b/ecomp-portal-BE-common/src/main/java/org/onap/portalapp/portal/scheduler/restobjects/GetTimeSlotsRestObject.java
@@ -0,0 +1,48 @@
+/*-
+ * ============LICENSE_START==========================================
+ * ONAP Portal
+ * ===================================================================
+ * Copyright (C) 2017 AT&T Intellectual Property. All rights reserved.
+ * ===================================================================
+ *
+ * Unless otherwise specified, all software contained herein is licensed
+ * under the Apache License, Version 2.0 (the "License");
+ * you may not use this software 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.
+ *
+ * Unless otherwise specified, all documentation contained herein is licensed
+ * under the Creative Commons License, Attribution 4.0 Intl. (the "License");
+ * you may not use this documentation except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * https://creativecommons.org/licenses/by/4.0/
+ *
+ * Unless required by applicable law or agreed to in writing, documentation
+ * 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.
+ *
+ * ============LICENSE_END============================================
+ *
+ * ECOMP is a trademark and service mark of AT&T Intellectual Property.
+ */
+package org.onap.portalapp.portal.scheduler.restobjects;
+
+public class GetTimeSlotsRestObject<T> extends RestObject<T> {
+
+ public String uuid;
+
+ public void setUUID(String uuid) { this.uuid = uuid; }
+
+ public String getUUID() { return this.uuid; }
+
+}
diff --git a/ecomp-portal-BE-common/src/main/java/org/onap/portalapp/portal/scheduler/restobjects/PostCreateNewVnfRestObject.java b/ecomp-portal-BE-common/src/main/java/org/onap/portalapp/portal/scheduler/restobjects/PostCreateNewVnfRestObject.java
new file mode 100644
index 00000000..757b8188
--- /dev/null
+++ b/ecomp-portal-BE-common/src/main/java/org/onap/portalapp/portal/scheduler/restobjects/PostCreateNewVnfRestObject.java
@@ -0,0 +1,47 @@
+/*-
+ * ============LICENSE_START==========================================
+ * ONAP Portal
+ * ===================================================================
+ * Copyright (C) 2017 AT&T Intellectual Property. All rights reserved.
+ * ===================================================================
+ *
+ * Unless otherwise specified, all software contained herein is licensed
+ * under the Apache License, Version 2.0 (the "License");
+ * you may not use this software 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.
+ *
+ * Unless otherwise specified, all documentation contained herein is licensed
+ * under the Creative Commons License, Attribution 4.0 Intl. (the "License");
+ * you may not use this documentation except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * https://creativecommons.org/licenses/by/4.0/
+ *
+ * Unless required by applicable law or agreed to in writing, documentation
+ * 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.
+ *
+ * ============LICENSE_END============================================
+ *
+ * ECOMP is a trademark and service mark of AT&T Intellectual Property.
+ */
+package org.onap.portalapp.portal.scheduler.restobjects;
+
+public class PostCreateNewVnfRestObject<T> extends RestObject<T> {
+
+ public String uuid;
+
+ public void setUUID(String uuid) { this.uuid = uuid; }
+
+ public String getUUID() { return this.uuid; }
+}
diff --git a/ecomp-portal-BE-common/src/main/java/org/onap/portalapp/portal/scheduler/restobjects/PostSubmitVnfChangeRestObject.java b/ecomp-portal-BE-common/src/main/java/org/onap/portalapp/portal/scheduler/restobjects/PostSubmitVnfChangeRestObject.java
new file mode 100644
index 00000000..3f75315e
--- /dev/null
+++ b/ecomp-portal-BE-common/src/main/java/org/onap/portalapp/portal/scheduler/restobjects/PostSubmitVnfChangeRestObject.java
@@ -0,0 +1,47 @@
+/*-
+ * ============LICENSE_START==========================================
+ * ONAP Portal
+ * ===================================================================
+ * Copyright (C) 2017 AT&T Intellectual Property. All rights reserved.
+ * ===================================================================
+ *
+ * Unless otherwise specified, all software contained herein is licensed
+ * under the Apache License, Version 2.0 (the "License");
+ * you may not use this software 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.
+ *
+ * Unless otherwise specified, all documentation contained herein is licensed
+ * under the Creative Commons License, Attribution 4.0 Intl. (the "License");
+ * you may not use this documentation except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * https://creativecommons.org/licenses/by/4.0/
+ *
+ * Unless required by applicable law or agreed to in writing, documentation
+ * 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.
+ *
+ * ============LICENSE_END============================================
+ *
+ * ECOMP is a trademark and service mark of AT&T Intellectual Property.
+ */
+package org.onap.portalapp.portal.scheduler.restobjects;
+
+public class PostSubmitVnfChangeRestObject<T> extends RestObject<T> {
+
+ public String uuid;
+
+ public void setUUID(String uuid) { this.uuid = uuid; }
+
+ public String getUUID() { return this.uuid; }
+}
diff --git a/ecomp-portal-BE-common/src/main/java/org/onap/portalapp/portal/scheduler/restobjects/RestObject.java b/ecomp-portal-BE-common/src/main/java/org/onap/portalapp/portal/scheduler/restobjects/RestObject.java
new file mode 100644
index 00000000..b2f4d5c0
--- /dev/null
+++ b/ecomp-portal-BE-common/src/main/java/org/onap/portalapp/portal/scheduler/restobjects/RestObject.java
@@ -0,0 +1,57 @@
+/*-
+ * ============LICENSE_START==========================================
+ * ONAP Portal
+ * ===================================================================
+ * Copyright (C) 2017 AT&T Intellectual Property. All rights reserved.
+ * ===================================================================
+ *
+ * Unless otherwise specified, all software contained herein is licensed
+ * under the Apache License, Version 2.0 (the "License");
+ * you may not use this software 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.
+ *
+ * Unless otherwise specified, all documentation contained herein is licensed
+ * under the Creative Commons License, Attribution 4.0 Intl. (the "License");
+ * you may not use this documentation except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * https://creativecommons.org/licenses/by/4.0/
+ *
+ * Unless required by applicable law or agreed to in writing, documentation
+ * 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.
+ *
+ * ============LICENSE_END============================================
+ *
+ * ECOMP is a trademark and service mark of AT&T Intellectual Property.
+ */
+
+package org.onap.portalapp.portal.scheduler.restobjects;
+
+
+public class RestObject<T> {
+
+ private T t;
+
+ private int statusCode= 0;
+
+ public void set(T t) { this.t = t; }
+
+ public T get() { return t; }
+
+ public void setStatusCode(int v) { this.statusCode = v; }
+
+ public int getStatusCode() { return this.statusCode; }
+
+}
+
diff --git a/ecomp-portal-BE-common/src/main/java/org/onap/portalapp/portal/scheduler/util/CustomJacksonJaxBJsonProvider.java b/ecomp-portal-BE-common/src/main/java/org/onap/portalapp/portal/scheduler/util/CustomJacksonJaxBJsonProvider.java
new file mode 100644
index 00000000..9f7b092c
--- /dev/null
+++ b/ecomp-portal-BE-common/src/main/java/org/onap/portalapp/portal/scheduler/util/CustomJacksonJaxBJsonProvider.java
@@ -0,0 +1,91 @@
+/*-
+ * ============LICENSE_START==========================================
+ * ONAP Portal
+ * ===================================================================
+ * Copyright (C) 2017 AT&T Intellectual Property. All rights reserved.
+ * ===================================================================
+ *
+ * Unless otherwise specified, all software contained herein is licensed
+ * under the Apache License, Version 2.0 (the "License");
+ * you may not use this software 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.
+ *
+ * Unless otherwise specified, all documentation contained herein is licensed
+ * under the Creative Commons License, Attribution 4.0 Intl. (the "License");
+ * you may not use this documentation except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * https://creativecommons.org/licenses/by/4.0/
+ *
+ * Unless required by applicable law or agreed to in writing, documentation
+ * 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.
+ *
+ * ============LICENSE_END============================================
+ *
+ * ECOMP is a trademark and service mark of AT&T Intellectual Property.
+ */
+
+package org.onap.portalapp.portal.scheduler.util;
+
+
+import javax.ws.rs.ext.Provider;
+
+import com.fasterxml.jackson.annotation.JsonInclude;
+import com.fasterxml.jackson.databind.DeserializationFeature;
+import com.fasterxml.jackson.databind.ObjectMapper;
+import com.fasterxml.jackson.databind.SerializationFeature;
+import com.fasterxml.jackson.jaxrs.json.JacksonJaxbJsonProvider;
+import com.fasterxml.jackson.module.jaxb.JaxbAnnotationModule;
+
+/**
+ * The Class CustomJacksonJaxBJsonProvider.
+ */
+@Provider
+public class CustomJacksonJaxBJsonProvider extends JacksonJaxbJsonProvider {
+
+ /** The common mapper. */
+ private static ObjectMapper commonMapper = null;
+
+ /**
+ * Instantiates a new custom jackson jax B json provider.
+ */
+ public CustomJacksonJaxBJsonProvider() {
+ if (commonMapper == null) {
+ ObjectMapper mapper = new ObjectMapper();
+
+ mapper.setSerializationInclusion(JsonInclude.Include.NON_NULL);
+
+ mapper.configure(SerializationFeature.WRITE_DATES_AS_TIMESTAMPS, false);
+ mapper.configure(SerializationFeature.INDENT_OUTPUT, false);
+ mapper.configure(SerializationFeature.WRAP_ROOT_VALUE, false);
+
+ mapper.configure(DeserializationFeature.FAIL_ON_UNKNOWN_PROPERTIES, false);
+ mapper.configure(DeserializationFeature.UNWRAP_ROOT_VALUE, false);
+
+ mapper.registerModule(new JaxbAnnotationModule());
+
+ commonMapper = mapper;
+ }
+ super.setMapper(commonMapper);
+ }
+
+ /**
+ * Gets the mapper.
+ *
+ * @return the mapper
+ */
+ public ObjectMapper getMapper() {
+ return commonMapper;
+ }
+}
diff --git a/ecomp-portal-BE-common/src/main/java/org/onap/portalapp/portal/scheduler/wrapper/GetTimeSlotsWrapper.java b/ecomp-portal-BE-common/src/main/java/org/onap/portalapp/portal/scheduler/wrapper/GetTimeSlotsWrapper.java
new file mode 100644
index 00000000..43f4e36a
--- /dev/null
+++ b/ecomp-portal-BE-common/src/main/java/org/onap/portalapp/portal/scheduler/wrapper/GetTimeSlotsWrapper.java
@@ -0,0 +1,42 @@
+/*-
+ * ============LICENSE_START==========================================
+ * ONAP Portal
+ * ===================================================================
+ * Copyright (C) 2017 AT&T Intellectual Property. All rights reserved.
+ * ===================================================================
+ *
+ * Unless otherwise specified, all software contained herein is licensed
+ * under the Apache License, Version 2.0 (the "License");
+ * you may not use this software 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.
+ *
+ * Unless otherwise specified, all documentation contained herein is licensed
+ * under the Creative Commons License, Attribution 4.0 Intl. (the "License");
+ * you may not use this documentation except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * https://creativecommons.org/licenses/by/4.0/
+ *
+ * Unless required by applicable law or agreed to in writing, documentation
+ * 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.
+ *
+ * ============LICENSE_END============================================
+ *
+ * ECOMP is a trademark and service mark of AT&T Intellectual Property.
+ */
+package org.onap.portalapp.portal.scheduler.wrapper;
+
+public class GetTimeSlotsWrapper extends SchedulerResponseWrapper {
+
+}
diff --git a/ecomp-portal-BE-common/src/main/java/org/onap/portalapp/portal/scheduler/wrapper/PostCreateNewVnfWrapper.java b/ecomp-portal-BE-common/src/main/java/org/onap/portalapp/portal/scheduler/wrapper/PostCreateNewVnfWrapper.java
new file mode 100644
index 00000000..fce04d84
--- /dev/null
+++ b/ecomp-portal-BE-common/src/main/java/org/onap/portalapp/portal/scheduler/wrapper/PostCreateNewVnfWrapper.java
@@ -0,0 +1,84 @@
+/*-
+ * ============LICENSE_START==========================================
+ * ONAP Portal
+ * ===================================================================
+ * Copyright (C) 2017 AT&T Intellectual Property. All rights reserved.
+ * ===================================================================
+ *
+ * Unless otherwise specified, all software contained herein is licensed
+ * under the Apache License, Version 2.0 (the "License");
+ * you may not use this software 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.
+ *
+ * Unless otherwise specified, all documentation contained herein is licensed
+ * under the Creative Commons License, Attribution 4.0 Intl. (the "License");
+ * you may not use this documentation except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * https://creativecommons.org/licenses/by/4.0/
+ *
+ * Unless required by applicable law or agreed to in writing, documentation
+ * 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.
+ *
+ * ============LICENSE_END============================================
+ *
+ * ECOMP is a trademark and service mark of AT&T Intellectual Property.
+ */
+package org.onap.portalapp.portal.scheduler.wrapper;
+
+import java.io.IOException;
+import java.util.LinkedHashMap;
+import java.util.Map;
+
+import org.apache.commons.lang.builder.ToStringBuilder;
+
+import com.fasterxml.jackson.annotation.JsonInclude;
+import com.fasterxml.jackson.annotation.JsonProperty;
+import com.fasterxml.jackson.annotation.JsonPropertyOrder;
+import com.fasterxml.jackson.core.JsonProcessingException;
+import com.fasterxml.jackson.databind.ObjectMapper;
+
+@JsonInclude(JsonInclude.Include.NON_NULL)
+@JsonPropertyOrder({ "uuid" })
+public class PostCreateNewVnfWrapper extends SchedulerResponseWrapper {
+
+ @JsonProperty("uuid")
+ private String uuid;
+
+ @JsonProperty("uuid")
+ public String getUuid() {
+ return uuid;
+ }
+
+ @JsonProperty("uuid")
+ public void setUuid(String v) {
+ this.uuid = v;
+ }
+
+ @Override
+ public String toString() {
+ return ToStringBuilder.reflectionToString(this);
+ }
+
+ public String getResponse() throws JsonProcessingException, IOException {
+
+ Map<String, Object> map = new LinkedHashMap<>();
+ map.put("status", getStatus());
+ map.put("entity", getEntity());
+ map.put("uuid", getUuid());
+ ObjectMapper objectMapper = new ObjectMapper();
+ String jsonResponse = objectMapper.writeValueAsString(map);
+ return jsonResponse;
+ }
+}
diff --git a/ecomp-portal-BE-common/src/main/java/org/onap/portalapp/portal/scheduler/wrapper/PostSubmitVnfChangeTimeSlotsWrapper.java b/ecomp-portal-BE-common/src/main/java/org/onap/portalapp/portal/scheduler/wrapper/PostSubmitVnfChangeTimeSlotsWrapper.java
new file mode 100644
index 00000000..bd588e0d
--- /dev/null
+++ b/ecomp-portal-BE-common/src/main/java/org/onap/portalapp/portal/scheduler/wrapper/PostSubmitVnfChangeTimeSlotsWrapper.java
@@ -0,0 +1,84 @@
+/*-
+ * ============LICENSE_START==========================================
+ * ONAP Portal
+ * ===================================================================
+ * Copyright (C) 2017 AT&T Intellectual Property. All rights reserved.
+ * ===================================================================
+ *
+ * Unless otherwise specified, all software contained herein is licensed
+ * under the Apache License, Version 2.0 (the "License");
+ * you may not use this software 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.
+ *
+ * Unless otherwise specified, all documentation contained herein is licensed
+ * under the Creative Commons License, Attribution 4.0 Intl. (the "License");
+ * you may not use this documentation except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * https://creativecommons.org/licenses/by/4.0/
+ *
+ * Unless required by applicable law or agreed to in writing, documentation
+ * 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.
+ *
+ * ============LICENSE_END============================================
+ *
+ * ECOMP is a trademark and service mark of AT&T Intellectual Property.
+ */
+package org.onap.portalapp.portal.scheduler.wrapper;
+
+import java.io.IOException;
+import java.util.LinkedHashMap;
+import java.util.Map;
+
+import org.apache.commons.lang.builder.ToStringBuilder;
+
+import com.fasterxml.jackson.annotation.JsonInclude;
+import com.fasterxml.jackson.annotation.JsonProperty;
+import com.fasterxml.jackson.annotation.JsonPropertyOrder;
+import com.fasterxml.jackson.core.JsonProcessingException;
+import com.fasterxml.jackson.databind.ObjectMapper;
+
+@JsonInclude(JsonInclude.Include.NON_NULL)
+@JsonPropertyOrder({ "uuid" })
+public class PostSubmitVnfChangeTimeSlotsWrapper extends SchedulerResponseWrapper {
+ @JsonProperty("uuid")
+ private String uuid;
+
+ @JsonProperty("uuid")
+ public String getUuid() {
+ return uuid;
+ }
+
+ @JsonProperty("uuid")
+ public void setUuid(String v) {
+ this.uuid = v;
+ }
+
+ @Override
+ public String toString() {
+ return ToStringBuilder.reflectionToString(this);
+ }
+
+ public String getResponse() throws JsonProcessingException, IOException {
+
+ Map<String, Object> map = new LinkedHashMap<>();
+ map.put("status", getStatus());
+ map.put("entity", getEntity());
+ map.put("uuid", getUuid());
+ ObjectMapper objectMapper = new ObjectMapper();
+ String jsonResponse = objectMapper.writeValueAsString(map);
+ return jsonResponse;
+
+ }
+}
diff --git a/ecomp-portal-BE-common/src/main/java/org/onap/portalapp/portal/scheduler/wrapper/SchedulerResponseWrapper.java b/ecomp-portal-BE-common/src/main/java/org/onap/portalapp/portal/scheduler/wrapper/SchedulerResponseWrapper.java
new file mode 100644
index 00000000..67ded99d
--- /dev/null
+++ b/ecomp-portal-BE-common/src/main/java/org/onap/portalapp/portal/scheduler/wrapper/SchedulerResponseWrapper.java
@@ -0,0 +1,107 @@
+/*-
+ * ============LICENSE_START==========================================
+ * ONAP Portal
+ * ===================================================================
+ * Copyright (C) 2017 AT&T Intellectual Property. All rights reserved.
+ * ===================================================================
+ *
+ * Unless otherwise specified, all software contained herein is licensed
+ * under the Apache License, Version 2.0 (the "License");
+ * you may not use this software 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.
+ *
+ * Unless otherwise specified, all documentation contained herein is licensed
+ * under the Creative Commons License, Attribution 4.0 Intl. (the "License");
+ * you may not use this documentation except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * https://creativecommons.org/licenses/by/4.0/
+ *
+ * Unless required by applicable law or agreed to in writing, documentation
+ * 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.
+ *
+ * ============LICENSE_END============================================
+ *
+ * ECOMP is a trademark and service mark of AT&T Intellectual Property.
+ */
+package org.onap.portalapp.portal.scheduler.wrapper;
+
+import java.io.IOException;
+import java.util.LinkedHashMap;
+import java.util.Map;
+
+import org.apache.commons.lang.builder.ToStringBuilder;
+
+import com.fasterxml.jackson.annotation.JsonInclude;
+import com.fasterxml.jackson.annotation.JsonProperty;
+import com.fasterxml.jackson.annotation.JsonPropertyOrder;
+import com.fasterxml.jackson.core.JsonProcessingException;
+import com.fasterxml.jackson.databind.ObjectMapper;
+
+/**
+ * This wrapper encapsulates the Scheduler response
+ */
+@JsonInclude(JsonInclude.Include.NON_NULL)
+@JsonPropertyOrder({ "status", "entity" })
+
+public class SchedulerResponseWrapper {
+
+ @JsonProperty("status")
+ private int status;
+
+ @JsonProperty("entity")
+ private String entity;
+
+ @JsonProperty("entity")
+ public String getEntity() {
+ return entity;
+ }
+
+ @JsonProperty("status")
+ public int getStatus() {
+ return status;
+ }
+
+ @JsonProperty("status")
+ public void setStatus(int v) {
+ this.status = v;
+ }
+
+ @JsonProperty("entity")
+ public void setEntity(String v) {
+ this.entity = v;
+ }
+
+ @Override
+ public String toString() {
+ return ToStringBuilder.reflectionToString(this);
+ }
+
+ public String getResponse() throws JsonProcessingException, IOException {
+ /*
+ * StringBuilder b = new StringBuilder ("{ \"status\": ");
+ *
+ * b.append(getStatus()).append(", \"entity\": "
+ * ).append(this.getEntity()).append("}"); return (b.toString());
+ */
+
+ Map<String, Object> map = new LinkedHashMap<>();
+ map.put("status", getStatus());
+ map.put("entity", getEntity());
+ ObjectMapper objectMapper = new ObjectMapper();
+ String jsonResponse = objectMapper.writeValueAsString(map);
+ return jsonResponse;
+
+ }
+}
diff --git a/ecomp-portal-BE-common/src/main/java/org/onap/portalapp/portal/scheduleraux/RestObject.java b/ecomp-portal-BE-common/src/main/java/org/onap/portalapp/portal/scheduleraux/RestObject.java
new file mode 100644
index 00000000..f9755a0f
--- /dev/null
+++ b/ecomp-portal-BE-common/src/main/java/org/onap/portalapp/portal/scheduleraux/RestObject.java
@@ -0,0 +1,86 @@
+/*-
+ * ============LICENSE_START==========================================
+ * ONAP Portal
+ * ===================================================================
+ * Copyright (C) 2017 AT&T Intellectual Property. All rights reserved.
+ * ===================================================================
+ *
+ * Unless otherwise specified, all software contained herein is licensed
+ * under the Apache License, Version 2.0 (the "License");
+ * you may not use this software 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.
+ *
+ * Unless otherwise specified, all documentation contained herein is licensed
+ * under the Creative Commons License, Attribution 4.0 Intl. (the "License");
+ * you may not use this documentation except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * https://creativecommons.org/licenses/by/4.0/
+ *
+ * Unless required by applicable law or agreed to in writing, documentation
+ * 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.
+ *
+ * ============LICENSE_END============================================
+ *
+ * ECOMP is a trademark and service mark of AT&T Intellectual Property.
+ */
+
+package org.onap.portalapp.portal.scheduleraux;
+
+/**
+ * The Class RestObject.
+ *
+ * @param <T> the generic type
+ */
+public class RestObject<T> {
+
+ /**
+ * Generic version of the RestObject class.
+ *
+ */
+ // T stands for "Type"
+ private T t;
+
+ /** The status code. */
+ private int statusCode= 0;
+
+ /**
+ * Sets the.
+ *
+ * @param t the t
+ */
+ public void set(T t) { this.t = t; }
+
+ /**
+ * Gets the.
+ *
+ * @return the t
+ */
+ public T get() { return t; }
+
+ /**
+ * Sets the status code.
+ *
+ * @param v the new status code
+ */
+ public void setStatusCode(int v) { this.statusCode = v; }
+
+ /**
+ * Gets the status code.
+ *
+ * @return the status code
+ */
+ public int getStatusCode() { return this.statusCode; }
+
+} \ No newline at end of file
diff --git a/ecomp-portal-BE-common/src/main/java/org/onap/portalapp/portal/scheduleraux/SchedulerAuxResponseWrapper.java b/ecomp-portal-BE-common/src/main/java/org/onap/portalapp/portal/scheduleraux/SchedulerAuxResponseWrapper.java
new file mode 100644
index 00000000..35becb6b
--- /dev/null
+++ b/ecomp-portal-BE-common/src/main/java/org/onap/portalapp/portal/scheduleraux/SchedulerAuxResponseWrapper.java
@@ -0,0 +1,93 @@
+/*-
+ * ============LICENSE_START==========================================
+ * ONAP Portal
+ * ===================================================================
+ * Copyright (C) 2017 AT&T Intellectual Property. All rights reserved.
+ * ===================================================================
+ *
+ * Unless otherwise specified, all software contained herein is licensed
+ * under the Apache License, Version 2.0 (the "License");
+ * you may not use this software 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.
+ *
+ * Unless otherwise specified, all documentation contained herein is licensed
+ * under the Creative Commons License, Attribution 4.0 Intl. (the "License");
+ * you may not use this documentation except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * https://creativecommons.org/licenses/by/4.0/
+ *
+ * Unless required by applicable law or agreed to in writing, documentation
+ * 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.
+ *
+ * ============LICENSE_END============================================
+ *
+ * ECOMP is a trademark and service mark of AT&T Intellectual Property.
+ */
+package org.onap.portalapp.portal.scheduleraux;
+
+import com.fasterxml.jackson.annotation.JsonInclude;
+import com.fasterxml.jackson.annotation.JsonProperty;
+import com.fasterxml.jackson.annotation.JsonPropertyOrder;
+import org.apache.commons.lang.builder.ToStringBuilder;
+
+/**
+ * This wrapper encapsulates the Policy response
+ */
+@JsonInclude(JsonInclude.Include.NON_NULL)
+@JsonPropertyOrder({
+ "status",
+ "entity"
+})
+
+public class SchedulerAuxResponseWrapper {
+
+ @JsonProperty("status")
+ private int status;
+
+ @JsonProperty("entity")
+ private String entity;
+
+ @JsonProperty("entity")
+ public String getEntity() {
+ return entity;
+ }
+
+ @JsonProperty("status")
+ public int getStatus() {
+ return status;
+ }
+
+ @JsonProperty("status")
+ public void setStatus(int v) {
+ this.status = v;
+ }
+
+ @JsonProperty("entity")
+ public void setEntity(String v) {
+ this.entity = v;
+ }
+
+ @Override
+ public String toString() {
+ return ToStringBuilder.reflectionToString(this);
+ }
+
+ public String getResponse () {
+
+ StringBuilder b = new StringBuilder ("{ \"status\": ");
+ b.append(getStatus()).append(", \"entity\": " ).append(this.getEntity()).append("}");
+ return (b.toString());
+ }
+} \ No newline at end of file
diff --git a/ecomp-portal-BE-common/src/main/java/org/onap/portalapp/portal/scheduleraux/SchedulerAuxRestInt.java b/ecomp-portal-BE-common/src/main/java/org/onap/portalapp/portal/scheduleraux/SchedulerAuxRestInt.java
new file mode 100644
index 00000000..18f4ce88
--- /dev/null
+++ b/ecomp-portal-BE-common/src/main/java/org/onap/portalapp/portal/scheduleraux/SchedulerAuxRestInt.java
@@ -0,0 +1,85 @@
+/*-
+ * ============LICENSE_START==========================================
+ * ONAP Portal
+ * ===================================================================
+ * Copyright (C) 2017 AT&T Intellectual Property. All rights reserved.
+ * ===================================================================
+ *
+ * Unless otherwise specified, all software contained herein is licensed
+ * under the Apache License, Version 2.0 (the "License");
+ * you may not use this software 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.
+ *
+ * Unless otherwise specified, all documentation contained herein is licensed
+ * under the Creative Commons License, Attribution 4.0 Intl. (the "License");
+ * you may not use this documentation except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * https://creativecommons.org/licenses/by/4.0/
+ *
+ * Unless required by applicable law or agreed to in writing, documentation
+ * 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.
+ *
+ * ============LICENSE_END============================================
+ *
+ * ECOMP is a trademark and service mark of AT&T Intellectual Property.
+ */
+
+package org.onap.portalapp.portal.scheduleraux;
+
+import java.text.DateFormat;
+import java.text.SimpleDateFormat;
+import java.util.Date;
+
+import org.onap.portalapp.portal.scheduler.policy.rest.RequestDetails;
+import org.onap.portalsdk.core.logging.logic.EELFLoggerDelegate;
+
+import com.fasterxml.jackson.databind.ObjectMapper;
+
+public class SchedulerAuxRestInt {
+
+ /** The logger. */
+ EELFLoggerDelegate logger = EELFLoggerDelegate.getLogger(SchedulerAuxRestInterface.class);
+
+ /** The Constant dateFormat. */
+ final static DateFormat dateFormat = new SimpleDateFormat("HH:mm:ss:SSSS");
+
+ /** The request date format. */
+ public DateFormat requestDateFormat = new SimpleDateFormat("EEE, dd MMM YYYY HH:mm:ss z");
+
+ public SchedulerAuxRestInt() {
+ requestDateFormat.setTimeZone(java.util.TimeZone.getTimeZone("GMT"));
+ }
+
+ /**
+ * Log request.
+ *
+ * @param r the r
+ */
+ public void logRequest ( RequestDetails r ) {
+ String methodName = "logRequest";
+ ObjectMapper mapper = new ObjectMapper();
+ String r_json_str = "";
+ if ( r != null ) {
+ r_json_str = r.toString();
+ try {
+ r_json_str = mapper.writeValueAsString(r);
+ }
+ catch ( com.fasterxml.jackson.core.JsonProcessingException j ) {
+ logger.debug(EELFLoggerDelegate.debugLogger,dateFormat.format(new Date()) + "<== " + methodName + " Unable to parse request as json");
+ }
+ }
+ logger.debug(EELFLoggerDelegate.debugLogger,dateFormat.format(new Date()) + "<== " + methodName + " Request=(" + r_json_str + ")");
+ }
+} \ No newline at end of file
diff --git a/ecomp-portal-BE-common/src/main/java/org/onap/portalapp/portal/scheduleraux/SchedulerAuxRestInterface.java b/ecomp-portal-BE-common/src/main/java/org/onap/portalapp/portal/scheduleraux/SchedulerAuxRestInterface.java
new file mode 100644
index 00000000..bf0fa515
--- /dev/null
+++ b/ecomp-portal-BE-common/src/main/java/org/onap/portalapp/portal/scheduleraux/SchedulerAuxRestInterface.java
@@ -0,0 +1,278 @@
+/*-
+ * ============LICENSE_START==========================================
+ * ONAP Portal
+ * ===================================================================
+ * Copyright (C) 2017 AT&T Intellectual Property. All rights reserved.
+ * ===================================================================
+ *
+ * Unless otherwise specified, all software contained herein is licensed
+ * under the Apache License, Version 2.0 (the "License");
+ * you may not use this software 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.
+ *
+ * Unless otherwise specified, all documentation contained herein is licensed
+ * under the Creative Commons License, Attribution 4.0 Intl. (the "License");
+ * you may not use this documentation except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * https://creativecommons.org/licenses/by/4.0/
+ *
+ * Unless required by applicable law or agreed to in writing, documentation
+ * 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.
+ *
+ * ============LICENSE_END============================================
+ *
+ * ECOMP is a trademark and service mark of AT&T Intellectual Property.
+ */
+package org.onap.portalapp.portal.scheduleraux;
+
+import java.text.DateFormat;
+import java.text.SimpleDateFormat;
+import java.util.Collections;
+import java.util.Date;
+
+import javax.ws.rs.client.Client;
+import javax.ws.rs.client.Entity;
+import javax.ws.rs.core.MediaType;
+import javax.ws.rs.core.MultivaluedHashMap;
+import javax.ws.rs.core.Response;
+
+import org.apache.commons.codec.binary.Base64;
+import org.eclipse.jetty.util.security.Password;
+import org.json.simple.JSONObject;
+import org.onap.portalapp.portal.logging.logic.EPLogUtil;
+import org.onap.portalapp.portal.scheduler.SchedulerProperties;
+import org.onap.portalapp.portal.scheduler.client.HttpBasicClient;
+import org.onap.portalapp.portal.scheduler.policy.rest.RequestDetails;
+import org.onap.portalsdk.core.logging.logic.EELFLoggerDelegate;
+import org.springframework.http.HttpStatus;
+import org.springframework.web.client.HttpClientErrorException;
+
+public class SchedulerAuxRestInterface extends SchedulerAuxRestInt implements SchedulerAuxRestInterfaceIfc {
+
+ /** The logger. */
+ EELFLoggerDelegate logger = EELFLoggerDelegate.getLogger(SchedulerAuxRestInterface.class);
+
+ /** The Constant dateFormat. */
+ final static DateFormat dateFormat = new SimpleDateFormat("HH:mm:ss:SSSS");
+
+ /** The client. */
+ private static Client client = null;
+
+ /** The common headers. */
+ private MultivaluedHashMap<String, Object> commonHeaders;
+
+ public SchedulerAuxRestInterface() {
+ super();
+ }
+
+ public void initRestClient() {
+ final String methodname = "initRestClient()";
+ final String mechId = SchedulerProperties.getProperty(SchedulerProperties.SCHEDULERAUX_CLIENT_MECHID_VAL);
+ final String clientPassword = SchedulerProperties
+ .getProperty(SchedulerProperties.SCHEDULERAUX_CLIENT_PASSWORD_VAL);
+ final String username = SchedulerProperties.getProperty(SchedulerProperties.SCHEDULERAUX_USERNAME_VAL);
+ final String password = SchedulerProperties.getProperty(SchedulerProperties.SCHEDULERAUX_PASSWORD_VAL);
+ final String environment = SchedulerProperties.getProperty(SchedulerProperties.SCHEDULERAUX_ENVIRONMENT_VAL);
+ final String clientAuth = SchedulerProperties.getProperty(SchedulerProperties.SCHEDULERAUX_CLIENTAUTH_VAL);
+ final String decrypted_client_password = Password.deobfuscate(clientPassword);
+ String mechAuthString = mechId + ":" + decrypted_client_password;
+ byte[] mechAuthEncBytes = Base64.encodeBase64(mechAuthString.getBytes());
+ final String decrypted_password = Password.deobfuscate(password);
+ String authString = username + ":" + decrypted_password;
+ byte[] authEncBytes = Base64.encodeBase64(authString.getBytes());
+ String authorization = new String(authEncBytes);
+
+ commonHeaders = new MultivaluedHashMap<String, Object>();
+ commonHeaders.put("ClientAuth", Collections.singletonList((Object) ("Basic " + clientAuth)));
+ commonHeaders.put("Authorization", Collections.singletonList((Object) ("Basic " + authorization)));
+ commonHeaders.put("Environment", Collections.singletonList((Object) (environment)));
+
+ if (client == null) {
+
+ try {
+ client = HttpBasicClient.getClient();
+ } catch (Exception e) {
+ logger.debug(EELFLoggerDelegate.debugLogger, " Unable to get the SSL client", methodname);
+
+ }
+ }
+ }
+
+ @SuppressWarnings("unchecked")
+ public <T> void Get(T t, String sourceId, String path, RestObject<T> restObject) throws Exception {
+ String methodName = "Get";
+
+ logger.debug(EELFLoggerDelegate.debugLogger, " start", methodName);
+
+ String url = "";
+ restObject.set(t);
+
+ url = SchedulerProperties.getProperty(SchedulerProperties.SCHEDULERAUX_SERVER_URL_VAL) + path;
+ logger.debug(EELFLoggerDelegate.debugLogger, " sending request to url: ", dateFormat.format(new Date()),
+ methodName, url);
+
+ initRestClient();
+
+ final Response cres = client.target(url).request().accept("application/json").headers(commonHeaders).get();
+
+ int status = cres.getStatus();
+ restObject.setStatusCode(status);
+
+ if (status == 200) {
+ t = (T) cres.readEntity(t.getClass());
+ restObject.set(t);
+ logger.debug(EELFLoggerDelegate.debugLogger, " REST api was successfull!", dateFormat.format(new Date()),
+ methodName);
+
+ } else {
+ throw new Exception(methodName + " with status=" + status + ", url= " + url);
+ }
+
+ logger.debug(EELFLoggerDelegate.debugLogger, " received status", methodName, status);
+
+ return;
+ }
+
+ @SuppressWarnings("unchecked")
+ public <T> void Delete(T t, RequestDetails r, String sourceID, String path, RestObject<T> restObject) {
+
+ String methodName = "Delete";
+ String url = "";
+ Response cres = null;
+
+ logRequest(r);
+
+ try {
+ initRestClient();
+
+ url = SchedulerProperties.getProperty(SchedulerProperties.SCHEDULERAUX_SERVER_URL_VAL) + path;
+ logger.debug(EELFLoggerDelegate.debugLogger, " methodName sending request to: ",
+ dateFormat.format(new Date()), url, methodName);
+
+ cres = client.target(url).request().accept("application/json").headers(commonHeaders)
+ // .entity(r)
+ .build("DELETE", Entity.entity(r, MediaType.APPLICATION_JSON)).invoke();
+ // .method("DELETE", Entity.entity(r, MediaType.APPLICATION_JSON));
+ // .delete(Entity.entity(r, MediaType.APPLICATION_JSON));
+
+ int status = cres.getStatus();
+ restObject.setStatusCode(status);
+
+ if (status == 404) { // resource not found
+ String msg = "Resource does not exist...: " + cres.getStatus();
+ logger.debug(EELFLoggerDelegate.debugLogger, "msg", dateFormat.format(new Date()), msg);
+ } else if (status == 200 || status == 204) {
+ logger.debug(EELFLoggerDelegate.debugLogger, "Resource--deleted:url", dateFormat.format(new Date()),
+ url);
+ } else if (status == 202) {
+ String msg = "Delete in progress: " + status;
+ logger.debug(EELFLoggerDelegate.debugLogger, "msg ", dateFormat.format(new Date()), msg);
+ } else {
+ String msg = "Deleting Resource failed: " + status;
+ logger.debug(EELFLoggerDelegate.debugLogger, "msg", dateFormat.format(new Date()), msg);
+ }
+
+ try {
+ t = (T) cres.readEntity(t.getClass());
+ restObject.set(t);
+ } catch (HttpClientErrorException e) {
+ logger.error(EELFLoggerDelegate.errorLogger,
+ " HttpClientErrorException:No response entity, this is probably ok, e=", methodName, e);
+ EPLogUtil.schedulerAccessAlarm(logger, e.getStatusCode().value());
+ } catch (Exception e) {
+ logger.error(EELFLoggerDelegate.errorLogger, "No response entity, this is probably ok, e=", methodName,
+ e);
+ EPLogUtil.schedulerAccessAlarm(logger, HttpStatus.INTERNAL_SERVER_ERROR.value());
+
+ }
+
+ } catch (HttpClientErrorException e) {
+ logger.error(EELFLoggerDelegate.errorLogger, " HttpClientErrorException:Exception with the URL", methodName,
+ url, e);
+ EPLogUtil.schedulerAccessAlarm(logger, e.getStatusCode().value());
+ } catch (Exception e) {
+ logger.error(EELFLoggerDelegate.errorLogger, "Exception with the URL ", dateFormat.format(new Date()),
+ methodName, url, e);
+ EPLogUtil.schedulerAccessAlarm(logger, HttpStatus.INTERNAL_SERVER_ERROR.value());
+
+ throw e;
+
+ }
+ }
+
+ @SuppressWarnings("unchecked")
+ public <T> void Post(T t, JSONObject requestDetails, String uuid, String path, RestObject<T> restObject)
+ throws HttpClientErrorException, Exception {
+
+ String methodName = "Post";
+ String url = "";
+ Response cres = null;
+ logger.debug(EELFLoggerDelegate.debugLogger, "POST policy rest interface");
+ // logRequest (requestDetails);
+ try {
+
+ initRestClient();
+
+ url = SchedulerProperties.getProperty(SchedulerProperties.SCHEDULERAUX_SERVER_URL_VAL) + path;
+ logger.debug(EELFLoggerDelegate.debugLogger, " sending request to url= ", methodName, url);
+ // Change the content length
+
+ cres = client.target(url).request().accept("application/json").headers(commonHeaders)
+ // .header("content-length", 201)
+ // .header("X-FromAppId", sourceID)
+ .post(Entity.entity(requestDetails, MediaType.APPLICATION_JSON));
+
+ t = (T) cres.readEntity(t.getClass());
+ if (t.equals("")) {
+ restObject.set(null);
+ } else {
+ restObject.set(t);
+ }
+
+ int status = cres.getStatus();
+
+ restObject.setStatusCode(status);
+
+ if (status >= 200 && status <= 299) {
+ logger.debug(EELFLoggerDelegate.debugLogger, " REST api POST was successful!", methodName);
+
+ } else {
+ logger.debug(EELFLoggerDelegate.debugLogger, "methodname with Status and URL", methodName, status, url);
+ }
+
+ } catch (HttpClientErrorException e) {
+ String message = String.format(
+ " HttpClientErrorException:Exception with the URL . MethodName: %s, Url: %s", methodName,url);
+ logger.error(EELFLoggerDelegate.errorLogger, message, e);
+ EPLogUtil.schedulerAccessAlarm(logger, e.getStatusCode().value());
+ } catch (Exception e) {
+ String message = String.format(
+ " Exception with the URL . MethodName: %s, Url: %s", methodName,url);
+ logger.error(EELFLoggerDelegate.errorLogger, message, e);
+ EPLogUtil.schedulerAccessAlarm(logger, HttpStatus.BAD_REQUEST.value());
+ throw e;
+
+ }
+ }
+
+ public <T> T getInstance(Class<T> clazz) throws IllegalAccessException, InstantiationException {
+ return clazz.newInstance();
+ }
+
+ @Override
+ public void logRequest(RequestDetails r) {
+ // TODO Auto-generated method stub
+ }
+} \ No newline at end of file
diff --git a/ecomp-portal-BE-common/src/main/java/org/onap/portalapp/portal/scheduleraux/SchedulerAuxRestInterfaceFactory.java b/ecomp-portal-BE-common/src/main/java/org/onap/portalapp/portal/scheduleraux/SchedulerAuxRestInterfaceFactory.java
new file mode 100644
index 00000000..55ab036c
--- /dev/null
+++ b/ecomp-portal-BE-common/src/main/java/org/onap/portalapp/portal/scheduleraux/SchedulerAuxRestInterfaceFactory.java
@@ -0,0 +1,50 @@
+/*-
+ * ============LICENSE_START==========================================
+ * ONAP Portal
+ * ===================================================================
+ * Copyright (C) 2017 AT&T Intellectual Property. All rights reserved.
+ * ===================================================================
+ *
+ * Unless otherwise specified, all software contained herein is licensed
+ * under the Apache License, Version 2.0 (the "License");
+ * you may not use this software 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.
+ *
+ * Unless otherwise specified, all documentation contained herein is licensed
+ * under the Creative Commons License, Attribution 4.0 Intl. (the "License");
+ * you may not use this documentation except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * https://creativecommons.org/licenses/by/4.0/
+ *
+ * Unless required by applicable law or agreed to in writing, documentation
+ * 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.
+ *
+ * ============LICENSE_END============================================
+ *
+ * ECOMP is a trademark and service mark of AT&T Intellectual Property.
+ */
+package org.onap.portalapp.portal.scheduleraux;
+
+public class SchedulerAuxRestInterfaceFactory {
+
+
+ public static SchedulerAuxRestInterfaceIfc getInstance () {
+ SchedulerAuxRestInterfaceIfc obj = null;
+
+ obj = new SchedulerAuxRestInterface();
+
+ return ( obj );
+ }
+} \ No newline at end of file
diff --git a/ecomp-portal-BE-common/src/main/java/org/onap/portalapp/portal/scheduleraux/SchedulerAuxRestInterfaceIfc.java b/ecomp-portal-BE-common/src/main/java/org/onap/portalapp/portal/scheduleraux/SchedulerAuxRestInterfaceIfc.java
new file mode 100644
index 00000000..4c0d64ef
--- /dev/null
+++ b/ecomp-portal-BE-common/src/main/java/org/onap/portalapp/portal/scheduleraux/SchedulerAuxRestInterfaceIfc.java
@@ -0,0 +1,94 @@
+/*-
+ * ============LICENSE_START==========================================
+ * ONAP Portal
+ * ===================================================================
+ * Copyright (C) 2017 AT&T Intellectual Property. All rights reserved.
+ * ===================================================================
+ *
+ * Unless otherwise specified, all software contained herein is licensed
+ * under the Apache License, Version 2.0 (the "License");
+ * you may not use this software 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.
+ *
+ * Unless otherwise specified, all documentation contained herein is licensed
+ * under the Creative Commons License, Attribution 4.0 Intl. (the "License");
+ * you may not use this documentation except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * https://creativecommons.org/licenses/by/4.0/
+ *
+ * Unless required by applicable law or agreed to in writing, documentation
+ * 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.
+ *
+ * ============LICENSE_END============================================
+ *
+ * ECOMP is a trademark and service mark of AT&T Intellectual Property.
+ */
+package org.onap.portalapp.portal.scheduleraux;
+
+import org.json.simple.JSONObject;
+import org.onap.portalapp.portal.scheduler.policy.rest.RequestDetails;
+
+public interface SchedulerAuxRestInterfaceIfc {
+ /**
+ * Inits the rest client.
+ */
+ public void initRestClient();
+
+ /**
+ * Gets the.
+ *
+ * @param <T> the generic type
+ * @param t the t
+ * @param sourceId the source id
+ * @param path the path
+ * @param restObject the rest object
+ * @throws Exception the exception
+ */
+ public <T> void Get (T t, String sourceId, String path, RestObject<T> restObject ) throws Exception;
+
+ /**
+ * Delete.
+ *
+ * @param <T> the generic type
+ * @param t the t
+ * @param r the r
+ * @param sourceID the source ID
+ * @param path the path
+ * @param restObject the rest object
+ * @throws Exception the exception
+ */
+ public <T> void Delete(T t, RequestDetails r, String sourceID, String path, RestObject<T> restObject) throws Exception;
+
+ /**
+ * Post.
+ *
+ * @param <T> the generic type
+ * @param t the t
+ * @param r the r
+ * @param sourceID the source ID
+ * @param path the path
+ * @param restObject the rest object
+ * @throws Exception the exception
+ */
+ public <T> void Post(T t, JSONObject r, String sourceID, String path, RestObject<T> restObject) throws Exception;
+
+ /***
+ * Log request.
+ *
+ * @param r the r
+ */
+ public void logRequest ( RequestDetails r );
+
+} \ No newline at end of file
diff --git a/ecomp-portal-BE-common/src/main/java/org/onap/portalapp/portal/scheduleraux/SchedulerAuxUtil.java b/ecomp-portal-BE-common/src/main/java/org/onap/portalapp/portal/scheduleraux/SchedulerAuxUtil.java
new file mode 100644
index 00000000..678073c8
--- /dev/null
+++ b/ecomp-portal-BE-common/src/main/java/org/onap/portalapp/portal/scheduleraux/SchedulerAuxUtil.java
@@ -0,0 +1,108 @@
+/*-
+ * ============LICENSE_START==========================================
+ * ONAP Portal
+ * ===================================================================
+ * Copyright (C) 2017 AT&T Intellectual Property. All rights reserved.
+ * ===================================================================
+ *
+ * Unless otherwise specified, all software contained herein is licensed
+ * under the Apache License, Version 2.0 (the "License");
+ * you may not use this software 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.
+ *
+ * Unless otherwise specified, all documentation contained herein is licensed
+ * under the Creative Commons License, Attribution 4.0 Intl. (the "License");
+ * you may not use this documentation except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * https://creativecommons.org/licenses/by/4.0/
+ *
+ * Unless required by applicable law or agreed to in writing, documentation
+ * 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.
+ *
+ * ============LICENSE_END============================================
+ *
+ * ECOMP is a trademark and service mark of AT&T Intellectual Property.
+ */
+package org.onap.portalapp.portal.scheduleraux;
+
+import java.text.DateFormat;
+import java.text.SimpleDateFormat;
+import java.util.Date;
+
+import org.glassfish.jersey.client.ClientResponse;
+import org.onap.portalsdk.core.logging.logic.EELFLoggerDelegate;
+/*import org.openecomp.vid.policy.PolicyResponseWrapper;
+import org.openecomp.vid.policy.PolicyUtil;
+import org.openecomp.vid.policy.RestObject;*/
+
+import com.fasterxml.jackson.databind.ObjectMapper;
+
+public class SchedulerAuxUtil {
+
+ private static EELFLoggerDelegate logger = EELFLoggerDelegate.getLogger(SchedulerAuxUtil.class);
+
+ final static DateFormat dateFormat = new SimpleDateFormat("HH:mm:ss:SSSS");
+
+ public static SchedulerAuxResponseWrapper wrapResponse ( String body, int statusCode ) {
+
+ SchedulerAuxResponseWrapper w = new SchedulerAuxResponseWrapper();
+ w.setStatus (statusCode);
+ w.setEntity(body);
+
+ return w;
+ }
+
+ public static SchedulerAuxResponseWrapper wrapResponse (ClientResponse cres) {
+ String resp_str = "";
+ if ( cres != null ) {
+ resp_str = cres.readEntity(String.class);
+ }
+ int statuscode = cres.getStatus();
+ SchedulerAuxResponseWrapper w = SchedulerAuxUtil.wrapResponse ( resp_str, statuscode );
+ return (w);
+ }
+
+ public static SchedulerAuxResponseWrapper wrapResponse (RestObject<String> rs) {
+ String resp_str = "";
+ int status = 0;
+ if ( rs != null ) {
+ resp_str = rs.get();
+ status = rs.getStatusCode();
+ }
+ SchedulerAuxResponseWrapper w = SchedulerAuxUtil.wrapResponse ( resp_str, status );
+ return (w);
+ }
+
+ public static <T> String convertPojoToString ( T t ) throws com.fasterxml.jackson.core.JsonProcessingException {
+
+ String methodName = "convertPojoToString";
+ ObjectMapper mapper = new ObjectMapper();
+ String r_json_str = "";
+ if ( t != null ) {
+ try {
+ r_json_str = mapper.writeValueAsString(t);
+ }
+ catch ( com.fasterxml.jackson.core.JsonProcessingException j ) {
+ logger.debug(EELFLoggerDelegate.debugLogger,dateFormat.format(new Date()) + "<== " + methodName + " Unable to parse object as json");
+ }
+ }
+ return (r_json_str);
+ }
+
+
+ public static void main(String[] args) {
+ // TODO Auto-generated method stub
+ }
+}
diff --git a/ecomp-portal-BE-common/src/main/java/org/onap/portalapp/portal/service/AdminRolesService.java b/ecomp-portal-BE-common/src/main/java/org/onap/portalapp/portal/service/AdminRolesService.java
new file mode 100644
index 00000000..49ab1a06
--- /dev/null
+++ b/ecomp-portal-BE-common/src/main/java/org/onap/portalapp/portal/service/AdminRolesService.java
@@ -0,0 +1,77 @@
+/*-
+ * ============LICENSE_START==========================================
+ * ONAP Portal
+ * ===================================================================
+ * Copyright (C) 2017 AT&T Intellectual Property. All rights reserved.
+ * ===================================================================
+ *
+ * Unless otherwise specified, all software contained herein is licensed
+ * under the Apache License, Version 2.0 (the "License");
+ * you may not use this software 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.
+ *
+ * Unless otherwise specified, all documentation contained herein is licensed
+ * under the Creative Commons License, Attribution 4.0 Intl. (the "License");
+ * you may not use this documentation except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * https://creativecommons.org/licenses/by/4.0/
+ *
+ * Unless required by applicable law or agreed to in writing, documentation
+ * 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.
+ *
+ * ============LICENSE_END============================================
+ *
+ * ECOMP is a trademark and service mark of AT&T Intellectual Property.
+ */
+package org.onap.portalapp.portal.service;
+
+import java.util.List;
+
+import org.onap.portalapp.portal.domain.EPApp;
+import org.onap.portalapp.portal.domain.EPRole;
+import org.onap.portalapp.portal.domain.EPUser;
+import org.onap.portalapp.portal.transport.AppsListWithAdminRole;
+
+public interface AdminRolesService {
+
+ public AppsListWithAdminRole getAppsWithAdminRoleStateForUser(String orgUserId);
+
+ public boolean setAppsWithAdminRoleStateForUser(AppsListWithAdminRole newAppsListWithAdminRoles);
+
+ /**
+ * Attention! User roles in ECOMP PORTAL cannot be managed by this function.
+ * @param user
+ * @return 'true' if user has Super Administrator role SYS_ADMIN_ROLE_ID (1 for now) in ECOMP PORTAL, 'false' otherwise
+ */
+ public boolean isSuperAdmin(EPUser user);
+
+ /**
+ * Attention! User roles in ECOMP PORTAL cannot be managed by this function.
+ * @param user
+ * @return 'true' if user has Account Administrator role ACCOUNT_ADMIN_ROLE_ID (999 for now) for any application except ECOMP Portal, 'false' otherwise
+ */
+ public boolean isAccountAdmin(EPUser user);
+
+ /**
+ * Attention! User roles in ECOMP PORTAL cannot be managed by this function.
+ * @param user
+ * @return 'true' if user has any remote(!) role within any application (ECOMP Portal roles are not included), 'false' otherwise
+ */
+ public boolean isUser(EPUser user);
+
+ List<EPRole> getRolesByApp(EPUser user, Long appId);
+
+ public boolean isAccountAdminOfApplication(EPUser user, EPApp app);
+}
diff --git a/ecomp-portal-BE-common/src/main/java/org/onap/portalapp/portal/service/AdminRolesServiceImpl.java b/ecomp-portal-BE-common/src/main/java/org/onap/portalapp/portal/service/AdminRolesServiceImpl.java
new file mode 100644
index 00000000..653e974b
--- /dev/null
+++ b/ecomp-portal-BE-common/src/main/java/org/onap/portalapp/portal/service/AdminRolesServiceImpl.java
@@ -0,0 +1,529 @@
+/*-
+ * ============LICENSE_START==========================================
+ * ONAP Portal
+ * ===================================================================
+ * Copyright (C) 2017 AT&T Intellectual Property. All rights reserved.
+ * ===================================================================
+ *
+ * Unless otherwise specified, all software contained herein is licensed
+ * under the Apache License, Version 2.0 (the "License");
+ * you may not use this software 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.
+ *
+ * Unless otherwise specified, all documentation contained herein is licensed
+ * under the Creative Commons License, Attribution 4.0 Intl. (the "License");
+ * you may not use this documentation except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * https://creativecommons.org/licenses/by/4.0/
+ *
+ * Unless required by applicable law or agreed to in writing, documentation
+ * 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.
+ *
+ * ============LICENSE_END============================================
+ *
+ * ECOMP is a trademark and service mark of AT&T Intellectual Property.
+ */
+package org.onap.portalapp.portal.service;
+
+import java.util.ArrayList;
+import java.util.HashMap;
+import java.util.List;
+import java.util.Map;
+import java.util.SortedSet;
+
+import javax.annotation.PostConstruct;
+
+import org.apache.cxf.common.util.StringUtils;
+import org.hibernate.Session;
+import org.hibernate.SessionFactory;
+import org.hibernate.Transaction;
+import org.json.JSONArray;
+import org.json.JSONObject;
+import org.onap.portalapp.portal.domain.EPApp;
+import org.onap.portalapp.portal.domain.EPRole;
+import org.onap.portalapp.portal.domain.EPUser;
+import org.onap.portalapp.portal.domain.EPUserApp;
+import org.onap.portalapp.portal.domain.UserIdRoleId;
+import org.onap.portalapp.portal.domain.UserRole;
+import org.onap.portalapp.portal.logging.aop.EPMetricsLog;
+import org.onap.portalapp.portal.logging.format.EPAppMessagesEnum;
+import org.onap.portalapp.portal.logging.logic.EPLogUtil;
+import org.onap.portalapp.portal.transport.AppNameIdIsAdmin;
+import org.onap.portalapp.portal.transport.AppsListWithAdminRole;
+import org.onap.portalapp.portal.transport.ExternalAccessUser;
+import org.onap.portalapp.portal.utils.EPCommonSystemProperties;
+import org.onap.portalapp.portal.utils.EcompPortalUtils;
+import org.onap.portalapp.portal.utils.PortalConstants;
+import org.onap.portalsdk.core.logging.logic.EELFLoggerDelegate;
+import org.onap.portalsdk.core.service.DataAccessService;
+import org.onap.portalsdk.core.util.SystemProperties;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.context.annotation.EnableAspectJAutoProxy;
+import org.springframework.http.HttpEntity;
+import org.springframework.http.HttpHeaders;
+import org.springframework.http.HttpMethod;
+import org.springframework.http.ResponseEntity;
+import org.springframework.stereotype.Service;
+import org.springframework.transaction.annotation.Transactional;
+import org.springframework.web.client.RestTemplate;
+
+import com.fasterxml.jackson.databind.ObjectMapper;
+
+@Service("adminRolesService")
+@Transactional
+@org.springframework.context.annotation.Configuration
+@EnableAspectJAutoProxy
+
+public class AdminRolesServiceImpl implements AdminRolesService {
+
+ private Long SYS_ADMIN_ROLE_ID = 1L;
+ private Long ACCOUNT_ADMIN_ROLE_ID = 999L;
+ private Long ECOMP_APP_ID = 1L;
+
+ private EELFLoggerDelegate logger = EELFLoggerDelegate.getLogger(AdminRolesServiceImpl.class);
+
+ @Autowired
+ private SessionFactory sessionFactory;
+ @Autowired
+ private DataAccessService dataAccessService;
+ @Autowired
+ private SearchService searchService;
+ @Autowired
+ private EPAppService appsService;
+
+ private RestTemplate template = new RestTemplate();
+
+ @PostConstruct
+ private void init() {
+ try {
+ SYS_ADMIN_ROLE_ID = Long.valueOf(SystemProperties.getProperty(EPCommonSystemProperties.SYS_ADMIN_ROLE_ID));
+ ACCOUNT_ADMIN_ROLE_ID = Long
+ .valueOf(SystemProperties.getProperty(EPCommonSystemProperties.ACCOUNT_ADMIN_ROLE_ID));
+ ECOMP_APP_ID = Long.valueOf(SystemProperties.getProperty(EPCommonSystemProperties.ECOMP_APP_ID));
+ } catch (Exception e) {
+ logger.error(EELFLoggerDelegate.errorLogger, "init failed", e);
+ }
+ }
+
+ @Override
+ @EPMetricsLog
+ @SuppressWarnings("unchecked")
+ public AppsListWithAdminRole getAppsWithAdminRoleStateForUser(String orgUserId) {
+ AppsListWithAdminRole appsListWithAdminRole = null;
+
+ try {
+ List<EPUser> userList = null;
+ Map<String, String> userParams = new HashMap<>();
+ userParams.put("org_user_id", orgUserId);
+ try {
+ userList = dataAccessService.executeNamedQuery("getEPUserByOrgUserId", userParams, null);
+ } catch (Exception e) {
+ logger.error(EELFLoggerDelegate.errorLogger, "getEPUserByOrgUserId failed", e);
+ }
+
+ HashMap<Long, Long> appsUserAdmin = new HashMap<Long, Long>();
+ if (userList!= null && userList.size() > 0) {
+ EPUser user = userList.get(0);
+ List<EPUserApp> userAppList = null;
+ try {
+ userAppList = dataAccessService.getList(EPUserApp.class,
+ " where userId = " + user.getId() + " and role.id = " + ACCOUNT_ADMIN_ROLE_ID, null, null);
+ } catch (Exception e) {
+ logger.error(EELFLoggerDelegate.errorLogger, "getAppsWithAdminRoleStateForUser 1 failed", e);
+ EPLogUtil.logEcompError(EPAppMessagesEnum.BeDaoSystemError);
+ }
+ for (EPUserApp userApp : userAppList) {
+ appsUserAdmin.put(userApp.getAppId(), userApp.getUserId());
+ }
+ }
+
+ appsListWithAdminRole = new AppsListWithAdminRole();
+ appsListWithAdminRole.orgUserId = orgUserId;
+ List<EPApp> appsList = null;
+ try {
+ appsList = dataAccessService.getList(EPApp.class,
+ " where ( enabled = 'Y' or id = " + ECOMP_APP_ID + ")", null, null);
+ } catch (Exception e) {
+ logger.error(EELFLoggerDelegate.errorLogger, "getAppsWithAdminRoleStateForUser 2 failed", e);
+ EPLogUtil.logEcompError(EPAppMessagesEnum.BeDaoSystemError);
+ }
+ for (EPApp app : appsList) {
+ AppNameIdIsAdmin appNameIdIsAdmin = new AppNameIdIsAdmin();
+ appNameIdIsAdmin.id = app.getId();
+ appNameIdIsAdmin.appName = app.getName();
+ appNameIdIsAdmin.isAdmin = new Boolean(appsUserAdmin.containsKey(app.getId()));
+ appNameIdIsAdmin.restrictedApp = app.isRestrictedApp();
+ appsListWithAdminRole.appsRoles.add(appNameIdIsAdmin);
+ }
+ } catch (Exception e) {
+ logger.error(EELFLoggerDelegate.errorLogger, "getAppsWithAdminRoleStateForUser 3 failed", e);
+ }
+
+ return appsListWithAdminRole;
+ }
+
+ private static final Object syncRests = new Object();
+
+ @Override
+ @EPMetricsLog
+ @SuppressWarnings("unchecked")
+ public boolean setAppsWithAdminRoleStateForUser(AppsListWithAdminRole newAppsListWithAdminRoles) {
+ boolean result = false;
+ // No changes if no new roles list or no userId.
+ if (!StringUtils.isEmpty(newAppsListWithAdminRoles.orgUserId) && newAppsListWithAdminRoles.appsRoles != null) {
+ synchronized (syncRests) {
+ List<EPApp> apps = appsService.getAppsFullList();
+ HashMap<Long, EPApp> enabledApps = new HashMap<Long, EPApp>();
+ for (EPApp app : apps) {
+ if (app.getEnabled().booleanValue() || app.getId() == ECOMP_APP_ID) {
+ enabledApps.put(app.getId(), app);
+ }
+ }
+ List<AppNameIdIsAdmin> newAppsWhereUserIsAdmin = new ArrayList<AppNameIdIsAdmin>();
+ for (AppNameIdIsAdmin adminRole : newAppsListWithAdminRoles.appsRoles) {
+ // user Admin role may be added only for enabled apps
+ if (adminRole.isAdmin.booleanValue() && enabledApps.containsKey(adminRole.id)) {
+ newAppsWhereUserIsAdmin.add(adminRole);
+ }
+ }
+ EPUser user = null;
+ boolean createNewUser = false;
+ String orgUserId = newAppsListWithAdminRoles.orgUserId.trim();
+ List<EPUser> localUserList = dataAccessService.getList(EPUser.class,
+ " where org_user_id='" + orgUserId + "'", null, null);
+ List<EPUserApp> oldAppsWhereUserIsAdmin = new ArrayList<EPUserApp>();
+ if (localUserList.size() > 0) {
+ EPUser tmpUser = localUserList.get(0);
+ oldAppsWhereUserIsAdmin = dataAccessService.getList(EPUserApp.class,
+ " where userId = " + tmpUser.getId() + " and role.id = " + ACCOUNT_ADMIN_ROLE_ID, null,
+ null);
+ if (oldAppsWhereUserIsAdmin.size() > 0 || newAppsWhereUserIsAdmin.size() > 0) {
+ user = tmpUser;
+ }
+ } else if (newAppsWhereUserIsAdmin.size() > 0) {
+ // we create new user only if he has Admin Role for any App
+ createNewUser = true;
+ }
+ if (user != null || createNewUser) {
+ Session localSession = null;
+ Transaction transaction = null;
+ try {
+ localSession = sessionFactory.openSession();
+ transaction = localSession.beginTransaction();
+ if (createNewUser) {
+ user = this.searchService.searchUserByUserId(orgUserId);
+ if (user != null) {
+ // insert the user with active true in order to
+ // pass login phase.
+ user.setActive(true);
+ localSession.save(EPUser.class.getName(), user);
+ }
+ }
+ for (EPUserApp oldUserApp : oldAppsWhereUserIsAdmin) {
+ // user Admin role may be deleted only for enabled
+ // apps
+ if (enabledApps.containsKey(oldUserApp.getAppId())) {
+ localSession.delete(oldUserApp);
+ }
+ }
+ for (AppNameIdIsAdmin appNameIdIsAdmin : newAppsWhereUserIsAdmin) {
+ EPApp app = (EPApp) localSession.get(EPApp.class, appNameIdIsAdmin.id);
+ EPRole role = (EPRole) localSession.get(EPRole.class, new Long(ACCOUNT_ADMIN_ROLE_ID));
+ EPUserApp newUserApp = new EPUserApp();
+ newUserApp.setUserId(user.getId());
+ newUserApp.setApp(app);
+ newUserApp.setRole(role);
+ localSession.save(EPUserApp.class.getName(), newUserApp);
+ }
+ transaction.commit();
+ if (EcompPortalUtils.checkIfRemoteCentralAccessAllowed()) {
+ // Add user admin role for list of centralized applications in external system
+ addAdminRoleInExternalSystem(user, localSession, newAppsWhereUserIsAdmin);
+ }
+ } catch (Exception e) {
+ EPLogUtil.logEcompError(logger, EPAppMessagesEnum.BeDaoSystemError, e);
+ logger.error(EELFLoggerDelegate.errorLogger,
+ "setAppsWithAdminRoleStateForUser: exception in point 2", e);
+ try {
+ if(transaction!=null)
+ transaction.rollback();
+ else
+ logger.error(EELFLoggerDelegate.errorLogger, "setAppsWithAdminRoleStateForUser: transaction is null cannot rollback");
+ } catch (Exception ex) {
+ EPLogUtil.logEcompError(logger, EPAppMessagesEnum.BeExecuteRollbackError, e);
+ logger.error(EELFLoggerDelegate.errorLogger,
+ "setAppsWithAdminRoleStateForUser: exception in point 3", ex);
+ }
+ } finally {
+ try {
+ localSession.close();
+ } catch (Exception e) {
+ EPLogUtil.logEcompError(logger, EPAppMessagesEnum.BeDaoCloseSessionError, e);
+ logger.error(EELFLoggerDelegate.errorLogger,
+ "setAppsWithAdminRoleStateForUser: exception in point 4", e);
+ }
+ }
+ }
+ }
+ }
+
+ return result;
+ }
+
+ @SuppressWarnings("unchecked")
+ private boolean addAdminRoleInExternalSystem(EPUser user, Session localSession,
+ List<AppNameIdIsAdmin> newAppsWhereUserIsAdmin) {
+ boolean result = false;
+ try {
+ // Reset All admin role for centralized applications
+ List<EPApp> appList = dataAccessService.executeNamedQuery("getCentralizedApps", null, null);
+ HttpHeaders headers = EcompPortalUtils.base64encodeKeyForAAFBasicAuth();
+ for (EPApp app : appList) {
+ String name = "";
+ if (EPCommonSystemProperties
+ .containsProperty(EPCommonSystemProperties.EXTERNAL_CENTRAL_ACCESS_USER_DOMAIN)) {
+ name = user.getOrgUserId() + SystemProperties
+ .getProperty(EPCommonSystemProperties.EXTERNAL_CENTRAL_ACCESS_USER_DOMAIN);
+ }
+ String extRole = app.getNameSpace() + "." + PortalConstants.ADMIN_ROLE.replaceAll(" ", "_");
+ HttpEntity<String> entity = new HttpEntity<>(headers);
+ logger.debug(EELFLoggerDelegate.debugLogger, "Connecting to External Access system");
+ try {
+ ResponseEntity<String> getResponse = template
+ .exchange(SystemProperties.getProperty(EPCommonSystemProperties.EXTERNAL_CENTRAL_ACCESS_URL)
+ + "roles/" + extRole, HttpMethod.GET, entity, String.class);
+
+ if (getResponse.getBody().equals("{}")) {
+ String addDesc = "{\"name\":\"" + extRole + "\"}";
+ HttpEntity<String> roleEntity = new HttpEntity<>(addDesc, headers);
+ template.exchange(
+ SystemProperties.getProperty(EPCommonSystemProperties.EXTERNAL_CENTRAL_ACCESS_URL)
+ + "role",
+ HttpMethod.POST, roleEntity, String.class);
+ } else {
+ try {
+ HttpEntity<String> deleteUserRole = new HttpEntity<>(headers);
+ template.exchange(
+ SystemProperties.getProperty(EPCommonSystemProperties.EXTERNAL_CENTRAL_ACCESS_URL)
+ + "userRole/" + name + "/" + extRole,
+ HttpMethod.DELETE, deleteUserRole, String.class);
+ } catch (Exception e) {
+ logger.error(EELFLoggerDelegate.errorLogger,
+ " Role not found for this user may be it gets deleted before", e);
+ }
+ }
+ } catch (Exception e) {
+ if (e.getMessage().equalsIgnoreCase("404 Not Found")) {
+ logger.debug(EELFLoggerDelegate.debugLogger, "Application Not found for app {}",
+ app.getNameSpace(), e.getMessage());
+ } else {
+ logger.error(EELFLoggerDelegate.errorLogger, "Application Not found for app {}",
+ app.getNameSpace(), e);
+ }
+ }
+ }
+ // Add admin role in external application
+ // application
+ for (AppNameIdIsAdmin appNameIdIsAdmin : newAppsWhereUserIsAdmin) {
+ EPApp app = (EPApp) localSession.get(EPApp.class, appNameIdIsAdmin.id);
+ try {
+ if (app.getCentralAuth()) {
+ String extRole = app.getNameSpace() + "." + PortalConstants.ADMIN_ROLE.replaceAll(" ", "_");
+ HttpEntity<String> entity = new HttpEntity<>(headers);
+ String name = "";
+ if (EPCommonSystemProperties
+ .containsProperty(EPCommonSystemProperties.EXTERNAL_CENTRAL_ACCESS_USER_DOMAIN)) {
+ name = user.getOrgUserId() + SystemProperties
+ .getProperty(EPCommonSystemProperties.EXTERNAL_CENTRAL_ACCESS_USER_DOMAIN);
+ }
+ logger.debug(EELFLoggerDelegate.debugLogger, "Connecting to External Access system");
+ ResponseEntity<String> getUserRolesResponse = template.exchange(
+ SystemProperties.getProperty(EPCommonSystemProperties.EXTERNAL_CENTRAL_ACCESS_URL)
+ + "userRoles/user/" + name,
+ HttpMethod.GET, entity, String.class);
+ logger.debug(EELFLoggerDelegate.debugLogger, "Connected to External Access system");
+ if (!getUserRolesResponse.getBody().equals("{}")) {
+ JSONObject jsonObj = new JSONObject(getUserRolesResponse.getBody());
+ JSONArray extRoles = jsonObj.getJSONArray("userRole");
+ final Map<String, JSONObject> extUserRoles = new HashMap<>();
+ for (int i = 0; i < extRoles.length(); i++) {
+ String userRole = extRoles.getJSONObject(i).getString("role");
+ if (userRole.startsWith(app.getNameSpace() + ".")
+ && !userRole.equals(app.getNameSpace() + ".admin")
+ && !userRole.equals(app.getNameSpace() + ".owner")) {
+
+ extUserRoles.put(userRole, extRoles.getJSONObject(i));
+ }
+ }
+ if (!extUserRoles.containsKey(extRole)) {
+ // Assign with new apps user admin
+ try {
+ ExternalAccessUser extUser = new ExternalAccessUser(name, extRole);
+ // Assign user role for an application in external access system
+ ObjectMapper addUserRoleMapper = new ObjectMapper();
+ String userRole = addUserRoleMapper.writeValueAsString(extUser);
+ HttpEntity<String> addUserRole = new HttpEntity<>(userRole, headers);
+ template.exchange(
+ SystemProperties.getProperty(
+ EPCommonSystemProperties.EXTERNAL_CENTRAL_ACCESS_URL) + "userRole",
+ HttpMethod.POST, addUserRole, String.class);
+ } catch (Exception e) {
+ logger.error(EELFLoggerDelegate.errorLogger, "Failed to add user admin role", e);
+ }
+
+ }
+ }
+ }
+ result = true;
+ } catch (Exception e) {
+ if (e.getMessage().equalsIgnoreCase("404 Not Found")) {
+ logger.debug(EELFLoggerDelegate.errorLogger,
+ "Application name space not found in External system for app {} due to bad rquest name space ",
+ app.getNameSpace(), e.getMessage());
+ } else {
+ logger.error(EELFLoggerDelegate.errorLogger, "Failed to assign admin role for application {}",
+ app.getNameSpace(), e);
+ result = false;
+ }
+ }
+ }
+ } catch (Exception e) {
+ result = false;
+ logger.error(EELFLoggerDelegate.errorLogger, "Failed to assign admin roles operation", e);
+ }
+ return result;
+ }
+
+ @SuppressWarnings("unchecked")
+ @Override
+ public boolean isSuperAdmin(EPUser user) {
+ if ((user != null) /* && (user.getId() == null) */ && (user.getOrgUserId() != null)) {
+ String sql = "SELECT user.USER_ID, user.org_user_id, userrole.ROLE_ID, userrole.APP_ID FROM fn_user_role userrole "
+ + "INNER JOIN fn_user user ON user.USER_ID = userrole.USER_ID " + "WHERE user.org_user_id = '"
+ + user.getOrgUserId() + "' " + "AND userrole.ROLE_ID = '" + SYS_ADMIN_ROLE_ID + "' "
+ + "AND userrole.APP_ID = '" + ECOMP_APP_ID + "';";
+ try {
+ List<UserRole> userRoleList = dataAccessService.executeSQLQuery(sql, UserIdRoleId.class, null);
+ if (userRoleList != null && userRoleList.size() > 0) {
+ return true;
+ }
+ } catch (Exception e) {
+ EPLogUtil.logEcompError(logger, EPAppMessagesEnum.BeDaoSystemError, e);
+ logger.error(EELFLoggerDelegate.errorLogger,
+ "Exception occurred while executing isSuperAdmin operation", e);
+ }
+ }
+ // else
+ // {
+ // User currentUser = user != null ? (User)
+ // dataAccessService.getDomainObject(User.class, user.getId(), null) :
+ // null;
+ // if (currentUser != null && currentUser.getId() != null) {
+ // for (UserApp userApp : currentUser.getUserApps()) {
+ // if (userApp.getApp().getId().equals(ECOMP_APP_ID) &&
+ // userApp.getRole().getId().equals(SYS_ADMIN_ROLE_ID)) {
+ // // Super Administrator role is global, no need to keep iterating
+ // return true;
+ // }
+ // }
+ // }
+ // }
+ return false;
+ }
+
+ public boolean isAccountAdmin(EPUser user) {
+ try {
+ EPUser currentUser = user != null
+ ? (EPUser) dataAccessService.getDomainObject(EPUser.class, user.getId(), null)
+ : null;
+ if (currentUser != null && currentUser.getId() != null) {
+ for (EPUserApp userApp : currentUser.getEPUserApps()) {
+ if (// !userApp.getApp().getId().equals(ECOMP_APP_ID)
+ // &&
+ userApp.getRole().getId().equals(ACCOUNT_ADMIN_ROLE_ID)) {
+ // Account Administrator sees only the applications
+ // he/she is Administrator
+ return true;
+ }
+ }
+ }
+ } catch (Exception e) {
+ EPLogUtil.logEcompError(logger, EPAppMessagesEnum.BeDaoSystemError, e);
+ logger.error(EELFLoggerDelegate.errorLogger, "Exception occurred while executing isAccountAdmin operation",
+ e);
+ }
+ return false;
+ }
+
+ public boolean isUser(EPUser user) {
+ try {
+ EPUser currentUser = user != null
+ ? (EPUser) dataAccessService.getDomainObject(EPUser.class, user.getId(), null)
+ : null;
+ if (currentUser != null && currentUser.getId() != null) {
+ for (EPUserApp userApp : currentUser.getEPUserApps()) {
+ if (!userApp.getApp().getId().equals(ECOMP_APP_ID)) {
+ EPRole role = userApp.getRole();
+ if (!role.getId().equals(SYS_ADMIN_ROLE_ID) && !role.getId().equals(ACCOUNT_ADMIN_ROLE_ID)) {
+ if (role.getActive()) {
+ return true;
+ }
+ }
+ }
+ }
+ }
+ } catch (Exception e) {
+ EPLogUtil.logEcompError(logger, EPAppMessagesEnum.BeDaoSystemError, e);
+ logger.error(EELFLoggerDelegate.errorLogger, "Exception occurred while executing isUser operation", e);
+ }
+ return false;
+ }
+
+ @Override
+ @EPMetricsLog
+ public List<EPRole> getRolesByApp(EPUser user, Long appId) {
+ List<EPRole> list = new ArrayList<>();
+ String sql = "SELECT * FROM FN_ROLE WHERE UPPER(ACTIVE_YN) = 'Y' AND APP_ID = " + appId;
+ @SuppressWarnings("unchecked")
+ List<EPRole> roles = dataAccessService.executeSQLQuery(sql, EPRole.class, null);
+ for (EPRole role : roles) {
+ list.add(role);
+ }
+ return list;
+ }
+
+ @Override
+ public boolean isAccountAdminOfApplication(EPUser user, EPApp app) {
+ try {
+ EPUser currentUser = user != null
+ ? (EPUser) dataAccessService.getDomainObject(EPUser.class, user.getId(), null) : null;
+ if (currentUser != null && currentUser.getId() != null) {
+ SortedSet<EPUserApp> userApps = currentUser.getEPUserApps();
+ EPUserApp userApp = userApps.stream()
+ .filter(x -> x.getRole().getId().equals(PortalConstants.ACCOUNT_ADMIN_ROLE_ID)
+ && x.getApp().getId().equals(app.getId()))
+ .findAny().orElse(null);
+ if (userApp != null) {
+ return true;
+ }
+ }
+ } catch (Exception e) {
+ EPLogUtil.logEcompError(logger, EPAppMessagesEnum.BeDaoSystemError, e);
+ logger.error(EELFLoggerDelegate.errorLogger,
+ "Exception occurred while executing isAccountAdminOfApplication operation", e);
+ }
+ return false;
+ }
+}
diff --git a/ecomp-portal-BE-common/src/main/java/org/onap/portalapp/portal/service/AppContactUsService.java b/ecomp-portal-BE-common/src/main/java/org/onap/portalapp/portal/service/AppContactUsService.java
new file mode 100644
index 00000000..874f7d04
--- /dev/null
+++ b/ecomp-portal-BE-common/src/main/java/org/onap/portalapp/portal/service/AppContactUsService.java
@@ -0,0 +1,73 @@
+/*-
+ * ============LICENSE_START==========================================
+ * ONAP Portal
+ * ===================================================================
+ * Copyright (C) 2017 AT&T Intellectual Property. All rights reserved.
+ * ===================================================================
+ *
+ * Unless otherwise specified, all software contained herein is licensed
+ * under the Apache License, Version 2.0 (the "License");
+ * you may not use this software 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.
+ *
+ * Unless otherwise specified, all documentation contained herein is licensed
+ * under the Creative Commons License, Attribution 4.0 Intl. (the "License");
+ * you may not use this documentation except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * https://creativecommons.org/licenses/by/4.0/
+ *
+ * Unless required by applicable law or agreed to in writing, documentation
+ * 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.
+ *
+ * ============LICENSE_END============================================
+ *
+ * ECOMP is a trademark and service mark of AT&T Intellectual Property.
+ */
+package org.onap.portalapp.portal.service;
+
+import java.util.List;
+
+import org.onap.portalapp.portal.ecomp.model.AppCategoryFunctionsItem;
+import org.onap.portalapp.portal.ecomp.model.AppContactUsItem;
+
+public interface AppContactUsService {
+
+ /**
+ * Gets a list of contact-us information for all entries in
+ * the fn_app_contact_us table, sorted by app name. If an application is active but has no fn_app_contact_us entry, it will have no entry in this result.
+ *
+ * @return List of AppContactUsItem, one for each item in fn_app_contact_us table.
+ * @throws Exception
+ */
+ public List<AppContactUsItem> getAppContactUs() throws Exception;
+
+ /**
+ * Gets a list of contact-us information for all applications
+ * in the fn_app table, extended with any information in the fn_app_contact_us table.
+ *
+ * @return List of AppContactUsItem, one for each item in fn_app table.
+ * @throws Exception
+ */
+ public List<AppContactUsItem> getAppsAndContacts() throws Exception;
+
+ public List<AppCategoryFunctionsItem> getAppCategoryFunctions() throws Exception;
+
+ public String saveAppContactUs(List<AppContactUsItem> contactUs) throws Exception;
+
+ public String saveAppContactUs(AppContactUsItem contactUs) throws Exception;
+
+ public String deleteContactUs(Long id) throws Exception;
+
+}
diff --git a/ecomp-portal-BE-common/src/main/java/org/onap/portalapp/portal/service/AppContactUsServiceImpl.java b/ecomp-portal-BE-common/src/main/java/org/onap/portalapp/portal/service/AppContactUsServiceImpl.java
new file mode 100644
index 00000000..edffafc3
--- /dev/null
+++ b/ecomp-portal-BE-common/src/main/java/org/onap/portalapp/portal/service/AppContactUsServiceImpl.java
@@ -0,0 +1,206 @@
+/*-
+ * ============LICENSE_START==========================================
+ * ONAP Portal
+ * ===================================================================
+ * Copyright (C) 2017 AT&T Intellectual Property. All rights reserved.
+ * ===================================================================
+ *
+ * Unless otherwise specified, all software contained herein is licensed
+ * under the Apache License, Version 2.0 (the "License");
+ * you may not use this software 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.
+ *
+ * Unless otherwise specified, all documentation contained herein is licensed
+ * under the Creative Commons License, Attribution 4.0 Intl. (the "License");
+ * you may not use this documentation except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * https://creativecommons.org/licenses/by/4.0/
+ *
+ * Unless required by applicable law or agreed to in writing, documentation
+ * 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.
+ *
+ * ============LICENSE_END============================================
+ *
+ * ECOMP is a trademark and service mark of AT&T Intellectual Property.
+ */
+package org.onap.portalapp.portal.service;
+
+import java.util.Collections;
+import java.util.Comparator;
+import java.util.HashMap;
+import java.util.List;
+
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.transaction.annotation.Transactional;
+import org.onap.portalapp.portal.domain.AppContactUs;
+import org.onap.portalapp.portal.domain.EPApp;
+import org.onap.portalapp.portal.ecomp.model.AppCategoryFunctionsItem;
+import org.onap.portalapp.portal.ecomp.model.AppContactUsItem;
+import org.onap.portalsdk.core.logging.logic.EELFLoggerDelegate;
+import org.onap.portalsdk.core.service.DataAccessService;
+
+/**
+ * Provides database access for the contact-us page controllers.
+ */
+@Transactional
+@org.springframework.context.annotation.Configuration
+public class AppContactUsServiceImpl implements AppContactUsService {
+
+ private static EELFLoggerDelegate logger = EELFLoggerDelegate.getLogger(AppContactUsServiceImpl.class);
+
+ @Autowired
+ private DataAccessService dataAccessService;
+
+ public DataAccessService getDataAccessService() {
+ return dataAccessService;
+ }
+
+ public void setDataAccessService(DataAccessService dataAccessService) {
+ this.dataAccessService = dataAccessService;
+ }
+
+ /*
+ * (non-Javadoc)
+ *
+ * @see org.openecomp.portalapp.portal.service.AppContactUsService#
+ * getAppContactUs()
+ */
+ @SuppressWarnings("unchecked")
+ @Override
+ public List<AppContactUsItem> getAppContactUs() throws Exception {
+ List<AppContactUsItem> contactUsItemList = (List<AppContactUsItem>) getDataAccessService()
+ .executeNamedQuery("getAppContactUsItems", null, null);
+ Collections.sort(contactUsItemList, new AppContactUsItemCompare());
+ return contactUsItemList;
+ }
+
+ /*
+ * (non-Javadoc)
+ *
+ * @see org.openecomp.portalapp.portal.service.AppContactUsService#
+ * getAllAppsAndContacts()
+ */
+ @SuppressWarnings("unchecked")
+ @Override
+ public List<AppContactUsItem> getAppsAndContacts() throws Exception {
+ List<AppContactUsItem> contactUsItemList = (List<AppContactUsItem>) getDataAccessService()
+ .executeNamedQuery("getAppsAndContacts", null, null);
+ Collections.sort(contactUsItemList, new AppContactUsItemCompare());
+ return contactUsItemList;
+ }
+
+ /**
+ * Assists in sorting app-contact-us items by application name.
+ */
+ class AppContactUsItemCompare implements Comparator<AppContactUsItem> {
+ @Override
+ public int compare(AppContactUsItem o1, AppContactUsItem o2) {
+ return o1.getAppName().compareTo(o2.getAppName());
+ }
+ }
+
+ /**
+ * Gets a table of category and function details for apps that participate
+ * in the functional menu.
+ */
+ @Override
+ public List<AppCategoryFunctionsItem> getAppCategoryFunctions() throws Exception {
+ @SuppressWarnings("unchecked")
+ // This named query requires no parameters.
+ List<AppCategoryFunctionsItem> list = (List<AppCategoryFunctionsItem>) dataAccessService
+ .executeNamedQuery("getAppCategoryFunctions", null, null);
+ logger.debug(EELFLoggerDelegate.debugLogger, "getAppCategoryFunctions: result list size is " + list.size());
+ return list;
+ }
+
+ /**
+ * Saves the list of contact-us objects to the database.
+ */
+ @Override
+ @Transactional(rollbackFor = Exception.class)
+ public String saveAppContactUs(List<AppContactUsItem> contactUsModelList) throws Exception {
+ try {
+ for (AppContactUsItem contactUs : contactUsModelList) {
+ String status = saveAppContactUs(contactUs);
+ if (!status.equals("success"))
+ throw new Exception("saveAppContaatUsFailed: service returned " + status);
+ }
+ return "success";
+
+ } catch (Exception e) {
+ logger.error(EELFLoggerDelegate.errorLogger, "", e);
+ throw new Exception(e);
+ }
+
+ }
+
+ /**
+ * Saves a single contact-us object to the database, either creating a new
+ * row or updating if the argument has the ID of an existing row.
+ */
+ @Override
+ @Transactional(rollbackFor = Exception.class)
+ public String saveAppContactUs(AppContactUsItem contactUsModel) throws Exception {
+ try {
+ HashMap<String, Object> map = new HashMap<String, Object>();
+ AppContactUs contactUs = null;
+ try {
+ contactUs = (AppContactUs) getDataAccessService().getDomainObject(AppContactUs.class,
+ contactUsModel.getAppId(), map);
+ } catch (Exception e) {
+ logger.debug(EELFLoggerDelegate.debugLogger, "saveAppContactUs: not found for App {}, adding new entry",
+ contactUsModel.getAppName());
+ contactUs = new AppContactUs();
+ }
+
+ // Populate the AppContactUs model for the database.
+ EPApp app = (EPApp) getDataAccessService().getDomainObject(EPApp.class, contactUsModel.getAppId(), map);
+ if (app == null || app.getId() == null)
+ throw new Exception("saveAppContactus: App not found for Id " + contactUsModel.getAppId());
+ contactUs.setApp(app);
+ contactUs.setDescription(contactUsModel.getDescription());
+ contactUs.setContactName(contactUsModel.getContactName());
+ contactUs.setContactEmail(contactUsModel.getContactEmail());
+ contactUs.setActiveYN(contactUsModel.getActiveYN());
+ contactUs.setUrl(contactUsModel.getUrl());
+ getDataAccessService().saveDomainObject(contactUs, map);
+ return "success";
+ } catch (Exception e) {
+ logger.error(EELFLoggerDelegate.errorLogger, "saveAppContactUs failed", e);
+ throw e;
+ // return "failure";
+ }
+ }
+
+ /**
+ * Deletes the row from the app contact us table with the specified ID.
+ */
+ @Override
+ public String deleteContactUs(Long id) throws Exception {
+ try {
+ HashMap<String, Object> map = new HashMap<String, Object>();
+ AppContactUs contactUs = (AppContactUs) getDataAccessService().getDomainObject(AppContactUs.class, id, map);
+ if (contactUs.getApp() == null)
+ throw new Exception("Delete unsuccessful for Id " + id);
+ getDataAccessService().deleteDomainObject(contactUs, map);
+ return "success";
+ } catch (Exception e) {
+
+ logger.info(EELFLoggerDelegate.errorLogger, "", e);
+ throw e;
+ }
+ }
+
+}
diff --git a/ecomp-portal-BE-common/src/main/java/org/onap/portalapp/portal/service/ApplicationsRestClientService.java b/ecomp-portal-BE-common/src/main/java/org/onap/portalapp/portal/service/ApplicationsRestClientService.java
new file mode 100644
index 00000000..b3f376a7
--- /dev/null
+++ b/ecomp-portal-BE-common/src/main/java/org/onap/portalapp/portal/service/ApplicationsRestClientService.java
@@ -0,0 +1,71 @@
+/*-
+ * ============LICENSE_START==========================================
+ * ONAP Portal
+ * ===================================================================
+ * Copyright (C) 2017 AT&T Intellectual Property. All rights reserved.
+ * ===================================================================
+ *
+ * Unless otherwise specified, all software contained herein is licensed
+ * under the Apache License, Version 2.0 (the "License");
+ * you may not use this software 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.
+ *
+ * Unless otherwise specified, all documentation contained herein is licensed
+ * under the Creative Commons License, Attribution 4.0 Intl. (the "License");
+ * you may not use this documentation except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * https://creativecommons.org/licenses/by/4.0/
+ *
+ * Unless required by applicable law or agreed to in writing, documentation
+ * 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.
+ *
+ * ============LICENSE_END============================================
+ *
+ * ECOMP is a trademark and service mark of AT&T Intellectual Property.
+ */
+package org.onap.portalapp.portal.service;
+
+import org.apache.cxf.transport.http.HTTPException;
+import org.onap.portalapp.util.SystemType;
+
+public interface ApplicationsRestClientService {
+ public <T> T get(Class<T> clazz, long app, String restPath) throws HTTPException;
+ public String getIncomingJsonString(long appId, String restPath) throws HTTPException;
+
+ public <T> T post(Class<T> clazz, long appId, Object payload, String restPath) throws HTTPException;
+ public <T> T post(Class<T> clazz, long appId, Object payload, String restPath, SystemType type) throws HTTPException;
+
+ public <T> T put(Class<T> clazz, long appId, Object payload, String restPath) throws HTTPException;
+
+ /**
+ * Sends a GET request to the specified application at the specified path.
+ * This is a workaround for a problem triggered by a superclass/subclass
+ * with identical field names.
+ *
+ * @param clazz
+ * Expected response type
+ * @param appId
+ * Application ID
+ * @param restPath
+ * Path at the remote application
+ * @param useJacksonMapper
+ * If true, uses a com.fasterxml.jackson.databind.ObjectMapper to
+ * translate the remote application response from JSON to an
+ * object. Otherwise, uses a com.google.gson.Gson.
+ * @return Instance of the specified class
+ * @throws HTTPException
+ */
+ public <T> T get(Class<T> clazz, long appId, String restPath, boolean useJacksonMapper) throws HTTPException;
+}
diff --git a/ecomp-portal-BE-common/src/main/java/org/onap/portalapp/portal/service/ApplicationsRestClientServiceImpl.java b/ecomp-portal-BE-common/src/main/java/org/onap/portalapp/portal/service/ApplicationsRestClientServiceImpl.java
new file mode 100644
index 00000000..18717204
--- /dev/null
+++ b/ecomp-portal-BE-common/src/main/java/org/onap/portalapp/portal/service/ApplicationsRestClientServiceImpl.java
@@ -0,0 +1,428 @@
+/*-
+ * ============LICENSE_START==========================================
+ * ONAP Portal
+ * ===================================================================
+ * Copyright (C) 2017 AT&T Intellectual Property. All rights reserved.
+ * ===================================================================
+ *
+ * Unless otherwise specified, all software contained herein is licensed
+ * under the Apache License, Version 2.0 (the "License");
+ * you may not use this software 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.
+ *
+ * Unless otherwise specified, all documentation contained herein is licensed
+ * under the Creative Commons License, Attribution 4.0 Intl. (the "License");
+ * you may not use this documentation except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * https://creativecommons.org/licenses/by/4.0/
+ *
+ * Unless required by applicable law or agreed to in writing, documentation
+ * 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.
+ *
+ * ============LICENSE_END============================================
+ *
+ * ECOMP is a trademark and service mark of AT&T Intellectual Property.
+ */
+package org.onap.portalapp.portal.service;
+
+import static com.att.eelf.configuration.Configuration.MDC_KEY_REQUEST_ID;
+
+import java.lang.reflect.Type;
+import java.net.MalformedURLException;
+import java.net.URL;
+import java.util.Base64;
+import java.util.Date;
+
+import javax.annotation.PostConstruct;
+import javax.servlet.http.HttpServletResponse;
+import javax.ws.rs.core.MediaType;
+import javax.ws.rs.core.Response;
+
+import org.apache.commons.lang.StringUtils;
+import org.apache.cxf.jaxrs.client.WebClient;
+import org.apache.cxf.transport.http.HTTPException;
+import org.onap.portalapp.portal.service.AppsCacheService;
+import org.onap.portalapp.portal.domain.EPApp;
+import org.onap.portalapp.portal.logging.aop.EPAuditLog;
+import org.onap.portalapp.portal.logging.aop.EPMetricsLog;
+import org.onap.portalapp.portal.logging.format.EPAppMessagesEnum;
+import org.onap.portalapp.portal.logging.logic.EPLogUtil;
+import org.onap.portalapp.portal.utils.EPCommonSystemProperties;
+import org.onap.portalapp.portal.utils.EcompPortalUtils;
+import org.onap.portalapp.util.SystemType;
+import org.onap.portalsdk.core.logging.logic.EELFLoggerDelegate;
+import org.onap.portalsdk.core.onboarding.util.CipherUtil;
+import org.onap.portalsdk.core.util.SystemProperties;
+import org.slf4j.MDC;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.context.annotation.EnableAspectJAutoProxy;
+import org.springframework.stereotype.Service;
+
+import com.fasterxml.jackson.databind.ObjectMapper;
+import com.google.gson.Gson;
+import com.google.gson.GsonBuilder;
+import com.google.gson.JsonDeserializationContext;
+import com.google.gson.JsonDeserializer;
+import com.google.gson.JsonElement;
+import com.google.gson.JsonParseException;
+
+@Service("applicationsRestClientService")
+@org.springframework.context.annotation.Configuration
+@EnableAspectJAutoProxy
+@EPAuditLog
+public class ApplicationsRestClientServiceImpl implements ApplicationsRestClientService {
+
+ private static final String PASSWORD_HEADER = "password";
+
+ private static final String APP_USERNAME_HEADER = "username";
+
+ private static final String BASIC_AUTHENTICATION_HEADER = "Authorization";
+
+ private static EELFLoggerDelegate logger = EELFLoggerDelegate.getLogger(ApplicationsRestClientServiceImpl.class);
+
+ @Autowired
+ private AppsCacheService appsCacheService;
+
+ Gson gson = null;
+
+ private final ObjectMapper mapper = new ObjectMapper();
+
+ @PostConstruct
+ private void init() {
+ logger.debug(EELFLoggerDelegate.debugLogger, "initializing");
+ GsonBuilder builder = new GsonBuilder();
+
+ // Register an adapter to manage the date types as long values
+ builder.registerTypeAdapter(Date.class, new JsonDeserializer<Date>() {
+ public Date deserialize(JsonElement json, Type typeOfT, JsonDeserializationContext context)
+ throws JsonParseException {
+ return new Date(json.getAsJsonPrimitive().getAsLong());
+ }
+ });
+
+ gson = builder.create();
+ }
+
+ // TODO: do we need to do additional logging for remote API calls?
+ private static WebClient createClientForPath(String baseUri, String path) {
+ logger.info(EELFLoggerDelegate.debugLogger, "Creating web client for " + baseUri + " + " + path);
+ WebClient client = WebClient.create(baseUri);
+ client.type(MediaType.APPLICATION_JSON).accept(MediaType.APPLICATION_JSON);
+ client.path(path);
+ return client;
+ }
+
+ @EPMetricsLog
+ private void verifyResponse(Response response) throws HTTPException {
+ int status = response.getStatus();
+ logger.debug(EELFLoggerDelegate.debugLogger, "http response status=" + status);
+ MDC.put(EPCommonSystemProperties.EXTERNAL_API_RESPONSE_CODE, Integer.toString(status));
+ if (!isHttpSuccess(status)) {
+ String errMsg = "Failed. Status=" + status + "; [" + response.getStatusInfo().getReasonPhrase().toString()
+ + "]";
+ URL url = null;
+ try {
+ // must not be null to avoid NPE in HTTPException constructor
+ url = new URL("http://null");
+ if (response.getLocation() != null)
+ url = response.getLocation().toURL();
+ } catch (MalformedURLException e) {
+ // never mind. it is only for the debug message.
+ logger.warn(EELFLoggerDelegate.errorLogger, "Failed to build URL", e);
+ }
+ logger.error(EELFLoggerDelegate.errorLogger, "http response failed. " + errMsg + "; url=" + url);
+ EPLogUtil.logEcompError(logger, EPAppMessagesEnum.BeIncorrectHttpStatusError);
+ throw new HTTPException(status, errMsg, url);
+ }
+ }
+
+ private static boolean isHttpSuccess(int status) {
+ return status / 100 == 2;
+ }
+
+
+ private WebClient createClientForApp(long appId, String restPath) {
+ return createClientFor(appId, restPath, SystemType.APPLICATION);
+ }
+
+ //TODO Need to implement the mylogins once the endpoint is confirmed
+ @EPMetricsLog
+ private WebClient createClientFor(long appSystemId, String restPath, SystemType type) {
+ logger.debug(EELFLoggerDelegate.debugLogger, "creating client for appId=" + appSystemId + "; restPath=" + restPath);
+ EPApp externalApp = null;
+
+ if(type == SystemType.APPLICATION){
+ externalApp = appsCacheService.getApp(appSystemId);
+ }else{
+ // TO DO
+ }
+
+ if (externalApp != null) {
+ String appBaseUri = (type == SystemType.APPLICATION) ? externalApp.getAppRestEndpoint() : "";
+ String username = (type == SystemType.APPLICATION) ? externalApp.getUsername(): "";
+ String encriptedPwd = (type == SystemType.APPLICATION) ? externalApp.getAppPassword(): "";
+ String appName = (type == SystemType.APPLICATION) ? externalApp.getName(): "";
+ String decreptedAppPwd = StringUtils.EMPTY;
+
+ // Set local context
+ MDC.put(EPCommonSystemProperties.PROTOCOL, EPCommonSystemProperties.HTTP);
+ if (appBaseUri != null && appBaseUri.contains("https")) {
+ MDC.put(EPCommonSystemProperties.PROTOCOL, EPCommonSystemProperties.HTTPS);
+ }
+ MDC.put(EPCommonSystemProperties.FULL_URL, appBaseUri + restPath);
+ MDC.put(EPCommonSystemProperties.TARGET_ENTITY, appName);
+ MDC.put(EPCommonSystemProperties.TARGET_SERVICE_NAME, restPath);
+
+ try {
+ decreptedAppPwd = CipherUtil.decryptPKC(encriptedPwd,
+ SystemProperties.getProperty(SystemProperties.Decryption_Key));
+ } catch (Exception e) {
+ logger.error(EELFLoggerDelegate.errorLogger, "createClientFor failed to decrypt", e);
+ }
+
+ WebClient client = createClientForPath(appBaseUri, restPath);
+
+ // support basic authentication for some partners
+ String encoding = Base64.getEncoder().encodeToString((username + ":" + decreptedAppPwd).getBytes());
+ String encodingStr = "Basic " + encoding;
+ client.header(BASIC_AUTHENTICATION_HEADER, encodingStr);
+
+ // But still keep code downward compatible for non compliant apps
+ client.header(APP_USERNAME_HEADER, username);
+ client.header(PASSWORD_HEADER, decreptedAppPwd);
+
+ client.header(SystemProperties.ECOMP_REQUEST_ID, MDC.get(MDC_KEY_REQUEST_ID));
+ client.header(SystemProperties.USERAGENT_NAME, EPCommonSystemProperties.ECOMP_PORTAL_BE);
+
+ logger.debug(EELFLoggerDelegate.debugLogger,
+ String.format("App %d found, baseUri=[%s], Headers: [%s=%s, %s=%s, %s=%s]", appSystemId, appBaseUri,
+ APP_USERNAME_HEADER, username, PASSWORD_HEADER, encriptedPwd, BASIC_AUTHENTICATION_HEADER, encodingStr));
+
+ return client;
+ }
+ return null;
+ }
+
+ @Override
+ public <T> T get(Class<T> clazz, long appId, String restPath) throws HTTPException {
+ T t = null;
+ Response response = getResponse(appId, restPath);
+
+ if (response != null) {
+ verifyResponse(response);
+ String str = response.readEntity(String.class);
+ EcompPortalUtils.logAndSerializeObject(logger, restPath, "GET result =", str);
+ try {
+ t = gson.fromJson(str, clazz);
+ } catch (Exception e) {
+ EPLogUtil.logEcompError(logger, EPAppMessagesEnum.BeInvalidJsonInput, e);
+ }
+ }
+
+ return t;
+ }
+
+ @Override
+ public String getIncomingJsonString(long appId, String restPath) throws HTTPException {
+ Response response = getResponse(appId, restPath);
+
+ if (response != null) {
+ verifyResponse(response);
+ String incomingJson = response.readEntity(String.class);
+ return incomingJson;
+ }
+
+ return "";
+ }
+
+
+ /*
+ * (non-Javadoc)
+ *
+ * @see
+ * org.openecomp.portalapp.portal.service.ApplicationsRestClientService#get(
+ * java.lang.Class, long, java.lang.String, boolean)
+ */
+ @Override
+ public <T> T get(Class<T> clazz, long appId, String restPath, boolean useJacksonMapper) throws HTTPException {
+
+ if (!useJacksonMapper)
+ return get(clazz, appId, restPath);
+
+ T t = null;
+ Response response = getResponse(appId, restPath);
+
+ if (response != null) {
+ verifyResponse(response);
+ String str = response.readEntity(String.class);
+ EcompPortalUtils.logAndSerializeObject(logger, restPath, "GET result =", str);
+
+ try {
+ t = mapper.readValue(str, clazz);
+ } catch (Exception e) {
+ e.printStackTrace();
+ EPLogUtil.logEcompError(logger, EPAppMessagesEnum.BeInvalidJsonInput, e);
+ }
+ }
+
+ return t;
+ }
+
+ protected Response getResponse(long appId, String restPath) {
+ WebClient webClient = null;
+ Response response = null;
+
+ webClient = createClientForApp(appId, restPath);
+ EcompPortalUtils.logAndSerializeObject(logger, restPath, "GET request =", "no-payload");
+
+ try {
+ if (webClient != null) {
+ response = webClient.get();
+ } else {
+ logger.error(EELFLoggerDelegate.errorLogger,
+ "Unable to create the Webclient to make the '" + restPath + "' API call.");
+ }
+ } catch (Exception e) {
+ MDC.put(EPCommonSystemProperties.EXTERNAL_API_RESPONSE_CODE,
+ Integer.toString(HttpServletResponse.SC_INTERNAL_SERVER_ERROR));
+ EPLogUtil.logEcompError(logger, EPAppMessagesEnum.BeRestApiGeneralError, e);
+ logger.error(EELFLoggerDelegate.errorLogger, "Exception occurred while making the GET REST API call", e);
+ }
+ return response;
+ }
+
+
+ @Override
+ public <T> T post(Class<T> clazz, long appId, Object payload, String restPath, SystemType type) throws HTTPException {
+ WebClient client = null;
+ Response response = null;
+ T t = null;
+
+ client = createClientFor(appId, restPath, type);
+ EcompPortalUtils.logAndSerializeObject(logger, restPath, "POST request =", payload);
+
+ try {
+ if (client != null) {
+ response = client.post(payload);
+ } else {
+ logger.error(EELFLoggerDelegate.errorLogger,
+ "Unable to create the Webclient to make the '" + restPath + "' API call.");
+ }
+ } catch (Exception e) {
+ MDC.put(EPCommonSystemProperties.EXTERNAL_API_RESPONSE_CODE,
+ Integer.toString(HttpServletResponse.SC_INTERNAL_SERVER_ERROR));
+ EPLogUtil.logEcompError(logger, EPAppMessagesEnum.BeRestApiGeneralError, e);
+ logger.error(EELFLoggerDelegate.errorLogger, "Exception occurred while making the POST REST API call", e);
+ }
+
+ if (response != null) {
+ verifyResponse(response);
+
+ // String contentType = response.getHeaderString("Content-Type");
+ if (clazz != null) {
+ String str = response.readEntity(String.class);
+ EcompPortalUtils.logAndSerializeObject(logger, restPath, "POST result =", str);
+ try {
+ t = gson.fromJson(str, clazz);
+ } catch (Exception e) {
+ EPLogUtil.logEcompError(logger, EPAppMessagesEnum.BeInvalidJsonInput, e);
+ }
+ }
+ }
+ return t;
+ }
+
+ @Override
+ public <T> T post(Class<T> clazz, long appId, Object payload, String restPath) throws HTTPException {
+ return post( clazz, appId, payload, restPath, SystemType.APPLICATION);
+ }
+
+ //@Override
+ public <T> T postForClass(Class<T> clazz, long appId, Object payload, String restPath, Class<T> forClass) throws HTTPException {
+ WebClient client = null;
+ Response response = null;
+ T t = null;
+
+ client = createClientForApp(appId, restPath);
+ EcompPortalUtils.logAndSerializeObject(logger, restPath, "POST request =", payload);
+
+ try {
+ if (client != null) {
+ response = client.post(payload);
+ } else {
+ logger.error(EELFLoggerDelegate.errorLogger,
+ "Unable to create the Webclient to make the '" + restPath + "' API call.");
+ }
+ } catch (Exception e) {
+ MDC.put(EPCommonSystemProperties.EXTERNAL_API_RESPONSE_CODE,
+ Integer.toString(HttpServletResponse.SC_INTERNAL_SERVER_ERROR));
+ EPLogUtil.logEcompError(logger, EPAppMessagesEnum.BeRestApiGeneralError, e);
+ logger.error(EELFLoggerDelegate.errorLogger, "Exception occurred while making the POST REST API call", e);
+ }
+
+ if (response != null) {
+ verifyResponse(response);
+
+ // String contentType = response.getHeaderString("Content-Type");
+ if (clazz != null) {
+ String str = response.readEntity(String.class);
+ EcompPortalUtils.logAndSerializeObject(logger, restPath, "POST result =", str);
+ try {
+ t = gson.fromJson(str, clazz);
+ } catch (Exception e) {
+ EPLogUtil.logEcompError(logger, EPAppMessagesEnum.BeInvalidJsonInput, e);
+ }
+ }
+ }
+ return t;
+ }
+
+
+ @Override
+ public <T> T put(Class<T> clazz, long appId, Object payload, String restPath) throws HTTPException {
+ WebClient client = null;
+ Response response = null;
+ T t = null;
+
+ client = createClientForApp(appId, restPath);
+ EcompPortalUtils.logAndSerializeObject(logger, restPath, "PUT request =", payload);
+
+ try {
+ if (client != null) {
+ response = client.put(payload);
+ } else {
+ logger.error(EELFLoggerDelegate.errorLogger,
+ "Unable to create the Webclient to make the '" + restPath + "' API call.");
+ }
+ } catch (Exception e) {
+ MDC.put(EPCommonSystemProperties.EXTERNAL_API_RESPONSE_CODE,
+ Integer.toString(HttpServletResponse.SC_INTERNAL_SERVER_ERROR));
+ EPLogUtil.logEcompError(logger, EPAppMessagesEnum.BeRestApiGeneralError, e);
+ logger.error(EELFLoggerDelegate.errorLogger, "Exception occurred while making the PUT REST API call", e);
+ }
+
+ if (response != null) {
+ verifyResponse(response);
+ String str = response.readEntity(String.class);
+ EcompPortalUtils.logAndSerializeObject(logger, restPath, "PUT result =", str);
+ try {
+ t = gson.fromJson(str, clazz);
+ } catch (Exception e) {
+ EPLogUtil.logEcompError(logger, EPAppMessagesEnum.BeInvalidJsonInput, e);
+ }
+ }
+ return t;
+ }
+}
diff --git a/ecomp-portal-BE-common/src/main/java/org/onap/portalapp/portal/service/AppsCacheService.java b/ecomp-portal-BE-common/src/main/java/org/onap/portalapp/portal/service/AppsCacheService.java
new file mode 100644
index 00000000..edaf1137
--- /dev/null
+++ b/ecomp-portal-BE-common/src/main/java/org/onap/portalapp/portal/service/AppsCacheService.java
@@ -0,0 +1,60 @@
+/*-
+ * ============LICENSE_START==========================================
+ * ONAP Portal
+ * ===================================================================
+ * Copyright (C) 2017 AT&T Intellectual Property. All rights reserved.
+ * ===================================================================
+ *
+ * Unless otherwise specified, all software contained herein is licensed
+ * under the Apache License, Version 2.0 (the "License");
+ * you may not use this software 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.
+ *
+ * Unless otherwise specified, all documentation contained herein is licensed
+ * under the Creative Commons License, Attribution 4.0 Intl. (the "License");
+ * you may not use this documentation except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * https://creativecommons.org/licenses/by/4.0/
+ *
+ * Unless required by applicable law or agreed to in writing, documentation
+ * 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.
+ *
+ * ============LICENSE_END============================================
+ *
+ * ECOMP is a trademark and service mark of AT&T Intellectual Property.
+ */
+
+package org.onap.portalapp.portal.service;
+
+import org.onap.portalapp.portal.domain.EPApp;
+
+public interface AppsCacheService {
+
+ /**
+ * returns an app by id from the cache
+ * @param appId
+ * @return corresponding App
+ */
+ EPApp getApp(Long appId);
+
+ /**
+ * returns the corresponding application endpoint
+ * @param appId
+ * @return if appId exists in cache, then return corresponding application endpoint, null otherwise.
+ */
+ String getAppEndpoint(Long appId);
+
+ EPApp getAppForAnalytics(String appKey);
+}
diff --git a/ecomp-portal-BE-common/src/main/java/org/onap/portalapp/portal/service/AppsCacheServiceImple.java b/ecomp-portal-BE-common/src/main/java/org/onap/portalapp/portal/service/AppsCacheServiceImple.java
new file mode 100644
index 00000000..c318f196
--- /dev/null
+++ b/ecomp-portal-BE-common/src/main/java/org/onap/portalapp/portal/service/AppsCacheServiceImple.java
@@ -0,0 +1,155 @@
+/*-
+ * ============LICENSE_START==========================================
+ * ONAP Portal
+ * ===================================================================
+ * Copyright (C) 2017 AT&T Intellectual Property. All rights reserved.
+ * ===================================================================
+ *
+ * Unless otherwise specified, all software contained herein is licensed
+ * under the Apache License, Version 2.0 (the "License");
+ * you may not use this software 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.
+ *
+ * Unless otherwise specified, all documentation contained herein is licensed
+ * under the Creative Commons License, Attribution 4.0 Intl. (the "License");
+ * you may not use this documentation except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * https://creativecommons.org/licenses/by/4.0/
+ *
+ * Unless required by applicable law or agreed to in writing, documentation
+ * 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.
+ *
+ * ============LICENSE_END============================================
+ *
+ * ECOMP is a trademark and service mark of AT&T Intellectual Property.
+ */
+package org.onap.portalapp.portal.service;
+
+import java.util.HashMap;
+import java.util.List;
+import java.util.Map;
+
+import javax.annotation.PostConstruct;
+
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.context.annotation.EnableAspectJAutoProxy;
+import org.springframework.stereotype.Service;
+import org.onap.portalapp.portal.domain.EPApp;
+import org.onap.portalapp.portal.logging.aop.EPMetricsLog;
+import org.onap.portalsdk.core.logging.logic.EELFLoggerDelegate;
+import org.onap.portalapp.portal.service.AppsCacheService;
+import org.onap.portalapp.portal.service.AppsCacheServiceImple;
+
+@Service("appsCacheService")
+@org.springframework.context.annotation.Configuration
+@EnableAspectJAutoProxy
+@EPMetricsLog
+public class AppsCacheServiceImple implements AppsCacheService {
+ @Autowired
+ EPAppService appsService;
+
+ EELFLoggerDelegate logger = EELFLoggerDelegate.getLogger(AppsCacheServiceImple.class);
+
+ final class CacheConfiguration {
+
+ private long updateTime = 0;
+ private int updateInterval = 10;
+
+ public CacheConfiguration (long _updateTime, int _updateInterval) {
+ updateTime = _updateTime;
+ updateInterval = _updateInterval;
+ }
+ }
+
+ CacheConfiguration appConf = null;
+ CacheConfiguration analyticsAppConf = null;
+
+
+ private static volatile Map<Long, EPApp> appsMap;
+ private static volatile Map<String, EPApp> anlyticsAppsMap;
+
+ @PostConstruct
+ public void init() {
+ appConf = new CacheConfiguration(0, 10);
+ analyticsAppConf = new CacheConfiguration(0, 3600);
+
+ this.refreshAppsMap(appConf);
+ }
+
+ private Map<Long, EPApp> refreshAppsMap(CacheConfiguration conf) {
+ long now = System.currentTimeMillis();
+
+ if(noNeedToUpdate(now, conf))
+ return null;
+
+ synchronized (this) {
+ if(noNeedToUpdate(now, conf))
+ return null;
+ List<EPApp> allApps = appsService.getAppsFullList();
+ Map<Long, EPApp> newAppsMap = new HashMap<Long, EPApp>();
+ for (EPApp app : allApps) {
+ newAppsMap.put(app.getId(), app);
+ }
+
+ Map<String, EPApp> newAnalyticsAppsMap = new HashMap<String, EPApp>();
+ for (EPApp app : allApps) {
+ newAnalyticsAppsMap.put(app.getUebKey(), app);
+ }
+ // Switch cache with the new one.
+ appsMap = newAppsMap;
+ anlyticsAppsMap = newAnalyticsAppsMap;
+ conf.updateTime = now;
+ }
+
+ return appsMap;
+ }
+
+ private boolean noNeedToUpdate(long now, CacheConfiguration conf) {
+ long secondsPassed = (now - conf.updateTime)/1000;
+ if(secondsPassed < conf.updateInterval){
+ logger.debug(EELFLoggerDelegate.debugLogger, "no need to refresh yet, seconds since last refresh: " + secondsPassed + ", refresh interval (sec) = " + conf.updateInterval);
+ return true; // no need to update cache
+ }
+ return false; // its time to update
+ }
+
+ @Override
+ public String getAppEndpoint(Long appId) {
+ refreshAppsMap(appConf);
+ EPApp app = appsMap.get(appId);
+ if(app != null)
+ return app.getAppRestEndpoint();
+ return null;
+ }
+
+ @Override
+ public EPApp getApp(Long appId) {
+ refreshAppsMap(appConf);
+ EPApp app = appsMap.get(appId);
+ if(app != null)
+ return app;
+ return null;
+ }
+
+ @Override
+ public EPApp getAppForAnalytics(String appKey) {
+ refreshAppsMap(analyticsAppConf);
+ EPApp app = anlyticsAppsMap.get(appKey);
+ if(app != null)
+ return app;
+ return null;
+ }
+
+}
diff --git a/ecomp-portal-BE-common/src/main/java/org/onap/portalapp/portal/service/BasicAuthAccountService.java b/ecomp-portal-BE-common/src/main/java/org/onap/portalapp/portal/service/BasicAuthAccountService.java
new file mode 100644
index 00000000..2b3c3f38
--- /dev/null
+++ b/ecomp-portal-BE-common/src/main/java/org/onap/portalapp/portal/service/BasicAuthAccountService.java
@@ -0,0 +1,101 @@
+/*-
+ * ============LICENSE_START==========================================
+ * ONAP Portal
+ * ===================================================================
+ * Copyright (C) 2017 AT&T Intellectual Property. All rights reserved.
+ * ===================================================================
+ *
+ * Unless otherwise specified, all software contained herein is licensed
+ * under the Apache License, Version 2.0 (the "License");
+ * you may not use this software 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.
+ *
+ * Unless otherwise specified, all documentation contained herein is licensed
+ * under the Creative Commons License, Attribution 4.0 Intl. (the "License");
+ * you may not use this documentation except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * https://creativecommons.org/licenses/by/4.0/
+ *
+ * Unless required by applicable law or agreed to in writing, documentation
+ * 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.
+ *
+ * ============LICENSE_END============================================
+ *
+ * ECOMP is a trademark and service mark of AT&T Intellectual Property.
+ */
+package org.onap.portalapp.portal.service;
+
+import java.util.List;
+
+import org.onap.portalapp.portal.domain.BasicAuthCredentials;
+import org.onap.portalapp.portal.domain.EPEndpoint;
+
+public interface BasicAuthAccountService {
+
+ /**
+ * Saves Basic Authentication account for external systems
+ *
+ * @param newCredential
+ * BasicAuthCredentials
+ * @return Id of the newly created account
+ * @throws Exception
+ */
+ Long saveBasicAuthAccount(BasicAuthCredentials newCredential) throws Exception;
+
+ /**
+ * Saves Endpoint associated with a Basic Auth account
+ *
+ * @param endpoint
+ * EPEndpoint
+ * @return Id of the newly created endpoint
+ * @throws Exception
+ */
+ Long saveEndpoints(EPEndpoint endpoint) throws Exception;
+
+ /**
+ * Saves Endpoint associated with a Basic Auth account
+ *
+ * @param accountId
+ * @param endpointId
+ * @throws Exception
+ */
+ void saveEndpointAccount(Long accountId, Long endpointId) throws Exception;
+
+ /**
+ * Returns list of all BasicAuthCredentials in the sytem
+ *
+ * @return List<BasicAuthCredentials>
+ * @throws Exception
+ */
+ List<BasicAuthCredentials> getAccountData() throws Exception;
+
+ /**
+ * Deletes BasicAuthenticationAccount
+ *
+ * @param accountId
+ * @throws Exception
+ */
+ void deleteEndpointAccout(Long accountId) throws Exception;
+
+ /**
+ * Updates BasicAuthenticationAccount
+ *
+ * @param accountId
+ * @param newCredential
+ * BasicAuthCredentials
+ * @throws Exception
+ */
+ void updateBasicAuthAccount(Long accountId, BasicAuthCredentials newCredential) throws Exception;
+}
diff --git a/ecomp-portal-BE-common/src/main/java/org/onap/portalapp/portal/service/BasicAuthAccountServiceImpl.java b/ecomp-portal-BE-common/src/main/java/org/onap/portalapp/portal/service/BasicAuthAccountServiceImpl.java
new file mode 100644
index 00000000..e6b7c6ea
--- /dev/null
+++ b/ecomp-portal-BE-common/src/main/java/org/onap/portalapp/portal/service/BasicAuthAccountServiceImpl.java
@@ -0,0 +1,247 @@
+/*-
+ * ============LICENSE_START==========================================
+ * ONAP Portal
+ * ===================================================================
+ * Copyright (C) 2017 AT&T Intellectual Property. All rights reserved.
+ * ===================================================================
+ *
+ * Unless otherwise specified, all software contained herein is licensed
+ * under the Apache License, Version 2.0 (the "License");
+ * you may not use this software 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.
+ *
+ * Unless otherwise specified, all documentation contained herein is licensed
+ * under the Creative Commons License, Attribution 4.0 Intl. (the "License");
+ * you may not use this documentation except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * https://creativecommons.org/licenses/by/4.0/
+ *
+ * Unless required by applicable law or agreed to in writing, documentation
+ * 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.
+ *
+ * ============LICENSE_END============================================
+ *
+ * ECOMP is a trademark and service mark of AT&T Intellectual Property.
+ */
+package org.onap.portalapp.portal.service;
+
+import java.util.ArrayList;
+import java.util.HashMap;
+import java.util.List;
+import java.util.Map;
+
+import org.hibernate.criterion.Criterion;
+import org.hibernate.criterion.Restrictions;
+import org.onap.portalapp.portal.domain.BasicAuthCredentials;
+import org.onap.portalapp.portal.domain.EPEndpoint;
+import org.onap.portalapp.portal.domain.EPEndpointAccount;
+import org.onap.portalapp.portal.logging.aop.EPMetricsLog;
+import org.onap.portalsdk.core.logging.logic.EELFLoggerDelegate;
+import org.onap.portalsdk.core.onboarding.util.CipherUtil;
+import org.onap.portalsdk.core.service.DataAccessService;
+import org.onap.portalsdk.core.util.SystemProperties;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.context.annotation.EnableAspectJAutoProxy;
+import org.springframework.stereotype.Service;
+
+@Service("basicAuthAccountService")
+@EnableAspectJAutoProxy
+@EPMetricsLog
+public class BasicAuthAccountServiceImpl implements BasicAuthAccountService{
+ EELFLoggerDelegate logger = EELFLoggerDelegate.getLogger(MicroserviceServiceImpl.class);
+
+ @Autowired
+ private DataAccessService dataAccessService;
+
+ @Override
+ public Long saveBasicAuthAccount(BasicAuthCredentials newCredential) throws Exception {
+ if (newCredential.getPassword() != null)
+ newCredential.setPassword(encryptedPassword(newCredential.getPassword()));
+ try{
+ getDataAccessService().saveDomainObject(newCredential, null);
+ }catch(Exception e){
+ logger.error(EELFLoggerDelegate.errorLogger, "saveBasicAuthAccount() failed", e);
+ throw e;
+ }
+ return newCredential.getId();
+ }
+
+
+ @Override
+ @SuppressWarnings("unchecked")
+ public Long saveEndpoints(EPEndpoint endpoint) throws Exception {
+
+ List<Criterion> restrictionsList = new ArrayList<Criterion>();
+ Criterion NameCrit = Restrictions.eq("name", endpoint.getName());
+ restrictionsList.add(NameCrit);
+
+ List<EPEndpoint> tempList = (List<EPEndpoint>) dataAccessService.getList(EPEndpoint.class, null,
+ restrictionsList, null);
+ if (tempList.size() != 0) {
+ return tempList.get(0).getId();
+ } else {
+ getDataAccessService().saveDomainObject(endpoint, null);
+ return endpoint.getId();
+ }
+
+ }
+
+ @Override
+ public void saveEndpointAccount(Long accountId, Long endpointId) throws Exception {
+ EPEndpointAccount record = new EPEndpointAccount();
+ record.setAccount_id(accountId);
+ record.setEp_id(endpointId);
+ try {
+ getDataAccessService().saveDomainObject(record, null);
+ } catch (Exception e) {
+ logger.error(EELFLoggerDelegate.errorLogger, "saveEndpointAccount() failed", e);
+ throw e;
+ }
+
+ }
+
+ @Override
+ @SuppressWarnings("unchecked")
+ public void updateBasicAuthAccount(Long accountId, BasicAuthCredentials newCredential) throws Exception {
+ try {
+ newCredential.setId(accountId);
+ if (newCredential.getPassword() != null)
+ newCredential.setPassword(encryptedPassword(newCredential.getPassword()));
+ getDataAccessService().saveDomainObject(newCredential, null);
+
+ List<EPEndpoint> endpoints = newCredential.getEndpoints();
+ List<EPEndpoint> orig_points = getEPEndpoints(accountId);
+
+ for(EPEndpoint temp_ep: orig_points){
+ boolean flag = false;
+ for(EPEndpoint temp_ep2: endpoints){
+ if(temp_ep2.getId() == temp_ep.getId())
+ flag = true;
+ }
+ if(!flag){
+ Map<String, String> params = new HashMap<String, String>();
+ params.put("accountId", Long.toString(accountId));
+ params.put("epId", Long.toString(temp_ep.getId()));
+ dataAccessService.executeNamedQuery("deleteAccountEndpointRecord", params, null);
+ }
+ }
+
+
+ for(int i = 0; i < endpoints.size(); i++){
+
+ List<Criterion> restrictionsList = new ArrayList<Criterion>();
+ Criterion IdCrit = Restrictions.eq("id", endpoints.get(i).getId());
+ restrictionsList.add(IdCrit);
+ Criterion NameCrit = Restrictions.eq("name", endpoints.get(i).getName());
+ restrictionsList.add(NameCrit);
+ List<EPEndpoint> tempList = (List<EPEndpoint>) dataAccessService
+ .getList(EPEndpoint.class, null, restrictionsList, null);
+ if(tempList.size() == 0){
+ if(endpoints.get(i).getId() != null){
+ //delete the record endpoints.get(i).getId(), accountId
+ Map<String, String> params = new HashMap<String, String>();
+ params.put("accountId", Long.toString(accountId));
+ params.put("epId", Long.toString(endpoints.get(i).getId()));
+ dataAccessService.executeNamedQuery("deleteAccountEndpointRecord", params, null);
+ endpoints.get(i).setId(null);
+ }
+ //create a new endpoint
+ Long ep_id = saveEndpoints(endpoints.get(i));
+ saveEndpointAccount(accountId, ep_id);
+ }
+ }
+ } catch (Exception e) {
+ logger.error(EELFLoggerDelegate.errorLogger, "updateBasicAuthAccount() failed", e);
+ throw e;
+ }
+ }
+
+ @Override
+ public List<BasicAuthCredentials> getAccountData() throws Exception {
+ @SuppressWarnings("unchecked")
+ List<BasicAuthCredentials> list = (List<BasicAuthCredentials>) dataAccessService.getList(BasicAuthCredentials.class, null);
+ for (int i = 0; i < list.size(); i++) {
+ if (list.get(i).getPassword() != null)
+ list.get(i).setPassword(decryptedPassword(list.get(i).getPassword()));
+ list.get(i).setEndpoints(getEPEndpoints(list.get(i).getId()));
+ }
+ return list;
+ }
+
+ @SuppressWarnings("unchecked")
+ private List<EPEndpoint> getEPEndpoints(long accountId) {
+ List<EPEndpoint> result = new ArrayList<>();
+ List<EPEndpointAccount> list = null;
+ Map<String, Long> params = new HashMap<>();
+ params.put("account_id", accountId);
+ try {
+ list = this.getDataAccessService().executeNamedQuery("getEPEndpointAccountByAccountId", params, null);
+ } catch (Exception e) {
+ logger.error(EELFLoggerDelegate.errorLogger, "getEPEndpointAccountByAccountId failed", e);
+ }
+
+ for(int i = 0; list != null && i < list.size(); i++){
+ result.add((EPEndpoint) dataAccessService.getDomainObject(EPEndpoint.class, list.get(i).getEp_id(), null));
+ }
+ return result;
+ }
+
+ @Override
+ public void deleteEndpointAccout(Long accountId) throws Exception {
+ try{
+ Map<String, String> params = new HashMap<String, String>();
+ params.put("accountId", Long.toString(accountId));
+
+ dataAccessService.executeNamedQuery("deleteAccountEndpoint", params, null);
+ dataAccessService.executeNamedQuery("deleteBasicAuthAccount", params, null);
+
+ }catch(Exception e){
+ logger.error(EELFLoggerDelegate.errorLogger, "deleteEndpointAccout() failed", e);
+ throw e;
+ }
+ }
+
+ private String decryptedPassword(String encryptedPwd) throws Exception {
+ String result = "";
+ if (encryptedPwd != null & encryptedPwd.length() > 0) {
+ try {
+ result = CipherUtil.decryptPKC(encryptedPwd,
+ SystemProperties.getProperty(SystemProperties.Decryption_Key));
+ } catch (Exception e) {
+ logger.error(EELFLoggerDelegate.errorLogger, "decryptedPassword() failed", e);
+ throw e;
+ }
+ }
+ return result;
+ }
+
+ private String encryptedPassword(String decryptedPwd) throws Exception {
+ String result = "";
+ if (decryptedPwd != null & decryptedPwd.length() > 0) {
+ try {
+ result = CipherUtil.encryptPKC(decryptedPwd,
+ SystemProperties.getProperty(SystemProperties.Decryption_Key));
+ } catch (Exception e) {
+ logger.error(EELFLoggerDelegate.errorLogger, "encryptedPassword() failed", e);
+ throw e;
+ }
+ }
+ return result;
+ }
+
+ public DataAccessService getDataAccessService() {
+ return dataAccessService;
+ }
+}
diff --git a/ecomp-portal-BE-common/src/main/java/org/onap/portalapp/portal/service/BasicAuthenticationCredentialService.java b/ecomp-portal-BE-common/src/main/java/org/onap/portalapp/portal/service/BasicAuthenticationCredentialService.java
new file mode 100644
index 00000000..b95b7254
--- /dev/null
+++ b/ecomp-portal-BE-common/src/main/java/org/onap/portalapp/portal/service/BasicAuthenticationCredentialService.java
@@ -0,0 +1,53 @@
+/*-
+ * ============LICENSE_START==========================================
+ * ONAP Portal
+ * ===================================================================
+ * Copyright (C) 2017 AT&T Intellectual Property. All rights reserved.
+ * ===================================================================
+ *
+ * Unless otherwise specified, all software contained herein is licensed
+ * under the Apache License, Version 2.0 (the "License");
+ * you may not use this software 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.
+ *
+ * Unless otherwise specified, all documentation contained herein is licensed
+ * under the Creative Commons License, Attribution 4.0 Intl. (the "License");
+ * you may not use this documentation except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * https://creativecommons.org/licenses/by/4.0/
+ *
+ * Unless required by applicable law or agreed to in writing, documentation
+ * 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.
+ *
+ * ============LICENSE_END============================================
+ *
+ * ECOMP is a trademark and service mark of AT&T Intellectual Property.
+ */
+package org.onap.portalapp.portal.service;
+
+import org.onap.portalapp.portal.domain.BasicAuthCredentials;
+
+public interface BasicAuthenticationCredentialService {
+ /**
+ * Gets the basic authentication credential for the specified appName from
+ * table ep_basic_auth_account
+ *
+ * @param username
+ * External user name
+ * @return BasicAuthCredentials for the specified app; null if the username
+ * is not known.
+ */
+ public BasicAuthCredentials getBasicAuthCredentialByUsernameAndPassword(String username, String password);
+}
diff --git a/ecomp-portal-BE-common/src/main/java/org/onap/portalapp/portal/service/BasicAuthenticationCredentialServiceImpl.java b/ecomp-portal-BE-common/src/main/java/org/onap/portalapp/portal/service/BasicAuthenticationCredentialServiceImpl.java
new file mode 100644
index 00000000..b50eb391
--- /dev/null
+++ b/ecomp-portal-BE-common/src/main/java/org/onap/portalapp/portal/service/BasicAuthenticationCredentialServiceImpl.java
@@ -0,0 +1,103 @@
+/*-
+ * ============LICENSE_START==========================================
+ * ONAP Portal
+ * ===================================================================
+ * Copyright (C) 2017 AT&T Intellectual Property. All rights reserved.
+ * ===================================================================
+ *
+ * Unless otherwise specified, all software contained herein is licensed
+ * under the Apache License, Version 2.0 (the "License");
+ * you may not use this software 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.
+ *
+ * Unless otherwise specified, all documentation contained herein is licensed
+ * under the Creative Commons License, Attribution 4.0 Intl. (the "License");
+ * you may not use this documentation except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * https://creativecommons.org/licenses/by/4.0/
+ *
+ * Unless required by applicable law or agreed to in writing, documentation
+ * 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.
+ *
+ * ============LICENSE_END============================================
+ *
+ * ECOMP is a trademark and service mark of AT&T Intellectual Property.
+ */
+package org.onap.portalapp.portal.service;
+
+import java.util.ArrayList;
+import java.util.List;
+
+import org.hibernate.criterion.Criterion;
+import org.hibernate.criterion.Restrictions;
+import org.onap.portalapp.portal.domain.BasicAuthCredentials;
+import org.onap.portalapp.portal.domain.EPEndpoint;
+import org.onap.portalapp.portal.domain.EPEndpointAccount;
+import org.onap.portalapp.portal.logging.aop.EPMetricsLog;
+import org.onap.portalsdk.core.logging.logic.EELFLoggerDelegate;
+import org.onap.portalsdk.core.service.DataAccessService;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.context.annotation.EnableAspectJAutoProxy;
+import org.springframework.stereotype.Service;
+
+@Service("basicAuthenticationCredentialService")
+@EnableAspectJAutoProxy
+@EPMetricsLog
+public class BasicAuthenticationCredentialServiceImpl implements BasicAuthenticationCredentialService {
+
+ private EELFLoggerDelegate logger = EELFLoggerDelegate.getLogger(BasicAuthenticationCredentialServiceImpl.class);
+
+ @Autowired
+ private DataAccessService dataAccessService;
+
+ @Override
+ public BasicAuthCredentials getBasicAuthCredentialByUsernameAndPassword(String username, String password) {
+
+ List<Criterion> restrictionsList = new ArrayList<Criterion>();
+ Criterion contextUserNameCrit = Restrictions.eq("username", username);
+ restrictionsList.add(contextUserNameCrit);
+ Criterion contextPasswordCrit = Restrictions.eq("password", password);
+ restrictionsList.add(contextPasswordCrit);
+
+ @SuppressWarnings("unchecked")
+ List<BasicAuthCredentials> credList = (List<BasicAuthCredentials>) dataAccessService
+ .getList(BasicAuthCredentials.class, null, restrictionsList, null);
+ if (credList == null || credList.size() == 0) {
+ logger.error(EELFLoggerDelegate.errorLogger,
+ "getBasicAuthCredentialByAppName: no credential(s) for " + username);
+ return null;
+ }
+ logger.debug(EELFLoggerDelegate.debugLogger,
+ "getBasicAuthCredentialByAppName: cred list size: " + credList.size());
+ BasicAuthCredentials cred = (BasicAuthCredentials) credList.get(0);
+ cred.setEndpoints(getEndpointsByAccountId(cred.getId()));
+ return cred;
+ }
+
+ private List<EPEndpoint> getEndpointsByAccountId(long id) {
+ List<EPEndpoint> list = new ArrayList<>();
+ List<Criterion> restrictionsList = new ArrayList<Criterion>();
+ Criterion contextIdCrit = Restrictions.eq("account_id", id);
+ restrictionsList.add(contextIdCrit);
+ @SuppressWarnings("unchecked")
+ List<EPEndpointAccount> epList = (List<EPEndpointAccount>) dataAccessService.getList(EPEndpointAccount.class,
+ null, restrictionsList, null);
+ for (EPEndpointAccount ep : epList) {
+ list.add((EPEndpoint) dataAccessService.getDomainObject(EPEndpoint.class, ep.getEp_id(), null));
+ }
+ return list;
+ }
+
+}
diff --git a/ecomp-portal-BE-common/src/main/java/org/onap/portalapp/portal/service/ConsulHealthService.java b/ecomp-portal-BE-common/src/main/java/org/onap/portalapp/portal/service/ConsulHealthService.java
new file mode 100644
index 00000000..87d20712
--- /dev/null
+++ b/ecomp-portal-BE-common/src/main/java/org/onap/portalapp/portal/service/ConsulHealthService.java
@@ -0,0 +1,62 @@
+/*-
+ * ============LICENSE_START==========================================
+ * ONAP Portal
+ * ===================================================================
+ * Copyright (C) 2017 AT&T Intellectual Property. All rights reserved.
+ * ===================================================================
+ *
+ * Unless otherwise specified, all software contained herein is licensed
+ * under the Apache License, Version 2.0 (the "License");
+ * you may not use this software 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.
+ *
+ * Unless otherwise specified, all documentation contained herein is licensed
+ * under the Creative Commons License, Attribution 4.0 Intl. (the "License");
+ * you may not use this documentation except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * https://creativecommons.org/licenses/by/4.0/
+ *
+ * Unless required by applicable law or agreed to in writing, documentation
+ * 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.
+ *
+ * ============LICENSE_END============================================
+ *
+ * ECOMP is a trademark and service mark of AT&T Intellectual Property.
+ */
+package org.onap.portalapp.portal.service;
+
+import java.util.List;
+
+import org.onap.portalapp.portal.exceptions.NoHealthyServiceException;
+
+import com.ecwid.consul.ConsulException;
+import com.orbitz.consul.model.health.ServiceHealth;
+
+public interface ConsulHealthService {
+ /**
+ * This method returns the location of one healthy node if found in Consul -
+ * If not found in / by Consul, it falls back to 'localhost'
+ *
+ * @param service
+ * @param fallbackPortOnLocalhost
+ * value provided by the calling service
+ * @return Service location
+ */
+ public String getServiceLocation(String service, String fallbackPortOnLocalhost) throws NoHealthyServiceException;
+
+ public List<ServiceHealth> getAllHealthyNodes(String service) throws ConsulException;
+
+ public List<ServiceHealth> getAllNodes(String service) throws ConsulException;
+}
diff --git a/ecomp-portal-BE-common/src/main/java/org/onap/portalapp/portal/service/ConsulHealthServiceImpl.java b/ecomp-portal-BE-common/src/main/java/org/onap/portalapp/portal/service/ConsulHealthServiceImpl.java
new file mode 100644
index 00000000..ebb43767
--- /dev/null
+++ b/ecomp-portal-BE-common/src/main/java/org/onap/portalapp/portal/service/ConsulHealthServiceImpl.java
@@ -0,0 +1,114 @@
+/*-
+ * ============LICENSE_START==========================================
+ * ONAP Portal
+ * ===================================================================
+ * Copyright (C) 2017 AT&T Intellectual Property. All rights reserved.
+ * ===================================================================
+ *
+ * Unless otherwise specified, all software contained herein is licensed
+ * under the Apache License, Version 2.0 (the "License");
+ * you may not use this software 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.
+ *
+ * Unless otherwise specified, all documentation contained herein is licensed
+ * under the Creative Commons License, Attribution 4.0 Intl. (the "License");
+ * you may not use this documentation except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * https://creativecommons.org/licenses/by/4.0/
+ *
+ * Unless required by applicable law or agreed to in writing, documentation
+ * 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.
+ *
+ * ============LICENSE_END============================================
+ *
+ * ECOMP is a trademark and service mark of AT&T Intellectual Property.
+ */
+package org.onap.portalapp.portal.service;
+
+import java.util.List;
+
+import org.onap.portalapp.portal.utils.EcompPortalUtils;
+import org.onap.portalsdk.core.logging.logic.EELFLoggerDelegate;
+import org.springframework.stereotype.Component;
+
+import com.ecwid.consul.ConsulException;
+import com.orbitz.consul.Consul;
+import com.orbitz.consul.HealthClient;
+import com.orbitz.consul.model.health.ServiceHealth;
+
+@Component
+public class ConsulHealthServiceImpl implements ConsulHealthService {
+
+ private EELFLoggerDelegate logger = EELFLoggerDelegate.getLogger(ConsulHealthServiceImpl.class);
+
+ @Override
+ public String getServiceLocation(String service, String fallbackPortOnLocalHost) {
+
+ List<ServiceHealth> nodes = null;
+
+ try {
+ Consul consul = Consul.builder().build();
+ HealthClient healthClient = consul.healthClient();
+ nodes = healthClient.getHealthyServiceInstances(service).getResponse();
+ } catch (Exception e) {
+ String localFallbackServiceLocation = EcompPortalUtils.localOrDockerHost() + ":" + fallbackPortOnLocalHost;
+ logger.debug(EELFLoggerDelegate.debugLogger,
+ " problem getting nodes for service {1}. Defaulting to {2}. Exception: {3}", service,
+ localFallbackServiceLocation, e.getMessage());
+ logger.error(EELFLoggerDelegate.errorLogger,
+ " problem getting nodes for service {1}. Defaulting to {2}. Exception: {3}", service,
+ localFallbackServiceLocation, e);
+ return localFallbackServiceLocation;
+ }
+
+ if (nodes == null || nodes.size() == 0) {
+ logger.debug(EELFLoggerDelegate.debugLogger, "No healthy node found in the consul cluster running service " + service
+ + ". Defaulting to localhost");
+ return EcompPortalUtils.localOrDockerHost() + ":" + fallbackPortOnLocalHost;
+ } else {
+ String locationFromConsul;
+ ServiceHealth node = nodes.get(0);
+ locationFromConsul = node.getNode().getNode() + ":" + node.getService().getPort();
+ logger.debug(EELFLoggerDelegate.debugLogger,
+ "Found healthy service location using consul - returning location " + locationFromConsul);
+
+ // if locationFromConsul is null for some reason (very unlikely at
+ // this point), default to localhost
+ if (null == locationFromConsul || "".equals(locationFromConsul)) {
+ logger.debug(EELFLoggerDelegate.debugLogger,
+ "Couldn't get location from consul for service " + service + ". Defaulting to localhost");
+ return "localhost:" + fallbackPortOnLocalHost;
+ } else {
+ logger.debug(EELFLoggerDelegate.debugLogger, "Found service location from consul for service " + service
+ + ". Location is " + locationFromConsul);
+ return locationFromConsul;
+ }
+ }
+ }
+
+ @Override
+ public List<ServiceHealth> getAllHealthyNodes(String service) throws ConsulException {
+ Consul consul = Consul.builder().build();
+ HealthClient healthClient = consul.healthClient();
+ return healthClient.getHealthyServiceInstances(service).getResponse();
+ }
+
+ @Override
+ public List<ServiceHealth> getAllNodes(String service) {
+ Consul consul = Consul.builder().build();
+ HealthClient healthClient = consul.healthClient();
+ return healthClient.getAllServiceInstances(service).getResponse();
+ }
+}
diff --git a/ecomp-portal-BE-common/src/main/java/org/onap/portalapp/portal/service/DashboardSearchService.java b/ecomp-portal-BE-common/src/main/java/org/onap/portalapp/portal/service/DashboardSearchService.java
new file mode 100644
index 00000000..82a40b7d
--- /dev/null
+++ b/ecomp-portal-BE-common/src/main/java/org/onap/portalapp/portal/service/DashboardSearchService.java
@@ -0,0 +1,55 @@
+/*-
+ * ============LICENSE_START==========================================
+ * ONAP Portal
+ * ===================================================================
+ * Copyright (C) 2017 AT&T Intellectual Property. All rights reserved.
+ * ===================================================================
+ *
+ * Unless otherwise specified, all software contained herein is licensed
+ * under the Apache License, Version 2.0 (the "License");
+ * you may not use this software 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.
+ *
+ * Unless otherwise specified, all documentation contained herein is licensed
+ * under the Creative Commons License, Attribution 4.0 Intl. (the "License");
+ * you may not use this documentation except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * https://creativecommons.org/licenses/by/4.0/
+ *
+ * Unless required by applicable law or agreed to in writing, documentation
+ * 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.
+ *
+ * ============LICENSE_END============================================
+ *
+ * ECOMP is a trademark and service mark of AT&T Intellectual Property.
+ */
+package org.onap.portalapp.portal.service;
+
+import java.util.List;
+import java.util.Map;
+
+import org.onap.portalapp.portal.ecomp.model.SearchResultItem;
+import org.onap.portalapp.portal.transport.CommonWidget;
+import org.onap.portalapp.portal.transport.CommonWidgetMeta;
+
+public interface DashboardSearchService {
+ public Map<String, List<SearchResultItem>> searchResults(String userId, String searchString);
+ public List<String> getRelatedUsers(String userId);
+
+ public CommonWidgetMeta getWidgetData(String resourceType);
+ public String saveWidgetDataBulk(CommonWidgetMeta commonWidgetMetaData);
+ public String saveWidgetData(CommonWidget commonWidgetData);
+ public String deleteWidgetData(CommonWidget eventWidget);
+}
diff --git a/ecomp-portal-BE-common/src/main/java/org/onap/portalapp/portal/service/DashboardSearchServiceImpl.java b/ecomp-portal-BE-common/src/main/java/org/onap/portalapp/portal/service/DashboardSearchServiceImpl.java
new file mode 100644
index 00000000..776bd619
--- /dev/null
+++ b/ecomp-portal-BE-common/src/main/java/org/onap/portalapp/portal/service/DashboardSearchServiceImpl.java
@@ -0,0 +1,117 @@
+/*-
+ * ============LICENSE_START==========================================
+ * ONAP Portal
+ * ===================================================================
+ * Copyright (C) 2017 AT&T Intellectual Property. All rights reserved.
+ * ===================================================================
+ *
+ * Unless otherwise specified, all software contained herein is licensed
+ * under the Apache License, Version 2.0 (the "License");
+ * you may not use this software 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.
+ *
+ * Unless otherwise specified, all documentation contained herein is licensed
+ * under the Creative Commons License, Attribution 4.0 Intl. (the "License");
+ * you may not use this documentation except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * https://creativecommons.org/licenses/by/4.0/
+ *
+ * Unless required by applicable law or agreed to in writing, documentation
+ * 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.
+ *
+ * ============LICENSE_END============================================
+ *
+ * ECOMP is a trademark and service mark of AT&T Intellectual Property.
+ */
+package org.onap.portalapp.portal.service;
+
+import java.util.ArrayList;
+import java.util.HashMap;
+import java.util.List;
+import java.util.Map;
+
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.stereotype.Component;
+import org.onap.portalapp.portal.ecomp.model.SearchResultItem;
+import org.onap.portalapp.portal.transport.CommonWidget;
+import org.onap.portalapp.portal.transport.CommonWidgetMeta;
+import org.onap.portalsdk.core.service.DataAccessService;
+
+@Component
+public class DashboardSearchServiceImpl implements DashboardSearchService {
+
+ @Autowired
+ private DataAccessService dataAccessService;
+
+ public Map<String, List<SearchResultItem>> searchResults(String userId, String searchString) {
+ Map<String, String> params = new HashMap<>();
+ params.put("userId", userId);
+ params.put("searchQuery", searchString);
+ // Named query is stored in a *.hbm.xml file, mapped to SearchResultItem
+ @SuppressWarnings("unchecked")
+ List<SearchResultItem> list = dataAccessService.executeNamedQuery("searchPortal", params, null);
+ Map<String, List<SearchResultItem>> finalJson = null;
+ if (list.size() > 0) {
+ finalJson = new HashMap<String, List<SearchResultItem>>();
+ for (SearchResultItem thisResult : list) {
+ List<SearchResultItem> thisList = finalJson.get(thisResult.getCategory().toLowerCase());
+ if (thisList == null)
+ thisList = new ArrayList<SearchResultItem>();
+ thisList.add(thisResult);
+ finalJson.put(thisResult.getCategory().toLowerCase(), thisList);
+ }
+ }
+ return finalJson;
+ }
+
+ @Override
+ public List<String> getRelatedUsers(String userId) {
+ Map<String, String> params = new HashMap<>();
+ params.put("userId", userId);
+ @SuppressWarnings("unchecked")
+ List<String> activeUsers = dataAccessService.executeNamedQuery("relatedUsers", params, null);
+ return activeUsers;
+ }
+
+ @Override
+ public CommonWidgetMeta getWidgetData(String resourceType) {
+ Map<String, String> params = new HashMap<>();
+ params.put("cat", resourceType);
+ @SuppressWarnings("unchecked")
+ List<CommonWidget> widgetItems = (List<CommonWidget>) dataAccessService.executeNamedQuery("getCommonWidgetItem", params, null);
+ return new CommonWidgetMeta(resourceType, widgetItems);
+ }
+
+ @Override
+ public String saveWidgetDataBulk(CommonWidgetMeta commonMetaWidgetData) {
+ for (CommonWidget widgetData : commonMetaWidgetData.getItems()) {
+ widgetData.setCategory(commonMetaWidgetData.getCategory());
+ dataAccessService.saveDomainObject(widgetData, null);
+ }
+ return "success";
+ }
+
+ @Override
+ public String saveWidgetData(CommonWidget commonWidgetData) {
+ dataAccessService.saveDomainObject(commonWidgetData, null);
+ return "success";
+ }
+
+ @Override
+ public String deleteWidgetData(CommonWidget eventWidget) {
+ dataAccessService.deleteDomainObject(eventWidget, null);
+ return "success";
+ }
+}
diff --git a/ecomp-portal-BE-common/src/main/java/org/onap/portalapp/portal/service/EPAppCommonServiceImpl.java b/ecomp-portal-BE-common/src/main/java/org/onap/portalapp/portal/service/EPAppCommonServiceImpl.java
new file mode 100644
index 00000000..8c055b2d
--- /dev/null
+++ b/ecomp-portal-BE-common/src/main/java/org/onap/portalapp/portal/service/EPAppCommonServiceImpl.java
@@ -0,0 +1,1666 @@
+/*-
+ * ============LICENSE_START==========================================
+ * ONAP Portal
+ * ===================================================================
+ * Copyright (C) 2017 AT&T Intellectual Property. All rights reserved.
+ * ===================================================================
+ *
+ * Unless otherwise specified, all software contained herein is licensed
+ * under the Apache License, Version 2.0 (the "License");
+ * you may not use this software 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.
+ *
+ * Unless otherwise specified, all documentation contained herein is licensed
+ * under the Creative Commons License, Attribution 4.0 Intl. (the "License");
+ * you may not use this documentation except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * https://creativecommons.org/licenses/by/4.0/
+ *
+ * Unless required by applicable law or agreed to in writing, documentation
+ * 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.
+ *
+ * ============LICENSE_END============================================
+ *
+ * ECOMP is a trademark and service mark of AT&T Intellectual Property.
+ */
+package org.onap.portalapp.portal.service;
+
+import java.io.IOException;
+import java.security.GeneralSecurityException;
+import java.util.ArrayList;
+import java.util.Base64;
+import java.util.HashMap;
+import java.util.HashSet;
+import java.util.LinkedList;
+import java.util.List;
+import java.util.Map;
+import java.util.Set;
+
+import javax.annotation.PostConstruct;
+import javax.servlet.http.HttpServletResponse;
+
+import org.apache.commons.lang.StringUtils;
+import org.hibernate.Session;
+import org.hibernate.SessionFactory;
+import org.hibernate.Transaction;
+import org.hibernate.criterion.Criterion;
+import org.hibernate.criterion.Restrictions;
+import org.onap.portalapp.portal.domain.AdminUserApp;
+import org.onap.portalapp.portal.domain.AdminUserApplications;
+import org.onap.portalapp.portal.domain.AppIdAndNameTransportModel;
+import org.onap.portalapp.portal.domain.AppsResponse;
+import org.onap.portalapp.portal.domain.EPApp;
+import org.onap.portalapp.portal.domain.EPUser;
+import org.onap.portalapp.portal.domain.EPUserAppRolesRequest;
+import org.onap.portalapp.portal.domain.EPUserAppRolesRequestDetail;
+import org.onap.portalapp.portal.domain.EPUserAppsManualSortPreference;
+import org.onap.portalapp.portal.domain.EPUserAppsSortPreference;
+import org.onap.portalapp.portal.domain.EPWidgetsManualSortPreference;
+import org.onap.portalapp.portal.domain.EcompApp;
+import org.onap.portalapp.portal.domain.UserRole;
+import org.onap.portalapp.portal.domain.UserRoles;
+import org.onap.portalapp.portal.ecomp.model.AppCatalogItem;
+import org.onap.portalapp.portal.logging.format.EPAppMessagesEnum;
+import org.onap.portalapp.portal.logging.logic.EPLogUtil;
+import org.onap.portalapp.portal.transport.EPAppsManualPreference;
+import org.onap.portalapp.portal.transport.EPAppsSortPreference;
+import org.onap.portalapp.portal.transport.EPDeleteAppsManualSortPref;
+import org.onap.portalapp.portal.transport.EPWidgetsSortPreference;
+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;
+import org.onap.portalsdk.core.onboarding.ueb.Helper;
+import org.onap.portalsdk.core.onboarding.ueb.TopicManager;
+import org.onap.portalsdk.core.onboarding.util.CipherUtil;
+import org.onap.portalsdk.core.onboarding.util.PortalApiConstants;
+import org.onap.portalsdk.core.onboarding.util.PortalApiProperties;
+import org.onap.portalsdk.core.service.DataAccessService;
+import org.onap.portalsdk.core.util.SystemProperties;
+import org.springframework.beans.factory.annotation.Autowired;
+
+import com.att.nsa.apiClient.http.HttpException;
+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 {
+
+ protected String ECOMP_APP_ID = "1";
+ protected String SUPER_ADMIN_ROLE_ID = "1";
+ protected String ACCOUNT_ADMIN_ROLE_ID = "999";
+ protected String RESTRICTED_APP_ROLE_ID = "900";
+
+ private static final String urlField = "url";
+ private static final String nameField = "name";
+
+ private EELFLoggerDelegate logger = EELFLoggerDelegate.getLogger(EPAppCommonServiceImpl.class);
+
+ @Autowired
+ private AdminRolesService adminRolesService;
+ @Autowired
+ protected SessionFactory sessionFactory;
+ @Autowired
+ private DataAccessService dataAccessService;
+ @Autowired
+ private EPUebHelper epUebHelper;
+
+ @PostConstruct
+ private void init() {
+ SUPER_ADMIN_ROLE_ID = SystemProperties.getProperty(EPCommonSystemProperties.SYS_ADMIN_ROLE_ID);
+ ACCOUNT_ADMIN_ROLE_ID = SystemProperties.getProperty(EPCommonSystemProperties.ACCOUNT_ADMIN_ROLE_ID);
+ ECOMP_APP_ID = SystemProperties.getProperty(EPCommonSystemProperties.ECOMP_APP_ID);
+ RESTRICTED_APP_ROLE_ID = SystemProperties.getProperty(EPCommonSystemProperties.RESTRICTED_APP_ROLE_ID);
+ }
+
+ @Override
+ public List<EPApp> getUserAsAdminApps(EPUser user) {
+ if (adminRolesService.isAccountAdmin(user)) {
+ String sql = "SELECT * FROM FN_APP join FN_USER_ROLE ON FN_USER_ROLE.APP_ID=FN_APP.APP_ID where "
+ + "FN_USER_ROLE.USER_ID=" + user.getId() + " AND FN_USER_ROLE.ROLE_ID=" + ACCOUNT_ADMIN_ROLE_ID
+ + " AND FN_APP.ENABLED = 'Y'";
+ logQuery(sql);
+ try {
+ @SuppressWarnings("unchecked")
+ List<EPApp> adminApps = dataAccessService.executeSQLQuery(sql, EPApp.class, null);
+ return adminApps;
+ } catch (Exception e) {
+ 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) {
+ String format = "SELECT * FROM FN_APP app INNER JOIN FN_USER_ROLE userrole ON userrole.APP_ID=app.APP_ID "
+ + "INNER JOIN FN_USER user on user.USER_ID = userrole.USER_ID "
+ + "WHERE user.org_user_id = '%s' AND userrole.ROLE_ID=" + ACCOUNT_ADMIN_ROLE_ID
+ + " AND FN_APP.ENABLED = 'Y'";
+
+ String sql = String.format(format, orgUserId);
+ logQuery(sql);
+
+ try {
+ @SuppressWarnings("unchecked")
+ List<EPApp> adminApps = dataAccessService.executeSQLQuery(sql, EPApp.class, null);
+ return adminApps;
+ } catch (Exception e) {
+ EPLogUtil.logEcompError(logger, EPAppMessagesEnum.BeDaoSystemError, e);
+ return null;
+ }
+ }
+
+ @Override
+ public List<EPApp> getAppsFullList() {
+ @SuppressWarnings("unchecked")
+ List<EPApp> apps = dataAccessService.getList(EPApp.class, null);
+ return apps;
+ }
+
+ @Override
+ public List<EcompApp> getEcompAppAppsFullList() {
+ return transformAppsToEcompApps(getAppsFullList());
+ }
+
+ @Override
+ public List<EcompApp> transformAppsToEcompApps(List<EPApp> appsList) {
+ List<EcompApp> ecompAppList = new ArrayList<EcompApp>();
+ for (EPApp app : appsList) {
+ EcompApp ecompApp = new EcompApp();
+ ecompApp.setId(app.getId());
+ ecompApp.setName(app.getName());
+ ecompApp.setImageUrl(app.getImageUrl());
+ ecompApp.setDescription(app.getDescription());
+ ecompApp.setNotes(app.getNotes());
+ ecompApp.setUrl(app.getUrl());
+ ecompApp.setAlternateUrl(app.getAlternateUrl());
+ ecompApp.setUebTopicName(app.getUebTopicName());
+ ecompApp.setUebKey(app.getUebKey());
+ ecompApp.setUebSecret(app.getUebSecret());
+ ecompApp.setEnabled(app.getEnabled());
+ ecompApp.setCentralAuth(app.getCentralAuth());
+ ecompApp.setNameSpace(app.getNameSpace());
+ ecompApp.setRestrictedApp(app.isRestrictedApp());
+ ecompAppList.add(ecompApp);
+ }
+ return ecompAppList;
+ }
+
+ @Override
+ public EPApp getApp(Long appId) {
+ try {
+ return (EPApp) dataAccessService.getDomainObject(EPApp.class, appId, null);
+ } catch (Exception e) {
+ EPLogUtil.logEcompError(logger, EPAppMessagesEnum.BeDaoSystemError, e);
+ return null;
+ }
+ }
+
+ @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);
+ 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);
+ }
+ }
+ return new ArrayList<AppIdAndNameTransportModel>();
+ }
+
+ @Override
+ public EPApp getAppDetail(String appName) {
+ final Map<String, String> params = new HashMap<String, String>();
+ try {
+ params.put("appName", appName);
+ @SuppressWarnings("unchecked")
+ List<EPApp> apps = (List<EPApp>) dataAccessService.executeNamedQuery("getMyloginAppDetails", params, null);
+ return (apps.size() > 0) ? apps.get(0) : null;
+ } catch(Exception e) {
+ EPLogUtil.logEcompError(logger, EPAppMessagesEnum.BeDaoSystemError, e);
+ return null;
+ }
+ }
+
+ @Override
+ public EPApp getAppDetailByAppName(String appName) {
+ final Map<String, String> params = new HashMap<String, String>();
+ try {
+ params.put("appName", appName);
+ @SuppressWarnings("unchecked")
+ List<EPApp> apps = (List<EPApp>) dataAccessService.executeNamedQuery("getAppDetailsByAppName", params, null);
+ if (apps.size() > 0) {
+ EPApp app = apps.get(0);
+ if (!EcompPortalUtils.checkIfRemoteCentralAccessAllowed()) {
+ app.setCentralAuth(false);
+ }
+ return app;
+ } else{
+ return null;
+ }
+ } catch (Exception e) {
+ EPLogUtil.logEcompError(logger, EPAppMessagesEnum.BeDaoSystemError, e);
+ return null;
+ }
+ }
+
+ @SuppressWarnings("unchecked")
+ @Override
+ public List<AppIdAndNameTransportModel> getAppsForSuperAdminAndAccountAdmin(EPUser user) {
+ if (adminRolesService.isSuperAdmin(user) || adminRolesService.isAccountAdmin(user)) {
+ String format = "";
+ String sql = "";
+ if (adminRolesService.isSuperAdmin(user)) {
+ format = "SELECT app.APP_ID, app.APP_NAME, app.APP_TYPE FROM FN_APP app "
+ + "where app.ENABLED = 'Y' AND app.app_type = 1";
+ } else {
+ format = "SELECT app.APP_ID, app.APP_NAME, 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' AND app.app_type = 1";
+ }
+ sql = String.format(format, user.getId());
+ // sql += " AND app.APP_REST_ENDPOINT IS NOT NULL AND
+ // app.APP_REST_ENDPOINT <> ''";
+ 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);
+ }
+ }
+ return new ArrayList<AppIdAndNameTransportModel>();
+ }
+
+ protected void logQuery(String sql) {
+ logger.debug(EELFLoggerDelegate.debugLogger, "logQuery: " + sql);
+ }
+
+ public DataAccessService getDataAccessService() {
+ return dataAccessService;
+ }
+
+ public void setDataAccessService(DataAccessService dataAccessService) {
+ this.dataAccessService = dataAccessService;
+ }
+
+ @SuppressWarnings("unchecked")
+ @Override
+ public List<AdminUserApplications> getAppsAdmins() {
+ try {
+ Map<String, String> params = new HashMap<>();
+ params.put("accountAdminRoleId", ACCOUNT_ADMIN_ROLE_ID);
+ List<AdminUserApp> adminApps = (List<AdminUserApp>) dataAccessService.executeNamedQuery("getAppsAdmins",
+ params, null);
+ return aggregateRowsResultsByUserId(adminApps);
+ } catch (Exception e) {
+ EPLogUtil.logEcompError(logger, EPAppMessagesEnum.BeDaoSystemError, e);
+ return null;
+ }
+ }
+
+ private List<AdminUserApplications> aggregateRowsResultsByUserId(List<AdminUserApp> adminApps) {
+ HashMap<Long, AdminUserApplications> adminUserApplications = new HashMap<Long, AdminUserApplications>();
+ for (AdminUserApp app : adminApps) {
+ Long userId = app.getUser_Id();
+ if (adminUserApplications.get(userId) == null)
+ adminUserApplications.put(userId, new AdminUserApplications(app));
+ else
+ adminUserApplications.get(userId).addApp(app.getAppId(), app.getAppName());
+ }
+ return new ArrayList<AdminUserApplications>(adminUserApplications.values());
+ }
+
+ @Override
+ public List<AppsResponse> getAllApps(Boolean all) {
+ // If all is true, return both active and inactive apps. Otherwise, just
+ // active apps.
+ @SuppressWarnings("unchecked")
+ // Sort the list by application name so the drop-down looks pretty.
+ List<EPApp> apps = all
+ ? (List<EPApp>) dataAccessService.getList(EPApp.class, " where id != " + ECOMP_APP_ID, "name", null)
+ : (List<EPApp>) dataAccessService.getList(EPApp.class,
+ " where ( enabled = 'Y' or id = " + ECOMP_APP_ID + ")", "name", null);
+
+ List<AppsResponse> appsModified = new ArrayList<AppsResponse>();
+ for (EPApp app : apps) {
+ appsModified.add(new AppsResponse(app.getId(), app.getName(), app.isRestrictedApp(), app.getEnabled()));
+ }
+ return appsModified;
+ }
+
+ @Override
+ public UserRoles getUserProfile(String loginId) {
+ final Map<String, String> params = new HashMap<>();
+ params.put("org_user_id", loginId);
+ @SuppressWarnings("unchecked")
+ List<UserRole> userRoleList = dataAccessService.executeNamedQuery( "getUserRoles", params, null);
+ ArrayList<UserRoles> usersRolesList = aggregateUserProfileRowsResultsByRole(userRoleList);
+ if (usersRolesList == null || usersRolesList.size() < 1)
+ return null;
+
+ return usersRolesList.get(0);
+ }
+
+ @Override
+ public UserRoles getUserProfileNormalized(EPUser user) {
+ // Check database.
+ UserRoles userAndRoles = getUserProfile(user.getLoginId());
+ // If no roles are defined, treat this user as a guest.
+ if (user.isGuest() || userAndRoles == null) {
+ logger.debug(EELFLoggerDelegate.debugLogger, "getUserProfile: treating user {} as guest",
+ user.getLoginId());
+ UserRole userRole = new UserRole();
+ userRole.setUser_Id(user.getId());
+ userRole.setOrgUserId(user.getLoginId());
+ userRole.setFirstName(user.getFirstName());
+ userRole.setLastName(user.getLastName());
+ userRole.setRoleId(-1L);
+ userRole.setRoleName("Guest");
+ userRole.setUser_Id(-1L);
+ userAndRoles = new UserRoles(userRole);
+ }
+
+ return userAndRoles;
+ }
+
+ protected ArrayList<UserRoles> aggregateUserProfileRowsResultsByRole(List<UserRole> userRoleList) {
+ HashMap<String, UserRoles> userRoles = new HashMap<String, UserRoles>();
+ for (UserRole user : userRoleList) {
+ String orgUserId = user.getOrgUserId();
+ if (userRoles.get(orgUserId) == null)
+ userRoles.put(orgUserId, new UserRoles(user));
+ else
+ userRoles.get(orgUserId).addRole(user.getRoleName());
+ }
+ return new ArrayList<UserRoles>(userRoles.values());
+ }
+
+ private boolean isRestrictedApp(Long appId) {
+ EPApp app = getApp(appId);
+ return app.isRestrictedApp();
+ }
+
+ // For the functional menu edit
+ @Override
+ public List<LocalRole> getAppRoles(Long appId) {
+ String sql = "";
+ if (isRestrictedApp(appId)) {
+ sql = "SELECT ROLE_ID, ROLE_NAME from FN_ROLE where UPPER(ACTIVE_YN) = 'Y' AND ROLE_ID = '" + RESTRICTED_APP_ROLE_ID + "'";
+ }else if(appId == 1){
+ sql = "SELECT ROLE_ID, ROLE_NAME from FN_ROLE where UPPER(ACTIVE_YN) = 'Y' AND APP_ID IS NULL";
+ }else{
+ sql = "SELECT ROLE_ID, ROLE_NAME from FN_ROLE where UPPER(ACTIVE_YN) = 'Y' AND APP_ID = '" + appId + "'";
+ }
+ logQuery(sql);
+ @SuppressWarnings("unchecked")
+ List<LocalRole> appRoles = dataAccessService.executeSQLQuery(sql, LocalRole.class, null);
+ return appRoles;
+ }
+
+ protected String userAppsQuery(EPUser user) {
+ StringBuilder query = new StringBuilder();
+ if (adminRolesService.isSuperAdmin(user)) {
+ query.append("SELECT * FROM FN_APP where FN_APP.ENABLED = 'Y' ORDER BY APP_NAME");
+ } else {
+ query.append("SELECT * FROM FN_APP join FN_USER_ROLE ON FN_USER_ROLE.APP_ID = FN_APP.APP_ID where ");
+ query.append(
+ "FN_USER_ROLE.USER_ID = " + user.getId() + " AND FN_USER_ROLE.ROLE_ID != " + SUPER_ADMIN_ROLE_ID);
+ query.append(" AND FN_APP.ENABLED = 'Y'");
+ }
+ return query.toString();
+ }
+
+ protected FieldsValidator onboardingAppFieldsChecker(OnboardingApp onboardingApp) {
+ FieldsValidator fieldsValidator = new FieldsValidator();
+ 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
+ // 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))) {
+ fieldsValidator.httpStatusCode = new Long(HttpServletResponse.SC_BAD_REQUEST);
+ }
+ return fieldsValidator;
+ }
+
+ @Override
+ public List<EPApp> getUserApps(EPUser user) {
+ List<EPApp> openApps = getOpenApps();
+
+ if (user.isGuest()) {
+ return openApps;
+ } else {
+ String sql = userAppsQuery(user);
+ logQuery(sql);
+
+ // TreeSet<EPApp> distinctApps = new TreeSet<EPApp>();
+ List<EPApp> appsList = new ArrayList<>();
+ @SuppressWarnings("unchecked")
+ List<EPApp> adminApps = dataAccessService.executeSQLQuery(sql, EPApp.class, null);
+ HashSet<EPApp> appSet = new HashSet<>();
+ for (EPApp app : adminApps) {
+ appSet.add(app);
+ appsList.add(app);
+ }
+
+ for (EPApp app : openApps) {
+ if (!appSet.contains(app))
+ appsList.add(app);
+ }
+
+ return appsList;
+ }
+ }
+
+ @Override
+ public List<EPApp> getPersAdminApps(EPUser user) {
+ final Map<String, Long> params = new HashMap<>();
+ params.put("userId", user.getId());
+ // Named query is stored in EP.hbm.xml, mapped to EPApp
+ @SuppressWarnings("unchecked")
+ List<EPApp> list = dataAccessService.executeNamedQuery("getPersAdminApps", params, null);
+ return list;
+ }
+
+ @Override
+ public List<EPApp> getPersUserApps(EPUser user) {
+ final Map<String, Long> params = new HashMap<>();
+ params.put("userId", user.getId());
+ // Named query is stored in EP.hbm.xml, mapped to EPApp
+ @SuppressWarnings("unchecked")
+ List<EPApp> list = dataAccessService.executeNamedQuery("getPersUserApps", params, null);
+ return list;
+ }
+
+ /*
+ * (non-Javadoc)
+ *
+ * @see
+ * org.openecomp.portalapp.portal.service.EPAppService#getAppCatalog(
+ * org.openecomp.portalapp.portal.domain.EPUser)
+ */
+ @Override
+ public List<AppCatalogItem> getUserAppCatalog(EPUser user) {
+ final Map<String, Long> params = new HashMap<>();
+ params.put("userId", user.getId());
+ // Named query is stored in EP.hbm.xml, mapped to AppCatalogItem
+ @SuppressWarnings("unchecked")
+ List<AppCatalogItem> list = dataAccessService.executeNamedQuery("getUserAppCatalog", params, null);
+ return list;
+ }
+
+ /*
+ * (non-Javadoc)
+ *
+ * @see
+ * org.openecomp.portalapp.portal.service.EPAppService#getAdminAppCatalog(
+ * org.openecomp.portalapp.portal.domain.EPUser)
+ */
+ @Override
+ public List<AppCatalogItem> getAdminAppCatalog(EPUser user) {
+ final Map<String, Long> params = new HashMap<>();
+ params.put("userId", user.getId());
+ // Named query is stored in EP.hbm.xml, mapped to AppCatalogItem
+ @SuppressWarnings("unchecked")
+ List<AppCatalogItem> list = dataAccessService.executeNamedQuery("getAdminAppCatalog", params, null);
+ return list;
+ }
+
+ private List<EPApp> getOpenApps() {
+ @SuppressWarnings("unchecked")
+ List<EPApp> openApps = dataAccessService.getList(EPApp.class, " where open='Y' and enabled='Y'", null, null);
+ return openApps;
+ }
+
+ @SuppressWarnings("unchecked")
+ @Override
+ public List<EPApp> getAppsOrderByName(EPUser user) {
+ final Map<String, Long> params = new HashMap<>();
+ List<EPApp> sortedAppsByName = null;
+ try {
+ if (adminRolesService.isSuperAdmin(user)) {
+ params.put("userId", user.getId());
+ sortedAppsByName = dataAccessService.executeNamedQuery("getPersAdminAppsOrderByName", params, null);
+ } else {
+ params.put("userId", user.getId());
+ sortedAppsByName = dataAccessService.executeNamedQuery("getPersUserAppsOrderByName", params, null);
+ }
+ } catch (Exception e) {
+ logger.error(EELFLoggerDelegate.errorLogger, "getAppsOrderByName failed", e);
+ }
+ return sortedAppsByName;
+ }
+
+ @SuppressWarnings("unchecked")
+ @Override
+ public List<EPApp> getAppsOrderByLastUsed(EPUser user) {
+
+ final Map<String, Long> params = new HashMap<>();
+ List<EPApp> sortedAppsByLastUsed = new ArrayList<EPApp>();
+ List<EPApp> finalsortedAppsByLastUsed = new ArrayList<EPApp>();
+ try {
+ if (adminRolesService.isSuperAdmin(user)) {
+ params.put("userId", user.getId());
+ sortedAppsByLastUsed = dataAccessService.executeNamedQuery("getAdminAppsOrderByLastUsed", params, null);
+ } else {
+ params.put("userId", user.getId());
+ sortedAppsByLastUsed = dataAccessService.executeNamedQuery("getUserAppsOrderByLastUsed", params, null);
+ }
+ Set<String> epAppSet = new HashSet<String>();
+ for (EPApp eapp : sortedAppsByLastUsed)
+ if (!epAppSet.contains(eapp.getName())) {
+ finalsortedAppsByLastUsed.add(eapp);
+ epAppSet.add(eapp.getName());
+ }
+
+ } catch (Exception e) {
+ logger.error(EELFLoggerDelegate.errorLogger, "getAppsOrderByLastUsed failed", e);
+ }
+ return finalsortedAppsByLastUsed;
+ }
+
+ @SuppressWarnings("unchecked")
+ @Override
+ public List<EPApp> getAppsOrderByMostUsed(EPUser user) {
+ final Map<String, Long> params = new HashMap<>();
+ List<EPApp> sortedAppsByMostUsed = new ArrayList<EPApp>();
+ List<EPApp> finalsortedAppsByMostUsed = new ArrayList<EPApp>();
+ try {
+ if (adminRolesService.isSuperAdmin(user)) {
+ params.put("userId", user.getId());
+ sortedAppsByMostUsed = dataAccessService.executeNamedQuery("getAdminAppsOrderByMostUsed", params, null);
+ } else {
+ params.put("userId", user.getId());
+ sortedAppsByMostUsed = dataAccessService.executeNamedQuery("getUserAppsOrderByMostUsed", params, null);
+ }
+ Set<String> epAppSet = new HashSet<String>();
+
+ for (EPApp eapp : sortedAppsByMostUsed) {
+ if (!epAppSet.contains(eapp.getName())) {
+ finalsortedAppsByMostUsed.add(eapp);
+ epAppSet.add(eapp.getName());
+ }
+ }
+ } catch (Exception e) {
+ logger.error(EELFLoggerDelegate.errorLogger, "getAppsOrderByMostUsed failed", e);
+ }
+
+ return finalsortedAppsByMostUsed;
+ }
+
+ /*
+ * This Method retrieves the User Apps by Sort Manual Preference
+ *
+ * @param: user--contains LoggedIn User Data
+ */
+ @SuppressWarnings("unchecked")
+ @Override
+ public List<EPApp> getAppsOrderByManual(EPUser user) {
+ final Map<String, Long> params = new HashMap<>();
+ List<EPApp> sortedAppsByManual = new ArrayList<EPApp>();
+ List<EPApp> finalsortedAppsByManual = new ArrayList<EPApp>();
+ try {
+ if (adminRolesService.isSuperAdmin(user)) {
+ params.put("userId", user.getId());
+ sortedAppsByManual = dataAccessService.executeNamedQuery("getAdminAppsOrderByManual", params, null);
+ } else {
+ params.put("userId", user.getId());
+ sortedAppsByManual = dataAccessService.executeNamedQuery("getUserAppsOrderByManual", params, null);
+ }
+ Set<String> epAppSet = new HashSet<String>();
+
+ for (EPApp eapp : sortedAppsByManual) {
+ if (!epAppSet.contains(eapp.getName())) {
+ finalsortedAppsByManual.add(eapp);
+ epAppSet.add(eapp.getName());
+ }
+ }
+ } catch (Exception e) {
+ logger.error(EELFLoggerDelegate.errorLogger, "getAppsOrderByManual failed", e);
+ }
+ return finalsortedAppsByManual;
+ }
+
+ @Override
+ public List<OnboardingApp> getOnboardingApps() {
+ @SuppressWarnings("unchecked")
+ List<EPApp> apps = dataAccessService.getList(EPApp.class, " where id!=" + ECOMP_APP_ID, null, null);
+ List<OnboardingApp> onboardingAppsList = new ArrayList<OnboardingApp>();
+ for (EPApp app : apps) {
+ OnboardingApp onboardingApp = new OnboardingApp();
+ createOnboardingFromApp(app, onboardingApp);
+ onboardingAppsList.add(onboardingApp);
+ }
+ return onboardingAppsList;
+ }
+
+ @Override
+ public List<OnboardingApp> getEnabledNonOpenOnboardingApps() {
+ @SuppressWarnings("unchecked")
+ List<EPApp> apps = dataAccessService.getList(EPApp.class,
+ " where enabled = true and open = false and id!=" + ECOMP_APP_ID, null, null);
+ List<OnboardingApp> onboardingAppsList = new ArrayList<OnboardingApp>();
+ for (EPApp app : apps) {
+ OnboardingApp onboardingApp = new OnboardingApp();
+ createOnboardingFromApp(app, onboardingApp);
+ onboardingAppsList.add(onboardingApp);
+ }
+ return onboardingAppsList;
+ }
+
+ @SuppressWarnings("unchecked")
+ private void validateOnboardingApp(OnboardingApp onboardingApp, FieldsValidator fieldsValidator) {
+ boolean duplicatedUrl = false;
+ boolean duplicatedName = false;
+ List<EPApp> apps;
+ if (onboardingApp.id == null) {
+ List<Criterion> restrictionsList = new ArrayList<Criterion>();
+ Criterion urlCrit =Restrictions.eq("url", onboardingApp.url);
+ Criterion nameCrit = Restrictions.eq("name",onboardingApp.name);
+ Criterion orCrit = Restrictions.or(urlCrit, nameCrit);
+
+ restrictionsList.add(orCrit);
+ apps = (List<EPApp>) dataAccessService.getList(EPApp.class, null, restrictionsList, null);
+
+
+ } else {
+ List<Criterion> restrictionsList = new ArrayList<Criterion>();
+ Criterion idCrit =Restrictions.eq("id", onboardingApp.id);
+ Criterion urlCrit =Restrictions.eq("url", onboardingApp.url);
+ Criterion nameCrit = Restrictions.eq("name",onboardingApp.name);
+ Criterion orCrit = Restrictions.or(idCrit, urlCrit, nameCrit);
+
+ restrictionsList.add(orCrit);
+ apps = (List<EPApp>) dataAccessService.getList(EPApp.class, null, restrictionsList, null);
+
+ }
+ for (EPApp app : apps) {
+ if (onboardingApp.id != null && onboardingApp.id.equals(app.getId())) {
+ continue;
+ }
+ if (!duplicatedUrl && app.getUrl().equalsIgnoreCase(onboardingApp.url)) {
+ duplicatedUrl = true;
+ if (duplicatedName) {
+ break;
+ }
+ }
+ if (!duplicatedName && app.getName().equalsIgnoreCase(onboardingApp.name)) {
+ duplicatedName = true;
+ if (duplicatedUrl) {
+ break;
+ }
+ }
+ }
+ if (duplicatedUrl || duplicatedName) {
+ if (duplicatedUrl) {
+ fieldsValidator.addProblematicFieldName(urlField);
+ }
+ if (duplicatedName) {
+ fieldsValidator.addProblematicFieldName(nameField);
+ }
+ fieldsValidator.httpStatusCode = new Long(HttpServletResponse.SC_CONFLICT);
+ fieldsValidator.errorCode = new Long(EPCommonSystemProperties.DUBLICATED_FIELD_VALUE_ECOMP_ERROR);
+ }
+ }
+
+ @Override
+ public FieldsValidator modifyOnboardingApp(OnboardingApp modifiedOnboardingApp, EPUser user) {
+ logger.debug(EELFLoggerDelegate.debugLogger, "LR: entering modifyOnboardingApp");
+ FieldsValidator fieldsValidator = onboardingAppFieldsChecker(modifiedOnboardingApp);
+ if (fieldsValidator.httpStatusCode.intValue() == HttpServletResponse.SC_OK) {
+ validateOnboardingApp(modifiedOnboardingApp, fieldsValidator);
+ }
+ if (fieldsValidator.httpStatusCode.intValue() == HttpServletResponse.SC_OK) {
+ if (modifiedOnboardingApp.id != null) {
+ updateApp(modifiedOnboardingApp.id, modifiedOnboardingApp, fieldsValidator, user);
+ } else {
+ fieldsValidator.httpStatusCode = new Long(HttpServletResponse.SC_BAD_REQUEST);
+ }
+ }
+ return fieldsValidator;
+ }
+
+ @Override
+ public FieldsValidator addOnboardingApp(OnboardingApp newOnboardingApp, EPUser user) {
+ FieldsValidator fieldsValidator = onboardingAppFieldsChecker(newOnboardingApp);
+ if (fieldsValidator.httpStatusCode.intValue() == HttpServletResponse.SC_OK) {
+ validateOnboardingApp(newOnboardingApp, fieldsValidator);
+ }
+ if (fieldsValidator.httpStatusCode.intValue() == HttpServletResponse.SC_OK) {
+ if (newOnboardingApp.id == null) {
+ updateApp(null, newOnboardingApp, fieldsValidator, user);
+ } else {
+ fieldsValidator.httpStatusCode = new Long(HttpServletResponse.SC_BAD_REQUEST);
+ }
+ }
+ return fieldsValidator;
+ }
+
+ @SuppressWarnings("unchecked")
+ @Override
+ public FieldsValidator deleteOnboardingApp(EPUser user, Long appid) {
+ FieldsValidator fieldsValidator = new FieldsValidator();
+ if (!adminRolesService.isSuperAdmin(user)) {
+ fieldsValidator.httpStatusCode = new Long(HttpServletResponse.SC_FORBIDDEN);
+ return fieldsValidator;
+ }
+ final Map<String, Long> params = new HashMap<>();
+ params.put("app_id", appid);
+ List<EPUserAppRolesRequest> EPUserAppRolesRequestList= new ArrayList<>();
+ EPUserAppRolesRequestList = dataAccessService.executeNamedQuery( "getRequestIdsForApp", params, null);
+ for(int i=0;i<EPUserAppRolesRequestList.size();i++)
+ {
+ dataAccessService.deleteDomainObjects(EPUserAppRolesRequestDetail.class , "req_id=" + EPUserAppRolesRequestList.get(i).getId(),null);
+
+ }
+ Session localSession = null;
+ Transaction transaction = null;
+ Boolean result = false;
+ try {
+ localSession = sessionFactory.openSession();
+ transaction = localSession.beginTransaction();
+
+ // 1) Remove the URL for any functional menu item associated with
+ // this app
+ logger.debug(EELFLoggerDelegate.debugLogger, "deleteOnboardingApp: Deleting URL for any functional menu item associated with app");
+ // Named query is stored in EP.hbm.xml, mapped to EPApp
+ dataAccessService.executeNamedQuery("updateMenuFunctionalAndRoles", params, null);
+ logger.debug(EELFLoggerDelegate.debugLogger, "deleteOnboardingApp: Deleted URL for any functional menu item associated with app");
+
+ logger.debug(EELFLoggerDelegate.debugLogger, "deleteOnboardingApp: Deleting favorites associated with a menu item that is associated with this app");
+ // 2)Remove any favorites associated with a menu item that is
+ // associated with this app
+ dataAccessService.executeNamedQuery("removeAppFromMenuFavorites", params, null);
+ logger.debug(EELFLoggerDelegate.debugLogger, "deleteOnboardingApp: Deleted favorites associated with a menu item that is associated with this app");
+
+ logger.debug(EELFLoggerDelegate.debugLogger, "deleteOnboardingApp: Deleting role, appid records from fn_menu_functional_role that are associated with this app");
+ // 3)Remove all role, appid records from fn_menu_functional_role
+ // that are associated with this app
+ dataAccessService.executeNamedQuery("removeAppFromMenuFunctionalRoles", params, null);
+ logger.debug(EELFLoggerDelegate.debugLogger, "deleteOnboardingApp: Deleted role, appid records from fn_menu_functional_role that are associated with this app");
+
+ logger.debug(EELFLoggerDelegate.debugLogger, "deleteOnboardingApp: Deleting all roles, rolefunctions, appid records from ep_app_role_function that are associated with this app");
+ // 4)Remove all roles, rolefunctions, appid records from ep_app_role_function
+ // that are associated with this app
+ dataAccessService.executeNamedQuery("removeAppFromEpAppRoleFunction", params, null);
+ logger.debug(EELFLoggerDelegate.debugLogger, "deleteOnboardingApp: Deleted all roles, rolefunctions, appid records from ep_app_role_function that are associated with this app");
+
+ logger.debug(EELFLoggerDelegate.debugLogger, "deleteOnboardingApp: Deleting all rolefunctions, appid records from ep_app_function that are associated with this app");
+ // 5)Remove all rolefunctions, appid records from ep_app_function
+ // that are associated with this app
+ dataAccessService.executeNamedQuery("removeAppFromEpAppFunction", params, null);
+ logger.debug(EELFLoggerDelegate.debugLogger, "deleteOnboardingApp: Deleted all rolefunctions, appid records from ep_app_function that are associated with this app");
+
+ logger.debug(EELFLoggerDelegate.debugLogger, "deleteOnboardingApp: Deleting all records from fn_user_role associated with this app");
+ // 6)Remove all records from fn_user_role associated with this app
+ dataAccessService.executeNamedQuery("removeAppFromFnUserRole", params, null);
+ logger.debug(EELFLoggerDelegate.debugLogger, "deleteOnboardingApp: Deleted all records from fn_user_role associated with this app");
+
+ logger.debug(EELFLoggerDelegate.debugLogger, "deleteOnboardingApp: Deleting any widgets associated with this app");
+ // 7)Remove any widgets associated with this app
+ dataAccessService.executeNamedQuery("removeAppFromEpWidgetCatalogRole", params, null);
+ logger.debug(EELFLoggerDelegate.debugLogger, "deleteOnboardingApp: Deleted widgets associated with this app");
+
+ logger.debug(EELFLoggerDelegate.debugLogger, "deleteOnboardingApp: Deleting any roles associated with this app");
+ // 8)Remove any roles associated with this app
+ dataAccessService.executeNamedQuery("removeAppFromEpRoleNotification", params, null);
+ logger.debug(EELFLoggerDelegate.debugLogger, "deleteOnboardingApp: Deleted roles associated with this app");
+
+ logger.debug(EELFLoggerDelegate.debugLogger, "deleteOnboardingApp: Deleting all records from fn_role associated with this app");
+ // 9)Remove all records from fn_role associated with this app
+ dataAccessService.executeNamedQuery("removeAppFromFnRole", params, null);
+ logger.debug(EELFLoggerDelegate.debugLogger, "deleteOnboardingApp: Deleted all records from fn_role associated with this app");
+
+ logger.debug(EELFLoggerDelegate.debugLogger, "deleteOnboardingApp: Deleting in table fn_app_contact_us entries associated with this app");
+ // 10)Remove app contact us entries
+ dataAccessService.executeNamedQuery("removeAppFromAppContactUs", params, null);
+ logger.debug(EELFLoggerDelegate.debugLogger, "deleteOnboardingApp: Deleted in table fn_app_contact_us entries associated with this app");
+
+ logger.debug(EELFLoggerDelegate.debugLogger, "deleteOnboardingApp: Deleting rows in the fn_pers_user_app_sel table");
+ // 11)Remove rows in the app personalization selection table
+ dataAccessService.executeNamedQuery("removeAppFromEpPersUserAppSel", params, null);
+ logger.debug(EELFLoggerDelegate.debugLogger, "deleteOnboardingApp: Deleted rows in the fn_pers_user_app_sel table");
+
+ logger.debug(EELFLoggerDelegate.debugLogger, "deleteOnboardingApp: Deleting rows in the ep_pers_user_app_man_sort table");
+ // 12)Remove rows in the app personalization sort table
+ dataAccessService.executeNamedQuery("removeAppFromEpPersUserAppManSort", params, null);
+ logger.debug(EELFLoggerDelegate.debugLogger, "deleteOnboardingApp: Deleted rows in the ep_pers_user_app_man_sort table");
+
+ logger.debug(EELFLoggerDelegate.debugLogger, "deleteOnboardingApp: Deleting rows in the ep_user_roles_request table");
+ // 13)Remove rows in the app personalization sort table
+ dataAccessService.executeNamedQuery("removeAppFromEpUserRolesRequest", params, null);
+ logger.debug(EELFLoggerDelegate.debugLogger, "deleteOnboardingApp: Deleted rows in the ep_user_roles_request table");
+
+ logger.debug(EELFLoggerDelegate.debugLogger, "deleteOnboardingApp: Deleting rows in the ep_web_analytics_source");
+ // 14)Remove rows in the ep_web_analytics_source
+ dataAccessService.executeNamedQuery("removeAppFromEpWebAnalytics", params, null);
+ logger.debug(EELFLoggerDelegate.debugLogger, "deleteOnboardingApp: Deleted rows in the ep_web_analytics_source");
+
+ logger.debug(EELFLoggerDelegate.debugLogger, "deleteOnboardingApp: Deleting the app ");
+ // 15)Delete the app
+ dataAccessService.executeNamedQuery("removeAppFromFnApp", params, null);
+ logger.debug(EELFLoggerDelegate.debugLogger, "deleteOnboardingApp: Deleted the app");
+
+ /*
+ // 1) Remove the URL for any functional menu item associated with
+ // this app
+ String sql = "UPDATE fn_menu_functional m, fn_menu_functional_roles mr SET m.url='' "
+ + " WHERE m.menu_id=mr.menu_id " + " AND mr.app_id='" + appid + "'";
+ logQuery(sql);
+ Query query = localSession.createSQLQuery(sql);
+ query.executeUpdate();
+
+ // Remove any favorites associated with a menu item that is
+ // associated with this app
+ sql = "Delete from fn_menu_favorites " + " using fn_menu_favorites inner join fn_menu_functional_roles "
+ + " where fn_menu_functional_roles.app_id='" + appid + "' "
+ + " AND fn_menu_functional_roles.menu_id=fn_menu_favorites.menu_id";
+ logQuery(sql);
+ query = localSession.createSQLQuery(sql);
+ query.executeUpdate();
+
+ // Remove all role, appid records from fn_menu_functional_role
+ // that are associated with this app
+ sql = "delete from fn_menu_functional_roles where app_id='" + appid + "'";
+ logQuery(sql);
+ query = localSession.createSQLQuery(sql);
+ query.executeUpdate();
+
+
+ // Remove all roles, rolefunctions, appid records from ep_app_role_function
+ // that are associated with this app
+ sql = "DELETE FROM ep_app_role_function WHERE app_id='" + appid + "'";
+ logger.debug(EELFLoggerDelegate.debugLogger, "Executing query: " + sql);
+ query = localSession.createSQLQuery(sql);
+ query.executeUpdate();
+
+ //Remove all rolefunctions, appid records from ep_app_function
+ // that are associated with this app
+ sql = "DELETE FROM ep_app_function WHERE app_id='" + appid + "'";
+ logger.debug(EELFLoggerDelegate.debugLogger, "Executing query: " + sql);
+ query = localSession.createSQLQuery(sql);
+ query.executeUpdate();
+
+ // Remove all records from fn_user_role associated with this app
+ sql = "delete from fn_user_role where app_id='" + appid + "'";
+ logQuery(sql);
+ query = localSession.createSQLQuery(sql);
+ query.executeUpdate();
+
+ // Remove any widgets associated with this app
+ sql = "delete from ep_widget_catalog_role where app_id='" + appid + "'";
+ logQuery(sql);
+ query = localSession.createSQLQuery(sql);
+ query.executeUpdate();
+
+ // Remove any roles associated with this app
+ sql = "delete from ep_role_notification " + " using ep_role_notification inner join fn_role "
+ + " where fn_role.app_id='" + appid + "' " + " and ep_role_notification.role_id= fn_role.role_id";
+ logQuery(sql);
+ query = localSession.createSQLQuery(sql);
+ query.executeUpdate();
+
+ // Remove all records from fn_role associated with this app
+ sql = "delete from fn_role where app_id='" + appid + "'";
+ logQuery(sql);
+ query = localSession.createSQLQuery(sql);
+ query.executeUpdate();
+
+ // Remove app contact us entries
+ sql = "delete from fn_app_contact_us where app_id='" + appid + "'";
+ logQuery(sql);
+ query = localSession.createSQLQuery(sql);
+ query.executeUpdate();
+
+ // Remove rows in the app personalization selection table
+ sql = "delete from fn_pers_user_app_sel where app_id='" + appid + "'";
+ logQuery(sql);
+ query = localSession.createSQLQuery(sql);
+ query.executeUpdate();
+
+ // Remove rows in the app personalization sort table
+ sql = "delete from ep_pers_user_app_man_sort where app_id='" + appid + "'";
+ logQuery(sql);
+ query = localSession.createSQLQuery(sql);
+ query.executeUpdate();
+
+ // Remove rows in the app personalization sort table
+ sql = "delete from ep_user_roles_request where app_id='" + appid + "'";
+ logQuery(sql);
+ query = localSession.createSQLQuery(sql);
+ query.executeUpdate();
+
+ // Remove rows in the app personalization sort table
+ sql = "delete from ep_web_analytics_source where app_id='" + appid + "'";
+ logQuery(sql);
+ query = localSession.createSQLQuery(sql);
+ query.executeUpdate();
+
+ // Delete the app
+ sql = "delete from fn_app where app_id='" + appid + "'";
+ logQuery(sql);
+ query = localSession.createSQLQuery(sql);
+ query.executeUpdate();
+
+ transaction.commit();
+ */
+ result = true;
+ logger.debug(EELFLoggerDelegate.debugLogger, "deleteOnboardingApp success");
+ } catch (Exception e) {
+ logger.error(EELFLoggerDelegate.errorLogger, "deleteOnboardingApp failed", e);
+ EPLogUtil.logEcompError(logger, EPAppMessagesEnum.BeDaoSystemError);
+ EcompPortalUtils.rollbackTransaction(transaction, "deleteOnboardingApp rollback, exception = " + e);
+ } finally {
+ EcompPortalUtils.closeLocalSession(localSession, "deleteOnboardingApp");
+ }
+ if (!result) {
+ fieldsValidator.httpStatusCode = new Long(HttpServletResponse.SC_INTERNAL_SERVER_ERROR);
+ }
+ return fieldsValidator;
+ }
+
+ private static Object syncRests = new Object();
+
+ // An app has been enabled/disabled. Must enable/disable all associated
+ // functional menu items.
+ protected void setFunctionalMenuItemsEnabled(Session localSession, Boolean enabled, Long appId) {
+ String active_yn = enabled ? "Y" : "N";
+ String sql = "SELECT m.menu_id, m.column_num, m.text, m.parent_menu_id, m.url, m.active_yn "
+ + "FROM fn_menu_functional m, fn_menu_functional_roles r " + "WHERE m.menu_id = r.menu_id "
+ + " AND r.app_id = '" + appId + "' ";
+ logQuery(sql);
+ @SuppressWarnings("unchecked")
+ List<FunctionalMenuItem> menuItems = dataAccessService.executeSQLQuery(sql, FunctionalMenuItem.class, null);
+ for (FunctionalMenuItem menuItem : menuItems) {
+ FunctionalMenuItem myMenuItem = (FunctionalMenuItem) localSession.get(FunctionalMenuItem.class,
+ menuItem.menuId);
+ myMenuItem.active_yn = active_yn;
+ localSession.save(myMenuItem);
+ }
+ }
+
+ // Attention! If (appId == null) we use this function to create application
+ // otherwise we use it to modify existing application
+ protected void updateApp(Long appId, OnboardingApp onboardingApp, FieldsValidator fieldsValidator, EPUser user) {
+ logger.debug(EELFLoggerDelegate.debugLogger, "LR: entering updateApp");
+ // Separate out the code for a restricted app, since it doesn't need any
+ // of the UEB code.
+ if (onboardingApp.restrictedApp) {
+ boolean result = false;
+ Session localSession = null;
+ Transaction transaction = null;
+ try {
+ localSession = sessionFactory.openSession();
+ transaction = localSession.beginTransaction();
+ EPApp app;
+ if (appId == null) {
+ app = new EPApp();
+ } 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;
+ }
+ }
+ createAppFromOnboarding(app, onboardingApp, localSession);
+ localSession.saveOrUpdate(app);
+ // Enable or disable all menu items associated with this app
+ setFunctionalMenuItemsEnabled(localSession, onboardingApp.isEnabled, appId);
+ transaction.commit();
+ result = true;
+ } catch (Exception e) {
+ logger.error(EELFLoggerDelegate.errorLogger, "updateApp failed", e);
+ EcompPortalUtils.rollbackTransaction(transaction,
+ "updateApp rollback, exception = " + e.toString());
+ } finally {
+ EcompPortalUtils.closeLocalSession(localSession, "updateApp");
+ }
+ if (!result) {
+ fieldsValidator.httpStatusCode = new Long(HttpServletResponse.SC_INTERNAL_SERVER_ERROR);
+ }
+
+ } else {
+ updateRestrictedApp(appId, onboardingApp, fieldsValidator, user);
+
+ }
+ }
+
+ 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();
+ // -------------------------------------------------------------------------------------------
+ // Register this App with the UEB communication server.
+ // Save
+ // the App's unique mailbox/topic
+ // name and keys to the FN_APP table. The App's mailbox
+ // and
+ // keys will be visible to the
+ // admin on the ECOMP portal.
+ // -------------------------------------------------------------------------------------------
+ TopicManager topicManager = new TopicManager() {
+
+ EPAppCommonServiceImpl service;
+
+ public void init(EPAppCommonServiceImpl _service) {
+ service = _service;
+ }
+
+ public void createTopic(String key, String secret, String topicName,
+ String topicDescription) throws HttpException, CambriaApiException, IOException {
+
+ init(EPAppCommonServiceImpl.this);
+ final LinkedList<String> urlList = (LinkedList<String>) Helper.uebUrlList();
+ if (logger.isInfoEnabled()) {
+ logger.info("==> createTopic");
+ logger.info("topicName: " + topicName);
+ logger.info("topicDescription: " + topicDescription);
+ }
+ CambriaTopicManager tm = null;
+ try {
+ tm = service.getTopicManager(urlList, key, secret);
+ } catch (Exception e) {
+ logger.error("pub.build Exception ", e);
+ throw new CambriaApiException(topicName);
+ }
+ tm.createTopic(topicName, topicDescription, 1, 1);
+ }
+
+ public void addPublisher(String topicOwnerKey, String topicOwnerSecret, String publisherKey,
+ String topicName) throws HttpException, CambriaApiException, IOException {
+ logger.info("==> addPublisher to topic " + topicName);
+ final LinkedList<String> urlList = (LinkedList<String>) Helper.uebUrlList();
+ CambriaTopicManager tm = null;
+ try {
+ tm = service.getTopicManager(urlList, topicOwnerKey, topicOwnerSecret);
+ } catch (Exception e) {
+ logger.error("pub.build Exception ", e);
+ throw new CambriaApiException(topicName);
+ }
+ tm.allowProducer(topicName, publisherKey);
+ }
+
+ };
+ final CambriaIdentityManager im = new CambriaClientBuilders.IdentityManagerBuilder()
+ .usingHosts(Helper.uebUrlList()).build();
+ com.att.nsa.apiClient.credentials.ApiCredential credential = im.createApiKey(user.getEmail(),
+ "ECOMP Portal Owner");
+ String appKey = credential.getApiKey();
+ String appSecret = credential.getApiSecret();
+ String appMailboxName = null;
+
+ int maxNumAttemptsToCreateATopic = 3;
+ boolean successfullyCreatedMailbox = false;
+ for (int i = 0; i < maxNumAttemptsToCreateATopic; i++) {
+ appMailboxName = "ECOMP-PORTAL-OUTBOX-" + (int) (Math.random() * 100000.0);
+
+ try {
+ topicManager.createTopic(
+ PortalApiProperties.getProperty(PortalApiConstants.UEB_APP_KEY),
+ PortalApiProperties.getProperty(PortalApiConstants.UEB_APP_SECRET),
+ appMailboxName, "ECOMP outbox for app" + onboardingApp.name);
+ successfullyCreatedMailbox = true;
+ logger.debug(EELFLoggerDelegate.debugLogger,
+ "Successfully created " + appMailboxName + " for App " + onboardingApp.name);
+ logger.debug(EELFLoggerDelegate.debugLogger, " Key = " + appKey + " Secret = "
+ + appSecret + " generated using = " + user.getEmail());
+ break;
+ } catch (HttpException e) {
+ EPLogUtil.logEcompError(logger, EPAppMessagesEnum.BeUebConnectionError, e);
+ if (e.getStatusCode() == 409) {
+ logger.error(EELFLoggerDelegate.errorLogger, "Topic/mailbox " + appMailboxName
+ + " already exists. Will try using a different name", e);
+ } else {
+ logger.error(EELFLoggerDelegate.errorLogger, "HttpException when onboarding App: ",
+ e);
+ }
+ }
+ }
+
+ if (successfullyCreatedMailbox) {
+ onboardingApp.setUebTopicName(appMailboxName);
+ onboardingApp.setUebKey(appKey);
+ onboardingApp.setUebSecret(appSecret);
+
+ try {
+ /*
+ * EP is a publisher to this App's new mailbox
+ */
+ topicManager.addPublisher(
+ PortalApiProperties.getProperty(PortalApiConstants.UEB_APP_KEY),
+ PortalApiProperties.getProperty(PortalApiConstants.UEB_APP_SECRET),
+ PortalApiProperties.getProperty(PortalApiConstants.UEB_APP_KEY),
+ appMailboxName);
+
+ /*
+ * This App is a subscriber of its own mailbox
+ */
+ topicManager.addSubscriber(
+ PortalApiProperties.getProperty(PortalApiConstants.UEB_APP_KEY),
+ PortalApiProperties.getProperty(PortalApiConstants.UEB_APP_SECRET), appKey,
+ appMailboxName);
+
+ /*
+ * This App is a publisher to EP
+ */
+ topicManager.addPublisher(
+ PortalApiProperties.getProperty(PortalApiConstants.UEB_APP_KEY),
+ PortalApiProperties.getProperty(PortalApiConstants.UEB_APP_SECRET), appKey,
+ PortalApiProperties.getProperty(PortalApiConstants.ECOMP_PORTAL_INBOX_NAME));
+ } catch (HttpException | CambriaApiException | IOException e) {
+ EPLogUtil.logEcompError(logger, EPAppMessagesEnum.BeUebRegisterOnboardingAppError, e);
+ logger.error(EELFLoggerDelegate.errorLogger,
+ "Error when configuring Publisher/Subscriber for App's new mailbox", e);
+ transaction.commit();
+ localSession.close();
+ fieldsValidator.httpStatusCode = new Long(HttpServletResponse.SC_CONFLICT);
+ return;
+ }
+ } else {
+ transaction.commit();
+ localSession.close();
+ fieldsValidator.httpStatusCode = new Long(HttpServletResponse.SC_CONFLICT);
+ return;
+ }
+ } 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, "LR: about to call createAppFromOnboarding");
+ createAppFromOnboarding(app, onboardingApp, localSession);
+ logger.debug(EELFLoggerDelegate.debugLogger,
+ "LR: updateApp: finished calling createAppFromOnboarding");
+ localSession.saveOrUpdate(app);
+ logger.debug(EELFLoggerDelegate.debugLogger,
+ "LR: updateApp: finished calling localSession.saveOrUpdate");
+ // Enable or disable all menu items associated with this app
+ setFunctionalMenuItemsEnabled(localSession, onboardingApp.isEnabled, appId);
+ logger.debug(EELFLoggerDelegate.debugLogger,
+ "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;
+ } catch (Exception e) {
+ logger.error(EELFLoggerDelegate.errorLogger, "updateApp failed", e);
+ EPLogUtil.logEcompError(logger, EPAppMessagesEnum.BeUebRegisterOnboardingAppError, e);
+ EPLogUtil.logEcompError(logger, EPAppMessagesEnum.BeDaoSystemError, e);
+ EcompPortalUtils.rollbackTransaction(transaction,
+ "updateApp rollback, exception = " + e.toString());
+ } finally {
+ EcompPortalUtils.closeLocalSession(localSession, "updateApp");
+ }
+ if (!result) {
+ fieldsValidator.httpStatusCode = new Long(HttpServletResponse.SC_INTERNAL_SERVER_ERROR);
+ }
+ }
+
+ }
+
+ public CambriaTopicManager getTopicManager(List<String> urlList, String key, String secret)
+ throws GeneralSecurityException, Exception {
+ throw new Exception("This method can only be invoked from child class");
+ }
+
+ /**
+ * Populates a transport model of the application from a database row model.
+ * Leaves out the thumbnail because the FE fetches images via a different
+ * API.
+ *
+ * @param app
+ * Model of database row
+ * @param onboardingApp
+ * Model for transport as JSON
+ */
+ @Override
+ public void createOnboardingFromApp(EPApp app, OnboardingApp onboardingApp) {
+ onboardingApp.id = app.getId();
+ onboardingApp.name = app.getName();
+ onboardingApp.imageUrl = app.getImageUrl();
+ onboardingApp.description = app.getDescription();
+ onboardingApp.notes = app.getNotes();
+ onboardingApp.url = app.getUrl();
+ onboardingApp.alternateUrl = app.getAlternateUrl();
+ onboardingApp.restUrl = app.getAppRestEndpoint();
+ onboardingApp.isOpen = app.getOpen();
+ onboardingApp.isEnabled = app.getEnabled();
+ onboardingApp.username = app.getUsername();
+ onboardingApp.appPassword = decryptedPassword(app.getAppPassword(), app);
+ onboardingApp.uebTopicName = app.getUebTopicName();
+ onboardingApp.uebKey = app.getUebKey();
+ onboardingApp.uebSecret = app.getUebSecret();
+ onboardingApp.isCentralAuth = app.getCentralAuth();
+ onboardingApp.nameSpace = app.getNameSpace();
+ onboardingApp.setRestrictedApp(app.isRestrictedApp());
+ // if (app.getThumbnail() != null)
+ // onboardingApp.thumbnail = new
+ // String(Base64.getEncoder().encode(app.getThumbnail()));
+ }
+
+ /**
+ * Creates a database object for an application from an uploaded transport
+ * model. Must decode the thumbnail, if any.
+ *
+ * @param app
+ * @param onboardingApp
+ * @param localSession
+ * @return The first argument.
+ */
+ protected EPApp createAppFromOnboarding(EPApp app, OnboardingApp onboardingApp, Session localSession) {
+ app.setName(onboardingApp.name);
+ app.setDescription(onboardingApp.description);
+ app.setNotes(onboardingApp.notes);
+ app.setUrl(onboardingApp.url);
+ app.setAlternateUrl(onboardingApp.alternateUrl);
+ app.setAppRestEndpoint(onboardingApp.restUrl);
+ app.setOpen(onboardingApp.isOpen);
+ app.setEnabled(onboardingApp.isEnabled);
+ app.setUsername(onboardingApp.username);
+ app.setAppPassword(this.encryptedPassword(onboardingApp.appPassword, app));
+ app.setUebTopicName(onboardingApp.uebTopicName);
+ app.setUebKey(onboardingApp.uebKey);
+ app.setUebSecret(onboardingApp.uebSecret);
+ app.setCentralAuth(onboardingApp.isCentralAuth);
+ app.setNameSpace(onboardingApp.nameSpace);
+ app.setRestrictedApp(onboardingApp.restrictedApp);
+ if (!StringUtils.isEmpty(onboardingApp.thumbnail)) {
+ logger.debug(EELFLoggerDelegate.debugLogger, "createAppFromOnboarding: onboarding thumbnail is NOT empty");
+ String[] splitBase64Thumbnail = onboardingApp.thumbnail.split("base64,");
+ logger.debug(EELFLoggerDelegate.debugLogger,
+ "createAppFromOnboarding: length of splitBase64Thumbnail: " + splitBase64Thumbnail.length);
+ if (splitBase64Thumbnail.length > 1) {
+ // This occurs when we have a new image, not an existing image
+ byte[] decodedImage = Base64.getDecoder().decode(splitBase64Thumbnail[1].getBytes());
+ logger.debug(EELFLoggerDelegate.debugLogger, "createAppFromOnboarding: finished calling decode");
+ // This is basically a boolean indicator that an image is
+ // present.
+ app.setImageUrl(constructImageName(onboardingApp));
+ app.setThumbnail(decodedImage);
+ }
+ } else if (app.getThumbnail() != null && onboardingApp.imageLink == null) {
+ // The thumbnail that came in from the json is empty; the previous
+ // thumbnail is NOT empty. Must delete it.
+ logger.debug(EELFLoggerDelegate.debugLogger,
+ "createAppFromOnboarding: onboarding thumbnail is empty; db thumbnail is NOT null");
+ app.setImageUrl(null);
+ app.setThumbnail(null);
+ } else {
+ logger.debug(EELFLoggerDelegate.debugLogger,
+ "createAppFromOnboarding: making no changes to thumbnail as imageLink is not null");
+ }
+ return app;
+ }
+
+ protected String constructImageName(OnboardingApp onboardingApp) {
+ return "portal_" + String.valueOf(onboardingApp.url.hashCode() + "_" + (int) (Math.random() * 100000.0))
+ + ".png";
+ }
+
+ // 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) {
+ try {
+ result = CipherUtil.decryptPKC(encryptedAppPwd,
+ SystemProperties.getProperty(SystemProperties.Decryption_Key));
+ } catch (Exception e) {
+ logger.error(EELFLoggerDelegate.errorLogger, "decryptedPassword failed for app " + app.getName(), e);
+ }
+ }
+ return result;
+ }
+
+ protected String encryptedPassword(String decryptedAppPwd, EPApp app) {
+ String result = "";
+ if (decryptedAppPwd != null & decryptedAppPwd.length() > 0) {
+ try {
+ result = CipherUtil.encryptPKC(decryptedAppPwd,
+ SystemProperties.getProperty(SystemProperties.Decryption_Key));
+ } catch (Exception e) {
+ logger.error(EELFLoggerDelegate.errorLogger, "encryptedPassword failed for app " + app.getName(), e);
+ }
+ }
+ return result;
+ }
+
+ @SuppressWarnings("unchecked")
+ @Override
+ public FieldsValidator saveWidgetsSortManual(List<EPWidgetsSortPreference> widgetsSortManual, EPUser user) {
+ FieldsValidator fieldsValidator = new FieldsValidator();
+ final Map<String, Long> params = new HashMap<>();
+ List<EPWidgetsManualSortPreference> epManualWidgets = new ArrayList<EPWidgetsManualSortPreference>();
+
+ try {
+ params.put("userId", user.getId());
+ epManualWidgets = dataAccessService.executeNamedQuery("userWidgetManualSortPrfQuery", params, null);
+ Map<Long, EPWidgetsManualSortPreference> existingWidgetsIds = new HashMap<Long, EPWidgetsManualSortPreference>();
+ for (EPWidgetsManualSortPreference userWidgetManualPref : epManualWidgets) {
+ existingWidgetsIds.put(userWidgetManualPref.getWidgetId(), userWidgetManualPref);
+ }
+ for (EPWidgetsSortPreference epWidgetsManPref : widgetsSortManual) {
+ if (epWidgetsManPref.getWidgetid() != null) {
+ Long widgetid = epWidgetsManPref.getWidgetid();
+ if (existingWidgetsIds.containsKey(widgetid)) {
+ EPWidgetsManualSortPreference epWidgetsManualSort = existingWidgetsIds.get(widgetid);
+ epWidgetsManualSort.setWidgetRow(epWidgetsManPref.getRow());
+ epWidgetsManualSort.setWidgetCol(epWidgetsManPref.getCol());
+ epWidgetsManualSort.setWidgetWidth(epWidgetsManPref.getSizeX());
+ epWidgetsManualSort.setWidgetHeight(epWidgetsManPref.getSizeY());
+ HashMap<String, Integer> additionalUpdateParam = new HashMap<String, Integer>();
+ additionalUpdateParam.put("userId", epWidgetsManualSort.getUserId());
+ dataAccessService.saveDomainObject(epWidgetsManualSort, additionalUpdateParam);
+ } else {
+ EPWidgetsManualSortPreference epWidgetsManualSort = new EPWidgetsManualSortPreference();
+ epWidgetsManualSort.setWidgetId(epWidgetsManPref.getWidgetid());
+ epWidgetsManualSort.setWidgetRow(epWidgetsManPref.getRow());
+ epWidgetsManualSort.setWidgetCol(epWidgetsManPref.getCol());
+ epWidgetsManualSort.setWidgetWidth(epWidgetsManPref.getSizeX());
+ epWidgetsManualSort.setWidgetHeight(epWidgetsManPref.getSizeY());
+ epWidgetsManualSort.setUserId(Ints.checkedCast(user.getId()));
+ dataAccessService.saveDomainObject(epWidgetsManualSort, null);
+ }
+ fieldsValidator.httpStatusCode = new Long(HttpServletResponse.SC_OK);
+ }
+ }
+ } catch (Exception e) {
+ logger.error(EELFLoggerDelegate.errorLogger, "saveWidgetsSortManual failed", e);
+ fieldsValidator.httpStatusCode = new Long(HttpServletResponse.SC_INTERNAL_SERVER_ERROR);
+ }
+ return fieldsValidator;
+ }
+
+ @SuppressWarnings("unchecked")
+ @Override
+ public FieldsValidator deleteUserWidgetSortPref(List<EPWidgetsSortPreference> delWidgetSortPref, EPUser user) {
+ FieldsValidator fieldsValidator = new FieldsValidator();
+ final Map<String, Long> params = new HashMap<>();
+ List<EPWidgetsManualSortPreference> epWidgets = new ArrayList<EPWidgetsManualSortPreference>();
+ try {
+ params.put("userId", user.getId());
+ epWidgets = dataAccessService.executeNamedQuery("userWidgetManualSortPrfQuery", params, null);
+ Map<Long, EPWidgetsManualSortPreference> existingWidgetIds = new HashMap<Long, EPWidgetsManualSortPreference>();
+ for (EPWidgetsManualSortPreference userWidgetSortPref : epWidgets) {
+ existingWidgetIds.put(userWidgetSortPref.getWidgetId(), userWidgetSortPref);
+ }
+ for (EPWidgetsSortPreference delEpWidgetsManPref : delWidgetSortPref) {
+ if (delEpWidgetsManPref.getWidgetid() != null) {
+ Long widgetId = delEpWidgetsManPref.getWidgetid();
+ if (existingWidgetIds.containsKey(widgetId)) {
+ params.put("widgetId",widgetId);
+ dataAccessService.executeNamedQuery("deleteUserWidgetPlacement", params, null);
+ }
+ fieldsValidator.httpStatusCode = new Long(HttpServletResponse.SC_OK);
+ }
+ }
+ } catch (Exception e) {
+ logger.error(EELFLoggerDelegate.errorLogger, "deleteUserWidgetSortPref failed", e);
+ fieldsValidator.httpStatusCode = new Long(HttpServletResponse.SC_INTERNAL_SERVER_ERROR);
+ }
+ return fieldsValidator;
+ }
+
+ /*
+ * This Method Stores the Sort Order of User Apps by Sort Manual Preference
+ *
+ * @param: appsSortManual--contains User Apps Data
+ *
+ * @param: user--contains LoggedIn User Data
+ */
+ @SuppressWarnings("unchecked")
+ @Override
+ public FieldsValidator saveAppsSortManual(List<EPAppsManualPreference> appsSortManual, EPUser user) {
+ FieldsValidator fieldsValidator = new FieldsValidator();
+ final Map<String, Long> params = new HashMap<>();
+ List<EPUserAppsManualSortPreference> epManualApps = new ArrayList<EPUserAppsManualSortPreference>();
+
+ try {
+ params.put("userId", user.getId());
+ epManualApps = dataAccessService.executeNamedQuery("userAppsManualSortPrfQuery", params, null);
+ Map<Long, EPUserAppsManualSortPreference> existingAppIds = new HashMap<Long, EPUserAppsManualSortPreference>();
+ for (EPUserAppsManualSortPreference userAppManualPref : epManualApps) {
+ existingAppIds.put(userAppManualPref.getAppId(), userAppManualPref);
+ }
+ for (EPAppsManualPreference epAppsManPref : appsSortManual) {
+ if (epAppsManPref.getAppid() != null) {
+ Long appid = epAppsManPref.getAppid();
+ if (existingAppIds.containsKey(appid)) {
+ EPUserAppsManualSortPreference epAppsManualSort = existingAppIds.get(appid);
+ epAppsManualSort
+ .setAppManualSortOrder((epAppsManPref.getCol() + (6 * epAppsManPref.getRow())) + 1);
+ HashMap<String, Integer> additionalUpdateParam = new HashMap<String, Integer>();
+ additionalUpdateParam.put("userId", epAppsManualSort.getUserId());
+ dataAccessService.saveDomainObject(epAppsManualSort, additionalUpdateParam);
+ } else {
+ EPUserAppsManualSortPreference epAppsManualSort = new EPUserAppsManualSortPreference();
+ epAppsManualSort.setAppId(epAppsManPref.getAppid());
+ epAppsManualSort
+ .setAppManualSortOrder((epAppsManPref.getCol() + (6 * epAppsManPref.getRow())) + 1);
+ epAppsManualSort.setUserId(Ints.checkedCast(user.getId()));
+ dataAccessService.saveDomainObject(epAppsManualSort, null);
+ }
+ fieldsValidator.httpStatusCode = new Long(HttpServletResponse.SC_OK);
+ }
+ }
+ } catch (Exception e) {
+ logger.error(EELFLoggerDelegate.errorLogger, "saveAppsSortManual failed", e);
+ fieldsValidator.httpStatusCode = new Long(HttpServletResponse.SC_INTERNAL_SERVER_ERROR);
+ }
+ return fieldsValidator;
+ }
+
+ /*
+ * (non-Javadoc)
+ *
+ * @see org.openecomp.portalapp.portal.service.EPAppService#
+ * deleteUserAppSortManual(java.lang.String,
+ * org.openecomp.portalapp.portal.domain.EPUser)
+ */
+ @SuppressWarnings("unchecked")
+ @Override
+ public FieldsValidator deleteUserAppSortManual(EPDeleteAppsManualSortPref delAppSortManual, EPUser user) {
+ FieldsValidator fieldsValidator = new FieldsValidator();
+ final Map<String, Long> params = new HashMap<>();
+ List<EPUserAppsManualSortPreference> epManualApps = new ArrayList<EPUserAppsManualSortPreference>();
+ try {
+ params.put("userId", user.getId());
+ epManualApps = dataAccessService.executeNamedQuery("userAppsManualSortPrfQuery", params, null);
+ Map<Long, EPUserAppsManualSortPreference> existingAppIds = new HashMap<Long, EPUserAppsManualSortPreference>();
+ for (EPUserAppsManualSortPreference userAppPref : epManualApps) {
+ existingAppIds.put(userAppPref.getAppId(), userAppPref);
+ }
+ if (existingAppIds.containsKey(delAppSortManual.getAppId()) && !delAppSortManual.isSelect()) {
+ dataAccessService.deleteDomainObjects(EPUserAppsManualSortPreference.class,
+ "app_id=" + delAppSortManual.getAppId() + " AND user_id=" + user.getId(), null);
+ fieldsValidator.httpStatusCode = new Long(HttpServletResponse.SC_OK);
+ }
+ } catch (Exception e) {
+ logger.error(EELFLoggerDelegate.errorLogger, "deleteUserAppSortManual failed", e);
+ fieldsValidator.httpStatusCode = new Long(HttpServletResponse.SC_INTERNAL_SERVER_ERROR);
+ }
+ return fieldsValidator;
+ }
+
+ @SuppressWarnings("unchecked")
+ @Override
+ public FieldsValidator saveAppsSortPreference(EPAppsSortPreference appsSortPreference, EPUser user) {
+ FieldsValidator fieldsValidator = new FieldsValidator();
+ final Map<String, Long> params = new HashMap<>();
+ List<EPUserAppsSortPreference> epSortTypes = new ArrayList<EPUserAppsSortPreference>();
+ EPUserAppsSortPreference usrSortPr = null;
+ try {
+ params.put("userId", user.getId());
+ epSortTypes = dataAccessService.executeNamedQuery("userAppsSortPreferenceQuery", params, null);
+ if (epSortTypes.size() == 0) {
+ usrSortPr = new EPUserAppsSortPreference();
+ usrSortPr.setUserId(Ints.checkedCast(user.getId()));
+ usrSortPr.setSortPref(appsSortPreference.getValue());
+ dataAccessService.saveDomainObject(usrSortPr, null);
+ fieldsValidator.httpStatusCode = new Long(HttpServletResponse.SC_OK);
+ } else {
+ usrSortPr = epSortTypes.get(0);
+ usrSortPr.setSortPref(appsSortPreference.getValue());
+ HashMap<String, Integer> additionalUpdateParam = new HashMap<String, Integer>();
+ additionalUpdateParam.put("userId", usrSortPr.getUserId());
+ dataAccessService.saveDomainObject(usrSortPr, additionalUpdateParam);
+ fieldsValidator.httpStatusCode = new Long(HttpServletResponse.SC_OK);
+ }
+ } catch (Exception e) {
+ logger.error(EELFLoggerDelegate.errorLogger, "saveAppsSortPreference failed", e);
+ fieldsValidator.httpStatusCode = new Long(HttpServletResponse.SC_INTERNAL_SERVER_ERROR);
+ }
+ return fieldsValidator;
+ }
+
+ @SuppressWarnings("unchecked")
+ @Override
+ public String getUserAppsSortTypePreference(EPUser user) {
+ final Map<String, Long> params = new HashMap<>();
+ List<EPUserAppsSortPreference> userSortPrefs = new ArrayList<EPUserAppsSortPreference>();
+ try {
+ params.put("userId", user.getId());
+ userSortPrefs = dataAccessService.executeNamedQuery("userAppsSortPreferenceQuery", params, null);
+ if (userSortPrefs.size() > 0)
+ return userSortPrefs.get(0).getSortPref();
+ else
+ return null;
+ } catch (Exception e) {
+ logger.error(EELFLoggerDelegate.errorLogger, "getUserAppsSortTypePreference failed", e);
+ }
+ return null;
+
+ }
+
+ @Override
+ public List<EPApp> getUserRemoteApps(String id) {
+ throw new RuntimeException(" Cannot be called from parent class");
+ }
+
+ @Override
+ public UserRoles getUserProfileForLeftMenu(String loginId) {
+ final Map<String, String> params = new HashMap<>();
+ params.put("org_user_id", loginId);
+ @SuppressWarnings("unchecked")
+ List<UserRole> userRoleList = dataAccessService.executeNamedQuery( "getUserRolesForLeftMenu", params, null);
+ ArrayList<UserRoles> usersRolesList = aggregateUserProfileRowsResultsByRole(userRoleList);
+ if (usersRolesList == null || usersRolesList.size() < 1)
+ return null;
+
+ return usersRolesList.get(0);
+ }
+
+
+ @Override
+ public UserRoles getUserProfileForRolesLeftMenu(String loginId) {
+ final Map<String, String> params = new HashMap<>();
+ params.put("org_user_id", loginId);
+ @SuppressWarnings("unchecked")
+ List<UserRole> userRoleList = dataAccessService.executeNamedQuery( "getRolesForLeftMenu", params, null);
+ ArrayList<UserRoles> usersRolesList = aggregateUserProfileRowsResultsByRole(userRoleList);
+ if (usersRolesList == null || usersRolesList.size() < 1)
+ return null;
+
+ return usersRolesList.get(0);
+ }
+
+ @Override
+ public UserRoles getUserProfileNormalizedForLeftMenu(EPUser user) {
+ // Check database.
+ UserRoles userAndRoles = getUserProfileForLeftMenu(user.getLoginId());
+ // If no roles are defined, treat this user as a guest.
+ if (user.isGuest() || userAndRoles == null) {
+ logger.debug(EELFLoggerDelegate.debugLogger, "getUserProfileForLeftMenu: treating user {} as guest",
+ user.getLoginId());
+ userAndRoles = createUserRoles(user);
+ }
+
+ return userAndRoles;
+ }
+
+ @Override
+ public UserRoles getUserProfileNormalizedForRolesLeftMenu(EPUser user) {
+ // Check database.
+ UserRoles userAndRoles = getUserProfileForRolesLeftMenu(user.getLoginId());
+ // If no roles are defined, treat this user as a guest.
+ if (user.isGuest() || userAndRoles == null) {
+ logger.debug(EELFLoggerDelegate.debugLogger, "getUserProfileForLeftMenu: treating user {} as guest",
+ user.getLoginId());
+ userAndRoles = createUserRoles(user);
+ }
+
+ return userAndRoles;
+ }
+
+
+ public UserRoles createUserRoles(EPUser user)
+ {
+ UserRole userRole = new UserRole();
+ userRole.setUser_Id(user.getId());
+ userRole.setOrgUserId(user.getLoginId());
+ userRole.setFirstName(user.getFirstName());
+ userRole.setLastName(user.getLastName());
+ userRole.setRoleId(-1L);
+ userRole.setRoleName("Guest");
+ userRole.setUser_Id(-1L);
+ UserRoles userAndRoles = new UserRoles(userRole);
+ return userAndRoles;
+
+ }
+}
diff --git a/ecomp-portal-BE-common/src/main/java/org/onap/portalapp/portal/service/EPAppService.java b/ecomp-portal-BE-common/src/main/java/org/onap/portalapp/portal/service/EPAppService.java
new file mode 100644
index 00000000..3dd18a6f
--- /dev/null
+++ b/ecomp-portal-BE-common/src/main/java/org/onap/portalapp/portal/service/EPAppService.java
@@ -0,0 +1,248 @@
+/*-
+ * ============LICENSE_START==========================================
+ * ONAP Portal
+ * ===================================================================
+ * Copyright (C) 2017 AT&T Intellectual Property. All rights reserved.
+ * ===================================================================
+ *
+ * Unless otherwise specified, all software contained herein is licensed
+ * under the Apache License, Version 2.0 (the "License");
+ * you may not use this software 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.
+ *
+ * Unless otherwise specified, all documentation contained herein is licensed
+ * under the Creative Commons License, Attribution 4.0 Intl. (the "License");
+ * you may not use this documentation except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * https://creativecommons.org/licenses/by/4.0/
+ *
+ * Unless required by applicable law or agreed to in writing, documentation
+ * 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.
+ *
+ * ============LICENSE_END============================================
+ *
+ * ECOMP is a trademark and service mark of AT&T Intellectual Property.
+ */
+package org.onap.portalapp.portal.service;
+
+import java.util.List;
+
+import org.onap.portalapp.portal.domain.AdminUserApplications;
+import org.onap.portalapp.portal.domain.AppIdAndNameTransportModel;
+import org.onap.portalapp.portal.domain.AppsResponse;
+import org.onap.portalapp.portal.domain.EPApp;
+import org.onap.portalapp.portal.domain.EPUser;
+import org.onap.portalapp.portal.domain.EcompApp;
+import org.onap.portalapp.portal.domain.UserRoles;
+import org.onap.portalapp.portal.ecomp.model.AppCatalogItem;
+import org.onap.portalapp.portal.transport.EPAppsManualPreference;
+import org.onap.portalapp.portal.transport.EPAppsSortPreference;
+import org.onap.portalapp.portal.transport.EPDeleteAppsManualSortPref;
+import org.onap.portalapp.portal.transport.EPWidgetsSortPreference;
+import org.onap.portalapp.portal.transport.FieldsValidator;
+import org.onap.portalapp.portal.transport.LocalRole;
+import org.onap.portalapp.portal.transport.OnboardingApp;
+
+public interface EPAppService {
+
+ /**
+ * Get all applications adminId is an admin
+ *
+ * @param user
+ * the admin user
+ * @return the admin's applications
+ */
+ List<EPApp> getUserAsAdminApps(EPUser user);
+
+ List<EPApp> getUserByOrgUserIdAsAdminApps(String orgUserId);
+
+ /**
+ * Gets all rows and all fields from the fn_app table.
+ *
+ * @return list of EPApp objects
+ */
+ List<EPApp> getAppsFullList();
+
+ /**
+ * Gets all rows and most fields from the fn_app table.
+ *
+ * @return list of EcompApp objects.
+ */
+ List<EcompApp> getEcompAppAppsFullList();
+
+ /**
+ * Get apps with app app admins
+ *
+ * @return List of AdminUserApplications
+ */
+ List<AdminUserApplications> getAppsAdmins();
+
+ /**
+ * Get all apps from fn_app table (index, name, title only).
+ *
+ * @param all
+ * If all is true, returns active and inactive apps; otherwise,
+ * just active apps.
+ * @return List of AppsResponse objects.
+ */
+ List<AppsResponse> getAllApps(Boolean all);
+
+ UserRoles getUserProfile(String loginId);
+
+ UserRoles getUserProfileNormalized(EPUser user);
+
+ List<LocalRole> getAppRoles(Long appId);
+
+ List<AppIdAndNameTransportModel> getAdminApps(EPUser user);
+
+ List<AppIdAndNameTransportModel> getAppsForSuperAdminAndAccountAdmin(EPUser user);
+
+ /**
+ * Gets the applications accessible to the specified user, which includes
+ * all enabled open applications, plus all enabled applications for which
+ * the user has a defined role for that app.
+ *
+ * @param user
+ * EPUser object with the user's Org User ID
+ * @return the user's list of applications, which may be empty.
+ */
+ List<EPApp> getUserApps(EPUser user);
+
+ /**
+ * Gets the user-personalized list of applications for the Portal (super)
+ * admin, which includes enabled open applications, enabled applications for
+ * which the user has a defined role for that app, and/or enabled
+ * applications which the user has chosen to show.
+ *
+ * @param user
+ * EPUser object with the user's Org User ID
+ * @return the user's personalized list of applications, which may be empty.
+ */
+ List<EPApp> getPersAdminApps(EPUser user);
+
+ /**
+ * Gets the user-personalized list of accessible applications, which
+ * includes enabled open applications and/or enabled applications for which
+ * the user has a defined role for that app. Personalization means the user
+ * can indicate an accessible application should be excluded from this
+ * result.
+ *
+ * @param user
+ * EPUser object with the user's Org User ID
+ * @return the user's personalized list of applications, which may be empty.
+ */
+ List<EPApp> getPersUserApps(EPUser user);
+
+ /**
+ * Gets the application catalog for the specified user who is a super admin.
+ * This includes all enabled applications. Each item indicates whether the
+ * user has access (open or via a role), and whether the application is
+ * selected for showing in the user's home (applications) page. Admin sees
+ * slightly different behavior - can force an app onto the home page using
+ * the personalization feature (user-app-selection table).
+ *
+ * @param user
+ * @return list of all enabled applications, which may be empty
+ */
+ List<AppCatalogItem> getAdminAppCatalog(EPUser user);
+
+ /**
+ * Gets the application catalog for the specified user, who is a regular
+ * user. This includes all enabled applications. Each item indicates whether
+ * the user has access (open or via a role), and whether the application is
+ * selected for showing in the user's home (applications) page.
+ *
+ * @param user
+ * @return list of all enabled applications, which may be empty
+ */
+ List<AppCatalogItem> getUserAppCatalog(EPUser user);
+
+ List<OnboardingApp> getOnboardingApps();
+
+ List<OnboardingApp> getEnabledNonOpenOnboardingApps();
+
+ FieldsValidator modifyOnboardingApp(OnboardingApp modifiedOnboardingApp, EPUser user);
+
+ FieldsValidator addOnboardingApp(OnboardingApp newOnboardingApp, EPUser user);
+
+ /**
+ * Deletes the specified application from all tables where the app_id is
+ * used, and ultimately from the fn_app table.
+ *
+ * @param user
+ * Must be Portal (super) administrator
+ * @param onboardingAppId
+ * ID of application to be deleted
+ * @return Status code
+ */
+ FieldsValidator deleteOnboardingApp(EPUser user, Long onboardingAppId);
+
+ List<EcompApp> transformAppsToEcompApps(List<EPApp> appsList);
+
+ EPApp getApp(Long appId);
+
+ EPApp getAppDetail(String appName);
+
+ /**
+ *
+ * It return app information
+ *
+ * @param appName it contains application name
+ * @return EPApp
+ */
+ EPApp getAppDetailByAppName(String appName);
+
+ List<EPApp> getAppsOrderByName(EPUser user);
+
+ FieldsValidator saveAppsSortPreference(EPAppsSortPreference appsSortPreference, EPUser user);
+
+ FieldsValidator saveAppsSortManual(List<EPAppsManualPreference> appsSortManual, EPUser user);
+
+ FieldsValidator saveWidgetsSortManual(List<EPWidgetsSortPreference> widgetsSortManual, EPUser user);
+
+ /**
+ * Deletes the sort order of user apps by sort manual preference
+ *
+ * @param delAppSortManual
+ * User Apps Data
+ * @param user
+ * LoggedIn User Data
+ * @return FieldsValidator
+ */
+ FieldsValidator deleteUserAppSortManual(EPDeleteAppsManualSortPref delAppSortManual, EPUser user);
+
+ FieldsValidator deleteUserWidgetSortPref(List<EPWidgetsSortPreference> delWidgetSortPref, EPUser user);
+
+ String getUserAppsSortTypePreference(EPUser user);
+
+ List<EPApp> getAppsOrderByLastUsed(EPUser user);
+
+ List<EPApp> getAppsOrderByMostUsed(EPUser user);
+
+ List<EPApp> getAppsOrderByManual(EPUser user);
+
+ List<EPApp> getUserRemoteApps(String id);
+
+ void createOnboardingFromApp(EPApp app, OnboardingApp onboardingApp);
+
+ UserRoles getUserProfileNormalizedForLeftMenu(EPUser user);
+
+ UserRoles getUserProfileForLeftMenu(String loginId);
+
+ UserRoles getUserProfileForRolesLeftMenu(String loginId);
+
+ UserRoles getUserProfileNormalizedForRolesLeftMenu(EPUser user);
+
+}
diff --git a/ecomp-portal-BE-common/src/main/java/org/onap/portalapp/portal/service/EPAuditService.java b/ecomp-portal-BE-common/src/main/java/org/onap/portalapp/portal/service/EPAuditService.java
new file mode 100644
index 00000000..d1479176
--- /dev/null
+++ b/ecomp-portal-BE-common/src/main/java/org/onap/portalapp/portal/service/EPAuditService.java
@@ -0,0 +1,45 @@
+/*-
+ * ============LICENSE_START==========================================
+ * ONAP Portal
+ * ===================================================================
+ * Copyright (C) 2017 AT&T Intellectual Property. All rights reserved.
+ * ===================================================================
+ *
+ * Unless otherwise specified, all software contained herein is licensed
+ * under the Apache License, Version 2.0 (the "License");
+ * you may not use this software 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.
+ *
+ * Unless otherwise specified, all documentation contained herein is licensed
+ * under the Creative Commons License, Attribution 4.0 Intl. (the "License");
+ * you may not use this documentation except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * https://creativecommons.org/licenses/by/4.0/
+ *
+ * Unless required by applicable law or agreed to in writing, documentation
+ * 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.
+ *
+ * ============LICENSE_END============================================
+ *
+ * ECOMP is a trademark and service mark of AT&T Intellectual Property.
+ */
+package org.onap.portalapp.portal.service;
+
+import java.util.Date;
+
+public interface EPAuditService {
+ public Date getGuestLastLogin(String userId);
+ public void delAuditLogFromDay();
+}
diff --git a/ecomp-portal-BE-common/src/main/java/org/onap/portalapp/portal/service/EPAuditServiceImpl.java b/ecomp-portal-BE-common/src/main/java/org/onap/portalapp/portal/service/EPAuditServiceImpl.java
new file mode 100644
index 00000000..1b3dfade
--- /dev/null
+++ b/ecomp-portal-BE-common/src/main/java/org/onap/portalapp/portal/service/EPAuditServiceImpl.java
@@ -0,0 +1,129 @@
+/*-
+ * ============LICENSE_START==========================================
+ * ONAP Portal
+ * ===================================================================
+ * Copyright (C) 2017 AT&T Intellectual Property. All rights reserved.
+ * ===================================================================
+ *
+ * Unless otherwise specified, all software contained herein is licensed
+ * under the Apache License, Version 2.0 (the "License");
+ * you may not use this software 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.
+ *
+ * Unless otherwise specified, all documentation contained herein is licensed
+ * under the Creative Commons License, Attribution 4.0 Intl. (the "License");
+ * you may not use this documentation except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * https://creativecommons.org/licenses/by/4.0/
+ *
+ * Unless required by applicable law or agreed to in writing, documentation
+ * 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.
+ *
+ * ============LICENSE_END============================================
+ *
+ * ECOMP is a trademark and service mark of AT&T Intellectual Property.
+ */
+package org.onap.portalapp.portal.service;
+
+import java.time.LocalDate;
+import java.util.Date;
+import java.util.HashMap;
+import java.util.List;
+import java.util.Map;
+
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.context.annotation.EnableAspectJAutoProxy;
+import org.springframework.stereotype.Service;
+import org.springframework.transaction.annotation.Transactional;
+import org.onap.portalapp.portal.logging.aop.EPMetricsLog;
+import org.onap.portalapp.portal.utils.EPCommonSystemProperties;
+import org.onap.portalsdk.core.domain.AuditLog;
+import org.onap.portalsdk.core.logging.logic.EELFLoggerDelegate;
+import org.onap.portalsdk.core.service.DataAccessService;
+
+@Service("epAuditService")
+@Transactional
+@org.springframework.context.annotation.Configuration
+@EnableAspectJAutoProxy
+@EPMetricsLog
+public class EPAuditServiceImpl implements EPAuditService {
+
+ private EELFLoggerDelegate logger = EELFLoggerDelegate.getLogger(EPAuditServiceImpl.class);
+
+ @Autowired
+ private DataAccessService dataAccessService;
+
+ @Override
+ /*
+ * get the guest last login time with orgUserId as param. If record not
+ * found in table, return null.
+ *
+ * (non-Javadoc)
+ *
+ * @see
+ * org.openecomp.portalapp.portal.service.EPUserService#getGuestLastLogin(
+ * java.lang.String)
+ */
+ public Date getGuestLastLogin(String userId) {
+ Map<String, String> params = new HashMap<>();
+ params.put("userId", userId);
+ @SuppressWarnings("unchecked")
+ List<Date> list = getDataAccessService().executeNamedQuery("getGuestLastLogin", params, null);
+ Date date = null;
+ if (list != null) {
+ /*
+ * if list only contains one item, meaning this is the first time
+ * user logs in or record not found in db
+ */
+ if (list.size() == 1)
+ date = list.get(0); /* the guest's current log in time */
+ else if (list.size() == 2)
+ date = list.get(1); /* most recent login date from db */
+ }
+ return date;
+ }
+
+ /*
+ * Cleans all the records in fn_audit_log table that are less than defined
+ * date in system.property
+ *
+ * (non-Javadoc)
+ *
+ * @see
+ * org.openecomp.portalapp.portal.service.EPAuditService#delAuditLogFromDay(
+ * )
+ */
+ @Override
+ public void delAuditLogFromDay() {
+ if (EPCommonSystemProperties.containsProperty(EPCommonSystemProperties.AUDITLOG_DEL_DAY_FROM)) {
+ String day = EPCommonSystemProperties.getProperty(EPCommonSystemProperties.AUDITLOG_DEL_DAY_FROM);
+ LocalDate removeDateFrom = LocalDate.now().minusDays(Integer.valueOf(day));
+ getDataAccessService().deleteDomainObjects(AuditLog.class, "audit_date <'" + removeDateFrom + "'", null);
+ } else {
+ logger.error(EELFLoggerDelegate.errorLogger,
+ "delAuditLogFromDay Exception = system.propertiy value is empty on"
+ + EPCommonSystemProperties.AUDITLOG_DEL_DAY_FROM);
+ }
+ }
+
+ public DataAccessService getDataAccessService() {
+ return dataAccessService;
+ }
+
+ public void setDataAccessService(DataAccessService dataAccessService) {
+ this.dataAccessService = dataAccessService;
+ }
+
+}
diff --git a/ecomp-portal-BE-common/src/main/java/org/onap/portalapp/portal/service/EPLdapService.java b/ecomp-portal-BE-common/src/main/java/org/onap/portalapp/portal/service/EPLdapService.java
new file mode 100644
index 00000000..7721cbc9
--- /dev/null
+++ b/ecomp-portal-BE-common/src/main/java/org/onap/portalapp/portal/service/EPLdapService.java
@@ -0,0 +1,49 @@
+/*-
+ * ============LICENSE_START==========================================
+ * ONAP Portal
+ * ===================================================================
+ * Copyright (C) 2017 AT&T Intellectual Property. All rights reserved.
+ * ===================================================================
+ *
+ * Unless otherwise specified, all software contained herein is licensed
+ * under the Apache License, Version 2.0 (the "License");
+ * you may not use this software 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.
+ *
+ * Unless otherwise specified, all documentation contained herein is licensed
+ * under the Creative Commons License, Attribution 4.0 Intl. (the "License");
+ * you may not use this documentation except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * https://creativecommons.org/licenses/by/4.0/
+ *
+ * Unless required by applicable law or agreed to in writing, documentation
+ * 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.
+ *
+ * ============LICENSE_END============================================
+ *
+ * ECOMP is a trademark and service mark of AT&T Intellectual Property.
+ */
+package org.onap.portalapp.portal.service;
+
+import org.onap.portalsdk.core.command.support.SearchResult;
+import org.onap.portalsdk.core.domain.support.DomainVo;
+
+
+public interface EPLdapService {
+
+ // search POST for users based on the criteria selected in the Request
+ SearchResult searchPost(DomainVo searchCriteria, String sortBy1, String sortBy2, String sortBy3, int pageNo, int dataSize, int userId) throws Exception;
+
+}
diff --git a/ecomp-portal-BE-common/src/main/java/org/onap/portalapp/portal/service/EPLdapServiceImpl.java b/ecomp-portal-BE-common/src/main/java/org/onap/portalapp/portal/service/EPLdapServiceImpl.java
new file mode 100644
index 00000000..941acaf6
--- /dev/null
+++ b/ecomp-portal-BE-common/src/main/java/org/onap/portalapp/portal/service/EPLdapServiceImpl.java
@@ -0,0 +1,269 @@
+/*-
+ * ============LICENSE_START==========================================
+ * ONAP Portal
+ * ===================================================================
+ * Copyright (C) 2017 AT&T Intellectual Property. All rights reserved.
+ * ===================================================================
+ *
+ * Unless otherwise specified, all software contained herein is licensed
+ * under the Apache License, Version 2.0 (the "License");
+ * you may not use this software 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.
+ *
+ * Unless otherwise specified, all documentation contained herein is licensed
+ * under the Creative Commons License, Attribution 4.0 Intl. (the "License");
+ * you may not use this documentation except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * https://creativecommons.org/licenses/by/4.0/
+ *
+ * Unless required by applicable law or agreed to in writing, documentation
+ * 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.
+ *
+ * ============LICENSE_END============================================
+ *
+ * ECOMP is a trademark and service mark of AT&T Intellectual Property.
+ */
+package org.onap.portalapp.portal.service;
+
+import java.util.ArrayList;
+import java.util.Collections;
+import java.util.List;
+
+import javax.naming.NamingEnumeration;
+import javax.naming.NamingException;
+import javax.naming.directory.Attribute;
+import javax.naming.directory.Attributes;
+import javax.naming.directory.DirContext;
+import javax.naming.directory.SearchControls;
+
+import org.onap.portalapp.portal.domain.EPUser;
+import org.onap.portalapp.portal.logging.aop.EPAuditLog;
+import org.onap.portalapp.portal.logging.aop.EPMetricsLog;
+import org.onap.portalapp.portal.utils.EPCommonSystemProperties;
+import org.onap.portalsdk.core.command.support.SearchResult;
+import org.onap.portalsdk.core.domain.support.DomainVo;
+import org.onap.portalsdk.core.logging.logic.EELFLoggerDelegate;
+import org.onap.portalsdk.core.service.support.FusionService;
+import org.onap.portalsdk.core.service.support.ServiceLocator;
+import org.onap.portalsdk.core.util.SystemProperties;
+import org.owasp.esapi.ESAPI;
+import org.slf4j.MDC;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.context.annotation.EnableAspectJAutoProxy;
+import org.springframework.stereotype.Service;
+import org.springframework.transaction.annotation.Transactional;
+
+@Service("epLdapService")
+@Transactional
+@org.springframework.context.annotation.Configuration
+@EnableAspectJAutoProxy
+public class EPLdapServiceImpl extends FusionService implements EPLdapService {
+ @Autowired
+ private ServiceLocator serviceLocator;
+
+ EELFLoggerDelegate logger = EELFLoggerDelegate.getLogger(EPLdapServiceImpl.class);
+
+ @EPAuditLog
+ @SuppressWarnings({ "rawtypes", "unchecked" })
+ public SearchResult searchPost(DomainVo searchCriteria, String sortBy1, String sortBy2, String sortBy3, int pageNo,
+ int dataSize, int userId) throws Exception {
+
+ String remoteHost = "";
+
+ // initialize the directory context to access POST
+ DirContext dirContext = serviceLocator.getDirContext(
+ SystemProperties.getProperty(SystemProperties.POST_INITIAL_CONTEXT_FACTORY),
+ SystemProperties.getProperty(SystemProperties.POST_PROVIDER_URL),
+ SystemProperties.getProperty(SystemProperties.POST_SECURITY_PRINCIPAL));
+
+ SearchResult searchResult = new SearchResult();
+
+ try {
+
+ remoteHost = String.format("%s/%s", SystemProperties.getProperty(SystemProperties.POST_PROVIDER_URL),
+ SystemProperties.getProperty(SystemProperties.POST_SECURITY_PRINCIPAL));
+ MDC.put(EPCommonSystemProperties.FULL_URL, remoteHost);
+
+ String[] postAttributes = { "nickname", "givenName", "initials", "sn", "employeeNumber", "mail",
+ "telephoneNumber", "departmentNumber", "a1", "street", "roomNumber", "l", "st", "postalCode",
+ "zip4", "physicalDeliveryOfficeName", "bc", "friendlyCountryName", "bd", "bdname", "bu", "buname",
+ "jtname", "mgrid", "a2", "compcode", "compdesc", "costcenter", "silo", "b2" };
+
+ SearchControls searchControls = new SearchControls();
+ searchControls.setTimeLimit(5000);
+ searchControls.setReturningAttributes(postAttributes);
+
+ StringBuffer filterClause = new StringBuffer("(&(objectClass=*)");
+
+ EPUser user = (EPUser) searchCriteria;
+
+ if (Utilities.nvl(user.getFirstName()).length() > 0) {
+ filterClause.append("(givenName=").append(user.getFirstName()).append("*)");
+ }
+ if (Utilities.nvl(user.getLastName()).length() > 0) {
+ filterClause.append("(sn=").append(user.getLastName()).append("*)");
+ }
+ if (Utilities.nvl(user.getHrid()).length() > 0) {
+ filterClause.append("(employeeNumber=").append(user.getHrid()).append("*)");
+ }
+ if (Utilities.nvl(user.getOrgManagerUserId()).length() > 0) {
+ filterClause.append("(mgrid=").append(user.getOrgManagerUserId()).append("*)");
+ }
+ if (Utilities.nvl(user.getOrgCode()).length() > 0) {
+ filterClause.append("(departmentNumber=").append(user.getOrgCode()).append("*)");
+ }
+ if (Utilities.nvl(user.getEmail()).length() > 0) {
+ filterClause.append("(mail=").append(user.getEmail()).append("*)");
+ }
+ if (Utilities.nvl(user.getOrgUserId()).length() > 0) {
+ filterClause.append("(a1=").append(user.getOrgUserId()).append("*)");
+ }
+ filterClause.append("(c3=N)"); // this has been added to filter CP09 entries on the LDAP server that are
+ // duplicates of existing individuals
+ filterClause.append(")");
+
+ List list = new ArrayList();
+ if (!filterClause.toString().equals("(&(objectClass=*))")) {
+ NamingEnumeration e = dirContext.search(
+ SystemProperties.getProperty(SystemProperties.POST_PROVIDER_URL) + "/"
+ + SystemProperties.getProperty(SystemProperties.POST_SECURITY_PRINCIPAL),
+ ESAPI.encoder().encodeForDN(filterClause.toString()), searchControls);
+ list = processResults(e);
+ }
+
+ Collections.sort(list);
+
+ searchResult = new SearchResult(list);
+ searchResult.setPageNo(pageNo);
+ if (dataSize >= 0) {
+ searchResult.setDataSize(dataSize);
+ } else {
+ searchResult.setDataSize(list.size());
+ }
+ } catch (NamingException ne) {
+ logger.error(EELFLoggerDelegate.errorLogger, "searchPost failed with naming exception", ne);
+ } catch (Exception e) {
+ logger.error(EELFLoggerDelegate.errorLogger, "searchPost failed", e);
+ } finally {
+ dirContext.close();
+ }
+
+ return searchResult;
+ }
+
+ @SuppressWarnings({ "rawtypes", "unchecked" })
+ @EPMetricsLog
+ private ArrayList processResults(NamingEnumeration e) throws NamingException {
+ ArrayList results = new ArrayList();
+ int count = 0;
+
+ while (e.hasMore()) {
+ javax.naming.directory.SearchResult searchResult = (javax.naming.directory.SearchResult) e.next();
+ results.add(processAttributes(searchResult.getAttributes()));
+ count++;
+
+ if (count > Integer.parseInt(SystemProperties.getProperty(SystemProperties.POST_MAX_RESULT_SIZE))) {
+ break;
+ }
+ }
+ return results;
+ }
+
+ @SuppressWarnings("rawtypes")
+ @EPMetricsLog
+ private DomainVo processAttributes(Attributes resultAttributes) throws NamingException {
+ EPUser user = new EPUser();
+
+ try {
+ if (resultAttributes == null) {
+ logger.debug(EELFLoggerDelegate.debugLogger, "This result has no attributes");
+ } else {
+ for (NamingEnumeration e = resultAttributes.getAll(); e.hasMore();) { // why the nested loop?
+ Attribute attribute = (Attribute) e.next();
+ for (NamingEnumeration ie = attribute.getAll(); ie.hasMore();) {
+ if (attribute.getID().equalsIgnoreCase("nickname")) {
+ user.setFirstName((String) ie.next());
+ } else if (attribute.getID().equalsIgnoreCase("initials")) {
+ user.setMiddleInitial((String) ie.next());
+ } else if (attribute.getID().equalsIgnoreCase("sn")) {
+ user.setLastName((String) ie.next());
+ } else if (attribute.getID().equalsIgnoreCase("employeeNumber")) {
+ user.setHrid((String) ie.next());
+ } else if (attribute.getID().equalsIgnoreCase("mail")) {
+ user.setEmail((String) ie.next());
+ } else if (attribute.getID().equalsIgnoreCase("telephoneNumber")) {
+ user.setPhone((String) ie.next());
+ } else if (attribute.getID().equalsIgnoreCase("departmentNumber")) {
+ user.setOrgCode((String) ie.next());
+ } else if (attribute.getID().equalsIgnoreCase("a1")) {
+ user.setOrgUserId((String) ie.next());
+ } else if (attribute.getID().equalsIgnoreCase("street")) {
+ user.setAddress1((String) ie.next());
+ } else if (attribute.getID().equalsIgnoreCase("roomNumber")) {
+ user.setAddress2((String) ie.next());
+ } else if (attribute.getID().equalsIgnoreCase("l")) {
+ user.setCity((String) ie.next());
+ } else if (attribute.getID().equalsIgnoreCase("st")) {
+ user.setState((String) ie.next());
+ } else if (attribute.getID().equalsIgnoreCase("postalCode")) {
+ user.setZipCode((String) ie.next());
+ } else if (attribute.getID().equalsIgnoreCase("zip4")) {
+ user.setZipCodeSuffix((String) ie.next());
+ } else if (attribute.getID().equalsIgnoreCase("physicalDeliveryOfficeName")) {
+ user.setLocationClli((String) ie.next());
+ } else if (attribute.getID().equalsIgnoreCase("bc")) {
+ user.setBusinessCountryCode((String) ie.next());
+ } else if (attribute.getID().equalsIgnoreCase("friendlyCountryName")) {
+ user.setBusinessCountryName((String) ie.next());
+ } else if (attribute.getID().equalsIgnoreCase("bd")) {
+ user.setDepartment((String) ie.next());
+ } else if (attribute.getID().equalsIgnoreCase("bdname")) {
+ user.setDepartmentName((String) ie.next());
+ } else if (attribute.getID().equalsIgnoreCase("jtname")) {
+ user.setJobTitle((String) ie.next());
+ } else if (attribute.getID().equalsIgnoreCase("mgrid")) {
+ user.setOrgManagerUserId((String) ie.next());
+ } else if (attribute.getID().equalsIgnoreCase("a2")) {
+ user.setCommandChain((String) ie.next());
+ } else if (attribute.getID().equalsIgnoreCase("compcode")) {
+ user.setCompanyCode((String) ie.next());
+ } else if (attribute.getID().equalsIgnoreCase("compdesc")) {
+ user.setCompany((String) ie.next());
+ } else if (attribute.getID().equalsIgnoreCase("bu")) {
+ user.setBusinessUnit((String) ie.next());
+ } else if (attribute.getID().equalsIgnoreCase("buname")) {
+ user.setBusinessUnitName((String) ie.next());
+ } else if (attribute.getID().equalsIgnoreCase("silo")) {
+ user.setSiloStatus((String) ie.next());
+ } else if (attribute.getID().equalsIgnoreCase("costcenter")) {
+ user.setCostCenter((String) ie.next());
+ } else if (attribute.getID().equalsIgnoreCase("b2")) {
+ user.setFinancialLocCode((String) ie.next());
+ } else { // we don't care about returned attribute, let's move on
+ ie.next();
+ }
+
+ }
+ }
+ }
+ } catch (NamingException e) {
+ logger.error(EELFLoggerDelegate.errorLogger, "processAttributes failed with naming exception", e);
+ } catch (Exception e) {
+ logger.error(EELFLoggerDelegate.errorLogger, "processAttributes failed", e);
+ }
+
+ return user;
+ }
+}
diff --git a/ecomp-portal-BE-common/src/main/java/org/onap/portalapp/portal/service/EPLeftMenuService.java b/ecomp-portal-BE-common/src/main/java/org/onap/portalapp/portal/service/EPLeftMenuService.java
new file mode 100644
index 00000000..822776fd
--- /dev/null
+++ b/ecomp-portal-BE-common/src/main/java/org/onap/portalapp/portal/service/EPLeftMenuService.java
@@ -0,0 +1,62 @@
+/*-
+ * ============LICENSE_START==========================================
+ * ONAP Portal
+ * ===================================================================
+ * Copyright (C) 2017 AT&T Intellectual Property. All rights reserved.
+ * ===================================================================
+ *
+ * Unless otherwise specified, all software contained herein is licensed
+ * under the Apache License, Version 2.0 (the "License");
+ * you may not use this software 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.
+ *
+ * Unless otherwise specified, all documentation contained herein is licensed
+ * under the Creative Commons License, Attribution 4.0 Intl. (the "License");
+ * you may not use this documentation except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * https://creativecommons.org/licenses/by/4.0/
+ *
+ * Unless required by applicable law or agreed to in writing, documentation
+ * 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.
+ *
+ * ============LICENSE_END============================================
+ *
+ * ECOMP is a trademark and service mark of AT&T Intellectual Property.
+ */
+package org.onap.portalapp.portal.service;
+
+import java.util.Set;
+
+import org.onap.portalapp.portal.domain.EPUser;
+import org.onap.portalsdk.core.domain.MenuData;
+
+public interface EPLeftMenuService {
+
+ /**
+ * Builds a JSON suitable for populating the front-end left menu from the supplied set of menu items.
+ * @param user
+ *
+ * @param fullMenuSet
+ * @param roleFunctionSet
+ * @return JSON String of this form:
+ * <PRE>
+ * {"navItems":[
+ * {"name":"Home","imageSrc":"icon-location-pin","state":"root.applicationsHome"},
+ * ...
+ * ] }
+ * </PRE>
+ */
+ String getLeftMenuItems(EPUser user, Set<MenuData> fullMenuSet, Set<String> roleFunctionSet);
+}
diff --git a/ecomp-portal-BE-common/src/main/java/org/onap/portalapp/portal/service/EPLeftMenuServiceImpl.java b/ecomp-portal-BE-common/src/main/java/org/onap/portalapp/portal/service/EPLeftMenuServiceImpl.java
new file mode 100644
index 00000000..98d31b16
--- /dev/null
+++ b/ecomp-portal-BE-common/src/main/java/org/onap/portalapp/portal/service/EPLeftMenuServiceImpl.java
@@ -0,0 +1,179 @@
+/*-
+ * ============LICENSE_START==========================================
+ * ONAP Portal
+ * ===================================================================
+ * Copyright (C) 2017 AT&T Intellectual Property. All rights reserved.
+ * ===================================================================
+ *
+ * Unless otherwise specified, all software contained herein is licensed
+ * under the Apache License, Version 2.0 (the "License");
+ * you may not use this software 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.
+ *
+ * Unless otherwise specified, all documentation contained herein is licensed
+ * under the Creative Commons License, Attribution 4.0 Intl. (the "License");
+ * you may not use this documentation except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * https://creativecommons.org/licenses/by/4.0/
+ *
+ * Unless required by applicable law or agreed to in writing, documentation
+ * 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.
+ *
+ * ============LICENSE_END============================================
+ *
+ * ECOMP is a trademark and service mark of AT&T Intellectual Property.
+ */
+package org.onap.portalapp.portal.service;
+
+import java.util.Collection;
+import java.util.Comparator;
+import java.util.LinkedHashMap;
+import java.util.List;
+import java.util.Map;
+import java.util.Set;
+import java.util.SortedSet;
+import java.util.TreeSet;
+
+import org.json.JSONArray;
+import org.json.JSONObject;
+import org.onap.portalapp.portal.domain.CentralizedApp;
+import org.onap.portalapp.portal.domain.EPUser;
+import org.onap.portalapp.portal.logging.aop.EPMetricsLog;
+import org.onap.portalsdk.core.domain.MenuData;
+import org.onap.portalsdk.core.logging.logic.EELFLoggerDelegate;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.context.annotation.EnableAspectJAutoProxy;
+import org.springframework.stereotype.Service;
+import org.springframework.transaction.annotation.Transactional;
+
+@Service("leftMenuService")
+@Transactional
+@org.springframework.context.annotation.Configuration
+@EnableAspectJAutoProxy
+@EPMetricsLog
+
+public class EPLeftMenuServiceImpl implements EPLeftMenuService {
+
+ private static final EELFLoggerDelegate logger = EELFLoggerDelegate.getLogger(EPLeftMenuServiceImpl.class);
+
+
+ @Autowired
+ private ExternalAccessRolesService externalAccessRolesService;
+ /*
+ * (non-Javadoc)
+ *
+ * @see
+ * org.openecomp.portalapp.portal.service.EPLeftMenuService#getLeftMenuItems
+ * (java.util.Set)
+ */
+ @Override
+ public String getLeftMenuItems(EPUser user, Set<MenuData> fullMenuSet, Set<String> roleFunctionSet) {
+ final Map<String, JSONObject> defaultNavMap = new LinkedHashMap<String, JSONObject>();
+ resetNavMap(defaultNavMap);
+ loadDefaultNavMap(defaultNavMap);
+ loadNavMapByRole(defaultNavMap, fullMenuSet , user);
+ return convertToSideBarModel(defaultNavMap);
+ }
+
+ /**
+ * Clears the map
+ *
+ * @param defaultNavMap
+ */
+ private void resetNavMap(Map<String, JSONObject> defaultNavMap) {
+ defaultNavMap.clear();
+ }
+
+ /**
+ *
+ * @param defaultNavMap
+ * @param fullMenuSet
+ */
+ private void loadNavMapByRole(Map<String, JSONObject> defaultNavMap, Set<MenuData> fullMenuSet , EPUser user) {
+
+ class SortOrderComparator implements Comparator<MenuData> {
+ @Override
+ public int compare(MenuData e1, MenuData e2) {
+ return e1.getSortOrder().compareTo(e2.getSortOrder());
+ }
+ }
+
+ SortedSet<MenuData> sortMenuSet = new TreeSet<MenuData>(new SortOrderComparator());
+ for (MenuData mn : fullMenuSet) {
+ sortMenuSet.add(mn);
+ }
+
+ // Remove Roles from left menu if user doesnt have admin access on
+ // centralized application
+ List<CentralizedApp> applicationsList = null;
+ applicationsList = externalAccessRolesService.getCentralizedAppsOfUser(user.getOrgUserId());
+ if (applicationsList.size() == 0)
+ sortMenuSet.removeIf(x -> x.getLabel().contains("Roles"));
+
+ for (MenuData mn : sortMenuSet) {
+ JSONObject navItemsDetails = new JSONObject();
+ navItemsDetails.put("name", mn.getLabel());
+ navItemsDetails.put("state", mn.getAction());
+ navItemsDetails.put("imageSrc", mn.getImageSrc());
+ defaultNavMap.put(mn.getAction(), navItemsDetails);
+ }
+ }
+
+ /**
+ *
+ * @param defaultNavMap
+ * @return
+ */
+ private String convertToSideBarModel(Map<String, JSONObject> defaultNavMap) {
+ JSONObject sidebarModel = new JSONObject();
+ JSONArray navItems = new JSONArray();
+ Collection<JSONObject> jsonObjs = defaultNavMap.values();
+
+ for (JSONObject navItemsDetail : jsonObjs)
+ navItems.put(navItemsDetail);
+
+ sidebarModel.put("label", "ECOMP portal");
+ sidebarModel.put("navItems", navItems);
+ return sidebarModel.toString();
+ }
+
+ /**
+ * Loads default entries for regular user.
+ *
+ * @param defaultNavMap
+ */
+ private void loadDefaultNavMap(Map<String, JSONObject> defaultNavMap) {
+
+ JSONObject navItemsDetails1 = new JSONObject();
+ navItemsDetails1.put("name", "Home");
+ navItemsDetails1.put("state", "root.applicationsHome");
+ navItemsDetails1.put("imageSrc", "icon-building-home");
+ defaultNavMap.put("root.applicationsHome", navItemsDetails1);
+
+ JSONObject navItemsDetails2 = new JSONObject();
+ navItemsDetails2.put("name", "Application Catalog");
+ navItemsDetails2.put("state", "root.appCatalog");
+ navItemsDetails2.put("imageSrc", "icon-apps-marketplace");
+ defaultNavMap.put("root.appCatalog", navItemsDetails2);
+
+ JSONObject navItemsDetails3 = new JSONObject();
+ navItemsDetails3.put("name", "Widget Catalog");
+ navItemsDetails3.put("state", "root.widgetCatalog");
+ navItemsDetails3.put("imageSrc", "icon-apps-marketplace");
+ defaultNavMap.put("root.widgetCatalog", navItemsDetails3);
+
+ }
+
+}
diff --git a/ecomp-portal-BE-common/src/main/java/org/onap/portalapp/portal/service/EPLoginService.java b/ecomp-portal-BE-common/src/main/java/org/onap/portalapp/portal/service/EPLoginService.java
new file mode 100644
index 00000000..4fd9baa4
--- /dev/null
+++ b/ecomp-portal-BE-common/src/main/java/org/onap/portalapp/portal/service/EPLoginService.java
@@ -0,0 +1,90 @@
+/*-
+ * ============LICENSE_START==========================================
+ * ONAP Portal
+ * ===================================================================
+ * Copyright (C) 2017 AT&T Intellectual Property. All rights reserved.
+ * ===================================================================
+ *
+ * Unless otherwise specified, all software contained herein is licensed
+ * under the Apache License, Version 2.0 (the "License");
+ * you may not use this software 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.
+ *
+ * Unless otherwise specified, all documentation contained herein is licensed
+ * under the Creative Commons License, Attribution 4.0 Intl. (the "License");
+ * you may not use this documentation except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * https://creativecommons.org/licenses/by/4.0/
+ *
+ * Unless required by applicable law or agreed to in writing, documentation
+ * 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.
+ *
+ * ============LICENSE_END============================================
+ *
+ * ECOMP is a trademark and service mark of AT&T Intellectual Property.
+ */
+package org.onap.portalapp.portal.service;
+
+import java.util.HashMap;
+
+import org.onap.portalapp.command.EPLoginBean;
+import org.onap.portalapp.portal.domain.EPUser;
+
+public interface EPLoginService {
+
+ /**
+ * Calls {@link #findUser(EPLoginBean, String, HashMap, boolean)} with the
+ * last parameter set to true.
+ *
+ * @param bean
+ * @param menuPropertiesFilename
+ * @param additionalParams
+ * @return EPUser object; null on error or if no match.
+ * @throws Exception
+ */
+ @SuppressWarnings("rawtypes")
+ EPLoginBean findUser(EPLoginBean bean, String menuPropertiesFilename, HashMap additionalParams) throws Exception;
+
+ /**
+ * Searches the fn_user table for a row that matches information in the
+ * bean. Uses the bean's Organization User ID property if present; if not,
+ * uses the bean's LoginId property and (optionally, depending on
+ * matchPassword parameter) loginPwd property.
+ *
+ * @param bean
+ * EPLoginBean
+ * @param menuPropertiesFileName
+ * Always ignored
+ * @param additionalParams
+ * Used by DataAccessService when updating a matched user object
+ * @param matchPassword
+ * If true, the search must match the password
+ * @return EPUser object; null on error or if no match.
+ * @throws Exception
+ */
+ @SuppressWarnings("rawtypes")
+ EPLoginBean findUser(EPLoginBean bean, String menuPropertiesFileName, HashMap additionalParams,
+ boolean matchPassword) throws Exception;
+
+ /**
+ * Searches the fn_user table for a row with a value in column login_id that
+ * matches the specified value.
+ *
+ * @param loginId
+ * Login name
+ * @return EPUser object; null on error or if no match.
+ */
+ public EPUser findUserWithoutPwd(String loginId);
+}
diff --git a/ecomp-portal-BE-common/src/main/java/org/onap/portalapp/portal/service/EPLoginServiceImpl.java b/ecomp-portal-BE-common/src/main/java/org/onap/portalapp/portal/service/EPLoginServiceImpl.java
new file mode 100644
index 00000000..eff297f5
--- /dev/null
+++ b/ecomp-portal-BE-common/src/main/java/org/onap/portalapp/portal/service/EPLoginServiceImpl.java
@@ -0,0 +1,240 @@
+/*-
+ * ============LICENSE_START==========================================
+ * ONAP Portal
+ * ===================================================================
+ * Copyright (C) 2017 AT&T Intellectual Property. All rights reserved.
+ * ===================================================================
+ *
+ * Unless otherwise specified, all software contained herein is licensed
+ * under the Apache License, Version 2.0 (the "License");
+ * you may not use this software 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.
+ *
+ * Unless otherwise specified, all documentation contained herein is licensed
+ * under the Creative Commons License, Attribution 4.0 Intl. (the "License");
+ * you may not use this documentation except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * https://creativecommons.org/licenses/by/4.0/
+ *
+ * Unless required by applicable law or agreed to in writing, documentation
+ * 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.
+ *
+ * ============LICENSE_END============================================
+ *
+ * ECOMP is a trademark and service mark of AT&T Intellectual Property.
+ */
+package org.onap.portalapp.portal.service;
+
+import java.util.Date;
+import java.util.HashMap;
+import java.util.HashSet;
+import java.util.List;
+import java.util.Map;
+import java.util.Set;
+
+import org.onap.portalapp.command.EPLoginBean;
+import org.onap.portalapp.portal.domain.EPUser;
+import org.onap.portalapp.portal.logging.aop.EPMetricsLog;
+import org.onap.portalapp.portal.logging.format.EPAppMessagesEnum;
+import org.onap.portalapp.portal.logging.logic.EPLogUtil;
+import org.onap.portalapp.util.EPUserUtils;
+import org.onap.portalsdk.core.logging.logic.EELFLoggerDelegate;
+import org.onap.portalsdk.core.menu.MenuBuilder;
+import org.onap.portalsdk.core.service.DataAccessService;
+import org.onap.portalsdk.core.service.support.FusionService;
+import org.onap.portalsdk.core.util.SystemProperties;
+import org.onap.portalsdk.core.web.support.AppUtils;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.context.annotation.EnableAspectJAutoProxy;
+import org.springframework.stereotype.Service;
+import org.springframework.transaction.annotation.Transactional;
+
+@Service("eploginService")
+@Transactional
+@org.springframework.context.annotation.Configuration
+@EnableAspectJAutoProxy
+@EPMetricsLog
+public class EPLoginServiceImpl extends FusionService implements EPLoginService {
+ EELFLoggerDelegate logger = EELFLoggerDelegate.getLogger(EPLoginServiceImpl.class);
+
+ @Autowired
+ private DataAccessService dataAccessService;
+
+ /*
+ * (non-Javadoc)
+ * @see org.openecomp.portalapp.portal.service.EPLoginService#findUser(org.openecomp.portalapp.command.EPLoginBean, java.lang.String, java.util.HashMap)
+ */
+ @SuppressWarnings("rawtypes")
+ public EPLoginBean findUser(EPLoginBean bean, String menuPropertiesFilename, HashMap additionalParams)
+ throws Exception {
+ return findUser(bean, menuPropertiesFilename, additionalParams, true);
+ }
+
+ /*
+ * (non-Javadoc)
+ * @see org.openecomp.portalapp.portal.service.EPLoginService#findUser(org.openecomp.portalapp.command.EPLoginBean, java.lang.String, java.util.HashMap, boolean)
+ */
+ @SuppressWarnings("rawtypes")
+ public EPLoginBean findUser(EPLoginBean bean, String menuPropertiesFilename_ignored, HashMap additionalParams,
+ boolean matchPassword) throws Exception {
+ EPUser user = null;
+ EPUser userCopy = null;
+
+ if (bean.getOrgUserId() != null) {
+ user = (EPUser) findUser(bean);
+ } else {
+ if (matchPassword)
+ user = (EPUser) findUser(bean.getLoginId(), bean.getLoginPwd());
+ else
+ user = (EPUser) findUserWithoutPwd(bean.getLoginId());
+ }
+
+ // run this command to fetch more information from the lazily loaded
+ // object
+
+ // This is funny - commenting out the following method call
+ // 1. What are we doing with the returned values of the following two
+ // methods? Nothing.
+ // 2. Use a guest user scenario - user object will be null - clealry,
+ // NPE.
+ // 3. A check of if(user !=null) is made AFTER these bogus calls :) - If
+ // these calls WERE doing anything significat (which they are not),
+ // shouln't they have been moved inside that if check?
+
+ // user.getEPUserApps();
+
+ // Comments
+ // 1. This method is clearly doing more than 'getting roles' - Not a
+ // good name -
+ // 2. Also, there is no null check - guest user scenarios will break the
+ // code with NPE - added the check - Do not want to remove the call
+ // altogether - not sure how it will effect things.
+
+ if (user != null) {
+ user.getEPRoles();
+
+ // raise an error if the portal application is locked and the user
+ // does not
+ // have system administrator privileges
+ if (AppUtils.isApplicationLocked()
+ && !EPUserUtils.hasRole(user, SystemProperties.getProperty(SystemProperties.SYS_ADMIN_ROLE_ID))) {
+ bean.setLoginErrorMessage(SystemProperties.MESSAGE_KEY_LOGIN_ERROR_APPLICATION_LOCKED);
+ EPLogUtil.logEcompError(logger, EPAppMessagesEnum.BeUserAdminPrivilegesInfo, user.getLoginId());
+ }
+
+ // raise an error if the user is inactive
+ if (!user.getActive()) {
+ bean.setLoginErrorMessage(SystemProperties.MESSAGE_KEY_LOGIN_ERROR_USER_INACTIVE);
+ EPLogUtil.logEcompError(logger, EPAppMessagesEnum.BeUserInactiveWarning, user.getLoginId());
+ }
+
+ // only login the user if no errors have occurred
+ if (bean.getLoginErrorMessage() == null) {
+
+ // this will be a snapshot of the user's information as
+ // retrieved from the database
+ userCopy = (EPUser) user.clone();
+
+ // update the last logged in date for the user
+ user.setLastLoginDate(new Date());
+ getDataAccessService().saveDomainObject(user, additionalParams);
+
+ // create the application menu based on the user's privileges
+ MenuBuilder menuBuilder = new MenuBuilder();
+ Set appMenu = menuBuilder.getMenu(
+ SystemProperties.getProperty(SystemProperties.APPLICATION_MENU_SET_NAME), dataAccessService);
+ bean.setMenu(appMenu != null ? appMenu : new HashSet());
+ Set businessDirectMenu = menuBuilder.getMenu(
+ SystemProperties.getProperty(SystemProperties.BUSINESS_DIRECT_MENU_SET_NAME),
+ dataAccessService);
+ bean.setBusinessDirectMenu(businessDirectMenu != null ? businessDirectMenu : new HashSet());
+
+ bean.setUser(userCopy);
+ }
+
+ } else {
+ EPLogUtil.logEcompError(logger, EPAppMessagesEnum.BeUserMissingError, bean.getOrgUserId());
+ }
+
+ return bean;
+ }
+
+ /**
+ * Searches the fn_user table for a row that matches the specified login_id
+ * and login_pwd values.
+ *
+ * @param loginId
+ * @param password
+ * @return EPUser object; null on error or if no match.
+ */
+ @SuppressWarnings("rawtypes")
+ private EPUser findUser(String loginId, String password) {
+ Map<String, String> params = new HashMap<>();
+ params.put("login_id", loginId);
+ params.put("login_pwd", password);
+ List list = null;
+ try {
+ list = dataAccessService.executeNamedQuery("getEPUserByLoginIdLoginPwd", params, new HashMap());
+ } catch (Exception e) {
+ EPLogUtil.logEcompError(logger, EPAppMessagesEnum.BeDaoSystemError, e);
+ logger.error(EELFLoggerDelegate.errorLogger, "findUser failed on " + loginId, e);
+ }
+ return (list == null || list.isEmpty()) ? null : (EPUser) list.get(0);
+ }
+
+ @SuppressWarnings("rawtypes")
+ public EPUser findUserWithoutPwd(String loginId) {
+ Map<String, String> params = new HashMap<>();
+ params.put("login_id", loginId);
+ List list = null;
+ try {
+ list = dataAccessService.executeNamedQuery("getEPUserByLoginId", params, new HashMap());
+ } catch (Exception e) {
+ EPLogUtil.logEcompError(logger, EPAppMessagesEnum.BeDaoSystemError, e);
+ logger.error(EELFLoggerDelegate.errorLogger, "findUserWithoutPwd failed on " + loginId, e);
+ }
+ return (list == null || list.isEmpty()) ? null : (EPUser) list.get(0);
+ }
+
+ /**
+ * Searches the fn_user table for a row that matches the value of the bean's
+ * Organization User ID property.
+ *
+ * @param bean
+ * @return EPUser object; null on error or if no match.
+ */
+ @SuppressWarnings("rawtypes")
+ private EPUser findUser(EPLoginBean bean) {
+ Map<String, String> params = new HashMap<>();
+ params.put("org_user_id", bean.getOrgUserId());
+ List list = null;
+ try {
+ list = dataAccessService.executeNamedQuery("getEPUserByOrgUserId", params, new HashMap());
+ } catch (Exception e) {
+ EPLogUtil.logEcompError(logger, EPAppMessagesEnum.BeDaoSystemError, e);
+ logger.error(EELFLoggerDelegate.errorLogger, "findUser(EPLoginBean) failed", e);
+ }
+ return (list == null || list.isEmpty()) ? null : (EPUser) list.get(0);
+ }
+
+ public DataAccessService getDataAccessService() {
+ return dataAccessService;
+ }
+
+ public void setDataAccessService(DataAccessService dataAccessService) {
+ this.dataAccessService = dataAccessService;
+ }
+
+}
diff --git a/ecomp-portal-BE-common/src/main/java/org/onap/portalapp/portal/service/EPRoleFunctionService.java b/ecomp-portal-BE-common/src/main/java/org/onap/portalapp/portal/service/EPRoleFunctionService.java
new file mode 100644
index 00000000..044225a3
--- /dev/null
+++ b/ecomp-portal-BE-common/src/main/java/org/onap/portalapp/portal/service/EPRoleFunctionService.java
@@ -0,0 +1,71 @@
+/*-
+ * ============LICENSE_START==========================================
+ * ONAP Portal
+ * ===================================================================
+ * Copyright (C) 2017 AT&T Intellectual Property. All rights reserved.
+ * ===================================================================
+ *
+ * Unless otherwise specified, all software contained herein is licensed
+ * under the Apache License, Version 2.0 (the "License");
+ * you may not use this software 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.
+ *
+ * Unless otherwise specified, all documentation contained herein is licensed
+ * under the Creative Commons License, Attribution 4.0 Intl. (the "License");
+ * you may not use this documentation except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * https://creativecommons.org/licenses/by/4.0/
+ *
+ * Unless required by applicable law or agreed to in writing, documentation
+ * 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.
+ *
+ * ============LICENSE_END============================================
+ *
+ * ECOMP is a trademark and service mark of AT&T Intellectual Property.
+ */
+package org.onap.portalapp.portal.service;
+
+import java.util.List;
+import java.util.Set;
+
+import javax.servlet.http.HttpServletRequest;
+
+import org.apache.commons.codec.DecoderException;
+import org.onap.portalapp.portal.domain.EPUser;
+import org.onap.portalapp.portal.exceptions.RoleFunctionException;
+import org.onap.portalsdk.core.domain.RoleFunction;
+
+public interface EPRoleFunctionService {
+
+ /**
+ * Builds a set of role functions and sets a session attribute with it.
+ *
+ * @return Set of role functions that was built.
+ */
+ public List<RoleFunction> getRoleFunctions();
+
+ /**
+ * Builds a set of role functions of user
+ *
+ * @param request
+ * HttpServletRequest
+ * @param user
+ * EPUser
+ * @return Set of role functions that was built.
+ * @throws RoleFunctionException
+ */
+ public Set getRoleFunctions(HttpServletRequest request, EPUser user) throws RoleFunctionException;
+
+}
diff --git a/ecomp-portal-BE-common/src/main/java/org/onap/portalapp/portal/service/EPRoleFunctionServiceCentralizedImpl.java b/ecomp-portal-BE-common/src/main/java/org/onap/portalapp/portal/service/EPRoleFunctionServiceCentralizedImpl.java
new file mode 100644
index 00000000..c2028056
--- /dev/null
+++ b/ecomp-portal-BE-common/src/main/java/org/onap/portalapp/portal/service/EPRoleFunctionServiceCentralizedImpl.java
@@ -0,0 +1,132 @@
+/*-
+ * ============LICENSE_START==========================================
+ * ONAP Portal
+ * ===================================================================
+ * Copyright (C) 2017 AT&T Intellectual Property. All rights reserved.
+ * ===================================================================
+ *
+ * Unless otherwise specified, all software contained herein is licensed
+ * under the Apache License, Version 2.0 (the "License");
+ * you may not use this software 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.
+ *
+ * Unless otherwise specified, all documentation contained herein is licensed
+ * under the Creative Commons License, Attribution 4.0 Intl. (the "License");
+ * you may not use this documentation except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * https://creativecommons.org/licenses/by/4.0/
+ *
+ * Unless required by applicable law or agreed to in writing, documentation
+ * 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.
+ *
+ * ============LICENSE_END============================================
+ *
+ * ECOMP is a trademark and service mark of AT&T Intellectual Property.
+ */
+package org.onap.portalapp.portal.service;
+
+import java.util.ArrayList;
+import java.util.HashMap;
+import java.util.HashSet;
+import java.util.List;
+import java.util.Map;
+import java.util.Set;
+import java.util.regex.Pattern;
+import java.util.stream.Collectors;
+
+import javax.servlet.http.HttpServletRequest;
+import javax.servlet.http.HttpSession;
+
+import org.apache.commons.codec.DecoderException;
+import org.apache.commons.codec.binary.Hex;
+import org.hibernate.SessionFactory;
+import org.onap.portalapp.portal.controller.RoleManageController;
+import org.onap.portalapp.portal.domain.CentralV2RoleFunction;
+import org.onap.portalapp.portal.domain.EPRole;
+import org.onap.portalapp.portal.domain.EPUser;
+import org.onap.portalapp.portal.exceptions.RoleFunctionException;
+import org.onap.portalapp.portal.utils.EcompPortalUtils;
+import org.onap.portalapp.util.EPUserUtils;
+import org.onap.portalsdk.core.domain.RoleFunction;
+import org.onap.portalsdk.core.logging.logic.EELFLoggerDelegate;
+import org.onap.portalsdk.core.service.DataAccessService;
+import org.onap.portalsdk.core.util.SystemProperties;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.transaction.annotation.Transactional;
+
+
+@Transactional
+public class EPRoleFunctionServiceCentralizedImpl implements EPRoleFunctionService{
+
+ private static EELFLoggerDelegate logger = EELFLoggerDelegate.getLogger(EPRoleFunctionServiceCentralizedImpl.class);
+
+ @Autowired
+ private DataAccessService dataAccessService;
+
+ @Autowired
+ private SessionFactory sessionFactory;
+
+ @Autowired
+ private ExternalAccessRolesService externalAccessRolesService;
+
+ @SuppressWarnings("unchecked")
+ @Override
+ public List<RoleFunction> getRoleFunctions() {
+ List<CentralV2RoleFunction> getRoleFuncList = null;
+ List<RoleFunction> getRoleFuncListOfPortal = new ArrayList<>();
+ final Map<String, Long> params = new HashMap<>();
+ params.put("appId", (long) 1);
+ //Sync all functions from external system into Ecomp portal DB
+ getRoleFuncList = dataAccessService.executeNamedQuery("getAllRoleFunctions", params, null);
+ for(CentralV2RoleFunction roleFunction : getRoleFuncList)
+ {
+ RoleFunction roleFun = new RoleFunction();
+ String code = EcompPortalUtils.getFunctionCode(roleFunction.getCode());
+ roleFun.setCode(code);
+ roleFun.setName(roleFunction.getName());
+ getRoleFuncListOfPortal.add(roleFun);
+ }
+ return getRoleFuncListOfPortal;
+ }
+
+ @SuppressWarnings({ "unchecked", "rawtypes" })
+ @Override
+ public Set getRoleFunctions(HttpServletRequest request, EPUser user) throws RoleFunctionException {
+ HttpSession session = request.getSession();
+ String userId = user.getId().toString();
+ final Map<String, String> params = new HashMap<>();
+ params.put("userId", userId);
+ List getRoleFuncListOfPortal = dataAccessService.executeNamedQuery("getRoleFunctionsOfUser", params, null);
+ Set<String> getRoleFuncListOfPortalSet = new HashSet<>(getRoleFuncListOfPortal);
+ Set<String> roleFunSet = new HashSet<>();
+ roleFunSet = getRoleFuncListOfPortalSet.stream().filter(x -> x.contains("|")).collect(Collectors.toSet());
+ if (roleFunSet.size() > 0)
+ for (String roleFunction : roleFunSet) {
+ String roleFun = EcompPortalUtils.getFunctionCode(roleFunction);
+ getRoleFuncListOfPortalSet.remove(roleFunction);
+ getRoleFuncListOfPortalSet.add(roleFun);
+ }
+
+ Set<String> finalRoleFunctionSet = new HashSet<>();
+ for (String roleFn : getRoleFuncListOfPortalSet) {
+ finalRoleFunctionSet.add(EPUserUtils.decodeFunctionCode(roleFn));
+ }
+ session.setAttribute(SystemProperties.getProperty(SystemProperties.ROLE_FUNCTIONS_ATTRIBUTE_NAME),
+ finalRoleFunctionSet);
+ logger.debug(EELFLoggerDelegate.debugLogger,
+ "getRoleFunctions: RoleFunctions Of User" + finalRoleFunctionSet);
+ return finalRoleFunctionSet;
+ }
+}
diff --git a/ecomp-portal-BE-common/src/main/java/org/onap/portalapp/portal/service/EPRoleFunctionServiceImpl.java b/ecomp-portal-BE-common/src/main/java/org/onap/portalapp/portal/service/EPRoleFunctionServiceImpl.java
new file mode 100644
index 00000000..130d9caa
--- /dev/null
+++ b/ecomp-portal-BE-common/src/main/java/org/onap/portalapp/portal/service/EPRoleFunctionServiceImpl.java
@@ -0,0 +1,116 @@
+/*-
+ * ============LICENSE_START==========================================
+ * ONAP Portal
+ * ===================================================================
+ * Copyright (C) 2017 AT&T Intellectual Property. All rights reserved.
+ * ===================================================================
+ *
+ * Unless otherwise specified, all software contained herein is licensed
+ * under the Apache License, Version 2.0 (the "License");
+ * you may not use this software 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.
+ *
+ * Unless otherwise specified, all documentation contained herein is licensed
+ * under the Creative Commons License, Attribution 4.0 Intl. (the "License");
+ * you may not use this documentation except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * https://creativecommons.org/licenses/by/4.0/
+ *
+ * Unless required by applicable law or agreed to in writing, documentation
+ * 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.
+ *
+ * ============LICENSE_END============================================
+ *
+ * ECOMP is a trademark and service mark of AT&T Intellectual Property.
+ */
+package org.onap.portalapp.portal.service;
+
+import java.util.HashMap;
+import java.util.HashSet;
+import java.util.Iterator;
+import java.util.List;
+import java.util.Set;
+
+import javax.servlet.http.HttpServletRequest;
+import javax.servlet.http.HttpSession;
+
+import org.onap.portalapp.portal.domain.EPRole;
+import org.onap.portalapp.portal.domain.EPUser;
+import org.onap.portalapp.util.EPUserUtils;
+import org.onap.portalsdk.core.domain.RoleFunction;
+import org.onap.portalsdk.core.service.DataAccessService;
+import org.onap.portalsdk.core.util.SystemProperties;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.transaction.annotation.Transactional;
+
+@Transactional
+public class EPRoleFunctionServiceImpl implements EPRoleFunctionService {
+ @Autowired
+ private DataAccessService dataAccessService;
+
+
+
+ public DataAccessService getDataAccessService() {
+ return dataAccessService;
+ }
+
+ public void setDataAccessService(DataAccessService dataAccessService) {
+ this.dataAccessService = dataAccessService;
+ }
+
+ @SuppressWarnings("unchecked")
+ @Override
+ public List<RoleFunction> getRoleFunctions() {
+ return getDataAccessService().getList(RoleFunction.class, null);
+ }
+
+ @SuppressWarnings("unchecked")
+ @Override
+ public Set getRoleFunctions(HttpServletRequest request, EPUser user) {
+ HashSet roleFunctions = null;
+
+ HttpSession session = request.getSession();
+ roleFunctions = (HashSet) session
+ .getAttribute(SystemProperties.getProperty(SystemProperties.ROLE_FUNCTIONS_ATTRIBUTE_NAME));
+
+ if (roleFunctions == null) {
+ HashMap roles = EPUserUtils.getRoles(request);
+ roleFunctions = new HashSet();
+
+ Iterator i = roles.keySet().iterator();
+
+ while (i.hasNext()) {
+ Long roleKey = (Long) i.next();
+ EPRole role = (EPRole) roles.get(roleKey);
+
+ Iterator j = role.getRoleFunctions().iterator();
+
+ while (j.hasNext()) {
+ RoleFunction function = (RoleFunction) j.next();
+ roleFunctions.add(function.getCode());
+ }
+ }
+
+ session.setAttribute(SystemProperties.getProperty(SystemProperties.ROLE_FUNCTIONS_ATTRIBUTE_NAME),
+ roleFunctions);
+ }
+
+ return roleFunctions;
+ }
+
+
+
+
+}
diff --git a/ecomp-portal-BE-common/src/main/java/org/onap/portalapp/portal/service/EPRoleService.java b/ecomp-portal-BE-common/src/main/java/org/onap/portalapp/portal/service/EPRoleService.java
new file mode 100644
index 00000000..d29e6494
--- /dev/null
+++ b/ecomp-portal-BE-common/src/main/java/org/onap/portalapp/portal/service/EPRoleService.java
@@ -0,0 +1,55 @@
+/*-
+ * ============LICENSE_START==========================================
+ * ONAP Portal
+ * ===================================================================
+ * Copyright (C) 2017 AT&T Intellectual Property. All rights reserved.
+ * ===================================================================
+ *
+ * Unless otherwise specified, all software contained herein is licensed
+ * under the Apache License, Version 2.0 (the "License");
+ * you may not use this software 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.
+ *
+ * Unless otherwise specified, all documentation contained herein is licensed
+ * under the Creative Commons License, Attribution 4.0 Intl. (the "License");
+ * you may not use this documentation except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * https://creativecommons.org/licenses/by/4.0/
+ *
+ * Unless required by applicable law or agreed to in writing, documentation
+ * 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.
+ *
+ * ============LICENSE_END============================================
+ *
+ * ECOMP is a trademark and service mark of AT&T Intellectual Property.
+ */
+package org.onap.portalapp.portal.service;
+
+import java.util.List;
+
+import org.onap.portalapp.portal.domain.EPRole;
+import org.onap.portalsdk.core.domain.RoleFunction;
+
+
+public interface EPRoleService {
+
+ // Used by ECOMP. Get cached role by two columns used by ECOMP only. app id, and external app role id.
+ EPRole getRole(Long appId, Long appRoleid);
+ public void saveRole(EPRole domainRole);
+ EPRole getAppRole(String roleName, Long appId);
+ public List<RoleFunction> getRoleFunctions();
+
+
+}
diff --git a/ecomp-portal-BE-common/src/main/java/org/onap/portalapp/portal/service/EPRoleServiceImpl.java b/ecomp-portal-BE-common/src/main/java/org/onap/portalapp/portal/service/EPRoleServiceImpl.java
new file mode 100644
index 00000000..3e73d8d2
--- /dev/null
+++ b/ecomp-portal-BE-common/src/main/java/org/onap/portalapp/portal/service/EPRoleServiceImpl.java
@@ -0,0 +1,196 @@
+/*-
+ * ============LICENSE_START==========================================
+ * ONAP Portal
+ * ===================================================================
+ * Copyright (C) 2017 AT&T Intellectual Property. All rights reserved.
+ * ===================================================================
+ *
+ * Unless otherwise specified, all software contained herein is licensed
+ * under the Apache License, Version 2.0 (the "License");
+ * you may not use this software 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.
+ *
+ * Unless otherwise specified, all documentation contained herein is licensed
+ * under the Creative Commons License, Attribution 4.0 Intl. (the "License");
+ * you may not use this documentation except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * https://creativecommons.org/licenses/by/4.0/
+ *
+ * Unless required by applicable law or agreed to in writing, documentation
+ * 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.
+ *
+ * ============LICENSE_END============================================
+ *
+ * ECOMP is a trademark and service mark of AT&T Intellectual Property.
+ */
+package org.onap.portalapp.portal.service;
+
+import java.util.HashMap;
+import java.util.Iterator;
+import java.util.List;
+import java.util.Map;
+import java.util.Set;
+import java.util.TreeSet;
+
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.context.annotation.EnableAspectJAutoProxy;
+import org.springframework.stereotype.Service;
+import org.springframework.transaction.annotation.Transactional;
+import org.onap.portalapp.portal.domain.EPRole;
+import org.onap.portalapp.portal.logging.aop.EPMetricsLog;
+import org.onap.portalapp.portal.utils.PortalConstants;
+import org.onap.portalsdk.core.domain.RoleFunction;
+import org.onap.portalsdk.core.logging.logic.EELFLoggerDelegate;
+import org.onap.portalsdk.core.service.DataAccessService;
+
+@Service("epRoleService")
+@Transactional
+@org.springframework.context.annotation.Configuration
+@EnableAspectJAutoProxy
+@EPMetricsLog
+public class EPRoleServiceImpl implements EPRoleService {
+ EELFLoggerDelegate logger = EELFLoggerDelegate.getLogger(EPRoleServiceImpl.class);
+
+ @Autowired
+ private DataAccessService dataAccessService;
+
+ @SuppressWarnings("unchecked")
+ public List<RoleFunction> getRoleFunctions() {
+ // List msgDB = getDataAccessService().getList(Profile.class, null);
+ return getDataAccessService().getList(RoleFunction.class, null);
+ }
+
+ @SuppressWarnings("unchecked")
+ public List<EPRole> getAvailableChildRoles(Long roleId) {
+ List<EPRole> availableChildRoles = (List<EPRole>) getDataAccessService().getList(EPRole.class, null);
+ if (roleId == null || roleId == 0) {
+ return availableChildRoles;
+ }
+
+ EPRole currentRole = (EPRole) getDataAccessService().getDomainObject(EPRole.class, roleId, null);
+ Set<EPRole> allParentRoles = new TreeSet<EPRole>();
+ allParentRoles = getAllParentRolesAsList(currentRole, allParentRoles);
+
+ Iterator<EPRole> availableChildRolesIterator = availableChildRoles.iterator();
+ while (availableChildRolesIterator.hasNext()) {
+ EPRole role = availableChildRolesIterator.next();
+ if (!role.getActive() || allParentRoles.contains(role) || role.getId().equals(roleId)) {
+ availableChildRolesIterator.remove();
+ }
+ }
+ return availableChildRoles;
+ }
+
+ private Set<EPRole> getAllParentRolesAsList(EPRole role, Set<EPRole> allParentRoles) {
+ Set<EPRole> parentRoles = role.getParentRoles();
+ allParentRoles.addAll(parentRoles);
+ Iterator<EPRole> parentRolesIterator = parentRoles.iterator();
+ while (parentRolesIterator.hasNext()) {
+ getAllParentRolesAsList(parentRolesIterator.next(), allParentRoles);
+ }
+ return allParentRoles;
+ }
+
+ public RoleFunction getRoleFunction(String code) {
+ return (RoleFunction) getDataAccessService().getDomainObject(RoleFunction.class, code, null);
+ }
+
+ public void saveRoleFunction(RoleFunction domainRoleFunction) {
+ getDataAccessService().saveDomainObject(domainRoleFunction, null);
+ }
+
+ public void deleteRoleFunction(RoleFunction domainRoleFunction) {
+ getDataAccessService().deleteDomainObject(domainRoleFunction, null);
+ }
+
+ public EPRole getRole(Long id) {
+ return (EPRole) getDataAccessService().getDomainObject(EPRole.class, id, null);
+ }
+
+ // TODO: refactor
+ private static final String getAppRoleSqlFormat = "SELECT * FROM fn_role where APP_ID = %s AND APP_ROLE_ID = %s";
+
+ @SuppressWarnings("unchecked")
+ public EPRole getRole(Long appId, Long appRoleid) {
+ if (appId == null || appRoleid == null) {
+ logger.error(EELFLoggerDelegate.errorLogger, String.format(
+ "getRole does not support null appId or roleId. appRoleid=%s, appRoleid=%s", appId, appRoleid));
+ return null;
+ }
+
+ String sql = String.format(getAppRoleSqlFormat, appId, appRoleid);
+
+ List<EPRole> roles = (List<EPRole>) dataAccessService.executeSQLQuery(sql, EPRole.class, null);
+ int resultsCount = roles.size();
+ if (resultsCount > 1) {
+ logger.error(EELFLoggerDelegate.errorLogger,
+ String.format(
+ "search by appId=%s, appRoleid=%s should have returned 0 or 1 results. Got %d. This is an internal server error.",
+ appId, appRoleid, resultsCount));
+ logger.error(EELFLoggerDelegate.errorLogger,
+ "Trying to recover from duplicates by returning the first search result. This issue should be treated, it is probably not critical because duplicate roles should be similar.");
+ return roles.get(0);
+ } else if (resultsCount == 1) {
+ return roles.get(0);
+ }
+ return null;
+ }
+
+ @SuppressWarnings("unchecked")
+ public EPRole getAppRole(String roleName, Long appId) {
+
+ final Map<String, String> params = new HashMap<String, String>();
+ final Map<String, String> portalParams = new HashMap<String, String>();
+ List<EPRole> roles = null;
+ params.put("appId", appId.toString());
+ params.put("roleName", roleName);
+ portalParams.put("appRoleName", roleName);
+ if (appId == 1 || roleName.equals(PortalConstants.ADMIN_ROLE)) {
+ roles = (List<EPRole>) dataAccessService.executeNamedQuery("getPortalAppRoles", portalParams, null);
+ } else if (appId != 1 && !roleName.equals(PortalConstants.ADMIN_ROLE)) {
+ roles = (List<EPRole>) dataAccessService.executeNamedQuery("getAppRoles", params, null);
+ }
+ int resultsCount = (roles == null ? 0 : roles.size());
+ if (resultsCount > 1) {
+ logger.error(EELFLoggerDelegate.errorLogger,
+ "Trying to recover from duplicates by returning the first search result. This issue should be treated, it is probably not critical because duplicate roles should be similar.");
+ return roles.get(0);
+ } else if (resultsCount == 1) {
+ return roles.get(0);
+ }
+ return null;
+ }
+
+ public void saveRole(EPRole domainRole) {
+ getDataAccessService().saveDomainObject(domainRole, null);
+ }
+
+ public void deleteRole(EPRole domainRole) {
+ getDataAccessService().deleteDomainObject(domainRole, null);
+ }
+
+ @SuppressWarnings("unchecked")
+ public List<EPRole> getAvailableRoles() {
+ return getDataAccessService().getList(EPRole.class, null);
+ }
+
+ public DataAccessService getDataAccessService() {
+ return dataAccessService;
+ }
+
+ public void setDataAccessService(DataAccessService dataAccessService) {
+ this.dataAccessService = dataAccessService;
+ }
+}
diff --git a/ecomp-portal-BE-common/src/main/java/org/onap/portalapp/portal/service/ExternalAccessRolesService.java b/ecomp-portal-BE-common/src/main/java/org/onap/portalapp/portal/service/ExternalAccessRolesService.java
new file mode 100644
index 00000000..d65f1152
--- /dev/null
+++ b/ecomp-portal-BE-common/src/main/java/org/onap/portalapp/portal/service/ExternalAccessRolesService.java
@@ -0,0 +1,436 @@
+/*-
+ * ============LICENSE_START==========================================
+ * ONAP Portal
+ * ===================================================================
+ * Copyright (C) 2017 AT&T Intellectual Property. All rights reserved.
+ * ===================================================================
+ *
+ * Unless otherwise specified, all software contained herein is licensed
+ * under the Apache License, Version 2.0 (the "License");
+ * you may not use this software 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.
+ *
+ * Unless otherwise specified, all documentation contained herein is licensed
+ * under the Creative Commons License, Attribution 4.0 Intl. (the "License");
+ * you may not use this documentation except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * https://creativecommons.org/licenses/by/4.0/
+ *
+ * Unless required by applicable law or agreed to in writing, documentation
+ * 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.
+ *
+ * ============LICENSE_END============================================
+ *
+ * ECOMP is a trademark and service mark of AT&T Intellectual Property.
+ */
+package org.onap.portalapp.portal.service;
+
+import java.io.IOException;
+import java.util.List;
+import java.util.Map;
+
+import org.hibernate.Session;
+import org.json.JSONArray;
+import org.onap.portalapp.portal.domain.CentralV2RoleFunction;
+import org.onap.portalapp.portal.domain.CentralizedApp;
+import org.onap.portalapp.portal.domain.EPApp;
+import org.onap.portalapp.portal.domain.EPRole;
+import org.onap.portalapp.portal.domain.EPUser;
+import org.onap.portalapp.portal.domain.ExternalRoleDetails;
+import org.onap.portalapp.portal.transport.CentralRole;
+import org.onap.portalapp.portal.transport.CentralUser;
+import org.onap.portalapp.portal.transport.CentralV2Role;
+import org.onap.portalapp.portal.transport.ExternalRequestFieldsValidator;
+import org.onap.portalsdk.core.domain.Role;
+import org.onap.portalsdk.core.domain.RoleFunction;
+import org.onap.portalsdk.core.restful.domain.EcompUser;
+import org.springframework.http.ResponseEntity;
+import org.springframework.web.client.HttpClientErrorException;
+
+import com.fasterxml.jackson.core.JsonParseException;
+import com.fasterxml.jackson.databind.JsonMappingException;
+import com.fasterxml.jackson.databind.ObjectMapper;
+
+public interface ExternalAccessRolesService {
+
+ /**
+ * It gets list of application roles
+ *
+ * @param appId
+ * @return List
+ * @throws Exception
+ */
+ public List<EPRole> getAppRoles(Long appId) throws Exception;
+
+ /**
+ * It returns single app record
+ *
+ * @param uebkey
+ * @return List
+ * @throws Exception
+ */
+ public List<EPApp> getApp(String uebkey) throws Exception;
+
+ /**
+ * Adds role in the external access system if fails throws exception
+ *
+ * @param addRoles
+ * @param uebkey
+ * @return boolean
+ * @throws Exception
+ */
+ public boolean addRole(Role addRoles, String uebkey) throws Exception;
+
+ /**
+ * It returns complete user information
+ *
+ * @param loginId
+ * @return EPUser object
+ * @throws Exception
+ */
+ List<EPUser> getUser(String loginId) throws Exception;
+
+ /**
+ * It returns complete user information including application roles permissions
+ *
+ * @param loginId
+ * @param uebkey
+ * @return String
+ * @throws Exception
+ */
+ String getV2UserWithRoles(String loginId, String uebkey) throws Exception;
+
+ /**
+ * It returns list of all role functions
+ * @param string
+ * @return List
+ * @throws Exception
+ */
+ List<CentralV2RoleFunction> getRoleFuncList(String string) throws Exception;
+
+ /**
+ * It return list of role provided by the app uebkey and roleId
+ *
+ * @param roleId
+ * @param uebkey
+ * @return CentralRole
+ * @throws Exception
+ */
+ CentralV2Role getRoleInfo(Long roleId, String uebkey) throws Exception;
+
+ /**
+ * It returns the CentralRoleFunction object
+ *
+ * @param functionCode
+ * @param uebkey
+ * @return CentralRoleFunction
+ * @throws Exception
+ */
+ public CentralV2RoleFunction getRoleFunction(String functionCode, String uebkey) throws Exception;
+
+ /**
+ * It saves role function in the DB
+ *
+ * @param domainCentralRoleFunction
+ * @param requestedApp
+ * @return true else false
+ * @throws Exception
+ */
+ public boolean saveCentralRoleFunction(CentralV2RoleFunction domainCentralRoleFunction, EPApp requestedApp) throws Exception;
+
+ /**
+ * It deletes role function in the DB
+ *
+ * @param code
+ * @param app
+ */
+ public boolean deleteCentralRoleFunction(String code, EPApp app);
+
+ /**
+ * It gets all roles the applications
+ *
+ * @param uebkey
+ * @return List
+ * @throws Exception
+ */
+ public List<CentralV2Role> getRolesForApp(String uebkey) throws Exception;
+
+ /**
+ *
+ * It saves role function in the DB
+ *
+ * @param saveRole
+ * @param uebkey
+ * @return message and true or false
+ * @throws Exception
+ */
+ ExternalRequestFieldsValidator saveRoleForApplication(Role saveRole, String uebkey) throws Exception;
+
+ /**
+ * It deletes role in the DB
+ *
+ * @param code
+ * @param uebkey
+ * @return true else false
+ * @throws Exception
+ */
+ boolean deleteRoleForApplication(String code, String uebkey) throws Exception;
+
+ /**
+ * It gets all active roles for single application
+ *
+ * @param uebkey
+ * @return List
+ * @throws Exception
+ */
+ List<CentralV2Role> getActiveRoles(String uebkey) throws Exception;
+
+ /**
+ * It deletes user related roles for an application in the table
+ * @param roleId
+ * @param uebkey
+ * @param LoginId
+ * @return true else false
+ * @throws Exception
+ */
+ public ExternalRequestFieldsValidator deleteDependencyRoleRecord(Long roleId, String uebkey, String LoginId) throws Exception;
+
+ /**
+ * It sync new functions codes and names from and updates role functions from external access system
+ *
+ * @param app
+ * @throws Exception
+ */
+ public void syncRoleFunctionFromExternalAccessSystem(EPApp app) throws Exception;
+
+ /**
+ * It uploads portal functions into external auth system
+ * @param uebkey
+ * @return
+ * @throws Exception
+ */
+ public Integer bulkUploadFunctions(String uebkey) throws Exception;
+
+ /**
+ * It uploads portal roles into external auth system
+ * @param uebkey
+ * @return
+ * @throws Exception
+ */
+ public Integer bulkUploadRoles(String uebkey) throws Exception;
+
+ /**
+ * It uploads partner application role functions into external auth system
+ *
+ * @param uebkey
+ * @param upload
+ * @throws Exception
+ */
+ public void bulkUploadPartnerFunctions(String uebkey, List<RoleFunction> upload) throws Exception;
+
+ /**
+ * It uploads partner application role functions into external auth system
+ *
+ * @param uebkey
+ * @param upload
+ * @throws Exception
+ */
+ public void bulkUploadPartnerRoles(String uebkey, List<Role> upload) throws Exception;
+
+ /**
+ * It returns total no. of portal application role functions records added in external auth system
+ * @param uebkey
+ * @return
+ * @throws Exception
+ */
+ Integer bulkUploadRolesFunctions(String uebkey) throws Exception;
+
+ /**
+ * It syncs the roles and rolefunctions to the ecomp DB from AAF
+ * @param app
+ * @throws Exception
+ */
+ void syncApplicationRolesWithEcompDB(EPApp app) throws Exception;
+
+ /**
+ * It uploads list of user roles of the application into external auth system
+ *
+ * @param uebkey
+ * @return
+ * @throws Exception
+ */
+ public Integer bulkUploadUserRoles(String uebkey) throws Exception;
+
+ /**
+ * It Uploads partner application role functions into external auth system
+ *
+ * @param uebkey
+ * @param roleList
+ * @throws Exception
+ */
+ void bulkUploadPartnerRoleFunctions(String uebkey, List<Role> roleList) throws Exception;
+
+ /**
+ * it deletes all dependency role records
+ *
+ * @param localSession
+ * @param roleId
+ * @param appId
+ * @param isPortalRequest
+ * @throws Exception
+ */
+ public void deleteRoleDependencyRecords(Session localSession, Long roleId, Long appId, boolean isPortalRequest) throws Exception;
+
+ /**
+ * It returns list of applications functions along with functions associated with global role
+ *
+ * @param uebkey
+ * @return
+ * @throws Exception
+ */
+ List<String> getMenuFunctionsList(String uebkey) throws Exception;
+
+ /**
+ *
+ * @param uebkey applications UebKey
+ * @return
+ * @throws Exception
+ * Method getAllUsers returns all the active users of application
+ */
+ List<EcompUser> getAllAppUsers(String uebkey) throws Exception;
+
+ /**
+ *
+ * @param result
+ * @return returns Role Object
+ * Method ConvertCentralRoleToRole converts the CentralRole String to Role Object
+ */
+ public Role ConvertCentralRoleToRole(String result);
+
+ /**
+ * It returns the list of centralized applications
+ *
+ * @param userId
+ * @return List
+ */
+ public List<CentralizedApp> getCentralizedAppsOfUser(String userId);
+
+ /**
+ * It returns the list of globalRoles of Portal
+ * @return
+ */
+ public List<EPRole> getGlobalRolesOfPortal();
+
+ /**
+ * It converts list of CentralRoleFunction objects to RoleFunction objects
+ * @param answer contains list of CentralRoleFunction objects
+ * @return List of RoleFunction objects
+ */
+ public List<RoleFunction> convertCentralRoleFunctionToRoleFunctionObject(List<CentralV2RoleFunction> answer);
+
+ /**
+ *
+ * It returns user roles for older version
+ *
+ * @param loginId
+ * @param uebkey
+ * @return EPUser
+ * @throws Exception
+ */
+ public CentralUser getUserRoles(String loginId, String uebkey) throws Exception;
+
+ /**
+ * It converts list of V2 CentralRole objects to old version CentralRole objects
+ *
+ * @param v2CenRole
+ * @return List of CentralRole objects
+ */
+ public List<CentralRole> convertV2CentralRoleListToOldVerisonCentralRoleList(List<CentralV2Role> v2CenRole);
+
+ /**
+ *
+ * It finds namespace in external auth system if found returns namespace information
+ *
+ * @param epApp
+ * @return Http response
+ */
+ public ResponseEntity<String> getNameSpaceIfExists(EPApp epApp) throws Exception, HttpClientErrorException;
+
+ /**
+ *
+ * It converts V2 CentralRole objects to old version CentralRole objects
+ *
+ * @param answer
+ * @return
+ */
+ public CentralRole convertV2CentralRoleToOldVerisonCentralRole(CentralV2Role answer);
+
+ /**
+ *
+ * Returns list of EPRole Objects if exists
+ *
+ * @param app
+ * @return List of EPRole objects
+ */
+ Map<String, EPRole> getCurrentRolesInDB(EPApp app);
+
+
+ /**
+ *
+ * It uploads list of users for single role when role name is re-named
+ *
+ * @param header
+ * @param roleId
+ * @param roleName
+ * @return number of user roles added in External Auth System
+ * @throws Exception
+ */
+ public Integer bulkUploadUsersSingleRole(String uebkey, Long roleId, String roleName) throws Exception;
+
+ /**
+ *
+ * It returns JSON array of external auth roles and its corresponding functions
+ *
+ * @param app
+ * @return JSON Array
+ * @throws Exception
+ */
+ public JSONArray getAppRolesJSONFromExtAuthSystem(EPApp app) throws Exception;
+
+ /**
+ * It encodes the function code based on Hex encoding
+ * @param funCode
+ *
+ */
+ public String encodeFunctionCode(String funCode);
+
+ /**
+ *
+ * It returns list of ExternalRoleDetails which is converted from JSON array of roles
+ *
+ * @param app
+ * @param mapper
+ * @param extRole contains external auth application roles JSON array
+ * @return List of ExternalRoleDetails objects
+ * @throws IOException
+ * @throws JsonParseException
+ * @throws JsonMappingException
+ */
+ public List<ExternalRoleDetails> getExternalRoleDetailsList(EPApp app,
+ ObjectMapper mapper, JSONArray extRole) throws IOException, JsonParseException, JsonMappingException;
+
+ public JSONArray getAllUsersByRole(String roleName) throws Exception;
+
+}
diff --git a/ecomp-portal-BE-common/src/main/java/org/onap/portalapp/portal/service/ExternalAccessRolesServiceImpl.java b/ecomp-portal-BE-common/src/main/java/org/onap/portalapp/portal/service/ExternalAccessRolesServiceImpl.java
new file mode 100644
index 00000000..e867c3d6
--- /dev/null
+++ b/ecomp-portal-BE-common/src/main/java/org/onap/portalapp/portal/service/ExternalAccessRolesServiceImpl.java
@@ -0,0 +1,3497 @@
+/*-
+ * ============LICENSE_START==========================================
+ * ONAP Portal
+ * ===================================================================
+ * Copyright (C) 2017 AT&T Intellectual Property. All rights reserved.
+ * ===================================================================
+ *
+ * Unless otherwise specified, all software contained herein is licensed
+ * under the Apache License, Version 2.0 (the "License");
+ * you may not use this software 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.
+ *
+ * Unless otherwise specified, all documentation contained herein is licensed
+ * under the Creative Commons License, Attribution 4.0 Intl. (the "License");
+ * you may not use this documentation except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * https://creativecommons.org/licenses/by/4.0/
+ *
+ * Unless required by applicable law or agreed to in writing, documentation
+ * 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.
+ *
+ * ============LICENSE_END============================================
+ *
+ * ECOMP is a trademark and service mark of AT&T Intellectual Property.
+ */
+package org.onap.portalapp.portal.service;
+
+import java.io.IOException;
+import java.util.ArrayList;
+import java.util.HashMap;
+import java.util.HashSet;
+import java.util.Iterator;
+import java.util.LinkedHashMap;
+import java.util.List;
+import java.util.Map;
+import java.util.Set;
+import java.util.SortedSet;
+import java.util.TreeSet;
+import java.util.regex.Pattern;
+import java.util.stream.Collectors;
+
+import org.apache.commons.codec.DecoderException;
+import org.apache.commons.codec.binary.Hex;
+import org.apache.commons.lang.StringUtils;
+import org.hibernate.Query;
+import org.hibernate.Session;
+import org.hibernate.SessionFactory;
+import org.hibernate.Transaction;
+import org.hibernate.criterion.Criterion;
+import org.hibernate.criterion.Restrictions;
+import org.json.JSONArray;
+import org.json.JSONObject;
+import org.onap.portalapp.portal.domain.CentralV2RoleFunction;
+import org.onap.portalapp.portal.domain.CentralizedApp;
+import org.onap.portalapp.portal.domain.EPApp;
+import org.onap.portalapp.portal.domain.EPAppRoleFunction;
+import org.onap.portalapp.portal.domain.EPRole;
+import org.onap.portalapp.portal.domain.EPUser;
+import org.onap.portalapp.portal.domain.EPUserApp;
+import org.onap.portalapp.portal.domain.ExternalRoleDetails;
+import org.onap.portalapp.portal.exceptions.DeleteDomainObjectFailedException;
+import org.onap.portalapp.portal.exceptions.ExternalAuthSystemException;
+import org.onap.portalapp.portal.exceptions.InactiveApplicationException;
+import org.onap.portalapp.portal.exceptions.InvalidApplicationException;
+import org.onap.portalapp.portal.exceptions.InvalidUserException;
+import org.onap.portalapp.portal.exceptions.RoleFunctionException;
+import org.onap.portalapp.portal.logging.aop.EPAuditLog;
+import org.onap.portalapp.portal.logging.aop.EPMetricsLog;
+import org.onap.portalapp.portal.logging.logic.EPLogUtil;
+import org.onap.portalapp.portal.transport.BulkUploadRoleFunction;
+import org.onap.portalapp.portal.transport.BulkUploadUserRoles;
+import org.onap.portalapp.portal.transport.CentralApp;
+import org.onap.portalapp.portal.transport.CentralRole;
+import org.onap.portalapp.portal.transport.CentralRoleFunction;
+import org.onap.portalapp.portal.transport.CentralUser;
+import org.onap.portalapp.portal.transport.CentralUserApp;
+import org.onap.portalapp.portal.transport.CentralV2Role;
+import org.onap.portalapp.portal.transport.CentralV2User;
+import org.onap.portalapp.portal.transport.CentralV2UserApp;
+import org.onap.portalapp.portal.transport.EcompUserRoles;
+import org.onap.portalapp.portal.transport.ExternalAccessPerms;
+import org.onap.portalapp.portal.transport.ExternalAccessPermsDetail;
+import org.onap.portalapp.portal.transport.ExternalAccessRole;
+import org.onap.portalapp.portal.transport.ExternalAccessRolePerms;
+import org.onap.portalapp.portal.transport.ExternalAccessUser;
+import org.onap.portalapp.portal.transport.ExternalRequestFieldsValidator;
+import org.onap.portalapp.portal.transport.ExternalRoleDescription;
+import org.onap.portalapp.portal.transport.GlobalRoleWithApplicationRoleFunction;
+import org.onap.portalapp.portal.transport.LocalRole;
+import org.onap.portalapp.portal.utils.EPCommonSystemProperties;
+import org.onap.portalapp.portal.utils.EcompPortalUtils;
+import org.onap.portalapp.portal.utils.PortalConstants;
+import org.onap.portalapp.util.EPUserUtils;
+import org.onap.portalsdk.core.domain.Role;
+import org.onap.portalsdk.core.domain.RoleFunction;
+import org.onap.portalsdk.core.logging.logic.EELFLoggerDelegate;
+import org.onap.portalsdk.core.restful.domain.EcompRole;
+import org.onap.portalsdk.core.restful.domain.EcompUser;
+import org.onap.portalsdk.core.service.DataAccessService;
+import org.onap.portalsdk.core.util.SystemProperties;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.context.annotation.EnableAspectJAutoProxy;
+import org.springframework.http.HttpEntity;
+import org.springframework.http.HttpHeaders;
+import org.springframework.http.HttpMethod;
+import org.springframework.http.HttpStatus;
+import org.springframework.http.ResponseEntity;
+import org.springframework.stereotype.Service;
+import org.springframework.transaction.annotation.Transactional;
+import org.springframework.web.client.HttpClientErrorException;
+import org.springframework.web.client.RestTemplate;
+
+import com.fasterxml.jackson.core.JsonParseException;
+import com.fasterxml.jackson.core.JsonProcessingException;
+import com.fasterxml.jackson.databind.DeserializationFeature;
+import com.fasterxml.jackson.databind.JsonMappingException;
+import com.fasterxml.jackson.databind.ObjectMapper;
+import com.fasterxml.jackson.databind.type.TypeFactory;
+
+@Service("externalAccessRolesService")
+@EnableAspectJAutoProxy
+@EPMetricsLog
+@EPAuditLog
+public class ExternalAccessRolesServiceImpl implements ExternalAccessRolesService {
+
+ private static final String APP_ROLE_NAME_PARAM = "appRoleName";
+
+ private static final String GET_ROLE_TO_UPDATE_IN_EXTERNAL_AUTH_SYSTEM = "getRoletoUpdateInExternalAuthSystem";
+
+ private static final String GET_PORTAL_APP_ROLES_QUERY = "getPortalAppRoles";
+
+ private static final String GET_ROLE_FUNCTION_QUERY = "getRoleFunction";
+
+ private static final String FUNCTION_CODE_PARAMS = "functionCode";
+
+ private static final String AND_FUNCTION_CD_EQUALS = " and function_cd = '";
+
+ private static final String OWNER = ".owner";
+
+ private static final String ADMIN = ".admin";
+
+ private static final String ACCOUNT_ADMINISTRATOR = ".Account_Administrator";
+
+ private static final String FUNCTION_PIPE = "|";
+
+ private static final String IS_NULL_STRING = "null";
+
+ private static final String EXTERNAL_AUTH_PERMS = "perms";
+
+ private static final String EXTERNAL_AUTH_ROLE_DESCRIPTION = "description";
+
+ private static final String IS_EMPTY_JSON_STRING = "{}";
+
+ private static final String CONNECTING_TO_EXTERNAL_AUTH_SYSTEM_LOG_MESSAGE = "Connecting to External Auth system";
+
+ private static final String APP_ROLE_ID = "appRoleId";
+
+ private static final String APP_ID = "appId";
+
+ private static final String PRIORITY = "priority";
+
+ private static final String ACTIVE = "active";
+
+ private static final String ROLE_NAME = "name";
+
+ private static final String ID = "id";
+
+ private static final String APP_ID_EQUALS = " app_id = ";
+
+ private static EELFLoggerDelegate logger = EELFLoggerDelegate.getLogger(ExternalAccessRolesServiceImpl.class);
+
+ @Autowired
+ private DataAccessService dataAccessService;
+
+ @Autowired
+ private EPAppService epAppService;
+
+ @Autowired
+ private SessionFactory sessionFactory;
+
+ @Autowired
+ EPRoleService ePRoleService;
+
+ RestTemplate template = new RestTemplate();
+
+
+ // These decode values are based on HexDecoder
+ static final String decodeValueOfForwardSlash = "2f";
+ static final String decodeValueOfHiphen = "2d";
+ static final String decodeValueOfStar = "2a";
+
+ @SuppressWarnings("unchecked")
+ public List<EPRole> getAppRoles(Long appId) throws Exception {
+ List<EPRole> applicationRoles = null;
+ final Map<String, Long> appParams = new HashMap<>();
+ try {
+ if (appId == 1) {
+ applicationRoles = dataAccessService.executeNamedQuery("getPortalAppRolesList", null, null);
+ } else {
+ appParams.put("appId", appId);
+ applicationRoles = dataAccessService.executeNamedQuery("getPartnerAppRolesList", appParams, null);
+ }
+ } catch (Exception e) {
+ logger.error(EELFLoggerDelegate.errorLogger, "getAppRoles: failed", e);
+ throw e;
+ }
+ return applicationRoles;
+ }
+
+ @SuppressWarnings("unchecked")
+ @Override
+ public List<EPApp> getApp(String uebkey) throws Exception {
+ List<EPApp> app = null;
+ try {
+ final Map<String, String> appUebkeyParams = new HashMap<>();
+ appUebkeyParams.put("appKey", uebkey);
+ app = dataAccessService.executeNamedQuery("getMyAppDetailsByUebKey", appUebkeyParams, null);
+ if(!app.isEmpty() && !app.get(0).getEnabled() && !app.get(0).getId().equals(PortalConstants.PORTAL_APP_ID)){
+ throw new InactiveApplicationException("Application:"+app.get(0).getName()+" is Unavailable");
+ }
+ } catch (Exception e) {
+ logger.error(EELFLoggerDelegate.errorLogger, "getApp: failed", e);
+ throw e;
+ }
+ return app;
+ }
+
+ /**
+ * It returns single application role from external auth system
+ * @param addRole
+ * @param app
+ * @return JSON string which contains application role details
+ * @throws Exception
+ */
+ private String getSingleAppRole(String addRole, EPApp app) throws Exception {
+ HttpHeaders headers = EcompPortalUtils.base64encodeKeyForAAFBasicAuth();
+ HttpEntity<String> entity = new HttpEntity<>(headers);
+ ResponseEntity<String> response = null;
+ logger.debug(EELFLoggerDelegate.debugLogger, "getSingleAppRole: Connecting to External Auth system");
+ response = template.exchange(
+ SystemProperties.getProperty(EPCommonSystemProperties.EXTERNAL_CENTRAL_ACCESS_URL) + "roles/"
+ + app.getNameSpace()
+ + "." + addRole
+ .replaceAll(EcompPortalUtils.EXTERNAL_CENTRAL_AUTH_ROLE_HANDLE_SPECIAL_CHARACTERS, "_"),
+ HttpMethod.GET, entity, String.class);
+ logger.debug(EELFLoggerDelegate.debugLogger,
+ "getSingleAppRole: Finished GET app role from External Auth system and status code: {} ",
+ response.getStatusCode().value());
+ return response.getBody();
+ }
+
+ @Override
+ public boolean addRole(Role addRole, String uebkey) throws Exception {
+ boolean response = false;
+ ResponseEntity<String> addResponse = null;
+ HttpHeaders headers = EcompPortalUtils.base64encodeKeyForAAFBasicAuth();
+ EPApp app = getApp(uebkey).get(0);
+ String newRole = updateExistingRoleInExternalSystem(addRole, app);
+ HttpEntity<String> entity = new HttpEntity<>(newRole, headers);
+ logger.debug(EELFLoggerDelegate.debugLogger, "addRole: Connecting to External Auth system");
+ addResponse = template.exchange(
+ SystemProperties.getProperty(EPCommonSystemProperties.EXTERNAL_CENTRAL_ACCESS_URL) + "role",
+ HttpMethod.POST, entity, String.class);
+ if (addResponse.getStatusCode().value() == 201) {
+ response = true;
+ logger.debug(EELFLoggerDelegate.debugLogger, "addRole: Finished adding role in the External Auth system and response code: {} ", addResponse.getStatusCode().value());
+ }
+ if (addResponse.getStatusCode().value() == 406) {
+ logger.error(EELFLoggerDelegate.errorLogger,
+ "addRole: Failed to add in the External Auth system due to {} and status code: {}", addResponse.getBody(), addResponse.getStatusCode().value());
+ }
+ return response;
+ }
+
+ /**
+ *
+ * It deletes record in external auth system
+ *
+ * @param delRole
+ * @return JSON String which has status code and response body
+ * @throws Exception
+ */
+ private ResponseEntity<String> deleteRoleInExternalSystem(String delRole) throws Exception {
+ ResponseEntity<String> delResponse = null;
+ HttpHeaders headers = EcompPortalUtils.base64encodeKeyForAAFBasicAuth();
+ HttpEntity<String> entity = new HttpEntity<>(delRole, headers);
+ logger.debug(EELFLoggerDelegate.debugLogger, "deleteRoleInExternalSystem: {} for DELETE: {}" , CONNECTING_TO_EXTERNAL_AUTH_SYSTEM_LOG_MESSAGE, delRole);
+ delResponse = template.exchange(
+ SystemProperties.getProperty(EPCommonSystemProperties.EXTERNAL_CENTRAL_ACCESS_URL) + "role?force=true",
+ HttpMethod.DELETE, entity, String.class);
+ logger.debug(EELFLoggerDelegate.debugLogger, "deleteRoleInExternalSystem: Finished DELETE operation in the External Auth system {} and status code: {} ", delRole, delResponse.getStatusCode().value());
+ return delResponse;
+ }
+
+ /**
+ * It updates role in external auth system
+ *
+ * @param updateExtRole
+ * @param app
+ * @return true if success else false
+ * @throws Exception
+ * If updateRoleInExternalSystem fails we catch it in logger for detail message
+ */
+ @SuppressWarnings("unchecked")
+ private boolean updateRoleInExternalSystem(Role updateExtRole, EPApp app, boolean isGlobalRole) throws Exception {
+ boolean response = false;
+ ObjectMapper mapper = new ObjectMapper();
+ ResponseEntity<String> deleteResponse = null;
+ HttpHeaders headers = EcompPortalUtils.base64encodeKeyForAAFBasicAuth();
+ List<EPRole> epRoleList = null;
+ if (app.getId().equals(PortalConstants.PORTAL_APP_ID)
+ || (isGlobalRole && !app.getId().equals(PortalConstants.PORTAL_APP_ID))) {
+ epRoleList = getPortalAppRoleInfo(updateExtRole.getId());
+ } else {
+ epRoleList = getPartnerAppRoleInfo(updateExtRole.getId(), app);
+ }
+
+ // Assigning functions to global role
+ if ((isGlobalRole && !app.getId().equals(PortalConstants.PORTAL_APP_ID))) {
+ List<RoleFunction> globalRoleFunctionListNew = convertSetToListOfRoleFunctions(updateExtRole);
+ EPApp portalAppInfo = epAppService.getApp(PortalConstants.PORTAL_APP_ID);
+ addFunctionsTOGlobalRole(epRoleList, updateExtRole, globalRoleFunctionListNew, mapper, app, portalAppInfo);
+ response = true;
+ } else {
+ String appRole = getSingleAppRole(epRoleList.get(0).getName(), app);
+ List<RoleFunction> roleFunctionListNew = convertSetToListOfRoleFunctions(updateExtRole);
+ if (!appRole.equals(IS_EMPTY_JSON_STRING)) {
+ JSONObject jsonObj = new JSONObject(appRole);
+ JSONArray extRole = jsonObj.getJSONArray("role");
+ if (!extRole.getJSONObject(0).has(EXTERNAL_AUTH_ROLE_DESCRIPTION)) {
+ String roleName = extRole.getJSONObject(0).getString(ROLE_NAME);
+ Map<String, String> delRoleKeyMapper = new HashMap<>();
+ delRoleKeyMapper.put(ROLE_NAME, roleName);
+ String delRoleKeyValue = mapper.writeValueAsString(delRoleKeyMapper);
+ deleteResponse = deleteRoleInExternalSystem(delRoleKeyValue);
+ if (deleteResponse.getStatusCode().value() != 200) {
+ throw new ExternalAuthSystemException(deleteResponse.getBody());
+ }
+ addRole(updateExtRole, app.getUebKey());
+ } else {
+ String desc = extRole.getJSONObject(0).getString(EXTERNAL_AUTH_ROLE_DESCRIPTION);
+ String name = extRole.getJSONObject(0).getString(ROLE_NAME);
+ List<ExternalAccessPerms> list = new ArrayList<>();
+ if (extRole.getJSONObject(0).has(EXTERNAL_AUTH_PERMS)) {
+ JSONArray perms = extRole.getJSONObject(0).getJSONArray(EXTERNAL_AUTH_PERMS);
+ list = mapper.readValue(perms.toString(), TypeFactory.defaultInstance()
+ .constructCollectionType(List.class, ExternalAccessPerms.class));
+ }
+ ExternalRoleDescription sysRoleList = mapper.readValue(desc, ExternalRoleDescription.class);
+ // If role name or role functions are updated then delete
+ // record in External System and add new record to avoid
+ // conflicts
+ Boolean existingRoleActive;
+ boolean isActiveValueChanged;
+ // check role active status
+ existingRoleActive = new Boolean(sysRoleList.getActive());
+ isActiveValueChanged = existingRoleActive.equals(updateExtRole.getActive());
+ boolean isRoleNameChanged = false;
+ if (!sysRoleList.getName().equals(updateExtRole.getName())) {
+ isRoleNameChanged = true;
+ Map<String, String> delRoleKeyMapper = new HashMap<>();
+ delRoleKeyMapper.put(ROLE_NAME, name);
+ String delRoleKeyValue = mapper.writeValueAsString(delRoleKeyMapper);
+ deleteResponse = deleteRoleInExternalSystem(delRoleKeyValue);
+ if (deleteResponse.getStatusCode().value() != 200) {
+ logger.error(EELFLoggerDelegate.errorLogger,
+ "updateRoleInExternalSystem: Failed to delete role in external system due to {} ",
+ deleteResponse.getBody());
+ throw new ExternalAuthSystemException(deleteResponse.getBody());
+ }
+ addRole(updateExtRole, app.getUebKey());
+ // add partner functions to the global role in External Auth System
+ if(!list.isEmpty() && isGlobalRole){
+ addPartnerHasRoleFunctionsToGlobalRole(list, mapper, app, updateExtRole);
+ }
+ list.removeIf(perm -> EcompPortalUtils.checkNameSpaceMatching(perm.getType(), app.getNameSpace()));
+ // if role name is changes please ignore the previous functions in External Auth and update with user requested functions
+ addRemoveFunctionsToRole(updateExtRole, app, mapper, roleFunctionListNew, name,
+ list);
+ }
+ boolean checkPriorityStatus = StringUtils.equals(String.valueOf(sysRoleList.getPriority()),
+ String.valueOf(updateExtRole.getPriority()));
+ ExternalAccessRole updateRole = new ExternalAccessRole();
+ if (!isActiveValueChanged || !checkPriorityStatus || sysRoleList.getId().equals(IS_NULL_STRING)
+ || !sysRoleList.getId().equals(String.valueOf(epRoleList.get(0).getId()))) {
+ String updateDesc = "";
+ List<EPRole> getRole;
+ final Map<String, String> getAppRoleByName = new HashMap<>();
+ getAppRoleByName.put(APP_ROLE_NAME_PARAM, updateExtRole.getName());
+ if (app.getId().equals(PortalConstants.PORTAL_APP_ID)) {
+ getRole = dataAccessService.executeNamedQuery(GET_PORTAL_APP_ROLES_QUERY, getAppRoleByName,
+ null);
+ } else {
+ getAppRoleByName.put("appId", String.valueOf(app.getId()));
+ getRole = dataAccessService.executeNamedQuery(GET_ROLE_TO_UPDATE_IN_EXTERNAL_AUTH_SYSTEM,
+ getAppRoleByName, null);
+ }
+ Map<String, String> extSystemUpdateRoleJsonMapper = new LinkedHashMap<>();
+ extSystemUpdateRoleJsonMapper.put(ID, String.valueOf(getRole.get(0).getId()));
+ extSystemUpdateRoleJsonMapper.put(ROLE_NAME, String.valueOf(updateExtRole.getName()));
+ extSystemUpdateRoleJsonMapper.put(ACTIVE, String.valueOf(updateExtRole.getActive()));
+ extSystemUpdateRoleJsonMapper.put(PRIORITY, String.valueOf(updateExtRole.getPriority()));
+ if (app.getId().equals(PortalConstants.PORTAL_APP_ID)) {
+ extSystemUpdateRoleJsonMapper.put(APP_ID, "null");
+ extSystemUpdateRoleJsonMapper.put(APP_ROLE_ID, "null");
+ } else {
+ extSystemUpdateRoleJsonMapper.put(APP_ID, String.valueOf(app.getId()));
+ extSystemUpdateRoleJsonMapper.put(APP_ROLE_ID,
+ String.valueOf(getRole.get(0).getAppRoleId()));
+
+ }
+ updateDesc = mapper.writeValueAsString(extSystemUpdateRoleJsonMapper);
+ updateRole.setName(app.getNameSpace() + "." + updateExtRole.getName().replaceAll(
+ EcompPortalUtils.EXTERNAL_CENTRAL_AUTH_ROLE_HANDLE_SPECIAL_CHARACTERS, "_"));
+ updateRole.setDescription(updateDesc);
+ String updateRoleDesc = mapper.writeValueAsString(updateRole);
+ HttpEntity<String> entity = new HttpEntity<>(updateRoleDesc, headers);
+ logger.debug(EELFLoggerDelegate.debugLogger, "updateRoleInExternalSystem: {} for PUT: {}",
+ CONNECTING_TO_EXTERNAL_AUTH_SYSTEM_LOG_MESSAGE, updateRoleDesc);
+ ResponseEntity<String> updatePermsResponse = template.exchange(
+ SystemProperties.getProperty(EPCommonSystemProperties.EXTERNAL_CENTRAL_ACCESS_URL)
+ + "role",
+ HttpMethod.PUT, entity, String.class);
+ logger.debug(EELFLoggerDelegate.debugLogger,
+ "updateRoleInExternalSystem: Finished updating in External Auth system {} and status code: {} ",
+ updateRoleDesc, updatePermsResponse.getStatusCode().value());
+ }
+ if(!isRoleNameChanged) {
+ response = addRemoveFunctionsToRole(updateExtRole, app, mapper, roleFunctionListNew, name,
+ list);
+ }
+ }
+ } else {
+ // It seems like role exists in local DB but not in External
+ // Access system
+ addRole(updateExtRole, app.getUebKey());
+ List<RoleFunction> roleFunctionListUpdate = convertSetToListOfRoleFunctions(updateExtRole);
+ response = true;
+ if (!roleFunctionListUpdate.isEmpty()) {
+ addRoleFunctionsInExternalSystem(updateExtRole, mapper, app);
+ }
+ }
+ }
+ return response;
+ }
+
+ private boolean addRemoveFunctionsToRole(Role updateExtRole, EPApp app, ObjectMapper mapper,
+ List<RoleFunction> roleFunctionListNew, String name, List<ExternalAccessPerms> list) throws Exception {
+ boolean response;
+ Map<String, RoleFunction> updateRoleFunc = new HashMap<>();
+ for (RoleFunction addPerm : roleFunctionListNew) {
+ updateRoleFunc.put(addPerm.getCode(), addPerm);
+ }
+ final Map<String, ExternalAccessPerms> extRolePermMap = new HashMap<>();
+ final Map<String, ExternalAccessPerms> extRolePermMapPipes = new HashMap<>();
+ list.removeIf(perm -> !EcompPortalUtils.checkNameSpaceMatching(perm.getType(), app.getNameSpace()));
+ // Update permissions in the ExternalAccess System
+ HttpHeaders headers = EcompPortalUtils.base64encodeKeyForAAFBasicAuth();
+ if (!list.isEmpty()) {
+ for (ExternalAccessPerms perm : list) {
+ RoleFunction roleFunc = updateRoleFunc.get(perm.getType().substring(app.getNameSpace().length()+1) + FUNCTION_PIPE + perm.getInstance() + FUNCTION_PIPE + perm.getAction());
+ if (roleFunc==null) {
+ RoleFunction roleFuncPipeFilter = updateRoleFunc.get(perm.getInstance());
+ if(roleFuncPipeFilter == null)
+ removePermForRole(perm, mapper, name, headers);
+ }
+ extRolePermMap.put(perm.getInstance(), perm);
+ extRolePermMapPipes.put(
+ perm.getType().substring(app.getNameSpace().length()+1) + FUNCTION_PIPE + perm.getInstance() + FUNCTION_PIPE + perm.getAction(), perm);
+ }
+ }
+ response = true;
+ if (!roleFunctionListNew.isEmpty()) {
+ for (RoleFunction roleFunc : roleFunctionListNew) {
+ if(roleFunc.getCode().contains(FUNCTION_PIPE)) {
+ ExternalAccessPerms perm = extRolePermMapPipes.get(roleFunc.getCode());
+ if (perm == null) {
+ response = addFunctionsToRoleInExternalAuthSystem(updateExtRole, app, mapper, headers,
+ roleFunc);
+ }
+ } else {
+ if (!extRolePermMap.containsKey(EcompPortalUtils.getFunctionCode(roleFunc.getCode()))) {
+ response = addFunctionsToRoleInExternalAuthSystem(updateExtRole, app, mapper, headers,
+ roleFunc);
+ }
+ }
+ }
+ }
+ return response;
+ }
+
+ /*
+ * Adds function to the role in the external auth system while editing a role or updating new functions to a role
+ *
+ */
+ private boolean addFunctionsToRoleInExternalAuthSystem(Role updateExtRole, EPApp app, ObjectMapper mapper,
+ HttpHeaders headers, RoleFunction roleFunc) throws JsonProcessingException {
+ boolean response;
+ ExternalAccessRolePerms extRolePerms;
+ ExternalAccessPerms extPerms;
+ String code = "";
+ String type = "";
+ String action = "";
+ if (roleFunc.getCode().contains(FUNCTION_PIPE)) {
+ code = EcompPortalUtils.getFunctionCode(roleFunc.getCode());
+ type = getFunctionType(roleFunc.getCode());
+ action = getFunctionAction(roleFunc.getCode());
+ } else {
+ code = roleFunc.getCode();
+ type = roleFunc.getCode().contains("menu") ? "menu" : "url";
+ action = "*";
+ }
+ extPerms = new ExternalAccessPerms(app.getNameSpace() + "." + type, code, action);
+ extRolePerms = new ExternalAccessRolePerms(extPerms,
+ app.getNameSpace() + "."
+ + updateExtRole.getName().replaceAll(
+ EcompPortalUtils.EXTERNAL_CENTRAL_AUTH_ROLE_HANDLE_SPECIAL_CHARACTERS,
+ "_"));
+ String updateRolePerms = mapper.writeValueAsString(extRolePerms);
+ HttpEntity<String> entity = new HttpEntity<>(updateRolePerms, headers);
+ logger.debug(EELFLoggerDelegate.debugLogger, "updateRoleInExternalSystem: {} for POST: {}",
+ CONNECTING_TO_EXTERNAL_AUTH_SYSTEM_LOG_MESSAGE, updateRolePerms);
+ ResponseEntity<String> addResponse = template.exchange(
+ SystemProperties.getProperty(
+ EPCommonSystemProperties.EXTERNAL_CENTRAL_ACCESS_URL) + "role/perm",
+ HttpMethod.POST, entity, String.class);
+ if (addResponse.getStatusCode().value() != 201 && addResponse.getStatusCode().value()!= 409) {
+ response = false;
+ logger.debug(EELFLoggerDelegate.debugLogger,
+ "updateRoleInExternalSystem: Connected to External Auth system but something went wrong! due to {} and statuscode: {}",
+ addResponse.getStatusCode().getReasonPhrase(),
+ addResponse.getStatusCode().value());
+ } else {
+ response = true;
+ logger.debug(EELFLoggerDelegate.debugLogger,
+ "updateRoleInExternalSystem: Finished adding permissions to roles in External Auth system {} and status code: {} ",
+ updateRolePerms, addResponse.getStatusCode().value());
+ }
+ return response;
+ }
+
+ private void addPartnerHasRoleFunctionsToGlobalRole(List<ExternalAccessPerms> permslist, ObjectMapper mapper,
+ EPApp app, Role updateExtRole) throws Exception {
+ for (ExternalAccessPerms perm : permslist) {
+ if (!EcompPortalUtils.checkNameSpaceMatching(perm.getType(), app.getNameSpace())) {
+ ExternalAccessRolePerms extAddGlobalRolePerms = null;
+ ExternalAccessPerms extAddPerms = null;
+ extAddPerms = new ExternalAccessPerms(perm.getType(), perm.getInstance(), perm.getAction());
+ extAddGlobalRolePerms = new ExternalAccessRolePerms(extAddPerms,
+ app.getNameSpace() + "." + updateExtRole.getName().replaceAll(
+ EcompPortalUtils.EXTERNAL_CENTRAL_AUTH_ROLE_HANDLE_SPECIAL_CHARACTERS, "_"));
+ String addPerms = mapper.writeValueAsString(extAddGlobalRolePerms);
+ HttpHeaders headers = EcompPortalUtils.base64encodeKeyForAAFBasicAuth();
+ HttpEntity<String> entity = new HttpEntity<>(addPerms, headers);
+ logger.debug(EELFLoggerDelegate.debugLogger, "addPartnerHasRoleFunctionsToGlobalRole: {} ",
+ CONNECTING_TO_EXTERNAL_AUTH_SYSTEM_LOG_MESSAGE);
+ try {
+ ResponseEntity<String> addResponse = template
+ .exchange(SystemProperties.getProperty(EPCommonSystemProperties.EXTERNAL_CENTRAL_ACCESS_URL)
+ + "role/perm", HttpMethod.POST, entity, String.class);
+ if (addResponse.getStatusCode().value() != 201) {
+ logger.debug(EELFLoggerDelegate.debugLogger,
+ "addPartnerHasRoleFunctionsToGlobalRole: While adding permission to the role in External Auth system something went wrong! due to {} and statuscode: {}",
+ addResponse.getStatusCode().getReasonPhrase(), addResponse.getStatusCode().value());
+ } else {
+ logger.debug(EELFLoggerDelegate.debugLogger,
+ "addPartnerHasRoleFunctionsToGlobalRole: Finished adding permissions to roles in External Auth system and status code: {} ",
+ addResponse.getStatusCode().value());
+ }
+ } catch (Exception e) {
+ logger.error(EELFLoggerDelegate.errorLogger, "addPartnerHasRoleFunctionsToGlobalRole: Failed for POST request: {} due to ",
+ addPerms, e);
+ }
+ }
+ }
+ }
+
+ @SuppressWarnings("unchecked")
+ private void addFunctionsTOGlobalRole(List<EPRole> epRoleList, Role updateExtRole, List<RoleFunction> roleFunctionListNew, ObjectMapper mapper, EPApp app, EPApp portalAppInfo)
+ throws Exception {
+ try {
+ logger.debug(EELFLoggerDelegate.debugLogger, "Entering into addFunctionsTOGlobalRole");
+ //GET Permissions from External Auth System
+ JSONArray extPerms = getExtAuthPermissions(app);
+ List<ExternalAccessPermsDetail> permsDetailList = getExtAuthPerrmissonList(app, extPerms);
+ final Map<String, ExternalAccessPermsDetail> existingPermsWithRoles = new HashMap<>();
+ final Map<String, ExternalAccessPermsDetail> existingPermsWithRolesWithPipes = new HashMap<>();
+ final Map<String, RoleFunction> userRquestedFunctionsMap = new HashMap<>();
+ final Map<String, RoleFunction> userRquestedFunctionsMapPipesFilter = new HashMap<>();
+ for (ExternalAccessPermsDetail permDetail : permsDetailList) {
+ existingPermsWithRoles.put(EcompPortalUtils.getFunctionCode(permDetail.getInstance()), permDetail);
+ existingPermsWithRolesWithPipes.put(permDetail.getInstance(), permDetail);
+
+ }
+ // Add If function does not exists for role in External Auth System
+ for (RoleFunction roleFunc : roleFunctionListNew) {
+ String roleFuncCode = "";
+ ExternalAccessPermsDetail permsDetail;
+ if(roleFunc.getCode().contains(FUNCTION_PIPE)) {
+ roleFuncCode = roleFunc.getCode();
+ permsDetail = existingPermsWithRolesWithPipes.get(roleFunc.getCode());
+ } else {
+ roleFuncCode = EcompPortalUtils.getFunctionCode(roleFunc.getCode());
+ permsDetail = existingPermsWithRoles.get(roleFuncCode);
+ }
+ if (null == permsDetail.getRoles() || !permsDetail.getRoles()
+ .contains(portalAppInfo.getNameSpace() + FUNCTION_PIPE + epRoleList.get(0).getName().replaceAll(
+ EcompPortalUtils.EXTERNAL_CENTRAL_AUTH_ROLE_HANDLE_SPECIAL_CHARACTERS, "_"))) {
+ addRoleFunctionsToGlobalRoleInExternalSystem(roleFunc, updateExtRole, mapper, app, portalAppInfo);
+ }
+ userRquestedFunctionsMap.put(roleFuncCode, roleFunc);
+ userRquestedFunctionsMapPipesFilter.put(EcompPortalUtils.getFunctionCode(roleFuncCode), roleFunc);
+ }
+ // Delete functions if exists in External Auth System but not in incoming request
+ final Map<String, Long> epAppRoleFuncParams = new HashMap<>();
+ epAppRoleFuncParams.put("requestedAppId", app.getId());
+ epAppRoleFuncParams.put("roleId",updateExtRole.getId());
+ List<GlobalRoleWithApplicationRoleFunction> globalRoleFunctionList = dataAccessService.executeNamedQuery("getGlobalRoleForRequestedApp", epAppRoleFuncParams, null);
+ for(GlobalRoleWithApplicationRoleFunction globalRoleFunc: globalRoleFunctionList){
+ String globalRoleFuncWithoutPipes = "";
+ RoleFunction roleFunc = null;
+ if(globalRoleFunc.getFunctionCd().contains(FUNCTION_PIPE)) {
+ globalRoleFuncWithoutPipes = globalRoleFunc.getFunctionCd();
+ roleFunc = userRquestedFunctionsMap.get(globalRoleFuncWithoutPipes);
+ }else {
+ globalRoleFuncWithoutPipes = EcompPortalUtils.getFunctionCode(globalRoleFunc.getFunctionCd());
+ roleFunc = userRquestedFunctionsMapPipesFilter.get(globalRoleFuncWithoutPipes);
+ }
+ if(roleFunc == null){
+ ExternalAccessPermsDetail permDetailFromMap = globalRoleFunc.getFunctionCd().contains(FUNCTION_PIPE) ? existingPermsWithRolesWithPipes.get(globalRoleFuncWithoutPipes) : existingPermsWithRoles.get(globalRoleFuncWithoutPipes);
+ ExternalAccessPerms perm = new ExternalAccessPerms(permDetailFromMap.getType(), EcompPortalUtils.getFunctionCode(permDetailFromMap.getInstance()), permDetailFromMap.getAction());
+ String roleName = portalAppInfo.getNameSpace()+"."+globalRoleFunc.getRoleName().replaceAll(EcompPortalUtils.EXTERNAL_CENTRAL_AUTH_ROLE_HANDLE_SPECIAL_CHARACTERS, "_");
+ HttpHeaders headers = EcompPortalUtils.base64encodeKeyForAAFBasicAuth();
+ removePermForRole(perm, mapper, roleName, headers);
+ }
+ }
+ logger.debug(EELFLoggerDelegate.debugLogger, "Finished addFunctionsTOGlobalRole");
+ } catch (Exception e) {
+ logger.error(EELFLoggerDelegate.errorLogger, "addFunctionsTOGlobalRole: Failed",e);
+ throw e;
+ }
+ }
+
+ private void addRoleFunctionsToGlobalRoleInExternalSystem(RoleFunction addFunction, Role globalRole, ObjectMapper mapper, EPApp app,
+ EPApp portalAppInfo) throws Exception {
+ try {
+ logger.debug(EELFLoggerDelegate.debugLogger, "Entering into addRoleFunctionsToGlobalRoleInExternalSystem");
+ ExternalAccessRolePerms extAddRolePerms = null;
+ ExternalAccessPerms extAddPerms = null;
+ HttpHeaders headers = EcompPortalUtils.base64encodeKeyForAAFBasicAuth();
+ String code = "";
+ String type = "";
+ String action = "";
+ if (addFunction.getCode().contains(FUNCTION_PIPE)) {
+ code = EcompPortalUtils.getFunctionCode(addFunction.getCode());
+ type = getFunctionType(addFunction.getCode());
+ action = getFunctionAction(addFunction.getCode());
+ } else {
+ code = addFunction.getCode();
+ type = addFunction.getCode().contains("menu") ? "menu" : "url";
+ action = "*";
+ }
+ extAddPerms = new ExternalAccessPerms(app.getNameSpace() + "." + type, code, action);
+ extAddRolePerms = new ExternalAccessRolePerms(extAddPerms,
+ portalAppInfo.getNameSpace() + "." + globalRole.getName().replaceAll(
+ EcompPortalUtils.EXTERNAL_CENTRAL_AUTH_ROLE_HANDLE_SPECIAL_CHARACTERS, "_"));
+ String updateRolePerms = mapper.writeValueAsString(extAddRolePerms);
+ HttpEntity<String> entity = new HttpEntity<>(updateRolePerms, headers);
+ logger.debug(EELFLoggerDelegate.debugLogger, "addRoleFunctionsInExternalSystem: {} ",
+ CONNECTING_TO_EXTERNAL_AUTH_SYSTEM_LOG_MESSAGE);
+ ResponseEntity<String> addResponse = template
+ .exchange(SystemProperties.getProperty(EPCommonSystemProperties.EXTERNAL_CENTRAL_ACCESS_URL)
+ + "role/perm", HttpMethod.POST, entity, String.class);
+ if (addResponse.getStatusCode().value() != 201) {
+ logger.debug(EELFLoggerDelegate.debugLogger,
+ "addRoleFunctionsInExternalSystem: While adding permission to the role in External Auth system something went wrong! due to {} and statuscode: {}",
+ addResponse.getStatusCode().getReasonPhrase(), addResponse.getStatusCode().value());
+ } else {
+ logger.debug(EELFLoggerDelegate.debugLogger,
+ "addRoleFunctionsInExternalSystem: Finished adding permissions to roles in External Auth system and status code: {} ",
+ addResponse.getStatusCode().value());
+ }
+ logger.debug(EELFLoggerDelegate.debugLogger, "Finished addRoleFunctionsToGlobalRoleInExternalSystem");
+ }catch(Exception e){
+ logger.error(EELFLoggerDelegate.errorLogger, "addRoleFunctionsToGlobalRoleInExternalSystem: Failed",e);
+ throw e;
+ }
+ }
+
+ /**
+ *
+ * It adds functions to the role in external auth system
+ *
+ * @param updateExtRole
+ * @param addPermsMapper
+ * @param app
+ * @return true if success else false
+ * @throws Exception
+ */
+ private boolean addRoleFunctionsInExternalSystem(Role updateExtRole, ObjectMapper addPermsMapper, EPApp app)
+ throws Exception {
+ boolean response = false;
+ ExternalAccessRolePerms extAddRolePerms = null;
+ ExternalAccessPerms extAddPerms = null;
+ List<RoleFunction> roleFunctionListAdd = convertSetToListOfRoleFunctions(updateExtRole);
+ HttpHeaders headers = EcompPortalUtils.base64encodeKeyForAAFBasicAuth();
+ for (RoleFunction roleFunc : roleFunctionListAdd) {
+ String code = "";
+ String type= "";
+ String action = "";
+ if (roleFunc.getCode().contains(FUNCTION_PIPE)) {
+ code = EcompPortalUtils.getFunctionCode(roleFunc.getCode());
+ type = getFunctionType(roleFunc.getCode());
+ action = getFunctionAction(roleFunc.getCode());
+ } else {
+ code = roleFunc.getCode();
+ type = roleFunc.getCode().contains("menu") ? "menu" : "url";
+ action = "*";
+ }
+ extAddPerms = new ExternalAccessPerms(app.getNameSpace() + "." + type, code, action);
+ extAddRolePerms = new ExternalAccessRolePerms(extAddPerms,
+ app.getNameSpace() + "." + updateExtRole.getName().replaceAll(EcompPortalUtils.EXTERNAL_CENTRAL_AUTH_ROLE_HANDLE_SPECIAL_CHARACTERS, "_"));
+ String updateRolePerms = addPermsMapper.writeValueAsString(extAddRolePerms);
+ HttpEntity<String> entity = new HttpEntity<>(updateRolePerms, headers);
+ logger.debug(EELFLoggerDelegate.debugLogger, "addRoleFunctionsInExternalSystem: {} for POST: {} " , CONNECTING_TO_EXTERNAL_AUTH_SYSTEM_LOG_MESSAGE, updateRolePerms);
+ ResponseEntity<String> addResponse = template.exchange(
+ SystemProperties.getProperty(EPCommonSystemProperties.EXTERNAL_CENTRAL_ACCESS_URL) + "role/perm",
+ HttpMethod.POST, entity, String.class);
+ if (addResponse.getStatusCode().value() != 201) {
+ response = false;
+ logger.debug(EELFLoggerDelegate.debugLogger,
+ "addRoleFunctionsInExternalSystem: While adding permission to the role in External Auth system something went wrong! due to {} and statuscode: {}",
+ addResponse.getStatusCode().getReasonPhrase(), addResponse.getStatusCode().value());
+ } else {
+ response = true;
+ logger.debug(EELFLoggerDelegate.debugLogger, "addRoleFunctionsInExternalSystem: Finished adding permissions to roles in External Auth system {} and status code: {} ", updateRolePerms, addResponse.getStatusCode().value());
+ }
+ }
+ return response;
+ }
+
+ /**
+ *
+ * It converts list of functions in updateExtRole parameter to the RoleFunction object
+ *
+ * @param updateExtRole
+ * @return list of functions
+ */
+ @SuppressWarnings("unchecked")
+ private List<RoleFunction> convertSetToListOfRoleFunctions(Role updateExtRole) {
+ Set<RoleFunction> roleFunctionSetList = updateExtRole.getRoleFunctions();
+ List<RoleFunction> roleFunctionList = new ArrayList<>();
+ ObjectMapper roleFuncMapper = new ObjectMapper();
+ Iterator<RoleFunction> itetaror = roleFunctionSetList.iterator();
+ while (itetaror.hasNext()) {
+ Object nextValue = itetaror.next();
+ RoleFunction roleFunction = roleFuncMapper.convertValue(nextValue, RoleFunction.class);
+ roleFunctionList.add(roleFunction);
+ }
+ return roleFunctionList.stream().distinct().collect(Collectors.toList());
+ }
+
+ /**
+ * It delete permissions/functions in the external auth system
+ *
+ * @param perm
+ * @param permMapper
+ * @param name
+ * @param headers
+ * @throws JsonProcessingException
+ * @throws Exception
+ */
+ private void removePermForRole(ExternalAccessPerms perm, ObjectMapper permMapper, String name, HttpHeaders headers)
+ throws ExternalAuthSystemException, JsonProcessingException {
+ ExternalAccessRolePerms extAccessRolePerms = new ExternalAccessRolePerms(perm, name);
+ String permDetails = permMapper.writeValueAsString(extAccessRolePerms);
+ try{
+ HttpEntity<String> deleteEntity = new HttpEntity<>(permDetails, headers);
+ logger.debug(EELFLoggerDelegate.debugLogger, "removePermForRole: {} for DELETE: {} " , CONNECTING_TO_EXTERNAL_AUTH_SYSTEM_LOG_MESSAGE, permDetails);
+ ResponseEntity<String> deletePermResponse = template
+ .exchange(SystemProperties.getProperty(EPCommonSystemProperties.EXTERNAL_CENTRAL_ACCESS_URL) + "role/"
+ + name + "/perm", HttpMethod.DELETE, deleteEntity, String.class);
+ if (deletePermResponse.getStatusCode().value() != 200) {
+ throw new ExternalAuthSystemException(deletePermResponse.getBody());
+ }
+ logger.debug(EELFLoggerDelegate.debugLogger, "removePermForRole: Finished deleting permission to role in External Auth system: {} and status code: {}",
+ permDetails, deletePermResponse.getStatusCode().value());
+ } catch(Exception e){
+ if(e.getMessage().contains("404")){
+ logger.error(EELFLoggerDelegate.errorLogger, "Failed to add role for DELETE request: {} due to {}", permDetails, e.getMessage());
+ } else{
+ throw e;
+ }
+ }
+ }
+
+ /**
+ * It will create new role in the External Auth System
+ *
+ * @param newRole
+ * @param app
+ * @return true if successfully added in the system else false
+ * @throws Exception
+ * If fails to add role in the system
+ */
+ private void addNewRoleInExternalSystem(List<EPRole> newRole, EPApp app) throws Exception, HttpClientErrorException {
+ try{
+ HttpHeaders headers = EcompPortalUtils.base64encodeKeyForAAFBasicAuth();
+ ObjectMapper mapper = new ObjectMapper();
+ String addNewRole = "";
+ ExternalAccessRole extRole = new ExternalAccessRole();
+ String addDesc = null;
+ Map<String, String> extSystemJsonMapper = new LinkedHashMap<>();
+ extSystemJsonMapper.put(ID, String.valueOf(newRole.get(0).getId()));
+ extSystemJsonMapper.put(ROLE_NAME, String.valueOf(newRole.get(0).getName()));
+ extSystemJsonMapper.put(ACTIVE, String.valueOf(newRole.get(0).getActive()));
+ extSystemJsonMapper.put(PRIORITY, String.valueOf(newRole.get(0).getPriority()));
+ extSystemJsonMapper.put(APP_ID, String.valueOf(newRole.get(0).getAppId()));
+ extSystemJsonMapper.put(APP_ROLE_ID, String.valueOf(newRole.get(0).getAppRoleId()));
+ addDesc = mapper.writeValueAsString(extSystemJsonMapper);
+ extRole.setName(app.getNameSpace() + "." + newRole.get(0).getName().replaceAll(EcompPortalUtils.EXTERNAL_CENTRAL_AUTH_ROLE_HANDLE_SPECIAL_CHARACTERS, "_"));
+ extRole.setDescription(addDesc);
+ addNewRole = mapper.writeValueAsString(extRole);
+ HttpEntity<String> postEntity = new HttpEntity<>(addNewRole, headers);
+ logger.debug(EELFLoggerDelegate.debugLogger, "addNewRoleInExternalSystem: {} for POST: {} " , CONNECTING_TO_EXTERNAL_AUTH_SYSTEM_LOG_MESSAGE, addNewRole);
+ ResponseEntity<String> addNewRoleInExternalSystem = template.exchange(
+ SystemProperties.getProperty(EPCommonSystemProperties.EXTERNAL_CENTRAL_ACCESS_URL) + "role",
+ HttpMethod.POST, postEntity, String.class);
+ if (addNewRoleInExternalSystem.getStatusCode().value() == 201) {
+ logger.debug(EELFLoggerDelegate.debugLogger,
+ "addNewRoleInExternalSystem: Finished adding into External Auth system for POST: {} and status code: {}",
+ addNewRole, addNewRoleInExternalSystem.getStatusCode().value());
+ }
+ }catch(HttpClientErrorException ht){
+ dataAccessService.deleteDomainObjects(EPRole.class, " role_id = "+ newRole.get(0).getId(), null);
+ logger.error(EELFLoggerDelegate.debugLogger, "addNewRoleInExternalSystem: Failed to add in External Auth system and status code: {}",
+ ht);
+ throw new HttpClientErrorException(ht.getStatusCode());
+ }
+ }
+
+ /**
+ *
+ * It updates existing role in the External Auth System
+ *
+ * @param addRole
+ * It Contains role information
+ * @param app
+ * @return string which is formatted to match with the external auth system
+ * @throws JsonProcessingException
+ */
+ private String updateExistingRoleInExternalSystem(Role addRole, EPApp app) throws JsonProcessingException {
+ ObjectMapper mapper = new ObjectMapper();
+ String addNewRole = "";
+ ExternalAccessRole extRole = new ExternalAccessRole();
+ List<EPRole> role = null;
+ String addDesc = null;
+ Map<String, String> extSystemUpdateRole = new LinkedHashMap<>();
+ if (app.getId().equals(PortalConstants.PORTAL_APP_ID)) {
+ role = getPortalAppRoleInfo(addRole.getId());
+ } else {
+ role = getPartnerAppRoleInfo(addRole.getId(), app);
+ }
+ extSystemUpdateRole.put(ID, String.valueOf(role.get(0).getId()));
+ extSystemUpdateRole.put(ROLE_NAME, String.valueOf(addRole.getName()));
+ extSystemUpdateRole.put(ACTIVE, String.valueOf(role.get(0).getActive()));
+ extSystemUpdateRole.put(PRIORITY, String.valueOf(role.get(0).getPriority()));
+ extSystemUpdateRole.put(APP_ID, String.valueOf(role.get(0).getAppId()));
+ extSystemUpdateRole.put(APP_ROLE_ID, String.valueOf(role.get(0).getAppRoleId()));
+ addDesc = mapper.writeValueAsString(extSystemUpdateRole);
+ extRole.setName(app.getNameSpace() + "." + addRole.getName().replaceAll(EcompPortalUtils.EXTERNAL_CENTRAL_AUTH_ROLE_HANDLE_SPECIAL_CHARACTERS, "_"));
+ extRole.setDescription(addDesc);
+ addNewRole = mapper.writeValueAsString(extRole);
+ return addNewRole;
+ }
+
+ /**
+ * It create a role in the external auth system and then in our local
+ *
+ * @param addRoleInDB
+ * @param app
+ * @return true else false
+ * @throws Exception
+ */
+ @SuppressWarnings("unchecked")
+ @Transactional(rollbackFor = Exception.class)
+ private boolean addRoleInEcompDB(Role addRoleInDB, EPApp app) throws Exception {
+ boolean result = false;
+ EPRole epRole = null;
+ Set<RoleFunction> roleFunctionList = addRoleInDB.getRoleFunctions();
+ List<RoleFunction> roleFunctionListNew = new ArrayList<>();
+ ObjectMapper mapper = new ObjectMapper();
+ Iterator<RoleFunction> itetaror = roleFunctionList.iterator();
+ while (itetaror.hasNext()) {
+ Object nextValue = itetaror.next();
+ RoleFunction roleFunction = mapper.convertValue(nextValue, RoleFunction.class);
+ roleFunctionListNew.add(roleFunction);
+ }
+ List<RoleFunction> listWithoutDuplicates = roleFunctionListNew.stream().distinct().collect(Collectors.toList());
+ try {
+ if (addRoleInDB.getId() == null) { // check if it is new role
+ if (EcompPortalUtils.checkIfRemoteCentralAccessAllowed()) {
+ checkIfRoleExitsInExternalSystem(addRoleInDB, app);
+ }
+ EPRole epRoleNew = new EPRole();
+ epRoleNew.setActive(addRoleInDB.getActive());
+ epRoleNew.setName(addRoleInDB.getName());
+ epRoleNew.setPriority(addRoleInDB.getPriority());
+ if (app.getId().equals(PortalConstants.PORTAL_APP_ID)) {
+ epRoleNew.setAppId(null);
+ } else {
+ epRoleNew.setAppId(app.getId());
+ }
+ dataAccessService.saveDomainObject(epRoleNew, null);
+ List<EPRole> getRoleCreated = null;
+ final Map<String, String> epAppRoleParams = new HashMap<>();
+ final Map<String, String> epAppPortalRoleParams = new HashMap<>();
+ if (!app.getId().equals(PortalConstants.PORTAL_APP_ID)) {
+ epAppRoleParams.put("appId", String.valueOf(app.getId()));
+ epAppRoleParams.put(APP_ROLE_NAME_PARAM, addRoleInDB.getName());
+ List<EPRole> roleCreated = dataAccessService.executeNamedQuery(GET_ROLE_TO_UPDATE_IN_EXTERNAL_AUTH_SYSTEM, epAppRoleParams, null);
+ EPRole epUpdateRole = roleCreated.get(0);
+ epUpdateRole.setAppRoleId(epUpdateRole.getId());
+ dataAccessService.saveDomainObject(epUpdateRole, null);
+ getRoleCreated = dataAccessService.executeNamedQuery(GET_ROLE_TO_UPDATE_IN_EXTERNAL_AUTH_SYSTEM, epAppRoleParams, null);
+ } else {
+ epAppPortalRoleParams.put(APP_ROLE_NAME_PARAM, addRoleInDB.getName());
+ getRoleCreated = dataAccessService.executeNamedQuery(GET_PORTAL_APP_ROLES_QUERY, epAppPortalRoleParams, null);
+ }
+ // Add role in External Auth system
+ if (EcompPortalUtils.checkIfRemoteCentralAccessAllowed()) {
+ addNewRoleInExternalSystem(getRoleCreated, app);
+ }
+ } else { // if role already exists then update it
+ EPRole globalRole = null;
+ List<EPRole> applicationRoles;
+ List<EPRole> globalRoleList = getGlobalRolesOfPortal();
+ boolean isGlobalRole = false;
+ if (!globalRoleList.isEmpty()) {
+ EPRole role = globalRoleList.stream().filter(x -> addRoleInDB.getId().equals(x.getId())).findAny()
+ .orElse(null);
+ if (role != null) {
+ globalRole = role;
+ isGlobalRole = true;
+ }
+ }
+ if (app.getId().equals(PortalConstants.PORTAL_APP_ID)
+ || (globalRole != null && app.getId() != globalRole.getAppId())) {
+ applicationRoles = getPortalAppRoleInfo(addRoleInDB.getId());
+ } else {
+ applicationRoles = getPartnerAppRoleInfo(addRoleInDB.getId(), app);
+ }
+ if (EcompPortalUtils.checkIfRemoteCentralAccessAllowed()) {
+ updateRoleInExternalSystem(addRoleInDB, app, isGlobalRole);
+ // Add all user to the re-named role in external auth system
+ if (!applicationRoles.isEmpty()
+ && !addRoleInDB.getName().equals(applicationRoles.get(0).getName())) {
+ bulkUploadUsersSingleRole(app.getUebKey(), applicationRoles.get(0).getId(),
+ addRoleInDB.getName());
+ }
+ }
+ deleteRoleFunction(app, applicationRoles);
+ if (!applicationRoles.isEmpty()) {
+ epRole = applicationRoles.get(0);
+ epRole.setName(addRoleInDB.getName());
+ epRole.setPriority(addRoleInDB.getPriority());
+ epRole.setActive(addRoleInDB.getActive());
+ if (app.getId().equals(PortalConstants.PORTAL_APP_ID)) {
+ epRole.setAppId(null);
+ epRole.setAppRoleId(null);
+ } else if (!app.getId().equals(PortalConstants.PORTAL_APP_ID)
+ && applicationRoles.get(0).getAppRoleId() == null) {
+ epRole.setAppRoleId(epRole.getId());
+ }
+ dataAccessService.saveDomainObject(epRole, null);
+ }
+ Long roleAppId = null;
+ if (globalRole != null && !app.getId().equals(globalRole.getAppId()))
+ roleAppId = PortalConstants.PORTAL_APP_ID;
+ saveRoleFunction(listWithoutDuplicates, app, applicationRoles, roleAppId);
+ result = true;
+ }
+ } catch (Exception e) {
+ logger.error(EELFLoggerDelegate.errorLogger, "addRoleInEcompDB is failed", e);
+ throw e;
+ }
+ return result;
+ }
+
+ /**
+ *
+ * It validates whether role exists in external auth system
+ *
+ * @param checkRole
+ * @param app
+ * @throws Exception
+ * If role exits
+ */
+ private void checkIfRoleExitsInExternalSystem(Role checkRole, EPApp app) throws Exception {
+ getNameSpaceIfExists(app);
+ HttpHeaders headers = EcompPortalUtils.base64encodeKeyForAAFBasicAuth();
+ String roleName = app.getNameSpace() + "." + checkRole.getName().replaceAll(EcompPortalUtils.EXTERNAL_CENTRAL_AUTH_ROLE_HANDLE_SPECIAL_CHARACTERS, "_");
+ HttpEntity<String> checkRoleEntity = new HttpEntity<>(headers);
+ logger.debug(EELFLoggerDelegate.debugLogger, "checkIfRoleExitsInExternalSystem: {} " , CONNECTING_TO_EXTERNAL_AUTH_SYSTEM_LOG_MESSAGE);
+ ResponseEntity<String> checkRoleInExternalSystem = template
+ .exchange(SystemProperties.getProperty(EPCommonSystemProperties.EXTERNAL_CENTRAL_ACCESS_URL) + "roles/"
+ + roleName, HttpMethod.GET, checkRoleEntity, String.class);
+ if (!checkRoleInExternalSystem.getBody().equals(IS_EMPTY_JSON_STRING)) {
+ logger.debug("checkIfRoleExitsInExternalSystem: Role already exists in external system {} and status code: {} ", checkRoleInExternalSystem.getBody(), checkRoleInExternalSystem.getStatusCode().value());
+ throw new ExternalAuthSystemException(" Role already exists in external system");
+ }
+ }
+
+ /**
+ * It saves list of functions to the role in portal
+ *
+ * @param roleFunctionListNew
+ * @param app
+ * @param applicationRoles
+ * @throws Exception
+ */
+ @SuppressWarnings("unchecked")
+ private void saveRoleFunction(List<RoleFunction> roleFunctionListNew, EPApp app, List<EPRole> applicationRoles ,Long roleAppId)
+ throws Exception {
+ final Map<String, String> getAppFunctionParams = new HashMap<>();
+
+ for (RoleFunction roleFunc : roleFunctionListNew) {
+ String code = EcompPortalUtils.getFunctionCode(roleFunc.getCode());
+ EPAppRoleFunction appRoleFunc = new EPAppRoleFunction();
+ appRoleFunc.setAppId(app.getId());
+ appRoleFunc.setRoleId(applicationRoles.get(0).getId());
+ appRoleFunc.setRoleAppId(String.valueOf(roleAppId));
+ getAppFunctionParams.put("appId", String.valueOf(app.getId()));
+ getAppFunctionParams.put(FUNCTION_CODE_PARAMS, roleFunc.getCode());
+ // query to check if function code has pipes
+ List<CentralV2RoleFunction> roleFunction = dataAccessService.executeNamedQuery(GET_ROLE_FUNCTION_QUERY, getAppFunctionParams, null);
+ if(roleFunction.isEmpty()){
+ getAppFunctionParams.put(FUNCTION_CODE_PARAMS, code);
+ roleFunction = dataAccessService.executeNamedQuery(GET_ROLE_FUNCTION_QUERY, getAppFunctionParams, null);
+ }
+ if(roleFunction.size() > 1){
+ CentralV2RoleFunction getExactFunctionCode = appFunctionListFilter(code, roleFunction);
+ appRoleFunc.setCode(getExactFunctionCode.getCode());
+ } else{
+ appRoleFunc.setCode(roleFunction.get(0).getCode());
+ }
+
+ dataAccessService.saveDomainObject(appRoleFunc, null);
+ }
+ }
+
+ /**
+ *
+ * It filters the app functions which starts with similar name in the result set
+ *
+ * @param roleFunc
+ * @param roleFunction
+ * @return CentralRoleFunction
+ */
+ private CentralV2RoleFunction appFunctionListFilter(String roleFuncCode, List<CentralV2RoleFunction> roleFunction) {
+ final Map<String, CentralV2RoleFunction> appFunctionsFilter = new HashMap<>();
+ final Map<String, CentralV2RoleFunction> appFunctionsFilterPipes = new HashMap<>();
+ CentralV2RoleFunction getExactFunctionCode = null;
+ for(CentralV2RoleFunction cenRoleFunction : roleFunction){
+ appFunctionsFilter.put(cenRoleFunction.getCode(), cenRoleFunction);
+ appFunctionsFilterPipes.put(EcompPortalUtils.getFunctionCode(cenRoleFunction.getCode()), cenRoleFunction);
+ }
+ getExactFunctionCode = appFunctionsFilter.get(roleFuncCode);
+ if(getExactFunctionCode == null){
+ getExactFunctionCode = appFunctionsFilterPipes.get(roleFuncCode);
+ }
+ return getExactFunctionCode;
+ }
+
+ /**
+ * It deletes all EPAppRoleFunction records in the portal
+ *
+ * @param app
+ * @param role
+ */
+ @SuppressWarnings("unchecked")
+ private void deleteRoleFunction(EPApp app, List<EPRole> role) {
+ final Map<String, Long> appRoleFuncsParams = new HashMap<>();
+ appRoleFuncsParams.put("appId", app.getId());
+ appRoleFuncsParams.put("roleId", role.get(0).getId());
+ List<EPAppRoleFunction> appRoleFunctionList = dataAccessService.executeNamedQuery("getAppRoleFunctionOnRoleIdandAppId", appRoleFuncsParams, null);
+ if (!appRoleFunctionList.isEmpty()) {
+ for (EPAppRoleFunction approleFunction : appRoleFunctionList) {
+ dataAccessService.deleteDomainObject(approleFunction, null);
+ }
+ }
+ }
+
+ @Override
+ @SuppressWarnings("unchecked")
+ public List<EPUser> getUser(String loginId){
+ final Map<String, String> userParams = new HashMap<>();
+ userParams.put("org_user_id", loginId);
+ return (List<EPUser>) dataAccessService.executeNamedQuery("getEPUserByOrgUserId", userParams, null);
+ }
+
+ @Override
+ public String getV2UserWithRoles(String loginId, String uebkey) throws Exception {
+ final Map<String, String> params = new HashMap<>();
+ List<EPUser> userList = null;
+ CentralV2User cenV2User = null;
+ String result = null;
+ try {
+ params.put("orgUserIdValue", loginId);
+ List<EPApp> appList = getApp(uebkey);
+ if (!appList.isEmpty()) {
+ userList = getUser(loginId);
+ if (!userList.isEmpty()) {
+ ObjectMapper mapper = new ObjectMapper();
+ cenV2User = getV2UserAppRoles(loginId, uebkey);
+ result = mapper.writeValueAsString(cenV2User);
+ } else if (userList.isEmpty()) {
+ throw new InvalidUserException("User not found");
+ }
+ } else {
+ throw new InactiveApplicationException("Application not found");
+ }
+ } catch (Exception e) {
+ logger.error(EELFLoggerDelegate.errorLogger, "getUser: failed", e);
+ throw e;
+ }
+ return result;
+ }
+
+ @Override
+ public List<CentralV2Role> getRolesForApp(String uebkey) throws Exception {
+ logger.debug(EELFLoggerDelegate.debugLogger, "getRolesForApp: Entering into getRolesForApp");
+ List<CentralV2Role> roleList = new ArrayList<>();
+ final Map<String, Long> params = new HashMap<>();
+ try {
+ List<EPApp> app = getApp(uebkey);
+ List<EPRole> appRolesList = getAppRoles(app.get(0).getId());
+ roleList = createCentralRoleObject(app, appRolesList, roleList, params);
+ if(app.get(0).getId() != PortalConstants.PORTAL_APP_ID){
+ List<CentralV2Role> globalRoleList = getGlobalRolesOfApplication(app.get(0).getId());
+ List<EPRole> globalRolesList = getGlobalRolesOfPortal();
+ List<CentralV2Role> portalsGlobalRolesFinlaList = new ArrayList<>();
+ if (!globalRolesList.isEmpty()) {
+ for (EPRole eprole : globalRolesList) {
+ CentralV2Role cenRole = convertRoleToCentralV2Role(eprole);
+ portalsGlobalRolesFinlaList.add(cenRole);
+ }
+ roleList.addAll(globalRoleList);
+ for (CentralV2Role role : portalsGlobalRolesFinlaList) {
+ CentralV2Role result = roleList.stream()
+ .filter(x -> role.getId().equals(x.getId())).findAny().orElse(null);
+ if (result == null)
+ roleList.add(role);
+ }
+ } else {
+ for (EPRole role : globalRolesList) {
+ CentralV2Role cenRole = convertRoleToCentralV2Role(role);
+ roleList.add(cenRole);
+ }
+ }
+ }
+ } catch (Exception e) {
+ logger.error(EELFLoggerDelegate.errorLogger, "getRolesForApp: Failed!", e);
+ throw e;
+ }
+ logger.debug(EELFLoggerDelegate.debugLogger, "getRolesForApp: Finished!");
+ return roleList.stream().distinct().collect(Collectors.toList());
+ }
+
+ @SuppressWarnings("unchecked")
+ @Override
+ public List<CentralV2RoleFunction> getRoleFuncList(String uebkey) throws Exception {
+ EPApp app = getApp(uebkey).get(0);
+ List<CentralV2RoleFunction> finalRoleList = new ArrayList<>();
+ final Map<String, Long> params = new HashMap<>();
+ params.put(APP_ID, app.getId());
+ List<CentralV2RoleFunction> getRoleFuncList = dataAccessService.executeNamedQuery("getAllRoleFunctions", params, null);
+ for (CentralV2RoleFunction roleFuncItem : getRoleFuncList) {
+ String code = EcompPortalUtils.getFunctionCode(roleFuncItem.getCode());
+ String type = getFunctionType(roleFuncItem.getCode());
+ String action = getFunctionAction(roleFuncItem.getCode());
+ roleFuncItem.setCode(EPUserUtils.decodeFunctionCode(code));
+ roleFuncItem.setType(type);
+ roleFuncItem.setAction(action);
+ finalRoleList.add(roleFuncItem);
+ }
+ return finalRoleList;
+ }
+
+
+ /**
+ * It return function action
+ *
+ * @param roleFuncItem
+ * @return String action
+ */
+ private String getFunctionAction(String roleFuncItem) {
+ return (!roleFuncItem.contains(FUNCTION_PIPE)) ? "*"
+ : EcompPortalUtils.getFunctionAction(roleFuncItem);
+ }
+
+ /**
+ *
+ * It check function code has any pipes, if found return function type
+ *
+ * @param roleFuncItem
+ * @param type
+ * @return function type
+ */
+ private String getFunctionType(String roleFuncItem) {
+ String type = null;
+ if ((roleFuncItem.contains(FUNCTION_PIPE) && roleFuncItem.contains("menu"))
+ || (!roleFuncItem.contains(FUNCTION_PIPE) && roleFuncItem.contains("menu"))) {
+ type = "menu";
+ } else if (checkIfCodeHasNoPipesAndHasTypeUrl(roleFuncItem)
+ ||checkIfCodeHasPipesAndHasTypeUrl(roleFuncItem)
+ ||checkIfCodeHasNoPipesAndHasNoTypeUrl(roleFuncItem)) {
+ type = "url";
+ } else if (roleFuncItem.contains(FUNCTION_PIPE)
+ && (!roleFuncItem.contains("menu") || roleFuncItem.contains("url"))) {
+ type = EcompPortalUtils.getFunctionType(roleFuncItem);
+ }
+ return type;
+ }
+
+ /**
+ *
+ * It check whether function code has no pipes and no url string in it
+ *
+ * @param roleFuncItem
+ * @return true or false
+ */
+ private boolean checkIfCodeHasNoPipesAndHasNoTypeUrl(String roleFuncItem) {
+ return !roleFuncItem.contains(FUNCTION_PIPE) && !roleFuncItem.contains("url");
+ }
+
+ /**
+ *
+ * It check whether function code has pipes and url string in it
+ *
+ * @param roleFuncItem
+ * @return true or false
+ */
+ private boolean checkIfCodeHasPipesAndHasTypeUrl(String roleFuncItem) {
+ return roleFuncItem.contains(FUNCTION_PIPE) && roleFuncItem.contains("url");
+ }
+
+ /**
+ *
+ * It check whether function code has no pipes and has url string in it
+ *
+ * @param roleFuncItem
+ * @return true or false
+ */
+ private boolean checkIfCodeHasNoPipesAndHasTypeUrl(String roleFuncItem) {
+ return !roleFuncItem.contains(FUNCTION_PIPE) && roleFuncItem.contains("url");
+ }
+
+ /**
+ * It returns user detail information which is deep copy of EPUser.class object
+ *
+ * @param userInfo
+ * @param userAppSet
+ * @param app
+ * @return
+ * @throws Exception
+ */
+ @SuppressWarnings("unchecked")
+ private CentralV2User createEPUser(EPUser userInfo, Set<EPUserApp> userAppSet, EPApp app) throws Exception {
+
+ final Map<String, Long> params = new HashMap<>();
+ CentralV2User userAppList = new CentralV2User();
+ CentralV2User user1 = null;
+ try {
+ userAppList.setUserApps(new TreeSet<CentralV2UserApp>());
+ for (EPUserApp userApp : userAppSet) {
+ if (userApp.getRole().getActive()) {
+ EPApp epApp = userApp.getApp();
+ String globalRole = userApp.getRole().getName().toLowerCase();
+ if (((epApp.getId().equals(app.getId()))
+ && (!userApp.getRole().getId().equals(PortalConstants.ACCOUNT_ADMIN_ROLE_ID)))
+ || ((epApp.getId().equals(PortalConstants.PORTAL_APP_ID))
+ && (globalRole.toLowerCase().startsWith("global_")))) {
+ CentralV2UserApp cua = new CentralV2UserApp();
+ cua.setUserId(null);
+ CentralApp cenApp = new CentralApp(1L, epApp.getCreated(), epApp.getModified(),
+ epApp.getCreatedId(), epApp.getModifiedId(), epApp.getRowNum(), epApp.getName(),
+ epApp.getImageUrl(), epApp.getDescription(), epApp.getNotes(), epApp.getUrl(),
+ epApp.getAlternateUrl(), epApp.getAppRestEndpoint(), epApp.getMlAppName(),
+ epApp.getMlAppAdminId(), String.valueOf(epApp.getMotsId()), epApp.getAppPassword(),
+ String.valueOf(epApp.getOpen()), String.valueOf(epApp.getEnabled()),
+ epApp.getThumbnail(), epApp.getUsername(), epApp.getUebKey(), epApp.getUebSecret(),
+ epApp.getUebTopicName());
+ cua.setApp(cenApp);
+ params.put("roleId", userApp.getRole().getId());
+ params.put(APP_ID, userApp.getApp().getId());
+ CentralV2Role centralRole;
+ List<EPRole> globalRoleList;
+ globalRoleList = getGlobalRolesOfPortal();
+ EPRole result = globalRoleList.stream().filter(x -> userApp.getRole().getId().equals(x.getId()))
+ .findAny().orElse(null);
+ if (result != null && userApp.getApp().getId() != app.getId()) {
+ userApp.getRole().setId(result.getId());
+ centralRole = getGlobalRoleForRequestedApp(app.getId(), userApp.getRole().getId());
+ cua.setRole(centralRole);
+ } else {
+ List<CentralV2RoleFunction> appRoleFunctionList = dataAccessService
+ .executeNamedQuery("getAppRoleFunctionList", params, null);
+ SortedSet<CentralV2RoleFunction> roleFunctionSet = new TreeSet<>();
+ for (CentralV2RoleFunction roleFunc : appRoleFunctionList) {
+ String functionCode = EcompPortalUtils.getFunctionCode(roleFunc.getCode());
+ CentralV2RoleFunction cenRoleFunc = new CentralV2RoleFunction(roleFunc.getId(),
+ functionCode, roleFunc.getName(), null, null);
+ roleFunctionSet.add(cenRoleFunc);
+ }
+ Long userRoleId = null;
+ if (globalRole.toLowerCase().startsWith("global_")
+ && epApp.getId().equals(PortalConstants.PORTAL_APP_ID)) {
+ userRoleId = userApp.getRole().getId();
+ } else {
+ userRoleId = userApp.getRole().getAppRoleId();
+ }
+ CentralV2Role cenRole = new CentralV2Role(userRoleId, userApp.getRole().getCreated(),
+ userApp.getRole().getModified(), userApp.getRole().getCreatedId(),
+ userApp.getRole().getModifiedId(), userApp.getRole().getRowNum(),
+ userApp.getRole().getName(), userApp.getRole().getActive(),
+ userApp.getRole().getPriority(), roleFunctionSet, null, null);
+ cua.setRole(cenRole);
+ }
+ userAppList.getUserApps().add(cua);
+ }
+ }
+ }
+
+ user1 = new CentralV2User(null, userInfo.getCreated(), userInfo.getModified(), userInfo.getCreatedId(),
+ userInfo.getModifiedId(), userInfo.getRowNum(), userInfo.getOrgId(), userInfo.getManagerId(),
+ userInfo.getFirstName(), userInfo.getMiddleInitial(), userInfo.getLastName(), userInfo.getPhone(),
+ userInfo.getFax(), userInfo.getCellular(), userInfo.getEmail(), userInfo.getAddressId(),
+ userInfo.getAlertMethodCd(), userInfo.getHrid(), userInfo.getOrgUserId(), userInfo.getOrgCode(),
+ userInfo.getAddress1(), userInfo.getAddress2(), userInfo.getCity(), userInfo.getState(),
+ userInfo.getZipCode(), userInfo.getCountry(), userInfo.getOrgManagerUserId(),
+ userInfo.getLocationClli(), userInfo.getBusinessCountryCode(), userInfo.getBusinessCountryName(),
+ userInfo.getBusinessUnit(), userInfo.getBusinessUnitName(), userInfo.getDepartment(),
+ userInfo.getDepartmentName(), userInfo.getCompanyCode(), userInfo.getCompany(),
+ userInfo.getZipCodeSuffix(), userInfo.getJobTitle(), userInfo.getCommandChain(),
+ userInfo.getSiloStatus(), userInfo.getCostCenter(), userInfo.getFinancialLocCode(),
+ userInfo.getLoginId(), userInfo.getLoginPwd(), userInfo.getLastLoginDate(), userInfo.getActive(),
+ userInfo.getInternal(), userInfo.getSelectedProfileId(), userInfo.getTimeZoneId(),
+ userInfo.isOnline(), userInfo.getChatId(), userAppList.getUserApps(), null);
+ } catch (Exception e) {
+ logger.error(EELFLoggerDelegate.errorLogger, "createEPUser: createEPUser failed", e);
+ throw e;
+ }
+ return user1;
+ }
+
+ @Override
+ public CentralV2Role getRoleInfo(Long roleId, String uebkey) throws Exception {
+ final Map<String, Long> params = new HashMap<>();
+ List<CentralV2Role> roleList = new ArrayList<>();
+ CentralV2Role cenRole = new CentralV2Role();
+ List<EPRole> roleInfo = null;
+ List<EPApp> app = null;
+ try {
+ app = getApp(uebkey);
+ if (app.isEmpty()) {
+ throw new InactiveApplicationException("Application not found");
+ }
+ if (app.get(0).getId() != PortalConstants.PORTAL_APP_ID) {
+ List<EPRole> globalRoleList = new ArrayList<>();
+ globalRoleList = getGlobalRolesOfPortal();
+ if (globalRoleList.size() > 0) {
+ EPRole result = globalRoleList.stream().filter(x -> roleId.equals(x.getId())).findAny()
+ .orElse(null);
+ if (result != null)
+ return getGlobalRoleForRequestedApp(app.get(0).getId(), roleId);
+ }
+ }
+ if (app.get(0).getId().equals(PortalConstants.PORTAL_APP_ID)) {
+ roleInfo = getPortalAppRoleInfo(roleId);
+ } else {
+ roleInfo = getPartnerAppRoleInfo(roleId, app.get(0));
+ }
+ roleList = createCentralRoleObject(app, roleInfo, roleList, params);
+ if (roleList.isEmpty()) {
+ return cenRole;
+ }
+
+ } catch (Exception e) {
+ logger.error(EELFLoggerDelegate.errorLogger, "getRoleInfo: failed", e);
+ throw e;
+
+ }
+ return roleList.get(0);
+ }
+
+ @SuppressWarnings("unchecked")
+ private List<EPRole> getPartnerAppRoleInfo(Long roleId, EPApp app) {
+ List<EPRole> roleInfo;
+ final Map<String, Long> getPartnerAppRoleParams = new HashMap<>();
+ getPartnerAppRoleParams.put("appRoleId", roleId);
+ getPartnerAppRoleParams.put("appId", app.getId());
+ roleInfo = dataAccessService.executeNamedQuery("getPartnerAppRoleByRoleId", getPartnerAppRoleParams, null);
+ if(roleInfo.isEmpty()) {
+ getPartnerAppRoleParams.put("appRoleId", roleId);
+ roleInfo = dataAccessService.executeNamedQuery("getPartnerAppRoleById", getPartnerAppRoleParams, null);
+ }
+ return roleInfo;
+ }
+
+ @SuppressWarnings("unchecked")
+ private List<EPRole> getPortalAppRoleInfo(Long roleId) {
+ List<EPRole> roleInfo;
+ final Map<String, Long> getPortalAppRoleParams = new HashMap<>();
+ getPortalAppRoleParams.put("roleId", roleId);
+ roleInfo = dataAccessService.executeNamedQuery("getPortalAppRoleByRoleId", getPortalAppRoleParams, null);
+ return roleInfo;
+ }
+
+ /**
+ *
+ * It returns list of app roles along with role functions and which went through deep copy
+ *
+ * @param app
+ * @param roleInfo
+ * @param roleList
+ * @param params
+ * @return
+ * @throws DecoderException
+ */
+ @SuppressWarnings("unchecked")
+ private List<CentralV2Role> createCentralRoleObject(List<EPApp> app, List<EPRole> roleInfo,
+ List<CentralV2Role> roleList, Map<String, Long> params) throws RoleFunctionException {
+ for (EPRole role : roleInfo) {
+ params.put("roleId", role.getId());
+ params.put(APP_ID, app.get(0).getId());
+ List<CentralV2RoleFunction> cenRoleFuncList = dataAccessService.executeNamedQuery("getAppRoleFunctionList",
+ params, null);
+ SortedSet<CentralV2RoleFunction> roleFunctionSet = new TreeSet<>();
+ for (CentralV2RoleFunction roleFunc : cenRoleFuncList) {
+ String functionCode = EcompPortalUtils.getFunctionCode(roleFunc.getCode());
+ functionCode = EPUserUtils.decodeFunctionCode(functionCode);
+ String type = getFunctionType(roleFunc.getCode());
+ String action = getFunctionAction(roleFunc.getCode());
+ CentralV2RoleFunction cenRoleFunc = new CentralV2RoleFunction(role.getId(), functionCode,
+ roleFunc.getName(), null, type, action, null);
+ roleFunctionSet.add(cenRoleFunc);
+ }
+ SortedSet<CentralV2Role> childRoles = new TreeSet<>();
+ SortedSet<CentralV2Role> parentRoles = new TreeSet<>();
+ CentralV2Role cenRole = null;
+ if (role.getAppRoleId() == null) {
+ cenRole = new CentralV2Role(role.getId(), role.getCreated(), role.getModified(), role.getCreatedId(),
+ role.getModifiedId(), role.getRowNum(), role.getName(), role.getActive(), role.getPriority(),
+ roleFunctionSet, childRoles, parentRoles);
+ } else {
+ cenRole = new CentralV2Role(role.getAppRoleId(), role.getCreated(), role.getModified(),
+ role.getCreatedId(), role.getModifiedId(), role.getRowNum(), role.getName(), role.getActive(),
+ role.getPriority(), roleFunctionSet, childRoles, parentRoles);
+ }
+ roleList.add(cenRole);
+ }
+ return roleList;
+ }
+
+ @SuppressWarnings("unchecked")
+ @Override
+ public CentralV2RoleFunction getRoleFunction(String functionCode, String uebkey) throws Exception {
+ if (functionCode.contains("|"))
+ functionCode = EcompPortalUtils.getFunctionCode(functionCode);
+ functionCode = encodeFunctionCode(functionCode);
+ CentralV2RoleFunction roleFunc = null;
+ EPApp app = getApp(uebkey).get(0);
+ List<CentralV2RoleFunction> getRoleFuncList = null;
+ final Map<String, String> params = new HashMap<>();
+ try {
+ params.put(FUNCTION_CODE_PARAMS, functionCode);
+ params.put(APP_ID, String.valueOf(app.getId()));
+ getRoleFuncList = dataAccessService.executeNamedQuery(GET_ROLE_FUNCTION_QUERY, params, null);
+ if (getRoleFuncList.isEmpty()) {
+ return roleFunc;
+ } else {
+ if (getRoleFuncList.size() > 1) {
+ CentralV2RoleFunction cenV2RoleFunction = appFunctionListFilter(functionCode, getRoleFuncList);
+ if(cenV2RoleFunction == null)
+ return roleFunc;
+ roleFunc = checkIfPipesExitsInFunctionCode(cenV2RoleFunction);
+ } else {
+ roleFunc = checkIfPipesExitsInFunctionCode(getRoleFuncList.get(0));
+ }
+ }
+ } catch (Exception e) {
+ logger.error(EELFLoggerDelegate.errorLogger, "getRoleFunction: failed", e);
+ throw e;
+ }
+ return roleFunc;
+ }
+
+ private CentralV2RoleFunction checkIfPipesExitsInFunctionCode(CentralV2RoleFunction getRoleFuncList) {
+ CentralV2RoleFunction roleFunc;
+ String functionCodeFormat = getRoleFuncList.getCode();
+ if (functionCodeFormat.contains(FUNCTION_PIPE)) {
+ String newfunctionCodeFormat = EcompPortalUtils.getFunctionCode(functionCodeFormat);
+ String newfunctionTypeFormat = EcompPortalUtils.getFunctionType(functionCodeFormat);
+ String newfunctionActionFormat = EcompPortalUtils.getFunctionAction(functionCodeFormat);
+ roleFunc = new CentralV2RoleFunction(getRoleFuncList.getId(), newfunctionCodeFormat,
+ getRoleFuncList.getName(), getRoleFuncList.getAppId(), newfunctionTypeFormat, newfunctionActionFormat,
+ getRoleFuncList.getEditUrl());
+ } else {
+ roleFunc = new CentralV2RoleFunction(getRoleFuncList.getId(), functionCodeFormat,
+ getRoleFuncList.getName(), getRoleFuncList.getAppId(),
+ getRoleFuncList.getEditUrl());
+ }
+ return roleFunc;
+ }
+
+ @SuppressWarnings("unchecked")
+ @Override
+ public boolean saveCentralRoleFunction(CentralV2RoleFunction domainCentralRoleFunction, EPApp app) throws Exception {
+ boolean saveOrUpdateFunction = false;
+ try {
+ domainCentralRoleFunction.setCode(encodeFunctionCode(domainCentralRoleFunction.getCode()));
+ final Map<String, String> functionParams = new HashMap<>();
+ functionParams.put("appId", String.valueOf(app.getId()));
+ List<CentralV2RoleFunction> appRoleFuncWithPipe = new ArrayList<>();
+ // If request coming from portal application we use type, instance/code and action to fetch record
+ if(domainCentralRoleFunction.getType()!=null && domainCentralRoleFunction.getAction()!=null){
+ functionParams.put(FUNCTION_CODE_PARAMS, domainCentralRoleFunction.getType()+FUNCTION_PIPE
+ +domainCentralRoleFunction.getCode()+FUNCTION_PIPE+domainCentralRoleFunction.getAction());
+ appRoleFuncWithPipe = dataAccessService.executeNamedQuery(GET_ROLE_FUNCTION_QUERY, functionParams, null);
+ if(appRoleFuncWithPipe.isEmpty()){
+ functionParams.put(FUNCTION_CODE_PARAMS, domainCentralRoleFunction.getCode());
+ appRoleFuncWithPipe = dataAccessService.executeNamedQuery(GET_ROLE_FUNCTION_QUERY, functionParams, null);
+ }
+ }
+ // If request coming from SDK applications we use just function code to fetch record
+ else{
+ functionParams.put(FUNCTION_CODE_PARAMS, domainCentralRoleFunction.getCode());
+ }
+ CentralV2RoleFunction appFunctionCode = null;
+ if(!appRoleFuncWithPipe.isEmpty()){
+ // Make sure we extract correct record if similar records are found as query uses like condition
+ appFunctionCode = appFunctionListFilter(domainCentralRoleFunction.getCode(), appRoleFuncWithPipe);
+ if(appFunctionCode == null){
+ appFunctionCode = domainCentralRoleFunction;
+ }
+ } else{
+ appFunctionCode = domainCentralRoleFunction;
+ }
+ appFunctionCode.setName(domainCentralRoleFunction.getName());
+ if(EcompPortalUtils.checkIfRemoteCentralAccessAllowed()) {
+ addRoleFunctionInExternalSystem(appFunctionCode, app);
+ }
+ if(domainCentralRoleFunction.getType() != null && domainCentralRoleFunction.getAction() != null){
+ appFunctionCode.setCode(domainCentralRoleFunction.getType()+
+ FUNCTION_PIPE+domainCentralRoleFunction.getCode()+FUNCTION_PIPE+domainCentralRoleFunction.getAction());
+ }
+ appFunctionCode.setAppId(app.getId());
+ dataAccessService.saveDomainObject(appFunctionCode, null);
+ saveOrUpdateFunction = true;
+ } catch (Exception e) {
+ logger.error(EELFLoggerDelegate.errorLogger, "saveCentralRoleFunction: failed", e);
+ throw e;
+ }
+ return saveOrUpdateFunction;
+ }
+
+ /**
+ * It creates application permission in external auth system
+ *
+ * @param domainCentralRoleFunction
+ * @param app
+ * @throws Exception
+ */
+ private void addRoleFunctionInExternalSystem(CentralV2RoleFunction domainCentralRoleFunction, EPApp app)
+ throws Exception {
+ ObjectMapper mapper = new ObjectMapper();
+ ExternalAccessPerms extPerms = new ExternalAccessPerms();
+ HttpHeaders headers = EcompPortalUtils.base64encodeKeyForAAFBasicAuth();
+ String type = "";
+ String instance = "";
+ String action = "";
+ if((domainCentralRoleFunction.getType()!=null && domainCentralRoleFunction.getAction()!=null) || domainCentralRoleFunction.getCode().contains(FUNCTION_PIPE)){
+ type = domainCentralRoleFunction.getCode().contains(FUNCTION_PIPE) ? EcompPortalUtils.getFunctionType(domainCentralRoleFunction.getCode()) : domainCentralRoleFunction.getType();
+ instance = domainCentralRoleFunction.getCode().contains(FUNCTION_PIPE) ? EcompPortalUtils.getFunctionCode(domainCentralRoleFunction.getCode()) : domainCentralRoleFunction.getCode();
+ action = domainCentralRoleFunction.getCode().contains(FUNCTION_PIPE) ? EcompPortalUtils.getFunctionAction(domainCentralRoleFunction.getCode()) : domainCentralRoleFunction.getAction();
+ } else{
+ type = domainCentralRoleFunction.getCode().contains("menu") ? "menu" : "url";
+ instance = domainCentralRoleFunction.getCode();
+ action = "*";
+ }
+ // get Permissions from External Auth System
+ JSONArray extPermsList = getExtAuthPermissions(app);
+ List<ExternalAccessPermsDetail> permsDetailList = getExtAuthPerrmissonList(app, extPermsList);
+ String requestedPerm = type+FUNCTION_PIPE+instance+FUNCTION_PIPE+action;
+ boolean checkIfFunctionsExits = permsDetailList.stream().anyMatch(permsDetail -> permsDetail.getInstance().equals(requestedPerm));
+ if (!checkIfFunctionsExits) {
+ try {
+ extPerms.setAction(action);
+ extPerms.setInstance(instance);
+ extPerms.setType(app.getNameSpace() + "." + type);
+ extPerms.setDescription(domainCentralRoleFunction.getName());
+ String addFunction = mapper.writeValueAsString(extPerms);
+ HttpEntity<String> entity = new HttpEntity<>(addFunction, headers);
+ logger.debug(EELFLoggerDelegate.debugLogger, "addRoleFunctionInExternalSystem: {} for POST: {}" , CONNECTING_TO_EXTERNAL_AUTH_SYSTEM_LOG_MESSAGE, addFunction);
+ ResponseEntity<String> addPermResponse= template.exchange(
+ SystemProperties.getProperty(EPCommonSystemProperties.EXTERNAL_CENTRAL_ACCESS_URL) + "perm",
+ HttpMethod.POST, entity, String.class);
+ logger.debug(EELFLoggerDelegate.debugLogger, "addRoleFunctionInExternalSystem: Finished adding permission for POST: {} and status code: {} ", addPermResponse.getStatusCode().value(), addFunction);
+ } catch(HttpClientErrorException e){
+ logger.error(EELFLoggerDelegate.errorLogger, "HttpClientErrorException - Failed to add function in external central auth system", e);
+ EPLogUtil.logExternalAuthAccessAlarm(logger, e.getStatusCode());
+ throw e;
+ }catch (Exception e) {
+ logger.error(EELFLoggerDelegate.errorLogger, "addRoleFunctionInExternalSystem: Failed to add fucntion in external central auth system",
+ e);
+ throw e;
+ }
+ } else {
+ try {
+ extPerms.setAction(action);
+ extPerms.setInstance(instance);
+ extPerms.setType(app.getNameSpace() + "." + type);
+ extPerms.setDescription(domainCentralRoleFunction.getName());
+ String updateRoleFunction = mapper.writeValueAsString(extPerms);
+ HttpEntity<String> entity = new HttpEntity<>(updateRoleFunction, headers);
+ logger.debug(EELFLoggerDelegate.debugLogger, "addRoleFunctionInExternalSystem: {} for PUT: {}" , CONNECTING_TO_EXTERNAL_AUTH_SYSTEM_LOG_MESSAGE, updateRoleFunction);
+ ResponseEntity<String> updatePermResponse = template.exchange(
+ SystemProperties.getProperty(EPCommonSystemProperties.EXTERNAL_CENTRAL_ACCESS_URL) + "perm",
+ HttpMethod.PUT, entity, String.class);
+ logger.debug(EELFLoggerDelegate.debugLogger, "addRoleFunctionInExternalSystem: Finished updating permission in External Auth system {} and response: {} ", updateRoleFunction, updatePermResponse.getStatusCode().value());
+ } catch(HttpClientErrorException e){
+ logger.error(EELFLoggerDelegate.errorLogger, "HttpClientErrorException - Failed to add function in external central auth system", e);
+ EPLogUtil.logExternalAuthAccessAlarm(logger, e.getStatusCode());
+ throw e;
+ } catch (Exception e) {
+ logger.error(EELFLoggerDelegate.errorLogger, "addRoleFunctionInExternalSystem: Failed to update function in external central auth system",e);
+ throw e;
+ }
+ }
+ }
+
+ @SuppressWarnings("unchecked")
+ @Override
+ @Transactional(rollbackFor = Exception.class)
+ public boolean deleteCentralRoleFunction(String code, EPApp app) {
+ boolean deleteFunctionResponse = false;
+ try {
+ final Map<String, String> params = new HashMap<>();
+ params.put(FUNCTION_CODE_PARAMS, code);
+ params.put(APP_ID, String.valueOf(app.getId()));
+ List<CentralV2RoleFunction> domainCentralRoleFunction = dataAccessService
+ .executeNamedQuery(GET_ROLE_FUNCTION_QUERY, params, null);
+ CentralV2RoleFunction appFunctionCode = appFunctionListFilter(code, domainCentralRoleFunction);
+ if (EcompPortalUtils.checkIfRemoteCentralAccessAllowed()) {
+ deleteRoleFunctionInExternalSystem(appFunctionCode, app);
+ // Delete role function dependency records
+ deleteAppRoleFunctions(appFunctionCode.getCode(), app);
+ }
+ dataAccessService.deleteDomainObject(appFunctionCode, null);
+ deleteFunctionResponse = true;
+ } catch (Exception e) {
+ logger.error(EELFLoggerDelegate.errorLogger, "deleteCentralRoleFunction: failed", e);
+ }
+ return deleteFunctionResponse;
+ }
+
+ /**
+ * It deletes app function record in portal
+ *
+ * @param code
+ * @param app
+ */
+ private void deleteAppRoleFunctions(String code, EPApp app) {
+ dataAccessService.deleteDomainObjects(EPAppRoleFunction.class,
+ APP_ID_EQUALS + app.getId() + AND_FUNCTION_CD_EQUALS + code + "'", null);
+ }
+
+ /**
+ *
+ * It deletes permission in the external auth system
+ *
+ * @param domainCentralRoleFunction
+ * @param app
+ * @throws Exception
+ */
+ private void deleteRoleFunctionInExternalSystem(CentralV2RoleFunction domainCentralRoleFunction, EPApp app)
+ throws Exception {
+ try {
+ ObjectMapper mapper = new ObjectMapper();
+ ExternalAccessPerms extPerms = new ExternalAccessPerms();
+ String instanceValue = EcompPortalUtils.getFunctionCode(domainCentralRoleFunction.getCode());
+ String checkType = getFunctionType(domainCentralRoleFunction.getCode());
+ String actionValue = getFunctionAction(domainCentralRoleFunction.getCode());
+ HttpHeaders headers = EcompPortalUtils.base64encodeKeyForAAFBasicAuth();
+ extPerms.setAction(actionValue);
+ extPerms.setInstance(instanceValue);
+ extPerms.setType(app.getNameSpace() + "." + checkType);
+ extPerms.setDescription(domainCentralRoleFunction.getName());
+ String deleteRoleFunction = mapper.writeValueAsString(extPerms);
+ HttpEntity<String> entity = new HttpEntity<>(deleteRoleFunction, headers);
+ logger.debug(EELFLoggerDelegate.debugLogger, "deleteRoleFunctionInExternalSystem: {} for DELETE: {} ",
+ CONNECTING_TO_EXTERNAL_AUTH_SYSTEM_LOG_MESSAGE, deleteRoleFunction);
+ ResponseEntity<String> delPermResponse = template
+ .exchange(SystemProperties.getProperty(EPCommonSystemProperties.EXTERNAL_CENTRAL_ACCESS_URL)
+ + "perm?force=true", HttpMethod.DELETE, entity, String.class);
+ logger.debug(EELFLoggerDelegate.debugLogger,
+ "deleteRoleFunctionInExternalSystem: Finished deleting permission in External Auth system {} and status code: {} ",
+ deleteRoleFunction, delPermResponse.getStatusCode().value());
+ } catch(HttpClientErrorException e){
+ logger.error(EELFLoggerDelegate.errorLogger, "HttpClientErrorException - Failed to delete functions in External System", e);
+ EPLogUtil.logExternalAuthAccessAlarm(logger, e.getStatusCode());
+ } catch (Exception e) {
+ if (e.getMessage().equalsIgnoreCase("404 Not Found")) {
+ logger.debug(EELFLoggerDelegate.debugLogger,
+ " deleteRoleFunctionInExternalSystem: It seems like function is already deleted in external central auth system but exists in local DB",
+ e.getMessage());
+ } else {
+ logger.error(EELFLoggerDelegate.errorLogger, "deleteRoleFunctionInExternalSystem: Failed to delete functions in External System", e);
+ }
+ }
+ }
+
+ @Override
+ public ExternalRequestFieldsValidator saveRoleForApplication(Role saveRole, String uebkey) throws Exception {
+ boolean response = false;
+ String message = "";
+ try {
+ EPApp app = getApp(uebkey).get(0);
+ addRoleInEcompDB(saveRole, app);
+ response = true;
+ } catch (Exception e) {
+ message = e.getMessage();
+ logger.error(EELFLoggerDelegate.errorLogger, "saveRoleForApplication failed", e);
+ }
+ return new ExternalRequestFieldsValidator(response,message);
+ }
+
+ @SuppressWarnings("unchecked")
+ @Override
+ public boolean deleteRoleForApplication(String deleteRole, String uebkey) throws Exception {
+ Session localSession = sessionFactory.openSession();
+ Transaction transaction = null;
+ boolean result = false;
+ try {
+ List<EPRole> epRoleList = null;
+ EPApp app = getApp(uebkey).get(0);
+ final Map<String, String> deleteRoleParams = new HashMap<>();
+ deleteRoleParams.put(APP_ROLE_NAME_PARAM, deleteRole);
+ if (app.getId().equals(PortalConstants.PORTAL_APP_ID)) {
+ epRoleList = dataAccessService.executeNamedQuery(GET_PORTAL_APP_ROLES_QUERY, deleteRoleParams, null);
+ } else {
+ deleteRoleParams.put(APP_ID, String.valueOf(app.getId()));
+ epRoleList = dataAccessService.executeNamedQuery(GET_ROLE_TO_UPDATE_IN_EXTERNAL_AUTH_SYSTEM, deleteRoleParams, null);
+ }
+ if (!epRoleList.isEmpty()) {
+ transaction = localSession.beginTransaction();
+ // Delete app role functions before deleting role
+ deleteRoleFunction(app, epRoleList);
+ if (app.getId() == 1) {
+ // Delete fn_user_ role
+ dataAccessService.deleteDomainObjects(EPUserApp.class,
+ APP_ID_EQUALS + app.getId() + " and role_id = " + epRoleList.get(0).getId(), null);
+ boolean isPortalRequest = false;
+ deleteRoleDependencyRecords(localSession, epRoleList.get(0).getId(), app.getId(), isPortalRequest);
+ }
+ deleteRoleInExternalAuthSystem(epRoleList, app);
+ transaction.commit();
+ logger.debug(EELFLoggerDelegate.debugLogger, "deleteRoleForApplication: committed the transaction");
+ dataAccessService.deleteDomainObject(epRoleList.get(0), null);
+ }
+ result = true;
+ } catch (Exception e) {
+ logger.error(EELFLoggerDelegate.errorLogger, "deleteRoleForApplication: failed", e);
+ result = false;
+ } finally {
+ localSession.close();
+ }
+ return result;
+ }
+
+ /**
+ *
+ * It deletes role for application in external auth system
+ *
+ * @param epRoleList contains role information
+ * @param app contains application information
+ * @throws Exception
+ */
+ private void deleteRoleInExternalAuthSystem(List<EPRole> epRoleList, EPApp app) throws Exception {
+ ResponseEntity<String> deleteResponse;
+ ResponseEntity<String> res = getNameSpaceIfExists(app);
+ if (res.getStatusCode() == HttpStatus.OK) {
+ // Delete Role in External System
+ String deleteRoleKey = "{\"name\":\"" + app.getNameSpace() + "." + epRoleList.get(0).getName()
+ .replaceAll(EcompPortalUtils.EXTERNAL_CENTRAL_AUTH_ROLE_HANDLE_SPECIAL_CHARACTERS, "_") + "\"}";
+ deleteResponse = deleteRoleInExternalSystem(deleteRoleKey);
+ if (deleteResponse.getStatusCode().value() != 200 || deleteResponse.getStatusCode().value() != 404) {
+ EPLogUtil.logExternalAuthAccessAlarm(logger, deleteResponse.getStatusCode());
+ logger.error(EELFLoggerDelegate.errorLogger,
+ "deleteRoleForApplication: Failed to delete role in external auth system! due to {} ",
+ deleteResponse.getBody());
+ }
+ logger.debug(EELFLoggerDelegate.debugLogger,
+ "deleteRoleForApplication: about to commit the transaction");
+ }
+ }
+
+ /**
+ *
+ * It deletes application user role in external auth system
+ *
+ * @param role
+ * @param app
+ * @param LoginId
+ * @throws Exception
+ */
+ private void deleteUserRoleInExternalSystem(EPRole role, EPApp app, String LoginId) throws Exception {
+ HttpHeaders headers = EcompPortalUtils.base64encodeKeyForAAFBasicAuth();
+ HttpEntity<String> entity = new HttpEntity<>(headers);
+ getNameSpaceIfExists(app);
+ logger.debug(EELFLoggerDelegate.debugLogger,"deleteUserRoleInExternalSystem: {} " , CONNECTING_TO_EXTERNAL_AUTH_SYSTEM_LOG_MESSAGE);
+ ResponseEntity<String> getResponse = template
+ .exchange(
+ SystemProperties.getProperty(EPCommonSystemProperties.EXTERNAL_CENTRAL_ACCESS_URL) + "userRole/"
+ + LoginId
+ + SystemProperties
+ .getProperty(EPCommonSystemProperties.EXTERNAL_CENTRAL_ACCESS_USER_DOMAIN)
+ + "/" + app.getNameSpace() + "." + role.getName().replaceAll(EcompPortalUtils.EXTERNAL_CENTRAL_AUTH_ROLE_HANDLE_SPECIAL_CHARACTERS, "_"),
+ HttpMethod.GET, entity, String.class);
+ logger.debug(EELFLoggerDelegate.debugLogger, "deleteUserRoleInExternalSystem: Finished GET user roles from External Auth system and response: {} ", getResponse.getBody());
+ if (getResponse.getStatusCode().value() != 200) {
+ throw new ExternalAuthSystemException(getResponse.getBody());
+ }
+ String res = getResponse.getBody();
+ if (!res.equals(IS_EMPTY_JSON_STRING)) {
+ HttpEntity<String> userRoleentity = new HttpEntity<>(headers);
+ logger.debug(EELFLoggerDelegate.debugLogger, "deleteUserRoleInExternalSystem: {} " , CONNECTING_TO_EXTERNAL_AUTH_SYSTEM_LOG_MESSAGE);
+ ResponseEntity<String> deleteResponse = template
+ .exchange(
+ SystemProperties.getProperty(EPCommonSystemProperties.EXTERNAL_CENTRAL_ACCESS_URL)
+ + "userRole/" + LoginId
+ + SystemProperties
+ .getProperty(EPCommonSystemProperties.EXTERNAL_CENTRAL_ACCESS_USER_DOMAIN)
+ + "/" + app.getNameSpace() + "." + role.getName().replaceAll(EcompPortalUtils.EXTERNAL_CENTRAL_AUTH_ROLE_HANDLE_SPECIAL_CHARACTERS, "_"),
+ HttpMethod.DELETE, userRoleentity, String.class);
+ if (deleteResponse.getStatusCode().value() != 200) {
+ throw new ExternalAuthSystemException("Failed to delete user role");
+ }
+ logger.debug(EELFLoggerDelegate.debugLogger, "deleteUserRoleInExternalSystem: Finished deleting user role in External Auth system and status code: {} ", deleteResponse.getStatusCode().value());
+ }
+ }
+
+ @SuppressWarnings("unchecked")
+ @Override
+ public List<CentralV2Role> getActiveRoles(String uebkey) throws Exception {
+ List<CentralV2Role> roleList = new ArrayList<>();
+ try {
+ List<EPApp> app = getApp(uebkey);
+ final Map<String, Long> params = new HashMap<>();
+ // check if portal
+ Long appId = null;
+ if (!app.get(0).getId().equals(PortalConstants.PORTAL_APP_ID)) {
+ appId = app.get(0).getId();
+ }
+ List<Criterion> restrictionsList = new ArrayList<Criterion>();
+ Criterion active_ynCrt = Restrictions.eq("active", Boolean.TRUE);
+ Criterion appIdCrt;
+ if (appId == null)
+ appIdCrt = Restrictions.isNull("appId");
+ else
+ appIdCrt = Restrictions.eq("appId", appId);
+ Criterion andCrit = Restrictions.and(active_ynCrt, appIdCrt);
+ restrictionsList.add(andCrit);
+ List<EPRole> epRole = (List<EPRole>) dataAccessService.getList(EPRole.class, null, restrictionsList, null);
+ roleList = createCentralRoleObject(app, epRole, roleList, params);
+ List<CentralV2Role> globalRoleList = getGlobalRolesOfApplication(app.get(0).getId());
+ if (globalRoleList.size() > 0)
+ roleList.addAll(globalRoleList);
+ } catch (Exception e) {
+ logger.error(EELFLoggerDelegate.errorLogger, "getActiveRoles: failed", e);
+ throw e;
+ }
+ return roleList;
+
+ }
+
+ @Override
+ @Transactional(rollbackFor = Exception.class)
+ public ExternalRequestFieldsValidator deleteDependencyRoleRecord(Long roleId, String uebkey, String LoginId) throws Exception {
+ Session localSession = sessionFactory.openSession();
+ String message = "";
+ Transaction transaction = null;
+ boolean response = false;
+ EPApp app = null;
+ try {
+ transaction = localSession.beginTransaction();
+ List<EPRole> epRoleList = null;
+ app = getApp(uebkey).get(0);
+ if(app.getId().equals(PortalConstants.PORTAL_APP_ID)){
+ epRoleList = getPortalAppRoleInfo(roleId);
+ } else{
+ epRoleList = getPartnerAppRoleInfo(roleId, app);
+ }
+ if(EcompPortalUtils.checkIfRemoteCentralAccessAllowed()) {
+ // Delete User Role in External System before deleting role
+ deleteUserRoleInExternalSystem(epRoleList.get(0), app, LoginId);
+ }
+ // Delete user app roles
+ dataAccessService.deleteDomainObjects(EPUserApp.class,
+ APP_ID_EQUALS + app.getId() + " and role_id = " + epRoleList.get(0).getId(), null);
+ boolean isPortalRequest = false;
+ deleteRoleDependencyRecords(localSession, epRoleList.get(0).getId(), app.getId(), isPortalRequest);
+ transaction.commit();
+ if (EcompPortalUtils.checkIfRemoteCentralAccessAllowed()) {
+ // Final call to delete role once all dependencies has been deleted
+ deleteRoleInExternalAuthSystem(epRoleList, app);
+ }
+ dataAccessService.deleteDomainObjects(EPRole.class, " role_id = "+ epRoleList.get(0).getId(), null);
+ logger.debug(EELFLoggerDelegate.debugLogger, "deleteDependencyRoleRecord: committed the transaction");
+ response = true;
+ } catch(HttpClientErrorException e){
+ logger.error(EELFLoggerDelegate.errorLogger, "deleteDependencyRoleRecord: HttpClientErrorException", e);
+ EPLogUtil.logExternalAuthAccessAlarm(logger, e.getStatusCode());
+ message = e.getMessage();
+ } catch (Exception e) {
+ logger.error(EELFLoggerDelegate.errorLogger, "deleteDependencyRoleRecord failed", e);
+ EcompPortalUtils.rollbackTransaction(transaction,
+ "deleteDependencyRoleRecord rollback, exception = " + e.toString());
+ message = e.getMessage();
+ } finally {
+ localSession.close();
+ }
+ return new ExternalRequestFieldsValidator(response,message);
+ }
+
+ @Override
+ @SuppressWarnings("unchecked")
+ @Transactional
+ public void syncRoleFunctionFromExternalAccessSystem(EPApp app) {
+ try {
+
+ // get Permissions from External Auth System
+ JSONArray extPerms = getExtAuthPermissions(app);
+ List<ExternalAccessPermsDetail> permsDetailList = getExtAuthPerrmissonList(app, extPerms);
+
+ // get functions in DB
+ final Map<String, Long> params = new HashMap<>();
+ final Map<String, CentralV2RoleFunction> roleFuncMap = new HashMap<>();
+ params.put(APP_ID, app.getId());
+ List<CentralV2RoleFunction> appFunctions = dataAccessService.executeNamedQuery("getAllRoleFunctions", params,
+ null);
+ if (!appFunctions.isEmpty()) {
+ for (CentralV2RoleFunction roleFunc : appFunctions) {
+ roleFuncMap.put(roleFunc.getCode(), roleFunc);
+ }
+ }
+
+ // get Roles for portal in DB
+ List<EPRole> portalRoleList = getGlobalRolesOfPortal();
+ final Map<String, EPRole> existingPortalRolesMap = new HashMap<>();
+ for(EPRole epRole : portalRoleList){
+ existingPortalRolesMap.put(epRole.getName().replaceAll(EcompPortalUtils.EXTERNAL_CENTRAL_AUTH_ROLE_HANDLE_SPECIAL_CHARACTERS, "_"), epRole);
+ }
+
+ // get Roles in DB
+ final Map<String, EPRole> currentRolesInDB = getCurrentRolesInDB(app);
+
+ // store External Permissions with Pipe and without Pipe (just instance)
+ final Map<String, ExternalAccessPermsDetail> extAccessPermsContainsPipeMap = new HashMap<>();
+ final Map<String, ExternalAccessPermsDetail> extAccessPermsMap = new HashMap<>();
+ for (ExternalAccessPermsDetail permsDetailInfoWithPipe : permsDetailList) {
+ extAccessPermsContainsPipeMap.put(permsDetailInfoWithPipe.getInstance(), permsDetailInfoWithPipe);
+ String finalFunctionCodeVal = EcompPortalUtils.getFunctionCode(permsDetailInfoWithPipe.getInstance());
+ extAccessPermsMap.put(finalFunctionCodeVal, permsDetailInfoWithPipe);
+ }
+
+ // Add if new functions and app role functions were added in
+ // external auth system
+ for (ExternalAccessPermsDetail permsDetail : permsDetailList) {
+ String code = permsDetail.getInstance();
+ CentralV2RoleFunction getFunctionCodeKey = roleFuncMap.get(permsDetail.getInstance());
+ List<CentralV2RoleFunction> roleFunctionList = addGetLocalFunction(app, roleFuncMap, permsDetail, code,
+ getFunctionCodeKey);
+ List<String> roles = permsDetail.getRoles();
+ if (roles != null) {
+ // Check if function has any roles and which does not exist
+ // in External Auth System. If exists delete in local
+ addRemoveIfFunctionsRolesIsSyncWithExternalAuth(app, currentRolesInDB, roleFunctionList, roles, existingPortalRolesMap);
+ }
+ }
+
+ // Check if function does exits in External Auth System but exits in
+ // local then delete function and its dependencies
+ for (CentralV2RoleFunction roleFunc : appFunctions) {
+ try {
+ ExternalAccessPermsDetail getFunctionCodeContainsPipeKey = extAccessPermsContainsPipeMap
+ .get(roleFunc.getCode());
+ if (null == getFunctionCodeContainsPipeKey) {
+ ExternalAccessPermsDetail getFunctionCodeKey = extAccessPermsMap.get(roleFunc.getCode());
+ if (null == getFunctionCodeKey) {
+ deleteAppRoleFuncDoesNotExitsInExtSystem(app, roleFunc);
+ }
+ }
+ } catch (Exception e) {
+ logger.error(EELFLoggerDelegate.errorLogger,
+ "syncRoleFunctionFromExternalAccessSystem: Failed to delete function", e);
+
+ }
+ }
+
+ logger.debug(EELFLoggerDelegate.debugLogger,
+ "syncRoleFunctionFromExternalAccessSystem: Finished syncRoleFunctionFromExternalAccessSystem");
+ } catch (Exception e) {
+ logger.error(EELFLoggerDelegate.errorLogger,
+ "syncRoleFunctionFromExternalAccessSystem: Failed syncRoleFunctionFromExternalAccessSystem", e);
+
+ }
+ }
+
+ @SuppressWarnings("unchecked")
+ private void addRemoveIfFunctionsRolesIsSyncWithExternalAuth(EPApp app, final Map<String, EPRole> currentRolesInDB,
+ List<CentralV2RoleFunction> roleFunctionList, List<String> roles, Map<String, EPRole> existingPortalRolesMap)
+ throws Exception {
+ if (!roleFunctionList.isEmpty()) {
+ final Map<String, String> appRoleFuncParams = new HashMap<>();
+ final Map<String, LocalRole> currentAppRoleFunctionsMap = new HashMap<>();
+ final Map<String, String> currentRolesInExtSystem = new HashMap<>();
+ appRoleFuncParams.put("functionCd", roleFunctionList.get(0).getCode());
+ appRoleFuncParams.put("appId", String.valueOf(app.getId()));
+ List<LocalRole> localRoleList = dataAccessService.executeNamedQuery("getCurrentAppRoleFunctions",
+ appRoleFuncParams, null);
+ for (LocalRole localRole : localRoleList) {
+ currentAppRoleFunctionsMap.put(localRole.getRolename().replaceAll(
+ EcompPortalUtils.EXTERNAL_CENTRAL_AUTH_ROLE_HANDLE_SPECIAL_CHARACTERS, "_"), localRole);
+ }
+ for (String addRole : roles) {
+ currentRolesInExtSystem.put(addRole.substring(addRole.indexOf(FUNCTION_PIPE)+1), addRole);
+ }
+ for (String extAuthrole : roles) {
+ String roleNameSpace = extAuthrole.substring(0, extAuthrole.indexOf(FUNCTION_PIPE));
+ boolean isNameSpaceMatching = EcompPortalUtils.checkNameSpaceMatching(roleNameSpace, app.getNameSpace());
+ if (isNameSpaceMatching) {
+ if (!currentAppRoleFunctionsMap
+ .containsKey(extAuthrole.substring(app.getNameSpace().length() + 1))) {
+ EPRole localAddFuntionRole = currentRolesInDB
+ .get(extAuthrole.substring(app.getNameSpace().length() + 1));
+ if (localAddFuntionRole == null) {
+ checkAndAddRoleInDB(app, currentRolesInDB, roleFunctionList, extAuthrole);
+ } else {
+ EPAppRoleFunction addAppRoleFunc = new EPAppRoleFunction();
+ addAppRoleFunc.setAppId(app.getId());
+ addAppRoleFunc.setCode(roleFunctionList.get(0).getCode());
+ addAppRoleFunc.setRoleId(localAddFuntionRole.getId());
+ dataAccessService.saveDomainObject(addAppRoleFunc, null);
+ }
+ }
+ // This block is to save global role function if exists
+ } else {
+ String extAuthAppRoleName = extAuthrole.substring(extAuthrole.indexOf(FUNCTION_PIPE) + 1);
+ boolean checkIfGlobalRoleExists = existingPortalRolesMap.containsKey(extAuthAppRoleName);
+ if (checkIfGlobalRoleExists) {
+ final Map<String, Long> params = new HashMap<>();
+ EPRole role = existingPortalRolesMap.get(extAuthAppRoleName);
+ EPAppRoleFunction addGlobalRoleFunctions = new EPAppRoleFunction();
+ params.put("appId", app.getId());
+ params.put("roleId", role.getId());
+ List<EPAppRoleFunction> currentGlobalRoleFunctionsList = dataAccessService.executeNamedQuery("getAppRoleFunctionOnRoleIdandAppId", params, null);
+ boolean checkIfRoleFunctionExists = currentGlobalRoleFunctionsList.stream().anyMatch(currentGlobalRoleFunction -> currentGlobalRoleFunction.getCode().equals(roleFunctionList.get(0).getCode()));
+ if (role != null && !checkIfRoleFunctionExists) {
+ addGlobalRoleFunctions.setAppId(app.getId());
+ addGlobalRoleFunctions.setRoleId(role.getId());
+ if (!app.getId().equals(role.getAppRoleId())) {
+ addGlobalRoleFunctions.setRoleAppId((PortalConstants.PORTAL_APP_ID).toString());
+ } else {
+ addGlobalRoleFunctions.setRoleAppId(null);
+ }
+ addGlobalRoleFunctions.setCode(roleFunctionList.get(0).getCode());
+ dataAccessService.saveDomainObject(addGlobalRoleFunctions, null);
+ }
+ }
+ }
+ }
+ for (LocalRole localRoleDelete : localRoleList) {
+ if (!currentRolesInExtSystem.containsKey(localRoleDelete.getRolename()
+ .replaceAll(EcompPortalUtils.EXTERNAL_CENTRAL_AUTH_ROLE_HANDLE_SPECIAL_CHARACTERS, "_"))) {
+ dataAccessService.deleteDomainObjects(EPAppRoleFunction.class,
+ APP_ID_EQUALS + app.getId() + AND_FUNCTION_CD_EQUALS + roleFunctionList.get(0).getCode()
+ + "'" + " and role_id = " + localRoleDelete.getRoleId().longValue(),
+ null);
+ }
+ }
+ }
+ }
+
+ private void deleteAppRoleFuncDoesNotExitsInExtSystem(EPApp app, CentralV2RoleFunction roleFunc) {
+ logger.debug(EELFLoggerDelegate.debugLogger,
+ "syncRoleFunctionFromExternalAccessSystem: Deleting app role function {}",
+ roleFunc.getCode());
+ dataAccessService.deleteDomainObjects(EPAppRoleFunction.class,
+ APP_ID_EQUALS + app.getId() + AND_FUNCTION_CD_EQUALS + roleFunc.getCode() +"'", null);
+ logger.debug(EELFLoggerDelegate.debugLogger,
+ "syncRoleFunctionFromExternalAccessSystem: Deleted app role function {}",
+ roleFunc.getCode());
+
+ logger.debug(EELFLoggerDelegate.debugLogger,
+ "syncRoleFunctionFromExternalAccessSystem: Deleting app function {}",
+ roleFunc.getCode());
+ dataAccessService.deleteDomainObjects(CentralV2RoleFunction.class,
+ APP_ID_EQUALS + app.getId() + AND_FUNCTION_CD_EQUALS + roleFunc.getCode() +"'", null);
+ logger.debug(EELFLoggerDelegate.debugLogger,
+ "syncRoleFunctionFromExternalAccessSystem: Deleted app function {}",
+ roleFunc.getCode());
+ }
+
+ private void checkAndAddRoleInDB(EPApp app, final Map<String, EPRole> currentRolesInDB,
+ List<CentralV2RoleFunction> roleFunctionList, String roleList) throws Exception {
+ if (!currentRolesInDB.containsKey(
+ roleList.substring(app.getNameSpace().length() + 1))) {
+ Role role = addRoleInDBIfDoesNotExists(app,
+ roleList.substring(app.getNameSpace().length() + 1));
+ addIfRoleDescriptionNotExitsInExtSystem(role, app);
+ if (!roleFunctionList.isEmpty()) {
+ try {
+ if (!roleFunctionList.isEmpty()) {
+ EPAppRoleFunction addAppRoleFunc = new EPAppRoleFunction();
+ addAppRoleFunc.setAppId(app.getId());
+ addAppRoleFunc.setCode(roleFunctionList.get(0).getCode());
+ addAppRoleFunc.setRoleId(role.getId());
+ dataAccessService.saveDomainObject(addAppRoleFunc, null);
+ }
+ } catch (Exception e) {
+ logger.error(EELFLoggerDelegate.errorLogger,
+ "syncRoleFunctionFromExternalAccessSystem: Failed to save app role function ",
+ e);
+ }
+ }
+ }
+ }
+
+ @SuppressWarnings("unchecked")
+ private List<CentralV2RoleFunction> addGetLocalFunction(EPApp app, final Map<String, CentralV2RoleFunction> roleFuncMap,
+ ExternalAccessPermsDetail permsDetail, String code, CentralV2RoleFunction getFunctionCodeKey) {
+ String finalFunctionCodeVal = addToLocalIfFunctionNotExists(app, roleFuncMap, permsDetail, code,
+ getFunctionCodeKey);
+ final Map<String, String> appSyncFuncsParams = new HashMap<>();
+ appSyncFuncsParams.put("appId", String.valueOf(app.getId()));
+ appSyncFuncsParams.put("functionCd", finalFunctionCodeVal);
+ List<CentralV2RoleFunction> roleFunctionList = null;
+ roleFunctionList = dataAccessService.executeNamedQuery("getAppFunctionOnCodeAndAppId", appSyncFuncsParams,
+ null);
+ if (roleFunctionList.isEmpty()) {
+ appSyncFuncsParams.put("functionCd", code);
+ roleFunctionList = dataAccessService.executeNamedQuery("getAppFunctionOnCodeAndAppId", appSyncFuncsParams,
+ null);
+ }
+ return roleFunctionList;
+ }
+
+ private String addToLocalIfFunctionNotExists(EPApp app, final Map<String, CentralV2RoleFunction> roleFuncMap,
+ ExternalAccessPermsDetail permsDetail, String code, CentralV2RoleFunction getFunctionCodeKey
+ ) {
+ String finalFunctionCodeVal = "";
+ if (null == getFunctionCodeKey) {
+ finalFunctionCodeVal = EcompPortalUtils.getFunctionCode(permsDetail.getInstance());
+ CentralV2RoleFunction checkIfCodeStillExits = roleFuncMap.get(finalFunctionCodeVal);
+ // If function does not exist in local then add!
+ if (null == checkIfCodeStillExits) {
+ logger.debug(EELFLoggerDelegate.debugLogger,
+ "syncRoleFunctionFromExternalAccessSystem: Adding function: {} ", code);
+ addFunctionInEcompDB(app, permsDetail, code);
+ logger.debug(EELFLoggerDelegate.debugLogger,
+ "syncRoleFunctionFromExternalAccessSystem: Finished adding function: {} ", code);
+ }
+ }
+ return finalFunctionCodeVal;
+ }
+
+ @SuppressWarnings("unchecked")
+ @Override
+ public Map<String, EPRole> getCurrentRolesInDB(EPApp app) {
+ final Map<String, EPRole> currentRolesInDB = new HashMap<>();
+ List<EPRole> getCurrentRoleList = null;
+ final Map<String, Long> appParams = new HashMap<>();
+ if (app.getId().equals(PortalConstants.PORTAL_APP_ID)) {
+ getCurrentRoleList = dataAccessService.executeNamedQuery("getPortalAppRolesList", null, null);
+ } else {
+ appParams.put("appId", app.getId());
+ getCurrentRoleList = dataAccessService.executeNamedQuery("getPartnerAppRolesList", appParams, null);
+ }
+ for (EPRole role : getCurrentRoleList) {
+ currentRolesInDB.put(role.getName()
+ .replaceAll(EcompPortalUtils.EXTERNAL_CENTRAL_AUTH_ROLE_HANDLE_SPECIAL_CHARACTERS, "_"), role);
+ }
+ return currentRolesInDB;
+ }
+
+ private List<ExternalAccessPermsDetail> getExtAuthPerrmissonList(EPApp app, JSONArray extPerms)
+ throws IOException{
+ ExternalAccessPermsDetail permDetails = null;
+ List<ExternalAccessPermsDetail> permsDetailList = new ArrayList<>();
+ for (int i = 0; i < extPerms.length(); i++) {
+ String description = null;
+ if (extPerms.getJSONObject(i).has("description")) {
+ description = extPerms.getJSONObject(i).getString(EXTERNAL_AUTH_ROLE_DESCRIPTION);
+ } else {
+ description = extPerms.getJSONObject(i).getString("instance");
+ }
+ if (extPerms.getJSONObject(i).has("roles")) {
+ ObjectMapper rolesListMapper = new ObjectMapper();
+ JSONArray resRoles = extPerms.getJSONObject(i).getJSONArray("roles");
+ List<String> list = rolesListMapper.readValue(resRoles.toString(),
+ TypeFactory.defaultInstance().constructCollectionType(List.class, String.class));
+ permDetails = new ExternalAccessPermsDetail(extPerms.getJSONObject(i).getString("type"),
+ extPerms.getJSONObject(i).getString("type").substring(app.getNameSpace().length() + 1)
+ + FUNCTION_PIPE + extPerms.getJSONObject(i).getString("instance") + FUNCTION_PIPE
+ + extPerms.getJSONObject(i).getString("action"),
+ extPerms.getJSONObject(i).getString("action"), list, description);
+ permsDetailList.add(permDetails);
+ } else {
+ permDetails = new ExternalAccessPermsDetail(extPerms.getJSONObject(i).getString("type"),
+ extPerms.getJSONObject(i).getString("type").substring(app.getNameSpace().length() + 1)
+ + FUNCTION_PIPE + extPerms.getJSONObject(i).getString("instance") + FUNCTION_PIPE
+ + extPerms.getJSONObject(i).getString("action"),
+ extPerms.getJSONObject(i).getString("action"), description);
+ permsDetailList.add(permDetails);
+ }
+ }
+ return permsDetailList;
+ }
+
+ private JSONArray getExtAuthPermissions(EPApp app) throws Exception {
+ ResponseEntity<String> response = null;
+ HttpHeaders headers = EcompPortalUtils.base64encodeKeyForAAFBasicAuth();
+ HttpEntity<String> entity = new HttpEntity<>(headers);
+ logger.debug(EELFLoggerDelegate.debugLogger, "syncRoleFunctionFromExternalAccessSystem: {} ",
+ CONNECTING_TO_EXTERNAL_AUTH_SYSTEM_LOG_MESSAGE);
+ response = template
+ .exchange(SystemProperties.getProperty(EPCommonSystemProperties.EXTERNAL_CENTRAL_ACCESS_URL)
+ + "perms/ns/" + app.getNameSpace(), HttpMethod.GET, entity, String.class);
+
+ String res = response.getBody();
+ logger.debug(EELFLoggerDelegate.debugLogger,
+ "syncRoleFunctionFromExternalAccessSystem: Finished GET permissions from External Auth system and response: {} ",
+ response.getBody());
+ JSONObject jsonObj = new JSONObject(res);
+ JSONArray extPerms = jsonObj.getJSONArray("perm");
+ for (int i = 0; i < extPerms.length(); i++) {
+ if (extPerms.getJSONObject(i).getString("type").equals(app.getNameSpace() + ".access")) {
+ extPerms.remove(i);
+ i--;
+ }
+ }
+ return extPerms;
+ }
+
+ /**
+ *
+ * Add function into local DB
+ *
+ * @param app
+ * @param permsDetail
+ * @param code
+ */
+ private void addFunctionInEcompDB(EPApp app, ExternalAccessPermsDetail permsDetail, String code) {
+ try{
+ CentralV2RoleFunction addFunction = new CentralV2RoleFunction();
+ addFunction.setAppId(app.getId());
+ addFunction.setCode(code);
+ addFunction.setName(permsDetail.getDescription());
+ dataAccessService.saveDomainObject(addFunction, null);
+ } catch(Exception e){
+ logger.error(EELFLoggerDelegate.errorLogger, "addFunctionInEcompDB: Failed to add function", e);
+ }
+ }
+
+ /**
+ *
+ * It updates description of a role in external auth system
+ *
+ * @param role
+ * @param app
+ * @throws Exception
+ */
+ private void addIfRoleDescriptionNotExitsInExtSystem(Role role, EPApp app) throws Exception {
+ String addRoleNew = updateExistingRoleInExternalSystem(role, app);
+ HttpHeaders headers = EcompPortalUtils.base64encodeKeyForAAFBasicAuth();
+ try {
+ HttpEntity<String> entity = new HttpEntity<>(addRoleNew, headers);
+ template.exchange(
+ SystemProperties.getProperty(EPCommonSystemProperties.EXTERNAL_CENTRAL_ACCESS_URL) + "role",
+ HttpMethod.PUT, entity, String.class);
+ } catch (HttpClientErrorException e) {
+ logger.error(EELFLoggerDelegate.errorLogger, "HttpClientErrorException - Failed to addIfRoleDescriptionNotExitsInExtSystem",
+ e);
+ EPLogUtil.logExternalAuthAccessAlarm(logger, e.getStatusCode());
+ } catch (Exception e) {
+ logger.error(EELFLoggerDelegate.errorLogger, "addIfRoleDescriptionNotExitsInExtSystem: Failed",
+ e);
+ }
+ }
+
+ /**
+ *
+ * While sync functions form external auth system if new role found we should add in local and return Role.class object
+ *
+ * @param app
+ * @param role
+ * @return
+ */
+ @SuppressWarnings("unchecked")
+ private Role addRoleInDBIfDoesNotExists(EPApp app, String role) {
+ Role setNewRole = new Role();
+ try {
+ // functions can have new role created in External Auth System prevent
+ // duplication here
+ boolean isCreated = checkIfRoleExitsElseCreateInSyncFunctions(role, app);
+ final Map<String, String> getRoleByNameParams = new HashMap<>();
+ List<EPRole> getRoleCreated = null;
+ getRoleByNameParams.put(APP_ROLE_NAME_PARAM, role);
+ if (!app.getId().equals(PortalConstants.PORTAL_APP_ID)) {
+ getRoleByNameParams.put("appId", String.valueOf(app.getId()));
+ List<EPRole> roleCreated = dataAccessService
+ .executeNamedQuery(GET_ROLE_TO_UPDATE_IN_EXTERNAL_AUTH_SYSTEM, getRoleByNameParams, null);
+ if (!isCreated) {
+ EPRole epUpdateRole = roleCreated.get(0);
+ epUpdateRole.setAppRoleId(epUpdateRole.getId());
+ dataAccessService.saveDomainObject(epUpdateRole, null);
+ getRoleCreated = dataAccessService.executeNamedQuery(GET_ROLE_TO_UPDATE_IN_EXTERNAL_AUTH_SYSTEM,
+ getRoleByNameParams, null);
+ } else {
+ getRoleCreated = roleCreated;
+ }
+ } else {
+ getRoleCreated = dataAccessService.executeNamedQuery(GET_PORTAL_APP_ROLES_QUERY, getRoleByNameParams,
+ null);
+ }
+ if (getRoleCreated != null && !getRoleCreated.isEmpty()) {
+ EPRole roleObject = getRoleCreated.get(0);
+ setNewRole.setId(roleObject.getId());
+ setNewRole.setName(roleObject.getName());
+ setNewRole.setActive(roleObject.getActive());
+ setNewRole.setPriority(roleObject.getPriority());
+ }
+ } catch (Exception e) {
+ logger.error(EELFLoggerDelegate.errorLogger, "addRoleInDBIfDoesNotExists: Failed", e);
+ }
+ return setNewRole;
+ }
+
+ @SuppressWarnings("unchecked")
+ private boolean checkIfRoleExitsElseCreateInSyncFunctions(String role, EPApp app) {
+ boolean isCreated = false;
+ final Map<String, String> roleParams = new HashMap<>();
+ roleParams.put(APP_ROLE_NAME_PARAM, role);
+ List<EPRole> roleCreated = null;
+ if (app.getId().equals(PortalConstants.PORTAL_APP_ID)) {
+ roleCreated = dataAccessService.executeNamedQuery(GET_ROLE_TO_UPDATE_IN_EXTERNAL_AUTH_SYSTEM, roleParams,
+ null);
+ } else {
+ roleParams.put("appId", String.valueOf(app.getId()));
+ roleCreated = dataAccessService.executeNamedQuery(GET_ROLE_TO_UPDATE_IN_EXTERNAL_AUTH_SYSTEM, roleParams,
+ null);
+ }
+ if (roleCreated == null || roleCreated.isEmpty()) {
+ roleParams.put("appId", String.valueOf(app.getId()));
+ EPRole epRoleNew = new EPRole();
+ epRoleNew.setActive(true);
+ epRoleNew.setName(role);
+ if (app.getId().equals(PortalConstants.PORTAL_APP_ID)) {
+ epRoleNew.setAppId(null);
+ } else {
+ epRoleNew.setAppId(app.getId());
+ }
+ dataAccessService.saveDomainObject(epRoleNew, null);
+ isCreated = false;
+ } else {
+ isCreated = true;
+ }
+ return isCreated;
+ }
+
+ @Override
+ @SuppressWarnings("unchecked")
+ public Integer bulkUploadFunctions(String uebkey) throws Exception {
+ EPApp app = getApp(uebkey).get(0);
+ List<RoleFunction> roleFuncList = dataAccessService.executeNamedQuery("getAllFunctions", null, null);
+ CentralV2RoleFunction cenRoleFunc = null;
+ Integer functionsAdded = 0;
+ try {
+ for (RoleFunction roleFunc : roleFuncList) {
+ cenRoleFunc = new CentralV2RoleFunction(roleFunc.getCode(), roleFunc.getName());
+ addRoleFunctionInExternalSystem(cenRoleFunc, app);
+ functionsAdded++;
+ }
+ } catch(HttpClientErrorException e){
+ logger.error(EELFLoggerDelegate.errorLogger, "HttpClientErrorException - bulkUploadFunctions failed", e);
+ EPLogUtil.logExternalAuthAccessAlarm(logger, e.getStatusCode());
+ } catch (Exception e) {
+ logger.error(EELFLoggerDelegate.errorLogger, "bulkUploadFunctions: failed", e.getMessage(), e);
+ }
+ return functionsAdded;
+ }
+
+ @Override
+ public Integer bulkUploadRoles(String uebkey) throws Exception {
+ List<EPApp> app = getApp(uebkey);
+ List<EPRole> roles = getAppRoles(app.get(0).getId());
+ List<CentralV2Role> cenRoleList = new ArrayList<>();
+ final Map<String, Long> params = new HashMap<>();
+ Integer rolesListAdded = 0;
+ try {
+ cenRoleList = createCentralRoleObject(app, roles, cenRoleList, params);
+ ObjectMapper mapper = new ObjectMapper();
+ mapper.configure(DeserializationFeature.FAIL_ON_IGNORED_PROPERTIES, false);
+ String roleList = mapper.writeValueAsString(cenRoleList);
+ List<Role> roleObjectList = mapper.readValue(roleList,
+ TypeFactory.defaultInstance().constructCollectionType(List.class, Role.class));
+ for (Role role : roleObjectList) {
+ addRoleInExternalSystem(role, app.get(0));
+ rolesListAdded++;
+ }
+ } catch (Exception e) {
+ logger.error(EELFLoggerDelegate.errorLogger, "bulkUploadRoles: failed", e);
+ throw e;
+ }
+ return rolesListAdded;
+ }
+
+ /**
+ * It creating new role in external auth system while doing bulk upload
+ *
+ * @param role
+ * @param app
+ * @throws Exception
+ */
+ private void addRoleInExternalSystem(Role role, EPApp app) throws Exception {
+ String addRoleNew = updateExistingRoleInExternalSystem(role, app);
+ HttpHeaders headers = EcompPortalUtils.base64encodeKeyForAAFBasicAuth();
+ try {
+ HttpEntity<String> entity = new HttpEntity<>(addRoleNew, headers);
+ template.exchange(
+ SystemProperties.getProperty(EPCommonSystemProperties.EXTERNAL_CENTRAL_ACCESS_URL) + "role",
+ HttpMethod.POST, entity, String.class);
+ } catch(HttpClientErrorException e){
+ logger.error(EELFLoggerDelegate.errorLogger, "HttpClientErrorException - Failed to addRoleInExternalSystem", e);
+ EPLogUtil.logExternalAuthAccessAlarm(logger, e.getStatusCode());
+ } catch (Exception e) {
+ if (e.getMessage().equalsIgnoreCase("409 Conflict")) {
+ logger.error(EELFLoggerDelegate.errorLogger, "addRoleInExternalSystem: Role already exits but does not break functionality", e);
+ } else {
+ logger.error(EELFLoggerDelegate.errorLogger, "addRoleInExternalSystem: Failed to addRoleInExternalSystem", e.getMessage());
+ }
+ }
+ }
+
+ @Override
+ @SuppressWarnings("unchecked")
+ public Integer bulkUploadRolesFunctions(String uebkey) throws Exception {
+ EPApp app = getApp(uebkey).get(0);
+ List<EPRole> roles = getAppRoles(app.getId());
+ final Map<String, Long> params = new HashMap<>();
+ Integer roleFunctions = 0;
+ try {
+ for (EPRole role : roles) {
+ params.put("roleId", role.getId());
+ List<BulkUploadRoleFunction> appRoleFunc = dataAccessService.executeNamedQuery("uploadAllRoleFunctions",
+ params, null);
+ if (!appRoleFunc.isEmpty()) {
+ for (BulkUploadRoleFunction addRoleFunc : appRoleFunc) {
+ addRoleFunctionsInExternalSystem(addRoleFunc, role, app);
+ roleFunctions++;
+ }
+ }
+ }
+ } catch(HttpClientErrorException e){
+ logger.error(EELFLoggerDelegate.errorLogger, "HttpClientErrorException - Failed to bulkUploadRolesFunctions", e);
+ EPLogUtil.logExternalAuthAccessAlarm(logger, e.getStatusCode());
+ } catch (Exception e) {
+ logger.error(EELFLoggerDelegate.errorLogger, "bulkUploadRolesFunctions: failed", e);
+ }
+ return roleFunctions;
+ }
+
+ /**
+ * Its adding a role function while doing bulk upload
+ *
+ * @param addRoleFunc
+ * @param role
+ * @param app
+ */
+ private void addRoleFunctionsInExternalSystem(BulkUploadRoleFunction addRoleFunc, EPRole role, EPApp app) {
+ String checkType = addRoleFunc.getFunctionCd().contains("menu") ? "menu" : "url";
+ ExternalAccessRolePerms extRolePerms = null;
+ ExternalAccessPerms extPerms = null;
+ ObjectMapper mapper = new ObjectMapper();
+ try {
+ HttpHeaders headers = EcompPortalUtils.base64encodeKeyForAAFBasicAuth();
+
+ extPerms = new ExternalAccessPerms(app.getNameSpace() + "." + checkType, addRoleFunc.getFunctionCd(), "*",
+ addRoleFunc.getFunctionName());
+ extRolePerms = new ExternalAccessRolePerms(extPerms,
+ app.getNameSpace() + "." + role.getName().replaceAll(EcompPortalUtils.EXTERNAL_CENTRAL_AUTH_ROLE_HANDLE_SPECIAL_CHARACTERS, "_"));
+ String updateRolePerms = mapper.writeValueAsString(extRolePerms);
+ HttpEntity<String> entity = new HttpEntity<>(updateRolePerms, headers);
+ template.exchange(
+ SystemProperties.getProperty(EPCommonSystemProperties.EXTERNAL_CENTRAL_ACCESS_URL) + "role/perm",
+ HttpMethod.POST, entity, String.class);
+ } catch (Exception e) {
+ if (e.getMessage().equalsIgnoreCase("409 Conflict")) {
+ logger.error(EELFLoggerDelegate.errorLogger,
+ "addRoleFunctionsInExternalSystem: RoleFunction already exits but does not break functionality", e);
+ } else {
+ logger.error(EELFLoggerDelegate.errorLogger, "addRoleFunctionsInExternalSystem: Failed to addRoleFunctionsInExternalSystem",
+ e.getMessage());
+ }
+ }
+ }
+
+ @Override
+ public void bulkUploadPartnerFunctions(String uebkey, List<RoleFunction> roleFunctionsList) throws Exception {
+ EPApp app = getApp(uebkey).get(0);
+ CentralV2RoleFunction cenRoleFunc = null;
+ for (RoleFunction roleFunction : roleFunctionsList) {
+ cenRoleFunc = new CentralV2RoleFunction(roleFunction.getCode(), roleFunction.getName());
+ addRoleFunctionInExternalSystem(cenRoleFunc, app);
+ }
+ }
+
+ @Override
+ public void bulkUploadPartnerRoles(String uebkey, List<Role> roleList) throws Exception {
+ EPApp app = getApp(uebkey).get(0);
+ for (Role role : roleList) {
+ addRoleInExternalSystem(role, app);
+ }
+ }
+
+ @SuppressWarnings("unchecked")
+ @Override
+ public void bulkUploadPartnerRoleFunctions(String uebkey, List<Role> roleList) throws Exception {
+ EPApp app = getApp(uebkey).get(0);
+ HttpHeaders headers = EcompPortalUtils.base64encodeKeyForAAFBasicAuth();
+ for (Role role : roleList) {
+ try {
+ Set<RoleFunction> roleFunctionList = role.getRoleFunctions();
+ List<RoleFunction> roleFunctionListNew = new ArrayList<>();
+ ObjectMapper roleFunctionsMapper = new ObjectMapper();
+ Iterator<RoleFunction> itetaror = roleFunctionList.iterator();
+ while (itetaror.hasNext()) {
+ Object nextValue = itetaror.next();
+ RoleFunction roleFunction = roleFunctionsMapper.convertValue(nextValue, RoleFunction.class);
+ roleFunctionListNew.add(roleFunction);
+ }
+ List<RoleFunction> listWithoutDuplicates = roleFunctionListNew.stream().distinct()
+ .collect(Collectors.toList());
+ for (RoleFunction roleFunction : listWithoutDuplicates) {
+ String checkType = roleFunction.getCode().contains("menu") ? "menu" : "url";
+ ExternalAccessRolePerms extRolePerms = null;
+ ExternalAccessPerms extPerms = null;
+ ObjectMapper mapper = new ObjectMapper();
+ extPerms = new ExternalAccessPerms(app.getNameSpace() + "." + checkType, roleFunction.getCode(),
+ "*");
+ extRolePerms = new ExternalAccessRolePerms(extPerms,
+ app.getNameSpace() + "." + role.getName().replaceAll(EcompPortalUtils.EXTERNAL_CENTRAL_AUTH_ROLE_HANDLE_SPECIAL_CHARACTERS, "_"));
+ String updateRolePerms = mapper.writeValueAsString(extRolePerms);
+ HttpEntity<String> entity = new HttpEntity<>(updateRolePerms, headers);
+ template.exchange(SystemProperties.getProperty(EPCommonSystemProperties.EXTERNAL_CENTRAL_ACCESS_URL)
+ + "role/perm", HttpMethod.PUT, entity, String.class);
+ }
+ } catch (Exception e) {
+ if (e.getMessage().equalsIgnoreCase("409 Conflict")) {
+ logger.error(EELFLoggerDelegate.errorLogger,
+ "bulkUploadPartnerRoleFunctions: RoleFunction already exits but does not break functionality");
+ } else {
+ logger.error(EELFLoggerDelegate.errorLogger, "bulkUploadPartnerRoleFunctions: Failed to addRoleFunctionsInExternalSystem",
+ e);
+ }
+ }
+
+ }
+ }
+
+ @Override
+ @Transactional
+ public void syncApplicationRolesWithEcompDB(EPApp app) {
+ try {
+ logger.debug(EELFLoggerDelegate.debugLogger, "syncRoleFunctionFromExternalAccessSystem: Started");
+ //Sync functions and roles assigned to it which also creates new roles if does not exits in portal
+ syncRoleFunctionFromExternalAccessSystem(app);
+ logger.debug(EELFLoggerDelegate.debugLogger, "syncRoleFunctionFromExternalAccessSystem: Finished");
+
+ ObjectMapper mapper = new ObjectMapper();
+ logger.debug(EELFLoggerDelegate.debugLogger, "Entering to getAppRolesJSONFromExtAuthSystem");
+ // Get Permissions from External Auth System
+ JSONArray extRole = getAppRolesJSONFromExtAuthSystem(app);
+
+ logger.debug(EELFLoggerDelegate.debugLogger, "Entering into getExternalRoleDetailsList");
+ List<ExternalRoleDetails> externalRoleDetailsList = getExternalRoleDetailsList(app,
+ mapper, extRole);
+
+ List<EPRole> finalRoleList = new ArrayList<>();
+ for (ExternalRoleDetails externalRole : externalRoleDetailsList) {
+ EPRole ecompRole = convertExternalRoleDetailstoEpRole(externalRole);
+ finalRoleList.add(ecompRole);
+ }
+
+ List<EPRole> applicationRolesList;
+ applicationRolesList = getAppRoles(app.getId());
+ List<String> applicationRoleIdList = new ArrayList<>();
+ for (EPRole applicationRole : applicationRolesList) {
+ applicationRoleIdList.add(applicationRole.getName());
+ }
+
+ List<EPRole> roleListToBeAddInEcompDB = new ArrayList<>();
+ for (EPRole aafRole : finalRoleList) {
+ if (!applicationRoleIdList.contains(aafRole.getName())) {
+ roleListToBeAddInEcompDB.add(aafRole);
+ }
+ }
+
+ logger.debug(EELFLoggerDelegate.debugLogger, "Entering into inactiveRolesNotInExternalAuthSystem");
+ // Check if roles exits in external Access system and if not make inactive in DB
+ inactiveRolesNotInExternalAuthSystem(app, finalRoleList, applicationRolesList);
+
+ logger.debug(EELFLoggerDelegate.debugLogger, "Entering into checkAndUpdateRoleInDB");
+ // It checks properties in the external auth system app role description and updates role in local
+ checkAndUpdateRoleInDB(app, finalRoleList);
+
+ logger.debug(EELFLoggerDelegate.debugLogger, "Entering into addNewRoleInEcompDBUpdateDescInExtAuthSystem");
+ // Add new roles in DB and updates role description in External Auth System
+ addNewRoleInEcompDBUpdateDescInExtAuthSystem(app, roleListToBeAddInEcompDB);
+ logger.debug(EELFLoggerDelegate.debugLogger, "syncApplicationRolesWithEcompDB: Finished");
+ } catch (HttpClientErrorException e) {
+ logger.error(EELFLoggerDelegate.errorLogger, "syncApplicationRolesWithEcompDB: Failed due to the External Auth System", e);
+ EPLogUtil.logExternalAuthAccessAlarm(logger, e.getStatusCode());
+ } catch (Exception e) {
+ logger.error(EELFLoggerDelegate.errorLogger, "syncApplicationRolesWithEcompDB: Failed ", e);
+ }
+ }
+
+ /**
+ *
+ * It adds new roles in DB and updates description in External Auth System
+ *
+ * @param app
+ * @param roleListToBeAddInEcompDB
+ */
+ @SuppressWarnings("unchecked")
+ private void addNewRoleInEcompDBUpdateDescInExtAuthSystem(EPApp app, List<EPRole> roleListToBeAddInEcompDB) {
+ EPRole roleToBeAddedInEcompDB;
+ for (int i = 0; i < roleListToBeAddInEcompDB.size(); i++) {
+ try {
+ roleToBeAddedInEcompDB = roleListToBeAddInEcompDB.get(i);
+ if (app.getId() == 1) {
+ roleToBeAddedInEcompDB.setAppRoleId(null);
+ }
+ dataAccessService.saveDomainObject(roleToBeAddedInEcompDB, null);
+ List<EPRole> getRoleCreatedInSync = null;
+ if (!app.getId().equals(PortalConstants.PORTAL_APP_ID)) {
+ final Map<String, String> globalRoleParams = new HashMap<>();
+ globalRoleParams.put("appId", String.valueOf(app.getId()));
+ globalRoleParams.put("appRoleName", roleToBeAddedInEcompDB.getName());
+ getRoleCreatedInSync = dataAccessService.executeNamedQuery(GET_ROLE_TO_UPDATE_IN_EXTERNAL_AUTH_SYSTEM, globalRoleParams, null);
+ EPRole epUpdateRole = getRoleCreatedInSync.get(0);
+ epUpdateRole.setAppRoleId(epUpdateRole.getId());
+ dataAccessService.saveDomainObject(epUpdateRole, null);
+ }
+ List<EPRole> roleList = new ArrayList<>();
+ final Map<String, String> params = new HashMap<>();
+
+ params.put(APP_ROLE_NAME_PARAM, roleToBeAddedInEcompDB.getName());
+ boolean isPortalRole = false;
+ if (app.getId() == 1) {
+ isPortalRole = true;
+ roleList = dataAccessService.executeNamedQuery(GET_PORTAL_APP_ROLES_QUERY, params, null);
+ } else {
+ isPortalRole = false;
+ params.put(APP_ID, app.getId().toString());
+ roleList = dataAccessService.executeNamedQuery(GET_ROLE_TO_UPDATE_IN_EXTERNAL_AUTH_SYSTEM, params, null);
+ }
+ EPRole role = roleList.get(0);
+ Role aaFrole = new Role();
+ aaFrole.setId(role.getId());
+ aaFrole.setActive(role.getActive());
+ aaFrole.setPriority(role.getPriority());
+ aaFrole.setName(role.getName());
+ updateRoleInExternalSystem(aaFrole, app, isPortalRole);
+ } catch (Exception e) {
+ logger.error(EELFLoggerDelegate.errorLogger,
+ "SyncApplicationRolesWithEcompDB: Failed to add or update role in external auth system", e);
+ }
+ }
+ }
+
+ /**
+ *
+ * It checks description in External Auth System if found any changes updates in DB
+ *
+ * @param app
+ * @param finalRoleList contains list of External Auth System roles list which is converted to EPRole
+ */
+ @SuppressWarnings("unchecked")
+ private void checkAndUpdateRoleInDB(EPApp app, List<EPRole> finalRoleList) {
+ for (EPRole roleItem : finalRoleList) {
+ final Map<String, String> roleParams = new HashMap<>();
+ List<EPRole> currentList = null;
+ roleParams.put(APP_ROLE_NAME_PARAM, roleItem.getName());
+ if (app.getId() == 1) {
+ currentList = dataAccessService.executeNamedQuery(GET_PORTAL_APP_ROLES_QUERY, roleParams, null);
+ } else {
+ roleParams.put(APP_ID, app.getId().toString());
+ currentList = dataAccessService.executeNamedQuery(GET_ROLE_TO_UPDATE_IN_EXTERNAL_AUTH_SYSTEM, roleParams, null);
+ }
+
+ if (!currentList.isEmpty()) {
+ try {
+ Boolean aafRoleActive;
+ Boolean localRoleActive;
+ boolean result;
+ aafRoleActive = Boolean.valueOf(roleItem.getActive());
+ localRoleActive = Boolean.valueOf(currentList.get(0).getActive());
+ result = aafRoleActive.equals(localRoleActive);
+ EPRole updateRole = currentList.get(0);
+
+ if (!result) {
+ updateRole.setActive(roleItem.getActive());
+ dataAccessService.saveDomainObject(updateRole, null);
+ }
+ if (roleItem.getPriority() != null
+ && !currentList.get(0).getPriority().equals(roleItem.getPriority())) {
+ updateRole.setPriority(roleItem.getPriority());
+ dataAccessService.saveDomainObject(updateRole, null);
+ }
+ } catch (Exception e) {
+ logger.error(EELFLoggerDelegate.errorLogger,
+ "syncApplicationRolesWithEcompDB: Failed to update role ", e);
+ }
+ }
+ }
+ }
+ /**
+ *
+ * It de-activates application roles in DB if not present in External Auth system
+ *
+ * @param app
+ * @param finalRoleList contains list of current roles present in External Auth System
+ * @param applicationRolesList contains list of current roles present in DB
+ */
+ @SuppressWarnings("unchecked")
+ private void inactiveRolesNotInExternalAuthSystem(EPApp app, List<EPRole> finalRoleList,
+ List<EPRole> applicationRolesList) {
+ final Map<String, EPRole> checkRolesInactive = new HashMap<>();
+ for (EPRole extrole : finalRoleList) {
+ checkRolesInactive.put(extrole.getName(), extrole);
+ }
+ for (EPRole role : applicationRolesList) {
+ try {
+ final Map<String, String> extRoleParams = new HashMap<>();
+ List<EPRole> roleList = null;
+ extRoleParams.put(APP_ROLE_NAME_PARAM, role.getName());
+ if (!checkRolesInactive.containsKey(role.getName())) {
+ if (app.getId() == 1) {
+ roleList = dataAccessService.executeNamedQuery(GET_PORTAL_APP_ROLES_QUERY, extRoleParams, null);
+ } else {
+ extRoleParams.put(APP_ID, app.getId().toString());
+ roleList = dataAccessService.executeNamedQuery(GET_ROLE_TO_UPDATE_IN_EXTERNAL_AUTH_SYSTEM, extRoleParams, null);
+ }
+ EPRole updateRoleInactive = roleList.get(0);
+ updateRoleInactive.setActive(false);
+ dataAccessService.saveDomainObject(updateRoleInactive, null);
+ }
+ } catch (Exception e) {
+ logger.error(EELFLoggerDelegate.errorLogger,
+ "syncApplicationRolesWithEcompDB: Failed to de-activate role ", e);
+ }
+ }
+ }
+
+ @Override
+ @SuppressWarnings("unchecked")
+ public List<ExternalRoleDetails> getExternalRoleDetailsList(EPApp app,
+ ObjectMapper mapper, JSONArray extRole)
+ throws IOException {
+ List<ExternalRoleDetails> externalRoleDetailsList = new ArrayList<>();
+ ExternalRoleDescription ApplicationRole = new ExternalRoleDescription();
+ ExternalAccessPerms externalAccessPerms = new ExternalAccessPerms();
+ List<String> functionCodelist = new ArrayList<>();
+ for (int i = 0; i < extRole.length(); i++) {
+ ExternalRoleDetails externalRoleDetail = new ExternalRoleDetails();
+ EPAppRoleFunction ePAppRoleFunction = new EPAppRoleFunction();
+ JSONObject Role = (JSONObject) extRole.get(i);
+ if (!extRole.getJSONObject(i).has(EXTERNAL_AUTH_ROLE_DESCRIPTION)) {
+ ApplicationRole.setActive("true");
+ ApplicationRole.setAppId(IS_NULL_STRING);
+ ApplicationRole.setPriority(IS_NULL_STRING);
+ ApplicationRole.setAppRoleId(IS_NULL_STRING);
+ String roleName = extRole.getJSONObject(i).getString(ROLE_NAME);
+ ApplicationRole.setName(roleName.substring(app.getNameSpace().length() + 1));
+ } else {
+ String desc = extRole.getJSONObject(i).getString(EXTERNAL_AUTH_ROLE_DESCRIPTION);
+ ApplicationRole = mapper.readValue(desc, ExternalRoleDescription.class);
+ }
+
+ SortedSet<ExternalAccessPerms> externalAccessPermsOfRole = new TreeSet<>();
+ if (extRole.getJSONObject(i).has(EXTERNAL_AUTH_PERMS)) {
+ JSONArray extPerm = (JSONArray) Role.get(EXTERNAL_AUTH_PERMS);
+ for (int j = 0; j < extPerm.length(); j++) {
+ JSONObject perms = extPerm.getJSONObject(j);
+ boolean isNamespaceMatching = EcompPortalUtils.checkNameSpaceMatching(perms.getString("type"), app.getNameSpace());
+ if (isNamespaceMatching) {
+ externalAccessPerms = new ExternalAccessPerms(perms.getString("type"),
+ perms.getString("instance"), perms.getString("action"));
+ ePAppRoleFunction.setCode(externalAccessPerms.getInstance());
+ functionCodelist.add(ePAppRoleFunction.getCode());
+ externalAccessPermsOfRole.add(externalAccessPerms);
+ }
+
+ }
+ }
+
+ if (ApplicationRole.getActive().equals(IS_NULL_STRING)) {
+ externalRoleDetail.setActive(false);
+ } else {
+ externalRoleDetail.setActive(Boolean.parseBoolean(ApplicationRole.getActive()));
+ }
+ externalRoleDetail.setName(ApplicationRole.getName());
+
+ if (ApplicationRole.getAppId().equals(IS_NULL_STRING) && app.getId() == 1) {
+ externalRoleDetail.setAppId(null);
+ } else if (ApplicationRole.getAppId().equals(IS_NULL_STRING)) {
+ externalRoleDetail.setAppId(app.getId());
+ } else {
+ externalRoleDetail.setAppId(Long.parseLong(ApplicationRole.getAppId()));
+ }
+
+ if (ApplicationRole.getPriority().equals(IS_NULL_STRING)) {
+ externalRoleDetail.setPriority(null);
+ } else {
+ externalRoleDetail.setPriority(Integer.parseInt(ApplicationRole.getPriority()));
+ }
+
+ if (ApplicationRole.getAppRoleId().equals(IS_NULL_STRING) && app.getId() == 1) {
+ externalRoleDetail.setAppRoleId(null);
+ }
+
+ // get role functions from DB
+ final Map<String, EPAppRoleFunction> roleFunctionsMap = new HashMap<>();
+ if (!ApplicationRole.getId().equals(IS_NULL_STRING)) {
+ final Map<String, Long> appRoleFuncsParams = new HashMap<>();
+ appRoleFuncsParams.put("appId", app.getId());
+ appRoleFuncsParams.put("roleId", Long.valueOf(ApplicationRole.getId()));
+ List<EPAppRoleFunction> appRoleFunctions = dataAccessService.executeNamedQuery("getAppRoleFunctionOnRoleIdandAppId", appRoleFuncsParams, null);
+ if (!appRoleFunctions.isEmpty()) {
+ for (EPAppRoleFunction roleFunc : appRoleFunctions) {
+ roleFunctionsMap.put(roleFunc.getCode(), roleFunc);
+ }
+ }
+ }
+
+ if (!externalAccessPermsOfRole.isEmpty()) {
+ // Adding functions to role
+ for (ExternalAccessPerms externalpermission : externalAccessPermsOfRole) {
+ EPAppRoleFunction checkRoleFunctionExits = roleFunctionsMap.get(externalpermission.getInstance());
+ if (checkRoleFunctionExits == null) {
+ String funcCode = externalpermission.getType().substring(app.getNameSpace().length() + 1)
+ + FUNCTION_PIPE + externalAccessPerms.getInstance() + FUNCTION_PIPE
+ + externalAccessPerms.getAction();
+ EPAppRoleFunction checkRoleFunctionPipeExits = roleFunctionsMap.get(funcCode);
+ if (checkRoleFunctionPipeExits == null) {
+ try {
+ final Map<String, String> appFuncsParams = new HashMap<>();
+ appFuncsParams.put("appId", String.valueOf(app.getId()));
+ appFuncsParams.put("functionCd", externalpermission.getInstance());
+ logger.debug(EELFLoggerDelegate.debugLogger,
+ "SyncApplicationRolesWithEcompDB: Adding function to the role: {}",
+ externalpermission.getInstance());
+ List<CentralV2RoleFunction> roleFunction = null;
+ roleFunction = dataAccessService.executeNamedQuery("getAppFunctionOnCodeAndAppId", appFuncsParams, null);
+ if (roleFunction.isEmpty()) {
+ appFuncsParams.put("functionCd", funcCode);
+ roleFunction = dataAccessService.executeNamedQuery("getAppFunctionOnCodeAndAppId", appFuncsParams, null);
+ }
+ if (!roleFunction.isEmpty()) {
+ EPAppRoleFunction apRoleFunction = new EPAppRoleFunction();
+ apRoleFunction.setAppId(app.getId());
+ apRoleFunction.setRoleId(Long.parseLong(ApplicationRole.getId()));
+ apRoleFunction.setCode(roleFunction.get(0).getCode());
+ dataAccessService.saveDomainObject(apRoleFunction, null);
+ }
+ } catch (Exception e) {
+ logger.error(EELFLoggerDelegate.errorLogger,
+ "SyncApplicationRolesWithEcompDB: Failed to add role function", e);
+ }
+ }
+ }
+ }
+ }
+ externalRoleDetailsList.add(externalRoleDetail);
+ }
+ return externalRoleDetailsList;
+ }
+
+ @Override
+ public JSONArray getAppRolesJSONFromExtAuthSystem(EPApp app) throws Exception {
+ ResponseEntity<String> response = null;
+ HttpHeaders headers = EcompPortalUtils.base64encodeKeyForAAFBasicAuth();
+ HttpEntity<String> entity = new HttpEntity<>(headers);
+ logger.debug(EELFLoggerDelegate.debugLogger, "syncApplicationRolesWithEcompDB: {} ",
+ CONNECTING_TO_EXTERNAL_AUTH_SYSTEM_LOG_MESSAGE);
+ response = template
+ .exchange(SystemProperties.getProperty(EPCommonSystemProperties.EXTERNAL_CENTRAL_ACCESS_URL)
+ + "roles/ns/" + app.getNameSpace(), HttpMethod.GET, entity, String.class);
+ String res = response.getBody();
+ logger.debug(EELFLoggerDelegate.debugLogger,
+ "syncApplicationRolesWithEcompDB: Finished GET roles from External Auth system and the result is :",
+ res);
+ JSONObject jsonObj = new JSONObject(res);
+ JSONArray extRole = jsonObj.getJSONArray("role");
+ for (int i = 0; i < extRole.length(); i++) {
+ if (extRole.getJSONObject(i).getString(ROLE_NAME).equals(app.getNameSpace() + ADMIN)
+ || extRole.getJSONObject(i).getString(ROLE_NAME).equals(app.getNameSpace() + OWNER)
+ || (extRole.getJSONObject(i).getString(ROLE_NAME).equals(app.getNameSpace() + ACCOUNT_ADMINISTRATOR)
+ && !app.getId().equals(PortalConstants.PORTAL_APP_ID))) {
+ extRole.remove(i);
+ i--;
+ }
+ }
+ return extRole;
+ }
+
+ @Override
+ public JSONArray getAllUsersByRole(String roleName) throws Exception{
+ ResponseEntity<String> response = null;
+ HttpHeaders headers = EcompPortalUtils.base64encodeKeyForAAFBasicAuth();
+ HttpEntity<String> entity = new HttpEntity<>(headers);
+ logger.debug(EELFLoggerDelegate.debugLogger, "getAllUsersByRole: {} ",
+ CONNECTING_TO_EXTERNAL_AUTH_SYSTEM_LOG_MESSAGE);
+ response = template
+ .exchange(SystemProperties.getProperty(EPCommonSystemProperties.EXTERNAL_CENTRAL_ACCESS_URL)
+ + "userRoles/role/" + roleName, HttpMethod.GET, entity, String.class);
+ String res = response.getBody();
+ logger.debug(EELFLoggerDelegate.debugLogger,
+ "syncApplicationRolesWithEcompDB: Finished GET roles from External Auth system and the result is :",
+ res);
+ JSONObject jsonObj = new JSONObject(res);
+ JSONArray extRole = jsonObj.getJSONArray("userRole");
+
+ return extRole;
+ }
+
+ /**
+ *
+ * It converts from ExternalRoleDetails.class object to EPRole.class object
+ *
+ * @param externalRoleDetails
+ * @return EPRole object
+ */
+ private EPRole convertExternalRoleDetailstoEpRole(ExternalRoleDetails externalRoleDetails) {
+ EPRole role = new EPRole();
+ role.setActive(externalRoleDetails.isActive());
+ role.setAppId(externalRoleDetails.getAppId());
+ role.setAppRoleId(externalRoleDetails.getAppRoleId());
+ role.setName(externalRoleDetails.getName());
+ role.setPriority(externalRoleDetails.getPriority());
+ return role;
+ }
+
+ @SuppressWarnings("unchecked")
+ @Override
+ public Integer bulkUploadUserRoles(String uebkey) throws Exception {
+ EPApp app = getApp(uebkey).get(0);
+ final Map<String, String> params = new HashMap<>();
+ params.put("uebKey", app.getUebKey());
+ List<BulkUploadUserRoles> userRolesList = null;
+ Integer userRolesAdded = 0;
+ if (app.getCentralAuth()) {
+ userRolesList = dataAccessService.executeNamedQuery("getBulkUserRoles", params, null);
+ for (BulkUploadUserRoles userRolesUpload : userRolesList) {
+ if(!userRolesUpload.getOrgUserId().equals("su1234")){
+ addUserRoleInExternalSystem(userRolesUpload);
+ userRolesAdded++;
+ }
+ }
+ }
+ return userRolesAdded;
+ }
+
+ /**
+ * Its adding a user role in external auth system while doing bulk upload
+ *
+ * @param userRolesUpload
+ */
+ private void addUserRoleInExternalSystem(BulkUploadUserRoles userRolesUpload) {
+ try {
+ String name = "";
+ ObjectMapper mapper = new ObjectMapper();
+ if (EPCommonSystemProperties
+ .containsProperty(EPCommonSystemProperties.EXTERNAL_CENTRAL_ACCESS_USER_DOMAIN)) {
+ name = userRolesUpload.getOrgUserId()
+ + SystemProperties.getProperty(EPCommonSystemProperties.EXTERNAL_CENTRAL_ACCESS_USER_DOMAIN);
+ }
+ ExternalAccessUser extUser = new ExternalAccessUser(name,
+ userRolesUpload.getAppNameSpace() + "." + userRolesUpload.getRoleName().replaceAll(EcompPortalUtils.EXTERNAL_CENTRAL_AUTH_ROLE_HANDLE_SPECIAL_CHARACTERS, "_"));
+ String userRole = mapper.writeValueAsString(extUser);
+ HttpHeaders headers = EcompPortalUtils.base64encodeKeyForAAFBasicAuth();
+ HttpEntity<String> entity = new HttpEntity<>(userRole, headers);
+ template.exchange(
+ SystemProperties.getProperty(EPCommonSystemProperties.EXTERNAL_CENTRAL_ACCESS_URL) + "userRole",
+ HttpMethod.POST, entity, String.class);
+ } catch(HttpClientErrorException e){
+ logger.error(EELFLoggerDelegate.errorLogger, "HttpClientErrorException - Failed to addUserRoleInExternalSystem", e);
+ EPLogUtil.logExternalAuthAccessAlarm(logger, e.getStatusCode());
+ } catch (Exception e) {
+ if (e.getMessage().equalsIgnoreCase("409 Conflict")) {
+ logger.error(EELFLoggerDelegate.errorLogger, "addUserRoleInExternalSystem: UserRole already exits but does not break functionality");
+ } else {
+ logger.error(EELFLoggerDelegate.errorLogger, "addUserRoleInExternalSystem: Failed to addUserRoleInExternalSystem", e);
+ }
+ }
+ }
+
+ @Override
+ public void deleteRoleDependencyRecords(Session localSession, Long roleId, Long appId, boolean isPortalRequest) throws Exception {
+ try {
+ String sql = "";
+ Query query = null;
+
+ //It should delete only when it portal's roleId
+ if(appId.equals(PortalConstants.PORTAL_APP_ID)){
+ // Delete from fn_role_function
+ sql = "DELETE FROM fn_role_function WHERE role_id=" + roleId;
+ logger.debug(EELFLoggerDelegate.debugLogger, "Executing query: " + sql);
+ query = localSession.createSQLQuery(sql);
+ query.executeUpdate();
+
+ // Delete from fn_role_composite
+ sql = "DELETE FROM fn_role_composite WHERE parent_role_id=" + roleId + " OR child_role_id=" + roleId;
+ logger.debug(EELFLoggerDelegate.debugLogger, "Executing query: " + sql);
+ query = localSession.createSQLQuery(sql);
+ query.executeUpdate();
+ }
+
+ // Delete from ep_app_role_function
+ sql = "DELETE FROM ep_app_role_function WHERE role_id=" + roleId;
+ logger.debug(EELFLoggerDelegate.debugLogger, "Executing query: " + sql);
+ query = localSession.createSQLQuery(sql);
+ query.executeUpdate();
+
+ // Delete from ep_role_notification
+ sql = "DELETE FROM ep_role_notification WHERE role_id=" + roleId;
+ logger.debug(EELFLoggerDelegate.debugLogger, "Executing query: " + sql);
+ query = localSession.createSQLQuery(sql);
+ query.executeUpdate();
+
+ // Delete from fn_user_pseudo_role
+ sql = "DELETE FROM fn_user_pseudo_role WHERE pseudo_role_id=" + roleId;
+ logger.debug(EELFLoggerDelegate.debugLogger, "Executing query: " + sql);
+ query = localSession.createSQLQuery(sql);
+ query.executeUpdate();
+
+ // Delete form EP_WIDGET_CATALOG_ROLE
+ sql = "DELETE FROM EP_WIDGET_CATALOG_ROLE WHERE role_id=" + roleId;
+ logger.debug(EELFLoggerDelegate.debugLogger, "Executing query: " + sql);
+ query = localSession.createSQLQuery(sql);
+ query.executeUpdate();
+
+ // Delete form EP_WIDGET_CATALOG_ROLE
+ sql = "DELETE FROM ep_user_roles_request_det WHERE requested_role_id=" + roleId;
+ logger.debug(EELFLoggerDelegate.debugLogger, "Executing query: " + sql);
+ query = localSession.createSQLQuery(sql);
+ query.executeUpdate();
+
+ if(!isPortalRequest) {
+ // Delete form fn_menu_functional_roles
+ sql = "DELETE FROM fn_menu_functional_roles WHERE role_id=" + roleId;
+ logger.debug(EELFLoggerDelegate.debugLogger, "Executing query: " + sql);
+ query = localSession.createSQLQuery(sql);
+ query.executeUpdate();
+ }
+ } catch (Exception e) {
+ logger.debug(EELFLoggerDelegate.debugLogger, "deleteRoleDependeciesRecord: failed ", e);
+ throw new DeleteDomainObjectFailedException("delete Failed" + e.getMessage());
+ }
+
+ }
+
+ @SuppressWarnings("unchecked")
+ @Override
+ public List<String> getMenuFunctionsList(String uebkey) throws Exception {
+ List<String> appMenuFunctionsList = null;
+ try {
+ EPApp app = getApp(uebkey).get(0);
+ final Map<String, Long> appParams = new HashMap<>();
+ appParams.put(APP_ID, app.getId());
+ appMenuFunctionsList = dataAccessService.executeNamedQuery("getMenuFunctions", appParams, null);
+ } catch (Exception e) {
+ logger.error(EELFLoggerDelegate.errorLogger, "getMenuFunctionsList: Failed", e);
+ return appMenuFunctionsList;
+ }
+ return appMenuFunctionsList;
+ }
+
+ @SuppressWarnings({ "unchecked"})
+ @Override
+ public List<EcompUser> getAllAppUsers(String uebkey) throws Exception {
+ List<String> usersList = new ArrayList<>();
+ List<EcompUser> usersfinalList = new ArrayList<>();
+ try {
+ EPApp app = getApp(uebkey).get(0);
+ final Map<String, Long> appParams = new HashMap<>();
+ appParams.put("appId", app.getId());
+ List<EcompUserRoles> userList = (List<EcompUserRoles>) dataAccessService
+ .executeNamedQuery("ApplicationUserRoles", appParams, null);
+ for (EcompUserRoles ecompUserRole : userList) {
+ boolean found = false;
+ Set<EcompRole> roles = null;
+ for (EcompUser user : usersfinalList) {
+ if (user.getOrgUserId().equals(ecompUserRole.getOrgUserId())) {
+ EcompRole ecompRole = new EcompRole();
+ ecompRole.setId(ecompUserRole.getRoleId());
+ ecompRole.setName(ecompUserRole.getRoleName());
+ roles = user.getRoles();
+ roles.add(ecompRole);
+ user.setRoles(roles);
+ found = true;
+ break;
+ }
+ }
+
+ if (!found) {
+ EcompUser epUser = new EcompUser();
+ epUser.setOrgId(ecompUserRole.getOrgId());
+ epUser.setManagerId(ecompUserRole.getManagerId());
+ epUser.setFirstName(ecompUserRole.getFirstName());
+ epUser.setLastName(ecompUserRole.getLastName());
+ epUser.setPhone(ecompUserRole.getPhone());
+ epUser.setEmail(ecompUserRole.getEmail());
+ epUser.setOrgUserId(ecompUserRole.getOrgUserId());
+ epUser.setOrgCode(ecompUserRole.getOrgCode());
+ epUser.setOrgManagerUserId(ecompUserRole.getOrgManagerUserId());
+ epUser.setJobTitle(ecompUserRole.getJobTitle());
+ epUser.setLoginId(ecompUserRole.getLoginId());
+ epUser.setActive(true);
+ roles = new HashSet<>();
+ EcompRole ecompRole = new EcompRole();
+ ecompRole.setId(ecompUserRole.getRoleId());
+ ecompRole.setName(ecompUserRole.getRoleName());
+ roles.add(ecompRole);
+ epUser.setRoles(roles);
+ usersfinalList.add(epUser);
+ }
+ }
+ ObjectMapper mapper = new ObjectMapper();
+
+ for (EcompUser u1 : usersfinalList) {
+ String str = mapper.writeValueAsString(u1);
+ usersList.add(str);
+ }
+ } catch (Exception e) {
+ logger.error(EELFLoggerDelegate.errorLogger, "getAllUsers failed", e);
+ throw e;
+ }
+ return usersfinalList;
+ }
+
+
+ @Override
+ public Role ConvertCentralRoleToRole(String result) {
+ ObjectMapper mapper = new ObjectMapper();
+ mapper.configure(DeserializationFeature.FAIL_ON_UNKNOWN_PROPERTIES, false);
+ Role newRole = new Role();
+ try {
+ newRole = mapper.readValue(result, Role.class);
+ } catch (IOException e) {
+ logger.error(EELFLoggerDelegate.errorLogger, "Failed to convert the result to Role Object", e);
+ }
+ if (newRole.getRoleFunctions() != null) {
+ @SuppressWarnings("unchecked")
+ Set<RoleFunction> roleFunctionList = newRole.getRoleFunctions();
+ Set<RoleFunction> roleFunctionListNew = new HashSet<>();
+ Iterator<RoleFunction> itetaror = roleFunctionList.iterator();
+ while (itetaror.hasNext()) {
+ Object nextValue = itetaror.next();
+ RoleFunction roleFun = mapper.convertValue(nextValue, RoleFunction.class);
+ roleFunctionListNew.add(roleFun);
+ }
+ newRole.setRoleFunctions(roleFunctionListNew);
+ }
+ return newRole;
+ }
+
+ @Override
+ @SuppressWarnings("unchecked")
+ public List<CentralizedApp> getCentralizedAppsOfUser(String userId) {
+ Map<String, String> params = new HashMap<>();
+ params.put("userId", userId);
+ List<CentralizedApp> centralizedAppsList = new ArrayList<>();
+ try{
+ centralizedAppsList = dataAccessService
+ .executeNamedQuery("getCentralizedAppsOfUser", params, null);
+ }catch (Exception e) {
+ logger.error(EELFLoggerDelegate.errorLogger, "getCentralizedAppsOfUser failed", e);
+ }
+ return centralizedAppsList;
+ }
+
+ @SuppressWarnings("unchecked")
+ public List<CentralV2Role> getGlobalRolesOfApplication(Long appId) {
+ Map<String, Long> params = new HashMap<>();
+ params.put("appId", appId);
+ List<GlobalRoleWithApplicationRoleFunction> globalRoles = new ArrayList<>();
+ try {
+ globalRoles = dataAccessService.executeNamedQuery("getGlobalRoleWithApplicationRoleFunctions", params,
+ null);
+ } catch (Exception e) {
+ logger.error(EELFLoggerDelegate.errorLogger, "getCentralizedAppsOfUser failed", e);
+ }
+ List<CentralV2Role> rolesfinalList = new ArrayList<>();
+ if (globalRoles.size() > 0)
+ rolesfinalList = finalListOfCentralRoles(globalRoles);
+ return rolesfinalList;
+ }
+
+ @SuppressWarnings("unchecked")
+ private CentralV2Role getGlobalRoleForRequestedApp(long requestedAppId, long roleId) {
+ CentralV2Role finalGlobalrole = null;
+ List<GlobalRoleWithApplicationRoleFunction> roleWithApplicationRoleFucntions = new ArrayList<>();
+ Map<String, Long> params = new HashMap<>();
+ params.put("roleId", roleId);
+ params.put("requestedAppId", requestedAppId);
+ try {
+ roleWithApplicationRoleFucntions = dataAccessService.executeNamedQuery("getGlobalRoleForRequestedApp",
+ params, null);
+ } catch (Exception e) {
+ logger.error(EELFLoggerDelegate.errorLogger, "getGlobalRoleForRequestedApp failed", e);
+ }
+ if (roleWithApplicationRoleFucntions.size() > 0) {
+ List<CentralV2Role> rolesfinalList = finalListOfCentralRoles(roleWithApplicationRoleFucntions);
+ finalGlobalrole = rolesfinalList.get(0);
+ } else {
+ List<EPRole> roleList = getPortalAppRoleInfo(roleId);
+ finalGlobalrole = convertRoleToCentralV2Role(roleList.get(0));
+ }
+ return finalGlobalrole;
+ }
+
+ private List<CentralV2Role> finalListOfCentralRoles(List<GlobalRoleWithApplicationRoleFunction> globalRoles) {
+ List<CentralV2Role> rolesfinalList = new ArrayList<>();
+ for (GlobalRoleWithApplicationRoleFunction role : globalRoles) {
+ boolean found = false;
+ for (CentralV2Role cenRole : rolesfinalList) {
+ if (role.getRoleId().equals(cenRole.getId())) {
+ SortedSet<CentralV2RoleFunction> roleFunctions = cenRole.getRoleFunctions();
+ CentralV2RoleFunction cenRoleFun = createCentralRoleFunctionForGlobalRole(role);
+ roleFunctions.add(cenRoleFun);
+ cenRole.setRoleFunctions(roleFunctions);
+ found = true;
+ break;
+ }
+ }
+ if (!found) {
+ CentralV2Role cenrole = new CentralV2Role();
+ cenrole.setName(role.getRoleName());
+ cenrole.setId(role.getRoleId());
+ cenrole.setActive(role.isActive());
+ cenrole.setPriority(role.getPriority());
+ SortedSet<CentralV2RoleFunction> roleFunctions = new TreeSet<>();
+ CentralV2RoleFunction cenRoleFun = createCentralRoleFunctionForGlobalRole(role);
+ roleFunctions.add(cenRoleFun);
+ cenrole.setRoleFunctions(roleFunctions);
+ rolesfinalList.add(cenrole);
+ }
+ }
+ return rolesfinalList;
+ }
+
+ private CentralV2RoleFunction createCentralRoleFunctionForGlobalRole(GlobalRoleWithApplicationRoleFunction role) {
+ String instance;
+ String type;
+ String action;
+ CentralV2RoleFunction cenRoleFun;
+ if(role.getFunctionCd().contains(FUNCTION_PIPE)){
+ instance = EcompPortalUtils.getFunctionCode(role.getFunctionCd());
+ type = EcompPortalUtils.getFunctionType(role.getFunctionCd());
+ action = EcompPortalUtils.getFunctionAction(role.getFunctionCd());
+ cenRoleFun = new CentralV2RoleFunction(null, instance, role.getFunctionName(), null, type, action, null);
+ } else{
+ type = getFunctionType(role.getFunctionCd());
+ action = getFunctionAction(role.getFunctionCd());
+ cenRoleFun = new CentralV2RoleFunction(null, role.getFunctionCd(), role.getFunctionName(), null, type, action, null);
+ }
+ return cenRoleFun;
+ }
+
+ @SuppressWarnings("unchecked")
+ @Override
+ public List<EPRole> getGlobalRolesOfPortal() {
+ List<EPRole> globalRoles = new ArrayList<>();
+ try {
+ globalRoles = dataAccessService.executeNamedQuery("getGlobalRolesOfPortal", null, null);
+ } catch (Exception e) {
+ logger.error(EELFLoggerDelegate.errorLogger, "getGlobalRolesOfPortal failed", e);
+ }
+ return globalRoles;
+ }
+
+ private CentralV2Role convertRoleToCentralV2Role(EPRole role) {
+ return new CentralV2Role(role.getId(), role.getCreated(), role.getModified(), role.getCreatedId(),
+ role.getModifiedId(), role.getRowNum(), role.getName(), role.getActive(), role.getPriority(),
+ new TreeSet<>(), new TreeSet<>(), new TreeSet<>());
+
+ }
+
+ @Override
+ public List<RoleFunction> convertCentralRoleFunctionToRoleFunctionObject(List<CentralV2RoleFunction> answer) {
+ List<RoleFunction> addRoleFuncList = new ArrayList<>();
+ for(CentralV2RoleFunction cenRoleFunc : answer){
+ RoleFunction setRoleFunc = new RoleFunction();
+ setRoleFunc.setCode(cenRoleFunc.getCode());
+ setRoleFunc.setName(cenRoleFunc.getName());
+ addRoleFuncList.add(setRoleFunc);
+ }
+ return addRoleFuncList;
+ }
+
+ @Override
+ public CentralUser getUserRoles(String loginId, String uebkey) throws Exception {
+ CentralUser sendUserRoles = null;
+
+ try {
+ CentralV2User cenV2User = getV2UserAppRoles(loginId, uebkey);
+ sendUserRoles = convertV2UserRolesToOlderVersion(cenV2User);
+ } catch (Exception e) {
+ logger.error(EELFLoggerDelegate.errorLogger, "getUserRoles: failed", e);
+ }
+ return sendUserRoles;
+ }
+
+ /**
+ *
+ * It returns V2 CentralUser object if user has any roles and permissions
+ *
+ * @param loginId
+ * @param uebkey
+ * @return CentralUser object
+ * @throws Exception
+ */
+ private CentralV2User getV2UserAppRoles(String loginId, String uebkey) throws Exception {
+ EPApp app;
+ List<EPUser> epUserList;
+ List<EPApp> appList = getApp(uebkey);
+ app = appList.get(0);
+ epUserList = getUser(loginId);
+ EPUser user = epUserList.get(0);
+ Set<EPUserApp> userAppSet = user.getEPUserApps();
+ return createEPUser(user, userAppSet, app);
+ }
+
+ /**
+ * It converts V2 CentralUser object to old version CentralUser object
+ *
+ * @param cenV2User
+ * @return EPUser object
+ */
+ private CentralUser convertV2UserRolesToOlderVersion(CentralV2User cenV2User) {
+ Set<CentralV2UserApp> userV2Apps = cenV2User.getUserApps();
+ Set<CentralUserApp> userApps = new TreeSet<>();
+ for(CentralV2UserApp userApp : userV2Apps){
+ CentralApp app = userApp.getApp();
+ CentralUserApp cua = new CentralUserApp();
+ cua.setUserId(null);
+ cua.setApp(app);
+ SortedSet<CentralRoleFunction> cenRoleFunction = new TreeSet<>();
+ for(CentralV2RoleFunction cenV2RoleFunc : userApp.getRole().getRoleFunctions() ){
+ CentralRoleFunction cenRoleFunc = new CentralRoleFunction(cenV2RoleFunc.getCode(), cenV2RoleFunc.getName());
+ cenRoleFunction.add(cenRoleFunc);
+ }
+ CentralRole role = new CentralRole(userApp.getRole().getId(), userApp.getRole().getName(), userApp.getRole().isActive(), userApp.getRole().getPriority(),
+ cenRoleFunction);
+ cua.setRole(role);
+ userApps.add(cua);
+ }
+ return new CentralUser(cenV2User.getId(), cenV2User.getCreated(), cenV2User.getModified(),
+ cenV2User.getCreatedId(),cenV2User.getModifiedId(),
+ cenV2User.getRowNum(), cenV2User.getOrgId(), cenV2User.getManagerId(), cenV2User.getFirstName(),
+ cenV2User.getMiddleInitial(), cenV2User.getLastName(), cenV2User.getPhone(), cenV2User.getFax(),
+ cenV2User.getCellular(),cenV2User.getEmail(),cenV2User.getAddressId(),cenV2User.getAlertMethodCd(),
+ cenV2User.getHrid(),cenV2User.getOrgUserId(),cenV2User.getOrgCode(),cenV2User.getAddress1(),
+ cenV2User.getAddress2(),cenV2User.getCity(),cenV2User.getState(),cenV2User.getZipCode(),cenV2User.getCountry(),
+ cenV2User.getOrgManagerUserId(),cenV2User.getLocationClli(),cenV2User.getBusinessCountryCode(),
+ cenV2User.getBusinessCountryName(),cenV2User.getBusinessUnit(),cenV2User.getBusinessUnitName(),
+ cenV2User.getDepartment(),cenV2User.getDepartmentName(),cenV2User.getCompanyCode(),
+ cenV2User.getCompany(),cenV2User.getZipCodeSuffix(),cenV2User.getJobTitle(),
+ cenV2User.getCommandChain(),cenV2User.getSiloStatus(),cenV2User.getCostCenter(),
+ cenV2User.getFinancialLocCode(),cenV2User.getLoginId(),cenV2User.getLoginPwd(),
+ cenV2User.getLastLoginDate(),cenV2User.isActive(),cenV2User.isInternal(),cenV2User.getSelectedProfileId(),cenV2User.getTimeZoneId(),
+ cenV2User.isOnline(),cenV2User.getChatId(),
+ userApps);
+ }
+
+ @Override
+ public List<CentralRole> convertV2CentralRoleListToOldVerisonCentralRoleList(List<CentralV2Role> v2CenRoleList) {
+ List<CentralRole> cenRoleList = new ArrayList<>();
+ SortedSet<CentralRoleFunction> cenRoleFuncList = new TreeSet<>();
+ for(CentralV2Role v2CenRole : v2CenRoleList){
+ for(CentralV2RoleFunction v2CenRoleFunc: v2CenRole.getRoleFunctions()){
+ CentralRoleFunction roleFunc = new CentralRoleFunction(v2CenRoleFunc.getCode(), v2CenRoleFunc.getName());
+ cenRoleFuncList.add(roleFunc);
+ }
+ CentralRole role = new CentralRole(v2CenRole.getId(), v2CenRole.getName(), v2CenRole.isActive(), v2CenRole.getPriority(), cenRoleFuncList);
+ cenRoleList.add(role);
+ }
+ return cenRoleList;
+ }
+
+ @Override
+ public ResponseEntity<String> getNameSpaceIfExists(EPApp app) throws Exception {
+ HttpHeaders headers = EcompPortalUtils.base64encodeKeyForAAFBasicAuth();
+ HttpEntity<String> entity = new HttpEntity<>(headers);
+ logger.debug(EELFLoggerDelegate.debugLogger, "checkIfNameSpaceExists: Connecting to External Auth system");
+ ResponseEntity<String> response = null;
+ try {
+ response = template
+ .exchange(SystemProperties.getProperty(EPCommonSystemProperties.EXTERNAL_CENTRAL_ACCESS_URL)
+ + "nss/" + app.getNameSpace(), HttpMethod.GET, entity, String.class);
+ logger.debug(EELFLoggerDelegate.debugLogger, "checkIfNameSpaceExists: Finished ",
+ response.getStatusCode().value());
+ } catch (HttpClientErrorException e) {
+ logger.error(EELFLoggerDelegate.errorLogger, "checkIfNameSpaceExists failed", e);
+ EPLogUtil.logExternalAuthAccessAlarm(logger, e.getStatusCode());
+ if (e.getStatusCode() == HttpStatus.NOT_FOUND)
+ throw new InvalidApplicationException("Invalid NameSpace");
+ else
+ throw e;
+ }
+ return response;
+ }
+
+ @Override
+ public CentralRole convertV2CentralRoleToOldVerisonCentralRole(CentralV2Role v2CenRole) {
+ SortedSet<CentralRoleFunction> cenRoleFuncList = new TreeSet<>();
+ for (CentralV2RoleFunction v2CenRoleFunc : v2CenRole.getRoleFunctions()) {
+ CentralRoleFunction roleFunc = new CentralRoleFunction(v2CenRoleFunc.getCode(), v2CenRoleFunc.getName());
+ cenRoleFuncList.add(roleFunc);
+ }
+ return new CentralRole(v2CenRole.getId(), v2CenRole.getName(), v2CenRole.isActive(), v2CenRole.getPriority(),
+ cenRoleFuncList);
+ }
+
+ @SuppressWarnings("unchecked")
+ @Override
+ public Integer bulkUploadUsersSingleRole(String uebkey, Long roleId, String modifiedRoleName) throws Exception {
+ EPApp app = getApp(uebkey).get(0);
+ final Map<String, String> params = new HashMap<>();
+ params.put("uebKey", app.getUebKey());
+ params.put("roleId", String.valueOf(roleId));
+ List<BulkUploadUserRoles> userRolesList = null;
+ Integer userRolesAdded = 0;
+ if (app.getCentralAuth()) {
+ userRolesList = dataAccessService.executeNamedQuery("getBulkUsersForSingleRole", params, null);
+ for (BulkUploadUserRoles userRolesUpload : userRolesList) {
+ userRolesUpload.setRoleName(modifiedRoleName);
+ if(!userRolesUpload.getOrgUserId().equals("su1234")){
+ addUserRoleInExternalSystem(userRolesUpload);
+ userRolesAdded++;
+ }
+ }
+ }
+ return userRolesAdded;
+ }
+
+ @Override
+ public String encodeFunctionCode(String funCode){
+ String encodedString = funCode;
+ List<Pattern> encodingList = new ArrayList<>();
+ encodingList.add(Pattern.compile("/"));
+ encodingList.add(Pattern.compile("-"));
+ for (Pattern xssInputPattern : encodingList) {
+ encodedString = xssInputPattern.matcher(encodedString)
+ .replaceAll("%" + Hex.encodeHexString(xssInputPattern.toString().getBytes()));
+ }
+ encodedString = encodedString.replaceAll("\\*", "%"+ Hex.encodeHexString("*".getBytes()));
+ return encodedString;
+ }
+}
diff --git a/ecomp-portal-BE-common/src/main/java/org/onap/portalapp/portal/service/FunctionalMenuService.java b/ecomp-portal-BE-common/src/main/java/org/onap/portalapp/portal/service/FunctionalMenuService.java
new file mode 100644
index 00000000..fa703bdf
--- /dev/null
+++ b/ecomp-portal-BE-common/src/main/java/org/onap/portalapp/portal/service/FunctionalMenuService.java
@@ -0,0 +1,76 @@
+/*-
+ * ============LICENSE_START==========================================
+ * ONAP Portal
+ * ===================================================================
+ * Copyright (C) 2017 AT&T Intellectual Property. All rights reserved.
+ * ===================================================================
+ *
+ * Unless otherwise specified, all software contained herein is licensed
+ * under the Apache License, Version 2.0 (the "License");
+ * you may not use this software 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.
+ *
+ * Unless otherwise specified, all documentation contained herein is licensed
+ * under the Creative Commons License, Attribution 4.0 Intl. (the "License");
+ * you may not use this documentation except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * https://creativecommons.org/licenses/by/4.0/
+ *
+ * Unless required by applicable law or agreed to in writing, documentation
+ * 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.
+ *
+ * ============LICENSE_END============================================
+ *
+ * ECOMP is a trademark and service mark of AT&T Intellectual Property.
+ */
+package org.onap.portalapp.portal.service;
+
+import java.util.List;
+
+import org.onap.portalapp.portal.domain.EPUser;
+import org.onap.portalapp.portal.domain.FunctionalMenuItemWithAppID;
+import org.onap.portalapp.portal.transport.BusinessCardApplicationRole;
+import org.onap.portalapp.portal.transport.FavoritesFunctionalMenuItem;
+import org.onap.portalapp.portal.transport.FavoritesFunctionalMenuItemJson;
+import org.onap.portalapp.portal.transport.FieldsValidator;
+import org.onap.portalapp.portal.transport.FunctionalMenuItem;
+import org.onap.portalapp.portal.transport.FunctionalMenuItemWithRoles;
+import org.onap.portalapp.portal.transport.FunctionalMenuRole;
+
+public interface FunctionalMenuService {
+ List<FunctionalMenuItem> getFunctionalMenuItems (EPUser user);
+ // return all active menu items
+ List<FunctionalMenuItem> getFunctionalMenuItems ();
+ // return all active menu items. If all is true, return all active and inactive menu items.
+ List<FunctionalMenuItem> getFunctionalMenuItems(Boolean all);
+ // return all active Functional menu items for Notification Tree in User Notification . If all is true, return all active menu items.
+ List<FunctionalMenuItem> getFunctionalMenuItemsForNotificationTree(Boolean all);
+ List<FunctionalMenuItem> getFunctionalMenuItemsForApp (Integer appId);
+ List<FunctionalMenuItem> getFunctionalMenuItemsForUser (String orgUserId);
+ FunctionalMenuItem getFunctionalMenuItemDetails (Long menuid);
+ FieldsValidator createFunctionalMenuItem (FunctionalMenuItemWithRoles menuItemJson);
+ FieldsValidator editFunctionalMenuItem (FunctionalMenuItemWithRoles menuItemJson);
+ FieldsValidator deleteFunctionalMenuItem (Long menuId);
+ FieldsValidator regenerateAncestorTable ();
+ //Methods relevant to favorites
+ FieldsValidator setFavoriteItem(FavoritesFunctionalMenuItem menuItemJson);
+ List<FavoritesFunctionalMenuItemJson> getFavoriteItems(Long userId);
+ FieldsValidator removeFavoriteItem (Long userId, Long menuId);
+ List<FunctionalMenuItem> transformFunctionalMenuItemWithAppIDToFunctionalMenuItem(List<FunctionalMenuItemWithAppID> functionalMenuItemWithAppIDList);
+ List<FunctionalMenuRole> getFunctionalMenuRole();
+ //Assign URLs under Help Menu
+ void assignHelpURLs(List<FunctionalMenuItem> menuItems);
+ List<BusinessCardApplicationRole> getUserAppRolesList(String userId);
+}
diff --git a/ecomp-portal-BE-common/src/main/java/org/onap/portalapp/portal/service/FunctionalMenuServiceImpl.java b/ecomp-portal-BE-common/src/main/java/org/onap/portalapp/portal/service/FunctionalMenuServiceImpl.java
new file mode 100644
index 00000000..a6a4ca31
--- /dev/null
+++ b/ecomp-portal-BE-common/src/main/java/org/onap/portalapp/portal/service/FunctionalMenuServiceImpl.java
@@ -0,0 +1,1016 @@
+/*-
+ * ============LICENSE_START==========================================
+ * ONAP Portal
+ * ===================================================================
+ * Copyright (C) 2017 AT&T Intellectual Property. All rights reserved.
+ * ===================================================================
+ *
+ * Unless otherwise specified, all software contained herein is licensed
+ * under the Apache License, Version 2.0 (the "License");
+ * you may not use this software 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.
+ *
+ * Unless otherwise specified, all documentation contained herein is licensed
+ * under the Creative Commons License, Attribution 4.0 Intl. (the "License");
+ * you may not use this documentation except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * https://creativecommons.org/licenses/by/4.0/
+ *
+ * Unless required by applicable law or agreed to in writing, documentation
+ * 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.
+ *
+ * ============LICENSE_END============================================
+ *
+ * ECOMP is a trademark and service mark of AT&T Intellectual Property.
+ */
+package org.onap.portalapp.portal.service;
+
+import java.util.ArrayList;
+import java.util.HashMap;
+import java.util.List;
+import java.util.Map;
+
+import javax.annotation.PostConstruct;
+import javax.servlet.http.HttpServletResponse;
+
+import org.apache.commons.lang3.StringUtils;
+import org.hibernate.Criteria;
+import org.hibernate.Query;
+import org.hibernate.Session;
+import org.hibernate.SessionFactory;
+import org.hibernate.Transaction;
+import org.hibernate.criterion.Criterion;
+import org.hibernate.criterion.Projections;
+import org.hibernate.criterion.Restrictions;
+import org.onap.portalapp.portal.domain.EPApp;
+import org.onap.portalapp.portal.domain.EPUser;
+import org.onap.portalapp.portal.domain.FunctionalMenuItemWithAppID;
+import org.onap.portalapp.portal.logging.aop.EPMetricsLog;
+import org.onap.portalapp.portal.transport.BusinessCardApplicationRole;
+import org.onap.portalapp.portal.transport.FavoritesFunctionalMenuItem;
+import org.onap.portalapp.portal.transport.FavoritesFunctionalMenuItemJson;
+import org.onap.portalapp.portal.transport.FieldsValidator;
+import org.onap.portalapp.portal.transport.FunctionalMenuItem;
+import org.onap.portalapp.portal.transport.FunctionalMenuItemWithRoles;
+import org.onap.portalapp.portal.transport.FunctionalMenuRole;
+import org.onap.portalapp.portal.utils.EPCommonSystemProperties;
+import org.onap.portalapp.portal.utils.EcompPortalUtils;
+import org.onap.portalsdk.core.logging.logic.EELFLoggerDelegate;
+import org.onap.portalsdk.core.service.DataAccessService;
+import org.onap.portalsdk.core.util.SystemProperties;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.context.annotation.EnableAspectJAutoProxy;
+import org.springframework.stereotype.Service;
+
+@Service("functionalMenuService")
+@org.springframework.context.annotation.Configuration
+@EnableAspectJAutoProxy
+@EPMetricsLog
+public class FunctionalMenuServiceImpl implements FunctionalMenuService {
+ EELFLoggerDelegate logger = EELFLoggerDelegate.getLogger(FunctionalMenuServiceImpl.class);
+
+ private Long ACCOUNT_ADMIN_ROLE_ID = 999L;
+ private String RESTRICTED_APP_ROLE_ID = "900";
+
+ @Autowired
+ private DataAccessService dataAccessService;
+ @Autowired
+ private SessionFactory sessionFactory;
+
+ @PostConstruct
+ private void init() {
+ try {
+ ACCOUNT_ADMIN_ROLE_ID = Long
+ .valueOf(SystemProperties.getProperty(EPCommonSystemProperties.ACCOUNT_ADMIN_ROLE_ID));
+ RESTRICTED_APP_ROLE_ID = SystemProperties.getProperty(EPCommonSystemProperties.RESTRICTED_APP_ROLE_ID);
+ } catch (Exception e) {
+ }
+ }
+
+ public List<FunctionalMenuItem> getFunctionalMenuItems(EPUser user) {
+ List<FunctionalMenuItem> menuItems = new ArrayList<FunctionalMenuItem>();
+ return menuItems;
+ }
+
+ public List<FunctionalMenuItem> getFunctionalMenuItems() {
+ return getFunctionalMenuItems(false);
+ }
+
+ public List<FunctionalMenuItem> getFunctionalMenuItems(Boolean all) {
+ // Divide this into 2 queries: one which returns the bottom-level menu items
+ // associated with Restricted apps,
+ // and one that returns all the other menu items. Then we can easily add the
+ // boolean flag
+ // restrictedApp to each FunctionalMenuItem, to be used by the front end.
+ String activeWhereClause = "";
+ if (!all) {
+ activeWhereClause = " AND UPPER(m.active_yn) = 'Y' ";
+ }
+ String sql = "SELECT m.menu_id, m.column_num, m.text, m.parent_menu_id, m.url, m.active_yn, r.app_id "
+ + "FROM fn_menu_functional m, fn_menu_functional_roles r " + "WHERE m.menu_id = r.menu_id "
+ + activeWhereClause // " AND UPPER(m.active_yn) = 'Y' "
+ + " AND r.role_id != '" + RESTRICTED_APP_ROLE_ID + "' " + " UNION "
+ + " SELECT m.menu_id, m.column_num, m.text, m.parent_menu_id, m.url, m.active_yn,-1 app_id "
+ + " FROM fn_menu_functional m " + " WHERE m.url='' " + activeWhereClause; // " AND UPPER(m.active_yn) =
+ // 'Y' ";
+ logQuery(sql);
+
+ @SuppressWarnings("unchecked")
+ List<FunctionalMenuItemWithAppID> menuItemsWithAppIdList = dataAccessService.executeSQLQuery(sql,
+ FunctionalMenuItemWithAppID.class, null);
+ List<FunctionalMenuItem> menuItems = new ArrayList<>();
+ menuItems = transformFunctionalMenuItemWithAppIDToFunctionalMenuItem(menuItemsWithAppIdList);
+ for (FunctionalMenuItem menuItem : menuItems) {
+ menuItem.restrictedApp = false;
+ }
+
+ sql = "SELECT m.menu_id, m.column_num, m.text, m.parent_menu_id, m.url, m.active_yn, r.app_id "
+ + "FROM fn_menu_functional m, fn_menu_functional_roles r " + "WHERE m.menu_id = r.menu_id "
+ + activeWhereClause // " AND UPPER(m.active_yn) = 'Y' "
+ + " AND r.role_id = '" + RESTRICTED_APP_ROLE_ID + "' ";
+ logQuery(sql);
+ @SuppressWarnings("unchecked")
+ List<FunctionalMenuItem> menuItems2 = dataAccessService.executeSQLQuery(sql, FunctionalMenuItem.class, null);
+ for (FunctionalMenuItem menuItem : menuItems2) {
+ menuItem.restrictedApp = true;
+ menuItems.add(menuItem);
+ }
+
+ return menuItems;
+ }
+
+ public List<FunctionalMenuItem> getFunctionalMenuItemsForNotificationTree(Boolean all) {
+ // Divide this into 2 queries: one which returns the bottom-level menu items
+ // associated with Restricted apps,
+ // and one that returns all the other menu items which are active. Then we can
+ // easily add the boolean flag
+ // restrictedApp to each FunctionalMenuItem, to be used by the front end.
+ String activeWhereClause = "";
+ if (!all) {
+ activeWhereClause = " AND UPPER(m.active_yn) = 'Y' ";
+ }
+ String sql = "SELECT m.menu_id, m.column_num, m.text, m.parent_menu_id, m.url, m.active_yn, r.app_id "
+ + "FROM fn_menu_functional m, fn_menu_functional_roles r " + "WHERE m.menu_id = r.menu_id "
+ + activeWhereClause + " AND UPPER(m.active_yn) = 'Y' " + " AND r.role_id != '" + RESTRICTED_APP_ROLE_ID
+ + "' " + " UNION "
+ + " SELECT m.menu_id, m.column_num, m.text, m.parent_menu_id, m.url, m.active_yn,-1 app_id "
+ + " FROM fn_menu_functional m " + " WHERE m.url='' " + activeWhereClause
+ + " AND UPPER(m.active_yn) = 'Y' ";
+ logQuery(sql);
+
+ @SuppressWarnings("unchecked")
+ List<FunctionalMenuItemWithAppID> menuItemsWithAppIdList = dataAccessService.executeSQLQuery(sql,
+ FunctionalMenuItemWithAppID.class, null);
+ List<FunctionalMenuItem> menuItems = new ArrayList<>();
+ menuItems = transformFunctionalMenuItemWithAppIDToFunctionalMenuItem(menuItemsWithAppIdList);
+ for (FunctionalMenuItem menuItem : menuItems) {
+ menuItem.restrictedApp = false;
+ }
+
+ sql = "SELECT m.menu_id, m.column_num, m.text, m.parent_menu_id, m.url, m.active_yn, r.app_id "
+ + "FROM fn_menu_functional m, fn_menu_functional_roles r " + "WHERE m.menu_id = r.menu_id "
+ + activeWhereClause + " AND UPPER(m.active_yn) = 'Y' " + " AND r.role_id = '" + RESTRICTED_APP_ROLE_ID
+ + "' ";
+ logQuery(sql);
+ @SuppressWarnings("unchecked")
+ List<FunctionalMenuItem> menuItems2 = dataAccessService.executeSQLQuery(sql, FunctionalMenuItem.class, null);
+ for (FunctionalMenuItem menuItem : menuItems2) {
+ menuItem.restrictedApp = true;
+ menuItems.add(menuItem);
+ }
+
+ return menuItems;
+ }
+
+ public List<FunctionalMenuItem> getFunctionalMenuItemsForApp(Integer appId) {
+ String sql = "SELECT DISTINCT m1.menu_id, m1.column_num, m1.text, m1.parent_menu_id, m1.url, m.active_yn "
+ + " FROM fn_menu_functional m, fn_menu_functional m1, fn_menu_functional_ancestors a, fn_menu_functional_roles mr "
+ + " WHERE " + " mr.app_id='" + appId + "' " + " AND mr.menu_id = m.menu_id "
+ + " AND UPPER(m.active_yn) = 'Y'" + " AND UPPER(m1.active_yn) ='Y'" + " AND a.menu_id = m.menu_id "
+ + " AND a.ancestor_menu_id = m1.menu_id";
+ logQuery(sql);
+ logger.debug(EELFLoggerDelegate.debugLogger, "getFunctionalMenuItemsForApp: logged the query");
+
+ @SuppressWarnings("unchecked")
+ List<FunctionalMenuItem> menuItems = dataAccessService.executeSQLQuery(sql, FunctionalMenuItem.class, null);
+
+ return menuItems;
+ }
+
+ /**
+ * convert List of FunctionalMenuItemWithAppID into List of FunctionalMenuItem
+ *
+ */
+ public List<FunctionalMenuItem> transformFunctionalMenuItemWithAppIDToFunctionalMenuItem(
+ List<FunctionalMenuItemWithAppID> functionalMenuItemWithAppIDList) {
+ List<FunctionalMenuItem> functionalMenuItemList = new ArrayList<FunctionalMenuItem>();
+ for (FunctionalMenuItemWithAppID functionalMenuItemWithAppID : functionalMenuItemWithAppIDList) {
+ FunctionalMenuItem menuItem = new FunctionalMenuItem();
+ menuItem.menuId = functionalMenuItemWithAppID.menuId;
+ menuItem.column = functionalMenuItemWithAppID.column;
+ menuItem.text = functionalMenuItemWithAppID.text;
+ menuItem.parentMenuId = functionalMenuItemWithAppID.parentMenuId;
+ menuItem.url = functionalMenuItemWithAppID.url;
+ menuItem.active_yn = functionalMenuItemWithAppID.active_yn;
+ menuItem.appid = functionalMenuItemWithAppID.appid;
+ menuItem.setRoles(functionalMenuItemWithAppID.roles);
+ menuItem.restrictedApp = functionalMenuItemWithAppID.restrictedApp;
+ functionalMenuItemList.add(menuItem);
+ }
+ return functionalMenuItemList;
+ }
+
+ public List<FunctionalMenuItem> getFunctionalMenuItemsForUser(String orgUserId) {
+ // m represents the functional menu items that are the leaf nodes
+ // m1 represents the functional menu items for all the nodes
+
+ // Divide this into 2 queries: one which returns the bottom-level menu items
+ // associated with Restricted apps,
+ // and one that returns all the other menu items. Then we can easily add the
+ // boolean flag
+ // restrictedApp to each FunctionalMenuItem, to be used by the front end.
+ String sql = "SELECT DISTINCT m1.menu_id, m1.column_num, m1.text, m1.parent_menu_id, m1.url, m.active_yn "
+ + " FROM fn_menu_functional m, fn_menu_functional m1, fn_menu_functional_ancestors a, "
+ + " fn_menu_functional_roles mr, fn_user u , fn_user_role ur " + " WHERE " + " u.org_user_id='"
+ + orgUserId + "' " + " AND u.user_id = ur.user_id " + " AND ur.app_id = mr.app_id " +
+ // " AND ur.role_id = mr.role_id " +
+ " AND (ur.role_id = mr.role_id " + " OR ur.role_id = '" + ACCOUNT_ADMIN_ROLE_ID + "') "
+ + " AND m.menu_id = mr.menu_id " + " AND UPPER(m.active_yn) = 'Y'" + " AND UPPER(m1.active_yn) ='Y' "
+ + " AND a.menu_id = m.menu_id " + " AND a.ancestor_menu_id = m1.menu_id " + " UNION "
+ // the ancestors of the restricted app menu items
+ + " select m1.menu_id, m1.column_num, m1.text, m1.parent_menu_id, m1.url, m1.active_yn "
+ + " FROM fn_menu_functional m, fn_menu_functional_roles mr, fn_menu_functional m1, "
+ + " fn_menu_functional_ancestors a " + " where a.menu_id = m.menu_id "
+ + " AND a.ancestor_menu_id = m1.menu_id " + " AND m.menu_id != m1.menu_id "
+ + " AND m.menu_id = mr.menu_id " + " AND mr.role_id = '" + RESTRICTED_APP_ROLE_ID + "' "
+ + " AND UPPER(m.active_yn) = 'Y'" + " AND UPPER(m1.active_yn) ='Y' "
+ // Add the Favorites menu item
+ + " UNION " + " SELECT m.menu_id, m.column_num, m.text, m.parent_menu_id, m.url, m.active_yn "
+ + " FROM fn_menu_functional m "
+ + " WHERE m.text in ('Favorites','Get Access','Contact Us','Support','User Guide','Help')";
+
+ logQuery(sql);
+ logger.debug(EELFLoggerDelegate.debugLogger, "getFunctionalMenuItemsForUser: logged the query");
+
+ @SuppressWarnings("unchecked")
+ List<FunctionalMenuItem> menuItems = dataAccessService.executeSQLQuery(sql, FunctionalMenuItem.class, null);
+ for (FunctionalMenuItem menuItem : menuItems) {
+ menuItem.restrictedApp = false;
+ }
+
+ sql = " SELECT m.menu_id, m.column_num, m.text, m.parent_menu_id, m.url, m.active_yn "
+ + " FROM fn_menu_functional m, fn_menu_functional_roles r " + " WHERE m.menu_id = r.menu_id "
+ + " AND UPPER(m.active_yn) = 'Y' " + " AND r.role_id = '" + RESTRICTED_APP_ROLE_ID + "' ";
+ logQuery(sql);
+ @SuppressWarnings("unchecked")
+ List<FunctionalMenuItem> menuItems2 = dataAccessService.executeSQLQuery(sql, FunctionalMenuItem.class, null);
+ for (FunctionalMenuItem menuItem : menuItems2) {
+ menuItem.restrictedApp = true;
+ menuItems.add(menuItem);
+ }
+
+ return menuItems;
+ }
+
+ public FunctionalMenuItem getFunctionalMenuItemDetails(Long menuid) {
+ // First, fill in the fields that apply to all menu items
+
+ List<FunctionalMenuItem> menuItems = getFunctionalMenuItem(menuid);
+ FunctionalMenuItem menuItem = (menuItems == null || menuItems.isEmpty() ? null : menuItems.get(0));
+ // If it is a bottom-level menu item, must fill in the appid and the
+ // roles
+ List<FunctionalMenuRole> roleItems = getFunctionalMenuRoleWithMenuId(menuid);
+ if (roleItems.size() > 0 && menuItem != null) {
+ Integer appid = roleItems.get(0).appId;
+ menuItem.appid = appid;
+ List<Integer> roles = new ArrayList<Integer>();
+ for (FunctionalMenuRole roleItem : roleItems) {
+ logger.debug(EELFLoggerDelegate.debugLogger,
+ "LR: app_id: " + roleItem.appId + "; role_id: " + roleItem.roleId + "\n");
+ roles.add(roleItem.roleId);
+ }
+ menuItem.setRoles(roles);
+ }
+
+ return menuItem;
+ }
+
+ @SuppressWarnings("unchecked")
+ private List<FunctionalMenuItem> getFunctionalMenuItem(Long menuid) {
+ List<Criterion> restrictionsList = new ArrayList<Criterion>();
+ Criterion textCriterion = Restrictions.eq("menuId",menuid);
+ restrictionsList.add(textCriterion);
+ return (List<FunctionalMenuItem>) dataAccessService.getList(FunctionalMenuItem.class, null, restrictionsList, null);
+ }
+
+ @SuppressWarnings("unchecked")
+ private List<FunctionalMenuRole> getFunctionalMenuRoleWithMenuId(Long menuid) {
+ List<Criterion> restrictionsList = new ArrayList<Criterion>();
+ Criterion textCriterion = Restrictions.eq("menuId",menuid);
+ restrictionsList.add(textCriterion);
+ return (List<FunctionalMenuRole>) dataAccessService.getList(FunctionalMenuRole.class, null, restrictionsList, null);
+ }
+
+ private FieldsValidator menuItemFieldsChecker(FunctionalMenuItemWithRoles menuItemJson) {
+ FieldsValidator fieldsValidator = new FieldsValidator();
+ try {
+ // TODO: validate all the fields
+ List<FunctionalMenuItem> functionalMenuItems = getFunctionalMenuItemWithText(menuItemJson);
+ boolean dublicatedName = false;
+ for (FunctionalMenuItem fnMenuItem : functionalMenuItems) {
+ if (menuItemJson.menuId != null && menuItemJson.menuId.equals(fnMenuItem.menuId)) {
+ // FunctionalMenuItem should not be compared with itself
+ continue;
+ }
+
+ if (!dublicatedName && fnMenuItem.text.equalsIgnoreCase(menuItemJson.text)) {
+ dublicatedName = true;
+ break;
+ }
+ }
+ if (dublicatedName) {
+ fieldsValidator.addProblematicFieldName("text");
+ fieldsValidator.httpStatusCode = new Long(HttpServletResponse.SC_CONFLICT);
+ fieldsValidator.errorCode = new Long(EPCommonSystemProperties.DUBLICATED_FIELD_VALUE_ECOMP_ERROR);
+ logger.debug(EELFLoggerDelegate.debugLogger,
+ "In menuItemFieldsChecker, Error: we have an duplicate text field");
+ } else if (StringUtils.isEmpty(menuItemJson.text) && menuItemJson.menuId == null) {
+ // text must be non empty for a create. For an edit, can be empty, which means
+ // it is a move request.
+ // a null menuId indicates a create.
+ fieldsValidator.addProblematicFieldName("text");
+ fieldsValidator.httpStatusCode = new Long(HttpServletResponse.SC_BAD_REQUEST);
+ logger.debug(EELFLoggerDelegate.debugLogger,
+ "In menuItemFieldsChecker, Error: we have an empty text field");
+ } else {
+ // The url, appid, and roles must either be all filled or all empty.
+ Boolean urlIsEmpty = StringUtils.isEmpty(menuItemJson.url);
+ Boolean rolesIsEmpty = menuItemJson.getRoles() == null || menuItemJson.getRoles().isEmpty();
+ Boolean appidIsEmpty = menuItemJson.appid == null || menuItemJson.appid == 0;
+ logger.debug(EELFLoggerDelegate.debugLogger, "LR: menuItemfieldsChecker: urlIsEmpty: " + urlIsEmpty
+ + "; rolesIsEmpty: " + rolesIsEmpty + "; appidIsEmpty: " + appidIsEmpty + "\n");
+ if (!((urlIsEmpty && rolesIsEmpty && appidIsEmpty)
+ || (!urlIsEmpty && !rolesIsEmpty && !appidIsEmpty))) {
+ fieldsValidator.addProblematicFieldName("url,roles,appid");
+ fieldsValidator.httpStatusCode = new Long(HttpServletResponse.SC_BAD_REQUEST);
+ logger.debug(EELFLoggerDelegate.debugLogger,
+ "In menuItemFieldsChecker, Error: we don't have: either all 3 fields empty or all 3 fields nonempty");
+ } else {
+ logger.debug(EELFLoggerDelegate.debugLogger,
+ "In menuItemFieldsChecker, Success: either all 3 fields empty or all 3 fields nonempty");
+ }
+ }
+ } catch (Exception e) {
+ logger.error(EELFLoggerDelegate.errorLogger, "menuItemFieldsChecker failed", e);
+ fieldsValidator.httpStatusCode = new Long(HttpServletResponse.SC_INTERNAL_SERVER_ERROR);
+ }
+
+ return fieldsValidator;
+ }
+
+ @SuppressWarnings("unchecked")
+ private List<FunctionalMenuItem> getFunctionalMenuItemWithText(FunctionalMenuItemWithRoles menuItemJson) {
+ List<Criterion> restrictionsList = new ArrayList<Criterion>();
+ Criterion textCriterion = Restrictions.eq("text",menuItemJson.text);
+ restrictionsList.add(textCriterion);
+ return (List<FunctionalMenuItem>) dataAccessService.getList(FunctionalMenuItem.class, null, restrictionsList, null);
+ }
+
+ // Turn foreign key checks on or off
+ protected void setForeignKeys(Session localSession, Boolean on) {
+ String keyCheck = "0";
+ if (on) {
+ keyCheck = "1";
+ }
+ String sql = "set FOREIGN_KEY_CHECKS=" + keyCheck;
+ logQuery(sql);
+ Query query = localSession.createSQLQuery(sql);
+ query.executeUpdate();
+ }
+
+ public FieldsValidator createFunctionalMenuItem(FunctionalMenuItemWithRoles menuItemJson) {
+ FieldsValidator fieldsValidator = menuItemFieldsChecker(menuItemJson);
+ if (fieldsValidator.httpStatusCode.intValue() == HttpServletResponse.SC_OK) {
+ logger.debug(EELFLoggerDelegate.debugLogger, "LR: createFunctionalMenuItem: test 1");
+ boolean result = false;
+ Session localSession = null;
+ Transaction transaction = null;
+ try {
+ FunctionalMenuItem menuItem = new FunctionalMenuItem();
+ menuItem.appid = menuItemJson.appid;
+ menuItem.setRoles(menuItemJson.getRoles());
+ menuItem.url = menuItemJson.url;
+ menuItem.text = menuItemJson.text;
+ menuItem.parentMenuId = menuItemJson.parentMenuId;
+ menuItem.active_yn = "Y";
+ localSession = sessionFactory.openSession();
+
+ // If the app is disabled, deactivate the menu item.
+ if (menuItemJson.appid != null) {
+ Long appidLong = Long.valueOf(menuItemJson.appid);
+ EPApp app = (EPApp) localSession.get(EPApp.class, appidLong);
+ if (app != null && !app.getEnabled()) {
+ menuItem.active_yn = "N";
+ }
+ }
+
+ // Set the column number to 1 higher than the highest column
+ // number under this parent.
+ Criteria criteria = localSession.createCriteria(FunctionalMenuItem.class);
+ criteria.setProjection(Projections.max("column"));
+ criteria.add(Restrictions.eq("parentMenuId", menuItem.parentMenuId));
+ Integer maxColumn = (Integer) criteria.uniqueResult();
+ if (maxColumn == null) {
+ maxColumn = 0;
+ }
+ menuItem.column = maxColumn + 1;
+ logger.debug(EELFLoggerDelegate.debugLogger, "about to create menu item: " + menuItem.toString());
+
+ transaction = localSession.beginTransaction();
+ // localSession.saveOrUpdate(newMenuItem);
+ localSession.save(menuItem);
+ Long menuid = menuItem.menuId;
+ menuItemJson.menuId = menuid;
+ logger.debug(EELFLoggerDelegate.debugLogger, "after saving menu object, new id: " + menuid);
+
+ // Next, save all the roles
+
+ addRoles(menuItemJson, localSession);
+ transaction.commit();
+ result = true;
+ } catch (Exception e) {
+ logger.error(EELFLoggerDelegate.errorLogger, "createFunctionalMenuItem failed", e);
+ EcompPortalUtils.rollbackTransaction(transaction,
+ "createFunctionalMenuItem rollback, exception = " + e.toString());
+ } finally {
+ EcompPortalUtils.closeLocalSession(localSession, "createFunctionalMenuItem");
+ }
+ if (result) {
+ } else {
+ logger.debug(EELFLoggerDelegate.debugLogger,
+ "LR: createFunctionalMenuItem: no result. setting httpStatusCode to "
+ + HttpServletResponse.SC_INTERNAL_SERVER_ERROR);
+ fieldsValidator.httpStatusCode = new Long(HttpServletResponse.SC_INTERNAL_SERVER_ERROR);
+ }
+ } else {
+ logger.error(EELFLoggerDelegate.errorLogger,
+ "FunctionalMenuServiceImpl.createFunctionalMenuItem: bad request");
+ }
+ return fieldsValidator;
+ }
+
+ /* Add all the roles in the menu item to the database */
+ public void addRoles(FunctionalMenuItemWithRoles menuItemJson, Session localSession) {
+ logger.debug(EELFLoggerDelegate.debugLogger, "entering addRoles.");
+ List<Integer> roles = menuItemJson.getRoles();
+ if (roles != null && roles.size() > 0) {
+ Integer appid = menuItemJson.appid;
+ Long menuid = menuItemJson.menuId;
+ for (Integer roleid : roles) {
+ logger.debug(EELFLoggerDelegate.debugLogger, "about to create record for role: " + roleid);
+ FunctionalMenuRole role = new FunctionalMenuRole();
+ role.appId = appid;
+ role.menuId = menuid;
+ role.roleId = roleid;
+ localSession.save(role);
+ logger.debug(EELFLoggerDelegate.debugLogger, "after saving role menu object, new id: " + role.id);
+ }
+ }
+ }
+
+ /* Delete all the roles associated with the menu item from the database */
+ public void deleteRoles(Long menuId) {
+ dataAccessService.deleteDomainObjects(FunctionalMenuRole.class, "menu_id='" + menuId + "'", null);
+ }
+
+ /* Delete all favorites associated with the menu item from the database */
+ public void deleteFavorites(Long menuId) {
+ dataAccessService.deleteDomainObjects(FavoritesFunctionalMenuItem.class, "menu_id='" + menuId + "'", null);
+ }
+
+ private Boolean parentMenuIdEqual(Integer menuId1, Integer menuId2) {
+ return ((menuId1 == null && menuId2 == null) || (menuId1 != null && menuId1.equals(menuId2)));
+ }
+
+ private void updateColumnForSiblings(Session localSession, Long menuId, Integer oldParentMenuId,
+ Integer newParentMenuId, Integer oldColumn, Integer newColumn) {
+ logger.debug(EELFLoggerDelegate.debugLogger, "entering updateColumnForSiblings");
+ Criteria criteria = localSession.createCriteria(FunctionalMenuItem.class);
+ criteria.add(Restrictions.ne("menuId", menuId));
+ if (parentMenuIdEqual(oldParentMenuId, newParentMenuId)) {
+ logger.debug(EELFLoggerDelegate.debugLogger, "moving under the same parent");
+ // We are moving to a new position under the same parent
+ if (newParentMenuId == null) {
+ logger.debug(EELFLoggerDelegate.debugLogger, "newParentMenuId is null, so using isNull");
+ criteria.add(Restrictions.isNull("parentMenuId"));
+ } else {
+ logger.debug(EELFLoggerDelegate.debugLogger, "newParentMenuId is NOT null, so using eq");
+ criteria.add(Restrictions.eq("parentMenuId", newParentMenuId));
+ }
+ if (oldColumn > newColumn) {
+ logger.debug(EELFLoggerDelegate.debugLogger, "moving to a lower column under the same parent");
+ // We are moving to a lower column under the same parent
+ criteria.add(Restrictions.ge("column", newColumn));
+ criteria.add(Restrictions.lt("column", oldColumn));
+ @SuppressWarnings("unchecked")
+ List<FunctionalMenuItem> menuItems = criteria.list();
+ for (FunctionalMenuItem menuItem : menuItems) {
+ menuItem.column += 1;
+ localSession.save(menuItem);
+ }
+ } else if (oldColumn < newColumn) {
+ logger.debug(EELFLoggerDelegate.debugLogger, "moving to a higher column under the same parent");
+ // We are moving to a higher column under the same parent
+ criteria.add(Restrictions.gt("column", oldColumn));
+ criteria.add(Restrictions.le("column", newColumn));
+ @SuppressWarnings("unchecked")
+ List<FunctionalMenuItem> menuItems = criteria.list();
+ for (FunctionalMenuItem menuItem : menuItems) {
+ menuItem.column -= 1;
+ localSession.save(menuItem);
+ }
+ } else {
+ // No info has changed
+ logger.debug(EELFLoggerDelegate.debugLogger, "no info has changed, so we are not moving");
+ }
+ } else {
+ logger.debug(EELFLoggerDelegate.debugLogger, "moving under a new parent");
+ // We are moving under a new parent.
+
+ // Adjust the children under the old parent
+ logger.debug(EELFLoggerDelegate.debugLogger, "about to adjust the children under the old parent");
+
+ // If the parentId is null, must check for its children differently
+ if (oldParentMenuId == null) {
+ logger.debug(EELFLoggerDelegate.debugLogger, "oldParentMenuId is null, so using isNull");
+ criteria.add(Restrictions.isNull("parentMenuId"));
+ } else {
+ logger.debug(EELFLoggerDelegate.debugLogger, "oldParentMenuId is NOT null, so using eq");
+ criteria.add(Restrictions.eq("parentMenuId", oldParentMenuId));
+ }
+
+ criteria.add(Restrictions.gt("column", oldColumn));
+ @SuppressWarnings("unchecked")
+ List<FunctionalMenuItem> menuItems1 = criteria.list();
+ for (FunctionalMenuItem menuItem : menuItems1) {
+ menuItem.column -= 1;
+ localSession.save(menuItem);
+ }
+ // Adjust the children under the new parent.
+ logger.debug(EELFLoggerDelegate.debugLogger, "about to adjust the children under the new parent");
+ logger.debug(EELFLoggerDelegate.debugLogger, "get all menu items where menuId!=" + menuId
+ + "; parentMenuId==" + newParentMenuId + "; column>=" + newColumn);
+ criteria = localSession.createCriteria(FunctionalMenuItem.class);
+ criteria.add(Restrictions.ne("menuId", menuId));
+ if (newParentMenuId == null) {
+ logger.debug(EELFLoggerDelegate.debugLogger, "newParentMenuId is null, so using isNull");
+ criteria.add(Restrictions.isNull("parentMenuId"));
+ } else {
+ logger.debug(EELFLoggerDelegate.debugLogger, "newParentMenuId is NOT null, so using eq");
+ criteria.add(Restrictions.eq("parentMenuId", newParentMenuId));
+ }
+
+ criteria.add(Restrictions.ge("column", newColumn));
+ @SuppressWarnings("unchecked")
+ List<FunctionalMenuItem> menuItems2 = criteria.list();
+ if (menuItems2 != null) {
+ logger.debug(EELFLoggerDelegate.debugLogger, "found " + menuItems2.size() + " menu items");
+ } else {
+ logger.debug(EELFLoggerDelegate.debugLogger, "found null menu items");
+ }
+ for (FunctionalMenuItem menuItem : menuItems2) {
+ menuItem.column += 1;
+ localSession.save(menuItem);
+ }
+ }
+ logger.debug(EELFLoggerDelegate.debugLogger, "done with updateColumnForSiblings");
+ }
+
+ public void removeAppInfo(Session localSession, Long menuId) {
+ // Remove the url, role, and app info from a menu item
+ FunctionalMenuItem menuItem = (FunctionalMenuItem) localSession.get(FunctionalMenuItem.class, menuId);
+ menuItem.url = "";
+ deleteRoles(menuId);
+ }
+
+ public FieldsValidator editFunctionalMenuItem(FunctionalMenuItemWithRoles menuItemJson) {
+ boolean result = false;
+ Session localSession = null;
+ Transaction transaction = null;
+ Long menuId = menuItemJson.menuId;
+
+ logger.debug(EELFLoggerDelegate.debugLogger, "LR: editFunctionalMenuItem: test 1");
+ FieldsValidator fieldsValidator = menuItemFieldsChecker(menuItemJson);
+ if (fieldsValidator.httpStatusCode.intValue() == HttpServletResponse.SC_OK) {
+ // TODO: make sure menuId is here. And, it might not already exist
+ // in db table.
+ if (menuId == null) {
+ fieldsValidator.httpStatusCode = new Long(HttpServletResponse.SC_BAD_REQUEST);
+ logger.error(EELFLoggerDelegate.errorLogger,
+ "FunctionalMenuServiceImpl.editFunctionalMenuItem: bad request");
+ } else {
+ // To simplify the code, assume we will have a transaction
+ try {
+ localSession = sessionFactory.openSession();
+ transaction = localSession.beginTransaction();
+
+ // Get the existing info associated with menuItem from the DB
+ FunctionalMenuItem menuItem = (FunctionalMenuItem) localSession.get(FunctionalMenuItem.class,
+ menuId);
+ Integer oldColumn = menuItem.column;
+ Integer oldParentMenuId = menuItem.parentMenuId;
+ Integer newColumn = menuItemJson.column;
+ Integer newParentMenuId = menuItemJson.parentMenuId;
+
+ logger.debug(EELFLoggerDelegate.debugLogger,
+ "prev info: column: " + oldColumn + "; parentMenuId: " + oldParentMenuId);
+
+ if (menuItemJson.appid != null && menuItemJson.getRoles() != null
+ && !menuItemJson.getRoles().isEmpty() && menuItemJson.url != null
+ && !menuItemJson.url.isEmpty() && menuItemJson.text != null
+ && !menuItemJson.text.isEmpty()) {
+ // Scenario: appid, roles, url and text are all non-null.
+ // This menu item is associated with an app.
+ // (Note: this should only occur for a bottom-level menu
+ // item with no children.)
+ // 1) Remove all the records from fn_menu_functional_role
+ // for this menuId.
+ // 2) Add records to the fn_menu_function_role table for the
+ // appId and each roleId
+ // 3) Update the url and text for this menu item.
+
+ // Because of foreign key constraints, delete the roles,
+ // then update the menuItem then add the roles.
+ deleteRoles(menuId);
+ // Assumption: this is not a Move, so don't change the
+ // parentMenuId and column.
+ menuItem.appid = menuItemJson.appid;
+ menuItem.setRoles(menuItemJson.getRoles());
+ menuItem.url = menuItemJson.url;
+ menuItem.text = menuItemJson.text;
+
+ // If the app is disabled, deactivate the menu item.
+ Long appidLong = Long.valueOf(menuItemJson.appid);
+ EPApp app = (EPApp) localSession.get(EPApp.class, appidLong);
+ if (app != null && !app.getEnabled()) {
+ menuItem.active_yn = "N";
+ } else {
+ menuItem.active_yn = "Y";
+ }
+
+ localSession.update(menuItem);
+ addRoles(menuItemJson, localSession);
+
+ } else if (menuItemJson.appid == null
+ && (menuItemJson.getRoles() == null || menuItemJson.getRoles().isEmpty())
+ && (menuItemJson.url == null || menuItemJson.url.isEmpty()) && menuItemJson.text != null
+ && !menuItemJson.text.isEmpty()) {
+ // Scenario: appid, roles and url are all null; text is
+ // non-null.
+ // This menu item is NOT associated with an app.
+ // 1) Remove all the records from fn_menu_functional_role
+ // for this menuId
+ // (in case it was previously associated with an app).
+ // 2) Update the text for this menu item.
+ // 3) Set the url to ""
+ deleteRoles(menuId);
+ // Assumption: this is not a Move, so don't change the
+ // parentMenuId and column.
+ menuItem.text = menuItemJson.text;
+ menuItem.url = "";
+ menuItem.active_yn = "Y";
+ localSession.update(menuItem);
+
+ } else if (newColumn != null) {
+ // This is a "move" request.
+ // Menu item has been moved to a different position under
+ // the same parent, or under a new parent.
+ logger.debug(EELFLoggerDelegate.debugLogger, "Doing a move operation.");
+ if (parentMenuIdEqual(oldParentMenuId, newParentMenuId)) {
+ // The parent is the same. We have just changed the
+ // column
+ logger.debug(EELFLoggerDelegate.debugLogger, "moving under the same parent");
+ menuItem.column = newColumn;
+ localSession.update(menuItem);
+ } else {
+ logger.debug(EELFLoggerDelegate.debugLogger, "moving under a different parent");
+ menuItem.parentMenuId = newParentMenuId;
+ menuItem.column = newColumn;
+ localSession.update(menuItem);
+ // If we are moving under a new parent, must delete any
+ // app/role info from
+ // the new parent, since it is no longer a leaf menu
+ // item and cannot have app info
+ // associated with it. The front end will have warned
+ // the user and gotten confirmation.
+ if (menuItemJson.parentMenuId != null) {
+ Long parentMenuIdLong = new Long(menuItemJson.parentMenuId);
+ removeAppInfo(localSession, parentMenuIdLong);
+ // deleteRoles(parentMenuIdLong);
+ }
+ }
+ // must update the column for all old and new sibling menu
+ // items
+ updateColumnForSiblings(localSession, menuId, oldParentMenuId, newParentMenuId, oldColumn,
+ newColumn);
+ }
+
+ transaction.commit();
+ logger.debug(EELFLoggerDelegate.debugLogger,
+ "LR: editFunctionalMenuItem: finished committing transaction");
+ result = true;
+ } catch (Exception e) {
+ logger.error(EELFLoggerDelegate.errorLogger, "editFunctionalMenuItem failed", e);
+ EcompPortalUtils.rollbackTransaction(transaction,
+ "createFunctionalMenuItem rollback, exception = " + e.toString());
+ } finally {
+ EcompPortalUtils.closeLocalSession(localSession, "editFunctionalMenuItem");
+ }
+
+ if (result) {
+ } else {
+ logger.debug(EELFLoggerDelegate.debugLogger,
+ "LR: createFunctionalMenuItem: no result. setting httpStatusCode to "
+ + HttpServletResponse.SC_INTERNAL_SERVER_ERROR);
+ fieldsValidator.httpStatusCode = new Long(HttpServletResponse.SC_INTERNAL_SERVER_ERROR);
+ }
+ }
+ }
+
+ return fieldsValidator;
+ }
+
+ public FieldsValidator deleteFunctionalMenuItem(Long menuId) {
+ FieldsValidator fieldsValidator = new FieldsValidator();
+ logger.debug(EELFLoggerDelegate.debugLogger, "LR: deleteFunctionalMenuItem: test 1");
+ boolean result = false;
+ Session localSession = null;
+ Transaction transaction = null;
+
+ try {
+ localSession = sessionFactory.openSession();
+ transaction = localSession.beginTransaction();
+ // We must turn off foreign keys before deleting a menu item. Otherwise there
+ // will be a
+ // constraint violation from the ancestors table.
+ setForeignKeys(localSession, false);
+ deleteRoles(menuId);
+ logger.debug(EELFLoggerDelegate.debugLogger, "deleteFunctionalMenuItem: after deleting roles");
+ deleteFavorites(menuId);
+ logger.debug(EELFLoggerDelegate.debugLogger, "deleteFunctionalMenuItem: after deleting favorites");
+ localSession.delete(localSession.get(FunctionalMenuItem.class, menuId));
+ logger.debug(EELFLoggerDelegate.debugLogger, "deleteFunctionalMenuItem: about to commit");
+ transaction.commit();
+ result = true;
+ } catch (Exception e) {
+ logger.error(EELFLoggerDelegate.errorLogger, "deleteFunctionalMenuItem failed", e);
+ EcompPortalUtils.rollbackTransaction(transaction,
+ "deleteFunctionalMenuItem rollback, exception = " + e.toString());
+ } finally {
+ EcompPortalUtils.closeLocalSession(localSession, "deleteFunctionalMenuItem");
+ }
+ if (result) {
+ } else {
+ logger.debug(EELFLoggerDelegate.debugLogger,
+ "LR: deleteFunctionalMenuItem: no result. setting httpStatusCode to "
+ + HttpServletResponse.SC_INTERNAL_SERVER_ERROR);
+ fieldsValidator.httpStatusCode = new Long(HttpServletResponse.SC_INTERNAL_SERVER_ERROR);
+ }
+ return fieldsValidator;
+ }
+
+ // Regenerate the fn_menu_functional_ancestors table, which is used
+ // by the queries that return the functional menu items.
+ public FieldsValidator regenerateAncestorTable() {
+ FieldsValidator fieldsValidator = new FieldsValidator();
+ Session localSession = null;
+ Transaction transaction = null;
+
+ try {
+ localSession = sessionFactory.openSession();
+ transaction = localSession.beginTransaction();
+ String sql = "DELETE FROM fn_menu_functional_ancestors";
+ logQuery(sql);
+ Query query = localSession.createSQLQuery(sql);
+ query.executeUpdate();
+ logger.debug(EELFLoggerDelegate.debugLogger, "regenerateAncestorTable: finished query 1");
+
+ sql = "ALTER TABLE fn_menu_functional_ancestors AUTO_INCREMENT=1";
+ logQuery(sql);
+ query = localSession.createSQLQuery(sql);
+ query.executeUpdate();
+ logger.debug(EELFLoggerDelegate.debugLogger, "regenerateAncestorTable: reset AUTO_INCREMENT to 1");
+
+ int depth = 0;
+ sql = "INSERT INTO fn_menu_functional_ancestors(menu_id, ancestor_menu_id, depth) "
+ + "SELECT m.menu_id, m.menu_id, " + depth + " FROM fn_menu_functional m";
+ logQuery(sql);
+ query = localSession.createSQLQuery(sql);
+ query.executeUpdate();
+ logger.debug(EELFLoggerDelegate.debugLogger, "regenerateAncestorTable: finished query 2");
+ for (depth = 0; depth < 3; depth++) {
+ int depthPlusOne = depth + 1;
+ sql = "INSERT INTO fn_menu_functional_ancestors(menu_id, ancestor_menu_id, depth) "
+ + " SELECT a.menu_id, m.parent_menu_id, " + depthPlusOne
+ + " FROM fn_menu_functional m, fn_menu_functional_ancestors a " + " WHERE a.depth='" + depth
+ + "' AND " + " a.ancestor_menu_id = m.menu_id AND " + " m.parent_menu_id != '-1'";
+ logQuery(sql);
+ query = localSession.createSQLQuery(sql);
+ query.executeUpdate();
+ }
+ logger.debug(EELFLoggerDelegate.debugLogger, "regenerateAncestorTable: finished query 3");
+ transaction.commit();
+ } catch (Exception e) {
+ logger.error(EELFLoggerDelegate.errorLogger, "regenerateAncestorTable failed", e);
+ EcompPortalUtils.rollbackTransaction(transaction,
+ "regenerateAncestorTable rollback, exception = " + e.toString());
+ fieldsValidator.httpStatusCode = new Long(HttpServletResponse.SC_INTERNAL_SERVER_ERROR);
+ } finally {
+ EcompPortalUtils.closeLocalSession(localSession, "regenerateAncestorTable");
+ }
+ return fieldsValidator;
+ }
+
+ private void logQuery(String sql) {
+ logger.debug(EELFLoggerDelegate.debugLogger, "Executing query: " + sql);
+ }
+
+ public FieldsValidator setFavoriteItem(FavoritesFunctionalMenuItem menuItemJson) {
+ boolean result = false;
+ FieldsValidator fieldsValidator = new FieldsValidator();
+
+ Session localSession = null;
+ Transaction transaction = null;
+
+ try {
+ logger.debug(EELFLoggerDelegate.debugLogger,
+ String.format("Before adding favorite for user id:{0} and menu id:{1} ", menuItemJson.userId,
+ menuItemJson.menuId));
+ localSession = sessionFactory.openSession();
+ transaction = localSession.beginTransaction();
+ localSession.save(menuItemJson);
+ transaction.commit();
+ result = true;
+ logger.debug(EELFLoggerDelegate.debugLogger,
+ String.format("After adding favorite for user id:{0} and menu id:{1} ", menuItemJson.userId,
+ menuItemJson.menuId));
+ } catch (Exception e) {
+ logger.error(EELFLoggerDelegate.errorLogger, "setFavoriteItem failed", e);
+ EcompPortalUtils.rollbackTransaction(transaction, "setFavoriteItem rollback, exception = " + e.toString());
+ } finally {
+ EcompPortalUtils.closeLocalSession(localSession, "setFavoriteItem");
+ }
+
+ if (result) {
+ } else {
+ fieldsValidator.httpStatusCode = new Long(HttpServletResponse.SC_INTERNAL_SERVER_ERROR);
+ }
+
+ return fieldsValidator;
+ }
+
+ public List<FavoritesFunctionalMenuItemJson> getFavoriteItems(Long userId) {
+ try {
+ logger.debug(EELFLoggerDelegate.debugLogger, "Before getting favorites for user id: " + userId);
+
+ // Divide this into 2 queries: one which returns the favorites items associated
+ // with Restricted apps,
+ // and one that returns all the other favorites items. Then we can easily add
+ // the boolean flag
+ // restrictedApp to each FavoritesFunctionalMenuItemJson, to be used by the
+ // front end.
+
+ String sql = "SELECT f.user_id,f.menu_id,m.text,m.url "
+ + " FROM fn_menu_favorites f, fn_menu_functional m, fn_menu_functional_roles mr "
+ + " WHERE f.user_id='" + userId + "' AND f.menu_id = m.menu_id " + " AND f.menu_id = mr.menu_id "
+ + " AND mr.role_id = '" + RESTRICTED_APP_ROLE_ID + "' ";
+
+ @SuppressWarnings("unchecked")
+ List<FavoritesFunctionalMenuItemJson> menuItems = dataAccessService.executeSQLQuery(sql,
+ FavoritesFunctionalMenuItemJson.class, null);
+ for (FavoritesFunctionalMenuItemJson menuItem : menuItems) {
+ menuItem.restrictedApp = true;
+ }
+
+ sql = "SELECT DISTINCT f.user_id,f.menu_id,m.text,m.url "
+ + " FROM fn_menu_favorites f, fn_menu_functional m, fn_menu_functional_roles mr "
+ + " WHERE f.user_id='" + userId + "' AND f.menu_id = m.menu_id " + " AND f.menu_id = mr.menu_id "
+ + " AND mr.role_id != '" + RESTRICTED_APP_ROLE_ID + "' ";
+ @SuppressWarnings("unchecked")
+ List<FavoritesFunctionalMenuItemJson> menuItems2 = dataAccessService.executeSQLQuery(sql,
+ FavoritesFunctionalMenuItemJson.class, null);
+ for (FavoritesFunctionalMenuItemJson menuItem : menuItems2) {
+ menuItem.restrictedApp = false;
+ menuItems.add(menuItem);
+ }
+
+ return menuItems;
+ } catch (Exception e) {
+ logger.error(EELFLoggerDelegate.errorLogger, "getFavoriteItems failed", e);
+ List<FavoritesFunctionalMenuItemJson> menuItems = new ArrayList<FavoritesFunctionalMenuItemJson>();
+ return menuItems;
+ }
+ }
+
+ public FieldsValidator removeFavoriteItem(Long userId, Long menuId) {
+ boolean result = false;
+ FieldsValidator fieldsValidator = new FieldsValidator();
+
+ Session localSession = null;
+ Transaction transaction = null;
+
+ try {
+
+ FavoritesFunctionalMenuItem menuItemJson = new FavoritesFunctionalMenuItem();
+ menuItemJson.userId = userId;
+ menuItemJson.menuId = menuId;
+
+ localSession = sessionFactory.openSession();
+ transaction = localSession.beginTransaction();
+ localSession.delete(menuItemJson);
+ localSession.flush();
+ transaction.commit();
+ result = true;
+ logger.debug(EELFLoggerDelegate.debugLogger,
+ String.format("After removing favorite for user id: " + userId + "; menu id: " + menuId));
+ } catch (Exception e) {
+ logger.error(EELFLoggerDelegate.errorLogger, "removeFavoriteItem failed", e);
+ EcompPortalUtils.rollbackTransaction(transaction,
+ "removeFavoriteItem rollback, exception = " + e.toString());
+ } finally {
+ EcompPortalUtils.closeLocalSession(localSession, "removeFavoriteItem");
+ }
+
+ if (result) {
+ } else {
+ fieldsValidator.httpStatusCode = new Long(HttpServletResponse.SC_INTERNAL_SERVER_ERROR);
+ }
+
+ return fieldsValidator;
+ }
+
+ @Override
+ public void assignHelpURLs(List<FunctionalMenuItem> menuItems) {
+ try {
+ String user_guide_link = SystemProperties.getProperty(EPCommonSystemProperties.USER_GUIDE_URL);
+
+ for (FunctionalMenuItem menuItem : menuItems) {
+ if (menuItem.text.equalsIgnoreCase("Contact Us")) {
+ menuItem.setUrl("contactUs");
+ // menuItem.setRestrictedApp(true);
+ }
+ if (menuItem.text.equalsIgnoreCase("Get Access")) {
+ menuItem.setUrl("getAccess");
+ }
+ if (menuItem.text.equalsIgnoreCase("User Guide")) {
+ menuItem.setUrl(user_guide_link);
+ menuItem.setRestrictedApp(true);
+ }
+ }
+ } catch (Exception e) {
+ logger.error(EELFLoggerDelegate.errorLogger, "assignHelpURLs process failed", e);
+ }
+
+ }
+
+ public List<FunctionalMenuRole> getFunctionalMenuRole() {
+ String sql = "SELECT * from fn_menu_functional_roles";
+ logQuery(sql);
+ logger.debug(EELFLoggerDelegate.debugLogger, "getFunctionalMenuRole: logged the query");
+
+ @SuppressWarnings("unchecked")
+ List<FunctionalMenuRole> functionalMenuRole = dataAccessService.executeSQLQuery(sql, FunctionalMenuRole.class,
+ null);
+
+ return functionalMenuRole;
+ }
+
+ @SuppressWarnings("unchecked")
+ @Override
+ public List<BusinessCardApplicationRole> getUserAppRolesList(String userId) {
+ Map<String, String> params = new HashMap<>();
+ params.put("userId", userId);
+
+ List<BusinessCardApplicationRole> userAppRoles = null;
+ try {
+ userAppRoles = dataAccessService.executeNamedQuery("getUserApproles", params, null);
+ } catch (Exception e) {
+ // TODO Auto-generated catch block
+ logger.error(EELFLoggerDelegate.errorLogger, "getUserAppRolesList failed", e);
+ }
+ return userAppRoles;
+ }
+
+}
diff --git a/ecomp-portal-BE-common/src/main/java/org/onap/portalapp/portal/service/GetAccessService.java b/ecomp-portal-BE-common/src/main/java/org/onap/portalapp/portal/service/GetAccessService.java
new file mode 100644
index 00000000..093fd258
--- /dev/null
+++ b/ecomp-portal-BE-common/src/main/java/org/onap/portalapp/portal/service/GetAccessService.java
@@ -0,0 +1,51 @@
+/*-
+ * ============LICENSE_START==========================================
+ * ONAP Portal
+ * ===================================================================
+ * Copyright (C) 2017 AT&T Intellectual Property. All rights reserved.
+ * ===================================================================
+ *
+ * Unless otherwise specified, all software contained herein is licensed
+ * under the Apache License, Version 2.0 (the "License");
+ * you may not use this software 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.
+ *
+ * Unless otherwise specified, all documentation contained herein is licensed
+ * under the Creative Commons License, Attribution 4.0 Intl. (the "License");
+ * you may not use this documentation except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * https://creativecommons.org/licenses/by/4.0/
+ *
+ * Unless required by applicable law or agreed to in writing, documentation
+ * 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.
+ *
+ * ============LICENSE_END============================================
+ *
+ * ECOMP is a trademark and service mark of AT&T Intellectual Property.
+ */
+package org.onap.portalapp.portal.service;
+
+import java.util.List;
+
+import org.onap.portalapp.portal.domain.EPUser;
+import org.onap.portalapp.portal.domain.GetAccessResult;
+
+public interface GetAccessService {
+ /**
+ * @return One entry per application function AND role; i.e., each application
+ * appears many times.
+ */
+ List<GetAccessResult> getAppAccessList(EPUser user);
+}
diff --git a/ecomp-portal-BE-common/src/main/java/org/onap/portalapp/portal/service/GetAccessServiceImpl.java b/ecomp-portal-BE-common/src/main/java/org/onap/portalapp/portal/service/GetAccessServiceImpl.java
new file mode 100644
index 00000000..fb0bf7f7
--- /dev/null
+++ b/ecomp-portal-BE-common/src/main/java/org/onap/portalapp/portal/service/GetAccessServiceImpl.java
@@ -0,0 +1,78 @@
+/*-
+ * ============LICENSE_START==========================================
+ * ONAP Portal
+ * ===================================================================
+ * Copyright (C) 2017 AT&T Intellectual Property. All rights reserved.
+ * ===================================================================
+ *
+ * Unless otherwise specified, all software contained herein is licensed
+ * under the Apache License, Version 2.0 (the "License");
+ * you may not use this software 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.
+ *
+ * Unless otherwise specified, all documentation contained herein is licensed
+ * under the Creative Commons License, Attribution 4.0 Intl. (the "License");
+ * you may not use this documentation except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * https://creativecommons.org/licenses/by/4.0/
+ *
+ * Unless required by applicable law or agreed to in writing, documentation
+ * 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.
+ *
+ * ============LICENSE_END============================================
+ *
+ * ECOMP is a trademark and service mark of AT&T Intellectual Property.
+ */
+package org.onap.portalapp.portal.service;
+
+import java.util.HashMap;
+import java.util.List;
+import java.util.Map;
+
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.context.annotation.EnableAspectJAutoProxy;
+import org.springframework.stereotype.Service;
+import org.springframework.transaction.annotation.Transactional;
+import org.onap.portalapp.portal.domain.EPUser;
+import org.onap.portalapp.portal.domain.GetAccessResult;
+import org.onap.portalapp.portal.logging.aop.EPMetricsLog;
+import org.onap.portalsdk.core.service.DataAccessService;
+
+@Service("getAccessService")
+@Transactional
+@org.springframework.context.annotation.Configuration
+@EnableAspectJAutoProxy
+@EPMetricsLog
+public class GetAccessServiceImpl implements GetAccessService{
+
+ @Autowired
+ private DataAccessService dataAccessService;
+
+ /*
+ * (non-Javadoc)
+ * @see org.openecomp.portalapp.portal.service.GetAccessService#getAppAccessList()
+ */
+ @SuppressWarnings("unchecked")
+ @Override
+ public List<GetAccessResult> getAppAccessList(EPUser user) {
+ final Map<String, Long> params = new HashMap<>();
+ List<GetAccessResult> appAccessList = null;
+ params.put("userId", user.getId());
+ appAccessList = dataAccessService
+ .executeNamedQuery("getAppAccessFunctionRole", params, null);
+ return appAccessList;
+ }
+
+}
diff --git a/ecomp-portal-BE-common/src/main/java/org/onap/portalapp/portal/service/ManifestService.java b/ecomp-portal-BE-common/src/main/java/org/onap/portalapp/portal/service/ManifestService.java
new file mode 100644
index 00000000..ab15b189
--- /dev/null
+++ b/ecomp-portal-BE-common/src/main/java/org/onap/portalapp/portal/service/ManifestService.java
@@ -0,0 +1,51 @@
+/*-
+ * ============LICENSE_START==========================================
+ * ONAP Portal
+ * ===================================================================
+ * Copyright (C) 2017 AT&T Intellectual Property. All rights reserved.
+ * ===================================================================
+ *
+ * Unless otherwise specified, all software contained herein is licensed
+ * under the Apache License, Version 2.0 (the "License");
+ * you may not use this software 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.
+ *
+ * Unless otherwise specified, all documentation contained herein is licensed
+ * under the Creative Commons License, Attribution 4.0 Intl. (the "License");
+ * you may not use this documentation except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * https://creativecommons.org/licenses/by/4.0/
+ *
+ * Unless required by applicable law or agreed to in writing, documentation
+ * 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.
+ *
+ * ============LICENSE_END============================================
+ *
+ * ECOMP is a trademark and service mark of AT&T Intellectual Property.
+ */
+package org.onap.portalapp.portal.service;
+
+import java.io.IOException;
+import java.util.jar.Attributes;
+
+public interface ManifestService {
+ /**
+ * Gets the content of the webapp manifest file META-INF/MANIFEST.MF.
+ *
+ * @return Attributes object with key-value pairs from the manifest
+ * @throws IOException
+ */
+ public Attributes getWebappManifest() throws IOException;
+}
diff --git a/ecomp-portal-BE-common/src/main/java/org/onap/portalapp/portal/service/ManifestServiceImpl.java b/ecomp-portal-BE-common/src/main/java/org/onap/portalapp/portal/service/ManifestServiceImpl.java
new file mode 100644
index 00000000..6ea66fe1
--- /dev/null
+++ b/ecomp-portal-BE-common/src/main/java/org/onap/portalapp/portal/service/ManifestServiceImpl.java
@@ -0,0 +1,79 @@
+/*-
+ * ============LICENSE_START==========================================
+ * ONAP Portal
+ * ===================================================================
+ * Copyright (C) 2017 AT&T Intellectual Property. All rights reserved.
+ * ===================================================================
+ *
+ * Unless otherwise specified, all software contained herein is licensed
+ * under the Apache License, Version 2.0 (the "License");
+ * you may not use this software 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.
+ *
+ * Unless otherwise specified, all documentation contained herein is licensed
+ * under the Creative Commons License, Attribution 4.0 Intl. (the "License");
+ * you may not use this documentation except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * https://creativecommons.org/licenses/by/4.0/
+ *
+ * Unless required by applicable law or agreed to in writing, documentation
+ * 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.
+ *
+ * ============LICENSE_END============================================
+ *
+ * ECOMP is a trademark and service mark of AT&T Intellectual Property.
+ */
+package org.onap.portalapp.portal.service;
+
+import java.io.IOException;
+import java.io.InputStream;
+import java.util.jar.Attributes;
+import java.util.jar.Manifest;
+
+import javax.servlet.ServletContext;
+
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.context.annotation.EnableAspectJAutoProxy;
+import org.springframework.stereotype.Service;
+import org.onap.portalapp.portal.logging.aop.EPMetricsLog;
+import org.onap.portalsdk.core.logging.logic.EELFLoggerDelegate;
+
+@Service("manifestService")
+@EnableAspectJAutoProxy
+@EPMetricsLog
+public class ManifestServiceImpl implements ManifestService {
+ @Autowired
+ ServletContext context;
+
+ /*
+ * (non-Javadoc)
+ * @see org.openecomp.portalapp.portal.service.ManifestService#getWebappManifest()
+ */
+ public Attributes getWebappManifest() throws IOException {
+ EELFLoggerDelegate logger = EELFLoggerDelegate.getLogger(ManifestServiceImpl.class);
+ // Path to resource on classpath
+ final String MANIFEST_RESOURCE_PATH = "/META-INF/MANIFEST.MF";
+ // Manifest is formatted as Java-style properties
+ try {
+ InputStream inputStream = context.getResourceAsStream(MANIFEST_RESOURCE_PATH);
+ Manifest manifest = new Manifest(inputStream);
+ inputStream.close();
+ return manifest.getMainAttributes();
+ } catch (IOException e) {
+ logger.error(EELFLoggerDelegate.errorLogger, "getWebappManifest: failed to read/find manifest");
+ throw e;
+ }
+ }
+}
diff --git a/ecomp-portal-BE-common/src/main/java/org/onap/portalapp/portal/service/MicroserviceProxyService.java b/ecomp-portal-BE-common/src/main/java/org/onap/portalapp/portal/service/MicroserviceProxyService.java
new file mode 100644
index 00000000..594e5ef2
--- /dev/null
+++ b/ecomp-portal-BE-common/src/main/java/org/onap/portalapp/portal/service/MicroserviceProxyService.java
@@ -0,0 +1,77 @@
+/*-
+ * ============LICENSE_START==========================================
+ * ONAP Portal
+ * ===================================================================
+ * Copyright (C) 2017 AT&T Intellectual Property. All rights reserved.
+ * ===================================================================
+ *
+ * Unless otherwise specified, all software contained herein is licensed
+ * under the Apache License, Version 2.0 (the "License");
+ * you may not use this software 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.
+ *
+ * Unless otherwise specified, all documentation contained herein is licensed
+ * under the Creative Commons License, Attribution 4.0 Intl. (the "License");
+ * you may not use this documentation except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * https://creativecommons.org/licenses/by/4.0/
+ *
+ * Unless required by applicable law or agreed to in writing, documentation
+ * 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.
+ *
+ * ============LICENSE_END============================================
+ *
+ * ECOMP is a trademark and service mark of AT&T Intellectual Property.
+ */
+package org.onap.portalapp.portal.service;
+
+import javax.servlet.http.HttpServletRequest;
+
+import org.onap.portalapp.portal.domain.EPUser;
+import org.springframework.web.client.RestClientException;
+
+public interface MicroserviceProxyService {
+
+ /**
+ * Gets the specific microservice from table ep_microservice, communicates
+ * to microservice with the specified security type. The microservice sends
+ * back the response.
+ *
+ * Gets the data while testing the microservice with no widget associated with
+ *
+ * @param serviceId
+ * Id of microservice to be used
+ * @return response sent from microservice
+ * @throws Exception
+ */
+ String proxyToDestination(long serviceId, EPUser user, HttpServletRequest request) throws Exception;
+
+
+
+ /**
+ * Gets the microservice data based on the user id and widget id. Different
+ * users have his/her own parameters for one widget. The method sends back
+ * the response.
+ *
+ * @param widgetId
+ * Id of widget to be used
+ * @param user
+ * User information
+ * @param request
+ * @return response sent from microserivce
+ * @throws Exception
+ */
+ String proxyToDestinationByWidgetId(long widgetId, EPUser user, HttpServletRequest request) throws Exception;
+}
diff --git a/ecomp-portal-BE-common/src/main/java/org/onap/portalapp/portal/service/MicroserviceProxyServiceImpl.java b/ecomp-portal-BE-common/src/main/java/org/onap/portalapp/portal/service/MicroserviceProxyServiceImpl.java
new file mode 100644
index 00000000..d18ffbe9
--- /dev/null
+++ b/ecomp-portal-BE-common/src/main/java/org/onap/portalapp/portal/service/MicroserviceProxyServiceImpl.java
@@ -0,0 +1,242 @@
+/*-
+ * ============LICENSE_START==========================================
+ * ONAP Portal
+ * ===================================================================
+ * Copyright (C) 2017 AT&T Intellectual Property. All rights reserved.
+ * ===================================================================
+ *
+ * Unless otherwise specified, all software contained herein is licensed
+ * under the Apache License, Version 2.0 (the "License");
+ * you may not use this software 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.
+ *
+ * Unless otherwise specified, all documentation contained herein is licensed
+ * under the Creative Commons License, Attribution 4.0 Intl. (the "License");
+ * you may not use this documentation except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * https://creativecommons.org/licenses/by/4.0/
+ *
+ * Unless required by applicable law or agreed to in writing, documentation
+ * 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.
+ *
+ * ============LICENSE_END============================================
+ *
+ * ECOMP is a trademark and service mark of AT&T Intellectual Property.
+ */
+package org.onap.portalapp.portal.service;
+
+import java.util.List;
+
+import javax.servlet.http.HttpServletRequest;
+import org.apache.commons.codec.binary.Base64;
+import org.onap.portalapp.portal.domain.EPUser;
+import org.onap.portalapp.portal.domain.MicroserviceData;
+import org.onap.portalapp.portal.domain.MicroserviceParameter;
+import org.onap.portalapp.portal.domain.WidgetCatalogParameter;
+import org.onap.portalapp.portal.domain.WidgetServiceHeaders;
+import org.onap.portalapp.portal.logging.aop.EPMetricsLog;
+import org.onap.portalapp.portal.utils.EcompPortalUtils;
+import org.onap.portalsdk.core.logging.logic.EELFLoggerDelegate;
+import org.onap.portalsdk.core.onboarding.util.CipherUtil;
+import org.onap.portalsdk.core.util.SystemProperties;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.context.annotation.EnableAspectJAutoProxy;
+import org.springframework.http.HttpEntity;
+import org.springframework.http.HttpHeaders;
+import org.springframework.http.HttpMethod;
+import org.springframework.http.MediaType;
+import org.springframework.http.ResponseEntity;
+import org.springframework.stereotype.Service;
+import org.springframework.web.client.HttpClientErrorException;
+import org.springframework.web.client.RestTemplate;
+
+@Service("microserviceProxyService")
+@EnableAspectJAutoProxy
+@EPMetricsLog
+public class MicroserviceProxyServiceImpl implements MicroserviceProxyService {
+
+ private EELFLoggerDelegate logger = EELFLoggerDelegate.getLogger(MicroserviceProxyServiceImpl.class);
+
+ private static final String BASIC_AUTH = "Basic Authentication";
+ private static final String NO_AUTH = "No Authentication";
+ private static final String COOKIE_AUTH = "Cookie based Authentication";
+ private static final String QUESTION_MARK = "?";
+ private static final String ADD_MARK = "&";
+
+ @Autowired
+ private ConsulHealthService consulHealthService;
+ @Autowired
+ MicroserviceService microserviceService;
+ @Autowired
+ WidgetParameterService widgetParameterService;
+
+ private String whatService = "widgets-service";
+
+ private RestTemplate template = new RestTemplate();
+
+ @Override
+ public String proxyToDestination(long serviceId, EPUser user, HttpServletRequest request) throws Exception {
+ // get the microservice object by the id
+ MicroserviceData data = microserviceService.getMicroserviceDataById(serviceId);
+ // No such microservice available
+ if (data == null) {
+ // can we return a better response than null?
+ return null;
+ }
+ return authenticateAndRespond(data, request, composeParams(data, user));
+ }
+
+ @Override
+ public String proxyToDestinationByWidgetId(long widgetId, EPUser user, HttpServletRequest request)
+ throws Exception {
+ @SuppressWarnings({ "rawtypes", "unchecked" })
+ ResponseEntity<Long> ans = (ResponseEntity<Long>) template.exchange(
+ EcompPortalUtils.widgetMsProtocol() + "://"
+ + consulHealthService.getServiceLocation(whatService,
+ SystemProperties.getProperty("microservices.widget.local.port"))
+ + "/widget/microservices/widgetCatalog/parameters/" + widgetId,
+ HttpMethod.GET, new HttpEntity(WidgetServiceHeaders.getInstance()), Long.class);
+ Long serviceId = ans.getBody();
+ // get the microservice object by the id
+ MicroserviceData data = microserviceService.getMicroserviceDataById(serviceId);
+ // No such microservice available
+ if (data == null)
+ return null;
+
+ List<MicroserviceParameter> params = composeParams(data, user);
+ for (MicroserviceParameter p : params) {
+ WidgetCatalogParameter userValue = widgetParameterService.getUserParamById(widgetId, user.getId(),
+ p.getId());
+ if (userValue != null)
+ p.setPara_value(userValue.getUser_value());
+ }
+ return authenticateAndRespond(data, request, params);
+ }
+
+ private String authenticateAndRespond(MicroserviceData data, HttpServletRequest request,
+ List<MicroserviceParameter> params) throws HttpClientErrorException, IllegalArgumentException {
+ String response = null;
+ if (data.getSecurityType().equals(NO_AUTH)) {
+ HttpEntity<String> entity = new HttpEntity<String>(headersForNoAuth());
+ String url = microserviceUrlConverter(data, params);
+ logger.debug(EELFLoggerDelegate.debugLogger,
+ "authenticateAndRespond: Before making no authentication call: {}", url);
+ response = template.exchange(url, HttpMethod.GET, entity, String.class).getBody();
+ logger.debug(EELFLoggerDelegate.debugLogger, "authenticateAndRespond: No authentication call response: {}",
+ response);
+ } else if (data.getSecurityType().equals(BASIC_AUTH)) {
+ // encoding the username and password
+ String plainCreds = null;
+ try {
+ plainCreds = data.getUsername() + ":" + decryptedPassword(data.getPassword());
+ } catch (Exception e) {
+ logger.error("authenticateAndRespond failed to decrypt password", e);
+ throw new IllegalArgumentException("Failed to decrypt password", e);
+ }
+ byte[] plainCredsBytes = plainCreds.getBytes();
+ byte[] base64CredsBytes = Base64.encodeBase64(plainCredsBytes);
+ String base64Creds = new String(base64CredsBytes);
+
+ HttpEntity<String> entity = new HttpEntity<String>(headersForBasicAuth(request, base64Creds));
+
+ String url = microserviceUrlConverter(data, params);
+ try {
+ response = template.exchange(url, HttpMethod.GET, entity, String.class).getBody();
+ } catch (HttpClientErrorException e) {
+ logger.error("authenticateAndRespond failed for basic security url " + url, e);
+ throw e;
+ }
+ } else if (data.getSecurityType().equals(COOKIE_AUTH)) {
+ HttpEntity<String> entity = new HttpEntity<String>(headersForCookieAuth(request));
+ String url = microserviceUrlConverter(data, params);
+ try {
+ response = template.exchange(url, HttpMethod.GET, entity, String.class).getBody();
+ } catch (HttpClientErrorException e) {
+ logger.error("authenticateAndRespond failed for cookie auth url " + url, e);
+ throw e;
+ }
+ }
+
+ return response;
+ }
+
+ private String decryptedPassword(String encryptedPwd) throws Exception {
+ String result = "";
+ if (encryptedPwd != null && encryptedPwd.length() > 0) {
+ try {
+ result = CipherUtil.decryptPKC(encryptedPwd,
+ SystemProperties.getProperty(SystemProperties.Decryption_Key));
+ } catch (Exception e) {
+ logger.error(EELFLoggerDelegate.errorLogger, "decryptedPassword failed", e);
+ throw e;
+ }
+ }
+
+ return result;
+ }
+
+ private String microserviceUrlConverter(MicroserviceData data, List<MicroserviceParameter> params) {
+ String url = data.getUrl();
+ for (int i = 0; i < params.size(); i++) {
+ if (i == 0) {
+ url += QUESTION_MARK;
+ }
+ url += params.get(i).getPara_key() + "=" + params.get(i).getPara_value();
+ if (i != (params.size() - 1)) {
+ url += ADD_MARK;
+ }
+ }
+
+ return url;
+ }
+
+ private HttpHeaders headersForNoAuth() {
+ HttpHeaders headers = new HttpHeaders();
+ headers.setContentType(MediaType.APPLICATION_JSON);
+
+ return headers;
+ }
+
+ // TODO: why is this generically named cookie used?
+ private final static String Cookie = "Cookie";
+
+ private HttpHeaders headersForBasicAuth(HttpServletRequest request, String base64Creds) {
+ HttpHeaders headers = new HttpHeaders();
+ headers.add("Authorization", "Basic " + base64Creds);
+ headers.setContentType(MediaType.APPLICATION_JSON);
+ String rawCookie = request.getHeader(Cookie);
+ if (rawCookie != null)
+ headers.add(Cookie, rawCookie);
+ return headers;
+ }
+
+ private HttpHeaders headersForCookieAuth(HttpServletRequest request) {
+ HttpHeaders headers = new HttpHeaders();
+ headers.setContentType(MediaType.APPLICATION_JSON);
+ String rawCookie = request.getHeader(Cookie);
+ if (rawCookie != null)
+ headers.add(Cookie, rawCookie);
+ return headers;
+ }
+
+ private List<MicroserviceParameter> composeParams(MicroserviceData data, EPUser user) {
+ List<MicroserviceParameter> params = data.getParameterList();
+ MicroserviceParameter userIdParam = new MicroserviceParameter();
+ userIdParam.setPara_key("userId");
+ userIdParam.setPara_value(user.getOrgUserId());
+ params.add(userIdParam);
+ return params;
+ }
+} \ No newline at end of file
diff --git a/ecomp-portal-BE-common/src/main/java/org/onap/portalapp/portal/service/MicroserviceService.java b/ecomp-portal-BE-common/src/main/java/org/onap/portalapp/portal/service/MicroserviceService.java
new file mode 100644
index 00000000..60553b32
--- /dev/null
+++ b/ecomp-portal-BE-common/src/main/java/org/onap/portalapp/portal/service/MicroserviceService.java
@@ -0,0 +1,105 @@
+/*-
+ * ============LICENSE_START==========================================
+ * ONAP Portal
+ * ===================================================================
+ * Copyright (C) 2017 AT&T Intellectual Property. All rights reserved.
+ * ===================================================================
+ *
+ * Unless otherwise specified, all software contained herein is licensed
+ * under the Apache License, Version 2.0 (the "License");
+ * you may not use this software 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.
+ *
+ * Unless otherwise specified, all documentation contained herein is licensed
+ * under the Creative Commons License, Attribution 4.0 Intl. (the "License");
+ * you may not use this documentation except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * https://creativecommons.org/licenses/by/4.0/
+ *
+ * Unless required by applicable law or agreed to in writing, documentation
+ * 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.
+ *
+ * ============LICENSE_END============================================
+ *
+ * ECOMP is a trademark and service mark of AT&T Intellectual Property.
+ */
+package org.onap.portalapp.portal.service;
+
+import java.util.List;
+
+import org.onap.portalapp.portal.domain.MicroserviceData;
+import org.onap.portalapp.portal.domain.MicroserviceParameter;
+
+public interface MicroserviceService {
+
+ /**
+ * Get all microservices from the ep_microservice
+ *
+ * @return list of all microservices
+ * @throws Exception
+ */
+ List<MicroserviceData> getMicroserviceData() throws Exception;
+
+ /**
+ * Gets the specified microservice with id from ep_microservice
+ *
+ * @param id
+ * ID of microservice to be fetched
+ * @return the microservice with the specified id
+ */
+ MicroserviceData getMicroserviceDataById(long id);
+
+ /**
+ * Saves the specified microservice to the table ep_microservice
+ *
+ * @param newService
+ * Content of microservice to be saved
+ * @return new microservice id
+ * @throws Exception
+ */
+ Long saveMicroservice(MicroserviceData newService) throws Exception;
+
+ void saveServiceParameters(long serviceId, List<MicroserviceParameter> list) throws Exception;
+
+ /**
+ * Deletes the specified microservice from all tables where the serviceId is
+ * used
+ *
+ * @param serviceId
+ * @throws Exception
+ */
+ void deleteMicroservice(long serviceId) throws Exception;
+
+ /**
+ * Updates the specified microservice from all tables where the serviceId is
+ * used
+ *
+ * @param serviceId
+ * Id of microservice to be updated
+ * @param newService
+ * Content of microservice to be updated
+ * @throws Exception
+ */
+ void updateMicroservice(long serviceId, MicroserviceData newService) throws Exception;
+
+ /**
+ * Gets the Service parameters by the service Id
+ *
+ * @param serviceId
+ * @return List<MicroserviceParameter>
+ */
+ List<MicroserviceParameter> getParametersById(long serviceId);
+
+}
diff --git a/ecomp-portal-BE-common/src/main/java/org/onap/portalapp/portal/service/MicroserviceServiceImpl.java b/ecomp-portal-BE-common/src/main/java/org/onap/portalapp/portal/service/MicroserviceServiceImpl.java
new file mode 100644
index 00000000..d7f78d8c
--- /dev/null
+++ b/ecomp-portal-BE-common/src/main/java/org/onap/portalapp/portal/service/MicroserviceServiceImpl.java
@@ -0,0 +1,227 @@
+/*-
+ * ============LICENSE_START==========================================
+ * ONAP Portal
+ * ===================================================================
+ * Copyright (C) 2017 AT&T Intellectual Property. All rights reserved.
+ * ===================================================================
+ *
+ * Unless otherwise specified, all software contained herein is licensed
+ * under the Apache License, Version 2.0 (the "License");
+ * you may not use this software 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.
+ *
+ * Unless otherwise specified, all documentation contained herein is licensed
+ * under the Creative Commons License, Attribution 4.0 Intl. (the "License");
+ * you may not use this documentation except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * https://creativecommons.org/licenses/by/4.0/
+ *
+ * Unless required by applicable law or agreed to in writing, documentation
+ * 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.
+ *
+ * ============LICENSE_END============================================
+ *
+ * ECOMP is a trademark and service mark of AT&T Intellectual Property.
+ */
+package org.onap.portalapp.portal.service;
+
+import java.util.ArrayList;
+import java.util.HashMap;
+import java.util.List;
+import java.util.Map;
+
+import javax.crypto.BadPaddingException;
+
+import org.hibernate.criterion.Criterion;
+import org.hibernate.criterion.Restrictions;
+import org.onap.portalapp.portal.domain.MicroserviceData;
+import org.onap.portalapp.portal.domain.MicroserviceParameter;
+import org.onap.portalapp.portal.logging.aop.EPMetricsLog;
+import org.onap.portalsdk.core.logging.logic.EELFLoggerDelegate;
+import org.onap.portalsdk.core.onboarding.util.CipherUtil;
+import org.onap.portalsdk.core.service.DataAccessService;
+import org.onap.portalsdk.core.util.SystemProperties;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.context.annotation.EnableAspectJAutoProxy;
+import org.springframework.stereotype.Service;
+
+@Service("microserviceService")
+@EnableAspectJAutoProxy
+@EPMetricsLog
+public class MicroserviceServiceImpl implements MicroserviceService {
+
+ EELFLoggerDelegate logger = EELFLoggerDelegate.getLogger(MicroserviceServiceImpl.class);
+
+ @Autowired
+ private DataAccessService dataAccessService;
+
+ public Long saveMicroservice(MicroserviceData newService) throws Exception {
+ if (newService.getPassword() != null)
+ newService.setPassword(encryptedPassword(newService.getPassword()));
+ getDataAccessService().saveDomainObject(newService, null);
+ return newService.getId();
+ }
+
+ public void saveServiceParameters(long serviceId, List<MicroserviceParameter> list) throws Exception {
+ for (int i = 0; i < list.size(); i++) {
+ MicroserviceParameter para = list.get(i);
+ para.setServiceId(serviceId);
+ getDataAccessService().saveDomainObject(para, null);
+ }
+ }
+
+ @Override
+ public MicroserviceData getMicroserviceDataById(long id) {
+ MicroserviceData data = null;
+ try {
+ List<Criterion> restrictionsList = new ArrayList<Criterion>();
+ Criterion idCriterion = Restrictions.eq("id", id);
+ restrictionsList.add(idCriterion);
+ data = (MicroserviceData) dataAccessService.getList(MicroserviceData.class, null, restrictionsList, null).get(0);
+
+ data.setParameterList(getServiceParameters(id));
+ } catch (Exception e) {
+ logger.error(EELFLoggerDelegate.errorLogger, "getMicroserviceDataById failed", e);
+ throw e;
+ }
+ return data;
+ }
+
+ @SuppressWarnings("unchecked")
+ @Override
+ public List<MicroserviceData> getMicroserviceData() throws Exception {
+ List<MicroserviceData> list = (List<MicroserviceData>) dataAccessService.getList(MicroserviceData.class, null);
+ for (int i = 0; i < list.size(); i++) {
+ if (list.get(i).getPassword() != null)
+ try{
+ list.get(i).setPassword(decryptedPassword(list.get(i).getPassword()));
+ } catch(BadPaddingException bpe){
+ logger.error(EELFLoggerDelegate.errorLogger, "Couldn't decrypt - Check decryption key in system.properties - looks wrong. Still going ahead with list population though", bpe);
+ }
+ list.get(i).setParameterList(getServiceParameters(list.get(i).getId()));
+ }
+ return list;
+ }
+
+ private List<MicroserviceParameter> getServiceParameters(long serviceId) {
+ List<MicroserviceParameter> list = getMicroServiceParametersList(serviceId);
+ return list;
+ }
+
+ @SuppressWarnings("unchecked")
+ private List<MicroserviceParameter> getMicroServiceParametersList(long serviceId) {
+ List<Criterion> restrictionsList = new ArrayList<Criterion>();
+ Criterion serviceIdCriterion = Restrictions.eq("serviceId", serviceId);
+ restrictionsList.add(serviceIdCriterion);
+ return (List<MicroserviceParameter>) dataAccessService.getList(MicroserviceParameter.class, null, restrictionsList, null);
+ }
+
+ @Override
+ public void deleteMicroservice(long serviceId) throws Exception {
+
+ try {
+ Map<String, String> params = new HashMap<String, String>();
+ params.put("serviceId", Long.toString(serviceId));
+
+ dataAccessService.executeNamedQuery("deleteMicroserviceParameter", params, null);
+ dataAccessService.executeNamedQuery("deleteMicroservice", params, null);
+
+ } catch (Exception e) {
+ e.printStackTrace();
+ logger.error(EELFLoggerDelegate.errorLogger, "deleteMicroservice failed", e);
+ throw e;
+ }
+ }
+
+ @Override
+ public void updateMicroservice(long serviceId, MicroserviceData newService) throws Exception {
+ try {
+ newService.setId(serviceId);
+ if (newService.getPassword() != null)
+ newService.setPassword(encryptedPassword(newService.getPassword()));
+ getDataAccessService().saveDomainObject(newService, null);
+ List<MicroserviceParameter> oldService = getServiceParameters(serviceId);
+ boolean foundParam;
+ for (int i = 0; i < oldService.size(); i++) {
+ foundParam = false;
+ for (int n = 0; n < newService.getParameterList().size(); n++) {
+ if (newService.getParameterList().get(n).getId().equals(oldService.get(i).getId())) {
+ foundParam = true;
+ break;
+ }
+ }
+ if (foundParam == false) {
+ MicroserviceParameter pd = oldService.get(i);
+ getDataAccessService().deleteDomainObject(pd, null);
+ }
+ }
+ for (int i = 0; i < newService.getParameterList().size(); i++) {
+ MicroserviceParameter param = newService.getParameterList().get(i);
+ param.setServiceId(serviceId);
+ getDataAccessService().saveDomainObject(param, null);
+ }
+ } catch (Exception e) {
+ logger.error(EELFLoggerDelegate.errorLogger, "updateMicroservice failed", e);
+ throw e;
+ }
+ saveServiceParameters(serviceId, newService.getParameterList());
+ }
+
+ @Override
+ @SuppressWarnings("unchecked")
+ public List<MicroserviceParameter> getParametersById(long serviceId) {
+ List<Criterion> restrictionsList = new ArrayList<Criterion>();
+ Criterion contextIdCrit = Restrictions.eq("serviceId", serviceId);
+ restrictionsList.add(contextIdCrit);
+ List<MicroserviceParameter> list = (List<MicroserviceParameter>) dataAccessService
+ .getList(MicroserviceParameter.class, null, restrictionsList, null);
+ logger.debug(EELFLoggerDelegate.debugLogger,
+ "getParametersById: microservice parameters list size: " + list.size());
+ return list;
+ }
+
+ private String decryptedPassword(String encryptedPwd) throws Exception {
+ String result = "";
+ if (encryptedPwd != null & encryptedPwd.length() > 0) {
+ try {
+ result = CipherUtil.decryptPKC(encryptedPwd,
+ SystemProperties.getProperty(SystemProperties.Decryption_Key));
+ } catch (Exception e) {
+ logger.error(EELFLoggerDelegate.errorLogger, "decryptedPassword failed", e);
+ throw e;
+ }
+ }
+ return result;
+ }
+
+ private String encryptedPassword(String decryptedPwd) throws Exception {
+ String result = "";
+ if (decryptedPwd != null & decryptedPwd.length() > 0) {
+ try {
+ result = CipherUtil.encryptPKC(decryptedPwd,
+ SystemProperties.getProperty(SystemProperties.Decryption_Key));
+ } catch (Exception e) {
+ logger.error(EELFLoggerDelegate.errorLogger, "encryptedPassword failed", e);
+ throw e;
+ }
+ }
+ return result;
+ }
+
+ public DataAccessService getDataAccessService() {
+ return dataAccessService;
+ }
+
+}
diff --git a/ecomp-portal-BE-common/src/main/java/org/onap/portalapp/portal/service/PersUserAppService.java b/ecomp-portal-BE-common/src/main/java/org/onap/portalapp/portal/service/PersUserAppService.java
new file mode 100644
index 00000000..7838eb43
--- /dev/null
+++ b/ecomp-portal-BE-common/src/main/java/org/onap/portalapp/portal/service/PersUserAppService.java
@@ -0,0 +1,60 @@
+/*-
+ * ============LICENSE_START==========================================
+ * ONAP Portal
+ * ===================================================================
+ * Copyright (C) 2017 AT&T Intellectual Property. All rights reserved.
+ * ===================================================================
+ *
+ * Unless otherwise specified, all software contained herein is licensed
+ * under the Apache License, Version 2.0 (the "License");
+ * you may not use this software 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.
+ *
+ * Unless otherwise specified, all documentation contained herein is licensed
+ * under the Creative Commons License, Attribution 4.0 Intl. (the "License");
+ * you may not use this documentation except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * https://creativecommons.org/licenses/by/4.0/
+ *
+ * Unless required by applicable law or agreed to in writing, documentation
+ * 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.
+ *
+ * ============LICENSE_END============================================
+ *
+ * ECOMP is a trademark and service mark of AT&T Intellectual Property.
+ */
+package org.onap.portalapp.portal.service;
+
+import org.onap.portalapp.portal.domain.EPApp;
+import org.onap.portalapp.portal.domain.EPUser;
+
+public interface PersUserAppService {
+
+ /**
+ * Sets the appropriate code in the user personalization table to indicate
+ * the application is (de)selected and/or pending.
+ *
+ * @param user
+ * EP User
+ * @param app
+ * EP Application
+ * @param select
+ * True or false
+ * @param pending
+ * True or false
+ */
+ void setPersUserAppValue(EPUser user, EPApp app, boolean select, boolean pending);
+
+}
diff --git a/ecomp-portal-BE-common/src/main/java/org/onap/portalapp/portal/service/PersUserAppServiceImpl.java b/ecomp-portal-BE-common/src/main/java/org/onap/portalapp/portal/service/PersUserAppServiceImpl.java
new file mode 100644
index 00000000..39b88f63
--- /dev/null
+++ b/ecomp-portal-BE-common/src/main/java/org/onap/portalapp/portal/service/PersUserAppServiceImpl.java
@@ -0,0 +1,175 @@
+/*-
+ * ============LICENSE_START==========================================
+ * ONAP Portal
+ * ===================================================================
+ * Copyright (C) 2017 AT&T Intellectual Property. All rights reserved.
+ * ===================================================================
+ *
+ * Unless otherwise specified, all software contained herein is licensed
+ * under the Apache License, Version 2.0 (the "License");
+ * you may not use this software 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.
+ *
+ * Unless otherwise specified, all documentation contained herein is licensed
+ * under the Creative Commons License, Attribution 4.0 Intl. (the "License");
+ * you may not use this documentation except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * https://creativecommons.org/licenses/by/4.0/
+ *
+ * Unless required by applicable law or agreed to in writing, documentation
+ * 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.
+ *
+ * ============LICENSE_END============================================
+ *
+ * ECOMP is a trademark and service mark of AT&T Intellectual Property.
+ */
+package org.onap.portalapp.portal.service;
+
+import java.util.ArrayList;
+import java.util.HashMap;
+import java.util.LinkedHashMap;
+import java.util.List;
+import java.util.Map;
+
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.context.annotation.EnableAspectJAutoProxy;
+import org.springframework.stereotype.Service;
+import org.springframework.transaction.annotation.Transactional;
+import org.hibernate.criterion.Criterion;
+import org.hibernate.criterion.Restrictions;
+import org.onap.portalapp.portal.domain.EPApp;
+import org.onap.portalapp.portal.domain.EPUser;
+import org.onap.portalapp.portal.domain.EPUserApp;
+import org.onap.portalapp.portal.domain.PersUserAppSelection;
+import org.onap.portalapp.portal.domain.PersUserWidgetSelection;
+import org.onap.portalapp.portal.logging.aop.EPMetricsLog;
+import org.onap.portalsdk.core.logging.logic.EELFLoggerDelegate;
+import org.onap.portalsdk.core.service.DataAccessService;
+
+@Service("persUserAppService")
+@Transactional
+@org.springframework.context.annotation.Configuration
+@EnableAspectJAutoProxy
+@EPMetricsLog
+public class PersUserAppServiceImpl implements PersUserAppService {
+
+ private static final String APP_ID = "appId";
+
+ private static final String USER_ID = "userId";
+
+ private static EELFLoggerDelegate logger = EELFLoggerDelegate.getLogger(PersUserAppServiceImpl.class);
+
+ @Autowired
+ private DataAccessService dataAccessService;
+ @Autowired
+ private AdminRolesService adminRolesService;
+ @Autowired
+ private UserRolesService userRolesService;
+
+ /*
+ * (non-Javadoc)
+ *
+ * @see org.openecomp.portalapp.portal.service.UserAppSelectService#
+ * setAppCatalogSelection(org.openecomp.portalapp.portal.domain.EPUser,
+ * org.openecomp.portalapp.portal.transport.AppCatalogSelection)
+ */
+ @Override
+ public void setPersUserAppValue(EPUser user, EPApp app, boolean select, boolean pending) {
+ if (user == null || app == null)
+ throw new IllegalArgumentException("setPersUserAppValue: Null values");
+
+ // Find the record for this user-app combo, if any
+ List<PersUserAppSelection> persList = getUsersAppSelection(user, app);
+
+ // Key constraint limits to 1 row
+ PersUserAppSelection persRow = null;
+ if (persList.size() == 1)
+ persRow = persList.get(0);
+ else
+ persRow = new PersUserAppSelection(null, user.getId(), app.getId(), null);
+
+ if (app.getOpen()) {
+ // Pending status is not meaningful for open apps.
+ if (pending)
+ logger.error(EELFLoggerDelegate.errorLogger,
+ "setPersUserAppValue: invalid request, ignoring set-pending for open app");
+
+ // Open apps have same behavior for regular and admin users
+ if (select) {
+ // Selection of an open app requires a record
+ persRow.setStatusCode("S"); // show
+ dataAccessService.saveDomainObject(persRow, null);
+ } else {
+ // De-selection of an open app requires no record
+ if (persRow.getId() != null)
+ dataAccessService.deleteDomainObject(persRow, null);
+ }
+ } else {
+ // Non-open app.
+
+ // Pending overrides select.
+ if (pending) {
+ persRow.setStatusCode("P");
+ dataAccessService.saveDomainObject(persRow, null);
+ } else {
+ // Behavior depends on Portal (super) admin status, bcos an
+ // admin can force an app onto the dashboard.
+ boolean isPortalAdmin = adminRolesService.isSuperAdmin(user);
+ boolean adminUserHasAppRole = false;
+ if (isPortalAdmin) {
+ List<EPUserApp> roles = userRolesService.getCachedAppRolesForUser(app.getId(), user.getId());
+ adminUserHasAppRole = (roles.size() > 0);
+ logger.debug(EELFLoggerDelegate.debugLogger, "setPersUserAppValue: app {}, admin user {}, role count {}",
+ app.getId(), user.getId(), roles.size());
+ }
+
+ if (select) {
+ if (isPortalAdmin) {
+ // The special case: portal admin
+ persRow.setStatusCode("S"); // show
+ dataAccessService.saveDomainObject(persRow, null);
+ } else {
+ // User has role-based access to the app.
+ // Showing an accessible app requires no record.
+ if (persRow.getId() != null)
+ dataAccessService.deleteDomainObject(persRow, null);
+ }
+ } // select
+ else {
+ if (isPortalAdmin && !adminUserHasAppRole) {
+ // The special case: portal admin, no role
+ if (persRow.getId() != null)
+ dataAccessService.deleteDomainObject(persRow, null);
+ } else {
+ // User has role-based access to the app.
+ // Hiding an accessible app requires a record
+ persRow.setStatusCode("H"); // hide
+ dataAccessService.saveDomainObject(persRow, null);
+ }
+ } // deselect
+ }
+ }
+ }
+
+ @SuppressWarnings("unchecked")
+ private List<PersUserAppSelection> getUsersAppSelection(EPUser user, EPApp app) {
+ List<Criterion> restrictionsList = new ArrayList<Criterion>();
+ Criterion userIdCriterion = Restrictions.eq("userId", user.getId());
+ Criterion appIdCriterion = Restrictions.eq("appId", app.getId());
+ restrictionsList.add(Restrictions.and(userIdCriterion, appIdCriterion));
+ return (List<PersUserAppSelection>) dataAccessService.getList(PersUserAppSelection.class, null, restrictionsList, null);
+ }
+
+}
diff --git a/ecomp-portal-BE-common/src/main/java/org/onap/portalapp/portal/service/PersUserWidgetService.java b/ecomp-portal-BE-common/src/main/java/org/onap/portalapp/portal/service/PersUserWidgetService.java
new file mode 100644
index 00000000..5070e4b2
--- /dev/null
+++ b/ecomp-portal-BE-common/src/main/java/org/onap/portalapp/portal/service/PersUserWidgetService.java
@@ -0,0 +1,57 @@
+/*-
+ * ============LICENSE_START==========================================
+ * ONAP Portal
+ * ===================================================================
+ * Copyright (C) 2017 AT&T Intellectual Property. All rights reserved.
+ * ===================================================================
+ *
+ * Unless otherwise specified, all software contained herein is licensed
+ * under the Apache License, Version 2.0 (the "License");
+ * you may not use this software 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.
+ *
+ * Unless otherwise specified, all documentation contained herein is licensed
+ * under the Creative Commons License, Attribution 4.0 Intl. (the "License");
+ * you may not use this documentation except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * https://creativecommons.org/licenses/by/4.0/
+ *
+ * Unless required by applicable law or agreed to in writing, documentation
+ * 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.
+ *
+ * ============LICENSE_END============================================
+ *
+ * ECOMP is a trademark and service mark of AT&T Intellectual Property.
+ */
+package org.onap.portalapp.portal.service;
+
+import org.onap.portalapp.portal.domain.EPUser;
+
+public interface PersUserWidgetService {
+
+ /**
+ * Sets the appropriate code in the user personalization table to indicate
+ * the application is (de)selected and/or pending.
+ *
+ * @param user
+ * EP User
+ * @param widgetId
+ * widget
+ * @param select
+ * True or false
+ */
+ void setPersUserAppValue(EPUser user, Long widgetId, boolean select);
+
+}
diff --git a/ecomp-portal-BE-common/src/main/java/org/onap/portalapp/portal/service/PersUserWidgetServiceImpl.java b/ecomp-portal-BE-common/src/main/java/org/onap/portalapp/portal/service/PersUserWidgetServiceImpl.java
new file mode 100644
index 00000000..94c934df
--- /dev/null
+++ b/ecomp-portal-BE-common/src/main/java/org/onap/portalapp/portal/service/PersUserWidgetServiceImpl.java
@@ -0,0 +1,106 @@
+/*-
+ * ============LICENSE_START==========================================
+ * ONAP Portal
+ * ===================================================================
+ * Copyright (C) 2017 AT&T Intellectual Property. All rights reserved.
+ * ===================================================================
+ *
+ * Unless otherwise specified, all software contained herein is licensed
+ * under the Apache License, Version 2.0 (the "License");
+ * you may not use this software 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.
+ *
+ * Unless otherwise specified, all documentation contained herein is licensed
+ * under the Creative Commons License, Attribution 4.0 Intl. (the "License");
+ * you may not use this documentation except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * https://creativecommons.org/licenses/by/4.0/
+ *
+ * Unless required by applicable law or agreed to in writing, documentation
+ * 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.
+ *
+ * ============LICENSE_END============================================
+ *
+ * ECOMP is a trademark and service mark of AT&T Intellectual Property.
+ */
+package org.onap.portalapp.portal.service;
+
+import java.util.ArrayList;
+import java.util.List;
+
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.context.annotation.EnableAspectJAutoProxy;
+import org.springframework.stereotype.Service;
+import org.springframework.transaction.annotation.Transactional;
+import org.hibernate.criterion.Criterion;
+import org.hibernate.criterion.Restrictions;
+import org.onap.portalapp.portal.domain.EPUser;
+import org.onap.portalapp.portal.domain.PersUserWidgetSelection;
+import org.onap.portalapp.portal.logging.aop.EPMetricsLog;
+import org.onap.portalsdk.core.logging.logic.EELFLoggerDelegate;
+import org.onap.portalsdk.core.service.DataAccessService;
+
+@Service("persUserWidgetService")
+@Transactional
+@org.springframework.context.annotation.Configuration
+@EnableAspectJAutoProxy
+@EPMetricsLog
+public class PersUserWidgetServiceImpl implements PersUserWidgetService{
+
+ private static EELFLoggerDelegate logger = EELFLoggerDelegate.getLogger(PersUserAppServiceImpl.class);
+
+ @Autowired
+ private DataAccessService dataAccessService;
+
+ @Override
+ public void setPersUserAppValue(EPUser user, Long widgetId, boolean select) {
+ if (user == null || widgetId == null)
+ throw new IllegalArgumentException("setPersUserAppValue: Null values");
+
+ List<PersUserWidgetSelection> persList = getUserWidgetSelction(user, widgetId);
+ // Key constraint limits to 1 row
+ PersUserWidgetSelection persRow = null;
+ if (persList.size() == 1){
+ persRow = persList.get(0);
+ }
+ else {
+ persRow = new PersUserWidgetSelection(null, user.getId(), widgetId, null);
+ }
+ if(select){
+ if (persRow.getId() != null){
+ dataAccessService.deleteDomainObject(persRow, null);
+ }
+ persRow.setStatusCode("S"); // show
+ dataAccessService.saveDomainObject(persRow, null);
+ } else{
+ if (persRow.getId() != null){
+ dataAccessService.deleteDomainObject(persRow, null);
+ }
+ persRow.setStatusCode("H"); // Hide
+ dataAccessService.saveDomainObject(persRow, null);
+ }
+
+ }
+
+ @SuppressWarnings("unchecked")
+ private List<PersUserWidgetSelection> getUserWidgetSelction(EPUser user, Long widgetId) {
+ List<Criterion> restrictionsList = new ArrayList<Criterion>();
+ Criterion userIdCriterion = Restrictions.eq("userId", user.getId());
+ Criterion widgetIdCriterion = Restrictions.eq("widgetId", widgetId);
+ restrictionsList.add(Restrictions.and(userIdCriterion, widgetIdCriterion));
+ return (List<PersUserWidgetSelection>) dataAccessService.getList(PersUserWidgetSelection.class, null, restrictionsList, null);
+ }
+
+}
diff --git a/ecomp-portal-BE-common/src/main/java/org/onap/portalapp/portal/service/PortalAdminService.java b/ecomp-portal-BE-common/src/main/java/org/onap/portalapp/portal/service/PortalAdminService.java
new file mode 100644
index 00000000..a8817286
--- /dev/null
+++ b/ecomp-portal-BE-common/src/main/java/org/onap/portalapp/portal/service/PortalAdminService.java
@@ -0,0 +1,49 @@
+/*-
+ * ============LICENSE_START==========================================
+ * ONAP Portal
+ * ===================================================================
+ * Copyright (C) 2017 AT&T Intellectual Property. All rights reserved.
+ * ===================================================================
+ *
+ * Unless otherwise specified, all software contained herein is licensed
+ * under the Apache License, Version 2.0 (the "License");
+ * you may not use this software 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.
+ *
+ * Unless otherwise specified, all documentation contained herein is licensed
+ * under the Creative Commons License, Attribution 4.0 Intl. (the "License");
+ * you may not use this documentation except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * https://creativecommons.org/licenses/by/4.0/
+ *
+ * Unless required by applicable law or agreed to in writing, documentation
+ * 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.
+ *
+ * ============LICENSE_END============================================
+ *
+ * ECOMP is a trademark and service mark of AT&T Intellectual Property.
+ */
+package org.onap.portalapp.portal.service;
+
+import java.util.List;
+
+import org.onap.portalapp.portal.transport.FieldsValidator;
+import org.onap.portalapp.portal.transport.PortalAdmin;
+
+public interface PortalAdminService {
+ List<PortalAdmin> getPortalAdmins ();
+ FieldsValidator createPortalAdmin(String orgUserId);
+ FieldsValidator deletePortalAdmin(Long userId);
+}
diff --git a/ecomp-portal-BE-common/src/main/java/org/onap/portalapp/portal/service/PortalAdminServiceImpl.java b/ecomp-portal-BE-common/src/main/java/org/onap/portalapp/portal/service/PortalAdminServiceImpl.java
new file mode 100644
index 00000000..2704554e
--- /dev/null
+++ b/ecomp-portal-BE-common/src/main/java/org/onap/portalapp/portal/service/PortalAdminServiceImpl.java
@@ -0,0 +1,305 @@
+/*-
+ * ============LICENSE_START==========================================
+ * ONAP Portal
+ * ===================================================================
+ * Copyright (C) 2017 AT&T Intellectual Property. All rights reserved.
+ * ===================================================================
+ *
+ * Unless otherwise specified, all software contained herein is licensed
+ * under the Apache License, Version 2.0 (the "License");
+ * you may not use this software 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.
+ *
+ * Unless otherwise specified, all documentation contained herein is licensed
+ * under the Creative Commons License, Attribution 4.0 Intl. (the "License");
+ * you may not use this documentation except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * https://creativecommons.org/licenses/by/4.0/
+ *
+ * Unless required by applicable law or agreed to in writing, documentation
+ * 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.
+ *
+ * ============LICENSE_END============================================
+ *
+ * ECOMP is a trademark and service mark of AT&T Intellectual Property.
+ */
+package org.onap.portalapp.portal.service;
+
+import java.util.ArrayList;
+import java.util.HashMap;
+import java.util.List;
+import java.util.Map;
+
+import javax.annotation.PostConstruct;
+import javax.servlet.http.HttpServletResponse;
+
+import org.hibernate.Session;
+import org.hibernate.SessionFactory;
+import org.hibernate.Transaction;
+import org.hibernate.criterion.Criterion;
+import org.hibernate.criterion.Restrictions;
+import org.onap.portalapp.portal.service.SearchService;
+import org.onap.portalapp.portal.domain.EPApp;
+import org.onap.portalapp.portal.domain.EPUser;
+import org.onap.portalapp.portal.logging.aop.EPMetricsLog;
+import org.onap.portalapp.portal.transport.ExternalAccessUser;
+import org.onap.portalapp.portal.transport.FieldsValidator;
+import org.onap.portalapp.portal.transport.PortalAdmin;
+import org.onap.portalapp.portal.transport.PortalAdminUserRole;
+import org.onap.portalapp.portal.utils.EPCommonSystemProperties;
+import org.onap.portalapp.portal.utils.EcompPortalUtils;
+import org.onap.portalapp.portal.utils.PortalConstants;
+import org.onap.portalsdk.core.logging.logic.EELFLoggerDelegate;
+import org.onap.portalsdk.core.service.DataAccessService;
+import org.onap.portalsdk.core.util.SystemProperties;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.context.annotation.EnableAspectJAutoProxy;
+import org.springframework.http.HttpEntity;
+import org.springframework.http.HttpHeaders;
+import org.springframework.http.HttpMethod;
+import org.springframework.stereotype.Service;
+import org.springframework.web.client.RestTemplate;
+
+import com.fasterxml.jackson.databind.ObjectMapper;
+
+@Service("portalAdminService")
+@org.springframework.context.annotation.Configuration
+@EnableAspectJAutoProxy
+@EPMetricsLog
+public class PortalAdminServiceImpl implements PortalAdminService {
+
+ private String SYS_ADMIN_ROLE_ID = "1";
+ private String ECOMP_APP_ID = "1";
+
+ EELFLoggerDelegate logger = EELFLoggerDelegate.getLogger(PortalAdminServiceImpl.class);
+
+ @Autowired
+ private SessionFactory sessionFactory;
+ @Autowired
+ private DataAccessService dataAccessService;
+ @Autowired
+ SearchService searchService;
+ @Autowired
+ private EPAppService epAppService;
+
+ RestTemplate template = new RestTemplate();
+
+ @PostConstruct
+ private void init() {
+ SYS_ADMIN_ROLE_ID = SystemProperties.getProperty(SystemProperties.SYS_ADMIN_ROLE_ID);
+ ECOMP_APP_ID = SystemProperties.getProperty(EPCommonSystemProperties.ECOMP_APP_ID);
+ }
+
+ public List<PortalAdmin> getPortalAdmins() {
+ try {
+ Map<String, String> params = new HashMap<>();
+ params.put("adminRoleId", SYS_ADMIN_ROLE_ID);
+ @SuppressWarnings("unchecked")
+ List<PortalAdmin> portalAdmins = (List<PortalAdmin>) dataAccessService.executeNamedQuery("getPortalAdmins",
+ params, null);
+ logger.debug(EELFLoggerDelegate.debugLogger, "getPortalAdmins was successful");
+ return portalAdmins;
+ } catch (Exception e) {
+ logger.error(EELFLoggerDelegate.errorLogger, "getPortalAdmins failed", e);
+ return null;
+ }
+ }
+
+ public FieldsValidator createPortalAdmin(String orgUserId) {
+ FieldsValidator fieldsValidator = new FieldsValidator();
+ logger.debug(EELFLoggerDelegate.debugLogger, "LR: createPortalAdmin: orgUserId is {}", orgUserId);
+ EPUser user = null;
+ boolean createNewUser = false;
+ List<EPUser> localUserList = getUserListWithOrguseId(orgUserId);
+ if (!localUserList.isEmpty()) {
+ user = localUserList.get(0);
+ } else {
+ createNewUser = true;
+ }
+
+ if (user != null && isLoggedInUserPortalAdmin(user.getId())) {
+ fieldsValidator.httpStatusCode = new Long(HttpServletResponse.SC_CONFLICT);
+ logger.error(EELFLoggerDelegate.errorLogger,
+ "User '" + user.getOrgUserId() + "' already has PortalAdmin role assigned.");
+ } else if (user != null || createNewUser) {
+ Session localSession = null;
+ Transaction transaction = null;
+ try {
+ localSession = sessionFactory.openSession();
+
+ transaction = localSession.beginTransaction();
+ if (createNewUser) {
+ user = this.searchService.searchUserByUserId(orgUserId);
+ if (user != null) {
+ // insert the user with active true in order to
+ // pass login phase.
+ user.setActive(true);
+ localSession.save(EPUser.class.getName(), user);
+ }
+ }
+ if (user != null) {
+ Long userid = user.getId();
+ PortalAdminUserRole userRole = new PortalAdminUserRole();
+ userRole.userId = userid;
+ userRole.roleId = Long.valueOf(SYS_ADMIN_ROLE_ID);
+ userRole.appId = Long.valueOf(ECOMP_APP_ID);
+
+ localSession.save(PortalAdminUserRole.class.getName(), userRole);
+ }
+
+ transaction.commit();
+ // Add role in the external central auth system
+ if(user != null && EcompPortalUtils.checkIfRemoteCentralAccessAllowed()) {
+ addPortalAdminInExternalCentralAuth(user.getOrgUserId(), PortalConstants.PORTAL_ADMIN_ROLE);
+ }
+ } catch (Exception e) {
+ logger.error(EELFLoggerDelegate.errorLogger, "createPortalAdmin failed", e);
+ EcompPortalUtils.rollbackTransaction(transaction, "createPortalAdmin rollback, exception = " + e.toString());
+ fieldsValidator.httpStatusCode = new Long(HttpServletResponse.SC_INTERNAL_SERVER_ERROR);
+ } finally {
+ EcompPortalUtils.closeLocalSession(localSession, "createPortalAdmin");
+ }
+ }
+ return fieldsValidator;
+ }
+
+ @SuppressWarnings("unchecked")
+ private List<EPUser> getUserListWithOrguseId(String orgUserId) {
+ List<Criterion> restrictionsList = new ArrayList<Criterion>();
+ Criterion orgUserIdCriterion = Restrictions.eq("orgUserId", orgUserId);
+ restrictionsList.add(orgUserIdCriterion);
+ return (List<EPUser>) dataAccessService.getList(EPUser.class, null, restrictionsList, null);
+ }
+
+ private void addPortalAdminInExternalCentralAuth(String loginId, String portalAdminRole) throws Exception{
+ try{
+ String name = "";
+ if (EPCommonSystemProperties.containsProperty(
+ EPCommonSystemProperties.EXTERNAL_CENTRAL_ACCESS_USER_DOMAIN)) {
+ name = loginId + SystemProperties
+ .getProperty(EPCommonSystemProperties.EXTERNAL_CENTRAL_ACCESS_USER_DOMAIN);
+ }
+ EPApp app = epAppService.getApp(PortalConstants.PORTAL_APP_ID);
+ String extRole = app.getNameSpace()+"."+portalAdminRole.replaceAll(" ", "_");
+ ObjectMapper addUserRoleMapper = new ObjectMapper();
+ ExternalAccessUser extUser = new ExternalAccessUser(name, extRole);
+ String userRole = addUserRoleMapper.writeValueAsString(extUser);
+ HttpHeaders headers = EcompPortalUtils.base64encodeKeyForAAFBasicAuth();
+
+ HttpEntity<String> addUserRole = new HttpEntity<>(userRole, headers);
+ template.exchange(
+ SystemProperties.getProperty(
+ EPCommonSystemProperties.EXTERNAL_CENTRAL_ACCESS_URL)
+ + "userRole",
+ HttpMethod.POST, addUserRole, String.class);
+ } catch (Exception e) {
+ // This happens only if role already exists in external central access system but not in local DB thats where we logging here
+ if (e.getMessage().equalsIgnoreCase("409 Conflict")) {
+ logger.debug(EELFLoggerDelegate.debugLogger, "Portal Admin role already exists", e.getMessage());
+ } else{
+ logger.error(EELFLoggerDelegate.errorLogger, "Failed to add Portal Admin role ", e);
+ throw e;
+ }
+ }
+ }
+
+ public FieldsValidator deletePortalAdmin(Long userId) {
+ FieldsValidator fieldsValidator = new FieldsValidator();
+ logger.debug(EELFLoggerDelegate.debugLogger, "deletePortalAdmin: test 1");
+ Session localSession = null;
+ Transaction transaction = null;
+
+ try {
+ localSession = sessionFactory.openSession();
+ transaction = localSession.beginTransaction();
+ dataAccessService.deleteDomainObjects(PortalAdminUserRole.class,
+ "user_id='" + userId + "' AND role_id='" + SYS_ADMIN_ROLE_ID + "'", null);
+ transaction.commit();
+ if(EcompPortalUtils.checkIfRemoteCentralAccessAllowed()){
+ deletePortalAdminInExternalCentralAuth(userId, PortalConstants.PORTAL_ADMIN_ROLE);
+ }
+ } catch (Exception e) {
+ logger.error(EELFLoggerDelegate.errorLogger, "deletePortalAdmin failed", e);
+ EcompPortalUtils.rollbackTransaction(transaction, "deletePortalAdmin rollback, exception = " + e.toString());
+ fieldsValidator.httpStatusCode = new Long(HttpServletResponse.SC_INTERNAL_SERVER_ERROR);
+ } finally {
+ EcompPortalUtils.closeLocalSession(localSession, "deletePortalAdmin");
+ }
+ return fieldsValidator;
+ }
+
+
+ private void deletePortalAdminInExternalCentralAuth(Long userId, String portalAdminRole) throws Exception{
+ try{
+ String name = "";
+ List<EPUser> localUserList = getUserListWithUserid(userId);
+ if (EPCommonSystemProperties.containsProperty(
+ EPCommonSystemProperties.EXTERNAL_CENTRAL_ACCESS_USER_DOMAIN)) {
+ name = localUserList.get(0).getOrgUserId() + SystemProperties
+ .getProperty(EPCommonSystemProperties.EXTERNAL_CENTRAL_ACCESS_USER_DOMAIN);
+ }
+ EPApp app = epAppService.getApp(PortalConstants.PORTAL_APP_ID);
+ String extRole = app.getNameSpace()+"."+portalAdminRole.replaceAll(" ", "_");
+ HttpHeaders headers = EcompPortalUtils.base64encodeKeyForAAFBasicAuth();
+ HttpEntity<String> addUserRole = new HttpEntity<>(headers);
+ template.exchange(
+ SystemProperties.getProperty(
+ EPCommonSystemProperties.EXTERNAL_CENTRAL_ACCESS_URL)
+ + "userRole/"+name+"/"+extRole,
+ HttpMethod.DELETE, addUserRole, String.class);
+ } catch (Exception e) {
+ if (e.getMessage().equalsIgnoreCase("404 Not Found")) {
+ logger.debug(EELFLoggerDelegate.debugLogger, "Portal Admin role already deleted or may not be found", e.getMessage());
+ } else{
+ logger.error(EELFLoggerDelegate.errorLogger, "Failed to add Portal Admin role ", e);
+ throw e;
+ }
+ }
+ }
+
+ @SuppressWarnings("unchecked")
+ private List<EPUser> getUserListWithUserid(Long userId) {
+ List<Criterion> restrictionsList = new ArrayList<Criterion>();
+ Criterion orgUserIdCriterion = Restrictions.eq("id", userId);
+ restrictionsList.add(orgUserIdCriterion);
+ return (List<EPUser>) dataAccessService.getList(EPUser.class, null, restrictionsList, null);
+ }
+
+ private void logQuery(String sql) {
+ logger.debug(EELFLoggerDelegate.debugLogger, "Executing query: " + sql);
+ }
+
+ private boolean isLoggedInUserPortalAdmin(Long userId) {
+ try {
+ String sql = "SELECT u.user_id, u.first_name, u.last_name, u.login_id "
+ + " FROM fn_user u, fn_user_role ur " + " WHERE u.user_id = ur.user_id " + " AND ur.user_id="
+ + userId + " AND ur.role_id=" + SYS_ADMIN_ROLE_ID;
+
+ logQuery(sql);
+
+ @SuppressWarnings("unchecked")
+ List<PortalAdmin> portalAdmins = dataAccessService.executeSQLQuery(sql, PortalAdmin.class, null);
+ logger.debug(EELFLoggerDelegate.debugLogger, portalAdmins.toString());
+ if (portalAdmins == null || portalAdmins.size() <= 0) {
+ return false;
+ }
+ return true;
+
+ } catch (Exception e) {
+ logger.error(EELFLoggerDelegate.errorLogger, "isLoggedInUserPortalAdmin failed", e);
+ return false;
+ }
+ }
+}
diff --git a/ecomp-portal-BE-common/src/main/java/org/onap/portalapp/portal/service/SearchService.java b/ecomp-portal-BE-common/src/main/java/org/onap/portalapp/portal/service/SearchService.java
new file mode 100644
index 00000000..9cbc52ea
--- /dev/null
+++ b/ecomp-portal-BE-common/src/main/java/org/onap/portalapp/portal/service/SearchService.java
@@ -0,0 +1,48 @@
+/*-
+ * ============LICENSE_START==========================================
+ * ONAP Portal
+ * ===================================================================
+ * Copyright (C) 2017 AT&T Intellectual Property. All rights reserved.
+ * ===================================================================
+ *
+ * Unless otherwise specified, all software contained herein is licensed
+ * under the Apache License, Version 2.0 (the "License");
+ * you may not use this software 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.
+ *
+ * Unless otherwise specified, all documentation contained herein is licensed
+ * under the Creative Commons License, Attribution 4.0 Intl. (the "License");
+ * you may not use this documentation except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * https://creativecommons.org/licenses/by/4.0/
+ *
+ * Unless required by applicable law or agreed to in writing, documentation
+ * 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.
+ *
+ * ============LICENSE_END============================================
+ *
+ * ECOMP is a trademark and service mark of AT&T Intellectual Property.
+ */
+package org.onap.portalapp.portal.service;
+
+import org.onap.portalapp.portal.domain.EPUser;
+
+public interface SearchService {
+
+ public String searchUsersInPhoneBook(String searchString);
+
+ public EPUser searchUserByUserId(String orgUserId);
+
+}
diff --git a/ecomp-portal-BE-common/src/main/java/org/onap/portalapp/portal/service/SearchServiceImpl.java b/ecomp-portal-BE-common/src/main/java/org/onap/portalapp/portal/service/SearchServiceImpl.java
new file mode 100644
index 00000000..30ff5980
--- /dev/null
+++ b/ecomp-portal-BE-common/src/main/java/org/onap/portalapp/portal/service/SearchServiceImpl.java
@@ -0,0 +1,195 @@
+/*-
+ * ============LICENSE_START==========================================
+ * ONAP Portal
+ * ===================================================================
+ * Copyright (C) 2017 AT&T Intellectual Property. All rights reserved.
+ * ===================================================================
+ *
+ * Unless otherwise specified, all software contained herein is licensed
+ * under the Apache License, Version 2.0 (the "License");
+ * you may not use this software 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.
+ *
+ * Unless otherwise specified, all documentation contained herein is licensed
+ * under the Creative Commons License, Attribution 4.0 Intl. (the "License");
+ * you may not use this documentation except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * https://creativecommons.org/licenses/by/4.0/
+ *
+ * Unless required by applicable law or agreed to in writing, documentation
+ * 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.
+ *
+ * ============LICENSE_END============================================
+ *
+ * ECOMP is a trademark and service mark of AT&T Intellectual Property.
+ */
+package org.onap.portalapp.portal.service;
+
+import java.util.ArrayList;
+import java.util.List;
+
+import org.onap.portalapp.portal.service.SearchService;
+import org.onap.portalapp.portal.service.SearchServiceImpl;
+import org.onap.portalapp.portal.domain.EPUser;
+import org.onap.portalapp.portal.logging.aop.EPMetricsLog;
+import org.onap.portalapp.portal.transport.UserWithNameSurnameTitle;
+import org.onap.portalapp.portal.utils.EcompPortalUtils;
+import org.onap.portalsdk.core.logging.logic.EELFLoggerDelegate;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.context.annotation.EnableAspectJAutoProxy;
+import org.springframework.stereotype.Service;
+import org.springframework.transaction.annotation.Transactional;
+
+import com.fasterxml.jackson.core.JsonProcessingException;
+import com.fasterxml.jackson.databind.ObjectMapper;
+
+@Service("searchService")
+@Transactional
+@org.springframework.context.annotation.Configuration
+@EnableAspectJAutoProxy
+@EPMetricsLog
+public class SearchServiceImpl implements SearchService {
+ EELFLoggerDelegate logger = EELFLoggerDelegate.getLogger(SearchServiceImpl.class);
+
+ // TODO: the values below should be defined in other place
+ private static final int maxSizeOfSearchResult = 100;
+
+
+ @Autowired
+ EPLdapService ldapService;
+
+ @Override
+ public String searchUsersInPhoneBook(String searchString) {
+ String orgUserId = null;
+ List<String> tokens = EcompPortalUtils.parsingByRegularExpression(searchString, " ");
+ for (int i = 0; i < tokens.size(); i++) { // find orgUserId if possible and remove it from tokens
+ if (tokens.get(i).matches(".*\\d+.*")) {
+ orgUserId = tokens.get(i);
+ tokens.remove(i);
+ }
+ }
+ while (tokens.size() > 2) { // we use no more then first 2 tokens (orgUserId is removed, see above)
+ tokens.remove(tokens.size() - 1);
+ }
+ EPUser attrUser = new EPUser();
+ attrUser.setOrgUserId(orgUserId);
+ List<UserWithNameSurnameTitle> resultOfSearch = new ArrayList<UserWithNameSurnameTitle>(), resultOfAdditionalSearch = null;
+ if (tokens.size() == 2) {
+ attrUser.setFirstName(tokens.get(0));
+ attrUser.setLastName(tokens.get(1));
+ resultOfSearch = this.searchUsersByAttrs(attrUser);
+ resultOfSearch = this.removeWrongFirstNames(resultOfSearch, tokens.get(0));
+ resultOfSearch = this.removeWrongLastNames(resultOfSearch, tokens.get(1));
+ if (resultOfSearch.size() < maxSizeOfSearchResult) {
+ attrUser.setFirstName(tokens.get(1));
+ attrUser.setLastName(tokens.get(0));
+ resultOfAdditionalSearch = this.searchUsersByAttrs(attrUser);
+ resultOfAdditionalSearch = this.removeWrongFirstNames(resultOfAdditionalSearch, tokens.get(1));
+ resultOfAdditionalSearch = this.removeWrongLastNames(resultOfAdditionalSearch, tokens.get(0));
+ }
+ } else if (tokens.size() == 1) {
+ attrUser.setFirstName(tokens.get(0));
+ resultOfSearch = this.searchUsersByAttrs(attrUser);
+ resultOfSearch = this.removeWrongFirstNames(resultOfSearch, tokens.get(0));
+ if (resultOfSearch.size() < maxSizeOfSearchResult) {
+ attrUser.setFirstName(null);
+ attrUser.setLastName(tokens.get(0));
+ resultOfAdditionalSearch = this.searchUsersByAttrs(attrUser);
+ resultOfAdditionalSearch = this.removeWrongLastNames(resultOfAdditionalSearch, tokens.get(0));
+ }
+ } else if (orgUserId != null) {
+ resultOfSearch = this.searchUsersByAttrs(attrUser);
+ }
+ if (resultOfAdditionalSearch != null) {
+ resultOfSearch.addAll(resultOfAdditionalSearch);
+ }
+ resultOfSearch = this.cutSearchResultToMaximumSize(resultOfSearch);
+ ObjectMapper mapper = new ObjectMapper();
+ String result = "[]";
+ try {
+ result = mapper.writeValueAsString(resultOfSearch);
+ } catch (JsonProcessingException e) {
+ logger.error(EELFLoggerDelegate.errorLogger, "searchUsersInPhoneBook failed", e);
+ }
+ return result;
+ }
+
+ private List<UserWithNameSurnameTitle> searchUsersByAttrs(EPUser attrUser) {
+ List<UserWithNameSurnameTitle> foundUsers = new ArrayList<UserWithNameSurnameTitle>();
+ try {
+ org.onap.portalsdk.core.command.support.SearchResult searchResult = this.ldapService.searchPost(attrUser, null, null, null, 0, 0, -1);
+ for (Object obj : searchResult) {
+ EPUser user = (EPUser) obj;
+ UserWithNameSurnameTitle foundUser = new UserWithNameSurnameTitle(user.getOrgUserId(), user.getFirstName(), user.getLastName(), user.getJobTitle());
+ foundUsers.add(foundUser);
+ }
+ } catch (Exception e) {
+ logger.error(EELFLoggerDelegate.errorLogger, "searchUsersByAttrs failed", e);
+ }
+ return foundUsers;
+ }
+
+ private List<UserWithNameSurnameTitle> removeWrongFirstNames(List<UserWithNameSurnameTitle> resultOfSearch, String firstName) {
+ firstName = firstName.toUpperCase();
+ for (int i = resultOfSearch.size() - 1; i >= 0; i--) {
+ UserWithNameSurnameTitle user = resultOfSearch.get(i);
+ if ((user.firstName == null) || !user.firstName.toUpperCase().startsWith(firstName)) {
+ resultOfSearch.remove(i);
+ }
+ }
+ return resultOfSearch;
+ }
+
+ private List<UserWithNameSurnameTitle> removeWrongLastNames(List<UserWithNameSurnameTitle> resultOfSearch, String lastName) {
+ lastName = lastName.toUpperCase();
+ for (int i = resultOfSearch.size() - 1; i >= 0; i--) {
+ UserWithNameSurnameTitle user = resultOfSearch.get(i);
+ if ((user.lastName == null) || !user.lastName.toUpperCase().startsWith(lastName)) {
+ resultOfSearch.remove(i);
+ }
+ }
+ return resultOfSearch;
+ }
+
+ private List<UserWithNameSurnameTitle> cutSearchResultToMaximumSize(List<UserWithNameSurnameTitle> resultOfSearch) {
+ for (int i = resultOfSearch.size() - 1; i >= maxSizeOfSearchResult; i--) {
+ resultOfSearch.remove(i);
+ }
+ return resultOfSearch;
+ }
+
+ @Override
+ @SuppressWarnings("unchecked")
+ public EPUser searchUserByUserId(String orgUserId) {
+ EPUser user = null;
+ EPUser searchedUser = new EPUser();
+ searchedUser.setOrgUserId(orgUserId);
+ try {
+ List<Object> searchResult = ldapService.searchPost(searchedUser, "", null, null, 0, -1, 1);
+ for (Object obj : searchResult) {
+ if (obj instanceof EPUser) {
+ user = (EPUser) obj;
+ // This assignment should be checked later!
+ user.setLoginId(orgUserId);
+ break;
+ }
+ }
+ } catch (Exception e) {
+ logger.error(EELFLoggerDelegate.errorLogger, "searchUserByUserId failed", e);
+ }
+ return user;
+ }
+
+}
diff --git a/ecomp-portal-BE-common/src/main/java/org/onap/portalapp/portal/service/SharedContextService.java b/ecomp-portal-BE-common/src/main/java/org/onap/portalapp/portal/service/SharedContextService.java
new file mode 100644
index 00000000..37321e55
--- /dev/null
+++ b/ecomp-portal-BE-common/src/main/java/org/onap/portalapp/portal/service/SharedContextService.java
@@ -0,0 +1,118 @@
+/*-
+ * ============LICENSE_START==========================================
+ * ONAP Portal
+ * ===================================================================
+ * Copyright (C) 2017 AT&T Intellectual Property. All rights reserved.
+ * ===================================================================
+ *
+ * Unless otherwise specified, all software contained herein is licensed
+ * under the Apache License, Version 2.0 (the "License");
+ * you may not use this software 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.
+ *
+ * Unless otherwise specified, all documentation contained herein is licensed
+ * under the Creative Commons License, Attribution 4.0 Intl. (the "License");
+ * you may not use this documentation except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * https://creativecommons.org/licenses/by/4.0/
+ *
+ * Unless required by applicable law or agreed to in writing, documentation
+ * 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.
+ *
+ * ============LICENSE_END============================================
+ *
+ * ECOMP is a trademark and service mark of AT&T Intellectual Property.
+ */
+package org.onap.portalapp.portal.service;
+
+import java.util.List;
+
+import org.onap.portalapp.portal.domain.SharedContext;
+
+/**
+ * Defines the methods exposed by the service that manages shared context
+ * objects in the database.
+ */
+public interface SharedContextService {
+
+ /**
+ * Gets all shared context objects for the specified context ID.
+ *
+ * @param contextId
+ * SharedContext ID
+ * @return List of SharedContext objects
+ */
+ List<SharedContext> getSharedContexts(String contextId);
+
+ /**
+ * Gets the shared context with the specified context ID and key.
+ *
+ * @param contextId
+ * Context ID; usually a session ID
+ * @param key
+ * Key for the key-value pair
+ * @return Value found in the database, null if any parameter is null or no
+ * shared context exists with that context ID - key pair.
+ */
+ SharedContext getSharedContext(String contextId, String key);
+
+ /**
+ * Creates a new shared context entry with the specified context ID, key and
+ * value.
+ *
+ * @param contextId
+ * SharedContext ID
+ * @param key
+ * Key for the key-value pair.
+ * @param value
+ * Value for the key-value pair.
+ */
+ void addSharedContext(String contextId, String key, String value);
+
+ /**
+ * Saves the specified shared context.
+ *
+ * @param context
+ * SharedContext object to save.
+ */
+ void saveSharedContext(SharedContext context);
+
+ /**
+ * Deletes the specified shared context.
+ *
+ * @param context
+ * SharedContext object to delete.
+ */
+ void deleteSharedContext(SharedContext context);
+
+ /**
+ * Deletes all shared contexts with the specified context ID.
+ *
+ * @param contextId
+ * Context ID; usually a session ID
+ * @return number of shared-context objects deleted
+ */
+ int deleteSharedContexts(String contextId);
+
+ /**
+ * Deletes all shared contexts with a creation time that is older than the
+ * specified value.
+ *
+ * @param ageInSeconds
+ * Expiration threshold in seconds
+ */
+ void expireSharedContexts(int ageInSeconds);
+
+}
diff --git a/ecomp-portal-BE-common/src/main/java/org/onap/portalapp/portal/service/SharedContextServiceImpl.java b/ecomp-portal-BE-common/src/main/java/org/onap/portalapp/portal/service/SharedContextServiceImpl.java
new file mode 100644
index 00000000..a950c5ff
--- /dev/null
+++ b/ecomp-portal-BE-common/src/main/java/org/onap/portalapp/portal/service/SharedContextServiceImpl.java
@@ -0,0 +1,194 @@
+/*-
+ * ============LICENSE_START==========================================
+ * ONAP Portal
+ * ===================================================================
+ * Copyright (C) 2017 AT&T Intellectual Property. All rights reserved.
+ * ===================================================================
+ *
+ * Unless otherwise specified, all software contained herein is licensed
+ * under the Apache License, Version 2.0 (the "License");
+ * you may not use this software 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.
+ *
+ * Unless otherwise specified, all documentation contained herein is licensed
+ * under the Creative Commons License, Attribution 4.0 Intl. (the "License");
+ * you may not use this documentation except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * https://creativecommons.org/licenses/by/4.0/
+ *
+ * Unless required by applicable law or agreed to in writing, documentation
+ * 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.
+ *
+ * ============LICENSE_END============================================
+ *
+ * ECOMP is a trademark and service mark of AT&T Intellectual Property.
+ */
+package org.onap.portalapp.portal.service;
+
+import java.text.SimpleDateFormat;
+import java.util.ArrayList;
+import java.util.Date;
+import java.util.List;
+
+import org.hibernate.criterion.Criterion;
+import org.hibernate.criterion.Restrictions;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.context.annotation.EnableAspectJAutoProxy;
+import org.springframework.stereotype.Service;
+import org.springframework.transaction.annotation.Transactional;
+import org.onap.portalapp.portal.domain.SharedContext;
+import org.onap.portalapp.portal.logging.aop.EPMetricsLog;
+import org.onap.portalsdk.core.logging.logic.EELFLoggerDelegate;
+import org.onap.portalsdk.core.service.DataAccessService;
+
+/**
+ * Implementation of the shared-context service that talks to the database.
+ */
+@Service("sharedContextService")
+@Transactional
+@org.springframework.context.annotation.Configuration
+@EnableAspectJAutoProxy
+@EPMetricsLog
+public class SharedContextServiceImpl implements SharedContextService {
+
+ @Autowired
+ private DataAccessService dataAccessService;
+
+ private EELFLoggerDelegate logger = EELFLoggerDelegate.getLogger(SharedContextServiceImpl.class);
+
+ /*
+ * (non-Javadoc)
+ *
+ * @see org.openecomp.portalsdk.core.service.SharedContextService#
+ * getSharedContexts()
+ */
+ @Override
+ @SuppressWarnings("unchecked")
+ public List<SharedContext> getSharedContexts(String contextId) {
+ List<Criterion> restrictionsList = new ArrayList<Criterion>();
+ Criterion contextIdCrit = Restrictions.eq("context_id", contextId);
+ restrictionsList.add(contextIdCrit);
+ List<SharedContext> contexts = (List<SharedContext>) getDataAccessService().getList(SharedContext.class, null,
+ restrictionsList, null);
+
+ return contexts;
+ }
+
+ /*
+ * (non-Javadoc)
+ *
+ * @see org.openecomp.portalsdk.core.service.SharedContextService#
+ * getSharedContext(java. lang.String, java.lang.String)
+ */
+ @Override
+ public SharedContext getSharedContext(String contextId, String key) {
+ SharedContext context = null;
+ List<Criterion> restrictionsList = new ArrayList<Criterion>();
+ Criterion contextIdCrit = Restrictions.eq("context_id", contextId);
+ Criterion keyCrit = Restrictions.eq("ckey", key);
+ restrictionsList.add(contextIdCrit);
+ restrictionsList.add(keyCrit);
+ @SuppressWarnings("unchecked")
+ List<SharedContext> contexts = (List<SharedContext>) getDataAccessService().getList(SharedContext.class, null,
+ restrictionsList, null);
+ if (contexts != null && contexts.size() == 1)
+ context = contexts.get(0);
+
+ return context;
+ }
+
+ /*
+ * (non-Javadoc)
+ *
+ * @see org.openecomp.portalapp.portal.service.SharedContextService#
+ * addSharedContext(java.lang.String, java.lang.String, java.lang.String)
+ */
+ @Override
+ public void addSharedContext(String contextId, String key, String value) {
+ SharedContext context = new SharedContext(contextId, key, value);
+ saveSharedContext(context);
+ }
+
+ /*
+ * (non-Javadoc)
+ *
+ * @see org.openecomp.portalsdk.core.service.SharedContextService#
+ * saveSharedContext(org.openecomp.portalapp.portal.domain.SharedContext)
+ */
+ @Override
+ public void saveSharedContext(SharedContext context) {
+ getDataAccessService().saveDomainObject(context, null);
+ }
+
+ /*
+ * (non-Javadoc)
+ *
+ * @see org.openecomp.portalsdk.core.service.SharedContextService#
+ * deleteSharedContext(org.openecomp.portalapp.portal.domain.SharedContext)
+ */
+ @Override
+ public void deleteSharedContext(SharedContext context) {
+ getDataAccessService().deleteDomainObject(context, null);
+ }
+
+ /*
+ * (non-Javadoc)
+ *
+ * @see org.openecomp.portalapp.portal.service.SharedContextService#
+ * deleteSharedContexts(java.lang.String)
+ */
+ @Override
+ public int deleteSharedContexts(String contextId) {
+ // Uses an inefficient method to avoid a where clause
+ // that could be used to mount a SQL injection attack.
+ List<SharedContext> contexts = getSharedContexts(contextId);
+ if (contexts == null)
+ return 0;
+
+ logger.debug(EELFLoggerDelegate.debugLogger, "deleteSharedContexts: count is " + contexts.size());
+ for (SharedContext sc : contexts)
+ deleteSharedContext(sc);
+
+ return contexts.size();
+ }
+
+ /*
+ * (non-Javadoc)
+ *
+ * @see org.openecomp.portalapp.portal.service.SharedContextService#
+ * expireSharedContexts(int)
+ */
+ @Override
+ public void expireSharedContexts(int ageInSeconds) {
+ // Specific to the MySQL database.
+ // final String whereClause = " where create_time < ADDDATE(NOW(),
+ // INTERVAL - " + ageInSeconds + " SECOND)";
+ final SimpleDateFormat dateFormat = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
+ Date expiredDateTime = new Date(System.currentTimeMillis() - ageInSeconds * 1000);
+ logger.debug(EELFLoggerDelegate.debugLogger,
+ "expireSharedContexts: expire time is " + expiredDateTime.toString());
+ final String whereClause = " create_time < '" + dateFormat.format(expiredDateTime) + "'";
+ getDataAccessService().deleteDomainObjects(SharedContext.class, whereClause, null);
+ }
+
+ public DataAccessService getDataAccessService() {
+ return dataAccessService;
+ }
+
+ public void setDataAccessService(DataAccessService dataAccessService) {
+ this.dataAccessService = dataAccessService;
+ }
+
+}
diff --git a/ecomp-portal-BE-common/src/main/java/org/onap/portalapp/portal/service/TicketEventService.java b/ecomp-portal-BE-common/src/main/java/org/onap/portalapp/portal/service/TicketEventService.java
new file mode 100644
index 00000000..ad0dbc55
--- /dev/null
+++ b/ecomp-portal-BE-common/src/main/java/org/onap/portalapp/portal/service/TicketEventService.java
@@ -0,0 +1,46 @@
+/*-
+ * ============LICENSE_START==========================================
+ * ONAP Portal
+ * ===================================================================
+ * Copyright (C) 2017 AT&T Intellectual Property. All rights reserved.
+ * ===================================================================
+ *
+ * Unless otherwise specified, all software contained herein is licensed
+ * under the Apache License, Version 2.0 (the "License");
+ * you may not use this software 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.
+ *
+ * Unless otherwise specified, all documentation contained herein is licensed
+ * under the Creative Commons License, Attribution 4.0 Intl. (the "License");
+ * you may not use this documentation except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * https://creativecommons.org/licenses/by/4.0/
+ *
+ * Unless required by applicable law or agreed to in writing, documentation
+ * 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.
+ *
+ * ============LICENSE_END============================================
+ *
+ * ECOMP is a trademark and service mark of AT&T Intellectual Property.
+ */
+package org.onap.portalapp.portal.service;
+
+import com.fasterxml.jackson.databind.JsonNode;
+
+public interface TicketEventService {
+
+ public String getNotificationHyperLink(JsonNode application, String ticket, String eventSource);
+
+}
diff --git a/ecomp-portal-BE-common/src/main/java/org/onap/portalapp/portal/service/UserNotificationService.java b/ecomp-portal-BE-common/src/main/java/org/onap/portalapp/portal/service/UserNotificationService.java
new file mode 100644
index 00000000..f327c842
--- /dev/null
+++ b/ecomp-portal-BE-common/src/main/java/org/onap/portalapp/portal/service/UserNotificationService.java
@@ -0,0 +1,158 @@
+/*-
+ * ============LICENSE_START==========================================
+ * ONAP Portal
+ * ===================================================================
+ * Copyright (C) 2017 AT&T Intellectual Property. All rights reserved.
+ * ===================================================================
+ *
+ * Unless otherwise specified, all software contained herein is licensed
+ * under the Apache License, Version 2.0 (the "License");
+ * you may not use this software 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.
+ *
+ * Unless otherwise specified, all documentation contained herein is licensed
+ * under the Creative Commons License, Attribution 4.0 Intl. (the "License");
+ * you may not use this documentation except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * https://creativecommons.org/licenses/by/4.0/
+ *
+ * Unless required by applicable law or agreed to in writing, documentation
+ * 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.
+ *
+ * ============LICENSE_END============================================
+ *
+ * ECOMP is a trademark and service mark of AT&T Intellectual Property.
+ */
+package org.onap.portalapp.portal.service;
+
+import java.util.List;
+
+import org.onap.portalapp.portal.domain.EPUser;
+import org.onap.portalapp.portal.domain.EcompAppRole;
+import org.onap.portalapp.portal.transport.EpNotificationItem;
+import org.onap.portalapp.portal.transport.EpNotificationItemVO;
+import org.onap.portalapp.portal.transport.EpRoleNotificationItem;
+
+public interface UserNotificationService {
+
+ /**
+ * Gets the specified notifications with userId from ep_notification
+ *
+ * @param userId
+ *
+ * @return the notifications with the specified userId
+ */
+
+ List<EpNotificationItem> getNotifications(Long userId);
+
+ /**
+ * Gets the specified roles from ep_role_notification
+ *
+ * @param notificationId
+ *
+ * @return the roles for a specified notification
+ */
+
+ List<EpRoleNotificationItem> getNotificationRoles(Long notificationId);
+
+ /**
+ * Get all app role list from the fn_app and fn_role table
+ *
+ * @return list of all roles associated with the applications
+ */
+ List<EcompAppRole> getAppRoleList();
+
+ /**
+ * Marks the notification as viewed by the specified user.
+ *
+ * @param notificationId
+ * @param userId
+ */
+ void setNotificationRead(Long notificationId, int userId);
+
+ /**
+ * Saves the specified notification to the table ep_notification
+ *
+ * @param notificationItem
+ * @throws Exception
+ */
+
+ String saveNotification(EpNotificationItem notificationItem) throws Exception;
+
+ /**
+ * Gets the specified notification with the userId for view all recent
+ * notifications
+ *
+ * @param userId
+ *
+ * @return the notification list
+ */
+
+ List<EpNotificationItemVO> getNotificationHistoryVO(Long userId);
+
+ /**
+ * Gets the notifications with the userId for user notifications
+ *
+ * @param userId
+ *
+ * @return the notification list
+ */
+
+ List<EpNotificationItemVO> getAdminNotificationVOS(Long userId);
+
+ /**
+ * Gets the user list from fn_user
+ *
+ * @param OrgIds
+ *
+ * @return the users list
+ */
+
+ List<EPUser> getUsersByOrgIds(List<String> OrgIds);
+
+ /**
+ * Gets the received recipient to whom the notification is delivered from
+ * external system
+ *
+ * @param notificationId
+ *
+ * @return the active users
+ */
+
+ List<String> getMessageRecipients(Long notificationId);
+
+ /**
+ * delete the records from ep_notification table when the endtime is more
+ * than 3 months
+ *
+ */
+
+ void deleteNotificationsFromEpNotificationTable();
+
+ /**
+ * delete the records from ep_user_notification table when the endtime is
+ * more than 3 months
+ *
+ */
+ void deleteNotificationsFromEpUserNotificationTable();
+
+ /**
+ * delete the records from ep_role_notification table when the endtime is
+ * more than 3 months
+ *
+ */
+ void deleteNotificationsFromEpRoleNotificationTable();
+
+}
diff --git a/ecomp-portal-BE-common/src/main/java/org/onap/portalapp/portal/service/UserNotificationServiceImpl.java b/ecomp-portal-BE-common/src/main/java/org/onap/portalapp/portal/service/UserNotificationServiceImpl.java
new file mode 100644
index 00000000..130c99e7
--- /dev/null
+++ b/ecomp-portal-BE-common/src/main/java/org/onap/portalapp/portal/service/UserNotificationServiceImpl.java
@@ -0,0 +1,262 @@
+/*-
+ * ============LICENSE_START==========================================
+ * ONAP Portal
+ * ===================================================================
+ * Copyright (C) 2017 AT&T Intellectual Property. All rights reserved.
+ * ===================================================================
+ *
+ * Unless otherwise specified, all software contained herein is licensed
+ * under the Apache License, Version 2.0 (the "License");
+ * you may not use this software 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.
+ *
+ * Unless otherwise specified, all documentation contained herein is licensed
+ * under the Creative Commons License, Attribution 4.0 Intl. (the "License");
+ * you may not use this documentation except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * https://creativecommons.org/licenses/by/4.0/
+ *
+ * Unless required by applicable law or agreed to in writing, documentation
+ * 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.
+ *
+ * ============LICENSE_END============================================
+ *
+ * ECOMP is a trademark and service mark of AT&T Intellectual Property.
+ */
+package org.onap.portalapp.portal.service;
+
+import java.util.Date;
+import java.util.HashMap;
+import java.util.HashSet;
+import java.util.List;
+import java.util.Map;
+import java.util.Set;
+
+import org.hibernate.SessionFactory;
+import org.onap.portalapp.portal.domain.EPUser;
+import org.onap.portalapp.portal.domain.EPUserNotification;
+import org.onap.portalapp.portal.domain.EcompAppRole;
+import org.onap.portalapp.portal.logging.aop.EPMetricsLog;
+import org.onap.portalapp.portal.transport.EpNotificationItem;
+import org.onap.portalapp.portal.transport.EpNotificationItemVO;
+import org.onap.portalapp.portal.transport.EpRoleNotificationItem;
+import org.onap.portalsdk.core.logging.logic.EELFLoggerDelegate;
+import org.onap.portalsdk.core.service.DataAccessService;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.context.annotation.EnableAspectJAutoProxy;
+import org.springframework.stereotype.Service;
+
+@Service("userNotificationService")
+@org.springframework.context.annotation.Configuration
+@EnableAspectJAutoProxy
+@EPMetricsLog
+public class UserNotificationServiceImpl implements UserNotificationService {
+ EELFLoggerDelegate logger = EELFLoggerDelegate.getLogger(FunctionalMenuServiceImpl.class);
+
+ @Autowired
+ private DataAccessService dataAccessService;
+ @Autowired
+ private SessionFactory sessionFactory;
+
+ /*
+ * (non-Javadoc)
+ *
+ * @see org.openecomp.portalapp.portal.service.UserNotificationService#
+ * getNotifications(java.lang.Long)
+ */
+ @Override
+ public List<EpNotificationItem> getNotifications(Long userId) {
+ Map<String, String> params = new HashMap<String, String>();
+ params.put("user_id", userId.toString());
+ @SuppressWarnings("unchecked")
+ List<EpNotificationItem> notificationList = dataAccessService.executeNamedQuery("getNotifications", params,
+ null);
+ // set the roles to null for pure retrieval of all notifications
+ for (EpNotificationItem item : notificationList) {
+ item.setRoles(null);
+ }
+ return notificationList;
+ }
+
+ /*
+ * (non-Javadoc)
+ *
+ * @see org.openecomp.portalapp.portal.service.UserNotificationService#
+ * getNotificationHistoryVO(java.lang.Long)
+ */
+ @Override
+ public List<EpNotificationItemVO> getNotificationHistoryVO(Long userId) {
+ Map<String, String> params = new HashMap<String, String>();
+ params.put("user_id", userId.toString());
+ @SuppressWarnings("unchecked")
+ List<EpNotificationItemVO> notificationList = dataAccessService.executeNamedQuery("getNotificationHistoryVO",
+ params, null);
+ return notificationList;
+ }
+
+ /*
+ * (non-Javadoc)
+ *
+ * @see org.openecomp.portalapp.portal.service.UserNotificationService#
+ * getAdminNotificationVOS()
+ */
+ @Override
+ public List<EpNotificationItemVO> getAdminNotificationVOS(Long userId) {
+ Map<String, String> params = new HashMap<String, String>();
+ params.put("user_id", userId.toString());
+ @SuppressWarnings("unchecked")
+ List<EpNotificationItemVO> notificationList = dataAccessService
+ .executeNamedQuery("getAdminNotificationHistoryVO", params, null);
+ return notificationList;
+ }
+
+ /*
+ * (non-Javadoc)
+ *
+ * @see org.openecomp.portalapp.portal.service.UserNotificationService#
+ * getNotificationRoles(java.lang.Long)
+ */
+ @Override
+ public List<EpRoleNotificationItem> getNotificationRoles(Long notificationId) {
+ Map<String, String> params = new HashMap<String, String>();
+ params.put("notificationId", Long.toString(notificationId));
+ @SuppressWarnings("unchecked")
+ List<EpRoleNotificationItem> roleNotifList = dataAccessService.executeNamedQuery("getNotificationRoles", params,
+ null);
+ return roleNotifList;
+ }
+
+ /*
+ * (non-Javadoc)
+ *
+ * @see org.openecomp.portalapp.portal.service.UserNotificationService#
+ * getAppRoleList()
+ */
+ @SuppressWarnings("unchecked")
+ @Override
+ public List<EcompAppRole> getAppRoleList() {
+ List<EcompAppRole> appRoleList = (List<EcompAppRole>) dataAccessService
+ .executeNamedQuery("getEpNotificationAppRoles", null, null);
+ return appRoleList;
+ }
+
+ /*
+ * (non-Javadoc)
+ *
+ * @see org.openecomp.portalapp.portal.service.UserNotificationService#
+ * setNotificationsRead(java.lang.Long, int)
+ */
+ @Override
+ public void setNotificationRead(Long notificationId, int userId) {
+ EPUserNotification userNotification = new EPUserNotification();
+ userNotification.setNotificationId(notificationId);
+ userNotification.setUpdateTime(new Date());
+ userNotification.setViewed("Y");
+ userNotification.setUserId((long) userId);
+ getDataAccessService().saveDomainObject(userNotification, null);
+ }
+
+ /*
+ * (non-Javadoc)
+ *
+ * @see org.openecomp.portalapp.portal.service.UserNotificationService#
+ * saveNotification(org.openecomp.portalapp.portal.transport.
+ * EpNotificationItem)
+ */
+ @Override
+ public String saveNotification(EpNotificationItem notificationItem) throws Exception {
+
+ // gather the roles
+ if (notificationItem.getRoleIds() != null && !notificationItem.getIsForAllRoles().equals("Y")) {
+ if (notificationItem.getRoles() == null) {
+ Set<EpRoleNotificationItem> roleSet = new HashSet<EpRoleNotificationItem>();
+ notificationItem.setRoles(roleSet);
+ }
+ for (Long roleId : notificationItem.getRoleIds()) {
+ EpRoleNotificationItem roleItem = new EpRoleNotificationItem();
+ roleItem.setNotificationId(notificationItem.getNotificationId());
+ roleItem.setRoleId(roleId.intValue());
+ notificationItem.getRoles().add(roleItem);
+ }
+ }
+
+ // for updates fetch roles and then save
+ if (notificationItem.getNotificationId() != null) {
+ EpNotificationItem updateNotificationItem = (EpNotificationItem) getDataAccessService()
+ .getDomainObject(EpNotificationItem.class, notificationItem.getNotificationId(), null);
+ notificationItem.setRoles(updateNotificationItem.getRoles());
+ }
+ if (notificationItem.msgSource == null) {
+ notificationItem.setMsgSource("EP");
+ }
+ getDataAccessService().saveDomainObject(notificationItem, null);
+ return "";
+
+ }
+
+ @Override
+ public List<EPUser> getUsersByOrgIds(List<String> OrgIds) {
+ Map<String, Object> params = new HashMap<String, Object>();
+ params.put("OrgIds", OrgIds);
+ @SuppressWarnings("unchecked")
+ List<EPUser> userList = dataAccessService.executeNamedQuery("getUsersByOrgIdsNotifications", params, null);
+ return userList;
+ }
+
+ @Override
+ public List<String> getMessageRecipients(Long notificationId) {
+ Map<String, String> params = new HashMap<>();
+ params.put("notificationId", Long.toString(notificationId));
+ @SuppressWarnings("unchecked")
+ List<String> activeUsers = dataAccessService.executeNamedQuery("messageRecipients", params, null);
+ return activeUsers;
+ }
+
+ public DataAccessService getDataAccessService() {
+ return dataAccessService;
+ }
+
+ public void setDataAccessService(DataAccessService dataAccessService) {
+ this.dataAccessService = dataAccessService;
+ }
+
+ public SessionFactory getSessionFactory() {
+ return sessionFactory;
+ }
+
+ public void setSessionFactory(SessionFactory sessionFactory) {
+ this.sessionFactory = sessionFactory;
+ }
+
+ @Override
+ public void deleteNotificationsFromEpNotificationTable() {
+ Map<String, String> params = new HashMap<String, String>();
+ dataAccessService.executeNamedQuery("deleteNotificationsFromEpNotificationTable", params, null);
+ }
+
+ @Override
+ public void deleteNotificationsFromEpUserNotificationTable() {
+ Map<String, String> params = new HashMap<String, String>();
+ dataAccessService.executeNamedQuery("deleteNotificationsFromEpUserNotificationTable", params, null);
+
+ }
+
+ @Override
+ public void deleteNotificationsFromEpRoleNotificationTable() {
+ Map<String, String> params = new HashMap<String, String>();
+ dataAccessService.executeNamedQuery("deleteNotificationsFromEpRoleNotificationTable", params, null);
+ }
+
+}
diff --git a/ecomp-portal-BE-common/src/main/java/org/onap/portalapp/portal/service/UserRolesCommonServiceImpl.java b/ecomp-portal-BE-common/src/main/java/org/onap/portalapp/portal/service/UserRolesCommonServiceImpl.java
new file mode 100644
index 00000000..3535f753
--- /dev/null
+++ b/ecomp-portal-BE-common/src/main/java/org/onap/portalapp/portal/service/UserRolesCommonServiceImpl.java
@@ -0,0 +1,1950 @@
+/*-
+ * ============LICENSE_START==========================================
+ * ONAP Portal
+ * ===================================================================
+ * Copyright (C) 2017 AT&T Intellectual Property. All rights reserved.
+ * ===================================================================
+ *
+ * Unless otherwise specified, all software contained herein is licensed
+ * under the Apache License, Version 2.0 (the "License");
+ * you may not use this software 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.
+ *
+ * Unless otherwise specified, all documentation contained herein is licensed
+ * under the Creative Commons License, Attribution 4.0 Intl. (the "License");
+ * you may not use this documentation except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * https://creativecommons.org/licenses/by/4.0/
+ *
+ * Unless required by applicable law or agreed to in writing, documentation
+ * 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.
+ *
+ * ============LICENSE_END============================================
+ *
+ * ECOMP is a trademark and service mark of AT&T Intellectual Property.
+ */
+
+package org.onap.portalapp.portal.service;
+
+import java.io.IOException;
+import java.util.ArrayList;
+import java.util.Arrays;
+import java.util.Collection;
+import java.util.Date;
+import java.util.HashMap;
+import java.util.HashSet;
+import java.util.LinkedHashSet;
+import java.util.List;
+import java.util.Map;
+import java.util.Set;
+import java.util.SortedSet;
+import java.util.TreeSet;
+import java.util.stream.Collectors;
+
+import javax.servlet.http.HttpServletResponse;
+
+import org.apache.commons.lang.StringUtils;
+import org.apache.cxf.transport.http.HTTPException;
+import org.hibernate.SQLQuery;
+import org.hibernate.Session;
+import org.hibernate.SessionFactory;
+import org.hibernate.Transaction;
+import org.json.JSONArray;
+import org.json.JSONObject;
+import org.onap.portalapp.portal.service.SearchService;
+import org.onap.portalapp.externalsystemapproval.model.ExternalSystemRoleApproval;
+import org.onap.portalapp.externalsystemapproval.model.ExternalSystemUser;
+import org.onap.portalapp.portal.domain.EPApp;
+import org.onap.portalapp.portal.domain.EPRole;
+import org.onap.portalapp.portal.domain.EPUser;
+import org.onap.portalapp.portal.domain.EPUserApp;
+import org.onap.portalapp.portal.domain.EPUserAppCatalogRoles;
+import org.onap.portalapp.portal.domain.EPUserAppRoles;
+import org.onap.portalapp.portal.domain.EPUserAppRolesRequest;
+import org.onap.portalapp.portal.domain.EPUserAppRolesRequestDetail;
+import org.onap.portalapp.portal.domain.ExternalSystemAccess;
+import org.onap.portalapp.portal.logging.aop.EPMetricsLog;
+import org.onap.portalapp.portal.logging.format.EPAppMessagesEnum;
+import org.onap.portalapp.portal.logging.logic.EPLogUtil;
+import org.onap.portalapp.portal.transport.AppWithRolesForUser;
+import org.onap.portalapp.portal.transport.CentralV2Role;
+import org.onap.portalapp.portal.transport.EPUserAppCurrentRoles;
+import org.onap.portalapp.portal.transport.EcompUserAppRoles;
+import org.onap.portalapp.portal.transport.ExternalAccessUser;
+import org.onap.portalapp.portal.transport.ExternalAccessUserRoleDetail;
+import org.onap.portalapp.portal.transport.ExternalRequestFieldsValidator;
+import org.onap.portalapp.portal.transport.ExternalRoleDescription;
+import org.onap.portalapp.portal.transport.FieldsValidator;
+import org.onap.portalapp.portal.transport.FunctionalMenuItem;
+import org.onap.portalapp.portal.transport.FunctionalMenuRole;
+import org.onap.portalapp.portal.transport.RemoteRole;
+import org.onap.portalapp.portal.transport.RemoteUserWithRoles;
+import org.onap.portalapp.portal.transport.RoleInAppForUser;
+import org.onap.portalapp.portal.transport.RolesInAppForUser;
+import org.onap.portalapp.portal.transport.UserApplicationRoles;
+import org.onap.portalapp.portal.utils.EPCommonSystemProperties;
+import org.onap.portalapp.portal.utils.EcompPortalUtils;
+import org.onap.portalapp.portal.utils.PortalConstants;
+import org.onap.portalsdk.core.domain.Role;
+import org.onap.portalsdk.core.logging.logic.EELFLoggerDelegate;
+import org.onap.portalsdk.core.restful.domain.EcompRole;
+import org.onap.portalsdk.core.service.DataAccessService;
+import org.onap.portalsdk.core.service.RoleService;
+import org.onap.portalsdk.core.util.SystemProperties;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.http.HttpEntity;
+import org.springframework.http.HttpHeaders;
+import org.springframework.http.HttpMethod;
+import org.springframework.http.HttpStatus;
+import org.springframework.http.ResponseEntity;
+import org.springframework.web.client.RestTemplate;
+
+import com.fasterxml.jackson.core.JsonProcessingException;
+import com.fasterxml.jackson.databind.DeserializationFeature;
+import com.fasterxml.jackson.databind.ObjectMapper;
+
+@EPMetricsLog
+public class UserRolesCommonServiceImpl {
+
+ private static EELFLoggerDelegate logger = EELFLoggerDelegate.getLogger(UserRolesCommonServiceImpl.class);
+
+ private static final Object syncRests = new Object();
+
+ @Autowired
+ private DataAccessService dataAccessService;
+ @Autowired
+ private SessionFactory sessionFactory;
+ @Autowired
+ private SearchService searchService;
+ @Autowired
+ private EPAppService appsService;
+ @Autowired
+ private ApplicationsRestClientService applicationsRestClientService;
+ @Autowired
+ private EPRoleService epRoleService;
+ @Autowired
+ private RoleService roleService;
+
+ @Autowired
+ private ExternalAccessRolesService externalAccessRolesService;
+
+ RestTemplate template = new RestTemplate();
+
+ /**
+ *
+ * @param ecompRoles
+ * @return HashMap<Long, EcompRole>
+ */
+ private static HashMap<Long, EcompRole> hashMapFromEcompRoles(EcompRole[] ecompRoles) {
+ HashMap<Long, EcompRole> result = new HashMap<Long, EcompRole>();
+ if (ecompRoles != null) {
+ for (int i = 0; i < ecompRoles.length; i++) {
+ if (ecompRoles[i].getId() != null) {
+ result.put(ecompRoles[i].getId(), ecompRoles[i]);
+ }
+ }
+ }
+ return result;
+ }
+
+ /**
+ *
+ * @param userId
+ */
+ protected void createLocalUserIfNecessary(String userId) {
+ if (StringUtils.isEmpty(userId)) {
+ logger.error(EELFLoggerDelegate.errorLogger, "createLocalUserIfNecessary : empty userId!");
+ return;
+ }
+ Session localSession = null;
+ Transaction transaction = null;
+ try {
+ localSession = sessionFactory.openSession();
+ transaction = localSession.beginTransaction();
+ @SuppressWarnings("unchecked")
+ List<EPUser> userList = localSession
+ .createQuery("from " + EPUser.class.getName() + " where orgUserId='" + userId + "'").list();
+ if (userList.size() == 0) {
+ EPUser client = searchService.searchUserByUserId(userId);
+ if (client == null) {
+ String msg = "createLocalUserIfNecessary: cannot create user " + userId
+ + ", because not found in phonebook";
+ logger.error(EELFLoggerDelegate.errorLogger, msg);
+ } else {
+ client.setLoginId(userId);
+ client.setActive(true);
+ localSession.save(client);
+ }
+ }
+ transaction.commit();
+ } catch (Exception e) {
+ EPLogUtil.logEcompError(logger, EPAppMessagesEnum.BeDaoSystemError, e);
+ EcompPortalUtils.rollbackTransaction(transaction, "searchOrCreateUser rollback, exception = " + e);
+ } finally {
+ EcompPortalUtils.closeLocalSession(localSession, "searchOrCreateUser");
+ }
+ }
+
+ /**
+ * This method return nothing and remove roles before adding any roles for an app
+ * @param userRole
+ * @param appId
+ * @param localSession
+ * @param userAppRoles
+ * @param newUserAppRolesMap
+ */
+ private static void syncUserRolesExtension(EPUserApp userRole, Long appId, Session localSession, EcompRole[] userAppRoles, HashMap<Long, EcompRole> newUserAppRolesMap) {
+
+ Long userAppRoleId = 0L;
+ if (appId == PortalConstants.PORTAL_APP_ID) { // local app
+ userAppRoleId = userRole.getRoleId();
+ } else { // remote app
+ userAppRoleId = userRole.getAppRoleId();
+ }
+
+ if (!newUserAppRolesMap.containsKey(userAppRoleId)) {
+ localSession.delete(userRole);
+ } else {
+ newUserAppRolesMap.remove(userAppRoleId);
+ }
+ }
+
+ /**
+ * Checks whether the role is inactive
+ *
+ * @param epRole
+ * @throws Exception
+ * if role is inactive, throws exception
+ */
+ private void checkIfRoleInactive(EPRole epRole) throws Exception{
+ if(!epRole.getActive()){
+ throw new Exception(epRole.getName()+ " role is unavailable");
+ }
+ }
+
+ /**
+ *
+ * @param sessionFactory
+ * @param userId
+ * @param appId
+ * @param userAppRoles
+ * @param extRequestValue
+ * set to false if request is from users page otherwise true
+ * @throws Exception
+ */
+ protected void syncUserRoles(SessionFactory sessionFactory, String userId, Long appId,
+ EcompRole[] userAppRoles, Boolean extRequestValue, String reqType) throws Exception {
+ boolean result = false;
+ Session localSession = null;
+ Transaction transaction = null;
+ String roleActive = null;
+ final Map<String, String> userAppParams = new HashMap<>();
+ final Map<String, String> appParams = new HashMap<>();
+ HashMap<Long, EcompRole> newUserAppRolesMap = hashMapFromEcompRoles(userAppRoles);
+
+ try {
+ localSession = sessionFactory.openSession();
+ transaction = localSession.beginTransaction();
+ @SuppressWarnings("unchecked")
+ List<EPUser> userList = localSession
+ .createQuery("from " + EPUser.class.getName() + " where orgUserId='" + userId + "'").list();
+ if (userList.size() > 0) {
+ EPUser client = userList.get(0);
+ roleActive = ("DELETE".equals(reqType)) ? "" : " and role.active = 'Y'";
+ @SuppressWarnings("unchecked")
+ List<EPUserApp> userRoles = localSession.createQuery("from " + EPUserApp.class.getName()
+ + " where app.id=" + appId + roleActive + " and userId=" + client.getId()).list();
+
+ if ("DELETE".equals(reqType)) {
+ for (EPUserApp userAppRoleList : userRoles) {
+ userAppParams.put("roleName", String.valueOf(userAppRoleList.getRole().getName()));
+ userAppParams.put("appId", String.valueOf(appId));
+ appParams.put("appRoleName", userAppRoleList.getRole().getName());
+ @SuppressWarnings("unchecked")
+ List<EPRole> rolesList = (!userAppRoleList.getRole().getName().equals(PortalConstants.ADMIN_ROLE)) ? (List<EPRole>) dataAccessService.executeNamedQuery("getAppRoles", userAppParams, null) : (List<EPRole>) dataAccessService.executeNamedQuery("getPortalAppRoles", appParams, null);
+ if(rolesList.size() > 0 || !rolesList.isEmpty()){
+ checkIfRoleInactive(rolesList.get(0));
+ }
+ }
+ }
+
+ for (EPUserApp userRole : userRoles) {
+ if (!userRole.getRoleId().equals(PortalConstants.ACCOUNT_ADMIN_ROLE_ID) && userRole.getRoleId() != PortalConstants.SYS_ADMIN_ROLE_ID && !extRequestValue){
+ syncUserRolesExtension(userRole, appId, localSession, userAppRoles, newUserAppRolesMap);
+ }
+ else if (extRequestValue && ("PUT".equals(reqType) || "POST".equals(reqType) || "DELETE".equals(reqType))){
+ syncUserRolesExtension(userRole, appId, localSession, userAppRoles, newUserAppRolesMap);
+ }
+ else if (extRequestValue && !userRole.getRoleId().equals(PortalConstants.ACCOUNT_ADMIN_ROLE_ID)){
+ syncUserRolesExtension(userRole, appId, localSession, userAppRoles, newUserAppRolesMap);
+ }
+ }
+ Collection<EcompRole> newRolesToAdd = newUserAppRolesMap.values();
+ if (newRolesToAdd.size() > 0) {
+ EPApp app = (EPApp) localSession.get(EPApp.class, appId);
+
+ HashMap<Long, EPRole> rolesMap = new HashMap<Long, EPRole>();
+ if (appId.equals(PortalConstants.PORTAL_APP_ID)) { // local app
+ String appIdValue = "";
+ if(!extRequestValue){
+ appIdValue = "and id != " + PortalConstants.SYS_ADMIN_ROLE_ID;
+ }
+ @SuppressWarnings("unchecked")
+ List<EPRole> roles = localSession
+ .createQuery("from " + EPRole.class.getName() + " where appId is null " + appIdValue).list();
+ for (EPRole role : roles) {
+ role.setAppId(1L);
+ rolesMap.put(role.getId(), role);
+ }
+ } else { // remote app
+ @SuppressWarnings("unchecked")
+ List<EPRole> roles = localSession
+ .createQuery("from " + EPRole.class.getName() + " where appId=" + appId).list();
+ for (EPRole role : roles) {
+ if (!extRequestValue && app.getCentralAuth()) {
+ rolesMap.put(role.getId(), role);
+ } else {
+ rolesMap.put(role.getAppRoleId(), role);
+ }
+ }
+ }
+
+ EPRole role = null;
+ for (EcompRole userRole : newRolesToAdd) {
+ EPUserApp userApp = new EPUserApp();
+ if (("PUT".equals(reqType) || "POST".equals(reqType)) && userRole.getName().equals(PortalConstants.ADMIN_ROLE)) {
+ role = (EPRole) localSession.get(EPRole.class, new Long(PortalConstants.ACCOUNT_ADMIN_ROLE_ID));
+ userApp.setRole(role);
+ } else if ((userRole.getId().equals(PortalConstants.ACCOUNT_ADMIN_ROLE_ID)) && !extRequestValue){
+ continue;
+ }else if((userRole.getId().equals(PortalConstants.SYS_ADMIN_ROLE_ID)) && app.getId().equals(PortalConstants.PORTAL_APP_ID) && !extRequestValue){
+ continue;
+ }
+ else {
+ userApp.setRole(rolesMap.get(userRole.getId()));
+ }
+
+ userApp.setUserId(client.getId());
+ userApp.setApp(app);
+ localSession.save(userApp);
+ localSession.flush();
+ }
+
+ if (appId == PortalConstants.PORTAL_APP_ID) {
+ /*
+ * for local app -- hack - always make sure fn_role
+ * table's app_id is null and not 1 for primary app in
+ * this case being ecomp portal app; reason: hibernate
+ * is rightly setting this to 1 while persisting to
+ * fn_role as per the mapping but SDK role management
+ * code expects the app_id to be null as there is no
+ * concept of App_id in SDK
+ */
+ localSession.flush();
+ SQLQuery sqlQuery = localSession
+ .createSQLQuery("update fn_role set app_id = null where app_id = 1 ");
+ sqlQuery.executeUpdate();
+
+ }
+ }
+ }
+ transaction.commit();
+ result = true;
+ } catch (Exception e) {
+ logger.error(EELFLoggerDelegate.errorLogger, "syncUserRoles failed", e);
+ EPLogUtil.logEcompError(logger, EPAppMessagesEnum.BeDaoSystemError, e);
+ EcompPortalUtils.rollbackTransaction(transaction,
+ "Exception occurred in syncUserRoles, Details: " + e.toString());
+ if("DELETE".equals(reqType)){
+ throw new Exception(e.getMessage());
+ }
+ } finally {
+ localSession.close();
+ if (!result && !"DELETE".equals(reqType)) {
+ throw new Exception(
+ "Exception occurred in syncUserRoles while closing database session for app: '" + appId + "'.");
+ }
+ }
+ }
+
+ /**
+ * Called when getting the list of roles for the user
+ *
+ * @param appRoles
+ * @param userAppRoles
+ * @return List<RoleInAppForUser>
+ */
+ protected List<RoleInAppForUser> constructRolesInAppForUserGet(EcompRole[] appRoles, EcompRole[] userAppRoles) {
+ List<RoleInAppForUser> rolesInAppForUser = new ArrayList<RoleInAppForUser>();
+
+ Set<Long> userAppRolesMap = new HashSet<Long>();
+ if (userAppRoles != null) {
+ for (EcompRole ecompRole : userAppRoles) {
+ userAppRolesMap.add(ecompRole.getId());
+ }
+ } else {
+ logger.error(EELFLoggerDelegate.errorLogger,
+ "constructRolesInAppForUserGet has received userAppRoles list empty");
+ }
+
+ if (appRoles != null) {
+ for (EcompRole ecompRole : appRoles) {
+ RoleInAppForUser roleForUser = new RoleInAppForUser(ecompRole.getId(), ecompRole.getName());
+ roleForUser.isApplied = userAppRolesMap.contains(ecompRole.getId());
+ rolesInAppForUser.add(roleForUser);
+ }
+ } else {
+ logger.error(EELFLoggerDelegate.errorLogger, "constructRolesInAppForUser has received appRoles list empty");
+ }
+ return rolesInAppForUser;
+ }
+
+ /**
+ * Called when getting the list of roles for the user
+ *
+ * @param appRoles
+ * @param userAppRoles
+ * @param extRequestValue
+ * set to false if request is from users page otherwise true
+ * @return List<RoleInAppForUser>
+ */
+ protected List<RoleInAppForUser> constructRolesInAppForUserGet(List<Role> appRoles, EPRole[] userAppRoles, Boolean extRequestValue) {
+ List<RoleInAppForUser> rolesInAppForUser = new ArrayList<RoleInAppForUser>();
+
+ Set<Long> userAppRolesMap = new HashSet<Long>();
+ if (userAppRoles != null) {
+ for (EPRole ecompRole : userAppRoles) {
+ userAppRolesMap.add(ecompRole.getId());
+ }
+ } else {
+ logger.error(EELFLoggerDelegate.errorLogger,
+ "constructRolesInAppForUserGet has received userAppRoles list empty.");
+ }
+
+ if (appRoles != null) {
+ for (Role ecompRole : appRoles) {
+ if (ecompRole.getId().equals(PortalConstants.ACCOUNT_ADMIN_ROLE_ID) && !extRequestValue)
+ continue;
+ RoleInAppForUser roleForUser = new RoleInAppForUser(ecompRole.getId(), ecompRole.getName());
+ roleForUser.isApplied = userAppRolesMap.contains(ecompRole.getId());
+ rolesInAppForUser.add(roleForUser);
+ }
+ } else {
+ logger.error(EELFLoggerDelegate.errorLogger,
+ "constructRolesInAppForUser has received appRoles list empty.");
+ }
+ return rolesInAppForUser;
+ }
+
+
+ /**
+ * copies of methods in GetAppsWithUserRoleState
+ *
+ * @param sessionFactory
+ * @param appId
+ * @param appRoles
+ * @throws Exception
+ */
+ protected void syncAppRoles(SessionFactory sessionFactory, Long appId, EcompRole[] appRoles) throws Exception {
+ logger.debug(EELFLoggerDelegate.debugLogger, "entering syncAppRoles for appId: " + appId);
+ HashMap<Long, EcompRole> newRolesMap = hashMapFromEcompRoles(appRoles);
+ Session localSession = null;
+ Transaction transaction = null;
+
+ try {
+ localSession = sessionFactory.openSession();
+ transaction = localSession.beginTransaction();
+ // Attention! All roles from remote application supposed to be
+ // active!
+ @SuppressWarnings("unchecked")
+ List<EPRole> currentAppRoles = localSession
+ .createQuery("from " + EPRole.class.getName() + " where appId=" + appId).list();
+ List<EPRole> obsoleteRoles = new ArrayList<EPRole>();
+ for (int i = 0; i < currentAppRoles.size(); i++) {
+ EPRole oldAppRole = currentAppRoles.get(i);
+ if (oldAppRole.getAppRoleId() != null) {
+ EcompRole role = null;
+ role = newRolesMap.get(oldAppRole.getAppRoleId());
+ if (role != null) {
+ if (!(role.getName() == null || oldAppRole.getName().equals(role.getName()))) {
+ oldAppRole.setName(role.getName());
+ localSession.update(oldAppRole);
+ }
+ newRolesMap.remove(oldAppRole.getAppRoleId());
+ } else {
+ obsoleteRoles.add(oldAppRole);
+ }
+ } else {
+ obsoleteRoles.add(oldAppRole);
+ }
+ }
+ Collection<EcompRole> newRolesToAdd = newRolesMap.values();
+ if (obsoleteRoles.size() > 0) {
+ logger.debug(EELFLoggerDelegate.debugLogger, "syncAppRoles: we have obsolete roles to delete");
+ for (EPRole role : obsoleteRoles) {
+ logger.debug(EELFLoggerDelegate.debugLogger, "syncAppRoles: obsolete role: " + role.toString());
+ Long roleId = role.getId();
+ // delete obsolete roles here
+ // Must delete all records with foreign key constraints on
+ // fn_role:
+ // fn_user_role, fn_role_composite, fn_role_function,
+ // fn_user_pseudo_role, fn_menu_functional_roles.
+ // And for fn_menu_functional, if no other roles for that
+ // menu item, remove the url.
+
+ // Delete from fn_user_role
+ @SuppressWarnings("unchecked")
+ List<EPUserApp> userRoles = localSession.createQuery(
+ "from " + EPUserApp.class.getName() + " where app.id=" + appId + " and role_id=" + roleId)
+ .list();
+
+ logger.debug(EELFLoggerDelegate.debugLogger, "syncAppRoles: number of userRoles to delete: " + userRoles.size());
+ for (EPUserApp userRole : userRoles) {
+ logger.debug(EELFLoggerDelegate.debugLogger,
+ "syncAppRoles: about to delete userRole: " + userRole.toString());
+ localSession.delete(userRole);
+ logger.debug(EELFLoggerDelegate.debugLogger,
+ "syncAppRoles: finished deleting userRole: " + userRole.toString());
+ }
+
+ // Delete from fn_menu_functional_roles
+ @SuppressWarnings("unchecked")
+ List<FunctionalMenuRole> funcMenuRoles = localSession
+ .createQuery("from " + FunctionalMenuRole.class.getName() + " where roleId=" + roleId)
+ .list();
+ int numMenuRoles = funcMenuRoles.size();
+ logger.debug(EELFLoggerDelegate.debugLogger,
+ "syncAppRoles: number of funcMenuRoles for roleId: " + roleId + ": " + numMenuRoles);
+ for (FunctionalMenuRole funcMenuRole : funcMenuRoles) {
+ Long menuId = funcMenuRole.menuId;
+ // If this is the only role for this menu item, then the
+ // app and roles will be gone,
+ // so must null out the url too, to be consistent
+ @SuppressWarnings("unchecked")
+ List<FunctionalMenuRole> funcMenuRoles2 = localSession
+ .createQuery("from " + FunctionalMenuRole.class.getName() + " where menuId=" + menuId)
+ .list();
+ int numMenuRoles2 = funcMenuRoles2.size();
+ logger.debug(EELFLoggerDelegate.debugLogger,
+ "syncAppRoles: number of funcMenuRoles for menuId: " + menuId + ": " + numMenuRoles2);
+ localSession.delete(funcMenuRole);
+ if (numMenuRoles2 == 1) {
+ // If this is the only role for this menu item, then
+ // the app and roles will be gone,
+ // so must null out the url too, to be consistent
+ logger.debug(EELFLoggerDelegate.debugLogger,
+ "syncAppRoles: There is exactly 1 menu item for this role, so emptying the url");
+ @SuppressWarnings("unchecked")
+ List<FunctionalMenuItem> funcMenuItems = localSession
+ .createQuery(
+ "from " + FunctionalMenuItem.class.getName() + " where menuId=" + menuId)
+ .list();
+ if (funcMenuItems.size() > 0) {
+ logger.debug(EELFLoggerDelegate.debugLogger, "got the menu item");
+ FunctionalMenuItem funcMenuItem = funcMenuItems.get(0);
+ funcMenuItem.url = "";
+ localSession.update(funcMenuItem);
+ }
+ }
+ }
+ boolean isPortalRequest = true;
+ externalAccessRolesService.deleteRoleDependencyRecords(localSession, roleId, appId, isPortalRequest);
+ logger.debug(EELFLoggerDelegate.debugLogger, "syncAppRoles: about to delete the role: " + role.toString());
+ localSession.delete(role);
+ logger.debug(EELFLoggerDelegate.debugLogger, "syncAppRoles: deleted the role");
+ }
+ }
+ for (EcompRole role : newRolesToAdd) {
+ logger.debug(EELFLoggerDelegate.debugLogger, "syncAppRoles: about to add missing role: " + role.toString());
+ EPRole newRole = new EPRole();
+ // Attention! All roles from remote application supposed to be
+ // active!
+ newRole.setActive(true);
+ newRole.setName(role.getName());
+ newRole.setAppId(appId);
+ newRole.setAppRoleId(role.getId());
+ localSession.save(newRole);
+ }
+ logger.debug(EELFLoggerDelegate.debugLogger, "syncAppRoles: about to commit the transaction");
+ transaction.commit();
+ logger.debug(EELFLoggerDelegate.debugLogger, "syncAppRoles: committed the transaction");
+ } catch (Exception e) {
+ logger.error(EELFLoggerDelegate.errorLogger, "syncAppRoles failed", e);
+ EPLogUtil.logEcompError(logger, EPAppMessagesEnum.BeDaoSystemError, e);
+ EcompPortalUtils.rollbackTransaction(transaction,
+ "Exception occurred in syncAppRoles, Details: " + e.toString());
+ throw new Exception(e);
+ } finally {
+ localSession.close();
+ }
+ }
+
+
+
+
+
+ /**
+ * Called when updating the list of roles for the user
+ *
+ * @param userId
+ * @param appId
+ * @param userRolesInRemoteApp
+ * @return RolesInAppForUser
+ */
+ protected RolesInAppForUser constructRolesInAppForUserUpdate(String userId, Long appId,
+ Set<EcompRole> userRolesInRemoteApp) {
+ RolesInAppForUser result;
+ result = new RolesInAppForUser();
+ result.appId = appId;
+ result.orgUserId = userId;
+ for (EcompRole role : userRolesInRemoteApp) {
+ RoleInAppForUser roleInAppForUser = new RoleInAppForUser();
+ roleInAppForUser.roleId = role.getId();
+ roleInAppForUser.roleName = role.getName();
+ roleInAppForUser.isApplied = new Boolean(true);
+ result.roles.add(roleInAppForUser);
+ }
+ return result;
+ }
+
+ /**
+ *
+ * @param roleInAppForUserList
+ * @return boolean
+ */
+ protected boolean remoteUserShouldBeCreated(List<RoleInAppForUser> roleInAppForUserList) {
+ for (RoleInAppForUser roleInAppForUser : roleInAppForUserList) {
+ if (roleInAppForUser.isApplied.booleanValue()) {
+ return true;
+ }
+ }
+ return false;
+ }
+
+ /**
+ * Builds JSON and posts it to a remote application to update user roles.
+ *
+ * @param roleInAppForUserList
+ * @param mapper
+ * @param applicationsRestClientService
+ * @param appId
+ * @param userId
+ * @return Set of roles as sent; NOT the response from the app.
+ * @throws JsonProcessingException
+ * @throws HTTPException
+ */
+ protected Set<EcompRole> postUsersRolesToRemoteApp(List<RoleInAppForUser> roleInAppForUserList, ObjectMapper mapper,
+ ApplicationsRestClientService applicationsRestClientService, Long appId, String userId)
+ throws JsonProcessingException, HTTPException {
+ Set<EcompRole> updatedUserRolesinRemote = constructUsersRemoteAppRoles(roleInAppForUserList);
+ Set<EcompRole> updateUserRolesInEcomp = constructUsersEcompRoles(roleInAppForUserList);
+ String userRolesAsString = mapper.writeValueAsString(updatedUserRolesinRemote);
+ applicationsRestClientService.post(EcompRole.class, appId, userRolesAsString,
+ String.format("/user/%s/roles", userId));
+ // TODO: We should add code that verifies that the post operation did
+ // succeed. Because the SDK may still return 200 OK with an html page
+ // even when it fails!
+ return updateUserRolesInEcomp;
+ }
+
+ /**
+ *
+ * @param roleInAppForUserList
+ * @return Set<EcompRole>
+ */
+ protected Set<EcompRole> constructUsersEcompRoles(List<RoleInAppForUser> roleInAppForUserList) {
+ Set<EcompRole> existingUserRoles = new TreeSet<EcompRole>();
+ for (RoleInAppForUser roleInAppForUser : roleInAppForUserList) {
+ if (roleInAppForUser.isApplied) {
+ EcompRole ecompRole = new EcompRole();
+ ecompRole.setId(roleInAppForUser.roleId);
+ ecompRole.setName(roleInAppForUser.roleName);
+ existingUserRoles.add(ecompRole);
+ }
+ }
+ return existingUserRoles;
+ }
+
+ /**
+ * Constructs user app roles excluding Account Administrator role
+ *
+ * @param roleInAppForUserList
+ * @return
+ * List of roles with Role name, Role Id
+ */
+ protected Set<EcompRole> constructUsersRemoteAppRoles(List<RoleInAppForUser> roleInAppForUserList) {
+ Set<EcompRole> existingUserRoles = new TreeSet<EcompRole>();
+ for (RoleInAppForUser roleInAppForUser : roleInAppForUserList) {
+ if (roleInAppForUser.isApplied && !roleInAppForUser.getRoleId().equals(PortalConstants.ACCOUNT_ADMIN_ROLE_ID)) {
+ EcompRole ecompRole = new EcompRole();
+ ecompRole.setId(roleInAppForUser.roleId);
+ ecompRole.setName(roleInAppForUser.roleName);
+ existingUserRoles.add(ecompRole);
+ }
+ }
+ return existingUserRoles;
+ }
+
+ /**
+ * This is for a single app
+ *
+ * @param rolesInAppForUser
+ * @param externalSystemRequest
+ * set to false if requests from Users page otherwise true
+ * @return true on success, false otherwise
+ */
+ protected boolean applyChangesInUserRolesForAppToEcompDB(RolesInAppForUser rolesInAppForUser, boolean externalSystemRequest, String reqType) throws Exception {
+ boolean result = false;
+ String userId = rolesInAppForUser.orgUserId;
+ Long appId = rolesInAppForUser.appId;
+ synchronized (syncRests) {
+ if (rolesInAppForUser != null) {
+ createLocalUserIfNecessary(userId);
+ }
+
+ if (rolesInAppForUser != null) {
+ EcompRole[] userAppRoles = new EcompRole[rolesInAppForUser.roles.stream().distinct().collect(Collectors.toList()).size()];
+ for (int i = 0; i < rolesInAppForUser.roles.stream().distinct().collect(Collectors.toList()).size(); i++) {
+ RoleInAppForUser roleInAppForUser = rolesInAppForUser.roles.get(i);
+ EcompRole role = new EcompRole();
+ role.setId(roleInAppForUser.roleId);
+ role.setName(roleInAppForUser.roleName);
+ userAppRoles[i] = role;
+ }
+ try {
+ syncUserRoles(sessionFactory, userId, appId, userAppRoles, externalSystemRequest, reqType);
+ result = true;
+ } catch (Exception e) {
+ logger.error(EELFLoggerDelegate.errorLogger,
+ "applyChangesInUserRolesForAppToEcompDB: failed to syncUserRoles for orgUserId " + userId, e);
+ if("DELETE".equals(reqType)){
+ throw new Exception(e.getMessage());
+ }
+ }
+ }
+ }
+ return result;
+ }
+
+ /**
+ *
+ * @param appId
+ * @param remoteUser
+ * @return UserApplicationRoles
+ */
+ protected UserApplicationRoles convertToUserApplicationRoles(Long appId, RemoteUserWithRoles remoteUser) {
+ UserApplicationRoles userWithRemoteAppRoles = new UserApplicationRoles();
+ userWithRemoteAppRoles.setAppId(appId);
+ userWithRemoteAppRoles.setOrgUserId(remoteUser.getOrgUserId());
+ userWithRemoteAppRoles.setFirstName(remoteUser.getFirstName());
+ userWithRemoteAppRoles.setLastName(remoteUser.getLastName());
+ userWithRemoteAppRoles.setRoles(remoteUser.getRoles());
+ return userWithRemoteAppRoles;
+ }
+
+ /*
+ * (non-Javadoc)
+ *
+ * @see org.openecomp.portalapp.portal.service.UserRolesService#
+ * importRolesFromRemoteApplication(java.lang.Long)
+ */
+ public List<EPRole> importRolesFromRemoteApplication(Long appId) throws HTTPException {
+ EPRole[] appRolesFull = applicationsRestClientService.get(EPRole[].class, appId, "/rolesFull");
+ List<EPRole> rolesList = Arrays.asList(appRolesFull);
+ for (EPRole externalAppRole : rolesList) {
+
+ // Try to find an existing extern role for the app in the local
+ // ecomp DB. If so, then use its id to update the existing external
+ // application role record.
+ Long externAppId = externalAppRole.getId();
+ EPRole existingAppRole = epRoleService.getRole(appId, externAppId);
+ if (existingAppRole != null) {
+ logger.debug(EELFLoggerDelegate.debugLogger,
+ String.format("ecomp role already exists for app=%s; appRoleId=%s. No need to import this one.",
+ appId, externAppId));
+ continue;
+ }
+ // persistExternalRoleInEcompDb(externalAppRole, appId,
+ // roleService);
+ }
+
+ return rolesList;
+ }
+
+ /**
+ * It adds new user for remote application
+ *
+ * @param roleInAppForUserList
+ * @param remoteAppUser
+ * @param userId
+ * @param app
+ * @param mapper
+ * @param searchService
+ * @param applicationsRestClientService
+ * @return
+ * @throws Exception
+ */
+ private EPUser addRemoteUser(List<RoleInAppForUser> roleInAppForUserList, String userId, EPApp app, ObjectMapper mapper, SearchService searchService, ApplicationsRestClientService applicationsRestClientService) throws Exception{
+ EPUser addRemoteUser = null;
+ if (remoteUserShouldBeCreated(roleInAppForUserList)) {
+
+ createNewUserOnRemoteApp(userId, app, applicationsRestClientService, searchService, mapper, isAppUpgradeVersion(app));
+ // If we succeed, we know that the new user was
+ // persisted on remote app.
+ addRemoteUser = getUserFromApp(userId, app, applicationsRestClientService);
+ if (addRemoteUser == null) {
+ logger.error(EELFLoggerDelegate.errorLogger,
+ "Failed to persist new user: " + userId + " in remote app. appId = " + app.getId());
+ // return null;
+ }
+ }
+ return addRemoteUser;
+ }
+
+ /**
+ * It checks whether the remote user exists or not
+ * if exits returns user object else null
+ *
+ * @param userId
+ * @param app
+ * @param applicationsRestClientService
+ * @return
+ * @throws HTTPException
+ */
+ private EPUser checkIfRemoteUserExits(String userId, EPApp app, ApplicationsRestClientService applicationsRestClientService) throws HTTPException{
+ EPUser checkRemoteUser = null;
+ try {
+ checkRemoteUser = getUserFromApp(userId, app, applicationsRestClientService);
+ } catch (HTTPException e) {
+ // Some apps are returning 400 if user is not found.
+ if (e.getResponseCode() == 400) {
+ logger.debug(EELFLoggerDelegate.debugLogger,
+ "setAppWithUserRoleStateForUser: getuserFromApp threw exception with response code 400; continuing",
+ e);
+ } else if(e.getResponseCode() == 404) {
+ logger.debug(EELFLoggerDelegate.debugLogger,
+ "setAppWithUserRoleStateForUser: getuserFromApp threw exception with response code 404; continuing",
+ e);
+ } else {
+ // Other response code, let it come thru.
+ throw e;
+ }
+ }
+ return checkRemoteUser;
+ }
+
+
+ /*
+ * (non-Javadoc)
+ *
+ * @see org.openecomp.portalapp.portal.service.UserRolesService#
+ * setAppWithUserRoleStateForUser(org.openecomp.portalapp.portal.domain.
+ * EPUser, org.openecomp.portalapp.portal.transport.AppWithRolesForUser)
+ */
+ public boolean setAppWithUserRoleStateForUser(EPUser user, AppWithRolesForUser newAppRolesForUser) {
+ boolean result = false;
+ boolean epRequestValue = false;
+ String userId = "";
+ if (newAppRolesForUser != null && newAppRolesForUser.orgUserId != null) {
+ userId = newAppRolesForUser.orgUserId.trim();
+ }
+ Long appId = newAppRolesForUser.appId;
+ List<RoleInAppForUser> roleInAppForUserList = newAppRolesForUser.appRoles;
+ if (userId.length() > 0) {
+ ObjectMapper mapper = new ObjectMapper();
+ mapper.configure(DeserializationFeature.FAIL_ON_UNKNOWN_PROPERTIES, false);
+
+ try {
+ EPApp app = appsService.getApp(appId);
+ applyChangesToUserAppRolesForMyLoginsRequest(user, appId);
+
+ // if centralized app
+ if (app.getCentralAuth()) {
+ // We should add If user does not exist in remote application
+ if (!app.getId().equals(PortalConstants.PORTAL_APP_ID)) {
+ EPUser remoteAppUser = null;
+ remoteAppUser = checkIfRemoteUserExits(userId, app, applicationsRestClientService);
+
+ if (remoteAppUser == null) {
+ addRemoteUser(roleInAppForUserList, userId, app, mapper, searchService,
+ applicationsRestClientService);
+ }
+ }
+
+ Set<EcompRole> userRolesInLocalApp = postUsersRolesToLocalApp(roleInAppForUserList, mapper,
+ applicationsRestClientService, appId, userId);
+ RolesInAppForUser rolesInAppForUser = constructRolesInAppForUserUpdate(userId, appId,
+ userRolesInLocalApp);
+ List<RoleInAppForUser> roleAppUserList = rolesInAppForUser.roles;
+ if (EcompPortalUtils.checkIfRemoteCentralAccessAllowed()) {
+ // Apply changes in external Access system
+ updateUserRolesInExternalSystem(app, rolesInAppForUser.orgUserId, roleAppUserList,
+ epRequestValue);
+ }
+ result = applyChangesInUserRolesForAppToEcompDB(rolesInAppForUser, epRequestValue, "Portal");
+ }
+ // In case if portal is not centralized then follow existing approach
+ else if(!app.getCentralAuth() && app.getId().equals(PortalConstants.PORTAL_APP_ID)){
+ Set<EcompRole> userRolesInLocalApp = postUsersRolesToLocalApp(roleInAppForUserList, mapper,
+ applicationsRestClientService, appId, userId);
+ RolesInAppForUser rolesInAppForUser = constructRolesInAppForUserUpdate(userId, appId,
+ userRolesInLocalApp);
+ result = applyChangesInUserRolesForAppToEcompDB(rolesInAppForUser, epRequestValue, "Portal");
+ } else{// remote app
+ EPUser remoteAppUser = null;
+ if(!app.getCentralAuth() && !app.getId().equals(PortalConstants.PORTAL_APP_ID)){
+
+ remoteAppUser = checkIfRemoteUserExits(userId, app, applicationsRestClientService);
+
+ if (remoteAppUser == null) {
+ remoteAppUser = addRemoteUser(roleInAppForUserList, userId, app, mapper, searchService, applicationsRestClientService);
+ }
+ if (remoteAppUser != null) {
+ Set<EcompRole> userRolesInRemoteApp = postUsersRolesToRemoteApp(roleInAppForUserList, mapper,
+ applicationsRestClientService, appId, userId);
+ RolesInAppForUser rolesInAppForUser = constructRolesInAppForUserUpdate(userId, appId,
+ userRolesInRemoteApp);
+ result = applyChangesInUserRolesForAppToEcompDB(rolesInAppForUser, epRequestValue, null);
+
+ // If no roles remain, request app to set user inactive.
+ if (userRolesInRemoteApp.size() == 0) {
+ logger.debug(EELFLoggerDelegate.debugLogger,
+ "setAppWithUserRoleStateForUser: no roles in app {}, set user {} to inactive", app,
+ userId);
+ remoteAppUser.setActive(false);
+ postUserToRemoteApp(userId, user, app, applicationsRestClientService);
+ }
+ }
+ }
+ }
+ } catch (Exception e) {
+ String message = String.format(
+ "Failed to create user or update user roles for User %s, AppId %s",
+ userId, Long.toString(appId));
+ logger.error(EELFLoggerDelegate.errorLogger, message, e);
+ result = false;
+ }
+
+ }
+ return result;
+ }
+ /**
+ * It adds user roles in External system and also make data consistent in both local and in External System
+ *
+ * @param app details
+ * @param orgUserId
+ * @param roleInAppUser Contains list of active roles
+ */
+ @SuppressWarnings("unchecked")
+ private void updateUserRolesInExternalSystem(EPApp app, String orgUserId, List<RoleInAppForUser> roleInAppUser, boolean isPortalRequest) throws Exception
+ {
+ try {
+ // check if user exists
+ final Map<String, String> userParams = new HashMap<>();
+ userParams.put("orgUserIdValue", orgUserId);
+ List<EPUser> userInfo = checkIfUserExists(userParams);
+ if (userInfo.isEmpty()) {
+ createLocalUserIfNecessary(orgUserId);
+ }
+ String name = "";
+ if (EPCommonSystemProperties
+ .containsProperty(EPCommonSystemProperties.EXTERNAL_CENTRAL_ACCESS_USER_DOMAIN)) {
+ name = orgUserId
+ + SystemProperties.getProperty(EPCommonSystemProperties.EXTERNAL_CENTRAL_ACCESS_USER_DOMAIN);
+ }
+ ObjectMapper mapper = new ObjectMapper();
+ HttpHeaders headers = EcompPortalUtils.base64encodeKeyForAAFBasicAuth();
+ HttpEntity<String> getUserRolesEntity = new HttpEntity<>(headers);
+ logger.debug(EELFLoggerDelegate.debugLogger, "Connecting to external system to get current user roles");
+ ResponseEntity<String> getResponse = template
+ .exchange(SystemProperties.getProperty(EPCommonSystemProperties.EXTERNAL_CENTRAL_ACCESS_URL)
+ + "roles/user/" + name, HttpMethod.GET, getUserRolesEntity, String.class);
+ if (getResponse.getStatusCode().value() == 200) {
+ logger.debug(EELFLoggerDelegate.debugLogger, "updateUserRolesInExternalSystem: Finished GET user roles from external system and received user roles {}",
+ getResponse.getBody());
+
+ }else{
+ logger.error(EELFLoggerDelegate.errorLogger, "updateUserRolesInExternalSystem: Failed GET user roles from external system and received user roles {}",getResponse.getBody() );
+ EPLogUtil.logExternalAuthAccessAlarm(logger, getResponse.getStatusCode());
+ }
+ List<ExternalAccessUserRoleDetail> userRoleDetailList = new ArrayList<>();
+ String res = getResponse.getBody();
+ JSONObject jsonObj = null;
+ JSONArray extRoles = null;
+ if (!res.equals("{}")) {
+ jsonObj = new JSONObject(res);
+ extRoles = jsonObj.getJSONArray("role");
+ }
+ ExternalAccessUserRoleDetail userRoleDetail = null;
+ if (extRoles != null) {
+ for (int i = 0; i < extRoles.length(); i++) {
+ if (extRoles.getJSONObject(i).getString("name").startsWith(app.getNameSpace() + ".")
+ && !extRoles.getJSONObject(i).getString("name").equals(app.getNameSpace() + ".admin")
+ && !extRoles.getJSONObject(i).getString("name").equals(app.getNameSpace() + ".owner")) {
+ ObjectMapper descMapper = new ObjectMapper();
+ if (extRoles.getJSONObject(i).has("description") && EcompPortalUtils.isJSONValid(extRoles.getJSONObject(i).getString("description"))) {
+ ExternalRoleDescription desc = descMapper.readValue(
+ extRoles.getJSONObject(i).getString("description"), ExternalRoleDescription.class);
+ userRoleDetail = new ExternalAccessUserRoleDetail(
+ extRoles.getJSONObject(i).getString("name"), desc);
+ userRoleDetailList.add(userRoleDetail);
+ } else {
+ userRoleDetail = new ExternalAccessUserRoleDetail(
+ extRoles.getJSONObject(i).getString("name"), null);
+ userRoleDetailList.add(userRoleDetail);
+ }
+
+ }
+ }
+ }
+
+ List<ExternalAccessUserRoleDetail> userRoleListMatchingInExtAuthAndLocal = CheckIfRoleAreMatchingInUserRoleDetailList(userRoleDetailList,app);
+
+ // If request coming from portal not from external role approval system then we have to check if user already
+ // have account admin or system admin as GUI will not send these roles
+ if (!isPortalRequest) {
+ final Map<String, String> loginIdParams = new HashMap<>();
+ loginIdParams.put("orgUserIdValue", orgUserId);
+ EPUser user = (EPUser) dataAccessService.executeNamedQuery("epUserAppId", loginIdParams, null).get(0);
+ final Map<String, Long> params = new HashMap<>();
+ params.put("appId", app.getId());
+ params.put("userId", user.getId());
+ List<EcompUserAppRoles> userAppList = dataAccessService.executeNamedQuery("getUserAppExistingRoles",
+ params, null);
+ if (!roleInAppUser.isEmpty()) {
+ for (EcompUserAppRoles userApp : userAppList) {
+ if (userApp.getRoleId().equals(PortalConstants.SYS_ADMIN_ROLE_ID)
+ || userApp.getRoleId().equals(PortalConstants.ACCOUNT_ADMIN_ROLE_ID)) {
+ RoleInAppForUser addSpecialRole = new RoleInAppForUser();
+ addSpecialRole.setIsApplied(true);
+ addSpecialRole.setRoleId(userApp.getRoleId());
+ addSpecialRole.setRoleName(userApp.getRoleName());
+ roleInAppUser.add(addSpecialRole);
+ }
+ }
+ }
+ }
+ List<RoleInAppForUser> roleInAppUserNonDupls = roleInAppUser.stream().distinct()
+ .collect(Collectors.toList());
+ final Map<String, RoleInAppForUser> currentUserRolesToUpdate = new HashMap<>();
+ for (RoleInAppForUser roleInAppUserNew : roleInAppUserNonDupls) {
+ currentUserRolesToUpdate.put(roleInAppUserNew.getRoleName().replaceAll(EcompPortalUtils.EXTERNAL_CENTRAL_AUTH_ROLE_HANDLE_SPECIAL_CHARACTERS, "_"), roleInAppUserNew);
+ }
+ final Map<String, ExternalAccessUserRoleDetail> currentUserRolesInExternalSystem = new HashMap<>();
+ for (ExternalAccessUserRoleDetail extAccessUserRole : userRoleListMatchingInExtAuthAndLocal) {
+ currentUserRolesInExternalSystem.put(extAccessUserRole.getName(), extAccessUserRole);
+ }
+ // Check if user roles does not exists in local but still there in External Central Auth System delete them all
+ for (ExternalAccessUserRoleDetail userRole : userRoleListMatchingInExtAuthAndLocal) {
+ if (!(currentUserRolesToUpdate
+ .containsKey(userRole.getName().substring(app.getNameSpace().length() + 1)))) {
+ HttpEntity<String> entity = new HttpEntity<>(headers);
+ logger.debug(EELFLoggerDelegate.debugLogger,
+ "updateUserRolesInExternalSystem: Connecting to external system to DELETE user role {}",
+ userRole.getName());
+ ResponseEntity<String> deleteResponse = template.exchange(
+ SystemProperties.getProperty(EPCommonSystemProperties.EXTERNAL_CENTRAL_ACCESS_URL)
+ + "userRole/" + name + "/" + userRole.getName(),
+ HttpMethod.DELETE, entity, String.class);
+ logger.debug(EELFLoggerDelegate.debugLogger,
+ "updateUserRolesInExternalSystem: Finished DELETE operation in external system for user role {} and the response is {}",
+ userRole.getName(), deleteResponse.getBody());
+ }
+ }
+ // Check if user roles does not exists in External Central Auth System add them all
+ for (RoleInAppForUser addUserRole : roleInAppUserNonDupls) {
+ if (!(currentUserRolesInExternalSystem
+ .containsKey(app.getNameSpace() + "." + addUserRole.getRoleName().replaceAll(EcompPortalUtils.EXTERNAL_CENTRAL_AUTH_ROLE_HANDLE_SPECIAL_CHARACTERS, "_")))) {
+ ExternalAccessUser extUser = new ExternalAccessUser(name,
+ app.getNameSpace() + "." + addUserRole.getRoleName().replaceAll(EcompPortalUtils.EXTERNAL_CENTRAL_AUTH_ROLE_HANDLE_SPECIAL_CHARACTERS, "_"));
+ String formattedUserRole = mapper.writeValueAsString(extUser);
+ HttpEntity<String> entity = new HttpEntity<>(formattedUserRole, headers);
+ logger.debug(EELFLoggerDelegate.debugLogger, "updateUserRolesInExternalSystem: Connecting to external system for user {} and POST {}",
+ name , addUserRole.getRoleName());
+ ResponseEntity<String> addResponse = template
+ .exchange(SystemProperties.getProperty(EPCommonSystemProperties.EXTERNAL_CENTRAL_ACCESS_URL)
+ + "userRole", HttpMethod.POST, entity, String.class);
+ logger.debug(EELFLoggerDelegate.debugLogger,
+ "updateUserRolesInExternalSystem: Finished adding user role in external system {} and added user role {}",
+ addResponse.getBody(), addUserRole.getRoleName());
+ if (addResponse.getStatusCode().value() != 201 && addResponse.getStatusCode().value() != 404) {
+ logger.debug(EELFLoggerDelegate.debugLogger,
+ "Finished POST operation in external system but unable to save user role", addResponse.getBody(),
+ addUserRole.getRoleName());
+ throw new Exception(addResponse.getBody());
+ }
+ }
+ }
+ } catch (Exception e) {
+ logger.error(EELFLoggerDelegate.errorLogger, "updateUserRolesInExternalSystem: Failed to add user role for application {} due to {}", app.getId(), e);
+ EPLogUtil.logExternalAuthAccessAlarm(logger, HttpStatus.BAD_REQUEST);
+ throw e;
+ }
+
+ }
+
+ private List<ExternalAccessUserRoleDetail> CheckIfRoleAreMatchingInUserRoleDetailList(
+ List<ExternalAccessUserRoleDetail> userRoleDetailList, EPApp app) {
+ Map<String, EPRole> epRoleList = externalAccessRolesService.getCurrentRolesInDB(app);
+ //Add Account Admin role for partner app to prevent conflict
+ if(!app.getId().equals(PortalConstants.PORTAL_APP_ID)) {
+ EPRole role = new EPRole();
+ role.setName(PortalConstants.ADMIN_ROLE.replaceAll(EcompPortalUtils.EXTERNAL_CENTRAL_AUTH_ROLE_HANDLE_SPECIAL_CHARACTERS, "_"));
+ epRoleList.put(role.getName(), role);
+ }
+ userRoleDetailList.removeIf(userRoleDetail -> !epRoleList.containsKey(userRoleDetail.getName().substring(app.getNameSpace().length()+1)));
+ return userRoleDetailList;
+ }
+
+ /**
+ *
+ * @param userId
+ * @param app
+ * @param applicationsRestClientService
+ * @param searchService
+ * @param mapper
+ * @throws Exception
+ */
+ protected void createNewUserOnRemoteApp(String userId, EPApp app,
+ ApplicationsRestClientService applicationsRestClientService, SearchService searchService,
+ ObjectMapper mapper, boolean postOpenSource) throws Exception {
+
+
+ EPUser client = searchService.searchUserByUserId(userId);
+
+ mapper.configure(DeserializationFeature.FAIL_ON_UNKNOWN_PROPERTIES, false);
+
+ if (client == null) {
+ String msg = "cannot create user " + userId + ", because he/she cannot be found in phonebook.";
+ logger.error(EELFLoggerDelegate.errorLogger, msg);
+ throw new Exception(msg);
+ }
+
+ client.setLoginId(userId);
+ client.setActive(true);
+
+ String userInString = null;
+ userInString = mapper.writerFor(EPUser.class).writeValueAsString(client);
+ logger.debug(EELFLoggerDelegate.debugLogger,
+ "about to post new client to remote application, users json = " + userInString);
+ applicationsRestClientService.post(EPUser.class, app.getId(), userInString, String.format("/user", userId));
+
+ }
+
+ @SuppressWarnings("unchecked")
+ protected void applyChangesToAppRolesRequest(Long appId, Long userId, String updateStatus, EPUserAppRolesRequest epUserAppRolesRequest) {
+ final Map<String, Long> epRequestParams = new HashMap<>();
+ try {
+ EPUserAppRolesRequest epAppRolesRequestData = epUserAppRolesRequest;
+ epAppRolesRequestData.setUpdatedDate(new Date());
+ epAppRolesRequestData.setRequestStatus(updateStatus);
+ HashMap<String, Long> addiotonalUpdateParam = new HashMap<String, Long>();
+ addiotonalUpdateParam.put("userId", userId);
+ dataAccessService.saveDomainObject(epAppRolesRequestData, addiotonalUpdateParam);
+ epRequestParams.put("reqId", epUserAppRolesRequest.getId());
+ List<EPUserAppRolesRequestDetail> epUserAppRolessDetailList = new ArrayList<EPUserAppRolesRequestDetail>();
+ epUserAppRolessDetailList = dataAccessService.executeNamedQuery("userAppRolesRequestDetailList",
+ epRequestParams, null);
+ if (epUserAppRolessDetailList.size() > 0) {
+ for (EPUserAppRolesRequestDetail epRequestUpdateData : epUserAppRolessDetailList) {
+ EPUserAppRolesRequestDetail epAppRoleDetailData = epRequestUpdateData;
+ epAppRoleDetailData.setReqType(updateStatus);
+ epAppRoleDetailData.setEpRequestIdData(epAppRolesRequestData);
+ HashMap<String, Long> updateDetailsParam = new HashMap<String, Long>();
+ addiotonalUpdateParam.put("reqId", epUserAppRolesRequest.getId());
+ dataAccessService.saveDomainObject(epAppRoleDetailData, updateDetailsParam);
+ }
+ }
+ logger.debug(EELFLoggerDelegate.debugLogger, "The request is set to complete");
+
+ } catch (Exception e) {
+ logger.error(EELFLoggerDelegate.errorLogger, "applyChangesToAppRolesRequest failed", e);
+ }
+ }
+
+ @SuppressWarnings("unchecked")
+ public void applyChangesToUserAppRolesForMyLoginsRequest(EPUser user, Long appId) {
+ final Map<String, Long> params = new HashMap<>();
+ final Map<String, Long> epDetailParams = new HashMap<>();
+ List<EPUserAppRolesRequest> epRequestIdVal = new ArrayList<EPUserAppRolesRequest>();
+ params.put("appId", appId);
+ params.put("userId", user.getId());
+ try {
+ epRequestIdVal = (List<EPUserAppRolesRequest>) dataAccessService
+ .executeNamedQuery("userAppRolesRequestList", params, null);
+ if (epRequestIdVal.size() > 0) {
+ EPUserAppRolesRequest epAppRolesRequestData = epRequestIdVal.get(0);
+ epAppRolesRequestData.setUpdatedDate(new Date());
+ epAppRolesRequestData.setRequestStatus("O");
+ HashMap<String, Long> addiotonalUpdateParam = new HashMap<String, Long>();
+ addiotonalUpdateParam.put("userId", user.getId());
+ dataAccessService.saveDomainObject(epAppRolesRequestData, addiotonalUpdateParam);
+ epDetailParams.put("reqId", epAppRolesRequestData.getId());
+ List<EPUserAppRolesRequestDetail> epUserAppRolesDetailList = new ArrayList<EPUserAppRolesRequestDetail>();
+ epUserAppRolesDetailList = dataAccessService.executeNamedQuery("userAppRolesRequestDetailList",
+ epDetailParams, null);
+ if (epUserAppRolesDetailList.size() > 0) {
+ for (EPUserAppRolesRequestDetail epRequestUpdateList : epUserAppRolesDetailList) {
+ EPUserAppRolesRequestDetail epAppRoleDetailData = epRequestUpdateList;
+ epAppRoleDetailData.setReqType("O");
+ epAppRoleDetailData.setEpRequestIdData(epAppRolesRequestData);
+ HashMap<String, Long> updateDetailsParams = new HashMap<String, Long>();
+ addiotonalUpdateParam.put("reqId", epAppRolesRequestData.getId());
+ dataAccessService.saveDomainObject(epAppRoleDetailData, updateDetailsParams);
+ }
+ logger.debug(EELFLoggerDelegate.debugLogger, "User App roles request from User Page is overridden");
+ }
+ }
+
+ } catch (Exception e) {
+ logger.error(EELFLoggerDelegate.errorLogger, "applyChangesToUserAppRolesRequest failed", e);
+ }
+ }
+
+ /**
+ * Pushes specified user details to the specified remote app.
+ *
+ * @param userId
+ * OrgUserId identifying user at remote app in REST endpoint path
+ * @param user
+ * User details to be pushed
+ * @param app
+ * Remote app
+ * @param applicationsRestClientService
+ * @throws HTTPException
+ */
+ protected void postUserToRemoteApp(String userId, EPUser user, EPApp app,
+ ApplicationsRestClientService applicationsRestClientService) throws HTTPException {
+
+ getUser(userId, app, applicationsRestClientService);
+
+ }
+
+ /**
+ * It returns user details for single org user id
+ *
+ * @param userParams
+ * @return
+ * if user exists it returns list of user details otherwise empty value
+ */
+ @SuppressWarnings("unchecked")
+ private List<EPUser> checkIfUserExists(Map<String, String> userParams){
+ return (List<EPUser>)dataAccessService.executeNamedQuery("epUserAppId", userParams, null);
+ }
+
+ /**
+ * It checks whether the new user is valid or not otherwise throws exception
+ *
+ * @param orgUserId
+ * @param app
+ * @return
+ * Checks if user is valid and returns message otherwise throws exception
+ * @throws Exception
+ */
+ private String validateNewUser(String orgUserId, EPApp app) throws Exception {
+ EPUser epUser = searchService.searchUserByUserId(orgUserId);
+ if (epUser == null) {
+ throw new Exception("User does not exist");
+ } else if (!epUser.getOrgUserId().equals(orgUserId)) {
+ throw new Exception("User does not exist");
+ } else if (app == null) {
+ throw new Exception("Application does not exist");
+ }
+ return "Saved Successfully";
+ }
+
+ /**
+ * Checks if the fields exists or not
+ *
+ * @param userList
+ * contains user information
+ * @param app
+ * contains app name
+ * @throws Exception
+ * throws exception if the field is not valid
+ */
+ private void validateExternalRequestFields(List<EPUser> userList, EPApp app) throws Exception{
+ if (userList.size() == 0 || userList.isEmpty() ) {
+ throw new Exception("User does not exist");
+ } else if(app == null) {
+ throw new Exception("Application does not exist");
+ } else if(!app.getEnabled() && !app.getId().equals(PortalConstants.PORTAL_APP_ID)) {
+ throw new Exception(app.getMlAppName()+" application is unavailable");
+ }
+ }
+
+ @SuppressWarnings("unchecked")
+ public ExternalRequestFieldsValidator setExternalRequestUserAppRole(ExternalSystemUser newAppRolesForUser, String reqType) {
+ boolean result = false;
+ boolean externalSystemRequest = true;
+ final Map<String, Long> params = new HashMap<>();
+ final Map<String, String> userParams = new HashMap<>();
+ List<EPUser> userInfo = null;
+ EPUser userId = null;
+ List<EPUserAppRolesRequest> epRequestId = null;
+ String orgUserId = "";
+ String updateStatus = "";
+ String reqMessage = "";
+ EPApp app = null;
+ if (newAppRolesForUser != null && newAppRolesForUser.getLoginId() != null) {
+ orgUserId = newAppRolesForUser.getLoginId().trim();
+ }
+ String appName = newAppRolesForUser.getApplicationName();
+ String logMessage = ("DELETE").equals(reqType) ? "Deleting": "Assigning/Updating" ;
+ if (orgUserId.length() > 0) {
+ ObjectMapper mapper = new ObjectMapper();
+ mapper.configure(DeserializationFeature.FAIL_ON_UNKNOWN_PROPERTIES, false);
+ int epRequestIdSize = 0;
+ try {
+ app = appsService.getAppDetail(appName);
+ userParams.put("orgUserIdValue", orgUserId);
+ userInfo = checkIfUserExists(userParams);
+ reqMessage = "Updated Successfully";
+ if (!reqType.equals("DELETE") && (userInfo.size() == 0 || userInfo.isEmpty())) {
+ reqMessage = validateNewUser(orgUserId, app);
+ }
+ if (userInfo.size() != 0 || !userInfo.isEmpty()) {
+ validateExternalRequestFields(userInfo, app);
+ userId = userInfo.get(0);
+ params.put("appId", app.getId());
+ params.put("userId", userId.getId());
+ epRequestId = (List<EPUserAppRolesRequest>) dataAccessService
+ .executeNamedQuery("userAppRolesRequestList", params, null);
+ epRequestIdSize = epRequestId.size();
+ }
+
+ //If Non-Centralized app make sure you sync app roles before assigning to user
+ if (!app.getId().equals(PortalConstants.PORTAL_APP_ID) && !app.getCentralAuth()) {
+ logger.debug(EELFLoggerDelegate.debugLogger, "setExternalRequestUserAppRole: Starting GET roles for app {}",app.getId());
+ EcompRole[] appRoles = applicationsRestClientService.get(EcompRole[].class, app.getId(), "/roles");
+ logger.debug(EELFLoggerDelegate.debugLogger, "setExternalRequestUserAppRole: Finshed GET roles for app {} and payload {}",app.getId(), appRoles);
+ if (appRoles.length > 0) {
+ syncAppRoles(sessionFactory, app.getId(), appRoles);
+ }
+ }
+ List<RoleInAppForUser> roleInAppForUserList = roleInAppForUserList(newAppRolesForUser.getRoles(),
+ app.getId(), app.getMlAppName());
+ List<EcompUserAppRoles> userRoleList = null;
+ if(!userInfo.isEmpty()){
+ final Map<String, Long> appParams = new HashMap<>();
+ appParams.put("userId", userId.getId());
+ appParams.put("appId", app.getId());
+ userRoleList = dataAccessService.executeNamedQuery("getUserAppExistingRoles", appParams, null);
+ }
+ // Check if list contains just account admin role
+ boolean checkIfAdminRoleExists = false;
+ if (reqType.equals("DELETE") && userRoleList!=null) {
+ checkIfAdminRoleExists = userRoleList.stream()
+ .anyMatch(userRole -> userRole.getRoleId().equals(PortalConstants.ACCOUNT_ADMIN_ROLE_ID));
+ } else {
+ checkIfAdminRoleExists = roleInAppForUserList.stream()
+ .anyMatch(roleList -> roleList.getRoleId().equals(PortalConstants.ACCOUNT_ADMIN_ROLE_ID));
+ }
+ // if Centralized app
+ if (app.getCentralAuth()) {
+ // We should add If user does not exist in remote application
+ try {
+ // If adding just account admin role dont make remote application user call
+ if (!app.getId().equals(PortalConstants.PORTAL_APP_ID) && !(checkIfAdminRoleExists
+ && reqType.equals("DELETE")) && roleInAppForUserList.size() > 1) {
+ EPUser remoteAppUser = null;
+ remoteAppUser = checkIfRemoteUserExits(orgUserId, app,
+ applicationsRestClientService);
+ if (remoteAppUser == null) {
+ addRemoteUser(roleInAppForUserList, orgUserId, app, mapper, searchService,
+ applicationsRestClientService);
+ reqMessage = "Saved Successfully";
+ }
+ }
+ } catch (Exception e) {
+ reqMessage = e.getMessage();
+ logger.error(EELFLoggerDelegate.errorLogger, "setExternalRequestUserAppRole: Failed to added remote user", e);
+ throw new Exception(reqMessage);
+ }
+ Set<EcompRole> userRolesInLocalApp = postUsersRolesToLocalApp(roleInAppForUserList, mapper,
+ applicationsRestClientService, app.getId(), orgUserId);
+ RolesInAppForUser rolesInAppForUser = constructRolesInAppForUserUpdate(orgUserId, app.getId(),
+ userRolesInLocalApp);
+ List<RoleInAppForUser> roleAppUserList = rolesInAppForUser.roles;
+ if(EcompPortalUtils.checkIfRemoteCentralAccessAllowed()) {
+ // Apply changes in external Access system
+ updateUserRolesInExternalSystem(app, rolesInAppForUser.orgUserId, roleAppUserList, externalSystemRequest);
+ }
+ logger.info(EELFLoggerDelegate.debugLogger, "setExternalRequestUserAppRole: {} user app roles: for app {}, user {}", logMessage,
+ newAppRolesForUser.getApplicationName(), newAppRolesForUser.getLoginId());
+ result = applyChangesInUserRolesForAppToEcompDB(rolesInAppForUser, externalSystemRequest, reqType);
+ }
+ // If local application is not centralized
+ else if(!app.getCentralAuth() && app.getId().equals(PortalConstants.PORTAL_APP_ID)){
+ Set<EcompRole> userRolesInLocalApp = postUsersRolesToLocalApp(roleInAppForUserList, mapper,
+ applicationsRestClientService, app.getId(), orgUserId);
+ RolesInAppForUser rolesInAppForUser = constructRolesInAppForUserUpdate(orgUserId, app.getId(),
+ userRolesInLocalApp);
+ result = applyChangesInUserRolesForAppToEcompDB(rolesInAppForUser, externalSystemRequest, reqType);
+ } else {// remote app
+ // If adding just account admin role don't do remote application user call
+ if(!((roleInAppForUserList.size() == 1 || reqType.equals("DELETE")) && checkIfAdminRoleExists)){
+ EPUser remoteAppUser = null;
+ remoteAppUser = checkIfRemoteUserExits(orgUserId, app, applicationsRestClientService);
+ if (remoteAppUser == null) {
+ remoteAppUser = addRemoteUser(roleInAppForUserList, orgUserId, app, mapper, searchService, applicationsRestClientService);
+ reqMessage = "Saved Successfully";
+ }
+ if (remoteAppUser != null) {
+ Set<EcompRole> userRolesInRemoteApp = postUsersRolesToRemoteApp(roleInAppForUserList,
+ mapper, applicationsRestClientService, app.getId(), orgUserId);
+
+ RolesInAppForUser rolesInAppForUser = constructRolesInAppForUserUpdate(orgUserId,
+ app.getId(), userRolesInRemoteApp);
+ logger.info(EELFLoggerDelegate.debugLogger, "setExternalRequestUserAppRole: {} user app roles: for app {}, user {}",
+ logMessage, newAppRolesForUser.getApplicationName(),
+ newAppRolesForUser.getLoginId());
+ result = applyChangesInUserRolesForAppToEcompDB(rolesInAppForUser, externalSystemRequest,
+ reqType);
+ // If no roles remain, request app to set user inactive.
+ /*if (userRolesInRemoteApp.size() == 0) {
+ logger.debug(EELFLoggerDelegate.debugLogger,
+ "setAppWithUserRoleStateForUser: no roles in app {}, set user {} to inactive", app,
+ orgUserId);
+ //TODO Need to fix the logged in user is not set to inactive
+ remoteAppUser.setActive(false);
+ postUserToRemoteApp(orgUserId, user, app, applicationsRestClientService);
+ }*/
+ }
+ } else {
+ // Here we are adding only we have single account admin in roleInAppForUserList and this should not add in remote
+ if(!(reqType.equals("DELETE")) && userInfo.isEmpty()){
+ reqMessage = "Saved Successfully";
+ }
+ Set<EcompRole> userRolesInRemoteApp = constructUsersEcompRoles(roleInAppForUserList);
+
+ RolesInAppForUser rolesInAppForUser = constructRolesInAppForUserUpdate(orgUserId, app.getId(),
+ userRolesInRemoteApp);
+ logger.info(EELFLoggerDelegate.debugLogger, "setExternalRequestUserAppRole: {} user app roles: for app {}, user {}",
+ logMessage, newAppRolesForUser.getApplicationName(), newAppRolesForUser.getLoginId());
+ result = applyChangesInUserRolesForAppToEcompDB(rolesInAppForUser, externalSystemRequest,
+ reqType);
+ }
+ if(!result){
+ reqMessage = "Failed to save the user app role(s)";
+ }
+ if (epRequestIdSize > 0 && !userInfo.isEmpty()) {
+ updateStatus = "C";
+ applyChangesToAppRolesRequest(app.getId(), userId.getId(), updateStatus, epRequestId.get(0));
+ }
+ }
+ } catch (Exception e) {
+ String message = String.format("setExternalRequestUserAppRole: Failed to create user or update user roles for User %s, AppId %s",
+ orgUserId, appName);
+ logger.error(EELFLoggerDelegate.errorLogger, message, e);
+ result = false;
+ reqMessage = e.getMessage();
+ if(epRequestIdSize > 0 && userInfo!=null && !userInfo.isEmpty()){
+ updateStatus = "F";
+ applyChangesToAppRolesRequest(app.getId(), userId.getId(),
+ updateStatus, epRequestId.get(0));
+ }
+ }
+
+ }
+ return new ExternalRequestFieldsValidator(result, reqMessage);
+ }
+
+ /**
+ *
+ * @param roleInAppForUserList
+ * @param mapper
+ * @param applicationsRestClientService
+ * @param appId
+ * @param userId
+ * @return Set<EcompRole>
+ * @throws JsonProcessingException
+ * @throws HTTPException
+ */
+ private Set<EcompRole> postUsersRolesToLocalApp(List<RoleInAppForUser> roleInAppForUserList, ObjectMapper mapper,
+ ApplicationsRestClientService applicationsRestClientService, Long appId, String userId)
+ throws JsonProcessingException, HTTPException {
+ Set<EcompRole> updatedUserRoles = constructUsersEcompRoles(roleInAppForUserList);
+ return updatedUserRoles;
+ }
+
+ /**
+ * It constructs and returns list of user app roles when the external API role approval system calls
+ * this method
+ *
+ * @param roleInAppForUserList
+ * @param appId
+ * @return list of user app roles
+ * @throws Exception
+ * throws exceptions if role id does not exits
+ */
+ private List<RoleInAppForUser> roleInAppForUserList(List<ExternalSystemRoleApproval> roleInAppForUserList,
+ Long appId, String appName) throws Exception {
+ List<RoleInAppForUser> existingUserRoles = new ArrayList<RoleInAppForUser>();
+ EPRole existingAppRole = null;
+ for (ExternalSystemRoleApproval roleInAppForUser : roleInAppForUserList) {
+ RoleInAppForUser ecompRole = new RoleInAppForUser();
+ existingAppRole = epRoleService.getAppRole(roleInAppForUser.getRoleName(), appId);
+ if (existingAppRole == null) {
+ logger.error(EELFLoggerDelegate.errorLogger, "roleInAppForUserList failed for the roles {}",
+ roleInAppForUserList);
+ throw new Exception("'" +roleInAppForUser.getRoleName() + "'" +" role does not exist for " + appName + " application");
+ }
+ if (!existingAppRole.getActive()) {
+ logger.error(EELFLoggerDelegate.errorLogger, "roleInAppForUserList failed for the roles {}",
+ roleInAppForUserList);
+ throw new Exception(roleInAppForUser.getRoleName() + " role is unavailable for "+ appName + " application");
+ } else {
+ ecompRole.roleId = (appId == 1 || roleInAppForUser.getRoleName().equals(PortalConstants.ADMIN_ROLE)) ? existingAppRole.getId() : existingAppRole.getAppRoleId();
+ ecompRole.roleName = roleInAppForUser.getRoleName();
+ ecompRole.isApplied = true;
+ existingUserRoles.add(ecompRole);
+ }
+ }
+ return existingUserRoles;
+ }
+
+
+
+ /**
+ *
+ * @param userId
+ * @param app
+ * @param applicationsRestClientService
+ * @return EPUser
+ * @throws HTTPException
+ */
+ protected EPUser getUserFromApp(String userId, EPApp app, ApplicationsRestClientService applicationsRestClientService)
+ throws HTTPException {
+ // local app
+ if (app.getId() == PortalConstants.PORTAL_APP_ID) {
+ // Map<String,String> params = new HashMap<String,String>();
+ // params.put("sbcid",userId);
+ @SuppressWarnings("unchecked")
+ List<EPUser> userList = (List<EPUser>) dataAccessService
+ .executeQuery("from EPUser where orgUserId='" + userId + "'", null);
+ if (userList != null && !userList.isEmpty())
+ return userList.get(0);
+ else
+ return null;
+ }
+ // remote app
+
+ return getUser(userId, app, applicationsRestClientService);
+ }
+
+ protected EPUser getUser(String userId, EPApp app, ApplicationsRestClientService applicationsRestClientService)
+ throws HTTPException {
+ return applicationsRestClientService.get(EPUser.class, app.getId(), String.format("/user/%s", userId), true);
+
+ }
+
+ protected boolean isAppUpgradeVersion(EPApp app){
+ return true;
+ }
+
+
+ public ExternalSystemAccess getExternalRequestAccess(){
+ ExternalSystemAccess res = null;
+ try {
+ res = new ExternalSystemAccess(EPCommonSystemProperties.EXTERNAL_ACCESS_ENABLE,
+ Boolean.parseBoolean(SystemProperties.getProperty(EPCommonSystemProperties.EXTERNAL_ACCESS_ENABLE)));
+ } catch (Exception e) {
+ logger.error(EELFLoggerDelegate.errorLogger, "getExternalRequestAccess failed" + e.getMessage());
+ }
+ return res;
+ }
+
+ /*
+ * (non-Javadoc)
+ *
+ * @see org.openecomp.portalapp.portal.service.UserRolesService#
+ * getAppRolesForUser(java.lang.Long, java.lang.String)
+ */
+ @SuppressWarnings("unchecked")
+ public List<RoleInAppForUser> getAppRolesForUser(Long appId, String userId, Boolean extRequestValue) {
+
+ List<RoleInAppForUser> rolesInAppForUser = null;
+ EPApp app = appsService.getApp(appId);
+ try {
+ // for ecomp portal app, no need to make a remote call
+ List<Role> roleList = new ArrayList<>();
+ if (appId == PortalConstants.PORTAL_APP_ID) {
+ if(app.getCentralAuth()){
+ List<CentralV2Role> cenRoleList = externalAccessRolesService.getRolesForApp(app.getUebKey());
+ for(CentralV2Role cenRole : cenRoleList){
+ Role role = new Role();
+ role.setActive(cenRole.isActive());
+ role.setId(cenRole.getId());
+ role.setName(cenRole.getName());
+ role.setPriority(cenRole.getPriority());
+ roleList.add(role);
+ }
+ }else{
+ roleList = roleService.getAvailableRoles(userId);
+ }
+ List<Role> activeRoleList = new ArrayList<Role>();
+ for(Role role: roleList) {
+ if(role.getActive()) {
+ if(role.getId() != 1){ // prevent portal admin from being added
+ activeRoleList.add(role);
+ } else if(extRequestValue){
+ activeRoleList.add(role);
+ }
+ }
+
+ }
+ EPUser localUser = getUserFromApp(userId, app, applicationsRestClientService);
+ // If localUser does not exists return roles
+ Set<EPRole> roleSet = null;
+ EPRole[] roleSetList = null;
+ if(localUser != null){
+ roleSet = localUser.getAppEPRoles(app);
+ roleSetList = roleSet.toArray(new EPRole[0]);
+ }
+ rolesInAppForUser = constructRolesInAppForUserGet(activeRoleList, roleSetList, extRequestValue);
+ return rolesInAppForUser;
+ }
+
+ EcompRole[] appRoles = null;
+ List<EcompRole> roles = new ArrayList<>();
+ if(app.getCentralAuth()){
+ List<EPRole> applicationRoles = dataAccessService.getList(EPRole.class, " where app_id = "+app.getId()+ " and active_yn = 'Y'", null, null);;
+ for(EPRole role : applicationRoles){
+ EcompRole ecompRole = new EcompRole();
+ ecompRole.setId(role.getId());
+ ecompRole.setName(role.getName());
+ roles.add(ecompRole);
+ }
+ appRoles = roles.toArray(new EcompRole[roles.size()]);
+ } else{
+ appRoles = applicationsRestClientService.get(EcompRole[].class, appId, "/roles");
+ }
+ // Test this error case, for generating an internal Ecomp Portal
+ // error
+ // EcompRole[] appRoles = null;
+ // If there is an exception in the rest client api, then null will
+ // be returned.
+ if (appRoles != null) {
+ if(!app.getCentralAuth()) {
+ syncAppRoles(sessionFactory, appId, appRoles);
+ }
+ EcompRole[] userAppRoles = null;
+ try {
+ try {
+ if(app.getCentralAuth()){
+ final Map<String, String> params = new HashMap<>();
+ final Map<String, Long> userParams = new HashMap<>();
+ params.put("orgUserIdValue", userId);
+ List<EPUser> user = dataAccessService.executeNamedQuery("epUserAppId", params, null);
+ userParams.put("appId", app.getId());
+ userParams.put("userId", user.get(0).getId());
+ List<EPUserAppCurrentRoles> userAppsRolesList = dataAccessService.executeNamedQuery("getUserAppCurrentRoles", userParams, null);
+ List<EcompRole> setUserRoles = new ArrayList<>();
+ for(EPUserAppCurrentRoles role : userAppsRolesList){
+ EcompRole ecompRole = new EcompRole();
+ ecompRole.setId(role.getRoleId());
+ ecompRole.setName(role.getRoleName());
+ setUserRoles.add(ecompRole);
+ }
+ userAppRoles = setUserRoles.toArray(new EcompRole[setUserRoles.size()]);
+ rolesInAppForUser = constructRolesInAppForUserGet(appRoles, userAppRoles);
+ return rolesInAppForUser;
+ }else{
+ userAppRoles = applicationsRestClientService.get(EcompRole[].class, appId,
+ String.format("/user/%s/roles", userId));
+ }
+ } catch (HTTPException e) {
+ // Some apps are returning 400 if user is not found.
+ if (e.getResponseCode() == 400) {
+ logger.debug(EELFLoggerDelegate.debugLogger,
+ "getAppRolesForUser caught exception with response code 400; continuing", e);
+ } else {
+ // Other response code, let it come thru.
+ throw e;
+ }
+ }
+ if (userAppRoles == null) {
+ if (EcompPortalUtils.getExternalAppResponseCode() == 400) {
+ EcompPortalUtils.setExternalAppResponseCode(200);
+ String message = String.format(
+ "getAppRolesForUser: App %s, User %, endpoint /user/{userid}/roles returned 400, "
+ + "assuming user doesn't exist, app is framework SDK based, and things are ok. "
+ + "Overriding to 200 until framework SDK returns a useful response.",
+ Long.toString(appId), userId);
+ logger.warn(EELFLoggerDelegate.applicationLogger, message);
+ }
+ }
+
+ HashMap<Long, EcompRole> appRolesActiveMap =hashMapFromEcompRoles(appRoles);
+ ArrayList<EcompRole> activeRoles = new ArrayList<EcompRole>();
+ if(userAppRoles != null){
+ for (int i = 0; i < userAppRoles.length; i++) {
+ if (appRolesActiveMap.containsKey(userAppRoles[i].getId())) {
+ EcompRole role = new EcompRole();
+ role.setId(userAppRoles[i].getId());
+ role.setName(userAppRoles[i].getName());
+ activeRoles.add(role);
+ }
+ }
+ }
+ EcompRole[] userAppRolesActive = activeRoles.toArray(new EcompRole[activeRoles.size()]);
+
+ // If the remote application isn't down we MUST sync user
+ // roles here in case we have this user here!
+ syncUserRoles(sessionFactory, userId, appId, userAppRolesActive, extRequestValue, null);
+ } catch (Exception e) {
+ // TODO: we may need to check if user exists, maybe remote
+ // app is down.
+ String message = String.format(
+ "getAppRolesForUser: user %s does not exist in remote application %s", userId,
+ Long.toString(appId));
+ logger.error(EELFLoggerDelegate.errorLogger, message, e);
+ userAppRoles = new EcompRole[0];
+ }
+ rolesInAppForUser = constructRolesInAppForUserGet(appRoles, userAppRoles);
+ }
+ } catch (Exception e) {
+ String message = String.format("getAppRolesForUser: failed for User %s, AppId %s", userId,
+ Long.toString(appId));
+ logger.error(EELFLoggerDelegate.errorLogger, message, e);
+ }
+ return rolesInAppForUser;
+
+ }
+
+ private boolean postUserRolesToMylogins(AppWithRolesForUser userAppRolesData,
+ ApplicationsRestClientService applicationsRestClientService, Long appId, Long userId)
+ throws JsonProcessingException, HTTPException {
+ boolean result = false;
+ ObjectMapper mapper = new ObjectMapper();
+ mapper.configure(DeserializationFeature.FAIL_ON_UNKNOWN_PROPERTIES, false);
+ String userRolesAsString = mapper.writeValueAsString(userAppRolesData);
+ logger.error(EELFLoggerDelegate.errorLogger,"Should not be reached here, as the endpoint is not defined yet from the Mylogins");
+ applicationsRestClientService.post(AppWithRolesForUser.class, appId, userRolesAsString, String.format("/user/%s/myLoginroles", userId));
+ return result;
+ }
+
+ public FieldsValidator putUserAppRolesRequest(AppWithRolesForUser userAppRolesData, EPUser user) {
+ FieldsValidator fieldsValidator = new FieldsValidator();
+ final Map<String, Long> params = new HashMap<>();
+ EPUserAppRoles appRole= new EPUserAppRoles();
+ try {
+ logger.error(EELFLoggerDelegate.errorLogger,"Should not be reached here, still the endpoint is yet to be defined");
+ boolean result = postUserRolesToMylogins(userAppRolesData, applicationsRestClientService, userAppRolesData.appId, user.getId());
+ logger.debug(EELFLoggerDelegate.debugLogger,"putUserAppRolesRequest: result {}", result);
+
+ params.put("appId", userAppRolesData.appId);
+ EPUserAppRolesRequest epAppRolesRequestData = new EPUserAppRolesRequest();
+ epAppRolesRequestData.setCreatedDate(new Date());
+ epAppRolesRequestData.setUpdatedDate(new Date());
+ epAppRolesRequestData.setUserId(user.getId());
+ epAppRolesRequestData.setAppId(userAppRolesData.appId);
+ epAppRolesRequestData.setRequestStatus("P");
+ List<RoleInAppForUser> appRoleIdList = userAppRolesData.appRoles;
+ Set<EPUserAppRolesRequestDetail> appRoleDetails = new LinkedHashSet<EPUserAppRolesRequestDetail>();
+ dataAccessService.saveDomainObject(epAppRolesRequestData, null);
+ for (RoleInAppForUser userAppRoles : appRoleIdList) {
+ Boolean isAppliedVal = userAppRoles.isApplied;
+ params.put("appRoleId", userAppRoles.roleId);
+ if (isAppliedVal) {
+ appRole = (EPUserAppRoles) dataAccessService.executeNamedQuery("appRoles", params, null).get(0);
+ EPUserAppRolesRequestDetail epAppRoleDetail = new EPUserAppRolesRequestDetail();
+ epAppRoleDetail.setReqRoleId(appRole.getRoleId());
+ epAppRoleDetail.setReqType("P");
+ epAppRoleDetail.setEpRequestIdData(epAppRolesRequestData);
+ dataAccessService.saveDomainObject(epAppRoleDetail, null);
+ }
+ }
+ epAppRolesRequestData.setEpRequestIdDetail(appRoleDetails);
+ fieldsValidator.httpStatusCode = new Long(HttpServletResponse.SC_OK);
+
+ } catch (Exception e) {
+ logger.error(EELFLoggerDelegate.errorLogger, "putUserAppRolesRequest failed", e);
+ fieldsValidator.httpStatusCode = new Long(HttpServletResponse.SC_INTERNAL_SERVER_ERROR);
+ }
+ return fieldsValidator;
+ }
+
+ public List<EPUserAppCatalogRoles> getUserAppCatalogRoles(EPUser userid, String appName) {
+ Map<String, String> params = new HashMap<>();
+ params.put("userid", userid.getId().toString());
+ //params.put("appid", appid);
+ params.put("appName", appName);
+
+ @SuppressWarnings("unchecked")
+ List<EPUserAppCatalogRoles> userAppRoles = (List<EPUserAppCatalogRoles>) dataAccessService
+ .executeNamedQuery("userAppCatalogRoles", params, null);
+ return userAppRoles;
+ }
+
+ public String updateRemoteUserProfile(String orgUserId, Long appId) {
+ ObjectMapper mapper = new ObjectMapper();
+ mapper.configure(DeserializationFeature.FAIL_ON_UNKNOWN_PROPERTIES, false);
+ EPUser client = searchService.searchUserByUserId(orgUserId);
+ EPUser newUser = new EPUser();
+ newUser.setActive(client.getActive());
+ newUser.setFirstName(client.getFirstName());
+ newUser.setLastName(client.getLastName());
+ newUser.setLoginId(client.getLoginId());
+ newUser.setLoginPwd(client.getLoginPwd());
+ newUser.setMiddleInitial(client.getMiddleInitial());
+ newUser.setEmail(client.getEmail());
+ newUser.setOrgUserId(client.getLoginId());
+ try {
+ String userAsString = mapper.writeValueAsString(newUser);
+ List<EPApp> appList = appsService.getUserRemoteApps(client.getId().toString());
+ // applicationsRestClientService.post(EPUser.class, appId,
+ // userAsString, String.format("/user", orgUserId));
+ for (EPApp eachApp : appList) {
+ try {
+ applicationsRestClientService.post(EPUser.class, eachApp.getId(), userAsString,
+ String.format("/user/%s", orgUserId));
+ } catch (Exception e) {
+ logger.error(EELFLoggerDelegate.errorLogger, "Failed to update user: " + client.getOrgUserId()
+ + " in remote app. appId = " + eachApp.getId());
+ }
+ }
+ } catch (Exception e) {
+ logger.error(EELFLoggerDelegate.errorLogger, "updateRemoteUserProfile failed", e);
+ return "failure";
+ }
+
+ return "success";
+ }
+
+
+ /*
+ * (non-Javadoc)
+ *
+ * @see org.openecomp.portalapp.portal.service.UserRolesService#
+ * getCachedAppRolesForUser(java.lang.Long, java.lang.Long)
+ */
+ public List<EPUserApp> getCachedAppRolesForUser(Long appId, Long userId) {
+ // Find the records for this user-app combo, if any
+ String filter = " where user_id = " + Long.toString(userId) + " and app_id = " + Long.toString(appId);
+ @SuppressWarnings("unchecked")
+ List<EPUserApp> roleList = dataAccessService.getList(EPUserApp.class, filter, null, null);
+ logger.debug(EELFLoggerDelegate.debugLogger, "getCachedAppRolesForUser: list size is {}", roleList.size());
+ return roleList;
+ }
+
+ /**
+ * It retrieves and returns list of user app roles for local and remote applications based app id
+ *
+ * @param appId
+ * @return list of user app roles
+ * @throws HTTPException
+ */
+ public List<UserApplicationRoles> getUsersFromAppEndpoint(Long appId) throws HTTPException {
+ ArrayList<UserApplicationRoles> userApplicationRoles = new ArrayList<UserApplicationRoles>();
+
+ EPApp app = appsService.getApp(appId);
+ //If local or centralized application
+ if (appId == PortalConstants.PORTAL_APP_ID || app.getCentralAuth()) {
+ @SuppressWarnings("unchecked")
+ List<EPUser> userList = (List<EPUser>) dataAccessService.executeNamedQuery("getActiveUsers", null, null);
+ for (EPUser user : userList) {
+ UserApplicationRoles userWithAppRoles = convertToUserApplicationRoles(appId, user, app);
+ if (userWithAppRoles.getRoles() != null && userWithAppRoles.getRoles().size() > 0)
+ userApplicationRoles.add(userWithAppRoles);
+ }
+
+ }
+ // remote app
+ else {
+ RemoteUserWithRoles[] remoteUsers = null;
+ String remoteUsersString = applicationsRestClientService.getIncomingJsonString(appId, "/users");
+
+ remoteUsers = doGetUsers(isAppUpgradeVersion(app), remoteUsersString);
+
+ userApplicationRoles = new ArrayList<UserApplicationRoles>();
+ for (RemoteUserWithRoles remoteUser : remoteUsers) {
+ UserApplicationRoles userWithRemoteAppRoles = convertToUserApplicationRoles(appId, remoteUser);
+ if (userWithRemoteAppRoles.getRoles() != null && userWithRemoteAppRoles.getRoles().size() > 0) {
+ userApplicationRoles.add(userWithRemoteAppRoles);
+ } else {
+ logger.debug(EELFLoggerDelegate.debugLogger,
+ "User " + userWithRemoteAppRoles.getOrgUserId() + " doesn't have any roles assigned to any app.");
+ }
+ }
+ }
+
+ return userApplicationRoles;
+ }
+
+ /**
+ *
+ * @param appId
+ * @param user
+ * @param appgetUsersFromAppEndpoint
+ * @return
+ */
+ private UserApplicationRoles convertToUserApplicationRoles(Long appId, EPUser user, EPApp app) {
+ UserApplicationRoles userWithRemoteAppRoles = new UserApplicationRoles();
+ userWithRemoteAppRoles.setAppId(appId);
+ userWithRemoteAppRoles.setOrgUserId(user.getOrgUserId());
+ userWithRemoteAppRoles.setFirstName(user.getFirstName());
+ userWithRemoteAppRoles.setLastName(user.getLastName());
+ userWithRemoteAppRoles.setRoles(convertToRemoteRoleList(user, app));
+ return userWithRemoteAppRoles;
+ }
+
+ /**
+ *
+ * @param user
+ * @param app
+ * @return
+ */
+ private List<RemoteRole> convertToRemoteRoleList(EPUser user, EPApp app) {
+ List<RemoteRole> roleList = new ArrayList<RemoteRole>();
+ SortedSet<EPRole> roleSet = user.getAppEPRoles(app);
+ for (EPRole role : roleSet) {
+ RemoteRole rRole = new RemoteRole();
+ rRole.setId(role.getId());
+ rRole.setName(role.getName());
+ roleList.add(rRole);
+ }
+ return roleList;
+ }
+
+ public RemoteUserWithRoles[] doGetUsers(boolean postOpenSource, String remoteUsersString) {
+
+ ObjectMapper mapper = new ObjectMapper();
+ try {
+ return mapper.readValue(remoteUsersString, RemoteUserWithRoles[].class);
+ } catch (IOException e) {
+ logger.error(EELFLoggerDelegate.errorLogger,
+ "doGetUsers : Failed : Unexpected property in incoming JSON",
+ e);
+ logger.error(EELFLoggerDelegate.errorLogger,
+ "doGetUsers : Incoming JSON that caused it --> " + remoteUsersString);
+ }
+
+ return new RemoteUserWithRoles[0];
+ }
+
+ @SuppressWarnings("unchecked")
+ public List<EPUserApp> getEPUserAppList(Long appId, Long userId, Long roleId) {
+ List<EPUserApp> userRoleList = new ArrayList<EPUserApp>();
+ final Map<String, Long> params = new HashMap<>();
+ params.put("appId", appId);
+ params.put("userId", userId);
+ params.put("roleId", roleId);
+ userRoleList = dataAccessService.executeNamedQuery("getUserRoleOnUserIdAndRoleIdAndAppId", params, null);
+ return userRoleList;
+ }
+
+}
diff --git a/ecomp-portal-BE-common/src/main/java/org/onap/portalapp/portal/service/UserRolesService.java b/ecomp-portal-BE-common/src/main/java/org/onap/portalapp/portal/service/UserRolesService.java
new file mode 100644
index 00000000..1b638627
--- /dev/null
+++ b/ecomp-portal-BE-common/src/main/java/org/onap/portalapp/portal/service/UserRolesService.java
@@ -0,0 +1,111 @@
+/*-
+ * ============LICENSE_START==========================================
+ * ONAP Portal
+ * ===================================================================
+ * Copyright (C) 2017 AT&T Intellectual Property. All rights reserved.
+ * ===================================================================
+ *
+ * Unless otherwise specified, all software contained herein is licensed
+ * under the Apache License, Version 2.0 (the "License");
+ * you may not use this software 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.
+ *
+ * Unless otherwise specified, all documentation contained herein is licensed
+ * under the Creative Commons License, Attribution 4.0 Intl. (the "License");
+ * you may not use this documentation except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * https://creativecommons.org/licenses/by/4.0/
+ *
+ * Unless required by applicable law or agreed to in writing, documentation
+ * 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.
+ *
+ * ============LICENSE_END============================================
+ *
+ * ECOMP is a trademark and service mark of AT&T Intellectual Property.
+ */
+
+package org.onap.portalapp.portal.service;
+
+import java.util.List;
+
+import org.apache.cxf.transport.http.HTTPException;
+import org.onap.portalapp.externalsystemapproval.model.ExternalSystemUser;
+import org.onap.portalapp.portal.domain.EPRole;
+import org.onap.portalapp.portal.domain.EPUser;
+import org.onap.portalapp.portal.domain.EPUserApp;
+import org.onap.portalapp.portal.domain.EPUserAppCatalogRoles;
+import org.onap.portalapp.portal.domain.ExternalSystemAccess;
+import org.onap.portalapp.portal.transport.AppWithRolesForUser;
+import org.onap.portalapp.portal.transport.ExternalRequestFieldsValidator;
+import org.onap.portalapp.portal.transport.FieldsValidator;
+import org.onap.portalapp.portal.transport.RoleInAppForUser;
+import org.onap.portalapp.portal.transport.UserApplicationRoles;
+
+public interface UserRolesService {
+
+ /**
+ * Returns list of app roles of a single app
+ *
+ * @param appId
+ * ID of row in fn_app
+ * @param userId
+ * ID of row in fn_user
+ * @param extRequestValue
+ * set to false if request is from users page otherwise true
+ * @return List<RoleInAppForUser>
+ */
+ public List<RoleInAppForUser> getAppRolesForUser(Long appId, String userId, Boolean extRequestValue);
+
+ public boolean setAppWithUserRoleStateForUser(EPUser user, AppWithRolesForUser newAppRolesForUser);
+
+ public List<UserApplicationRoles> getUsersFromAppEndpoint(Long appId) throws HTTPException;
+
+ public List<EPRole> importRolesFromRemoteApplication(Long appId) throws HTTPException;
+
+ /**
+ * Gets entries from the local fn_user_role table for the specified user and
+ * app.
+ *
+ * @param appId
+ * ID of row in fn_app
+ * @param userId
+ * ID of row in fn_user
+ * @return List of EPRole; empty if none found.
+ */
+ public List<EPUserApp> getCachedAppRolesForUser(Long appId, Long userId);
+
+ public FieldsValidator putUserAppRolesRequest(AppWithRolesForUser userAppRolesData, EPUser user);
+
+ /**
+ * Save user app roles in the database from the external request
+ *
+ * @param newAppRolesForUser
+ *
+ * contains login id, app name, request id, and list of role
+ * names
+ * @param reqType
+ * @return if any exceptions, returns detail message and true or false
+ */
+ ExternalRequestFieldsValidator setExternalRequestUserAppRole(ExternalSystemUser newAppRolesForUser, String reqType);
+
+ public List<EPUserAppCatalogRoles> getUserAppCatalogRoles(EPUser user, String appName);
+
+ public String updateRemoteUserProfile(String orgUserId, Long appId);
+
+ public ExternalSystemAccess getExternalRequestAccess();
+
+ public List<EPUserApp> getEPUserAppList(Long appId, Long userId, Long roleId);
+
+}
diff --git a/ecomp-portal-BE-common/src/main/java/org/onap/portalapp/portal/service/UserService.java b/ecomp-portal-BE-common/src/main/java/org/onap/portalapp/portal/service/UserService.java
new file mode 100644
index 00000000..cfc32306
--- /dev/null
+++ b/ecomp-portal-BE-common/src/main/java/org/onap/portalapp/portal/service/UserService.java
@@ -0,0 +1,54 @@
+/*-
+ * ============LICENSE_START==========================================
+ * ONAP Portal
+ * ===================================================================
+ * Copyright (C) 2017 AT&T Intellectual Property. All rights reserved.
+ * ===================================================================
+ *
+ * Unless otherwise specified, all software contained herein is licensed
+ * under the Apache License, Version 2.0 (the "License");
+ * you may not use this software 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.
+ *
+ * Unless otherwise specified, all documentation contained herein is licensed
+ * under the Creative Commons License, Attribution 4.0 Intl. (the "License");
+ * you may not use this documentation except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * https://creativecommons.org/licenses/by/4.0/
+ *
+ * Unless required by applicable law or agreed to in writing, documentation
+ * 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.
+ *
+ * ============LICENSE_END============================================
+ *
+ * ECOMP is a trademark and service mark of AT&T Intellectual Property.
+ */
+package org.onap.portalapp.portal.service;
+
+import java.util.List;
+
+import org.onap.portalapp.portal.domain.EPUser;
+
+public interface UserService {
+
+ List<EPUser> getUserByUserId(String orgUserId);
+
+ List<EPUser> getUserByFirstLastName(String firstName, String lastName);
+
+ public String saveNewUser(EPUser newUser, String checkDuplicate) throws Exception;
+
+ public void saveUser(EPUser user) throws Exception;
+
+}
diff --git a/ecomp-portal-BE-common/src/main/java/org/onap/portalapp/portal/service/UserServiceImpl.java b/ecomp-portal-BE-common/src/main/java/org/onap/portalapp/portal/service/UserServiceImpl.java
new file mode 100644
index 00000000..860712bb
--- /dev/null
+++ b/ecomp-portal-BE-common/src/main/java/org/onap/portalapp/portal/service/UserServiceImpl.java
@@ -0,0 +1,288 @@
+/*-
+ * ============LICENSE_START==========================================
+ * ONAP Portal
+ * ===================================================================
+ * Copyright (C) 2017 AT&T Intellectual Property. All rights reserved.
+ * ===================================================================
+ *
+ * Unless otherwise specified, all software contained herein is licensed
+ * under the Apache License, Version 2.0 (the "License");
+ * you may not use this software 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.
+ *
+ * Unless otherwise specified, all documentation contained herein is licensed
+ * under the Creative Commons License, Attribution 4.0 Intl. (the "License");
+ * you may not use this documentation except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * https://creativecommons.org/licenses/by/4.0/
+ *
+ * Unless required by applicable law or agreed to in writing, documentation
+ * 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.
+ *
+ * ============LICENSE_END============================================
+ *
+ * ECOMP is a trademark and service mark of AT&T Intellectual Property.
+ */
+package org.onap.portalapp.portal.service;
+
+import java.io.BufferedReader;
+import java.io.IOException;
+import java.io.InputStreamReader;
+import java.net.HttpURLConnection;
+import java.net.URL;
+import java.util.ArrayList;
+import java.util.List;
+
+import org.hibernate.criterion.Criterion;
+import org.hibernate.criterion.Restrictions;
+import org.json.JSONArray;
+import org.json.JSONObject;
+import org.onap.portalapp.portal.service.UserService;
+import org.onap.portalapp.portal.service.UserServiceImpl;
+import org.onap.portalapp.portal.domain.EPUser;
+import org.onap.portalapp.portal.utils.EPCommonSystemProperties;
+import org.onap.portalsdk.core.FusionObject.Utilities;
+import org.onap.portalsdk.core.logging.logic.EELFLoggerDelegate;
+import org.onap.portalsdk.core.onboarding.util.CipherUtil;
+import org.onap.portalsdk.core.service.DataAccessService;
+import org.onap.portalsdk.core.util.SystemProperties;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.stereotype.Service;
+import org.springframework.transaction.annotation.Transactional;
+
+@Service("userService")
+@Transactional
+public class UserServiceImpl implements UserService {
+
+ private EELFLoggerDelegate logger = EELFLoggerDelegate.getLogger(UserServiceImpl.class);
+
+ @Autowired
+ private DataAccessService dataAccessService;
+
+ public DataAccessService getDataAccessService() {
+ return dataAccessService;
+ }
+
+ public void setDataAccessService(DataAccessService dataAccessService) {
+ this.dataAccessService = dataAccessService;
+ }
+
+ @SuppressWarnings("unchecked")
+ @Override
+ public List<EPUser> getUserByUserId(String userId) {
+
+ if (SystemProperties.getProperty(SystemProperties.AUTHENTICATION_MECHANISM).trim().equalsIgnoreCase("OIDC")) {
+ List<EPUser> users = new ArrayList<EPUser>();
+ List<EPUser> filterdUsers = new ArrayList<EPUser>();
+ BufferedReader in = null;
+ HttpURLConnection con = null;
+ try {
+ String url = EPCommonSystemProperties.getProperty(EPCommonSystemProperties.AUTH_USER_SERVER);
+ URL obj = new URL(url);
+
+ con = (HttpURLConnection) obj.openConnection();
+
+ // optional default is GET
+ con.setRequestMethod("GET");
+ con.setConnectTimeout(3000);
+ con.setReadTimeout(8000);
+
+ StringBuffer response = new StringBuffer();
+
+ in = new BufferedReader(new InputStreamReader(con.getInputStream(), "UTF-8"));
+ String inputLine;
+ while ((inputLine = in.readLine()) != null)
+ response.append(inputLine);
+ JSONObject jObject = new JSONObject(response.toString()); // json
+ JSONArray jsonUsers = jObject.getJSONArray("response"); // get
+ // data
+ // object
+ for (int i = 0; i < jsonUsers.length(); i++) {
+ JSONObject eachObject = jsonUsers.getJSONObject(i);
+ EPUser eachUser = new EPUser();
+ eachUser.setOrgUserId(eachObject.get("id").toString());
+ eachUser.setFirstName(eachObject.get("givenName").toString());
+ eachUser.setLastName(eachObject.get("familyName").toString());
+ eachUser.setEmail(eachObject.get("email").toString());
+ users.add(eachUser);
+ }
+
+ for (int i = 0; i < users.size(); i++) {
+ if (Utilities.nvl(userId).length() > 0) {
+ if (!userId.equalsIgnoreCase(users.get(i).getOrgUserId())) {
+ continue;
+ }
+ }
+ filterdUsers.add(users.get(i));
+ }
+
+ } catch (Exception e) {
+ logger.error(EELFLoggerDelegate.errorLogger, "getUserByUserId failed", e);
+ } finally {
+ try {
+ in.close();
+ con.disconnect();
+ } catch (IOException e) {
+ logger.error(EELFLoggerDelegate.errorLogger, "getUserByUserId failed to close", e);
+ }
+ }
+
+ return filterdUsers;
+
+ } else {
+
+ List<Criterion> restrictionsList = new ArrayList<Criterion>();
+ Criterion orgUserIdCriterion = Restrictions.eq("orgUserId",userId);
+ restrictionsList.add(orgUserIdCriterion);
+
+ List<EPUser> list = (List<EPUser>) dataAccessService.getList(EPUser.class, null, restrictionsList, null);
+
+ return (list == null || list.size() == 0) ? null : list;
+
+ }
+
+ }
+
+ @SuppressWarnings("unchecked")
+ @Override
+ public List<EPUser> getUserByFirstLastName(String firstName, String lastName) {
+
+ if (!SystemProperties.getProperty(SystemProperties.AUTHENTICATION_MECHANISM).trim().equalsIgnoreCase("OIDC")) {
+ List<Criterion> restrictionsList = new ArrayList<Criterion>();
+ Criterion firstNameCriterion = Restrictions.eq("firstName", firstName);
+ Criterion lastNameCriterion = Restrictions.eq("lastName", lastName);
+ restrictionsList.add(Restrictions.or(firstNameCriterion, lastNameCriterion));
+
+ List<EPUser> list = (List<EPUser>) dataAccessService.getList(EPUser.class, null, restrictionsList, null);
+ return (list == null || list.size() == 0) ? null : list;
+
+ } else {
+
+ List<EPUser> users = new ArrayList<EPUser>();
+ List<EPUser> filterdUsers = new ArrayList<EPUser>();
+ BufferedReader in = null;
+ HttpURLConnection con = null;
+ try {
+ String url = EPCommonSystemProperties.getProperty(EPCommonSystemProperties.AUTH_USER_SERVER);
+ URL obj = new URL(url);
+
+ con = (HttpURLConnection) obj.openConnection();
+
+ // optional default is GET
+ con.setRequestMethod("GET");
+ con.setConnectTimeout(3000);
+ con.setReadTimeout(8000);
+
+ StringBuffer response = new StringBuffer();
+
+ in = new BufferedReader(new InputStreamReader(con.getInputStream(), "UTF-8"));
+ String inputLine;
+ while ((inputLine = in.readLine()) != null)
+ response.append(inputLine);
+ JSONObject jObject = new JSONObject(response.toString()); // json
+ JSONArray jsonUsers = jObject.getJSONArray("response"); // get
+ // data
+ // object
+ for (int i = 0; i < jsonUsers.length(); i++) {
+ JSONObject eachObject = jsonUsers.getJSONObject(i);
+ EPUser eachUser = new EPUser();
+ eachUser.setOrgUserId(eachObject.get("id").toString());// getString("id"));
+ eachUser.setFirstName(eachObject.get("givenName").toString());
+ eachUser.setLastName(eachObject.get("familyName").toString());
+ eachUser.setEmail(eachObject.get("email").toString());
+ users.add(eachUser);
+ }
+
+ for (int i = 0; i < users.size(); i++) {
+
+ if (Utilities.nvl(firstName).length() > 0) {
+ if (!firstName.equalsIgnoreCase(users.get(i).getFirstName())) {
+ continue;
+ }
+ }
+ if (Utilities.nvl(lastName).length() > 0) {
+ if (!lastName.equalsIgnoreCase(users.get(i).getLastName())) {
+ continue;
+ }
+ }
+
+ filterdUsers.add(users.get(i));
+
+ }
+
+ } catch (Exception e) {
+ logger.error(EELFLoggerDelegate.errorLogger, "getUserByFirstLastName failed", e);
+ } finally {
+ try {
+ in.close();
+ con.disconnect();
+ } catch (IOException e) {
+ logger.error(EELFLoggerDelegate.errorLogger, "getUserByFirstLastName failed to close", e);
+ }
+ }
+
+ return filterdUsers;
+ }
+
+ }
+
+ @SuppressWarnings("unchecked")
+ public String saveNewUser(EPUser newUser, String checkDuplicate) throws Exception {
+
+ try {
+
+ List<Criterion> restrictionsList = new ArrayList<Criterion>();
+ Criterion orgUserIdCriterion = Restrictions.eq("orgUserId",newUser.getLoginId());
+ restrictionsList.add(orgUserIdCriterion);
+ List<EPUser> list = (List<EPUser>) dataAccessService.getList(EPUser.class, null, restrictionsList, null);
+
+ if (list == null || list.size() == 0) {
+ newUser.setActive(true);
+ newUser.setOrgUserId(newUser.getLoginId());
+ newUser.setLoginPwd(CipherUtil.encryptPKC(newUser.getLoginPwd()));
+ getDataAccessService().saveDomainObject(newUser, null);
+ } else {
+ if (checkDuplicate.equals("Yes")) {
+ // userId already exist in database
+ return "Record already exist";
+ } else {
+
+ EPUser oldUser = (EPUser) list.get(0);
+ oldUser.setFirstName(newUser.getFirstName());
+ oldUser.setLastName(newUser.getLastName());
+ oldUser.setMiddleInitial(newUser.getMiddleInitial());
+ if (!oldUser.getLoginPwd().equals(newUser.getLoginPwd()))
+ oldUser.setLoginPwd(CipherUtil.encryptPKC(newUser.getLoginPwd()));
+ else
+ oldUser.setLoginPwd(newUser.getLoginPwd());
+ getDataAccessService().saveDomainObject(oldUser, null);
+
+ }
+
+ }
+
+ } catch (Exception e) {
+ logger.error(EELFLoggerDelegate.errorLogger, "saveNewUser failed", e);
+ throw new Exception(e);
+ }
+ return "success";
+ };
+
+ @Override
+ public void saveUser(EPUser user) throws Exception {
+ getDataAccessService().saveDomainObject(user, null);
+ }
+
+}
diff --git a/ecomp-portal-BE-common/src/main/java/org/onap/portalapp/portal/service/WidgetParameterService.java b/ecomp-portal-BE-common/src/main/java/org/onap/portalapp/portal/service/WidgetParameterService.java
new file mode 100644
index 00000000..782f54bf
--- /dev/null
+++ b/ecomp-portal-BE-common/src/main/java/org/onap/portalapp/portal/service/WidgetParameterService.java
@@ -0,0 +1,82 @@
+/*-
+ * ============LICENSE_START==========================================
+ * ONAP Portal
+ * ===================================================================
+ * Copyright (C) 2017 AT&T Intellectual Property. All rights reserved.
+ * ===================================================================
+ *
+ * Unless otherwise specified, all software contained herein is licensed
+ * under the Apache License, Version 2.0 (the "License");
+ * you may not use this software 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.
+ *
+ * Unless otherwise specified, all documentation contained herein is licensed
+ * under the Creative Commons License, Attribution 4.0 Intl. (the "License");
+ * you may not use this documentation except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * https://creativecommons.org/licenses/by/4.0/
+ *
+ * Unless required by applicable law or agreed to in writing, documentation
+ * 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.
+ *
+ * ============LICENSE_END============================================
+ *
+ * ECOMP is a trademark and service mark of AT&T Intellectual Property.
+ */
+package org.onap.portalapp.portal.service;
+
+import java.util.List;
+
+import org.onap.portalapp.portal.domain.WidgetCatalogParameter;
+
+public interface WidgetParameterService {
+
+ /**
+ * Saves the specified user-defined widget parameters to the table ep_widget_parameters
+ *
+ * @param newParameter
+ */
+ void saveUserParameter(WidgetCatalogParameter newParameter);
+
+ /**
+ * Gets the specified user-defined widget parameter where paramId is used from all users
+ *
+ * @param paramId
+ * @return
+ * List of widget parameters
+ */
+ List<WidgetCatalogParameter> getUserParameterById(Long paramId);
+
+
+ /**
+ * Deletes the specified user-defined widget parameters from ep_widget_parameters table
+ * where paramId is used
+ *
+ * @param paramId
+ */
+ void deleteUserParameterById(Long paramId);
+
+
+ /**
+ * Gets the specified user-defined widget parameter where paramId is used from the specified
+ * user with userId
+ * @param widgetId
+ * @param userId
+ * @param paramId
+ * @return WidgetCatalogParameter
+ */
+ WidgetCatalogParameter getUserParamById(Long widgetId, Long userId, Long paramId);
+
+}
diff --git a/ecomp-portal-BE-common/src/main/java/org/onap/portalapp/portal/service/WidgetParameterServiceImpl.java b/ecomp-portal-BE-common/src/main/java/org/onap/portalapp/portal/service/WidgetParameterServiceImpl.java
new file mode 100644
index 00000000..e01e2cba
--- /dev/null
+++ b/ecomp-portal-BE-common/src/main/java/org/onap/portalapp/portal/service/WidgetParameterServiceImpl.java
@@ -0,0 +1,109 @@
+/*-
+ * ============LICENSE_START==========================================
+ * ONAP Portal
+ * ===================================================================
+ * Copyright (C) 2017 AT&T Intellectual Property. All rights reserved.
+ * ===================================================================
+ *
+ * Unless otherwise specified, all software contained herein is licensed
+ * under the Apache License, Version 2.0 (the "License");
+ * you may not use this software 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.
+ *
+ * Unless otherwise specified, all documentation contained herein is licensed
+ * under the Creative Commons License, Attribution 4.0 Intl. (the "License");
+ * you may not use this documentation except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * https://creativecommons.org/licenses/by/4.0/
+ *
+ * Unless required by applicable law or agreed to in writing, documentation
+ * 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.
+ *
+ * ============LICENSE_END============================================
+ *
+ * ECOMP is a trademark and service mark of AT&T Intellectual Property.
+ */
+package org.onap.portalapp.portal.service;
+
+import java.util.ArrayList;
+import java.util.HashMap;
+import java.util.List;
+import java.util.Map;
+
+import org.hibernate.criterion.Criterion;
+import org.hibernate.criterion.Restrictions;
+import org.onap.portalapp.portal.domain.WidgetCatalogParameter;
+import org.onap.portalapp.portal.logging.aop.EPMetricsLog;
+import org.onap.portalsdk.core.logging.logic.EELFLoggerDelegate;
+import org.onap.portalsdk.core.service.DataAccessService;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.context.annotation.EnableAspectJAutoProxy;
+import org.springframework.stereotype.Service;
+
+@Service("widgetParameterService")
+@EnableAspectJAutoProxy
+@EPMetricsLog
+public class WidgetParameterServiceImpl implements WidgetParameterService{
+ EELFLoggerDelegate logger = EELFLoggerDelegate.getLogger(WidgetParameterServiceImpl.class);
+
+ @Autowired
+ private DataAccessService dataAccessService;
+
+ @SuppressWarnings("unchecked")
+ @Override
+ public WidgetCatalogParameter getUserParamById(Long widgetId, Long userId, Long paramId) {
+ List<Criterion> restrictionsList = new ArrayList<Criterion>();
+ Criterion widgetIdCrit = Restrictions.eq("widgetId", widgetId);
+ restrictionsList.add(widgetIdCrit);
+ Criterion userIdCrit = Restrictions.eq("userId", userId);
+ restrictionsList.add(userIdCrit);
+ Criterion paramIdCrit = Restrictions.eq("paramId", paramId);
+ restrictionsList.add(paramIdCrit);
+
+
+ WidgetCatalogParameter widgetParam = null;
+ List<WidgetCatalogParameter> list = (List<WidgetCatalogParameter>) dataAccessService
+ .getList(WidgetCatalogParameter.class, null, restrictionsList, null);
+ if(list.size() != 0)
+ widgetParam = list.get(0);
+ logger.debug(EELFLoggerDelegate.debugLogger,
+ "getUserParamById: widget parameters: " + widgetParam);
+ return widgetParam;
+ }
+
+ @Override
+ public void saveUserParameter(WidgetCatalogParameter newParameter) {
+ dataAccessService.saveDomainObject(newParameter, null);
+ }
+
+ @SuppressWarnings("unchecked")
+ @Override
+ public List<WidgetCatalogParameter> getUserParameterById(Long paramId) {
+ List<Criterion> restrictionsList = new ArrayList<Criterion>();
+ Criterion paramIdCrit = Restrictions.eq("paramId", paramId);
+ restrictionsList.add(paramIdCrit);
+ List<WidgetCatalogParameter> list = (List<WidgetCatalogParameter>) dataAccessService
+ .getList(WidgetCatalogParameter.class, null, restrictionsList, null);
+ return list;
+ }
+
+ @Override
+ public void deleteUserParameterById(Long paramId) {
+ Map<String, String> params = new HashMap<String, String>();
+ params.put("paramId", Long.toString(paramId));
+ dataAccessService.executeNamedQuery("deleteWidgetCatalogParameter", params, null);
+ dataAccessService.executeNamedQuery("deleteMicroserviceParameterById", params, null);
+ }
+}
diff --git a/ecomp-portal-BE-common/src/main/java/org/onap/portalapp/portal/service/WidgetService.java b/ecomp-portal-BE-common/src/main/java/org/onap/portalapp/portal/service/WidgetService.java
new file mode 100644
index 00000000..a529ba8a
--- /dev/null
+++ b/ecomp-portal-BE-common/src/main/java/org/onap/portalapp/portal/service/WidgetService.java
@@ -0,0 +1,54 @@
+/*-
+ * ============LICENSE_START==========================================
+ * ONAP Portal
+ * ===================================================================
+ * Copyright (C) 2017 AT&T Intellectual Property. All rights reserved.
+ * ===================================================================
+ *
+ * Unless otherwise specified, all software contained herein is licensed
+ * under the Apache License, Version 2.0 (the "License");
+ * you may not use this software 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.
+ *
+ * Unless otherwise specified, all documentation contained herein is licensed
+ * under the Creative Commons License, Attribution 4.0 Intl. (the "License");
+ * you may not use this documentation except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * https://creativecommons.org/licenses/by/4.0/
+ *
+ * Unless required by applicable law or agreed to in writing, documentation
+ * 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.
+ *
+ * ============LICENSE_END============================================
+ *
+ * ECOMP is a trademark and service mark of AT&T Intellectual Property.
+ */
+package org.onap.portalapp.portal.service;
+
+import java.util.List;
+
+import org.onap.portalapp.portal.domain.EPUser;
+import org.onap.portalapp.portal.transport.FieldsValidator;
+import org.onap.portalapp.portal.transport.OnboardingWidget;
+
+public interface WidgetService {
+
+ List<OnboardingWidget> getOnboardingWidgets(EPUser user, boolean managed);
+
+ FieldsValidator setOnboardingWidget(EPUser user, OnboardingWidget onboardingWidget);
+
+ FieldsValidator deleteOnboardingWidget(EPUser user, Long onboardingWidgetId);
+
+}
diff --git a/ecomp-portal-BE-common/src/main/java/org/onap/portalapp/portal/service/WidgetServiceImpl.java b/ecomp-portal-BE-common/src/main/java/org/onap/portalapp/portal/service/WidgetServiceImpl.java
new file mode 100644
index 00000000..062e9cb9
--- /dev/null
+++ b/ecomp-portal-BE-common/src/main/java/org/onap/portalapp/portal/service/WidgetServiceImpl.java
@@ -0,0 +1,310 @@
+/*-
+ * ============LICENSE_START==========================================
+ * ONAP Portal
+ * ===================================================================
+ * Copyright (C) 2017 AT&T Intellectual Property. All rights reserved.
+ * ===================================================================
+ *
+ * Unless otherwise specified, all software contained herein is licensed
+ * under the Apache License, Version 2.0 (the "License");
+ * you may not use this software 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.
+ *
+ * Unless otherwise specified, all documentation contained herein is licensed
+ * under the Creative Commons License, Attribution 4.0 Intl. (the "License");
+ * you may not use this documentation except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * https://creativecommons.org/licenses/by/4.0/
+ *
+ * Unless required by applicable law or agreed to in writing, documentation
+ * 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.
+ *
+ * ============LICENSE_END============================================
+ *
+ * ECOMP is a trademark and service mark of AT&T Intellectual Property.
+ */
+package org.onap.portalapp.portal.service;
+
+import java.util.ArrayList;
+import java.util.List;
+
+import javax.annotation.PostConstruct;
+import javax.servlet.http.HttpServletResponse;
+
+import org.hibernate.Session;
+import org.hibernate.SessionFactory;
+import org.hibernate.Transaction;
+import org.hibernate.criterion.Criterion;
+import org.hibernate.criterion.Restrictions;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.context.annotation.EnableAspectJAutoProxy;
+import org.springframework.stereotype.Service;
+import org.springframework.transaction.annotation.Transactional;
+import org.onap.portalapp.portal.domain.EPUser;
+import org.onap.portalapp.portal.domain.EPUserApp;
+import org.onap.portalapp.portal.domain.Widget;
+import org.onap.portalapp.portal.logging.aop.EPMetricsLog;
+import org.onap.portalapp.portal.logging.format.EPAppMessagesEnum;
+import org.onap.portalapp.portal.logging.logic.EPLogUtil;
+import org.onap.portalapp.portal.transport.FieldsValidator;
+import org.onap.portalapp.portal.transport.OnboardingWidget;
+import org.onap.portalapp.portal.utils.EPCommonSystemProperties;
+import org.onap.portalapp.portal.utils.EcompPortalUtils;
+import org.onap.portalsdk.core.logging.logic.EELFLoggerDelegate;
+import org.onap.portalsdk.core.service.DataAccessService;
+import org.onap.portalsdk.core.util.SystemProperties;
+
+@Service("widgetService")
+@Transactional
+@org.springframework.context.annotation.Configuration
+@EnableAspectJAutoProxy
+@EPMetricsLog
+public class WidgetServiceImpl implements WidgetService {
+
+ private EELFLoggerDelegate logger = EELFLoggerDelegate.getLogger(WidgetServiceImpl.class);
+
+ private static final String baseSqlToken = " widget.WIDGET_ID, widget.WDG_NAME, widget.APP_ID, app.APP_NAME, widget.WDG_WIDTH, widget.WDG_HEIGHT, widget.WDG_URL"
+ + " from FN_WIDGET widget join FN_APP app ON widget.APP_ID = app.APP_ID";
+
+ private String validAppsFilter = "";
+
+ private Long LONG_ECOMP_APP_ID = 1L;
+ private Long ACCOUNT_ADMIN_ROLE_ID = 999L;
+ private static final Long DUBLICATED_FIELD_VALUE_ECOMP_ERROR = new Long(EPCommonSystemProperties.DUBLICATED_FIELD_VALUE_ECOMP_ERROR);
+
+ private static final String urlField = "url";
+
+ private static final String nameField = "name";
+ @Autowired
+ AdminRolesService adminRolesService;
+ @Autowired
+ private SessionFactory sessionFactory;
+ @Autowired
+ private DataAccessService dataAccessService;
+
+ @PostConstruct
+ private void init() {
+ try {
+ validAppsFilter = " AND app.ENABLED = 'Y' AND app.APP_ID != " + SystemProperties.getProperty(EPCommonSystemProperties.ECOMP_APP_ID);
+ ACCOUNT_ADMIN_ROLE_ID = Long.valueOf(SystemProperties.getProperty(EPCommonSystemProperties.ACCOUNT_ADMIN_ROLE_ID));
+ LONG_ECOMP_APP_ID = Long.valueOf(SystemProperties.getProperty(EPCommonSystemProperties.ECOMP_APP_ID));
+ } catch(Exception e) {
+ logger.error(EELFLoggerDelegate.errorLogger, "init failed", e);
+ }
+ }
+
+ private String sqlWidgetsForAllApps() {
+ return "SELECT" + baseSqlToken + validAppsFilter;
+ }
+
+ private String sqlWidgetsForAllAppsWhereUserIsAdmin(Long userId) {
+ return "SELECT" + baseSqlToken + " join FN_USER_ROLE ON FN_USER_ROLE.APP_ID = app.APP_ID where FN_USER_ROLE.USER_ID = " + userId
+ + " AND FN_USER_ROLE.ROLE_ID = " + ACCOUNT_ADMIN_ROLE_ID + validAppsFilter;
+ }
+
+ private String sqlWidgetsForAllAppsWhereUserHasAnyRole(Long userId) {
+ return "SELECT DISTINCT" + baseSqlToken + " join FN_USER_ROLE ON FN_USER_ROLE.APP_ID = app.APP_ID where FN_USER_ROLE.USER_ID = "
+ + userId + validAppsFilter;
+ }
+
+ @SuppressWarnings("unchecked")
+ @Override
+ public List<OnboardingWidget> getOnboardingWidgets(EPUser user, boolean managed) {
+ List<OnboardingWidget> onboardingWidgets = new ArrayList<OnboardingWidget>();
+ String sql = null;
+ if (adminRolesService.isSuperAdmin(user)) {
+ sql = this.sqlWidgetsForAllApps();
+ } else if (managed) {
+ if (adminRolesService.isAccountAdmin(user)) {
+ sql = this.sqlWidgetsForAllAppsWhereUserIsAdmin(user.getId());
+ }
+ } else if (adminRolesService.isAccountAdmin(user) || adminRolesService.isUser(user)) {
+ sql = this.sqlWidgetsForAllAppsWhereUserHasAnyRole(user.getId());
+ }
+ if (sql != null) {
+ onboardingWidgets = dataAccessService.executeSQLQuery(sql, OnboardingWidget.class, null);
+ }
+ return onboardingWidgets;
+ }
+
+ private static final Object syncRests = new Object();
+
+ private boolean isUserAdminOfAppForWidget(boolean superAdmin, Long userId, Long appId) {
+ if (!superAdmin) {
+ List<EPUserApp> userRoles = getAdminUserRoles(userId, appId);
+ return (userRoles.size() > 0);
+ }
+ return true;
+ }
+
+ @SuppressWarnings("unchecked")
+ private List<EPUserApp> getAdminUserRoles(Long userId, Long appId) {
+ List<Criterion> restrictionsList = new ArrayList<Criterion>();
+ Criterion userIdCriterion = Restrictions.eq("userId",userId);
+ Criterion roleIDCriterion = Restrictions.eq("role.id", ACCOUNT_ADMIN_ROLE_ID);
+ Criterion appIDCriterion = Restrictions.eq("app.id", appId);
+ restrictionsList.add(Restrictions.and(userIdCriterion, roleIDCriterion,appIDCriterion));
+ return (List<EPUserApp>) dataAccessService.getList(EPUserApp.class, null, restrictionsList, null);
+ }
+
+ private void validateOnboardingWidget(OnboardingWidget onboardingWidget, FieldsValidator fieldsValidator) {
+
+ List<Widget> widgets = getWidgets(onboardingWidget);
+ boolean dublicatedUrl = false;
+ boolean dublicatedName = false;
+ for (Widget widget : widgets) {
+ if (onboardingWidget.id != null && onboardingWidget.id.equals(widget.getId())) {
+ // widget should not be compared with itself
+ continue;
+ }
+ if (!dublicatedUrl && widget.getUrl().equals(onboardingWidget.url)) {
+ dublicatedUrl = true;
+ if (dublicatedName) {
+ break;
+ }
+ }
+ if (!dublicatedName && widget.getName().equalsIgnoreCase(onboardingWidget.name) && widget.getAppId().equals(onboardingWidget.appId)) {
+ dublicatedName = true;
+ if (dublicatedUrl) {
+ break;
+ }
+ }
+ }
+ if (dublicatedUrl || dublicatedName) {
+ if (dublicatedUrl) {
+ fieldsValidator.addProblematicFieldName(urlField);
+ }
+ if (dublicatedName) {
+ fieldsValidator.addProblematicFieldName(nameField);
+ }
+ fieldsValidator.httpStatusCode = new Long(HttpServletResponse.SC_CONFLICT);
+ fieldsValidator.errorCode = DUBLICATED_FIELD_VALUE_ECOMP_ERROR;
+ }
+ }
+
+ @SuppressWarnings("unchecked")
+ private List<Widget> getWidgets(OnboardingWidget onboardingWidget) {
+ List<Criterion> restrictionsList = new ArrayList<Criterion>();
+ Criterion urlCriterion = Restrictions.eq("url", onboardingWidget.url);
+ Criterion nameCriterion = Restrictions.eq("name", onboardingWidget.name);
+ restrictionsList.add(Restrictions.or(urlCriterion, nameCriterion));
+ return (List<Widget>) dataAccessService.getList(Widget.class, null, restrictionsList, null);
+ }
+
+ private void applyOnboardingWidget(OnboardingWidget onboardingWidget, FieldsValidator fieldsValidator) {
+ boolean result = false;
+ Session localSession = null;
+ Transaction transaction = null;
+ try {
+ localSession = sessionFactory.openSession();
+ transaction = localSession.beginTransaction();
+ Widget widget;
+ if (onboardingWidget.id == null) {
+ widget = new Widget();
+ } else {
+ widget = (Widget) localSession.get(Widget.class, onboardingWidget.id);
+ }
+ widget.setAppId(onboardingWidget.appId);
+ widget.setName(onboardingWidget.name);
+ widget.setWidth(onboardingWidget.width);
+ widget.setHeight(onboardingWidget.height);
+ widget.setUrl(onboardingWidget.url);
+ localSession.saveOrUpdate(widget);
+ transaction.commit();
+ result = true;
+ } catch (Exception e) {
+ EPLogUtil.logEcompError(logger, EPAppMessagesEnum.BeDaoSystemError, e);
+ EcompPortalUtils.rollbackTransaction(transaction, "applyOnboardingWidget rollback, exception = " + e);
+ } finally {
+ EcompPortalUtils.closeLocalSession(localSession, "applyOnboardingWidget");
+ }
+ if (!result) {
+ fieldsValidator.httpStatusCode = new Long(HttpServletResponse.SC_INTERNAL_SERVER_ERROR);
+ }
+ }
+
+ private FieldsValidator updateOrSaveWidget(boolean superAdmin, Long userId, OnboardingWidget onboardingWidget) {
+ FieldsValidator fieldsValidator = new FieldsValidator();
+ if (!this.isUserAdminOfAppForWidget(superAdmin, userId, onboardingWidget.appId)) {
+ fieldsValidator.httpStatusCode = new Long(HttpServletResponse.SC_FORBIDDEN);
+ return fieldsValidator;
+ }
+ synchronized (syncRests) {
+ // onboardingWidget.id is null for POST and not null for PUT
+ if (onboardingWidget.id == null) {
+ this.validateOnboardingWidget(onboardingWidget, fieldsValidator);
+ } else {
+ Widget widget = (Widget) dataAccessService.getDomainObject(Widget.class, onboardingWidget.id, null);
+ if (widget == null || widget.getId() == null) {
+ // Widget not found
+ fieldsValidator.httpStatusCode = new Long(HttpServletResponse.SC_NOT_FOUND);
+ return fieldsValidator;
+ }
+ this.validateOnboardingWidget(onboardingWidget, fieldsValidator);
+ }
+ if (fieldsValidator.httpStatusCode.intValue() == HttpServletResponse.SC_OK) {
+ this.applyOnboardingWidget(onboardingWidget, fieldsValidator);
+ }
+ }
+ return fieldsValidator;
+ }
+
+ @Override
+ public FieldsValidator setOnboardingWidget(EPUser user, OnboardingWidget onboardingWidget) {
+ if (onboardingWidget.name.length() == 0 || onboardingWidget.url.length() == 0 || onboardingWidget.appId == null
+ || onboardingWidget.appId.equals(LONG_ECOMP_APP_ID) || onboardingWidget.width.intValue() <= 0 || onboardingWidget.height.intValue() <= 0) {
+ if (onboardingWidget.appId.equals(LONG_ECOMP_APP_ID)) {
+ }
+ FieldsValidator fieldsValidator = new FieldsValidator();
+ fieldsValidator.httpStatusCode = new Long(HttpServletResponse.SC_BAD_REQUEST);
+ return fieldsValidator;
+ }
+ return this.updateOrSaveWidget(adminRolesService.isSuperAdmin(user), user.getId(), onboardingWidget);
+ }
+
+ @Override
+ public FieldsValidator deleteOnboardingWidget(EPUser user, Long onboardingWidgetId) {
+ FieldsValidator fieldsValidator = new FieldsValidator();
+ synchronized (syncRests) {
+ Widget widget = (Widget) dataAccessService.getDomainObject(Widget.class, onboardingWidgetId, null);
+ if (widget != null && widget.getId() != null) { // widget exists
+ if (!this.isUserAdminOfAppForWidget(adminRolesService.isSuperAdmin(user), user.getId(), widget.getAppId())) {
+ fieldsValidator.httpStatusCode = new Long(HttpServletResponse.SC_FORBIDDEN);
+ } else {
+ boolean result = false;
+ Session localSession = null;
+ Transaction transaction = null;
+ try {
+ localSession = sessionFactory.openSession();
+ transaction = localSession.beginTransaction();
+ localSession.delete(localSession.get(Widget.class, onboardingWidgetId));
+ transaction.commit();
+ result = true;
+ } catch (Exception e) {
+ EPLogUtil.logEcompError(logger, EPAppMessagesEnum.BeDaoSystemError, e);
+ EcompPortalUtils.rollbackTransaction(transaction, "deleteOnboardingWidget rollback, exception = " + e);
+ } finally {
+ EcompPortalUtils.closeLocalSession(localSession, "deleteOnboardingWidget");
+ }
+ if (!result) {
+ fieldsValidator.httpStatusCode = new Long(HttpServletResponse.SC_INTERNAL_SERVER_ERROR);
+ }
+ }
+ }
+ }
+ return fieldsValidator;
+ }
+
+}
diff --git a/ecomp-portal-BE-common/src/main/java/org/onap/portalapp/portal/transport/AllAppsWithRolesForUser.java b/ecomp-portal-BE-common/src/main/java/org/onap/portalapp/portal/transport/AllAppsWithRolesForUser.java
new file mode 100644
index 00000000..2d2374ec
--- /dev/null
+++ b/ecomp-portal-BE-common/src/main/java/org/onap/portalapp/portal/transport/AllAppsWithRolesForUser.java
@@ -0,0 +1,58 @@
+/*-
+ * ============LICENSE_START==========================================
+ * ONAP Portal
+ * ===================================================================
+ * Copyright (C) 2017 AT&T Intellectual Property. All rights reserved.
+ * ===================================================================
+ *
+ * Unless otherwise specified, all software contained herein is licensed
+ * under the Apache License, Version 2.0 (the "License");
+ * you may not use this software 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.
+ *
+ * Unless otherwise specified, all documentation contained herein is licensed
+ * under the Creative Commons License, Attribution 4.0 Intl. (the "License");
+ * you may not use this documentation except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * https://creativecommons.org/licenses/by/4.0/
+ *
+ * Unless required by applicable law or agreed to in writing, documentation
+ * 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.
+ *
+ * ============LICENSE_END============================================
+ *
+ * ECOMP is a trademark and service mark of AT&T Intellectual Property.
+ */
+package org.onap.portalapp.portal.transport;
+
+import java.util.List;
+
+public class AllAppsWithRolesForUser {
+
+ public String orgUserId;
+
+ public List<AppWithUserRoles> apps;
+
+ public static class AppWithUserRoles {
+
+ public Long appId;
+
+ public String appName;
+
+ public List<RoleInAppForUser> appRoles;
+
+ }
+
+}
diff --git a/ecomp-portal-BE-common/src/main/java/org/onap/portalapp/portal/transport/Analytics.java b/ecomp-portal-BE-common/src/main/java/org/onap/portalapp/portal/transport/Analytics.java
new file mode 100644
index 00000000..deb36294
--- /dev/null
+++ b/ecomp-portal-BE-common/src/main/java/org/onap/portalapp/portal/transport/Analytics.java
@@ -0,0 +1,84 @@
+/*-
+ * ============LICENSE_START==========================================
+ * ONAP Portal
+ * ===================================================================
+ * Copyright (C) 2017 AT&T Intellectual Property. All rights reserved.
+ * ===================================================================
+ *
+ * Unless otherwise specified, all software contained herein is licensed
+ * under the Apache License, Version 2.0 (the "License");
+ * you may not use this software 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.
+ *
+ * Unless otherwise specified, all documentation contained herein is licensed
+ * under the Creative Commons License, Attribution 4.0 Intl. (the "License");
+ * you may not use this documentation except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * https://creativecommons.org/licenses/by/4.0/
+ *
+ * Unless required by applicable law or agreed to in writing, documentation
+ * 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.
+ *
+ * ============LICENSE_END============================================
+ *
+ * ECOMP is a trademark and service mark of AT&T Intellectual Property.
+ */
+package org.onap.portalapp.portal.transport;
+
+import com.fasterxml.jackson.annotation.JsonInclude;
+
+@JsonInclude(JsonInclude.Include.NON_NULL)
+public class Analytics {
+
+ private String action;
+ private String page;
+ private String function;
+ private String userid;
+ private String type;
+
+ public String getType() {
+ return type;
+ }
+ public void setType(String type) {
+ this.type = type;
+ }
+ public String getAction() {
+ return action;
+ }
+ public void setAction(String action) {
+ this.action = action;
+ }
+ public String getPage() {
+ return page;
+ }
+ public void setPage(String page) {
+ this.page = page;
+ }
+ public String getFunction() {
+ return function;
+ }
+ public void setFunction(String function) {
+ this.function = function;
+ }
+ public String getUserid() {
+ return userid;
+ }
+ public void setUserid(String userId) {
+ this.userid = userId;
+ }
+
+
+
+}
diff --git a/ecomp-portal-BE-common/src/main/java/org/onap/portalapp/portal/transport/AppCatalogPersonalization.java b/ecomp-portal-BE-common/src/main/java/org/onap/portalapp/portal/transport/AppCatalogPersonalization.java
new file mode 100644
index 00000000..29bba67a
--- /dev/null
+++ b/ecomp-portal-BE-common/src/main/java/org/onap/portalapp/portal/transport/AppCatalogPersonalization.java
@@ -0,0 +1,112 @@
+/*-
+ * ============LICENSE_START==========================================
+ * ONAP Portal
+ * ===================================================================
+ * Copyright (C) 2017 AT&T Intellectual Property. All rights reserved.
+ * ===================================================================
+ *
+ * Unless otherwise specified, all software contained herein is licensed
+ * under the Apache License, Version 2.0 (the "License");
+ * you may not use this software 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.
+ *
+ * Unless otherwise specified, all documentation contained herein is licensed
+ * under the Creative Commons License, Attribution 4.0 Intl. (the "License");
+ * you may not use this documentation except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * https://creativecommons.org/licenses/by/4.0/
+ *
+ * Unless required by applicable law or agreed to in writing, documentation
+ * 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.
+ *
+ * ============LICENSE_END============================================
+ *
+ * ECOMP is a trademark and service mark of AT&T Intellectual Property.
+ */
+package org.onap.portalapp.portal.transport;
+
+/**
+ * Model for the object PUT to the controller when the user takes an action on
+ * an application in the catalog.
+ */
+public class AppCatalogPersonalization {
+
+ public Long appId;
+ public Boolean select;
+ public Boolean pending;
+
+ public Long getAppId() {
+ return appId;
+ }
+
+ public void setAppId(Long appId) {
+ this.appId = appId;
+ }
+
+ public Boolean getSelect() {
+ return select;
+ }
+
+ public void setSelect(Boolean select) {
+ this.select = select;
+ }
+
+ public Boolean getPending() {
+ return pending;
+ }
+
+ public void setPending(Boolean pending) {
+ this.pending = pending;
+ }
+
+ @Override
+ public int hashCode() {
+ final int prime = 31;
+ int result = 1;
+ result = prime * result + ((appId == null) ? 0 : appId.hashCode());
+ result = prime * result + ((pending == null) ? 0 : pending.hashCode());
+ result = prime * result + ((select == null) ? 0 : select.hashCode());
+ return result;
+ }
+
+ @Override
+ public boolean equals(Object obj) {
+ if (this == obj)
+ return true;
+ if (obj == null)
+ return false;
+ if (getClass() != obj.getClass())
+ return false;
+ AppCatalogPersonalization other = (AppCatalogPersonalization) obj;
+ if (appId == null) {
+ if (other.appId != null)
+ return false;
+ } else if (!appId.equals(other.appId))
+ return false;
+ if (pending == null) {
+ if (other.pending != null)
+ return false;
+ } else if (!pending.equals(other.pending))
+ return false;
+ if (select == null) {
+ if (other.select != null)
+ return false;
+ } else if (!select.equals(other.select))
+ return false;
+ return true;
+ }
+
+
+}
diff --git a/ecomp-portal-BE-common/src/main/java/org/onap/portalapp/portal/transport/AppNameIdIsAdmin.java b/ecomp-portal-BE-common/src/main/java/org/onap/portalapp/portal/transport/AppNameIdIsAdmin.java
new file mode 100644
index 00000000..a554197b
--- /dev/null
+++ b/ecomp-portal-BE-common/src/main/java/org/onap/portalapp/portal/transport/AppNameIdIsAdmin.java
@@ -0,0 +1,132 @@
+/*-
+ * ============LICENSE_START==========================================
+ * ONAP Portal
+ * ===================================================================
+ * Copyright (C) 2017 AT&T Intellectual Property. All rights reserved.
+ * ===================================================================
+ *
+ * Unless otherwise specified, all software contained herein is licensed
+ * under the Apache License, Version 2.0 (the "License");
+ * you may not use this software 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.
+ *
+ * Unless otherwise specified, all documentation contained herein is licensed
+ * under the Creative Commons License, Attribution 4.0 Intl. (the "License");
+ * you may not use this documentation except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * https://creativecommons.org/licenses/by/4.0/
+ *
+ * Unless required by applicable law or agreed to in writing, documentation
+ * 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.
+ *
+ * ============LICENSE_END============================================
+ *
+ * ECOMP is a trademark and service mark of AT&T Intellectual Property.
+ */
+package org.onap.portalapp.portal.transport;
+
+public class AppNameIdIsAdmin {
+
+ public Long id;
+
+ public String appName;
+
+ public Boolean isAdmin;
+
+ public Boolean restrictedApp;
+
+ public Long getId() {
+ return id;
+ }
+
+ public void setId(Long id) {
+ this.id = id;
+ }
+
+ public String getAppName() {
+ return appName;
+ }
+
+ public void setAppName(String appName) {
+ this.appName = appName;
+ }
+
+ public Boolean getIsAdmin() {
+ return isAdmin;
+ }
+
+ public void setIsAdmin(Boolean isAdmin) {
+ this.isAdmin = isAdmin;
+ }
+
+ public Boolean getRestrictedApp() {
+ return restrictedApp;
+ }
+
+ public void setRestrictedApp(Boolean restrictedApp) {
+ this.restrictedApp = restrictedApp;
+ }
+
+ @Override
+ public int hashCode() {
+ final int prime = 31;
+ int result = 1;
+ result = prime * result + ((appName == null) ? 0 : appName.hashCode());
+ result = prime * result + ((id == null) ? 0 : id.hashCode());
+ result = prime * result + ((isAdmin == null) ? 0 : isAdmin.hashCode());
+ result = prime * result + ((restrictedApp == null) ? 0 : restrictedApp.hashCode());
+ return result;
+ }
+
+ @Override
+ public boolean equals(Object obj) {
+ if (this == obj)
+ return true;
+ if (obj == null)
+ return false;
+ if (getClass() != obj.getClass())
+ return false;
+ AppNameIdIsAdmin other = (AppNameIdIsAdmin) obj;
+ if (appName == null) {
+ if (other.appName != null)
+ return false;
+ } else if (!appName.equals(other.appName))
+ return false;
+ if (id == null) {
+ if (other.id != null)
+ return false;
+ } else if (!id.equals(other.id))
+ return false;
+ if (isAdmin == null) {
+ if (other.isAdmin != null)
+ return false;
+ } else if (!isAdmin.equals(other.isAdmin))
+ return false;
+ if (restrictedApp == null) {
+ if (other.restrictedApp != null)
+ return false;
+ } else if (!restrictedApp.equals(other.restrictedApp))
+ return false;
+ return true;
+ }
+
+ @Override
+ public String toString() {
+ return "AppNameIdIsAdmin [id=" + id + ", appName=" + appName + ", isAdmin=" + isAdmin + ", restrictedApp="
+ + restrictedApp + "]";
+ }
+
+
+}
diff --git a/ecomp-portal-BE-common/src/main/java/org/onap/portalapp/portal/transport/AppWithRolesForUser.java b/ecomp-portal-BE-common/src/main/java/org/onap/portalapp/portal/transport/AppWithRolesForUser.java
new file mode 100644
index 00000000..b6b10310
--- /dev/null
+++ b/ecomp-portal-BE-common/src/main/java/org/onap/portalapp/portal/transport/AppWithRolesForUser.java
@@ -0,0 +1,90 @@
+/*-
+ * ============LICENSE_START==========================================
+ * ONAP Portal
+ * ===================================================================
+ * Copyright (C) 2017 AT&T Intellectual Property. All rights reserved.
+ * ===================================================================
+ *
+ * Unless otherwise specified, all software contained herein is licensed
+ * under the Apache License, Version 2.0 (the "License");
+ * you may not use this software 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.
+ *
+ * Unless otherwise specified, all documentation contained herein is licensed
+ * under the Creative Commons License, Attribution 4.0 Intl. (the "License");
+ * you may not use this documentation except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * https://creativecommons.org/licenses/by/4.0/
+ *
+ * Unless required by applicable law or agreed to in writing, documentation
+ * 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.
+ *
+ * ============LICENSE_END============================================
+ *
+ * ECOMP is a trademark and service mark of AT&T Intellectual Property.
+ */
+package org.onap.portalapp.portal.transport;
+
+import java.util.List;
+
+public class AppWithRolesForUser {
+
+ public String orgUserId;
+
+ public Long appId;
+
+ public String appName;
+
+ public List<RoleInAppForUser> appRoles;
+
+ public String getOrgUserId() {
+ return orgUserId;
+ }
+
+ public void setOrgUserId(String orgUserId) {
+ this.orgUserId = orgUserId;
+ }
+
+ public Long getAppId() {
+ return appId;
+ }
+
+ public void setAppId(Long appId) {
+ this.appId = appId;
+ }
+
+ public String getAppName() {
+ return appName;
+ }
+
+ public void setAppName(String appName) {
+ this.appName = appName;
+ }
+
+ public List<RoleInAppForUser> getAppRoles() {
+ return appRoles;
+ }
+
+ public void setAppRoles(List<RoleInAppForUser> appRoles) {
+ this.appRoles = appRoles;
+ }
+
+ @Override
+ public String toString() {
+ return "AppWithRolesForUser [orgUserId=" + orgUserId + ", appId=" + appId + ", appName=" + appName
+ + ", appRoles=" + appRoles + "]";
+ }
+
+}
diff --git a/ecomp-portal-BE-common/src/main/java/org/onap/portalapp/portal/transport/AppsListWithAdminRole.java b/ecomp-portal-BE-common/src/main/java/org/onap/portalapp/portal/transport/AppsListWithAdminRole.java
new file mode 100644
index 00000000..67189fac
--- /dev/null
+++ b/ecomp-portal-BE-common/src/main/java/org/onap/portalapp/portal/transport/AppsListWithAdminRole.java
@@ -0,0 +1,104 @@
+/*-
+ * ============LICENSE_START==========================================
+ * ONAP Portal
+ * ===================================================================
+ * Copyright (C) 2017 AT&T Intellectual Property. All rights reserved.
+ * ===================================================================
+ *
+ * Unless otherwise specified, all software contained herein is licensed
+ * under the Apache License, Version 2.0 (the "License");
+ * you may not use this software 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.
+ *
+ * Unless otherwise specified, all documentation contained herein is licensed
+ * under the Creative Commons License, Attribution 4.0 Intl. (the "License");
+ * you may not use this documentation except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * https://creativecommons.org/licenses/by/4.0/
+ *
+ * Unless required by applicable law or agreed to in writing, documentation
+ * 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.
+ *
+ * ============LICENSE_END============================================
+ *
+ * ECOMP is a trademark and service mark of AT&T Intellectual Property.
+ */
+package org.onap.portalapp.portal.transport;
+
+import java.util.ArrayList;
+
+public class AppsListWithAdminRole {
+
+ public String orgUserId;
+
+ public ArrayList<AppNameIdIsAdmin> appsRoles;
+
+ public AppsListWithAdminRole() {
+ appsRoles = new ArrayList<AppNameIdIsAdmin>();
+ }
+
+ public String getOrgUserId() {
+ return orgUserId;
+ }
+
+ public void setOrgUserId(String orgUserId) {
+ this.orgUserId = orgUserId;
+ }
+
+ public ArrayList<AppNameIdIsAdmin> getAppsRoles() {
+ return appsRoles;
+ }
+
+ public void setAppsRoles(ArrayList<AppNameIdIsAdmin> appsRoles) {
+ this.appsRoles = appsRoles;
+ }
+
+ @Override
+ public String toString() {
+ return "AppsListWithAdminRole [orgUserId=" + orgUserId + ", appsRoles=" + appsRoles + "]";
+ }
+
+ @Override
+ public int hashCode() {
+ final int prime = 31;
+ int result = 1;
+ result = prime * result + ((appsRoles == null) ? 0 : appsRoles.hashCode());
+ result = prime * result + ((orgUserId == null) ? 0 : orgUserId.hashCode());
+ return result;
+ }
+
+ @Override
+ public boolean equals(Object obj) {
+ if (this == obj)
+ return true;
+ if (obj == null)
+ return false;
+ if (getClass() != obj.getClass())
+ return false;
+ AppsListWithAdminRole other = (AppsListWithAdminRole) obj;
+ if (appsRoles == null) {
+ if (other.appsRoles != null)
+ return false;
+ } else if (!appsRoles.equals(other.appsRoles))
+ return false;
+ if (orgUserId == null) {
+ if (other.orgUserId != null)
+ return false;
+ } else if (!orgUserId.equals(other.orgUserId))
+ return false;
+ return true;
+ }
+
+}
diff --git a/ecomp-portal-BE-common/src/main/java/org/onap/portalapp/portal/transport/BulkUploadRoleFunction.java b/ecomp-portal-BE-common/src/main/java/org/onap/portalapp/portal/transport/BulkUploadRoleFunction.java
new file mode 100644
index 00000000..9457242c
--- /dev/null
+++ b/ecomp-portal-BE-common/src/main/java/org/onap/portalapp/portal/transport/BulkUploadRoleFunction.java
@@ -0,0 +1,105 @@
+/*-
+ * ============LICENSE_START==========================================
+ * ONAP Portal
+ * ===================================================================
+ * Copyright (C) 2017 AT&T Intellectual Property. All rights reserved.
+ * ===================================================================
+ *
+ * Unless otherwise specified, all software contained herein is licensed
+ * under the Apache License, Version 2.0 (the "License");
+ * you may not use this software 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.
+ *
+ * Unless otherwise specified, all documentation contained herein is licensed
+ * under the Creative Commons License, Attribution 4.0 Intl. (the "License");
+ * you may not use this documentation except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * https://creativecommons.org/licenses/by/4.0/
+ *
+ * Unless required by applicable law or agreed to in writing, documentation
+ * 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.
+ *
+ * ============LICENSE_END============================================
+ *
+ * ECOMP is a trademark and service mark of AT&T Intellectual Property.
+ */
+package org.onap.portalapp.portal.transport;
+
+import java.io.Serializable;
+
+import javax.persistence.Column;
+import javax.persistence.Entity;
+import javax.persistence.Id;
+
+import com.fasterxml.jackson.annotation.JsonInclude;
+
+@Entity
+@JsonInclude(JsonInclude.Include.NON_NULL)
+public class BulkUploadRoleFunction implements Serializable{
+
+
+ private static final long serialVersionUID = -1880947347092068841L;
+
+ @Id
+ @Column(name="function_name")
+ private String functionName;
+ @Id
+ @Column(name="function_cd")
+ private String functionCd;
+
+ public String getFunctionName() {
+ return functionName;
+ }
+ public void setFunctionName(String functionName) {
+ this.functionName = functionName;
+ }
+ public String getFunctionCd() {
+ return functionCd;
+ }
+ public void setFunctionCd(String functionCd) {
+ this.functionCd = functionCd;
+ }
+ @Override
+ public int hashCode() {
+ final int prime = 31;
+ int result = 1;
+ result = prime * result + ((functionCd == null) ? 0 : functionCd.hashCode());
+ result = prime * result + ((functionName == null) ? 0 : functionName.hashCode());
+ return result;
+ }
+ @Override
+ public boolean equals(Object obj) {
+ if (this == obj)
+ return true;
+ if (obj == null)
+ return false;
+ if (getClass() != obj.getClass())
+ return false;
+ BulkUploadRoleFunction other = (BulkUploadRoleFunction) obj;
+ if (functionCd == null) {
+ if (other.functionCd != null)
+ return false;
+ } else if (!functionCd.equals(other.functionCd))
+ return false;
+ if (functionName == null) {
+ if (other.functionName != null)
+ return false;
+ } else if (!functionName.equals(other.functionName))
+ return false;
+ return true;
+ }
+
+
+}
diff --git a/ecomp-portal-BE-common/src/main/java/org/onap/portalapp/portal/transport/BulkUploadUserRoles.java b/ecomp-portal-BE-common/src/main/java/org/onap/portalapp/portal/transport/BulkUploadUserRoles.java
new file mode 100644
index 00000000..67260af7
--- /dev/null
+++ b/ecomp-portal-BE-common/src/main/java/org/onap/portalapp/portal/transport/BulkUploadUserRoles.java
@@ -0,0 +1,120 @@
+/*-
+ * ============LICENSE_START==========================================
+ * ONAP Portal
+ * ===================================================================
+ * Copyright (C) 2017 AT&T Intellectual Property. All rights reserved.
+ * ===================================================================
+ *
+ * Unless otherwise specified, all software contained herein is licensed
+ * under the Apache License, Version 2.0 (the "License");
+ * you may not use this software 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.
+ *
+ * Unless otherwise specified, all documentation contained herein is licensed
+ * under the Creative Commons License, Attribution 4.0 Intl. (the "License");
+ * you may not use this documentation except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * https://creativecommons.org/licenses/by/4.0/
+ *
+ * Unless required by applicable law or agreed to in writing, documentation
+ * 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.
+ *
+ * ============LICENSE_END============================================
+ *
+ * ECOMP is a trademark and service mark of AT&T Intellectual Property.
+ */
+package org.onap.portalapp.portal.transport;
+
+import java.io.Serializable;
+
+import javax.persistence.Column;
+import javax.persistence.Entity;
+import javax.persistence.Id;
+
+import com.fasterxml.jackson.annotation.JsonInclude;
+
+@Entity
+@JsonInclude(JsonInclude.Include.NON_NULL)
+public class BulkUploadUserRoles implements Serializable{
+
+ private static final long serialVersionUID = -7478654947593502185L;
+
+ @Id
+ @Column(name="role_name")
+ private String roleName;
+ @Id
+ @Column(name="org_user_id")
+ private String orgUserId;
+ @Id
+ @Column(name="auth_namespace")
+ private String appNameSpace;
+
+ public String getRoleName() {
+ return roleName;
+ }
+ public void setRoleName(String roleName) {
+ this.roleName = roleName;
+ }
+ public String getOrgUserId() {
+ return orgUserId;
+ }
+ public void setOrgUserId(String orgUserId) {
+ this.orgUserId = orgUserId;
+ }
+ public String getAppNameSpace() {
+ return appNameSpace;
+ }
+ public void setAppNameSpace(String appNameSpace) {
+ this.appNameSpace = appNameSpace;
+ }
+ @Override
+ public int hashCode() {
+ final int prime = 31;
+ int result = 1;
+ result = prime * result + ((appNameSpace == null) ? 0 : appNameSpace.hashCode());
+ result = prime * result + ((orgUserId == null) ? 0 : orgUserId.hashCode());
+ result = prime * result + ((roleName == null) ? 0 : roleName.hashCode());
+ return result;
+ }
+ @Override
+ public boolean equals(Object obj) {
+ if (this == obj)
+ return true;
+ if (obj == null)
+ return false;
+ if (getClass() != obj.getClass())
+ return false;
+ BulkUploadUserRoles other = (BulkUploadUserRoles) obj;
+ if (appNameSpace == null) {
+ if (other.appNameSpace != null)
+ return false;
+ } else if (!appNameSpace.equals(other.appNameSpace))
+ return false;
+ if (orgUserId == null) {
+ if (other.orgUserId != null)
+ return false;
+ } else if (!orgUserId.equals(other.orgUserId))
+ return false;
+ if (roleName == null) {
+ if (other.roleName != null)
+ return false;
+ } else if (!roleName.equals(other.roleName))
+ return false;
+ return true;
+ }
+
+
+
+}
diff --git a/ecomp-portal-BE-common/src/main/java/org/onap/portalapp/portal/transport/BusinessCardApplicationRole.java b/ecomp-portal-BE-common/src/main/java/org/onap/portalapp/portal/transport/BusinessCardApplicationRole.java
new file mode 100644
index 00000000..a9132364
--- /dev/null
+++ b/ecomp-portal-BE-common/src/main/java/org/onap/portalapp/portal/transport/BusinessCardApplicationRole.java
@@ -0,0 +1,126 @@
+/*-
+ * ============LICENSE_START==========================================
+ * ONAP Portal
+ * ===================================================================
+ * Copyright (C) 2017 AT&T Intellectual Property. All rights reserved.
+ * ===================================================================
+ *
+ * Unless otherwise specified, all software contained herein is licensed
+ * under the Apache License, Version 2.0 (the "License");
+ * you may not use this software 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.
+ *
+ * Unless otherwise specified, all documentation contained herein is licensed
+ * under the Creative Commons License, Attribution 4.0 Intl. (the "License");
+ * you may not use this documentation except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * https://creativecommons.org/licenses/by/4.0/
+ *
+ * Unless required by applicable law or agreed to in writing, documentation
+ * 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.
+ *
+ * ============LICENSE_END============================================
+ *
+ * ECOMP is a trademark and service mark of AT&T Intellectual Property.
+ */
+package org.onap.portalapp.portal.transport;
+
+import java.io.Serializable;
+
+import javax.persistence.Column;
+import javax.persistence.Entity;
+import javax.persistence.Id;
+
+import com.fasterxml.jackson.annotation.JsonInclude;
+
+@Entity
+@JsonInclude(JsonInclude.Include.NON_NULL)
+public class BusinessCardApplicationRole implements Serializable{
+
+ /**
+ *
+ */
+ private static final long serialVersionUID = 1L;
+
+
+ public BusinessCardApplicationRole() {
+ }
+
+
+ @Id
+ @Column(name="app_name")
+ private String appName;
+
+ @Id
+ @Column(name="role_name")
+ private String roleName;
+
+
+ public String getAppName() {
+ return appName;
+ }
+
+ public void setAppName(String appName) {
+ this.appName = appName;
+ }
+
+
+
+ public String getRoleName() {
+ return roleName;
+ }
+
+ public void setRoleName(String roleName) {
+ this.roleName = roleName;
+ }
+
+ @Override
+ public String toString() {
+ return "BusinessCardUserApplicationRoles [appName=" + appName + ", roleName=" + roleName + "]";
+ }
+
+ @Override
+ public int hashCode() {
+ final int prime = 31;
+ int result = 1;
+ result = prime * result + ((appName == null) ? 0 : appName.hashCode());
+ result = prime * result + ((roleName == null) ? 0 : roleName.hashCode());
+ return result;
+ }
+
+ @Override
+ public boolean equals(Object obj) {
+ if (this == obj)
+ return true;
+ if (obj == null)
+ return false;
+ if (getClass() != obj.getClass())
+ return false;
+ BusinessCardApplicationRole other = (BusinessCardApplicationRole) obj;
+ if (appName == null) {
+ if (other.appName != null)
+ return false;
+ } else if (!appName.equals(other.appName))
+ return false;
+ if (roleName == null) {
+ if (other.roleName != null)
+ return false;
+ } else if (!roleName.equals(other.roleName))
+ return false;
+ return true;
+ }
+
+
+}
diff --git a/ecomp-portal-BE-common/src/main/java/org/onap/portalapp/portal/transport/BusinessCardApplicationRolesList.java b/ecomp-portal-BE-common/src/main/java/org/onap/portalapp/portal/transport/BusinessCardApplicationRolesList.java
new file mode 100644
index 00000000..e17e53e0
--- /dev/null
+++ b/ecomp-portal-BE-common/src/main/java/org/onap/portalapp/portal/transport/BusinessCardApplicationRolesList.java
@@ -0,0 +1,104 @@
+/*-
+ * ============LICENSE_START==========================================
+ * ONAP Portal
+ * ===================================================================
+ * Copyright (C) 2017 AT&T Intellectual Property. All rights reserved.
+ * ===================================================================
+ *
+ * Unless otherwise specified, all software contained herein is licensed
+ * under the Apache License, Version 2.0 (the "License");
+ * you may not use this software 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.
+ *
+ * Unless otherwise specified, all documentation contained herein is licensed
+ * under the Creative Commons License, Attribution 4.0 Intl. (the "License");
+ * you may not use this documentation except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * https://creativecommons.org/licenses/by/4.0/
+ *
+ * Unless required by applicable law or agreed to in writing, documentation
+ * 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.
+ *
+ * ============LICENSE_END============================================
+ *
+ * ECOMP is a trademark and service mark of AT&T Intellectual Property.
+ */
+package org.onap.portalapp.portal.transport;
+
+import java.util.List;
+
+import com.fasterxml.jackson.annotation.JsonInclude;
+
+@JsonInclude(JsonInclude.Include.NON_NULL)
+public class BusinessCardApplicationRolesList {
+
+ public BusinessCardApplicationRolesList(){}
+
+ private String appName;
+ private List<String> roleNames;
+
+
+ public String getAppName() {
+ return appName;
+ }
+ public void setAppName(String appName) {
+ this.appName = appName;
+ }
+ public List<String> getRoleNames() {
+ return roleNames;
+ }
+ public void setRoleNames(List<String> roleNames) {
+ this.roleNames = roleNames;
+ }
+ public BusinessCardApplicationRolesList(String appName, List<String> roleNames) {
+ super();
+ this.appName = appName;
+ this.roleNames = roleNames;
+ }
+ @Override
+ public String toString() {
+ return "BusinessCardUserAppRoles [appName=" + appName + ", roleNames=" + roleNames + "]";
+ }
+ @Override
+ public int hashCode() {
+ final int prime = 31;
+ int result = 1;
+ result = prime * result + ((appName == null) ? 0 : appName.hashCode());
+ result = prime * result + ((roleNames == null) ? 0 : roleNames.hashCode());
+ return result;
+ }
+ @Override
+ public boolean equals(Object obj) {
+ if (this == obj)
+ return true;
+ if (obj == null)
+ return false;
+ if (getClass() != obj.getClass())
+ return false;
+ BusinessCardApplicationRolesList other = (BusinessCardApplicationRolesList) obj;
+ if (appName == null) {
+ if (other.appName != null)
+ return false;
+ } else if (!appName.equals(other.appName))
+ return false;
+ if (roleNames == null) {
+ if (other.roleNames != null)
+ return false;
+ } else if (!roleNames.equals(other.roleNames))
+ return false;
+ return true;
+ }
+
+}
diff --git a/ecomp-portal-BE-common/src/main/java/org/onap/portalapp/portal/transport/CentralApp.java b/ecomp-portal-BE-common/src/main/java/org/onap/portalapp/portal/transport/CentralApp.java
new file mode 100644
index 00000000..6fcc0dc8
--- /dev/null
+++ b/ecomp-portal-BE-common/src/main/java/org/onap/portalapp/portal/transport/CentralApp.java
@@ -0,0 +1,400 @@
+/*-
+ * ============LICENSE_START==========================================
+ * ONAP Portal
+ * ===================================================================
+ * Copyright (C) 2017 AT&T Intellectual Property. All rights reserved.
+ * ===================================================================
+ *
+ * Unless otherwise specified, all software contained herein is licensed
+ * under the Apache License, Version 2.0 (the "License");
+ * you may not use this software 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.
+ *
+ * Unless otherwise specified, all documentation contained herein is licensed
+ * under the Creative Commons License, Attribution 4.0 Intl. (the "License");
+ * you may not use this documentation except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * https://creativecommons.org/licenses/by/4.0/
+ *
+ * Unless required by applicable law or agreed to in writing, documentation
+ * 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.
+ *
+ * ============LICENSE_END============================================
+ *
+ * ECOMP is a trademark and service mark of AT&T Intellectual Property.
+ */
+package org.onap.portalapp.portal.transport;
+
+import java.io.Serializable;
+import java.util.Date;
+
+public class CentralApp implements Serializable{
+ /**
+ *
+ */
+ private static final long serialVersionUID = -3325965646585871632L;
+ private Long id;
+ private Date created;
+ private Date modified;
+ private Long createdId;
+ private Long modifiedId;
+ private Long rowNum;
+ private String name; // app_name
+ private String imageUrl; // app_image_url
+ private String description; // app_description
+ private String notes; // app_notes
+ private String url; // app_url
+ private String alternateUrl; // app_alternate_url
+ private String restEndpoint; // app_rest_endpoint
+ private String mlAppName; // ml_app_name
+ private String mlAppAdminId; // ml_app_admin_id;
+ private String motsId; // mots_id
+ private String appPassword; // app_password
+ private String open;
+ private String enabled;
+ private byte[] thumbnail;
+ private String username; // app_username
+ private String uebKey; // ueb_key
+ private String uebSecret; // ueb_secret
+ private String uebTopicName; // ueb_topic_name
+
+ public CentralApp(){
+
+ }
+
+ public CentralApp(Long id, Date created, Date modified, Long createdId, Long modifiedId, Long rowNum, String name,
+ String imageUrl, String description, String notes, String url, String alternateUrl, String restEndpoint,
+ String mlAppName, String mlAppAdminId, String motsId, String appPassword, String open, String enabled,
+ byte[] thumbnail, String username, String uebKey, String uebSecret, String uebTopicName) {
+ super();
+ this.id = id;
+ this.created = created;
+ this.modified = modified;
+ this.createdId = createdId;
+ this.modifiedId = modifiedId;
+ this.rowNum = rowNum;
+ this.name = name;
+ this.imageUrl = imageUrl;
+ this.description = description;
+ this.notes = notes;
+ this.url = url;
+ this.alternateUrl = alternateUrl;
+ this.restEndpoint = restEndpoint;
+ this.mlAppName = mlAppName;
+ this.mlAppAdminId = mlAppAdminId;
+ this.motsId = motsId;
+ this.appPassword = appPassword;
+ this.open = open;
+ this.enabled = enabled;
+ this.thumbnail = thumbnail;
+ this.username = username;
+ this.uebKey = uebKey;
+ this.uebSecret = uebSecret;
+ this.uebTopicName = uebTopicName;
+ }
+
+ public Long getId() {
+ return id;
+ }
+ public void setId(Long id) {
+ this.id = id;
+ }
+
+ public Date getCreated() {
+ return created;
+ }
+ public void setCreated(Date created) {
+ this.created = created;
+ }
+ public Date getModified() {
+ return modified;
+ }
+ public void setModified(Date modified) {
+ this.modified = modified;
+ }
+ public Long getCreatedId() {
+ return createdId;
+ }
+ public void setCreatedId(Long createdId) {
+ this.createdId = createdId;
+ }
+ public Long getModifiedId() {
+ return modifiedId;
+ }
+ public void setModifiedId(Long modifiedId) {
+ this.modifiedId = modifiedId;
+ }
+ public Long getRowNum() {
+ return rowNum;
+ }
+ public void setRowNum(Long rowNum) {
+ this.rowNum = rowNum;
+ }
+ public String getName() {
+ return name;
+ }
+ public void setName(String name) {
+ this.name = name;
+ }
+ public String getImageUrl() {
+ return imageUrl;
+ }
+ public void setImageUrl(String imageUrl) {
+ this.imageUrl = imageUrl;
+ }
+ public String getDescription() {
+ return description;
+ }
+ public void setDescription(String description) {
+ this.description = description;
+ }
+ public String getNotes() {
+ return notes;
+ }
+ public void setNotes(String notes) {
+ this.notes = notes;
+ }
+ public String getUrl() {
+ return url;
+ }
+ public void setUrl(String url) {
+ this.url = url;
+ }
+ public String getAlternateUrl() {
+ return alternateUrl;
+ }
+ public void setAlternateUrl(String alternateUrl) {
+ this.alternateUrl = alternateUrl;
+ }
+ public String getRestEndpoint() {
+ return restEndpoint;
+ }
+ public void setRestEndpoint(String restEndpoint) {
+ this.restEndpoint = restEndpoint;
+ }
+ public String getMlAppName() {
+ return mlAppName;
+ }
+ public void setMlAppName(String mlAppName) {
+ this.mlAppName = mlAppName;
+ }
+ public String getMlAppAdminId() {
+ return mlAppAdminId;
+ }
+ public void setMlAppAdminId(String mlAppAdminId) {
+ this.mlAppAdminId = mlAppAdminId;
+ }
+ public String getMotsId() {
+ return motsId;
+ }
+ public void setMotsId(String motsId) {
+ this.motsId = motsId;
+ }
+ public String getAppPassword() {
+ return appPassword;
+ }
+ public void setAppPassword(String appPassword) {
+ this.appPassword = appPassword;
+ }
+ public String getOpen() {
+ return open;
+ }
+ public void setOpen(String open) {
+ this.open = open;
+ }
+ public String getEnabled() {
+ return enabled;
+ }
+ public void setEnabled(String enabled) {
+ this.enabled = enabled;
+ }
+ public byte[] getThumbnail() {
+ return thumbnail;
+ }
+ public void setThumbnail(byte[] thumbnail) {
+ this.thumbnail = thumbnail;
+ }
+ public String getUsername() {
+ return username;
+ }
+ public void setUsername(String username) {
+ this.username = username;
+ }
+ public String getUebKey() {
+ return uebKey;
+ }
+ public void setUebKey(String uebKey) {
+ this.uebKey = uebKey;
+ }
+ public String getUebSecret() {
+ return uebSecret;
+ }
+ public void setUebSecret(String uebSecret) {
+ this.uebSecret = uebSecret;
+ }
+ public String getUebTopicName() {
+ return uebTopicName;
+ }
+ public void setUebTopicName(String uebTopicName) {
+ this.uebTopicName = uebTopicName;
+ }
+
+ @Override
+ public int hashCode() {
+ final int prime = 31;
+ int result = 1;
+ result = prime * result + ((alternateUrl == null) ? 0 : alternateUrl.hashCode());
+ result = prime * result + ((appPassword == null) ? 0 : appPassword.hashCode());
+ result = prime * result + ((createdId == null) ? 0 : createdId.hashCode());
+ result = prime * result + ((description == null) ? 0 : description.hashCode());
+ result = prime * result + ((enabled == null) ? 0 : enabled.hashCode());
+ result = prime * result + ((id == null) ? 0 : id.hashCode());
+ result = prime * result + ((imageUrl == null) ? 0 : imageUrl.hashCode());
+ result = prime * result + ((mlAppAdminId == null) ? 0 : mlAppAdminId.hashCode());
+ result = prime * result + ((mlAppName == null) ? 0 : mlAppName.hashCode());
+ result = prime * result + ((modifiedId == null) ? 0 : modifiedId.hashCode());
+ result = prime * result + ((motsId == null) ? 0 : motsId.hashCode());
+ result = prime * result + ((name == null) ? 0 : name.hashCode());
+ result = prime * result + ((notes == null) ? 0 : notes.hashCode());
+ result = prime * result + ((open == null) ? 0 : open.hashCode());
+ result = prime * result + ((restEndpoint == null) ? 0 : restEndpoint.hashCode());
+ result = prime * result + ((rowNum == null) ? 0 : rowNum.hashCode());
+ result = prime * result + ((uebKey == null) ? 0 : uebKey.hashCode());
+ result = prime * result + ((uebSecret == null) ? 0 : uebSecret.hashCode());
+ result = prime * result + ((uebTopicName == null) ? 0 : uebTopicName.hashCode());
+ result = prime * result + ((url == null) ? 0 : url.hashCode());
+ result = prime * result + ((username == null) ? 0 : username.hashCode());
+ return result;
+ }
+
+ @Override
+ public boolean equals(Object obj) {
+ if (this == obj)
+ return true;
+ if (obj == null)
+ return false;
+ if (getClass() != obj.getClass())
+ return false;
+ CentralApp other = (CentralApp) obj;
+ if (alternateUrl == null) {
+ if (other.alternateUrl != null)
+ return false;
+ } else if (!alternateUrl.equals(other.alternateUrl))
+ return false;
+ if (appPassword == null) {
+ if (other.appPassword != null)
+ return false;
+ } else if (!appPassword.equals(other.appPassword))
+ return false;
+ if (createdId == null) {
+ if (other.createdId != null)
+ return false;
+ } else if (!createdId.equals(other.createdId))
+ return false;
+ if (description == null) {
+ if (other.description != null)
+ return false;
+ } else if (!description.equals(other.description))
+ return false;
+ if (enabled == null) {
+ if (other.enabled != null)
+ return false;
+ } else if (!enabled.equals(other.enabled))
+ return false;
+ if (id == null) {
+ if (other.id != null)
+ return false;
+ } else if (!id.equals(other.id))
+ return false;
+ if (imageUrl == null) {
+ if (other.imageUrl != null)
+ return false;
+ } else if (!imageUrl.equals(other.imageUrl))
+ return false;
+ if (mlAppAdminId == null) {
+ if (other.mlAppAdminId != null)
+ return false;
+ } else if (!mlAppAdminId.equals(other.mlAppAdminId))
+ return false;
+ if (mlAppName == null) {
+ if (other.mlAppName != null)
+ return false;
+ } else if (!mlAppName.equals(other.mlAppName))
+ return false;
+ if (modifiedId == null) {
+ if (other.modifiedId != null)
+ return false;
+ } else if (!modifiedId.equals(other.modifiedId))
+ return false;
+ if (motsId == null) {
+ if (other.motsId != null)
+ return false;
+ } else if (!motsId.equals(other.motsId))
+ return false;
+ if (name == null) {
+ if (other.name != null)
+ return false;
+ } else if (!name.equals(other.name))
+ return false;
+ if (notes == null) {
+ if (other.notes != null)
+ return false;
+ } else if (!notes.equals(other.notes))
+ return false;
+ if (open == null) {
+ if (other.open != null)
+ return false;
+ } else if (!open.equals(other.open))
+ return false;
+ if (restEndpoint == null) {
+ if (other.restEndpoint != null)
+ return false;
+ } else if (!restEndpoint.equals(other.restEndpoint))
+ return false;
+ if (rowNum == null) {
+ if (other.rowNum != null)
+ return false;
+ } else if (!rowNum.equals(other.rowNum))
+ return false;
+ if (uebKey == null) {
+ if (other.uebKey != null)
+ return false;
+ } else if (!uebKey.equals(other.uebKey))
+ return false;
+ if (uebSecret == null) {
+ if (other.uebSecret != null)
+ return false;
+ } else if (!uebSecret.equals(other.uebSecret))
+ return false;
+ if (uebTopicName == null) {
+ if (other.uebTopicName != null)
+ return false;
+ } else if (!uebTopicName.equals(other.uebTopicName))
+ return false;
+ if (url == null) {
+ if (other.url != null)
+ return false;
+ } else if (!url.equals(other.url))
+ return false;
+ if (username == null) {
+ if (other.username != null)
+ return false;
+ } else if (!username.equals(other.username))
+ return false;
+ return true;
+ }
+
+
+}
diff --git a/ecomp-portal-BE-common/src/main/java/org/onap/portalapp/portal/transport/CentralRole.java b/ecomp-portal-BE-common/src/main/java/org/onap/portalapp/portal/transport/CentralRole.java
new file mode 100644
index 00000000..dc1a78fe
--- /dev/null
+++ b/ecomp-portal-BE-common/src/main/java/org/onap/portalapp/portal/transport/CentralRole.java
@@ -0,0 +1,279 @@
+/*-
+ * ============LICENSE_START==========================================
+ * ONAP Portal
+ * ===================================================================
+ * Copyright (C) 2017 AT&T Intellectual Property. All rights reserved.
+ * ===================================================================
+ *
+ * Unless otherwise specified, all software contained herein is licensed
+ * under the Apache License, Version 2.0 (the "License");
+ * you may not use this software 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.
+ *
+ * Unless otherwise specified, all documentation contained herein is licensed
+ * under the Creative Commons License, Attribution 4.0 Intl. (the "License");
+ * you may not use this documentation except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * https://creativecommons.org/licenses/by/4.0/
+ *
+ * Unless required by applicable law or agreed to in writing, documentation
+ * 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.
+ *
+ * ============LICENSE_END============================================
+ *
+ * ECOMP is a trademark and service mark of AT&T Intellectual Property.
+ */
+package org.onap.portalapp.portal.transport;
+
+import java.io.Serializable;
+import java.util.Date;
+import java.util.SortedSet;
+import java.util.TreeSet;
+
+public class CentralRole implements Serializable {
+
+ private static final long serialVersionUID = -9210905386086213882L;
+ private Long id;
+ private Date created;
+ private Date modified;
+ private Long createdId;
+ private Long modifiedId;
+ private Long rowNum;
+
+ private String name;
+ private boolean active;
+ private Integer priority;
+
+ private SortedSet<CentralRoleFunction> roleFunctions = new TreeSet<>();
+
+ private SortedSet<CentralRole> childRoles = new TreeSet<>();
+
+ private SortedSet<CentralRole> parentRoles = new TreeSet<>();
+
+ public CentralRole(){
+
+ }
+
+ public CentralRole(Long id, String name, boolean active, Integer priority,
+ SortedSet<CentralRoleFunction> roleFunctions) {
+ super();
+ this.id = id;
+ this.name = name;
+ this.active = active;
+ this.priority = priority;
+ this.roleFunctions = roleFunctions;
+ }
+
+
+
+ public CentralRole(Long id, Date created, Date modified, Long createdId, Long modifiedId, Long rowNum, String name,
+ boolean active, Integer priority, SortedSet<CentralRoleFunction> roleFunctions,
+ SortedSet<CentralRole> childRoles, SortedSet<CentralRole> parentRoles) {
+ super();
+ this.id = id;
+ this.created = created;
+ this.modified = modified;
+ this.createdId = createdId;
+ this.modifiedId = modifiedId;
+ this.rowNum = rowNum;
+ this.name = name;
+ this.active = active;
+ this.priority = priority;
+ this.roleFunctions = roleFunctions;
+ this.childRoles = childRoles;
+ this.parentRoles = parentRoles;
+ }
+
+ /**
+ * @return the id
+ */
+ public Long getId() {
+ return id;
+ }
+
+ /**
+ * @param id
+ * the id to set
+ */
+ public void setId(Long id) {
+ this.id = id;
+ }
+
+ /**
+ * @return the created
+ */
+ public Date getCreated() {
+ return created;
+ }
+
+ /**
+ * @param created
+ * the created to set
+ */
+ public void setCreated(Date created) {
+ this.created = created;
+ }
+
+ /**
+ * @return the modified
+ */
+ public Date getModified() {
+ return modified;
+ }
+
+ /**
+ * @param modified
+ * the modified to set
+ */
+ public void setModified(Date modified) {
+ this.modified = modified;
+ }
+
+ /**
+ * @return the createdId
+ */
+ public Long getCreatedId() {
+ return createdId;
+ }
+
+ /**
+ * @param createdId
+ * the createdId to set
+ */
+ public void setCreatedId(Long createdId) {
+ this.createdId = createdId;
+ }
+
+ /**
+ * @return the modifiedId
+ */
+ public Long getModifiedId() {
+ return modifiedId;
+ }
+
+ /**
+ * @param modifiedId
+ * the modifiedId to set
+ */
+ public void setModifiedId(Long modifiedId) {
+ this.modifiedId = modifiedId;
+ }
+
+ /**
+ * @return the rowNum
+ */
+ public Long getRowNum() {
+ return rowNum;
+ }
+
+ /**
+ * @param rowNum
+ * the rowNum to set
+ */
+ public void setRowNum(Long rowNum) {
+ this.rowNum = rowNum;
+ }
+
+ /**
+ * @return the name
+ */
+ public String getName() {
+ return name;
+ }
+
+ /**
+ * @param name
+ * the name to set
+ */
+ public void setName(String name) {
+ this.name = name;
+ }
+
+ /**
+ * @return the active
+ */
+ public boolean isActive() {
+ return active;
+ }
+
+ /**
+ * @param active
+ * the active to set
+ */
+ public void setActive(boolean active) {
+ this.active = active;
+ }
+
+ /**
+ * @return the priority
+ */
+ public Integer getPriority() {
+ return priority;
+ }
+
+ /**
+ * @param priority
+ * the priority to set
+ */
+ public void setPriority(Integer priority) {
+ this.priority = priority;
+ }
+
+ /**
+ * @return the roleFunctions
+ */
+ public SortedSet<CentralRoleFunction> getRoleFunctions() {
+ return roleFunctions;
+ }
+
+ /**
+ * @param roleFunctions
+ * the roleFunctions to set
+ */
+ public void setRoleFunctions(SortedSet<CentralRoleFunction> roleFunctions) {
+ this.roleFunctions = roleFunctions;
+ }
+
+ /**
+ * @return the childRoles
+ */
+ public SortedSet<CentralRole> getChildRoles() {
+ return childRoles;
+ }
+
+ /**
+ * @param childRoles
+ * the childRoles to set
+ */
+ public void setChildRoles(SortedSet<CentralRole> childRoles) {
+ this.childRoles = childRoles;
+ }
+
+ /**
+ * @return the parentRoles
+ */
+ public SortedSet<CentralRole> getParentRoles() {
+ return parentRoles;
+ }
+
+ /**
+ * @param parentRoles
+ * the parentRoles to set
+ */
+ public void setParentRoles(SortedSet<CentralRole> parentRoles) {
+ this.parentRoles = parentRoles;
+ }
+
+}
diff --git a/ecomp-portal-BE-common/src/main/java/org/onap/portalapp/portal/transport/CentralRoleFunction.java b/ecomp-portal-BE-common/src/main/java/org/onap/portalapp/portal/transport/CentralRoleFunction.java
new file mode 100644
index 00000000..6cc474a1
--- /dev/null
+++ b/ecomp-portal-BE-common/src/main/java/org/onap/portalapp/portal/transport/CentralRoleFunction.java
@@ -0,0 +1,251 @@
+/*-
+ * ============LICENSE_START==========================================
+ * ONAP Portal
+ * ===================================================================
+ * Copyright (C) 2017 AT&T Intellectual Property. All rights reserved.
+ * ===================================================================
+ *
+ * Unless otherwise specified, all software contained herein is licensed
+ * under the Apache License, Version 2.0 (the "License");
+ * you may not use this software 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.
+ *
+ * Unless otherwise specified, all documentation contained herein is licensed
+ * under the Creative Commons License, Attribution 4.0 Intl. (the "License");
+ * you may not use this documentation except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * https://creativecommons.org/licenses/by/4.0/
+ *
+ * Unless required by applicable law or agreed to in writing, documentation
+ * 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.
+ *
+ * ============LICENSE_END============================================
+ *
+ * ECOMP is a trademark and service mark of AT&T Intellectual Property.
+ */
+package org.onap.portalapp.portal.transport;
+
+import java.io.Serializable;
+import java.util.Date;
+import java.util.Set;
+
+@SuppressWarnings("rawtypes")
+public class CentralRoleFunction implements Serializable, Comparable {
+ private static final long serialVersionUID = 1990254299529285610L;
+ private Long id;
+ private Date created;
+ private Date modified;
+ private Long createdId;
+ private Long modifiedId;
+ private Serializable auditUserId;
+ private Set auditTrail;
+ private Long rowNum;
+ private String code;
+ private String name;
+ private String editUrl;
+
+ public CentralRoleFunction(String code, String name) {
+ super();
+ this.code = code;
+ this.name = name;
+ }
+
+ public CentralRoleFunction() {
+ }
+
+ /**
+ * @return the id
+ */
+ public Long getId() {
+ return id;
+ }
+
+ /**
+ * @param id
+ * the id to set
+ */
+ public void setId(Long id) {
+ this.id = id;
+ }
+
+ /**
+ * @return the created
+ */
+ public Date getCreated() {
+ return created;
+ }
+
+ /**
+ * @param created
+ * the created to set
+ */
+ public void setCreated(Date created) {
+ this.created = created;
+ }
+
+ /**
+ * @return the modified
+ */
+ public Date getModified() {
+ return modified;
+ }
+
+ /**
+ * @param modified
+ * the modified to set
+ */
+ public void setModified(Date modified) {
+ this.modified = modified;
+ }
+
+ /**
+ * @return the createdId
+ */
+ public Long getCreatedId() {
+ return createdId;
+ }
+
+ /**
+ * @param createdId
+ * the createdId to set
+ */
+ public void setCreatedId(Long createdId) {
+ this.createdId = createdId;
+ }
+
+ /**
+ * @return the modifiedId
+ */
+ public Long getModifiedId() {
+ return modifiedId;
+ }
+
+ /**
+ * @param modifiedId
+ * the modifiedId to set
+ */
+ public void setModifiedId(Long modifiedId) {
+ this.modifiedId = modifiedId;
+ }
+
+ /**
+ * @return the rowNum
+ */
+ public Long getRowNum() {
+ return rowNum;
+ }
+
+ /**
+ * @param rowNum
+ * the rowNum to set
+ */
+ public void setRowNum(Long rowNum) {
+ this.rowNum = rowNum;
+ }
+
+ /**
+ * @return the code
+ */
+ public String getCode() {
+ return code;
+ }
+
+ /**
+ * @param code
+ * the code to set
+ */
+ public void setCode(String code) {
+ this.code = code;
+ }
+
+ /**
+ * @return the name
+ */
+ public String getName() {
+ return name;
+ }
+
+ /**
+ * @param name
+ * the name to set
+ */
+ public void setName(String name) {
+ this.name = name;
+ }
+
+ public Serializable getAuditUserId() {
+ return auditUserId;
+ }
+
+ public void setAuditUserId(Serializable auditUserId) {
+ this.auditUserId = auditUserId;
+ }
+
+ public Set getAuditTrail() {
+ return auditTrail;
+ }
+
+ public void setAuditTrail(Set auditTrail) {
+ this.auditTrail = auditTrail;
+ }
+
+ public String getEditUrl() {
+ return editUrl;
+ }
+
+ public void setEditUrl(String editUrl) {
+ this.editUrl = editUrl;
+ }
+
+ @Override
+ public int compareTo(Object obj) {
+ String c1 = getName();
+ String c2 = ((CentralRoleFunction) obj).getName();
+
+ return (c1 == null || c2 == null) ? 1 : c1.compareTo(c2);
+ }
+
+ @Override
+ public int hashCode() {
+ final int prime = 31;
+ int result = 1;
+ result = prime * result + ((code == null) ? 0 : code.hashCode());
+ result = prime * result + ((name == null) ? 0 : name.hashCode());
+ return result;
+ }
+
+ @Override
+ public boolean equals(Object obj) {
+ if (this == obj)
+ return true;
+ if (obj == null)
+ return false;
+ if (getClass() != obj.getClass())
+ return false;
+ CentralRoleFunction other = (CentralRoleFunction) obj;
+ if (code == null) {
+ if (other.code != null)
+ return false;
+ } else if (!code.equals(other.code))
+ return false;
+ if (name == null) {
+ if (other.name != null)
+ return false;
+ } else if (!name.equals(other.name))
+ return false;
+ return true;
+ }
+
+}
diff --git a/ecomp-portal-BE-common/src/main/java/org/onap/portalapp/portal/transport/CentralUser.java b/ecomp-portal-BE-common/src/main/java/org/onap/portalapp/portal/transport/CentralUser.java
new file mode 100644
index 00000000..3b94d11a
--- /dev/null
+++ b/ecomp-portal-BE-common/src/main/java/org/onap/portalapp/portal/transport/CentralUser.java
@@ -0,0 +1,965 @@
+/*-
+ * ============LICENSE_START==========================================
+ * ONAP Portal
+ * ===================================================================
+ * Copyright (C) 2017 AT&T Intellectual Property. All rights reserved.
+ * ===================================================================
+ *
+ * Unless otherwise specified, all software contained herein is licensed
+ * under the Apache License, Version 2.0 (the "License");
+ * you may not use this software 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.
+ *
+ * Unless otherwise specified, all documentation contained herein is licensed
+ * under the Creative Commons License, Attribution 4.0 Intl. (the "License");
+ * you may not use this documentation except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * https://creativecommons.org/licenses/by/4.0/
+ *
+ * Unless required by applicable law or agreed to in writing, documentation
+ * 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.
+ *
+ * ============LICENSE_END============================================
+ *
+ * ECOMP is a trademark and service mark of AT&T Intellectual Property.
+ */
+package org.onap.portalapp.portal.transport;
+
+import java.io.Serializable;
+import java.util.Date;
+import java.util.Set;
+import java.util.TreeSet;
+
+public class CentralUser implements Serializable {
+
+ private static final long serialVersionUID = 7060454665330579923L;
+ private Long id;
+ private Date created;
+ private Date modified;
+ private Long createdId;
+ private Long modifiedId;
+ private Long rowNum;
+
+ private Long orgId;
+ private Long managerId;
+ private String firstName;
+ private String middleInitial;
+ private String lastName;
+ private String phone;
+ private String fax;
+ private String cellular;
+ private String email;
+ private Long addressId;
+ private String alertMethodCd;
+ private String hrid;
+ private String orgUserId;
+ private String orgCode;
+ private String address1;
+ private String address2;
+ private String city;
+ private String state;
+ private String zipCode;
+ private String country;
+ private String orgManagerUserId;
+ private String locationClli;
+ private String businessCountryCode;
+ private String businessCountryName;
+ private String businessUnit;
+ private String businessUnitName;
+ private String department;
+ private String departmentName;
+ private String companyCode;
+ private String company;
+ private String zipCodeSuffix;
+ private String jobTitle;
+ private String commandChain;
+ private String siloStatus;
+ private String costCenter;
+ private String financialLocCode;
+
+ private String loginId;
+ private String loginPwd;
+ private Date lastLoginDate;
+ private boolean active;
+ private boolean internal;
+ private Long selectedProfileId;
+ private Long timeZoneId;
+ private boolean online;
+ private String chatId;
+
+ private Set<CentralUserApp> userApps = new TreeSet<>();
+ private Set<CentralRole> pseudoRoles = new TreeSet<>();
+
+ public CentralUser(Long id, Date created, Date modified, Long createdId, Long modifiedId, Long rowNum, Long orgId,
+ Long managerId, String firstName, String middleInitial, String lastName, String phone, String fax,
+ String cellular, String email, Long addressId, String alertMethodCd, String hrid, String orgUserId,
+ String orgCode, String address1, String address2, String city, String state, String zipCode, String country,
+ String orgManagerUserId, String locationClli, String businessCountryCode, String businessCountryName,
+ String businessUnit, String businessUnitName, String department, String departmentName, String companyCode,
+ String company, String zipCodeSuffix, String jobTitle, String commandChain, String siloStatus,
+ String costCenter, String financialLocCode, String loginId, String loginPwd, Date lastLoginDate,
+ boolean active, boolean internal, Long selectedProfileId, Long timeZoneId, boolean online, String chatId,
+ Set<CentralUserApp> userApps) {
+ super();
+ this.id = id;
+ this.created = created;
+ this.modified = modified;
+ this.createdId = createdId;
+ this.modifiedId = modifiedId;
+ this.rowNum = rowNum;
+ this.orgId = orgId;
+ this.managerId = managerId;
+ this.firstName = firstName;
+ this.middleInitial = middleInitial;
+ this.lastName = lastName;
+ this.phone = phone;
+ this.fax = fax;
+ this.cellular = cellular;
+ this.email = email;
+ this.addressId = addressId;
+ this.alertMethodCd = alertMethodCd;
+ this.hrid = hrid;
+ this.orgUserId = orgUserId;
+ this.orgCode = orgCode;
+ this.address1 = address1;
+ this.address2 = address2;
+ this.city = city;
+ this.state = state;
+ this.zipCode = zipCode;
+ this.country = country;
+ this.orgManagerUserId = orgManagerUserId;
+ this.locationClli = locationClli;
+ this.businessCountryCode = businessCountryCode;
+ this.businessCountryName = businessCountryName;
+ this.businessUnit = businessUnit;
+ this.businessUnitName = businessUnitName;
+ this.department = department;
+ this.departmentName = departmentName;
+ this.companyCode = companyCode;
+ this.company = company;
+ this.zipCodeSuffix = zipCodeSuffix;
+ this.jobTitle = jobTitle;
+ this.commandChain = commandChain;
+ this.siloStatus = siloStatus;
+ this.costCenter = costCenter;
+ this.financialLocCode = financialLocCode;
+ this.loginId = loginId;
+ this.loginPwd = loginPwd;
+ this.lastLoginDate = lastLoginDate;
+ this.active = active;
+ this.internal = internal;
+ this.selectedProfileId = selectedProfileId;
+ this.timeZoneId = timeZoneId;
+ this.online = online;
+ this.chatId = chatId;
+ this.userApps = userApps;
+ }
+
+ /**
+ * @return the id
+ */
+ public Long getId() {
+ return id;
+ }
+
+ /**
+ * @param id
+ * the id to set
+ */
+ public void setId(Long id) {
+ this.id = id;
+ }
+
+ /**
+ * @return the created
+ */
+ public Date getCreated() {
+ return created;
+ }
+
+ /**
+ * @param created
+ * the created to set
+ */
+ public void setCreated(Date created) {
+ this.created = created;
+ }
+
+ /**
+ * @return the modified
+ */
+ public Date getModified() {
+ return modified;
+ }
+
+ /**
+ * @param modified
+ * the modified to set
+ */
+ public void setModified(Date modified) {
+ this.modified = modified;
+ }
+
+ /**
+ * @return the createdId
+ */
+ public Long getCreatedId() {
+ return createdId;
+ }
+
+ /**
+ * @param createdId
+ * the createdId to set
+ */
+ public void setCreatedId(Long createdId) {
+ this.createdId = createdId;
+ }
+
+ /**
+ * @return the modifiedId
+ */
+ public Long getModifiedId() {
+ return modifiedId;
+ }
+
+ /**
+ * @param modifiedId
+ * the modifiedId to set
+ */
+ public void setModifiedId(Long modifiedId) {
+ this.modifiedId = modifiedId;
+ }
+
+ /**
+ * @return the rowNum
+ */
+ public Long getRowNum() {
+ return rowNum;
+ }
+
+ /**
+ * @param rowNum
+ * the rowNum to set
+ */
+ public void setRowNum(Long rowNum) {
+ this.rowNum = rowNum;
+ }
+
+ /**
+ * @return the orgId
+ */
+ public Long getOrgId() {
+ return orgId;
+ }
+
+ /**
+ * @param orgId
+ * the orgId to set
+ */
+ public void setOrgId(Long orgId) {
+ this.orgId = orgId;
+ }
+
+ /**
+ * @return the managerId
+ */
+ public Long getManagerId() {
+ return managerId;
+ }
+
+ /**
+ * @param managerId
+ * the managerId to set
+ */
+ public void setManagerId(Long managerId) {
+ this.managerId = managerId;
+ }
+
+ /**
+ * @return the firstName
+ */
+ public String getFirstName() {
+ return firstName;
+ }
+
+ /**
+ * @param firstName
+ * the firstName to set
+ */
+ public void setFirstName(String firstName) {
+ this.firstName = firstName;
+ }
+
+ /**
+ * @return the middleInitial
+ */
+ public String getMiddleInitial() {
+ return middleInitial;
+ }
+
+ /**
+ * @param middleInitial
+ * the middleInitial to set
+ */
+ public void setMiddleInitial(String middleInitial) {
+ this.middleInitial = middleInitial;
+ }
+
+ /**
+ * @return the lastName
+ */
+ public String getLastName() {
+ return lastName;
+ }
+
+ /**
+ * @param lastName
+ * the lastName to set
+ */
+ public void setLastName(String lastName) {
+ this.lastName = lastName;
+ }
+
+ /**
+ * @return the phone
+ */
+ public String getPhone() {
+ return phone;
+ }
+
+ /**
+ * @param phone
+ * the phone to set
+ */
+ public void setPhone(String phone) {
+ this.phone = phone;
+ }
+
+ /**
+ * @return the fax
+ */
+ public String getFax() {
+ return fax;
+ }
+
+ /**
+ * @param fax
+ * the fax to set
+ */
+ public void setFax(String fax) {
+ this.fax = fax;
+ }
+
+ /**
+ * @return the cellular
+ */
+ public String getCellular() {
+ return cellular;
+ }
+
+ /**
+ * @param cellular
+ * the cellular to set
+ */
+ public void setCellular(String cellular) {
+ this.cellular = cellular;
+ }
+
+ /**
+ * @return the email
+ */
+ public String getEmail() {
+ return email;
+ }
+
+ /**
+ * @param email
+ * the email to set
+ */
+ public void setEmail(String email) {
+ this.email = email;
+ }
+
+ /**
+ * @return the addressId
+ */
+ public Long getAddressId() {
+ return addressId;
+ }
+
+ /**
+ * @param addressId
+ * the addressId to set
+ */
+ public void setAddressId(Long addressId) {
+ this.addressId = addressId;
+ }
+
+ /**
+ * @return the alertMethodCd
+ */
+ public String getAlertMethodCd() {
+ return alertMethodCd;
+ }
+
+ /**
+ * @param alertMethodCd
+ * the alertMethodCd to set
+ */
+ public void setAlertMethodCd(String alertMethodCd) {
+ this.alertMethodCd = alertMethodCd;
+ }
+
+ /**
+ * @return the hrid
+ */
+ public String getHrid() {
+ return hrid;
+ }
+
+ /**
+ * @param hrid
+ * the hrid to set
+ */
+ public void setHrid(String hrid) {
+ this.hrid = hrid;
+ }
+
+ /**
+ * @return the orgUserId
+ */
+ public String getOrgUserId() {
+ return orgUserId;
+ }
+
+ /**
+ * @param orgUserId
+ * the orgUserId to set
+ */
+ public void setOrgUserId(String orgUserId) {
+ this.orgUserId = orgUserId;
+ }
+
+ /**
+ * @return the orgCode
+ */
+ public String getOrgCode() {
+ return orgCode;
+ }
+
+ /**
+ * @param orgCode
+ * the orgCode to set
+ */
+ public void setOrgCode(String orgCode) {
+ this.orgCode = orgCode;
+ }
+
+ /**
+ * @return the address1
+ */
+ public String getAddress1() {
+ return address1;
+ }
+
+ /**
+ * @param address1
+ * the address1 to set
+ */
+ public void setAddress1(String address1) {
+ this.address1 = address1;
+ }
+
+ /**
+ * @return the address2
+ */
+ public String getAddress2() {
+ return address2;
+ }
+
+ /**
+ * @param address2
+ * the address2 to set
+ */
+ public void setAddress2(String address2) {
+ this.address2 = address2;
+ }
+
+ /**
+ * @return the city
+ */
+ public String getCity() {
+ return city;
+ }
+
+ /**
+ * @param city
+ * the city to set
+ */
+ public void setCity(String city) {
+ this.city = city;
+ }
+
+ /**
+ * @return the state
+ */
+ public String getState() {
+ return state;
+ }
+
+ /**
+ * @param state
+ * the state to set
+ */
+ public void setState(String state) {
+ this.state = state;
+ }
+
+ /**
+ * @return the zipCode
+ */
+ public String getZipCode() {
+ return zipCode;
+ }
+
+ /**
+ * @param zipCode
+ * the zipCode to set
+ */
+ public void setZipCode(String zipCode) {
+ this.zipCode = zipCode;
+ }
+
+ /**
+ * @return the country
+ */
+ public String getCountry() {
+ return country;
+ }
+
+ /**
+ * @param country
+ * the country to set
+ */
+ public void setCountry(String country) {
+ this.country = country;
+ }
+
+ /**
+ * @return the orgManagerUserId
+ */
+ public String getOrgManagerUserId() {
+ return orgManagerUserId;
+ }
+
+ /**
+ * @param orgManagerUserId
+ * the orgManagerUserId to set
+ */
+ public void setOrgManagerUserId(String orgManagerUserId) {
+ this.orgManagerUserId = orgManagerUserId;
+ }
+
+ /**
+ * @return the locationClli
+ */
+ public String getLocationClli() {
+ return locationClli;
+ }
+
+ /**
+ * @param locationClli
+ * the locationClli to set
+ */
+ public void setLocationClli(String locationClli) {
+ this.locationClli = locationClli;
+ }
+
+ /**
+ * @return the businessCountryCode
+ */
+ public String getBusinessCountryCode() {
+ return businessCountryCode;
+ }
+
+ /**
+ * @param businessCountryCode
+ * the businessCountryCode to set
+ */
+ public void setBusinessCountryCode(String businessCountryCode) {
+ this.businessCountryCode = businessCountryCode;
+ }
+
+ /**
+ * @return the businessCountryName
+ */
+ public String getBusinessCountryName() {
+ return businessCountryName;
+ }
+
+ /**
+ * @param businessCountryName
+ * the businessCountryName to set
+ */
+ public void setBusinessCountryName(String businessCountryName) {
+ this.businessCountryName = businessCountryName;
+ }
+
+ /**
+ * @return the businessUnit
+ */
+ public String getBusinessUnit() {
+ return businessUnit;
+ }
+
+ /**
+ * @param businessUnit
+ * the businessUnit to set
+ */
+ public void setBusinessUnit(String businessUnit) {
+ this.businessUnit = businessUnit;
+ }
+
+ /**
+ * @return the businessUnitName
+ */
+ public String getBusinessUnitName() {
+ return businessUnitName;
+ }
+
+ /**
+ * @param businessUnitName
+ * the businessUnitName to set
+ */
+ public void setBusinessUnitName(String businessUnitName) {
+ this.businessUnitName = businessUnitName;
+ }
+
+ /**
+ * @return the department
+ */
+ public String getDepartment() {
+ return department;
+ }
+
+ /**
+ * @param department
+ * the department to set
+ */
+ public void setDepartment(String department) {
+ this.department = department;
+ }
+
+ /**
+ * @return the departmentName
+ */
+ public String getDepartmentName() {
+ return departmentName;
+ }
+
+ /**
+ * @param departmentName
+ * the departmentName to set
+ */
+ public void setDepartmentName(String departmentName) {
+ this.departmentName = departmentName;
+ }
+
+ /**
+ * @return the companyCode
+ */
+ public String getCompanyCode() {
+ return companyCode;
+ }
+
+ /**
+ * @param companyCode
+ * the companyCode to set
+ */
+ public void setCompanyCode(String companyCode) {
+ this.companyCode = companyCode;
+ }
+
+ /**
+ * @return the company
+ */
+ public String getCompany() {
+ return company;
+ }
+
+ /**
+ * @param company
+ * the company to set
+ */
+ public void setCompany(String company) {
+ this.company = company;
+ }
+
+ /**
+ * @return the zipCodeSuffix
+ */
+ public String getZipCodeSuffix() {
+ return zipCodeSuffix;
+ }
+
+ /**
+ * @param zipCodeSuffix
+ * the zipCodeSuffix to set
+ */
+ public void setZipCodeSuffix(String zipCodeSuffix) {
+ this.zipCodeSuffix = zipCodeSuffix;
+ }
+
+ /**
+ * @return the jobTitle
+ */
+ public String getJobTitle() {
+ return jobTitle;
+ }
+
+ /**
+ * @param jobTitle
+ * the jobTitle to set
+ */
+ public void setJobTitle(String jobTitle) {
+ this.jobTitle = jobTitle;
+ }
+
+ /**
+ * @return the commandChain
+ */
+ public String getCommandChain() {
+ return commandChain;
+ }
+
+ /**
+ * @param commandChain
+ * the commandChain to set
+ */
+ public void setCommandChain(String commandChain) {
+ this.commandChain = commandChain;
+ }
+
+ /**
+ * @return the siloStatus
+ */
+ public String getSiloStatus() {
+ return siloStatus;
+ }
+
+ /**
+ * @param siloStatus
+ * the siloStatus to set
+ */
+ public void setSiloStatus(String siloStatus) {
+ this.siloStatus = siloStatus;
+ }
+
+ /**
+ * @return the costCenter
+ */
+ public String getCostCenter() {
+ return costCenter;
+ }
+
+ /**
+ * @param costCenter
+ * the costCenter to set
+ */
+ public void setCostCenter(String costCenter) {
+ this.costCenter = costCenter;
+ }
+
+ /**
+ * @return the financialLocCode
+ */
+ public String getFinancialLocCode() {
+ return financialLocCode;
+ }
+
+ /**
+ * @param financialLocCode
+ * the financialLocCode to set
+ */
+ public void setFinancialLocCode(String financialLocCode) {
+ this.financialLocCode = financialLocCode;
+ }
+
+ /**
+ * @return the loginId
+ */
+ public String getLoginId() {
+ return loginId;
+ }
+
+ /**
+ * @param loginId
+ * the loginId to set
+ */
+ public void setLoginId(String loginId) {
+ this.loginId = loginId;
+ }
+
+ /**
+ * @return the loginPwd
+ */
+ public String getLoginPwd() {
+ return loginPwd;
+ }
+
+ /**
+ * @param loginPwd
+ * the loginPwd to set
+ */
+ public void setLoginPwd(String loginPwd) {
+ this.loginPwd = loginPwd;
+ }
+
+ /**
+ * @return the lastLoginDate
+ */
+ public Date getLastLoginDate() {
+ return lastLoginDate;
+ }
+
+ /**
+ * @param lastLoginDate
+ * the lastLoginDate to set
+ */
+ public void setLastLoginDate(Date lastLoginDate) {
+ this.lastLoginDate = lastLoginDate;
+ }
+
+ /**
+ * @return the active
+ */
+ public boolean isActive() {
+ return active;
+ }
+
+ /**
+ * @param active
+ * the active to set
+ */
+ public void setActive(boolean active) {
+ this.active = active;
+ }
+
+ /**
+ * @return the internal
+ */
+ public boolean isInternal() {
+ return internal;
+ }
+
+ /**
+ * @param internal
+ * the internal to set
+ */
+ public void setInternal(boolean internal) {
+ this.internal = internal;
+ }
+
+ /**
+ * @return the selectedProfileId
+ */
+ public Long getSelectedProfileId() {
+ return selectedProfileId;
+ }
+
+ /**
+ * @param selectedProfileId
+ * the selectedProfileId to set
+ */
+ public void setSelectedProfileId(Long selectedProfileId) {
+ this.selectedProfileId = selectedProfileId;
+ }
+
+ /**
+ * @return the timeZoneId
+ */
+ public Long getTimeZoneId() {
+ return timeZoneId;
+ }
+
+ /**
+ * @param timeZoneId
+ * the timeZoneId to set
+ */
+ public void setTimeZoneId(Long timeZoneId) {
+ this.timeZoneId = timeZoneId;
+ }
+
+ /**
+ * @return the online
+ */
+ public boolean isOnline() {
+ return online;
+ }
+
+ /**
+ * @param online
+ * the online to set
+ */
+ public void setOnline(boolean online) {
+ this.online = online;
+ }
+
+ /**
+ * @return the chatId
+ */
+ public String getChatId() {
+ return chatId;
+ }
+
+ /**
+ * @param chatId
+ * the chatId to set
+ */
+ public void setChatId(String chatId) {
+ this.chatId = chatId;
+ }
+
+ /**
+ * @return the userApps
+ */
+ public Set<CentralUserApp> getUserApps() {
+ return userApps;
+ }
+
+ /**
+ * @param userApps
+ * the userApps to set
+ */
+ public void setUserApps(Set<CentralUserApp> userApps) {
+ this.userApps = userApps;
+ }
+
+ /**
+ * @return the pseudoRoles
+ */
+ public Set<CentralRole> getPseudoRoles() {
+ return pseudoRoles;
+ }
+
+ /**
+ * @param pseudoRoles
+ * the pseudoRoles to set
+ */
+ public void setPseudoRoles(Set<CentralRole> pseudoRoles) {
+ this.pseudoRoles = pseudoRoles;
+ }
+
+}
diff --git a/ecomp-portal-BE-common/src/main/java/org/onap/portalapp/portal/transport/CentralUserApp.java b/ecomp-portal-BE-common/src/main/java/org/onap/portalapp/portal/transport/CentralUserApp.java
new file mode 100644
index 00000000..59ce5fb3
--- /dev/null
+++ b/ecomp-portal-BE-common/src/main/java/org/onap/portalapp/portal/transport/CentralUserApp.java
@@ -0,0 +1,144 @@
+/*-
+ * ============LICENSE_START==========================================
+ * ONAP Portal
+ * ===================================================================
+ * Copyright (C) 2017 AT&T Intellectual Property. All rights reserved.
+ * ===================================================================
+ *
+ * Unless otherwise specified, all software contained herein is licensed
+ * under the Apache License, Version 2.0 (the "License");
+ * you may not use this software 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.
+ *
+ * Unless otherwise specified, all documentation contained herein is licensed
+ * under the Creative Commons License, Attribution 4.0 Intl. (the "License");
+ * you may not use this documentation except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * https://creativecommons.org/licenses/by/4.0/
+ *
+ * Unless required by applicable law or agreed to in writing, documentation
+ * 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.
+ *
+ * ============LICENSE_END============================================
+ *
+ * ECOMP is a trademark and service mark of AT&T Intellectual Property.
+ */
+package org.onap.portalapp.portal.transport;
+
+import java.io.Serializable;
+
+@SuppressWarnings("rawtypes")
+public class CentralUserApp implements Serializable, Comparable {
+
+ private static final long serialVersionUID = -1140858385803822099L;
+ private Long userId;
+ private CentralApp app;
+ private CentralRole role;
+ private Short priority;
+
+ /**
+ * @return the userId
+ */
+ public Long getUserId() {
+ return userId;
+ }
+
+ /**
+ * @param userId
+ * the userId to set
+ */
+ public void setUserId(Long userId) {
+ this.userId = userId;
+ }
+
+ /**
+ * @return the app
+ */
+ public CentralApp getApp() {
+ return app;
+ }
+
+ /**
+ * @param app
+ * the app to set
+ */
+ public void setApp(CentralApp app) {
+ this.app = app;
+ }
+
+ /**
+ * @return the role
+ */
+ public CentralRole getRole() {
+ return role;
+ }
+
+ /**
+ * @param role
+ * the role to set
+ */
+ public void setRole(CentralRole role) {
+ this.role = role;
+ }
+
+ /**
+ * @return the priority
+ */
+ public Short getPriority() {
+ return priority;
+ }
+
+ /**
+ * @param priority
+ * the priority to set
+ */
+ public void setPriority(Short priority) {
+ this.priority = priority;
+ }
+
+ @Override
+ public int compareTo(Object obj) {
+ String c1 = getRole().getName();
+ String c2 = ((CentralUserApp) obj).getRole().getName();
+
+ return (c1 == null || c2 == null) ? 1 : c1.compareTo(c2);
+ }
+
+ @Override
+ public int hashCode() {
+ final int prime = 31;
+ int result = 1;
+ result = prime * result + ((role == null) ? 0 : role.hashCode());
+ return result;
+ }
+
+ @Override
+ public boolean equals(Object obj) {
+ if (this == obj)
+ return true;
+ if (obj == null)
+ return false;
+ if (getClass() != obj.getClass())
+ return false;
+ CentralUserApp other = (CentralUserApp) obj;
+ if (role == null) {
+ if (other.role != null)
+ return false;
+ } else if (!role.equals(other.role))
+ return false;
+ return true;
+ }
+
+}
diff --git a/ecomp-portal-BE-common/src/main/java/org/onap/portalapp/portal/transport/CentralV2Role.java b/ecomp-portal-BE-common/src/main/java/org/onap/portalapp/portal/transport/CentralV2Role.java
new file mode 100644
index 00000000..8c87acb9
--- /dev/null
+++ b/ecomp-portal-BE-common/src/main/java/org/onap/portalapp/portal/transport/CentralV2Role.java
@@ -0,0 +1,246 @@
+/*-
+ * ============LICENSE_START==========================================
+ * ONAP Portal
+ * ===================================================================
+ * Copyright (C) 2017 AT&T Intellectual Property. All rights reserved.
+ * ===================================================================
+ *
+ * Unless otherwise specified, all software contained herein is licensed
+ * under the Apache License, Version 2.0 (the "License");
+ * you may not use this software 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.
+ *
+ * Unless otherwise specified, all documentation contained herein is licensed
+ * under the Creative Commons License, Attribution 4.0 Intl. (the "License");
+ * you may not use this documentation except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * https://creativecommons.org/licenses/by/4.0/
+ *
+ * Unless required by applicable law or agreed to in writing, documentation
+ * 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.
+ *
+ * ============LICENSE_END============================================
+ *
+ * ECOMP is a trademark and service mark of AT&T Intellectual Property.
+ */
+package org.onap.portalapp.portal.transport;
+
+import java.io.Serializable;
+import java.util.Date;
+import java.util.SortedSet;
+import java.util.TreeSet;
+
+import org.onap.portalapp.portal.domain.CentralV2RoleFunction;
+
+@SuppressWarnings("rawtypes")
+public class CentralV2Role implements Serializable, Comparable{
+ /**
+ *
+ */
+ private static final long serialVersionUID = -4332644961113063714L;
+ private Long id;
+ private Date created;
+ private Date modified;
+ private Long createdId;
+ private Long modifiedId;
+ private Long rowNum;
+
+ private String name;
+ private boolean active;
+ private Integer priority;
+
+ private SortedSet<CentralV2RoleFunction> roleFunctions = new TreeSet<>();
+
+ private SortedSet<CentralV2Role> childRoles = new TreeSet<>();
+
+ private SortedSet<CentralV2Role> parentRoles = new TreeSet<>();
+
+ public CentralV2Role(Long id, Date created, Date modified, Long createdId, Long modifiedId, Long rowNum,
+ String name, boolean active, Integer priority, SortedSet<CentralV2RoleFunction> roleFunctions,
+ SortedSet<CentralV2Role> childRoles, SortedSet<CentralV2Role> parentRoles) {
+ super();
+ this.id = id;
+ this.created = created;
+ this.modified = modified;
+ this.createdId = createdId;
+ this.modifiedId = modifiedId;
+ this.rowNum = rowNum;
+ this.name = name;
+ this.active = active;
+ this.priority = priority;
+ this.roleFunctions = roleFunctions;
+ this.childRoles = childRoles;
+ this.parentRoles = parentRoles;
+ }
+
+ public CentralV2Role(){
+
+ }
+
+ public CentralV2Role(Long id, String name){
+ this.id = id;
+ this.name = name;
+ }
+
+ public Long getId() {
+ return id;
+ }
+
+ public void setId(Long id) {
+ this.id = id;
+ }
+
+ public Date getCreated() {
+ return created;
+ }
+
+ public void setCreated(Date created) {
+ this.created = created;
+ }
+
+ public Date getModified() {
+ return modified;
+ }
+
+ public void setModified(Date modified) {
+ this.modified = modified;
+ }
+
+ public Long getCreatedId() {
+ return createdId;
+ }
+
+ public void setCreatedId(Long createdId) {
+ this.createdId = createdId;
+ }
+
+ public Long getModifiedId() {
+ return modifiedId;
+ }
+
+ public void setModifiedId(Long modifiedId) {
+ this.modifiedId = modifiedId;
+ }
+
+ public Long getRowNum() {
+ return rowNum;
+ }
+
+ public void setRowNum(Long rowNum) {
+ this.rowNum = rowNum;
+ }
+
+ public String getName() {
+ return name;
+ }
+
+ public void setName(String name) {
+ this.name = name;
+ }
+
+ public boolean isActive() {
+ return active;
+ }
+
+ public void setActive(boolean active) {
+ this.active = active;
+ }
+
+ public Integer getPriority() {
+ return priority;
+ }
+
+ public void setPriority(Integer priority) {
+ this.priority = priority;
+ }
+
+ public SortedSet<CentralV2RoleFunction> getRoleFunctions() {
+ return roleFunctions;
+ }
+
+ public void setRoleFunctions(SortedSet<CentralV2RoleFunction> roleFunctions) {
+ this.roleFunctions = roleFunctions;
+ }
+
+ public SortedSet<CentralV2Role> getChildRoles() {
+ return childRoles;
+ }
+
+ public void setChildRoles(SortedSet<CentralV2Role> childRoles) {
+ this.childRoles = childRoles;
+ }
+
+ public SortedSet<CentralV2Role> getParentRoles() {
+ return parentRoles;
+ }
+
+ public void setParentRoles(SortedSet<CentralV2Role> parentRoles) {
+ this.parentRoles = parentRoles;
+ }
+ public void addRoleFunction(CentralV2RoleFunction roleFunction) {
+ this.roleFunctions.add(roleFunction);
+ }
+
+ public void addChildRole(CentralV2Role role) {
+ this.childRoles.add(role);
+ }
+
+ public void addParentRole(CentralV2Role role) {
+ this.parentRoles.add(role);
+ }
+
+ public int compareTo(Object obj){
+ CentralV2Role other = (CentralV2Role)obj;
+
+ String c1 = getName();
+ String c2 = other.getName();
+
+ return (c1 == null || c2 == null) ? 1 : c1.compareTo(c2);
+ }
+
+ @Override
+ public int hashCode() {
+ final int prime = 31;
+ int result = 1;
+ result = prime * result + ((id == null) ? 0 : id.hashCode());
+ result = prime * result + ((name == null) ? 0 : name.hashCode());
+ return result;
+ }
+
+ @Override
+ public boolean equals(Object obj) {
+ if (this == obj)
+ return true;
+ if (obj == null)
+ return false;
+ if (getClass() != obj.getClass())
+ return false;
+ CentralV2Role other = (CentralV2Role) obj;
+ if (id == null) {
+ if (other.id != null)
+ return false;
+ } else if (!id.equals(other.id))
+ return false;
+ if (name == null) {
+ if (other.name != null)
+ return false;
+ } else if (!name.equals(other.name))
+ return false;
+ return true;
+ }
+
+
+
+}
diff --git a/ecomp-portal-BE-common/src/main/java/org/onap/portalapp/portal/transport/CentralV2User.java b/ecomp-portal-BE-common/src/main/java/org/onap/portalapp/portal/transport/CentralV2User.java
new file mode 100644
index 00000000..bdbf3924
--- /dev/null
+++ b/ecomp-portal-BE-common/src/main/java/org/onap/portalapp/portal/transport/CentralV2User.java
@@ -0,0 +1,1250 @@
+/*-
+ * ============LICENSE_START==========================================
+ * ONAP Portal
+ * ===================================================================
+ * Copyright (C) 2017 AT&T Intellectual Property. All rights reserved.
+ * ===================================================================
+ *
+ * Unless otherwise specified, all software contained herein is licensed
+ * under the Apache License, Version 2.0 (the "License");
+ * you may not use this software 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.
+ *
+ * Unless otherwise specified, all documentation contained herein is licensed
+ * under the Creative Commons License, Attribution 4.0 Intl. (the "License");
+ * you may not use this documentation except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * https://creativecommons.org/licenses/by/4.0/
+ *
+ * Unless required by applicable law or agreed to in writing, documentation
+ * 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.
+ *
+ * ============LICENSE_END============================================
+ *
+ * ECOMP is a trademark and service mark of AT&T Intellectual Property.
+ */
+package org.onap.portalapp.portal.transport;
+
+import java.io.Serializable;
+import java.util.Date;
+import java.util.Set;
+
+public class CentralV2User implements Serializable {
+
+
+ /**
+ *
+ */
+ private static final long serialVersionUID = -2673289523184880563L;
+ private Long id;
+ private Date created;
+ private Date modified;
+ private Long createdId;
+ private Long modifiedId;
+ private Long rowNum;
+
+ private Long orgId;
+ private Long managerId;
+ private String firstName;
+ private String middleInitial;
+ private String lastName;
+ private String phone;
+ private String fax;
+ private String cellular;
+ private String email;
+ private Long addressId;
+ private String alertMethodCd;
+ private String hrid;
+ private String orgUserId;
+ private String orgCode;
+ private String address1;
+ private String address2;
+ private String city;
+ private String state;
+ private String zipCode;
+ private String country;
+ private String orgManagerUserId;
+ private String locationClli;
+ private String businessCountryCode;
+ private String businessCountryName;
+ private String businessUnit;
+ private String businessUnitName;
+ private String department;
+ private String departmentName;
+ private String companyCode;
+ private String company;
+ private String zipCodeSuffix;
+ private String jobTitle;
+ private String commandChain;
+ private String siloStatus;
+ private String costCenter;
+ private String financialLocCode;
+
+ private String loginId;
+ private String loginPwd;
+ private Date lastLoginDate;
+ private boolean active;
+ private boolean internal;
+ private Long selectedProfileId;
+ private Long timeZoneId;
+ private boolean online;
+ private String chatId;
+
+ private Set<CentralV2UserApp> userApps = null;
+ private Set<CentralV2Role> pseudoRoles = null;
+
+ public CentralV2User(){
+
+ }
+
+ public CentralV2User(Long id, Date created, Date modified, Long createdId, Long modifiedId, Long rowNum, Long orgId,
+ Long managerId, String firstName, String middleInitial, String lastName, String phone, String fax,
+ String cellular, String email, Long addressId, String alertMethodCd, String hrid, String orgUserId,
+ String orgCode, String address1, String address2, String city, String state, String zipCode, String country,
+ String orgManagerUserId, String locationClli, String businessCountryCode, String businessCountryName,
+ String businessUnit, String businessUnitName, String department, String departmentName, String companyCode,
+ String company, String zipCodeSuffix, String jobTitle, String commandChain, String siloStatus,
+ String costCenter, String financialLocCode, String loginId, String loginPwd, Date lastLoginDate,
+ boolean active, boolean internal, Long selectedProfileId, Long timeZoneId, boolean online, String chatId,
+ Set<CentralV2UserApp> userApps, Set<CentralV2Role> pseudoRoles) {
+ super();
+ this.id = id;
+ this.created = created;
+ this.modified = modified;
+ this.createdId = createdId;
+ this.modifiedId = modifiedId;
+ this.rowNum = rowNum;
+ this.orgId = orgId;
+ this.managerId = managerId;
+ this.firstName = firstName;
+ this.middleInitial = middleInitial;
+ this.lastName = lastName;
+ this.phone = phone;
+ this.fax = fax;
+ this.cellular = cellular;
+ this.email = email;
+ this.addressId = addressId;
+ this.alertMethodCd = alertMethodCd;
+ this.hrid = hrid;
+ this.orgUserId = orgUserId;
+ this.orgCode = orgCode;
+ this.address1 = address1;
+ this.address2 = address2;
+ this.city = city;
+ this.state = state;
+ this.zipCode = zipCode;
+ this.country = country;
+ this.orgManagerUserId = orgManagerUserId;
+ this.locationClli = locationClli;
+ this.businessCountryCode = businessCountryCode;
+ this.businessCountryName = businessCountryName;
+ this.businessUnit = businessUnit;
+ this.businessUnitName = businessUnitName;
+ this.department = department;
+ this.departmentName = departmentName;
+ this.companyCode = companyCode;
+ this.company = company;
+ this.zipCodeSuffix = zipCodeSuffix;
+ this.jobTitle = jobTitle;
+ this.commandChain = commandChain;
+ this.siloStatus = siloStatus;
+ this.costCenter = costCenter;
+ this.financialLocCode = financialLocCode;
+ this.loginId = loginId;
+ this.loginPwd = loginPwd;
+ this.lastLoginDate = lastLoginDate;
+ this.active = active;
+ this.internal = internal;
+ this.selectedProfileId = selectedProfileId;
+ this.timeZoneId = timeZoneId;
+ this.online = online;
+ this.chatId = chatId;
+ this.userApps = userApps;
+ this.pseudoRoles = pseudoRoles;
+ }
+
+ /**
+ * @return the id
+ */
+ public Long getId() {
+ return id;
+ }
+
+ /**
+ * @param id the id to set
+ */
+ public void setId(Long id) {
+ this.id = id;
+ }
+
+ /**
+ * @return the created
+ */
+ public Date getCreated() {
+ return created;
+ }
+
+ /**
+ * @param created the created to set
+ */
+ public void setCreated(Date created) {
+ this.created = created;
+ }
+
+ /**
+ * @return the modified
+ */
+ public Date getModified() {
+ return modified;
+ }
+
+ /**
+ * @param modified the modified to set
+ */
+ public void setModified(Date modified) {
+ this.modified = modified;
+ }
+
+ /**
+ * @return the createdId
+ */
+ public Long getCreatedId() {
+ return createdId;
+ }
+
+ /**
+ * @param createdId the createdId to set
+ */
+ public void setCreatedId(Long createdId) {
+ this.createdId = createdId;
+ }
+
+ /**
+ * @return the modifiedId
+ */
+ public Long getModifiedId() {
+ return modifiedId;
+ }
+
+ /**
+ * @param modifiedId the modifiedId to set
+ */
+ public void setModifiedId(Long modifiedId) {
+ this.modifiedId = modifiedId;
+ }
+
+ /**
+ * @return the rowNum
+ */
+ public Long getRowNum() {
+ return rowNum;
+ }
+
+ /**
+ * @param rowNum the rowNum to set
+ */
+ public void setRowNum(Long rowNum) {
+ this.rowNum = rowNum;
+ }
+
+ /**
+ * @return the orgId
+ */
+ public Long getOrgId() {
+ return orgId;
+ }
+
+ /**
+ * @param orgId the orgId to set
+ */
+ public void setOrgId(Long orgId) {
+ this.orgId = orgId;
+ }
+
+ /**
+ * @return the managerId
+ */
+ public Long getManagerId() {
+ return managerId;
+ }
+
+ /**
+ * @param managerId the managerId to set
+ */
+ public void setManagerId(Long managerId) {
+ this.managerId = managerId;
+ }
+
+ /**
+ * @return the firstName
+ */
+ public String getFirstName() {
+ return firstName;
+ }
+
+ /**
+ * @param firstName the firstName to set
+ */
+ public void setFirstName(String firstName) {
+ this.firstName = firstName;
+ }
+
+ /**
+ * @return the middleInitial
+ */
+ public String getMiddleInitial() {
+ return middleInitial;
+ }
+
+ /**
+ * @param middleInitial the middleInitial to set
+ */
+ public void setMiddleInitial(String middleInitial) {
+ this.middleInitial = middleInitial;
+ }
+
+ /**
+ * @return the lastName
+ */
+ public String getLastName() {
+ return lastName;
+ }
+
+ /**
+ * @param lastName the lastName to set
+ */
+ public void setLastName(String lastName) {
+ this.lastName = lastName;
+ }
+
+ /**
+ * @return the phone
+ */
+ public String getPhone() {
+ return phone;
+ }
+
+ /**
+ * @param phone the phone to set
+ */
+ public void setPhone(String phone) {
+ this.phone = phone;
+ }
+
+ /**
+ * @return the fax
+ */
+ public String getFax() {
+ return fax;
+ }
+
+ /**
+ * @param fax the fax to set
+ */
+ public void setFax(String fax) {
+ this.fax = fax;
+ }
+
+ /**
+ * @return the cellular
+ */
+ public String getCellular() {
+ return cellular;
+ }
+
+ /**
+ * @param cellular the cellular to set
+ */
+ public void setCellular(String cellular) {
+ this.cellular = cellular;
+ }
+
+ /**
+ * @return the email
+ */
+ public String getEmail() {
+ return email;
+ }
+
+ /**
+ * @param email the email to set
+ */
+ public void setEmail(String email) {
+ this.email = email;
+ }
+
+ /**
+ * @return the addressId
+ */
+ public Long getAddressId() {
+ return addressId;
+ }
+
+ /**
+ * @param addressId the addressId to set
+ */
+ public void setAddressId(Long addressId) {
+ this.addressId = addressId;
+ }
+
+ /**
+ * @return the alertMethodCd
+ */
+ public String getAlertMethodCd() {
+ return alertMethodCd;
+ }
+
+ /**
+ * @param alertMethodCd the alertMethodCd to set
+ */
+ public void setAlertMethodCd(String alertMethodCd) {
+ this.alertMethodCd = alertMethodCd;
+ }
+
+ /**
+ * @return the hrid
+ */
+ public String getHrid() {
+ return hrid;
+ }
+
+ /**
+ * @param hrid the hrid to set
+ */
+ public void setHrid(String hrid) {
+ this.hrid = hrid;
+ }
+
+ /**
+ * @return the orgUserId
+ */
+ public String getOrgUserId() {
+ return orgUserId;
+ }
+
+ /**
+ * @param orgUserId the orgUserId to set
+ */
+ public void setOrgUserId(String orgUserId) {
+ this.orgUserId = orgUserId;
+ }
+
+ /**
+ * @return the orgCode
+ */
+ public String getOrgCode() {
+ return orgCode;
+ }
+
+ /**
+ * @param orgCode the orgCode to set
+ */
+ public void setOrgCode(String orgCode) {
+ this.orgCode = orgCode;
+ }
+
+ /**
+ * @return the address1
+ */
+ public String getAddress1() {
+ return address1;
+ }
+
+ /**
+ * @param address1 the address1 to set
+ */
+ public void setAddress1(String address1) {
+ this.address1 = address1;
+ }
+
+ /**
+ * @return the address2
+ */
+ public String getAddress2() {
+ return address2;
+ }
+
+ /**
+ * @param address2 the address2 to set
+ */
+ public void setAddress2(String address2) {
+ this.address2 = address2;
+ }
+
+ /**
+ * @return the city
+ */
+ public String getCity() {
+ return city;
+ }
+
+ /**
+ * @param city the city to set
+ */
+ public void setCity(String city) {
+ this.city = city;
+ }
+
+ /**
+ * @return the state
+ */
+ public String getState() {
+ return state;
+ }
+
+ /**
+ * @param state the state to set
+ */
+ public void setState(String state) {
+ this.state = state;
+ }
+
+ /**
+ * @return the zipCode
+ */
+ public String getZipCode() {
+ return zipCode;
+ }
+
+ /**
+ * @param zipCode the zipCode to set
+ */
+ public void setZipCode(String zipCode) {
+ this.zipCode = zipCode;
+ }
+
+ /**
+ * @return the country
+ */
+ public String getCountry() {
+ return country;
+ }
+
+ /**
+ * @param country the country to set
+ */
+ public void setCountry(String country) {
+ this.country = country;
+ }
+
+ /**
+ * @return the orgManagerUserId
+ */
+ public String getOrgManagerUserId() {
+ return orgManagerUserId;
+ }
+
+ /**
+ * @param orgManagerUserId the orgManagerUserId to set
+ */
+ public void setOrgManagerUserId(String orgManagerUserId) {
+ this.orgManagerUserId = orgManagerUserId;
+ }
+
+ /**
+ * @return the locationClli
+ */
+ public String getLocationClli() {
+ return locationClli;
+ }
+
+ /**
+ * @param locationClli the locationClli to set
+ */
+ public void setLocationClli(String locationClli) {
+ this.locationClli = locationClli;
+ }
+
+ /**
+ * @return the businessCountryCode
+ */
+ public String getBusinessCountryCode() {
+ return businessCountryCode;
+ }
+
+ /**
+ * @param businessCountryCode the businessCountryCode to set
+ */
+ public void setBusinessCountryCode(String businessCountryCode) {
+ this.businessCountryCode = businessCountryCode;
+ }
+
+ /**
+ * @return the businessCountryName
+ */
+ public String getBusinessCountryName() {
+ return businessCountryName;
+ }
+
+ /**
+ * @param businessCountryName the businessCountryName to set
+ */
+ public void setBusinessCountryName(String businessCountryName) {
+ this.businessCountryName = businessCountryName;
+ }
+
+ /**
+ * @return the businessUnit
+ */
+ public String getBusinessUnit() {
+ return businessUnit;
+ }
+
+ /**
+ * @param businessUnit the businessUnit to set
+ */
+ public void setBusinessUnit(String businessUnit) {
+ this.businessUnit = businessUnit;
+ }
+
+ /**
+ * @return the businessUnitName
+ */
+ public String getBusinessUnitName() {
+ return businessUnitName;
+ }
+
+ /**
+ * @param businessUnitName the businessUnitName to set
+ */
+ public void setBusinessUnitName(String businessUnitName) {
+ this.businessUnitName = businessUnitName;
+ }
+
+ /**
+ * @return the department
+ */
+ public String getDepartment() {
+ return department;
+ }
+
+ /**
+ * @param department the department to set
+ */
+ public void setDepartment(String department) {
+ this.department = department;
+ }
+
+ /**
+ * @return the departmentName
+ */
+ public String getDepartmentName() {
+ return departmentName;
+ }
+
+ /**
+ * @param departmentName the departmentName to set
+ */
+ public void setDepartmentName(String departmentName) {
+ this.departmentName = departmentName;
+ }
+
+ /**
+ * @return the companyCode
+ */
+ public String getCompanyCode() {
+ return companyCode;
+ }
+
+ /**
+ * @param companyCode the companyCode to set
+ */
+ public void setCompanyCode(String companyCode) {
+ this.companyCode = companyCode;
+ }
+
+ /**
+ * @return the company
+ */
+ public String getCompany() {
+ return company;
+ }
+
+ /**
+ * @param company the company to set
+ */
+ public void setCompany(String company) {
+ this.company = company;
+ }
+
+ /**
+ * @return the zipCodeSuffix
+ */
+ public String getZipCodeSuffix() {
+ return zipCodeSuffix;
+ }
+
+ /**
+ * @param zipCodeSuffix the zipCodeSuffix to set
+ */
+ public void setZipCodeSuffix(String zipCodeSuffix) {
+ this.zipCodeSuffix = zipCodeSuffix;
+ }
+
+ /**
+ * @return the jobTitle
+ */
+ public String getJobTitle() {
+ return jobTitle;
+ }
+
+ /**
+ * @param jobTitle the jobTitle to set
+ */
+ public void setJobTitle(String jobTitle) {
+ this.jobTitle = jobTitle;
+ }
+
+ /**
+ * @return the commandChain
+ */
+ public String getCommandChain() {
+ return commandChain;
+ }
+
+ /**
+ * @param commandChain the commandChain to set
+ */
+ public void setCommandChain(String commandChain) {
+ this.commandChain = commandChain;
+ }
+
+ /**
+ * @return the siloStatus
+ */
+ public String getSiloStatus() {
+ return siloStatus;
+ }
+
+ /**
+ * @param siloStatus the siloStatus to set
+ */
+ public void setSiloStatus(String siloStatus) {
+ this.siloStatus = siloStatus;
+ }
+
+ /**
+ * @return the costCenter
+ */
+ public String getCostCenter() {
+ return costCenter;
+ }
+
+ /**
+ * @param costCenter the costCenter to set
+ */
+ public void setCostCenter(String costCenter) {
+ this.costCenter = costCenter;
+ }
+
+ /**
+ * @return the financialLocCode
+ */
+ public String getFinancialLocCode() {
+ return financialLocCode;
+ }
+
+ /**
+ * @param financialLocCode the financialLocCode to set
+ */
+ public void setFinancialLocCode(String financialLocCode) {
+ this.financialLocCode = financialLocCode;
+ }
+
+ /**
+ * @return the loginId
+ */
+ public String getLoginId() {
+ return loginId;
+ }
+
+ /**
+ * @param loginId the loginId to set
+ */
+ public void setLoginId(String loginId) {
+ this.loginId = loginId;
+ }
+
+ /**
+ * @return the loginPwd
+ */
+ public String getLoginPwd() {
+ return loginPwd;
+ }
+
+ /**
+ * @param loginPwd the loginPwd to set
+ */
+ public void setLoginPwd(String loginPwd) {
+ this.loginPwd = loginPwd;
+ }
+
+ /**
+ * @return the lastLoginDate
+ */
+ public Date getLastLoginDate() {
+ return lastLoginDate;
+ }
+
+ /**
+ * @param lastLoginDate the lastLoginDate to set
+ */
+ public void setLastLoginDate(Date lastLoginDate) {
+ this.lastLoginDate = lastLoginDate;
+ }
+
+ /**
+ * @return the active
+ */
+ public boolean isActive() {
+ return active;
+ }
+
+ /**
+ * @param active the active to set
+ */
+ public void setActive(boolean active) {
+ this.active = active;
+ }
+
+ /**
+ * @return the internal
+ */
+ public boolean isInternal() {
+ return internal;
+ }
+
+ /**
+ * @param internal the internal to set
+ */
+ public void setInternal(boolean internal) {
+ this.internal = internal;
+ }
+
+ /**
+ * @return the selectedProfileId
+ */
+ public Long getSelectedProfileId() {
+ return selectedProfileId;
+ }
+
+ /**
+ * @param selectedProfileId the selectedProfileId to set
+ */
+ public void setSelectedProfileId(Long selectedProfileId) {
+ this.selectedProfileId = selectedProfileId;
+ }
+
+ /**
+ * @return the timeZoneId
+ */
+ public Long getTimeZoneId() {
+ return timeZoneId;
+ }
+
+ /**
+ * @param timeZoneId the timeZoneId to set
+ */
+ public void setTimeZoneId(Long timeZoneId) {
+ this.timeZoneId = timeZoneId;
+ }
+
+ /**
+ * @return the online
+ */
+ public boolean isOnline() {
+ return online;
+ }
+
+ /**
+ * @param online the online to set
+ */
+ public void setOnline(boolean online) {
+ this.online = online;
+ }
+
+ /**
+ * @return the chatId
+ */
+ public String getChatId() {
+ return chatId;
+ }
+
+ /**
+ * @param chatId the chatId to set
+ */
+ public void setChatId(String chatId) {
+ this.chatId = chatId;
+ }
+
+ /**
+ * @return the userApps
+ */
+ public Set<CentralV2UserApp> getUserApps() {
+ return userApps;
+ }
+
+ /**
+ * @param userApps the userApps to set
+ */
+ public void setUserApps(Set<CentralV2UserApp> userApps) {
+ this.userApps = userApps;
+ }
+
+ /**
+ * @return the pseudoRoles
+ */
+ public Set<CentralV2Role> getPseudoRoles() {
+ return pseudoRoles;
+ }
+
+ /**
+ * @param pseudoRoles the pseudoRoles to set
+ */
+ public void setPseudoRoles(Set<CentralV2Role> pseudoRoles) {
+ this.pseudoRoles = pseudoRoles;
+ }
+
+ @Override
+ public int hashCode() {
+ final int prime = 31;
+ int result = 1;
+ result = prime * result + (active ? 1231 : 1237);
+ result = prime * result + ((address1 == null) ? 0 : address1.hashCode());
+ result = prime * result + ((address2 == null) ? 0 : address2.hashCode());
+ result = prime * result + ((addressId == null) ? 0 : addressId.hashCode());
+ result = prime * result + ((alertMethodCd == null) ? 0 : alertMethodCd.hashCode());
+ result = prime * result + ((businessCountryCode == null) ? 0 : businessCountryCode.hashCode());
+ result = prime * result + ((businessCountryName == null) ? 0 : businessCountryName.hashCode());
+ result = prime * result + ((businessUnit == null) ? 0 : businessUnit.hashCode());
+ result = prime * result + ((businessUnitName == null) ? 0 : businessUnitName.hashCode());
+ result = prime * result + ((cellular == null) ? 0 : cellular.hashCode());
+ result = prime * result + ((chatId == null) ? 0 : chatId.hashCode());
+ result = prime * result + ((city == null) ? 0 : city.hashCode());
+ result = prime * result + ((commandChain == null) ? 0 : commandChain.hashCode());
+ result = prime * result + ((company == null) ? 0 : company.hashCode());
+ result = prime * result + ((companyCode == null) ? 0 : companyCode.hashCode());
+ result = prime * result + ((costCenter == null) ? 0 : costCenter.hashCode());
+ result = prime * result + ((country == null) ? 0 : country.hashCode());
+ result = prime * result + ((created == null) ? 0 : created.hashCode());
+ result = prime * result + ((createdId == null) ? 0 : createdId.hashCode());
+ result = prime * result + ((department == null) ? 0 : department.hashCode());
+ result = prime * result + ((departmentName == null) ? 0 : departmentName.hashCode());
+ result = prime * result + ((email == null) ? 0 : email.hashCode());
+ result = prime * result + ((fax == null) ? 0 : fax.hashCode());
+ result = prime * result + ((financialLocCode == null) ? 0 : financialLocCode.hashCode());
+ result = prime * result + ((firstName == null) ? 0 : firstName.hashCode());
+ result = prime * result + ((hrid == null) ? 0 : hrid.hashCode());
+ result = prime * result + ((id == null) ? 0 : id.hashCode());
+ result = prime * result + (internal ? 1231 : 1237);
+ result = prime * result + ((jobTitle == null) ? 0 : jobTitle.hashCode());
+ result = prime * result + ((lastLoginDate == null) ? 0 : lastLoginDate.hashCode());
+ result = prime * result + ((lastName == null) ? 0 : lastName.hashCode());
+ result = prime * result + ((locationClli == null) ? 0 : locationClli.hashCode());
+ result = prime * result + ((loginId == null) ? 0 : loginId.hashCode());
+ result = prime * result + ((loginPwd == null) ? 0 : loginPwd.hashCode());
+ result = prime * result + ((managerId == null) ? 0 : managerId.hashCode());
+ result = prime * result + ((middleInitial == null) ? 0 : middleInitial.hashCode());
+ result = prime * result + ((modified == null) ? 0 : modified.hashCode());
+ result = prime * result + ((modifiedId == null) ? 0 : modifiedId.hashCode());
+ result = prime * result + (online ? 1231 : 1237);
+ result = prime * result + ((orgCode == null) ? 0 : orgCode.hashCode());
+ result = prime * result + ((orgId == null) ? 0 : orgId.hashCode());
+ result = prime * result + ((orgManagerUserId == null) ? 0 : orgManagerUserId.hashCode());
+ result = prime * result + ((orgUserId == null) ? 0 : orgUserId.hashCode());
+ result = prime * result + ((phone == null) ? 0 : phone.hashCode());
+ result = prime * result + ((pseudoRoles == null) ? 0 : pseudoRoles.hashCode());
+ result = prime * result + ((rowNum == null) ? 0 : rowNum.hashCode());
+ result = prime * result + ((selectedProfileId == null) ? 0 : selectedProfileId.hashCode());
+ result = prime * result + ((siloStatus == null) ? 0 : siloStatus.hashCode());
+ result = prime * result + ((state == null) ? 0 : state.hashCode());
+ result = prime * result + ((timeZoneId == null) ? 0 : timeZoneId.hashCode());
+ result = prime * result + ((userApps == null) ? 0 : userApps.hashCode());
+ result = prime * result + ((zipCode == null) ? 0 : zipCode.hashCode());
+ result = prime * result + ((zipCodeSuffix == null) ? 0 : zipCodeSuffix.hashCode());
+ return result;
+ }
+
+ @Override
+ public boolean equals(Object obj) {
+ if (this == obj)
+ return true;
+ if (obj == null)
+ return false;
+ if (getClass() != obj.getClass())
+ return false;
+ CentralV2User other = (CentralV2User) obj;
+ if (active != other.active)
+ return false;
+ if (address1 == null) {
+ if (other.address1 != null)
+ return false;
+ } else if (!address1.equals(other.address1))
+ return false;
+ if (address2 == null) {
+ if (other.address2 != null)
+ return false;
+ } else if (!address2.equals(other.address2))
+ return false;
+ if (addressId == null) {
+ if (other.addressId != null)
+ return false;
+ } else if (!addressId.equals(other.addressId))
+ return false;
+ if (alertMethodCd == null) {
+ if (other.alertMethodCd != null)
+ return false;
+ } else if (!alertMethodCd.equals(other.alertMethodCd))
+ return false;
+ if (businessCountryCode == null) {
+ if (other.businessCountryCode != null)
+ return false;
+ } else if (!businessCountryCode.equals(other.businessCountryCode))
+ return false;
+ if (businessCountryName == null) {
+ if (other.businessCountryName != null)
+ return false;
+ } else if (!businessCountryName.equals(other.businessCountryName))
+ return false;
+ if (businessUnit == null) {
+ if (other.businessUnit != null)
+ return false;
+ } else if (!businessUnit.equals(other.businessUnit))
+ return false;
+ if (businessUnitName == null) {
+ if (other.businessUnitName != null)
+ return false;
+ } else if (!businessUnitName.equals(other.businessUnitName))
+ return false;
+ if (cellular == null) {
+ if (other.cellular != null)
+ return false;
+ } else if (!cellular.equals(other.cellular))
+ return false;
+ if (chatId == null) {
+ if (other.chatId != null)
+ return false;
+ } else if (!chatId.equals(other.chatId))
+ return false;
+ if (city == null) {
+ if (other.city != null)
+ return false;
+ } else if (!city.equals(other.city))
+ return false;
+ if (commandChain == null) {
+ if (other.commandChain != null)
+ return false;
+ } else if (!commandChain.equals(other.commandChain))
+ return false;
+ if (company == null) {
+ if (other.company != null)
+ return false;
+ } else if (!company.equals(other.company))
+ return false;
+ if (companyCode == null) {
+ if (other.companyCode != null)
+ return false;
+ } else if (!companyCode.equals(other.companyCode))
+ return false;
+ if (costCenter == null) {
+ if (other.costCenter != null)
+ return false;
+ } else if (!costCenter.equals(other.costCenter))
+ return false;
+ if (country == null) {
+ if (other.country != null)
+ return false;
+ } else if (!country.equals(other.country))
+ return false;
+ if (created == null) {
+ if (other.created != null)
+ return false;
+ } else if (!created.equals(other.created))
+ return false;
+ if (createdId == null) {
+ if (other.createdId != null)
+ return false;
+ } else if (!createdId.equals(other.createdId))
+ return false;
+ if (department == null) {
+ if (other.department != null)
+ return false;
+ } else if (!department.equals(other.department))
+ return false;
+ if (departmentName == null) {
+ if (other.departmentName != null)
+ return false;
+ } else if (!departmentName.equals(other.departmentName))
+ return false;
+ if (email == null) {
+ if (other.email != null)
+ return false;
+ } else if (!email.equals(other.email))
+ return false;
+ if (fax == null) {
+ if (other.fax != null)
+ return false;
+ } else if (!fax.equals(other.fax))
+ return false;
+ if (financialLocCode == null) {
+ if (other.financialLocCode != null)
+ return false;
+ } else if (!financialLocCode.equals(other.financialLocCode))
+ return false;
+ if (firstName == null) {
+ if (other.firstName != null)
+ return false;
+ } else if (!firstName.equals(other.firstName))
+ return false;
+ if (hrid == null) {
+ if (other.hrid != null)
+ return false;
+ } else if (!hrid.equals(other.hrid))
+ return false;
+ if (id == null) {
+ if (other.id != null)
+ return false;
+ } else if (!id.equals(other.id))
+ return false;
+ if (internal != other.internal)
+ return false;
+ if (jobTitle == null) {
+ if (other.jobTitle != null)
+ return false;
+ } else if (!jobTitle.equals(other.jobTitle))
+ return false;
+ if (lastLoginDate == null) {
+ if (other.lastLoginDate != null)
+ return false;
+ } else if (!lastLoginDate.equals(other.lastLoginDate))
+ return false;
+ if (lastName == null) {
+ if (other.lastName != null)
+ return false;
+ } else if (!lastName.equals(other.lastName))
+ return false;
+ if (locationClli == null) {
+ if (other.locationClli != null)
+ return false;
+ } else if (!locationClli.equals(other.locationClli))
+ return false;
+ if (loginId == null) {
+ if (other.loginId != null)
+ return false;
+ } else if (!loginId.equals(other.loginId))
+ return false;
+ if (loginPwd == null) {
+ if (other.loginPwd != null)
+ return false;
+ } else if (!loginPwd.equals(other.loginPwd))
+ return false;
+ if (managerId == null) {
+ if (other.managerId != null)
+ return false;
+ } else if (!managerId.equals(other.managerId))
+ return false;
+ if (middleInitial == null) {
+ if (other.middleInitial != null)
+ return false;
+ } else if (!middleInitial.equals(other.middleInitial))
+ return false;
+ if (modified == null) {
+ if (other.modified != null)
+ return false;
+ } else if (!modified.equals(other.modified))
+ return false;
+ if (modifiedId == null) {
+ if (other.modifiedId != null)
+ return false;
+ } else if (!modifiedId.equals(other.modifiedId))
+ return false;
+ if (online != other.online)
+ return false;
+ if (orgCode == null) {
+ if (other.orgCode != null)
+ return false;
+ } else if (!orgCode.equals(other.orgCode))
+ return false;
+ if (orgId == null) {
+ if (other.orgId != null)
+ return false;
+ } else if (!orgId.equals(other.orgId))
+ return false;
+ if (orgManagerUserId == null) {
+ if (other.orgManagerUserId != null)
+ return false;
+ } else if (!orgManagerUserId.equals(other.orgManagerUserId))
+ return false;
+ if (orgUserId == null) {
+ if (other.orgUserId != null)
+ return false;
+ } else if (!orgUserId.equals(other.orgUserId))
+ return false;
+ if (phone == null) {
+ if (other.phone != null)
+ return false;
+ } else if (!phone.equals(other.phone))
+ return false;
+ if (pseudoRoles == null) {
+ if (other.pseudoRoles != null)
+ return false;
+ } else if (!pseudoRoles.equals(other.pseudoRoles))
+ return false;
+ if (rowNum == null) {
+ if (other.rowNum != null)
+ return false;
+ } else if (!rowNum.equals(other.rowNum))
+ return false;
+ if (selectedProfileId == null) {
+ if (other.selectedProfileId != null)
+ return false;
+ } else if (!selectedProfileId.equals(other.selectedProfileId))
+ return false;
+ if (siloStatus == null) {
+ if (other.siloStatus != null)
+ return false;
+ } else if (!siloStatus.equals(other.siloStatus))
+ return false;
+ if (state == null) {
+ if (other.state != null)
+ return false;
+ } else if (!state.equals(other.state))
+ return false;
+ if (timeZoneId == null) {
+ if (other.timeZoneId != null)
+ return false;
+ } else if (!timeZoneId.equals(other.timeZoneId))
+ return false;
+ if (userApps == null) {
+ if (other.userApps != null)
+ return false;
+ } else if (!userApps.equals(other.userApps))
+ return false;
+ if (zipCode == null) {
+ if (other.zipCode != null)
+ return false;
+ } else if (!zipCode.equals(other.zipCode))
+ return false;
+ if (zipCodeSuffix == null) {
+ if (other.zipCodeSuffix != null)
+ return false;
+ } else if (!zipCodeSuffix.equals(other.zipCodeSuffix))
+ return false;
+ return true;
+ }
+
+
+
+}
diff --git a/ecomp-portal-BE-common/src/main/java/org/onap/portalapp/portal/transport/CentralV2UserApp.java b/ecomp-portal-BE-common/src/main/java/org/onap/portalapp/portal/transport/CentralV2UserApp.java
new file mode 100644
index 00000000..a8718574
--- /dev/null
+++ b/ecomp-portal-BE-common/src/main/java/org/onap/portalapp/portal/transport/CentralV2UserApp.java
@@ -0,0 +1,113 @@
+/*-
+ * ============LICENSE_START==========================================
+ * ONAP Portal
+ * ===================================================================
+ * Copyright (C) 2017 AT&T Intellectual Property. All rights reserved.
+ * ===================================================================
+ *
+ * Unless otherwise specified, all software contained herein is licensed
+ * under the Apache License, Version 2.0 (the "License");
+ * you may not use this software 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.
+ *
+ * Unless otherwise specified, all documentation contained herein is licensed
+ * under the Creative Commons License, Attribution 4.0 Intl. (the "License");
+ * you may not use this documentation except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * https://creativecommons.org/licenses/by/4.0/
+ *
+ * Unless required by applicable law or agreed to in writing, documentation
+ * 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.
+ *
+ * ============LICENSE_END============================================
+ *
+ * ECOMP is a trademark and service mark of AT&T Intellectual Property.
+ */
+package org.onap.portalapp.portal.transport;
+
+import java.io.Serializable;
+
+@SuppressWarnings("rawtypes")
+public class CentralV2UserApp implements Serializable, Comparable{
+
+ /**
+ *
+ */
+ private static final long serialVersionUID = 4954830080839125389L;
+ private Long userId;
+ private CentralApp app;
+ private CentralV2Role role;
+ private Short priority;
+
+
+
+ public Long getUserId() {
+ return userId;
+ }
+
+
+
+ public void setUserId(Long userId) {
+ this.userId = userId;
+ }
+
+
+
+ public CentralApp getApp() {
+ return app;
+ }
+
+
+
+ public void setApp(CentralApp app) {
+ this.app = app;
+ }
+
+
+
+ public CentralV2Role getRole() {
+ return role;
+ }
+
+
+
+ public void setRole(CentralV2Role role) {
+ this.role = role;
+ }
+
+
+
+ public Short getPriority() {
+ return priority;
+ }
+
+
+
+ public void setPriority(Short priority) {
+ this.priority = priority;
+ }
+
+
+
+ public int compareTo(Object other){
+ CentralV2UserApp castOther = (CentralV2UserApp) other;
+
+ Long c1 = (this.getUserId()==null ? 0 : this.getUserId()) + (this.priority==null ? 0 : this.priority);
+ Long c2 = (castOther.getUserId()==null ? 0 : castOther.getUserId()) + (castOther.getApp()==null||castOther.getApp().getId()==null ? 0 : castOther.getApp().getId()) + (castOther.priority==null ? 0 : castOther.priority);
+
+ return c1.compareTo(c2);
+ }
+
+}
diff --git a/ecomp-portal-BE-common/src/main/java/org/onap/portalapp/portal/transport/CommonWidget.java b/ecomp-portal-BE-common/src/main/java/org/onap/portalapp/portal/transport/CommonWidget.java
new file mode 100644
index 00000000..18110e1b
--- /dev/null
+++ b/ecomp-portal-BE-common/src/main/java/org/onap/portalapp/portal/transport/CommonWidget.java
@@ -0,0 +1,156 @@
+/*-
+ * ============LICENSE_START==========================================
+ * ONAP Portal
+ * ===================================================================
+ * Copyright (C) 2017 AT&T Intellectual Property. All rights reserved.
+ * ===================================================================
+ *
+ * Unless otherwise specified, all software contained herein is licensed
+ * under the Apache License, Version 2.0 (the "License");
+ * you may not use this software 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.
+ *
+ * Unless otherwise specified, all documentation contained herein is licensed
+ * under the Creative Commons License, Attribution 4.0 Intl. (the "License");
+ * you may not use this documentation except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * https://creativecommons.org/licenses/by/4.0/
+ *
+ * Unless required by applicable law or agreed to in writing, documentation
+ * 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.
+ *
+ * ============LICENSE_END============================================
+ *
+ * ECOMP is a trademark and service mark of AT&T Intellectual Property.
+ */
+package org.onap.portalapp.portal.transport;
+
+import javax.persistence.Column;
+import javax.persistence.Entity;
+import javax.persistence.GeneratedValue;
+import javax.persistence.GenerationType;
+import javax.persistence.Id;
+import javax.persistence.Table;
+
+import org.onap.portalsdk.core.domain.support.DomainVo;
+import com.fasterxml.jackson.annotation.JsonInclude;
+
+/**
+ * This is to handle portal admins
+ */
+@Entity
+@Table(name="fn_common_widget_data")
+@JsonInclude(JsonInclude.Include.NON_NULL)
+public class CommonWidget extends DomainVo{
+
+ private static final long serialVersionUID = 7897021982887364557L;
+
+ @Id
+ @GeneratedValue(strategy=GenerationType.AUTO)
+ @Column(name = "id")
+ private Long id;
+
+ @Column(name = "category")
+ public String category;
+
+ @Column(name = "href")
+ public String href;
+
+ @Column(name = "title")
+ public String title;
+
+ @Column(name = "content")
+ public String content;
+
+ @Column(name = "event_date")
+ public String eventDate;
+
+ @Column(name = "sort_order")
+ public Integer sortOrder;
+
+
+ public CommonWidget(){
+
+ }
+
+ public CommonWidget(String category, String href, String title, String content, String eventDate, Integer sortOrder){
+ this.category = category;
+ this.href = href;
+ this.title = title;
+ this.content = content;
+ this.eventDate = eventDate;
+ this.sortOrder = sortOrder;
+ }
+
+ public String getCategory() {
+ return category;
+ }
+
+ public void setCategory(String category) {
+ this.category = category;
+ }
+
+ public String getHref() {
+ return href;
+ }
+
+ public void setHref(String href) {
+ this.href = href;
+ }
+
+ public String getTitle() {
+ return title;
+ }
+
+ public void setTitle(String title) {
+ this.title = title;
+ }
+
+ public Integer getSortOrder() {
+ return sortOrder;
+ }
+
+ public void setSortOrder(Integer sortOrder) {
+ this.sortOrder = sortOrder;
+ }
+
+ public static long getSerialversionuid() {
+ return serialVersionUID;
+ }
+
+ public Long getId() {
+ return id;
+ }
+
+ public void setId(Long id) {
+ this.id = id;
+ }
+
+ public String getContent() {
+ return content;
+ }
+
+ public void setContent(String content) {
+ this.content = content;
+ }
+
+ public String getEventDate() {
+ return eventDate;
+ }
+
+ public void setEventDate(String eventDate) {
+ this.eventDate = eventDate;
+ }
+}
diff --git a/ecomp-portal-BE-common/src/main/java/org/onap/portalapp/portal/transport/CommonWidgetMeta.java b/ecomp-portal-BE-common/src/main/java/org/onap/portalapp/portal/transport/CommonWidgetMeta.java
new file mode 100644
index 00000000..173718ae
--- /dev/null
+++ b/ecomp-portal-BE-common/src/main/java/org/onap/portalapp/portal/transport/CommonWidgetMeta.java
@@ -0,0 +1,68 @@
+/*-
+ * ============LICENSE_START==========================================
+ * ONAP Portal
+ * ===================================================================
+ * Copyright (C) 2017 AT&T Intellectual Property. All rights reserved.
+ * ===================================================================
+ *
+ * Unless otherwise specified, all software contained herein is licensed
+ * under the Apache License, Version 2.0 (the "License");
+ * you may not use this software 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.
+ *
+ * Unless otherwise specified, all documentation contained herein is licensed
+ * under the Creative Commons License, Attribution 4.0 Intl. (the "License");
+ * you may not use this documentation except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * https://creativecommons.org/licenses/by/4.0/
+ *
+ * Unless required by applicable law or agreed to in writing, documentation
+ * 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.
+ *
+ * ============LICENSE_END============================================
+ *
+ * ECOMP is a trademark and service mark of AT&T Intellectual Property.
+ */
+package org.onap.portalapp.portal.transport;
+
+import java.util.List;
+
+public class CommonWidgetMeta {
+
+ private String category;
+ private List<CommonWidget> items;
+
+ public CommonWidgetMeta(){
+
+ }
+
+ public CommonWidgetMeta(String category, List<CommonWidget> items){
+ this.category = category;
+ this.items = items;
+ }
+
+ public String getCategory() {
+ return category;
+ }
+ public void setCategory(String category) {
+ this.category = category;
+ }
+ public List<CommonWidget> getItems() {
+ return items;
+ }
+ public void setItems(List<CommonWidget> items) {
+ this.items = items;
+ }
+}
diff --git a/ecomp-portal-BE-common/src/main/java/org/onap/portalapp/portal/transport/EPAppsManualPreference.java b/ecomp-portal-BE-common/src/main/java/org/onap/portalapp/portal/transport/EPAppsManualPreference.java
new file mode 100644
index 00000000..e5472061
--- /dev/null
+++ b/ecomp-portal-BE-common/src/main/java/org/onap/portalapp/portal/transport/EPAppsManualPreference.java
@@ -0,0 +1,132 @@
+/*-
+ * ============LICENSE_START==========================================
+ * ONAP Portal
+ * ===================================================================
+ * Copyright (C) 2017 AT&T Intellectual Property. All rights reserved.
+ * ===================================================================
+ *
+ * Unless otherwise specified, all software contained herein is licensed
+ * under the Apache License, Version 2.0 (the "License");
+ * you may not use this software 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.
+ *
+ * Unless otherwise specified, all documentation contained herein is licensed
+ * under the Creative Commons License, Attribution 4.0 Intl. (the "License");
+ * you may not use this documentation except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * https://creativecommons.org/licenses/by/4.0/
+ *
+ * Unless required by applicable law or agreed to in writing, documentation
+ * 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.
+ *
+ * ============LICENSE_END============================================
+ *
+ * ECOMP is a trademark and service mark of AT&T Intellectual Property.
+ */
+package org.onap.portalapp.portal.transport;
+
+public class EPAppsManualPreference {
+
+ private Long appid;
+ private int col;
+ private String headerText;
+ private String imageLink;
+ private int order;
+ private boolean restrictedApp;
+ private int row;
+ private int sizeX;
+ private int sizeY;
+ private String subHeaderText;
+ private String url;
+ private boolean addRemoveApps;
+
+
+ public boolean isAddRemoveApps() {
+ return addRemoveApps;
+ }
+ public void setAddRemoveApps(boolean addRemoveApps) {
+ this.addRemoveApps = addRemoveApps;
+ }
+ public Long getAppid() {
+ return appid;
+ }
+ public void setAppid(Long appid) {
+ this.appid = appid;
+ }
+ public int getCol() {
+ return col;
+ }
+ public void setCol(int col) {
+ this.col = col;
+ }
+ public String getHeaderText() {
+ return headerText;
+ }
+ public void setHeaderText(String headerText) {
+ this.headerText = headerText;
+ }
+ public String getImageLink() {
+ return imageLink;
+ }
+ public void setImageLink(String imageLink) {
+ this.imageLink = imageLink;
+ }
+ public int getOrder() {
+ return order;
+ }
+ public void setOrder(int order) {
+ this.order = order;
+ }
+ public boolean isRestrictedApp() {
+ return restrictedApp;
+ }
+ public void setRestrictedApp(boolean restrictedApp) {
+ this.restrictedApp = restrictedApp;
+ }
+ public int getRow() {
+ return row;
+ }
+ public void setRow(int row) {
+ this.row = row;
+ }
+ public int getSizeX() {
+ return sizeX;
+ }
+ public void setSizeX(int sizeX) {
+ this.sizeX = sizeX;
+ }
+ public int getSizeY() {
+ return sizeY;
+ }
+ public void setSizeY(int sizeY) {
+ this.sizeY = sizeY;
+ }
+ public String getSubHeaderText() {
+ return subHeaderText;
+ }
+ public void setSubHeaderText(String subHeaderText) {
+ this.subHeaderText = subHeaderText;
+ }
+ public String getUrl() {
+ return url;
+ }
+ public void setUrl(String url) {
+ this.url = url;
+ }
+
+ public boolean isValid(){
+ return appid != null;
+ }
+}
diff --git a/ecomp-portal-BE-common/src/main/java/org/onap/portalapp/portal/transport/EPAppsSortPreference.java b/ecomp-portal-BE-common/src/main/java/org/onap/portalapp/portal/transport/EPAppsSortPreference.java
new file mode 100644
index 00000000..367d1d33
--- /dev/null
+++ b/ecomp-portal-BE-common/src/main/java/org/onap/portalapp/portal/transport/EPAppsSortPreference.java
@@ -0,0 +1,65 @@
+/*-
+ * ============LICENSE_START==========================================
+ * ONAP Portal
+ * ===================================================================
+ * Copyright (C) 2017 AT&T Intellectual Property. All rights reserved.
+ * ===================================================================
+ *
+ * Unless otherwise specified, all software contained herein is licensed
+ * under the Apache License, Version 2.0 (the "License");
+ * you may not use this software 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.
+ *
+ * Unless otherwise specified, all documentation contained herein is licensed
+ * under the Creative Commons License, Attribution 4.0 Intl. (the "License");
+ * you may not use this documentation except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * https://creativecommons.org/licenses/by/4.0/
+ *
+ * Unless required by applicable law or agreed to in writing, documentation
+ * 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.
+ *
+ * ============LICENSE_END============================================
+ *
+ * ECOMP is a trademark and service mark of AT&T Intellectual Property.
+ */
+package org.onap.portalapp.portal.transport;
+
+public class EPAppsSortPreference {
+
+ private int index;
+ private String value;
+ private String title;
+
+ public int getIndex() {
+ return index;
+ }
+ public void setIndex(int index) {
+ this.index = index;
+ }
+ public String getValue() {
+ return value;
+ }
+ public void setValue(String value) {
+ this.value = value;
+ }
+ public String getTitle() {
+ return title;
+ }
+ public void setTitle(String title) {
+ this.title = title;
+ }
+
+}
diff --git a/ecomp-portal-BE-common/src/main/java/org/onap/portalapp/portal/transport/EPDeleteAppsManualSortPref.java b/ecomp-portal-BE-common/src/main/java/org/onap/portalapp/portal/transport/EPDeleteAppsManualSortPref.java
new file mode 100644
index 00000000..12786416
--- /dev/null
+++ b/ecomp-portal-BE-common/src/main/java/org/onap/portalapp/portal/transport/EPDeleteAppsManualSortPref.java
@@ -0,0 +1,69 @@
+/*-
+ * ============LICENSE_START==========================================
+ * ONAP Portal
+ * ===================================================================
+ * Copyright (C) 2017 AT&T Intellectual Property. All rights reserved.
+ * ===================================================================
+ *
+ * Unless otherwise specified, all software contained herein is licensed
+ * under the Apache License, Version 2.0 (the "License");
+ * you may not use this software 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.
+ *
+ * Unless otherwise specified, all documentation contained herein is licensed
+ * under the Creative Commons License, Attribution 4.0 Intl. (the "License");
+ * you may not use this documentation except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * https://creativecommons.org/licenses/by/4.0/
+ *
+ * Unless required by applicable law or agreed to in writing, documentation
+ * 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.
+ *
+ * ============LICENSE_END============================================
+ *
+ * ECOMP is a trademark and service mark of AT&T Intellectual Property.
+ */
+package org.onap.portalapp.portal.transport;
+
+public class EPDeleteAppsManualSortPref {
+ private Long appId;
+ private boolean select;
+ private boolean pending;
+
+ public Long getAppId() {
+ return appId;
+ }
+
+ public void setAppId(Long appId) {
+ this.appId = appId;
+ }
+
+ public boolean isSelect() {
+ return select;
+ }
+
+ public void setSelect(boolean select) {
+ this.select = select;
+ }
+
+ public boolean isPending() {
+ return pending;
+ }
+
+ public void setPending(boolean pending) {
+ this.pending = pending;
+ }
+
+}
diff --git a/ecomp-portal-BE-common/src/main/java/org/onap/portalapp/portal/transport/EPUserAppCurrentRoles.java b/ecomp-portal-BE-common/src/main/java/org/onap/portalapp/portal/transport/EPUserAppCurrentRoles.java
new file mode 100644
index 00000000..ee88bd49
--- /dev/null
+++ b/ecomp-portal-BE-common/src/main/java/org/onap/portalapp/portal/transport/EPUserAppCurrentRoles.java
@@ -0,0 +1,135 @@
+/*-
+ * ============LICENSE_START==========================================
+ * ONAP Portal
+ * ===================================================================
+ * Copyright (C) 2017 AT&T Intellectual Property. All rights reserved.
+ * ===================================================================
+ *
+ * Unless otherwise specified, all software contained herein is licensed
+ * under the Apache License, Version 2.0 (the "License");
+ * you may not use this software 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.
+ *
+ * Unless otherwise specified, all documentation contained herein is licensed
+ * under the Creative Commons License, Attribution 4.0 Intl. (the "License");
+ * you may not use this documentation except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * https://creativecommons.org/licenses/by/4.0/
+ *
+ * Unless required by applicable law or agreed to in writing, documentation
+ * 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.
+ *
+ * ============LICENSE_END============================================
+ *
+ * ECOMP is a trademark and service mark of AT&T Intellectual Property.
+ */
+package org.onap.portalapp.portal.transport;
+
+import java.io.Serializable;
+
+import javax.persistence.Column;
+import javax.persistence.Entity;
+import javax.persistence.Id;
+
+import com.fasterxml.jackson.annotation.JsonInclude;
+
+@Entity
+@JsonInclude(JsonInclude.Include.NON_NULL)
+public class EPUserAppCurrentRoles implements Serializable{
+
+ private static final long serialVersionUID = -8145807875293949759L;
+
+ @Id
+ @Column(name="role_name")
+ private String roleName;
+ @Id
+ @Column(name="user_id")
+ private Long userId;
+ @Id
+ @Column(name="priority")
+ private String priority ;
+ @Id
+ @Column(name="role_id")
+ private Long roleId;
+ public String getRoleName() {
+ return roleName;
+ }
+ public void setRoleName(String roleName) {
+ this.roleName = roleName;
+ }
+ public Long getUserId() {
+ return userId;
+ }
+ public void setUserId(Long userId) {
+ this.userId = userId;
+ }
+ public String getPriority() {
+ return priority;
+ }
+ public void setPriority(String priority) {
+ this.priority = priority;
+ }
+ public Long getRoleId() {
+ return roleId;
+ }
+ public void setRoleId(Long roleId) {
+ this.roleId = roleId;
+ }
+ @Override
+ public int hashCode() {
+ final int prime = 31;
+ int result = 1;
+ result = prime * result + ((priority == null) ? 0 : priority.hashCode());
+ result = prime * result + ((roleId == null) ? 0 : roleId.hashCode());
+ result = prime * result + ((roleName == null) ? 0 : roleName.hashCode());
+ result = prime * result + ((userId == null) ? 0 : userId.hashCode());
+ return result;
+ }
+ @Override
+ public boolean equals(Object obj) {
+ if (this == obj)
+ return true;
+ if (obj == null)
+ return false;
+ if (getClass() != obj.getClass())
+ return false;
+ EPUserAppCurrentRoles other = (EPUserAppCurrentRoles) obj;
+ if (priority == null) {
+ if (other.priority != null)
+ return false;
+ } else if (!priority.equals(other.priority))
+ return false;
+ if (roleId == null) {
+ if (other.roleId != null)
+ return false;
+ } else if (!roleId.equals(other.roleId))
+ return false;
+ if (roleName == null) {
+ if (other.roleName != null)
+ return false;
+ } else if (!roleName.equals(other.roleName))
+ return false;
+ if (userId == null) {
+ if (other.userId != null)
+ return false;
+ } else if (!userId.equals(other.userId))
+ return false;
+ return true;
+ }
+
+
+
+}
+ \ No newline at end of file
diff --git a/ecomp-portal-BE-common/src/main/java/org/onap/portalapp/portal/transport/EPWidgetsSortPreference.java b/ecomp-portal-BE-common/src/main/java/org/onap/portalapp/portal/transport/EPWidgetsSortPreference.java
new file mode 100644
index 00000000..072abe78
--- /dev/null
+++ b/ecomp-portal-BE-common/src/main/java/org/onap/portalapp/portal/transport/EPWidgetsSortPreference.java
@@ -0,0 +1,110 @@
+/*-
+ * ============LICENSE_START==========================================
+ * ONAP Portal
+ * ===================================================================
+ * Copyright (C) 2017 AT&T Intellectual Property. All rights reserved.
+ * ===================================================================
+ *
+ * Unless otherwise specified, all software contained herein is licensed
+ * under the Apache License, Version 2.0 (the "License");
+ * you may not use this software 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.
+ *
+ * Unless otherwise specified, all documentation contained herein is licensed
+ * under the Creative Commons License, Attribution 4.0 Intl. (the "License");
+ * you may not use this documentation except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * https://creativecommons.org/licenses/by/4.0/
+ *
+ * Unless required by applicable law or agreed to in writing, documentation
+ * 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.
+ *
+ * ============LICENSE_END============================================
+ *
+ * ECOMP is a trademark and service mark of AT&T Intellectual Property.
+ */
+package org.onap.portalapp.portal.transport;
+
+import java.util.List;
+
+public class EPWidgetsSortPreference {
+
+ private int SizeX;
+ private int SizeY;
+ private String headerText;
+ private String url;
+ private Long widgetid;
+ private List<Object> attrb;
+ private String widgetIdentifier;
+ private int row;
+ private int col;
+
+ public String getWidgetIdentifier() {
+ return widgetIdentifier;
+ }
+ public List<Object> getAttrb() {
+ return attrb;
+ }
+ public void setAttrb(List<Object> attrb) {
+ this.attrb = attrb;
+ }
+ public void setWidgetIdentifier(String widgetIdentifier) {
+ this.widgetIdentifier = widgetIdentifier;
+ }
+ public int getSizeX() {
+ return SizeX;
+ }
+ public void setSizeX(int sizeX) {
+ SizeX = sizeX;
+ }
+ public int getSizeY() {
+ return SizeY;
+ }
+ public void setSizeY(int sizeY) {
+ SizeY = sizeY;
+ }
+ public String getHeaderText() {
+ return headerText;
+ }
+ public void setHeaderText(String headerText) {
+ this.headerText = headerText;
+ }
+ public String getUrl() {
+ return url;
+ }
+ public void setUrl(String url) {
+ this.url = url;
+ }
+ public Long getWidgetid() {
+ return widgetid;
+ }
+ public void setWidgetid(Long widgetid) {
+ this.widgetid = widgetid;
+ }
+ public int getRow() {
+ return row;
+ }
+ public void setRow(int row) {
+ this.row = row;
+ }
+ public int getCol() {
+ return col;
+ }
+ public void setCol(int col) {
+ this.col = col;
+ }
+
+
+}
diff --git a/ecomp-portal-BE-common/src/main/java/org/onap/portalapp/portal/transport/EcompUserAppRoles.java b/ecomp-portal-BE-common/src/main/java/org/onap/portalapp/portal/transport/EcompUserAppRoles.java
new file mode 100644
index 00000000..b6caccb3
--- /dev/null
+++ b/ecomp-portal-BE-common/src/main/java/org/onap/portalapp/portal/transport/EcompUserAppRoles.java
@@ -0,0 +1,103 @@
+/*-
+ * ============LICENSE_START==========================================
+ * ONAP Portal
+ * ===================================================================
+ * Copyright (C) 2017 AT&T Intellectual Property. All rights reserved.
+ * ===================================================================
+ *
+ * Unless otherwise specified, all software contained herein is licensed
+ * under the Apache License, Version 2.0 (the "License");
+ * you may not use this software 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.
+ *
+ * Unless otherwise specified, all documentation contained herein is licensed
+ * under the Creative Commons License, Attribution 4.0 Intl. (the "License");
+ * you may not use this documentation except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * https://creativecommons.org/licenses/by/4.0/
+ *
+ * Unless required by applicable law or agreed to in writing, documentation
+ * 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.
+ *
+ * ============LICENSE_END============================================
+ *
+ * ECOMP is a trademark and service mark of AT&T Intellectual Property.
+ */
+package org.onap.portalapp.portal.transport;
+
+import java.io.Serializable;
+
+import javax.persistence.Column;
+import javax.persistence.Entity;
+import javax.persistence.Id;
+
+import com.fasterxml.jackson.annotation.JsonInclude;
+
+@Entity
+@JsonInclude(JsonInclude.Include.NON_NULL)
+public class EcompUserAppRoles implements Serializable {
+
+ private static final long serialVersionUID = -3394219387296578741L;
+
+ @Id
+ @Column(name="app_id")
+ private String appId;
+ @Id
+ @Column(name="user_id")
+ private Long userId;
+ @Id
+ @Column(name="priority")
+ private String priority ;
+ @Id
+ @Column(name="role_id")
+ private Long roleId;
+ @Id
+ @Column(name="role_name")
+ private String roleName;
+ public String getAppId() {
+ return appId;
+ }
+ public void setAppId(String appId) {
+ this.appId = appId;
+ }
+ public Long getUserId() {
+ return userId;
+ }
+ public void setUserId(Long userId) {
+ this.userId = userId;
+ }
+ public String getPriority() {
+ return priority;
+ }
+ public void setPriority(String priority) {
+ this.priority = priority;
+ }
+ public Long getRoleId() {
+ return roleId;
+ }
+ public void setRoleId(Long roleId) {
+ this.roleId = roleId;
+ }
+ public String getRoleName() {
+ return roleName;
+ }
+ public void setRoleName(String roleName) {
+ this.roleName = roleName;
+ }
+
+
+
+
+}
diff --git a/ecomp-portal-BE-common/src/main/java/org/onap/portalapp/portal/transport/EcompUserRoles.java b/ecomp-portal-BE-common/src/main/java/org/onap/portalapp/portal/transport/EcompUserRoles.java
new file mode 100644
index 00000000..73409ede
--- /dev/null
+++ b/ecomp-portal-BE-common/src/main/java/org/onap/portalapp/portal/transport/EcompUserRoles.java
@@ -0,0 +1,209 @@
+/*-
+ * ============LICENSE_START==========================================
+ * ONAP Portal
+ * ===================================================================
+ * Copyright (C) 2017 AT&T Intellectual Property. All rights reserved.
+ * ===================================================================
+ *
+ * Unless otherwise specified, all software contained herein is licensed
+ * under the Apache License, Version 2.0 (the "License");
+ * you may not use this software 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.
+ *
+ * Unless otherwise specified, all documentation contained herein is licensed
+ * under the Creative Commons License, Attribution 4.0 Intl. (the "License");
+ * you may not use this documentation except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * https://creativecommons.org/licenses/by/4.0/
+ *
+ * Unless required by applicable law or agreed to in writing, documentation
+ * 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.
+ *
+ * ============LICENSE_END============================================
+ *
+ * ECOMP is a trademark and service mark of AT&T Intellectual Property.
+ */
+package org.onap.portalapp.portal.transport;
+
+import java.io.Serializable;
+
+import javax.persistence.Column;
+import javax.persistence.Entity;
+import javax.persistence.Id;
+
+@Entity
+public class EcompUserRoles implements Serializable{
+
+ private static final long serialVersionUID = 1L;
+
+ @Id
+ @Column(name = "org_id")
+ private Long orgId;
+ @Id
+ @Column(name = "manager_id")
+ private String managerId;
+ @Id
+ @Column(name = "first_name")
+ private String firstName;
+ @Id
+ @Column(name = "middle_name")
+ private String middleInitial;
+ @Id
+ @Column(name = "last_name")
+ private String lastName;
+ @Id
+ @Column(name = "phone")
+ private String phone;
+ @Id
+ @Column(name = "email")
+ private String email;
+ @Id
+ @Column(name = "hrid")
+ private String hrid;
+ @Id
+ @Column(name = "org_user_id")
+ private String orgUserId;
+ @Id
+ @Column(name = "org_code")
+ private String orgCode;
+ @Id
+ @Column(name = "org_manager_userid")
+ private String orgManagerUserId;
+ @Id
+ @Column(name = "job_title")
+ private String jobTitle;
+ @Id
+ @Column(name = "login_id")
+ private String loginId;
+
+ @Id
+ @Column(name = "app_role_id")
+ private Long roleId;
+ @Id
+ @Column(name = "role_name")
+ private String roleName;
+ @Id
+ @Column(name = "active_yn")
+ private boolean active;
+
+ public Long getOrgId() {
+ return orgId;
+ }
+ public void setOrgId(Long orgId) {
+ this.orgId = orgId;
+ }
+ public String getManagerId() {
+ return managerId;
+ }
+ public void setManagerId(String managerId) {
+ this.managerId = managerId;
+ }
+ public String getFirstName() {
+ return firstName;
+ }
+ public void setFirstName(String firstName) {
+ this.firstName = firstName;
+ }
+ public String getMiddleInitial() {
+ return middleInitial;
+ }
+ public void setMiddleInitial(String middleInitial) {
+ this.middleInitial = middleInitial;
+ }
+ public String getLastName() {
+ return lastName;
+ }
+ public void setLastName(String lastName) {
+ this.lastName = lastName;
+ }
+ public String getPhone() {
+ return phone;
+ }
+ public void setPhone(String phone) {
+ this.phone = phone;
+ }
+ public String getEmail() {
+ return email;
+ }
+ public void setEmail(String email) {
+ this.email = email;
+ }
+ public String getHrid() {
+ return hrid;
+ }
+ public void setHrid(String hrid) {
+ this.hrid = hrid;
+ }
+ public String getOrgUserId() {
+ return orgUserId;
+ }
+ public void setOrgUserId(String orgUserId) {
+ this.orgUserId = orgUserId;
+ }
+ public String getOrgCode() {
+ return orgCode;
+ }
+ public void setOrgCode(String orgCode) {
+ this.orgCode = orgCode;
+ }
+ public String getOrgManagerUserId() {
+ return orgManagerUserId;
+ }
+ public void setOrgManagerUserId(String orgManagerUserId) {
+ this.orgManagerUserId = orgManagerUserId;
+ }
+ public String getJobTitle() {
+ return jobTitle;
+ }
+ public void setJobTitle(String jobTitle) {
+ this.jobTitle = jobTitle;
+ }
+ public String getLoginId() {
+ return loginId;
+ }
+ public void setLoginId(String loginId) {
+ this.loginId = loginId;
+ }
+
+ public Long getRoleId() {
+ return roleId;
+ }
+ public void setRoleId(Long roleId) {
+ this.roleId = roleId;
+ }
+ public String getRoleName() {
+ return roleName;
+ }
+ public void setRoleName(String roleName) {
+ this.roleName = roleName;
+ }
+
+ public boolean isActive() {
+ return active;
+ }
+ public void setActive(boolean active) {
+ this.active = active;
+ }
+ @Override
+ public String toString() {
+ return "EcompUserRoles [orgId=" + orgId + ", managerId=" + managerId + ", firstName=" + firstName
+ + ", middleInitial=" + middleInitial + ", lastName=" + lastName + ", phone=" + phone + ", email="
+ + email + ", hrid=" + hrid + ", orgUserId=" + orgUserId + ", orgCode=" + orgCode + ", orgManagerUserId="
+ + orgManagerUserId + ", jobTitle=" + jobTitle + ", loginId=" + loginId + ", active=" + active
+ + ", roleId=" + roleId + ", roleName=" + roleName + "]";
+ }
+
+
+}
diff --git a/ecomp-portal-BE-common/src/main/java/org/onap/portalapp/portal/transport/EpNotificationItem.java b/ecomp-portal-BE-common/src/main/java/org/onap/portalapp/portal/transport/EpNotificationItem.java
new file mode 100644
index 00000000..ea3e6a72
--- /dev/null
+++ b/ecomp-portal-BE-common/src/main/java/org/onap/portalapp/portal/transport/EpNotificationItem.java
@@ -0,0 +1,357 @@
+/*-
+ * ============LICENSE_START==========================================
+ * ONAP Portal
+ * ===================================================================
+ * Copyright (C) 2017 AT&T Intellectual Property. All rights reserved.
+ * ===================================================================
+ *
+ * Unless otherwise specified, all software contained herein is licensed
+ * under the Apache License, Version 2.0 (the "License");
+ * you may not use this software 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.
+ *
+ * Unless otherwise specified, all documentation contained herein is licensed
+ * under the Creative Commons License, Attribution 4.0 Intl. (the "License");
+ * you may not use this documentation except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * https://creativecommons.org/licenses/by/4.0/
+ *
+ * Unless required by applicable law or agreed to in writing, documentation
+ * 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.
+ *
+ * ============LICENSE_END============================================
+ *
+ * ECOMP is a trademark and service mark of AT&T Intellectual Property.
+ */
+package org.onap.portalapp.portal.transport;
+
+import java.util.Date;
+import java.util.List;
+import java.util.Set;
+
+import javax.persistence.CascadeType;
+import javax.persistence.Column;
+import javax.persistence.Entity;
+import javax.persistence.FetchType;
+import javax.persistence.GeneratedValue;
+import javax.persistence.GenerationType;
+import javax.persistence.Id;
+import javax.persistence.JoinColumn;
+import javax.persistence.OneToMany;
+import javax.persistence.Table;
+import javax.persistence.Transient;
+
+import org.onap.portalsdk.core.domain.support.DomainVo;
+
+
+/**
+ * This is to handle notifications in notification PopUp
+ */
+
+
+@Entity
+@Table(name = "ep_notification")
+public class EpNotificationItem extends DomainVo {
+ public EpNotificationItem() {
+ };
+
+ private static final long serialVersionUID = 1L;
+
+ @Id
+ @GeneratedValue(strategy = GenerationType.IDENTITY)
+ @Column(name = "notification_ID")
+ public Long notificationId;
+
+ @Column(name = "is_for_online_users")
+ public String isForOnlineUsers;
+
+ @Column(name = "is_for_all_roles")
+ public String isForAllRoles;
+
+ @Column(name = "active_YN")
+ public String activeYn;
+
+ @Column(name = "msg_header")
+ public String msgHeader;
+
+ @Column(name = "msg_description")
+ public String msgDescription;
+
+ @Column(name = "msg_source")
+ public String msgSource;
+
+ @Column(name = "start_time")
+ public Date startTime;
+
+ @Column(name = "end_time")
+ public Date endTime;
+
+ @Column(name = "priority")
+ public Long priority;
+
+ @Column(name = "creator_ID")
+ public Long creatorId;
+
+ @Column(name = "created_date")
+ public Date createdDate;
+
+ @Column(name = "notification_hyperlink")
+ public String notificationHyperlink;
+
+
+ @OneToMany(fetch = FetchType.LAZY, cascade = {CascadeType.ALL}, orphanRemoval = true)
+ @JoinColumn(name="notification_ID")
+ private Set<EpRoleNotificationItem> roles;
+
+ @Transient
+ private List<Long> roleIds;
+
+ public Long getNotificationId() {
+ return notificationId;
+ }
+
+ public void setNotificationId(Long notificationId) {
+ this.notificationId = notificationId;
+ }
+
+ public String getIsForOnlineUsers() {
+ return isForOnlineUsers;
+ }
+
+ public void setIsForOnlineUsers(String isForOnlineUsers) {
+ this.isForOnlineUsers = isForOnlineUsers;
+ }
+
+ public String getIsForAllRoles() {
+ return isForAllRoles;
+ }
+
+ public void setIsForAllRoles(String isForAllRoles) {
+ this.isForAllRoles = isForAllRoles;
+ }
+
+ public String getActiveYn() {
+ return activeYn;
+ }
+
+ public void setActiveYn(String activeYn) {
+ this.activeYn = activeYn;
+ }
+
+ public String getMsgHeader() {
+ return msgHeader;
+ }
+
+ public void setMsgHeader(String msgHeader) {
+ this.msgHeader = msgHeader;
+ }
+
+ public String getMsgDescription() {
+ return msgDescription;
+ }
+
+ public void setMsgDescription(String msgDescription) {
+ this.msgDescription = msgDescription;
+ }
+
+ public Date getStartTime() {
+ return startTime;
+ }
+
+ public void setStartTime(Date startTime) {
+ this.startTime = startTime;
+ }
+
+ public Date getEndTime() {
+ return endTime;
+ }
+
+ public void setEndTime(Date endTime) {
+ this.endTime = endTime;
+ }
+
+ public Long getPriority() {
+ return priority;
+ }
+
+ public void setPriority(Long priority) {
+ this.priority = priority;
+ }
+
+ public Long getCreatorId() {
+ return creatorId;
+ }
+
+ public void setCreatorId(Long creatorId) {
+ this.creatorId = creatorId;
+ }
+
+ public Date getCreatedDate() {
+ return createdDate;
+ }
+
+ public void setCreatedDate(Date createdDate) {
+ this.createdDate = createdDate;
+ }
+
+ public static long getSerialversionuid() {
+ return serialVersionUID;
+ }
+
+ public Set<EpRoleNotificationItem> getRoles() {
+ return roles;
+ }
+
+ public void setRoles(Set<EpRoleNotificationItem> roles) {
+ this.roles = roles;
+ }
+
+ public List<Long> getRoleIds() {
+ return roleIds;
+ }
+
+ public void setRoleIds(List<Long> roleIds) {
+ this.roleIds = roleIds;
+ }
+
+ public String getMsgSource() {
+ return msgSource;
+ }
+
+ public void setMsgSource(String msgSource) {
+ this.msgSource = msgSource;
+ }
+
+ public String getNotificationHyperlink() {
+ return notificationHyperlink;
+ }
+
+ public void setNotificationHyperlink(String notificationHyperlink) {
+ this.notificationHyperlink = notificationHyperlink;
+ }
+
+ @Override
+ public int hashCode() {
+ final int prime = 31;
+ int result = 1;
+ result = prime * result + ((activeYn == null) ? 0 : activeYn.hashCode());
+ result = prime * result + ((createdDate == null) ? 0 : createdDate.hashCode());
+ result = prime * result + ((creatorId == null) ? 0 : creatorId.hashCode());
+ result = prime * result + ((endTime == null) ? 0 : endTime.hashCode());
+ result = prime * result + ((isForAllRoles == null) ? 0 : isForAllRoles.hashCode());
+ result = prime * result + ((isForOnlineUsers == null) ? 0 : isForOnlineUsers.hashCode());
+ result = prime * result + ((msgDescription == null) ? 0 : msgDescription.hashCode());
+ result = prime * result + ((msgHeader == null) ? 0 : msgHeader.hashCode());
+ result = prime * result + ((msgSource == null) ? 0 : msgSource.hashCode());
+ result = prime * result + ((notificationId == null) ? 0 : notificationId.hashCode());
+ result = prime * result + ((priority == null) ? 0 : priority.hashCode());
+ result = prime * result + ((roleIds == null) ? 0 : roleIds.hashCode());
+ result = prime * result + ((roles == null) ? 0 : roles.hashCode());
+ result = prime * result + ((startTime == null) ? 0 : startTime.hashCode());
+ return result;
+ }
+
+ @Override
+ public boolean equals(Object obj) {
+ if (this == obj)
+ return true;
+ if (obj == null)
+ return false;
+ if (getClass() != obj.getClass())
+ return false;
+ EpNotificationItem other = (EpNotificationItem) obj;
+ if (activeYn == null) {
+ if (other.activeYn != null)
+ return false;
+ } else if (!activeYn.equals(other.activeYn))
+ return false;
+ if (createdDate == null) {
+ if (other.createdDate != null)
+ return false;
+ } else if (!createdDate.equals(other.createdDate))
+ return false;
+ if (creatorId == null) {
+ if (other.creatorId != null)
+ return false;
+ } else if (!creatorId.equals(other.creatorId))
+ return false;
+ if (endTime == null) {
+ if (other.endTime != null)
+ return false;
+ } else if (!endTime.equals(other.endTime))
+ return false;
+ if (isForAllRoles == null) {
+ if (other.isForAllRoles != null)
+ return false;
+ } else if (!isForAllRoles.equals(other.isForAllRoles))
+ return false;
+ if (isForOnlineUsers == null) {
+ if (other.isForOnlineUsers != null)
+ return false;
+ } else if (!isForOnlineUsers.equals(other.isForOnlineUsers))
+ return false;
+ if (msgDescription == null) {
+ if (other.msgDescription != null)
+ return false;
+ } else if (!msgDescription.equals(other.msgDescription))
+ return false;
+ if (msgHeader == null) {
+ if (other.msgHeader != null)
+ return false;
+ } else if (!msgHeader.equals(other.msgHeader))
+ return false;
+ if (msgSource == null) {
+ if (other.msgSource != null)
+ return false;
+ } else if (!msgSource.equals(other.msgSource))
+ return false;
+ if (notificationId == null) {
+ if (other.notificationId != null)
+ return false;
+ } else if (!notificationId.equals(other.notificationId))
+ return false;
+ if (priority == null) {
+ if (other.priority != null)
+ return false;
+ } else if (!priority.equals(other.priority))
+ return false;
+ if (roleIds == null) {
+ if (other.roleIds != null)
+ return false;
+ } else if (!roleIds.equals(other.roleIds))
+ return false;
+ if (roles == null) {
+ if (other.roles != null)
+ return false;
+ } else if (!roles.equals(other.roles))
+ return false;
+ if (startTime == null) {
+ if (other.startTime != null)
+ return false;
+ } else if (!startTime.equals(other.startTime))
+ return false;
+ return true;
+ }
+
+ @Override
+ public String toString() {
+ return "EpNotificationItem [notificationId=" + notificationId + ", isForOnlineUsers=" + isForOnlineUsers
+ + ", isForAllRoles=" + isForAllRoles + ", activeYn=" + activeYn + ", msgHeader=" + msgHeader
+ + ", msgDescription=" + msgDescription + ", msgSource=" + msgSource + ", startTime=" + startTime
+ + ", endTime=" + endTime + ", priority=" + priority + ", creatorId=" + creatorId + ", createdDate="
+ + createdDate + ", roles=" + roles + ", roleIds=" + roleIds + "]";
+ }
+
+}
diff --git a/ecomp-portal-BE-common/src/main/java/org/onap/portalapp/portal/transport/EpNotificationItemExtVO.java b/ecomp-portal-BE-common/src/main/java/org/onap/portalapp/portal/transport/EpNotificationItemExtVO.java
new file mode 100644
index 00000000..9a6a58b3
--- /dev/null
+++ b/ecomp-portal-BE-common/src/main/java/org/onap/portalapp/portal/transport/EpNotificationItemExtVO.java
@@ -0,0 +1,137 @@
+/*-
+ * ============LICENSE_START==========================================
+ * ONAP Portal
+ * ===================================================================
+ * Copyright (C) 2017 AT&T Intellectual Property. All rights reserved.
+ * ===================================================================
+ *
+ * Unless otherwise specified, all software contained herein is licensed
+ * under the Apache License, Version 2.0 (the "License");
+ * you may not use this software 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.
+ *
+ * Unless otherwise specified, all documentation contained herein is licensed
+ * under the Creative Commons License, Attribution 4.0 Intl. (the "License");
+ * you may not use this documentation except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * https://creativecommons.org/licenses/by/4.0/
+ *
+ * Unless required by applicable law or agreed to in writing, documentation
+ * 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.
+ *
+ * ============LICENSE_END============================================
+ *
+ * ECOMP is a trademark and service mark of AT&T Intellectual Property.
+ */
+package org.onap.portalapp.portal.transport;
+
+import java.util.Date;
+
+import com.fasterxml.jackson.annotation.JsonInclude;
+
+@JsonInclude(JsonInclude.Include.NON_NULL)
+public class EpNotificationItemExtVO {
+
+ private Character activeYn;
+
+ private String msgHeader;
+
+ private String msgDescription;
+
+ private Date startTime;
+
+ private Date endTime;
+
+ private Integer priority;
+
+ private Integer creatorId;
+
+ private Date createdDate;
+
+ private String loginId;
+
+ public Character getActiveYn() {
+ return activeYn;
+ }
+
+ public void setActiveYn(Character activeYn) {
+ this.activeYn = activeYn;
+ }
+
+ public String getMsgHeader() {
+ return msgHeader;
+ }
+
+ public void setMsgHeader(String msgHeader) {
+ this.msgHeader = msgHeader;
+ }
+
+ public String getMsgDescription() {
+ return msgDescription;
+ }
+
+ public void setMsgDescription(String msgDescription) {
+ this.msgDescription = msgDescription;
+ }
+
+ public Date getStartTime() {
+ return startTime;
+ }
+
+ public void setStartTime(Date startTime) {
+ this.startTime = startTime;
+ }
+
+ public Date getEndTime() {
+ return endTime;
+ }
+
+ public void setEndTime(Date endTime) {
+ this.endTime = endTime;
+ }
+
+ public Integer getPriority() {
+ return priority;
+ }
+
+ public void setPriority(Integer priority) {
+ this.priority = priority;
+ }
+
+ public Integer getCreatorId() {
+ return creatorId;
+ }
+
+ public void setCreatorId(Integer creatorId) {
+ this.creatorId = creatorId;
+ }
+
+ public Date getCreatedDate() {
+ return createdDate;
+ }
+
+ public void setCreatedDate(Date createdDate) {
+ this.createdDate = createdDate;
+ }
+
+ public String getLoginId() {
+ return loginId;
+ }
+
+ public void setLoginId(String loginId) {
+ this.loginId = loginId;
+ }
+
+}
diff --git a/ecomp-portal-BE-common/src/main/java/org/onap/portalapp/portal/transport/EpNotificationItemVO.java b/ecomp-portal-BE-common/src/main/java/org/onap/portalapp/portal/transport/EpNotificationItemVO.java
new file mode 100644
index 00000000..7c2da309
--- /dev/null
+++ b/ecomp-portal-BE-common/src/main/java/org/onap/portalapp/portal/transport/EpNotificationItemVO.java
@@ -0,0 +1,221 @@
+/*-
+ * ============LICENSE_START==========================================
+ * ONAP Portal
+ * ===================================================================
+ * Copyright (C) 2017 AT&T Intellectual Property. All rights reserved.
+ * ===================================================================
+ *
+ * Unless otherwise specified, all software contained herein is licensed
+ * under the Apache License, Version 2.0 (the "License");
+ * you may not use this software 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.
+ *
+ * Unless otherwise specified, all documentation contained herein is licensed
+ * under the Creative Commons License, Attribution 4.0 Intl. (the "License");
+ * you may not use this documentation except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * https://creativecommons.org/licenses/by/4.0/
+ *
+ * Unless required by applicable law or agreed to in writing, documentation
+ * 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.
+ *
+ * ============LICENSE_END============================================
+ *
+ * ECOMP is a trademark and service mark of AT&T Intellectual Property.
+ */
+package org.onap.portalapp.portal.transport;
+
+import java.util.Date;
+
+import javax.persistence.Entity;
+import javax.persistence.Id;
+
+import org.onap.portalsdk.core.domain.support.DomainVo;
+
+/**
+ * This is to handle notifications in user notifications and in notification history
+ */
+
+/**
+ * POJO that models a single notification with the org user ID (not integer
+ * user_id).
+ */
+@Entity
+public class EpNotificationItemVO extends DomainVo {
+
+ private static final long serialVersionUID = 9095479701352339201L;
+
+ @Id
+ private Integer notificationId;
+
+ private Character isForOnlineUsers;
+
+ private Character isForAllRoles;
+
+ private Character activeYn;
+
+ private String msgHeader;
+
+ private String msgDescription;
+
+ private String msgSource;
+
+ private Date startTime;
+
+ private Date endTime;
+
+ private Integer priority;
+
+ private Integer creatorId;
+
+ private Date createdDate;
+
+ private String loginId;
+
+ private String notificationHyperlink;
+
+
+ /**
+ * Answers whether the notification is expired.
+ *
+ * @return true if the end time is past the current time, else false.
+ */
+ public boolean isExpired() {
+ boolean result = false;
+ if (endTime != null) {
+ int expired = endTime.compareTo(new Date());
+ result = (expired == -1) ? true : false;
+ }
+ return result;
+ }
+
+ public String getLoginId() {
+ return loginId;
+ }
+
+ public void setLoginId(String loginId) {
+ this.loginId = loginId;
+ }
+
+ public Integer getNotificationId() {
+ return notificationId;
+ }
+
+ public void setNotificationId(Integer notificationId) {
+ this.notificationId = notificationId;
+ }
+
+ public Character getIsForOnlineUsers() {
+ return isForOnlineUsers;
+ }
+
+ public void setIsForOnlineUsers(Character isForOnlineUsers) {
+ this.isForOnlineUsers = isForOnlineUsers;
+ }
+
+ public Character getIsForAllRoles() {
+ return isForAllRoles;
+ }
+
+ public void setIsForAllRoles(Character isForAllRoles) {
+ this.isForAllRoles = isForAllRoles;
+ }
+
+ public Character getActiveYn() {
+ return activeYn;
+ }
+
+ public void setActiveYn(Character activeYn) {
+ this.activeYn = activeYn;
+ }
+
+ public String getMsgHeader() {
+ return msgHeader;
+ }
+
+ public void setMsgHeader(String msgHeader) {
+ this.msgHeader = msgHeader;
+ }
+
+ public String getMsgDescription() {
+ return msgDescription;
+ }
+
+ public void setMsgDescription(String msgDescription) {
+ this.msgDescription = msgDescription;
+ }
+
+ public Date getStartTime() {
+ return startTime;
+ }
+
+ public void setStartTime(Date startTime) {
+ this.startTime = startTime;
+ }
+
+ public Date getEndTime() {
+ return endTime;
+ }
+
+ public void setEndTime(Date endTime) {
+ this.endTime = endTime;
+ }
+
+ public Integer getPriority() {
+ return priority;
+ }
+
+ public void setPriority(Integer priority) {
+ this.priority = priority;
+ }
+
+ public Integer getCreatorId() {
+ return creatorId;
+ }
+
+ public void setCreatorId(Integer creatorId) {
+ this.creatorId = creatorId;
+ }
+
+ public Date getCreatedDate() {
+ return createdDate;
+ }
+
+ public void setCreatedDate(Date createdDate) {
+ this.createdDate = createdDate;
+ }
+
+ public static long getSerialversionuid() {
+ return serialVersionUID;
+ }
+
+
+ public String getMsgSource() {
+ return msgSource;
+ }
+
+ public void setMsgSource(String msgSource) {
+ this.msgSource = msgSource;
+ }
+
+ public String getNotificationHyperlink() {
+ return notificationHyperlink;
+ }
+
+ public void setNotificationHyperlink(String notificationHyperlink) {
+ this.notificationHyperlink = notificationHyperlink;
+ }
+
+}
diff --git a/ecomp-portal-BE-common/src/main/java/org/onap/portalapp/portal/transport/EpRoleNotificationItem.java b/ecomp-portal-BE-common/src/main/java/org/onap/portalapp/portal/transport/EpRoleNotificationItem.java
new file mode 100644
index 00000000..a1b4377b
--- /dev/null
+++ b/ecomp-portal-BE-common/src/main/java/org/onap/portalapp/portal/transport/EpRoleNotificationItem.java
@@ -0,0 +1,108 @@
+/*-
+ * ============LICENSE_START==========================================
+ * ONAP Portal
+ * ===================================================================
+ * Copyright (C) 2017 AT&T Intellectual Property. All rights reserved.
+ * ===================================================================
+ *
+ * Unless otherwise specified, all software contained herein is licensed
+ * under the Apache License, Version 2.0 (the "License");
+ * you may not use this software 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.
+ *
+ * Unless otherwise specified, all documentation contained herein is licensed
+ * under the Creative Commons License, Attribution 4.0 Intl. (the "License");
+ * you may not use this documentation except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * https://creativecommons.org/licenses/by/4.0/
+ *
+ * Unless required by applicable law or agreed to in writing, documentation
+ * 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.
+ *
+ * ============LICENSE_END============================================
+ *
+ * ECOMP is a trademark and service mark of AT&T Intellectual Property.
+ */
+package org.onap.portalapp.portal.transport;
+
+import javax.persistence.Column;
+import javax.persistence.Entity;
+import javax.persistence.GeneratedValue;
+import javax.persistence.GenerationType;
+import javax.persistence.Id;
+import javax.persistence.Table;
+
+import org.onap.portalsdk.core.domain.support.DomainVo;
+
+@Entity
+@Table(name="ep_role_notification")
+public class EpRoleNotificationItem extends DomainVo {
+ public EpRoleNotificationItem(){};
+
+ private static final long serialVersionUID = 1L;
+
+ @Id
+ @GeneratedValue(strategy=GenerationType.IDENTITY)
+ @Column(name = "ID")
+ public Long id;
+
+ @Column(name = "notification_ID")
+ public Long notificationId;
+
+ @Column(name = "role_ID")
+ public Integer roleId;
+
+ @Column(name = "recv_user_id")
+ public Integer RecvUserId;
+
+
+ public Long getId() {
+ return id;
+ }
+
+ public void setId(Long id) {
+ this.id = id;
+ }
+
+ public Long getNotificationId() {
+ return notificationId;
+ }
+
+ public void setNotificationId(Long notificationId) {
+ this.notificationId = notificationId;
+ }
+
+ public Integer getRoleId() {
+ return roleId;
+ }
+
+ public void setRoleId(Integer roleId) {
+ this.roleId = roleId;
+ }
+
+ public static long getSerialversionuid() {
+ return serialVersionUID;
+ }
+
+ public Integer getRecvUserId() {
+ return RecvUserId;
+ }
+
+ public void setRecvUserId(Integer recvUserId) {
+ RecvUserId = recvUserId;
+ }
+
+
+}
diff --git a/ecomp-portal-BE-common/src/main/java/org/onap/portalapp/portal/transport/EventWidget.java b/ecomp-portal-BE-common/src/main/java/org/onap/portalapp/portal/transport/EventWidget.java
new file mode 100644
index 00000000..96562399
--- /dev/null
+++ b/ecomp-portal-BE-common/src/main/java/org/onap/portalapp/portal/transport/EventWidget.java
@@ -0,0 +1,156 @@
+package org.onap.portalapp.portal.transport;
+/*-
+ * ============LICENSE_START==========================================
+ * ONAP Portal
+ * ===================================================================
+ * Copyright (C) 2017 AT&T Intellectual Property. All rights reserved.
+ * ===================================================================
+ *
+ * Unless otherwise specified, all software contained herein is licensed
+ * under the Apache License, Version 2.0 (the "License");
+ * you may not use this software 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.
+ *
+ * Unless otherwise specified, all documentation contained herein is licensed
+ * under the Creative Commons License, Attribution 4.0 Intl. (the "License");
+ * you may not use this documentation except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * https://creativecommons.org/licenses/by/4.0/
+ *
+ * Unless required by applicable law or agreed to in writing, documentation
+ * 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.
+ *
+ * ============LICENSE_END============================================
+ *
+ * ECOMP is a trademark and service mark of AT&T Intellectual Property.
+ */
+/*package org.openecomp.portalapp.portal.transport;
+
+import javax.persistence.Column;
+import javax.persistence.Entity;
+import javax.persistence.GeneratedValue;
+import javax.persistence.GenerationType;
+import javax.persistence.Id;
+import javax.persistence.Table;
+
+import org.openecomp.portalsdk.core.domain.support.DomainVo;
+import com.fasterxml.jackson.annotation.JsonInclude;
+
+*//**
+ * This is to handle portal admins
+ *//*
+@Entity
+@Table(name="fn_event_widget_data")
+@JsonInclude(JsonInclude.Include.NON_NULL)
+public class EventWidget extends DomainVo{
+
+ *//**
+ *
+ *//*
+ private static final long serialVersionUID = -2784849102886421352L;
+
+
+ @Id
+ @GeneratedValue(strategy=GenerationType.AUTO)
+ @Column(name = "id")
+ private Long id;
+
+ @Column(name = "category")
+ private String category;
+
+ @Column(name = "title")
+ private String title;
+
+ @Column(name = "href")
+ private String href;
+
+ @Column(name = "content")
+ private String content;
+
+ @Column(name = "month_val")
+ private String mon;
+
+ @Column(name = "day_val")
+ private Integer day;
+
+ @Column(name = "year_val")
+ private Integer year;
+
+ @Column(name = "sort_order")
+ private Integer sortOrder;
+
+ public String getTitle() {
+ return title;
+ }
+
+ public void setTitle(String title) {
+ this.title = title;
+ }
+
+ public String getHref() {
+ return href;
+ }
+
+ public void setHref(String href) {
+ this.href = href;
+ }
+
+ public String getContent() {
+ return content;
+ }
+
+ public void setContent(String content) {
+ this.content = content;
+ }
+
+ public String getMon() {
+ return mon;
+ }
+
+ public void setMonth(String mon) {
+ this.mon = mon;
+ }
+
+ public Integer getDay() {
+ return day;
+ }
+
+ public void setDay(Integer day) {
+ this.day = day;
+ }
+
+ public Integer getYear() {
+ return year;
+ }
+
+ public void setYear(Integer year) {
+ this.year = year;
+ }
+
+ public Integer getSortOrder() {
+ return sortOrder;
+ }
+
+ public String getCategory() {
+ return category;
+ }
+
+ public void setCategory(String category) {
+ this.category = category;
+ }
+
+
+}
+*/
diff --git a/ecomp-portal-BE-common/src/main/java/org/onap/portalapp/portal/transport/EventWidgetMeta.java b/ecomp-portal-BE-common/src/main/java/org/onap/portalapp/portal/transport/EventWidgetMeta.java
new file mode 100644
index 00000000..a27aa65e
--- /dev/null
+++ b/ecomp-portal-BE-common/src/main/java/org/onap/portalapp/portal/transport/EventWidgetMeta.java
@@ -0,0 +1,70 @@
+package org.onap.portalapp.portal.transport;
+/*-
+ * ============LICENSE_START==========================================
+ * ONAP Portal
+ * ===================================================================
+ * Copyright (C) 2017 AT&T Intellectual Property. All rights reserved.
+ * ===================================================================
+ *
+ * Unless otherwise specified, all software contained herein is licensed
+ * under the Apache License, Version 2.0 (the "License");
+ * you may not use this software 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.
+ *
+ * Unless otherwise specified, all documentation contained herein is licensed
+ * under the Creative Commons License, Attribution 4.0 Intl. (the "License");
+ * you may not use this documentation except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * https://creativecommons.org/licenses/by/4.0/
+ *
+ * Unless required by applicable law or agreed to in writing, documentation
+ * 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.
+ *
+ * ============LICENSE_END============================================
+ *
+ * ECOMP is a trademark and service mark of AT&T Intellectual Property.
+ */
+/*package org.openecomp.portalapp.portal.transport;
+
+import java.util.List;
+
+public class EventWidgetMeta {
+
+ private String category;
+ private List<EventWidget> items;
+
+ public EventWidgetMeta(){
+
+ }
+
+ public EventWidgetMeta(String category, List<EventWidget> items){
+ this.category = category;
+ this.items = items;
+ }
+
+ public String getCategory() {
+ return category;
+ }
+ public void setCategory(String category) {
+ this.category = category;
+ }
+ public List<EventWidget> getItems() {
+ return items;
+ }
+ public void setItems(List<EventWidget> items) {
+ this.items = items;
+ }
+}
+*/
diff --git a/ecomp-portal-BE-common/src/main/java/org/onap/portalapp/portal/transport/ExternalAccessPerms.java b/ecomp-portal-BE-common/src/main/java/org/onap/portalapp/portal/transport/ExternalAccessPerms.java
new file mode 100644
index 00000000..db9107fe
--- /dev/null
+++ b/ecomp-portal-BE-common/src/main/java/org/onap/portalapp/portal/transport/ExternalAccessPerms.java
@@ -0,0 +1,180 @@
+/*-
+ * ============LICENSE_START==========================================
+ * ONAP Portal
+ * ===================================================================
+ * Copyright (C) 2017 AT&T Intellectual Property. All rights reserved.
+ * ===================================================================
+ *
+ * Unless otherwise specified, all software contained herein is licensed
+ * under the Apache License, Version 2.0 (the "License");
+ * you may not use this software 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.
+ *
+ * Unless otherwise specified, all documentation contained herein is licensed
+ * under the Creative Commons License, Attribution 4.0 Intl. (the "License");
+ * you may not use this documentation except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * https://creativecommons.org/licenses/by/4.0/
+ *
+ * Unless required by applicable law or agreed to in writing, documentation
+ * 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.
+ *
+ * ============LICENSE_END============================================
+ *
+ * ECOMP is a trademark and service mark of AT&T Intellectual Property.
+ */
+package org.onap.portalapp.portal.transport;
+
+import java.io.Serializable;
+
+public class ExternalAccessPerms implements Serializable, Comparable{
+
+ /**
+ *
+ */
+ private static final long serialVersionUID = -200964838466882602L;
+ public String type;
+ public String instance;
+ public String action;
+ public String description;
+
+
+ public ExternalAccessPerms() {
+ super();
+ }
+
+
+
+ public ExternalAccessPerms(String type, String instance, String action, String description) {
+ super();
+ this.type = type;
+ this.instance = instance;
+ this.action = action;
+ this.description = description;
+ }
+
+ public ExternalAccessPerms(String type, String instance, String action) {
+ super();
+ this.type = type;
+ this.instance = instance;
+ this.action = action;
+ }
+
+
+ /**
+ * @return the type
+ */
+ public String getType() {
+ return type;
+ }
+ /**
+ * @param type the type to set
+ */
+ public void setType(String type) {
+ this.type = type;
+ }
+ /**
+ * @return the instance
+ */
+ public String getInstance() {
+ return instance;
+ }
+ /**
+ * @param instance the instance to set
+ */
+ public void setInstance(String instance) {
+ this.instance = instance;
+ }
+ /**
+ * @return the action
+ */
+ public String getAction() {
+ return action;
+ }
+ /**
+ * @param action the action to set
+ */
+ public void setAction(String action) {
+ this.action = action;
+ }
+
+ public String getDescription() {
+ return description;
+ }
+
+ public void setDescription(String description) {
+ this.description = description;
+ }
+
+
+ @Override
+ public int compareTo(Object obj){
+ ExternalAccessPerms other = (ExternalAccessPerms)obj;
+
+ String c1 = getInstance();
+ String c2 = other.getInstance();
+
+ return (c1 == null || c2 == null) ? 1 : c1.compareTo(c2);
+ }
+
+
+
+ @Override
+ public int hashCode() {
+ final int prime = 31;
+ int result = 1;
+ result = prime * result + ((action == null) ? 0 : action.hashCode());
+ result = prime * result + ((description == null) ? 0 : description.hashCode());
+ result = prime * result + ((instance == null) ? 0 : instance.hashCode());
+ result = prime * result + ((type == null) ? 0 : type.hashCode());
+ return result;
+ }
+
+
+
+ @Override
+ public boolean equals(Object obj) {
+ if (this == obj)
+ return true;
+ if (obj == null)
+ return false;
+ if (getClass() != obj.getClass())
+ return false;
+ ExternalAccessPerms other = (ExternalAccessPerms) obj;
+ if (action == null) {
+ if (other.action != null)
+ return false;
+ } else if (!action.equals(other.action))
+ return false;
+ if (description == null) {
+ if (other.description != null)
+ return false;
+ } else if (!description.equals(other.description))
+ return false;
+ if (instance == null) {
+ if (other.instance != null)
+ return false;
+ } else if (!instance.equals(other.instance))
+ return false;
+ if (type == null) {
+ if (other.type != null)
+ return false;
+ } else if (!type.equals(other.type))
+ return false;
+ return true;
+ }
+
+
+}
diff --git a/ecomp-portal-BE-common/src/main/java/org/onap/portalapp/portal/transport/ExternalAccessPermsDetail.java b/ecomp-portal-BE-common/src/main/java/org/onap/portalapp/portal/transport/ExternalAccessPermsDetail.java
new file mode 100644
index 00000000..49167c88
--- /dev/null
+++ b/ecomp-portal-BE-common/src/main/java/org/onap/portalapp/portal/transport/ExternalAccessPermsDetail.java
@@ -0,0 +1,127 @@
+/*-
+ * ============LICENSE_START==========================================
+ * ONAP Portal
+ * ===================================================================
+ * Copyright (C) 2017 AT&T Intellectual Property. All rights reserved.
+ * ===================================================================
+ *
+ * Unless otherwise specified, all software contained herein is licensed
+ * under the Apache License, Version 2.0 (the "License");
+ * you may not use this software 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.
+ *
+ * Unless otherwise specified, all documentation contained herein is licensed
+ * under the Creative Commons License, Attribution 4.0 Intl. (the "License");
+ * you may not use this documentation except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * https://creativecommons.org/licenses/by/4.0/
+ *
+ * Unless required by applicable law or agreed to in writing, documentation
+ * 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.
+ *
+ * ============LICENSE_END============================================
+ *
+ * ECOMP is a trademark and service mark of AT&T Intellectual Property.
+ */
+package org.onap.portalapp.portal.transport;
+
+import java.util.List;
+
+import com.fasterxml.jackson.annotation.JsonIgnoreProperties;
+import com.fasterxml.jackson.annotation.JsonRootName;
+
+@JsonIgnoreProperties(ignoreUnknown = true)
+@JsonRootName(value="perm")
+public class ExternalAccessPermsDetail {
+
+ private String type;
+ private String instance;
+ private String action;
+ private List<String> roles;
+ private String description;
+
+
+
+ public ExternalAccessPermsDetail() {
+ super();
+ }
+
+ /**
+ * @param type
+ * @param instance
+ * @param action
+ * @param roles
+ * @param description
+ */
+ public ExternalAccessPermsDetail(String type, String instance, String action, List<String> roles,
+ String description) {
+ super();
+ this.type = type;
+ this.instance = instance;
+ this.action = action;
+ this.roles = roles;
+ this.description = description;
+ }
+
+ /**
+ * @param type
+ * @param instance
+ * @param action
+ * @param description
+ */
+ public ExternalAccessPermsDetail(String type, String instance, String action,
+ String description) {
+ super();
+ this.type = type;
+ this.instance = instance;
+ this.action = action;
+ this.description = description;
+ }
+
+ public String getType() {
+ return type;
+ }
+ public void setType(String type) {
+ this.type = type;
+ }
+ public String getInstance() {
+ return instance;
+ }
+ public void setInstance(String instance) {
+ this.instance = instance;
+ }
+ public String getAction() {
+ return action;
+ }
+ public void setAction(String action) {
+ this.action = action;
+ }
+ public List<String> getRoles() {
+ return roles;
+ }
+
+ public void setRoles(List<String> roles) {
+ this.roles = roles;
+ }
+
+ public String getDescription() {
+ return description;
+ }
+ public void setDescription(String description) {
+ this.description = description;
+ }
+
+
+}
diff --git a/ecomp-portal-BE-common/src/main/java/org/onap/portalapp/portal/transport/ExternalAccessRole.java b/ecomp-portal-BE-common/src/main/java/org/onap/portalapp/portal/transport/ExternalAccessRole.java
new file mode 100644
index 00000000..3a377f32
--- /dev/null
+++ b/ecomp-portal-BE-common/src/main/java/org/onap/portalapp/portal/transport/ExternalAccessRole.java
@@ -0,0 +1,76 @@
+/*-
+ * ============LICENSE_START==========================================
+ * ONAP Portal
+ * ===================================================================
+ * Copyright (C) 2017 AT&T Intellectual Property. All rights reserved.
+ * ===================================================================
+ *
+ * Unless otherwise specified, all software contained herein is licensed
+ * under the Apache License, Version 2.0 (the "License");
+ * you may not use this software 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.
+ *
+ * Unless otherwise specified, all documentation contained herein is licensed
+ * under the Creative Commons License, Attribution 4.0 Intl. (the "License");
+ * you may not use this documentation except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * https://creativecommons.org/licenses/by/4.0/
+ *
+ * Unless required by applicable law or agreed to in writing, documentation
+ * 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.
+ *
+ * ============LICENSE_END============================================
+ *
+ * ECOMP is a trademark and service mark of AT&T Intellectual Property.
+ */
+package org.onap.portalapp.portal.transport;
+
+import java.io.Serializable;
+
+public class ExternalAccessRole implements Serializable {
+
+ /**
+ *
+ */
+ private static final long serialVersionUID = 3439986826362436339L;
+ public String name;
+ public String description;
+
+ public ExternalAccessRole() {
+
+ }
+
+ public ExternalAccessRole(String name, String description) {
+ super();
+ this.name = name;
+ this.description = description;
+ }
+
+ public String getName() {
+ return name;
+ }
+
+ public void setName(String name) {
+ this.name = name;
+ }
+
+ public String getDescription() {
+ return description;
+ }
+ public void setDescription(String description) {
+ this.description = description;
+ }
+
+}
diff --git a/ecomp-portal-BE-common/src/main/java/org/onap/portalapp/portal/transport/ExternalAccessRolePerms.java b/ecomp-portal-BE-common/src/main/java/org/onap/portalapp/portal/transport/ExternalAccessRolePerms.java
new file mode 100644
index 00000000..1235f62d
--- /dev/null
+++ b/ecomp-portal-BE-common/src/main/java/org/onap/portalapp/portal/transport/ExternalAccessRolePerms.java
@@ -0,0 +1,66 @@
+/*-
+ * ============LICENSE_START==========================================
+ * ONAP Portal
+ * ===================================================================
+ * Copyright (C) 2017 AT&T Intellectual Property. All rights reserved.
+ * ===================================================================
+ *
+ * Unless otherwise specified, all software contained herein is licensed
+ * under the Apache License, Version 2.0 (the "License");
+ * you may not use this software 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.
+ *
+ * Unless otherwise specified, all documentation contained herein is licensed
+ * under the Creative Commons License, Attribution 4.0 Intl. (the "License");
+ * you may not use this documentation except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * https://creativecommons.org/licenses/by/4.0/
+ *
+ * Unless required by applicable law or agreed to in writing, documentation
+ * 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.
+ *
+ * ============LICENSE_END============================================
+ *
+ * ECOMP is a trademark and service mark of AT&T Intellectual Property.
+ */
+package org.onap.portalapp.portal.transport;
+
+public class ExternalAccessRolePerms {
+
+ private ExternalAccessPerms perm;
+ private String role;
+
+
+ public ExternalAccessRolePerms(ExternalAccessPerms perm, String role) {
+ super();
+ this.perm = perm;
+ this.role = role;
+ }
+
+ public ExternalAccessPerms getPerm() {
+ return perm;
+ }
+ public void setPerm(ExternalAccessPerms perm) {
+ this.perm = perm;
+ }
+ public String getRole() {
+ return role;
+ }
+ public void setRole(String role) {
+ this.role = role;
+ }
+
+
+}
diff --git a/ecomp-portal-BE-common/src/main/java/org/onap/portalapp/portal/transport/ExternalAccessUser.java b/ecomp-portal-BE-common/src/main/java/org/onap/portalapp/portal/transport/ExternalAccessUser.java
new file mode 100644
index 00000000..63d11449
--- /dev/null
+++ b/ecomp-portal-BE-common/src/main/java/org/onap/portalapp/portal/transport/ExternalAccessUser.java
@@ -0,0 +1,65 @@
+/*-
+ * ============LICENSE_START==========================================
+ * ONAP Portal
+ * ===================================================================
+ * Copyright (C) 2017 AT&T Intellectual Property. All rights reserved.
+ * ===================================================================
+ *
+ * Unless otherwise specified, all software contained herein is licensed
+ * under the Apache License, Version 2.0 (the "License");
+ * you may not use this software 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.
+ *
+ * Unless otherwise specified, all documentation contained herein is licensed
+ * under the Creative Commons License, Attribution 4.0 Intl. (the "License");
+ * you may not use this documentation except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * https://creativecommons.org/licenses/by/4.0/
+ *
+ * Unless required by applicable law or agreed to in writing, documentation
+ * 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.
+ *
+ * ============LICENSE_END============================================
+ *
+ * ECOMP is a trademark and service mark of AT&T Intellectual Property.
+ */
+package org.onap.portalapp.portal.transport;
+
+public class ExternalAccessUser {
+
+ private String user;
+ private String role;
+
+ public ExternalAccessUser(String user, String role) {
+ super();
+ this.user = user;
+ this.role = role;
+ }
+
+ public String getUser() {
+ return user;
+ }
+ public void setUser(String user) {
+ this.user = user;
+ }
+ public String getRole() {
+ return role;
+ }
+ public void setRole(String role) {
+ this.role = role;
+ }
+
+
+}
diff --git a/ecomp-portal-BE-common/src/main/java/org/onap/portalapp/portal/transport/ExternalAccessUserRoleDetail.java b/ecomp-portal-BE-common/src/main/java/org/onap/portalapp/portal/transport/ExternalAccessUserRoleDetail.java
new file mode 100644
index 00000000..fe92fb4c
--- /dev/null
+++ b/ecomp-portal-BE-common/src/main/java/org/onap/portalapp/portal/transport/ExternalAccessUserRoleDetail.java
@@ -0,0 +1,104 @@
+/*-
+ * ============LICENSE_START==========================================
+ * ONAP Portal
+ * ===================================================================
+ * Copyright (C) 2017 AT&T Intellectual Property. All rights reserved.
+ * ===================================================================
+ *
+ * Unless otherwise specified, all software contained herein is licensed
+ * under the Apache License, Version 2.0 (the "License");
+ * you may not use this software 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.
+ *
+ * Unless otherwise specified, all documentation contained herein is licensed
+ * under the Creative Commons License, Attribution 4.0 Intl. (the "License");
+ * you may not use this documentation except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * https://creativecommons.org/licenses/by/4.0/
+ *
+ * Unless required by applicable law or agreed to in writing, documentation
+ * 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.
+ *
+ * ============LICENSE_END============================================
+ *
+ * ECOMP is a trademark and service mark of AT&T Intellectual Property.
+ */
+package org.onap.portalapp.portal.transport;
+
+public class ExternalAccessUserRoleDetail {
+
+ private String name;
+ private ExternalRoleDescription description;
+
+
+ /**
+ *
+ */
+ public ExternalAccessUserRoleDetail() {
+ super();
+ }
+
+ public ExternalAccessUserRoleDetail(String name, ExternalRoleDescription description) {
+ super();
+ this.name = name;
+ this.description = description;
+ }
+
+ public String getName() {
+ return name;
+ }
+ public void setName(String name) {
+ this.name = name;
+ }
+ public ExternalRoleDescription getDescription() {
+ return description;
+ }
+ public void setDescription(ExternalRoleDescription description) {
+ this.description = description;
+ }
+
+ @Override
+ public int hashCode() {
+ final int prime = 31;
+ int result = 1;
+ result = prime * result + ((description == null) ? 0 : description.hashCode());
+ result = prime * result + ((name == null) ? 0 : name.hashCode());
+ return result;
+ }
+
+ @Override
+ public boolean equals(Object obj) {
+ if (this == obj)
+ return true;
+ if (obj == null)
+ return false;
+ if (getClass() != obj.getClass())
+ return false;
+ ExternalAccessUserRoleDetail other = (ExternalAccessUserRoleDetail) obj;
+ if (description == null) {
+ if (other.description != null)
+ return false;
+ } else if (!description.equals(other.description))
+ return false;
+ if (name == null) {
+ if (other.name != null)
+ return false;
+ } else if (!name.equals(other.name))
+ return false;
+ return true;
+ }
+
+
+}
diff --git a/ecomp-portal-BE-common/src/main/java/org/onap/portalapp/portal/transport/ExternalAuthUserRole.java b/ecomp-portal-BE-common/src/main/java/org/onap/portalapp/portal/transport/ExternalAuthUserRole.java
new file mode 100644
index 00000000..0b143bd9
--- /dev/null
+++ b/ecomp-portal-BE-common/src/main/java/org/onap/portalapp/portal/transport/ExternalAuthUserRole.java
@@ -0,0 +1,74 @@
+/*-
+ * ============LICENSE_START==========================================
+ * ONAP Portal
+ * ===================================================================
+ * Copyright (C) 2017 AT&T Intellectual Property. All rights reserved.
+ * ===================================================================
+ *
+ * Unless otherwise specified, all software contained herein is licensed
+ * under the Apache License, Version 2.0 (the "License");
+ * you may not use this software 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.
+ *
+ * Unless otherwise specified, all documentation contained herein is licensed
+ * under the Creative Commons License, Attribution 4.0 Intl. (the "License");
+ * you may not use this documentation except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * https://creativecommons.org/licenses/by/4.0/
+ *
+ * Unless required by applicable law or agreed to in writing, documentation
+ * 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.
+ *
+ * ============LICENSE_END============================================
+ *
+ * ECOMP is a trademark and service mark of AT&T Intellectual Property.
+ */
+package org.onap.portalapp.portal.transport;
+
+import java.io.Serializable;
+
+public class ExternalAuthUserRole implements Serializable{
+
+ /**
+ *
+ */
+ private static final long serialVersionUID = 5066251837431287376L;
+
+ private String role;
+ private String user;
+ private String expiryDate;
+
+ public String getRole() {
+ return role;
+ }
+ public void setRole(String role) {
+ this.role = role;
+ }
+ public String getUser() {
+ return user;
+ }
+ public void setUser(String user) {
+ this.user = user;
+ }
+ public String getExpiryDate() {
+ return expiryDate;
+ }
+ public void setExpiryDate(String expiryDate) {
+ this.expiryDate = expiryDate;
+ }
+
+
+
+}
diff --git a/ecomp-portal-BE-common/src/main/java/org/onap/portalapp/portal/transport/ExternalRequestFieldsValidator.java b/ecomp-portal-BE-common/src/main/java/org/onap/portalapp/portal/transport/ExternalRequestFieldsValidator.java
new file mode 100644
index 00000000..75418df5
--- /dev/null
+++ b/ecomp-portal-BE-common/src/main/java/org/onap/portalapp/portal/transport/ExternalRequestFieldsValidator.java
@@ -0,0 +1,65 @@
+/*-
+ * ============LICENSE_START==========================================
+ * ONAP Portal
+ * ===================================================================
+ * Copyright (C) 2017 AT&T Intellectual Property. All rights reserved.
+ * ===================================================================
+ *
+ * Unless otherwise specified, all software contained herein is licensed
+ * under the Apache License, Version 2.0 (the "License");
+ * you may not use this software 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.
+ *
+ * Unless otherwise specified, all documentation contained herein is licensed
+ * under the Creative Commons License, Attribution 4.0 Intl. (the "License");
+ * you may not use this documentation except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * https://creativecommons.org/licenses/by/4.0/
+ *
+ * Unless required by applicable law or agreed to in writing, documentation
+ * 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.
+ *
+ * ============LICENSE_END============================================
+ *
+ * ECOMP is a trademark and service mark of AT&T Intellectual Property.
+ */
+package org.onap.portalapp.portal.transport;
+
+public class ExternalRequestFieldsValidator {
+
+ private boolean result;
+ private String detailMessage;
+
+ public ExternalRequestFieldsValidator(boolean result, String detailMessage) {
+ super();
+ this.result = result;
+ this.detailMessage = detailMessage;
+ }
+ public boolean isResult() {
+ return result;
+ }
+ public void setResult(boolean result) {
+ this.result = result;
+ }
+ public String getDetailMessage() {
+ return detailMessage;
+ }
+ public void setDetailMessage(String detailMessage) {
+ this.detailMessage = detailMessage;
+ }
+
+
+
+}
diff --git a/ecomp-portal-BE-common/src/main/java/org/onap/portalapp/portal/transport/ExternalRoleDescription.java b/ecomp-portal-BE-common/src/main/java/org/onap/portalapp/portal/transport/ExternalRoleDescription.java
new file mode 100644
index 00000000..262cc8ff
--- /dev/null
+++ b/ecomp-portal-BE-common/src/main/java/org/onap/portalapp/portal/transport/ExternalRoleDescription.java
@@ -0,0 +1,140 @@
+/*-
+ * ============LICENSE_START==========================================
+ * ONAP Portal
+ * ===================================================================
+ * Copyright (C) 2017 AT&T Intellectual Property. All rights reserved.
+ * ===================================================================
+ *
+ * Unless otherwise specified, all software contained herein is licensed
+ * under the Apache License, Version 2.0 (the "License");
+ * you may not use this software 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.
+ *
+ * Unless otherwise specified, all documentation contained herein is licensed
+ * under the Creative Commons License, Attribution 4.0 Intl. (the "License");
+ * you may not use this documentation except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * https://creativecommons.org/licenses/by/4.0/
+ *
+ * Unless required by applicable law or agreed to in writing, documentation
+ * 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.
+ *
+ * ============LICENSE_END============================================
+ *
+ * ECOMP is a trademark and service mark of AT&T Intellectual Property.
+ */
+package org.onap.portalapp.portal.transport;
+
+public class ExternalRoleDescription {
+
+ private String id;
+ private String name;
+ private String active;
+ private String priority;
+ private String appId;
+ private String appRoleId;
+
+ public String getId() {
+ return id;
+ }
+ public void setId(String id) {
+ this.id = id;
+ }
+ public String getName() {
+ return name;
+ }
+ public void setName(String name) {
+ this.name = name;
+ }
+ public String getActive() {
+ return active;
+ }
+ public void setActive(String active) {
+ this.active = active;
+ }
+ public String getPriority() {
+ return priority;
+ }
+ public void setPriority(String priority) {
+ this.priority = priority;
+ }
+ public String getAppId() {
+ return appId;
+ }
+ public void setAppId(String appId) {
+ this.appId = appId;
+ }
+ public String getAppRoleId() {
+ return appRoleId;
+ }
+ public void setAppRoleId(String appRoleId) {
+ this.appRoleId = appRoleId;
+ }
+ @Override
+ public int hashCode() {
+ final int prime = 31;
+ int result = 1;
+ result = prime * result + ((active == null) ? 0 : active.hashCode());
+ result = prime * result + ((appId == null) ? 0 : appId.hashCode());
+ result = prime * result + ((appRoleId == null) ? 0 : appRoleId.hashCode());
+ result = prime * result + ((id == null) ? 0 : id.hashCode());
+ result = prime * result + ((name == null) ? 0 : name.hashCode());
+ result = prime * result + ((priority == null) ? 0 : priority.hashCode());
+ return result;
+ }
+ @Override
+ public boolean equals(Object obj) {
+ if (this == obj)
+ return true;
+ if (obj == null)
+ return false;
+ if (getClass() != obj.getClass())
+ return false;
+ ExternalRoleDescription other = (ExternalRoleDescription) obj;
+ if (active == null) {
+ if (other.active != null)
+ return false;
+ } else if (!active.equals(other.active))
+ return false;
+ if (appId == null) {
+ if (other.appId != null)
+ return false;
+ } else if (!appId.equals(other.appId))
+ return false;
+ if (appRoleId == null) {
+ if (other.appRoleId != null)
+ return false;
+ } else if (!appRoleId.equals(other.appRoleId))
+ return false;
+ if (id == null) {
+ if (other.id != null)
+ return false;
+ } else if (!id.equals(other.id))
+ return false;
+ if (name == null) {
+ if (other.name != null)
+ return false;
+ } else if (!name.equals(other.name))
+ return false;
+ if (priority == null) {
+ if (other.priority != null)
+ return false;
+ } else if (!priority.equals(other.priority))
+ return false;
+ return true;
+ }
+
+
+}
diff --git a/ecomp-portal-BE-common/src/main/java/org/onap/portalapp/portal/transport/FavoritesFunctionalMenuItem.java b/ecomp-portal-BE-common/src/main/java/org/onap/portalapp/portal/transport/FavoritesFunctionalMenuItem.java
new file mode 100644
index 00000000..aff15cd3
--- /dev/null
+++ b/ecomp-portal-BE-common/src/main/java/org/onap/portalapp/portal/transport/FavoritesFunctionalMenuItem.java
@@ -0,0 +1,63 @@
+/*-
+ * ============LICENSE_START==========================================
+ * ONAP Portal
+ * ===================================================================
+ * Copyright (C) 2017 AT&T Intellectual Property. All rights reserved.
+ * ===================================================================
+ *
+ * Unless otherwise specified, all software contained herein is licensed
+ * under the Apache License, Version 2.0 (the "License");
+ * you may not use this software 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.
+ *
+ * Unless otherwise specified, all documentation contained herein is licensed
+ * under the Creative Commons License, Attribution 4.0 Intl. (the "License");
+ * you may not use this documentation except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * https://creativecommons.org/licenses/by/4.0/
+ *
+ * Unless required by applicable law or agreed to in writing, documentation
+ * 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.
+ *
+ * ============LICENSE_END============================================
+ *
+ * ECOMP is a trademark and service mark of AT&T Intellectual Property.
+ */
+package org.onap.portalapp.portal.transport;
+
+import java.io.Serializable;
+
+import javax.persistence.Column;
+import javax.persistence.Entity;
+import javax.persistence.Id;
+import javax.persistence.Table;
+
+
+/**
+ * This is to handle functional menu favorites
+ */
+@Entity
+@Table(name="fn_menu_favorites")
+public class FavoritesFunctionalMenuItem implements Serializable {
+ private static final long serialVersionUID = 1L;
+
+ @Id
+ @Column(name = "user_id")
+ public Long userId;
+
+ @Id
+ @Column(name = "menu_id")
+ public Long menuId;
+}
diff --git a/ecomp-portal-BE-common/src/main/java/org/onap/portalapp/portal/transport/FavoritesFunctionalMenuItemJson.java b/ecomp-portal-BE-common/src/main/java/org/onap/portalapp/portal/transport/FavoritesFunctionalMenuItemJson.java
new file mode 100644
index 00000000..73b01e29
--- /dev/null
+++ b/ecomp-portal-BE-common/src/main/java/org/onap/portalapp/portal/transport/FavoritesFunctionalMenuItemJson.java
@@ -0,0 +1,75 @@
+/*-
+ * ============LICENSE_START==========================================
+ * ONAP Portal
+ * ===================================================================
+ * Copyright (C) 2017 AT&T Intellectual Property. All rights reserved.
+ * ===================================================================
+ *
+ * Unless otherwise specified, all software contained herein is licensed
+ * under the Apache License, Version 2.0 (the "License");
+ * you may not use this software 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.
+ *
+ * Unless otherwise specified, all documentation contained herein is licensed
+ * under the Creative Commons License, Attribution 4.0 Intl. (the "License");
+ * you may not use this documentation except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * https://creativecommons.org/licenses/by/4.0/
+ *
+ * Unless required by applicable law or agreed to in writing, documentation
+ * 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.
+ *
+ * ============LICENSE_END============================================
+ *
+ * ECOMP is a trademark and service mark of AT&T Intellectual Property.
+ */
+package org.onap.portalapp.portal.transport;
+
+import java.io.Serializable;
+
+import javax.persistence.Column;
+import javax.persistence.Entity;
+import javax.persistence.Id;
+import javax.persistence.Table;
+import javax.persistence.Transient;
+
+
+
+/**
+ * This is to handle functional menu favorites
+ */
+@Entity
+@Table(name="fn_menu_favorites")
+public class FavoritesFunctionalMenuItemJson implements Serializable {
+
+ private static final long serialVersionUID = 1L;
+
+ @Id
+ @Column(name = "user_id")
+ public Long userId;
+
+ @Id
+ @Column(name = "menu_id")
+ public Long menuId;
+
+ @Column(name = "text")
+ public String text;
+
+ @Column(name = "url")
+ public String url;
+
+ @Transient
+ public Boolean restrictedApp;
+}
diff --git a/ecomp-portal-BE-common/src/main/java/org/onap/portalapp/portal/transport/FieldsValidator.java b/ecomp-portal-BE-common/src/main/java/org/onap/portalapp/portal/transport/FieldsValidator.java
new file mode 100644
index 00000000..7c9b6961
--- /dev/null
+++ b/ecomp-portal-BE-common/src/main/java/org/onap/portalapp/portal/transport/FieldsValidator.java
@@ -0,0 +1,143 @@
+/*-
+ * ============LICENSE_START==========================================
+ * ONAP Portal
+ * ===================================================================
+ * Copyright (C) 2017 AT&T Intellectual Property. All rights reserved.
+ * ===================================================================
+ *
+ * Unless otherwise specified, all software contained herein is licensed
+ * under the Apache License, Version 2.0 (the "License");
+ * you may not use this software 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.
+ *
+ * Unless otherwise specified, all documentation contained herein is licensed
+ * under the Creative Commons License, Attribution 4.0 Intl. (the "License");
+ * you may not use this documentation except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * https://creativecommons.org/licenses/by/4.0/
+ *
+ * Unless required by applicable law or agreed to in writing, documentation
+ * 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.
+ *
+ * ============LICENSE_END============================================
+ *
+ * ECOMP is a trademark and service mark of AT&T Intellectual Property.
+ */
+package org.onap.portalapp.portal.transport;
+
+import java.util.ArrayList;
+import java.util.List;
+
+import javax.servlet.http.HttpServletResponse;
+
+public class FieldsValidator {
+
+ public Long httpStatusCode = new Long(HttpServletResponse.SC_OK);
+
+ public Long errorCode;
+
+ public class FieldName {
+
+ public String name;
+
+ public FieldName(String name) {
+ this.name = name;
+ }
+
+ public String getName() {
+ return name;
+ }
+
+ public void setName(String name) {
+ this.name = name;
+ }
+
+ }
+
+
+ public List<FieldName> fields = new ArrayList<FieldName>();
+
+ public void addProblematicFieldName(String name) {
+ fields.add(new FieldName(name));
+ }
+
+ public Long getHttpStatusCode() {
+ return httpStatusCode;
+ }
+
+ public void setHttpStatusCode(Long httpStatusCode) {
+ this.httpStatusCode = httpStatusCode;
+ }
+
+ public Long getErrorCode() {
+ return errorCode;
+ }
+
+ public void setErrorCode(Long errorCode) {
+ this.errorCode = errorCode;
+ }
+
+ public List<FieldName> getFields() {
+ return fields;
+ }
+
+ public void setFields(List<FieldName> fields) {
+ this.fields = fields;
+ }
+
+ @Override
+ public String toString() {
+ return "FieldsValidator [httpStatusCode=" + httpStatusCode + ", errorCode=" + errorCode + ", fields=" + fields
+ + "]";
+ }
+
+ @Override
+ public int hashCode() {
+ final int prime = 31;
+ int result = 1;
+ result = prime * result + ((errorCode == null) ? 0 : errorCode.hashCode());
+ result = prime * result + ((fields == null) ? 0 : fields.hashCode());
+ result = prime * result + ((httpStatusCode == null) ? 0 : httpStatusCode.hashCode());
+ return result;
+ }
+
+ @Override
+ public boolean equals(Object obj) {
+ if (this == obj)
+ return true;
+ if (obj == null)
+ return false;
+ if (getClass() != obj.getClass())
+ return false;
+ FieldsValidator other = (FieldsValidator) obj;
+ if (errorCode == null) {
+ if (other.errorCode != null)
+ return false;
+ } else if (!errorCode.equals(other.errorCode))
+ return false;
+ if (fields == null) {
+ if (other.fields != null)
+ return false;
+ } else if (!fields.equals(other.fields))
+ return false;
+ if (httpStatusCode == null) {
+ if (other.httpStatusCode != null)
+ return false;
+ } else if (!httpStatusCode.equals(other.httpStatusCode))
+ return false;
+ return true;
+ }
+
+}
diff --git a/ecomp-portal-BE-common/src/main/java/org/onap/portalapp/portal/transport/FunctionalMenuItem.java b/ecomp-portal-BE-common/src/main/java/org/onap/portalapp/portal/transport/FunctionalMenuItem.java
new file mode 100644
index 00000000..fcee6207
--- /dev/null
+++ b/ecomp-portal-BE-common/src/main/java/org/onap/portalapp/portal/transport/FunctionalMenuItem.java
@@ -0,0 +1,118 @@
+/*-
+ * ============LICENSE_START==========================================
+ * ONAP Portal
+ * ===================================================================
+ * Copyright (C) 2017 AT&T Intellectual Property. All rights reserved.
+ * ===================================================================
+ *
+ * Unless otherwise specified, all software contained herein is licensed
+ * under the Apache License, Version 2.0 (the "License");
+ * you may not use this software 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.
+ *
+ * Unless otherwise specified, all documentation contained herein is licensed
+ * under the Creative Commons License, Attribution 4.0 Intl. (the "License");
+ * you may not use this documentation except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * https://creativecommons.org/licenses/by/4.0/
+ *
+ * Unless required by applicable law or agreed to in writing, documentation
+ * 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.
+ *
+ * ============LICENSE_END============================================
+ *
+ * ECOMP is a trademark and service mark of AT&T Intellectual Property.
+ */
+package org.onap.portalapp.portal.transport;
+
+import java.io.Serializable;
+import java.util.List;
+
+import javax.persistence.Column;
+import javax.persistence.Entity;
+import javax.persistence.GeneratedValue;
+import javax.persistence.GenerationType;
+import javax.persistence.Id;
+import javax.persistence.Table;
+import javax.persistence.Transient;
+
+@Entity
+@Table(name="fn_menu_functional")
+public class FunctionalMenuItem implements Serializable {
+ public FunctionalMenuItem(){};
+
+ private static final long serialVersionUID = 1L;
+
+ @Id
+ @GeneratedValue(strategy=GenerationType.IDENTITY)
+ @Column(name = "MENU_ID")
+ public Long menuId;
+
+ @Column(name = "COLUMN_NUM")
+ public Integer column;
+
+ @Column(name = "TEXT")
+ public String text;
+
+ @Column(name = "PARENT_MENU_ID")
+ public Integer parentMenuId;
+
+ @Column(name = "URL")
+ public String url;
+
+ @Column(name="ACTIVE_YN")
+ public String active_yn;
+
+ @Transient
+ public Integer appid;
+
+ public List<Integer> getRoles() {
+ return roles;
+ }
+
+ public void setRoles(List<Integer> roles) {
+ this.roles = roles;
+ }
+
+ @Transient
+ private List<Integer> roles;
+
+ @Transient
+ public Boolean restrictedApp;
+
+ public void normalize() {
+ if (this.column == null)
+ this.column = new Integer(1);
+ this.text = (this.text == null) ? "" : this.text.trim();
+ if (this.parentMenuId == null)
+ this.parentMenuId = new Integer(-1);
+ this.url = (this.url == null) ? "" : this.url.trim();
+ }
+
+ @Override
+ public String toString() {
+ return "FunctionalMenuItem [menuId=" + menuId + ", column=" + column + ", text=" + text + ", parentMenuId="
+ + parentMenuId + ", url=" + url + ", active_yn=" + active_yn + ", appid=" + appid + ", roles=" + roles
+ + ", restrictedApp=" + restrictedApp + "]";
+ }
+
+ public void setUrl(String url) {
+ this.url = url;
+ }
+
+ public void setRestrictedApp(Boolean restrictedApp) {
+ this.restrictedApp = restrictedApp;
+ }
+}
diff --git a/ecomp-portal-BE-common/src/main/java/org/onap/portalapp/portal/transport/FunctionalMenuItemWithRoles.java b/ecomp-portal-BE-common/src/main/java/org/onap/portalapp/portal/transport/FunctionalMenuItemWithRoles.java
new file mode 100644
index 00000000..f1a48aca
--- /dev/null
+++ b/ecomp-portal-BE-common/src/main/java/org/onap/portalapp/portal/transport/FunctionalMenuItemWithRoles.java
@@ -0,0 +1,78 @@
+/*-
+ * ============LICENSE_START==========================================
+ * ONAP Portal
+ * ===================================================================
+ * Copyright (C) 2017 AT&T Intellectual Property. All rights reserved.
+ * ===================================================================
+ *
+ * Unless otherwise specified, all software contained herein is licensed
+ * under the Apache License, Version 2.0 (the "License");
+ * you may not use this software 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.
+ *
+ * Unless otherwise specified, all documentation contained herein is licensed
+ * under the Creative Commons License, Attribution 4.0 Intl. (the "License");
+ * you may not use this documentation except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * https://creativecommons.org/licenses/by/4.0/
+ *
+ * Unless required by applicable law or agreed to in writing, documentation
+ * 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.
+ *
+ * ============LICENSE_END============================================
+ *
+ * ECOMP is a trademark and service mark of AT&T Intellectual Property.
+ */
+package org.onap.portalapp.portal.transport;
+
+import java.io.Serializable;
+import java.util.List;
+
+// This type is used to read the Json in from the API call from the Front End
+public class FunctionalMenuItemWithRoles implements Serializable {
+ private static final long serialVersionUID = 1L;
+
+ public Long menuId;
+
+ public Integer column;
+
+ public String text;
+
+ public Integer parentMenuId;
+
+ public String url;
+
+ public Integer appid;
+
+ private List<Integer> roles;
+
+ public List<Integer> getRoles() {
+ return roles;
+ }
+
+ public void setRoles(List<Integer> roles) {
+ this.roles = roles;
+ }
+
+ public void normalize() {
+ if (this.column == null)
+ this.column = new Integer(1);
+ this.text = (this.text == null) ? "" : this.text.trim();
+ if (this.parentMenuId == null)
+ this.parentMenuId = new Integer(-1);
+ this.url = (this.url == null) ? "" : this.url.trim();
+ }
+
+}
diff --git a/ecomp-portal-BE-common/src/main/java/org/onap/portalapp/portal/transport/FunctionalMenuRole.java b/ecomp-portal-BE-common/src/main/java/org/onap/portalapp/portal/transport/FunctionalMenuRole.java
new file mode 100644
index 00000000..0f4a6b4f
--- /dev/null
+++ b/ecomp-portal-BE-common/src/main/java/org/onap/portalapp/portal/transport/FunctionalMenuRole.java
@@ -0,0 +1,133 @@
+/*-
+ * ============LICENSE_START==========================================
+ * ONAP Portal
+ * ===================================================================
+ * Copyright (C) 2017 AT&T Intellectual Property. All rights reserved.
+ * ===================================================================
+ *
+ * Unless otherwise specified, all software contained herein is licensed
+ * under the Apache License, Version 2.0 (the "License");
+ * you may not use this software 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.
+ *
+ * Unless otherwise specified, all documentation contained herein is licensed
+ * under the Creative Commons License, Attribution 4.0 Intl. (the "License");
+ * you may not use this documentation except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * https://creativecommons.org/licenses/by/4.0/
+ *
+ * Unless required by applicable law or agreed to in writing, documentation
+ * 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.
+ *
+ * ============LICENSE_END============================================
+ *
+ * ECOMP is a trademark and service mark of AT&T Intellectual Property.
+ */
+package org.onap.portalapp.portal.transport;
+import java.io.Serializable;
+
+import javax.persistence.Column;
+import javax.persistence.Entity;
+import javax.persistence.GeneratedValue;
+import javax.persistence.GenerationType;
+import javax.persistence.Id;
+import javax.persistence.Table;
+
+@Entity
+@Table(name="fn_menu_functional_roles")
+public class FunctionalMenuRole implements Serializable {
+ private static final long serialVersionUID = 1L;
+
+ @Id
+ @GeneratedValue(strategy=GenerationType.IDENTITY)
+ @Column(name = "ID")
+ public Integer id;
+
+ @Column(name = "MENU_ID")
+ public Long menuId;
+
+ @Column(name = "APP_ID")
+ public Integer appId;
+
+ @Column(name = "ROLE_ID")
+ public Integer roleId;
+
+ public Integer getId() {
+ return id;
+ }
+
+ public void setId(Integer id) {
+ this.id = id;
+ }
+
+ public Long getMenuId() {
+ return menuId;
+ }
+
+ public void setMenuId(Long menuId) {
+ this.menuId = menuId;
+ }
+
+ public Integer getAppId() {
+ return appId;
+ }
+
+ public void setAppId(Integer appId) {
+ this.appId = appId;
+ }
+
+ public Integer getRoleId() {
+ return roleId;
+ }
+
+ public void setRoleId(Integer roleId) {
+ this.roleId = roleId;
+ }
+
+ @Override
+ public String toString() {
+ return "FunctionalMenuRole [id=" + id + ", menuId=" + menuId + ", appId=" + appId + ", roleId=" + roleId + "]";
+ }
+
+ @Override
+ public int hashCode() {
+ final int prime = 31;
+ int result = 1;
+ result = prime * result + ((appId == null) ? 0 : appId.hashCode());
+ result = prime * result + ((id == null) ? 0 : id.hashCode());
+ result = prime * result + ((menuId == null) ? 0 : menuId.hashCode());
+ result = prime * result + ((roleId == null) ? 0 : roleId.hashCode());
+ return result;
+ }
+
+ @Override
+ public boolean equals(Object o) {
+
+ if (o == this) return true;
+ if (!(o instanceof FunctionalMenuRole)) {
+ return false;
+ }
+ FunctionalMenuRole functionalMenuRole = (FunctionalMenuRole) o;
+ System.out.println("test");
+ return id.equals(functionalMenuRole.getId()) &&
+ menuId.equals(functionalMenuRole.menuId) &&
+ appId.equals(functionalMenuRole.appId) &&
+ roleId.equals(functionalMenuRole.roleId) ;
+ }
+
+
+
+
+}
diff --git a/ecomp-portal-BE-common/src/main/java/org/onap/portalapp/portal/transport/GlobalRoleWithApplicationRoleFunction.java b/ecomp-portal-BE-common/src/main/java/org/onap/portalapp/portal/transport/GlobalRoleWithApplicationRoleFunction.java
new file mode 100644
index 00000000..b872409e
--- /dev/null
+++ b/ecomp-portal-BE-common/src/main/java/org/onap/portalapp/portal/transport/GlobalRoleWithApplicationRoleFunction.java
@@ -0,0 +1,130 @@
+/*-
+ * ============LICENSE_START==========================================
+ * ONAP Portal
+ * ===================================================================
+ * Copyright (C) 2017 AT&T Intellectual Property. All rights reserved.
+ * ===================================================================
+ *
+ * Unless otherwise specified, all software contained herein is licensed
+ * under the Apache License, Version 2.0 (the "License");
+ * you may not use this software 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.
+ *
+ * Unless otherwise specified, all documentation contained herein is licensed
+ * under the Creative Commons License, Attribution 4.0 Intl. (the "License");
+ * you may not use this documentation except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * https://creativecommons.org/licenses/by/4.0/
+ *
+ * Unless required by applicable law or agreed to in writing, documentation
+ * 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.
+ *
+ * ============LICENSE_END============================================
+ *
+ * ECOMP is a trademark and service mark of AT&T Intellectual Property.
+ */
+
+package org.onap.portalapp.portal.transport;
+
+import java.io.Serializable;
+
+import javax.persistence.Column;
+import javax.persistence.Entity;
+import javax.persistence.Id;
+
+@Entity
+public class GlobalRoleWithApplicationRoleFunction implements Serializable {
+
+ /**
+ *
+ */
+ private static final long serialVersionUID = 1L;
+ @Id
+ @Column(name = "role_id")
+ private Long roleId;
+ @Id
+ @Column(name = "role_name")
+ private String roleName;
+ @Id
+ @Column(name = "active_Yn")
+ private boolean active;
+ @Id
+ @Column(name = "priority")
+ private Integer priority;
+ @Id
+ @Column(name = "function_cd")
+ private String functionCd;
+ @Id
+ @Column(name = "function_name")
+ private String functionName;
+ @Id
+ @Column(name = "app_id")
+ private long appId;
+
+ @Id
+ @Column(name = "role_app_id")
+ private long roleAppId;
+
+ public Long getRoleId() {
+ return roleId;
+ }
+ public void setRoleId(long roleId) {
+ this.roleId = roleId;
+ }
+ public String getRoleName() {
+ return roleName;
+ }
+ public void setRoleName(String roleName) {
+ this.roleName = roleName;
+ }
+ public boolean isActive() {
+ return active;
+ }
+ public void setActive(boolean active) {
+ this.active = active;
+ }
+ public Integer getPriority() {
+ return priority;
+ }
+ public void setPriority(Integer priority) {
+ this.priority = priority;
+ }
+ public String getFunctionCd() {
+ return functionCd;
+ }
+ public void setFunctionCd(String functionCd) {
+ this.functionCd = functionCd;
+ }
+ public String getFunctionName() {
+ return functionName;
+ }
+ public void setFunctionName(String functionName) {
+ this.functionName = functionName;
+ }
+ public long getAppId() {
+ return appId;
+ }
+ public void setAppId(long appId) {
+ this.appId = appId;
+ }
+ @Override
+ public String toString() {
+ return "GlobalRoleWithApplicationRoleFucnction [roleId=" + roleId + ", roleName=" + roleName + ", active="
+ + active + ", priority=" + priority + ", functionCd=" + functionCd + ", functionName=" + functionName
+ + ", appId=" + appId + "]";
+ }
+
+
+}
diff --git a/ecomp-portal-BE-common/src/main/java/org/onap/portalapp/portal/transport/LocalRole.java b/ecomp-portal-BE-common/src/main/java/org/onap/portalapp/portal/transport/LocalRole.java
new file mode 100644
index 00000000..3d9ec973
--- /dev/null
+++ b/ecomp-portal-BE-common/src/main/java/org/onap/portalapp/portal/transport/LocalRole.java
@@ -0,0 +1,77 @@
+/*-
+ * ============LICENSE_START==========================================
+ * ONAP Portal
+ * ===================================================================
+ * Copyright (C) 2017 AT&T Intellectual Property. All rights reserved.
+ * ===================================================================
+ *
+ * Unless otherwise specified, all software contained herein is licensed
+ * under the Apache License, Version 2.0 (the "License");
+ * you may not use this software 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.
+ *
+ * Unless otherwise specified, all documentation contained herein is licensed
+ * under the Creative Commons License, Attribution 4.0 Intl. (the "License");
+ * you may not use this documentation except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * https://creativecommons.org/licenses/by/4.0/
+ *
+ * Unless required by applicable law or agreed to in writing, documentation
+ * 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.
+ *
+ * ============LICENSE_END============================================
+ *
+ * ECOMP is a trademark and service mark of AT&T Intellectual Property.
+ */
+package org.onap.portalapp.portal.transport;
+
+import java.io.Serializable;
+
+import javax.persistence.Column;
+import javax.persistence.Entity;
+import javax.persistence.Id;
+
+@Entity
+public class LocalRole implements Serializable {
+ private static final long serialVersionUID = 1L;
+
+ @Id
+ @Column(name = "ROLE_ID")
+ public Integer roleId;
+
+ @Column(name = "ROLE_NAME")
+ public String rolename;
+
+ public void normalize() {
+ this.rolename = (this.rolename == null) ? "" : this.rolename.trim();
+ }
+
+ public Integer getRoleId() {
+ return roleId;
+ }
+
+ public void setRoleId(Integer roleId) {
+ this.roleId = roleId;
+ }
+
+ public String getRolename() {
+ return rolename;
+ }
+
+ public void setRolename(String rolename) {
+ this.rolename = rolename;
+ }
+
+}
diff --git a/ecomp-portal-BE-common/src/main/java/org/onap/portalapp/portal/transport/OnboardingApp.java b/ecomp-portal-BE-common/src/main/java/org/onap/portalapp/portal/transport/OnboardingApp.java
new file mode 100644
index 00000000..8347d4f0
--- /dev/null
+++ b/ecomp-portal-BE-common/src/main/java/org/onap/portalapp/portal/transport/OnboardingApp.java
@@ -0,0 +1,123 @@
+/*-
+ * ============LICENSE_START==========================================
+ * ONAP Portal
+ * ===================================================================
+ * Copyright (C) 2017 AT&T Intellectual Property. All rights reserved.
+ * ===================================================================
+ *
+ * Unless otherwise specified, all software contained herein is licensed
+ * under the Apache License, Version 2.0 (the "License");
+ * you may not use this software 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.
+ *
+ * Unless otherwise specified, all documentation contained herein is licensed
+ * under the Creative Commons License, Attribution 4.0 Intl. (the "License");
+ * you may not use this documentation except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * https://creativecommons.org/licenses/by/4.0/
+ *
+ * Unless required by applicable law or agreed to in writing, documentation
+ * 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.
+ *
+ * ============LICENSE_END============================================
+ *
+ * ECOMP is a trademark and service mark of AT&T Intellectual Property.
+ */
+package org.onap.portalapp.portal.transport;
+
+/**
+ * Model of rows in the fn_app table; serialized as a message add or update an
+ * on-boarded application.
+ */
+public class OnboardingApp {
+
+ public Long id;
+
+ public String name;
+
+ public String imageUrl;
+
+ public String imageLink;
+
+ public String description;
+
+ public String notes;
+
+ public String url;
+
+ public String alternateUrl;
+
+ public String restUrl;
+
+ public Boolean isOpen;
+
+ public Boolean isEnabled;
+
+ public Long motsId;
+
+ public String myLoginsAppName;
+
+ public String myLoginsAppOwner;
+
+ public String username;
+
+ public String appPassword;
+
+ public String thumbnail;
+
+ public String uebTopicName;
+
+ public String uebKey;
+
+ public String uebSecret;
+
+ public Boolean restrictedApp;
+
+ public Boolean isCentralAuth;
+
+ public String nameSpace;
+
+ /**
+ * Sets the name, myLoginsAppName, myLoginsAppOwner, username and
+ * appPassword fields to the empty string OR trims leading/trailing space,
+ * as appropriate.
+ */
+ public void normalize() {
+ this.name = (this.name == null) ? "" : this.name.trim();
+ this.myLoginsAppName = (this.myLoginsAppName == null) ? "" : this.myLoginsAppName.trim();
+ this.myLoginsAppOwner = (this.myLoginsAppOwner == null) ? "" : this.myLoginsAppOwner.trim();
+ this.username = (this.username == null) ? "" : this.username.trim();
+ this.appPassword = (this.appPassword == null) ? "" : this.appPassword.trim();
+ }
+
+ public void setUebTopicName(String topicName) {
+ this.uebTopicName = topicName;
+ }
+
+ public void setUebKey(String key) {
+ this.uebKey = key;
+ }
+
+ public void setUebSecret(String secret) {
+ this.uebSecret = secret;
+ }
+
+ // Hide the implementation of restricted and normal app from the front end.
+ // The json sent and received will include restrictedApp but not appType.
+
+ public void setRestrictedApp(Boolean restrictedApp) {
+ this.restrictedApp = restrictedApp;
+ }
+}
diff --git a/ecomp-portal-BE-common/src/main/java/org/onap/portalapp/portal/transport/OnboardingWidget.java b/ecomp-portal-BE-common/src/main/java/org/onap/portalapp/portal/transport/OnboardingWidget.java
new file mode 100644
index 00000000..4205324c
--- /dev/null
+++ b/ecomp-portal-BE-common/src/main/java/org/onap/portalapp/portal/transport/OnboardingWidget.java
@@ -0,0 +1,83 @@
+/*-
+ * ============LICENSE_START==========================================
+ * ONAP Portal
+ * ===================================================================
+ * Copyright (C) 2017 AT&T Intellectual Property. All rights reserved.
+ * ===================================================================
+ *
+ * Unless otherwise specified, all software contained herein is licensed
+ * under the Apache License, Version 2.0 (the "License");
+ * you may not use this software 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.
+ *
+ * Unless otherwise specified, all documentation contained herein is licensed
+ * under the Creative Commons License, Attribution 4.0 Intl. (the "License");
+ * you may not use this documentation except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * https://creativecommons.org/licenses/by/4.0/
+ *
+ * Unless required by applicable law or agreed to in writing, documentation
+ * 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.
+ *
+ * ============LICENSE_END============================================
+ *
+ * ECOMP is a trademark and service mark of AT&T Intellectual Property.
+ */
+package org.onap.portalapp.portal.transport;
+
+import java.io.Serializable;
+
+import javax.persistence.Column;
+import javax.persistence.Entity;
+import javax.persistence.Id;
+
+@Entity
+public class OnboardingWidget implements Serializable {
+
+ private static final long serialVersionUID = 1L;
+
+ @Id
+ @Column(name = "WIDGET_ID")
+ public Long id;
+
+ @Column(name = "WDG_NAME")
+ public String name;
+
+ @Column(name = "APP_ID")
+ public Long appId;
+
+ @Column(name = "APP_NAME")
+ public String appName;
+
+ @Column(name = "WDG_WIDTH")
+ public Integer width;
+
+ @Column(name = "WDG_HEIGHT")
+ public Integer height;
+
+ @Column(name = "WDG_URL")
+ public String url;
+
+ public void normalize() {
+ this.name = (this.name == null) ? "" : this.name.trim();
+ this.appName = (this.appName == null) ? "" : this.appName.trim();
+ if (this.width == null)
+ this.width = new Integer(0);
+ if (this.height == null)
+ this.height = new Integer(0);
+ this.url = (this.url == null) ? "" : this.url.trim();
+ }
+
+}
diff --git a/ecomp-portal-BE-common/src/main/java/org/onap/portalapp/portal/transport/PortalAdmin.java b/ecomp-portal-BE-common/src/main/java/org/onap/portalapp/portal/transport/PortalAdmin.java
new file mode 100644
index 00000000..f3ec7794
--- /dev/null
+++ b/ecomp-portal-BE-common/src/main/java/org/onap/portalapp/portal/transport/PortalAdmin.java
@@ -0,0 +1,103 @@
+/*-
+ * ============LICENSE_START==========================================
+ * ONAP Portal
+ * ===================================================================
+ * Copyright (C) 2017 AT&T Intellectual Property. All rights reserved.
+ * ===================================================================
+ *
+ * Unless otherwise specified, all software contained herein is licensed
+ * under the Apache License, Version 2.0 (the "License");
+ * you may not use this software 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.
+ *
+ * Unless otherwise specified, all documentation contained herein is licensed
+ * under the Creative Commons License, Attribution 4.0 Intl. (the "License");
+ * you may not use this documentation except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * https://creativecommons.org/licenses/by/4.0/
+ *
+ * Unless required by applicable law or agreed to in writing, documentation
+ * 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.
+ *
+ * ============LICENSE_END============================================
+ *
+ * ECOMP is a trademark and service mark of AT&T Intellectual Property.
+ */
+package org.onap.portalapp.portal.transport;
+
+import java.io.Serializable;
+
+import javax.persistence.Column;
+import javax.persistence.Entity;
+import javax.persistence.GeneratedValue;
+import javax.persistence.GenerationType;
+import javax.persistence.Id;
+import javax.persistence.Table;
+
+/**
+ * This is to handle portal admins
+ */
+@Entity
+@Table(name = "fn_user")
+public class PortalAdmin implements Serializable {
+ private static final long serialVersionUID = 1L;
+
+ @Id
+ @GeneratedValue(strategy = GenerationType.IDENTITY)
+ @Column(name = "user_id")
+ public Long userId;
+
+ @Column(name = "login_id")
+ public String loginId;
+
+ @Column(name = "first_name")
+ public String firstName;
+
+ @Column(name = "last_name")
+ public String lastName;
+
+ public Long getUserId() {
+ return userId;
+ }
+
+ public void setUserId(Long userId) {
+ this.userId = userId;
+ }
+
+ public String getLoginId() {
+ return loginId;
+ }
+
+ public void setLoginId(String loginId) {
+ this.loginId = loginId;
+ }
+
+ public String getFirstName() {
+ return firstName;
+ }
+
+ public void setFirstName(String firstName) {
+ this.firstName = firstName;
+ }
+
+ public String getLastName() {
+ return lastName;
+ }
+
+ public void setLastName(String lastName) {
+ this.lastName = lastName;
+ }
+
+}
diff --git a/ecomp-portal-BE-common/src/main/java/org/onap/portalapp/portal/transport/PortalAdminUserRole.java b/ecomp-portal-BE-common/src/main/java/org/onap/portalapp/portal/transport/PortalAdminUserRole.java
new file mode 100644
index 00000000..a79075b7
--- /dev/null
+++ b/ecomp-portal-BE-common/src/main/java/org/onap/portalapp/portal/transport/PortalAdminUserRole.java
@@ -0,0 +1,66 @@
+/*-
+ * ============LICENSE_START==========================================
+ * ONAP Portal
+ * ===================================================================
+ * Copyright (C) 2017 AT&T Intellectual Property. All rights reserved.
+ * ===================================================================
+ *
+ * Unless otherwise specified, all software contained herein is licensed
+ * under the Apache License, Version 2.0 (the "License");
+ * you may not use this software 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.
+ *
+ * Unless otherwise specified, all documentation contained herein is licensed
+ * under the Creative Commons License, Attribution 4.0 Intl. (the "License");
+ * you may not use this documentation except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * https://creativecommons.org/licenses/by/4.0/
+ *
+ * Unless required by applicable law or agreed to in writing, documentation
+ * 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.
+ *
+ * ============LICENSE_END============================================
+ *
+ * ECOMP is a trademark and service mark of AT&T Intellectual Property.
+ */
+package org.onap.portalapp.portal.transport;
+
+import java.io.Serializable;
+
+import javax.persistence.Column;
+import javax.persistence.Entity;
+import javax.persistence.Id;
+import javax.persistence.Table;
+
+/**
+ * This is to handle portal admins
+ */
+@Entity
+@Table(name="fn_user_role")
+public class PortalAdminUserRole implements Serializable{
+ private static final long serialVersionUID = 1L;
+
+ @Id
+ @Column(name = "user_id")
+ public Long userId;
+
+ @Id
+ @Column(name = "role_id")
+ public Long roleId;
+
+ @Column(name = "app_id")
+ public Long appId;
+
+}
diff --git a/ecomp-portal-BE-common/src/main/java/org/onap/portalapp/portal/transport/ProfileDetail.java b/ecomp-portal-BE-common/src/main/java/org/onap/portalapp/portal/transport/ProfileDetail.java
new file mode 100644
index 00000000..d1901899
--- /dev/null
+++ b/ecomp-portal-BE-common/src/main/java/org/onap/portalapp/portal/transport/ProfileDetail.java
@@ -0,0 +1,97 @@
+/*-
+ * ============LICENSE_START==========================================
+ * ONAP Portal
+ * ===================================================================
+ * Copyright (C) 2017 AT&T Intellectual Property. All rights reserved.
+ * ===================================================================
+ *
+ * Unless otherwise specified, all software contained herein is licensed
+ * under the Apache License, Version 2.0 (the "License");
+ * you may not use this software 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.
+ *
+ * Unless otherwise specified, all documentation contained herein is licensed
+ * under the Creative Commons License, Attribution 4.0 Intl. (the "License");
+ * you may not use this documentation except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * https://creativecommons.org/licenses/by/4.0/
+ *
+ * Unless required by applicable law or agreed to in writing, documentation
+ * 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.
+ *
+ * ============LICENSE_END============================================
+ *
+ * ECOMP is a trademark and service mark of AT&T Intellectual Property.
+ */
+package org.onap.portalapp.portal.transport;
+
+public class ProfileDetail {
+
+ private String firstName;
+ private String lastName;
+ private String middleName;
+ private String email;
+ private String loginId;
+ private String loginPassword;
+
+ public ProfileDetail(){}
+ public ProfileDetail(String firstName, String lastName, String middleName, String email, String loginId, String loginPassword) {
+ this.firstName = firstName;
+ this.lastName = lastName;
+ this.middleName = middleName;
+ this.email = email;
+ this.loginId = loginId;
+ this.loginPassword = loginPassword;
+ }
+
+ public String getFirstName() {
+ return firstName;
+ }
+ public void setFirstName(String firstName) {
+ this.firstName = firstName;
+ }
+ public String getLastName() {
+ return lastName;
+ }
+ public void setLastName(String lastName) {
+ this.lastName = lastName;
+ }
+ public String getMiddleName() {
+ return middleName;
+ }
+ public void setMiddleName(String middleName) {
+ this.middleName = middleName;
+ }
+ public String getEmail() {
+ return email;
+ }
+ public void setEmail(String email) {
+ this.email = email;
+ }
+ public String getLoginId() {
+ return loginId;
+ }
+ public void setLoginId(String loginId) {
+ this.loginId = loginId;
+ }
+ public String getLoginPassword() {
+ return loginPassword;
+ }
+ public void setLoginPassword(String loginPassword) {
+ this.loginPassword = loginPassword;
+ }
+
+
+}
diff --git a/ecomp-portal-BE-common/src/main/java/org/onap/portalapp/portal/transport/RemoteRole.java b/ecomp-portal-BE-common/src/main/java/org/onap/portalapp/portal/transport/RemoteRole.java
new file mode 100644
index 00000000..a86f10fc
--- /dev/null
+++ b/ecomp-portal-BE-common/src/main/java/org/onap/portalapp/portal/transport/RemoteRole.java
@@ -0,0 +1,91 @@
+/*-
+ * ============LICENSE_START==========================================
+ * ONAP Portal
+ * ===================================================================
+ * Copyright (C) 2017 AT&T Intellectual Property. All rights reserved.
+ * ===================================================================
+ *
+ * Unless otherwise specified, all software contained herein is licensed
+ * under the Apache License, Version 2.0 (the "License");
+ * you may not use this software 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.
+ *
+ * Unless otherwise specified, all documentation contained herein is licensed
+ * under the Creative Commons License, Attribution 4.0 Intl. (the "License");
+ * you may not use this documentation except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * https://creativecommons.org/licenses/by/4.0/
+ *
+ * Unless required by applicable law or agreed to in writing, documentation
+ * 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.
+ *
+ * ============LICENSE_END============================================
+ *
+ * ECOMP is a trademark and service mark of AT&T Intellectual Property.
+ */
+package org.onap.portalapp.portal.transport;
+
+public class RemoteRole {
+
+ private Long id;
+ private String name;
+
+ public Long getId() {
+ return id;
+ }
+ public void setId(Long id) {
+ this.id = id;
+ }
+ public String getName() {
+ return name;
+ }
+ public void setName(String name) {
+ this.name = name;
+ }
+
+ @Override
+ public String toString() {
+ return "RemoteRole [id=" + id + ", name=" + name + "]";
+ }
+ @Override
+ public int hashCode() {
+ final int prime = 31;
+ int result = 1;
+ result = prime * result + ((id == null) ? 0 : id.hashCode());
+ result = prime * result + ((name == null) ? 0 : name.hashCode());
+ return result;
+ }
+ @Override
+ public boolean equals(Object obj) {
+ if (this == obj)
+ return true;
+ if (obj == null)
+ return false;
+ if (getClass() != obj.getClass())
+ return false;
+ RemoteRole other = (RemoteRole) obj;
+ if (id == null) {
+ if (other.id != null)
+ return false;
+ } else if (!id.equals(other.id))
+ return false;
+ if (name == null) {
+ if (other.name != null)
+ return false;
+ } else if (!name.equals(other.name))
+ return false;
+ return true;
+ }
+}
diff --git a/ecomp-portal-BE-common/src/main/java/org/onap/portalapp/portal/transport/RemoteUserWithRoles.java b/ecomp-portal-BE-common/src/main/java/org/onap/portalapp/portal/transport/RemoteUserWithRoles.java
new file mode 100644
index 00000000..39127c12
--- /dev/null
+++ b/ecomp-portal-BE-common/src/main/java/org/onap/portalapp/portal/transport/RemoteUserWithRoles.java
@@ -0,0 +1,214 @@
+/*-
+ * ============LICENSE_START==========================================
+ * ONAP Portal
+ * ===================================================================
+ * Copyright (C) 2017 AT&T Intellectual Property. All rights reserved.
+ * ===================================================================
+ *
+ * Unless otherwise specified, all software contained herein is licensed
+ * under the Apache License, Version 2.0 (the "License");
+ * you may not use this software 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.
+ *
+ * Unless otherwise specified, all documentation contained herein is licensed
+ * under the Creative Commons License, Attribution 4.0 Intl. (the "License");
+ * you may not use this documentation except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * https://creativecommons.org/licenses/by/4.0/
+ *
+ * Unless required by applicable law or agreed to in writing, documentation
+ * 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.
+ *
+ * ============LICENSE_END============================================
+ *
+ * ECOMP is a trademark and service mark of AT&T Intellectual Property.
+ */
+package org.onap.portalapp.portal.transport;
+
+import java.util.ArrayList;
+import java.util.List;
+
+/**
+ * User description which we receive in response from request to remote
+ * application: applicationsRestClientService.get(RemoteUserWithRoles[].class,
+ * appId, "/users"). It contains the most important info about remote
+ * application user including his roles in this application.
+ */
+public class RemoteUserWithRoles {
+
+ private Long orgId;
+
+ private Long managerId;
+
+ private String firstName;
+
+ private String middleInitial;
+
+ private String lastName;
+
+ private String phone;
+
+ private String email;
+
+ private String hrid;
+
+ private String orgUserId;
+
+ private String orgCode;
+
+ private String orgManagerUserId;
+
+ private String jobTitle;
+
+ private String loginId;
+
+ private Boolean active;
+
+ private List<RemoteRole> roles = new ArrayList<RemoteRole>();
+
+ public Long getOrgId() {
+ return orgId;
+ }
+
+ public void setOrgId(Long orgId) {
+ this.orgId = orgId;
+ }
+
+ public Long getManagerId() {
+ return managerId;
+ }
+
+ public void setManagerId(Long managerId) {
+ this.managerId = managerId;
+ }
+
+ public String getFirstName() {
+ return firstName;
+ }
+
+ public void setFirstName(String firstName) {
+ this.firstName = firstName;
+ }
+
+ public String getMiddleInitial() {
+ return middleInitial;
+ }
+
+ public void setMiddleInitial(String middleInitial) {
+ this.middleInitial = middleInitial;
+ }
+
+ public String getLastName() {
+ return lastName;
+ }
+
+ public void setLastName(String lastName) {
+ this.lastName = lastName;
+ }
+
+ public String getPhone() {
+ return phone;
+ }
+
+ public void setPhone(String phone) {
+ this.phone = phone;
+ }
+
+ public String getEmail() {
+ return email;
+ }
+
+ public void setEmail(String email) {
+ this.email = email;
+ }
+
+ public String getHrid() {
+ return hrid;
+ }
+
+ public void setHrid(String hrid) {
+ this.hrid = hrid;
+ }
+
+ public String getOrgUserId() {
+ return orgUserId;
+ }
+
+ public void setOrgUserId(String orgUserId) {
+ if(this.orgUserId == null)
+ this.orgUserId = orgUserId;
+ }
+
+ public String getOrgCode() {
+ return orgCode;
+ }
+
+ public void setOrgCode(String orgCode) {
+ this.orgCode = orgCode;
+ }
+
+ public String getOrgManagerUserId() {
+ return orgManagerUserId;
+ }
+
+ public void setOrgManagerUserId(String orgManagerUserId) {
+ this.orgManagerUserId = orgManagerUserId;
+ }
+
+ public String getJobTitle() {
+ return jobTitle;
+ }
+
+ public void setJobTitle(String jobTitle) {
+ this.jobTitle = jobTitle;
+ }
+
+ public String getLoginId() {
+ return loginId;
+ }
+
+ public void setLoginId(String loginId) {
+ this.loginId = loginId;
+ }
+
+ public Boolean getActive() {
+ return active;
+ }
+
+ public void setActive(Boolean active) {
+ this.active = active;
+ }
+
+ public List<RemoteRole> getRoles() {
+ return roles;
+ }
+
+ public void setRoles(List<RemoteRole> roles) {
+ this.roles = roles;
+ }
+
+ @Override
+ public String toString() {
+ return "RemoteUserWithRoles [orgId=" + orgId + ", managerId=" + managerId + ", firstName=" + firstName
+ + ", middleInitial=" + middleInitial + ", lastName=" + lastName + ", phone=" + phone + ", email="
+ + email + ", hrid=" + hrid + ", orgUserId=" + orgUserId + ", orgCode=" + orgCode + ", orgManagerUserId="
+ + orgManagerUserId + ", jobTitle=" + jobTitle + ", loginId=" + loginId + ", active=" + active
+ + ", roles=" + roles + "]";
+ }
+
+
+
+
+}
diff --git a/ecomp-portal-BE-common/src/main/java/org/onap/portalapp/portal/transport/RoleInAppForUser.java b/ecomp-portal-BE-common/src/main/java/org/onap/portalapp/portal/transport/RoleInAppForUser.java
new file mode 100644
index 00000000..12fc0ab0
--- /dev/null
+++ b/ecomp-portal-BE-common/src/main/java/org/onap/portalapp/portal/transport/RoleInAppForUser.java
@@ -0,0 +1,123 @@
+/*-
+ * ============LICENSE_START==========================================
+ * ONAP Portal
+ * ===================================================================
+ * Copyright (C) 2017 AT&T Intellectual Property. All rights reserved.
+ * ===================================================================
+ *
+ * Unless otherwise specified, all software contained herein is licensed
+ * under the Apache License, Version 2.0 (the "License");
+ * you may not use this software 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.
+ *
+ * Unless otherwise specified, all documentation contained herein is licensed
+ * under the Creative Commons License, Attribution 4.0 Intl. (the "License");
+ * you may not use this documentation except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * https://creativecommons.org/licenses/by/4.0/
+ *
+ * Unless required by applicable law or agreed to in writing, documentation
+ * 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.
+ *
+ * ============LICENSE_END============================================
+ *
+ * ECOMP is a trademark and service mark of AT&T Intellectual Property.
+ */
+package org.onap.portalapp.portal.transport;
+
+public class RoleInAppForUser {
+
+
+ public RoleInAppForUser() {
+ }
+
+ public RoleInAppForUser(Long id, String name) {
+ this.roleId = id;
+ this.roleName = name;
+ }
+
+ public Long roleId;
+
+ public String roleName;
+
+ public Boolean isApplied;
+
+ public Long getRoleId() {
+ return roleId;
+ }
+
+ public void setRoleId(Long roleId) {
+ this.roleId = roleId;
+ }
+
+ public String getRoleName() {
+ return roleName;
+ }
+
+ public void setRoleName(String roleName) {
+ this.roleName = roleName;
+ }
+
+ public Boolean getIsApplied() {
+ return isApplied;
+ }
+
+ public void setIsApplied(Boolean isApplied) {
+ this.isApplied = isApplied;
+ }
+
+ @Override
+ public String toString() {
+ return "RoleInAppForUser [roleId=" + roleId + ", roleName=" + roleName + ", isApplied=" + isApplied + "]";
+ }
+
+ @Override
+ public int hashCode() {
+ final int prime = 31;
+ int result = 1;
+ result = prime * result + ((isApplied == null) ? 0 : isApplied.hashCode());
+ result = prime * result + ((roleId == null) ? 0 : roleId.hashCode());
+ result = prime * result + ((roleName == null) ? 0 : roleName.hashCode());
+ return result;
+ }
+
+ @Override
+ public boolean equals(Object obj) {
+ if (this == obj)
+ return true;
+ if (obj == null)
+ return false;
+ if (getClass() != obj.getClass())
+ return false;
+ RoleInAppForUser other = (RoleInAppForUser) obj;
+ if (isApplied == null) {
+ if (other.isApplied != null)
+ return false;
+ } else if (!isApplied.equals(other.isApplied))
+ return false;
+ if (roleId == null) {
+ if (other.roleId != null)
+ return false;
+ } else if (!roleId.equals(other.roleId))
+ return false;
+ if (roleName == null) {
+ if (other.roleName != null)
+ return false;
+ } else if (!roleName.equals(other.roleName))
+ return false;
+ return true;
+ }
+
+}
diff --git a/ecomp-portal-BE-common/src/main/java/org/onap/portalapp/portal/transport/RolesInAppForUser.java b/ecomp-portal-BE-common/src/main/java/org/onap/portalapp/portal/transport/RolesInAppForUser.java
new file mode 100644
index 00000000..0d79020c
--- /dev/null
+++ b/ecomp-portal-BE-common/src/main/java/org/onap/portalapp/portal/transport/RolesInAppForUser.java
@@ -0,0 +1,51 @@
+/*-
+ * ============LICENSE_START==========================================
+ * ONAP Portal
+ * ===================================================================
+ * Copyright (C) 2017 AT&T Intellectual Property. All rights reserved.
+ * ===================================================================
+ *
+ * Unless otherwise specified, all software contained herein is licensed
+ * under the Apache License, Version 2.0 (the "License");
+ * you may not use this software 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.
+ *
+ * Unless otherwise specified, all documentation contained herein is licensed
+ * under the Creative Commons License, Attribution 4.0 Intl. (the "License");
+ * you may not use this documentation except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * https://creativecommons.org/licenses/by/4.0/
+ *
+ * Unless required by applicable law or agreed to in writing, documentation
+ * 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.
+ *
+ * ============LICENSE_END============================================
+ *
+ * ECOMP is a trademark and service mark of AT&T Intellectual Property.
+ */
+package org.onap.portalapp.portal.transport;
+
+import java.util.ArrayList;
+import java.util.List;
+
+public class RolesInAppForUser {
+
+ public String orgUserId;
+
+ public Long appId;
+
+ public List<RoleInAppForUser> roles = new ArrayList<RoleInAppForUser>();
+
+}
diff --git a/ecomp-portal-BE-common/src/main/java/org/onap/portalapp/portal/transport/UserApplicationRoles.java b/ecomp-portal-BE-common/src/main/java/org/onap/portalapp/portal/transport/UserApplicationRoles.java
new file mode 100644
index 00000000..3f88bc0e
--- /dev/null
+++ b/ecomp-portal-BE-common/src/main/java/org/onap/portalapp/portal/transport/UserApplicationRoles.java
@@ -0,0 +1,104 @@
+/*-
+ * ============LICENSE_START==========================================
+ * ONAP Portal
+ * ===================================================================
+ * Copyright (C) 2017 AT&T Intellectual Property. All rights reserved.
+ * ===================================================================
+ *
+ * Unless otherwise specified, all software contained herein is licensed
+ * under the Apache License, Version 2.0 (the "License");
+ * you may not use this software 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.
+ *
+ * Unless otherwise specified, all documentation contained herein is licensed
+ * under the Creative Commons License, Attribution 4.0 Intl. (the "License");
+ * you may not use this documentation except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * https://creativecommons.org/licenses/by/4.0/
+ *
+ * Unless required by applicable law or agreed to in writing, documentation
+ * 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.
+ *
+ * ============LICENSE_END============================================
+ *
+ * ECOMP is a trademark and service mark of AT&T Intellectual Property.
+ */
+package org.onap.portalapp.portal.transport;
+
+import java.util.ArrayList;
+import java.util.List;
+
+/**
+ * A specific application user and his application specific roles.
+ *
+ */
+public class UserApplicationRoles {
+
+ private Long appId;
+
+ private String orgUserId;
+
+ private String firstName;
+
+ private String lastName;
+
+ private List<RemoteRole> roles = new ArrayList<RemoteRole>();
+
+ public Long getAppId() {
+ return appId;
+ }
+
+ public void setAppId(Long appId) {
+ this.appId = appId;
+ }
+
+ public String getOrgUserId() {
+ return orgUserId;
+ }
+
+ public void setOrgUserId(String orgUserId) {
+ this.orgUserId = orgUserId;
+ }
+
+ public String getFirstName() {
+ return firstName;
+ }
+
+ public void setFirstName(String firstName) {
+ this.firstName = firstName;
+ }
+
+ public String getLastName() {
+ return lastName;
+ }
+
+ public void setLastName(String lastName) {
+ this.lastName = lastName;
+ }
+
+ public List<RemoteRole> getRoles() {
+ return roles;
+ }
+
+ public void setRoles(List<RemoteRole> roles) {
+ this.roles = roles;
+ }
+
+ @Override
+ public String toString() {
+ return "UserApplicationRoles [appId=" + appId + ", orgUserId=" + orgUserId + ", firstName=" + firstName
+ + ", lastName=" + lastName + ", roles=" + roles + "]";
+ }
+}
diff --git a/ecomp-portal-BE-common/src/main/java/org/onap/portalapp/portal/transport/UserWithNameSurnameTitle.java b/ecomp-portal-BE-common/src/main/java/org/onap/portalapp/portal/transport/UserWithNameSurnameTitle.java
new file mode 100644
index 00000000..dab2c5fd
--- /dev/null
+++ b/ecomp-portal-BE-common/src/main/java/org/onap/portalapp/portal/transport/UserWithNameSurnameTitle.java
@@ -0,0 +1,100 @@
+/*-
+ * ============LICENSE_START==========================================
+ * ONAP Portal
+ * ===================================================================
+ * Copyright (C) 2017 AT&T Intellectual Property. All rights reserved.
+ * ===================================================================
+ *
+ * Unless otherwise specified, all software contained herein is licensed
+ * under the Apache License, Version 2.0 (the "License");
+ * you may not use this software 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.
+ *
+ * Unless otherwise specified, all documentation contained herein is licensed
+ * under the Creative Commons License, Attribution 4.0 Intl. (the "License");
+ * you may not use this documentation except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * https://creativecommons.org/licenses/by/4.0/
+ *
+ * Unless required by applicable law or agreed to in writing, documentation
+ * 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.
+ *
+ * ============LICENSE_END============================================
+ *
+ * ECOMP is a trademark and service mark of AT&T Intellectual Property.
+ */
+package org.onap.portalapp.portal.transport;
+
+public class UserWithNameSurnameTitle {
+
+ public String orgUserId;
+
+ public String firstName;
+
+ public String lastName;
+
+ public String jobTitle;
+
+ public UserWithNameSurnameTitle(String orgUserId, String firstName, String lastName, String jobTitle) {
+ this.orgUserId = orgUserId;
+ this.firstName = firstName;
+ this.lastName = lastName;
+ this.jobTitle = jobTitle;
+ }
+
+ @Override
+ public int hashCode() {
+ final int prime = 31;
+ int result = 1;
+ result = prime * result + ((firstName == null) ? 0 : firstName.hashCode());
+ result = prime * result + ((jobTitle == null) ? 0 : jobTitle.hashCode());
+ result = prime * result + ((lastName == null) ? 0 : lastName.hashCode());
+ result = prime * result + ((orgUserId == null) ? 0 : orgUserId.hashCode());
+ return result;
+ }
+
+ @Override
+ public boolean equals(Object obj) {
+ if (this == obj)
+ return true;
+ if (obj == null)
+ return false;
+ if (getClass() != obj.getClass())
+ return false;
+ UserWithNameSurnameTitle other = (UserWithNameSurnameTitle) obj;
+ if (firstName == null) {
+ if (other.firstName != null)
+ return false;
+ } else if (!firstName.equals(other.firstName))
+ return false;
+ if (jobTitle == null) {
+ if (other.jobTitle != null)
+ return false;
+ } else if (!jobTitle.equals(other.jobTitle))
+ return false;
+ if (lastName == null) {
+ if (other.lastName != null)
+ return false;
+ } else if (!lastName.equals(other.lastName))
+ return false;
+ if (orgUserId == null) {
+ if (other.orgUserId != null)
+ return false;
+ } else if (!orgUserId.equals(other.orgUserId))
+ return false;
+ return true;
+ }
+
+}
diff --git a/ecomp-portal-BE-common/src/main/java/org/onap/portalapp/portal/transport/WidgetCatalogPersonalization.java b/ecomp-portal-BE-common/src/main/java/org/onap/portalapp/portal/transport/WidgetCatalogPersonalization.java
new file mode 100644
index 00000000..6ca466aa
--- /dev/null
+++ b/ecomp-portal-BE-common/src/main/java/org/onap/portalapp/portal/transport/WidgetCatalogPersonalization.java
@@ -0,0 +1,75 @@
+/*-
+ * ============LICENSE_START==========================================
+ * ONAP Portal
+ * ===================================================================
+ * Copyright (C) 2017 AT&T Intellectual Property. All rights reserved.
+ * ===================================================================
+ *
+ * Unless otherwise specified, all software contained herein is licensed
+ * under the Apache License, Version 2.0 (the "License");
+ * you may not use this software 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.
+ *
+ * Unless otherwise specified, all documentation contained herein is licensed
+ * under the Creative Commons License, Attribution 4.0 Intl. (the "License");
+ * you may not use this documentation except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * https://creativecommons.org/licenses/by/4.0/
+ *
+ * Unless required by applicable law or agreed to in writing, documentation
+ * 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.
+ *
+ * ============LICENSE_END============================================
+ *
+ * ECOMP is a trademark and service mark of AT&T Intellectual Property.
+ */
+package org.onap.portalapp.portal.transport;
+
+/**
+ * Model for the object PUT to the controller when the user takes an action on
+ * a widget in the catalog.
+ */
+
+public class WidgetCatalogPersonalization {
+
+ public Long widgetId;
+ public Boolean select;
+ // not needed as only 'SHOW' and 'HIDE' status_cd is expected from the micro service now
+ //public Boolean pending;
+
+ public Long getWidgetId() {
+ return widgetId;
+ }
+
+ public void setWidgetId(Long widgetId) {
+ this.widgetId = widgetId;
+ }
+
+ public Boolean getSelect() {
+ return select;
+ }
+
+ public void setSelect(Boolean select) {
+ this.select = select;
+ }
+
+ /*public Boolean getPending() {
+ return pending;
+ }
+
+ public void setPending(Boolean pending) {
+ this.pending = pending;
+ }*/
+}
diff --git a/ecomp-portal-BE-common/src/main/java/org/onap/portalapp/portal/ueb/EPUebHelper.java b/ecomp-portal-BE-common/src/main/java/org/onap/portalapp/portal/ueb/EPUebHelper.java
new file mode 100644
index 00000000..d006f8ea
--- /dev/null
+++ b/ecomp-portal-BE-common/src/main/java/org/onap/portalapp/portal/ueb/EPUebHelper.java
@@ -0,0 +1,229 @@
+/*-
+ * ============LICENSE_START==========================================
+ * ONAP Portal
+ * ===================================================================
+ * Copyright (C) 2017 AT&T Intellectual Property. All rights reserved.
+ * ===================================================================
+ *
+ * Unless otherwise specified, all software contained herein is licensed
+ * under the Apache License, Version 2.0 (the "License");
+ * you may not use this software 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.
+ *
+ * Unless otherwise specified, all documentation contained herein is licensed
+ * under the Creative Commons License, Attribution 4.0 Intl. (the "License");
+ * you may not use this documentation except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * https://creativecommons.org/licenses/by/4.0/
+ *
+ * Unless required by applicable law or agreed to in writing, documentation
+ * 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.
+ *
+ * ============LICENSE_END============================================
+ *
+ * ECOMP is a trademark and service mark of AT&T Intellectual Property.
+ */
+package org.onap.portalapp.portal.ueb;
+
+import java.net.HttpURLConnection;
+import java.net.URL;
+import java.util.LinkedList;
+import java.util.List;
+
+import javax.annotation.PostConstruct;
+
+import org.hibernate.Session;
+import org.hibernate.SessionFactory;
+import org.onap.portalapp.portal.domain.EPApp;
+import org.onap.portalapp.portal.domain.EcompApp;
+import org.onap.portalapp.portal.logging.aop.EPMetricsLog;
+import org.onap.portalapp.portal.logging.format.EPAppMessagesEnum;
+import org.onap.portalapp.portal.logging.logic.EPLogUtil;
+import org.onap.portalapp.portal.service.EPAppService;
+import org.onap.portalsdk.core.logging.logic.EELFLoggerDelegate;
+import org.onap.portalsdk.core.onboarding.ueb.Helper;
+import org.onap.portalsdk.core.onboarding.ueb.Publisher;
+import org.onap.portalsdk.core.onboarding.ueb.UebException;
+import org.onap.portalsdk.core.onboarding.ueb.UebManager;
+import org.onap.portalsdk.core.onboarding.ueb.UebMsg;
+import org.onap.portalsdk.core.onboarding.util.PortalApiConstants;
+import org.onap.portalsdk.core.onboarding.util.PortalApiProperties;
+import org.onap.portalapp.portal.ueb.EPUebHelper;
+import org.onap.portalapp.portal.ueb.EPUebMsgTypes;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.context.annotation.EnableAspectJAutoProxy;
+import org.springframework.stereotype.Component;
+import org.springframework.transaction.annotation.Transactional;
+
+@Component
+@Transactional
+@org.springframework.context.annotation.Configuration
+@EnableAspectJAutoProxy
+public class EPUebHelper {
+ private EELFLoggerDelegate logger = EELFLoggerDelegate.getLogger(EPUebHelper.class);
+
+ @Autowired
+ private EPAppService appsService;
+
+ @Autowired
+ private SessionFactory sessionFactory;
+
+ @SuppressWarnings("unused")
+ private Publisher epPublisher;
+
+ public EPUebHelper() {
+
+ }
+ //
+ // This should only be called by the ECOMP Portal App, other Apps have just one publisher and use appPublisher
+ //
+ @SuppressWarnings("unused")
+ @EPMetricsLog
+ public void refreshPublisherList()
+ {
+ Session localSession = null;
+ boolean addedPublisher = false;
+
+ try {
+ localSession = sessionFactory.openSession();
+
+ List<EcompApp> apps = appsService.getEcompAppAppsFullList();
+ for (int i = 0; i < apps.size(); i++)
+ {
+ if ((apps.get(i).isEnabled()) &&
+ (apps.get(i).getUebTopicName() != null) &&
+ !(apps.get(i).getUebTopicName().toUpperCase().contains("ECOMP-PORTAL-INBOX")))
+ {
+ logger.debug(EELFLoggerDelegate.debugLogger, "UEBManager adding publisher for " + apps.get(i).getUebTopicName());
+ UebManager.getInstance().addPublisher(apps.get(i).getUebTopicName());
+ addedPublisher = true;
+ }
+ else if ((apps.get(i).getId() != 1) && // App may have been disabled, remove the publisher
+ !(apps.get(i).isEnabled()))
+ {
+ if(apps.get(i).getUebTopicName()!=null){
+ UebManager.getInstance().removePublisher(apps.get(i).getUebTopicName());
+ }
+ }
+ }
+ }
+ catch (Exception e)
+ {
+ EPLogUtil.logEcompError(logger, EPAppMessagesEnum.BeUebSystemError, e, "add/remove Publisher");
+ logger.error(EELFLoggerDelegate.errorLogger, "Exception occurred while refreshing the publisher list", e);
+ }
+
+ //publisherList.print();
+
+ if (addedPublisher == true) // Give publishers time to initialize
+ {
+ Helper.sleep(400);
+ }
+ }
+
+ @PostConstruct
+ @EPMetricsLog
+ public void initUeb() {
+ try {
+ epPublisher = new Publisher(PortalApiProperties.getProperty(PortalApiConstants.UEB_APP_KEY),
+ PortalApiProperties.getProperty(PortalApiConstants.UEB_APP_SECRET),
+ PortalApiProperties.getProperty(PortalApiConstants.ECOMP_PORTAL_INBOX_NAME));
+ } catch (Exception e) {
+ logger.error(EELFLoggerDelegate.errorLogger, "initUeb failed", e);
+ EPLogUtil.logEcompError(logger, EPAppMessagesEnum.BeUebConnectionError, e);
+ }
+
+ Thread thread = new Thread("EPUebManager: postConstructMethod - refreshPublisherList") {
+ public void run(){
+ refreshPublisherList();
+ }
+ };
+ thread.start();
+
+ }
+
+ @EPMetricsLog
+ public void addPublisher(EPApp app) {
+ // TODO Auto-generated method stub
+ try {
+ UebManager.getInstance().addPublisher(app.getUebTopicName());
+ } catch (UebException e) {
+ logger.error(EELFLoggerDelegate.errorLogger, "addPublisher failed", e);
+ }
+ }
+
+ public boolean checkAvailability() {
+ //
+ // Test existence of topic at UEB url
+ //
+ // (ie http://uebsb91kcdc.it.com:3904/topics/ECOMP-PORTAL-INBOX)
+ //
+ boolean available = true;
+ LinkedList<String> urlList = (LinkedList<String>) Helper.uebUrlList();
+ if (!urlList.isEmpty()) {
+ String url = "http://" + urlList.getFirst() + ":3904/topics/" + PortalApiProperties.getProperty(PortalApiConstants.ECOMP_PORTAL_INBOX_NAME);
+ if (!url.isEmpty()) {
+ try {
+ URL siteURL = new URL(url);
+ HttpURLConnection connection = (HttpURLConnection) siteURL.openConnection();
+ connection.setRequestMethod("GET");
+ connection.connect();
+
+ int code = connection.getResponseCode();
+ if (code == 200) {
+ available = true;
+ }
+ else {
+ EPLogUtil.logEcompError(logger, EPAppMessagesEnum.BeUebConnectionError, url);
+ available = false;
+ logger.warn(EELFLoggerDelegate.errorLogger, "Warning! UEB topic existence check failed, topic = " + url );
+ logger.debug(EELFLoggerDelegate.debugLogger, "Warning! UEB topic existence check failed, topic = " + url );
+ }
+ }
+ catch (Exception e) {
+ available = false;
+ logger.error(EELFLoggerDelegate.errorLogger, "checkAvailability failed", e);
+ }
+ }
+ }
+ return available;
+ }
+
+ public boolean MessageCanBeSentToTopic() {
+
+ boolean sentMsgSuccessfully = false;
+
+ UebMsg msg = new UebMsg();
+ msg.putSourceTopicName(PortalApiProperties.getProperty(PortalApiConstants.ECOMP_PORTAL_INBOX_NAME));
+ msg.putPayload("Pinging topic for health check");
+ msg.putMsgType(EPUebMsgTypes.UEB_MSG_TYPE_HEALTH_CHECK);
+
+ try {
+ // epPublisher.send(msg);
+ sentMsgSuccessfully = true;
+ }
+ catch (Exception e) {
+ EPLogUtil.logEcompError(logger, EPAppMessagesEnum.BeHealthCheckUebClusterError, e);
+ sentMsgSuccessfully = false;
+ logger.warn(EELFLoggerDelegate.errorLogger, "Warning! could not successfully publish a UEB msg to "
+ + PortalApiProperties.getProperty(PortalApiConstants.ECOMP_PORTAL_INBOX_NAME), e);
+ }
+
+ return sentMsgSuccessfully;
+ }
+
+}
+
+
diff --git a/ecomp-portal-BE-common/src/main/java/org/onap/portalapp/portal/ueb/EPUebMsgTypes.java b/ecomp-portal-BE-common/src/main/java/org/onap/portalapp/portal/ueb/EPUebMsgTypes.java
new file mode 100644
index 00000000..7e49f8f2
--- /dev/null
+++ b/ecomp-portal-BE-common/src/main/java/org/onap/portalapp/portal/ueb/EPUebMsgTypes.java
@@ -0,0 +1,45 @@
+/*-
+ * ============LICENSE_START==========================================
+ * ONAP Portal
+ * ===================================================================
+ * Copyright (C) 2017 AT&T Intellectual Property. All rights reserved.
+ * ===================================================================
+ *
+ * Unless otherwise specified, all software contained herein is licensed
+ * under the Apache License, Version 2.0 (the "License");
+ * you may not use this software 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.
+ *
+ * Unless otherwise specified, all documentation contained herein is licensed
+ * under the Creative Commons License, Attribution 4.0 Intl. (the "License");
+ * you may not use this documentation except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * https://creativecommons.org/licenses/by/4.0/
+ *
+ * Unless required by applicable law or agreed to in writing, documentation
+ * 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.
+ *
+ * ============LICENSE_END============================================
+ *
+ * ECOMP is a trademark and service mark of AT&T Intellectual Property.
+ */
+package org.onap.portalapp.portal.ueb;
+
+import org.onap.portalsdk.core.onboarding.ueb.UebMsgTypes;
+
+public interface EPUebMsgTypes extends UebMsgTypes {
+
+ public static final String UEB_MSG_TYPE_HEALTH_CHECK = "uebHealthCheckPing";
+}
diff --git a/ecomp-portal-BE-common/src/main/java/org/onap/portalapp/portal/utils/CustomLoggingFilter.java b/ecomp-portal-BE-common/src/main/java/org/onap/portalapp/portal/utils/CustomLoggingFilter.java
new file mode 100644
index 00000000..0b564eec
--- /dev/null
+++ b/ecomp-portal-BE-common/src/main/java/org/onap/portalapp/portal/utils/CustomLoggingFilter.java
@@ -0,0 +1,72 @@
+/*-
+ * ============LICENSE_START==========================================
+ * ONAP Portal
+ * ===================================================================
+ * Copyright (C) 2017 AT&T Intellectual Property. All rights reserved.
+ * ===================================================================
+ *
+ * Unless otherwise specified, all software contained herein is licensed
+ * under the Apache License, Version 2.0 (the "License");
+ * you may not use this software 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.
+ *
+ * Unless otherwise specified, all documentation contained herein is licensed
+ * under the Creative Commons License, Attribution 4.0 Intl. (the "License");
+ * you may not use this documentation except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * https://creativecommons.org/licenses/by/4.0/
+ *
+ * Unless required by applicable law or agreed to in writing, documentation
+ * 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.
+ *
+ * ============LICENSE_END============================================
+ *
+ * ECOMP is a trademark and service mark of AT&T Intellectual Property.
+ */
+package org.onap.portalapp.portal.utils;
+
+import ch.qos.logback.classic.Level;
+import ch.qos.logback.classic.spi.ILoggingEvent;
+import ch.qos.logback.core.filter.Filter;
+import ch.qos.logback.core.spi.FilterReply;
+
+/**
+ * Custom Filter class bind with logback.xml
+ * configuration file to strip out certain log messages
+ * coming out of special packages or classes.
+ *
+ */
+public class CustomLoggingFilter extends Filter<ILoggingEvent> {
+
+ /**
+ * Custom Filter is added to strip out the continuous U-EB logging messages
+ * But make sure we log the ERROR & WARNING Level messages.
+ */
+ @Override
+ public FilterReply decide(ILoggingEvent event) {
+ try {
+ if ((event.getLevel() != Level.ERROR || event.getLevel() != Level.WARN) &&
+ (event.getThreadName().equalsIgnoreCase("UEBConsumerThread")) &&
+ (event.getLoggerName().contains("org.openecomp.nsa") || event.getLoggerName().contains("org.apache.http"))
+ ) {
+ return FilterReply.DENY;
+ } else {
+ return FilterReply.NEUTRAL;
+ }
+ } catch(Exception e) {
+ return FilterReply.NEUTRAL;
+ }
+ }
+}
diff --git a/ecomp-portal-BE-common/src/main/java/org/onap/portalapp/portal/utils/EPCommonSystemProperties.java b/ecomp-portal-BE-common/src/main/java/org/onap/portalapp/portal/utils/EPCommonSystemProperties.java
new file mode 100644
index 00000000..0d3ff519
--- /dev/null
+++ b/ecomp-portal-BE-common/src/main/java/org/onap/portalapp/portal/utils/EPCommonSystemProperties.java
@@ -0,0 +1,95 @@
+/*-
+ * ============LICENSE_START==========================================
+ * ONAP Portal
+ * ===================================================================
+ * Copyright (C) 2017 AT&T Intellectual Property. All rights reserved.
+ * ===================================================================
+ *
+ * Unless otherwise specified, all software contained herein is licensed
+ * under the Apache License, Version 2.0 (the "License");
+ * you may not use this software 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.
+ *
+ * Unless otherwise specified, all documentation contained herein is licensed
+ * under the Creative Commons License, Attribution 4.0 Intl. (the "License");
+ * you may not use this documentation except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * https://creativecommons.org/licenses/by/4.0/
+ *
+ * Unless required by applicable law or agreed to in writing, documentation
+ * 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.
+ *
+ * ============LICENSE_END============================================
+ *
+ * ECOMP is a trademark and service mark of AT&T Intellectual Property.
+ */
+package org.onap.portalapp.portal.utils;
+
+import org.onap.portalsdk.core.util.SystemProperties;
+
+public class EPCommonSystemProperties extends SystemProperties {
+
+ public static final String LOGIN_URL_NO_RET_VAL = "login_url_no_ret_val";
+ public static final String ECOMP_APP_ID = "ecomp_app_id";
+ public static final String SYS_ADMIN_ROLE_ID = "sys_admin_role_id";
+ public static final String DUBLICATED_FIELD_VALUE_ECOMP_ERROR = "1201";
+ public static final String ACCOUNT_ADMIN_ROLE_ID = "account_admin_role_id";
+ public static final String RESTRICTED_APP_ROLE_ID = "restricted_app_role_id";
+ public static final String FE_URL = "frontend_url";
+ public static final String HEALTH_POLL_INTERVAL_SECONDS = "health_poll_interval_seconds";
+ public static final String HEALTHFAIL_ALERT_EVERY_X_INTERVALS = "health_fail_alert_every_x_intervals";
+ public static final String USER_GUIDE_URL = "user_guide_link";
+
+ public static final String USER_FIRST_NAME = "USER_FIRST_NAME";
+ public static final String USER_LAST_NAME = "USER_LAST_NAME";
+ public static final String USER_EMAIL = "USER_EMAIL";
+ public static final String USER_ORG_USERID = "USER_ORG_USERID";
+
+ public static final String USH_TICKET_URL = "ush_ticket_url";
+
+ public static final String EXTERNAL_API_RESPONSE_CODE = "External_API_ResponseCode";
+ public static final String COOKIE_DOMAIN = "cookie_domain";
+
+ public static final String FEEDBACK_EMAIL_ADDRESS = "feedback_email_address";
+ public static final String PORTAL_INFO_URL = "portal_info_url";
+
+ public static final String ONLINE_USER_UPDATE_RATE = "online_user_update_rate";
+ public static final String ONLINE_USER_UPDATE_DURATION = "online_user_update_duration";
+
+ public static final String NOTIFICATION_UPDATE_RATE = "notification_update_rate";
+ public static final String NOTIFICATION_UPDATE_DURATION = "notification_update_duration";
+
+ public static final String WINDOW_WIDTH_THRESHOLD_LEFT_MENU = "window_width_threshold_left_menu";
+ public static final String WINDOW_WIDTH_THRESHOLD_RIGHT_MENU = "window_width_threshold_right_menu";
+
+ public static final String AUDITLOG_DEL_DAY_FROM = "auditlog_del_day_from";
+ public static final String AUDITLOG_DELETE_CRON = "auditlog_delete_cron";
+
+ public static final String AUTH_USER_SERVER = "auth_user_server";
+ public static final String EXTERNAL_ACCESS_ENABLE = "external_access_enable";
+
+ public static final String EXTERNAL_SYSTEM_NOTIFICATION_URL = "external_system_notification_url";
+ public static final String EXTERNAL_CENTRAL_AUTH_USER_NAME = "ext_central_access_user_name";
+ public static final String EXTERNAL_CENTRAL_AUTH_PASSWORD = "ext_central_access_password";
+ public static final String EXTERNAL_CENTRAL_ACCESS_URL = "ext_central_access_url";
+ public static final String EXTERNAL_CENTRAL_ACCESS_USER_DOMAIN = "ext_central_access_user_domain";
+ public static final String REMOTE_CENTRALISED_SYSTEM_ACCESS = "remote_centralized_system_access";
+
+ public static final String WIDGET_MS_PROTOCOL = "microservices.widget.protocol";
+ public static final String WIDGET_MS_HOSTNAME = "microservices.widget.hostname";
+
+ public static final String REMOTE_CENTRALIZED_SYSTEM_ACCESS = "remote_centralized_system_access";
+
+}
diff --git a/ecomp-portal-BE-common/src/main/java/org/onap/portalapp/portal/utils/EcompPortalUtils.java b/ecomp-portal-BE-common/src/main/java/org/onap/portalapp/portal/utils/EcompPortalUtils.java
new file mode 100644
index 00000000..efd84b90
--- /dev/null
+++ b/ecomp-portal-BE-common/src/main/java/org/onap/portalapp/portal/utils/EcompPortalUtils.java
@@ -0,0 +1,563 @@
+/*-
+ * ============LICENSE_START==========================================
+ * ONAP Portal
+ * ===================================================================
+ * Copyright (C) 2017 AT&T Intellectual Property. All rights reserved.
+ * ===================================================================
+ *
+ * Unless otherwise specified, all software contained herein is licensed
+ * under the Apache License, Version 2.0 (the "License");
+ * you may not use this software 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.
+ *
+ * Unless otherwise specified, all documentation contained herein is licensed
+ * under the Creative Commons License, Attribution 4.0 Intl. (the "License");
+ * you may not use this documentation except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * https://creativecommons.org/licenses/by/4.0/
+ *
+ * Unless required by applicable law or agreed to in writing, documentation
+ * 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.
+ *
+ * ============LICENSE_END============================================
+ *
+ * ECOMP is a trademark and service mark of AT&T Intellectual Property.
+ */
+package org.onap.portalapp.portal.utils;
+
+import java.io.IOException;
+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 javax.xml.bind.DatatypeConverter;
+
+import org.apache.commons.lang.StringUtils;
+import org.hibernate.Session;
+import org.hibernate.Transaction;
+import org.onap.portalapp.portal.domain.EPUser;
+import org.onap.portalapp.portal.logging.format.EPAppMessagesEnum;
+import org.onap.portalapp.portal.logging.logic.EPLogUtil;
+import org.onap.portalsdk.core.logging.logic.EELFLoggerDelegate;
+import org.onap.portalsdk.core.onboarding.util.CipherUtil;
+import org.onap.portalsdk.core.onboarding.util.PortalApiConstants;
+import org.onap.portalsdk.core.util.SystemProperties;
+import org.slf4j.MDC;
+import org.springframework.http.HttpHeaders;
+import org.springframework.http.MediaType;
+
+import com.fasterxml.jackson.core.JsonProcessingException;
+import com.fasterxml.jackson.databind.ObjectMapper;
+
+public class EcompPortalUtils {
+
+ private static EELFLoggerDelegate logger = EELFLoggerDelegate.getLogger(EcompPortalUtils.class);
+
+ private static final String FUNCTION_PIPE = "|";
+
+ // 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";
+
+ // It is a regular expression used for while creating a External Central Auth Role
+ public static final String EXTERNAL_CENTRAL_AUTH_ROLE_HANDLE_SPECIAL_CHARACTERS = "([^A-Z^a-z^0-9^\\.^%^(^)^=^:])";
+
+ /**
+ * @param orgUserId
+ * User ID to validate
+ * @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
+ * String to split
+ * @param regex
+ * tokens
+ * @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
+ * error code
+ * @param errorMessage
+ * message
+ * @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
+ * Message to embed
+ * @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);
+ }
+ }
+
+ /**
+ * Set response status to Unauthorized if user == null and to Forbidden in all
+ * (!) other cases. Logging is not performed if invocator == null
+ *
+ * @param user
+ * User object
+ * @param response
+ * HttpServletResponse
+ * @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, "getExternalAppResponseCode failed", e);
+ }
+ return responseCodeInt;
+ }
+
+ // This method might be just for testing purposes.
+ public static void setExternalAppResponseCode(int responseCode) {
+ try {
+ String code = String.valueOf(responseCode);
+ MDC.put(EPCommonSystemProperties.EXTERNAL_API_RESPONSE_CODE,code );
+ code=StringUtils.EMPTY;
+ } catch (Exception e) {
+ logger.error(EELFLoggerDelegate.errorLogger, "setExternalAppResponseCode failed", 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, "getHTTPStatusString failed", 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 internalExternalString = internal ? "Ecomp Error: " : "App Error: ";
+ String httpStatusString = "unknown_error";
+ try {
+ if (responseCode < 1000) {
+ httpStatusString = getHTTPStatusString(responseCode);
+ }
+ } catch (Exception e) {
+ logger.error(EELFLoggerDelegate.errorLogger, "getFEErrorString failed", e);
+ }
+ String 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;
+ }
+
+ public static String getMyIpAdddress() {
+ InetAddress ip;
+ String localIp;
+ try {
+ ip = InetAddress.getLocalHost();
+ localIp = ip.getHostAddress();
+ } catch (UnknownHostException e) {
+ localIp = "unknown";
+ logger.error(EELFLoggerDelegate.errorLogger, "getMyIpAdddress failed ", 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, "getMyHostName failed", e);
+ }
+ return hostName;
+ }
+
+ /**
+ * Returns a default property if the expected one is not available
+ *
+ * @param property
+ * Key
+ * @param defaultValue
+ * default Value
+ * @return Default value if property is not defined or yields the empty string;
+ * else the property value.
+ */
+ public static String getPropertyOrDefault(String property, String defaultValue) {
+ if (!SystemProperties.containsProperty(property))
+ return defaultValue;
+ String value = SystemProperties.getProperty(property);
+ if (value == null || "".equals(value))
+ return defaultValue;
+ return value;
+ }
+
+ /**
+ * 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, "calculateDateTimeDifferenceForLog failed", e);
+ }
+ }
+ }
+
+ /**
+ * Answers the protocol to use.
+ *
+ * @return Protocol name from property file; defaults to https.
+ */
+ public static String widgetMsProtocol() {
+ return getPropertyOrDefault(EPCommonSystemProperties.WIDGET_MS_PROTOCOL, "https");
+ }
+
+ /**
+ * Answers the host to use.
+ *
+ * @return Host name from property file; defaults to localhost.
+ */
+ public static String localOrDockerHost() {
+ return getPropertyOrDefault(EPCommonSystemProperties.WIDGET_MS_HOSTNAME, "localhost");
+ }
+
+ /**
+ * It returns headers where username and password of external central auth is
+ * encoded to base64
+ *
+ * @return header which contains external central auth username and password
+ * base64 encoded
+ * @throws Exception
+ * if unable to decrypt the password
+ */
+ public static HttpHeaders base64encodeKeyForAAFBasicAuth() throws Exception {
+ String userName = "";
+ String decryptedPass = "";
+ if (EPCommonSystemProperties.containsProperty(EPCommonSystemProperties.EXTERNAL_CENTRAL_AUTH_USER_NAME)
+ && EPCommonSystemProperties.containsProperty(EPCommonSystemProperties.EXTERNAL_CENTRAL_AUTH_PASSWORD)) {
+ decryptedPass = SystemProperties.getProperty(EPCommonSystemProperties.EXTERNAL_CENTRAL_AUTH_PASSWORD);
+ userName = SystemProperties.getProperty(EPCommonSystemProperties.EXTERNAL_CENTRAL_AUTH_USER_NAME);
+ }
+ String decPass = decrypted(decryptedPass);
+ String usernamePass = userName + ":" + decPass;
+ String encToBase64 = String.valueOf((DatatypeConverter.printBase64Binary(usernamePass.getBytes())));
+ HttpHeaders headers = new HttpHeaders();
+ headers.add("Authorization", "Basic " + encToBase64);
+ headers.setContentType(MediaType.APPLICATION_JSON);
+ return headers;
+ }
+
+ private static String decrypted(String encrypted) throws Exception {
+ String result = "";
+ if (encrypted != null && encrypted.length() > 0) {
+ try {
+ result = CipherUtil.decryptPKC(encrypted, SystemProperties.getProperty(SystemProperties.Decryption_Key));
+ } catch (Exception e) {
+ logger.error(EELFLoggerDelegate.errorLogger, "decryptedPassword failed", e);
+ throw e;
+ }
+ }
+ return result;
+ }
+
+ public static String truncateString(String originString, int size){
+ if(originString.length()>=size){
+ StringBuilder stringBuilder = new StringBuilder();
+ stringBuilder.append(originString);
+ stringBuilder.setLength(size);
+ stringBuilder.append("...");
+ return stringBuilder.toString();
+ }
+ return originString;
+ }
+
+ /**
+ *
+ * If function code value has any pipes it does pipe filter and
+ * returns value.
+ *
+ * @param functionCode
+ * @return function instance without pipe
+ */
+ public static String getFunctionCode(String functionCode) {
+ String finalFunctionCodeVal = "";
+ if (functionCode.contains(FUNCTION_PIPE)) {
+ int count = StringUtils.countMatches(functionCode, FUNCTION_PIPE);
+ if (count == 2)
+ finalFunctionCodeVal = functionCode.substring(
+ functionCode.indexOf(FUNCTION_PIPE) + 1,
+ functionCode.lastIndexOf(FUNCTION_PIPE));
+ else
+ finalFunctionCodeVal = functionCode
+ .substring(functionCode.lastIndexOf(FUNCTION_PIPE) + 1);
+ } else{
+ finalFunctionCodeVal = functionCode;
+ }
+ return finalFunctionCodeVal;
+ }
+
+ /**
+ *
+ * If function code value has any pipes it does pipe filter and
+ * returns value.
+ *
+ * @param functionCode
+ * @return function Type without pipe
+ */
+ public static String getFunctionType(String functionCode) {
+ String finalFunctionCodeVal = "";
+ if (functionCode.contains(FUNCTION_PIPE)) {
+ int count = StringUtils.countMatches(functionCode, FUNCTION_PIPE);
+ if (count == 2){
+ String[] getTypeValue = functionCode.split("\\"+FUNCTION_PIPE);
+ finalFunctionCodeVal = getTypeValue[0];
+ }
+ } else{
+ finalFunctionCodeVal = functionCode;
+ }
+ return finalFunctionCodeVal;
+ }
+
+ /**
+ *
+ * If function code value has any pipes it does pipe filter and
+ * returns value.
+ *
+ * @param functionCode
+ * @return function Action without pipe
+ */
+ public static String getFunctionAction(String functionCode) {
+ String finalFunctionCodeVal = "";
+ if (functionCode.contains(FUNCTION_PIPE)) {
+ int count = StringUtils.countMatches(functionCode, FUNCTION_PIPE);
+ if (count == 2)
+ finalFunctionCodeVal = functionCode.substring(
+ functionCode.lastIndexOf(FUNCTION_PIPE)+1);
+ } else{
+ finalFunctionCodeVal = functionCode;
+ }
+ return finalFunctionCodeVal;
+ }
+
+ /**
+ *
+ * It check whether the external auth namespace is matching with current namepsace exists in local DB
+ *
+ * @param permTypeVal
+ * @param appNamespaceVal
+ * @return true or false
+ */
+ public static boolean checkNameSpaceMatching(String permTypeVal, String appNamespaceVal) {
+ String[] typeNamespace = permTypeVal.split("\\.");
+ String[] appNamespace = appNamespaceVal.split("\\.");
+ boolean isNamespaceMatching = true;
+ for (int k = 0; k < appNamespace.length; k++) {
+ if (!appNamespace[k].equals(typeNamespace[k]))
+ isNamespaceMatching = false;
+ }
+ return isNamespaceMatching;
+ }
+
+ public static boolean checkIfRemoteCentralAccessAllowed() {
+ boolean result = false;
+ String rmtCentralAccess = SystemProperties.getProperty(EPCommonSystemProperties.REMOTE_CENTRALISED_SYSTEM_ACCESS);
+ if(rmtCentralAccess == null) {
+ logger.error(EELFLoggerDelegate.errorLogger, "Please check in system.properties whether the property exists or not!");
+ return false;
+ }else if(new Boolean(rmtCentralAccess)){
+ logger.debug(EELFLoggerDelegate.debugLogger, "checkIfRemoteCentralAccessAllowed: {}",rmtCentralAccess);
+ result = true;
+ }
+ return result;
+ }
+
+ /**
+ *
+ * It validates whether given string is JSON or not
+ *
+ * @param jsonInString
+ * @return true or false
+ */
+ public static boolean isJSONValid(String jsonInString ) {
+ try {
+ final ObjectMapper mapper = new ObjectMapper();
+ mapper.readTree(jsonInString);
+ return true;
+ } catch (IOException e) {
+ logger.error(EELFLoggerDelegate.errorLogger, "Failed to parse Json!", e);
+ return false;
+ }
+ }
+}
diff --git a/ecomp-portal-BE-common/src/main/java/org/onap/portalapp/portal/utils/EcompVersion.java b/ecomp-portal-BE-common/src/main/java/org/onap/portalapp/portal/utils/EcompVersion.java
new file mode 100644
index 00000000..7e05754f
--- /dev/null
+++ b/ecomp-portal-BE-common/src/main/java/org/onap/portalapp/portal/utils/EcompVersion.java
@@ -0,0 +1,51 @@
+/*-
+ * ============LICENSE_START==========================================
+ * ONAP Portal
+ * ===================================================================
+ * Copyright (C) 2017 AT&T Intellectual Property. All rights reserved.
+ * ===================================================================
+ *
+ * Unless otherwise specified, all software contained herein is licensed
+ * under the Apache License, Version 2.0 (the "License");
+ * you may not use this software 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.
+ *
+ * Unless otherwise specified, all documentation contained herein is licensed
+ * under the Creative Commons License, Attribution 4.0 Intl. (the "License");
+ * you may not use this documentation except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * https://creativecommons.org/licenses/by/4.0/
+ *
+ * Unless required by applicable law or agreed to in writing, documentation
+ * 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.
+ *
+ * ============LICENSE_END============================================
+ *
+ * ECOMP is a trademark and service mark of AT&T Intellectual Property.
+ */
+package org.onap.portalapp.portal.utils;
+
+//
+// Hardcoded for now, wanted to use maven and resource file. Possibly just read
+// pom.properties file with version added, but spent several hours already running
+// into issues with that and other ideas not working. So, for 1604 deadlines I
+// am just putting the version in the code here... for now.
+//
+public final class EcompVersion {
+
+ // TODO - not used - manifest service reads from manifest
+ public static final String buildNumber="1610.1.999";
+
+}
diff --git a/ecomp-portal-BE-common/src/main/java/org/onap/portalapp/portal/utils/HashMapFromList.java b/ecomp-portal-BE-common/src/main/java/org/onap/portalapp/portal/utils/HashMapFromList.java
new file mode 100644
index 00000000..e31c73b5
--- /dev/null
+++ b/ecomp-portal-BE-common/src/main/java/org/onap/portalapp/portal/utils/HashMapFromList.java
@@ -0,0 +1,115 @@
+/*-
+ * ============LICENSE_START==========================================
+ * ONAP Portal
+ * ===================================================================
+ * Copyright (C) 2017 AT&T Intellectual Property. All rights reserved.
+ * ===================================================================
+ *
+ * Unless otherwise specified, all software contained herein is licensed
+ * under the Apache License, Version 2.0 (the "License");
+ * you may not use this software 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.
+ *
+ * Unless otherwise specified, all documentation contained herein is licensed
+ * under the Creative Commons License, Attribution 4.0 Intl. (the "License");
+ * you may not use this documentation except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * https://creativecommons.org/licenses/by/4.0/
+ *
+ * Unless required by applicable law or agreed to in writing, documentation
+ * 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.
+ *
+ * ============LICENSE_END============================================
+ *
+ * ECOMP is a trademark and service mark of AT&T Intellectual Property.
+ */
+package org.onap.portalapp.portal.utils;
+
+import java.lang.reflect.Field;
+import java.lang.reflect.Method;
+import java.util.HashMap;
+import java.util.List;
+
+import org.onap.portalsdk.core.logging.logic.EELFLoggerDelegate;
+
+/**
+ *
+ * @author Vladimir Turovets This class is used to create HashMap<String, T>
+ * from the list of T objects. We suppose that
+ * 1) T object contains field 'parmName' or getter 'getParmName()'.
+ * The value of object.parmName or object.getParmName() is used as
+ * a key in created hashMap.
+ * 2) for all objects in the list 'parmName' or getter
+ * 'getParmName().toString' has to be unique and not null.
+ * This class has one function only:
+ * HashMap<String, T> hashMap(List<T> list, String name) and returns
+ * hash map created from list.
+ *
+ * @param <T>
+ * Type
+ */
+public class HashMapFromList<T> {
+ private EELFLoggerDelegate logger = EELFLoggerDelegate.getLogger(HashMapFromList.class);
+
+ public HashMap<String, T> hashMap(List<T> list, String name) {
+ HashMap<String, T> result = new HashMap<String, T>();
+ if (list == null || list.size() == 0 || name == null) {
+ return result;
+ }
+ name = name.trim();
+ if (name.length() > 0) {
+ T object = list.get(0);
+ try {
+ String parmName = name;
+ Field field = object.getClass().getField(parmName);
+ for (T obj : list) {
+ try {
+ Object o = field.get(obj);
+ if (o != null)
+ result.put(o.toString(), obj);
+ } catch (Exception e1) {
+ logger.error(EELFLoggerDelegate.errorLogger, "hashMap failed 1: object of class " + object.getClass().getName() + ", field " + parmName, e1);
+ return new HashMap<String, T>();
+ }
+ }
+ } catch (Exception e) {
+ String getterName = "get" + (name.length() == 1 ? name.toUpperCase() : (name.substring(0, 1).toUpperCase() + name.substring(1)));
+ try {
+ Class<?>[] parmClasses = null;
+ Method method = object.getClass().getMethod(getterName, parmClasses);
+ Object[] parmValues = new Object[0];
+ for (T obj : list) {
+ try {
+ Object o = method.invoke(obj, parmValues);
+ if (o != null)
+ result.put(o.toString(), obj);
+ } catch (Exception e2) {
+ logger.error(EELFLoggerDelegate.errorLogger, "hashMap failed 2: object of class " + object.getClass().getName() + ", method " + getterName, e2);
+ return new HashMap<String, T>();
+ }
+ }
+ } catch (Exception e3) {
+ logger.error(EELFLoggerDelegate.errorLogger, "hashMap failed 3: object of class " + object.getClass().getName() + ", bad field '" + name + "' or method '" + getterName + "()", e3);
+ return new HashMap<String, T>();
+ }
+ }
+ }
+ if (list.size() != result.size()) {
+ logger.warn(EELFLoggerDelegate.errorLogger, "Duplicated or empty keys were found!!!");
+ }
+ return result;
+ }
+
+}
diff --git a/ecomp-portal-BE-common/src/main/java/org/onap/portalapp/portal/utils/ParallelExecutor.java b/ecomp-portal-BE-common/src/main/java/org/onap/portalapp/portal/utils/ParallelExecutor.java
new file mode 100644
index 00000000..b4ad9c9f
--- /dev/null
+++ b/ecomp-portal-BE-common/src/main/java/org/onap/portalapp/portal/utils/ParallelExecutor.java
@@ -0,0 +1,101 @@
+/*-
+ * ============LICENSE_START==========================================
+ * ONAP Portal
+ * ===================================================================
+ * Copyright (C) 2017 AT&T Intellectual Property. All rights reserved.
+ * ===================================================================
+ *
+ * Unless otherwise specified, all software contained herein is licensed
+ * under the Apache License, Version 2.0 (the "License");
+ * you may not use this software 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.
+ *
+ * Unless otherwise specified, all documentation contained herein is licensed
+ * under the Creative Commons License, Attribution 4.0 Intl. (the "License");
+ * you may not use this documentation except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * https://creativecommons.org/licenses/by/4.0/
+ *
+ * Unless required by applicable law or agreed to in writing, documentation
+ * 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.
+ *
+ * ============LICENSE_END============================================
+ *
+ * ECOMP is a trademark and service mark of AT&T Intellectual Property.
+ */
+package org.onap.portalapp.portal.utils;
+
+import java.util.ArrayList;
+import java.util.List;
+import java.util.concurrent.Callable;
+import java.util.concurrent.ExecutorService;
+import java.util.concurrent.Executors;
+import java.util.concurrent.Future;
+
+import org.onap.portalsdk.core.logging.logic.EELFLoggerDelegate;
+
+public abstract class ParallelExecutor<T> {
+
+ private EELFLoggerDelegate logger = EELFLoggerDelegate.getLogger(ParallelExecutor.class);
+
+ protected static abstract class ThreadOperation<T> {
+ public abstract T execute(List<Object> parms);
+ }
+
+ protected abstract ThreadOperation<T> getThreadOperation();
+
+ private static class CallableOperationThread<T> implements Callable<T> {
+
+ List<Object> parms;
+
+ private ThreadOperation<T> operation;
+
+ public CallableOperationThread(ThreadOperation<T> operation, List<Object> parms) {
+ this.parms = parms;
+ this.operation = operation;
+ }
+
+ @Override
+ public T call() throws Exception {
+ return this.operation.execute(this.parms);
+ }
+
+ }
+
+ public List<T> performAllOperations(int ThreadPoolSize, List<List<Object>> listOfParms) {
+ List<T> result = new ArrayList<T>();
+ if (ThreadPoolSize > 0 && listOfParms != null) {
+ ExecutorService executor = Executors.newFixedThreadPool(ThreadPoolSize);
+ List<Future<T>> list = new ArrayList<Future<T>>();
+ for (List<Object> parms : listOfParms) {
+ CallableOperationThread<T> getter = new CallableOperationThread<T>(this.getThreadOperation(), parms);
+ Future<T> submit = executor.submit(getter);
+ list.add(submit);
+ }
+ for (Future<T> future : list) {
+ try {
+ if (future != null) {
+ result.add(future.get());
+ }
+ } catch (Exception e) {
+ logger.error(EELFLoggerDelegate.errorLogger, "performAllOperations failed", e);
+ }
+ }
+ executor.shutdown();
+ }
+ return result;
+ }
+
+}
diff --git a/ecomp-portal-BE-common/src/main/java/org/onap/portalapp/portal/utils/PortalConstants.java b/ecomp-portal-BE-common/src/main/java/org/onap/portalapp/portal/utils/PortalConstants.java
new file mode 100644
index 00000000..7f924834
--- /dev/null
+++ b/ecomp-portal-BE-common/src/main/java/org/onap/portalapp/portal/utils/PortalConstants.java
@@ -0,0 +1,50 @@
+/*-
+ * ============LICENSE_START==========================================
+ * ONAP Portal
+ * ===================================================================
+ * Copyright (C) 2017 AT&T Intellectual Property. All rights reserved.
+ * ===================================================================
+ *
+ * Unless otherwise specified, all software contained herein is licensed
+ * under the Apache License, Version 2.0 (the "License");
+ * you may not use this software 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.
+ *
+ * Unless otherwise specified, all documentation contained herein is licensed
+ * under the Creative Commons License, Attribution 4.0 Intl. (the "License");
+ * you may not use this documentation except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * https://creativecommons.org/licenses/by/4.0/
+ *
+ * Unless required by applicable law or agreed to in writing, documentation
+ * 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.
+ *
+ * ============LICENSE_END============================================
+ *
+ * ECOMP is a trademark and service mark of AT&T Intellectual Property.
+ */
+package org.onap.portalapp.portal.utils;
+
+public interface PortalConstants {
+ public static final Long PORTAL_APP_ID = 1L;
+ public static final Long DEFAULT_NOTIFICATION_CREATOR = 1L;
+ public static final String REST_AUX_API = "/auxapi";
+ public static final String PORTAL_AUX_API = "/portalApi";
+ public static final Long ACCOUNT_ADMIN_ROLE_ID = 999L;
+ public static final Long SYS_ADMIN_ROLE_ID = 1L;
+ public static final String ADMIN_ROLE = "Account Administrator";
+ public static final String PORTAL_ADMIN_ROLE = "System Administrator";
+ public static final Integer AUDIT_LOG_COMMENT_SIZE = 990;
+}
diff --git a/ecomp-portal-BE-common/src/main/java/org/onap/portalapp/service/AdminAuthExtension.java b/ecomp-portal-BE-common/src/main/java/org/onap/portalapp/service/AdminAuthExtension.java
new file mode 100644
index 00000000..7f401ff6
--- /dev/null
+++ b/ecomp-portal-BE-common/src/main/java/org/onap/portalapp/service/AdminAuthExtension.java
@@ -0,0 +1,53 @@
+/*-
+ * ============LICENSE_START==========================================
+ * ONAP Portal
+ * ===================================================================
+ * Copyright (C) 2017 AT&T Intellectual Property. All rights reserved.
+ * ===================================================================
+ *
+ * Unless otherwise specified, all software contained herein is licensed
+ * under the Apache License, Version 2.0 (the "License");
+ * you may not use this software 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.
+ *
+ * Unless otherwise specified, all documentation contained herein is licensed
+ * under the Creative Commons License, Attribution 4.0 Intl. (the "License");
+ * you may not use this documentation except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * https://creativecommons.org/licenses/by/4.0/
+ *
+ * Unless required by applicable law or agreed to in writing, documentation
+ * 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.
+ *
+ * ============LICENSE_END============================================
+ *
+ * ECOMP is a trademark and service mark of AT&T Intellectual Property.
+ */
+package org.onap.portalapp.service;
+
+import org.onap.portalapp.portal.domain.EPUser;
+import org.springframework.stereotype.Service;
+import org.springframework.transaction.annotation.Transactional;
+
+
+@Service("adminAuthExtension")
+@Transactional
+public class AdminAuthExtension {
+
+ public void saveUserExtension(EPUser user){
+ //app's developer implement their own logic here, like updating app's related tables
+ }
+
+}
diff --git a/ecomp-portal-BE-common/src/main/java/org/onap/portalapp/service/EPProfileService.java b/ecomp-portal-BE-common/src/main/java/org/onap/portalapp/service/EPProfileService.java
new file mode 100644
index 00000000..a08e2748
--- /dev/null
+++ b/ecomp-portal-BE-common/src/main/java/org/onap/portalapp/service/EPProfileService.java
@@ -0,0 +1,54 @@
+/*-
+ * ============LICENSE_START==========================================
+ * ONAP Portal
+ * ===================================================================
+ * Copyright (C) 2017 AT&T Intellectual Property. All rights reserved.
+ * ===================================================================
+ *
+ * Unless otherwise specified, all software contained herein is licensed
+ * under the Apache License, Version 2.0 (the "License");
+ * you may not use this software 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.
+ *
+ * Unless otherwise specified, all documentation contained herein is licensed
+ * under the Creative Commons License, Attribution 4.0 Intl. (the "License");
+ * you may not use this documentation except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * https://creativecommons.org/licenses/by/4.0/
+ *
+ * Unless required by applicable law or agreed to in writing, documentation
+ * 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.
+ *
+ * ============LICENSE_END============================================
+ *
+ * ECOMP is a trademark and service mark of AT&T Intellectual Property.
+ */
+package org.onap.portalapp.service;
+
+import java.util.List;
+
+import org.onap.portalapp.portal.domain.EPUser;
+import org.onap.portalsdk.core.domain.Profile;
+
+
+public interface EPProfileService {
+ List<Profile> findAll();
+
+ Profile getProfile(int id);
+
+ EPUser getUser(String id);
+
+ void saveUser(EPUser user);
+}
diff --git a/ecomp-portal-BE-common/src/main/java/org/onap/portalapp/service/EPProfileServiceImpl.java b/ecomp-portal-BE-common/src/main/java/org/onap/portalapp/service/EPProfileServiceImpl.java
new file mode 100644
index 00000000..35090d94
--- /dev/null
+++ b/ecomp-portal-BE-common/src/main/java/org/onap/portalapp/service/EPProfileServiceImpl.java
@@ -0,0 +1,89 @@
+/*-
+ * ============LICENSE_START==========================================
+ * ONAP Portal
+ * ===================================================================
+ * Copyright (C) 2017 AT&T Intellectual Property. All rights reserved.
+ * ===================================================================
+ *
+ * Unless otherwise specified, all software contained herein is licensed
+ * under the Apache License, Version 2.0 (the "License");
+ * you may not use this software 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.
+ *
+ * Unless otherwise specified, all documentation contained herein is licensed
+ * under the Creative Commons License, Attribution 4.0 Intl. (the "License");
+ * you may not use this documentation except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * https://creativecommons.org/licenses/by/4.0/
+ *
+ * Unless required by applicable law or agreed to in writing, documentation
+ * 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.
+ *
+ * ============LICENSE_END============================================
+ *
+ * ECOMP is a trademark and service mark of AT&T Intellectual Property.
+ */
+package org.onap.portalapp.service;
+
+import java.util.List;
+
+import org.onap.portalapp.portal.domain.EPUser;
+import org.onap.portalapp.portal.logging.aop.EPMetricsLog;
+import org.onap.portalsdk.core.dao.ProfileDao;
+import org.onap.portalsdk.core.domain.Profile;
+import org.onap.portalsdk.core.service.DataAccessService;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.context.annotation.EnableAspectJAutoProxy;
+import org.springframework.stereotype.Service;
+import org.springframework.transaction.annotation.Transactional;
+
+@Service("epProfileService")
+@Transactional
+@org.springframework.context.annotation.Configuration
+@EnableAspectJAutoProxy
+@EPMetricsLog
+public class EPProfileServiceImpl implements EPProfileService {
+
+ @Autowired
+ private ProfileDao profileDao;
+
+ @Autowired
+ private DataAccessService dataAccessService;
+
+ @SuppressWarnings("unchecked")
+ public List<Profile> findAll() {
+ return getDataAccessService().getList(Profile.class, null);
+ }
+
+ public EPUser getUser(String userId) {
+ return (EPUser) getDataAccessService().getDomainObject(EPUser.class, Long.parseLong(userId), null);
+ }
+
+ public void saveUser(EPUser user) {
+ getDataAccessService().saveDomainObject(user, null);
+ }
+
+ public Profile getProfile(int id) {
+ return profileDao.getProfile(id);
+ }
+
+ public DataAccessService getDataAccessService() {
+ return dataAccessService;
+ }
+
+ public void setDataAccessService(DataAccessService dataAccessService) {
+ this.dataAccessService = dataAccessService;
+ }
+}
diff --git a/ecomp-portal-BE-common/src/main/java/org/onap/portalapp/service/RemoteWebServiceCallService.java b/ecomp-portal-BE-common/src/main/java/org/onap/portalapp/service/RemoteWebServiceCallService.java
new file mode 100644
index 00000000..91b9e0cf
--- /dev/null
+++ b/ecomp-portal-BE-common/src/main/java/org/onap/portalapp/service/RemoteWebServiceCallService.java
@@ -0,0 +1,72 @@
+/*-
+ * ============LICENSE_START==========================================
+ * ONAP Portal
+ * ===================================================================
+ * Copyright (C) 2017 AT&T Intellectual Property. All rights reserved.
+ * ===================================================================
+ *
+ * Unless otherwise specified, all software contained herein is licensed
+ * under the Apache License, Version 2.0 (the "License");
+ * you may not use this software 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.
+ *
+ * Unless otherwise specified, all documentation contained herein is licensed
+ * under the Creative Commons License, Attribution 4.0 Intl. (the "License");
+ * you may not use this documentation except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * https://creativecommons.org/licenses/by/4.0/
+ *
+ * Unless required by applicable law or agreed to in writing, documentation
+ * 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.
+ *
+ * ============LICENSE_END============================================
+ *
+ * ECOMP is a trademark and service mark of AT&T Intellectual Property.
+ */
+package org.onap.portalapp.service;
+
+public interface RemoteWebServiceCallService {
+
+ /**
+ * Answers whether the specified credentials match application information
+ * in the database.
+ *
+ * @param secretKey
+ * Key used to decrypt passwords; ignored if null.
+ * @param requestUebKey
+ * UEB key that identifies the application
+ * @param requestUserName
+ * User name for the application
+ * @param requestPassword
+ * Password for the application
+ * @return True if the UEB key and the credentials match the database
+ * entries; else false.
+ * @throws Exception
+ * If decryption fails.
+ */
+ public boolean verifyRESTCredential(String secretKey, String requestUebKey, String requestUserName,
+ String requestPassword) throws Exception;
+
+ /**
+ *
+ * @param requestUebKey
+ * UEB key
+ * @return boolean
+ * @throws Exception
+ * on error
+ */
+ public boolean verifyAppKeyCredential(String requestUebKey) throws Exception;
+
+}
diff --git a/ecomp-portal-BE-common/src/main/java/org/onap/portalapp/service/sessionmgt/CoreTimeoutHandler.java b/ecomp-portal-BE-common/src/main/java/org/onap/portalapp/service/sessionmgt/CoreTimeoutHandler.java
new file mode 100644
index 00000000..03bc7296
--- /dev/null
+++ b/ecomp-portal-BE-common/src/main/java/org/onap/portalapp/service/sessionmgt/CoreTimeoutHandler.java
@@ -0,0 +1,183 @@
+/*-
+ * ============LICENSE_START==========================================
+ * ONAP Portal
+ * ===================================================================
+ * Copyright (C) 2017 AT&T Intellectual Property. All rights reserved.
+ * ===================================================================
+ *
+ * Unless otherwise specified, all software contained herein is licensed
+ * under the Apache License, Version 2.0 (the "License");
+ * you may not use this software 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.
+ *
+ * Unless otherwise specified, all documentation contained herein is licensed
+ * under the Creative Commons License, Attribution 4.0 Intl. (the "License");
+ * you may not use this documentation except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * https://creativecommons.org/licenses/by/4.0/
+ *
+ * Unless required by applicable law or agreed to in writing, documentation
+ * 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.
+ *
+ * ============LICENSE_END============================================
+ *
+ * ECOMP is a trademark and service mark of AT&T Intellectual Property.
+ */
+package org.onap.portalapp.service.sessionmgt;
+
+import java.util.Calendar;
+import java.util.Hashtable;
+import java.util.Map;
+
+import javax.servlet.http.HttpSession;
+
+import org.onap.portalapp.portal.logging.aop.EPMetricsLog;
+import org.onap.portalsdk.core.domain.sessionmgt.TimeoutVO;
+import org.onap.portalsdk.core.logging.logic.EELFLoggerDelegate;
+import org.onap.portalsdk.core.onboarding.util.PortalApiConstants;
+import org.springframework.context.annotation.EnableAspectJAutoProxy;
+import org.springframework.stereotype.Service;
+
+import com.fasterxml.jackson.core.type.TypeReference;
+import com.fasterxml.jackson.databind.ObjectMapper;
+
+@Service
+@org.springframework.context.annotation.Configuration
+@EnableAspectJAutoProxy
+@EPMetricsLog
+public class CoreTimeoutHandler {
+ private static EELFLoggerDelegate logger = EELFLoggerDelegate.getLogger(CoreTimeoutHandler.class);
+
+ public static final Map<String, HttpSession> sessionMap = new Hashtable<String, HttpSession>();
+ public static final Integer repeatInterval = 15 * 60; // 15 minutes
+ ObjectMapper mapper = new ObjectMapper();
+
+ public static void sessionCreated(String portalJSessionId, String jSessionId, HttpSession session) {
+
+ storeMaxInactiveTime(session);
+
+ // this key is a combination of portal jsession id and app session id
+ session.setAttribute(PortalApiConstants.PORTAL_JSESSION_ID, jSessionKey(jSessionId, portalJSessionId));
+ sessionMap.put((String) session.getAttribute(PortalApiConstants.PORTAL_JSESSION_ID), session);
+
+ }
+
+ protected static void storeMaxInactiveTime(HttpSession session) {
+
+ if (session.getAttribute(PortalApiConstants.GLOBAL_SESSION_MAX_IDLE_TIME) == null)
+ session.setAttribute(PortalApiConstants.GLOBAL_SESSION_MAX_IDLE_TIME, session.getMaxInactiveInterval());
+ }
+
+ public static void sessionDestroyed(HttpSession session) {
+
+ try {
+ sessionMap.remove((String) session.getAttribute(PortalApiConstants.PORTAL_JSESSION_ID));
+ } catch (Exception e) {
+ logger.error(EELFLoggerDelegate.errorLogger, "sessionDestroyed failed on session " + session.getId(), e);
+ }
+
+ }
+
+ public String gatherSessionExtenstions() {
+
+ Map<String, TimeoutVO> sessionTimeoutMap = new Hashtable<String, TimeoutVO>();
+ String jsonMap = "";
+
+ for (String jSessionKey : sessionMap.keySet()) {
+
+ try {
+ // get the expirytime in seconds
+ HttpSession session = sessionMap.get(jSessionKey);
+
+ Long lastAccessedTimeMilliSec = session.getLastAccessedTime();
+ Long maxIntervalMilliSec = session.getMaxInactiveInterval() * 1000L;
+ // Long currentTimeMilliSec = Calendar.getInstance().getTimeInMillis() ;
+ // (maxIntervalMilliSec - (currentTimeMilliSec - lastAccessedTimeMilliSec) + ;
+ Calendar instance = Calendar.getInstance();
+ instance.setTimeInMillis(session.getLastAccessedTime());
+ logger.info(EELFLoggerDelegate.errorLogger,
+ "gatherSessionExtenstions: Session Management: Last Accessed time for " + jSessionKey + ": "
+ + instance.getTime());
+
+ Long sessionTimOutMilliSec = maxIntervalMilliSec + lastAccessedTimeMilliSec;
+
+ sessionTimeoutMap.put(portalJSessionId(jSessionKey),
+ new TimeoutVO(jSessionId(jSessionKey), sessionTimOutMilliSec));
+
+ jsonMap = mapper.writeValueAsString(sessionTimeoutMap);
+ } catch (Exception e) {
+ logger.error(EELFLoggerDelegate.errorLogger, "gatherSessionExtenstions failed", e);
+ }
+ }
+
+ return jsonMap;
+
+ }
+
+ public void updateSessionExtensions(String sessionTimeoutMapStr) throws Exception {
+
+ Map<String, TimeoutVO> sessionTimeoutMap;
+ try {
+ TypeReference<Hashtable<String, TimeoutVO>> typeRef = new TypeReference<Hashtable<String, TimeoutVO>>() {
+ };
+
+ sessionTimeoutMap = mapper.readValue(sessionTimeoutMapStr, typeRef);
+ } catch (Exception e) {
+ logger.error(EELFLoggerDelegate.errorLogger, "updateSessionExtensions failed 1", e);
+ return;
+ }
+ for (String jPortalSessionId : sessionTimeoutMap.keySet()) {
+ try {
+
+ TimeoutVO extendedTimeoutVO = mapper
+ .readValue(mapper.writeValueAsString(sessionTimeoutMap.get(jPortalSessionId)), TimeoutVO.class);
+ HttpSession session = sessionMap.get(jSessionKey(extendedTimeoutVO.getjSessionId(), jPortalSessionId));
+
+ if (session == null) {
+ continue;
+ }
+
+ Long lastAccessedTimeMilliSec = session.getLastAccessedTime();
+ Long maxIntervalMilliSec = session.getMaxInactiveInterval() * 1000L;
+ Long sessionTimOutMilliSec = maxIntervalMilliSec + lastAccessedTimeMilliSec;
+
+ Long maxTimeoutTimeMilliSec = extendedTimeoutVO.getSessionTimOutMilliSec();
+ if (maxTimeoutTimeMilliSec > sessionTimOutMilliSec) {
+ logger.debug(EELFLoggerDelegate.debugLogger,
+ "updateSessionExtensions: Session Management: updated session max idle time");
+ session.setMaxInactiveInterval((int) (maxTimeoutTimeMilliSec - lastAccessedTimeMilliSec) / 1000);
+ }
+ } catch (Exception e) {
+ logger.error(EELFLoggerDelegate.errorLogger,
+ "updateSessionExtensions failed", e);
+ }
+
+ }
+
+ }
+
+ protected static String jSessionKey(String jSessionId, String portalJSessionId) {
+ return portalJSessionId + "-" + jSessionId;
+ }
+
+ protected String portalJSessionId(String jSessionKey) {
+ return jSessionKey.split("-")[0];
+ }
+
+ protected String jSessionId(String jSessionKey) {
+ return jSessionKey.split("-")[1];
+ }
+
+}
diff --git a/ecomp-portal-BE-common/src/main/java/org/onap/portalapp/service/sessionmgt/ManageService.java b/ecomp-portal-BE-common/src/main/java/org/onap/portalapp/service/sessionmgt/ManageService.java
new file mode 100644
index 00000000..3c08f910
--- /dev/null
+++ b/ecomp-portal-BE-common/src/main/java/org/onap/portalapp/service/sessionmgt/ManageService.java
@@ -0,0 +1,125 @@
+/*-
+ * ============LICENSE_START==========================================
+ * ONAP Portal
+ * ===================================================================
+ * Copyright (C) 2017 AT&T Intellectual Property. All rights reserved.
+ * ===================================================================
+ *
+ * Unless otherwise specified, all software contained herein is licensed
+ * under the Apache License, Version 2.0 (the "License");
+ * you may not use this software 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.
+ *
+ * Unless otherwise specified, all documentation contained herein is licensed
+ * under the Creative Commons License, Attribution 4.0 Intl. (the "License");
+ * you may not use this documentation except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * https://creativecommons.org/licenses/by/4.0/
+ *
+ * Unless required by applicable law or agreed to in writing, documentation
+ * 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.
+ *
+ * ============LICENSE_END============================================
+ *
+ * ECOMP is a trademark and service mark of AT&T Intellectual Property.
+ */
+package org.onap.portalapp.service.sessionmgt;
+
+import java.text.ParseException;
+import java.util.Calendar;
+import java.util.Date;
+import java.util.List;
+
+import org.onap.portalapp.portal.logging.aop.EPMetricsLog;
+import org.onap.portalapp.portal.service.EPAppService;
+import org.onap.portalapp.portal.transport.OnboardingApp;
+import org.onap.portalsdk.core.logging.logic.EELFLoggerDelegate;
+import org.onap.portalsdk.core.onboarding.listener.PortalTimeoutHandler;
+import org.onap.portalsdk.core.util.SystemProperties;
+import org.quartz.CronExpression;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.context.annotation.EnableAspectJAutoProxy;
+import org.springframework.stereotype.Service;
+import org.springframework.util.StringUtils;
+
+@Service("manageService")
+@org.springframework.context.annotation.Configuration
+@EnableAspectJAutoProxy
+@EPMetricsLog
+public class ManageService implements PortalTimeoutHandler.SessionCommInf {
+ private EELFLoggerDelegate logger = EELFLoggerDelegate.getLogger(ManageService.class);
+
+ @Autowired
+ private EPAppService appService;
+
+ @Autowired
+ private SessionCommunication sessionCommunication;
+
+ public Integer fetchSessionSlotCheckInterval(String... params) {
+
+ String defaultCronExpressionStr = "0 0/5 * * * ? *";
+ String cronExpressionStr = SystemProperties.getProperty(SystemProperties.SESSIONTIMEOUT_FEED_CRON);
+
+ if (cronExpressionStr == null) {
+ cronExpressionStr = defaultCronExpressionStr;
+ }
+
+ CronExpression cal = null;
+ try {
+ cal = new CronExpression(cronExpressionStr);
+ } catch (ParseException e) {
+ // TODO Auto-generated catch block
+ e.printStackTrace();
+ }
+ final Date nowTime = Calendar.getInstance().getTime();
+ Date nextTime = cal.getNextValidTimeAfter(nowTime);
+ Date nextNextTime = cal.getNextValidTimeAfter(nextTime);
+
+ final int timeDiff = (int)(nextNextTime.getTime()-nextTime.getTime());
+ logger.debug(EELFLoggerDelegate.debugLogger, "Time interval between subsequent session checks " + timeDiff);
+
+ return timeDiff;
+ }
+
+ public void extendSessionTimeOuts(String... params) {
+ try {
+ String sessionMap = params[3];
+
+ logger.debug(EELFLoggerDelegate.debugLogger, "Extending the App sessions for last minute request: " + sessionMap);
+
+ if (StringUtils.isEmpty(sessionMap)) {
+ logger.error(EELFLoggerDelegate.errorLogger, "extendSessionTimeOuts: Skipping session updates since the portal session value is empty.");
+ } else {
+ List<OnboardingApp> appList = appService.getEnabledNonOpenOnboardingApps();
+ for (OnboardingApp onApp : appList) {
+ sessionCommunication.pingSession(onApp, sessionMap);
+ }
+ updateSessionExtensions(sessionMap);
+ sessionCommunication.clear(false);
+ }
+ } catch (Exception e) {
+ logger.error(EELFLoggerDelegate.errorLogger, "extendSessionTimeOuts failed", e);
+ }
+ }
+
+ public String gatherSessionExtenstions() {
+ return PortalTimeoutHandler.gatherSessionExtensions();
+ }
+
+ public void updateSessionExtensions(String sessionTimeoutMapStr) throws Exception {
+ PortalTimeoutHandler.updateSessionExtensions(sessionTimeoutMapStr);
+ }
+
+}
diff --git a/ecomp-portal-BE-common/src/main/java/org/onap/portalapp/service/sessionmgt/SessionCommunication.java b/ecomp-portal-BE-common/src/main/java/org/onap/portalapp/service/sessionmgt/SessionCommunication.java
new file mode 100644
index 00000000..ee525796
--- /dev/null
+++ b/ecomp-portal-BE-common/src/main/java/org/onap/portalapp/service/sessionmgt/SessionCommunication.java
@@ -0,0 +1,290 @@
+/*-
+ * ============LICENSE_START==========================================
+ * ONAP Portal
+ * ===================================================================
+ * Copyright (C) 2017 AT&T Intellectual Property. All rights reserved.
+ * ===================================================================
+ *
+ * Unless otherwise specified, all software contained herein is licensed
+ * under the Apache License, Version 2.0 (the "License");
+ * you may not use this software 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.
+ *
+ * Unless otherwise specified, all documentation contained herein is licensed
+ * under the Creative Commons License, Attribution 4.0 Intl. (the "License");
+ * you may not use this documentation except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * https://creativecommons.org/licenses/by/4.0/
+ *
+ * Unless required by applicable law or agreed to in writing, documentation
+ * 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.
+ *
+ * ============LICENSE_END============================================
+ *
+ * ECOMP is a trademark and service mark of AT&T Intellectual Property.
+ */
+package org.onap.portalapp.service.sessionmgt;
+
+import java.io.BufferedReader;
+import java.io.InputStreamReader;
+import java.net.HttpURLConnection;
+import java.net.URL;
+import java.util.UUID;
+
+import javax.servlet.http.HttpServletResponse;
+
+import org.onap.portalapp.portal.logging.aop.EPAuditLog;
+import org.onap.portalapp.portal.logging.aop.EPMetricsLog;
+import org.onap.portalapp.portal.logging.format.EPAppMessagesEnum;
+import org.onap.portalapp.portal.logging.logic.EPLogUtil;
+import org.onap.portalapp.portal.transport.OnboardingApp;
+import org.onap.portalapp.portal.utils.EPCommonSystemProperties;
+import org.onap.portalapp.portal.utils.EcompPortalUtils;
+import org.onap.portalsdk.core.exception.UrlAccessRestrictedException;
+import org.onap.portalsdk.core.logging.logic.EELFLoggerDelegate;
+import org.slf4j.MDC;
+import org.springframework.context.annotation.EnableAspectJAutoProxy;
+import org.springframework.stereotype.Service;
+import org.springframework.util.StringUtils;
+
+import com.att.eelf.configuration.Configuration;
+
+@Service("sessionCommunication")
+@org.springframework.context.annotation.Configuration
+@EnableAspectJAutoProxy
+public class SessionCommunication {
+ EELFLoggerDelegate logger = EELFLoggerDelegate.getLogger(SessionCommunication.class);
+
+ @EPAuditLog
+ public String sendGet(OnboardingApp app) throws Exception {
+ String appResponse = "";
+ String appName = "";
+ int responseCode = 0;
+ if (app != null && app.name != null && app.name != "") {
+ try {
+ appName = app.name;
+ String url = app.restUrl + "/sessionTimeOuts";
+ String encriptedPwdDB = app.appPassword;
+ String appUserName = app.username;
+
+ setLocalMDCContext(app, "/sessionTimeOuts", url);
+
+ URL obj = new URL(url);
+
+ HttpURLConnection con = (HttpURLConnection) obj.openConnection();
+
+ // optional default is GET
+ con.setRequestMethod("GET");
+ con.setConnectTimeout(3000);
+ con.setReadTimeout(8000);
+ // add request header
+ con.setRequestProperty("username", appUserName);
+ con.setRequestProperty("password", encriptedPwdDB);
+
+ // con.set
+ responseCode = con.getResponseCode();
+ logger.debug(EELFLoggerDelegate.debugLogger, "Response Code : " + responseCode);
+
+ BufferedReader in = new BufferedReader(new InputStreamReader(con.getInputStream()));
+ String inputLine;
+ StringBuffer response = new StringBuffer();
+
+ while ((inputLine = in.readLine()) != null) {
+ response.append(inputLine);
+ }
+
+ in.close();
+ appResponse = response.toString();
+ } catch (UrlAccessRestrictedException e) {
+ responseCode = HttpServletResponse.SC_UNAUTHORIZED;
+ logger.error(EELFLoggerDelegate.errorLogger, String.format(
+ "SessionCommunication.sendGet received an un-authorized exception. AppName: %s", appName));
+ EPLogUtil.logEcompError(logger, EPAppMessagesEnum.BeRestApiAuthenticationError, e);
+ } catch (Exception e) {
+ responseCode = HttpServletResponse.SC_INTERNAL_SERVER_ERROR;
+ String message = String.format(
+ "SessionCommunication.sendGet encountered an Exception. AppName: %s, Details: %s", appName,
+ e.toString());
+ EPLogUtil.logEcompError(logger, EPAppMessagesEnum.BeHttpConnectionError, e);
+ logger.error(EELFLoggerDelegate.errorLogger, message, e);
+ } finally {
+ EcompPortalUtils.setExternalAppResponseCode(responseCode);
+ }
+ } else {
+ logger.error(EELFLoggerDelegate.errorLogger, "SessionCommunication sendGet: app is null");
+ }
+ return appResponse;
+ }
+
+ @EPAuditLog
+ public Boolean pingSession(OnboardingApp app, String sessionTimeoutMap) throws Exception {
+ String appName = "";
+ int responseCode = 0;
+ try {
+ if (app == null)
+ throw new Exception("SessionCommunication.pingSession: app is null");
+ if (app != null && app.name != null && app.name != "") {
+ appName = app.name;
+ }
+ String url = app.restUrl + "/updateSessionTimeOuts";
+ String encriptedPwdDB = app.appPassword;
+ String appUserName = app.username;
+
+ setLocalMDCContext(app, "/updateSessionTimeOuts", url);
+
+ URL obj = new URL(url);
+
+ HttpURLConnection con = (HttpURLConnection) obj.openConnection();
+
+ // optional default is GET
+ con.setRequestMethod("POST");
+ con.setConnectTimeout(3000);
+ con.setReadTimeout(15000);
+
+ // add request header
+ con.setRequestProperty("username", appUserName);
+ con.setRequestProperty("password", encriptedPwdDB);
+
+ con.setRequestProperty("sessionMap", sessionTimeoutMap);
+ con.setDoInput(true);
+ con.setDoOutput(true);
+ con.getOutputStream().write(sessionTimeoutMap.getBytes());
+ con.getOutputStream().flush();
+ con.getOutputStream().close();
+
+ responseCode = con.getResponseCode();
+ logger.debug(EELFLoggerDelegate.debugLogger, "Response Code : " + responseCode);
+ } catch (UrlAccessRestrictedException e) {
+ responseCode = HttpServletResponse.SC_UNAUTHORIZED;
+ String message = String.format(
+ "SessionCommunication.pingSession received an un-authorized exception. AppName: %s", appName);
+ logger.error(EELFLoggerDelegate.errorLogger, message);
+ EPLogUtil.logEcompError(logger, EPAppMessagesEnum.BeRestApiAuthenticationError, e);
+ } catch (Exception e) {
+ responseCode = HttpServletResponse.SC_INTERNAL_SERVER_ERROR;
+ String message = String.format(
+ "SessionCommunication.pingSession encountered an Exception. AppName: %s, Details: %s", appName, e.toString());
+ EPLogUtil.logEcompError(logger, EPAppMessagesEnum.BeHttpConnectionError, e);
+ logger.error(EELFLoggerDelegate.errorLogger, message, e);
+ } finally {
+ EcompPortalUtils.setExternalAppResponseCode(responseCode);
+ }
+
+ return true;
+ }
+
+ @EPAuditLog
+ public Boolean timeoutSession(OnboardingApp app, String portalJSessionId) throws Exception {
+ String appName = "Unknwon";
+ int responseCode = 0;
+ if (app != null && app.name != null && app.name != "") {
+ try {
+ appName = app.name;
+ String url = app.restUrl + "/timeoutSession" + "?portalJSessionId=" + portalJSessionId;
+
+ String encriptedPwdDB = app.appPassword;
+ String appUserName = app.username;
+ // String decreptedPwd = CipherUtil.decrypt(encriptedPwdDB,
+ // SystemProperties.getProperty(SystemProperties.Decryption_Key));
+
+ setLocalMDCContext(app, "/timeoutSession", url);
+
+ URL obj = new URL(url);
+ HttpURLConnection con = (HttpURLConnection) obj.openConnection();
+
+ // optional default is GET
+ con.setRequestMethod("POST");
+ con.setConnectTimeout(3000);
+ con.setReadTimeout(15000);
+
+ // add request header
+ con.setRequestProperty("username", appUserName);
+ con.setRequestProperty("password", encriptedPwdDB);
+
+ // con.setRequestProperty("portalJSessionId", portalJSessionId);
+ con.setDoInput(true);
+ con.setDoOutput(true);
+ con.getOutputStream().flush();
+ con.getOutputStream().close();
+
+ responseCode = con.getResponseCode();
+ logger.debug(EELFLoggerDelegate.debugLogger, "Response Code : " + responseCode);
+ } catch (UrlAccessRestrictedException e) {
+ responseCode = HttpServletResponse.SC_UNAUTHORIZED;
+ String message = String.format(
+ "SessionCommunication.timeoutSession received an un-authorized exception. AppName: %s",
+ appName);
+ logger.error(EELFLoggerDelegate.errorLogger, message);
+ EPLogUtil.logEcompError(logger, EPAppMessagesEnum.BeRestApiAuthenticationError, e);
+ } catch (Exception e) {
+ responseCode = HttpServletResponse.SC_INTERNAL_SERVER_ERROR;
+ String message = String.format(
+ "SessionCommunication.timeoutSession encountered an Exception. AppName: %s, Details: %s",
+ appName, e.toString());
+ EPLogUtil.logEcompError(logger, EPAppMessagesEnum.BeHttpConnectionError, e);
+ logger.error(EELFLoggerDelegate.errorLogger, message, e);
+ } finally {
+ EcompPortalUtils.setExternalAppResponseCode(responseCode);
+ }
+ } else {
+ logger.error(EELFLoggerDelegate.errorLogger, "SessionCommunication pingSession: app is null");
+ }
+ return true;
+ }
+
+ @EPMetricsLog
+ private void setLocalMDCContext(OnboardingApp app, String restPath, String url) {
+ setRequestId();
+ MDC.put(EPCommonSystemProperties.PROTOCOL, EPCommonSystemProperties.HTTP);
+ if (url != null && url.contains("https")) {
+ MDC.put(EPCommonSystemProperties.PROTOCOL, EPCommonSystemProperties.HTTPS);
+ }
+ MDC.put(EPCommonSystemProperties.FULL_URL, url);
+ MDC.put(EPCommonSystemProperties.TARGET_ENTITY, app.myLoginsAppName);
+ MDC.put(EPCommonSystemProperties.TARGET_SERVICE_NAME, restPath);
+ }
+
+ /**
+ * Generates request id, service name fields and loads them into MDC, as these
+ * values could be empty as these session timeout requests are generated at
+ * scheduled intervals using quartz scheduler.
+ */
+ @EPMetricsLog
+ public void setRequestId() {
+ String requestId = MDC.get(Configuration.MDC_KEY_REQUEST_ID);
+ if (StringUtils.isEmpty(requestId)) {
+ MDC.put(Configuration.MDC_KEY_REQUEST_ID, UUID.randomUUID().toString());
+ }
+
+ MDC.put(Configuration.MDC_SERVICE_NAME, "/quartz/keepSessionAlive");
+ MDC.put(EPCommonSystemProperties.PARTNER_NAME, EPCommonSystemProperties.ECOMP_PORTAL_BE);
+ }
+
+ /**
+ * Remove the values from MDC as these requests are executed at regular
+ * intervals based on quartz rather incoming REST API requests.
+ *
+ * @param bAll
+ */
+ @EPMetricsLog
+ public void clear(Boolean bAll) {
+ MDC.remove(EPCommonSystemProperties.EXTERNAL_API_RESPONSE_CODE);
+ if (bAll) {
+ MDC.remove(Configuration.MDC_KEY_REQUEST_ID);
+ MDC.remove(Configuration.MDC_SERVICE_NAME);
+ MDC.remove(EPCommonSystemProperties.PARTNER_NAME);
+ }
+ }
+}
diff --git a/ecomp-portal-BE-common/src/main/java/org/onap/portalapp/service/sessionmgt/TimeoutHandler.java b/ecomp-portal-BE-common/src/main/java/org/onap/portalapp/service/sessionmgt/TimeoutHandler.java
new file mode 100644
index 00000000..e795e98a
--- /dev/null
+++ b/ecomp-portal-BE-common/src/main/java/org/onap/portalapp/service/sessionmgt/TimeoutHandler.java
@@ -0,0 +1,269 @@
+/*-
+ * ============LICENSE_START==========================================
+ * ONAP Portal
+ * ===================================================================
+ * Copyright (C) 2017 AT&T Intellectual Property. All rights reserved.
+ * ===================================================================
+ *
+ * Unless otherwise specified, all software contained herein is licensed
+ * under the Apache License, Version 2.0 (the "License");
+ * you may not use this software 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.
+ *
+ * Unless otherwise specified, all documentation contained herein is licensed
+ * under the Creative Commons License, Attribution 4.0 Intl. (the "License");
+ * you may not use this documentation except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * https://creativecommons.org/licenses/by/4.0/
+ *
+ * Unless required by applicable law or agreed to in writing, documentation
+ * 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.
+ *
+ * ============LICENSE_END============================================
+ *
+ * ECOMP is a trademark and service mark of AT&T Intellectual Property.
+ */
+package org.onap.portalapp.service.sessionmgt;
+
+import java.util.Hashtable;
+import java.util.List;
+import java.util.Map;
+
+import javax.servlet.http.HttpSession;
+
+import org.quartz.DisallowConcurrentExecution;
+import org.quartz.JobExecutionContext;
+import org.quartz.JobExecutionException;
+import org.quartz.PersistJobDataAfterExecution;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.context.ApplicationContext;
+import org.springframework.context.annotation.EnableAspectJAutoProxy;
+import org.springframework.scheduling.quartz.QuartzJobBean;
+import org.onap.portalapp.portal.logging.aop.EPMetricsLog;
+import org.onap.portalapp.portal.logging.format.EPAppMessagesEnum;
+import org.onap.portalapp.portal.logging.logic.EPLogUtil;
+import org.onap.portalapp.portal.service.EPAppService;
+import org.onap.portalapp.portal.transport.OnboardingApp;
+import org.onap.portalapp.portal.utils.EcompPortalUtils;
+import org.onap.portalsdk.core.domain.sessionmgt.TimeoutVO;
+import org.onap.portalsdk.core.logging.logic.EELFLoggerDelegate;
+import org.onap.portalsdk.core.onboarding.util.PortalApiConstants;
+
+import com.fasterxml.jackson.core.JsonParseException;
+import com.fasterxml.jackson.core.JsonProcessingException;
+import com.fasterxml.jackson.core.type.TypeReference;
+import com.fasterxml.jackson.databind.JsonMappingException;
+import com.fasterxml.jackson.databind.ObjectMapper;
+
+/**
+ * Executed periodically by Quartz to discover remote application sessions and
+ * update timeouts suitably.
+ */
+@PersistJobDataAfterExecution
+@DisallowConcurrentExecution
+@org.springframework.context.annotation.Configuration
+@EnableAspectJAutoProxy
+@EPMetricsLog
+public class TimeoutHandler extends QuartzJobBean {
+ private EELFLoggerDelegate logger = EELFLoggerDelegate.getLogger(TimeoutHandler.class);
+
+ private ObjectMapper mapper = new ObjectMapper();
+
+ /**
+ * Supports static call {@link #timeoutSessions(HttpSession)}
+ */
+ private static List<OnboardingApp> onboardedAppList = null;
+
+ @Autowired
+ private SessionCommunication sessionCommunication;
+
+ @Override
+ protected void executeInternal(JobExecutionContext context) throws JobExecutionException {
+ try {
+ //Create a request id if there is none available,
+ //and which will internally be used when making
+ //session extended timeout calls to the partner applications.
+ if (getSessionCommunication()!=null) {
+ getSessionCommunication().setRequestId();
+ }
+ logger.info(EELFLoggerDelegate.debugLogger, "Quartz Cronjob for Session Management begins");
+
+ ManageService manageService = (ManageService) applicationContext.getBean("manageService");
+ EPAppService appService = (EPAppService) applicationContext.getBean("epAppService");
+
+ List<OnboardingApp> appList = appService.getEnabledNonOpenOnboardingApps();
+ onboardedAppList = appList;
+ TypeReference<Hashtable<String, TimeoutVO>> typeRef = new TypeReference<Hashtable<String, TimeoutVO>>() {
+ };
+ String portalJsonSessionStr;
+ Map<String, TimeoutVO> portalSessionTimeoutMap = null;
+
+ portalJsonSessionStr = manageService.gatherSessionExtenstions();
+ if (portalJsonSessionStr == null || portalJsonSessionStr == "") {
+ logger.error(EELFLoggerDelegate.errorLogger, "Session Management: Portal session information is empty.");
+ return;
+ }
+
+ try {
+ portalSessionTimeoutMap = mapper.readValue(portalJsonSessionStr, typeRef);
+ } catch (JsonMappingException | JsonParseException je) {
+ EPLogUtil.logEcompError(logger, EPAppMessagesEnum.BeInvalidJsonInput, je);
+ logger.error(EELFLoggerDelegate.errorLogger, "Session Management: JSON Mapping Exception occurred while gathering the Session", je);
+ return;
+ } catch (Exception e) {
+ logger.error(EELFLoggerDelegate.errorLogger, "Session Management: Error while gather Session from portal", e);
+ return;
+ }
+
+ Map<Long, Map<String, TimeoutVO>> appSessionTimeOutMap = new Hashtable<Long, Map<String, TimeoutVO>>();
+ // determine the Max TimeOut Time for each of the managed sessions
+ for (OnboardingApp app : appList) {
+ if (app.restUrl == null) {
+ logger.info(EELFLoggerDelegate.debugLogger, "Session Management: null restUrl, not fetching from app " + app.name);
+ continue;
+ }
+ logger.info(EELFLoggerDelegate.debugLogger, "Session Management: Calling App " + app.name + " at URL " + app.restUrl);
+ String jsonSessionStr = fetchAppSessions(app);
+ logger.info(EELFLoggerDelegate.debugLogger, "Session Management: App " + app.name + " returned " + jsonSessionStr);
+ if (jsonSessionStr == null || jsonSessionStr.isEmpty())
+ continue;
+
+ try {
+ Map<String, TimeoutVO> sessionTimeoutMap = mapper.readValue(jsonSessionStr, typeRef);
+ appSessionTimeOutMap.put(app.id, sessionTimeoutMap);
+ for (String portalJSessionId : sessionTimeoutMap.keySet()) {
+ final TimeoutVO maxTimeoutVO = portalSessionTimeoutMap.get(portalJSessionId);
+ final TimeoutVO compareTimeoutVO = sessionTimeoutMap.get(portalJSessionId);
+ if (maxTimeoutVO != null && compareTimeoutVO != null) {
+ if (maxTimeoutVO.compareTo(compareTimeoutVO) < 0)
+ portalSessionTimeoutMap.get(portalJSessionId)
+ .setSessionTimOutMilliSec(compareTimeoutVO.getSessionTimOutMilliSec());
+ }
+ }
+ } catch (JsonParseException | JsonMappingException e) {
+ EPLogUtil.logEcompError(logger, EPAppMessagesEnum.BeInvalidJsonInput, e);
+ logger.error(EELFLoggerDelegate.errorLogger,
+ "JSON Mapping/Processing Exception occurred while mapping/parsing the jsonSessionStr", e);
+ continue;
+ } catch (Exception e) {
+ logger.error(EELFLoggerDelegate.errorLogger, "Exception occurred while mapping/parsing the jsonSessionStr", e);
+ continue;
+ }
+
+ }
+
+ // post the updated session timeouts back to the Apps
+ for (OnboardingApp app : appList) {
+ if (app.restUrl == null) {
+ logger.warn(EELFLoggerDelegate.errorLogger, "Session Management: null restUrl, not posting back to app " + app.name);
+ continue;
+ }
+
+ Map<String, TimeoutVO> sessionTimeoutMap = appSessionTimeOutMap.get(app.id);
+ if (sessionTimeoutMap == null || sessionTimeoutMap.isEmpty())
+ continue;
+
+ for (String portalJSessionId : sessionTimeoutMap.keySet()) {
+ try {
+ final TimeoutVO maxTimeoutVO = portalSessionTimeoutMap.get(portalJSessionId);
+ final TimeoutVO setTimeoutVO = sessionTimeoutMap.get(portalJSessionId);
+ if (maxTimeoutVO == null || setTimeoutVO == null) {
+ String message = String.format(
+ "Session Management: Failed to update the session timeouts for the app: %s and the sessionId: %s.",
+ app.name, portalJSessionId);
+ logger.warn(EELFLoggerDelegate.errorLogger, message);
+ continue;
+ }
+ setTimeoutVO.setSessionTimOutMilliSec(maxTimeoutVO.getSessionTimOutMilliSec());
+ } catch (Exception e) {
+ logger.error(EELFLoggerDelegate.errorLogger, "Session Management: error while updating the session timeout map", e);
+ continue;
+ }
+ }
+ logger.info(EELFLoggerDelegate.debugLogger, "Session Management: Updating App " + app.restUrl);
+ String sessionTimeoutMapStr = "";
+ try {
+ sessionTimeoutMapStr = mapper.writeValueAsString(sessionTimeoutMap);
+ } catch (JsonProcessingException je) {
+ logger.error(EELFLoggerDelegate.errorLogger, "executeInternal failed while processing sessionTimeOutMap object to a String", je);
+ EPLogUtil.logEcompError(logger, EPAppMessagesEnum.BeInvalidJsonInput, je);
+ }
+ pingAppSessions(app, sessionTimeoutMapStr);
+ }
+ String portalSessionTimeoutMapStr = "";
+ try {
+ portalSessionTimeoutMapStr = mapper.writeValueAsString(portalSessionTimeoutMap);
+ } catch (JsonProcessingException je) {
+ logger.error(EELFLoggerDelegate.errorLogger, "Exception occurred while processing portalSessionTimeOutMap object to a String", je);
+ EPLogUtil.logEcompError(logger, EPAppMessagesEnum.BeInvalidJsonInput, je);
+ }
+ manageService.updateSessionExtensions(portalSessionTimeoutMapStr);
+ } catch (Exception e) {
+ logger.error(EELFLoggerDelegate.errorLogger, "************************ Session Management: error in managing session timeouts", e);
+ } finally {
+ getSessionCommunication().clear(true);
+ }
+ }
+
+ private String fetchAppSessions(OnboardingApp app) throws Exception {
+ String jsonSessionValue = getSessionCommunication().sendGet(app);
+ getSessionCommunication().clear(false);
+ return jsonSessionValue;
+ }
+
+ private void pingAppSessions(OnboardingApp app, String sessionTimeoutMapStr) throws Exception {
+ getSessionCommunication().pingSession(app, sessionTimeoutMapStr);
+ getSessionCommunication().clear(false);
+ }
+
+ public void timeoutSessions(HttpSession session) throws Exception {
+ String portalJSessionId = portalJSessionId(session);
+ if (onboardedAppList == null)
+ return;
+
+ for (OnboardingApp app : onboardedAppList) {
+ getSessionCommunication().timeoutSession(app, portalJSessionId);
+ getSessionCommunication().clear(false);
+ }
+ }
+
+ protected static String portalJSessionId(HttpSession session) {
+ final Object attribute = session.getAttribute(PortalApiConstants.PORTAL_JSESSION_ID);
+ if (attribute == null)
+ return "";
+ String jSessionKey = (String) attribute;
+ return jSessionKey.split("-")[0];
+ }
+
+ private static ApplicationContext applicationContext;
+
+ public static void setApplicationContext(ApplicationContext _applicationContext) {
+ applicationContext = _applicationContext;
+ }
+
+ public SessionCommunication getSessionCommunication() {
+ if(sessionCommunication == null){
+ if (applicationContext != null)
+ sessionCommunication = (SessionCommunication)applicationContext.getBean("sessionCommunication");
+ }
+
+ return sessionCommunication;
+ }
+
+ public void setSessionCommunication(SessionCommunication sessionCommunication) {
+ this.sessionCommunication = sessionCommunication;
+ }
+
+} \ No newline at end of file
diff --git a/ecomp-portal-BE-common/src/main/java/org/onap/portalapp/util/EPUserUtils.java b/ecomp-portal-BE-common/src/main/java/org/onap/portalapp/util/EPUserUtils.java
new file mode 100644
index 00000000..2292934b
--- /dev/null
+++ b/ecomp-portal-BE-common/src/main/java/org/onap/portalapp/util/EPUserUtils.java
@@ -0,0 +1,401 @@
+/*-
+ * ============LICENSE_START==========================================
+ * ONAP Portal
+ * ===================================================================
+ * Copyright (C) 2017 AT&T Intellectual Property. All rights reserved.
+ * ===================================================================
+ *
+ * Unless otherwise specified, all software contained herein is licensed
+ * under the Apache License, Version 2.0 (the "License");
+ * you may not use this software 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.
+ *
+ * Unless otherwise specified, all documentation contained herein is licensed
+ * under the Creative Commons License, Attribution 4.0 Intl. (the "License");
+ * you may not use this documentation except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * https://creativecommons.org/licenses/by/4.0/
+ *
+ * Unless required by applicable law or agreed to in writing, documentation
+ * 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.
+ *
+ * ============LICENSE_END============================================
+ *
+ * ECOMP is a trademark and service mark of AT&T Intellectual Property.
+ */
+package org.onap.portalapp.util;
+
+import java.util.ArrayList;
+import java.util.Enumeration;
+import java.util.HashMap;
+import java.util.HashSet;
+import java.util.Iterator;
+import java.util.List;
+import java.util.Set;
+import java.util.UUID;
+import java.util.regex.Pattern;
+
+import javax.servlet.ServletContext;
+import javax.servlet.http.HttpServletRequest;
+import javax.servlet.http.HttpSession;
+
+import org.apache.commons.codec.DecoderException;
+import org.apache.commons.codec.binary.Hex;
+import org.onap.portalapp.portal.domain.EPRole;
+import org.onap.portalapp.portal.domain.EPUser;
+import org.onap.portalapp.portal.domain.EPUserApp;
+import org.onap.portalapp.portal.exceptions.RoleFunctionException;
+import org.onap.portalapp.portal.service.EPRoleFunctionService;
+import org.onap.portalsdk.core.domain.RoleFunction;
+import org.onap.portalsdk.core.exception.SessionExpiredException;
+import org.onap.portalsdk.core.logging.logic.EELFLoggerDelegate;
+import org.onap.portalsdk.core.menu.MenuBuilder;
+import org.onap.portalsdk.core.service.DataAccessService;
+import org.onap.portalsdk.core.util.SystemProperties;
+import org.onap.portalsdk.core.web.support.AppUtils;
+import org.springframework.beans.factory.annotation.Autowired;
+
+public class EPUserUtils {
+
+ private static EELFLoggerDelegate logger = EELFLoggerDelegate.getLogger(EPUserUtils.class);
+
+ private final static Long ACCOUNT_ADMIN_ROLE_ID = 999L;
+
+ public static final String ALL_ROLE_FUNCTIONS = "allRoleFunctions";
+
+ // These decode values are based on HexDecoder
+ private static final String decodeValueOfForwardSlash = "2f";
+ private static final String decodeValueOfHyphen = "2d";
+ private static final String decodeValueOfAsterisk = "2a";
+
+ private static DataAccessService dataAccessService;
+
+ /**
+ * Gets the EPUser object from the session.
+ *
+ * @param request
+ * HttpServletRequest
+ * @return EPUser object that was created upon login
+ * @throws SessionExpiredException
+ * if no session exists.
+ */
+ public static EPUser getUserSession(HttpServletRequest request) {
+ HttpSession session = AppUtils.getSession(request);
+ if (session == null)
+ throw new SessionExpiredException();
+ return (EPUser) session.getAttribute(SystemProperties.getProperty(SystemProperties.USER_ATTRIBUTE_NAME));
+ }
+
+ /**
+ * Establishes the user's portal session
+ *
+ * @param request
+ * HttpServletRequest
+ * @param user
+ * EPUser
+ * @param applicationMenuData
+ * Menu data
+ * @param businessDirectMenuData
+ * Menu data
+ * @param loginMethod_ignored
+ * How the user authenticated; ignored
+ * @param ePRoleFunctionService
+ * role function service
+ * @throws DecoderException
+ */
+ @SuppressWarnings("rawtypes")
+ public static void setUserSession(HttpServletRequest request, EPUser user, Set applicationMenuData,
+ Set businessDirectMenuData, String loginMethod_ignored, EPRoleFunctionService ePRoleFunctionService) throws RoleFunctionException {
+ HttpSession session = request.getSession(true);
+
+ // clear the current user session to avoid any conflicts
+ EPUserUtils.clearUserSession(request);
+ session.setAttribute(SystemProperties.getProperty(SystemProperties.USER_ATTRIBUTE_NAME), user);
+
+ setAllRoleFunctions(ePRoleFunctionService.getRoleFunctions(), session);
+
+ ePRoleFunctionService.getRoleFunctions(request, user);
+
+ // truncate the role (and therefore the role function) data to save
+ // memory in the session
+ user.setEPRoles(null);
+ session.setAttribute(SystemProperties.getProperty(SystemProperties.USER_NAME), user.getFullName());
+
+ ServletContext context = session.getServletContext();
+ int licenseVerificationFlag = 3;
+ try {
+ licenseVerificationFlag = (Integer) context.getAttribute("licenseVerification");
+ } catch (Exception e) {
+ logger.error(EELFLoggerDelegate.errorLogger, "setUserSession failed to get licenseVerification attribute",
+ e);
+ }
+ session.setAttribute(SystemProperties.getProperty(SystemProperties.APP_DISPLAY_NAME), "My Portal");
+ session.setAttribute(SystemProperties.getProperty(SystemProperties.APPLICATION_MENU_ATTRIBUTE_NAME),
+ MenuBuilder.filterMenu(applicationMenuData, request));
+ session.setAttribute(SystemProperties.getProperty(SystemProperties.BUSINESS_DIRECT_MENU_ATTRIBUTE_NAME),
+ MenuBuilder.filterMenu(businessDirectMenuData, request));
+ }
+
+ /**
+ * Creates a set of role function names and stores the set as a session
+ * attribute.
+ *
+ * @param allRoleFunctions
+ * List of role functions.
+ * @param session
+ * HttpSession
+ * @throws DecoderException
+ */
+ private static void setAllRoleFunctions(List<RoleFunction> allRoleFunctions, HttpSession session) throws RoleFunctionException {
+ if (allRoleFunctions == null)
+ return;
+ Set<String> roleFnSet = new HashSet<String>();
+ for (RoleFunction roleFn : allRoleFunctions){
+ roleFnSet.add(decodeFunctionCode(roleFn.getCode()));
+ }
+ session.setAttribute(ALL_ROLE_FUNCTIONS, roleFnSet);
+ }
+
+
+ public static String decodeFunctionCode(String str) throws RoleFunctionException{
+ String decodedString = str;
+ List<Pattern> decodingList = new ArrayList<>();
+ decodingList.add(Pattern.compile(decodeValueOfForwardSlash));
+ decodingList.add(Pattern.compile(decodeValueOfHyphen));
+ decodingList.add(Pattern.compile(decodeValueOfAsterisk));
+ for (Pattern xssInputPattern : decodingList) {
+ try {
+ decodedString = decodedString.replaceAll("%" + xssInputPattern,
+ new String(Hex.decodeHex(xssInputPattern.toString().toCharArray())));
+ } catch (DecoderException e) {
+ logger.error(EELFLoggerDelegate.errorLogger, "Failed to decode the Rolefunction: "+ str,
+ e);
+ throw new RoleFunctionException("decode failed", e);
+ }
+ }
+
+ return decodedString;
+ }
+
+ /**
+ * Removes all stored attributes from the user's session
+ *
+ * @param request
+ * HttpServletRequest
+ * @throws SessionExpiredException
+ * if no session exists
+ */
+ private static void clearUserSession(HttpServletRequest request) {
+ HttpSession session = AppUtils.getSession(request);
+ if (session == null)
+ throw new SessionExpiredException();
+
+ // removes all stored attributes from the current user's session
+ session.removeAttribute(SystemProperties.getProperty(SystemProperties.USER_ATTRIBUTE_NAME));
+ session.removeAttribute(SystemProperties.getProperty(SystemProperties.APPLICATION_MENU_ATTRIBUTE_NAME));
+ session.removeAttribute(SystemProperties.getProperty(SystemProperties.BUSINESS_DIRECT_MENU_ATTRIBUTE_NAME));
+ session.removeAttribute(SystemProperties.getProperty(SystemProperties.ROLES_ATTRIBUTE_NAME));
+ session.removeAttribute(SystemProperties.getProperty(SystemProperties.ROLE_FUNCTIONS_ATTRIBUTE_NAME));
+ }
+
+ /**
+ * Gets role information from the user session, in the cached user object. As a
+ * side effect sets a session variable with the roles.
+ *
+ * @param request
+ * HttpServletRequest
+ * @return Map of role ID to role object
+ */
+ @SuppressWarnings("rawtypes")
+ public static HashMap getRoles(HttpServletRequest request) {
+ HashMap roles = null;
+
+ HttpSession session = AppUtils.getSession(request);
+ roles = (HashMap) session.getAttribute(SystemProperties.getProperty(SystemProperties.ROLES_ATTRIBUTE_NAME));
+
+ // if roles are not already cached, let's grab them from the user
+ // session
+ if (roles == null) {
+ EPUser user = getUserSession(request);
+
+ // get all user roles (including the tree of child roles)
+ roles = getAllUserRoles(user);
+
+ session.setAttribute(SystemProperties.getProperty(SystemProperties.ROLES_ATTRIBUTE_NAME), roles);
+ }
+
+ return roles;
+ }
+
+ /**
+ * Builds a map of role ID to role object.
+ *
+ * @param user
+ * EPUser
+ * @return Map of role ID to role object
+ */
+ @SuppressWarnings({ "rawtypes", "unchecked" })
+ private static HashMap getAllUserRoles(EPUser user) {
+ HashMap roles = new HashMap();
+ Iterator i = user.getEPRoles().iterator();
+
+ while (i.hasNext()) {
+ EPRole role = (EPRole) i.next();
+
+ if (role.getActive()) {
+ roles.put(role.getId(), role);
+
+ // let's take a recursive trip down the tree to add all child
+ // roles
+ addChildRoles(role, roles);
+ }
+ }
+
+ // Additionally; the account admin role is overloaded between ecomp
+ // portal and partners; lets also include that
+ Iterator<EPUserApp> appRolesIterator = user.getEPUserApps().iterator();
+ while (appRolesIterator.hasNext()) {
+ EPRole role = (EPRole) appRolesIterator.next().getRole();
+
+ if (role.getActive() && role.getId().equals(ACCOUNT_ADMIN_ROLE_ID)) {
+ roles.put(role.getId(), role);
+
+ // let's take a recursive trip down the tree to add all child
+ // roles
+ addChildRoles(role, roles);
+ }
+ }
+
+ return roles;
+ }
+
+ /**
+ * Adds all child roles of the specified role to the map of roles.
+ *
+ * @param role
+ * EPRole
+ * @param roles
+ * Maps role id to role object
+ */
+ @SuppressWarnings({ "rawtypes", "unchecked" })
+ private static void addChildRoles(EPRole role, HashMap roles) {
+ Set childRoles = role.getChildRoles();
+
+ if (childRoles != null && childRoles.size() > 0) {
+ Iterator j = childRoles.iterator();
+ while (j.hasNext()) {
+ EPRole childRole = (EPRole) j.next();
+
+ if (childRole.getActive()) {
+ roles.put(childRole.getId(), childRole);
+
+ addChildRoles(childRole, roles);
+ }
+ }
+ }
+
+ }
+
+ public static boolean hasRole(EPUser user, String roleKey) {
+ return getAllUserRoles(user).keySet().contains(new Long(roleKey));
+ }
+
+ public static DataAccessService getDataAccessService() {
+ return dataAccessService;
+ }
+
+ @Autowired
+ public void setDataAccessService(DataAccessService dataAccessService) {
+ EPUserUtils.dataAccessService = dataAccessService;
+ }
+
+ /**
+ * Gets the user's ID from the user object in the session
+ *
+ * @param request
+ * HttpServletRequest
+ * @return Integer ID of current user
+ */
+ public static int getUserId(HttpServletRequest request) {
+ return getUserIdAsLong(request).intValue();
+ }
+
+ /**
+ * Gets the user's ID from the user object in the session
+ *
+ * @param request
+ * HttpServletREquest
+ * @return Long ID of current user
+ */
+ public static Long getUserIdAsLong(HttpServletRequest request) {
+ Long userId = new Long(SystemProperties.getProperty(SystemProperties.APPLICATION_USER_ID));
+ if (request != null) {
+ if (getUserSession(request) != null) {
+ userId = getUserSession(request).getId();
+ }
+ }
+ return userId;
+ }
+
+ /**
+ * Gets the request ID from the request.
+ *
+ * @param request
+ * HttpServletRequest
+ * @return Request ID
+ */
+ public static String getRequestId(HttpServletRequest request) {
+ Enumeration<String> headerNames = request.getHeaderNames();
+
+ String requestId = "";
+ try {
+ while (headerNames.hasMoreElements()) {
+ String headerName = (String) headerNames.nextElement();
+ logger.debug(EELFLoggerDelegate.debugLogger,
+ "One header is " + headerName + " : " + request.getHeader(headerName));
+ if (headerName.equalsIgnoreCase(SystemProperties.ECOMP_REQUEST_ID)) {
+ requestId = request.getHeader(headerName);
+ break;
+ }
+ }
+ } catch (Exception e) {
+ logger.error(EELFLoggerDelegate.errorLogger, "getRequestId failed", e);
+ }
+
+ return (requestId.isEmpty() ? UUID.randomUUID().toString() : requestId);
+ }
+
+ /**
+ * Gets the full URL from the request.
+ *
+ * @param request
+ * HttpServletRequest
+ * @return Full URL
+ */
+ public static String getFullURL(HttpServletRequest request) {
+ if (request != null) {
+ StringBuffer requestURL = request.getRequestURL();
+ String queryString = request.getQueryString();
+
+ if (queryString == null) {
+ return requestURL.toString();
+ } else {
+ return requestURL.append('?').append(queryString).toString();
+ }
+ }
+ return "";
+ }
+
+}
diff --git a/ecomp-portal-BE-common/src/main/java/org/onap/portalapp/util/SystemType.java b/ecomp-portal-BE-common/src/main/java/org/onap/portalapp/util/SystemType.java
new file mode 100644
index 00000000..bf277491
--- /dev/null
+++ b/ecomp-portal-BE-common/src/main/java/org/onap/portalapp/util/SystemType.java
@@ -0,0 +1,44 @@
+/*-
+ * ============LICENSE_START==========================================
+ * ONAP Portal
+ * ===================================================================
+ * Copyright (C) 2017 AT&T Intellectual Property. All rights reserved.
+ * ===================================================================
+ *
+ * Unless otherwise specified, all software contained herein is licensed
+ * under the Apache License, Version 2.0 (the "License");
+ * you may not use this software 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.
+ *
+ * Unless otherwise specified, all documentation contained herein is licensed
+ * under the Creative Commons License, Attribution 4.0 Intl. (the "License");
+ * you may not use this documentation except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * https://creativecommons.org/licenses/by/4.0/
+ *
+ * Unless required by applicable law or agreed to in writing, documentation
+ * 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.
+ *
+ * ============LICENSE_END============================================
+ *
+ * ECOMP is a trademark and service mark of AT&T Intellectual Property.
+ */
+package org.onap.portalapp.util;
+
+public enum SystemType {
+
+ APPLICATION,
+// SYSTEM
+}