%@LANGUAGE="VBSCRIPT"%> <% '===================================================== ' UPDATE dependencies ' --- PROCESS FORM --- '===================================================== %> <% Option explicit ' Good idea to set when using redirect Response.Expires = 0 ' always load the page, dont store %> <% ' Set rfile parameter. This is a return page after Login Call objPMod.StoreParameter ( "rfile", "dependencies.asp" ) '------------ ACCESS CONTROL ------------------ %> <% '------------ 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 recCnt, pkg_name, pkg_version, build_type, re, Matches, Match 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. Jants and Ant dependencies are formatted to look like: ' JantStyle('PackageName','PackageVersion'); ' AntStyle('PackageName','PackageVersion'); re.Pattern = "(^|\n)\s*([_A-Za-z0-9]+)\s*\(\s*\'([^\']*)\'\s*\,\s*\'([^\']*)\'\s*\)" Set Matches = re.Execute(SSdep_import) 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 ReDim Preserve ARRdep( 2, recCnt ) ARRdep( COL_pkg_name, recCnt ) = pkg_name ARRdep( COL_pkg_version, recCnt ) = pkg_version ' Define build type If LCase(build_type) = LCase("BuildPkgArchive") Then ARRdep( COL_build_type, recCnt ) = enum_BUILD_PKG_ARCHIVE ElseIf LCase(build_type) = LCase("LinkPkgArchive") 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 ' This function is called when update_type is "add_custom". This is only the case when adding dependencies ' The list given via the actual parameter pkg_list is in fact a list of pv_id's supplied from the form_search_result_pkgs.asp ' and form_add_pkg_versions.asp files. In the past, it only ever used to be a list of package IDs, but this has now been ' changed so that users can only add package versions from the relevant release as dependencies to a packge also in that ' release, and to do this, the list has to hold pv_id's instead of pkg_id's, to cater for situations where a release ' contains 2 instances of a package, each one having different extensions (eg .mas, .sea). Sub Populate_depArray_from_ADD_Custom ( NNpv_id_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 pkgs.pkg_id, pkgs.pkg_name, pv.pv_id, pv.pkg_version"&_ " FROM packages pkgs, package_versions pv"&_ " WHERE pv.pv_id IN ("& NNpv_id_list &")"&_ " AND pv.pkg_id = pkgs.pkg_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 ) = rsTemp("pkg_version") '// 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 // The form passed to us may only have information for packages that need to change // The enumlocal_DONOT_DELETE_OLD_DEPENDENCIES does not appear to work // Must provide a full set of dependencies with either a new version or the existing version // 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)) Dim pvid, pkgver, newver pvid = rsTemp("pv_id") pkgver = Request( "pkgn" & pvid ) If pkgver <> "" Then newver = pkgver else newver = rsTemp("pkg_version") End if ReDim Preserve ARRdep( 2, recCnt ) ARRdep( COL_pkg_name, recCnt ) = rsTemp("pkg_name") ARRdep( COL_pkg_version, recCnt ) = newver ARRdep( COL_build_type, recCnt ) = Request( "bt"& pvid ) If not rsTemp("pkg_version") = newver Then sDependBlock = rsTemp("pkg_name") & " " & newver 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 --------------------------- 'Response.Write "
------------
" 'Dim Item 'For Each Item In Request.Form ' Response.Write "User Data: " &Item & ": " & Request.Form(Item) & "
" 'Next 'Response.Write "------------
" Dim sDependBlock '--- Process submition --- If (QStrPar("pv_id") <> "") Then ' All mandatory parameters FOUND Err.Clear On Error Resume Next OraSession.BeginTrans ' The called subroutines beneath here do not use "on error resume next", but this calling code does, so if any error ' occurs in the called functions, control will resume within this code somewhere. On the assumption that an error might ' be the result of some problem in the database, further database commands are not performed, achieved by making them ' conditional upon Err.Number being zero. Ultimately, this should result in a rollback array_is_empty = TRUE If Request("update_type") = "add_custom" Then '---- ADD CUSTOM dependency ---- ' NOTE - this happens when user clicks the Add action button on the dependencies/runtime tabs. Although the underlying search operation ' (see form_search_pkgs.asp and form_search_result_pkgs.asp) returns a list called "pkg_list", it actually contains a pv_id list in these ' special cases. Call Populate_depArray_from_ADD_Custom ( Request("pkg_list"), depArray, array_is_empty ) If ((NOT array_is_empty) AND (Err.number = 0)) 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) AND (Err.number = 0)) 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) AND (Err.number = 0)) Then Call Update_Package_Dependencies ( depArray, Request("pv_id"), objAccessControl.UserId, enumlocal_DONOT_DELETE_OLD_DEPENDENCIES, "depend_import", Request("FRdeps") ) End If End If If Err.number = 0 Then Call Update_Mod_Details ( Request("pv_id") ) End If If Err.number <> 0 Then OraSession.RollBack Call RaiseMsg ( enum_MSG_ERROR, Err.description &"
"& 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 mandatory parameters are missing!" & "
" 'TODO Response.write QSTR_All End If %>