Subversion Repositories DevTools

Rev

Blame | Last modification | View Log | RSS feed

<%@LANGUAGE="VBSCRIPT"%>
<%
'=====================================================
'                                UPDATE dependencies
'               --- PROCESS FORM ---
'=====================================================
%>
<%
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"-->
<!--#include file="common/common_dbedit.asp"-->
<%
' Set rfile parameter. This is a return page after Login
Call objPMod.StoreParameter ( "rfile", "dependencies.asp" )
'------------ ACCESS CONTROL ------------------
%>
<!--#include file="_access_control_login.asp"-->
<!--#include file="_access_control_general.asp"-->
<!--#include file="_access_control_project.asp"-->
<%
'------------ Variable Definition -------------
Dim depArray()
Dim array_is_empty
'------------ Constants Declaration -----------
Const enumlocal_DONOT_DELETE_OLD_DEPENDENCIES = 0
Const enumlocal_DELETE_OLD_DEPENDENCIES = 1
Const COL_pkg_name = 0
Const COL_pkg_version = 1
Const COL_build_type = 2
'------------ Variable Init -------------------
'----------------------------------------------
%>
<%
Sub Populate_depArray_from_Import ( SSdep_import, ARRdep, BBarray_is_empty )
        Dim depList, lastItem, i, recCnt, pkg_name, pkg_version
        
        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 '
        
        depList = Split( SSdep_import, "'")
        
        recCnt = 0
        lastItem = UBound(depList)
        For i = 1 To lastItem Step 4
                pkg_name = depList(i)
                pkg_version = depList(i+2)
                
                ' Proceed only if:
                '       pkg name is not empty,
                '       pkg version is not empty,
                '       line is not commented out with #
                
                If ( pkg_name <> "" )  AND  ( pkg_version <> "" )  AND  (InStr(depList(i-1), "#") = 0) Then
                        ReDim Preserve ARRdep( 2, recCnt )
                        ARRdep( COL_pkg_name, recCnt ) = pkg_name
                        ARRdep( COL_pkg_version, recCnt ) = pkg_version
                        
                        ' Define build type
                        If InStr(depList(i-1), "BuildPkgArchive") > 0 Then
                                ARRdep( COL_build_type, recCnt ) = enum_BUILD_PKG_ARCHIVE
                                
                        ElseIf InStr(depList(i-1), "LinkPkgArchive") > 0 Then
                                ARRdep( COL_build_type, recCnt ) = enum_LINK_PKG_ARCHIVE
                                
                        Else
                                ARRdep( COL_build_type, recCnt ) = enum_BUILD_PKG_ARCHIVE       'neither build_package or link_package is found, hence set to...
                                
                        End If
                        
                        recCnt = recCnt + 1
                        BBarray_is_empty = FALSE
                End If
                
        Next
        
End Sub


Sub Populate_depArray_from_ADD_Custom ( NNpkg_list, ARRdep, BBarray_is_empty )
        Dim depList, lastItem, i, recCnt, pkg_name, pkg_version, V_EXT
        Dim rsTemp, Query_String, PkgBaseView
        
        PkgBaseView = Get_Pkg_Base_View_ID ( Request("pv_id"), Request("rtag_id") )
        
        Query_String = _
        " SELECT pkg_id, pkg_name"&_
        "  FROM packages"&_
        " WHERE pkg_id IN ("& NNpkg_list &")"
        Set rsTemp = OraDatabase.DbCreateDynaset( Query_String, cint(0))
        
        recCnt = 0
        While ((NOT rsTemp.BOF) AND (NOT rsTemp.EOF))
                ReDim Preserve ARRdep( 2, recCnt )
                ARRdep( COL_pkg_name, recCnt ) = rsTemp("pkg_name")
                ARRdep( COL_pkg_version, recCnt ) =  Request( "pkgn"& rsTemp("pkg_id") )
                
                '// Dependencies comming from custom dependency add are set to LinkPkgArchive by default, unless it is a product
                If PkgBaseView = enumBASE_VIEW_PRODUCTS Then
                        ARRdep( COL_build_type, recCnt ) = enum_BUILD_PKG_ARCHIVE
                Else
                        ARRdep( COL_build_type, recCnt ) = enum_LINK_PKG_ARCHIVE        
                End If
                
                recCnt = recCnt + 1
                BBarray_is_empty = FALSE
                rsTemp.MoveNext
        WEnd
        
        rsTemp.Close
        Set rsTemp = nothing
End Sub


