Merge "Fix ep:1610-1 build process"
authorManoop Talasila <talasila@research.att.com>
Wed, 12 Jul 2017 16:14:24 +0000 (16:14 +0000)
committerGerrit Code Review <gerrit@onap.org>
Wed, 12 Jul 2017 16:14:24 +0000 (16:14 +0000)
46 files changed:
deliveries/Apps_Users_OnBoarding_Script.sql
deliveries/README.md [new file with mode: 0644]
deliveries/configure-and-run.sh [changed mode: 0644->0755]
deliveries/createMaria.sh [changed mode: 0644->0755]
deliveries/dbstart.sh [changed mode: 0644->0755]
deliveries/new_start.sh [changed mode: 0644->0755]
deliveries/new_stop.sh [changed mode: 0644->0755]
deliveries/os_Dockerfile
deliveries/os_build_febe.sh
deliveries/os_docker_push.sh [changed mode: 0644->0755]
deliveries/os_docker_release.sh [changed mode: 0644->0755]
deliveries/os_settings.sh [changed mode: 0644->0755]
deliveries/run.sh [changed mode: 0644->0755]
ecomp-portal-BE-common-test/pom.xml
ecomp-portal-BE-common-test/src/main/java/org/openecomp/portalapp/portal/test/controller/UserRecommendationControllerTest.java [deleted file]
ecomp-portal-BE-common/pom.xml
ecomp-portal-BE-common/src/main/java/org/openecomp/portalapp/portal/controller/UserRecommendationController.java [deleted file]
ecomp-portal-BE-common/src/main/java/org/openecomp/portalapp/portal/listener/HealthMonitor.java
ecomp-portal-BE-common/src/main/java/org/openecomp/portalapp/portal/service/UserRolesCommonServiceImpl.java
ecomp-portal-BE-common/src/main/webapp/WEB-INF/fusion/orm/EP.hbm.xml
ecomp-portal-BE-os/pom.xml
ecomp-portal-DB-os/EcompPortalDMLMySql_1707_OS.sql
ecomp-portal-FE-common/.gitignore
ecomp-portal-FE-common/client/app/filters/pagination-start-from/start-from.filter.js [new file with mode: 0644]
ecomp-portal-FE-common/client/app/services/recommendation/recommendation.service.js [deleted file]
ecomp-portal-FE-common/client/app/views/catalog/add-catalog-dialogs/new-catalog.modal.less [deleted file]
ecomp-portal-FE-common/client/app/views/catalog/catalog.controller.js
ecomp-portal-FE-common/client/app/views/catalog/catalog.tpl.html
ecomp-portal-FE-common/client/app/views/catalog/information-box.tpl.html
ecomp-portal-FE-common/client/app/views/dashboard/dashboard.controller.js
ecomp-portal-FE-common/client/app/views/header/header.controller.js
ecomp-portal-FE-common/client/app/views/header/header.tpl.html
ecomp-portal-FE-common/client/app/views/support/get-access/get-access.controller.js
ecomp-portal-FE-common/client/app/views/support/get-access/get-access.tpl.html
ecomp-portal-FE-common/client/app/views/users/new-user-dialogs/bulk-user.controller.js
ecomp-portal-FE-common/client/app/views/widget-onboarding/widget-onboarding.controller.js
ecomp-portal-FE-os/client/src/directives/search-users/search-users.less
ecomp-portal-FE-os/client/src/services/recommendation/recommendation.service.js [new file with mode: 0644]
ecomp-portal-FE-os/client/src/services/userProfile/userProfile.service.js
ecomp-portal-FE-os/client/src/views/catalog/add-catalog-dialogs/new-catalog.controller.js [deleted file]
ecomp-portal-FE-os/client/src/views/catalog/add-catalog-dialogs/new-catalog.modal.html [deleted file]
ecomp-portal-FE-os/client/src/views/catalog/get-accessswitch.html [new file with mode: 0644]
ecomp-portal-FE-os/client/src/views/footer/footer.controller.js
ecomp-portal-FE-os/client/src/views/footer/footer.tpl.html
ecomp-portal-FE-os/client/src/views/headerRecommendation/headerRecommendations.controller.js [new file with mode: 0644]
ecomp-portal-FE-os/client/src/views/headerRecommendation/headerRecommendations.tpl.html [new file with mode: 0644]

index 64edfc3..73468d3 100644 (file)
@@ -5,10 +5,10 @@ SET FOREIGN_KEY_CHECKS=1;
   
 
 INSERT INTO `fn_app` (`app_id`, `app_name`, `app_image_url`, `app_description`, `app_notes`, `app_url`, `app_alternate_url`, `app_rest_endpoint`, `ml_app_name`, `ml_app_admin_id`, `mots_id`, `app_password`, `open`, `enabled`, `thumbnail`, `app_username`, `ueb_key`, `ueb_secret`, `ueb_topic_name`, `app_type`) VALUES 
-(2, 'xDemo App', 'images/cache/portal-222865671_37476.png', NULL, NULL, 'http://portal.api.simpledemo.openecomp.org:8989/ECOMPSDKAPP/welcome.htm', NULL, 'http://portal.api.simpledemo.openecomp.org:8989/ECOMPSDKAPP/api', '', '', NULL, 'okYTaDrhzibcbGVq5mjkVQ==', 'N', 'Y', NULL, 'Default', 'ueb_key', 'ueb_secret', 'ECOMP-PORTAL-OUTBOX', 1),
-(3, 'DMaaP Bus Ctrl', 'images/cache/portal944583064_80711.png', NULL, NULL, 'http://portal.api.simpledemo.openecomp.org:8989/ECOMPDBCAPP/dbc#/dmaap', NULL, 'http://portal.api.simpledemo.openecomp.org:8989/ECOMPDBCAPP/api', '', '', NULL, 'okYTaDrhzibcbGVq5mjkVQ==', 'N', 'Y', NULL, 'Default', 'ueb_key', 'ueb_secret', 'ECOMP-PORTAL-OUTBOX', 1),
-(4, 'SDC', 'images/cache/portal956868231_53879.png', NULL, NULL, 'http://sdc.api.simpledemo.openecomp.org:8181/sdc1/portal', NULL, 'http://sdc.api.simpledemo.openecomp.org:8080/api/', '', '', NULL, '78ot0W94rpB0o4FYzVoIOg==', 'N', 'Y', NULL, 'Default', 'ueb_key', 'ueb_secret', 'ECOMP-PORTAL-OUTBOX', 1), 
-(5, 'Policy', 'images/cache/portal1470452815_67021.png', NULL, NULL, 'http://policy.api.simpledemo.openecomp.org:8443/ecomp/policy#/Editor', NULL, 'http://policy.api.simpledemo.openecomp.org:8443/ecomp/api', '', '', NULL, 'okYTaDrhzibcbGVq5mjkVQ==', 'N', 'Y', NULL, 'Default', 'ueb_key', 'ueb_secret', 'ECOMP-PORTAL-OUTBOX', 1),
+(2, 'xDemo App', 'images/cache/portal-222865671_37476.png', NULL, NULL, 'http://portal.api.simpledemo.openecomp.org:8989/ECOMPSDKAPP/welcome.htm', NULL, 'http://portal.api.simpledemo.openecomp.org:8989/ECOMPSDKAPP/api/v2', '', '', NULL, 'okYTaDrhzibcbGVq5mjkVQ==', 'N', 'Y', NULL, 'Default', 'ueb_key', 'ueb_secret', 'ECOMP-PORTAL-OUTBOX', 1),
+(3, 'DMaaP Bus Ctrl', 'images/cache/portal944583064_80711.png', NULL, NULL, 'http://portal.api.simpledemo.openecomp.org:8989/ECOMPDBCAPP/dbc#/dmaap', NULL, 'http://portal.api.simpledemo.openecomp.org:8989/ECOMPDBCAPP/api/v2', '', '', NULL, 'okYTaDrhzibcbGVq5mjkVQ==', 'N', 'Y', NULL, 'Default', 'ueb_key', 'ueb_secret', 'ECOMP-PORTAL-OUTBOX', 1),
+(4, 'SDC', 'images/cache/portal956868231_53879.png', NULL, NULL, 'http://sdc.api.simpledemo.openecomp.org:8181/sdc1/portal', NULL, 'http://sdc.api.simpledemo.openecomp.org:8080/api/v2', '', '', NULL, '78ot0W94rpB0o4FYzVoIOg==', 'N', 'Y', NULL, 'Default', 'ueb_key', 'ueb_secret', 'ECOMP-PORTAL-OUTBOX', 1), 
+(5, 'Policy', 'images/cache/portal1470452815_67021.png', NULL, NULL, 'http://policy.api.simpledemo.openecomp.org:8443/ecomp/policy#/Editor', NULL, 'http://policy.api.simpledemo.openecomp.org:8443/ecomp/api/v2', '', '', NULL, 'okYTaDrhzibcbGVq5mjkVQ==', 'N', 'Y', NULL, 'Default', 'ueb_key', 'ueb_secret', 'ECOMP-PORTAL-OUTBOX', 1),
 (6, 'Virtual Infrastructure Deployment', 'images/cache/portal-345993588_92550.png', NULL, NULL, 'http://vid.api.simpledemo.openecomp.org:8080/vid/welcome.htm', NULL, 'http://vid.api.simpledemo.openecomp.org:8080/vid/api/v2', '', '', NULL, 'okYTaDrhzibcbGVq5mjkVQ==', 'N', 'Y', NULL, 'Default', 'ueb_key', 'ueb_secret', 'ECOMP-PORTAL-OUTBOX', 1),
 (7, 'A&AI UI', 'images/cache/portal-345993588_92550.png', NULL, NULL, 'http://aai.ui.simpledemo.openecomp.org:9517/services/aai/webapp/index.html#/viewInspect', NULL, 'http://aai.ui.simpledemo.openecomp.org:9517/api/v2', '', '', NULL, 'okYTaDrhzibcbGVq5mjkVQ==', 'N', 'Y', NULL, 'Default', 'ueb_key', 'ueb_secret', 'ECOMP-PORTAL-OUTBOX', 1);
 
@@ -345,4 +345,14 @@ select * from fn_role where app_id = (select app_id from fn_app where app_name =
 ) b 
 );
 -- end new
+INSERT INTO `fn_common_widget_data` (`id`,`CATEGORY`,`HREF`,`TITLE`,`content`,`event_date`,`SORT_ORDER`) VALUES (6,'NEWS','http://about.att.com/innovationblog/next_att_labs','What\s Next at AT&T Labs? AI Set to Revolutionize the Network',NULL,NULL,10);
+INSERT INTO `fn_common_widget_data` (`id`,`CATEGORY`,`HREF`,`TITLE`,`content`,`event_date`,`SORT_ORDER`) VALUES (7,'NEWS','http://about.att.com/innovationblog/ecomp_code','Code, Community and Commitment – the 3 Cs of Open Source',NULL,NULL,20);
+INSERT INTO `fn_common_widget_data` (`id`,`CATEGORY`,`HREF`,`TITLE`,`content`,`event_date`,`SORT_ORDER`) VALUES (8,'NEWS','http://about.att.com/story/orange_testing_att_open_source_ecomp_platform.html','Orange Testing AT&Ts Open Source ECOMP Platform for Building Software-Defined Network Capabilities',NULL,NULL,30);
+INSERT INTO `fn_common_widget_data` (`id`,`CATEGORY`,`HREF`,`TITLE`,`content`,`event_date`,`SORT_ORDER`) VALUES (9,'NEWS', 'http://about.att.com/innovationblog/linux_foundation','Opening up ECOMP: Our Network Operating System for SDN',NULL,NULL,40);
+INSERT INTO `fn_common_widget_data` (`id`,`CATEGORY`,`HREF`,`TITLE`,`content`,`event_date`,`SORT_ORDER`) VALUES (10,'EVENTS',NULL,'OpenECOMP Launches into Open Source',NULL,'2017-02-14',1);
+INSERT INTO `fn_common_widget_data` (`id`,`CATEGORY`,`HREF`,`TITLE`,`content`,`event_date`,`SORT_ORDER`) VALUES (11,'IMPORTANTRESOURCES','http://about.att.com/content/dam/snrdocs/ecomp.pdf','ECOMP White Paper',NULL,NULL,1);
+INSERT INTO `fn_common_widget_data` (`id`,`CATEGORY`,`HREF`,`TITLE`,`content`,`event_date`,`SORT_ORDER`) VALUES (12,'IMPORTANTRESOURCES','https://wiki.onap.org/','ONAP Wiki',NULL,NULL,2);
+INSERT INTO `fn_common_widget_data` (`id`,`CATEGORY`,`HREF`,`TITLE`,`content`,`event_date`,`SORT_ORDER`) VALUES (13,'IMPORTANTRESOURCES','https://wiki.onap.org/display/DW/Portal','ONAP Wiki, Portal',NULL,NULL,3);
+INSERT INTO `fn_common_widget_data` (`id`,`CATEGORY`,`HREF`,`TITLE`,`content`,`event_date`,`SORT_ORDER`) VALUES (14,'IMPORTANTRESOURCES','https://wiki.onap.org/display/DW/Development+Guides','ONAP User Guide',NULL,NULL,4);
+
 commit;
diff --git a/deliveries/README.md b/deliveries/README.md
new file mode 100644 (file)
index 0000000..bc9bc3f
--- /dev/null
@@ -0,0 +1 @@
+ "moved insert statement to fn_common_widget_data table from EcompPortalDMLMySql_1707_OS.sql to Apps_Users_OnBoarding_Script.sql, the Onboard script in deliveries folder".  
old mode 100644 (file)
new mode 100755 (executable)
old mode 100644 (file)
new mode 100755 (executable)
old mode 100644 (file)
new mode 100755 (executable)
old mode 100644 (file)
new mode 100755 (executable)
old mode 100644 (file)
new mode 100755 (executable)
index b322b54..36ecd85 100644 (file)
@@ -3,6 +3,15 @@
 
 FROM ubuntu:14.04
 
+ARG HTTP_PROXY=${HTTP_PROXY}
+ARG HTTPS_PROXY=${HTTPS_PROXY}
+
+ENV http_proxy $HTTP_PROXY
+ENV https_proxy $HTTPS_PROXY
+
+RUN if [ ! -z ${HTTP_PROXY} ]; then echo "Acquire::http::proxy  \"${HTTP_PROXY}\";" >> /etc/apt/apt.conf; fi && \
+    if [ ! -z ${HTTPS_PROXY} ]; then echo "Acquire::https::proxy \"${HTTPS_PROXY}\";" >> /etc/apt/apt.conf; fi
+
 # Install the python script required for "add-apt-repository"
 RUN apt-get update && apt-get install -y software-properties-common
 
index fee4f2d..fa66f26 100755 (executable)
@@ -85,5 +85,14 @@ cat dbca-create-mysql-1707-os.sql ../../dbca-common/db-scripts/dbca-ddl-mysql-17
 # install into docker
 cd $CURRENTDIR
 
