summaryrefslogtreecommitdiffstats
path: root/ecomp-portal-BE/war/WEB-INF/fusion
diff options
context:
space:
mode:
authortalasila <talasila@research.att.com>2017-02-07 15:03:57 -0500
committertalasila <talasila@research.att.com>2017-02-07 15:05:15 -0500
commit4ad39a5c96dd99acf819ce189b13fec946d7506b (patch)
treea1449286441947cc3d07a45227fa0d6f978e1a7d /ecomp-portal-BE/war/WEB-INF/fusion
parent5500448cbd1f374d0ac743ee2fd636fe2d3c0027 (diff)
Initial OpenECOMP Portal commit
Change-Id: I804b80e0830c092e307da1599bd9fbb5c3e2da77 Signed-off-by: talasila <talasila@research.att.com>
Diffstat (limited to 'ecomp-portal-BE/war/WEB-INF/fusion')
-rw-r--r--ecomp-portal-BE/war/WEB-INF/fusion/.DS_Storebin0 -> 6148 bytes
-rw-r--r--ecomp-portal-BE/war/WEB-INF/fusion/conf/fusion.properties82
-rw-r--r--ecomp-portal-BE/war/WEB-INF/fusion/defs/definitions.xml120
-rw-r--r--ecomp-portal-BE/war/WEB-INF/fusion/jsp/.gitignore0
-rw-r--r--ecomp-portal-BE/war/WEB-INF/fusion/jsp/collaborateList.jsp101
-rw-r--r--ecomp-portal-BE/war/WEB-INF/fusion/jsp/ebz/ebz_footer.jsp63
-rw-r--r--ecomp-portal-BE/war/WEB-INF/fusion/jsp/ebz/ebz_header.jsp303
-rw-r--r--ecomp-portal-BE/war/WEB-INF/fusion/jsp/ebz_template.jsp44
-rw-r--r--ecomp-portal-BE/war/WEB-INF/fusion/jsp/ebz_template_noheader_nofooter.jsp35
-rw-r--r--ecomp-portal-BE/war/WEB-INF/fusion/jsp/include.jsp30
-rw-r--r--ecomp-portal-BE/war/WEB-INF/fusion/jsp/jcs_admin.jsp149
-rw-r--r--ecomp-portal-BE/war/WEB-INF/fusion/jsp/meta.jsp35
-rw-r--r--ecomp-portal-BE/war/WEB-INF/fusion/jsp/popup_modal.html311
-rw-r--r--ecomp-portal-BE/war/WEB-INF/fusion/jsp/popup_modal_role.html257
-rw-r--r--ecomp-portal-BE/war/WEB-INF/fusion/jsp/popup_modal_rolefunction.html87
-rw-r--r--ecomp-portal-BE/war/WEB-INF/fusion/jsp/post_search.jsp370
-rw-r--r--ecomp-portal-BE/war/WEB-INF/fusion/jsp/profile.jsp442
-rw-r--r--ecomp-portal-BE/war/WEB-INF/fusion/jsp/profile_search.jsp100
-rw-r--r--ecomp-portal-BE/war/WEB-INF/fusion/jsp/role.jsp298
-rw-r--r--ecomp-portal-BE/war/WEB-INF/fusion/jsp/role_function_list.jsp225
-rw-r--r--ecomp-portal-BE/war/WEB-INF/fusion/jsp/role_list.jsp147
-rw-r--r--ecomp-portal-BE/war/WEB-INF/fusion/jsp/usage_list.jsp99
-rw-r--r--ecomp-portal-BE/war/WEB-INF/fusion/jsp/webrtc/collaboration.jsp529
-rw-r--r--ecomp-portal-BE/war/WEB-INF/fusion/orm/EP.hbm.xml558
-rw-r--r--ecomp-portal-BE/war/WEB-INF/fusion/orm/Fusion.hbm.xml372
-rw-r--r--ecomp-portal-BE/war/WEB-INF/fusion/orm/Workflow.hbm.xml48
-rw-r--r--ecomp-portal-BE/war/WEB-INF/fusion/raptor/report_search.jsp20
27 files changed, 4825 insertions, 0 deletions
diff --git a/ecomp-portal-BE/war/WEB-INF/fusion/.DS_Store b/ecomp-portal-BE/war/WEB-INF/fusion/.DS_Store
new file mode 100644
index 00000000..7fb274c0
--- /dev/null
+++ b/ecomp-portal-BE/war/WEB-INF/fusion/.DS_Store
Binary files differ
diff --git a/ecomp-portal-BE/war/WEB-INF/fusion/conf/fusion.properties b/ecomp-portal-BE/war/WEB-INF/fusion/conf/fusion.properties
new file mode 100644
index 00000000..242a21d5
--- /dev/null
+++ b/ecomp-portal-BE/war/WEB-INF/fusion/conf/fusion.properties
@@ -0,0 +1,82 @@
+###
+# ================================================================================
+# 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.
+# ================================================================================
+###
+# domain settings
+#domain_class_location =
+
+# validator settings
+#default_error_message = Default error message
+
+login_url_no_ret_val = http://localhost:9000/ecompportal/login.htm
+
+user_attribute_name = user
+
+# User Session settings
+#user_attribute_name = user
+roles_attribute_name = roles
+role_functions_attribute_name = role_functions
+#client_device_attribute_name = client_device
+#client_device_emulation = false
+#client_device_type_to_emulate =
+
+# 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/
+
+# ECOMP settings
+ecomp_app_id = 1
+# Role settings
+sys_admin_role_id = 1
+account_admin_role_id = 999
+restricted_app_role_id = 900
+#sys_admin_role_function_delete_from_ui = true
+
+# Profile Search settings
+#profile_search_report_id=181
+#callable_profile_search_report_id=386
+
+
+# Home Page index html
+
+home_page = /index.html
+
+authentication_mechanism = DBAUTH
+
+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.
+
+#
+# Number of seconds to poll health (database operational, etc.)
+#
+health_poll_interval_seconds = 5
+#
+# If a component is down a log entry will be written that triggers an alert. This parameter specifies how often this alert should be triggered
+# if the component remains down. For example a value of 30, would translate to 30 * 60 seconds = 1800 seconds, or every 30 minutes
+#
+health_fail_alert_every_x_intervals = 30
diff --git a/ecomp-portal-BE/war/WEB-INF/fusion/defs/definitions.xml b/ecomp-portal-BE/war/WEB-INF/fusion/defs/definitions.xml
new file mode 100644
index 00000000..f11b39a0
--- /dev/null
+++ b/ecomp-portal-BE/war/WEB-INF/fusion/defs/definitions.xml
@@ -0,0 +1,120 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!--
+ ================================================================================
+ 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.
+ ================================================================================
+ -->
+
+<!DOCTYPE tiles-definitions PUBLIC
+ "-//Apache Software Foundation//DTD Tiles Configuration 3.0//EN"
+ "http://tiles.apache.org/dtds/tiles-config_3_0.dtd">
+<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 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="welcome">
+ <put-attribute name="body" value="/WEB-INF/jsp/welcome.jsp"></put-attribute>
+ <put-attribute name="viewName" value="welcome"></put-attribute>
+ </definition>
+
+ <definition extends="ebz_template" name="openIdLogin">
+ <put-attribute name="body" value="/WEB-INF/jsp/oid-login.jsp"></put-attribute>
+ <put-attribute name="viewName" value="openIdLogin"></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="report_search">
+ <put-attribute name="body" value="/WEB-INF/fusion/raptor/report_search.jsp"></put-attribute>
+ <put-attribute name="viewName" value="report_search"></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="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_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"/>
+
+
+</tiles-definitions>
diff --git a/ecomp-portal-BE/war/WEB-INF/fusion/jsp/.gitignore b/ecomp-portal-BE/war/WEB-INF/fusion/jsp/.gitignore
new file mode 100644
index 00000000..e69de29b
--- /dev/null
+++ b/ecomp-portal-BE/war/WEB-INF/fusion/jsp/.gitignore
diff --git a/ecomp-portal-BE/war/WEB-INF/fusion/jsp/collaborateList.jsp b/ecomp-portal-BE/war/WEB-INF/fusion/jsp/collaborateList.jsp
new file mode 100644
index 00000000..21497518
--- /dev/null
+++ b/ecomp-portal-BE/war/WEB-INF/fusion/jsp/collaborateList.jsp
@@ -0,0 +1,101 @@
+<%--
+ ================================================================================
+ 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.
+ ================================================================================
+ --%>
+<script src= "static/ebz/angular_js/angular.js"></script>
+<script src= "static/ebz/angular_js/angular-sanitize.js"></script>
+
+<script src= "static/ebz/angular_js/app.js"></script>
+<script src= "static/ebz/angular_js/gestures.js"></script>
+
+<script src="static/js/jquery-1.10.2.js"></script>
+<script src="static/js/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="static/ebz/sandbox/att-abs-tpls.js" type="text/javascript"></script>
+<%@ include file="/WEB-INF/fusion/jsp/popup_modal.html" %>
+<div ng-controller="collaborateListController">
+ <div>
+ <h1 class="heading1" style="margin-top:20px;">Collaborate List</h1>
+ <div style="margin-top:30px">
+ <table att-table table-data="tableData" view-per-page="viewPerPage" current-page="currentPage" search-category="searchCategory" search-string="searchString" total-page="totalPage">
+
+ <thead att-table-row type="header">
+ <tr>
+ <th att-table-header key="id">User ID</th>
+ <th att-table-header key="last_name">Last Name</th>
+ <th att-table-header key="first_name">First Name</th>
+ <th att-table-header key="email">Email</th>
+ <th att-table-header key="sbcid">ATTUID</th>
+ <th att-table-header key="active">Online/Offline</th>
+ </tr>
+ </thead>
+ <tbody att-table-row type="body" row-repeat="rowData in tableData">
+ <tr>
+ <td att-table-body >{{rowData.id}}</td>
+ <td att-table-body >{{rowData.lastName}}</td>
+ <td att-table-body >{{rowData.firstName}}</td>
+ <td att-table-body >{{rowData.email}}</td>
+ <td att-table-body >{{rowData.sbcid}}</td>
+ <td att-table-body >
+ <tag-badges ng-hide="rowData.online" style-type="color" class="lred" ng-click="rowData.isActive=true;openCollaboration(rowData.sbcid)">Offline</tag-badges>
+ <tag-badges ng-show="rowData.online" style-type="color" class="lgreen" ng-click="rowData.isActive=false;openCollaboration(rowData.sbcid)">Online</tag-badges>
+ </td>
+ </tr>
+ </tbody>
+ </table>
+ </div>
+ </div>
+ <input ng-model="currentPage"></input>
+</div>
+
+<script>
+app.controller("collaborateListController", function ($scope,$http,modalService, $modal) {
+ // Table Data
+ $scope.tableData=${model.profileList};
+ $scope.viewPerPage = 20;
+ $scope.scrollViewsPerPage = 2;
+ $scope.currentPage = 1;
+ $scope.totalPage;
+ $scope.searchCategory = "";
+ $scope.searchString = "";
+ /* modalService.showSuccess('','Modal Sample') ; */
+ for(x in $scope.tableData){
+ if($scope.tableData[x].active_yn=='Y')
+ $scope.tableData[x].active_yn=true;
+ else
+ $scope.tableData[x].active_yn=false;
+ }
+ $scope.openCollaboration = function(userId){
+ openInNewTab('collaboration?user_id=' + userId);
+ }
+
+ $scope.toggleProfileActive = function(profileId) {
+ if (confirm("You are about to change user's active status. Do you want to continue?")) {
+ $http.get("profile/toggleProfileActive?profile_id="+profileId).success(function(){});
+ }
+ };
+
+});
+
+function openInNewTab(url) {
+ var win = window.open(url, '_blank');
+ win.focus();
+};
+
+</script>
diff --git a/ecomp-portal-BE/war/WEB-INF/fusion/jsp/ebz/ebz_footer.jsp b/ecomp-portal-BE/war/WEB-INF/fusion/jsp/ebz/ebz_footer.jsp
new file mode 100644
index 00000000..ae72af66
--- /dev/null
+++ b/ecomp-portal-BE/war/WEB-INF/fusion/jsp/ebz/ebz_footer.jsp
@@ -0,0 +1,63 @@
+<%--
+ ================================================================================
+ 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.
+ ================================================================================
+ --%>
+
+<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>
+ <%@ taglib prefix="fn" uri="http://java.sun.com/jsp/jstl/functions" %>
+<script src="static/ebz/js/footer.js"></script>
+<script type="text/javascript" src="static/ebz/js/attHeaderSnippet.js"></script>
+<link rel="stylesheet" type="text/css" href="static/ebz/footer_new.css" >
+
+
+
+<div class="footerContainer" id="footerContainer">
+ <div class="footerWrapper" id="footerWrapper">
+
+ <div class="footerItem">
+
+ </div>
+ <div class="feedbackSection">
+ <div class="dividerTop"></div>
+ <div class="feedbackContent">
+ <form id="feedbackForm" name="feedbackForm" action="javascript: void(0)" method="post">
+ <div class="feedbackInfo">Please tell us about your AT&amp;T Business Center experience. Your feedback is appreciated and will help us improve the site.</div>
+ <div class="feedbackTextSection">
+ <textarea id="feedbackText" class="feedbackText" name="feedbackText" maxlength="4000"></textarea>
+ <button type="submit" class="feedbackSubmitButton" id="feedbackSubmitButton" name ="feedbackSubmitButton" >Submit</button>
+ </div>
+ </form>
+ </div>
+ </div>
+ <div class="dividerBottom" id="feedbackResultDivider"></div>
+ <div class="feedbackResultMsg">
+ <div class='readFeedBackMessage' tabindex='-1' style="outline:0px; display:inline-block" aria-live="assertive"></div>
+ <span class="icon-included-checkmark" id="feedbackMsgCheck"></span>
+ <button id="feedbackOkButton" class="feedbackMsgOKButton">OK</button>
+ </div>
+ <div class="dividerBottom"></div>
+ <div class="feedbackButtonDiv">
+ <button type="button" class="feedbackButton" id="feedbackButton" name ="feedbackButton" >Feedback<span class="icon-chevron-down"></span></button>
+ </div>
+
+ <div class="attFooterInfo">
+ <div class="footerLastSection">
+ </div>
+ </div>
+ </div>
+</div>
diff --git a/ecomp-portal-BE/war/WEB-INF/fusion/jsp/ebz/ebz_header.jsp b/ecomp-portal-BE/war/WEB-INF/fusion/jsp/ebz/ebz_header.jsp
new file mode 100644
index 00000000..e4cd224c
--- /dev/null
+++ b/ecomp-portal-BE/war/WEB-INF/fusion/jsp/ebz/ebz_header.jsp
@@ -0,0 +1,303 @@
+<%--
+ ================================================================================
+ 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.
+ ================================================================================
+ --%>
+ <%@ 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" %>
+ <link rel="stylesheet" type="text/css" href="static/ebz/header_new.css">
+ <script src= "static/ebz/js/attHeaderSnippet.js"></script>
+ <script src= "static/ebz/js/attHeader_new.js"></script>
+ <c:set var="menu" value="<%=session.getAttribute(SystemProperties.getProperty(SystemProperties.APPLICATION_MENU_ATTRIBUTE_NAME))%>"/>
+
+ <style>
+ li {
+ list-style: none;
+ }
+
+ #userIcon:hover {
+ color: rgb(191, 231, 239);
+ }
+
+ #headerChatIcon:hover {
+ background: url(static/images/headerChatIcon_hover.png) no-repeat -3px
+ -3px !important;
+ }
+
+ .headerContentContainer .primaryMenuContainer .headerIconContainer .popbox .openpopbox:hover
+ {
+ color: #bfe7fb;
+ margin-top: -2px;
+ text-decoration: none;
+ outline: none
+ }
+ /* .headerContentContainer .primaryMenuContainer .headerIconContainer .popbox .openpopbox:focus{color:#bfe7fb;margin-top:-2px;text-decoration:none;outline:none} */
+ .headerContentContainer .primaryMenuContainer .headerIconContainer .popbox .openpopbox
+ {
+ color: #fff;
+ display: block;
+ min-width: 70px;
+ max-width: 115px;
+ text-decoration: none
+ }
+
+ a {
+ -webkit-transition: all .3s ease-out;
+ -moz-transition: all .3s ease-out;
+ transition: all .3s ease-out
+ }
+
+ a:active,a:hover {
+ outline: 0
+ }
+
+ b,strong {
+ font-weight: 700
+ }
+
+ .thirdMenuContainer {
+ width: 100%;
+ overflow: auto;
+ margin-top: 101px;
+ position: fixed;
+ z-index: 3000;
+ min-height: 140px;
+ max-height: 500px;
+ opacity: 1;
+ background-color: rgb(255, 255, 255);
+ }
+</style>
+ <div style="position:relative; z-index:999;">
+ <div class="headerContainer" id="headerContainer" >
+ <div class="headerContentContainer">
+ <div class="primaryMenuContainer">
+ <div style="background: url(static/ebz/images/att_logo.png) no-repeat scroll -10px -10px transparent; !important;"></div>
+ <div class="attHomeContainer">
+ <div class="businessCenterR">
+ <a id="attBusinessCenter" href="">OpenECOMP Portal</a>
+ </div>
+ </div>
+ <div class="primaryMenuOptionsContainer" >
+
+ <div class="primaryMenuOption">
+ <a class="primaryMenuOptionLink" href="javascript:openSecondLevel('m')">Manage</a>
+ </div>
+ <div class="primaryMenuOption">
+ <a id="supportFirstLevel" class="primaryMenuOptionLink" href="javascript:openSecondLevel('s')">Support</a>
+
+ </div>
+ <div id="indicator" class="selectedOptionIndicator" style="display:none"></div>
+ </div>
+ <div class="headerIconContainer">
+ <%-- <div class="loginName" style="width:107px;">
+ <span class="popbox" >
+ <a style="color:#ffffff;display: block;min-width: 70px;max-width: 115;" class="openpopbox" href="#" >
+ <div id="headerLoginIcon" class="loginIcon"><span id="userIcon" style="font-size:19px;" class="icon-user"></span> </div>
+ <div id="headerNameEllipsis" class="ellipsis-header-name">${ociUserName}</div>
+ </a>
+ <div class="box1" style="line-height: normal; right: 167px; min-height: 200px; height: auto; width: 390px !important; display: none; top: 0px; left: -230.5px;" target="auth">
+ <div class="arrow" style="left: 230px;"></div>
+ <div id="reg-header-snippet">
+ <div class="reg-profilePicture" style="min-height: 215px;" id="reg-profile-links">
+ <div id="reg-profileImage">
+ <div style="clear: both; height: 80px; position: relative; width: 80px;" class="">
+ <img id="reg-userProfilePicture-id" style="height: 80px; width: 80px; float: left;" src="" alt="">
+ <span style=" background-position: -1px -1px; height: 81px;left: 0;position: absolute;top: 0;width: 81px;">&nbsp;</span>
+ </div>
+ </div>
+ <div id="reg-myprofile-link">
+ <a href="">My Profile</a>
+ </div>
+ <div id="reg-companyProfile-link">
+ <a href="">Company Profile</a>
+ </div>
+ <div id="reg-logout-div">
+ <a class="reg-logout-btn" href="ebiz_logout.htm">Log Out</a>
+ </div>
+ </div>
+ <div tabindex="0" class="reg-profileDetails" id="reg-profiledetails-id">
+ <ul class="reg-Details-table">
+ <li><div class="reg-userName-table"><div id="reg-userName-table-row"><div id="reg-userName-table-cell"><h3 class="att-global-fonts" id="reg-userName">${ociUserName}&nbsp;</h3><span class="visuallyhidden">.</span></div></div></div></li>
+ <li><div class="reg-userEmail-label"><span class="reg-userEmail-label-spn">EMAIL<span class="visuallyhidden">:</span></span></div></li>
+ <li><div class="reg-userEmail-value"><span class="reg-userEmail-value-spn">${email}<span class="visuallyhidden">.</span></span></div></li>
+ <li><div class="reg-userRole-label"><span class="reg-userRole-label-spn">PROFILE ID<span class="visuallyhidden">:</span></span></div></li>
+ <li><div class="reg-userRole-value"><span class="reg-userRole-value-spn">${groupId}<span class="visuallyhidden">.</span></span></div></li>
+ <li><div class="reg-userCompany-label"><span class="reg-userCompany-spn"> ENTERPRISE NAME<span class="visuallyhidden">:</span></span></div></li>
+ <li><div class="reg-userCompany-value"><span class="reg-userCompany-spn">${serviceProviderId}<span class="visuallyhidden">.</span></span></div></li>
+ </ul>
+ </div>
+ </div>
+ </div>
+ </span>
+ </div> --%>
+ <!-- Chat -->
+
+
+ <!-- <div id="headerChatIcon" class='chatIcon' style="background: url(static/images/headerChatIcon.png) no-repeat -3px -3px;"></div>
+ <div class="chatBox">
+ <div class='arrow'></div>
+ <div class="chatBox-header">
+ <span class="chatBox-heading">Live Chat</span>
+ <i class="icon-erase circle_close_chat"></i>
+ </div>
+
+ </div> -->
+ </div>
+ </div>
+ </div>
+ <!-- HTML for the secondary menu for dashboard. -->
+ <div id="secondLevel" class="secondaryMenuContainer secondaryMenuContainerForDashboard" style="display:none;">
+ <div id="secondaryMenuContentContainer" class="secondaryMenuContentContainer" style="">
+ <c:forEach items="${menu}" var="menuItem">
+ <div class="secondaryMenuOption" style="margin-left:20px; font-size:16px !important;">
+ <a id="${menuItem.id}" href="${menuItem.action}" class="secondaryMenuOptionLink selectedSecondaryMenuOption">${menuItem.label}</a>
+ </div>
+ </c:forEach>
+ </div>
+ </div>
+ <c:forEach items="${menu}" var="menuItem">
+ <c:if test="${!empty menuItem.childMenus}">
+ <div id="thirdLevel${menuItem.id}" class="secondaryMenuContainer secondaryMenuContainerForDashboard" style="display:none;">
+ <div id="secondaryMenuContentContainer${menuItem.id}" class="secondaryMenuContentContainer" style="">
+ <c:forEach items="${menuItem.childMenus}" var="subMenuItem">
+ <div class="secondaryMenuOption" style="margin-left:20px; font-size:16px !important;">
+ <a id="${subMenuItem.id}" href="${subMenuItem.action}" class="thirdMenuOptionLink selectedSecondaryMenuOption">${subMenuItem.label}</a>
+ </div>
+ </c:forEach>
+ </div>
+ </div>
+ </c:if>
+ </c:forEach>
+ <%-- <c:forEach items="${menu}" var="menuItem">
+ <c:if test="${!empty menuItem.childMenus}">
+ <div id="thirdLevel${menuItem.id}" class="secondaryMenuContainer secondaryMenuContainerForDashboard" style="display:none;">
+ <div id="secondaryMenuContentContainer${menuItem.id}" class="secondaryMenuContentContainer" style="">
+ <c:forEach items="${menuItem.childMenus}" var="subMenuItem">
+ <div class="secondaryMenuOption" style="margin-left:20px; font-size:16px !important;">
+ <a id="${subMenuItem.id}" href="${subMenuItem.action}" class="thirdMenuOptionLink selectedSecondaryMenuOption">${subMenuItem.label}</a>
+ </div>
+ </c:forEach>
+ </div>
+ </div>
+ </c:if>
+ </c:forEach> --%>
+ </div>
+ </div>
+
+ <c:forEach items="${menu}" var="menuItem">
+ <c:if test="${!empty menuItem.childMenus}">
+ <c:forEach items="${menuItem.childMenus}" var="subMenuItem">
+ <div id="megaMenu${subMenuItem.id}" class="megaMenuContainer" style="right:0px; margin-top:145px; display:none;">
+ <div class="megaMenuContentContainer">
+ <ul class="megaMenuTable" id="megaMenuTable" style="padding:0px;">
+ <li class="megaMenuFirstRow megaMenuRow" >
+ <ul style=" display: flex; flex-direction: column; flex-wrap: wrap; height:500px;">
+ <li class="categoryContainerColumn" style="margin-right:30px;">
+ <div class="categoryContainer" align="left" style="margin-top:10px; margin-left:40px;">
+ <c:forEach items="${subMenuItem.childMenus}" var="childSubMenuItem">
+ <div class="categoryOption" style="margin-bottom:13px; width:500px; ">
+ <a class="categoryOptionLink" style="margin-bottom:0px; font-size:16px;" href="${childSubMenuItem.action}">${childSubMenuItem.label}</a>
+ </div>
+ </c:forEach>
+ </div>
+ </li>
+ </ul>
+ </li>
+ </ul>
+ </div>
+ </div>
+ </c:forEach>
+ </c:if>
+ </c:forEach>
+ <div id="megaMenuContainerTemp" class="megaMenuContainer" style="right:0px; margin-top:89px; display:none;">
+ <div class="megaMenuContentContainer">
+ <ul class="megaMenuTable" id="megaMenuTable" style="padding:0px;">
+ <li class="megaMenuFirstRow megaMenuRow" >
+ <ul style=" display: flex; flex-direction: column; flex-wrap: wrap; height:500px;">
+ <li class="categoryContainerColumn" style="margin-right:30px;">
+ <div class="categoryContainer" align="left" style="margin-bottom:0px; margin-left:40px;">
+ <div class="categoryTitle" style="margin-top:10px; min-width:160px;"></div>
+ <div class="categoryOption" style="margin-bottom:13px;">
+ <a class="categoryOptionLink" style="margin-bottom:0px;" href="#"></a>
+ </div>
+ </div>
+ </li>
+ </ul>
+ </li>
+ <li class="megaMenuSecondRow megaMenuRow" style="display:none"></li>
+ </ul>
+ </div>
+ </div>
+
+
+ <script>
+
+ $(document).ready(function() {
+ $(document).on('mouseleave', '#megaMenuContainer', function() {
+ $("#thirdLevel").css("display", "none");
+ $("#megaMenuContainerTemp").css("display", "none");
+
+ });
+ $(document).on('mouseleave', '#megaMenuContainerTemp', function() {
+ $("#megaMenuContainerTemp").css("display", "none");
+ });
+
+ $(document).on('mouseenter', '#secondLevel', function() {
+ <c:forEach items="${menu}" var="menuItem">
+ <c:choose>
+ <c:when test="${!empty menuItem.childMenus}">
+ $("#${menuItem.id}").hover(function() {
+ <c:forEach items="${menu}" var="menuItem2">
+ <c:if test="${!empty menuItem2.childMenus}">
+ $("#thirdLevel${menuItem2.id}").css("display", "none");
+ </c:if>
+ </c:forEach>
+ $(".megaMenuContainer").css("display", "none");
+ $("#thirdLevel${menuItem.id}").css("display", "inline");
+ });
+ </c:when>
+ <c:otherwise>
+ $("#${menuItem.id}").hover(function() {
+ <c:forEach items="${menu}" var="menuItem2">
+ <c:if test="${!empty menuItem2.childMenus}">
+ $("#thirdLevel${menuItem2.id}").css("display", "none");
+ </c:if>
+ </c:forEach>
+ $(".megaMenuContainer").css("display", "none");
+ });
+ </c:otherwise>
+ </c:choose>
+ </c:forEach>
+ });
+
+ $('.thirdMenuOptionLink').hover(function() {
+ $(".megaMenuContainer").css("display", "none");
+
+ var id= "#megaMenu"+this.id;
+ $(id).css("display", "inline");
+ });
+ });
+ function openSecondLevel(item){
+ if(item=='m'){
+ $("#secondLevel").css("display", "inline");
+ }
+ }
+
+
+ </script>
diff --git a/ecomp-portal-BE/war/WEB-INF/fusion/jsp/ebz_template.jsp b/ecomp-portal-BE/war/WEB-INF/fusion/jsp/ebz_template.jsp
new file mode 100644
index 00000000..32010111
--- /dev/null
+++ b/ecomp-portal-BE/war/WEB-INF/fusion/jsp/ebz_template.jsp
@@ -0,0 +1,44 @@
+<%--
+ ================================================================================
+ 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.
+ ================================================================================
+ --%>
+<%@ taglib uri="http://tiles.apache.org/tags-tiles" prefix="tiles"%>
+<!DOCTYPE html>
+<html ng-app="abs">
+ <head>
+ <%@ include file="/WEB-INF/fusion/jsp/meta.jsp" %>
+ <script src="static/js/jquery-1.10.2.js" type="text/javascript"></script>
+ </head>
+ <body class="templatebody" style="opacity: 1; background-color: rgb(242, 242, 242); padding: 0px;">
+ <div class="applicationWindow">
+ <div>
+ <tiles:insertAttribute name="header" />
+ </div>
+ <br>
+ <div class="content" style="margin-left:100px; margin-right:100px;">
+ <div style="margin-top: 50px;">
+ <tiles:insertAttribute name="body" />
+ </div>
+ </div>
+ <br>
+ <div>
+ <tiles:insertAttribute name="footer" />
+ </div>
+ </div>
+ </body>
+</html>
diff --git a/ecomp-portal-BE/war/WEB-INF/fusion/jsp/ebz_template_noheader_nofooter.jsp b/ecomp-portal-BE/war/WEB-INF/fusion/jsp/ebz_template_noheader_nofooter.jsp
new file mode 100644
index 00000000..c3f9fef9
--- /dev/null
+++ b/ecomp-portal-BE/war/WEB-INF/fusion/jsp/ebz_template_noheader_nofooter.jsp
@@ -0,0 +1,35 @@
+<%--
+ ================================================================================
+ 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.
+ ================================================================================
+ --%>
+<%@ taglib uri="http://tiles.apache.org/tags-tiles" prefix="tiles"%>
+<!DOCTYPE html>
+<html ng-app="abs">
+ <%@ include file="/WEB-INF/fusion/jsp/meta.jsp" %>
+ <body class="templatebody" style="opacity: 1; background-color: rgb(242, 242, 242); padding: 0px;">
+ <div class="applicationWindow">
+
+ <div class="content" style="margin-left:100px; margin-right:100px;">
+ <div style="margin-top: 50px;">
+ <tiles:insertAttribute name="body" />
+ </div>
+ </div>
+
+ </div>
+ </body>
+</html>
diff --git a/ecomp-portal-BE/war/WEB-INF/fusion/jsp/include.jsp b/ecomp-portal-BE/war/WEB-INF/fusion/jsp/include.jsp
new file mode 100644
index 00000000..e4ca6e4b
--- /dev/null
+++ b/ecomp-portal-BE/war/WEB-INF/fusion/jsp/include.jsp
@@ -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.
+ ================================================================================
+ --%>
+<%@ page import="org.openecomp.portalsdk.core.util.SystemProperties" %>
+<%@ page import="org.openecomp.portalsdk.core.web.support.AppUtils" %>
+
+<%@ page import="java.util.LinkedHashMap" %>
+
+
+<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>
+<%@ taglib prefix="fmt" uri="http://java.sun.com/jsp/jstl/fmt" %>
+<%@ taglib prefix="fn" uri="http://java.sun.com/jsp/jstl/functions" %>
+
+<c:set var="request" value="<%=request%>"/>
diff --git a/ecomp-portal-BE/war/WEB-INF/fusion/jsp/jcs_admin.jsp b/ecomp-portal-BE/war/WEB-INF/fusion/jsp/jcs_admin.jsp
new file mode 100644
index 00000000..bf56c56b
--- /dev/null
+++ b/ecomp-portal-BE/war/WEB-INF/fusion/jsp/jcs_admin.jsp
@@ -0,0 +1,149 @@
+<%--
+ ================================================================================
+ 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.
+ ================================================================================
+ --%>
+<%-- <%@ include file="/WEB-INF/fusion/jsp/include.jsp"%> --%>
+<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>
+<%@ taglib prefix="fmt" uri="http://java.sun.com/jsp/jstl/fmt" %>
+<%@ taglib prefix="fn" uri="http://java.sun.com/jsp/jstl/functions" %>
+
+<link rel="stylesheet" type="text/css" href="static/ebz/sandbox.css" >
+<link rel="stylesheet" type="text/css" href="static/fusion/css/jquery-ui.css">
+
+<script src= "static/ebz/angular_js/angular.js"></script>
+<script src= "static/ebz/angular_js/angular-sanitize.js"></script>
+<script src= "static/ebz/angular_js/att_abs_tpls.js"></script>
+<script src= "static/ebz/angular_js/app.js"></script>
+<script src= "static/ebz/angular_js/gestures.js"></script>
+
+<script src="static/js/jquery-1.10.2.js"></script>
+<script src="static/js/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>
+<jsp:include page="/WEB-INF/fusion/jsp/popup_modal.html" ></jsp:include>
+
+<div align="left" ng-controller="cacheAdminController">
+ <div class="pageTitle"><h3>Cache Regions</h3></div>
+ These are the regions which are currently defined in the cache. 'Items' and 'Bytes' refer to the elements currently in memory (not spooled).
+ You can clear all items for a region by clicking on the Clear icon next to the desired region below. You can also <a href="#" ng-click="clearAll();">clear all regions</a> which
+ empties the entire cache. <br /><br />
+
+ <div style="width: 97%; border-top: 1px solid #c4c4c4; margin-top: 0px; background-color: #fff; padding: 10px 0; color: #646464s">
+ <div style="margin: 0 20px 10px 0px; font-size: 80%; float: left; width: 97%;">
+ <div class="col-md-4"><b>Cache Name</b></div>
+ <div class="col-md-2"><b># of Items</b></div>
+ <div class="col-md-2"><b>Bytes</b></div>
+ <div class="col-md-2"><b>Status</b></div>
+ <div class="col-md-3"><b>Memory Hits</b></div>
+ <div class="col-md-3"><b>Aux Hits</b></div>
+ <div class="col-md-3"><b>Not Found Misses</b></div>
+ <div class="col-md-3"><b>Expired Misses</b></div>
+ <div class="col-md-1"><b>Clear?</b></div>
+ <div class="col-md-1"><b>Items</b></div>
+ </div>
+ <div ng-repeat="region in regions">
+ <div style="margin: 0 20px 10px 0px; font-size: 80%; float: left; width: 97%;">
+ <div class="col-md-4"><a href="#" tooltip="Click to Show Region Details" ng-click="showRegionDetails(region.cacheName);">{{region.cacheName}}</a></div>
+ <div class="col-md-2">{{region.size}}</div>
+ <div class="col-md-2">{{region.byteCount}}</div>
+ <div class="col-md-2">{{region.status}}</div>
+ <div class="col-md-3">{{region.hitCountRam}}</div>
+ <div class="col-md-3">{{region.hitCountAux}}</div>
+ <div class="col-md-3">{{region.missCountNotFound}}</div>
+ <div class="col-md-3">{{region.missCountExpired}}</div>
+ <div class="col-md-1">
+ <div ng-click="clearRegion(region.cacheName);" style="font-size:20px;"><a href="javascript:void(0)" class="icon-trash"></a></div>
+ </div>
+ <div class="col-md-1"><span class="att--tree__plus col-md-1" ng-class="{minus: bling$index}" ng-click="bling$index = !bling$index" style="display: block;"></span></div>
+ </div>
+ <div style="margin: 0px 20px 0px 30px; font-size: 80%; float: left; width: 95%; border-top: 1px solid #e4e4e4; padding-top: 10px"
+ ng-show="bling$index">
+ <span class="att--tree__arrow" style="height: 20px; width: 20px; display: inline-block; float: left"></span>
+ <div class="col-md-12"><b>Key</b></div>
+ <div class="col-md-2"><b>Eternal?</b></div>
+ <div class="col-md-4"><b>Created</b></div>
+ <div class="col-md-2"><b>Max Life</b></div>
+ <div class="col-md-2"><b>Expires</b></div>
+ <div class="col-md-1"><b>Clear?</b></div>
+ </div>
+ <div ng-repeat="item in region.items">
+ <div style="margin: 0px 20px 0px 30px; font-size: 80%; float: left; width: 95%;" ng-show="bling$index">
+ <span class="att--tree__arrow" style="height: 20px; width: 20px; display: inline-block; float: left"></span>
+ <div class="col-md-12"><a href="#" tooltip="Click to Show Item Details" ng-click="showItemDetails(region.cacheName,item.key);">{{item.key}}</a></div>
+ <div class="col-md-2">{{item.eternal}}</div>
+ <div class="col-md-4">{{item.createTime}}</div>
+ <div class="col-md-2">{{item.maxLifeSeconds}}</div>
+ <div class="col-md-2">{{item.expiresInSeconds}}</div>
+ <div class="col-md-1"><a ng-click="clearItem(region.cacheName,item.key);"><img src="static/fusion/images/deleteicon.gif"></a></div>
+ </div>
+ </div>
+ <div style="clear: both"></div>
+ </div>
+ </div>
+</div>
+
+<script>
+app.controller('cacheAdminController', function ($scope,$interval,$http,$modal,modalService){
+ $scope.regions=${model};
+
+ $scope.clearAll = function() {
+ if(confirm('You are about to clear all of the items for all cache regions. Do you want to continue?')){
+ $http.get("jcs_admin/clearAll").success(function(response){$scope.regions=response;});
+ }
+ };
+
+ $scope.clearRegion = function(cacheName) {
+ if(confirm('You are about to clear all of the items in the cache region "' + cacheName + '". Do you want to continue?')){
+ $http.get("jcs_admin/clearRegion?cacheName="+cacheName).success(function(response){$scope.regions=response;});
+ }
+ };
+
+ $scope.clearItem = function(cacheName,key) {
+ if(confirm('You are about to clear this item from the cache region "' + cacheName + '". Do you want to continue?')){
+ $http.get("jcs_admin/clearItem?keyName="+key+"&cacheName="+cacheName).success(function(response){$scope.regions=response;});
+ }
+ };
+
+ $scope.showRegionDetails = function(cacheName) {
+ $http.get("jcs_admin/showRegionDetails?cacheName="+cacheName).success(function(response){modalService.showSuccess('',response);});
+ };
+
+ $scope.showItemDetails = function(cacheName,key) {
+ $http.get("jcs_admin/showItemDetails?keyName="+key+"&cacheName="+cacheName).success(function(response){
+ var message = "CacheName: "+ response.cacheName
+ +"\nkey: "+response.key
+ +"\nIS_SPOOL: "+response.attr.IS_SPOOL
+ +"\nIS_LATERAL: "+response.attr.IS_LATERAL
+ +"\nIS_REMOTE: "+response.attr.IS_REMOTE
+ +"\nIS_ETERNAL: "+response.attr.IS_ETERNAL
+ +"\nversion: "+response.attr.version
+ +"\nmaxLifeSeconds: "+response.attr.maxLifeSeconds
+ +"\nmaxIdleTimeSeconds: "+response.attr.maxIdleTimeSeconds
+ +"\nsize: "+response.attr.size
+ +"\ncreateTime: "+response.attr.createTime
+ +"\nlastAccessTime: "+response.attr.lastAccessTime
+ +"\nidleTime: "+response.attr.idleTime
+ +"\ntimeToLiveSeconds: "+response.attr.timeToLiveSeconds
+ +"\nisSpool: "+response.attr.isSpool
+ +"\nisLateral: "+response.attr.isLateral
+ +"\nisRemote: "+response.attr.isRemote
+ +"\nisEternal: "+response.attr.isEternal;
+ modalService.showSuccess('',message);});
+ };
+});
+</script>
diff --git a/ecomp-portal-BE/war/WEB-INF/fusion/jsp/meta.jsp b/ecomp-portal-BE/war/WEB-INF/fusion/jsp/meta.jsp
new file mode 100644
index 00000000..1899b79f
--- /dev/null
+++ b/ecomp-portal-BE/war/WEB-INF/fusion/jsp/meta.jsp
@@ -0,0 +1,35 @@
+<%--
+ ================================================================================
+ 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.
+ ================================================================================
+ --%>
+<head>
+ <meta charset="utf-8">
+ <meta http-equiv="X-UA-Compatible" content="IE=edge">
+ <meta name="viewport" content="width=device-width, initial-scale=1">
+ <!-- The above 3 meta tags *must* come first in the head; any other head content must come *after* these tags -->
+ <link rel="stylesheet" type="text/css" href="static/ebz/fn-ebz.css" >
+ <link rel="stylesheet" type="text/css" href="static/ebz/sandbox/styles/demo.css" >
+ <link rel="stylesheet" type="text/css" href="static/ebz/sandbox/styles/base.css" >
+ <link rel="stylesheet" type="text/css" href="static/ebz/sandbox/styles/btn.css" >
+ <link rel="stylesheet" type="text/css" href="static/ebz/sandbox/styles/dtpk.css" >
+ <link rel="stylesheet" type="text/css" href="static/ebz/sandbox/styles/frms.css" >
+ <link rel="stylesheet" type="text/css" href="static/ebz/sandbox/styles/sldr.css" >
+ <link rel="stylesheet" type="text/css" href="static/ebz/sandbox/styles/style.css" >
+ <link rel="stylesheet" type="text/css" href="static/ebz/sandbox/styles/tbs.css" >
+
+</head>
diff --git a/ecomp-portal-BE/war/WEB-INF/fusion/jsp/popup_modal.html b/ecomp-portal-BE/war/WEB-INF/fusion/jsp/popup_modal.html
new file mode 100644
index 00000000..82c5616f
--- /dev/null
+++ b/ecomp-portal-BE/war/WEB-INF/fusion/jsp/popup_modal.html
@@ -0,0 +1,311 @@
+<!--
+ ================================================================================
+ 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.
+ ================================================================================
+ -->
+
+<script type="text/ng-template" id="modal_informative.html">
+ <div class="modal__informative font-showcase" >
+ <div class="modal__header">
+ <h2 class="font-showcase-font-name">Success!</h2>
+ <div class="modal__header--icon"></div>
+ </div>
+ <div class="divider-container"><hr> </div>
+ <div class="modal__content" style="white-space: pre-wrap;">{{message.text}}</div>
+ <div class="modal__footer">
+ <button class="button button--primary button--small" herf="javascript:void(0)" ng-click="$dismiss()">Dismiss</button>
+ </div>
+ </div>
+ </script>
+
+
+ <script type="text/ng-template" id="delete_informative.html">
+ <div class="modal__warning font-showcase" >
+ <div class="modal__header">
+ <h2 class="font-showcase-font-name">Are you sure you want to delete the profile?</h2>
+
+ <div class="modal__header--icon"></div>
+ </div>
+ <div class="divider-container"><hr> </div>
+ <div class="modal__content">
+ Deletions are not reversible.<br/> {{message.text}}
+ </div>
+ <div class="modal__footer">
+ <button class="button button--primary button--small" herf="javascript:void(0)" ng-click="$close()">Yes</button>
+ <button class="button button--primary button--small" herf="javascript:void(0)" ng-click="$dismiss()">Cancel</button>
+ </div>
+ </div>
+ </script>
+ <script type="text/ng-template" id="email_report_informative.html">
+ <div class="modal__warning font-showcase" >
+ <div class="modal__header">
+ <h2 class="font-showcase-font-name">Mailing your report...</h2>
+
+ <div class="modal__header--icon"></div>
+ </div>
+ <div class="divider-container"><hr> </div>
+ <div class="modal__content">
+ The report will be sent to your email soon!
+ </div>
+ <div class="modal__footer">
+ <button class="button button--primary button--small" herf="javascript:void(0)" ng-click="$close()">Ok</button>
+ </div>
+ </div>
+ </script>
+ <script type="text/ng-template" id="delete_authCode.html">
+ <div class="modal__warning font-showcase" >
+ <div class="modal__header">
+ <h2 class="font-showcase-font-name">Are you sure you want to delete the Authorization Code(s)?</h2>
+
+ <div class="modal__header--icon"></div>
+ </div>
+ <div class="divider-container"><hr> </div>
+ <div class="modal__content">
+ Deletions are not reversible.<br/> {{message.text}}
+ </div>
+ <div class="modal__footer">
+ <button class="button button--primary button--small" herf="javascript:void(0)" ng-click="$close()">Yes</button>
+ <button class="button button--primary button--small" herf="javascript:void(0)" ng-click="$dismiss()">Cancel</button>
+ </div>
+ </div>
+ </script>
+ <script type="text/ng-template" id="delete_Schedule.html">
+ <div class="modal__warning font-showcase" >
+ <div class="modal__header">
+ <h2 class="font-showcase-font-name">Are You Sure You Want to Delete This Schedule(s) ?</h2>
+
+ <div class="modal__header--icon"></div>
+ </div>
+ <div class="divider-container"><hr> </div>
+ <div class="modal__content">
+ Deletions are not reversible.<br/> {{message.text}}
+ </div>
+ <div class="modal__footer">
+ <button class="button button--primary button--small" herf="javascript:void(0)" ng-click="$close()">Yes</button>
+ <button class="button button--primary button--small" herf="javascript:void(0)" ng-click="$dismiss()">Cancel</button>
+ </div>
+ </div>
+ </script>
+ <script type="text/ng-template" id="alternate_number.html">
+ <div class="modal__warning font-showcase" >
+ <div class="modal__header">
+ <h2 class="font-showcase-font-name">Are You Sure You Want to Delete This Number ?</h2>
+
+ <div class="modal__header--icon"></div>
+ </div>
+ <div class="divider-container"><hr> </div>
+ <div class="modal__content">
+ Deletions are not reversible.<br/> {{message.text}}
+ </div>
+ <div class="modal__footer">
+ <button class="button button--primary button--small" herf="javascript:void(0)" ng-click="$close()">Yes</button>
+ <button class="button button--primary button--small" herf="javascript:void(0)" ng-click="$dismiss()">Cancel</button>
+ </div>
+ </div>
+ </script>
+ <script type="text/ng-template" id="manage_device.html">
+ <div class="modal__warning font-showcase" >
+ <div class="modal__header">
+ <h2 class="font-showcase-font-name">Are You Sure You Want to Delete This Line Port ?</h2>
+
+ <div class="modal__header--icon"></div>
+ </div>
+ <div class="divider-container"><hr> </div>
+ <div class="modal__content">
+ Deletions are not reversible.<br/> {{message.text}}
+ </div>
+ <div class="modal__footer">
+ <button class="button button--primary button--small" herf="javascript:void(0)" ng-click="$close()">Yes</button>
+ <button class="button button--primary button--small" herf="javascript:void(0)" ng-click="$dismiss()">Cancel</button>
+ </div>
+ </div>
+ </script>
+ <script type="text/ng-template" id="delete_virtualOnNet.html">
+ <div class="modal__warning font-showcase" >
+ <div class="modal__header">
+ <h2 class="font-showcase-font-name">Are You Sure You Want to Delete this Virtual On-Net User?</h2>
+
+ <div class="modal__header--icon"></div>
+ </div>
+ <div class="divider-container"><hr> </div>
+ <div class="modal__content">
+ Deletions are not reversible.<br/> {{message.text}}
+ </div>
+ <div class="modal__footer">
+ <button class="button button--primary button--small" herf="javascript:void(0)" ng-click="$close()">Yes</button>
+ <button class="button button--primary button--small" herf="javascript:void(0)" ng-click="$dismiss()">Cancel</button>
+ </div>
+ </div>
+ </script>
+ <script type="text/ng-template" id="delete_user_meet_me_conference.html">
+ <div class="modal__warning font-showcase" >
+ <div class="modal__header">
+ <h2 class="font-showcase-font-name">Are You Sure You Want to Delete this Conference?</h2>
+
+ <div class="modal__header--icon"></div>
+ </div>
+ <div class="divider-container"><hr> </div>
+ <div class="modal__content">
+ Deletions are not reversible.<br/> {{message.text}}
+ </div>
+ <div class="modal__footer">
+ <button class="button button--primary button--small" herf="javascript:void(0)" ng-click="$close()">Yes</button>
+ <button class="button button--primary button--small" herf="javascript:void(0)" ng-click="$dismiss()">Cancel</button>
+ </div>
+ </div>
+ </script>
+ <script type="text/ng-template" id="confirmation_informative.html">
+ <div class="modal__warning font-showcase" >
+ <div class="modal__header">
+ <h2 class="font-showcase-font-name">{{message.title}}</h2>
+
+ <div class="modal__header--icon"></div>
+ </div>
+ <div class="divider-container"><hr> </div>
+ <div class="modal__content" style="white-space: pre-wrap;">{{message.text}}<br/></div>
+ <div class="modal__footer">
+ <button class="button button--primary button--small" herf="javascript:void(0)" ng-click="$close()">Yes</button>
+ <button class="button button--primary button--small" herf="javascript:void(0)" ng-click="$dismiss()">Cancel</button>
+ </div>
+ </div>
+ </script>
+
+ <script type="text/ng-template" id="confirmation_for_delete.html">
+ <div class="modal__warning font-showcase" >
+ <div class="modal__header">
+ <h2 class="font-showcase-font-name"> <h2 class="font-showcase-font-name">Are You Sure You Want to Delete This {{message.title}}?</h2>
+
+ <div class="modal__header--icon"></div>
+ </div>
+ <div class="divider-container"><hr> </div>
+ <div class="modal__content">Deletions are not reversible. {{message.text}}<br/></div>
+ <div class="modal__footer">
+ <button class="button button--primary button--small" herf="javascript:void(0)" ng-click="$close()">Yes</button>
+ <button class="button button--primary button--small" herf="javascript:void(0)" ng-click="$dismiss()">Cancel</button>
+ </div>
+ </div>
+ </script>
+
+ <script type="text/ng-template" id="modal_warning.html">
+ <div class="modal__warning font-showcase" >
+ <div class="modal__header">
+ <h2 class="font-showcase-font-name">Unable to process your request!</h2>
+
+ <div class="modal__header--icon"></div>
+ </div>
+ <div class="divider-container"><hr> </div>
+ <div class="modal__content" style="white-space: pre-wrap;">Unable to process your request. <br/>{{message.text}}<br/>
+ </div>
+ <div class="modal__footer">
+ <button class="button button--primary button--small" herf="javascript:void(0)" ng-click="$dismiss()">Dismiss</button>
+ </div>
+ </div>
+ </script>
+
+ <script type="text/ng-template" id="modal_warning_message.html">
+ <div class="modal__warning font-showcase" >
+ <div class="modal__header">
+ <h2 class="font-showcase-font-name">Warning</h2>
+
+ <div class="modal__header--icon"></div>
+ </div>
+ <div class="divider-container"><hr> </div>
+ <div class="modal__content" style="white-space: pre-wrap;">{{message.text}}<br/>
+ </div>
+ <div class="modal__footer">
+ <button class="button button--primary button--small" herf="javascript:void(0)" ng-click="$dismiss()">Dismiss</button>
+ </div>
+ </div>
+ </script>
+
+
+
+ <script type="text/ng-template" id="modal_prompt.html">
+ <div class="modal__warning font-showcase">
+ <div class="modal__header">
+ <h2 class="font-showcase-font-name">Unable to process your request. </h2>
+ <i class="icon-circle-action-close close-modal modal__header--close" ng-click="$dismiss()"></i>
+
+ </div>
+ <div class="divider-container"><hr> </div>
+ <div class="modal__content">
+ Unable to process your request. <br/> {{message.text}}
+ </div>
+ </div>
+ </script>
+ <script type="text/ng-template" id="delete_device.html">
+ <div class="modal__warning font-showcase" >
+ <div class="modal__header">
+ <h2 class="font-showcase-font-name">Are You Sure You Want to Delete This Device?</h2>
+
+ <div class="modal__header--icon"></div>
+ </div>
+ <div class="divider-container"><hr> </div>
+ <div class="modal__content">
+ Deletions are not reversible.<br/> {{message.text}}
+ </div>
+ <div class="modal__footer">
+ <button class="button button--primary button--small" herf="javascript:void(0)" ng-click="$close()">Yes</button>
+ <button class="button button--primary button--small" herf="javascript:void(0)" ng-click="$dismiss()">Cancel</button>
+ </div>
+ </div>
+ </script>
+ <script type="text/ng-template" id="delete_multiple_device.html">
+ <div class="modal__warning font-showcase" >
+ <div class="modal__header">
+ <h2 class="font-showcase-font-name">Are You Sure You Want to Delete The Device(s)?</h2>
+
+ <div class="modal__header--icon"></div>
+ </div>
+ <div class="divider-container"><hr> </div>
+ <div class="modal__content">
+ Deletions are not reversible.<br/> {{message.text}}
+ </div>
+ <div class="modal__footer">
+ <button class="button button--primary button--small" herf="javascript:void(0)" ng-click="$close()">Yes</button>
+ <button class="button button--primary button--small" herf="javascript:void(0)" ng-click="$dismiss()">Cancel</button>
+ </div>
+ </div>
+ </script>
+
+<script>
+
+//.controller('modalpopupController', function ($scope, $modalInstance){
+var modalpopupController = function ($scope, $modalInstance, message){
+
+ $scope.message = message;
+
+
+ $scope.hello = function () {
+ $modalInstance.close($scope.digitPattern);
+ };
+ $modalInstance.ok = function() {
+ //add the ok functionality
+ alert("Logout");
+ };
+ $modalInstance.cancel = function() {
+ //add the cancel functionality
+ alert("Keep Log in");
+ };
+ $modalInstance.cancelbutton = function() {
+ //add the cancel functionality
+ alert("Modal Waring popup close event");
+ };
+}
+
+
+</script>
diff --git a/ecomp-portal-BE/war/WEB-INF/fusion/jsp/popup_modal_role.html b/ecomp-portal-BE/war/WEB-INF/fusion/jsp/popup_modal_role.html
new file mode 100644
index 00000000..eae53e4f
--- /dev/null
+++ b/ecomp-portal-BE/war/WEB-INF/fusion/jsp/popup_modal_role.html
@@ -0,0 +1,257 @@
+<!--
+ ================================================================================
+ 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.
+ ================================================================================
+ -->
+
+<script type="text/ng-template" id="role_functions_popup.html">
+ <div class="modal__informative font-showcase" style="width:700px;">
+ <div class="modal__header">
+ <h2 class="font-showcase-font-name" style="width: 500px;">Select Role Functions</h2>
+ </div>
+ <div class="divider-container"><hr> </div>
+ <div class="modal__content">
+ <table table-data="availableRoleFunctions" att-table>
+ <thead att-table-row type="header">
+ <tr>
+ <th att-table-header sortable="false" width="10%"> </th>
+ <th att-table-header sortable="false" width="90%">Role Function</th>
+ </tr>
+ </thead>
+ <tbody att-table-row type="body" row-repeat="availableRoleFunction in availableRoleFunctions track by availableRoleFunction.code" style="max-height: 980px;" >
+ <tr>
+
+ <td width="10%">
+ <div ng-click="toggleRoleFunction(availableRoleFunction.selected,availableRoleFunction);">
+ <input type="checkbox" ng-model="availableRoleFunction.selected" att-toggle-main>
+ </div>
+ </td>
+ <td width="90%">{{ availableRoleFunction.name }}</td>
+
+ </tr>
+ </tbody>
+ </table>
+ </div>
+ <div class="modal__footer">
+ <button class="button button--primary button--small" herf="javascript:void(0)" ng-click="close()">Close</button>
+ </div>
+ </div>
+</script>
+
+
+<script type="text/ng-template" id="child_roles_popup.html">
+ <div class="modal__informative font-showcase" style="width:700px;">
+ <div class="modal__header">
+ <h2 class="font-showcase-font-name" style="width: 500px;">Select Child Roles</h2>
+ </div>
+ <div class="divider-container"><hr> </div>
+ <div class="modal__content">
+ <table table-data="availableRoles" att-table>
+ <thead att-table-row type="header">
+ <tr>
+ <th att-table-header sortable="false" width="10%"> </th>
+ <th att-table-header sortable="false" width="90%">Role</th>
+ </tr>
+ </thead>
+ <tbody att-table-row type="body" row-repeat="availableRole in availableRoles track by availableRole.id" style="max-height: 980px;" ><!-- background colors will alternate not properly with multiple tbody-->
+ <tr>
+ <td att-table-body width="10%">
+ <div ng-click="toggleChildRole(availableRole.selected,availableRole);">
+ <input type="checkbox" ng-model="availableRole.selected" att-toggle-main>
+ </div>
+ </td>
+ <td att-table-body width="90%">{{ availableRole.name }}</td>
+ </tr>
+ </tbody>
+ </table>
+ </div>
+ <div class="modal__footer">
+ <button class="button button--primary button--small" herf="javascript:void(0)" ng-click="close()">Close</button>
+ </div>
+ </div>
+</script>
+
+<script>
+
+var rolepopupController = function ($scope, $modalInstance, role){
+ $scope.role = role;
+
+ if($scope.role.childRoles==null){
+ $scope.role.childRoles=[];
+ }
+
+ $scope.ociavailableRoles=${availableRoles};
+ console.log($scope.ociavailableRoles);
+ $scope.availableRoles=[];
+ if($scope.ociavailableRoles)
+ $.each($scope.ociavailableRoles, function(i, a){
+ var availableRole = a;
+ availableRole.selected = false;
+ if($scope.role.childRoles){
+ $.each($scope.role.childRoles, function(j, b){
+ if(a.id === b.id) {
+ availableRole.selected = true;
+ }
+ });
+ };
+ $scope.availableRoles.push(availableRole);
+ });
+ ;
+
+ $scope.ociavailableRoleFunctions=${availableRoleFunctions};
+
+ $scope.availableRoleFunctions = [];
+ if($scope.ociavailableRoleFunctions)
+ $.each($scope.ociavailableRoleFunctions, function(i, a){
+ var availableRoleFunction = a;
+ availableRoleFunction.selected = false;
+ $.each($scope.role.roleFunctions, function(j, b){
+ if(a.code === b.code) {
+ availableRoleFunction.selected = true;
+ }
+ });
+ $scope.availableRoleFunctions.push(availableRoleFunction);
+ });
+ ;
+
+ $scope.toggleRoleFunction = function(selected,availableRoleFunction) {
+ //alert('toggleRole: '+selected);
+
+ if(!selected) {
+ //remove role function
+ if(role.id==null){
+ var index = $scope.role.roleFunctions.indexOf(availableRoleFunction);
+ if(index>=0)
+ $scope.role.roleFunctions.splice(index, 1);
+ return;
+ }
+ var uuu = "role/removeRoleFunction.htm?role_id=${param.role_id}";
+ if (confirm("You are about to remove the role funtcion "+availableRoleFunction.name+" from the role for "+$scope.role.name+". Do you want to continue?")) {
+
+ var postData={roleFunction:availableRoleFunction};
+ $.ajax({
+ type : 'POST',
+ url : uuu,
+ dataType: 'json',
+ contentType: 'application/json',
+ data: JSON.stringify(postData),
+ success : function(data){
+ $scope.$apply(function(){$scope.role=data.role;});
+ },
+ error : function(data){
+ alert("Error while saving.");
+ }
+ });
+ } else {
+ availableRoleFunction.selected=true;
+ }
+ } else {
+ //add role function
+ if(role.id==null){
+ $scope.role.roleFunctions.push(availableRoleFunction);
+ return;
+ }
+ var uuu = "role/addRoleFunction.htm?role_id=${param.role_id}";
+
+ var postData={roleFunction:availableRoleFunction};
+ $.ajax({
+ type : 'POST',
+ url : uuu,
+ dataType: 'json',
+ contentType: 'application/json',
+ data: JSON.stringify(postData),
+ success : function(data){
+ $scope.$apply(function(){$scope.role=data.role;});
+ },
+ error : function(data){
+ alert("Error while saving.");
+ }
+ });
+ }
+
+
+ };
+
+ $scope.toggleChildRole = function(selected,availableRole) {
+ //alert('toggleRole: '+selected);
+
+ if(!selected) {
+ //remove role
+ if(role.id==null){
+ var index = $scope.role.childRoles.indexOf(availableRole);
+ if(index>=0)
+ $scope.role.childRoles.splice(index, 1);
+ return;
+ }
+ var uuu = "role/removeChildRole.htm?role_id=${param.role_id}";
+ if (confirm("You are about to remove the child role "+availableRole.name+" from the role for "+$scope.role.name+". Do you want to continue?")) {
+
+ var postData={childRole:availableRole};
+ $.ajax({
+ type : 'POST',
+ url : uuu,
+ dataType: 'json',
+ contentType: 'application/json',
+ data: JSON.stringify(postData),
+ success : function(data){
+ console.log('role',data.role);
+ $scope.$apply(function(){$scope.role=data.role;});
+ },
+ error : function(data){
+ alert("Error while saving.");
+ }
+ });
+ } else {
+ availableRole.selected=true;
+ }
+ } else {
+ //add role
+ if(role.id==null){
+ $scope.role.childRoles.push(availableRole);
+ return;
+ }
+ var uuu = "role/addChildRole.htm?role_id=${param.role_id}";
+
+ var postData={childRole:availableRole};
+ $.ajax({
+ type : 'POST',
+ url : uuu,
+ dataType: 'json',
+ contentType: 'application/json',
+ data: JSON.stringify(postData),
+ success : function(data){
+ $scope.$apply(function(){$scope.role=data.role;});
+ },
+ error : function(data){
+ alert("Error while saving.");
+ }
+ });
+ }
+
+
+ };
+
+
+ $scope.close = function() {
+ console.log('role', $scope.role);
+ $modalInstance.close({role:$scope.role});
+ };
+
+}
+
+
+</script>
diff --git a/ecomp-portal-BE/war/WEB-INF/fusion/jsp/popup_modal_rolefunction.html b/ecomp-portal-BE/war/WEB-INF/fusion/jsp/popup_modal_rolefunction.html
new file mode 100644
index 00000000..958333de
--- /dev/null
+++ b/ecomp-portal-BE/war/WEB-INF/fusion/jsp/popup_modal_rolefunction.html
@@ -0,0 +1,87 @@
+<!--
+ ================================================================================
+ 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.
+ ================================================================================
+ -->
+<script type="text/ng-template" id="edit_role_function_popup.html">
+ <div class="modal__informative font-showcase" style="width:400px;">
+ <div class="modal__header">
+ <h2 class="font-showcase-font-name" style="width: 500px;">{{label}}</h2>
+ </div>
+ <div class="divider-container"><hr> </div>
+ <div class="modal__content">
+ <div class="fn-ebz-container" >
+ <label class="fn-ebz-text-label"><sup><b>*</b></sup>Name:</label><br>
+ <input type="text" class="fn-ebz-text" ng-model="editRoleFunction.name"
+ maxlength="30" />
+ </div>
+ <br/>
+ <div class="fn-ebz-container" >
+ <label class="fn-ebz-text-label"><sup><b>*</b></sup>Code:</label><br>
+ <input type="text" class="fn-ebz-text" ng-model="editRoleFunction.code" ng-disabled="disableCd"
+ maxlength="30" />
+ </div>
+ </div>
+ <div class="modal__footer">
+ <button class="button button--primary button--small" herf="javascript:void(0)" ng-click="saveRoleFunction(editRoleFunction);">Save</button>
+ <button class="button button--primary button--small" herf="javascript:void(0)" ng-click="close()">Close</button>
+ </div>
+ </div>
+</script>
+
+<script>
+
+var rolefunctionpopupController = function ($scope, $modalInstance, message){
+ if(message.availableRoleFunction==null)
+ $scope.label='Add Role Function'
+ else{
+ $scope.label='Edit Role Function'
+ $scope.disableCd=true;
+ }
+ $scope.editRoleFunction = message.availableRoleFunction;
+
+ $scope.saveRoleFunction = function(availableRoleFunction) {
+ var uuu = "role_function_list/saveRoleFunction.htm";
+ var postData={availableRoleFunction: availableRoleFunction};
+ $.ajax({
+ type : 'POST',
+ url : uuu,
+ dataType: 'json',
+ contentType: 'application/json',
+ data: JSON.stringify(postData),
+ success : function(data){
+ $scope.$apply(function(){
+ //$scope.availableRoleFunctions=[];$scope.$apply();
+ $scope.availableRoleFunctions=data.availableRoleFunctions;});
+ //alert("Update Successful.") ;
+ console.log($scope.availableRoleFunctions);
+
+ //$scope.editRoleFunction = null;
+ $modalInstance.close({availableRoleFunctions:$scope.availableRoleFunctions});
+ },
+ error : function(data){
+ alert("Error while saving.");
+ }
+ });
+ };
+
+ $scope.close = function() {
+ $modalInstance.close();
+ };
+}
+
+</script>
diff --git a/ecomp-portal-BE/war/WEB-INF/fusion/jsp/post_search.jsp b/ecomp-portal-BE/war/WEB-INF/fusion/jsp/post_search.jsp
new file mode 100644
index 00000000..3e0b16ab
--- /dev/null
+++ b/ecomp-portal-BE/war/WEB-INF/fusion/jsp/post_search.jsp
@@ -0,0 +1,370 @@
+<%--
+ ================================================================================
+ 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.
+ ================================================================================
+ --%>
+<%@ page import="java.util.*" %>
+<%@ page import="com.fasterxml.jackson.databind.ObjectMapper" %>
+<%@ page import="org.json.JSONObject" %>
+
+<%-- <%@ include file="/WEB-INF/fusion/jsp/include.jsp"%> --%>
+
+<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>
+<%@ taglib prefix="fmt" uri="http://java.sun.com/jsp/jstl/fmt" %>
+<%@ taglib prefix="fn" uri="http://java.sun.com/jsp/jstl/functions" %>
+
+<link rel="stylesheet" type="text/css" href="static/fusion/css/jquery-ui.css">
+
+<script src= "static/ebz/angular_js/angular.js"></script>
+<script src= "static/ebz/angular_js/angular-sanitize.js"></script>
+<script src="static/ebz/sandbox/att-abs-tpls.js" type="text/javascript"></script>
+<script src= "static/ebz/angular_js/app.js"></script>
+<script src= "static/ebz/angular_js/gestures.js"></script>
+<script src="static/js/jquery-1.10.2.js"></script>
+<script src="static/js/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>
+
+<div ng-controller="postSearchController" >
+
+<h1 class="heading1" style="margin-top:20px;">WEBPHONE Search</h1>
+ <%-- <h3>
+ <div class="pageTitle"><fmt:message key="post-search.title"/></div>
+ </h3> --%>
+ <br>
+ Please enter search criteria below:<br/>
+
+ <div class="fn-ebz-container">
+ Last Name:<br/>
+ <input class="fn-ebz-text" type="text" ng-model="postSearchBean.lastName" value="" size="25">
+ </div>
+
+ <div class="fn-ebz-container">
+ First Name:<br/>
+ <input class="fn-ebz-text" type="text" ng-model="postSearchBean.firstName" value="" size="25">
+ </div>
+
+ <div class="fn-ebz-container">
+ ATTUID:<br/>
+ <input class="fn-ebz-text" type="text" ng-model="postSearchBean.sbcid" value="" size="25">
+ </div>
+
+ <div class="fn-ebz-container">
+ Manager ATTUID:<br/>
+ <input class="fn-ebz-text" type="text" ng-model="postSearchBean.managerAttuid" value="" size="25">
+ </div>
+ <br>
+ <div class="fn-ebz-container">
+ Organization:<br/>
+ <input class="fn-ebz-text" type="text" ng-model="postSearchBean.orgCode" value="" size="25">
+ </div>
+
+ <div class="fn-ebz-container">
+ Email:<br/>
+ <input class="fn-ebz-text" type="text" ng-model="postSearchBean.email" value="" size="25">
+ </div>
+ <br>
+<!-- Sort By: <br/>
+ <div class="fn-ebz-container" >
+
+ <div class="fn-ebz-container">
+ <div class="form-field" att-select="sortByList" ng-model="postSearchBean.sortBy1"></div>
+ </div>
+ </div>
+
+
+
+
+ <div class="fn-ebz-container" >
+ <br/>
+ &nbsp;
+
+ <div class="fn-ebz-container">
+ <div class="form-field" att-select="sortByList" ng-model="postSearchBean.sortBy2"></div>
+ </div>
+ </div>
+
+
+ <div class="fn-ebz-container" >
+ <br/> &nbsp;
+
+ <div class="fn-ebz-container">
+ <div class="form-field" att-select="sortByList" ng-model="postSearchBean.sortBy3"></div>
+ </div>
+ </div> -->
+ <div>
+ <input att-button btn-type="primary" size="small" class="button" type="submit" value="Search" ng-click="search(postSearchBean);" />
+
+ <input att-button btn-type="primary" size="small" class="button" type="submit" value="Reset" ng-click="reset();"/>
+ </div>
+ <br>
+ {{noResultsString}}
+ <div ng-if="profileList.length != 0">
+ <table att-table table-data="profileList" view-per-page="viewPerPage" current-page="currentPage" search-category="searchCategory" search-string="searchString" total-page="totalPage">
+ <thead att-table-row type="header" >
+ <tr>
+ <th att-table-header width="5%" align="left">No</th>
+ <th att-table-header width="30%" key="lastName" align="left">Name</th>
+ <th att-table-header width="5%" key="sbcid" align="left">ATTUID</th>
+ <th att-table-header width="10%" key="orgCode" align="left">Organization</th>
+ <th att-table-header width="20%" align="left">Phone</th>
+ <th att-table-header width="20%" key="email" align="left">Email</th>
+ <th att-table-header width="10%" align="left">Import?</th>
+ </tr>
+ </thead>
+
+ <tbody att-table-row type="body" row-repeat="profile in profileList" style="max-height: 980px;" ><!-- background colors will alternate not properly with multiple tbody-->
+ <tr >
+ <td att-table-body width="5%" align="left">
+ {{$index + 1}}
+ </td>
+ <td att-table-body width="30%" align="left">
+ <div ng-if="ngexistingUsers[profile.sbcid] == null">
+ {{profile.lastName}},&nbsp;{{profile.firstName}}
+ </div>
+ <div ng-if="ngexistingUsers[profile.sbcid] != null">
+ <a href="profile.htm?profile_id={{ngexistingUsers[profile.sbcid]}}" alt="View/Edit Profile">
+ {{profile.lastName}},&nbsp;{{profile.firstName}}
+ </a>
+ </div>
+
+ </td>
+ <td att-table-body width="5%" align="left">
+ {{profile.sbcid}}
+ </td>
+ <td att-table-body width="10%" align="left">
+ {{profile.orgCode}}
+ </td>
+ <td att-table-body width="20%" align="left">
+ {{profile.phone}}
+ </td>
+ <td att-table-body width="20%" align="left">
+ {{profile.email}}
+ </td>
+
+ <td att-table-body width="10%" align="left">
+ <div ng-if="ngexistingUsers[profile.sbcid] == null">
+ <div ng-click="toggleSelection(profile);">
+ <input name="selected" type="checkbox" ng-model="profile.selected" att-checkbox/>
+ </div>
+ </div>
+ <div ng-if="ngexistingUsers[profile.sbcid] != null">
+ Exists
+ </div>
+ </td>
+ </tr>
+ </tbody>
+ </table>
+ <div class="fn-ebz-container">
+ Rows Per Page:
+ <input class="fn-ebz-text" type="text" ng-model="viewPerPage" size="5" style="width: 47px;">
+ </div>
+ <div class="fn-ebz-container">
+ Current Page:
+ <input class="fn-ebz-text" type="text" ng-model="currentPage" size="5" style="width: 47px;">
+ </div>
+ <div class="fn-ebz-container">
+ Total Page(s):
+ <input class="fn-ebz-text" type="text" ng-model="totalPage" size="5" readonly="true" style="width: 47px;">
+ </div>
+
+ <div ng-if="profileList.length != 0">
+ <input att-button btn-type="primary" size="small" class="button" type="submit" value="Import" ng-click="process();"/>
+ </div>
+
+ </div>
+
+
+
+
+</div>
+<script>
+ app.controller('postSearchController', function ($scope){
+
+ $scope.viewPerPage = 200;
+ $scope.currentPage = 1;
+ $scope.totalPage;
+ $scope.searchCategory = "";
+ $scope.searchString = "";
+
+ $scope.noResultsString = "";
+
+ $scope.postSearchBean=${postSearchBean};
+ $scope.profileList=${profileList};
+ //console.log($scope.postSearchBean);
+
+ $scope.ngexistingUsers=${existingUsers};
+ console.log($scope.ngexistingUsers);
+
+ $scope.ocisortByList=${sortByList};
+ $scope.sortByList = [];
+ if($scope.ocisortByList)
+ $.each($scope.ocisortByList, function(i, a){
+ var sortBy = {"index":i, "value":a.value, "title":a.label};
+ $scope.sortByList.push(sortBy);
+ });
+ ;
+
+ $scope.search = function(postSearchBean) {
+ console.log(postSearchBean);
+ var uuu = "post_search/search";
+ var postData={postSearchBean:postSearchBean};
+ $.ajax({
+ type : 'POST',
+ url : uuu,
+ dataType: 'json',
+ contentType: 'application/json',
+ data: JSON.stringify(postData),
+ success : function(data){
+ $scope.$apply(function(){
+ $scope.profileList=data.postSearchBean.searchResult;
+ //$scope.postSearchBean={};
+ console.log($scope.profileList);
+ if($scope.profileList.length == 0)
+ $scope.noResultsString = "There is currently no one matching your search criteria.";
+ else
+ $scope.noResultsString = "";
+ });
+ },
+ error : function(data){
+ console.log(data);
+ alert("Error while searching: "+ data.responseText);
+ }
+ });
+
+ };
+
+ $scope.reset = function() {
+ $scope.postSearchBean={};
+ $scope.profileList=[];
+ $scope.noResultsString = "";
+ //console.log($scope.postSearchBean);
+ };
+
+ $scope.process = function() {
+ $scope.prepareProfileSelection();
+ var uuu = "post_search/process";
+ var postData={postSearchBean:$scope.postSearchBean};
+ $.ajax({
+ type : 'POST',
+ url : uuu,
+ dataType: 'json',
+ contentType: 'application/json',
+ data: JSON.stringify(postData),
+ success : function(data){
+ $scope.$apply(function(){
+ $scope.profileList=data.postSearchBean.searchResult;
+ //$scope.postSearchBean={};
+ $scope.ngexistingUsers=data.existingUsers;
+ $scope.postSearchBean.selected=null;
+ });
+ },
+ error : function(data){
+ console.log(data);
+ alert("Error while searching: "+ data.responseText);
+ }
+ });
+
+ };
+ $scope.importProfileList=[];
+ $scope.toggleSelection = function(profile) {
+ if(profile.selected)
+ $scope.importProfileList.push(profile);
+ else{
+ var index = $scope.importProfileList.indexOf(profile);
+ if(index>=0)
+ $scope.importProfileList.splice(index, 1);
+ }
+ };
+
+ $scope.prepareProfileSelection = function() {
+ if($scope.importProfileList)
+ $.each($scope.importProfileList, function(i, profile){
+ $scope.preparePostSearchBean(profile);
+ });
+ ;
+ }
+
+ $scope.preparePostSearchBean = function(profile) {
+ //console.log('Importing: '+profile.sbcid);
+ //console.log('ngexistinguser:'+$scope.ngexistingUsers[profile.sbcid])
+ if($scope.postSearchBean.selected==null){
+ $scope.postSearchBean.selected=[];
+ $scope.postSearchBean.postSbcid=[];
+ $scope.postSearchBean.postHrid=[];
+ $scope.postSearchBean.postFirstName=[];
+ $scope.postSearchBean.postLastName=[];
+ $scope.postSearchBean.postOrgCode=[];
+ $scope.postSearchBean.postPhone=[];
+ $scope.postSearchBean.postEmail=[];
+ $scope.postSearchBean.postAddress1=[];
+ $scope.postSearchBean.postAddress2=[];
+ $scope.postSearchBean.postCity=[];
+ $scope.postSearchBean.postState=[];
+ $scope.postSearchBean.postZipCode=[];
+ $scope.postSearchBean.postLocationClli=[];
+ $scope.postSearchBean.postBusinessCountryCode=[];
+ $scope.postSearchBean.postBusinessCountryName=[];
+ $scope.postSearchBean.postDepartment=[];
+ $scope.postSearchBean.postDepartmentName=[];
+ $scope.postSearchBean.postBusinessUnit=[];
+ $scope.postSearchBean.postBusinessUnitName=[];
+ $scope.postSearchBean.postJobTitle=[];
+ $scope.postSearchBean.postManagerAttuid=[];
+ $scope.postSearchBean.postCommandChain=[];
+ $scope.postSearchBean.postCompanyCode=[];
+ $scope.postSearchBean.postCompany=[];
+ $scope.postSearchBean.postCostCenter=[];
+ $scope.postSearchBean.postSiloStatus=[];
+ $scope.postSearchBean.postFinancialLocCode=[];
+ }
+
+ $scope.postSearchBean.selected.push(profile.sbcid);
+ $scope.postSearchBean.postSbcid.push(profile.sbcid);
+ $scope.postSearchBean.postHrid.push(profile.hrid);
+ $scope.postSearchBean.postFirstName.push(profile.firstName);
+ $scope.postSearchBean.postLastName.push(profile.lastName);
+ $scope.postSearchBean.postOrgCode.push(profile.orgCode);
+ $scope.postSearchBean.postPhone.push(profile.phone);
+ $scope.postSearchBean.postEmail.push(profile.email);
+ $scope.postSearchBean.postAddress1.push(profile.address1);
+ $scope.postSearchBean.postAddress2.push(profile.address2);
+ $scope.postSearchBean.postCity.push(profile.city);
+ $scope.postSearchBean.postState.push(profile.state);
+ if(profile.zipCodeSuffix==null)
+ $scope.postSearchBean.postZipCode.push(profile.zipCode);
+ else
+ $scope.postSearchBean.postZipCode.push(profile.zipCode+'-'+profile.zipCodeSuffix);
+ $scope.postSearchBean.postLocationClli.push(profile.locationClli);
+ $scope.postSearchBean.postBusinessCountryCode.push(profile.businessCountryCode);
+ $scope.postSearchBean.postBusinessCountryName.push(profile.businessCountryName);
+ $scope.postSearchBean.postDepartment.push(profile.department);
+ $scope.postSearchBean.postDepartmentName.push(profile.departmentName);
+ $scope.postSearchBean.postBusinessUnit.push(profile.businessUnit);
+ $scope.postSearchBean.postBusinessUnitName.push(profile.businessUnitName);
+ $scope.postSearchBean.postJobTitle.push(profile.jobTitle);
+ $scope.postSearchBean.postManagerAttuid.push(profile.managerAttuid);
+ $scope.postSearchBean.postCommandChain.push(profile.commandChain);
+ $scope.postSearchBean.postCompanyCode.push(profile.companyCode);
+ $scope.postSearchBean.postCompany.push(profile.company);
+ $scope.postSearchBean.postCostCenter.push(profile.costCenter);
+ $scope.postSearchBean.postSiloStatus.push(profile.siloStatus);
+ $scope.postSearchBean.postFinancialLocCode.push(profile.financialLocCode);
+ };
+
+ });
+</script>
diff --git a/ecomp-portal-BE/war/WEB-INF/fusion/jsp/profile.jsp b/ecomp-portal-BE/war/WEB-INF/fusion/jsp/profile.jsp
new file mode 100644
index 00000000..7e10a213
--- /dev/null
+++ b/ecomp-portal-BE/war/WEB-INF/fusion/jsp/profile.jsp
@@ -0,0 +1,442 @@
+<%--
+ ================================================================================
+ 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.
+ ================================================================================
+ --%>
+<%@ page import="org.openecomp.portalsdk.core.domain.User"%>
+<%@ page import="org.openecomp.portalsdk.core.web.support.UserUtils"%>
+
+<%@page import="org.openecomp.portalsdk.core.web.support.ControllerProperties"%>
+<%@ taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c" %>
+<%@ taglib prefix="fn" uri="http://java.sun.com/jsp/jstl/functions" %>
+
+<link rel="stylesheet" type="text/css" href="static/fusion/css/jquery-ui.css">
+
+<script src= "static/ebz/angular_js/angular.js"></script>
+<script src= "static/ebz/angular_js/angular-sanitize.js"></script>
+<script src="static/ebz/sandbox/att-abs-tpls.js" type="text/javascript"></script>
+<script src= "static/ebz/angular_js/app.js"></script>
+<script src= "static/ebz/angular_js/gestures.js"></script>
+
+<script src="static/js/jquery-1.10.2.js"></script>
+<script src="static/js/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>
+
+
+
+<link rel="stylesheet" type="text/css" href="static/ebz/fn-ebz.css" >
+<link rel="stylesheet" type="text/css" href="static/ebz/sandbox.css" >
+<link rel="stylesheet" type="text/css" href="static/ebz/sandbox/sandbox-base.css" >
+<link rel="stylesheet" type="text/css" href="static/ebz/sandbox/sandbox-buttons.css" >
+<link rel="stylesheet" type="text/css" href="static/ebz/sandbox/sandbox-datepicker.css" >
+<link rel="stylesheet" type="text/css" href="static/ebz/sandbox/sandbox-forms.css" >
+<link rel="stylesheet" type="text/css" href="static/ebz/sandbox/sandbox-slider.css" >
+<link rel="stylesheet" type="text/css" href="static/ebz/sandbox/sandbox-tables.css" >
+<link rel="stylesheet" type="text/css" href="static/ebz/sandbox/ui-charts-tpls.css" >
+<link rel="stylesheet" type="text/css" href="static/ebz/icons/style.css" >
+<%@ include file="/WEB-INF/fusion/jsp/include.jsp"%>
+
+<div class="pageTitle">
+ <h3>
+ <c:choose>
+ <c:when test="${!empty profileId}">
+ <h1 class="heading1" style="margin-top:20px;">Profile Edit</h1>
+ </c:when>
+ <c:otherwise>
+ <h1 class="heading1" style="margin-top:20px;">Profile Edit</h1>
+ </c:otherwise>
+ </c:choose>
+ </h3>
+</div>
+
+<div ng-controller="profileController" >
+
+ Please edit the profile details below:&nbsp;<br><br>
+
+ <div class="fn-ebz-container" >
+ <label class="fn-ebz-text-label"><sup><b>*</b></sup>First Name:</label><BR>
+ <input type="text" class="fn-ebz-text" ng-model="profile.firstName"
+ maxlength="30" />
+ </div>
+
+ <div class="fn-ebz-container" >
+ <label class="fn-ebz-text-label"><sup><b>*</b></sup>Last Name:</label><BR>
+ <input type="text" class="fn-ebz-text" ng-model="profile.lastName"
+ maxlength="30" />
+ </div>
+
+ <div class="fn-ebz-container" >
+ <label class="fn-ebz-text-label">OrgUserId:</label><BR>
+ <input type="text" class="fn-ebz-text" ng-model="profile.orgUserId"
+ maxlength="30" style="margin-right:0px;"/>
+ </div>
+
+ <div class="fn-ebz-container" >
+ <label class="fn-ebz-text-label">Manager OrgUserId:</label><BR>
+ <input type="text" class="fn-ebz-text" ng-model="profile.orgManagerUserId"
+ maxlength="30" style="margin-right:0px;"/>
+ </div>
+<BR>
+ <div class="fn-ebz-container" >
+ <label class="fn-ebz-text-label">Login Id:</label><BR>
+ <input type="text" class="fn-ebz-text" ng-model="profile.loginId"
+ maxlength="30" />
+ </div>
+
+ <div class="fn-ebz-container" >
+ <label class="fn-ebz-text-label">Password:</label><BR>
+ <input type="password" att-form-field ng-model="profile.loginPwd"
+ maxlength="30" />
+ </div>
+
+ <div class="fn-ebz-container" >
+ <label class="fn-ebz-text-label"><sup><b>*</b></sup>Phone:</label><BR>
+ <input type="text" class="fn-ebz-text" ng-model="profile.phone"
+ maxlength="30" />
+ </div>
+
+ <div class="fn-ebz-container" >
+ <label class="fn-ebz-text-label">Fax:</label><BR>
+ <input type="text" class="fn-ebz-text" ng-model="profile.fax"
+ maxlength="30" />
+ </div>
+<BR>
+ <div class="fn-ebz-container" >
+ <label class="fn-ebz-text-label">Cellular:</label><BR>
+ <input type="text" class="fn-ebz-text" ng-model="profile.cellular"
+ maxlength="30" />
+ </div>
+
+ <div class="fn-ebz-container" >
+ <label class="fn-ebz-text-label"><sup><b>*</b></sup>Email:</label><BR>
+ <input type="text" class="fn-ebz-text" ng-model="profile.email"
+ maxlength="30" />
+ </div>
+
+ <div class="fn-ebz-container" >
+ <label class="fn-ebz-text-label">Address 1:</label><BR>
+ <input type="text" class="fn-ebz-text" ng-model="profile.address1"
+ maxlength="30" />
+ </div>
+
+ <div class="fn-ebz-container" >
+ <label class="fn-ebz-text-label">Address 2:</label><BR>
+ <input type="text" class="fn-ebz-text" ng-model="profile.address2"
+ maxlength="30" />
+ </div>
+<BR>
+ <div class="fn-ebz-container" >
+ <label class="fn-ebz-text-label">City:</label><BR>
+ <input type="text" class="fn-ebz-text" ng-model="profile.city"
+ maxlength="30" />
+ </div>
+
+ <div class="fn-ebz-container">
+ <label class="fn-ebz-text-label">State:</label><BR>
+ <div class="form-field" att-select="stateList.options" ng-model="stateList.selected"></div>
+ </div>
+
+ <div class="fn-ebz-container" >
+ <label class="fn-ebz-text-label">Zip Code:</label><BR>
+ <input type="text" class="fn-ebz-text" ng-model="profile.zipCode"
+ maxlength="30" />
+ </div>
+
+ <div class="fn-ebz-container">
+ <label class="fn-ebz-text-label">Country:</label><BR>
+ <div class="form-field" att-select="countries" ng-model="selectedCountry"></div>
+ </div>
+ <BR>
+ <div class="fn-ebz-container">
+ <label class="fn-ebz-text-label">Time Zone:</label><BR>
+ <div class="form-field" att-select="timeZones" ng-model="selectedTimeZone"></div>
+ </div>
+
+ <div align="left" >
+ <button type="submit" ng-click="saveProfile();" att-button
+ btn-type="primary" size="small">Save</button>
+ </div>
+
+<br>
+ <div class="pageTitle">
+ <label>Roles</label>
+ <a ng-click="addNewRolePopup();" class="icon-add" size="small"></a>
+
+ </div>
+
+ <table att-table table-data="profile.roles" view-per-page="viewPerPage" current-page="currentPage" search-category="searchCategory" search-string="searchString" total-page="totalPage">
+<!-- <table border="1" class="hovertable_1"> -->
+ <thead att-table-row type="header">
+ <tr>
+ <th att-table-header sortable="false" align="left" width="90%">Name</th>
+ <th att-table-header sortable="false" width="10%">Remove?</th>
+ </tr>
+ </thead>
+ <tbody att-table-row type="body" row-repeat="role in profile.roles" style="max-height: 980px;" ><!-- background colors will alternate not properly with multiple tbody-->
+<!-- <tr ng-repeat="role in profile.roles track by role.id"> -->
+ <tr>
+ <td att-table-body width="90%" >{{ role.name }}</td>
+ <td att-table-body width="10%">
+ <a ng-click="removeRole(role);" ><img src="static/fusion/images/deleteicon.gif"></a>
+ </td>
+ </tr>
+ </tbody>
+ </table>
+
+
+ <div id="dialog" title="Select Roles">
+ <table table-data="availableRoles" att-table >
+ <thead att-table-row type="header">
+ <tr>
+ <th att-table-header sortable="false" width="10%"> </th>
+ <th att-table-header sortable="false" width="90%">Role</th>
+ </tr>
+ </thead>
+
+ <tbody att-table-row type="body" row-repeat="availableRole in availableRoles" style="max-height: 980px;" ><!-- background colors will alternate not properly with multiple tbody-->
+ <tr>
+ <td att-table-body width="10%">
+ <div ng-click="toggleRole(availableRole.selected,availableRole);">
+ <input type="checkbox" ng-model="availableRole.selected" att-toggle-main>
+ </div>
+ </td>
+ <td att-table-body width="90%">{{ availableRole.name }}</td>
+ </tr>
+ </tbody>
+ </table>
+ </div>
+
+</div>
+
+
+
+<script>
+app.controller('profileController', function ($scope){
+
+ $scope.profile=${model.profile};
+ $scope.sbcid=$scope.profile.sbcid;
+ $scope.managerAttuid=$scope.profile.managerAttuid;
+
+ $scope.viewPerPage = 2;
+ $scope.currentPage = 1;
+ $scope.totalPage;
+ $scope.searchCategory = "";
+ $scope.searchString = "";
+
+ $( "#dialog" ).hide();
+
+ $scope.ociavailableRoles=${model.availableRoles};
+ //modalService.showFailure('Error','') ;
+ $scope.availableRoles = [];
+ if($scope.ociavailableRoles)
+ $.each($scope.ociavailableRoles, function(i, a){
+ var availableRole = a;
+ availableRole.selected = false;
+ $.each($scope.profile.roles, function(j, b){
+ if(a.id === b.id) {
+ availableRole.selected = true;
+ }
+ });
+ $scope.availableRoles.push(availableRole);
+ });
+ ;
+
+ $scope.ociTimeZones = ${model.timeZones};
+ $scope.timeZones = [];
+ $scope.selectedTimeZone = null;
+ if($scope.ociTimeZones){
+ $.each($scope.ociTimeZones, function(i, a){
+ var timeZone = {"index":i, "value":a.value, "title":a.label};
+ $scope.timeZones.push(timeZone);
+ if($scope.profile.timeZoneId !== null && a.value === $scope.profile.timeZoneId.toString()){
+ $scope.selectedTimeZone = timeZone;
+ }
+ });
+ };
+
+ $scope.ociCountries = ${model.countries};
+ $scope.countries = [];
+ $scope.selectedCountry = null;
+ //alert($scope.ociCountries[0].label);
+ if($scope.ociCountries)
+ $.each($scope.ociCountries, function(i, a){
+ var country = {"index":i, "value":a.value, "title":a.label};
+ $scope.countries.push(country);
+ if(a.value === $scope.profile.country){
+ $scope.selectedCountry = country;
+ }
+ });
+ ;
+
+ var stateList=${model.stateList};
+ //alert(stateList[0].label);
+ stateList = stateList== null? []: stateList;
+ var selectedState= $scope.profile.state ? $scope.profile.state:"";
+ $scope.stateList = initDropdownWithLookUp(stateList,selectedState );
+
+ $scope.saveProfile = function() {
+ var uuu = "profile/saveProfile?profile_id=${param.profile_id}";
+ var postData={profile: $scope.profile,
+ selectedCountry:$scope.selectedCountry!=null?$scope.selectedCountry.value:"",
+ selectedState:$scope.stateList.selected!=null?$scope.stateList.selected.value:"",
+ selectedTimeZone:$scope.selectedTimeZone!=null?$scope.selectedTimeZone.value:""
+ };
+ $.ajax({
+ type : 'POST',
+ url : uuu,
+ dataType: 'json',
+ contentType: 'application/json',
+ data: JSON.stringify(postData),
+ success : function(data){
+ alert("Update Successful.") ;
+ },
+ error : function(data){
+ alert("Error while saving.");
+ }
+ });
+ };
+
+ $scope.addNewRolePopup = function(role) {
+ $( "#dialog" ).dialog({
+ modal: true
+ });
+ };
+
+ $scope.toggleRole = function(selected,availableRole) {
+ //alert('toggleRole: '+selected);
+ if(!selected) {
+ //remove role
+ var uuu = "profile/removeRole?profile_id=${param.profile_id}";
+ if (confirm("You are about to remove the role "+availableRole.name+" from the profile for "+$scope.profile.firstName+" "+$scope.profile.lastName+". Do you want to continue?")) {
+
+ var postData={role:availableRole};
+ $.ajax({
+ type : 'POST',
+ url : uuu,
+ dataType: 'json',
+ contentType: 'application/json',
+ data: JSON.stringify(postData),
+ success : function(data){
+ $scope.$apply(function(){$scope.profile=data;});
+ },
+ error : function(data){
+ alert("Error while saving.");
+ }
+ });
+ } else {
+ availableRole.selected=true;
+ }
+ } else {
+ //add role
+ var uuu = "profile/addNewRole?profile_id=${param.profile_id}";
+ if (confirm("You are about to add the role "+availableRole.name+" from the profile for "+$scope.profile.firstName+" "+$scope.profile.lastName+". Do you want to continue?")) {
+ var postData={role:availableRole};
+ $.ajax({
+ type : 'POST',
+ url : uuu,
+ dataType: 'json',
+ contentType: 'application/json',
+ data: JSON.stringify(postData),
+ success : function(data){
+ $scope.$apply(function(){$scope.profile=data;});
+ },
+ error : function(data){
+ alert("Error while saving.");
+ }
+ });
+ }
+ }
+
+
+ };
+
+ $scope.removeRole = function(role) {
+ if (confirm("You are about to remove the role "+role.name+" from the profile for "+$scope.profile.firstName+" "+$scope.profile.lastName+". Do you want to continue?")) {
+ //alert('deleted'+role.name);
+ var uuu = "profile/removeRole?profile_id=${param.profile_id}";
+ var postData={role:role};
+ $.ajax({
+ type : 'POST',
+ url : uuu,
+ dataType: 'json',
+ contentType: 'application/json',
+ data: JSON.stringify(postData),
+ success : function(data){
+ $scope.$apply(function(){
+ $scope.profile=data;
+ $.each($scope.availableRoles, function(k, c){
+ if(c.id === role.id) {
+ c.selected = false;
+ }
+ });
+ });
+
+ },
+ error : function(data){
+ alert("Error while saving.");
+ }
+ });
+ }
+
+ };
+
+ function initDropdownWithLookUp(arr,selectedValue){
+ var dropdownArray=[];
+ var selected = null;
+ if(arr){
+ for(var i = 0,l = arr.length; i < l; i++) {
+ var option = {
+ "index" : i ,
+ "value" : arr[i].value,
+ "title" : arr[i].label
+ };
+ dropdownArray.push(option);
+ if(arr[i].value === selectedValue){
+ selected = option;
+ }
+ }
+ }
+ var dropDown={};
+ dropDown.options = dropdownArray;
+ dropDown.selected = selected;
+ return dropDown;
+ };
+
+ $scope.doRolePopup = function() {
+ var modalInstance = $modal.open({
+ templateUrl: 'roles_popup.html',
+ controller: 'rolepopupController',
+ resolve: {
+ message: function () {
+ var message ={
+ availableRoles: $scope.availableRoles
+ };
+ return message;
+ }
+ }
+ });
+ modalInstance.result.then(function (opts) {
+ if(opts!=null){
+ $scope.profile=opts.profile;
+ }
+ });
+ }
+
+
+});
+</script>
diff --git a/ecomp-portal-BE/war/WEB-INF/fusion/jsp/profile_search.jsp b/ecomp-portal-BE/war/WEB-INF/fusion/jsp/profile_search.jsp
new file mode 100644
index 00000000..e7ad5762
--- /dev/null
+++ b/ecomp-portal-BE/war/WEB-INF/fusion/jsp/profile_search.jsp
@@ -0,0 +1,100 @@
+<%--
+ ================================================================================
+ 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.
+ ================================================================================
+ --%>
+<script src= "static/ebz/angular_js/angular.js"></script>
+<script src= "static/ebz/angular_js/angular-sanitize.js"></script>
+
+<script src= "static/ebz/angular_js/app.js"></script>
+<script src= "static/ebz/angular_js/gestures.js"></script>
+
+<script src="static/js/jquery-1.10.2.js"></script>
+<script src="static/js/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="static/ebz/sandbox/att-abs-tpls.js" type="text/javascript"></script>
+<%@ include file="/WEB-INF/fusion/jsp/popup_modal.html" %>
+<div ng-controller="profileSearchController">
+ <div>
+ <h1 class="heading1" style="margin-top:20px;">Profile Search</h1>
+ <div style="margin-top:30px">
+ <table att-table table-data="tableData" view-per-page="viewPerPage" current-page="currentPage" search-category="searchCategory" search-string="searchString" total-page="totalPage">
+
+ <thead att-table-row type="header">
+ <tr>
+ <th att-table-header key="id">User ID</th>
+ <th att-table-header key="last_name">Last Name</th>
+ <th att-table-header key="first_name">First Name</th>
+ <th att-table-header key="email">Email</th>
+ <th att-table-header key="sbcid">ATTUID</th>
+ <th att-table-header key="manager_attuid">Manager ATTUID</th>
+ <th att-table-header >Edit</th>
+ <th att-table-header key="active">Active?</th>
+ </tr>
+ </thead>
+ <tbody att-table-row type="body" row-repeat="rowData in tableData">
+ <tr>
+ <td att-table-body >{{rowData.id}}</td>
+ <td att-table-body >{{rowData.lastName}}</td>
+ <td att-table-body >{{rowData.firstName}}</td>
+ <td att-table-body >{{rowData.email}}</td>
+ <td att-table-body >{{rowData.sbcid}}</td>
+ <td att-table-body >{{rowData.managerId}}</td>
+ <td att-table-body ><a href="" ng-click="editRow(rowData.id)" class="icon-edit" style="color: #888;font-size:20px;"></a></td>
+ <td att-table-body >
+ <div ng-click="toggleProfileActive(rowData.id)">
+ <input type="checkbox" ng-model="rowData.active" att-toggle-main>
+ </div>
+ </td>
+ </tr>
+ </tbody>
+ </table>
+ </div>
+ </div>
+ <input ng-model="currentPage"></input>
+</div>
+
+<script>
+app.controller("profileSearchController", function ($scope,$http,modalService, $modal) {
+ // Table Data
+ $scope.tableData=${model.profileList};
+ $scope.viewPerPage = 5;
+ $scope.scrollViewsPerPage = 2;
+ $scope.currentPage = 1;
+ $scope.totalPage;
+ $scope.searchCategory = "";
+ $scope.searchString = "";
+ modalService.showSuccess('','Modal Sample') ;
+ for(x in $scope.tableData){
+ if($scope.tableData[x].active_yn=='Y')
+ $scope.tableData[x].active_yn=true;
+ else
+ $scope.tableData[x].active_yn=false;
+ }
+ $scope.editRow = function(profileId){
+ window.location = 'profile?profile_id=' + profileId;
+ }
+
+ $scope.toggleProfileActive = function(profileId) {
+ if (confirm("You are about to change user's active status. Do you want to continue?")) {
+ $http.get("profile/toggleProfileActive?profile_id="+profileId).success(function(){});
+ }
+ };
+
+});
+</script>
diff --git a/ecomp-portal-BE/war/WEB-INF/fusion/jsp/role.jsp b/ecomp-portal-BE/war/WEB-INF/fusion/jsp/role.jsp
new file mode 100644
index 00000000..e1c100db
--- /dev/null
+++ b/ecomp-portal-BE/war/WEB-INF/fusion/jsp/role.jsp
@@ -0,0 +1,298 @@
+<%--
+ ================================================================================
+ 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.
+ ================================================================================
+ --%>
+
+<%@ include file="/WEB-INF/fusion/jsp/include.jsp"%> --%>
+
+<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>
+<%@ taglib prefix="fmt" uri="http://java.sun.com/jsp/jstl/fmt" %>
+<%@ taglib prefix="fn" uri="http://java.sun.com/jsp/jstl/functions" %>
+
+<link rel="stylesheet" type="text/css" href="static/ebz/sandbox.css" >
+<link rel="stylesheet" type="text/css" href="static/fusion/css/jquery-ui.css">
+
+<script src= "static/ebz/angular_js/angular.js"></script>
+<script src= "static/ebz/angular_js/angular-sanitize.js"></script>
+<script src= "static/ebz/angular_js/att_abs_tpls.js"></script>
+<script src= "static/ebz/angular_js/app.js"></script>
+<script src= "static/ebz/angular_js/gestures.js"></script>
+
+<script src="static/js/jquery-1.10.2.js"></script>
+<script src="static/js/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>
+<%@ include file="/WEB-INF/fusion/jsp/popup_modal_role.html" %>
+<style type="text/css">
+ .bc-style{
+ margin: 20px;
+ align: left;
+ }
+</style>
+<div class="bc-style">
+ <ul class="breadcrumb" >
+ <li><a href="welcome">Home</a></li>
+ <li><a href="role_list">Roles</a></li>
+ <li class="active">Role</li>
+ </ul>
+</div>
+<div class="pageTitle">
+<h3>
+ <c:choose>
+ <c:when test="${!empty param.role_id}">
+ <h1 class="heading1" style="margin-top:20px;">Role Edit</h1>
+ </c:when>
+ <c:otherwise>
+ <h1 class="heading1" style="margin-top:20px;">Role Create</h1>
+ </c:otherwise>
+ </c:choose>
+ </h3>
+</div>
+
+<div ng-controller="roleController" >
+
+ <br>
+ Please edit the role details below:&nbsp;<br>
+
+ <div class="fn-ebz-container" >
+ <label class="fn-ebz-text-label"><sup><b>*</b></sup>Name:</label><BR>
+ <input type="text" class="fn-ebz-text" ng-model="role.name"
+ maxlength="30" />
+ </div>
+
+ <div class="fn-ebz-container" >
+ <label class="fn-ebz-text-label">Priority:</label><BR>
+ <input type="text" class="fn-ebz-text" ng-model="role.priority"
+ maxlength="30" />
+ </div>
+
+ <div align="left" >
+ <button type="submit" ng-click="saveRole();" att-button
+ btn-type="primary" size="small">Save</button>
+ </div>
+
+ <br>
+ <div class="pageTitle">
+ <label>Role Functions</label>
+ <a ng-click="addNewRoleFunctionModalPopup();" class="icon-add" size="small"></a>
+ </div>
+
+ <table table-data="role.roleFunctions" att-table >
+ <thead att-table-row type="header">
+ <tr>
+ <th att-table-header sortable="false" align="left" width="90%">Name</th>
+ <th att-table-header sortable="false" width="10%">Remove?</th>
+ </tr>
+ </thead>
+ <tbody att-table-row type="body" row-repeat="roleFunction in role.roleFunctions track by roleFunction.code" style="max-height: 980px;" ><!-- background colors will alternate not properly with multiple tbody-->
+ <tr>
+ <td att-table-body width="90%" >{{ roleFunction.name }}</td>
+ <td att-table-body width="10%">
+ <div ng-click="removeRoleFunction(roleFunction);" style="font-size:20px;"><a href="javascript:void(0)" class="icon-trash"></a></div>
+ </td>
+ </tr>
+ </tbody>
+ </table>
+ <a href="role_function_list.htm">Manage Role Functions</a><br><br>
+
+ <div class="pageTitle">
+ <label>Child Roles</label>
+ <a ng-click="addNewChildRoleModalPopup();" class="icon-add" size="small"></a>
+ </div>
+
+ <table table-data="role.childRoles" att-table >
+ <thead att-table-row type="header">
+ <tr>
+ <th att-table-header sortable="false" align="left" width="90%">Name</th>
+ <th att-table-header sortable="false" width="10%">Remove?</th>
+ </tr>
+ </thead>
+ <tbody att-table-row type="body" row-repeat="role in role.childRoles track by role.id" style="max-height: 980px;" >
+ <tr>
+ <td att-table-body width="90%" >{{ role.name }}</td>
+ <td att-table-body width="10%">
+ <div ng-click="removeChildRole(role);" style="font-size:20px;"><a href="javascript:void(0)" class="icon-trash"></a></div>
+ </td>
+ </tr>
+ </tbody>
+ </table>
+
+ <div id="dialogChildRole" title="Select Child Roles">
+ <table table-data="availableRoles" att-table>
+ <thead att-table-row type="header">
+ <tr>
+ <th att-table-header sortable="false" width="10%"> </th>
+ <th att-table-header sortable="false" width="90%">Role</th>
+ </tr>
+ </thead>
+ <tbody att-table-row type="body" row-repeat="availableRole in availableRoles track by availableRole.id" style="max-height: 980px;" ><!-- background colors will alternate not properly with multiple tbody-->
+ <tr>
+ <td att-table-body width="10%">
+ <div ng-click="toggleChildRole(availableRole.selected,availableRole);">
+ <input type="checkbox" ng-model="availableRole.selected" att-toggle-main>
+ </div>
+ </td>
+ <td att-table-body width="90%">{{ availableRole.name }}</td>
+
+ </tr>
+ </tbody>
+ </table>
+ </div>
+</div>
+
+
+
+<script>
+app.controller('roleController', function ($scope, modalService, $modal){
+ $scope.role=${role};
+ console.log($scope.role);
+
+ $( "#dialogRoleFunction" ).hide();
+ $( "#dialogChildRole" ).hide();
+
+ $scope.ociavailableRoleFunctions=${availableRoleFunctions};
+
+ $scope.availableRoleFunctions = [];
+ if($scope.ociavailableRoleFunctions)
+ $.each($scope.ociavailableRoleFunctions, function(i, a){
+ var availableRoleFunction = a;
+ availableRoleFunction.selected = false;
+ $.each($scope.role.roleFunctions, function(j, b){
+ if(a.code === b.code) {
+ availableRoleFunction.selected = true;
+ }
+ });
+ $scope.availableRoleFunctions.push(availableRoleFunction);
+ });
+ ;
+
+ $scope.saveRole = function() {
+ var uuu = "role/saveRole.htm?role_id=${param.role_id}";
+ var postData={role: $scope.role, childRoles: $scope.role.childRoles, roleFunctions : $scope.role.roleFunctions};
+ $.ajax({
+ type : 'POST',
+ url : uuu,
+ dataType: 'json',
+ contentType: 'application/json',
+ data: JSON.stringify(postData),
+ success : function(data){
+ alert("Update Successful.") ;
+ },
+ error : function(data){
+ console.log(data);
+ alert("Error while saving.");
+ }
+ });
+ };
+
+ $scope.addNewRoleFunctionModalPopup = function() {
+ var modalInstance = $modal.open({
+ templateUrl: 'role_functions_popup.html',
+ controller: 'rolepopupController',
+ resolve: {
+ role: function () {
+ return $scope.role;
+ }
+ }
+ });
+ modalInstance.result.then(function(response){
+ console.log('response', response);
+ $scope.role=response.role;
+ });
+ };
+
+ $scope.addNewChildRoleModalPopup = function() {
+ var modalInstance = $modal.open({
+ templateUrl: 'child_roles_popup.html',
+ controller: 'rolepopupController',
+ resolve: {
+ role: function () {
+ return $scope.role;
+ }
+ }
+ });
+ modalInstance.result.then(function(response){
+ console.log('response', response);
+ $scope.role=response.role;
+ });
+ };
+
+
+
+ $scope.removeRoleFunction = function(roleFunction) {
+ if (confirm("You are about to remove the role function "+roleFunction.name+" from the role for "+$scope.role.name+". Do you want to continue?")) {
+ //alert('deleted'+role.name);
+ var uuu = "role/removeRoleFunction.htm?role_id=${param.role_id}";
+ var postData={roleFunction:roleFunction};
+ $.ajax({
+ type : 'POST',
+ url : uuu,
+ dataType: 'json',
+ contentType: 'application/json',
+ data: JSON.stringify(postData),
+ success : function(data){
+ $scope.$apply(function(){
+ $scope.role=data.role;
+ $.each($scope.availableRoleFunctions, function(k, c){
+ if(c.code === roleFunction.code) {
+ c.selected = false;
+ }
+ });
+ });
+
+ },
+ error : function(data){
+ alert("Error while saving.");
+ }
+ });
+ };
+
+ };
+
+ $scope.removeChildRole = function(childRole) {
+ if (confirm("You are about to remove the child role "+childRole.name+" from the role for "+$scope.role.name+". Do you want to continue?")) {
+ //alert('deleted'+role.name);
+ var uuu = "role/removeChildRole.htm?role_id=${param.role_id}";
+ var postData={childRole:childRole};
+ $.ajax({
+ type : 'POST',
+ url : uuu,
+ dataType: 'json',
+ contentType: 'application/json',
+ data: JSON.stringify(postData),
+ success : function(data){
+ $scope.$apply(function(){
+ $scope.role=data.role;
+ $.each($scope.availableRoles, function(k, c){
+ if(c.id === childRole.id) {
+ c.selected = false;
+ }
+ });
+ });
+
+ },
+ error : function(data){
+ alert("Error while saving.");
+ }
+ });
+ };
+
+ };
+
+});
+</script>
diff --git a/ecomp-portal-BE/war/WEB-INF/fusion/jsp/role_function_list.jsp b/ecomp-portal-BE/war/WEB-INF/fusion/jsp/role_function_list.jsp
new file mode 100644
index 00000000..51aea051
--- /dev/null
+++ b/ecomp-portal-BE/war/WEB-INF/fusion/jsp/role_function_list.jsp
@@ -0,0 +1,225 @@
+<%--
+ ================================================================================
+ 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.
+ ================================================================================
+ --%>
+
+<%-- <%@ include file="/WEB-INF/fusion/jsp/include.jsp" %> --%>
+
+<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>
+<%@ taglib prefix="fmt" uri="http://java.sun.com/jsp/jstl/fmt" %>
+<%@ taglib prefix="fn" uri="http://java.sun.com/jsp/jstl/functions" %>
+
+<link rel="stylesheet" type="text/css" href="static/ebz/sandbox.css" >
+<link rel="stylesheet" type="text/css" href="static/fusion/css/jquery-ui.css">
+
+<script src= "static/ebz/angular_js/angular.js"></script>
+<script src= "static/ebz/angular_js/angular-sanitize.js"></script>
+<script src= "static/ebz/angular_js/att_abs_tpls.js"></script>
+<script src= "static/ebz/angular_js/app.js"></script>
+<script src= "static/ebz/angular_js/gestures.js"></script>
+
+<script src="static/js/jquery-1.10.2.js"></script>
+<script src="static/js/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>
+<%@ include file="/WEB-INF/fusion/jsp/popup_modal_rolefunction.html" %>
+<div ng-controller="roleFunctionListController" >
+ <div class="pageTitle">
+
+ <h1 class="heading1" style="margin-top:20px;">Role Functions</h1>
+
+ <a ng-click="addNewRoleFunctionModalPopup();" class="icon-add" size="small" ></a>
+ <br><br>
+
+ </div>
+
+ <br>
+ Click on the edit icon to update a role function, the plus icon to add additional role functions, or the delete icon to remove them.
+ <br>
+ <div id="rolesTable" title="Role Functions">
+ <table att-table table-data="availableRoleFunctions" current-page="1">
+ <thead att-table-row type="header">
+ <tr>
+ <th att-table-header width="70%">Name</th>
+ <th att-table-header width="10%">Code</th>
+ <th att-table-header width="10%">Edit?</th>
+ <th att-table-header width="10%">Delete?</th>
+ </tr>
+ </thead>
+ <tbody att-table-row type="body" row-repeat="availableRoleFunction in availableRoleFunctions" style="max-height: 980px;" ><!-- background colors will alternate not properly with multiple tbody-->
+ <tr>
+ <td att-table-body width="70%">{{ availableRoleFunction.name }}</td>
+ <td att-table-body width="10%">{{ availableRoleFunction.code }}</td>
+ <td att-table-body width="10%">
+ <!-- <a ng-click="editRoleFunctionPopup(availableRoleFunction);" >
+ <img src="static/fusion/images/editicon.gif">
+ </a> -->
+ <div ng-click="editRoleFunctionModalPopup(availableRoleFunction);" style="font-size:20px;"><a href="javascript:void(0)" class="icon-edit"></a></div>
+ </td>
+ <td att-table-body width="10%">
+ <!-- <a ng-click="removeRole(availableRoleFunction);" ><img src="static/fusion/images/deleteicon.gif"></a> -->
+ <div ng-click="removeRole(availableRoleFunction);" style="font-size:20px;"><a href="javascript:void(0)" class="icon-trash"></a></div>
+ </td>
+ </tr>
+ </tbody>
+ </table>
+ </div>
+
+<!-- <div align="left" style="marin-bottom: 50px;"> -->
+<!-- <button type="submit" onClick="window.location='role_function.htm';" att-button -->
+<!-- btn-type="primary" size="small">Create</button> -->
+<!-- </div> -->
+
+ <div id="dialog" title="Add Role Function">
+
+ <div class="fn-ebz-container" >
+ <label class="fn-ebz-text-label"><sup><b>*</b></sup>Name:</label><br>
+ <input type="text" class="fn-ebz-text" ng-model="editRoleFunction.name"
+ maxlength="30" />
+ </div>
+ <br/>
+ <div class="fn-ebz-container" >
+ <label class="fn-ebz-text-label"><sup><b>*</b></sup>Code:</label><br>
+ <input type="text" class="fn-ebz-text" ng-model="editRoleFunction.code" ng-disabled="editRoleFunction.code!=null"
+ maxlength="30" />
+ </div>
+ <br/>
+ <button type="submit" ng-click="saveRoleFunction(editRoleFunction);" att-button
+ btn-type="primary" size="small">Save</button>
+
+ </div>
+
+</div>
+
+
+
+
+<script>
+app.controller('roleFunctionListController', function ($scope, modalService, $modal){
+ $( "#dialog" ).hide();
+ $scope.availableRoleFunctions=${availableRoleFunctions};
+
+
+ $scope.editRoleFunction = null;
+ var dialog = null;
+ $scope.editRoleFunctionPopup = function(availableRoleFunction) {
+ $scope.editRoleFunction = availableRoleFunction;
+ $( "#dialog" ).dialog({
+ modal: true
+ });
+ };
+
+ $scope.editRoleFunctionModalPopup = function(availableRoleFunction) {
+ $scope.editRoleFunction = availableRoleFunction;
+ var modalInstance = $modal.open({
+ templateUrl: 'edit_role_function_popup.html',
+ controller: 'rolefunctionpopupController',
+ resolve: {
+ message: function () {
+ var message = {
+ availableRoleFunction: $scope.editRoleFunction
+ };
+ return message;
+ }
+ }
+ });
+ modalInstance.result.then(function(response){
+ console.log('response', response);
+ $scope.availableRoleFunctions=response.availableRoleFunctions;
+ });
+ };
+
+ $scope.addNewRoleFunctionModalPopup = function(availableRoleFunction) {
+ $scope.editRoleFunction = null;
+ var modalInstance = $modal.open({
+ templateUrl: 'edit_role_function_popup.html',
+ controller: 'rolefunctionpopupController',
+ resolve: {
+ message: function () {
+ var message = {
+ availableRoleFunction: $scope.editRoleFunction
+ };
+ return message;
+ }
+ }
+ });
+ modalInstance.result.then(function(response){
+ console.log('response', response);
+ $scope.availableRoleFunctions=response.availableRoleFunctions;
+ });
+ };
+
+ $scope.addNewRoleFunctionPopup = function() {
+ $scope.editRoleFunction = null;
+ $( "#dialog" ).dialog({
+ modal: true
+ });
+ };
+
+ $scope.saveRoleFunction = function(availableRoleFunction) {
+ var uuu = "role_function_list/saveRoleFunction.htm";
+ var postData={availableRoleFunction: availableRoleFunction};
+ $.ajax({
+ type : 'POST',
+ url : uuu,
+ dataType: 'json',
+ contentType: 'application/json',
+ data: JSON.stringify(postData),
+ success : function(data){
+ $scope.$apply(function(){
+ $scope.availableRoleFunctions=[];$scope.$apply();
+ $scope.availableRoleFunctions=data.availableRoleFunctions;});
+ //alert("Update Successful.") ;
+ console.log($scope.availableRoleFunctions);
+
+ $scope.editRoleFunction = null;
+ $( "#dialog" ).dialog("close");
+ },
+ error : function(data){
+ alert("Error while saving.");
+ }
+ });
+ };
+
+
+ $scope.removeRole = function(availableRoleFunction) {
+ if (confirm("You are about to delete the role function "+availableRoleFunction.name+". Do you want to continue?")) {
+ //alert('deleted'+roleFunction.name);
+ var uuu = "role_function_list/removeRoleFunction.htm";
+ var postData={availableRoleFunction: availableRoleFunction};
+ $.ajax({
+ type : 'POST',
+ url : uuu,
+ dataType: 'json',
+ contentType: 'application/json',
+ data: JSON.stringify(postData),
+ success : function(data){
+ $scope.$apply(function(){$scope.availableRoleFunctions=data.availableRoleFunctions;});
+ },
+ error : function(data){
+ console.log(data);
+ alert("Error while deleting: "+ data.responseText);
+ }
+ });
+ }
+
+ };
+
+
+});
+</script>
diff --git a/ecomp-portal-BE/war/WEB-INF/fusion/jsp/role_list.jsp b/ecomp-portal-BE/war/WEB-INF/fusion/jsp/role_list.jsp
new file mode 100644
index 00000000..f35d975e
--- /dev/null
+++ b/ecomp-portal-BE/war/WEB-INF/fusion/jsp/role_list.jsp
@@ -0,0 +1,147 @@
+<%--
+ ================================================================================
+ 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.
+ ================================================================================
+ --%>
+
+<%-- <%@ include file="/WEB-INF/fusion/jsp/include.jsp" %> --%>
+
+<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>
+<%@ taglib prefix="fmt" uri="http://java.sun.com/jsp/jstl/fmt" %>
+<%@ taglib prefix="fn" uri="http://java.sun.com/jsp/jstl/functions" %>
+
+<script src= "static/ebz/angular_js/angular.js"></script>
+<script src= "static/ebz/angular_js/angular-sanitize.js"></script>
+<script src= "static/ebz/angular_js/att_abs_tpls.js"></script>
+<script src= "static/ebz/angular_js/app.js"></script>
+<script src= "static/ebz/angular_js/gestures.js"></script>
+
+<script src="static/js/jquery-1.10.2.js"></script>
+<script src="static/js/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>
+
+<div class="pageTitle">
+ <h1 class="heading1" style="margin-top:20px;">Roles</h1>
+</div>
+<br>
+Click on a Role to view its details.
+
+<div ng-controller="roleListController" >
+ <div id="dialog" title="Roles">
+ <table att-table table-data="availableRoles" current-page="1">
+ <thead att-table-row type="header">
+ <tr>
+ <th att-table-header width="70%">Name</th>
+ <th att-table-header width="10%">Priority</th>
+ <th att-table-header width="10%">Active?</th>
+ <th att-table-header width="10%">Delete?</th>
+ </tr>
+ </thead>
+ <tbody att-table-row type="body" row-repeat="availableRole in availableRoles track by availableRole.id" style="max-height: 980px;" ><!-- background colors will alternate not properly with multiple tbody-->
+<!-- <tr ng-repeat="availableRole in availableRoles track by availableRole.id"> -->
+ <tr>
+ <td width="70%"><a href="role.htm?role_id={{availableRole.id}}">{{ availableRole.name }}</a></td>
+ <td width="10%">{{ availableRole.priority }}</td>
+ <td width="10%">
+ <div ng-click="toggleRole(availableRole.active,availableRole);">
+ <input type="checkbox" ng-model="availableRole.active" att-toggle-main>
+ </div>
+ </td>
+ <td att-table-body width="10%">
+ <div ng-click="removeRole(availableRole);" style="font-size:20px;"><a href="javascript:void(0)" class="icon-trash"></a></div>
+ </td>
+ </tr>
+ </tbody>
+ </table>
+ </div>
+
+ <div align="left" style="marin-bottom: 50px;">
+ <button type="submit" onClick="window.location='role.htm';" att-button
+ btn-type="primary" size="small">Create</button>
+ </div>
+
+</div>
+
+
+
+
+<script>
+app.controller('roleListController', function ($scope){
+
+ $scope.availableRoles=${availableRoles};
+ //console.log($scope.availableRoles);
+ $scope.toggleRole = function(selected,availableRole) {
+ //alert('toggleRole: '+selected);
+ var toggleType = null;
+ if(selected) {
+ toggleType = "activate";
+ } else {
+ toggleType = "inactivate";
+ }
+
+ if (confirm("You are about to "+toggleType+" the test role "+availableRole.name+". Do you want to continue?")) {
+
+ var uuu = "role_list/toggleRole";
+
+ var postData={role:availableRole};
+ $.ajax({
+ type : 'POST',
+ url : uuu,
+ dataType: 'json',
+ contentType: 'application/json',
+ data: JSON.stringify(postData),
+ success : function(data){
+ console.log(data);
+ $scope.$apply(function(){$scope.availableRoles=data.availableRoles;});
+ console.log($scope.availableRoles);
+ },
+ error : function(data){
+ console.log(data);
+ alert("Error while saving. ");
+ }
+ });
+ }
+
+ };
+
+ $scope.removeRole = function(role) {
+ if (confirm("You are about to delete the role "+role.name+". Do you want to continue?")) {
+ //alert('deleted'+role.name);
+ var uuu = "role_list/removeRole";
+ var postData={role:role};
+ $.ajax({
+ type : 'POST',
+ url : uuu,
+ dataType: 'json',
+ contentType: 'application/json',
+ data: JSON.stringify(postData),
+ success : function(data){
+ $scope.$apply(function(){$scope.availableRoles=data.availableRoles;});
+ },
+ error : function(data){
+ console.log(data);
+ alert("Error while deleting: "+ data.responseText);
+ }
+ });
+ }
+
+ };
+
+
+});
+</script>
diff --git a/ecomp-portal-BE/war/WEB-INF/fusion/jsp/usage_list.jsp b/ecomp-portal-BE/war/WEB-INF/fusion/jsp/usage_list.jsp
new file mode 100644
index 00000000..11e2439e
--- /dev/null
+++ b/ecomp-portal-BE/war/WEB-INF/fusion/jsp/usage_list.jsp
@@ -0,0 +1,99 @@
+<%--
+ ================================================================================
+ 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.
+ ================================================================================
+ --%>
+
+<%-- <%@ include file="/WEB-INF/fusion/jsp/include.jsp" %> --%>
+<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>
+<%@ taglib prefix="fmt" uri="http://java.sun.com/jsp/jstl/fmt" %>
+<%@ taglib prefix="fn" uri="http://java.sun.com/jsp/jstl/functions" %>
+
+<link rel="stylesheet" type="text/css" href="static/ebz/sandbox.css" >
+<link rel="stylesheet" type="text/css" href="static/fusion/css/jquery-ui.css">
+
+<script src= "static/ebz/angular_js/angular.js"></script>
+<script src= "static/ebz/angular_js/angular-sanitize.js"></script>
+<script src= "static/ebz/angular_js/att_abs_tpls.js"></script>
+<script src= "static/ebz/angular_js/app.js"></script>
+<script src= "static/ebz/angular_js/gestures.js"></script>
+
+<script src="static/js/jquery-1.10.2.js"></script>
+<script src="static/js/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>
+
+<div ng-controller="usageListController" >
+ <div class="pageTitle">
+ <h3>
+ Usage
+ </h3>
+ </div>
+ <br/>
+ The following shows all users currently logged into the application. Click the icon to expel a user from the application.
+
+ <div title="Current User Sessions">
+ <table att-table table-data="users" current-page="1">
+
+ <thead att-table-row type="header">
+ <tr>
+ <th att-table-header sortable="false" width="10%" align="left">Current User Sessions</th>
+ <th att-table-header sortable="false" width="10%" align="center"></th>
+ <th att-table-header sortable="false" width="10%" align="center"></th>
+ <th att-table-header sortable="false" width="10%" align="center"></th>
+ <th att-table-header sortable="false" width="10%" align="center"></th>
+ <th att-table-header sortable="false" width="10%" align="center"></th>
+ </tr>
+ <tr>
+ <th att-table-header sortable="false" width="10%" align="center">User Id</th>
+ <th att-table-header sortable="false" width="10%" align="center">User Name</th>
+ <th att-table-header sortable="false" width="10%" align="center">Email</th>
+ <th att-table-header sortable="false" width="10%" align="center">Last Access Time (minutes)</th>
+ <th att-table-header sortable="false" width="10%" align="center">Time Remaining (minutes)</th>
+ <th att-table-header sortable="false" width="10%" align="center">Expel?</th>
+ </tr>
+ </thead>
+ <tbody att-table-row type="body" row-repeat="user in users" style="max-height: 980px;" ><!-- background colors will alternate not properly with multiple tbody-->
+ <tr>
+ <td att-table-body width="10%">{{user.id}}</td>
+ <td att-table-body width="10%">{{user.lastName}}</td>
+ <td att-table-body width="10%">{{user.email}}</td>
+ <td att-table-body width="10%">{{user.lastAccess}}</td>
+ <td att-table-body width="10%">{{user.remaining}}</td>
+ <td att-table-body width="10%"><div ng-hide="user.delete=='yes'">Current Session</div>
+ <div ng-click="removeSession(user.sessionId);" ng-hide="user.delete=='no'" style="font-size:20px;"><a href="javascript:void(0)" class="icon-trash"></a></div>
+ </td>
+ </tr>
+ </tbody>
+ </table>
+ </div>
+</div>
+
+
+
+
+<script>
+app.controller('usageListController', function ($scope,$interval,$http,$modal,modalService){
+
+ $scope.users=${model};console.log($scope.users);
+ $scope.removeSession = function(sessionId) {
+ if(confirm("You are about to expel this user from the application. All of their unsaved data will be lost. Do you want to continue?")){
+ $http.get("usage_list/removeSession?deleteSessionId="+sessionId).success(function(response){$scope.users=response;});
+ }
+ }
+});
+</script>
diff --git a/ecomp-portal-BE/war/WEB-INF/fusion/jsp/webrtc/collaboration.jsp b/ecomp-portal-BE/war/WEB-INF/fusion/jsp/webrtc/collaboration.jsp
new file mode 100644
index 00000000..b0480d45
--- /dev/null
+++ b/ecomp-portal-BE/war/WEB-INF/fusion/jsp/webrtc/collaboration.jsp
@@ -0,0 +1,529 @@
+<%--
+ ================================================================================
+ 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.
+ ================================================================================
+ --%>
+<!DOCTYPE html>
+
+<html xmlns="http://www.w3.org/1999/xhtml">
+<head>
+ <meta name="viewport" content="width=device-width, initial-scale=1.0, user-scalable=no">
+ <link type="text/css" rel="stylesheet" href="static/fusion/css/layout/layout-default-latest.css" />
+ <link rel="stylesheet" type="text/css" href="static/ebz/sandbox/styles/btn.css" >
+ <link rel="stylesheet" type="text/css" href="static/ebz/fn-ebz.css" >
+ <style type="text/css">
+ /*
+ * NOTE: All CSS is purely cosmetic - it does not affect functionality
+ * http://layout.jquery-dev.com/demos.cfm
+ */
+
+ /* customize borders to avoid double-borders around inner-layouts */
+ .ui-layout-pane {
+ border: 0; /* override layout-default-latest.css */
+ border-top: 1px solid #BBB;
+ border-bottom: 1px solid #BBB;
+ }
+ .ui-layout-pane-north ,
+ .ui-layout-pane-south {
+ border: 1px solid #BBB;
+ overflow: auto;
+ }
+ .ui-layout-pane-west ,
+ .ui-layout-pane-east {
+ }
+ .ui-layout-pane-center {
+ border-left: 0;
+ border-right: 0;
+ }
+ .inner-center {
+ border: 1px solid #BBB;
+ }
+
+ /* add shading to outer sidebar-panes */
+ .outer-west ,
+ .outer-east {
+ background-color: #EEE;
+ }
+ .middle-west ,
+ .middle-east {
+ background-color: #F8F8F8;
+ }
+
+ /* remove padding & scrolling from panes that are 'containers' for nested layouts */
+ .outer-center ,
+ .middle-center {
+ border: 0; /* cosmetic */
+ padding: 0;
+ overflow: auto;
+ }
+
+ /*
+ * customize borders on panes/resizers to make pretty
+ */
+ .ui-layout-pane-west { border-right: 0; }
+ .ui-layout-resizer-west { border-left: 1px solid #BBB; }
+ .ui-layout-pane-east { border-left: 0; }
+ .ui-layout-resizer-east { border-right: 1px solid #BBB; }
+ .ui-layout-pane-north { border-bottom: 0; }
+ .ui-layout-resizer-north { border-top: 1px solid #BBB; }
+ .ui-layout-pane-south { border-top: 0; }
+ .ui-layout-resizer-south { border-bottom: 1px solid #BBB; }
+ /*
+ * add borders to resizers when pane is 'closed'
+ *
+ *.ui-layout-resizer-closed { border: 1px solid #BBB; }
+ */
+ /*
+ * show both borders when the resizer is 'dragging'
+ */
+ .ui-layout-resizer-west-dragging ,
+ .ui-layout-resizer-east-dragging {
+ border-left: 1px solid #BBB;
+ border-right: 1px solid #BBB;
+ }
+ .ui-layout-resizer-north-dragging ,
+ .ui-layout-resizer-south-dragging {
+ border-top: 1px solid #BBB;
+ border-bottom: 1px solid #BBB;
+ }
+
+
+ /*
+ layout toggler background image
+ */
+ .ui-layout-toggler-west, .ui-layout-toggler-east {
+ border-width: 1px 0;
+ background-image: url("static/fusion/images/layout/panel-e-w-toggle.png");
+ background-size: 10px 10px;
+ background-repeat: no-repeat;
+ background-position: center;
+ }
+
+ .ui-layout-toggler-north, .ui-layout-toggler-south {
+ border-width: 0 1px;
+ background-image: url("static/fusion/images/layout/panel-n-s-toggle.png");
+ background-size: 10px 10px;
+ background-repeat: no-repeat;
+ background-position: center;
+ }
+
+ </style>
+
+
+ <!-- LAYOUT v 1.3.0 -->
+ <script type="text/javascript" src="static/fusion/js/layout/jquery-latest.js"></script>
+ <script type="text/javascript" src="static/fusion/js/layout/jquery-ui-latest.js"></script>
+ <script type="text/javascript" src="static/fusion/js/layout/jquery.layout-latest.js"></script>
+ <script type="text/javascript" src="static/fusion/webrtc/js/RTCMultiConnection.js"></script>
+ <script type="text/javascript" src="static/fusion/webrtc/js/peerBroadcast.js"></script>
+ <script type="text/javascript" src="static/fusion/js/layout/debug.js"></script>
+
+ <script type="text/javascript">
+
+
+ $(document).ready(function () {
+
+ // OUTER-LAYOUT
+ panelLayout = $('body').layout({
+ center__paneSelector: ".outer-center"
+ , west__paneSelector: ".outer-west"
+ , east__paneSelector: ".outer-east"
+ , west__size: 500
+ , east__size: 200
+ , spacing_open: 8 // ALL panes
+ , spacing_closed: 12 // ALL panes
+
+ , center__childOptions: {
+ center__paneSelector: ".inner-center"
+ , west__paneSelector: ".inner-west"
+ , east__paneSelector: ".inner-east"
+ , west__size: 75
+ , east__size: 75
+ , spacing_open: 8 // ALL panes
+ , spacing_closed: 8 // ALL panes
+ , west__spacing_closed: 12
+ , east__spacing_closed: 12
+ }
+
+
+
+
+ });
+
+
+ function initializeConnections() {
+
+ var channelId = null; var audioVideo = true; var data = true;
+ channelId = location.href.replace(/\/|:|#|%|\.|\[|\]/g, '');
+ var videoChannelId = channelId.concat("video");
+ var screenChannelId = channelId.concat("screen");
+
+ videoConnection = new RTCMultiConnection(videoChannelId);
+ screenConnection = new RTCMultiConnection(screenChannelId);
+
+
+ if( window.location.protocol == 'http:' && DetectRTC.browser.isChrome ) {
+ audioVideo = false;
+ console.log("Video Chat is not supported over unsecured connection for Chrome; Use Firefox")
+ }
+ configConnection(videoConnection,audioVideo,audioVideo,false,true,false);
+ configConnection(screenConnection,false,false,true,false,true);
+
+ };
+
+ function configConnection(_connection, _audio, _video, _screen, _data, _oneway) {
+ _connection.session = {
+ audio: _audio, // by default, it is true
+ video: _video, // by default, it is true
+ screen: _screen,
+ data: _data,
+ oneway: _oneway,
+ broadcast: false
+ };
+
+ _connection.direction = "one-to-one";
+
+ if( _data == true ) {
+ _connection.onmessage = function(e) {
+ appendDIV(e.data);
+
+ console.debug(e.userid, 'posted', e.data);
+ console.log('latency:', e.latency, 'ms');
+ };
+ }
+
+
+ };
+
+ function assignStreamToDom() {
+
+
+ screenConnection.screenbody = document.querySelector('.screenContainer1');
+ screenConnection.videobody = document.querySelector('.videoContainer2');
+
+ videoConnection.screenbody = document.querySelector('.screenContainer2');
+ videoConnection.videobody = document.querySelector('.videoContainer1');
+ };
+
+ function maximizeLayout() {
+
+ // open the panes and maximize the window.
+ top.window.resizeTo(screen.availWidth,screen.availHeight);
+ // lets keep this closed as its the screen share panel; will be opened up in future release
+ panelLayout.open('west');
+ // panelLayout.open('south'); is not working due to state initialization problem; debug to find out. so replacing the call with work around below - hack.
+ // $(".ui-layout-toggler-south-closed").first().click();
+
+ };
+
+ function minimizeLayout() {
+
+ // close the panes and minimize the window.
+ top.window.resizeTo(screen.availWidth - 2*screen.availWidth/3, screen.availHeight - screen.availHeight/2);
+ panelLayout.close('west');
+ // panelLayout.close('south'); is not working due to state initialization problem; debug to find out. so replacing the call with work around below - hack.
+ $(".ui-layout-toggler-south-opened").first().click();
+ };
+
+ function emptyContainers() {
+ $('.screenContainer1').empty();
+ $('.videoContainer2').empty();
+
+ $('.screenContainer2').empty();
+ $('.videoContainer1').empty();
+ };
+
+ function appendDIV(div, parent) {
+ if (typeof div === 'string') {
+ var content = div;
+ div = document.createElement('div');
+ div.innerHTML = content;
+ };
+
+ var chatOutput = document.getElementById('chat-output'),
+ fileProgress = document.getElementById('file-progress');
+
+ if (!parent) {chatOutput.appendChild(div, chatOutput.firstChild); chatOutput.scrollTop = chatOutput.scrollHeight;
+ }
+ else fileProgress.insertBefore(div, fileProgress.firstChild);
+
+ div.tabIndex = 0;
+ $('#chat-input').focus();
+ };
+
+ function confirmClose() {
+ var message = "Are you sure you want to close the session?";
+
+ // if(popupModalService != undefined) {
+ // popupModalService.popupConfirmWin("Confirm", message, function(){ location.reload();});
+ // }
+
+ if (confirm(message) == true) {
+ location.reload();
+ //window.opener.location.reload(); // go to the parent window
+ //close();
+ } else {
+ // do nothing
+ }
+
+ };
+
+ function notifyOthers() {
+
+ // var websocket = localStorage.getItem('notifySocket');
+ //if( websocket != null) {
+ // handling websocket peer broadcast session
+ var currentUser = "${sessionScope.user.orgUserId}";
+ var initialPageVisit = "${sessionScope.initialPageVisit}";
+ var remoteUser = '';
+
+ var userList = location.search.split('chat_id=')[1].split('-');
+ for(var i=0;i<userList.length;i++) {
+ if(userList[i] !== currentUser) {
+ remoteUser = userList[i];
+ break;
+ }
+ }
+
+ socketSetup(initialPageVisit, currentUser, remoteUser,"socketSend");
+
+
+
+
+
+
+ };
+
+ function makeChatVisible() {
+
+ $('#chat-input').css("visibility", 'visible');
+ };
+
+ function srcDestinationSessionAction() {
+ var url = window.location.href;
+ var chatId = "";
+
+ try{
+ chatId = url.split("chat_id=")[1];
+ }
+ catch(err) {
+ chatId ="";
+ }
+ // window.localStorage.getItem(chatId) == "source"
+ if(chatId != "" && getCookie(chatId) == "source") {
+ startSession();
+ setCookie(chatId,"",-1);
+ //window.localStorage.removeItem(chatId);
+ } else {
+ viewSession();
+ }
+
+ };
+
+ function startSession() {
+
+ emptyContainers();
+ videoConnection.close();
+ screenConnection.close();
+
+ maximizeLayout();
+ emptyContainers();
+ makeChatVisible();
+
+ videoConnection.open();
+ screenConnection.open();
+
+
+ notifyOthers();
+ };
+
+ function viewSession() {
+ maximizeLayout();
+ emptyContainers();
+ makeChatVisible();
+
+ // timeout is required for the sharing to properly work
+ setTimeout(function() {
+ screenConnection.connect();
+ },2000);
+ setTimeout(function() {
+ videoConnection.connect();
+ },1000);
+ };
+
+
+ function setCookie(cname,cvalue,exdays) {
+ var d = new Date();
+ d.setTime(d.getTime() + (exdays*24*60*60*1000));
+ var expires = "expires=" + d.toGMTString();
+ document.cookie = cname + "=" + cvalue + ";" + expires + ";path=/";
+ }
+
+ function getCookie(cname) {
+ var name = cname + "=";
+ var decodedCookie = decodeURIComponent(document.cookie);
+ var ca = decodedCookie.split(';');
+ for(var i = 0; i < ca.length; i++) {
+ var c = ca[i];
+ while (c.charAt(0) == ' ') {
+ c = c.substring(1);
+ }
+ if (c.indexOf(name) == 0) {
+ return c.substring(name.length, c.length);
+ }
+ }
+ return "";
+ }
+
+
+
+ /* on click button enabled*/
+ document.getElementById('share-screen').onclick = function() {
+ startSession();
+ };
+
+ document.getElementById('stop-share-screen').onclick = function() {
+
+ emptyContainers();
+
+ videoConnection.close();
+ screenConnection.close();
+
+ confirmClose();
+
+ };
+
+ document.getElementById('view-screen').onclick = function() {
+ viewSession();
+ };
+
+ document.getElementById('chat-input').onkeypress = function(e) {
+ if (e.keyCode !== 13 || !this.value) return;
+ var message = "<b>${model.name}</b>: " + this.value;
+ appendDIV(message);
+
+ // sending text message
+ videoConnection.send(message);
+
+ this.value = '';
+ };
+
+ /*
+ document.getElementById('file').onchange = function() {
+ videoConnection.send(this.files[0]);
+ };
+ */
+
+
+ //document.querySelector('.screenContainerPane').appenChild(document.querySelector('.screenContainer'));
+ //document.querySelector('.videoContainerPane').appendChild(document.querySelector('.videoContainer'));
+
+ //panelLayout.bindButton($('#share-screen'), 'open', 'outer-west');
+ //panelLayout.bindButton($('#stop-share-screen'), 'close', 'outer-west');
+ var videoConnection = null, screenConnection = null;
+ initializeConnections();
+ assignStreamToDom();
+ srcDestinationSessionAction();
+
+ // start the share
+ //document.getElementById('share-screen').click();
+ //
+ });
+
+
+</script>
+
+
+</head>
+
+<body>
+<!--
+ <button id="share-screen" hidden="true" style="display: none;" class="setup">Share Your Screen</button>
+ <button id="stop-share-screen" hidden="true" style="display: none;" class="setup">Stop Share Your Screen</button>
+ <button id="view-screen" hidden="true" style="display: none;" class="setup">View My Screen</button>
+
+ -->
+
+<div class="outer-center" style="position: absolute; left: 12px; right: 0px; top: 0px;bottom: 0px;">
+ <div class="inner-center">
+
+ <!-- <jsp:include page="/WEB-INF/fusion/zul/chatOne.zul" /> -->
+
+
+
+ <table style="width: 100%;">
+ <tbody><tr>
+ <td>
+ <button id="share-screen" style="display:none" class="button button--primary button--small setup">Start Session</button>
+ <button id="stop-share-screen" style="display:none" class="button button--primary button--small setup">Stop Session</button>
+ <button id="view-screen" style="display:none" class="button button--primary button--small setup">View</button>
+
+ </td>
+ <td>
+
+ </td>
+
+ </tr>
+ </tbody>
+
+ <tbody>
+ <tr>
+ <td>
+ <div class="videoContainer1"></div>
+ <div class="videoContainer2"></div>
+ </td>
+ </tr>
+ </tbody>
+ </table>
+
+
+ </div>
+ <!--
+ <div id="inner-south" class="ui-layout-south">
+ <!--
+ <div class="videoContainer1"></div>
+ <div class="videoContainer2"></div>
+ -->
+
+ </div>
+ -->
+</div>
+
+<div class="outer-west">
+ <!--
+ <div class="screenContainer1"></div>
+ <div class="screenContainer2"></div>
+ <div ng-controller="collaborationController"> </div>
+ -->
+
+
+ <div style="height: 90%;overflow-y: scroll;overflow-x: hidden;overflow-wrap: break-word;word-wrap: break-word;" id="chat-output"></div>
+
+ <div style="bottom:0;width: 100%;">
+ <input type="text" id="chat-input" style="font-size: 1.2em;width: 100%;" placeholder="Please type and hit return to send..."/>
+ </div>
+
+
+
+</div>
+
+
+
+
+
+</body>
+</html>
diff --git a/ecomp-portal-BE/war/WEB-INF/fusion/orm/EP.hbm.xml b/ecomp-portal-BE/war/WEB-INF/fusion/orm/EP.hbm.xml
new file mode 100644
index 00000000..1ed165b5
--- /dev/null
+++ b/ecomp-portal-BE/war/WEB-INF/fusion/orm/EP.hbm.xml
@@ -0,0 +1,558 @@
+<?xml version="1.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.
+ ================================================================================
+ -->
+
+<!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.portalapp.portal.domain">
+
+ <!-- Widget class mapping details -->
+ <class name="Widget" table="FN_WIDGET">
+ <id name="id" column="WIDGET_ID">
+ <generator class="native">
+ <param name="sequence">seq_fn_widget</param>
+ </generator>
+ </id>
+ <property name="width" type="integer">
+ <column name="WDG_WIDTH" not-null="true" default="0"></column>
+ </property>
+ <property name="height" type="integer">
+ <column name="WDG_HEIGHT" not-null="true" default="0"></column>
+ </property>
+ <property name="url" type="string">
+ <column name="WDG_URL" not-null="true" default="?"></column>
+ </property>
+ <property name="name" type="string">
+ <column name="WDG_NAME" not-null="true" default="?"></column>
+ </property>
+
+ <property name="appId" type="long">
+ <column name="APP_ID" not-null="true"></column>
+ </property>
+
+ </class>
+
+
+ <!-- User class mapping details -->
+ <class name="EPUser" table="FN_USER">
+ <id name="id" column="user_id">
+ <generator class="native">
+ <param name="sequence">seq_fn_user</param>
+ </generator>
+ </id>
+
+ <property name="orgId" column="org_id" />
+ <property name="managerId" column="manager_id" />
+ <property name="firstName" column="first_name" />
+ <property name="middleInitial" column="middle_name" />
+ <property name="lastName" column="last_name" />
+ <property name="phone" column="phone" />
+ <property name="fax" column="fax" />
+ <property name="cellular" column="cellular" />
+ <property name="email" column="email" />
+ <property name="addressId" column="address_id" />
+ <property name="alertMethodCd" column="alert_method_cd" />
+
+ <property name="address1" column="address_line_1" />
+ <property name="address2" column="address_line_2" />
+ <property name="city" column="city" />
+ <property name="state" column="state_cd" />
+ <property name="zipCode" column="zip_code" />
+ <property name="country" column="country_cd" />
+
+ <property name="hrid" column="hrid" />
+ <property name="orgUserId" column="org_user_id" />
+ <property name="orgCode" column="org_code" />
+ <property name="loginId" column="login_id" />
+ <property name="loginPwd" column="login_pwd" />
+ <property name="lastLoginDate" column="last_login_date" type="timestamp" />
+
+ <property name="locationClli" column="location_clli" />
+ <property name="orgManagerUserId" column="org_manager_userid" />
+ <property name="company" column="company" />
+ <property name="department" column="department" />
+ <property name="departmentName" column="department_name" />
+ <property name="businessUnit" column="business_unit" />
+ <property name="businessUnitName" column="business_unit_name" />
+ <property name="jobTitle" column="job_title" />
+ <property name="siloStatus" column="silo_status" />
+ <property name="financialLocCode" column="fin_loc_code" />
+
+ <property name="active" column="active_yn" type="yes_no" />
+ <property name="internal" column="is_internal_yn" type="yes_no" />
+
+ <property name="created" type="timestamp" column="created_date" />
+ <property name="modified" type="timestamp" column="modified_date" />
+
+ <property name="createdId" column="created_id" />
+ <property name="modifiedId" column="modified_id" />
+ <property name="timeZoneId" column="timezone" />
+
+ <set name="EPUserApps" table="FN_USER_ROLE" lazy="false" sort="natural" inverse="true">
+ <key column="user_id"/>
+ <one-to-many class="org.openecomp.portalapp.portal.domain.EPUserApp" />
+ </set>
+
+ </class>
+
+ <!-- UserApp class mapping details -->
+ <class name="EPUserApp" table="fn_user_role">
+ <composite-id>
+ <key-property name="userId" type="long">
+ <column name="user_id" precision="11" scale="0" />
+ </key-property>
+ <key-many-to-one name="app" class="org.openecomp.portalapp.portal.domain.EPApp" column="app_id" />
+ <key-many-to-one name="role" class="org.openecomp.portalapp.portal.domain.EPRole" column="role_id" />
+ </composite-id>
+ <property name="priority" type="java.lang.Short">
+ <column name="priority" precision="4" scale="0" />
+ </property>
+ </class>
+
+ <!-- User App class mapping details -->
+ <class name="EPApp" table="fn_app">
+ <id name="id" column="app_id">
+ <generator class="native">
+ <param name="sequence">seq_fn_app</param>
+ </generator>
+ </id>
+ <property name="name" type="string">
+ <column name="app_name" not-null="true" default="?"></column>
+ </property>
+ <property name="imageUrl" column="app_image_url" />
+ <property name="description" column="app_description" />
+ <property name="notes" column="app_notes" />
+ <property name="url" column="app_url" />
+ <property name="alternateUrl" column="app_alternate_url" />
+ <property name="appRestEndpoint" column="app_rest_endpoint" />
+ <property name="mlAppName" type="string">
+ <column name="ml_app_name" not-null="true" default="?"></column>
+ </property>
+ <property name="mlAppAdminId" type="string">
+ <column name="ml_app_admin_id" not-null="true" default="?"></column>
+ </property>
+ <property name="motsId" column="mots_id" />
+ <property name="appPassword" type="string">
+ <column name="app_password" not-null="true" default="?"></column>
+ </property>
+ <property name="thumbnail" column="thumbnail"/>
+ <property name="username" type="string">
+ <column name="app_username" not-null="true" default="?"></column>
+ </property>
+ <property name="open" type="yes_no">
+ <column name="open" not-null="true" default="Y"></column>
+ </property>
+ <property name="enabled" type="yes_no">
+ <column name="enabled" not-null="true" default="N"></column>
+ </property>
+ <property name="uebTopicName" type="string">
+ <column name="ueb_topic_name"></column>
+ </property>
+ <property name="uebKey" type="string">
+ <column name="ueb_key"></column>
+ </property>
+ <property name="uebSecret" type="string">
+ <column name="ueb_secret"></column>
+ </property>
+ <property name="appType" type="integer">
+ <column name="app_type"></column>
+ </property>
+
+ <one-to-one name="contactUs" class="AppContactUs" cascade="save-update"></one-to-one>
+
+ </class>
+
+
+ <!-- User Role class mapping details -->
+ <class name="EPRole" table="FN_ROLE">
+ <id name="id" column="role_id">
+ <generator class="native">
+ <param name="sequence">seq_fn_role</param>
+ </generator>
+ </id>
+
+ <property name="name" column="role_name" />
+ <property name="priority" column="priority" />
+ <property name="active" column="active_yn" type="yes_no" />
+ <!-- 2 lines below may be removed! -->
+ <property name="appId" column="APP_ID" />
+ <property name="appRoleId" column="APP_ROLE_ID" />
+ <!-- 2 lines above may be removed -->
+
+ <set name="roleFunctions" table="FN_ROLE_FUNCTION" lazy="false" sort="natural">
+ <key column="role_id" />
+ <many-to-many column="function_cd" class="org.openecomp.portalsdk.core.domain.RoleFunction"/>
+ </set>
+
+ <set name="childRoles" table="FN_ROLE_COMPOSITE" lazy="false" sort="natural">
+ <key column="parent_role_id" />
+ <many-to-many column="child_role_id" class="org.openecomp.portalapp.portal.domain.EPRole" />
+ </set>
+
+ <set name="parentRoles" table="FN_ROLE_COMPOSITE" lazy="false" sort="natural">
+ <key column="child_role_id" />
+ <many-to-many column="parent_role_id" class="org.openecomp.portalapp.portal.domain.EPRole" />
+ </set>
+
+ </class>
+
+ <!-- User App class mapping details -->
+ <class name="AppContactUs" table="fn_app_contact_us">
+ <id name="id" column="app_id">
+ <generator class="foreign">
+ <param name="property">app</param>
+ </generator>
+ </id>
+ <property name="url" column="url" />
+ <property name="description" column="description" />
+ <property name="contactName" column="contact_name" />
+ <property name="contactEmail" column="contact_email" />
+ <property name="activeYN" column="active_yn" />
+
+ <one-to-one name="app" class="EPApp" constrained="true" ></one-to-one>
+
+ </class>
+
+ <!-- Personalization of user app selections -->
+ <class name="PersUserAppSelection" table="fn_pers_user_app_sel">
+ <id name="id" column="id">
+ <generator class="native">
+ <param name="property">seq_fn_pers_user_app_sel</param>
+ </generator>
+ </id>
+ <property name="userId" column="user_id" />
+ <property name="appId" column="app_id" />
+ <property name="statusCode" column="status_cd" />
+ </class>
+
+ <!-- requires values for named parameters :searchQuery and :userId -->
+ <sql-query name="searchPortal">
+ <return alias="searchResult" class="org.openecomp.portalapp.portal.ecomp.model.SearchResultItem"/>
+ <![CDATA[
+ select @rn /*'*/:=/*'*/ @rn+1 AS rowId, CATEGORY, NAME, UUID, TARGET from
+ ( (
+ select distinct 'User' CATEGORY, concat(concat(first_name, ' '), last_name) NAME, user_id UUID, email TARGET
+ from fn_user where
+ upper( :searchQuery ) != ''
+ and (upper(first_name) like upper(CONCAT('%', :searchQuery, '%'))
+ or upper(last_name) like upper(CONCAT('%', :searchQuery, '%'))
+ or upper(org_user_id) like upper(CONCAT('%', :searchQuery, '%')))
+ and upper(active_yn) = 'Y'
+ )
+ union
+ (
+ select distinct 'Application' CATEGORY, b1.app_name NAME,
+ if (b1.app_type = 2,'false','true') UUID,
+ if (a1.app_id is null, if (b1.app_type = 2, b1.APP_URL, ''), a1.APP_URL) TARGET
+ from
+ (
+ select c.*
+ from fn_user_role a, fn_user b, fn_app c
+ where a.USER_ID = b.user_id
+ and upper(b.org_user_id) = upper( :userId )
+ and a.app_id = c.app_id
+ and upper(c.APP_NAME) like upper(CONCAT('%', :searchQuery, '%'))
+ and upper(c.ENABLED) = 'Y'
+ ) a1 right outer join
+ (select * from fn_app where
+ upper(APP_NAME) like upper(CONCAT('%', :searchQuery, '%'))
+ and upper(ENABLED) = 'Y') b1
+ on a1.APP_ID = b1.app_id
+ )
+ union
+ (
+ select distinct 'Menu' CATEGORY, b1.TEXT NAME,
+ if (b1.app_type = 2,'false','true') UUID,
+ if (a1.menu_id is null , if (b1.app_type = 2, b1.URL, '') , a1.URL ) TARGET
+ from
+ (select distinct d.*, e.app_type from fn_user a,
+ fn_user_role b, fn_menu_functional_roles c, fn_menu_functional d, fn_app e
+ where a.USER_ID = b.user_id
+ and b.role_id = c.role_id
+ and c.menu_id = d.menu_id
+ and upper(a.org_user_id) = upper( :userId )
+ and c.APP_ID = e.app_id
+ and upper(d.TEXT) like upper(CONCAT('%', :searchQuery, '%'))
+ and upper(d.active_yn) = 'Y'
+ and upper(e.enabled) = 'Y'
+ ) a1 right outer join
+ (
+ select distinct a.*, c.app_type from fn_menu_functional a, fn_menu_functional_roles b, fn_app c
+ where active_yn = 'Y'
+ and upper(TEXT) like upper(CONCAT('%', :searchQuery, '%'))
+ and a.menu_id = b.menu_id
+ and b.app_id = c.app_id
+ and c.enabled = 'Y'
+ ) b1
+ on a1.menu_id = b1.menu_id
+ ) ) t,
+ (SELECT @rn /*'*/:=/*'*/ 0) t2
+ ;
+ ]]>
+ </sql-query>
+
+ <!-- Gets one row for each function-application-role combination. -->
+ <sql-query name="getAppAccessFunctionRole">
+ <return alias="appAccessFunctionRole" class="org.openecomp.portalapp.portal.domain.GetAccessResult"/>
+ <!-- This query requires no parameters. -->
+ <![CDATA[
+ SELECT
+ A.TEXT ECOMP_FUNCTION, D.APP_NAME, D.MOTS_ID APP_MOTS_ID, C.ROLE_NAME
+ FROM
+ fn_menu_functional A, fn_menu_functional_roles B, FN_ROLE C, FN_APP D
+ WHERE
+ A.MENU_ID = B.MENU_ID AND B.ROLE_ID = C.ROLE_ID AND B.APP_ID = D.APP_ID
+ ;
+ ]]>
+ </sql-query>
+
+ <!-- Gets all applications, possibly with contact information -->
+ <sql-query name="getAppsAndContacts">
+ <return alias="appContactUs" class="org.openecomp.portalapp.portal.ecomp.model.AppContactUsItem"/>
+ <!-- This query requires no parameters. -->
+ <![CDATA[
+ select
+ a.app_id as appId, a.app_name as appName,
+ c.contact_name as contactName,
+ c.contact_email as contactEmail, c.url, c.description,
+ c.active_yn as activeYN
+ from
+ fn_app a
+ left join
+ fn_app_contact_us c
+ on a.app_id = c.app_id
+ where
+ a.enabled = 'Y' and a.app_name is not null and a.app_name != ''
+ ;
+ ]]>
+ </sql-query>
+ <!-- Gets all rows from the app-contact-us table, extended with app information -->
+ <sql-query name="getAppContactUsItems">
+ <return alias="appContactUs" class="org.openecomp.portalapp.portal.ecomp.model.AppContactUsItem"/>
+ <!-- This query requires no parameters. -->
+ <![CDATA[
+ select
+ c.app_id as appId, c.contact_name as contactName,
+ c.contact_email as contactEmail, c.url, c.description,
+ c.active_yn as activeYN, a.app_name as appName
+ from
+ fn_app_contact_us c
+ left join
+ fn_app a
+ on a.app_id = c.app_id
+ where
+ a.enabled = 'Y' and a.app_name is not null and a.app_name != ''
+ ;
+ ]]>
+ </sql-query>
+ <sql-query name="getAppCategoryFunctions">
+ <return alias="appCategoryFunctions" class="org.openecomp.portalapp.portal.ecomp.model.AppCategoryFunctionsItem"/>
+ <!-- This query requires no parameters. -->
+ <![CDATA[
+ SELECT @rn /*'*/:=/*'*/ @rn+1 AS rowId,
+ r.category as category, r.app_id as appId, r.app_name as application,
+ group_concat(function_text separator ', ') as functions
+ FROM (
+ SELECT
+ app_id, function_text, app_name,
+ IF (a.parent_menu_id IS NULL, fn.parent_menu, a.text) category
+ FROM (
+ SELECT
+ j.text function_text, j.menu_id function_id, j.app_id app_id, j.app_name app_name,
+ k.text parent_menu, k.parent_menu_id parent_menu_id
+ FROM (
+ SELECT distinct
+ x.Text, x.PARENT_MENU_ID, x.menu_id, y.app_id, z.app_name
+ FROM
+ fn_menu_functional x, fn_menu_functional_roles y, fn_app z
+ WHERE
+ x.MENU_ID = y.menu_id AND x.ACTIVE_YN = 'Y' AND y.app_id = z.app_id
+ ) j,
+ fn_menu_functional k
+ WHERE j.parent_menu_id = k.menu_id
+ ) fn,
+ fn_menu_functional a
+ WHERE fn.parent_menu_id = a.menu_id
+ ) r,
+ (SELECT @rn /*'*/:=/*'*/ 0) t2
+ group by r.category, r.app_id, r.app_name
+ order by category, app_name
+ ;
+ ]]>
+ </sql-query>
+
+
+ <sql-query name="getGuestLastLogin">
+ <return-scalar column="audit_date" type="java.util.Date"/>
+ <![CDATA[
+ select audit_date from fn_audit_log where affected_record_id =:attuid order by audit_date desc limit 2;
+ ]]>
+ </sql-query>
+
+ <!-- Gets personalized list of enabled and accessible apps for regular user -->
+ <sql-query name="getPersUserApps">
+ <return alias="persUserApps" class="EPApp"/>
+ <!-- This query requires one parameter: userId (number) -->
+ <![CDATA[
+ select
+ distinct -- multiple roles yield multiple rows
+ a.APP_ID , a.APP_NAME , a.APP_IMAGE_URL , a.APP_DESCRIPTION ,
+ a.APP_NOTES , a.APP_URL , a.APP_ALTERNATE_URL , a.APP_REST_ENDPOINT ,
+ a.ML_APP_NAME , a.ML_APP_ADMIN_ID , a.MOTS_ID , a.APP_PASSWORD ,
+ a.THUMBNAIL , a.APP_USERNAME , a.OPEN , a.ENABLED ,
+ a.UEB_TOPIC_NAME , a.UEB_KEY , a.UEB_SECRET , a.APP_TYPE
+ from FN_APP a
+ -- Portal assigns role 999 to app administrator
+ left outer join FN_USER_ROLE r ON a.APP_ID = r.APP_ID and r.USER_ID = :userId and r.ROLE_ID != 999
+ left outer join FN_PERS_USER_APP_SEL p ON a.APP_ID = p.APP_ID and p.USER_ID = :userId
+ where a.ENABLED = 'Y'
+ and (
+ (a.OPEN = 'Y' and p.STATUS_CD = 'S')
+ or
+ (a.OPEN = 'N' and r.USER_ID is not null and (p.STATUS_CD is null or p.STATUS_CD != 'H'))
+ )
+ order by app_name
+ ;
+ ]]>
+ </sql-query>
+
+ <!-- Gets personalized list of enabled and accessible apps for Portal (super) admin -->
+ <sql-query name="getPersAdminApps">
+ <return alias="persAdminApps" class="EPApp"/>
+ <!-- This query requires one parameter: userId (number) -->
+ <![CDATA[
+ select
+ distinct -- multiple roles yield multiple rows
+ a.APP_ID , a.APP_NAME , a.APP_IMAGE_URL , a.APP_DESCRIPTION ,
+ a.APP_NOTES , a.APP_URL , a.APP_ALTERNATE_URL , a.APP_REST_ENDPOINT ,
+ a.ML_APP_NAME , a.ML_APP_ADMIN_ID , a.MOTS_ID , a.APP_PASSWORD ,
+ a.THUMBNAIL , a.APP_USERNAME , a.OPEN , a.ENABLED ,
+ a.UEB_TOPIC_NAME , a.UEB_KEY , a.UEB_SECRET , a.APP_TYPE
+ from FN_APP a
+ -- Portal assigns role 999 to app administrator
+ left outer join FN_USER_ROLE r ON a.APP_ID = r.APP_ID and r.USER_ID = :userId and r.ROLE_ID != 999
+ left outer join FN_PERS_USER_APP_SEL p ON a.APP_ID = p.APP_ID and p.USER_ID = :userId
+ where a.ENABLED = 'Y'
+ and (
+ (a.OPEN = 'Y' and p.STATUS_CD = 'S')
+ or
+ (a.OPEN = 'N' and r.ROLE_ID is not null and (p.STATUS_CD is null or p.STATUS_CD != 'H'))
+ or
+ (a.OPEN = 'N' and r.ROLE_ID is null and p.STATUS_CD = 'S')
+ )
+ order by app_name
+ ;
+ ]]>
+ </sql-query>
+
+ <!-- Gets regular user's list of enabled apps including accessible and select statuses -->
+ <sql-query name="getUserAppCatalog">
+ <return alias="userAppCatalog" class="org.openecomp.portalapp.portal.ecomp.model.AppCatalogItem"/>
+ <!-- This query requires one parameter: userId (number) -->
+ <![CDATA[
+ select
+ distinct -- multiple roles yield multiple rows
+ a.APP_ID as id, a.APP_NAME as name, a.APP_IMAGE_URL as imageUrl,
+ a.APP_DESCRIPTION as description, a.APP_NOTES as notes,
+ a.APP_URL as url, a.APP_ALTERNATE_URL as alternateUrl,
+ IF(a.app_type = '2', TRUE, FALSE) as restricted,
+ IF(a.open = 'Y', TRUE, FALSE) as open,
+ -- ACCESS(-ible) means user has a defined role OR the application is open
+ case
+ -- regular app and user has a role
+ when a.OPEN = 'N' and r.ROLE_ID is not null then TRUE
+ -- open app
+ when a.OPEN = 'Y' then TRUE
+ else FALSE
+ end as 'access' ,
+ -- SELECT(-ed) indicates user personalization
+ case
+ -- regular app, user has a role, no personalization
+ when a.OPEN = 'N' and r.ROLE_ID is not null and p.STATUS_CD is null then TRUE
+ -- open app and has personalization
+ when a.OPEN = 'Y' and p.STATUS_CD is not null then TRUE
+ else FALSE
+ end as 'select' ,
+ -- PENDING indicates user checked a box
+ case
+ when a.OPEN = 'N' and p.STATUS_CD = 'P' then TRUE
+ else FALSE
+ end as 'pending'
+ from FN_APP a
+ -- Portal assigns role 999 to app administrator
+ left outer join FN_USER_ROLE r ON a.APP_ID = r.APP_ID and r.USER_ID = :userId and r.ROLE_ID != 999
+ left outer join FN_PERS_USER_APP_SEL p ON a.APP_ID = p.APP_ID and p.USER_ID = :userId
+ where a.ENABLED = 'Y'
+ -- Show accessible apps first, then the rest; sort by name within each set.
+ order by access desc, app_name asc
+ ;
+ ]]>
+ </sql-query>
+
+ <!-- Gets list of enabled apps including accessible and select statuses -->
+ <sql-query name="getAdminAppCatalog">
+ <return alias="adminAppCatalog" class="org.openecomp.portalapp.portal.ecomp.model.AppCatalogItem"/>
+ <!-- This query requires one parameter: userId (number) -->
+ <![CDATA[
+ select
+ distinct -- multiple roles yield multiple rows
+ a.APP_ID as id, a.APP_NAME as name, a.APP_IMAGE_URL as imageUrl,
+ a.APP_DESCRIPTION as description, a.APP_NOTES as notes,
+ a.APP_URL as url, a.APP_ALTERNATE_URL as alternateUrl,
+ IF(a.app_type = '2', TRUE, FALSE) as restricted,
+ IF(a.open = 'Y', TRUE, FALSE) as open,
+ -- ACCESS(-ible) means user has a defined role OR the application is open
+ case
+ -- regular app and user has a role
+ when a.OPEN = 'N' and r.ROLE_ID is not null then TRUE
+ -- open app
+ when a.OPEN = 'Y' then TRUE
+ else FALSE
+ end as 'access' ,
+ -- SELECT(-ed) indicates user personalization
+ case
+ -- regular app, user has a role, no personalization
+ when a.OPEN = 'N' and r.ROLE_ID is not null and p.STATUS_CD is null then TRUE
+ -- regular app, user has no role, admin forced a personalization
+ when a.OPEN = 'N' and r.ROLE_ID is null and p.STATUS_CD = 'S' then TRUE
+ -- open app and has personalization
+ when a.OPEN = 'Y' and p.STATUS_CD is not null then TRUE
+ else FALSE
+ end as 'select' ,
+ -- PENDING indicates user checked a box
+ case
+ when a.OPEN = 'N' and p.STATUS_CD = 'P' then TRUE
+ else FALSE
+ end as 'pending'
+ from FN_APP a
+ -- Portal assigns role 999 to app administrator
+ left outer join FN_USER_ROLE r ON a.APP_ID = r.APP_ID and r.USER_ID = :userId and r.ROLE_ID != 999
+ left outer join FN_PERS_USER_APP_SEL p ON a.APP_ID = p.APP_ID and p.USER_ID = :userId
+ where a.ENABLED = 'Y'
+ -- Show accessible apps first, then the rest; sort by name within each set.
+ order by access desc, app_name asc
+ ;
+ ]]>
+ </sql-query>
+
+
+</hibernate-mapping> \ No newline at end of file
diff --git a/ecomp-portal-BE/war/WEB-INF/fusion/orm/Fusion.hbm.xml b/ecomp-portal-BE/war/WEB-INF/fusion/orm/Fusion.hbm.xml
new file mode 100644
index 00000000..53c45b79
--- /dev/null
+++ b/ecomp-portal-BE/war/WEB-INF/fusion/orm/Fusion.hbm.xml
@@ -0,0 +1,372 @@
+<?xml version="1.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.
+ ================================================================================
+ -->
+
+<!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.core.domain">
+
+ <!-- User class mapping details -->
+ <class name="User" table="FN_USER">
+ <id name="id" column="user_id" >
+ <generator class="native">
+ <param name="sequence">seq_fn_user</param>
+ </generator>
+ </id>
+
+ <property name="orgId" column="org_id"/>
+ <property name="managerId" column="manager_id"/>
+ <property name="firstName" column="first_name"/>
+ <property name="middleInitial" column="middle_name"/>
+ <property name="lastName" column="last_name"/>
+ <property name="phone" column="phone"/>
+ <property name="fax" column="fax"/>
+ <property name="cellular" column="cellular"/>
+ <property name="email" column="email"/>
+ <property name="addressId" column="address_id"/>
+ <property name="alertMethodCd" column="alert_method_cd"/>
+
+ <property name="address1" column="address_line_1"/>
+ <property name="address2" column="address_line_2"/>
+ <property name="city" column="city"/>
+ <property name="state" column="state_cd"/>
+ <property name="zipCode" column="zip_code"/>
+ <property name="country" column="country_cd"/>
+
+ <property name="hrid" column="hrid"/>
+ <property name="orgUserId" column="org_user_id"/>
+ <property name="orgCode" column="org_code"/>
+ <property name="loginId" column="login_id"/>
+ <property name="loginPwd" column="login_pwd"/>
+ <property name="lastLoginDate" column="last_login_date" type="timestamp"/>
+
+ <property name="locationClli" column="location_clli" />
+ <property name="orgManagerUserId" column="org_manager_userid" />
+ <property name="company" column="company" />
+ <property name="department" column="department" />
+ <property name="departmentName" column="department_name" />
+ <property name="businessUnit" column="business_unit" />
+ <property name="businessUnitName" column="business_unit_name" />
+ <property name="jobTitle" column="job_title" />
+ <property name="siloStatus" column="silo_status" />
+ <property name="financialLocCode" column="fin_loc_code" />
+
+ <property name="active" column="active_yn" type="yes_no"/>
+ <property name="internal" column="is_internal_yn" type="yes_no"/>
+
+ <property name="created" type="timestamp" column="created_date" />
+ <property name="modified" type="timestamp" column="modified_date" />
+
+ <property name="createdId" column="created_id" />
+ <property name="modifiedId" column="modified_id" />
+ <property name="timeZoneId" column="timezone" />
+
+ <set name="userApps" table="FN_USER_ROLE" lazy="false" sort="natural" inverse="true" cascade="all-delete-orphan">
+ <key column="user_id"/>
+ <one-to-many class="org.openecomp.portalsdk.core.domain.UserApp" />
+ </set>
+
+ <set name="pseudoRoles" table="FN_USER_PSEUDO_ROLE" lazy="false" sort="natural">
+ <key column="user_id"/>
+ <many-to-many column="pseudo_role_id" class="org.openecomp.portalsdk.core.domain.Role" />
+ </set>
+ </class>
+
+ <class name="UserApp" table="fn_user_role">
+ <composite-id>
+ <key-property name="userId" type="long">
+ <column name="user_id" precision="11" scale="0" />
+ </key-property>
+ <key-many-to-one name="app" class="org.openecomp.portalsdk.core.domain.App" column="app_id" />
+ <key-many-to-one name="role" class="org.openecomp.portalsdk.core.domain.Role" column="role_id" />
+ </composite-id>
+ <property name="priority" type="java.lang.Short">
+ <column name="priority" precision="4" scale="0" />
+ </property>
+ </class>
+
+ <!-- User App class mapping details -->
+ <class name="App" table="fn_app">
+ <id name="id" column="app_id"/>
+ <property name="name" column="app_name"/>
+ <property name="appPassword" column="app_password"/>
+ <property name="username" column="app_username"/>
+
+ </class>
+
+ <!-- User Role class mapping details -->
+ <class name="Role" table="FN_ROLE">
+ <id name="id" column="role_id">
+ <generator class="native">
+ <param name="sequence">seq_fn_role</param>
+ </generator>
+ </id>
+
+ <property name="name" column="role_name"/>
+ <property name="priority" column="priority" />
+ <property name="active" column="active_yn" type="yes_no"/>
+
+ <set name="roleFunctions" table="FN_ROLE_FUNCTION" lazy="false" sort="natural">
+ <key column="role_id"/>
+ <many-to-many column="function_cd" class="org.openecomp.portalsdk.core.domain.RoleFunction"/>
+ </set>
+
+ <set name="childRoles" table="FN_ROLE_COMPOSITE" lazy="false" sort="natural">
+ <key column="parent_role_id"/>
+ <many-to-many column="child_role_id" class="org.openecomp.portalsdk.core.domain.Role"/>
+ </set>
+
+ <set name="parentRoles" table="FN_ROLE_COMPOSITE" lazy="false" sort="natural">
+ <key column="child_role_id"/>
+ <many-to-many column="parent_role_id" class="org.openecomp.portalsdk.core.domain.Role"/>
+ </set>
+
+ </class>
+
+
+
+ <!-- User Role Function class mapping details -->
+ <class name="RoleFunction" table="FN_FUNCTION">
+ <id name="code" column="function_cd" />
+ <property name="name" column="function_name" />
+ </class>
+
+ <!-- Menu class mapping details -->
+ <class name="Menu" table="FN_MENU">
+ <id name="id" column="menu_id">
+ <generator class="native">
+ <param name="sequence">seq_fn_menu</param>
+ </generator>
+ </id>
+
+ <property name="menuLevel" column="level-1"/>
+ <property name="label" column="label"/>
+ <property name="parentId" column="parent_id"/>
+ <property name="action" column="action"/>
+ <property name="functionCd" column="function_cd"/>
+ <property name="sortOrder" column="sort_order"/>
+ <property name="servlet" column="servlet"/>
+ <property name="queryString" column="query_string"/>
+ <property name="externalUrl" column="external_url"/>
+ <property name="target" column="target"/>
+ <property name="active" column="active_yn" type="yes_no"/>
+ <property name="separator" column="separator_yn" type="yes_no"/>
+ <property name="imageSrc" column="image_src" />
+ </class>
+
+ <class name="MenuData" table="FN_MENU">
+ <!-- <id name="id" column="menu_id"/> -->
+ <id name="id" column="menu_id">
+ <generator class="native">
+ <param name="sequence">seq_fn_menu</param>
+ </generator>
+ </id>
+ <property name="label" column="label"/>
+ <property name="action" column="action"/>
+ <property name="functionCd" column="function_cd"/>
+ <property name="sortOrder" column="sort_order"/>
+ <property name="servlet" column="servlet"/>
+ <property name="queryString" column="query_string"/>
+ <property name="externalUrl" column="external_url"/>
+ <property name="target" column="target"/>
+ <property name="active" column="active_yn" type="yes_no"/>
+ <property name="separator" column="separator_yn" type="yes_no"/>
+ <property name="imageSrc" column="image_src" />
+ <property name="menuSetCode" column="menu_set_cd" />
+
+ <many-to-one name="parentMenu" column="parent_id" class="MenuData"/>
+
+ <set name="childMenus" lazy="false" sort="natural" inverse="true" where="active_yn = 'Y'">
+ <key column="parent_id"/>
+ <one-to-many class="MenuData"/>
+ </set>
+ </class>
+
+ <!-- Broadcast Message class mapping details -->
+ <class name="BroadcastMessage" table="fn_broadcast_message">
+ <id name="id" column="message_id">
+ <generator class="native">
+ <param name="sequence">seq_fn_broadcast_message</param>
+ </generator>
+ </id>
+ <property name="messageText" column="message_text"/>
+ <property name="locationId" column="message_location_id"/>
+
+ <property name="startDate" column="broadcast_start_date" type="timestamp"/>
+ <property name="endDate" column="broadcast_end_date" type="timestamp"/>
+
+ <property name="sortOrder" column="sort_order"/>
+ <property name="active" column="active_yn" type="yes_no"/>
+
+ <property name="siteCd" column="broadcast_site_cd" />
+ </class>
+
+ <!-- State Lookup class mapping details -->
+ <class name="LuState" table="FN_LU_STATE">
+ <id name="abbr" column="state_cd" />
+ <property name="state" />
+ </class>
+
+ <!-- Country Lookup class mapping details -->
+ <class name="LuCountry" table="FN_LU_COUNTRY">
+ <id name="abbr" column="country_cd" />
+ <property name="country" />
+ <property name="fullName" column="full_name" />
+ <property name="webphoneCountryLabel" column="fullwebphone_country_label_name" />
+ </class>
+
+ <class name="LuTimeZone" table="FN_LU_TIMEZONE">
+ <id name="timezoneId" column="timezone_id" />
+ <property name="name" column="timezone_name" />
+ <property name="value" column="timezone_value" />
+ </class>
+
+
+ <!-- Lookup (id/value bean) class mapping details -->
+ <class name="Lookup">
+ <composite-id name="nameValueId" class="org.openecomp.portalsdk.core.domain.support.NameValueId">
+ <key-property name="val"/>
+ <key-property name="lab" />
+ </composite-id>
+ </class>
+
+ <class name="UrlsAccessible" table="V_URL_ACCESS">
+ <composite-id name="urlsAccessibleKey" class="org.openecomp.portalsdk.core.domain.UrlsAccessibleKey">
+ <key-property name="url" column="url"/>
+ <key-property name="functionCd" column="function_cd"/>
+ </composite-id>
+ </class>
+
+ <query name="functionCDlist">
+ select distinct functionCd from MenuData
+ </query>
+
+ <query name="menuData">
+ from MenuData where menuSetCode = :menu_set_cd and parentMenu is null
+ </query>
+ <query name="restrictedUrls">
+ FROM UrlsAccessible A where upper(A.urlsAccessibleKey.url) = upper(:current_url)
+ </query>
+
+ <query name="getUserNameById">
+ select firstName, lastName from User where id = :user_id
+ </query>
+
+ <query name="getUserEmail">
+ select email from User where id = :user_id
+ </query>
+
+ <query name="getAllUsers">
+ select id, firstName, lastName from User where active = true order by lastName, firstName
+ </query>
+
+ <query name="getRoleNameById">
+ select name from Role where id = :role_id
+ </query>
+
+ <query name="getAllRoles">
+ select id, name from Role order by name
+ </query>
+
+ <sql-query name="getBytesPublishedDelivered">
+ <return-scalar column="Published" type="java.lang.String"/>
+ <return-scalar column="Delivered" type="java.lang.String"/>
+ <![CDATA[
+ select concat(Round(sum(bytespublished)/(1024*1024*1024*1024), 0), ' Pb') 'Published', concat(Round(sum(bytesdelivered)/(1024*1024*1024*1024), 0), ' Pb') ' Delivered' from kpi_drvolumes where day = (select max(day) from kpi_drvolumes)
+ ]]>
+ </sql-query>
+
+ <sql-query name="getDataRouterFeedStats">
+ <return-scalar column="TOTAL_FEEDS" type="java.lang.Long"/>
+ <return-scalar column="ACTIVE_FEEDS" type="java.lang.Long"/>
+ <return-scalar column="ACTIVE_SUBS" type="java.lang.Long"/>
+ <![CDATA[
+ SELECT SUM(TOTALFEEDS) TOTAL_FEEDS, SUM(ACTIVEFEEDS) ACTIVE_FEEDS, SUM(ACTIVESUBS) ACTIVE_SUBS FROM kpi_drsumm where day = (select max(day) from kpi_drvolumes)
+ ]]>
+ </sql-query>
+
+ <sql-query name="getLOCStatsCat">
+ <![CDATA[
+ select CATEGORY1 CATEGORY from demo_kpi_sourcecode_stats group by category1
+ ]]>
+ </sql-query>
+
+ <sql-query name="getLOCStats">
+ <![CDATA[
+ select sum(total_lines) TOTAL_LINES from demo_kpi_sourcecode_stats group by category1
+ ]]>
+ </sql-query>
+
+ <sql-query name="relatedUsers">
+ <return-scalar column="ORG_USER_ID" type="java.lang.String"/>
+
+ <![CDATA[
+
+ select t.org_user_id from (
+ select distinct c.org_user_id ORG_USER_ID, c.last_login_date
+ from
+ fn_user_role a,
+ (select distinct role_id, app_id from fn_user_role a1, fn_user a2 where a1.user_id = a2.user_id and a2.org_user_id=:org_user_id) b,
+ fn_user c
+ where a.ROLE_ID = b.role_id
+ and a.APP_ID = b.app_id
+ and a.USER_ID = c.user_id
+ order by c.last_login_date desc limit 10
+ ) t
+
+
+ ]]>
+ </sql-query>
+
+ <sql-query name="relatedUserVOs">
+ <return-scalar column="ORG_USER_ID" type="java.lang.String"/>
+ <return-scalar column="EMAIL" type="java.lang.String"/>
+
+ <![CDATA[
+
+ select t.org_user_id, t.email from (
+ select distinct c.org_user_id ORG_USER_ID, c.email, c.last_login_date
+ from
+ fn_user_role a,
+ (select distinct role_id, app_id from fn_user_role a1, fn_user a2 where a1.user_id = a2.user_id and a2.org_user_id=:org_user_id) b,
+ fn_user c
+ where a.ROLE_ID = b.role_id
+ and a.APP_ID = b.app_id
+ and a.USER_ID = c.user_id
+ order by c.last_login_date desc limit 10
+ ) t
+
+
+ ]]>
+ </sql-query>
+
+ <query name="getCommonWidgetItem">
+ from CommonWidget where category = :cat order by sortOrder, title
+ </query>
+
+ <!-- <query name="getEventWidgetData">
+ from EventWidget order by sortOrder
+ </query> -->
+
+
+</hibernate-mapping>
+
diff --git a/ecomp-portal-BE/war/WEB-INF/fusion/orm/Workflow.hbm.xml b/ecomp-portal-BE/war/WEB-INF/fusion/orm/Workflow.hbm.xml
new file mode 100644
index 00000000..69c19db7
--- /dev/null
+++ b/ecomp-portal-BE/war/WEB-INF/fusion/orm/Workflow.hbm.xml
@@ -0,0 +1,48 @@
+<?xml version="1.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.
+ ================================================================================
+ -->
+
+<!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.workflow.domain">
+
+
+ <!-- WorkflowSchedule mapping details -->
+ <class name="WorkflowSchedule" table="fn_schedule_workflows">
+ <id name="id" column="id_schedule_workflows">
+ <generator class="native">
+ </generator>
+ </id>
+
+ <property name="serverUrl" column="workflow_server_url"/>
+ <property name="workflowKey" column="workflow_key"/>
+ <property name="arguments" column="workflow_arguments"/>
+ <property name="cronDetails" column="startDateTimeCron"/>
+ <property name="startDateTime" column="start_date_time"/>
+ <property name="endDateTime" column="endDateTime"/>
+ <property name="recurrence" column="recurrence"/>
+
+ </class>
+
+
+
+</hibernate-mapping>
diff --git a/ecomp-portal-BE/war/WEB-INF/fusion/raptor/report_search.jsp b/ecomp-portal-BE/war/WEB-INF/fusion/raptor/report_search.jsp
new file mode 100644
index 00000000..e1895d2c
--- /dev/null
+++ b/ecomp-portal-BE/war/WEB-INF/fusion/raptor/report_search.jsp
@@ -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.
+ ================================================================================
+ --%>
+Hello world