Sub Populate_depArray_from_EDIT_Custom ( NNpv_id, ARRdep, BBarray_is_empty, sDependBlock )
        Dim depList, lastItem, i, recCnt, pkg_name, pkg_version, V_EXT
        Dim rsTemp, rsCurrent, Query_String
        
        Query_String = _
        " SELECT dpkg.pkg_name, dpv.pkg_version, dpv.pv_id"&_
        "  FROM package_dependencies dep,"&_
        "       package_versions dpv,"&_
        "       packages dpkg"&_
        " WHERE dep.dpv_id = dpv.pv_id"&_
        "   AND dpv.pkg_id = dpkg.pkg_id"&_
        "   AND dep.pv_id = "& NNpv_id
        
        Set rsTemp = OraDatabase.DbCreateDynaset( Query_String, cint(0))
        
        recCnt = 0
        While ((NOT rsTemp.BOF) AND (NOT rsTemp.EOF))
                ReDim Preserve ARRdep( 2, recCnt )
                ARRdep( COL_pkg_name, recCnt ) = rsTemp("pkg_name")
                ARRdep( COL_pkg_version, recCnt ) =  Request( "pkgn"& rsTemp("pv_id") )
                ARRdep( COL_build_type, recCnt ) = Request( "bt"& rsTemp("pv_id") )     

                If not rsTemp("pkg_version") =  Request( "pkgn"& rsTemp("pv_id") ) Then
                        sDependBlock = rsTemp("pkg_name") & " " & Request( "pkgn"& rsTemp("pv_id") )
                End If 
                
                recCnt = recCnt + 1
                BBarray_is_empty = FALSE
                rsTemp.MoveNext
        WEnd
        
        rsTemp.Close
        Set rsTemp = nothing
End Sub

Sub Update_Package_Dependencies ( ARRdep, NNpv_id, NNuser_id, NNdelete_old_dependency, sAction_type, sDependBlock )
        Dim i, OraParameter, sComments
        
        OraDatabase.Parameters.Add "PV_ID",                     NNpv_id,        ORAPARM_INPUT, ORATYPE_NUMBER 
        OraDatabase.Parameters.Add "PKG_NAME",                  "",     ORAPARM_INPUT, ORATYPE_VARCHAR2
        OraDatabase.Parameters.Add "PKG_VERSION",               "",     ORAPARM_INPUT, ORATYPE_VARCHAR2 
        OraDatabase.Parameters.Add "BUILD_TYPE",                "",     ORAPARM_INPUT, ORATYPE_VARCHAR2 
        OraDatabase.Parameters.Add "USER_ID",                   NNuser_id,      ORAPARM_INPUT, ORATYPE_NUMBER 
        OraDatabase.Parameters.Add "DELETE_PV_ID",              NNdelete_old_dependency,        ORAPARM_INPUT, ORATYPE_NUMBER 
        OraDatabase.Parameters.Add "ACTION_TYPE_NAME",  sAction_type, ORAPARM_INPUT, ORATYPE_VARCHAR2
        
        Set OraParameter = OraDatabase.Parameters
        
        For i = 0 To UBound( ARRdep, 2 )
                If not i = 0 Then
                        sComments = sComments & ", "
                End If
                sComments = sComments & depArray(COL_pkg_name, i) & " " & ARRdep( COL_pkg_version, i )
                
                OraParameter("PKG_NAME").Value = ARRdep( COL_pkg_name, i )
                OraParameter("PKG_VERSION").Value = ARRdep( COL_pkg_version, i )
                OraParameter("BUILD_TYPE").Value = ARRdep( COL_build_type, i )
                
                OraDatabase.ExecuteSQL "BEGIN  Update_Package_Dependency ( :PV_ID, :PKG_NAME, :PKG_VERSION, :BUILD_TYPE, :USER_ID, :DELETE_PV_ID );  END;"
                
        Next
        
        Set OraParameter = Nothing
        
        If sAction_type = "depend_add" Then
                OraDatabase.Parameters.Add "COMMENTS",  sComments, ORAPARM_INPUT, ORATYPE_VARCHAR2
        Else
                If Len(sDependBlock) <= 4000 Then
                        OraDatabase.Parameters.Add "COMMENTS",  sDependBlock, ORAPARM_INPUT, ORATYPE_VARCHAR2
                Else
                        OraDatabase.Parameters.Add "COMMENTS",  "Description too long to be inserted!", ORAPARM_INPUT, ORATYPE_VARCHAR2
                End If  
        End If

        OraDatabase.ExecuteSQL _
        "BEGIN  Log_Action ( :PV_ID, :ACTION_TYPE_NAME, :USER_ID, :COMMENTS );  END;"
        
        

        OraDatabase.Parameters.Remove "PV_ID"
        OraDatabase.Parameters.Remove "PKG_NAME"
        OraDatabase.Parameters.Remove "PKG_VERSION"
        OraDatabase.Parameters.Remove "BUILD_TYPE"
        OraDatabase.Parameters.Remove "USER_ID"
        OraDatabase.Parameters.Remove "DELETE_PV_ID"
        OraDatabase.Parameters.Remove "ACTION_TYPE_NAME"
        OraDatabase.Parameters.Remove "COMMENTS"