-echo "running: docker build -t ${IMGNAME}  --build-arg VERSION=${VERSION} --build-arg PORTAL_SDK_DIR=${PORTAL_SDK_DIR}  --build-arg SDK_DIR=${SDK_DIR} --build-arg FE_DIR=${FE_DIR}  --build-arg PORTAL_DBC_DIR=${PORTAL_DBC_DIR} -f ./os_Dockerfile ."
-docker build -t ${IMGNAME}  --build-arg VERSION=${VERSION} --build-arg PORTAL_SDK_DIR=${PORTAL_SDK_DIR}  --build-arg SDK_DIR=${SDK_DIR} --build-arg FE_DIR=${FE_DIR}  --build-arg PORTAL_DBC_DIR=${PORTAL_DBC_DIR} -f ./os_Dockerfile .
+PROXY_ARGS=""
+if [ $HTTP_PROXY ]; then
+    PROXY_ARGS+="--build-arg HTTP_PROXY=${HTTP_PROXY}"
+fi
+if [ $HTTPS_PROXY ]; then
+    PROXY_ARGS+=" --build-arg HTTPS_PROXY=${HTTPS_PROXY}"
+fi
+
+EXEC_CMD="docker build -t ${IMGNAME} ${PROXY_ARGS} --build-arg VERSION=${VERSION} --build-arg PORTAL_SDK_DIR=${PORTAL_SDK_DIR}  --build-arg SDK_DIR=${SDK_DIR} --build-arg FE_DIR=${FE_DIR}  --build-arg PORTAL_DBC_DIR=${PORTAL_DBC_DIR} -f ./os_Dockerfile ."
+echo $EXEC_CMD
+$EXEC_CMD
\ No newline at end of file
old mode 100644 (file)
new mode 100755 (executable)
old mode 100644 (file)
new mode 100755 (executable)
old mode 100644 (file)
new mode 100755 (executable)
index d4ab185..0ad53fd
@@ -1,3 +1,5 @@
+#!/bin/bash
+
 IMGNAME=ep:1610-1
 VERSION=1.1.0-SNAPSHOT
 ETCDIR=etc
old mode 100644 (file)
new mode 100755 (executable)
index a2090cf..93e153f 100644 (file)
@@ -4,7 +4,7 @@
 
        <groupId>org.openecomp.portal</groupId>
        <artifactId>ecomp-portal-BE-common-test</artifactId>
-       <version>1.1.0-SNAPSHOT</version>
+       <version>1.1.0</version>
        <packaging>jar</packaging>
        <name>ecompportal-be-common-test</name>
 
diff --git a/ecomp-portal-BE-common-test/src/main/java/org/openecomp/portalapp/portal/test/controller/UserRecommendationControllerTest.java b/ecomp-portal-BE-common-test/src/main/java/org/openecomp/portalapp/portal/test/controller/UserRecommendationControllerTest.java
deleted file mode 100644 (file)
index 8c0a5cd..0000000
+++ /dev/null
@@ -1,69 +0,0 @@
-package org.openecomp.portalapp.portal.test.controller;
-
-import static org.junit.Assert.assertTrue;
-
-import javax.servlet.http.HttpServletRequest;
-import javax.servlet.http.HttpServletResponse;
-
-import org.junit.Before;
-import org.junit.Test;
-import org.junit.runner.RunWith;
-import org.mockito.InjectMocks;
-import org.mockito.MockitoAnnotations;
-import org.openecomp.portalapp.portal.controller.UserRecommendationController;
-import org.openecomp.portalapp.portal.test.core.MockEPUser;
-import org.openecomp.portalapp.test.framework.MockitoTestSuite;
-import org.openecomp.portalsdk.core.web.support.UserUtils;
-import org.powermock.core.classloader.annotations.PrepareForTest;
-import org.powermock.modules.junit4.PowerMockRunner;
-
-@RunWith(PowerMockRunner.class)
-@PrepareForTest(UserUtils.class)
-public class UserRecommendationControllerTest {
-
-       /*
-        * @Mock FunctionalMenuService functionalMenuService = new
-        * FunctionalMenuServiceImpl();
-        * 
-        * @Mock UserNotificationService userNotificationService = new
-        * UserNotificationServiceImpl();
-        */
-
-       @InjectMocks
-       UserRecommendationController userRecommendationController = new UserRecommendationController();
-
-       @Before
-       public void setup() {
-               MockitoAnnotations.initMocks(this);
-       }
-
-       MockEPUser mockUser = new MockEPUser();
-       MockitoTestSuite mockitoTestSuite = new MockitoTestSuite();
-
-       HttpServletRequest mockedRequest = mockitoTestSuite.getMockedRequest();
-       HttpServletResponse mockedResponse = mockitoTestSuite.getMockedResponse();
-       NullPointerException nullPointerException = new NullPointerException();
-
-
-       @Test
-       public void getRecommendationsTest() throws Exception {
-               String recommendations = "{\"id\": \"USERID\",  \"timestamp\": \"TIMESTAMP\",  \"count\": \"count of recommendations returned\",\"recommendations\": [\"recommended action 1\",\"recommended action 2\"] }";
-               // String actualPortalRestResponse = null;
-               String actualPortalRestResponse = recommendations;
-               actualPortalRestResponse = userRecommendationController.getRecommendations(mockedRequest, mockedResponse);
-               assertTrue(actualPortalRestResponse.equals(actualPortalRestResponse));
-
-       }
-       
-       @Test
-       public void getRecommendationsTestForRecommendations() throws Exception {
-               String recommendations = "{\"id\": \"USERID\",  \"timestamp\": \"TIMESTAMP\",  \"count\": \"count of recommendations returned\" }";
-               // String actualPortalRestResponse = null;
-               String actualPortalRestResponse = recommendations;
-               actualPortalRestResponse = userRecommendationController.getRecommendations(mockedRequest, mockedResponse);
-               assertTrue(actualPortalRestResponse.equals(actualPortalRestResponse));
-
-       }
-
-       
-}
index bff7ed2..bf5f9f1 100644 (file)
@@ -5,14 +5,14 @@
        <artifactId>ecompportal-be-common</artifactId>
        <packaging>war</packaging>
        <!-- Version number is managed manually; no Jenkins build.number -->
-       <version>1.1.0-SNAPSHOT</version>
+       <version>1.1.0</version>
 
        <properties>
                <springframework.version>4.2.0.RELEASE</springframework.version>
                <hibernate.version>4.3.11.Final</hibernate.version>
                <eelf.version>1.0.0</eelf.version>
                <fasterxml.version>2.7.4</fasterxml.version>
-               <epsdk.version>1.1.0-SNAPSHOT</epsdk.version>
+               <epsdk.version>1.1.0</epsdk.version>
                <encoding>UTF-8</encoding>
                <!-- Tests usually require some setup that maven cannot do, so skip. -->
                <skipTests>true</skipTests>
                        <version>9.1-901-1.jdbc4</version>
                </dependency>
 
-               <!-- Use Mariadb connector/j for failover -->
-               <dependency>
-                       <groupId>org.mariadb.jdbc</groupId>
-                       <artifactId>mariadb-java-client</artifactId>
-                       <version>1.5.8</version>
-               </dependency>
-
                <!-- Elastic Search -->
                <dependency>
                        <groupId>org.elasticsearch</groupId>
diff --git a/ecomp-portal-BE-common/src/main/java/org/openecomp/portalapp/portal/controller/UserRecommendationController.java b/ecomp-portal-BE-common/src/main/java/org/openecomp/portalapp/portal/controller/UserRecommendationController.java
deleted file mode 100644 (file)
index 3ec06ed..0000000
+++ /dev/null
@@ -1,87 +0,0 @@
-package org.openecomp.portalapp.portal.controller;
-
-import java.util.HashMap;
-import java.util.Map;
-
-import javax.servlet.http.HttpServletRequest;
-import javax.servlet.http.HttpServletResponse;
-
-import org.openecomp.portalapp.controller.EPRestrictedBaseController;
-import org.openecomp.portalapp.portal.domain.EPUser;
-import org.openecomp.portalapp.portal.logging.aop.EPAuditLog;
-import org.openecomp.portalapp.portal.service.ConsulHealthService;
-import org.openecomp.portalapp.util.EPUserUtils;
-import org.openecomp.portalsdk.core.logging.logic.EELFLoggerDelegate;
-import org.openecomp.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.web.bind.annotation.RequestMapping;
-import org.springframework.web.bind.annotation.RequestMethod;
-import org.springframework.web.bind.annotation.RestController;
-import org.springframework.web.client.RestTemplate;
-
-@RestController
-@org.springframework.context.annotation.Configuration
-@EnableAspectJAutoProxy
-@EPAuditLog
-public class UserRecommendationController extends EPRestrictedBaseController {
-
-       private EELFLoggerDelegate logger = EELFLoggerDelegate.getLogger(UserRecommendationController.class);
-
-       @Autowired
-       private ConsulHealthService consulHealthService;
-
-       private static final String MACHINE_LEARNING_SERVICE_CTX = "/ml_api";
-       private static final String GET_RECOMMENDATION =  MACHINE_LEARNING_SERVICE_CTX + "/" + "getRecommendation";
-       private static final String GET_RECOMM_COUNT = MACHINE_LEARNING_SERVICE_CTX + "/" + "getRecommCount";
-       private static final String CONSUL_ML_SERVICE_ID = "mlearning-service"; 
-       private static final String SERVICE_PROTOCOL = "http";
-
-       @RequestMapping(value = {
-                       "/portalApi/getRecommendationsCount" }, method = RequestMethod.GET, produces = "application/json")
-       public String getRecommendationsCount(HttpServletRequest request, HttpServletResponse response) {
-               EPUser user = EPUserUtils.getUserSession(request);
-               Map<String, String> requestMapping = new HashMap<String, String>();
-               requestMapping.put("id", user.getOrgUserId());
-               requestMapping.put("action", "reports");
-
-               HttpHeaders headers = new HttpHeaders();
-               headers.setContentType(MediaType.APPLICATION_JSON);
-
-               // set your entity to send
-               HttpEntity<Map<String,String>> entity = new HttpEntity<>(requestMapping, headers);
-               String endpoint = SERVICE_PROTOCOL + "://"+     consulHealthService.getServiceLocation(CONSUL_ML_SERVICE_ID,
-                               SystemProperties.getProperty("microservices.m-learn.local.port")) + GET_RECOMM_COUNT;
-               logger.debug(EELFLoggerDelegate.debugLogger, "Going to hit mlearning endpoint on: {1}", endpoint);
-               ResponseEntity<String> out = new RestTemplate().exchange(endpoint, HttpMethod.POST, entity, String.class);
-               return out.getBody();
-       }
-
-       @RequestMapping(value = {
-                       "/portalApi/getRecommendations" }, method = RequestMethod.GET, produces = "application/json")
-       public String getRecommendations(HttpServletRequest request, HttpServletResponse response) {
-               EPUser user = EPUserUtils.getUserSession(request);
-               Map<String, String> requestMapping = new HashMap<String, String>();
-               requestMapping.put("id", user.getOrgUserId());
-               requestMapping.put("action", "reports");
-               requestMapping.put("recommendations", "1");
-
-               HttpHeaders headers = new HttpHeaders();
-               headers.setContentType(MediaType.APPLICATION_JSON);
-
-               // set your entity to send
-               HttpEntity<Map<String,String>> entity = new HttpEntity<>(requestMapping, headers);
-               String endpoint = SERVICE_PROTOCOL + "://"+ 
-                               consulHealthService.getServiceLocation(CONSUL_ML_SERVICE_ID,
-                                               SystemProperties.getProperty("microservices.m-learn.local.port")) + GET_RECOMMENDATION;
-               logger.debug(EELFLoggerDelegate.debugLogger, "Going to hit mlearning endpoint on: {1}", endpoint);
-               ResponseEntity<String> out = new RestTemplate().exchange(endpoint, HttpMethod.POST, entity, String.class);
-               return out.getBody();
-       }
-
-}
\ No newline at end of file
index 9de7a4c..f9a6b90 100644 (file)
@@ -19,7 +19,6 @@
  */
 package org.openecomp.portalapp.portal.listener;
 
-import java.util.Date;
 import java.util.List;
 
 import javax.annotation.PostConstruct;
@@ -28,11 +27,9 @@ import javax.annotation.PreDestroy;
 import org.hibernate.Query;
 import org.hibernate.Session;
 import org.hibernate.SessionFactory;
-import org.openecomp.portalapp.portal.domain.SharedContext;
 import org.openecomp.portalapp.portal.logging.aop.EPMetricsLog;
 import org.openecomp.portalapp.portal.logging.format.EPAppMessagesEnum;
 import org.openecomp.portalapp.portal.logging.logic.EPLogUtil;
-import org.openecomp.portalapp.portal.service.SharedContextService;
 import org.openecomp.portalapp.portal.ueb.EPUebHelper;
 import org.openecomp.portalapp.portal.utils.EPCommonSystemProperties;
 import org.openecomp.portalsdk.core.logging.logic.EELFLoggerDelegate;
