From cdd352a26a927955767e7811f9c254a5d3c8a06d Mon Sep 17 00:00:00 2001 From: "Kishore Reddy, Gujja (kg811t)" Date: Tue, 1 May 2018 13:32:42 -0400 Subject: Updated readme notes Issue-ID: PORTAL-254 portal/SDK release 2.3.0, domain, sdk aaf modules Change-Id: I426c210d9465341590851325491e46a79eea6909 Signed-off-by: Kishore Reddy, Gujja (kg811t) --- ecomp-sdk/epsdk-app-os/README.md | 4 + .../src/main/resources/music.properties | 5 + .../static/fusion/raptor/css/tree/context-menu.css | 57 -- .../fusion/raptor/js/ajax_dynamic_content.js | 97 --- .../static/fusion/raptor/js/form-field-tooltip.js | 715 --------------------- .../static/fusion/raptor/js/rounded-corners.js | 353 ---------- .../music/conf/MusicSessionRepositoryHandler.java | 1 + .../onap/portalapp/music/service/MusicService.java | 109 ++++ .../onap/portalapp/music/util/MusicCleanUp.java | 62 ++ .../onap/portalapp/music/util/MusicProperties.java | 4 + .../org/onap/portalapp/music/util/MusicUtil.java | 23 + 11 files changed, 208 insertions(+), 1222 deletions(-) delete mode 100644 ecomp-sdk/epsdk-app-overlay/src/main/webapp/static/fusion/raptor/css/tree/context-menu.css delete mode 100644 ecomp-sdk/epsdk-app-overlay/src/main/webapp/static/fusion/raptor/js/ajax_dynamic_content.js delete mode 100644 ecomp-sdk/epsdk-app-overlay/src/main/webapp/static/fusion/raptor/js/form-field-tooltip.js delete mode 100644 ecomp-sdk/epsdk-app-overlay/src/main/webapp/static/fusion/raptor/js/rounded-corners.js create mode 100644 ecomp-sdk/epsdk-music/src/main/java/org/onap/portalapp/music/util/MusicCleanUp.java diff --git a/ecomp-sdk/epsdk-app-os/README.md b/ecomp-sdk/epsdk-app-os/README.md index a6a748f4..c61ebe63 100644 --- a/ecomp-sdk/epsdk-app-os/README.md +++ b/ecomp-sdk/epsdk-app-os/README.md @@ -12,10 +12,14 @@ like Apache Tomcat. Eclipse users must install the M2E-WTP connector, see https://www.eclipse.org/m2e-wtp/ ## Release Notes +Version 2.3.0 +- PORTAL 254 ECOMP AAF jar + Version 2.2.0 - PORTAL 136 Junits for SDK - PORTAL 87 hibernate mapping in epsdk-overlay forces use of analytics dependency jar - PORTAL 155 Review security issues: portal +- PORTAL-202 Remove files that have GPL or other license issues Version 2.1.0 - PORTAL 161 Refer epsdk-app-common diff --git a/ecomp-sdk/epsdk-app-os/src/main/resources/music.properties b/ecomp-sdk/epsdk-app-os/src/main/resources/music.properties index 635ccb50..e30f3855 100644 --- a/ecomp-sdk/epsdk-app-os/src/main/resources/music.properties +++ b/ecomp-sdk/epsdk-app-os/src/main/resources/music.properties @@ -17,6 +17,11 @@ music.session.max.inactive.interval.seconds = 1800 #By default it's eventual music.atomic.get = false music.atomic.put = false +#clean up duration & threshold (hour) +#how often the session clean up would happen +music.cleanup.frequency = 6 +#how old of session need to clean up +music.cleanup.threshold = 10 cassandra.host=135.197.226.103 zookeeper.host=135.197.226.103, 135.197.226.108, 135.197.226.119 diff --git a/ecomp-sdk/epsdk-app-overlay/src/main/webapp/static/fusion/raptor/css/tree/context-menu.css b/ecomp-sdk/epsdk-app-overlay/src/main/webapp/static/fusion/raptor/css/tree/context-menu.css deleted file mode 100644 index 160c2a11..00000000 --- a/ecomp-sdk/epsdk-app-overlay/src/main/webapp/static/fusion/raptor/css/tree/context-menu.css +++ /dev/null @@ -1,57 +0,0 @@ -/************************************************************************************************************ - - DHTML Suite for Applications - (C) www.dhtmlgoodies.com, August 2006 - - CSS for the context menu class. - - Terms of use: - Look at the terms of use at http://www.dhtmlgoodies.com/index.html?page=termsOfUse - - Thank you! - - www.dhtmlgoodies.com - Alf Magne Kalleland - -************************************************************************************************************/ - -.DHTMLSuite_contextMenu{ /* The bar that is parent of the menu strip */ - position:absolute; - background-color:#FFF; - border:1px solid #000; - padding:1px; -} - -.DHTMLSuite_contextMenu li{ - list-style-type:none; - padding:1px; /* Equal to border + padding of .DHTMLSuite_item_mouseover */ - border:0px; - cursor: pointer; - background-repeat:no-repeat; - background-position:left center; -} -.DHTMLSuite_contextMenu .DHTMLSuite_item_mouseover{ - border:1px solid #000; - background-color:#EEE; - padding:0px; /* Padding + border of this element should be equal to padding of li element (see above ) */ -} -.DHTMLSuite_contextMenu ul{ - margin:0px; - padding:0px; -} - -.DHTMLSuite_contextMenu a{ - text-decoration:none; - color:#000; - padding-left:25px; -} - -.DHTMLSuite_contextMenu div.DHTMLSuite_contextMenu_separator{ /* Css for the separator line */ - height:1px; - line-height:1px; - padding:0px; - background-color: #AAA; - overflow:hidden; - margin-top:1px; - margin-bottom:1px; -} diff --git a/ecomp-sdk/epsdk-app-overlay/src/main/webapp/static/fusion/raptor/js/ajax_dynamic_content.js b/ecomp-sdk/epsdk-app-overlay/src/main/webapp/static/fusion/raptor/js/ajax_dynamic_content.js deleted file mode 100644 index 077932e1..00000000 --- a/ecomp-sdk/epsdk-app-overlay/src/main/webapp/static/fusion/raptor/js/ajax_dynamic_content.js +++ /dev/null @@ -1,97 +0,0 @@ - -/*********************************************** -* Dynamic Ajax Content- © Dynamic Drive DHTML code library (www.dynamicdrive.com) -* This notice MUST stay intact for legal use -* Visit Dynamic Drive at http://www.dynamicdrive.com/ for full source code -***********************************************/ - -var loadedobjects="" -var rootdomain="http://"+window.location.hostname - -function ajaxpage(url, containerid){ - -var page_request = false; - try { - netscape.security.PrivilegeManager.enablePrivilege("UniversalBrowserRead"); - } catch (e) { - //alert("Permission UniversalBrowserRead denied."); - } -if (window.XMLHttpRequest) // if Mozilla, Safari etc -page_request = new XMLHttpRequest() -else if (window.ActiveXObject){ // if IE -try { -page_request = new ActiveXObject("Msxml2.XMLHTTP") -} -catch (e1){ -try{ -page_request = new ActiveXObject("Microsoft.XMLHTTP") -} -catch (e1){ page_request = null; alert('permission denied'); -} -} -} -else -return false -page_request.onreadystatechange=function(){ -loadpage(page_request, containerid) -} -// This is a fix made since IE doesn't refresh the page -var ajaxRightNow = new Date(); -var noCacheAjaxurl = url + ((/\?/.test(url)) ? "&" : "?") + "ajaxRandomTimestamp=" + ajaxRightNow.getTime(); -page_request.open('GET', noCacheAjaxurl, true) -page_request.send(null) -} - -function loadpage(page_request, containerid){ -var div = document.getElementById(containerid); -if (page_request.readyState == 4 && (page_request.status==200 || window.location.href.indexOf("http")==-1)) - div.innerHTML=page_request.responseText; - var x = div.getElementsByTagName("script"); - for(var i=0;i=0) - eval(x[i].text); - } -} - -function resizeDivScrollbar(){ - var frame = document.getElementById("scrollableTableResult"); - var parentBody = window.parent.document.body; - var parentMenu = window.parent.document.getElementById("application"); - if(frame!=null) { - //alert(frame.clientHeight + " " + window.parent.document.body.clientHeight); - if (frame.clientHeight > window.parent.document.body.clientHeight) { - frame.style.height = window.parent.document.body.clientHeight-350; - } else - frame.style.height = window.parent.document.body.clientHeight; - parentMenu.style.width = frame.clientWidth+200; - } -} - - -function loadobjs(){ -if (!document.getElementById) -return -for (i=0; i=0)this.isMSIE = true; else this.isMSIE = false; -} - - -DHTMLgoodies_formTooltip.prototype = { - // {{{ initFormFieldTooltip() - /** - * - * - * Initializes the tooltip script. Most set methods needs to be executed before you call this method. - * - * @public - */ - initFormFieldTooltip : function() - { - var formElements = new Array(); - var inputs = document.getElementsByTagName('IMG'); - for(var no=0;no'); - this.tooltipIframeObj.style.position = 'absolute'; - this.tooltipIframeObj.style.top = '0px'; - this.tooltipIframeObj.style.left = '0px'; - this.tooltipIframeObj.style.width = (this.tooltipWidth) + 'px'; - this.tooltipIframeObj.style.zIndex = 100; - this.tooltipIframeObj.background = this.pageBgColor; - this.tooltipIframeObj.style.backgroundColor= this.pageBgColor; - this.tooltipDiv.appendChild(this.tooltipIframeObj); - if(this.tooltipPosition!='below' && this.displayArrow){ - this.tooltipIframeObj.style.left = (this.arrowRightWidth) + 'px'; - }else{ - this.tooltipIframeObj.style.top = this.arrowTopHeight + 'px'; - } - - setTimeout("self.frames['tooltipIframeObj'].document.documentElement.style.backgroundColor='" + this.pageBgColor + "'",500); - - } - - this.tooltipContentDiv = document.createElement('DIV'); - this.tooltipContentDiv.style.position = 'relative'; - this.tooltipContentDiv.id = 'DHTMLgoodies_formTooltipContent'; - outerDiv.appendChild(this.tooltipContentDiv); - - var closeDiv = document.createElement('DIV'); - closeDiv.style.textAlign = 'center'; - - closeDiv.innerHTML = '' + this.closeMessage + ''; - - if(this.disableTooltipPossibility){ - var tmpHTML = closeDiv.innerHTML; - tmpHTML = tmpHTML + ' | ' + this.disableTooltipMessage + ''; - closeDiv.innerHTML = tmpHTML; - } - - outerDiv.appendChild(closeDiv); - - document.body.appendChild(this.tooltipDiv); - - - - if(this.tooltipCornerSize>0){ - this.roundedCornerObj = new DHTMLgoodies_roundedCorners(); - // (divId,xRadius,yRadius,color,backgroundColor,padding,heightOfContent,whichCorners) - this.roundedCornerObj.addTarget('DHTMLgoodies_formTooltipDiv',this.tooltipCornerSize,this.tooltipCornerSize,this.tooltipBgColor,this.pageBgColor,5); - this.roundedCornerObj.init(); - } - - - this.tooltipContentDiv = document.getElementById('DHTMLgoodies_formTooltipContent'); - } - // }}} - , - addEvent : function(whichObject,eventType,functionName) - { - if(whichObject.attachEvent){ - whichObject['e'+eventType+functionName] = functionName; - whichObject[eventType+functionName] = function(){whichObject['e'+eventType+functionName]( window.event );} - whichObject.attachEvent( 'on'+eventType, whichObject[eventType+functionName] ); - } else - whichObject.addEventListener(eventType,functionName,false); - } - // }}} - , - __positionCurrentToolTipObj : function() - { - if(DHTMLgoodies_globalTooltipObj.activeInput)this.__positionTooltip(DHTMLgoodies_globalTooltipObj.activeInput); - - } - // }}} - , - // {{{ __positionTooltip() - /** - * - * - * This function positions the tooltip - * - * @param Obj inputObj = Reference to text input - * - * @private - */ - __positionTooltip : function(inputObj) - { - var offset = 0; - if(!this.displayArrow)offset = 3; - if(this.tooltipPosition=='below'){ - this.tooltipDiv.style.left = this.getLeftPos(inputObj)+ 'px'; - this.tooltipDiv.style.top = (this.getTopPos(inputObj) + inputObj.offsetHeight + offset) + 'px'; - }else{ - - this.tooltipDiv.style.left = (this.getLeftPos(inputObj) + inputObj.offsetWidth + offset)+ 'px'; - this.tooltipDiv.style.top = this.getTopPos(inputObj) + 'px'; - } - this.tooltipDiv.style.width=this.tooltipWidth + 'px'; - - } - , - // {{{ getTopPos() - /** - * This method will return the top coordinate(pixel) of an object - * - * @param Object inputObj = Reference to HTML element - * @public - */ - getTopPos : function(inputObj) - { - var returnValue = inputObj.offsetTop; - while((inputObj = inputObj.offsetParent) != null){ - if(inputObj.tagName!='HTML'){ - returnValue += inputObj.offsetTop; - if(document.all)returnValue+=inputObj.clientTop; - } - } - return returnValue; - } - // }}} - - , - // {{{ getLeftPos() - /** - * This method will return the left coordinate(pixel) of an object - * - * @param Object inputObj = Reference to HTML element - * @public - */ - getLeftPos : function(inputObj) - { - var returnValue = inputObj.offsetLeft; - while((inputObj = inputObj.offsetParent) != null){ - if(inputObj.tagName!='HTML'){ - returnValue += inputObj.offsetLeft; - if(document.all)returnValue+=inputObj.clientLeft; - } - } - return returnValue; - } - - , - - // {{{ getCookie() - /** - * - * These cookie functions are downloaded from - * http://www.mach5.com/support/analyzer/manual/html/General/CookiesJavaScript.htm - * - * This function returns the value of a cookie - * - * @param String name = Name of cookie - * @param Object inputObj = Reference to HTML element - * @public - */ - getCookie : function(name) { - var start = document.cookie.indexOf(name+"="); - var len = start+name.length+1; - if ((!start) && (name != document.cookie.substring(0,name.length))) return null; - if (start == -1) return null; - var end = document.cookie.indexOf(";",len); - if (end == -1) end = document.cookie.length; - return unescape(document.cookie.substring(len,end)); - } - // }}} - , - - // {{{ setCookie() - /** - * - * These cookie functions are downloaded from - * http://www.mach5.com/support/analyzer/manual/html/General/CookiesJavaScript.htm - * - * This function creates a cookie. (This method has been slighhtly modified) - * - * @param String name = Name of cookie - * @param String value = Value of cookie - * @param Int expires = Timestamp - days - * @param String path = Path for cookie (Usually left empty) - * @param String domain = Cookie domain - * @param Boolean secure = Secure cookie(SSL) - * - * @public - */ - setCookie : function(name,value,expires,path,domain,secure) { - expires = expires * 60*60*24*1000; - var today = new Date(); - var expires_date = new Date( today.getTime() + (expires) ); - var cookieString = name + "=" +escape(value) + - ( (expires) ? ";expires=" + expires_date.toGMTString() : "") + - ( (path) ? ";path=" + path : "") + - ( (domain) ? ";domain=" + domain : "") + - ( (secure) ? ";secure" : ""); - document.cookie = cookieString; - } - // }}} - - -} \ No newline at end of file diff --git a/ecomp-sdk/epsdk-app-overlay/src/main/webapp/static/fusion/raptor/js/rounded-corners.js b/ecomp-sdk/epsdk-app-overlay/src/main/webapp/static/fusion/raptor/js/rounded-corners.js deleted file mode 100644 index f5df01ce..00000000 --- a/ecomp-sdk/epsdk-app-overlay/src/main/webapp/static/fusion/raptor/js/rounded-corners.js +++ /dev/null @@ -1,353 +0,0 @@ -/************************************************************************************************************
-
- @fileoverview - Rounded corners class
- (C) www.dhtmlgoodies.com, September 2006
-
- This is a script from www.dhtmlgoodies.com. You will find this and a lot of other scripts at our website.
-
- Terms of use:
- Look at the terms of use at http://www.dhtmlgoodies.com/index.html?page=termsOfUse
-
- Thank you!
-
- www.dhtmlgoodies.com
- Alf Magne Kalleland
-
-************************************************************************************************************/ - -// {{{ Constructor -function DHTMLgoodies_roundedCorners() -{ - var roundedCornerTargets; - - this.roundedCornerTargets = new Array(); - -} - var string = ''; -// }}} -DHTMLgoodies_roundedCorners.prototype = { - - // {{{ addTarget() - /** - * - * - * Add rounded corners to an element - * - * @param String divId = Id of element on page. Example "leftColumn" for <div id="leftColumn"> - * @param Int xRadius = Y radius of rounded corners, example 10 - * @param Int yRadius = Y radius of rounded corners, example 10 - * @param String color = Background color of element, example #FFF or #AABBCC - * @param String color = backgroundColor color of element "behind", example #FFF or #AABBCC - * @param Int padding = Padding of content - This will be added as left and right padding(not top and bottom) - * @param String heightOfContent = Optional argument. You can specify a fixed height of your content. example "15" which means pixels, or "50%". - * @param String whichCorners = Optional argument. Commaseparated list of corners, example "top_left,top_right,bottom_left" - * - * @public - */ - addTarget : function(divId,xRadius,yRadius,color,backgroundColor,padding,heightOfContent,whichCorners) - { - var index = this.roundedCornerTargets.length; - this.roundedCornerTargets[index] = new Array(); - this.roundedCornerTargets[index]['divId'] = divId; - this.roundedCornerTargets[index]['xRadius'] = xRadius; - this.roundedCornerTargets[index]['yRadius'] = yRadius; - this.roundedCornerTargets[index]['color'] = color; - this.roundedCornerTargets[index]['backgroundColor'] = backgroundColor; - this.roundedCornerTargets[index]['padding'] = padding; - this.roundedCornerTargets[index]['heightOfContent'] = heightOfContent; - this.roundedCornerTargets[index]['whichCorners'] = whichCorners; - - } - // }}} - , - // {{{ init() - /** - * - * - * Initializes the script - * - * - * @public - */ - init : function() - { - - for(var targetCounter=0;targetCounter < this.roundedCornerTargets.length;targetCounter++){ - - // Creating local variables of each option - whichCorners = this.roundedCornerTargets[targetCounter]['whichCorners']; - divId = this.roundedCornerTargets[targetCounter]['divId']; - xRadius = this.roundedCornerTargets[targetCounter]['xRadius']; - yRadius = this.roundedCornerTargets[targetCounter]['yRadius']; - color = this.roundedCornerTargets[targetCounter]['color']; - backgroundColor = this.roundedCornerTargets[targetCounter]['backgroundColor']; - padding = this.roundedCornerTargets[targetCounter]['padding']; - heightOfContent = this.roundedCornerTargets[targetCounter]['heightOfContent']; - whichCorners = this.roundedCornerTargets[targetCounter]['whichCorners']; - - // Which corners should we add rounded corners to? - var cornerArray = new Array(); - if(!whichCorners || whichCorners=='all'){ - cornerArray['top_left'] = true; - cornerArray['top_right'] = true; - cornerArray['bottom_left'] = true; - cornerArray['bottom_right'] = true; - }else{ - cornerArray = whichCorners.split(/,/gi); - for(var prop in cornerArray)cornerArray[cornerArray[prop]] = true; - } - - - var factorX = xRadius/yRadius; // How big is x radius compared to y radius - - var obj = document.getElementById(divId); // Creating reference to element - obj.style.backgroundColor=null; // Setting background color blank - obj.style.backgroundColor='transparent'; - var content = obj.innerHTML; // Saving HTML content of this element - obj.innerHTML = ''; // Setting HTML content of element blank- - - - - - // Adding top corner div. - - if(cornerArray['top_left'] || cornerArray['top_right']){ - var topBar_container = document.createElement('DIV'); - topBar_container.style.height = yRadius + 'px'; - topBar_container.style.overflow = 'hidden'; - - obj.appendChild(topBar_container); - var currentAntialiasSize = 0; - var savedRestValue = 0; - - for(no=1;no<=yRadius;no++){ - var marginSize = (xRadius - (this.getY((yRadius - no),yRadius,factorX))); - var marginSize_decimals = (xRadius - (this.getY_withDecimals((yRadius - no),yRadius,factorX))); - var restValue = xRadius - marginSize_decimals; - var antialiasSize = xRadius - marginSize - Math.floor(savedRestValue) - var foregroundSize = xRadius - (marginSize + antialiasSize); - - var el = document.createElement('DIV'); - el.style.overflow='hidden'; - el.style.height = '1px'; - if(cornerArray['top_left'])el.style.marginLeft = marginSize + 'px'; - if(cornerArray['top_right'])el.style.marginRight = marginSize + 'px'; - topBar_container.appendChild(el); - var y = topBar_container; - - for(var no2=1;no2<=antialiasSize;no2++){ - switch(no2){ - case 1: - if (no2 == antialiasSize) - blendMode = ((restValue + savedRestValue) /2) - foregroundSize; - else { - var tmpValue = this.getY_withDecimals((xRadius - marginSize - no2),xRadius,1/factorX); - blendMode = (restValue - foregroundSize - antialiasSize + 1) * (tmpValue - (yRadius - no)) /2; - } - break; - case antialiasSize: - var tmpValue = this.getY_withDecimals((xRadius - marginSize - no2 + 1),xRadius,1/factorX); - blendMode = 1 - (1 - (tmpValue - (yRadius - no))) * (1 - (savedRestValue - foregroundSize)) /2; - break; - default: - var tmpValue2 = this.getY_withDecimals((xRadius - marginSize - no2),xRadius,1/factorX); - var tmpValue = this.getY_withDecimals((xRadius - marginSize - no2 + 1),xRadius,1/factorX); - blendMode = ((tmpValue + tmpValue2) / 2) - (yRadius - no); - } - - el.style.backgroundColor = this.__blendColors(backgroundColor,color,blendMode); - y.appendChild(el); - y = el; - var el = document.createElement('DIV'); - el.style.height = '1px'; - el.style.overflow='hidden'; - if(cornerArray['top_left'])el.style.marginLeft = '1px'; - if(cornerArray['top_right'])el.style.marginRight = '1px'; - el.style.backgroundColor=color; - } - - y.appendChild(el); - savedRestValue = restValue; - } - } - - // Add content - var contentDiv = document.createElement('DIV'); - contentDiv.className = obj.className; - contentDiv.style.border='1px solid ' + color; - contentDiv.innerHTML = content; - contentDiv.style.backgroundColor=color; - contentDiv.style.paddingLeft = padding + 'px'; - contentDiv.style.paddingRight = padding + 'px'; - - if(!heightOfContent)heightOfContent = ''; - heightOfContent = heightOfContent + ''; - if(heightOfContent.length>0 && heightOfContent.indexOf('%')==-1)heightOfContent = heightOfContent + 'px'; - if(heightOfContent.length>0)contentDiv.style.height = heightOfContent; - - obj.appendChild(contentDiv); - - - if(cornerArray['bottom_left'] || cornerArray['bottom_right']){ - var bottomBar_container = document.createElement('DIV'); - bottomBar_container.style.height = yRadius + 'px'; - bottomBar_container.style.overflow = 'hidden'; - - obj.appendChild(bottomBar_container); - var currentAntialiasSize = 0; - var savedRestValue = 0; - - var errorOccured = false; - var arrayOfDivs = new Array(); - for(no=1;no<=yRadius;no++){ - - var marginSize = (xRadius - (this.getY((yRadius - no),yRadius,factorX))); - var marginSize_decimals = (xRadius - (this.getY_withDecimals((yRadius - no),yRadius,factorX))); - - var restValue = (xRadius - marginSize_decimals); - var antialiasSize = xRadius - marginSize - Math.floor(savedRestValue) - var foregroundSize = xRadius - (marginSize + antialiasSize); - - var el = document.createElement('DIV'); - el.style.overflow='hidden'; - el.style.height = '1px'; - if(cornerArray['bottom_left'])el.style.marginLeft = marginSize + 'px'; - if(cornerArray['bottom_right'])el.style.marginRight = marginSize + 'px'; - bottomBar_container.insertBefore(el,bottomBar_container.firstChild); - - var y = bottomBar_container; - - for(var no2=1;no2<=antialiasSize;no2++){ - switch(no2){ - case 1: - if (no2 == antialiasSize) - blendMode = ((restValue + savedRestValue) /2) - foregroundSize; - else { - var tmpValue = this.getY_withDecimals((xRadius - marginSize - no2),xRadius,1/factorX); - blendMode = (restValue - foregroundSize - antialiasSize + 1) * (tmpValue - (yRadius - no)) /2; - } - break; - case antialiasSize: - var tmpValue = this.getY_withDecimals((xRadius - marginSize - no2 + 1),xRadius,1/factorX); - blendMode = 1 - (1 - (tmpValue - (yRadius - no))) * (1 - (savedRestValue - foregroundSize)) /2; - break; - default: - var tmpValue2 = this.getY_withDecimals((xRadius - marginSize - no2),xRadius,1/factorX); - var tmpValue = this.getY_withDecimals((xRadius - marginSize - no2 + 1),xRadius,1/factorX); - blendMode = ((tmpValue + tmpValue2) / 2) - (yRadius - no); - } - - el.style.backgroundColor = this.__blendColors(backgroundColor,color,blendMode); - - if(y==bottomBar_container)arrayOfDivs[arrayOfDivs.length] = el; - - try{ // Need to look closer at this problem which occures in Opera. - var firstChild = y.getElementsByTagName('DIV')[0]; - y.insertBefore(el,y.firstChild); - }catch(e){ - y.appendChild(el); - errorOccured = true; - } - y = el; - - var el = document.createElement('DIV'); - el.style.height = '1px'; - el.style.overflow='hidden'; - if(cornerArray['bottom_left'])el.style.marginLeft = '1px'; - if(cornerArray['bottom_right'])el.style.marginRight = '1px'; - - } - - if(errorOccured){ // Opera fix - for(var divCounter=arrayOfDivs.length-1;divCounter>=0;divCounter--){ - bottomBar_container.appendChild(arrayOfDivs[divCounter]); - } - } - - el.style.backgroundColor=color; - y.appendChild(el); - savedRestValue = restValue; - } - - } - } - } - // }}} - , - // {{{ getY() - /** - * - * - * Add rounded corners to an element - * - * @param Int x = x Coordinate - * @param Int maxX = Size of rounded corners - * - * - * @private - */ - getY : function(x,maxX,factorX){ - // y = sqrt(100 - x^2) - // Y = 0.5 * ((100 - x^2)^0.5); - return Math.max(0,Math.ceil(factorX * Math.sqrt( (maxX * maxX) - (x*x)) )); - - } - // }}} - , - // {{{ getY_withDecimals() - /** - * - * - * Add rounded corners to an element - * - * @param Int x = x Coordinate - * @param Int maxX = Size of rounded corners - * - * - * @private - */ - getY_withDecimals : function(x,maxX,factorX){ - // y = sqrt(100 - x^2) - // Y = 0.5 * ((100 - x^2)^0.5); - return Math.max(0,factorX * Math.sqrt( (maxX * maxX) - (x*x)) ); - - } - - - , - - // {{{ __blendColors() - /** - * - * - * Simply blending two colors by extracting red, green and blue and subtracting difference between colors from them. - * Finally, we multiply it with the blendMode value - * - * @param String colorA = RGB color - * @param String colorB = RGB color - * @param Float blendMode - * - * - * @private - */ - __blendColors : function (colorA, colorB, blendMode) { - if(colorA.length=='4'){ // In case we are dealing with colors like #FFF - colorA = '#' + colorA.substring(1,1) + colorA.substring(1,1) + colorA.substring(2,1) + colorA.substring(2,1) + colorA.substring(3,1) + colorA.substring(3,1); - } - if(colorB.length=='4'){ // In case we are dealing with colors like #FFF - colorB = '#' + colorB.substring(1,1) + colorB.substring(1,1) + colorB.substring(2,1) + colorB.substring(2,1) + colorB.substring(3,1) + colorB.substring(3,1); - } - var colorArrayA = [parseInt('0x' + colorA.substring(1,3)), parseInt('0x' + colorA.substring(3, 5)), parseInt('0x' + colorA.substring(5, 7))]; // Create array of Red, Green and Blue ( 0-255) - var colorArrayB = [parseInt('0x' + colorB.substring(1,3)), parseInt('0x' + colorB.substring(3, 5)), parseInt('0x' + colorB.substring(5, 7))]; // Create array of Red, Green and Blue ( 0-255) - var red = Math.round(colorArrayA[0] + (colorArrayB[0] - colorArrayA[0])*blendMode).toString(16); // Create new Red color ( Hex ) - var green = Math.round(colorArrayA[1] + (colorArrayB[1] - colorArrayA[1])*blendMode).toString(16); // Create new Green color ( Hex ) - var blue = Math.round(colorArrayA[2] + (colorArrayB[2] - colorArrayA[2])*blendMode).toString(16); // Create new Blue color ( Hex ) - - if(red.length==1)red = '0' + red; - if(green.length==1)green = '0' + green; - if(blue.length==1)blue = '0' + blue; - - return '#' + red + green+ blue; // Return new RGB color - } -} diff --git a/ecomp-sdk/epsdk-music/src/main/java/org/onap/portalapp/music/conf/MusicSessionRepositoryHandler.java b/ecomp-sdk/epsdk-music/src/main/java/org/onap/portalapp/music/conf/MusicSessionRepositoryHandler.java index ad90d4ec..7d2e51ff 100644 --- a/ecomp-sdk/epsdk-music/src/main/java/org/onap/portalapp/music/conf/MusicSessionRepositoryHandler.java +++ b/ecomp-sdk/epsdk-music/src/main/java/org/onap/portalapp/music/conf/MusicSessionRepositoryHandler.java @@ -85,6 +85,7 @@ public class MusicSessionRepositoryHandler { sessions.put(id, musicSession); try { MusicService.setMetaAttribute(musicSession); + MusicService.cleanUpMusic(); } catch (Exception e) { logger.error(EELFLoggerDelegate.errorLogger, "setMetaAttribute failed with id " + id, e); } diff --git a/ecomp-sdk/epsdk-music/src/main/java/org/onap/portalapp/music/service/MusicService.java b/ecomp-sdk/epsdk-music/src/main/java/org/onap/portalapp/music/service/MusicService.java index 4ceac22c..801e9c03 100644 --- a/ecomp-sdk/epsdk-music/src/main/java/org/onap/portalapp/music/service/MusicService.java +++ b/ecomp-sdk/epsdk-music/src/main/java/org/onap/portalapp/music/service/MusicService.java @@ -38,7 +38,12 @@ package org.onap.portalapp.music.service; +import java.text.DateFormat; +import java.text.SimpleDateFormat; +import java.util.ArrayList; +import java.util.Date; import java.util.HashMap; +import java.util.List; import java.util.Map; import org.onap.music.datastore.PreparedQueryObject; @@ -61,6 +66,7 @@ import org.springframework.session.Session; import org.springframework.web.client.RestTemplate; import com.datastax.driver.core.ResultSet; +import com.datastax.driver.core.Row; import com.fasterxml.jackson.core.JsonProcessingException; import com.fasterxml.jackson.databind.ObjectMapper; @@ -539,5 +545,108 @@ public class MusicService { path.append("/"); return path.toString(); } + + /** + * Get a list of sessions that need to be cleaned up + * + * @return List + */ + private static List getSessionToBeDeleted(){ + logger.debug(EELFLoggerDelegate.debugLogger, "initial getSessionToBeDeleted ..."); + + PreparedQueryObject queryObject = new PreparedQueryObject(); + ResultSet result = null; + List sessionIDList = new ArrayList<>(); + DateFormat dateFormat = new SimpleDateFormat("yyyy-MM-dd'T'HH:mm:ss.SSS'Z'"); + StringBuilder querySB = new StringBuilder(); + String cleanUpThreshold = MusicProperties.getProperty(MusicProperties.MUSIC_CLEAN_UP_THRESHOLD); //Clean up sessions that's cleanUpThreshold hours ago + Date dateForCleanup = new Date(System.currentTimeMillis() - 3600 * 1000 * Integer.valueOf(cleanUpThreshold)); // Get the threshold date that needs to be clean up + String dateForCleanupCondition = dateFormat.format(dateForCleanup); + querySB.append("SELECT ").append(MusicProperties.PRIMARY_ID).append(" FROM ").append(musicKeySpace) + .append(".").append(getTableName(true)).append(" WHERE ").append(MusicProperties.LAST_ACCESS_TIME) + .append("< ? ").append(" ALLOW FILTERING"); + queryObject.appendQueryString(querySB.toString()); + queryObject.addValue(dateForCleanupCondition); + + try{ + if (isAtomicGet) + result = MusicCore.atomicGet(musicKeySpace, musicMetaTable, null, queryObject); + else + result = MusicCore.get(queryObject); + Row row = result.one(); + while(row!=null){ + sessionIDList.add(row.get(MusicProperties.PRIMARY_ID, String.class)); + row = result.one(); + } + }catch(Exception e){ + logger.error(EELFLoggerDelegate.errorLogger, "Error while cleaning up music tables" , e); + } + return sessionIDList; + } + + /** + * Remove session data in music base on the defined frequency + * + * @return List + */ + public static void cleanUpMusic() { + boolean timeToCleanUp = MusicUtil.cleanUp(); // Decide whether to clean up or not + ReturnType result = null; + if(timeToCleanUp){ + /**Getting a list of sessions that need to be cleaned up*/ + List sessionIDList = getSessionToBeDeleted(); + if(sessionIDList!=null || sessionIDList.size()!=0){ + StringBuilder sessionIDListCondition = new StringBuilder(); + sessionIDListCondition.append("('"); + for(String s : sessionIDList){ + sessionIDListCondition.append(s); + sessionIDListCondition.append("','"); + } + sessionIDListCondition.deleteCharAt(sessionIDListCondition.length()-1); + sessionIDListCondition.deleteCharAt(sessionIDListCondition.length()-1); + sessionIDListCondition.append(")"); + StringBuilder querySB = new StringBuilder(); + PreparedQueryObject queryObject = new PreparedQueryObject(); + /**Deleting attributes table**/ + querySB = new StringBuilder(); + queryObject = new PreparedQueryObject(); + querySB.append("DELETE FROM ").append(musicKeySpace) + .append(".").append(getTableName(false)).append(" WHERE ").append(MusicProperties.PRIMARY_ID) + .append(" in ").append(sessionIDListCondition); + queryObject.appendQueryString(querySB.toString()); + try{ + if (isAtomicPut) + result = MusicCore.atomicPut(musicKeySpace, null, null, queryObject, null); + else + result = MusicCore.eventualPut(queryObject); + }catch(Exception e){ + logger.error(EELFLoggerDelegate.errorLogger, "Error while cleaning up music attributes tables" , e); + } + logger.debug(EELFLoggerDelegate.debugLogger, "Music sessions have been cleaned up !"); + + /**Deleting meta table**/ + logger.debug(EELFLoggerDelegate.debugLogger, "Cleaning up meta table ..."); + querySB = new StringBuilder(); + queryObject = new PreparedQueryObject(); + querySB.append("DELETE FROM ").append(musicKeySpace) + .append(".").append(getTableName(true)).append(" WHERE ").append(MusicProperties.PRIMARY_ID) + .append(" in ").append(sessionIDListCondition); + queryObject.appendQueryString(querySB.toString()); + try{ + if (isAtomicPut) + result = MusicCore.atomicPut(musicKeySpace, null, null, queryObject, null); + else + result = MusicCore.eventualPut(queryObject); + }catch(Exception e){ + logger.error(EELFLoggerDelegate.errorLogger, "Error while cleaning up music meta tables" , e); + } + + logger.debug(EELFLoggerDelegate.debugLogger, "Cleaned up attributes table ... "); + }else{ + logger.debug(EELFLoggerDelegate.debugLogger, "No Session needs to be cleaned up"); + } + + } + } } diff --git a/ecomp-sdk/epsdk-music/src/main/java/org/onap/portalapp/music/util/MusicCleanUp.java b/ecomp-sdk/epsdk-music/src/main/java/org/onap/portalapp/music/util/MusicCleanUp.java new file mode 100644 index 00000000..aab04eaf --- /dev/null +++ b/ecomp-sdk/epsdk-music/src/main/java/org/onap/portalapp/music/util/MusicCleanUp.java @@ -0,0 +1,62 @@ +/* + * ============LICENSE_START========================================== + * ONAP Portal SDK + * =================================================================== + * Copyright © 2017 AT&T Intellectual Property. All rights reserved. + * =================================================================== + * + * Unless otherwise specified, all software contained herein is licensed + * under the Apache License, Version 2.0 (the "License"); + * you may not use this software except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * + * Unless otherwise specified, all documentation contained herein is licensed + * under the Creative Commons License, Attribution 4.0 Intl. (the "License"); + * you may not use this documentation except in compliance with the License. + * You may obtain a copy of the License at + * + * https://creativecommons.org/licenses/by/4.0/ + * + * Unless required by applicable law or agreed to in writing, documentation + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * + * ============LICENSE_END============================================ + * + *. + */ + +package org.onap.portalapp.music.util; + +import java.util.Date; + +public class MusicCleanUp { + private static volatile MusicCleanUp musicCleanUp = new MusicCleanUp(); + // private constructor restricted to this class itself + private MusicCleanUp(){ + } + + private Date lastCleanUpTime = new Date(); + + public static MusicCleanUp getInstance(){ + return musicCleanUp; + } + + public Date getLastCleanUpTime(){ + return lastCleanUpTime; + } + + public synchronized void updateLastCleanUpTimeToCurrent() { + lastCleanUpTime = new Date(); + } +} diff --git a/ecomp-sdk/epsdk-music/src/main/java/org/onap/portalapp/music/util/MusicProperties.java b/ecomp-sdk/epsdk-music/src/main/java/org/onap/portalapp/music/util/MusicProperties.java index bdc9c543..34b0a5b9 100644 --- a/ecomp-sdk/epsdk-music/src/main/java/org/onap/portalapp/music/util/MusicProperties.java +++ b/ecomp-sdk/epsdk-music/src/main/java/org/onap/portalapp/music/util/MusicProperties.java @@ -93,6 +93,10 @@ public class MusicProperties { public static final String MUSIC_ATOMIC_POST = "music.atomic.post"; + public static final String MUSIC_CLEAN_UP_FREQUENCY = "music.cleanup.frequency"; + + public static final String MUSIC_CLEAN_UP_THRESHOLD = "music.cleanup.threshold"; + public static final String SESSION_MAX_INACTIVE_INTERVAL_SECONDS = "music.session.max.inactive.interval.seconds"; public static final String ATTRIBUTE_NAME = "ATTRIBUTE_NAME"; diff --git a/ecomp-sdk/epsdk-music/src/main/java/org/onap/portalapp/music/util/MusicUtil.java b/ecomp-sdk/epsdk-music/src/main/java/org/onap/portalapp/music/util/MusicUtil.java index 2744796e..8819af25 100644 --- a/ecomp-sdk/epsdk-music/src/main/java/org/onap/portalapp/music/util/MusicUtil.java +++ b/ecomp-sdk/epsdk-music/src/main/java/org/onap/portalapp/music/util/MusicUtil.java @@ -46,6 +46,7 @@ import java.nio.ByteBuffer; import java.time.Duration; import java.time.Instant; import java.util.Arrays; +import java.util.Date; import java.util.HashSet; import java.util.Set; import java.util.zip.GZIPInputStream; @@ -64,6 +65,7 @@ public class MusicUtil { private static String atomicPut = MusicProperties.getProperty(MusicProperties.MUSIC_ATOMIC_PUT); private static String atomicGet = MusicProperties.getProperty(MusicProperties.MUSIC_ATOMIC_GET); private static String cached = MusicProperties.getProperty(MusicProperties.MUSIC_CACHE); + private static String cleanUpFreq = MusicProperties.getProperty(MusicProperties.MUSIC_CLEAN_UP_FREQUENCY); private static String musicSerializeCompress = MusicProperties.getProperty(MusicProperties.MUSIC_SERIALIZE_COMPRESS); public static boolean isSessionMetaAttr(String key){ return sessionAttrNameSet.contains(key); @@ -159,4 +161,25 @@ public class MusicUtil { } return cached.trim().equalsIgnoreCase("true"); } + + public static int convertHoursToMillSec(int hour){ + return hour*3600000; + } + + public static boolean cleanUp(){ + Date lastCleanUpDate = MusicCleanUp.getInstance().getLastCleanUpTime(); + if(lastCleanUpDate==null) + return false; + else{ + int cleanUpDurationMili = convertHoursToMillSec(Integer.valueOf(cleanUpFreq)); + Date currentTime = new Date(); + long diffInMillies = Math.abs(currentTime.getTime() - lastCleanUpDate.getTime()); + if(diffInMillies > cleanUpDurationMili){ + MusicCleanUp.getInstance().updateLastCleanUpTimeToCurrent(); + return true; + } + else + return false; + } + } } -- cgit 1.2.3-korg