End Sub


Sub Remove_Old_Dependencies ( SSpv_id )
        OraDatabase.Parameters.Add "PV_ID", SSpv_id,    ORAPARM_INPUT, ORATYPE_NUMBER 
        
        OraDatabase.ExecuteSQL "DELETE FROM package_dependencies WHERE pv_id = :PV_ID"
        
        OraDatabase.Parameters.Remove "PV_ID"
End Sub


Sub Update_Mod_Details ( SSpv_id )
        OraDatabase.Parameters.Add "PV_ID", SSpv_id,    ORAPARM_INPUT, ORATYPE_NUMBER 
        OraDatabase.Parameters.Add "RTAG_ID", Request("rtag_id"),       ORAPARM_INPUT, ORATYPE_NUMBER 
        OraDatabase.Parameters.Add "USER_ID", objAccessControl.UserId,  ORAPARM_INPUT, ORATYPE_NUMBER 
        
        OraDatabase.ExecuteSQL _
                " UPDATE package_versions "&_
        " SET modified_stamp = "& ORA_SYSDATETIME &", modifier_id = :USER_ID"&_
        " WHERE pv_id = :PV_ID"
        
        If Request("rtag_id") <> "" Then
                ' Package in release view
                OraDatabase.ExecuteSQL _
                "BEGIN "&_
                " Touch_Release ( :RTAG_ID ); "&_
                "END; "
                
        Else
                ' Package view
                OraDatabase.ExecuteSQL _
                "BEGIN "&_
                " PK_RELEASE.RUN_POST_ACTIONS_BULK ( :PV_ID ); "&_
                "END; "
                
        End If
        
        OraDatabase.Parameters.Remove "PV_ID"
        OraDatabase.Parameters.Remove "RTAG_ID"
        OraDatabase.Parameters.Remove "USER_ID"
End Sub

%>
<%
'-----------------------  MAIN LINE  ---------------------------

Dim sDependBlock

'--- Process submition ---
If (QStrPar("pv_id") <> "")  Then
        ' All mendatory parameters FOUND
        
        
        On Error Resume Next
        OraSession.BeginTrans
        
        
        
        array_is_empty = TRUE
        If Request("update_type") = "add_custom" Then
                '---- ADD CUSTOM dependency ----
                Call Populate_depArray_from_ADD_Custom ( Request("pkg_list"), depArray, array_is_empty )
                
                If NOT array_is_empty Then
                        Call Update_Package_Dependencies ( depArray, Request("pv_id"), objAccessControl.UserId, enumlocal_DELETE_OLD_DEPENDENCIES, "depend_add", null )
                End If

                
        ElseIf Request("update_type") = "edit_custom" Then
                '---- EDIT CUSTOM dependency ----
                Call Populate_depArray_from_EDIT_Custom ( Request("pv_id"), depArray, array_is_empty, sDependBlock )
                Call Remove_Old_Dependencies ( Request("pv_id") )
                
                If NOT array_is_empty Then
                        Call Update_Package_Dependencies ( depArray, Request("pv_id"), objAccessControl.UserId, enumlocal_DONOT_DELETE_OLD_DEPENDENCIES, "depend_update", sDependBlock )
                End If

                
        Else
                '---- JATS, ANT dependency import ----
                Call Populate_depArray_from_Import ( Request("FRdeps"), depArray, array_is_empty )
                Call Remove_Old_Dependencies ( Request("pv_id") )
                
                If NOT array_is_empty Then
                        Call Update_Package_Dependencies ( depArray, Request("pv_id"), objAccessControl.UserId, enumlocal_DONOT_DELETE_OLD_DEPENDENCIES, "depend_import", Request("FRdeps") )
                End If
                
        End If
        
        
        
        Call Update_Mod_Details ( Request("pv_id") )
        
        
        
        If Err.number <> 0 Then 
                OraSession.RollBack
                Call RaiseMsg ( enum_MSG_ERROR, Err.description &"<br>"& Err.Source )
        Else
                OraSession.CommitTrans
        End If
        
        
        Response.Redirect("dependencies.asp?pv_id="& Request("pv_id") &"&rtag_id="& Request("rtag_id"))
        
        
Else
        Response.write "Some mendatory parameters are missing!" & "<br>" 'TODO
        Response.write QSTR_All 
End If
%>

<!-- DESTRUCTOR ------->
<!--#include file="common/destructor.asp"-->