Rev 7288 | Blame | Compare with Previous | Last modification | View Log | RSS feed
<%@LANGUAGE="VBSCRIPT"%><%'====================================================='| form_edit_deps.asp'| Used by JATS and ANT import pages to sanitize the package versions to be used'| Do not allow user to name packages that do not exist'| Do not allow the user to name package-versions that do not exist'| Used by Edit Dependencies button'| Restrict users to versions that exist'|'=====================================================%><%Option explicit' Good idea to set when using redirectResponse.Expires = 0 ' always load the page, dont store%><!--#include file="common/conf.asp"--><!--#include file="common/globals.asp"--><!--#include file="common/formating.asp"--><!--#include file="common/qstr.asp"--><!--#include file="common/common_subs.asp"--><%' Make sure rtag_id is always presentIf Request("pv_id") = "" ThenCall Destroy_All_ObjectsResponse.Redirect("index.asp")End If%><%'------------ ACCESS CONTROL ------------------%><!--#include file="_access_control_login.asp"--><!--#include file="_access_control_general.asp"--><!--#include file="_access_control_project.asp"--><%'------------ Variable Definition -------------Dim parPv_idDim rsPkgsDim HTML_pkg_listDim DataFoundDim recCnt'------------ Constants Declaration -----------'------------ Variable Init -------------------parPv_id = Request("pv_id")Set pkgInfoHash = CreateObject("Scripting.Dictionary")recCnt = 0'-------------------------------------------------' Function: Populate_from_Import' Description: Generate the body of the display based on user imported dataSub Populate_from_Import ( SSdep_import, SShtml_pkg_list, BBDataFound)Dim pkg_name, pkg_version, build_type, re, Matches, MatchDim Query_String, rsDeps, PVID, PKGID, builtTypeEnum, LatestVisibleDim OraParameterDataFound = falseIf (SSdep_import = "") Then Exit Sub ' exit if no dependencies are submited' Decode Server.URLEncode if presentSSdep_import = URLDecode( SSdep_import )SSdep_import = Replace(SSdep_import, " ", "") ' remove spacesSSdep_import = Replace(SSdep_import, VBTab, "") ' remove horizontal tabsSSdep_import = Replace(SSdep_import, VBVerticalTab, "") ' remove vertical tabsSSdep_import = Replace(SSdep_import, """", "'") ' replace " with 'Set re = New RegExpre.IgnoreCase = Truere.Global = True'The following regular expression captures the package name and version on each matching line.'The following is an example of the format of the input string, SSdep_import.''BuildPkgArchive ( 'linux_kernel_viper' , '2.6.24.6.5000.cots' );''# Packages for creating the debian package'#LinkPkgArchive ( 'debian_dpkg' , '1.13.25000.cots' );'LinkPkgArchive ( 'debian_packager' , '1.1.0000.cr' );'LinkPkgArchive ( 'Jasper Patch (JBoss/Tomcat Hotfix)' , '1.6.0,REV=2006.11.29.02.51' );'LinkPkgArchive ( 'Java 2 SDK, Enterprise Edition (J2EE)' , '1.6.0,REV=2006.11.29.02.51' );'' Note. Ant dependencies are formatted to look like:' AntStyle('PackageName','PackageVersion');re.Pattern = "(^|\n)\s*([_A-Za-z0-9]+)\s*\(\s*\'([^\']*)\'\s*\,\s*\'([^\']*)\'\s*\)"Set Matches = re.Execute(SSdep_import)Query_String = ReadFile( rootPath & "queries\form_edit_import_deps.sql" )OraDatabase.Parameters.Add "RTAG_ID", parRtag_id, ORAPARM_INPUT, ORATYPE_NUMBEROraDatabase.Parameters.Add "PKG_NAME", pkg_name , ORAPARM_INPUT, ORATYPE_STRINGOraDatabase.Parameters.Add "PKG_VERSION", pkg_version, ORAPARM_INPUT, ORATYPE_STRINGSet OraParameter = OraDatabase.ParametersrecCnt=0For Each Match in Matchesbuild_type = Match.SubMatches(1)pkg_name = Match.SubMatches(2)pkg_version = Match.SubMatches(3)' Proceed only if:' pkg name is not empty,' pkg version is not empty,If ( pkg_name <> "" ) AND ( pkg_version <> "" ) Then' Define build type' Unknown will be a BuildPkgArchiveIf LCase(build_type) = LCase("BuildPkgArchive") ThenbuiltTypeEnum = enum_BUILD_PKG_ARCHIVEElseIf LCase(build_type) = LCase("LinkPkgArchive") ThenbuiltTypeEnum = enum_LINK_PKG_ARCHIVEElsebuiltTypeEnum = enum_BUILD_PKG_ARCHIVEEnd If'' Create one entry'OraParameter("PKG_NAME").Value = pkg_nameOraParameter("PKG_VERSION").Value = pkg_versionSet rsDeps = OraDatabase.DbCreateDynaset( Query_String, cint(0))If rsDeps.RecordCount <> 0 ThenSShtml_pkg_list = SShtml_pkg_list & GenerateEntry( recCnt, rsDeps("pkg_id"), rsDeps("pv_id"), rsDeps("pkg_name"), rsDeps("pkg_version"), builtTypeEnum, rsDeps("lpkg_version"))recCnt = recCnt + 1DataFound = trueEnd IfrsDeps.CloseSet rsDeps = NothingEnd IfNextOraDatabase.Parameters.Remove "RTAG_ID"OraDatabase.Parameters.Remove "PKG_NAME"OraDatabase.Parameters.Remove "PKG_VERSION"Set OraParameter = NothingEnd Sub'-------------------------------------------------' Function: Populate_from_Package' Description: Generate the body of the display based on package-versions in the current package'Sub Populate_from_Package( NNpv_id, nRtag_id, SShtml_pkg_list, BBDataFound )Dim rsDeps, Query_StringBBDataFound = FALSErecCnt = 0Query_String = ReadFile( rootPath & "queries\edit_dependencies.sql" )OraDatabase.Parameters.Add "RTAG_ID", nRtag_id, ORAPARM_INPUT, ORATYPE_NUMBEROraDatabase.Parameters.Add "PV_ID", NNpv_id, ORAPARM_INPUT, ORATYPE_NUMBERSet rsDeps = OraDatabase.DbCreateDynaset( Query_String, cint(0))While ((NOT rsDeps.BOF) AND (NOT rsDeps.EOF))SShtml_pkg_list = SShtml_pkg_list & GenerateEntry( recCnt, rsDeps("pkg_id"), rsDeps("pv_id"), rsDeps("pkg_name"), rsDeps("pkg_version"), rsDeps("build_type"), rsDeps("lpkg_version"))recCnt = recCnt + 1BBDataFound = TRUErsDeps.MoveNextWEndOraDatabase.Parameters.Remove "RTAG_ID"OraDatabase.Parameters.Remove "PV_ID"End Sub'-------------------------------------------------' Function: GenerateEntry' Description: Generate one line of the import displayFunction GenerateEntry( idx, pkgId, pvId, pName, pVersion, pBuildType, pLversion)Dim LatestVisibleGenerateEntry = GenerateEntry &"<tr> "' Package Name - will always be presentGenerateEntry = GenerateEntry &" <td background='images/bg_form_lightgray.gif' nowrap class='form_item'>" & pNameGenerateEntry = GenerateEntry &" <input name='bt"& idx &"' type='hidden' value='"& pBuildType &"'>"GenerateEntry = GenerateEntry &" <input name='btName"& idx &"' type='hidden' value='"& pName & "'>"GenerateEntry = GenerateEntry &" </td>"' Package Version specified by user' If package does not exist, then this is a text field'If isNULL(pkgId) ThenGenerateEntry = GenerateEntry &" <td background='images/bg_form_lightgray.gif'>" &_"<input type='text' readonly class='form_item' size='20' value='"& pVersion &"' disabled > " &_"<input type='text' hidden id='pkgn"& idx &"' name='pkgn"& idx &"' value=''> "GenerateEntry = GenerateEntry &" </td>"GenerateEntry = GenerateEntry &" <td background='images/bg_form_lightgray.gif' class='form_item err_alert badPackage'> Package Name does not exist"GenerateEntry = GenerateEntry &" </td>"ElseGenerateEntry = GenerateEntry &" <td background='images/bg_form_lightgray.gif'>" &_"<select style='width:15em;display:none' id='edpkgn"& idx &"' class='form_item' > " &_"<input type='text' readonly ondblclick='editVerNum("& pkgId &","&idx&");' id='pkgn"& idx &"' name='pkgn"& idx &"' class='form_item' size='20' value='"& pVersion &"' onBlur='Compare_Version ( " & idx & " );' onFocus='Compare_Version ( " & idx & " );'> "GenerateEntry = GenerateEntry &" <span class=pointer onClick='editVerNum("& pkgId &","& idx &")'><img src='images/i_edit.gif' width='12' height='12' align='absmiddle' border='0' title='Select Version from a list'></span> "If isNull(pvId) ThenGenerateEntry = GenerateEntry &" <span class='badPackage' id='divBver"& idx &"'>"&_"<img src='images/s_critical.gif' border='0' title='Version does not exist' hspace='2' align='absmiddle'>"&_"<input name='lpBver"& idx &"' type='hidden' value='"& pVersion &"'></span>"End IfGenerateEntry = GenerateEntry &" </td>"' Latest VersionsGenerateEntry = GenerateEntry &" <td background='images/bg_form_lightgray.gif' class='sublbox_hitem'>"LatestVisible = ""If NOT IsNull(pLversion) ThenIf ( pVersion = pLversion ) ThenLatestVisible = "style='display:none;'"End IfGenerateEntry = GenerateEntry &" <DIV id='divLPV"& idx &"' "& LatestVisible &">"&_"<span class=pointer onClick='Merge_Version ( "& idx & " );'>"&_"<img src='images/bt_move_left.gif' border='0' title='Bring over this latest version' hspace='2' align='absmiddle'>"&_"</span>"& pLversion &"<input name='lp"& idx &"' type='hidden' value='"& pLversion &"'></DIV>"End IfGenerateEntry = GenerateEntry &" </td>"End IfGenerateEntry = GenerateEntry &"</tr>"End Function%><%'=================== MAIN LINE =====================' Determine call modeOn Error GoTo 0If (Request("action") = "TextImport") ThenCall Populate_from_Import ( Request("FRdeps"), HTML_pkg_list, DataFound )ElseCall Populate_from_Package ( parPv_id, parRtag_id, HTML_pkg_list, DataFound )If Not DataFound ThenCall Destroy_All_ObjectsResponse.Redirect ("form_search_pkgs.asp?pv_id="& parPv_id &"&rtag_id="& parRtag_id &"&add_type="& enum_ADD_DEPENDENCIES)End IfEnd If%><html><head><title>Release Manager</title><link rel="shortcut icon" href="<%=FavIcon%>"/><meta HTTP-EQUIV="Pragma" CONTENT="no-cache"><meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1"><link rel="stylesheet" href="images/release_manager_style.css?ver=<%=VixVerNum%>" type="text/css"><link rel="stylesheet" href="images/navigation.css?ver=<%=VixVerNum%>" type="text/css"><script language="JavaScript" src="images/common.js?ver=<%=VixVerNum%>"></script><!-- DROPDOWN MENUS --><!--#include file="_jquery_includes.asp"--><!--#include file="_menu_def.asp"--><script language="JavaScript1.2" src="images/popup_menu.js?ver=<%=VixVerNum%>"></script><!-- JSON Support --------------------------><script language="JavaScript" src="scripts/remote_scripting.js?ver=<%=VixVerNum%>"></script><script type="text/javascript" src="scripts/json2.js?ver=<%=VixVerNum%>"></script><script language="JavaScript" type="text/JavaScript"><!--// When the page is loadedwindow.onload = scanBadData;// ValidateFormfunction ValidateForm(){return scanBadData();}// Scan the form for bad entries and update the 'Update' button accordinglyfunction scanBadData() {var elem = MM_findObj("btn_update")var rv = false;if (elem) {rv = document.getElementsByClassName("badPackage").length == 0;elem.disabled = !rv;}}// Update all packages to latest versionfunction MergeAll() {var recId;for (recId=0; recId<<%=recCnt%>;recId++) {Merge_Version(recId);}}// Restore original valuefunction Merge_Version (recId) {endEditVerNum(recId);var ediv = MM_findObj("divLPV"+ recId.toString() );var epkg = MM_findObj("pkgn"+ recId.toString() );var lpkg_version;el = MM_findObj( "lp" + recId.toString() );if (el) {lpkg_version = el.value;if(epkg) epkg.value = lpkg_version;}if(ediv) ediv.style.display = "none";var ebad = MM_findObj("divBver"+ recId.toString() );if(ebad) ebad.parentElement.removeChild(ebad);scanBadData();}// Highlight diff between release and user selectionfunction Compare_Version ( recId ) {var cv, lv, el;el = MM_findObj( "pkgn" + recId.toString() );cv = (el) ? el.value : 0;el = MM_findObj( "lp" + recId.toString() );if (el){lv = el.value;var ediv = MM_findObj("divLPV"+ recId.toString() );if (ediv){ediv.style.display = (cv == lv) ? 'none' : 'block';}}}// Edit the version numbervar editData = new Object();function editVerNum(NNpkg_id, recId){// Only initiate the edit onceif (editData[recId]){endEditVerNum(recId);return;}// Get the base element in the documentvar elem = document.getElementById('pkgn' + recId.toString() );var elemed = document.getElementById('edpkgn' + recId.toString() );if ( ! (elem && elemed) )return;// Show edit element and hide the fixed textelem.style.display = 'none';elemed.style.display = '';// Delete the bad version indicationvar ebad = MM_findObj("divBver"+ recId.toString() );if(ebad) ebad.parentElement.removeChild(ebad);// Populate essential fieldselemed.onchange = function(){editUpdate(recId);}elemed.onblur = elemed.onchange;// Create a dummy selection to indicate loadingvar el = document.createElement("option");var vname = "Loading";el.textContent = vname;el.value = vname;elemed.appendChild(el);// Save refs to the two elementsvar np = editData[recId] = new Object();np.edit = elemed;np.elem = elem;np.Value = elem.value;// Load version data into this new elementgetVersions(NNpkg_id, recId);scanBadData();}function editUpdate(recId){var sd = editData[recId];sd.elem.value = sd.edit.value;Compare_Version(recId);scanBadData();}// Globals are used to save state informationfunction endEditVerNum(recId){var sd = editData[recId];if (sd) {sd.elem.value = sd.edit.value;sd.edit.style.display = 'none';sd.elem.style.display = '';delete editData[recId];}scanBadData();}// Allow the user to populate the version selector box// Enables the selector once its been populated// Uses AJAX to populate the item on demandfunction getVersions(NNpkg_id, NN_pv_id){xmlHttp=GetXmlHttpObject(getVersionsDone);if (xmlHttp==null){alert ("Your browser does not support AJAX!");return;}var url = "_json_checkPackage.asp?"+ "pkg_id=" + NNpkg_id+ "&ref=" + NN_pv_id+ "&Opr=getVerList";showGlobalProgress();xmlHttp.open("GET",url,true); // `false` makes the request synchronousxmlHttp.send(null);}// Call back for getVersionsfunction getVersionsDone(){//readyState of 4 or 'complete' represents that data has been returnedif (xmlHttp.readyState == 4 || xmlHttp.readyState == 'complete'){hideGlobalProgress();//Gather the results from the callbackvar str = xmlHttp.responseText;//alert("JSON:" + str);if ( !str ) {alert("Empty responce from Release Manager. May have been logged ");return;}var myJson = JSON.parse(str);if(myJson.error){alert("Invalid responce from Release Manager");return;}var ref = myJson.VersionRef;var sd = editData[ref];var select = sd.edit;var sv = (sd) ? sd.Value : 0;select.innerHTML = '';select.disabled = false;for( var ii=0; ii< myJson.Versions.length; ii++){var el = document.createElement("option");var vname = myJson.Versions[ii].vname;el.selected = ( vname == sv );var p1 = el.selected ? '>' : ' ';var p2 = (myJson.Versions[ii].dlocked == "Y") ? 'R ' : ' ';el.textContent = p1 + p2 + vname;el.value = vname;select.appendChild(el);}}}// --></script></head><body bgcolor="#FFFFFF" text="#000000" leftmargin="0" topmargin="0"><!-- HEADER --><!--#include file="_header.asp"--><!-- BODY ----><table width="100%" height="80%" border="0" cellpadding="0" cellspacing="0" bgcolor=#f0f0f0><tr><td align="center" valign="top"><!-- MIDDLE ----------------------------------------><table width="650" border="0" cellspacing="0" cellpadding="0"><tr><td><!-- Body --><div style='position:relative'><form name="editdep" method="post" action="_update_dependencies.asp" onSubmit="return ValidateForm();"><table width="100%" border="0" cellspacing="1" cellpadding="2" class='rounded_box rounded_box_std' ><caption>EDIT dependencies</caption><tr><td colspan="2" width="1%" nowrap class="form_field"><%=pkgInfoHash.Item ("pkg_name")%> <%=pkgInfoHash.Item ("pkg_version")%></td></tr><tr><td colspan="2" width="1%" nowrap class="form_field"><table width="100%" border="0" cellspacing="1" cellpadding="2" class=stdGrey><thead><th nowrap width="1%" >Package Name</th><th nowrap width="50%">Version</th><th nowrap width="50%"><img src='images/bt_move_left.gif' border='0' title='Update all to released version' hspace='2' align='absmiddle' onClick='MergeAll();'>Released</th></thead><%=HTML_pkg_list%></table></td></tr><tr><td nowrap><input type="reset" name="btn" value="« Back" class="form_btn" onClick="history.back();"><input name="btn" type="reset" class="form_btn" value="Cancel" onClick="window.location='dependencies.asp?pv_id=<%=Request("pv_id")%>&rtag_id=<%=Request("rtag_id")%>';"><input type="submit" name="btn" value="Update" class="form_btn" id="btn_update"></td></tr><%If HTML_pkg_list = "" Then%><tr><td class='form_field_grey_bg form_item err_alert'>No Packages Specified. All dependencies will be deleted</td></tr><%End If%><input type="hidden" name="update_type" value="edit_import"><input type="hidden" name="pv_id" value="<%=parPv_id%>"><input type="hidden" name="rtag_id" value="<%=parRtag_id%>"></table></form></div><!-- END Body--></td></tr></table><!--------------------------------------------------></td></tr></table><!-- FOOTER --><!--#include file="_footer.asp"--></body></html>