@@ -47,29 +44,29 @@ import org.springframework.transaction.annotation.Transactional;
 @EPMetricsLog
 public class HealthMonitor {
 
+       private EELFLoggerDelegate logger = EELFLoggerDelegate.getLogger(HealthMonitor.class);
+
        @Autowired
        private SessionFactory sessionFactory;
 
        @Autowired
        private EPUebHelper epUebHelper;
 
-       @Autowired
-       private SharedContextService sharedContextService;
-
        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;
 
-       private EELFLoggerDelegate logger = EELFLoggerDelegate.getLogger(HealthMonitor.class);
-
        public HealthMonitor() {
-
        }
 
        public static boolean isDatabaseUp() {
@@ -103,7 +100,7 @@ public class HealthMonitor {
                int numIntervalsDatabasePermissionsIncorrect = 0;
                int numIntervalsUebHasBeenDown = 0;
 
-               logger.debug(EELFLoggerDelegate.debugLogger, "monitorEPHealth started");
+               logger.debug(EELFLoggerDelegate.debugLogger, "monitorEPHealth thread started");
 
                long sleepInterval = (Long
                                .valueOf(SystemProperties.getProperty(EPCommonSystemProperties.HEALTH_POLL_INTERVAL_SECONDS)) * 1000);
@@ -146,7 +143,7 @@ public class HealthMonitor {
                        if (dbPermissionsOk == false) {
                                if ((numIntervalsDatabasePermissionsIncorrect % numIntervalsBetweenAlerts) == 0) {
                                        logger.debug(EELFLoggerDelegate.debugLogger,
-                                                       "monitorEPHealth: database permissions not correct, logging to error log to trigger alert.");
+                                                       "monitorEPHealth: database permissions incorrect, logging to error log to trigger alert.");
                                        EPLogUtil.logEcompError(logger, EPAppMessagesEnum.BeHealthCheckMySqlError);
                                        numIntervalsDatabasePermissionsIncorrect++;
                                } else {
@@ -162,8 +159,10 @@ public class HealthMonitor {
                        //
                        uebUp = this.checkIfUebUp();
                        if (uebUp == false) {
+
                                if ((numIntervalsUebHasBeenDown % numIntervalsBetweenAlerts) == 0) {
-                                       logger.debug(EELFLoggerDelegate.debugLogger, "UEB down, logging to error log to trigger alert");
+                                       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++;
@@ -189,15 +188,18 @@ public class HealthMonitor {
                        // 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.debug(EELFLoggerDelegate.debugLogger, "monitorEPHealth: interrupted, leaving loop");
+                               logger.info(EELFLoggerDelegate.errorLogger, "monitorEPHealth: thread interrupted");
                                break;
                        }
 
                        try {
                                Thread.sleep(sleepInterval);
                        } catch (InterruptedException e) {
-                               logger.error(EELFLoggerDelegate.errorLogger, "monitorEPHealth interrupted", e);
+                               logger.error(EELFLoggerDelegate.errorLogger, "monitorEPHealth: sleep interrupted", e);
                                Thread.currentThread().interrupt();
                        }
                }
@@ -205,7 +207,6 @@ public class HealthMonitor {
 
        @PostConstruct
        public void initHealthMonitor() {
-
                healthMonitorThread = new Thread("EP HealthMonitor thread") {
                        public void run() {
                                try {
@@ -228,28 +229,35 @@ public class HealthMonitor {
        }
 
        /**
-        * Writes and reads the database; cleans up when finished.
+        * 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 on success; false otherwise.
+        * @return true if the database can be read.
         */
        private boolean checkIfDatabaseUp() {
                boolean isUp = false;
+               Session localSession = null;
                try {
-                       final Date now = new Date();
-                       final String contextId = "checkIfDatabaseUp-" + Long.toString(now.getTime());
-                       final String key = "checkIfDatabaseUp-key";
-                       final String value = "checkIfDatabaseUp-value";
-                       sharedContextService.addSharedContext(contextId, key, value);
-                       SharedContext sc = sharedContextService.getSharedContext(contextId, key);
-                       if (sc == null || sc.getCvalue() == null || !value.equals(sc.getCvalue()))
-                               throw new Exception("Failed to retrieve shared context");
-                       int removed = sharedContextService.deleteSharedContexts(contextId);
-                       if (removed != 1)
-                               throw new Exception("Failed to delete shared context");
-                       isUp = true;
+                       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.error(EELFLoggerDelegate.errorLogger, "checkIfDatabaseUp failed", e);
+                       logger.debug(EELFLoggerDelegate.debugLogger, "checkIfDatabaseUp failed", e);
                        isUp = false;
+               } finally {
+                       if (localSession != null)
+                               localSession.close();
                }
                return isUp;
        }
@@ -273,8 +281,7 @@ public class HealthMonitor {
                } catch (Exception e) {
                        logger.error(EELFLoggerDelegate.errorLogger, "checkClusterStatus failed", e);
                        if ((e.getCause() != null) && (e.getCause().getMessage() != null)) {
-                               logger.error(EELFLoggerDelegate.errorLogger,
-                                               "checkClusterStatus() exception cause", e.getCause());
+                               logger.error(EELFLoggerDelegate.errorLogger, "checkClusterStatus failure cause", e.getCause());
                        }
                        isUp = false;
                } finally {
@@ -305,7 +312,7 @@ public class HealthMonitor {
                                }
                                if (isUp == false) {
                                        logger.error(EELFLoggerDelegate.errorLogger,
-                                                       "checkDatabaseAndPermissions() returning false.  SHOW GRANTS FOR CURRENT_USER being dumped:");
+                                                       "checkDatabasePermissions returning false.  SHOW GRANTS FOR CURRENT_USER being dumped:");
                                        for (String str : grantsList) {
                                                logger.error(EELFLoggerDelegate.errorLogger, "grants output item = [" + str + "]");
                                        }
@@ -314,8 +321,7 @@ public class HealthMonitor {
                } catch (Exception e) {
                        logger.error(EELFLoggerDelegate.errorLogger, "checkDatabasePermissions failed", e);
                        if ((e.getCause() != null) && (e.getCause().getMessage() != null)) {
-                               logger.error(EELFLoggerDelegate.errorLogger,
-                                               "checkDatabasePermissions() exception msg = ", e.getCause());
+                               logger.error(EELFLoggerDelegate.errorLogger, "checkDatabasePermissions failure cause", e.getCause());
                        }
                        isUp = false;
                } finally {
index 727f83d..8040895 100644 (file)
@@ -243,7 +243,10 @@ public class UserRolesCommonServiceImpl  {
                                        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){
+                                       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);
                                        }
                                }
@@ -276,15 +279,18 @@ public class UserRolesCommonServiceImpl  {
                                        }
                                        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 {
+                                                       userApp.setRole(rolesMap.get(userRole.getId()));        
                                                }
-                                               EPUserApp userApp = new EPUserApp();
+
                                                userApp.setUserId(client.getId());
                                                userApp.setApp(app);
-                                               userApp.setRole(("PUT".equals(reqType) || "POST".equals(reqType) && userRole.getId().equals(PortalConstants.ACCOUNT_ADMIN_ROLE_ID)) ?  role : rolesMap.get(userRole.getId()));
                                                localSession.save(userApp);
                                                localSession.flush();
                                        }
@@ -698,7 +704,7 @@ public class UserRolesCommonServiceImpl  {
                                        result = true;
                                } catch (Exception e) {
                                        logger.error(EELFLoggerDelegate.errorLogger,
-                                                       "applyChangesInUserRolesForAppToEcompDB: failed to syncUserRoles for attuid " + userId, e);
+                                                       "applyChangesInUserRolesForAppToEcompDB: failed to syncUserRoles for orgUserId " + userId, e);
                                        if("DELETE".equals(reqType)){
                                                throw new Exception(e.getMessage());
                                        }
@@ -953,7 +959,7 @@ public class UserRolesCommonServiceImpl  {
         * Pushes specified user details to the specified remote app.
         * 
         * @param userId
-        *            ATT UID identifying user at remote app in REST endpoint path
+        *            OrgUserId identifying user at remote app in REST endpoint path
         * @param user
         *            User details to be pushed
         * @param app
@@ -1118,10 +1124,10 @@ public class UserRolesCommonServiceImpl  {
                                                        /*if (userRolesInRemoteApp.size() == 0) {
                                                                logger.debug(EELFLoggerDelegate.debugLogger,
                                                                                "setAppWithUserRoleStateForUser: no roles in app {}, set user {} to inactive", app,
-                                                                               attuid);
+                                                                               orgUserId);
                                                                //TODO Need  to fix the logged in user is not set to inactive
                                                                remoteAppUser.setActive(false);
-                                                               postUserToRemoteApp(attuid, user, app, applicationsRestClientService);
+                                                               postUserToRemoteApp(orgUserId, user, app, applicationsRestClientService);
                                                        }*/
 
                                        }
@@ -1189,7 +1195,7 @@ public class UserRolesCommonServiceImpl  {
                        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");
+                               throw new Exception("'" +roleInAppForUser.getRoleName() + "'" +" role does not exist for " + appName + " application");
                        }
                        if (!existingAppRole.getActive()) {
                                logger.error(EELFLoggerDelegate.errorLogger, "roleInAppForUserList failed for the roles {}",
@@ -1265,10 +1271,18 @@ public class UserRolesCommonServiceImpl  {
        public List<RoleInAppForUser> getAppRolesForUser(Long appId, String userId, Boolean extRequestValue) {
 
                List<RoleInAppForUser> rolesInAppForUser = null;
+               List<EPUser> userInfo = null;
                try {
 
                        // for ecomp portal app, no need to make a remote call
-                       if (appId == PortalConstants.PORTAL_APP_ID) {
+                       if (appId == PortalConstants.PORTAL_APP_ID) {           
+                               final Map<String, String> userParams = new HashMap<>();
+                               userParams.put("orgUserIdValue", userId);
+                               userInfo =      checkIfUserExists(userParams);
+                               if(userInfo.size() == 0 || userInfo.isEmpty())
+                               {
+                                       createLocalUserIfNecessary(userId);
+                               }
 
                                List<Role> roleList = roleService.getAvailableRoles();
                                List<Role> activeRoleList = new ArrayList<Role>();
index 84f7b7e..eea9467 100644 (file)
                                and a.is_for_all_roles = 'N'
                                ) a,
                                (
-                               select a.user_id, c.role_id, c.app_id, d.APP_NAME
+                               select distinct a.user_id, c.role_id, c.app_id, d.APP_NAME
                                from fn_user a, fn_user_role b, fn_role c, fn_app d
-                               where a.user_id = b.user_id
+                               where COALESCE(c.app_id,1) = d.app_id
+                               and a.user_id = b.user_id
                                and a.user_id = :user_id
                                and b.role_id = c.role_id
-                               and c.app_id = d.app_id
-                               and d.enabled='Y'
+                       and (d.enabled='Y' or d.app_id=1)
                                )b
                                where
                                (
@@ -821,13 +821,13 @@ where fn_role.app_id = fn_app.app_id and fn_app.enabled='Y' order by app_name
                                )
                                ) a,
                                (
-                               select a.user_id, c.role_id, c.app_id, d.APP_NAME
+                               select distinct a.user_id, c.role_id, c.app_id, d.APP_NAME
                                from fn_user a, fn_user_role b, fn_role c, fn_app d
-                               where a.user_id = b.user_id
+                               where COALESCE(c.app_id,1) = d.app_id
+                       and a.user_id = b.user_id
                                and a.user_id = :user_id
                                and b.role_id = c.role_id
-                               and c.app_id = d.app_id
-                               and d.enabled='Y'
+                       and (d.enabled='Y' or d.app_id=1)
                                ) b
                                where
                                (
index 0e7eb0b..4592749 100644 (file)
                <springframework.version>4.2.0.RELEASE</springframework.version>
                <hibernate.version>4.3.11.Final</hibernate.version>
                <eelf.version>1.0.0</eelf.version>
-               <epsdk.version>1.1.0-SNAPSHOT</epsdk.version>
-               <portal.version>1.1.0-SNAPSHOT</portal.version>
+               <epsdk.version>1.1.0</epsdk.version>
+               <portal.version>1.1.0</portal.version>
                <encoding>UTF-8</encoding>
                <!-- Tests usually require some setup that maven cannot do, so skip. -->
                <skiptests>false</skiptests>
+               <!-- Jenkins invokes mvn with argument -Dbuild.number=${BUILD_NUMBER} -->
+               <build.number>0</build.number>
                <sonar.exclusions>**.js</sonar.exclusions>
                <nexusproxy>https://nexus.onap.org</nexusproxy>
                <snapshotNexusPath>content/repositories/snapshots/</snapshotNexusPath>
                                                        <addDefaultImplementationEntries>true</addDefaultImplementationEntries>
                                                </manifest>
                                                <manifestEntries>
-                                                       <Build-Number>${build.number}</Build-Number>
+                                                       <Build-Number>${project.version}.${build.number}</Build-Number>
                                                        <Build-Time>${maven.build.timestamp}</Build-Time>
                                                </manifestEntries>
                                        </archive>
index bbdba3c..ace9d45 100644 (file)
@@ -17,16 +17,9 @@ Insert into fn_user_role (USER_ID,ROLE_ID,PRIORITY,APP_ID) values (1,1,NULL,1);
 Insert into fn_user_role (USER_ID,ROLE_ID,PRIORITY,APP_ID) values (1,950,NULL,1);
 Insert into fn_user_role (USER_ID,ROLE_ID,PRIORITY,APP_ID) values (1,999,NULL,1);
 
-
-INSERT INTO fn_common_widget_data (id,CATEGORY,HREF,TITLE,content,event_date,SORT_ORDER) values (6,'NEWS','http://about.att.com/innovationblog/next_att_labs','What\s Next at AT&T Labs? AI Set to Revolutionize the Network',NULL,NULL,10);
-INSERT INTO fn_common_widget_data (id,CATEGORY,HREF,TITLE,content,event_date,SORT_ORDER) values (7,'NEWS','http://about.att.com/innovationblog/ecomp_code','Code, Community and Commitment - the 3 Cs of Open Source',NULL,NULL,20);
-INSERT INTO fn_common_widget_data (id,CATEGORY,HREF,TITLE,content,event_date,SORT_ORDER) values (8,'NEWS','http://about.att.com/story/orange_testing_att_open_source_ecomp_platform.html','Orange Testing AT&Ts Open Source ECOMP Platform for Building Software-Defined Network Capabilities',NULL,NULL,30);
-INSERT INTO fn_common_widget_data (id,CATEGORY,HREF,TITLE,content,event_date,SORT_ORDER) values (9,'NEWS', 'http://about.att.com/innovationblog/linux_foundation','Opening up ECOMP: Our Network Operating System for SDN',NULL,NULL,40);
-INSERT INTO fn_common_widget_data (id,CATEGORY,HREF,TITLE,content,event_date,SORT_ORDER) values (10,'EVENTS',NULL,'OpenECOMP Launches into Open Source',NULL,'2017-02-14',1);
-INSERT INTO fn_common_widget_data (id,CATEGORY,HREF,TITLE,content,event_date,SORT_ORDER) values (11,'IMPORTANTRESOURCES','http://about.att.com/content/dam/snrdocs/ecomp.pdf','ECOMP White Paper',NULL,NULL,1);
-INSERT INTO fn_common_widget_data (id,CATEGORY,HREF,TITLE,content,event_date,SORT_ORDER) values (12,'IMPORTANTRESOURCES','https://openecomp.atlassian.net/wiki/display/DW/Developer+Wiki+for+OpenECOMP','OpenECOMP Wiki',NULL,NULL,2);
-INSERT INTO fn_common_widget_data (id,CATEGORY,HREF,TITLE,content,event_date,SORT_ORDER) values (13,'IMPORTANTRESOURCES','https://openecomp.atlassian.net/wiki/display/DW/Portal+and+Dashboard','OpenECOMP Wiki, Portal',NULL,NULL,3);
-INSERT INTO fn_common_widget_data (id,CATEGORY,HREF,TITLE,content,event_date,SORT_ORDER) values (14,'IMPORTANTRESOURCES','https://openecomp.atlassian.net/wiki/display/DW/Portal+and+Dashboard','OpenECOMP User Guide',NULL,NULL,4);
+-- change to inactive for following menu
+update fn_menu set active_yn='N' where menu_id=14; /* web analytics */
+update fn_menu set active_yn='N' where menu_id=16; /* web analytics onboarding*/
 
 INSERT INTO cr_report 
        (rep_id, title, descr, public_yn, report_xml, create_id, create_date, maint_id, maint_date, menu_id, menu_approved_yn, owner_id, folder_id, dashboard_type_yn, dashboard_yn) 
index a82f945..2b96431 100644 (file)
@@ -1,3 +1,4 @@
 .classpath
 .project
+/.settings/
 /target/
diff --git a/ecomp-portal-FE-common/client/app/filters/pagination-start-from/start-from.filter.js b/ecomp-portal-FE-common/client/app/filters/pagination-start-from/start-from.filter.js
new file mode 100644 (file)
index 0000000..1bf3398
--- /dev/null
@@ -0,0 +1,30 @@
+/*-
+ * ================================================================================
+ * 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.
+ * ================================================================================
+ */
+'use strict';
+
+angular.module('ecompApp')
+    .filter('startFrom', () => {
+        return function (input, start) {
+            if (!input || !input.length) { return; }
+
+            start = +start;
+            return input.slice(start);
+        };
+    });
diff --git a/ecomp-portal-FE-common/client/app/services/recommendation/recommendation.service.js b/ecomp-portal-FE-common/client/app/services/recommendation/recommendation.service.js
deleted file mode 100644 (file)
index aa2a463..0000000
+++ /dev/null
@@ -1,88 +0,0 @@
-/*-
- * ================================================================================
- * 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.
- * ================================================================================
- */
-/**
- * Created by wl849v on 12/14/2016.
- */
-'use strict';
-(function () {
-    class RecommendationService {
-       constructor($q, $log, $http, conf, uuid,utilsService) {
-            this.$q = $q;
-            this.$log = $log;
-            this.$http = $http;
-            this.conf = conf;
-            this.uuid = uuid;
-            this.recommendationCount = {count:0};
-            this.refreshCount = 0;
-            this.maxCount = 0;
-            this.utilsService = utilsService;            
-        }      
-        getRecommendationCount() {
-                return this.recommendationCount;
-         }
-        setRecommendationCount(count) {
-               this.recommendationCount.count = count;
-        }
-        getRefreshCount() {
-            return this.refreshCount;
-        }
-        setRefreshCount(count){
-            this.refreshCount = count;
-        }
-        setMaxRefreshCount(count){
-            this.maxCount = count;
-        }
-        decrementRefreshCount(){
-            this.refreshCount = this.refreshCount - 1;
-        }
-        
-        
-        getRecommendations(){
-               let deferred = this.$q.defer();
-            this.$http({
-                    method: "GET",
-                    cache: false,
-                    url: this.conf.api.getRecommendations,
-                    headers: {
-                        'X-ECOMP-RequestID':this.uuid.generate()
-                    }
-                })
-                .then( res => {
-                    // If response comes back as a redirected HTML page which IS NOT a success                 
-                    if (this.utilsService.isValidJSON(res.data)=== false) {
-                       this.$log.error('NotificationService::getRecommendations Failed');
-                        deferred.reject("NotificationService::getRecommendations Failed");
-                    } else {
-                        deferred.resolve(res);
-                    }
-                })
-                .catch( status => {
-                       this.$log.error('NotificationService::getRecommendations Failed', status);
-                    deferred.reject(status);
-                });
-           
-            return deferred.promise;
-       }
-        
-       
-    }
-    RecommendationService.$inject = ['$q', '$log', '$http', 'conf', 'uuid4','utilsService'];
-    angular.module('ecompApp').service('recommendationService', RecommendationService)
-})();
diff --git a/ecomp-portal-FE-common/client/app/views/catalog/add-catalog-dialogs/new-catalog.modal.less b/ecomp-portal-FE-common/client/app/views/catalog/add-catalog-dialogs/new-catalog.modal.less
deleted file mode 100644 (file)
index 5568ca8..0000000
+++ /dev/null
@@ -1,125 +0,0 @@
-.new-catalog-modal {
-  height: 430px;
-
-  .user-catalog-roles{
-    .title{
-      //.n18r;
-      .dGray18r;  //AT&T Dark Gray
-      border-bottom: @portalDBlue 3px solid;
-    }
-    
-       input:not([type="button"]) {
-    height: 13px;
-} 
-    .display-userApp-Catalog-Roles
-    {
-    padding-left: 16px;
-    padding-top: 10px;
-    font-family: Omnes-ECOMP-W02,Arial;
-    font-size: 18px;
-    color: #5a5a5a;
-    }
-       
-       #pending-checkbox{      
-       font-family: Omnes-ECOMP-W02,Arial;
-       font-size: 15px; 
-       color: #5a5a5a;
-       }
-    .app-catalog-roles-list{
-      height: 286px;
-      
-      
-      .app-catalog-item{
-        border: 1px solid @portalLGray;
-        border-radius: 2px;
-        background-color: @funcBkgGray;
-
-        padding: 10px;
-        margin-top: 8px;
-        //margin-right: 6px;
-        //margin-left: 6px;
-
-        .app-catalog-item-left{
-          padding-top: 0;
-          line-height: 30px;
-          height: 30px;
-          vertical-align: middle;
-          display:inline-block;
-          width: 45%;
-          border-radius: 2px;
-          border: 1px solid @portalLGray;
-          margin-right: 10px;
-          padding-left: 4px;
-          background: @portalWhite;
-          white-space: nowrap;
-
-        }
-        .app-catalog-item-right{
-          display:inline-block;
-          width: 45%;
-          border-radius: 2px;
-          border: 1px solid @portalLGray;
-          background: @portalWhite;
-          vertical-align: middle;
-        }
-
-        .app-catalog-item-right-error{
-          .portalRed;
-          padding: 7px 7px 7px 7px;
-          display:inline-block;
-          width: 45%;
-          border-radius: 2px;
-          border: 1px solid @portalLGray;
-          background: @portalWhite;
-          vertical-align: middle;
-        }
-
-        .app-catalog-item-right-contacting{
-          .portalGreen;
-          padding: 7px 7px 7px 7px;
-          display:inline-block;
-          width: 45%;
-          border-radius: 2px;
-          border: 1px solid @portalLGray;
-          background: @portalWhite;
-          vertical-align: middle;
-        }
-
-        .app-select-left{
-          width: 45%;
-          margin-right: 10px;
-          vertical-align: middle;
-
-
-          .select-field{
-            padding-top: 0;
-            line-height: 30px;
-            height: 30px;
-            vertical-align: middle;
-            border-radius: 2px;
-            border: 1px solid @portalLGray;
-            margin-right: 10px;
-            padding-left: 4px;
-            background: @portalWhite;
-            display:inline-block;
-          }
-        }
-
-
-        .app-item-delete{
-          .ico_trash_default;
-          display: inline-block;
-          vertical-align: 2px;
-          cursor: pointer;
-          position: relative;
-          top: 6px;
-          color: transparent;
-          margin-left: 8px;
-
-        }
-
-      }
-    }
-
-  }
-}
index 150a305..1685c13 100644 (file)
@@ -60,6 +60,13 @@ function _classCallCheck(instance, Constructor) {
             getExternalAccess();
         };
         
+               this.getAccess = function(item) {
+                       if(!item.access)
+                               confirmBoxService.showDynamicInformation(item,
+                                       'app/views/catalog/information-box.tpl.html','CatalogConfirmationBoxCtrl'
+                               ).then(isConfirmed => {});  
+               };
+               
         var getExternalAccess = () => {
                ExternalRequestAccessService.getExternalRequestAccessServiceInfo().then(
                                function(property) {
@@ -125,19 +132,18 @@ function _classCallCheck(instance, Constructor) {
                 data = {
                     dialogState: 2,
                     selectedUser:{
-                        attuid: $scope.attuid,
+                       orgUserId: $scope.orgUserId,
                         firstName: $scope.firstName,
                         lastName: $scope.lastName,
                         headerText: item.headerText,
                         haloAppName : item.mlAppName,
                        item: item,
-                       extReqValue : externalRequest
                         
                     }
                 }
             ngDialog.open({
-                templateUrl: 'app/views/catalog/add-catalog-dialogs/new-catalog.modal.html',
-                controller: 'NewCatalogModalCtrl',
+                templateUrl: 'app/views/catalog/request-access-catalog-dialogs/request-access-catalog.modal.html',
+                controller: 'ExternalRequestAccessCtrl',
                 controllerAs: 'userInfo',
                 data: data
             }).closePromise.then(needUpdate => {
@@ -183,7 +189,7 @@ function _classCallCheck(instance, Constructor) {
                                .getUserProfile()
                                .then(
                                                function(profile) {
-                                                       $scope.attuid = profile.orgUserId;
+                                                       $scope.orgUserId = profile.orgUserId;
                                                        $scope.firstName = profile.firstName;
                                                        $scope.lastName = profile.lastName;
                                                        $scope.appCatalog = [];
index b4063ad..fd71e59 100644 (file)
                                                                                </label> 
                                                                                <i ng-show="item.pending" class="icon-tickets-contested"></i>                                                                                                                                                   
                                                                        </div>
-                                                               </div>
-                                                               <div class="gridster-box-content"
-                                                                       ng-style="{'cursor':'pointer',
-                                                                               'background-image': 'url('+(item.imageLink)+')',
-                                                                               'order': item.order, 
-                                                                               'background-color':'white',
-                                                                               'background-repeat': 'no-repeat',
-                                                                               'background-size': '170px 130px'}"
-                                                                       ng-click="catalog.openAddRoleModal(item)"
-                                                                       ng-hide="users.isLoadingTable && !users.getAppCatalogIsDone"
-                                                                       >
-                                                               </div>
+                                                               </div>                                                          
+                                                               <div ng-include src="'app/views/catalog/get-accessswitch.html'"></div>
                                                        </div>
                                                </li>
                                        </ul>
index 8a84854..2802dac 100644 (file)
     <div class="confirmation-message-wrap">
         <div class="confirmation-message" >
                        <div>
-                               You do not have access to this application.  
-                               See the 
+                               You do not have access to this application. To request access to an application, please visit the
                                <a href="" ng-click="confirmBox.goTo('root.getAccess', {appName: confirmBox.message.headerText})">
-                                       Get Access page</a> and request access at MyLogins.
-                                       <br><br>
-                                       You may check this box if access is pending: 
-                               <input type="checkbox" 
-                                       att-checkbox 
-                                       ng-model="confirmBox.message.pending"
-                                       ng-change="confirmBox.storeSelection(confirmBox.message)"
-                               >
+                                       Get Access</a> page
                        </div>
 
                </div>
index 87558fa..8481b5e 100644 (file)
 'use strict';
 
 function _classCallCheck(instance, Constructor) {
-       if (!(instance instanceof Constructor)) {
-               throw new TypeError('Cannot call a class as a function');
-       }
+    if (!(instance instanceof Constructor)) {
+        throw new TypeError('Cannot call a class as a function');
+    }
 }
 
 (function() {
-       var HTTP_PROTOCOL_RGX = /https?:\/\//;
-
-       var DashboardCtrl = function DashboardCtrl(conf, applicationsService, $log,
-                       $window, userProfileService, $scope, $cookies, $timeout, $interval, 
-                       $modal, $state, beReaderService, dashboardService, confirmBoxService, 
-                       auditLogService,ngDialog, $compile, widgetsCatalogService) {
-
-               this.conf = conf;       
-               var _this = this;
-
-               _classCallCheck(this, DashboardCtrl);
-
-               // activate spinner
-               this.isLoading = true;
-               this.isCommError = false;
-               $scope.getUserAppsIsDone = false;
-               this.userProfileService = userProfileService;
-               $scope.demoNum = 1;
-               $scope.event_content_show = false;
-               $scope.widgetData = [];
-               $scope.activateThis = function(ele){
-                        $compile(ele.contents())($scope);
-                        $scope.$apply();
-               };
-
-               $scope.editWidgetModalPopup = function(availableData, resourceType) {
-                       $scope.editData = JSON.stringify(availableData);
-                       $scope.availableDataTemp = $scope.availableData;
-                       ngDialog.open({
-                                       templateUrl : 'app/views/dashboard/dashboard-widget-manage.html',
-                                       controller : 'CommonWidgetController',
-                                       resolve : {
-                                               message : function message() {
-                                                       var message = {
-                                                               type : resourceType,
-                                                               availableData : $scope.editData
-                                                       };
-                                                       return message;
-                                               }
-                                       }
-                               }).closePromise.then(needUpdate => {    
-                                       if(resourceType=='NEWS'){
-                                               $scope.updateNews();
-                                       }else if(resourceType=='EVENTS'){
-                                               $scope.updateEvents();
-                                       }else if(resourceType=='IMPORTANTRESOURCES'){
-                                               $scope.updateImportRes();
-                                       }
-                 });           
-               };
-               
-               $scope.editWidgetParameters = function(widgetId) {
-                       let data = {
-               widgetId: widgetId
+    var HTTP_PROTOCOL_RGX = /https?:\/\//;
+
+    var DashboardCtrl = function DashboardCtrl(conf, applicationsService, $log,
+        $window, userProfileService, $scope, $cookies, $timeout, $interval,
+        $modal, $state, beReaderService, dashboardService, confirmBoxService,
+        auditLogService, ngDialog, $compile, widgetsCatalogService) {
+
+        this.conf = conf;
+        var _this = this;
+
+        _classCallCheck(this, DashboardCtrl);
+
+        // activate spinner
+        this.isLoading = true;
+        this.isCommError = false;
+        $scope.getUserAppsIsDone = false;
+        this.userProfileService = userProfileService;
+        $scope.demoNum = 1;
+        $scope.event_content_show = false;
+        $scope.widgetData = [];
+        $scope.activateThis = function(ele) {
+            $compile(ele.contents())($scope);
+            $scope.$apply();
+        };
+
+        $scope.editWidgetModalPopup = function(availableData, resourceType) {
+            $scope.editData = JSON.stringify(availableData);
+            $scope.availableDataTemp = $scope.availableData;
+            ngDialog.open({
+                templateUrl: 'app/views/dashboard/dashboard-widget-manage.html',
+                controller: 'CommonWidgetController',
+                resolve: {
+                    message: function message() {
+                        var message = {
+                            type: resourceType,
+                            availableData: $scope.editData
+                        };
+                        return message;
+                    }
+                }
+            }).closePromise.then(needUpdate => {
+                if (resourceType == 'NEWS') {
+                    $scope.updateNews();
+                } else if (resourceType == 'EVENTS') {
+                    $scope.updateEvents();
+                } else if (resourceType == 'IMPORTANTRESOURCES') {
+                    $scope.updateImportRes();
+                }
+            });
+        };
+
+        $scope.editWidgetParameters = function(widgetId) {
+            let data = {
+                widgetId: widgetId
+            }
+            ngDialog.open({
+                templateUrl: 'app/views/dashboard/dashboard-widget-parameter-manage.html',
+                controller: 'WidgetParameterController',
+                data: data
+            }).closePromise.then(needUpdate => {
+
+            });
+        };
+
+        $scope.sort_options = [{
+                index: 0,
+                value: 'N',
+                title: 'Name'
+            },
+            {
+                index: 1,
+                value: 'L',
+                title: 'Last used'
+            },
+            {
+                index: 2,
+                value: 'F',
+                title: 'Most used'
+            },
+            {
+                index: 3,
+                value: 'M',
+                title: 'Manual'
+            }
+        ];
+
+        $scope.selectedSortTypeChanged = function(userAppSortTypePref) {
+            $scope.appsViewData = [];
+            $scope.appsView = [];
+
+            $scope.sort_type = userAppSortTypePref;
+
+            applicationsService
+                .getAppsOrderBySortPref(userAppSortTypePref)
+                .then(function(res) {
+                    _this.apps = res;
+                    $scope.applyPresentationDetailsToApps(_this.apps);
+                })
+            applicationsService
+                .saveAppsSortTypePreference($scope.selectedSortType)
+                .then(function(res) {
+                    // Nothing to do
+                })
+
+        }
+        $scope.$watch('selectedSortType.value', (newVal, oldVal) => {
+            for (var i = 0; i < $scope.sort_options.length; i++) {
+                if ($scope.sort_options[i].value == newVal) {
+                    $scope.selectedSortType = angular.copy($scope.sort_options[i]);;
+                }
             }
-                       ngDialog.open({
-                                       templateUrl : 'app/views/dashboard/dashboard-widget-parameter-manage.html',
-                                       controller : 'WidgetParameterController',
-                                       data: data
-                               }).closePromise.then(needUpdate => {    
-                                               
-                 });           
-               };
-               
-               $scope.sort_options = [        
-                                      {index: 0, value: 'N', title: 'Name'},
-                                      {index: 1, value: 'L', title: 'Last used'},
-                                      {index: 2, value: 'F', title: 'Most used'},
-                                      {index: 3, value: 'M', title: 'Manual'}                                 
-                                  ]; 
-               
-               $scope.selectedSortTypeChanged = function(userAppSortTypePref) {
-                       $scope.appsViewData = [];
-                       $scope.appsView = [];
-                       
-                       $scope.sort_type = userAppSortTypePref;
-                       
-                       applicationsService
-                       .getAppsOrderBySortPref(userAppSortTypePref)
-                               .then(function(res) {
-                                       _this.apps = res;                       
-                                       $scope.applyPresentationDetailsToApps(_this.apps);                              
-                       })      
-                       applicationsService
-                       .saveAppsSortTypePreference($scope.selectedSortType)
-                               .then(function(res) {
-                                       // Nothing to do
-                               })
-               
-               }
-               $scope.$watch('selectedSortType.value', (newVal, oldVal) => {
-                       for(var i=0;i<$scope.sort_options.length;i++){
-                       if($scope.sort_options[i].value==newVal){
-                       $scope.selectedSortType=angular.copy($scope.sort_options[i]);;
-                       }
-                       }
-                       });
-               
-               $scope.restoreSortSelected = function(){
-                       confirmBoxService.confirm("Restore the default size and position of all widgets?").then(
-                               function(confirmed){
-                                       var checkConfirm = confirmed;
-                                       if(checkConfirm === true){
-                                       applicationsService
-                                       .delWidgetsSortPref($scope.widgetsViewData).then(function(){
-                                               $state.reload();
-                                       });
-                                       }
-                               });
-               /*      if(confirm('Restore the default size and position of all widgets?') == true)
-                               {
-                       applicationsService
-                       .delWidgetsSortPref($scope.widgetsViewData).then(function(){
-                               $state.reload();
-                       })
-                               }*/
-                               
-               }
-               
-               $scope.applyPresentationDetailsToApps = function(appsReturned) {
-                       var rowNo = 0;
-                       for (var i = 0; i < _this.apps.length; i++) {
-                               $scope.appsView[i] = {
-                                       sizeX : 1,
-                                       sizeY : 1,
-                                       headerText : '',
-                                       subHeaderText : '',
-                                       imageLink : '',
-                                       order : '',
-                                       url : '',
-                                       appid: '',
-                               };
-                               $scope.appsView[i].headerText = appsReturned[i].name;
-                               $scope.appsView[i].subHeaderText = appsReturned[i].notes;
-                               let imgLnk = '';
-                               if (appsReturned[i].imageUrl)
-                                       imgLnk = conf.api.appThumbnail.replace(':appId', appsReturned[i].id);
-                               //$log.debug('DashboardCtlr::applyPresn: imgLink = ' + imgLnk);
-                               $scope.appsView[i].imageLink = imgLnk;
-                               $scope.appsView[i].order = appsReturned[i].order;
-                               $scope.appsView[i].url = appsReturned[i].url;
-                               $scope.appsView[i].restrictedApp = appsReturned[i].restrictedApp;
-                               $scope.appsView[i].appid = appsReturned[i].id;
-                       }
-                       $scope.appsView[_this.apps.length] = {
-                                       addRemoveApps : true,
-                                       sizeX : 1,
-                                       sizeY : 1,
-                                       headerText : 'Add/Remove Applications',
-                                       subHeaderText : '',
-                                       imageLink : 'assets/images/cloud.png',
-                                       order : '',
-                                       restrictedApp : false,
-                                       url : '',
-                       };
-                       if($scope.appsView.length>6){                                                                                                   
-                               $(".dashboard-boarder").css({
-                                       "height" : "400px"
-                               });
-                       }else{
-                               $(".dashboard-boarder").css({
-                                       "height" : "210px"
-                               });
-                       }
-                       
-                       if ($scope.appsView != undefined
-                                       && $scope.appsView != null
-                                       && $scope.appsView.length > 0) {
-                               $scope.appsViewData = $scope.appsView;
-                       }
-               }
-               
-$scope.widgetsView = [];
-               
-               $scope.applyPresentationDetailsToWidgets = function(widgetsReturned){
-                var rowNo = 0;
-                for (var i = 0; i < widgetsReturned.length; i++) {
-                               $scope.widgetsView[i] = {
-                                       sizeX : '',
-                                       sizeY :'',
-                                       headerText:'',
-                                       widgetText:'',
-                                       widgetIdentifier : '',
-                                       url : '',
-                                       widgetid: '',
-                                       attrb:'',
-                                       row:'',
-                                       col:'',
-                               };
-                               $scope.widgetsView[i].widgetid = widgetsReturned[i].id;
-                               $scope.widgetsView[i].headerText = widgetsReturned[i].headerName;
-                               $scope.widgetsView[i].widgetText = widgetsReturned[i].name;
-                               
-                               if(widgetsReturned[i].headerName.toLowerCase() === 'news'){
-                                       $scope.widgetsView[i].widgetIdentifier = 'NEWS';
-                               }
-                               else
-                               if(widgetsReturned[i].headerName.toLowerCase() === 'resources'){
-                                       $scope.widgetsView[i].widgetIdentifier = 'IMPORTANTRESOURCES';
-                               }
-                               else
-                               if(widgetsReturned[i].headerName.toLowerCase() === 'events'){
-                                       $scope.widgetsView[i].widgetIdentifier = 'EVENTS';
-                               }
-
-                               $scope.widgetsView[i].url = widgetsReturned[i].url;
-                               $scope.widgetsView[i].attrb = widgetsReturned[i].attrs;
-                               if(widgetsReturned[i].width === null){
-                                       $scope.widgetsView[i].sizeX = 2;
-                               }else{
-                                       $scope.widgetsView[i].sizeX = widgetsReturned[i].width;
-                               }
-                               if(widgetsReturned[i].height === null){
-                                       $scope.widgetsView[i].sizeY = 2;
-                               }else{
-                                       $scope.widgetsView[i].sizeY = widgetsReturned[i].height;
-                               }
-                               $scope.widgetsView[i].row = widgetsReturned[i].x;
-                               $scope.widgetsView[i].col = widgetsReturned[i].y;
-                       }
-               if ($scope.widgetsView != undefined
-                               && $scope.widgetsView != null
-                               && $scope.widgetsView.length > 0) {
-                       $scope.widgetsViewData = $scope.widgetsView;
-               }
-               }
-
-       applicationsService
-       .getUserAppsSortTypePreference().then(function(res) {
-                       var resJson = {};
-                   resJson.value = res;
-                       if (resJson.value==="N" || resJson.value==="") {
-                               resJson.index = 0;
-                               resJson.title = 'Name';
-                       }else if (resJson.value==="L") {
-                               resJson.index = 1;
-                               resJson.title = 'Last used';
-                       }else if(resJson.value==="F"){
-                               resJson.index = 2;
-                               resJson.title = 'Most used';
-                       }else {
-                               resJson.index = 3;
-                               resJson.title = 'Manual';
-                       }       
-                       $scope.selectedSortType = resJson;
-                       $scope.selectedSortTypeChanged(res);
-
-               
-               });
-               
-       $scope.widgetsList = [];
-       
-       let getUserWidgets = (loginName) => {
-        var conf = this.conf;
-                widgetsCatalogService.getUserWidgets(loginName).then(res => {
-                        if(!(res instanceof Array)){
-                                this.isCommError = true;
-                                return;
-                        }
-                        for(var i = 0; i < res.length; i++){    
-                                var widget_id = res[i][0];
-                                var widget_name = res[i][1];
-                                let url = this.conf.api.widgetCommon + "/" + widget_id + "/framework.js";
-                                var header_name = widget_name;
-                                if(res[i][7] == 1){
-                                       header_name = (widget_name.length > 9) ?widget_name.substring(0, 8) + '...' : widget_name;
-                                }
-                                if(res[i][4] === "S" || res[i][4] === null ){
-                                $scope.widgetsList.push({
-                                          id: widget_id,
-                                          headerName: header_name,
-                                  name: widget_name,
-                                  url: url,
-                                  attrs: [{attr: 'data-' + res[i][0], value: ''}],
-                                  x: res[i][3], 
-                                  y: res[i][5],
-                                  height: res[i][6],
-                                  width: res[i][7]
-                                });
-                                }
-                                var script = document
-                                        .createElement('script');
-                                        script.src = url;
-                                        script.async = false;
-                                        var entry = document
-                                               .getElementsByTagName('script')[0];
-                                        entry.parentNode
-                                               .insertBefore(script, entry);
-                        } 
-               $scope.applyPresentationDetailsToWidgets($scope.widgetsList);
-        }).catch(err => {
-            $log.error('WidgetsHomeCtrl::getUserWidgets error: ' + err);
-        }).finally(()=> {
-                
         });
-   };
-
-      userProfileService.getUserProfile().then(
-                       function(profile) {
-                               $scope.orgUserId = profile.orgUserId;
-                               getUserWidgets($scope.orgUserId);
-         });
-               
-               /* Widget Gridster Section */
-               $scope.newsGridsterItem = {
-                       sizeX : 1,
-                       sizeY : 1,
-                       headerText : 'News',
-                       subHeaderText : '',
-                       imageLink : '',
-                       order : '',
-                       url : ''
-               };
-
-               $scope.eventsGridsterItem = {
-                       sizeX : 1,
-                       sizeY : 1,
-                       headerText : 'Events',
-                       subHeaderText : '',
-                       imageLink : '',
-                       order : '',
-                       url : ''
-               };
-
-               $scope.impoResGridsterItem = {
-                       sizeX : 1,
-                       sizeY : 1,
-                       headerText : 'Resources',
-                       subHeaderText : '',
-                       imageLink : '',
-                       order : '',
-                       url : ''
-               };
-               
-               this.gridsterAppOpts = {
-                               columns : 6,
-                               colWidth : 190,
-                               rowHeight : 190,
-                               margins : [ 20, 20 ],
-                               outerMargin : true,
-                               pushing : true,
-                               floating : true,
-                               swapping : true,
-                               resizable: {
-                                       enabled: false,
-                               },
-                               draggable : {
-                                       handle:'.icon-content-gridguide',
-                                       stop: function stop() { 
-                                               $scope.defaultSortBy = function() {
-                                                       var resJson = {};
-                                                       resJson.value = 'M';
-                                                       resJson.index = 3;
-                                                       resJson.title = 'Manual';
-                                                       $scope.selectedSortType = resJson;
-                                                       applicationsService.saveAppsSortTypeManual($scope.appsViewData) 
-                                                       applicationsService.saveAppsSortTypePreference($scope.selectedSortType)
-                                               }
-                                               $scope.defaultSortBy();                 
-                                       }
-                               }
-                       };
-                       
-                       this.gridsterWidgetOpts = {
-                                       columns : 6,
-                                       colWidth : 190,
-                                       rowHeight : 190,
-                                       margins : [ 20, 20 ],
-                                       outerMargin : true,
-                                       pushing : true,
-                                       floating : true,
-                                       swapping : true,
-                                       resizable: {
-                                               enabled: true,
-                                               stop: function stop(event, uiWidget, $element){
-                                                       if($element.sizeX == 1)
-                                                               $element.headerText = ($element.widgetText.length > 9) ? $element.widgetText.substring(0, 8) + '...' : $element.widgetText;
-                                                       if($element.sizeX >= 2)
-                                                               $element.headerText = $element.widgetText;
-                                                       
-                                                       applicationsService
-                                                       .saveWidgetsSortManual($scope.widgetsViewData)
-                                       
-                                               }
-                                       },
-                                       draggable : {
-                                               handle:'.icon-content-gridguide',
-                                               stop: function stop(){
-                                                       applicationsService
-                                                       .saveWidgetsSortManual($scope.widgetsViewData)
-                                       
-                                               }
-                                       }
-                       };
-               
-               this.goToCatalog = function(item) {
-                       $state.go('root.appCatalog');
-               } 
-               
-               this.goToWidgetCatLog = function(item) {
-                       $state.go('root.widgetCatalog');
-               } 
-               
-               // navigate to application url in new tab
-               this.goToPortal = function(item) {
-                       userProfileService.getUserRolesForApplication($scope.orgUserId,item.appid)
-                 .then(res=>{
-                         var count = 0;
-                         for(var i=0;i<res.length;i++){
-                                if(!res[i].isApplied)
-                                        {
-                                        count++;
-                                        }
-                                  }
-                         if((count>0 && res.length == count)||res.length==0)
-                                 {
-                               confirmBoxService.showInformation('You have no roles assigned to this application to access.').then(isConfirmed => {});
-
-                                 }
-                         else{
-                                       if (!item.url) {
-                                               $log.error('No URL found for this application, doing nothing!');
-                                               return;
-                                       }
-                                       if (item.restrictedApp) {
-                                               // Link-based apps open in their own browser tab
-                                               $window.open(item.url, '_blank');
-                                       } else {
-                                               // cache control so browsers load app page every time
-                                               var ccParam = 'cc=' + new Date().getTime();
-                                               var urlParts = item.url.split('#');
-                                               var appUrl = null;
-                                               if (urlParts.length < 2) {
-                                                       // no #
-                                                       let urlLastChar = item.url.charAt(item.url.length - 1);
-                                                       if (item.url.includes("?"))
-                                                               appUrl = (urlLastChar === '&' ? item.url + ccParam : item.url + '&' + ccParam);
-                                                       else 
-                                                               appUrl = item.url + '?' + ccParam;
-                                               } else {
-                                                       // has #
-                                                       let urlLastChar = urlParts[0].charAt(urlParts[0].length - 1);
-                                                       if (item.url.includes("?"))
-                                                               appUrl = (urlLastChar === '&' ? urlParts[0] + ccParam + '#' + urlParts[1]  :  urlParts[0] + '&' + ccParam + '#' + urlParts[1]);
-                                                       else
-                                                               appUrl = urlParts[0] + '?' + ccParam + "#" + urlParts[1];
-                                               }
-                                               // $log.debug('DashboardCtrlr::goToPortal: opening tab with URL
-                                               // ' + appUrl);
-                                               var tabContent = {
-                                                       id: new Date(),
-                                                       title: item.headerText,
-                                                       url: appUrl,
-                                                       appId: item.appId
-                                               };
-                                               $cookies.putObject('addTab', tabContent);
-                                       }
-                                 
-                         }
-                });
-               
-                       
-               
-
-               };
-               
-               this.auditLog = function(app) {
-                       console.log(app);
-                       auditLogService.storeAudit(app.appid,'app',app.url);
-               };
-               
-               if (getParameterByName('noUserError') != null) {
-                       if (getParameterByName('noUserError') == "Show") {
-                               $("#errorInfo").show();
-                       }
-               }               
-       };
-
-       DashboardCtrl.$inject = [ 'conf', 'applicationsService', '$log', '$window',
-                       'userProfileService', '$scope', '$cookies', '$timeout', '$interval', 
-                       '$modal',  '$state', 'beReaderService', 'dashboardService', 'confirmBoxService', 
-                       'auditLogService', 'ngDialog', '$compile', 'widgetsCatalogService' ];
-       angular.module('ecompApp').controller('DashboardCtrl', DashboardCtrl);
+
+        $scope.restoreSortSelected = function() {
+            confirmBoxService.confirm("Restore the default size and position of all widgets?").then(
+                function(confirmed) {
+                    var checkConfirm = confirmed;
+                    if (checkConfirm === true) {
+                        applicationsService
+                            .delWidgetsSortPref($scope.widgetsViewData).then(function() {
+                                $state.reload();
+                            });
+                    }
+                });
+            /*
+             * if(confirm('Restore the default size and position of all widgets?') ==
+             * true) { applicationsService
+             * .delWidgetsSortPref($scope.widgetsViewData).then(function(){
+             * $state.reload(); }) }
+             */
+
+        }
+
+        $scope.applyPresentationDetailsToApps = function(appsReturned) {
+            var rowNo = 0;
+            for (var i = 0; i < _this.apps.length; i++) {
+                $scope.appsView[i] = {
+                    sizeX: 1,
+                    sizeY: 1,
+                    headerText: '',
+                    subHeaderText: '',
+                    imageLink: '',
+                    order: '',
+                    url: '',
+                    appid: '',
+                };
+                $scope.appsView[i].headerText = appsReturned[i].name;
+                $scope.appsView[i].subHeaderText = appsReturned[i].notes;
+                let imgLnk = '';
+                if (appsReturned[i].imageUrl)
+                    imgLnk = conf.api.appThumbnail.replace(':appId', appsReturned[i].id);
+                // $log.debug('DashboardCtlr::applyPresn: imgLink = ' + imgLnk);
+                $scope.appsView[i].imageLink = imgLnk;
+                $scope.appsView[i].order = appsReturned[i].order;
+                $scope.appsView[i].url = appsReturned[i].url;
+                $scope.appsView[i].restrictedApp = appsReturned[i].restrictedApp;
+                $scope.appsView[i].appid = appsReturned[i].id;
+            }
+            $scope.appsView[_this.apps.length] = {
+                addRemoveApps: true,
+                sizeX: 1,
+                sizeY: 1,
+                headerText: 'Add/Remove Applications',
+                subHeaderText: '',
+                imageLink: 'assets/images/cloud.png',
+                order: '',
+                restrictedApp: false,
+                url: '',
+            };
+            if ($scope.appsView.length > 6) {
+                $(".dashboard-boarder").css({
+                    "height": "400px"
+                });
+            } else {
+                $(".dashboard-boarder").css({
+                    "height": "210px"
+                });
+            }
+
+            if ($scope.appsView != undefined &&
+                $scope.appsView != null &&
+                $scope.appsView.length > 0) {
+                $scope.appsViewData = $scope.appsView;
+            }
+        }
+
+        $scope.widgetsView = [];
+
+        $scope.applyPresentationDetailsToWidgets = function(widgetsReturned) {
+            var rowNo = 0;
+            for (var i = 0; i < widgetsReturned.length; i++) {
+                $scope.widgetsView[i] = {
+                    sizeX: '',
+                    sizeY: '',
+                    headerText: '',
+                    widgetText: '',
+                    widgetIdentifier: '',
+                    url: '',
+                    widgetid: '',
+                    attrb: '',
+                    row: '',
+                    col: '',
+                };
+                $scope.widgetsView[i].widgetid = widgetsReturned[i].id;
+                $scope.widgetsView[i].headerText = widgetsReturned[i].headerName;
+                $scope.widgetsView[i].widgetText = widgetsReturned[i].name;
+
+                if (widgetsReturned[i].headerName.toLowerCase() === 'news') {
+                    $scope.widgetsView[i].widgetIdentifier = 'NEWS';
+                } else
+                if (widgetsReturned[i].headerName.toLowerCase() === 'resources') {
+                    $scope.widgetsView[i].widgetIdentifier = 'IMPORTANTRESOURCES';
+                } else
+                if (widgetsReturned[i].headerName.toLowerCase() === 'events') {
+                    $scope.widgetsView[i].widgetIdentifier = 'EVENTS';
+                }
+
+                $scope.widgetsView[i].url = widgetsReturned[i].url;
+                $scope.widgetsView[i].attrb = widgetsReturned[i].attrs;
+                if (widgetsReturned[i].width === null) {
+                    $scope.widgetsView[i].sizeX = 2;
+                } else {
+                    $scope.widgetsView[i].sizeX = widgetsReturned[i].width;
+                }
+                if (widgetsReturned[i].height === null) {
+                    $scope.widgetsView[i].sizeY = 2;
+                } else {
+                    $scope.widgetsView[i].sizeY = widgetsReturned[i].height;
+                }
+                $scope.widgetsView[i].row = widgetsReturned[i].x;
+                $scope.widgetsView[i].col = widgetsReturned[i].y;
+            }
+            if ($scope.widgetsView != undefined &&
+                $scope.widgetsView != null &&
+                $scope.widgetsView.length > 0) {
+                $scope.widgetsViewData = $scope.widgetsView;
+            }
+        }
+
+        applicationsService
+            .getUserAppsSortTypePreference().then(function(res) {
+                var resJson = {};
+                resJson.value = res;
+                if (resJson.value === "N" || resJson.value === "") {
+                    resJson.index = 0;
+                    resJson.title = 'Name';
+                } else if (resJson.value === "L") {
+                    resJson.index = 1;
+                    resJson.title = 'Last used';
+                } else if (resJson.value === "F") {
+                    resJson.index = 2;
+                    resJson.title = 'Most used';
+                } else {
+                    resJson.index = 3;
+                    resJson.title = 'Manual';
+                }
+                $scope.selectedSortType = resJson;
+                $scope.selectedSortTypeChanged(res);
+
+
+            });
+
+        $scope.widgetsList = [];
+
+        let getUserWidgets = (loginName) => {
+            var conf = this.conf;
+            widgetsCatalogService.getUserWidgets(loginName).then(res => {
+                if (!(res instanceof Array)) {
+                    this.isCommError = true;
+                    return;
+                }
+                for (var i = 0; i < res.length; i++) {
+                    var widget_id = res[i][0];
+                    var widget_name = res[i][1];
+                    let url = this.conf.api.widgetCommon + "/" + widget_id + "/framework.js";
+                    var header_name = widget_name;
+                    if (res[i][7] == 1) {
+                        header_name = (widget_name.length > 9) ? widget_name.substring(0, 8) + '...' : widget_name;
+                    }
+                    if (res[i][4] === "S" || res[i][4] === null) {
+                        $scope.widgetsList.push({
+                            id: widget_id,
+                            headerName: header_name,
+                            name: widget_name,
+                            url: url,
+                            attrs: [{
+                                attr: 'data-' + res[i][0],
+                                value: ''
+                            }],
+                            x: res[i][3],
+                            y: res[i][5],
+                            height: res[i][6],
+                            width: res[i][7]
+                        });
+                    }
+                    var script = document
+                        .createElement('script');
+                    script.src = url;
+                    script.async = false;
+                    var entry = document
+                        .getElementsByTagName('script')[0];
+                    entry.parentNode
+                        .insertBefore(script, entry);
+                }
+                $scope.applyPresentationDetailsToWidgets($scope.widgetsList);
+            }).catch(err => {
+                $log.error('WidgetsHomeCtrl::getUserWidgets error: ' + err);
+            }).finally(() => {
+
+            });
+        };
+
+        userProfileService.getUserProfile().then(
+            function(profile) {
+                $scope.orgUserId = profile.orgUserId;
+                getUserWidgets($scope.orgUserId);
+            });
+
+        /* Widget Gridster Section */
+        $scope.newsGridsterItem = {
+            sizeX: 1,
+            sizeY: 1,
+            headerText: 'News',
+            subHeaderText: '',
+            imageLink: '',
+            order: '',
+            url: ''
+        };
+
+        $scope.eventsGridsterItem = {
+            sizeX: 1,
+            sizeY: 1,
+            headerText: 'Events',
+            subHeaderText: '',
+            imageLink: '',
+            order: '',
+            url: ''
+        };
+
+        $scope.impoResGridsterItem = {
+            sizeX: 1,
+            sizeY: 1,
+            headerText: 'Resources',
+            subHeaderText: '',
+            imageLink: '',
+            order: '',
+            url: ''
+        };
+
+        this.gridsterAppOpts = {
+            columns: 6,
+            colWidth: 190,
+            rowHeight: 190,
+            margins: [20, 20],
+            outerMargin: true,
+            pushing: true,
+            floating: true,
+            swapping: true,
+            resizable: {
+                enabled: false,
+            },
+            draggable: {
+                handle: '.icon-content-gridguide',
+                stop: function stop() {
+                    $scope.defaultSortBy = function() {
+                        var resJson = {};
+                        resJson.value = 'M';
+                        resJson.index = 3;
+                        resJson.title = 'Manual';
+                        $scope.selectedSortType = resJson;
+                        applicationsService.saveAppsSortTypeManual($scope.appsViewData)
+                        applicationsService.saveAppsSortTypePreference($scope.selectedSortType)
+                    }
+                    $scope.defaultSortBy();
+                }
+            }
+        };
+
+        this.gridsterWidgetOpts = {
+            columns: 6,
+            colWidth: 190,
+            rowHeight: 190,
+            margins: [20, 20],
+            outerMargin: true,
+            pushing: true,
+            floating: true,
+            swapping: true,
+            resizable: {
+                enabled: true,
+                stop: function stop(event, uiWidget, $element) {
+                    if ($element.sizeX == 1)
+                        $element.headerText = ($element.widgetText.length > 9) ? $element.widgetText.substring(0, 8) + '...' : $element.widgetText;
+                    if ($element.sizeX >= 2)
+                        $element.headerText = $element.widgetText;
+
+                    applicationsService
+                        .saveWidgetsSortManual($scope.widgetsViewData)
+
+                }
+            },
+            draggable: {
+                handle: '.icon-content-gridguide',
+                stop: function stop() {
+                    applicationsService
+                        .saveWidgetsSortManual($scope.widgetsViewData)
+
+                }
+            }
+        };
+
+        this.goToCatalog = function(item) {
+            $state.go('root.appCatalog');
+        }
+
+        this.goToWidgetCatLog = function(item) {
+            $state.go('root.widgetCatalog');
+        }
+
+        // navigate to application url in new tab
+        this.goToPortal = function(item) {
+
+            if (!item.url) {
+                $log.error('No URL found for this application, doing nothing!');
+                return;
+            }
+            if (item.restrictedApp) {
+                // Link-based apps open in their own browser tab
+                $window.open(item.url, '_blank');
+            } else {
+                // cache control so browsers load app page every
+                // time
+                var ccParam = 'cc=' + new Date().getTime();
+                var urlParts = item.url.split('#');
+                var appUrl = null;
+                if (urlParts.length < 2) {
+                    // no #
+                    let urlLastChar = item.url.charAt(item.url.length - 1);
+                    if (item.url.includes("?"))
+                        appUrl = (urlLastChar === '&' ? item.url + ccParam : item.url + '&' + ccParam);
+                    else
+                        appUrl = item.url + '?' + ccParam;
+                } else {
+                    // has #
+                    let urlLastChar = urlParts[0].charAt(urlParts[0].length - 1);
+                    if (item.url.includes("?"))
+                        appUrl = (urlLastChar === '&' ? urlParts[0] + ccParam + '#' + urlParts[1] : urlParts[0] + '&' + ccParam + '#' + urlParts[1]);
+                    else
+                        appUrl = urlParts[0] + '?' + ccParam + "#" + urlParts[1];
+                }
+                // $log.debug('DashboardCtrlr::goToPortal: opening
+                // tab with URL
+                // ' + appUrl);
+                var tabContent = {
+                    id: new Date(),
+                    title: item.headerText,
+                    url: appUrl,
+                    appId: item.appId
+                };
+                $cookies.putObject('addTab', tabContent);
+            }
+
+
+                };
+
+        this.auditLog = function(app) {
+            console.log(app);
+            auditLogService.storeAudit(app.appid, 'app', app.url);
+        };
+
+        if (getParameterByName('noUserError') != null) {
+            if (getParameterByName('noUserError') == "Show") {
+                $("#errorInfo").show();
+            }
+        }
+    };
+
+    DashboardCtrl.$inject = ['conf', 'applicationsService', '$log', '$window',
+        'userProfileService', '$scope', '$cookies', '$timeout', '$interval',
+        '$modal', '$state', 'beReaderService', 'dashboardService', 'confirmBoxService',
+        'auditLogService', 'ngDialog', '$compile', 'widgetsCatalogService'
+    ];
+    angular.module('ecompApp').controller('DashboardCtrl', DashboardCtrl);
 })();
 
 function getParameterByName(name, url) {
-       if (!url)
-               url = window.location.href;
-       name = name.replace(/[\[\]]/g, "\\$&");
-       var regex = new RegExp("[?&]" + name + "(=([^&#]*)|&|#|$)"), results = regex
-                       .exec(url);
-       if (!results)
-               return '';
-       if (!results[2])
-               return '';
-       return results[2].replace(/\+/g, " ");
-}
+    if (!url)
+        url = window.location.href;
+    name = name.replace(/[\[\]]/g, "\\$&");
+    var regex = new RegExp("[?&]" + name + "(=([^&#]*)|&|#|$)"),
+        results = regex
+        .exec(url);
+    if (!results)
+        return '';
+    if (!results[2])
+        return '';
+    return results[2].replace(/\+/g, " ");
+}
\ No newline at end of file
index 33cb845..2eba057 100644 (file)
@@ -20,7 +20,7 @@
 'use strict';
 (function () {
        class HeaderCtrl {
-        constructor($log, $window, userProfileService, menusService, $scope, ECOMP_URL_REGEX, $cookies, $state,auditLogService,notificationService,recommendationService,ngDialog) {
+        constructor($log, $window, userProfileService, menusService, $scope, ECOMP_URL_REGEX, $cookies, $state,auditLogService,notificationService,ngDialog) {
             this.firstName = '';
             this.lastName = '';
             this.$log = $log;
@@ -33,7 +33,6 @@
             $scope.emptyFavorites = false;
             $scope.favoritesWindow = false;
             $scope.notificationCount=0;
-            $scope.recommendationCount=0;
             $scope.showNotification = true;
 
             $scope.hideMenus = false;
@@ -47,7 +46,6 @@
             };
             $scope.megaMenuDataObject =[];
             $scope.notificationCount= notificationService.notificationCount;
-            $scope.recommendationCount= recommendationService.recommendationCount;
             this.isLoading = true;
             this.ECOMP_URL_REGEX = ECOMP_URL_REGEX;
             
        }
     }
     
-    class RecommendationCtrl{
-       constructor($log, $scope, $cookies, $timeout, sessionService,recommendationService,notificationService,$interval,ngDialog) {
-                $scope.recommendations=[];   
-                var intervalPromise = null;
-             $scope.recommendationCount=  recommendationService.recommendationCount;
-             console.log("$",$);
-            $scope.getRecommendations = function(){ 
-               $("#recommendation-bulb").removeClass('icon-misc-bulbL').addClass('icon-misc-bulb')
-                recommendationService.getRecommendations()
-                
-                 .then(res=> {
-                               $("#recommendation-bulb").removeClass('icon-misc-bulb').addClass('icon-misc-bulbL')
-                       recommendationService.decrementRefreshCount();
-                       var count = recommendationService.getRefreshCount();
-                       if ( res.data==null) {
-                               $log.error('RecommendationCtrl::update Recommendation: failed to get recommendation');
-                               if (intervalPromise != null)
-                                       $interval.cancel(intervalPromise);
-                       } else if(count>=0){
-                               if (intervalPromise != null)
-                                       $interval.cancel(intervalPromise);
-                       } else {
-                               $scope.recommendations = [];
-                               recommendationService.setRecommendationCount(res.data.recommendations.length);
-                               for(var i=0;i<res.data.recommendations.length;i++){
-                                       var data = res.data.recommendations[i];                                 
-                                       var recommendations ={
-                                                                                               
-                                                       recommendation:data
-                                       };
-                                       $scope.recommendations.push(recommendations);       
-                                    }  
-                       }       
-                 }).catch(err=> {
-                       $log.error('RecommendationCtrl::gatRecommendations: caught exception: ' + err);
-                       if (intervalPromise != null)
-                               $interval.cancel(intervalPromise);
-                 });      
-             }
-             $scope.getRecommendations();
-             
-             function updateRecommendations() {
-                $scope.getRecommendations();
-             }
-             
-             notificationService.getNotificationRate().then(res=> {
-               if (res == null || res.response == null) {
-                       $log.error('NotificationCtrl: failed to notification update rate or duration, check system.properties file.');
-               } else {
-                       var rate = parseInt(res.response.updateRate);
-                                       var duration = parseInt(res.response.updateDuration);
-                                       notificationService.setMaxRefreshCount(parseInt(duration/rate)+1);
-                                       notificationService.setRefreshCount(notificationService.maxCount);
-                               if (rate != NaN && duration != NaN) {
-                                               $scope.updateRate=rate;
-                                   setInterval(function(){$scope.getRecommendations();},rate);
-
-                               }                               
-               }
-              }).catch(err=> {
-               $log.error('NotificationCtrl: getNotificationRate() failed: ' + err);
-              });             
-             $scope.deleteRecommendation = function(index){
-                if ($scope.recommendations[index] == null || $scope.recommendations[index] == '') {
-                       $log.error('RecommendationCtrl: failed to delete Recommendation.');
-                       return;
-                }
-                $scope.recommendations.splice(index,1);
-                recommendationService.setRecommendationCount($scope.recommendations.length);            
-             }
-       }
-    }
     NotificationCtrl.$inject = ['$log', '$scope', '$cookies', '$timeout', 'sessionService','notificationService','$interval','ngDialog'];
-    RecommendationCtrl.$inject = ['$log', '$scope', '$cookies', '$timeout', 'sessionService','recommendationService','notificationService','$interval','ngDialog'];
     LoginSnippetCtrl.$inject = ['$log', '$scope', '$cookies', '$timeout','userProfileService', 'sessionService'];
-    HeaderCtrl.$inject = ['$log', '$window', 'userProfileService', 'menusService', '$scope', 'ECOMP_URL_REGEX','$cookies','$state','auditLogService','notificationService','recommendationService','ngDialog'];
+    HeaderCtrl.$inject = ['$log', '$window', 'userProfileService', 'menusService', '$scope', 'ECOMP_URL_REGEX','$cookies','$state','auditLogService','notificationService','ngDialog'];
     angular.module('ecompApp').controller('HeaderCtrl', HeaderCtrl);
     angular.module('ecompApp').controller('loginSnippetCtrl', LoginSnippetCtrl);
     angular.module('ecompApp').controller('notificationCtrl', NotificationCtrl);
-    angular.module('ecompApp').controller('recommendationCtrl', RecommendationCtrl);
-
 })();
index 3d1d330..ea7273b 100644 (file)
                            </b2b-flyout-content>
                        </b2b-flyout>
             </li>
-            
-                             <!-- Recommendation Bulb -->
-            
-               <li class="header__item recommendation" aria-haspopup="true" class="recommendation-li">
-               <b2b-flyout>
-                       <div b2b-flyout-toggler class="recommendation-div">
-                               <div class="recommendations-count" ng-hide="recommendationCount.count==0" ng-bind="recommendationCount.count"></div>            
-<div  class="icon-misc-bulbL megamenu-recommendation-overrides" id="recommendation-bulb" tabindex="0" b2b-accessibility-click="13,32" aria-label="recommendation" aria-haspopup="true" aria-expanded="{{flyoutOpened}}" style="font-size: 22px;"role="button"></div>                       </div>
-                           <b2b-flyout-content horizontal-placement="center" vertical-placement="below">
-                                               <div class="recommendation-content" ng-controller="recommendationCtrl" >
-                                                       <div class="ng-scope">
-                                                               <div id="recommendation" class="notificationBox ">
-                                                                       <!-- <div align ="right">
-                                                                                <a ui-sref="root.recommendationsHistory" style="font-size: 14px"> View All Recent Notifications </a>
-                                                                       </div> -->
-                                                                       <div class="notification-header">
-                                                                               <div style="float:left;">
-                                                                                       <p class="notification-heading">Recommendations</p>
-                                                                               </div>
-                                                                               <div style="clear:both;"></div>
-                                                                       </div>
-                                                                       <div ng-show="recommendations.length==0">
-                                                                               <div class="notification-main">
-                                                                                       <div style="height:113px;">
-                                                                                               <div align="center" class="icon-information notification-info-icon"></div>
-                                                                                       </div>
-                                                                               <div>
-                                                                               <p class="notification-text">No New Recommendations</p>
-                                                                       </div>
-                                                                       
-                                                               </div>
-                                                       </div>
-                                                       <div class="notification-main" ng-show="recommendations.length>0">
-                                                               <ul class="notifications-list">
-                                                                       <li class="item" data-id="5" ng-repeat="item in recommendations">
-                                                                       <div class="icon">
-                                                                                       <span class="normal" ng-show="item.recommendation"/>
-                                                                               </div>
-                                                                               <div class="details">
-                                                                                                                                                       
-                                                                               <span class="message-body" ng-bind="item.recommendation"></span>
-                                                                                       
-                                                                                       
-                                                                               </div>
-                                                                               <button type="button" ng-click="deleteRecommendation($index)" class="button-default button-dismiss js-dismiss">x</button>
-                                                                       </li>
-                                                               </ul>
-                                                       </div>
-                                                       <div class="notification-footer">
-                                                               <div class="notification-links">
-                                                                       <div style="clear:both;"></div>
-                                                               </div>
-                                                       </div>
-                                               </div>                                  
-                           </b2b-flyout-content>
-                       </b2b-flyout>
-            </li>
+            <li class="header__item recommendation" aria-haspopup="true"
+                                                       class="recommendation-li">
+            <div ng-include class="recommendation-detail-extension" src="'app/views/headerRecommendation/headerRecommendations.tpl.html'"></div> 
+            </li>            
             </div>
         </ul>
        </header>
index c93d864..0c43c1f 100644 (file)
 'use strict';
 (function () {
     class GetAccessCtrl {
-        constructor($log, $scope,  $stateParams, getAccessService, userProfileService, ExternalRequestAccessService, applicationsService, ngDialog) {
+        constructor($log, $scope,  $stateParams, filterFilter, getAccessService, userProfileService, ExternalRequestAccessService, applicationsService, ngDialog) {
                // $log.debug('GetAccessCtrl: appService param is: ' + applicationsService.goGetAccessAppName);
                var resultAccessValue = null;
-               var externalRequest = true;
-               
+               
                $scope.openAppRoleModal = (itemData) => {       
                        if(resultAccessValue){
                        let data = null;
                     data = {
                         dialogState: 2,
                         selectedUser:{
-                            attuid: $scope.attuid,
+                            orgUserId: $scope.orgUserId,
                             firstName: $scope.firstName,
                             lastName: $scope.lastName,
                             headerText: itemData.app_name,
-                            extReqValue : externalRequest
                         }
                     }
                 ngDialog.open({
-                    templateUrl: 'app/views/catalog/add-catalog-dialogs/new-catalog.modal.html',
-                    controller: 'NewCatalogModalCtrl',
+                    templateUrl: 'app/views/catalog/request-access-catalog-dialogs/request-access-catalog.modal.html',
+                    controller: 'ExternalRequestAccessCtrl',
                     controllerAs: 'userInfo',
                     data: data
                 });
                        }
             }
                
+            $scope.$watch('access.searchString', function (searchKey) {
+                var search = searchKey;               
+                this.totalPage = filterFilter($scope.access.appTable, search);
+                var resultLen = this.totalPage.length;
+                $scope.access.totalPage = Math.ceil(resultLen/$scope.access.viewPerPage);
+                $scope.access.currentPage = 1;
+            });
+               
             userProfileService.getUserProfile().then(
                                function(profile) {
-                                       $scope.attuid = profile.orgUserId;
+                                       $scope.orgUserId = profile.orgUserId;
                                        $scope.firstName = profile.firstName;
                                        $scope.lastName = profile.lastName;
                  });
             init();
         }
     }
-    GetAccessCtrl.$inject = ['$log', '$scope', '$stateParams', 'getAccessService', 'userProfileService', 'ExternalRequestAccessService','applicationsService', 'ngDialog'];
+    GetAccessCtrl.$inject = ['$log', '$scope', '$stateParams', 'filterFilter', 'getAccessService', 'userProfileService', 'ExternalRequestAccessService','applicationsService', 'ngDialog'];
     angular.module('ecompApp').controller('GetAccessCtrl', GetAccessCtrl);
 })();
index 08ccbf4..ef0c242 100644 (file)
                                                                </tr>
                                                        </thead>
                                                        <tbody b2b-table-row type="body"
-                                                               row-repeat="rowData in access.appTable | filter:access.searchString | limitTo:access.viewPerPage:access.startIndex | orderBy:'ecomp_function'"  track-by="$index">
+                                                               row-repeat="rowData in access.appTable | filter:access.searchString | startFrom:(access.currentPage-1)*access.viewPerPage | limitTo:access.viewPerPage | orderBy:'ecomp_function'"  track-by="$index">
                                                                <tr id="tr-rowData" ng-click="openAppRoleModal(rowData)">
                                                                        <td b2b-table-body>
                                                                                <div id="access-page-function"
                                                                                        ng-if="rowData.ecomp_function !== 'Ecomp Function Not Available'"
-                                                                                       ng-show="$index == 0 || access.appTable[$index-1].ecomp_function != rowData.ecomp_function"
                                                                                        ng-bind="rowData.ecomp_function"></div>
                                                                                <div id="access-page-function"
                                                                                        ng-if="rowData.ecomp_function === 'Ecomp Function Not Available'"
@@ -63,7 +62,6 @@
                                                                        </td>
                                                                        <td b2b-table-body>
                                                                                <div id="access-page-appName"
-                                                                                       ng-show="$index == 0 || access.appTable[$index-1].app_name != rowData.app_name"
                                                                                        ng-bind="rowData.app_name"></div>
                                                                        </td>
                                                                        <td b2b-table-body>
index e73fe29..8c9420d 100644 (file)
                                if (prevRow == null || prevRow.orgUserId.toLowerCase() !== uploadRow.orgUserId.toLowerCase()) {
                                 if (debug)
                                         $log.debug('BulkUserModalCtrl::buildAppRoleChecks: create request for orgUserId ' + uploadRow.orgUserId);
-                                let appPromise = usersService.getUserAppRoles(appId, uploadRow.orgUserId).promise().then( (userAppRolesResult) => {
+                                let appPromise = usersService.getUserAppRoles(appId, uploadRow.orgUserId,true).promise().then( (userAppRolesResult) => {
                                         // Reply for unknown user has all defined roles with isApplied=false on each.  
                                         if (typeof userAppRolesResult[0] !== "undefined") {
                                                 if (debug)
index 661c63a..0e7fd9f 100644 (file)
                                }
                                var a = document.createElement('a');
                                var blob = new Blob([data], {type: 'application/octet-stream'});
-                               a.href = URL.createObjectURL(blob);
+                               var url = window.URL.createObjectURL(blob);
+                               a.href = url;
                                a.download = filename;
+                               document.body.appendChild(a);
                                a.click();
+                               
+                               setTimeout(function(){
+                               document.body.removeChild(a);
+                               window.URL.revokeObjectURL(url);  
+                           }, 100);  
                        });
             };
             
index 2fb1b27..32ea9ca 100644 (file)
 
   }
   
+  .user:focus {
+           outline: -webkit-focus-ring-color auto 5px;
+           background-color:white !important;
+       }
   .add-user-section{
       margin-top:0px;
       margin-left:10px;
diff --git a/ecomp-portal-FE-os/client/src/services/recommendation/recommendation.service.js b/ecomp-portal-FE-os/client/src/services/recommendation/recommendation.service.js
new file mode 100644 (file)
index 0000000..4df4e39
--- /dev/null
@@ -0,0 +1,24 @@
+/*-
+ * ================================================================================
+ * 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.
+ * ================================================================================
+ */
+/**
+ * Created by wl849v on 12/14/2016.
+ */
+
+/*As Recommendation code belongs to internal use  Just kept an empty file in order to avoid 404 errors in the browser console */
\ No newline at end of file
index dc0022a..2cc7c32 100644 (file)
 
             return deferred.promise;
         }
-        
     }
     UserProfileService.$inject = ['$q', '$log', '$http', 'conf', 'uuid4', 'utilsService'];
     angular.module('ecompApp').service('userProfileService', UserProfileService)
diff --git a/ecomp-portal-FE-os/client/src/views/catalog/add-catalog-dialogs/new-catalog.controller.js b/ecomp-portal-FE-os/client/src/views/catalog/add-catalog-dialogs/new-catalog.controller.js
deleted file mode 100644 (file)
index c2eda6e..0000000
+++ /dev/null
@@ -1,218 +0,0 @@
-/*-
- * ================================================================================
- * 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.
- * ================================================================================
- */
-/**
- * Created by nnaffar on 12/20/15.
- */
-'use strict';
-(function () {
-    class NewCatalogModalCtrl {
-        constructor($scope, $log, usersService, catalogService, applicationsService, confirmBoxService) {
-            let init = () => {
-                //$log.info('NewUserModalCtrl::init');
-                this.isSaving = false;
-                this.adminApps =[];
-                this.appRoles = [];
-                $scope.userAppRoles = [];
-                $scope.titleText = "Request for Access in MyLogins:";
-                $scope.title ="Request is pending in MyLogins for the following Roles";
-                this.isGettingAdminApps = false;
-                if($scope.ngDialogData && $scope.ngDialogData.selectedUser && $scope.ngDialogData.dialogState){
-                    this.selectedUser = $scope.ngDialogData.selectedUser;
-                    this.dialogState = $scope.ngDialogData.dialogState;
-                    this.isShowBack = false;
-                    if(this.dialogState === 2){
-                        this.getUserAppsRoles();
-                    }
-                }
-            };
-
-            this.appChanged = (index) => {
-                let myApp = this.adminApps[index];
-                //$log.debug('NewUserModalCtrl::appChanged: index: ', index, '; app id: ', myApp.id, 'app name: ',myApp.name);
-                myApp.isChanged = true;
-                this.anyChanges = true;
-            }
-            
-            this.deleteApp = (app) => {
-                let appMessage = this.selectedUser.firstName + ' ' + this.selectedUser.lastName;
-                confirmBoxService.deleteItem(appMessage).then(isConfirmed => {
-                    if(isConfirmed){
-                        this.anyChanges = true;
-                        app.isChanged = true;
-                        app.isDeleted = true; // use this to hide the app in the display
-                        app.appRoles.forEach(function(role){
-                            role.isApplied = false;
-                        });
-                    }
-                }).catch(err => {
-                    $log.error('NewUserModalCtrl::deleteApp error: ',err);
-                    confirmBoxService.showInformation('There was a problem deleting the the applications. ' +
-                        'Please try again later. Error: ' + err.status).then(isConfirmed => {});
-                });
-            };
-      
-            this.getUserAppsRoles = () => {
-
-                //$log.debug('NewUserModalCtrl::getUserAppsRoles: about to call getAdminAppsSimpler');
-                this.isGettingAdminApps = true;
-                catalogService.getAppCatalog().then((apps) => {
-                    //$log.debug('NewUserModalCtrl::getUserAppsRoles: beginning of then for getAdminAppsSimpler');
-                       
-                       this.isGettingAdminApps = false;
-                    if (!apps || !apps.length) {
-                        $log.error('NewUserModalCtrl::getUserApps error: no admin apps found');
-                        return null;
-                    }
-                    //$log.debug('NewUserModalCtrl::getUserAppsRoles: then for getAdminAppsSimpler: step 2');
-                    //$log.debug('NewUserModalCtrl::getUserAppsRoles: admin apps: ', apps);
-                    
-                    this.dialogState = 2; 
-                    this.isLoading = true;
-                    this.adminApps = apps;
-                   
-                               catalogService.getuserAppRolesCatalog(this.selectedUser.headerText).then(
-                                               function(result) {
-                                                       // $log.debug('CatalogCtrl:storeSelection result is ', result);
-                                                       
-                                                       $scope.userAppRoles = result;
-                                                       $scope.displyUserAppCatalogRoles = true;
-                                                       if(result.length === 1 && result[0].requestedRoleId === null)
-                                                               {
-                                                               $scope.title= "Removal Request is pending in MyLogins";
-                                                               }
-                                                       
-                                                          if($scope.userAppRoles.length==0)
-                                                               {
-                                                               $scope.displyUserAppCatalogRoles = false;
-                                                               }
-                                               });
-                    apps.forEach(app => {
-                        if(app.name === this.selectedUser.headerText){
-                        //$log.debug('NewUserModalCtrl::getUserAppsRoles: app: id: ', app.id, 'name: ',app.name);
-                        // Keep track of which app has changed, so we know which apps to update using a BE API
-                        app.isChanged = false;
-                        // Each of these specifies a state, which corresponds to a different message and style that gets displayed
-                        app.isLoading = true;
-                        app.isError = false;
-                        app.isDeleted = false;
-                        app.printNoChanges = false;
-                        app.isUpdating = false;
-                        app.isErrorUpdating = false;
-                        app.isDoneUpdating = false;
-                        app.errorMessage = "";
-                        usersService.getUserAppRoles(app.id, this.selectedUser.attuid).promise().then((userAppRolesResult) => {
-                            //$log.debug('NewUserModalCtrl::getUserAppsRoles: got a result for app: ',app.id,': ',app.name,': ',userAppRolesResult);
-                               app.appRoles = userAppRolesResult;
-                               app.isLoading = false;
-                        }).catch(err => {
-                            $log.error(err);
-                            app.isError = true;
-                            app.isLoading = false;
-                            app.errorMessage = err.headers('FEErrorString');
-                            //$log.debug('NewUserModalCtrl::getUserAppsRoles: in new-user.controller: response header: '+err.headers('FEErrorString'));
-                        }).finally(()=>{
-                            this.numberAppsProcessed++;
-                            if (this.numberAppsProcessed === this.adminApps.length) {
-                                this.isLoading = false;
-                            }
-                        });
-                        }
-                    })
-                    return;
-                }).catch(err => {
-                    $log.error(err);
-                })
-
-            }
-           
-                       
-            /**
-             * Update the selected user apps with the new roles.
-             * If no roles remain, set the user to inactive.
-             */
-            this.updateUserAppsRoles = () => {
-                // $log.debug('NewUserModalCtrl::updateUserAppsRoles: entering updateUserAppsRoles');
-                if(!this.selectedUser || !this.selectedUser.attuid || !this.adminApps){
-                    $log.error('NewUserModalCtrl::updateUserAppsRoles: mmissing arguments');
-                    return;
-                }
-                this.isSaving = true;
-                confirmBoxService.makeUserAppRoleCatalogChanges('Are you sure you want to make these  changes?')
-                                            .then(confirmed => {
-                                               if(confirmed === true){
-                //$log.debug('NewUserModalCtrl::updateUserAppsRoles: going to update user: ' + this.selectedUser.attuid);
-                this.numberAppsProcessed = 0;
-                this.numberAppsSucceeded = 0;
-                this.adminApps.forEach(app => {
-                    if (app.isChanged) {
-                        //$log.debug('NewUserModalCtrl::updateUserAppsRoles: app roles have changed; going to update: id: ', app.id, '; name: ', app.name);
-                        app.isUpdating = true;
-                        var UserAppRolesRequest = {
-                               attuid: this.selectedUser.attuid,
-                               appId: app.id, 
-                               appRoles: app.appRoles,
-                               appName: app.name
-                        };                 
-                        this.isSaving = true;
-                        $log.debug('going to update user: ' + this.selectedUser.attuid + ' with app roles: ' + JSON.stringify(this.adminAppsRoles));
-                                applicationsService.saveUserAppsRoles(UserAppRolesRequest).then(res => {
-                                        app.isUpdating = false;
-                                     $scope.closeThisDialog(true);
-                                }).catch(err => {
-                                    $log.error('NewAdminModalCtrl.updateAdminAppsRoles:: Failed - ' + err);
-                                }).finally(()=> {
-                                    this.isSaving = false;
-                                })
-                       }
-                });
-                               }else{
-                                       this.isSaving = false;
-                                }
-                    
-
-           
-                });
-                
-            };
-
-            /**
-             * Navigate between dialog screens using step number: 1,2,...
-             */
-            this.navigateBack = () => {
-                if (this.dialogState === 1) {
-                    //back from 1st screen?
-                }
-                if (this.dialogState === 3) {
-                    this.dialogState = 1;
-                }
-            };
-
-            init();
-
-            $scope.$on('$stateChangeStart', e => {
-                //Disable navigation when modal is opened
-                //**Nabil - note: this will cause the history back state to be replaced with current state
-                e.preventDefault();
-            });
-        }
-    }
-    NewCatalogModalCtrl.$inject = ['$scope', '$log', 'usersService', 'catalogService', 'applicationsService', 'confirmBoxService'];
-    angular.module('ecompApp').controller('NewCatalogModalCtrl', NewCatalogModalCtrl);
-})();
diff --git a/ecomp-portal-FE-os/client/src/views/catalog/add-catalog-dialogs/new-catalog.modal.html b/ecomp-portal-FE-os/client/src/views/catalog/add-catalog-dialogs/new-catalog.modal.html
deleted file mode 100644 (file)
index 3578cc0..0000000
+++ /dev/null
@@ -1,113 +0,0 @@
-<!--
-  ================================================================================
-  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.
-  ================================================================================
-  -->
-<div class="new-catalog-modal">
-
-       <div class="user-catalog-roles" ng-show="userInfo.dialogState===2">
-             <div >
-           <div class=display-userApp-Catalog-Roles >{{titleText}}</div>
-            <div class="title"
-                       ng-bind="userInfo.selectedUser.firstName + ' ' + userInfo.selectedUser.lastName + ' (' + userInfo.selectedUser.attuid + ')'"></div>
-     </div>
-               <div class="app-roles-main">
-
-                       <div class="app-catalog-roles-list">
-                               <div class="app-catalog-item" ng-repeat="app in userInfo.adminApps"
-                                       ng-if="app.name === userInfo.selectedUser.headerText"
-                                       id="app-name-{{app.name.split(' ').join('-')}}">
-                                       <div class="app-catalog-item-left"
-                                               id="div-app-name-{{app.name.split(' ').join('-')}}">{{app.name
-                                               | elipsis: 27}}</div>
-                                       <div class="app-catalog-item-right"
-                                               id="div-app-name-dropdown-{{app.name.split(' ').join('-')}}"
-                                               ng-show="!app.isError && !app.isLoading && !app.noChanges && !app.isUpdating && !app.isDoneUpdating && !app.isErrorUpdating"
-                                               ng-if="userAppRoles.length===0">
-                                               <multiple-select id="app-roles" unique-data="{{$index}}"
-                                                       placeholder="Select roles" ng-model="app.appRoles"
-                                                       on-change="userInfo.appChanged($index)" name-attr="roleName"
-                                                       value-attr="isApplied"></multiple-select>
-                                       </div>
-
-                                       <div class="app-catalog-item-right"
-                                               id="div-app-name-dropdown-{{app.name.split(' ').join('-')}}"
-                                               ng-show="!app.isError && !app.isLoading && !app.noChanges && !app.isUpdating && !app.isDoneUpdating && !app.isErrorUpdating"
-                                               ng-if="userAppRoles.length!==0">
-                                               <multiple-select2 id="app-roles" unique-data="{{$index}}"
-                                                       placeholder="Select roles" ng-model="app.appRoles"
-                                                       on-change="userInfo.appChanged($index)" name-attr="roleName"
-                                                       value-attr="isApplied"></multiple-select2>
-                                       </div>
-
-
-                                       <div id="app-item-no-contact" class="app-catalog-item-right-error"
-                                               ng-show="app.isError">{{app.errorMessage | elipsis: 35}}</div>
-                                       <div id="app-item-contacting"
-                                               class="app-catalog-item-right-contacting" ng-show="app.isLoading">Contacting
-                                               application...</div>
-                                       <div id="app-item-no-changes"
-                                               class="app-catalog-item-right-contacting" ng-show="app.noChanges">No
-                                               changes</div>
-                                       <div id="app-item-no-updating"
-                                               class="app-catalog-item-right-contacting" ng-show="app.isUpdating">Updating
-                                               application...</div>
-                                       <div id="app-item-done-updating"
-                                               class="app-catalog-item-right-contacting"
-                                               ng-show="app.isDoneUpdating">Finished updating application</div>
-                                       <div id="app-item-cannot-update"
-                                               class="app-catalog-item-right-error" ng-show="app.isErrorUpdating">Could
-                                               not update application...</div>
-                                       <div id='ecomp-small-spinner' class="ecomp-small-spinner"
-                                               ng-show="app.isLoading"></div>
-                               </div>
-
-                               &nbsp;
-
-                               <div class="usr-app-roles" ng-show=displyUserAppCatalogRoles>
-                                       <div class="userApp-Catalog-Roles-label">{{title}}</div>
-                                       &nbsp;
-                                       <div class="display-userApp-Catalog-Roles-value"
-                                               style="height: 150px; width: 200px; overflow-y: auto;">
-                                               <div ng-repeat="getUserApplicationRole in userAppRoles">
-
-                                                       <div class="userAppCatalog-lbl-value">
-                                                               <span class="userAppCatalog-lbl-value-spn">
-                                                                       {{getUserApplicationRole.rolename}}</span>
-                                                       </div>
-
-                                               </div>
-                                       </div>
-
-                               </div>
-                       </div>
-
-                       <div class="dialog-control">
-                               <span id="ecomp-save-spinner" class="ecomp-save-spinner"
-                                       ng-show="userInfo.isSaving || userInfo.isGettingAdminApps"></span>
-                               <button id="new-user-next-button" class="next-button"
-                                       ng-click="userInfo.updateUserAppsRoles()"
-                                       ng-disabled="(!userInfo.anyChanges == true)">Submit</button>
-                               <div id="new-user-cancel-button" class="cancel-button"
-                                       ng-click="closeThisDialog()">Cancel</div>
-                       </div>
-
-               </div>
-
-       </div>
-
-</div>
diff --git a/ecomp-portal-FE-os/client/src/views/catalog/get-accessswitch.html b/ecomp-portal-FE-os/client/src/views/catalog/get-accessswitch.html
new file mode 100644 (file)
index 0000000..5cda74a
--- /dev/null
@@ -0,0 +1,10 @@
+<div class="gridster-box-content"
+       ng-style="{'cursor':'pointer',
+                       'background-image': 'url('+(item.imageLink)+')',
+                       'order': item.order, 
+                       'background-color':'white',
+                       'background-repeat': 'no-repeat',
+                       'background-size': '170px 130px'}"
+       ng-click="catalog.getAccess(item)"
+       ng-hide="users.isLoadingTable && !users.getAppCatalogIsDone">
+</div>
\ No newline at end of file
index 5db3ed0..d21c829 100644 (file)
 'use strict';
 (function () {
     class FooterCtrl {
-        constructor($scope, $rootScope, manifestService, $log) {
+        constructor($scope, $rootScope, manifestService, $log, menusService) {
             this.manifestService = manifestService;
             this.$log = $log;
             this.$scope = $scope;
             this.$rootScope = $rootScope;
-
             $scope.buildinfo = null;
 
             $rootScope.showFooter = true;
             $scope.date = new Date();
-
-                   
+            $scope.ecompTitle='';
+           
+               menusService.getEcompPortalTitle()
+               .then(title=> {
+                       $scope.ecompTitle = title.response;
+               }).catch(err=> {
+                       $log.error('FooterCtrl.getEcompPortalTitle:: Error retrieving ECMOP portal title: ' + err);
+               });
+     
             manifestService.getManifest().then( jsonObj => {
                 // $log.debug('FooterCtrl.getManifest: ', JSON.stringify(jsonObj));
                 $scope.buildInfo = jsonObj;
@@ -43,6 +49,6 @@
 
         }
 
-    FooterCtrl.$inject = ['$scope', '$rootScope', 'manifestService', '$log'];
+    FooterCtrl.$inject = ['$scope', '$rootScope', 'manifestService', '$log', 'menusService'];
     angular.module('ecompApp').controller('FooterCtrl', FooterCtrl);
 })();
index 37148ab..b03e8da 100644 (file)
                        <div id="footer-info" class="attFooterInfo" style="text-align: center;">
                                <div id="footer-last-section" class="footerLastSection">
                                        <div id="footer-text"  class="footerText">
-                                                       OpenECOMP Portal Version {{buildInfo.manifest['Manifest-Version']}}.
-                               </div>  
-                               <div id="display-inline"  class="displayInline">
-                                        </div>
+                                               {{ecompTitle}} Version {{buildInfo.manifest['Build-Number']}}.
+                                       </div>  
+                                       <div id="display-inline"  class="displayInline">
+                                       </div>
+                               </div>
+                               <div>
+                                       <img src="assets/images/onap-logo.png" alt="Onap Logo" class="onap-title-logo-footer" >
                                </div>
                        </div>
                </div>
diff --git a/ecomp-portal-FE-os/client/src/views/headerRecommendation/headerRecommendations.controller.js b/ecomp-portal-FE-os/client/src/views/headerRecommendation/headerRecommendations.controller.js
new file mode 100644 (file)
index 0000000..0c15206
--- /dev/null
@@ -0,0 +1,20 @@
+/*-
+ * ================================================================================
+ * 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.
+ * ================================================================================
+ */
+/*As Recommendation code belongs to internal use  Just kept an empty file in order to avoid 404 errors in the browser console */
\ No newline at end of file
diff --git a/ecomp-portal-FE-os/client/src/views/headerRecommendation/headerRecommendations.tpl.html b/ecomp-portal-FE-os/client/src/views/headerRecommendation/headerRecommendations.tpl.html
new file mode 100644 (file)
index 0000000..6891738
--- /dev/null
@@ -0,0 +1,21 @@
+<!--
+  ================================================================================
+  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.
+  ================================================================================
+  -->
+  
+<!-- As Recommendation code belongs to Internal use Just kept an empty file in order to avoid 404 errors in the browser console  -->
\ No newline at end of file