diff options
Diffstat (limited to 'vid-app-common/src/test/resources/WEB-INF/fusion')
7 files changed, 2262 insertions, 0 deletions
diff --git a/vid-app-common/src/test/resources/WEB-INF/fusion/conf/fusion.properties b/vid-app-common/src/test/resources/WEB-INF/fusion/conf/fusion.properties new file mode 100644 index 000000000..3d8e8155a --- /dev/null +++ b/vid-app-common/src/test/resources/WEB-INF/fusion/conf/fusion.properties @@ -0,0 +1,69 @@ +# domain settings +#domain_class_location = com.att.fusion.domain. + +# validator settings +#default_error_message = Default error message + +# login settings +login_method_csp = csp +login_method_web_junction = web_junction +login_method_backdoor = backdoor +login_method_attribute_name = login_method + +#login message +login.error.hrid.empty = Login failed, please contact system administrator. +login.error.hrid.not-found = User not found, please contact system administrator. +login.error.user.inactive = Account is disabled, please contact system administrator. + +# CSP settings +csp_cookie_name = attESSec +csp_gate_keeper_data_key = MgmtSysCtr +csp_gate_keeper_prod_key = PROD +csp_login_url = https://www.e-access.att.com/empsvcs/hrpinmgt/pagLogin/?sysName=MgmtSysCtr&retURL= +csp_logout_url = https://www.e-access.att.com/empsvcs/hrpinmgt/pagLogout/?retURL= + +authentication_mechanism = BOTH + +#csp_gate_keeper_prod_key = DEVL +user_attribute_name = user +#csp_login_url = https://www.e-access.att.com/empsvcs/hrpinmgt/pagLogin/?sysName=MgmtSysCtr&retURL= +#csp_logout_url = https://webtest.csp.att.com/empsvcs/hrpinmgt/pagLogout/?retURL= + +# Web Junction settings +#web_junction_user_id_header_name = iv-user + +# User Session settings +#user_attribute_name = user +roles_attribute_name = roles +role_functions_attribute_name = role_functions +role_function_list = role_function_list +#client_device_attribute_name = client_device +#client_device_emulation = false +#client_device_type_to_emulate = com.att.fusion.web.clientdevice.mobile.IPhoneDevice + +# POST settings +post_initial_context_factory = com.sun.jndi.ldap.LdapCtxFactory +post_provider_url = ldap://ldap.webphone.att.com:389 +post_security_principal = ou=people,o=att,c=us +post_max_result_size = 499 + +# menu settings +menu_query_name = menuData +#menu_properties_file_location = /WEB-INF/fusion/menu/ +application_menu_set_name = APP +application_menu_attribute_name = applicationMenuData +#application_menu_properties_name = menu.properties +business_direct_menu_set_name = BD +#business_direct_menu_properties_name = bd.menu.properties +business_direct_menu_attribute_name = businessDirectMenuData + +# RAPTOR config settings +#raptor_config_file_path = /WEB-INF/conf/ + +# Role settings +sys_admin_role_id = 1 +#sys_admin_role_function_delete_from_ui = true + +# Profile Search settings +#profile_search_report_id=181 +#callable_profile_search_report_id=386 diff --git a/vid-app-common/src/test/resources/WEB-INF/fusion/defs/definitions.xml b/vid-app-common/src/test/resources/WEB-INF/fusion/defs/definitions.xml new file mode 100644 index 000000000..c9e10a16b --- /dev/null +++ b/vid-app-common/src/test/resources/WEB-INF/fusion/defs/definitions.xml @@ -0,0 +1,242 @@ +<?xml version="1.0" encoding="UTF-8"?> +<!DOCTYPE tiles-definitions PUBLIC + "-//Apache Software Foundation//DTD Tiles Configuration 3.0//EN" + "http://tiles.apache.org/dtds/tiles-config_3_0.dtd"> + +<!-- This tiles definitions file is fusion/defs/definitions.xml. It maps + tokens used by SDK-core controllers to JSP file paths. To minimize upgrade + effort, this file should not be changed by on-boarding applications. --> + +<tiles-definitions> + + <definition name="ebz_template" template="/WEB-INF/fusion/jsp/ebz_template.jsp"> + <put-attribute name="title" value=""></put-attribute> + <put-attribute name="header" + value="/WEB-INF/fusion/jsp/ebz/ebz_header.jsp"></put-attribute> + <put-attribute name="body" value=""></put-attribute> + <put-attribute name="footer" + value="/WEB-INF/fusion/jsp/ebz/ebz_footer.jsp"></put-attribute> + </definition> + + <definition name="ebz_template_noheader_nofooter" + template="/WEB-INF/fusion/jsp/ebz_template_noheader_nofooter.jsp"> + <put-attribute name="body" value=""></put-attribute> + </definition> + + <definition name="ebz_template_report_embedded" + template="/WEB-INF/fusion/jsp/ebz_template_report_embedded.jsp"> + <put-attribute name="body" value=""></put-attribute> + </definition> + + <definition extends="ebz_template" name="es_search_demo"> + <put-attribute name="body" + value="/WEB-INF/fusion/jsp/es_search_demo.jsp"></put-attribute> + <put-attribute name="viewName" value="elastic_search"></put-attribute> + </definition> + + <definition extends="ebz_template" name="es_suggest_demo"> + <put-attribute name="body" + value="/WEB-INF/fusion/jsp/es_suggest_demo.jsp"></put-attribute> + <put-attribute name="viewName" value="elastic_search"></put-attribute> + </definition> + + <definition extends="ebz_template" name="user_profile"> + <put-attribute name="body" value="/WEB-INF/jsp/user_profile.jsp"></put-attribute> + </definition> + + <definition extends="ebz_template" name="profile_search"> + <put-attribute name="body" + value="/WEB-INF/fusion/jsp/profile_search.jsp"></put-attribute> + <put-attribute name="viewName" value="profile_search"></put-attribute> + </definition> + + <definition extends="ebz_template" name="profile"> + <put-attribute name="body" value="/WEB-INF/fusion/jsp/profile.jsp"></put-attribute> + <put-attribute name="viewName" value="profile"></put-attribute> + </definition> + + <definition extends="ebz_template" name="menu"> + <put-attribute name="body" value="/WEB-INF/jsp/menu.jsp"></put-attribute> + <put-attribute name="viewName" value="menu"></put-attribute> + </definition> + + + <definition extends="ebz_template" name="role_list"> + <put-attribute name="body" value="/WEB-INF/fusion/jsp/role_list.jsp"></put-attribute> + <put-attribute name="viewName" value="role_list"></put-attribute> + </definition> + + <definition extends="ebz_template" name="role"> + <put-attribute name="body" value="/WEB-INF/fusion/jsp/role.jsp"></put-attribute> + <put-attribute name="viewName" value="role"></put-attribute> + </definition> + + <definition extends="ebz_template" name="role_function_list"> + <put-attribute name="body" + value="/WEB-INF/fusion/jsp/role_function_list.jsp"></put-attribute> + <put-attribute name="viewName" value="role_function_list"></put-attribute> + </definition> + + <definition extends="ebz_template" name="post_search"> + <put-attribute name="body" + value="/WEB-INF/fusion/jsp/post_search.jsp"></put-attribute> + <put-attribute name="viewName" value="post_search"></put-attribute> + </definition> + + <definition extends="ebz_template" name="error"> + <put-attribute name="body" value="/WEB-INF/jsp/error.jsp"></put-attribute> + <put-attribute name="viewName" value="error"></put-attribute> + </definition> + + <definition extends="ebz_template" name="collaborate_list"> + <put-attribute name="body" + value="/WEB-INF/fusion/jsp/collaborateList.jsp"></put-attribute> + </definition> + + <!-- <definition extends="ebz_template" name="notebook"> + <put-attribute name="body" + value="/WEB-INF/fusion/jsp/notebook.jsp"></put-attribute> + </definition> --> + + <definition name="notebook" + template="app/fusion/notebook-integration/scripts/view-models/notebook.htm" /> + + + <definition name="nbooktest" + template="app/fusion/notebook-integration/scripts/view-models/notebook-frame.html"/> + + + <definition extends="ebz_template" name="jcs_admin"> + <put-attribute name="body" value="/WEB-INF/fusion/jsp/jcs_admin.jsp"></put-attribute> + <put-attribute name="viewName" value="jcs_admin"></put-attribute> + </definition> + + <definition extends="ebz_template" name="usage_list"> + <put-attribute name="body" value="/WEB-INF/fusion/jsp/usage_list.jsp"></put-attribute> + <put-attribute name="viewName" value="usage_list"></put-attribute> + </definition> + + <definition extends="ebz_template" name="broadcast_list"> + <put-attribute name="body" + value="/WEB-INF/fusion/jsp/broadcast_list.jsp"></put-attribute> + <put-attribute name="viewName" value="broadcast_list"></put-attribute> + </definition> + <definition extends="ebz_template" name="broadcast"> + <put-attribute name="body" value="/WEB-INF/fusion/jsp/broadcast.jsp"></put-attribute> + <put-attribute name="viewName" value="broadcast"></put-attribute> + </definition> + + + <definition extends="ebz_template" name="chart_wizard"> + <put-attribute name="body" + value="/WEB-INF/fusion/jsp/chart_wizard.jsp"></put-attribute> + <put-attribute name="viewName" value="chart_wizard"></put-attribute> + </definition> + + <!-- <definition extends="ebz_template_noheader_nofooter" name="collaboration"> + <put-attribute name="body" value="/WEB-INF/fusion/jsp/webrtc/collaboration.jsp"></put-attribute> + </definition> --> + <definition name="collaboration" + template="/WEB-INF/fusion/jsp/webrtc/collaboration.jsp" /> + <definition name="user_profile_list" + template="/app/fusion/scripts/DS2-view-models/ds2-profile/profile.html" /> + <definition name="admin" + template="/app/fusion/scripts/DS2-view-models/ds2-admin/admin.html" /> + <definition name="workflows" + template="/app/fusion/scripts/view-models/workflows/workflow-landing.html" /> + <definition name="report_dashboard" + template="/app/fusion/scripts/view-models/reportdashboard-page/src/report-dashboard.html" /> + <definition name="samplePage" + template="/app/fusion/scripts/DS2-view-models/ds2-samplePages/samplePage.html" /> + <definition name="ds2_sample" template="/app/fusionapp/scripts/DS2-view-models/sampleDS2.html" /> + + + <definition extends="ebz_template" name="report_wizard"> + <put-attribute name="body" + value="/WEB-INF/fusion/raptor/report_wizard.jsp"></put-attribute> + <put-attribute name="viewName" value="report_wizard"></put-attribute> + </definition> + <definition extends="ebz_template" name="wizard_schedule_only"> + <put-attribute name="body" + value="/WEB-INF/fusion/raptor/wizard_schedule_only.jsp"></put-attribute> + <put-attribute name="viewName" value="wizard_schedule_only"></put-attribute> + </definition> + + <definition extends="ebz_template" name="report_import"> + <put-attribute name="body" + value="/WEB-INF/fusion/raptor/report_import.jsp"></put-attribute> + <put-attribute name="viewName" value="report_import"></put-attribute> + </definition> + + + <definition extends="ebz_template" name="report"> + <put-attribute name="body" + value="/WEB-INF/fusion/raptor/report_ebz.jsp"></put-attribute> + </definition> + <definition extends="ebz_template_report_embedded" name="report_embedded"> + <put-attribute name="body" + value="/WEB-INF/fusion/raptor/report_ebz.jsp"></put-attribute> + </definition> + <definition extends="ebz_template" name="report_sample"> + <put-attribute name="body" + value="/WEB-INF/fusion/raptor/report_sample.jsp"></put-attribute> + </definition> + <definition extends="ebz_template_noheader_nofooter" name="test_run_sql"> + <put-attribute name="body" + value="/WEB-INF/fusion/raptor/test_run_sql.jsp"></put-attribute> + </definition> + <definition extends="ebz_template_noheader_nofooter" name="date_start_field_run_sql"> + <put-attribute name="body" + value="/WEB-INF/fusion/raptor/date_start_field_run_sql.jsp"></put-attribute> + </definition> + <definition extends="ebz_template_noheader_nofooter" name="date_end_field_run_sql"> + <put-attribute name="body" + value="/WEB-INF/fusion/raptor/date_end_field_run_sql.jsp"></put-attribute> + </definition> + <definition extends="ebz_template_noheader_nofooter" name="test_field_run_sql"> + <put-attribute name="body" + value="/WEB-INF/fusion/raptor/test_field_run_sql.jsp"></put-attribute> + </definition> + <definition extends="ebz_template_noheader_nofooter" name="default_field_run_sql"> + <put-attribute name="body" + value="/WEB-INF/fusion/raptor/default_field_run_sql.jsp"></put-attribute> + </definition> + <definition extends="ebz_template_noheader_nofooter" name="popup_testrun_sql"> + <put-attribute name="body" + value="/WEB-INF/fusion/raptor/popup_testrun_sql.jsp"></put-attribute> + </definition> + <definition extends="ebz_template_noheader_nofooter" name="popup_semaphore"> + <put-attribute name="body" + value="/WEB-INF/fusion/raptor/popup_semaphore.jsp"></put-attribute> + </definition> + <definition extends="ebz_template_noheader_nofooter" name="popup_import_semaphore"> + <put-attribute name="body" + value="/WEB-INF/fusion/raptor/popup_import_semaphore.jsp"></put-attribute> + </definition> + <definition extends="ebz_template_noheader_nofooter" name="popup_table_cols"> + <put-attribute name="body" + value="/WEB-INF/fusion/raptor/popup_table_cols.jsp"></put-attribute> + </definition> + <definition extends="ebz_template_noheader_nofooter" name="popup_drill_down_report"> + <put-attribute name="body" + value="/WEB-INF/fusion/raptor/popup_drill_down_report.jsp"></put-attribute> + </definition> + <definition extends="ebz_template_noheader_nofooter" name="popup_sql"> + <put-attribute name="body" + value="/WEB-INF/fusion/raptor/popup_sql.jsp"></put-attribute> + </definition> + <definition extends="ebz_template" name="error_page"> + <put-attribute name="body" + value="/WEB-INF/fusion/raptor/error_page.jsp"></put-attribute> + </definition> + <definition name="data_out" template="/WEB-INF/fusion/jsp/data_out.jsp" /> + + <definition extends="ebz_template" name="frame_insert"> + <put-attribute name="body" + value="/WEB-INF/fusion/jsp/frame_insert.jsp"></put-attribute> + </definition> + + <!-- <definition name="test_field_run_sql" template="/WEB-INF/fusion/raptor/test_field_run_sql.jsp"/> + <definition name="popup_testrun_sql" template="/WEB-INF/fusion/raptor/popup_testrun_sql.jsp"/> --> + +</tiles-definitions> diff --git a/vid-app-common/src/test/resources/WEB-INF/fusion/jsp/ds2/footer.jsp b/vid-app-common/src/test/resources/WEB-INF/fusion/jsp/ds2/footer.jsp new file mode 100644 index 000000000..7a2bbc436 --- /dev/null +++ b/vid-app-common/src/test/resources/WEB-INF/fusion/jsp/ds2/footer.jsp @@ -0,0 +1,34 @@ +<script src="./app/fusion/external/angular-1.5/angular.min.js"></script> +<script src="./app/fusion/external/angular-1.5/angular-messages.js"></script> +<script src="./app/fusion/external/angular-1.5/angular-touch.js"></script> +<script src="./app/fusion/external/angular-1.5/angular-sanitize.js"></script> +<script src="./app/fusion/external/angular-1.5/angular-route.min.js"></script> +<script src="./app/fusion/external/angular-1.5/angular-cookies.min.js"></script> +<link rel="stylesheet" type="text/css" href="./app/fusion/external/ds2/css/b2b-angular/b2b-angular.css"></style> +<script src="app/fusion/external/ds2/js/b2b-angular/b2b-library.min.js"></script> +<!-- b2b-column-switch-footer can only found in b2b-library.min.js --> + + +<div style="position: relative; bottom: 0; left: 0; width: 100%"> + <footer class="b2b-footer-wrapper" role="contentinfo" aria-label="footer"> + <div class="b2b-footer-container" b2b-column-switch-footer> + <div style="margin-top: -25px;" class="divider-bottom-footer"> + <div style="text-align: center;" class="span12 footerLogo"> + <div class="span8 copyright-text"> + <a href="//www.att.com/gen/privacy-policy?pid=2587" target="_blank">© 2017 AT&T Intellectual Property.</a> All rights reserved. AT&T, the AT&T Globe logo and all other AT&T marks contained herein are trademarks of AT&T intellectual property and/or AT&T affiliated companies. + </div> + <div class="span3" style="margin-left:30px;"> + <a href="welcome.htm" class="footer-logo"> + <span class="footer-global"> + <i class="icon-att-globe" > + <span class="hidden-spoken">A T & T</span> + </i> + </span> + <h2 class="logo-title" id="at&t">AT&T</h2> + </a> + </div> + </div> + </div> + </div> + </footer> +</div>
\ No newline at end of file diff --git a/vid-app-common/src/test/resources/WEB-INF/fusion/jsp/ds2/header.jsp b/vid-app-common/src/test/resources/WEB-INF/fusion/jsp/ds2/header.jsp new file mode 100644 index 000000000..e3928734a --- /dev/null +++ b/vid-app-common/src/test/resources/WEB-INF/fusion/jsp/ds2/header.jsp @@ -0,0 +1,236 @@ +<script src="./app/fusion/external/angular-1.5/angular.min.js"></script> +<script src="./app/fusion/external/angular-1.5/angular-messages.js"></script> +<script src="./app/fusion/external/angular-1.5/angular-touch.js"></script> +<script src="./app/fusion/external/angular-1.5/angular-sanitize.js"></script> +<script src="./app/fusion/external/angular-1.5/angular-route.min.js"></script> +<script src="./app/fusion/external/angular-1.5/angular-cookies.min.js"></script> +<script src="./app/fusion/external/ds2/js/b2b-angular/b2b-library.min.js"></script> +<script src="./app/fusion/external/ds2/js/digital-ng-library/digital-design-library.js"></script> +<script src="./app/fusion/scripts/DS2-services/leftMenuServiceDS2.js"></script> +<link rel="stylesheet" type="text/css" href="./app/fusion/external/ds2/css/b2b-angular/b2b-angular.css"> +<link rel="stylesheet" type="text/css" href="./app/fusion/external/ds2/css/b2b-angular/b2b-angular.css"> +<link rel="stylesheet" type="text/css" href="./app/fusion/external/ds2/css/digital-ng-library/extras/ds2-accordion.css"> +<link rel="stylesheet" type="text/css" href="./app/fusion/external/ds2/css/digital-ng-library/extras/ds2-bootstrap-datepicker.css"> +<link rel="stylesheet" type="text/css" href="./app/fusion/external/ds2/css/digital-ng-library/extras/ds2-cc-input-field.css"> +<link rel="stylesheet" type="text/css" href="./app/fusion/external/ds2/css/digital-ng-library/extras/ds2-tooltip.css"> +<link rel="stylesheet" type="text/css" href="./app/fusion/external/ds2/css/digital-ng-library/extras/x-tabs-pills.css"> +<link rel="stylesheet" type="text/css" href="./app/fusion/external/ds2/css/digital-ng-library/ds2-accordion.css"> +<link rel="stylesheet" type="text/css" href="./app/fusion/external/ds2/css/digital-ng-library/ds2-bootstrap-datepicker.css"> +<link rel="stylesheet" type="text/css" href="./app/fusion/external/ds2/css/digital-ng-library/ds2-c2c.css"> +<link rel="stylesheet" type="text/css" href="./app/fusion/external/ds2/css/digital-ng-library/ds2-cc-input-field.css"> +<link rel="stylesheet" type="text/css" href="./app/fusion/external/ds2/css/digital-ng-library/ds2-filmstrip.css"> +<link rel="stylesheet" type="text/css" href="./app/fusion/external/ds2/css/digital-ng-library/ds2-filters.css"> +<link rel="stylesheet" type="text/css" href="./app/fusion/external/ds2/css/digital-ng-library/ds2-legacynav-fix.css"> +<link rel="stylesheet" type="text/css" href="./app/fusion/external/ds2/css/digital-ng-library/ds2-marquee.css"> +<link rel="stylesheet" type="text/css" href="./app/fusion/external/ds2/css/digital-ng-library/ds2-pagination.css"> +<link rel="stylesheet" type="text/css" href="./app/fusion/external/ds2/css/digital-ng-library/ds2-popover.css"> +<link rel="stylesheet" type="text/css" href="./app/fusion/external/ds2/css/digital-ng-library/ds2-progressbar.css"> +<link rel="stylesheet" type="text/css" href="./app/fusion/external/ds2/css/digital-ng-library/ds2-tooltip.css"> +<link rel="stylesheet" type="text/css" href="./app/fusion/external/ds2/css/digital-ng-library/global.css"> +<link rel="stylesheet" type="text/css" href="./app/fusion/external/ds2/css/digital-ng-library/digital-design-library.css"> + +<link rel="stylesheet" type="text/css" href="./app/fusion/external/ds2/css/digital-ng-library/ionicons.css"> +<link rel="stylesheet" type="text/css" href="./app/fusion/styles/ecomp.css"> +<script> +angular.module('att.abs.helper', []); +angular.module('quantum', []); +//angular.module('ui.bootstrap', []); +var appDS2=angular.module("abs", ["ngRoute", 'ngMessages', 'ngCookies', 'b2b.att.tpls', 'ddh.att.tpls', 'ddh.att.switches', 'b2b.att.footer', 'b2b.att.header']); +</script> + +<script src="./app/fusion/scripts/DS2-services/leftMenuServiceDS2.js"></script> + +<script> +appDS2.controller("leftMenuController", ['$scope', '$filter','$http','$timeout','$cookies','LeftMenuServiceDS2', function ($scope, $filter, $http, $timeout, $cookies, LeftMenuServiceDS2) { + $scope.menuData = []; + $scope.leftChildData=[]; + $scope.leftParentData=[]; + $scope.leftMenuItems = []; + $scope.app_name = ""; + $scope.app_name_full; + LeftMenuServiceDS2.getLeftMenu().then(function(response){ + var j = response; + try{ + if(j && j !== "null" && j!== "undefined"){ + $scope.leftParentData = JSON.parse(j.data); + $scope.leftChildData = JSON.parse(j.data2); + }else{ + throw "Get Left Menu respsone is not an object/is empty"; + } + try{ + var leftChildItemList = $scope.leftChildData; + var pageUrl = window.location.href.split('/')[window.location.href.split('/').length-1]; + var leftParentList =$scope.leftParentData; + + for (var i = 0; i < leftParentList.length; i++) { + var parentItem = {}; + parentItem.name = leftParentList[i].label; + if(parentItem.name == 'Home'){ + parentItem.imageSrc = /*"icon-location-pinpoint"*/ "icon-building-home"; + } else if(parentItem.name == 'Sample Pages'){ + parentItem.imageSrc = "icon-documents-book"; + } else if(parentItem.name == 'Reports'){ + parentItem.imageSrc = "icon-misc-piechart"; + } else if(parentItem.name == 'Profile'){ + parentItem.imageSrc = "icon-people-oneperson"; + } else if(parentItem.name == 'Admin'){ + parentItem.imageSrc = "icon-content-star"; + } else if(parentItem.name == 'Sample Pages'){ + parentItem.imageSrc = "icon-content-searchchannels"; + } else { + parentItem.imageSrc = "icon-building-door"; + } + parentItem.menuItems = []; + for (var j = 0; j < leftChildItemList[i].length; j++) { + if(leftChildItemList[i][j].label != null && leftChildItemList[i][j].label.length > 0) { + var childItem = {}; + childItem.name = leftChildItemList[i][j].label; + childItem.href = leftChildItemList[i][j].action; + parentItem.menuItems.push(childItem) + } + } + $scope.menuData.push(parentItem); + } + + + //For Home, add href + $scope.menuData[0].href = leftParentList[0].action; + + for (var i = 0; i < leftParentList.length; i++) { + $scope.item = { + parentLabel : leftParentList[i].label, + parentAction : leftParentList[i].action, + parentImageSrc : leftParentList[i].imageSrc, + open:pageUrl==leftParentList[i].action?true:false, + childItemList : leftChildItemList[i] + }; + }; + }catch(err){ + console.log("error happened while trying to set left menu structure"+err); + } + }catch (e) { + console.log("error happened while trying to get left menu items"+e); + reloadPageOnce(); + return; + } +},function(error){ + console.log("error happened while calling getLeftMenu"+error); +}); + +LeftMenuServiceDS2.getAppName().then(function(response){ + var j = response; + try{ + if(j && j !== "null" && j!== "undefined"){ + console.log("app name is " + $scope.app_name); + $scope.app_name_full = j.data; + var processed_app_name = j.data; + var n = processed_app_name.length; + if (n > 15) { + n = 15; + } + $scope.app_name = processed_app_name.substr(0, n); + }else{ + throw "Get app_name respsone is not an object/is empty"; + } + }catch (e) { + console.log("error happened while trying to get app name "+e); + return; + } +},function(error){ + console.log("error happened while calling getAppName "+error); +}); + +$scope.adjustHeader=function() { + $scope.showHeader = ($cookies.show_app_header == undefined ? true : $cookies.show_app_header); + + if($scope.showHeader == true) { + $scope.drawer_margin_top = 50; + $scope.drawer_custom_top = 54; + $scope.toggle_drawer_top = 55; + } + else { + + $scope.drawer_margin_ top = 40; + $scope.drawer_custom_top = 0; + $scope.toggle_drawer_top = 10; + } + + +}; + +$scope.adjustHLeftMenu = function (type){ + $scope.showHeader = ($cookies.show_app_header == undefined ? true : $cookies.show_app_header); + + if($scope.showHeader == true) { + $scope.drawer_margin_top = 60; + $scope.drawer_custom_top = 54; + $scope.toggle_drawer_top = 55; + } + else { + + $scope.drawer_margin_top = 50; + $scope.drawer_custom_top = 0; + $scope.toggle_drawer_top = 10; + } + if(type=='burgerIcon'){ + return { "top": $scope.toggle_drawer_top+"px"}; + }else if(type=='leftMenu'){ + return { "margin-top": $scope.drawer_margin_top+"px"}; + }else + return; +} +$scope.adjustHeader(); +$scope.drawerOpen = true; + +$scope.toggleDrawer = function() { + $scope.drawerOpen = !($scope.drawerOpen); + if ($scope.drawerOpen) { + // setCookie('drawerOpen','open',30); + $scope.arrowShow = true; + + + if (document.getElementById('fnMenueContent')!=null) + document.getElementById('fnMenueContent').style.marginLeft = "0px"; + + if (document.getElementById('rightContentAdmin')!=null) + document.getElementById('rightContentAdmin').style.marginLeft = "210px"; + + else if (document.getElementById('rightContentProfile')!=null) + document.getElementById('rightContentProfile').style.marginLeft = "210px"; + } else { + + $scope.arrowShow = false; + + if (document.getElementById('fnMenueContent')!=null) + document.getElementById('fnMenueContent').style.marginLeft = "-150px"; + + if (document.getElementById('rightContentAdmin')!=null) { + document.getElementById('rightContentAdmin').style.marginLeft = "50px"; + } + + else if (document.getElementById('rightContentProfile')!=null) + document.getElementById('rightContentProfile').style.marginLeft = "50px"; + } + }; + +$timeout(function() { + //detectScrollEvent(); + }, 800); +}]); +</script> + +<style> +#page-content{ +margin-top:-250px; +} + +#page-content td, th { + padding: 0px; + border:none; +} +</style> +<div ng-app="abs"> + <div ng-controller = "leftMenuController"> + <ddh-left-navigation menu-data="menuData"></ddh-left-navigation> + </div> +</div>
\ No newline at end of file diff --git a/vid-app-common/src/test/resources/WEB-INF/fusion/jsp/ds2/left-menu.jsp b/vid-app-common/src/test/resources/WEB-INF/fusion/jsp/ds2/left-menu.jsp new file mode 100644 index 000000000..445aa0803 --- /dev/null +++ b/vid-app-common/src/test/resources/WEB-INF/fusion/jsp/ds2/left-menu.jsp @@ -0,0 +1,804 @@ +<%-- + ================================================================================ + eCOMP Portal SDK + ================================================================================ + 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. + ================================================================================ + --%> +<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core"%> +<%@ taglib prefix="fn" uri="http://java.sun.com/jsp/jstl/functions"%> +<%@ page isELIgnored="false"%> +<%@ page import="org.openecomp.portalsdk.core.util.SystemProperties"%> +<%@ page import="org.openecomp.portalsdk.core.onboarding.util.PortalApiProperties"%> +<%@ page import="org.openecomp.portalsdk.core.onboarding.util.PortalApiConstants"%> +<%@ page import="org.openecomp.portalsdk.core.domain.MenuData"%> +<link rel="stylesheet" type="text/css" href="app/fusion/external/ebz/ebz_header/header.css"> +<link rel="stylesheet" type="text/css" href="app/fusion/external/ebz/ebz_header/portal_ebz_header.css"> +<link rel="stylesheet" type="text/css" href="app/fusion/external/ebz/sandbox/styles/style.css" > + + +<!-- <script src= "app/fusion/external/ebz/angular_js/angular.js"></script> +<script src= "app/fusion/external/ebz/angular_js/angular-route.min.js"></script> +<script src= "app/fusion/external/ebz/angular_js/angular-sanitize.js"></script> +<script src= "app/fusion/external/ebz/angular_js/angular-cookies.js"></script> +<script src= "app/fusion/external/ebz/angular_js/app.js"></script> +<script src= "app/fusion/external/ebz/angular_js/gestures.js"></script> +<script src="static/js/jquery-1.10.2.js"></script> +<script src="app/fusion/scripts/modalService.js"></script> +<script src="static/js/jquery.mask.min.js" type="text/javascript"></script> +<script src="static/js/jquery-ui.js" type="text/javascript"></script> +<script src="app/fusion/external/ebz/sandbox/att-abs-tpls.js" type="text/javascript"></script> +<script src="static/fusion/js/att_angular_gridster/ui-gridster-tpls.js"></script> +<script src="static/fusion/js/att_angular_gridster/angular-gridster.js"></script> +<script src= "app/fusion/external/ebz/angular_js/checklist-model.js"></script> +<script type="text/javascript" src="//cdnjs.cloudflare.com/ajax/libs/lodash.js/0.10.0/lodash.min.js"></script> +<script src="app/fusion/external/angular-ui/ui-bootstrap-tpls-1.1.2.min.js"></script> +<script src="app/fusion/scripts/services/userInfoService.js"></script> +<script src="app/fusion/scripts/services/leftMenuService.js"></script> --> + + +<jsp:include page="/WEB-INF/fusion/jsp/ebz/loginSnippet.html" ></jsp:include> + + +<c:set var="UserName" value="<%= session.getAttribute(\"fullName\")%>" /> +<c:set var="UserFirstName" value="<%= session.getAttribute(\"first_name\")%>" /> + +<% + String contactUsLink = SystemProperties.getProperty(SystemProperties.CONTACT_US_LINK); + String redirectUrl = PortalApiProperties.getProperty(PortalApiConstants.ECOMP_REDIRECT_URL); + String portalUrl = redirectUrl.substring(0, redirectUrl.lastIndexOf('/')) + "/process_csp"; + String getAccessLink = redirectUrl.substring(0, redirectUrl.lastIndexOf('/')) + "/get_access"; +%> +<c:set var="returnPortalUrl" value="<%=portalUrl%>" /> +<c:set var="contactUsLink" value="<%=contactUsLink%>" /> +<c:set var="getAccessLink" value="<%=getAccessLink%>" /> + +<style> +</style> + +<%@include file="/WEB-INF/fusion/jsp/ebz/loginSnippet.html" %> + +<div style="position: relative; z-index: 999;"> + <div ng-controller="headerController"> + + <div class="headerContainer" id="headerContainer" ng-cloak ng-show="{{showHeader}}"> + <div id="megaMenuContainer" class="megaMenuContainer" style="margin-top: 0; overflow: visible;"> + <div> + <!--for mega Menu--> + <!-- Mega Menu parent-tab directive with three models menu-items, active-sub-menu, active-menu --> + <div id="topMenu" class="top-megamenu" ng-mouseleave="activeClickSubMenu.x.active=false; activeClickMenu.x.active=false"> + <div style="float:left;width:100%;"parent-tab menu-items="megaMenuDataObject" active-sub-menu='activeClickSubMenu.x' active-menu='activeClickMenu.x'> + <div parentmenu-tabs mega-menu="true" menu-items="megaMenuDataObject" style="height:55px;"> + <div style="float:left"> + <li class="megamenu__item" style="line-height:55px;" onclick="returnToPortal()"> + <img src="app/fusion/external/ebz/images/att_logo.png" class="ATTLogo" ></span> +<!-- <a id='returnPortal' class="primaryMenuOptionLink" style="font-weight: 400 !important; font-family: clearview_att_bold !important; font-size: 18px;">ECOMP</a> + --> <strong style="font-weight: 400 !important; font-family: clearview_att_bold !important; font-size: 18px;" id='returnPortal' >ECOMP Portal</strong> + </li> + <div menu-tabs mega-menu="true" tab-name="item.text" menu-item="item" active-menu="activeClickMenu.x" + ng-repeat="item in megaMenuDataObject" style="font-size: 18px;" ng-mousedown="loadFavorites()" > + <div parentmenu-tabs sub-menu="true" ng-show="activeClickMenu.x.active && item.active" menu-items="activeClickMenu.x.children"> + <!-- Second level menu --> + <div> + <div menu-tabs sub-menu="true" tab-name="subItem.text" + tab-url="subItem.url" menu-item="subItem" + ng-repeat="subItem in activeClickMenu.x.children | orderBy : 'column'" active-menu="activeClickSubMenu.x" + sub-item-active="{{subItem.active}}" style="float:left;" aria-label="{{subItem.text}}" + ng-mouseenter="submenuLevelAction(subItem.text,subItem.column)" + ng-mouseleave="submenuLevelAction(subItem.text,subItem.column)" + ng-click="submenuLevelAction(subItem.text,subItem.column)" > + <i ng-if="subItem.text=='Favorites'" id="favorite-star" + class="icon-star favorites-icon-active"> + </i> + </div> + + <div class="sub__menu" ng-mouseleave="activeClickSubMenu.x.active=false" > + <ul ng-show="activeClickSubMenu.x.active" role="menubar" class="columns"> + <!-- Third level menu --> + <div menu-tabs menu-item="subItem" + class="columns-div" + ng-repeat="subItem in activeClickSubMenu.x.children | orderBy : 'column'" + ng-show="activeClickSubMenu.x.active"> + + <i id="favorite-selector-third-level" + ng-show="isUrlFavorite(subItem.menuId)==false" + class="icon-star favorites-icon-inactive" + ng-if="subItem.url.length > 1"> + </i> + <i id="favorite-selector-third-level" + ng-show="isUrlFavorite(subItem.menuId)" + class="icon-star favorites-icon-active" + ng-if="subItem.url.length > 1"> + </i> + <span class="title" aria-label="{{subItem.text}}" + ng-click="goToUrl(subItem)">{{subItem.text}}</span> + <!-- Fourth level menus --> + <div att-links-list=""> + <i id="favorite-selector-fourth-level" + class="icon-star favorites-icon-inactive" + ng-show="isUrlFavorite(tabValue.menuId)==false" + ng-if="tabValue.url.length > 1"> + + </i> + <i id="favorite-selector-fourth-level" + class="icon-star favorites-icon-active" + ng-show="isUrlFavorite(tabValue.menuId)" + ng-if="tabValue.url.length > 1"> + + </i> + <span role="menuitem" att-links-list-item="" + ng-repeat="tabValue in subItem.children" + ng-click="goToUrl(tabValue)" + att-accessibility-click="13,32" + ng-class="{'disabled': tabValue.disabled}">{{tabValue.text}}</span> + </div> + <hr ng-show="!$last"/> + + </div> + </ul> + <!-- Favorites level menu --> + <div class="favorites-window" ng-show='favoritesWindow' ng-mouseleave="hideFavoritesWindow()"> + <div id="favorites-menu-items" ng-show="showFavorites"> + <div ng-repeat="subItem in favoritesMenuItems" att-links-list="" style='display: inline'> + <i id="favorite-selector-favorites-list" class="icon-star favorites-icon-active"> + </i> + <a id="favorites-list" aria-label="{{subItem.text}}" + ng-click="goToUrl(subItem)" + style="margin-left: 3px; margin-right: 20px; text-decoration: none; color: #666666;"> + {{subItem.text}} + </a> + </div> + <div> + <br> + <p style='font-weight: 400; font-family: clearview_att_bold !important; + font-size: 18px; text-align: center; background-color: lightgray; + width: 400px; margin-left: 25%; margin-right: 25%;'> + Manage favorites on ECOMP Portal. + </p> + </div> + </div> + <!-- Favorites when empty --> + <div id="favorites-empty" ng-show='favoritesWindow' ng-show="emptyFavorites"> + <div id="favorites-empty" ng-show="emptyFavorites" class="favorites-window-empty"> + <div> + <img src="app/fusion/external/ebz/images/no_favorites_star.png"> + <p class='favoritesLargeText'>No Favorites</p> + <p class='favoritesNormalText'>Manage favorites on ECOMP Portal.</p> + </div> + </div> + </div> + </div> + + </div> + </div> + </div> + </div > + <li class="megamenu__item" style="line-height:55px;" ng-if="loadMenufail"> + <strong style="font-weight: 400 !important; font-family: clearview_att_bold !important; font-size: 18px;" >Unable to load menus</strong> + </li> +<!-- <li class="megamenu__item" style="width: 20%;"> </li> + --> </div> + <!-- Login Snippet--> + <div style="float:right"> + <li id="bcLoginSnippet" class="megamenu__item" style="width: 140px;" > + <div popover="loginSnippet.html" aria-label="Login Snippet" referby="loginSnippet" att-accessibility-click="13,32" popover-style="\" popover-placement="below" style="width: 200px;"> + <div class="icon-user-small login-snippet-icon"></div> + <div class="login-snippet-text" style="display: inline-block; font-size:12px; margin-left:5px;overflow: hidden; max-height: 31px; max-width:120px; padding-top: 0px; margin-top: 0px; white-space: nowrap;" ng-bind="userProfile.firstName"></div> + </div> + </li> + <li class="megamenu__item" style="width:120px;"> </li> + </div> + + </div> + </div> + <div style="clear: both"></div> + </div> + </div> + </div> + </div> + <div class="license-notification" id="license-notification"> + <a href="javascript:void(0)" style="background-color:#bbb;" class="button button--small" tooltip="Please contact ECOMP Portal team to get the license" tooltip-placement="below" tooltip-style="light" tooltip-popup-delay="500" > + <span style="">{{app_name_full}}</span> + </a> + </div> + <div style="position: relative; color: black; top: 70px;"> + <div ng-cloak> + <span ng-style="adjustHLeftMenu('burgerIcon')" style="z-index:998; position:fixed; left:0%; font-size:35px; margin-left:10px;text-decoration:none;"> + <a ng-click="toggleDrawer();isOpen = !isOpen" href="javascript:void(0);" class="arrow-icon-left" > + <span class="icon-hamburger"></span></a> + <span ng-init="isOpen = true" ng-show="isOpen" style="font-size:16px; position:relative; top:-8px; left:-15px;">    {{app_name}}</span> + </span> + <div att-drawer drawer-slide="left" drawer-custom-top="{{drawer_custom_top}}px" drawer-size="200px" drawer-open="drawerOpen" drawer-custom-height="100%" > + <div ng-style="adjustHLeftMenu('leftMenu')"> + <div class="attDrawer" style="margin-top:{{drawer_margin_top}}px;"> + <div style="margin-left:10px; margin-right:10px;"> + <accordion close-others="true" css="att-accordion--no-box"> + <accordion-group ng-repeat="parent in menuItems" heading="{{parent.parentLabel}}" child="{{parent.parentAction}}" parent-link="{{parent.parentAction}}" image-source="{{parent.parentImageSrc}}" child-length="{{parent.childItemList.length}}" is-open="parent.open"> + <div ng-repeat="subMenu in parent.childItemList" style="font-size:12px; margin-left:10px;"> + <a href="{{subMenu.action}}" style="font-size:12px; color:#666666;" >{{subMenu.label}}</a> + </div> + </accordion-group> + </accordion> + </div> + </div> + </div> + </div> + </div> + </div> + </div> +</div> + +<script> + function returnToPortal(){ + window.location.href = "<c:out value='${returnPortalUrl}'/>"; + } + detectScrollEvent = function() { + var footerOff = $('#footerContainer').offset().top; + var headOff = $('#headerContainer').offset().top; + var winHeight = $(window).height(); + if ((footerOff - headOff) <= winHeight) { + $('.att-drawer').css({ + "height" : footerOff - headOff - 55 + }); + } else { + $('.att-drawer').css({ + "height" : "94vh" + }); + } + } + $(window).scroll(function() { + if ($('.att-drawer').is(':visible')) { + detectScrollEvent(); + } + }); + app.controller("headerController", function($scope, $timeout, $log, $http, UserInfoService, $window, $cookies,LeftMenuService) { + // $log.debug('HeaderController started'); + $scope.jsonMenuData = []; + $scope.loadMenufail=false; + $scope.app_name = ""; + $scope.app_name_full = ""; + $scope.megaMenuDataObject =[]; + $scope.activeClickSubMenu = { + x: '' + }; + $scope.activeClickMenu = { + x: '' + }; + $scope.favoritesMenuItems = []; + $scope.favoriteItemsCount = 0; + $scope.showFavorites = false; + $scope.emptyFavorites = false; + $scope.favoritesWindow = false; + $scope.userProfile={ + firstName:'', + lastName:'', + fullName:'', + email:'' + } + /*Put user info into fields*/ + $scope.inputUserInfo = function(userInfo){ + if (typeof(userInfo) != "undefined" && userInfo!=null && userInfo!=''){ + if (typeof(userInfo.USER_FIRST_NAME) != "undefined" && userInfo.USER_FIRST_NAME!=null && userInfo.USER_FIRST_NAME!='') + $scope.userProfile.firstName = userInfo.USER_FIRST_NAME; + if (typeof(userInfo.USER_LAST_NAME) != "undefined" && userInfo.USER_LAST_NAME!=null && userInfo.USER_LAST_NAME!='') + $scope.userProfile.lastName = userInfo.USER_LAST_NAME; + if (typeof(userInfo.USER_EMAIL) != "undefined" && userInfo.USER_EMAIL!=null && userInfo.USER_EMAIL!='') + $scope.userProfile.email = userInfo.USER_EMAIL; + } + } + /*getting user info from session*/ + $scope.getUserNameFromSession = function(){ + UserInfoService.getFunctionalMenuStaticDetailSession() + .then(function (res) { + $scope.userProfile.firstName = res.firstName; + $scope.redirectUrl = res.portalUrl; + }); + } + $scope.getTopMenuStaticInfo=function() { + var promise = UserInfoService.getFunctionalMenuStaticDetailShareContext(); + promise.then( + function(res) { + if(res==null || res==''){ + $log.info('failed getting static User information'); + $scope.getUserNameFromSession(); + }else{ + $log.info('Received static User information'); + var resData = res; + $scope.inputUserInfo(resData); + $scope.userProfile.fullName = $scope.userProfile.firstName+ ' '+ $scope.userProfile.lastName; + } + }, + function(err) { + $log.info('failed getting static User information'); + } + ); + } + + var unflatten = function( array, parent, tree ){ + tree = typeof tree !== 'undefined' ? tree : []; + parent = typeof parent !== 'undefined' ? parent : { menuId: null }; + var children = _.filter( array, function(child){ return child.parentMenuId == parent.menuId; }); + + if( !_.isEmpty( children ) ){ + if( parent.menuId === null ){ + tree = children; + }else{ + parent['children'] = children + } + _.each( children, function( child ){ unflatten( array, child ) } ); + } + + return tree; + } + + var menuStructureConvert = function(menuItems) { + var megaMenuDataObjectTemp = [ + { + text: "ECOMP", + children:menuItems + }, + { + text: "Help", + children: [{ + text:"Contact Us", + url:"<c:out value='${contactUsLink}'/>" + }, + { + text:"Get Access", + url:"<c:out value='${getAccessLink}'/>" + }] + } + ]; + return megaMenuDataObjectTemp; + }; + + + /*Left Menu*/ + LeftMenuService.getAppName().then(function(response){ + var j = response; + try{ + if(j && j !== "null" && j!== "undefined"){ + // console.log("app name is " + $scope.app_name); + $scope.app_name_full = j.data; + var processed_app_name = j.data; + if(processed_app_name.indexOf("[")<=-1) { + if (document.getElementById('license-notification')!=null) + document.getElementById('license-notification').style.display = "none"; + } + var n = processed_app_name.length; + if (n > 15) { + n = 15; + } + $scope.app_name = processed_app_name.substr(0, n); + }else{ + throw "Get app_name response is not an object/is empty"; + } + }catch (e) { + console.log("error happened while trying to get app name "+e); + return; + } + },function(error){ + console.log('getAppName failed', error); + }); + + $scope.getTopMenuStaticInfo(); + $scope.getMenu=function() { + + $http({ + method: "GET", + url: 'get_functional_menu', +// TIMEOUT USED FOR LOCAL TESTING ONLY +// timeout: 100 + }).success(function (response) { + if(response == '101: Timeout') { + $log.error('Timeout attempting to get_functional_menu'); + // TIMEOUT USED FOR LOCAL TESTING ONLY +// $scope.createErrorMenu(); + $scope.megaMenuDataObject = menuStructureConvert(''); + }else { + $log.debug('get_functional_menu success: ' + response); + if(typeof response != 'undefined' && response.length!=0 && typeof response[0] != 'undefined' && typeof response[0].error!="undefined"){ +// createErrorMenu() USED FOR LOCAL TESTING ONLY +// $scope.createErrorMenu(); + $scope.megaMenuDataObject = menuStructureConvert(''); + // $scope.loadMenufail=true; + }else{ + $scope.jsonMenuData = unflatten( response ); + $scope.megaMenuDataObject = menuStructureConvert($scope.jsonMenuData); + } + } + }).error(function (response){ +// createErrorMenu() USED FOR LOCAL TESTING ONLY +// $scope.createErrorMenu(); + + //$scope.loadMenufail=true; + $scope.megaMenuDataObject = menuStructureConvert(''); + $log.debug('REST API failed get_functional_menu...'+ response); + }); + } + $scope.adjustHLeftMenu = function (type){ + $scope.showHeader = ($cookies.show_app_header == undefined ? true : $cookies.show_app_header); + + if($scope.showHeader == true) { + $scope.drawer_margin_top = 60; + $scope.drawer_custom_top = 54; + $scope.toggle_drawer_top = 55; + } + else { + + $scope.drawer_margin_top = 50; + $scope.drawer_custom_top = 0; + $scope.toggle_drawer_top = 10; + } + if(type=='burgerIcon'){ + return { "top": $scope.toggle_drawer_top+"px"}; + }else if(type=='leftMenu'){ + return { "margin-top": $scope.drawer_margin_top+"px"}; + }else + return; + } + $scope.adjustHeader=function() { + $scope.showHeader = ($cookies.show_app_header == undefined ? true : $cookies.show_app_header); + + if($scope.showHeader == true) { + $scope.drawer_margin_top = 50; + $scope.drawer_custom_top = 54; + $scope.toggle_drawer_top = 55; + } + else { + + $scope.drawer_margin_top = 40; + $scope.drawer_custom_top = 0; + $scope.toggle_drawer_top = 10; + } + + + } + + + //$scope.getMenu(); + $scope.adjustHeader(); + + + /* **************************************************************************/ + /* Logic for the favorite menus is here */ + + $scope.loadFavorites = function () { + $log.debug('loadFavorites has happened.'); + if ($scope.favoritesMenuItems == '') { + $scope.generateFavoriteItems(); + $log.debug('loadFavorites is calling generateFavoriteItems()'); + } else { + $log.debug('loadFavorites is NOT calling generateFavoriteItems()'); + } + } + + $scope.goToUrl = function (item) { + $log.info("goToUrl called") + $log.info(item); + + var url = item.url; + var restrictedApp = item.restrictedApp; + $log.debug('Restricted app status is: ' + restrictedApp); + if (!url) { + $log.info('No url found for this application, doing nothing..'); + return; + } + if (restrictedApp) { + $window.open(url, '_blank'); + } else { + $window.open(url, '_self'); + } + + } + + $scope.submenuLevelAction = function(index, column) { + if ($scope.favoritesMenuItems == '') { + $scope.generateFavoriteItems(); + $log.debug('submenuLevelAction is calling generateFavoriteItems()'); + } + $log.debug('item hovered/clicked: ' + index + '; column = ' + column); + if (column == 2) { // 2 is Design + $scope.favoritesWindow = false; + $scope.showFavorites = false; + $scope.emptyFavorites = false; + } + if (index=='Favorites' && $scope.favoriteItemsCount != 0) { + $log.debug('Showing Favorites window'); + $scope.favoritesWindow = true; + $scope.showFavorites = true; + $scope.emptyFavorites = false; + } + if (index=='Favorites' && $scope.favoriteItemsCount == 0) { + $log.debug('Hiding Favorites window in favor of No Favorites Window'); + $scope.favoritesWindow = true; + $scope.showFavorites = false; + $scope.emptyFavorites = true; + } + if (column > 2) { + $scope.favoritesWindow = false; + $scope.showFavorites = false; + $scope.emptyFavorites = false; + } + }; + + $scope.hideFavoritesWindow = function() { + $log.debug('$scope.hideFavoritesWindow has been called'); + $scope.showFavorites = false; + $scope.emptyFavorites = false; + } + + $scope.isUrlFavorite = function (menuId) { +// $log.debug('array objects in menu favorites = ' + $scope.favoriteItemsCount + '; menuId=' + menuId); + var jsonMenu = JSON.stringify($scope.favoritesMenuItems); + var isMenuFavorite = jsonMenu.indexOf('menuId\":' + menuId); + if (isMenuFavorite==-1) { + return false; + } else { + return true; + } + + } + + $scope.generateFavoriteItems = function() { + $http({ + method: "GET", + url: 'get_favorites', + // TIMEOUT USED FOR LOCAL TESTING ONLY +// timeout: 100 + }).success(function (response) { + if (response == '101: Timeout') { + $log.error('Timeout attempting to get_favorites_menu'); + } else { + if(typeof response != 'undefined' && response.length!=0 && typeof response[0] != 'undefined' && typeof response[0].error!="undefined"){ + $log.error('REST API failed get_favorites' + response); + }else{ + $log.debug('get_favorites = ' + JSON.stringify(response)); + $scope.favoritesMenuItems = response; + $scope.favoriteItemsCount = Object.keys($scope.favoritesMenuItems).length; + $log.info('number of favorite menus: ' + $scope.favoriteItemsCount); + } + } + }).error(function (response){ + $log.error('REST API failed get_favorites' + response); + //createFavoriteErrorMenu() USED FOR LOCAL TESTING ONLY +// $scope.createFavoriteErrorMenu(); + }); + } + + $scope.createFavoriteErrorMenu=function() { + $scope.favoritesMenuItems = [ +// { +// "menuId": "93", +// "text": "JSONLint", +// "url": "http://http://jsonlint.com" +// }, +// { +// "menuId": "22", +// "text": "ECOMP Wasteland", +// "url": "https://ecomp.homer.att.com/ecompportal/applicationsHome" +// }, +// { +// "menuId": "94", +// "text": "HROneStop", +// "url": "http://ebiz.sbc.com/hronestop" +// }, +// { +// "menuId": "91", +// "text": "Andy and his Astrophotgraphy", +// "url": "https://ecomp.homer.att.com/ecompportal/applicationsHome" +// } + ]; + $scope.favoriteItemsCount = Object.keys($scope.favoritesMenuItems).length; + $log.info('number of favorite menus: ' + $scope.favoriteItemsCount); + } + + /* end of Favorite Menu code */ + /* **************************************************************************/ + + + /* **************************************************************************/ + // THIS IS USED FOR LOCAL TESTING ONLY + /* **************************************************************************/ + + $scope.createErrorMenu=function() { + $scope.jsonMenuData = [ + { + "menuId": 1, + "column": 2, + "text": "Design", + "parentMenuId": null, + "url": "" + }, + { + "menuId": 2, + "column": 3, + "text": "Infrastructure Ordering", + "parentMenuId": null, + "url": "" + }, + { + "menuId": 3, + "column": 4, + "text": "Service Creation", + "parentMenuId": null, + "url": "" + }, + { + "menuId": 4, + "column": 5, + "text": "Service Mgmt", + "parentMenuId": null, + "url": "" + }, + { + "menuId": 90, + "column": 1, + "text": "Google", + "parentMenuId": 1, + "url": "http://google.com" + }, + { + "menuId": 91, + "column": 1, + "text": "Mike Little's Coffee Cup", + "parentMenuId": 2, + "url": "http://coffee.com" + }, + { + "menuId": 92, + "column": 2, + "text": "Andy and his Astrophotgraphy", + "parentMenuId": 3, + "url": "http://nightskypix.com" + }, + { + "menuId": 93, + "column": 1, + "text": "JSONLint", + "parentMenuId": 4, + "url": "http://http://jsonlint.com" + }, + { + "menuId": 94, + "column": 2, + "text": "HROneStop", + "parentMenuId": 4, + "url": "http://ebiz.sbc.com/hronestop" + }, + { + "menuId": 95, + "column": 2, + "text": "4th Level App4a R16", + "parentMenuId": 4, + "url": "http://www.e-access.att.com/ecomp_portal_ist/ecompportal/widgets" + }, + { + "menuId": 96, + "column": 3, + "text": "3rd Level App1c R200", + "parentMenuId": 4, + "url": "http://app1c.com" + }, + { + "menuId": 97, + "column": 1, + "text": "3rd Level App4b R16", + "parentMenuId": 5, + "url": "http://app4b.com" + }, + { + "menuId": 98, + "column": 2, + "text": "3rd Level App2b R16", + "parentMenuId": 5, + "url": "http://app2b.com" + }, + { + "menuId": 99, + "column": 1, + "text": "Favorites", + "parentMenuId": null, + "url": "" + } + ]; + $scope.jsonMenuData = unflatten( $scope.jsonMenuData ); + $scope.megaMenuDataObject = menuStructureConvert($scope.jsonMenuData); +// $log.debug(JSON.stringify($scope.jsonMenuData)); + } + var childItemList=""; + var parentList = ""; + try{ + childItemList = ${menu.childItemList}; + parentList = ${menu.parentList}; + }catch(err){ + console.log("ebz_header: failed to get child/parent lists", err); + } + + var pageUrl = window.location.href.split('/')[window.location.href.split('/').length-1]; + + $scope.menuItems = []; + for (var i = 0; i < parentList.length; i++) { + $scope.openCurrentMenu = false; + if(pageUrl==parentList[i].action) + $scope.openCurrentMenu = true; + $scope.childItemList = childItemList[i]; + for(chIndex in $scope.childItemList){ + if($scope.childItemList.length>0) + if($scope.childItemList[chIndex].action!=null){ + if($scope.childItemList[chIndex].action==pageUrl) + $scope.openCurrentMenu = true; + } + } + $scope.item = { + parentLabel : parentList[i].label, + parentAction : parentList[i].action, + parentImageSrc : parentList[i].imageSrc, + open:$scope.openCurrentMenu, + childItemList : $scope.childItemList + } + $scope.menuItems.push($scope.item); + } + $scope.arrowShow = true; + $scope.drawerOpen = false; + $scope.subMenuContent = false; + $scope.toggleSubMenu = function() { + $scope.subMenuContent = !$scope.subMenuContent; + }; + + var drawerOpen = 'open'; + if (drawerOpen == 'open') { + $scope.drawerOpen = true; + $scope.arrowShow = true; + } else { + $scope.arrowShow = false; + } + $scope.arrowShow = true; + $scope.drawerOpen = false; + $scope.toggleDrawer = function() { + $scope.drawerOpen = !($scope.drawerOpen); + if ($scope.drawerOpen) { + $scope.arrowShow = true; + if (document.getElementById('mContent')!=null) + document.getElementById('mContent').style.marginLeft = "0px"; + } else { + $scope.arrowShow = false; + if (document.getElementById('mContent')!=null) + document.getElementById('mContent').style.marginLeft = "-150px"; + } + }; + //var drawerOpen = getCookie('drawerOpen'); + if (drawerOpen == 'open') { + $scope.drawerOpen = true; + $scope.arrowShow = true; + } else { + $scope.arrowShow = false; + } + $timeout(function() { + detectScrollEvent(); + }, 800); + + }); + + app.filter("ellipsis", function(){ + return function(text, length){ + if (text) { + var ellipsis = text.length > length ? "..." : ""; + return text.slice(0, length) + ellipsis; + }; + return text; + } + }); +</script>
\ No newline at end of file diff --git a/vid-app-common/src/test/resources/WEB-INF/fusion/jsp/ebz/ebz_header.jsp b/vid-app-common/src/test/resources/WEB-INF/fusion/jsp/ebz/ebz_header.jsp new file mode 100644 index 000000000..4a5cce4bc --- /dev/null +++ b/vid-app-common/src/test/resources/WEB-INF/fusion/jsp/ebz/ebz_header.jsp @@ -0,0 +1,833 @@ +<%-- + ================================================================================ + eCOMP Portal SDK + ================================================================================ + 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. + ================================================================================ + --%> +<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core"%> +<%@ taglib prefix="fn" uri="http://java.sun.com/jsp/jstl/functions"%> +<%@ page isELIgnored="false"%> +<%@ page import="org.openecomp.portalsdk.core.util.SystemProperties"%> +<%@ page import="org.openecomp.portalsdk.core.onboarding.util.PortalApiProperties"%> +<%@ page import="org.openecomp.portalsdk.core.onboarding.util.PortalApiConstants"%> +<%@ page import="org.openecomp.portalsdk.core.domain.MenuData"%> +<link rel="stylesheet" type="text/css" href="app/fusion/external/ebz/ebz_header/header.css"> +<link rel="stylesheet" type="text/css" href="app/fusion/external/ebz/ebz_header/portal_ebz_header.css"> +<link rel="stylesheet" type="text/css" href="app/fusion/external/ebz/sandbox/styles/style.css" > + + +<script src= "app/fusion/external/ebz/angular_js/angular.js"></script> +<script src= "app/fusion/external/ebz/angular_js/angular-route.min.js"></script> +<script src= "app/fusion/external/ebz/angular_js/angular-sanitize.js"></script> +<script src= "app/fusion/external/ebz/angular_js/angular-cookies.js"></script> +<script src= "app/fusion/external/ebz/angular_js/app.js"></script> +<script src= "app/fusion/external/ebz/angular_js/gestures.js"></script> +<script src="static/js/jquery-1.10.2.js"></script> +<script src="app/fusion/scripts/modalService.js"></script> +<script src="static/js/jquery.mask.min.js" type="text/javascript"></script> +<script src="static/js/jquery-ui.js" type="text/javascript"></script> +<script src="app/fusion/external/ebz/sandbox/att-abs-tpls.js" type="text/javascript"></script> +<script src="static/fusion/js/att_angular_gridster/ui-gridster-tpls.js"></script> +<script src="static/fusion/js/att_angular_gridster/angular-gridster.js"></script> +<script src= "app/fusion/external/ebz/angular_js/checklist-model.js"></script> +<script type="text/javascript" src="//cdnjs.cloudflare.com/ajax/libs/lodash.js/0.10.0/lodash.min.js"></script> +<script src="app/fusion/external/angular-ui/ui-bootstrap-tpls-1.1.2.min.js"></script> +<script src="app/fusion/scripts/services/userInfoService.js"></script> +<script src="app/fusion/scripts/services/leftMenuService.js"></script> + + +<jsp:include page="/WEB-INF/fusion/jsp/ebz/loginSnippet.html" ></jsp:include> + +<c:set var="UserName" value="<%= session.getAttribute(\"fullName\")%>" /> +<c:set var="UserFirstName" value="<%= session.getAttribute(\"first_name\")%>" /> + +<% + String contactUsLink = SystemProperties.getProperty(SystemProperties.CONTACT_US_LINK); + String redirectUrl = PortalApiProperties.getProperty(PortalApiConstants.ECOMP_REDIRECT_URL); + String portalUrl = redirectUrl.substring(0, redirectUrl.lastIndexOf('/')) + "/process_csp"; + String getAccessLink = redirectUrl.substring(0, redirectUrl.lastIndexOf('/')) + "/get_access"; +%> +<c:set var="returnPortalUrl" value="<%=portalUrl%>" /> +<c:set var="contactUsLink" value="<%=contactUsLink%>" /> +<c:set var="getAccessLink" value="<%=getAccessLink%>" /> +<style> +.att-drawer{ + z-index:997 !important; +} + +.secondaryMenuContainer{ + z-index:1000; +} +.megamenu-tabs .megamenu__item { + padding: 0 0; +} +.megamenu-tabs .megamenu__item span { + font-size: 18px; +} + +.submenu-tabs { + line-height:50px; +} +.submenu-tabs .sub__menu{ + top:54px; +} + +.top-megamenu .megamenu-tabs ul{ + width:98%; + list-style: none; +} + +</style> +<%@include file="/WEB-INF/fusion/jsp/ebz/loginSnippet.html" %> + +<div style="position: relative; z-index: 999;"> + <div ng-controller="headerController"> + + <div class="headerContainer" id="headerContainer" ng-cloak ng-show="{{showHeader}}"> + <div id="megaMenuContainer" class="megaMenuContainer" style="margin-top: 0; overflow: visible;"> + <div> + <!--for mega Menu--> + <!-- Mega Menu parent-tab directive with three models menu-items, active-sub-menu, active-menu --> + <div id="topMenu" class="top-megamenu" ng-mouseleave="activeClickSubMenu.x.active=false; activeClickMenu.x.active=false"> + <div style="float:left;width:100%;"parent-tab menu-items="megaMenuDataObject" active-sub-menu='activeClickSubMenu.x' active-menu='activeClickMenu.x'> + <div parentmenu-tabs mega-menu="true" menu-items="megaMenuDataObject" style="height:55px;"> + <div style="float:left"> + <li class="megamenu__item" style="line-height:55px;" onclick="returnToPortal()"> + <img src="app/fusion/external/ebz/images/att_logo.png" class="ATTLogo" ></span> +<!-- <a id='returnPortal' class="primaryMenuOptionLink" style="font-weight: 400 !important; font-family: clearview_att_bold !important; font-size: 18px;">ECOMP</a> + --> <strong style="font-weight: 400 !important; font-family: clearview_att_bold !important; font-size: 18px;" id='returnPortal' >ECOMP Portal</strong> + </li> + <div menu-tabs mega-menu="true" tab-name="item.text" menu-item="item" active-menu="activeClickMenu.x" + ng-repeat="item in megaMenuDataObject" style="font-size: 18px;" ng-mousedown="loadFavorites()" > + <div parentmenu-tabs sub-menu="true" ng-show="activeClickMenu.x.active && item.active" menu-items="activeClickMenu.x.children"> + <!-- Second level menu --> + <div> + <div menu-tabs sub-menu="true" tab-name="subItem.text" + tab-url="subItem.url" menu-item="subItem" + ng-repeat="subItem in activeClickMenu.x.children | orderBy : 'column'" active-menu="activeClickSubMenu.x" + sub-item-active="{{subItem.active}}" style="float:left;" aria-label="{{subItem.text}}" + ng-mouseenter="submenuLevelAction(subItem.text,subItem.column)" + ng-mouseleave="submenuLevelAction(subItem.text,subItem.column)" + ng-click="submenuLevelAction(subItem.text,subItem.column)" > + <i ng-if="subItem.text=='Favorites'" id="favorite-star" + class="icon-star favorites-icon-active"> + </i> + </div> + + <div class="sub__menu" ng-mouseleave="activeClickSubMenu.x.active=false" > + <ul ng-show="activeClickSubMenu.x.active" role="menubar" class="columns"> + <!-- Third level menu --> + <div menu-tabs menu-item="subItem" + class="columns-div" + ng-repeat="subItem in activeClickSubMenu.x.children | orderBy : 'column'" + ng-show="activeClickSubMenu.x.active"> + + <i id="favorite-selector-third-level" + ng-show="isUrlFavorite(subItem.menuId)==false" + class="icon-star favorites-icon-inactive" + ng-if="subItem.url.length > 1"> + </i> + <i id="favorite-selector-third-level" + ng-show="isUrlFavorite(subItem.menuId)" + class="icon-star favorites-icon-active" + ng-if="subItem.url.length > 1"> + </i> + <span class="title" aria-label="{{subItem.text}}" + ng-click="goToUrl(subItem)">{{subItem.text}}</span> + <!-- Fourth level menus --> + <div att-links-list=""> + <i id="favorite-selector-fourth-level" + class="icon-star favorites-icon-inactive" + ng-show="isUrlFavorite(tabValue.menuId)==false" + ng-if="tabValue.url.length > 1"> + + </i> + <i id="favorite-selector-fourth-level" + class="icon-star favorites-icon-active" + ng-show="isUrlFavorite(tabValue.menuId)" + ng-if="tabValue.url.length > 1"> + + </i> + <span role="menuitem" att-links-list-item="" + ng-repeat="tabValue in subItem.children" + ng-click="goToUrl(tabValue)" + att-accessibility-click="13,32" + ng-class="{'disabled': tabValue.disabled}">{{tabValue.text}}</span> + </div> + <hr ng-show="!$last"/> + + </div> + </ul> + <!-- Favorites level menu --> + <div class="favorites-window" ng-show='favoritesWindow' ng-mouseleave="hideFavoritesWindow()"> + <div id="favorites-menu-items" ng-show="showFavorites"> + <div ng-repeat="subItem in favoritesMenuItems" att-links-list="" style='display: inline'> + <i id="favorite-selector-favorites-list" class="icon-star favorites-icon-active"> + </i> + <a id="favorites-list" aria-label="{{subItem.text}}" + ng-click="goToUrl(subItem)" + style="margin-left: 3px; margin-right: 20px; text-decoration: none; color: #666666;"> + {{subItem.text}} + </a> + </div> + <div> + <br> + <p style='font-weight: 400; font-family: clearview_att_bold !important; + font-size: 18px; text-align: center; background-color: lightgray; + width: 400px; margin-left: 25%; margin-right: 25%;'> + Manage favorites on ECOMP Portal. + </p> + </div> + </div> + <!-- Favorites when empty --> + <div id="favorites-empty" ng-show='favoritesWindow' ng-show="emptyFavorites"> + <div id="favorites-empty" ng-show="emptyFavorites" class="favorites-window-empty"> + <div> + <img src="app/fusion/external/ebz/images/no_favorites_star.png"> + <p class='favoritesLargeText'>No Favorites</p> + <p class='favoritesNormalText'>Manage favorites on ECOMP Portal.</p> + </div> + </div> + </div> + </div> + + </div> + </div> + </div> + </div > + <li class="megamenu__item" style="line-height:55px;" ng-if="loadMenufail"> + <strong style="font-weight: 400 !important; font-family: clearview_att_bold !important; font-size: 18px;" >Unable to load menus</strong> + </li> +<!-- <li class="megamenu__item" style="width: 20%;"> </li> + --> </div> + <!-- Login Snippet--> + <div style="float:right"> + <li id="bcLoginSnippet" class="megamenu__item" style="width: 140px;" > + <div popover="loginSnippet.html" aria-label="Login Snippet" referby="loginSnippet" att-accessibility-click="13,32" popover-style="\" popover-placement="below" style="width: 200px;"> + <div class="icon-user-small login-snippet-icon"></div> + <div class="login-snippet-text" style="display: inline-block; font-size:12px; margin-left:5px;overflow: hidden; max-height: 31px; max-width:120px; padding-top: 0px; margin-top: 0px; white-space: nowrap;" ng-bind="userProfile.firstName"></div> + </div> + </li> + <li class="megamenu__item" style="width:120px;"> </li> + </div> + + </div> + </div> + <div style="clear: both"></div> + </div> + </div> + </div> + </div> + <div class="license-notification" id="license-notification"> + <a href="javascript:void(0)" style="background-color:#bbb;" class="button button--small" tooltip="Please contact ECOMP Portal team to get the license" tooltip-placement="below" tooltip-style="light" tooltip-popup-delay="500" > + <span style="">{{app_name_full}}</span> + </a> + </div> + <div style="position: relative; color: black; top: 70px;"> + <div ng-cloak> + <span ng-style="adjustHLeftMenu('burgerIcon')" style="z-index:998; position:fixed; left:0%; font-size:35px; margin-left:10px;text-decoration:none;"> + <a ng-click="toggleDrawer();isOpen = !isOpen" href="javascript:void(0);" class="arrow-icon-left" > + <span class="icon-hamburger"></span></a> + <span ng-init="isOpen = true" ng-show="isOpen" style="font-size:16px; position:relative; top:-8px; left:-15px;">    {{app_name}}</span> + </span> + <div att-drawer drawer-slide="left" drawer-custom-top="{{drawer_custom_top}}px" drawer-size="200px" drawer-open="drawerOpen" drawer-custom-height="100%" > + <div ng-style="adjustHLeftMenu('leftMenu')"> + <div class="attDrawer" style="margin-top:{{drawer_margin_top}}px;"> + <div style="margin-left:10px; margin-right:10px;"> + <accordion close-others="true" css="att-accordion--no-box"> + <accordion-group ng-repeat="parent in menuItems" heading="{{parent.parentLabel}}" child="{{parent.parentAction}}" parent-link="{{parent.parentAction}}" image-source="{{parent.parentImageSrc}}" child-length="{{parent.childItemList.length}}" is-open="parent.open"> + <div ng-repeat="subMenu in parent.childItemList" style="font-size:12px; margin-left:10px;"> + <a href="{{subMenu.action}}" style="font-size:12px; color:#666666;" >{{subMenu.label}}</a> + </div> + </accordion-group> + </accordion> + </div> + </div> + </div> + </div> + </div> + </div> + </div> +</div> +<script> + function returnToPortal(){ + window.location.href = "<c:out value='${returnPortalUrl}'/>"; + } + detectScrollEvent = function() { + var footerOff = $('#footerContainer').offset().top; + var headOff = $('#headerContainer').offset().top; + var winHeight = $(window).height(); + if ((footerOff - headOff) <= winHeight) { + $('.att-drawer').css({ + "height" : footerOff - headOff - 55 + }); + } else { + $('.att-drawer').css({ + "height" : "94vh" + }); + } + } + $(window).scroll(function() { + if ($('.att-drawer').is(':visible')) { + detectScrollEvent(); + } + }); + app.controller("headerController", function($scope, $timeout, $log, $http, UserInfoService, $window, $cookies,LeftMenuService) { + // $log.debug('HeaderController started'); + $scope.jsonMenuData = []; + $scope.loadMenufail=false; + $scope.app_name = ""; + $scope.app_name_full = ""; + $scope.megaMenuDataObject =[]; + $scope.activeClickSubMenu = { + x: '' + }; + $scope.activeClickMenu = { + x: '' + }; + $scope.favoritesMenuItems = []; + $scope.favoriteItemsCount = 0; + $scope.showFavorites = false; + $scope.emptyFavorites = false; + $scope.favoritesWindow = false; + $scope.userProfile={ + firstName:'', + lastName:'', + fullName:'', + email:'' + } + /*Put user info into fields*/ + $scope.inputUserInfo = function(userInfo){ + if (typeof(userInfo) != "undefined" && userInfo!=null && userInfo!=''){ + if (typeof(userInfo.USER_FIRST_NAME) != "undefined" && userInfo.USER_FIRST_NAME!=null && userInfo.USER_FIRST_NAME!='') + $scope.userProfile.firstName = userInfo.USER_FIRST_NAME; + if (typeof(userInfo.USER_LAST_NAME) != "undefined" && userInfo.USER_LAST_NAME!=null && userInfo.USER_LAST_NAME!='') + $scope.userProfile.lastName = userInfo.USER_LAST_NAME; + if (typeof(userInfo.USER_EMAIL) != "undefined" && userInfo.USER_EMAIL!=null && userInfo.USER_EMAIL!='') + $scope.userProfile.email = userInfo.USER_EMAIL; + } + } + /*getting user info from session*/ + $scope.getUserNameFromSession = function(){ + UserInfoService.getFunctionalMenuStaticDetailSession() + .then(function (res) { + $scope.userProfile.firstName = res.firstName; + $scope.redirectUrl = res.portalUrl; + }); + } + $scope.getTopMenuStaticInfo=function() { + var promise = UserInfoService.getFunctionalMenuStaticDetailShareContext(); + promise.then( + function(res) { + if(res==null || res==''){ + $log.info('failed getting static User information'); + $scope.getUserNameFromSession(); + }else{ + $log.info('Received static User information'); + var resData = res; + $scope.inputUserInfo(resData); + $scope.userProfile.fullName = $scope.userProfile.firstName+ ' '+ $scope.userProfile.lastName; + } + }, + function(err) { + $log.info('failed getting static User information'); + } + ); + } + + var unflatten = function( array, parent, tree ){ + tree = typeof tree !== 'undefined' ? tree : []; + parent = typeof parent !== 'undefined' ? parent : { menuId: null }; + var children = _.filter( array, function(child){ return child.parentMenuId == parent.menuId; }); + + if( !_.isEmpty( children ) ){ + if( parent.menuId === null ){ + tree = children; + }else{ + parent['children'] = children + } + _.each( children, function( child ){ unflatten( array, child ) } ); + } + + return tree; + } + + var menuStructureConvert = function(menuItems) { + var megaMenuDataObjectTemp = [ + { + text: "ECOMP", + children:menuItems + }, + { + text: "Help", + children: [{ + text:"Contact Us", + url:"<c:out value='${contactUsLink}'/>" + }, + { + text:"Get Access", + url:"<c:out value='${getAccessLink}'/>" + }] + } + ]; + return megaMenuDataObjectTemp; + }; + + + /*Left Menu*/ + LeftMenuService.getAppName().then(function(response){ + var j = response; + try{ + if(j && j !== "null" && j!== "undefined"){ + // console.log("app name is " + $scope.app_name); + $scope.app_name_full = j.data; + var processed_app_name = j.data; + var indexOfLic = processed_app_name.indexOf('['); + if(indexOfLic>-1) { + if (jQuery('.license-notification')!=null) + jQuery('.license-notification').css("display", "none"); + } + var n = processed_app_name.length; + if (n > 15) { + n = 15; + } + if(n > indexOfLic && indexOfLic > 0) { + n = indexOfLic; + } + $scope.app_name_full = $scope.app_name_full.substr(0, n); + $scope.app_name = processed_app_name.substr(0, n); + + }else{ + throw "Get app_name response is not an object/is empty"; + } + }catch (e) { + console.log("error happened while trying to get app name "+e); + return; + } + },function(error){ + console.log('getAppName failed', error); + }); + + + $scope.getTopMenuStaticInfo(); + $scope.getMenu=function() { + + $http({ + method: "GET", + url: 'get_functional_menu', +// TIMEOUT USED FOR LOCAL TESTING ONLY +// timeout: 100 + }).success(function (response) { + if(response == '101: Timeout') { + $log.error('Timeout attempting to get_functional_menu'); + // TIMEOUT USED FOR LOCAL TESTING ONLY +// $scope.createErrorMenu(); + $scope.megaMenuDataObject = menuStructureConvert(''); + }else { + $log.debug('get_functional_menu success: ' + response); + if(typeof response != 'undefined' && response.length!=0 && typeof response[0] != 'undefined' && typeof response[0].error!="undefined"){ +// createErrorMenu() USED FOR LOCAL TESTING ONLY +// $scope.createErrorMenu(); + $scope.megaMenuDataObject = menuStructureConvert(''); + // $scope.loadMenufail=true; + }else{ + $scope.jsonMenuData = unflatten( response ); + $scope.megaMenuDataObject = menuStructureConvert($scope.jsonMenuData); + } + } + }).error(function (response){ +// createErrorMenu() USED FOR LOCAL TESTING ONLY +// $scope.createErrorMenu(); + + //$scope.loadMenufail=true; + $scope.megaMenuDataObject = menuStructureConvert(''); + $log.debug('REST API failed get_functional_menu...'+ response); + }); + } + $scope.adjustHLeftMenu = function (type){ + $scope.showHeader = ($cookies.show_app_header == undefined ? true : $cookies.show_app_header); + + if($scope.showHeader == true) { + $scope.drawer_margin_top = 60; + $scope.drawer_custom_top = 54; + $scope.toggle_drawer_top = 55; + } + else { + + $scope.drawer_margin_top = 50; + $scope.drawer_custom_top = 0; + $scope.toggle_drawer_top = 10; + } + if(type=='burgerIcon'){ + return { "top": $scope.toggle_drawer_top+"px"}; + }else if(type=='leftMenu'){ + return { "margin-top": $scope.drawer_margin_top+"px"}; + }else + return; + } + $scope.adjustHeader=function() { + $scope.showHeader = ($cookies.show_app_header == undefined ? true : $cookies.show_app_header); + + if($scope.showHeader == true) { + $scope.drawer_margin_top = 50; + $scope.drawer_custom_top = 54; + $scope.toggle_drawer_top = 55; + } + else { + + $scope.drawer_margin_top = 40; + $scope.drawer_custom_top = 0; + $scope.toggle_drawer_top = 10; + } + + + } + + + //$scope.getMenu(); + $scope.adjustHeader(); + + + /* **************************************************************************/ + /* Logic for the favorite menus is here */ + + $scope.loadFavorites = function () { + $log.debug('loadFavorites has happened.'); + if ($scope.favoritesMenuItems == '') { + $scope.generateFavoriteItems(); + $log.debug('loadFavorites is calling generateFavoriteItems()'); + } else { + $log.debug('loadFavorites is NOT calling generateFavoriteItems()'); + } + } + + $scope.goToUrl = function (item) { + $log.info("goToUrl called") + $log.info(item); + + var url = item.url; + var restrictedApp = item.restrictedApp; + $log.debug('Restricted app status is: ' + restrictedApp); + if (!url) { + $log.info('No url found for this application, doing nothing..'); + return; + } + if (restrictedApp) { + $window.open(url, '_blank'); + } else { + $window.open(url, '_self'); + } + + } + + $scope.submenuLevelAction = function(index, column) { + if ($scope.favoritesMenuItems == '') { + $scope.generateFavoriteItems(); + $log.debug('submenuLevelAction is calling generateFavoriteItems()'); + } + $log.debug('item hovered/clicked: ' + index + '; column = ' + column); + if (column == 2) { // 2 is Design + $scope.favoritesWindow = false; + $scope.showFavorites = false; + $scope.emptyFavorites = false; + } + if (index=='Favorites' && $scope.favoriteItemsCount != 0) { + $log.debug('Showing Favorites window'); + $scope.favoritesWindow = true; + $scope.showFavorites = true; + $scope.emptyFavorites = false; + } + if (index=='Favorites' && $scope.favoriteItemsCount == 0) { + $log.debug('Hiding Favorites window in favor of No Favorites Window'); + $scope.favoritesWindow = true; + $scope.showFavorites = false; + $scope.emptyFavorites = true; + } + if (column > 2) { + $scope.favoritesWindow = false; + $scope.showFavorites = false; + $scope.emptyFavorites = false; + } + }; + + $scope.hideFavoritesWindow = function() { + $log.debug('$scope.hideFavoritesWindow has been called'); + $scope.showFavorites = false; + $scope.emptyFavorites = false; + } + + $scope.isUrlFavorite = function (menuId) { +// $log.debug('array objects in menu favorites = ' + $scope.favoriteItemsCount + '; menuId=' + menuId); + var jsonMenu = JSON.stringify($scope.favoritesMenuItems); + var isMenuFavorite = jsonMenu.indexOf('menuId\":' + menuId); + if (isMenuFavorite==-1) { + return false; + } else { + return true; + } + + } + + $scope.generateFavoriteItems = function() { + $http({ + method: "GET", + url: 'get_favorites', + // TIMEOUT USED FOR LOCAL TESTING ONLY +// timeout: 100 + }).success(function (response) { + if (response == '101: Timeout') { + $log.error('Timeout attempting to get_favorites_menu'); + } else { + if(typeof response != 'undefined' && response.length!=0 && typeof response[0] != 'undefined' && typeof response[0].error!="undefined"){ + $log.error('REST API failed get_favorites' + response); + }else{ + $log.debug('get_favorites = ' + JSON.stringify(response)); + $scope.favoritesMenuItems = response; + $scope.favoriteItemsCount = Object.keys($scope.favoritesMenuItems).length; + $log.info('number of favorite menus: ' + $scope.favoriteItemsCount); + } + } + }).error(function (response){ + $log.error('REST API failed get_favorites' + response); + //createFavoriteErrorMenu() USED FOR LOCAL TESTING ONLY +// $scope.createFavoriteErrorMenu(); + }); + } + + $scope.createFavoriteErrorMenu=function() { + $scope.favoritesMenuItems = [ +// { +// "menuId": "93", +// "text": "JSONLint", +// "url": "http://http://jsonlint.com" +// }, +// { +// "menuId": "22", +// "text": "ECOMP Wasteland", +// "url": "https://ecomp.homer.att.com/ecompportal/applicationsHome" +// }, +// { +// "menuId": "94", +// "text": "HROneStop", +// "url": "http://ebiz.sbc.com/hronestop" +// }, +// { +// "menuId": "91", +// "text": "Andy and his Astrophotgraphy", +// "url": "https://ecomp.homer.att.com/ecompportal/applicationsHome" +// } + ]; + $scope.favoriteItemsCount = Object.keys($scope.favoritesMenuItems).length; + $log.info('number of favorite menus: ' + $scope.favoriteItemsCount); + } + + /* end of Favorite Menu code */ + /* **************************************************************************/ + + + /* **************************************************************************/ + // THIS IS USED FOR LOCAL TESTING ONLY + /* **************************************************************************/ + + $scope.createErrorMenu=function() { + $scope.jsonMenuData = [ + { + "menuId": 1, + "column": 2, + "text": "Design", + "parentMenuId": null, + "url": "" + }, + { + "menuId": 2, + "column": 3, + "text": "Infrastructure Ordering", + "parentMenuId": null, + "url": "" + }, + { + "menuId": 3, + "column": 4, + "text": "Service Creation", + "parentMenuId": null, + "url": "" + }, + { + "menuId": 4, + "column": 5, + "text": "Service Mgmt", + "parentMenuId": null, + "url": "" + }, + { + "menuId": 90, + "column": 1, + "text": "Google", + "parentMenuId": 1, + "url": "http://google.com" + }, + { + "menuId": 91, + "column": 1, + "text": "Mike Little's Coffee Cup", + "parentMenuId": 2, + "url": "http://coffee.com" + }, + { + "menuId": 92, + "column": 2, + "text": "Andy and his Astrophotgraphy", + "parentMenuId": 3, + "url": "http://nightskypix.com" + }, + { + "menuId": 93, + "column": 1, + "text": "JSONLint", + "parentMenuId": 4, + "url": "http://http://jsonlint.com" + }, + { + "menuId": 94, + "column": 2, + "text": "HROneStop", + "parentMenuId": 4, + "url": "http://ebiz.sbc.com/hronestop" + }, + { + "menuId": 95, + "column": 2, + "text": "4th Level App4a R16", + "parentMenuId": 4, + "url": "http://www.e-access.att.com/ecomp_portal_ist/ecompportal/widgets" + }, + { + "menuId": 96, + "column": 3, + "text": "3rd Level App1c R200", + "parentMenuId": 4, + "url": "http://app1c.com" + }, + { + "menuId": 97, + "column": 1, + "text": "3rd Level App4b R16", + "parentMenuId": 5, + "url": "http://app4b.com" + }, + { + "menuId": 98, + "column": 2, + "text": "3rd Level App2b R16", + "parentMenuId": 5, + "url": "http://app2b.com" + }, + { + "menuId": 99, + "column": 1, + "text": "Favorites", + "parentMenuId": null, + "url": "" + } + ]; + $scope.jsonMenuData = unflatten( $scope.jsonMenuData ); + $scope.megaMenuDataObject = menuStructureConvert($scope.jsonMenuData); +// $log.debug(JSON.stringify($scope.jsonMenuData)); + } + var childItemList=""; + var parentList = ""; + try{ + childItemList = ${menu.childItemList}; + parentList = ${menu.parentList}; + }catch(err){ + console.log("ebz_header: failed to get child/parent lists", err); + } + + var pageUrl = window.location.href.split('/')[window.location.href.split('/').length-1]; + + $scope.menuItems = []; + for (var i = 0; i < parentList.length; i++) { + $scope.openCurrentMenu = false; + if(pageUrl==parentList[i].action) + $scope.openCurrentMenu = true; + $scope.childItemList = childItemList[i]; + for(chIndex in $scope.childItemList){ + if($scope.childItemList.length>0) + if($scope.childItemList[chIndex].action!=null){ + if($scope.childItemList[chIndex].action==pageUrl) + $scope.openCurrentMenu = true; + } + } + $scope.item = { + parentLabel : parentList[i].label, + parentAction : parentList[i].action, + parentImageSrc : parentList[i].imageSrc, + open:$scope.openCurrentMenu, + childItemList : $scope.childItemList + } + $scope.menuItems.push($scope.item); + } + $scope.arrowShow = true; + $scope.drawerOpen = false; + $scope.subMenuContent = false; + $scope.toggleSubMenu = function() { + $scope.subMenuContent = !$scope.subMenuContent; + }; + + var drawerOpen = 'open'; + if (drawerOpen == 'open') { + $scope.drawerOpen = true; + $scope.arrowShow = true; + } else { + $scope.arrowShow = false; + } + $scope.arrowShow = true; + $scope.drawerOpen = false; + $scope.toggleDrawer = function() { + $scope.drawerOpen = !($scope.drawerOpen); + if ($scope.drawerOpen) { + $scope.arrowShow = true; + if (document.getElementById('mContent')!=null) + document.getElementById('mContent').style.marginLeft = "0px"; + } else { + $scope.arrowShow = false; + if (document.getElementById('mContent')!=null) + document.getElementById('mContent').style.marginLeft = "-150px"; + } + }; + //var drawerOpen = getCookie('drawerOpen'); + if (drawerOpen == 'open') { + $scope.drawerOpen = true; + $scope.arrowShow = true; + } else { + $scope.arrowShow = false; + } + $timeout(function() { + detectScrollEvent(); + }, 800); + + }); + + app.filter("ellipsis", function(){ + return function(text, length){ + if (text) { + var ellipsis = text.length > length ? "..." : ""; + return text.slice(0, length) + ellipsis; + }; + return text; + } + }); +</script>
\ No newline at end of file diff --git a/vid-app-common/src/test/resources/WEB-INF/fusion/orm/RNoteBookIntegration.hbm.xml b/vid-app-common/src/test/resources/WEB-INF/fusion/orm/RNoteBookIntegration.hbm.xml new file mode 100644 index 000000000..6638b4bc7 --- /dev/null +++ b/vid-app-common/src/test/resources/WEB-INF/fusion/orm/RNoteBookIntegration.hbm.xml @@ -0,0 +1,44 @@ +<?xml version="1.0"?> +<!-- + ================================================================================ + eCOMP Portal SDK + ================================================================================ + 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. + ================================================================================ + --> + +<!DOCTYPE hibernate-mapping PUBLIC + "-//Hibernate/Hibernate Mapping DTD 3.0//EN" + "http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd"> + +<hibernate-mapping package="org.openecomp.portalsdk.rnotebookintegration.domain"> + + + <!-- RNotebookIntegration mapping details --> + <class name="RNoteBookCredentials" table="rcloudinvocation"> + <id name="token" column="ID"> + + </id> + <property name="createdDate" column="created"/> + <property name="userString" column="userInfo"/> + <property name="notebookID" column="notebookID"/> + <property name="parametersString" column="parameters"/> + <property name="tokenReadDate" column="tokenreaddate"/> + + </class> + + + +</hibernate-mapping> |