Subversion Repositories DevTools

Rev

Rev 5983 | Rev 6676 | Go to most recent revision | 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 redirect
Response.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 present
If Request("pv_id") = "" Then
    Call Destroy_All_Objects
    Response.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_id
Dim rsPkgs
Dim HTML_pkg_list
Dim DataFound
Dim 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 data
Sub Populate_from_Import ( SSdep_import, SShtml_pkg_list, BBDataFound)
   Dim pkg_name, pkg_version, build_type, re, Matches, Match
   Dim Query_String, rsDeps, PVID, PKGID, builtTypeEnum, LatestVisible
   Dim OraParameter

   DataFound = false
   If (SSdep_import = "") Then Exit Sub      ' exit if no dependencies are submited

   ' Decode Server.URLEncode if present
   SSdep_import = URLDecode( SSdep_import )

   SSdep_import = Replace(SSdep_import, " ", "")            ' remove spaces
   SSdep_import = Replace(SSdep_import, VBTab, "")          ' remove horizontal tabs
   SSdep_import = Replace(SSdep_import, VBVerticalTab, "")  ' remove vertical tabs
   SSdep_import = Replace(SSdep_import, """", "'")          ' replace " with '

   Set re = New RegExp
   re.IgnoreCase = True
   re.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_NUMBER
    OraDatabase.Parameters.Add "PKG_NAME", pkg_name , ORAPARM_INPUT, ORATYPE_STRING
    OraDatabase.Parameters.Add "PKG_VERSION", pkg_version, ORAPARM_INPUT, ORATYPE_STRING
    Set OraParameter = OraDatabase.Parameters

   recCnt=0
   For Each Match in Matches
     build_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 BuildPkgArchive
         If LCase(build_type) = LCase("BuildPkgArchive") Then
            builtTypeEnum = enum_BUILD_PKG_ARCHIVE
         ElseIf LCase(build_type) = LCase("LinkPkgArchive") Then
            builtTypeEnum = enum_LINK_PKG_ARCHIVE
         Else
            builtTypeEnum = enum_BUILD_PKG_ARCHIVE
         End If

         '
         ' Create one entry
         '
         OraParameter("PKG_NAME").Value = pkg_name
         OraParameter("PKG_VERSION").Value = pkg_version

         Set rsDeps = OraDatabase.DbCreateDynaset( Query_String, cint(0))
         If rsDeps.RecordCount <> 0 Then
            SShtml_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 + 1
            DataFound = true
         End If
         rsDeps.Close
         Set rsDeps = Nothing
     End If
   Next

    OraDatabase.Parameters.Remove "RTAG_ID"
    OraDatabase.Parameters.Remove "PKG_NAME"
    OraDatabase.Parameters.Remove "PKG_VERSION"
    Set OraParameter = Nothing

End 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_String

    BBDataFound = FALSE
    recCnt = 0
    Query_String = ReadFile( rootPath & "queries\edit_dependencies.sql" )

    OraDatabase.Parameters.Add "RTAG_ID", nRtag_id, ORAPARM_INPUT, ORATYPE_NUMBER
    OraDatabase.Parameters.Add "PV_ID", NNpv_id, ORAPARM_INPUT, ORATYPE_NUMBER

    Set 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 + 1
        BBDataFound = TRUE
        rsDeps.MoveNext
    WEnd

    OraDatabase.Parameters.Remove "RTAG_ID"
    OraDatabase.Parameters.Remove "PV_ID"
End Sub

'-------------------------------------------------
' Function:    GenerateEntry
' Description: Generate one line of the import display
Function GenerateEntry( idx, pkgId, pvId, pName, pVersion, pBuildType, pLversion)
    Dim LatestVisible
    GenerateEntry = GenerateEntry &"<tr> "

    ' Package Name - will always be present
    GenerateEntry = GenerateEntry &"  <td background='images/bg_form_lightgray.gif' nowrap class='form_item'>" & pName
    GenerateEntry = 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) Then
        GenerateEntry = 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>"
    Else
        GenerateEntry = 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 &"    <a href='javascript:;' onClick='editVerNum("& pkgId &","& idx &")'><img src='images/i_edit.gif' width='12' height='12' align='absmiddle' border='0' title='Edit Version' title='Select Version from a list'></a> "

        If isNull(pvId) Then
            GenerateEntry = 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 If
        GenerateEntry = GenerateEntry &"  </td>"

        ' Latest Versions
        GenerateEntry = GenerateEntry &"  <td background='images/bg_form_lightgray.gif' class='sublbox_hitem'>"
        LatestVisible = ""
        If NOT IsNull(pLversion) Then
            If ( pVersion = pLversion ) Then
                LatestVisible = "style='display:none;'"
            End If

            GenerateEntry = GenerateEntry &"  <DIV id='divLPV"& idx &"' "& LatestVisible &">"&_
                                                  "<a href='javascript:;' onClick='Merge_Version ( "& idx & " );'>"&_
                                                  "<img src='images/bt_move_left.gif' border='0' title='Bring over this latest version' hspace='2' align='absmiddle'>"&_
                                                  "</a>"& pLversion &"<input name='lp"& idx &"' type='hidden' value='"& pLversion &"'></DIV>"
        End If
        GenerateEntry = GenerateEntry &"  </td>"
    End If
    GenerateEntry = GenerateEntry &"</tr>"
End Function

%>
<%
'=================== MAIN LINE =====================
'   Determine call mode
On Error GoTo 0
If (Request("action") = "TextImport") Then
    Call Populate_from_Import ( Request("FRdeps"), HTML_pkg_list, DataFound )
Else
    Call Populate_from_Package ( parPv_id, parRtag_id, HTML_pkg_list, DataFound )
    If Not DataFound Then
        Call Destroy_All_Objects
        Response.Redirect ("form_search_pkgs.asp?pv_id="& parPv_id &"&rtag_id="& parRtag_id &"&add_type="& enum_ADD_DEPENDENCIES)
    End If
End 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" type="text/css">
<link rel="stylesheet" href="images/navigation.css" type="text/css">
<script language="JavaScript" src="images/common.js"></script>
<!-- DROPDOWN MENUS -->
<!--#include file="_jquery_includes.asp"-->
<!--#include file="_menu_def.asp"-->
<script language="JavaScript1.2" src="images/popup_menu.js"></script>
<!-- JSON Support -------------------------->
<script language="JavaScript" src="scripts/remote_scripting.js"></script>
<script type="text/javascript" src="scripts/json2.js"></script>
<script language="JavaScript" type="text/JavaScript">
<!--
// When the page is loaded
window.onload = scanBadData;

// ValidateForm
function ValidateForm(){
    return scanBadData();
}

//  Scan the form for bad entries and update the 'Update' button accordingly
function 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 version
function MergeAll() {
    var recId;
    for (recId=0; recId<<%=recCnt%>;recId++) {
        Merge_Version(recId);
    }
}

// Restore original value
function 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 selection
function 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 number
var editData = new Object();
function editVerNum(NNpkg_id, recId)
{
    // Only initiate the edit once
    if (editData[recId])
    {
        endEditVerNum(recId);
        return;
    }

    // Get the base element in the document
    var elem = document.getElementById('pkgn' + recId.toString() );
    var elemed = document.getElementById('edpkgn' + recId.toString() );
    if ( ! (elem && elemed) )
        return;

    // Show edit element and hide the fixed text
    elem.style.display = 'none';
    elemed.style.display = '';

    // Delete the bad version indication
    var ebad = MM_findObj("divBver"+ recId.toString() );
    if(ebad) ebad.parentElement.removeChild(ebad);

    // Populate essential fields
    elemed.onchange = function(){editUpdate(recId);}
    elemed.onblur = elemed.onchange;

    // Create a dummy selection to indicate loading
    var el = document.createElement("option");
    var vname = "Loading";
    el.textContent = vname;
    el.value = vname;
    elemed.appendChild(el);

    // Save refs to the two elements
    var np = editData[recId] = new Object();
    
    np.edit = elemed;
    np.elem = elem;
    np.Value = elem.value;

    // Load version data into this new element
    getVersions(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 information
function 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 demand
function 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";
    MM_showProgressBar();
    xmlHttp.open("GET",url,true);  // `false` makes the request synchronous
    xmlHttp.send(null);
}

// Call back for getVersions
function getVersionsDone()
{
    //readyState of 4 or 'complete' represents that data has been returned
    if (xmlHttp.readyState == 4 || xmlHttp.readyState == 'complete'){
        MM_hideProgressBar();

        //Gather the results from the callback
        var 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">
  <tr>
    <td align="center" valign="top" background="images/bg_lght_gray.gif">
      <!-- MIDDLE ---------------------------------------->
      <table width="650" border="0" cellspacing="0" cellpadding="0">
        <tr>
          <td> <table width="100%" border="0" cellspacing="0" cellpadding="0">
              <tr>
                <td width="1%"></td>
                <td align="right"><img src="images/h_trsp_dot.gif" width="30" height="30"></td>
                <td width="1%"></td>
              </tr>
              <tr>
                <td width="1%"></td>
                <td> <table width="100%" border="0" cellspacing="0" cellpadding="0">
                    <tr>
                      <td nowrap class="form_ttl">EDIT dependencies</td>
                      <td align="right" valign="bottom"></td>
                    </tr>
                  </table></td>
                <td width="1%"></td>
              </tr>
              <tr>
                <td align="left" valign="top" width="1%" background="images/lbox_bg_blue.gif"><img src="images/lbox_tl_cnr_b.gif" width="13" height="13"></td>
                <td background="images/lbox_bg_blue.gif" align="right">
                  <!-- Heading -->
                  <img src="images/h_trsp_dot.gif" width="1" height="20">
                  <!-- END Heading -->
                </td>
                <td align="right" valign="top" width="1%" background="images/lbox_bg_blue.gif"><img src="images/lbox_tr_cnr_b.gif" width="13" height="13"></td>
              </tr>
              <tr>
                <td width="1%" bgcolor="#FFFFFF"><img src="images/h_trsp_dot.gif" width="10" height="100"></td>
                <td bgcolor="#FFFFFF" valign="top">
                  <!-- Body -->
                  <table width="100%" border="0" cellspacing="1" cellpadding="2">
                    <form name="editdep" method="post" action="_update_dependencies.asp" onSubmit="return ValidateForm();">
                      <tr>
                        <td colspan="2" width="1%" nowrap class="form_field"><%=pkgInfoHash.Item ("pkg_name")%>&nbsp;<%=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">
                            <tr>
                              <td background="images/bg_form_lightbluedark.gif" nowrap width="1%" class="form_field">Package Name<img src="images/h_trsp_dot.gif" width="1" height="20" align="absmiddle"></td>
                              <td background="images/bg_form_lightbluedark.gif" nowrap width="50%" class="form_field">Version</td>
                              <td background="images/bg_form_lightbluedark.gif" nowrap width="50%" class="form_field">
                                <a href='javascript:;' onClick='MergeAll();'><img src='images/bt_move_left.gif' border='0' title='Update all to released version' hspace='2' align='absmiddle'></a>
                                Released
                             </td>
                            </tr>
                            <%=HTML_pkg_list%>
                            <tr>
                              <td nowrap><img src="images/h_trsp_dot.gif" width="120" height="1"></td>
                              <td></td>
                              <td></td>
                            </tr>
                          </table></td>
                      </tr>
                      <tr>
                        <td colspan="2" nowrap>
                          <input type="reset" name="btn" value="&laquo; 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">
                          <SPAN id="ProgressBar" name="ProgressBar" style="visibility:hidden;" class="body_scol"><img src="images/i_processing.gif" width="11" height="17" align="absmiddle" hspace="3">Processing...</SPAN>
                        </td>
                      </tr>
                      <%If HTML_pkg_list = "" Then%>
                      <tr>
                          <td colspan=3 background='images/bg_form_lightgray.gif' class='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%>">
                    </form>
                  </table>
                  <!-- END Body-->
                </td>
                <td width="1%" background="images/lbox_bgside_white.gif">&nbsp;</td>
              </tr>
              <tr>
                <td width="1%" background="images/lbox_bg_blue.gif" valign="bottom"><img src="images/lbox_bl_cnr_b.gif" width="13" height="13"></td>
                <td background="images/lbox_bg_blue.gif"></td>
                <td width="1%" background="images/lbox_bg_blue.gif" valign="bottom" align="right"><img src="images/lbox_br_cnr_b.gif" width="13" height="13"></td>
              </tr>
            </table></td>
        </tr>
      </table>
      <!-------------------------------------------------->
    </td>
  </tr>
</table>
<!-- FOOTER -->
<!--#include file="_footer.asp"-->
</body>
</html>