Subversion Repositories DevTools

Rev

Rev 7468 | Blame | Compare with Previous | Last modification | View Log | RSS feed

<%@LANGUAGE="VBSCRIPT"%>
<%
'=====================================================
'       Update Package Version
'           _json_updateVersion.asp
'       Designed to be called via AJAX and to return
'       JSON formatted data to dynamic page
'   Ajax support for operaions on a package-version:
'       
'       updateVer
'       setDeployable
'
'=====================================================
%>
<%
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/qstr.asp"-->
<!--#include file="common/common_subs.asp"-->
<!--#include file="common/common_dbedit.asp"-->
<SCRIPT LANGUAGE="VBScript" RUNAT=SERVER SRC="class/classaspJSON.vbs"></SCRIPT> 
<%
'------------ Variable Definition -------------
Dim parOpr
Dim result
Dim SqlQry
Dim rsQry

parOpr = QStrPar("Opr")
result = -1

' Init the output JSON class
'   Operations can add data
'   Default data will be added at the end
Dim oJSON
Set oJSON = New aspJSON
Dim newitem

If NOT objAccessControl.UserLogedIn Then
    oJSON.data("error") = 1

    oJSON.data("emsgSummary") = "User no longer logged in"
    oJSON.data("emsgDetails") = oJSON.data("emsgSummary")

ElseIf (parOpr = "updateVer") Then
    updateVersion

ElseIf (parOpr = "setDeployable") Then
    setDeployable

ElseIf (parOpr = "clearAllDeployable") Then
    clearAllDeployable

ElseIf (parOpr = "setInManifest") Then
    setInManifest

ElseIf (parOpr = "clearAllInManifest") Then
    clearAllInManifest

Else
    oJSON.data("error") = 1
    oJSON.data("emsgSummary") = "Unknown JSON Operation"
    oJSON.data("emsgDetails") = "The Requested JSON operation is not supported: " & parOpr
End If

' SQL error detection and reporting
If objEH.LastOraFailed Then
    oJSON.data("error") = 1
    result = -1

    oJSON.data("emsgSummary") = objEH.MessageSummary
    oJSON.data("emsgDetails") = objEH.MessageDetails
    oJSON.data("SqlQry") = SqlQry
'
'   Detect program errors
ElseIf Err.number <> 0 Then
    result = -3
    oJSON.data("error") = 2
    oJSON.data("errnum") = Err.number
    oJSON.data("errtxt") = Err.description
    oJSON.data("errsrc") = Err.source
    oJSON.data("emsgSummary") = "Internal VBScript Error:" & Err.number &  ":" & Err.description
End If
On error goto 0
'Write single value
oJSON.data("result") = result

'function Sleep(seconds)
'    dim oshell, cmd
'    set oShell = CreateObject("Wscript.Shell")
'    cmd = "cmd.exe /c timeout " & seconds & " /nobreak"
'    oShell.Run cmd,0,1
'End function
'
'Sleep(2)

' DEBUG: A Hash of the user provided requests
<!--oJSON.data("QueryString") = Request.QueryString       -->
<!--                                                      -->
<!--Dim requestSet : Set requestSet = oJSON.Collection()  -->
<!--Set oJSON.data("Request") = requestSet                -->
<!--Dim variableName                                      -->
<!--for each variableName in Request.QueryString          -->
<!--    requestSet.add variableName, Request(variableName)-->
<!--next                                                  -->
<!--for each variableName in Request.Form                 -->
<!--    requestSet.add variableName, Request(variableName)-->
<!--next                                                  -->


'Return the object
Response.Write oJSON.JSONoutput()
Set oJSON = Nothing
Call Destroy_All_Objects
%>
<%
Sub ReportError (sSummary, sDetails)
    oJSON.data("error") = 1
    oJSON.data("emsgSummary") = sSummary
    oJSON.data("emsgDetails") = sDetails
End Sub
'-------------------------------------------------
' Function:    updateVersion
' Description: Update version information
'
Sub updateVersion
    Dim buildType, changeType, pvId, rtagId, version, vExt, errMessage, modeType, packageName
    ' 
    ' Ensure we have all the required parameters
    '
    buildType = QStrPar("buildType")
    changeType = QStrPar("changeType")
    pvId = QStrPar("pvId")
    rtagId = QStrPar("rtagId")
    version = QStrPar("Version")
    vExt = QStrPar("vExt")
    modeType = QStrPar("Mode")
    packageName = QStrPar("packageName")

    '
    ' If Manual then force change type to 'F'
    ' If Auto then ensure that the version number is of the correct form
    if buildType = "M" then 
        changeType = "F"
    end if

    If changeType <> "F" Then
        version=vExt
    End If

    '
    '   Get existing data
    '       Test for package existence
    '       Check for changes
    '
    SqlQry = "SELECT p.pkg_name, pv.pkg_id, pv.pv_id, pv.pkg_version, pv.v_ext, pv.change_type, pv.build_type"&_
             " FROM package_versions pv, packages p"&_
             " WHERE pv.pv_id = :NNpv_id" &_
             " AND p.pkg_id = pv.pkg_id"
    OraDatabase.Parameters.Add "NNpv_id", pvId, ORAPARM_INPUT, ORATYPE_NUMBER

        objEH.ErrorRedirect = FALSE
    objEH.TryORA ( OraSession )
    On Error Resume Next
    Set rsQry = OraDatabase.DbCreateDynaset( SqlQry, ORADYN_DEFAULT )
    objEH.CatchORA ( OraSession )
    errMessage = OraDatabase.Parameters("errMessage").Value
    OraDatabase.Parameters.Remove "NNpv_id"
    On Error GoTo 0

    If NOT objEH.LastOraFailed Then
        Dim changed
        changed = 0

        If ((rsQry.BOF) OR (rsQry.EOF)) Then
            oJSON.data("emsgDetails") = "Package not found"
            oJSON.data("error") = 1
        End If

        ' Detect changes
        '   version can only be tested if a Manually Versioned
        '
        If changeType = "F" AND rsQry("pkg_version") <> version Then changed = 1
        If rsQry("build_type")  <> buildType Then changed = changed + 2
        If rsQry("v_ext")       <> vExt Then changed = changed + 4
        If rsQry("change_type") <> changeType Then changed = changed + 8

        If changed Then
            '
            '   Setup for the database access
            OraDatabase.Parameters.Add "RTAG_ID", rtagId, ORAPARM_INPUT, ORATYPE_NUMBER
            OraDatabase.Parameters.Add "NNpv_id", pvId, ORAPARM_INPUT, ORATYPE_NUMBER
            OraDatabase.Parameters.Add "SSpkg_version",  version,      ORAPARM_INPUT, ORATYPE_VARCHAR2
            OraDatabase.Parameters.Add "BUILD_TYPE", buildType, ORAPARM_INPUT, ORATYPE_CHAR
            OraDatabase.Parameters.Add "CHANGE_TYPE", changeType, ORAPARM_INPUT, ORATYPE_CHAR
            OraDatabase.Parameters.Add "NNuser_id", objAccessControl.UserId, ORAPARM_INPUT, ORATYPE_NUMBER
            OraDatabase.Parameters.Add "errMessage", 0, ORAPARM_OUTPUT, ORATYPE_VARCHAR2

            SqlQry = "BEGIN Rename_Package_Version (:NNpv_id,:SSpkg_version,:BUILD_TYPE,:CHANGE_TYPE,:NNuser_id,:errMessage ); END;"
            objEH.ErrorRedirect = FALSE
            objEH.TryORA ( OraSession )
            On Error Resume Next
            OraDatabase.ExecuteSQL SqlQry
            objEH.CatchORA ( OraSession )
            errMessage = OraDatabase.Parameters("errMessage").Value
            On Error GoTo 0

            OraDatabase.Parameters.Remove "RTAG_ID"
            OraDatabase.Parameters.Remove "NNpv_id"
            OraDatabase.Parameters.Remove "SSpkg_version"
            OraDatabase.Parameters.Remove "NNuser_id"
            OraDatabase.Parameters.Remove "errMessage"
            OraDatabase.Parameters.Remove "BUILD_TYPE"
            OraDatabase.Parameters.Remove "CHANGE_TYPE"
            result = 0
        End If

        If modeType = 1 Then
            '   Rename the package - possibly
            If rsQry("pkg_name") <> packageName Then
                changed = changed + 16
                Dim rsQry1, count

                OraDatabase.Parameters.Add "PKG_ID", rsQry("pkg_id"), ORAPARM_INPUT, ORATYPE_NUMBER
                OraDatabase.Parameters.Add "PKG_NAME", packageName, ORAPARM_INPUT, ORATYPE_VARCHAR2

                SqlQry = "select count(*) as count from package_versions where pkg_id = :PKG_ID"
                objEH.ErrorRedirect = FALSE
                objEH.TryORA ( OraSession )
                On Error Resume Next
                Set rsQry1 = OraDatabase.DbCreateDynaset( SqlQry, ORADYN_DEFAULT )
                objEH.CatchORA ( OraSession )
                errMessage = OraDatabase.Parameters("errMessage").Value
                On Error GoTo 0

                If NOT objEH.LastOraFailed Then
                 
                    If ((NOT rsQry1.BOF) AND (NOT rsQry1.EOF)) Then
                      count = rsQry1.Fields("count")
                    End If
                    rsQry1.Close

                    If count = 1 Then
                        SqlQry = "update packages set pkg_name = :PKG_NAME where pkg_id = :PKG_ID"
                        objEH.ErrorRedirect = FALSE
                        objEH.TryORA ( OraSession )
                        On Error Resume Next
                        OraDatabase.ExecuteSQL SqlQry
                        objEH.CatchORA ( OraSession )
                        errMessage = OraDatabase.Parameters("errMessage").Value
                        On Error GoTo 0

                        If NOT objEH.LastOraFailed Then
                            result = 0
                        End If
                    Else
                        ReportError "Package name has been used","The Package name cannot be renamed as it is in use by multiple versions"
                    End If
                End If

                OraDatabase.Parameters.Remove "PKG_ID"
                OraDatabase.Parameters.Remove "PKG_NAME"
                rsQry1.Close
                Set rsQry1 = Nothing
            End If
        End If

        ' Report - no changes
        If changed = 0 Then
            ReportError "No change detected", "No changes detected"
        End If

    rsQry.Close
    Set rsQry = Nothing
    End If
End Sub
'-------------------------------------------------
' Function:    setDeployable
' Description: Set the state of the is_deployable flag
'              Request Parameters
'                   pv_id
'                   deployment_state
'
Sub setDeployable
    OraDatabase.Parameters.Add "PV_ID",     QStrPar("pv_id"), ORAPARM_INPUT, ORATYPE_NUMBER
    OraDatabase.Parameters.Add "DEPLOYABLE_STATE",  QStrPar("deployment_state"), ORAPARM_INPUT, ORATYPE_CHAR

        '   Set/Reset IS_DEPLOYABLE flag
        SqlQry = _
            "UPDATE PACKAGE_VERSIONS " &_
            "  SET IS_DEPLOYABLE = DECODE(:DEPLOYABLE_STATE, 'Y', 'Y', NULL)" &_
            "  WHERE PV_ID =  :PV_ID"
        objEH.ErrorRedirect = FALSE
        objEH.TryORA ( OraSession )
        On Error Resume Next
        OraDatabase.ExecuteSQL SqlQry
        objEH.CatchORA ( OraSession )
        On Error GoTo 0
        result = 0

    OraDatabase.Parameters.Remove "PV_ID"
    OraDatabase.Parameters.Remove "DEPLOYABLE_STATE"

End Sub

'-------------------------------------------------
' Function:    clearAllDeployable
' Description: Clear the is_deployable flag on all packages in the Release
'              Request Parameters
'                   rtag_id
'
Sub clearAllDeployable
    OraDatabase.Parameters.Add "RTAG_ID",     QStrPar("rtag_id"), ORAPARM_INPUT, ORATYPE_NUMBER

        '   Reset IS_DEPLOYABLE flag
        SqlQry = _
            "update package_versions pv " &_
            " set pv.IS_DEPLOYABLE = null" &_
            " Where pv.pv_id in ( SELECT pv.pv_id" &_
            " FROM package_versions pv," &_
            "      RELEASE_CONTENT rc" &_
            " WHERE rc.rtag_id = :RTAG_ID" &_
            "   AND rc.pv_id     = pv.pv_id" &_
            "   AND pv.IS_DEPLOYABLE is not null )"

        objEH.ErrorRedirect = FALSE
        objEH.TryORA ( OraSession )
        On Error Resume Next
        OraDatabase.ExecuteSQL SqlQry
        objEH.CatchORA ( OraSession )
        On Error GoTo 0
        result = 0

    OraDatabase.Parameters.Remove "RTAG_ID"

End Sub

'-------------------------------------------------
' Function:    setInManifest
' Description: Set the state of the InManifest flag
'              Request Parameters
'                   rtag_id
'                   pv_id
'                   mfState
'
Sub setInManifest
    Dim sComments
    sComments = "Set: " & IIF (QStrPar("mfState") = "Y" , "Y", "N")

    OraDatabase.Parameters.Add "RTAG_ID",       QStrPar("rtag_id"), ORAPARM_INPUT, ORATYPE_NUMBER
    OraDatabase.Parameters.Add "PV_ID",         QStrPar("pv_id"), ORAPARM_INPUT, ORATYPE_NUMBER
    OraDatabase.Parameters.Add "MFSTATE",       QStrPar("mfState"), ORAPARM_INPUT, ORATYPE_CHAR

    '   Set/Reset IS_DEPLOYABLE flag
    SqlQry = _
        "UPDATE RELEASE_CONTENT " &_
        "  SET IN_MANIFEST = DECODE(:MFSTATE, 'Y', 'Y', NULL)" &_
        "  WHERE PV_ID =  :PV_ID AND RTAG_ID = :RTAG_ID"
    objEH.ErrorRedirect = FALSE
    objEH.TryORA ( OraSession )
    On Error Resume Next
    OraDatabase.ExecuteSQL SqlQry
    objEH.CatchORA ( OraSession )

    If NOT objEH.LastOraFailed Then
        objEH.TryORA ( OraSession )
        OraDatabase.ExecuteSQL ("BEGIN PK_RELEASE.SET_RELEASE_MODIFIED(:RTAG_ID); END; ")
        objEH.CatchORA ( OraSession )

        call Log_Action ( QStrPar("pv_id"), "inManifest", sComments )
    End If

    On Error GoTo 0
    result = 0

    OraDatabase.Parameters.Remove "RTAG_ID"
    OraDatabase.Parameters.Remove "PV_ID"
    OraDatabase.Parameters.Remove "MFSTATE"

End Sub

'-------------------------------------------------
' Function:    clearAllInManifest
' Description: Clear the InManifest flag on all packages in the Release
'              Request Parameters
'                   rtag_id
'
Sub clearAllInManifest
    OraDatabase.Parameters.Add "RTAG_ID", QStrPar("rtag_id"), ORAPARM_INPUT, ORATYPE_NUMBER

        '   Reset InManifest flag
        SqlQry = _
            "update release_content rc " &_
            " set rc.IN_MANIFEST = null" &_
            " WHERE rc.rtag_id = :RTAG_ID" &_
            "   AND rc.IN_MANIFEST is not null"

        objEH.ErrorRedirect = FALSE
        objEH.TryORA ( OraSession )
        On Error Resume Next
        OraDatabase.ExecuteSQL SqlQry
        objEH.CatchORA ( OraSession )

        If NOT objEH.LastOraFailed Then
            objEH.TryORA ( OraSession )
            OraDatabase.ExecuteSQL ("BEGIN PK_RELEASE.SET_RELEASE_MODIFIED(:RTAG_ID); END; ")
            objEH.CatchORA ( OraSession )

            ' Action is not logged - yet
        End If

        On Error GoTo 0
        result = 0

    OraDatabase.Parameters.Remove "RTAG_ID"

End Sub

%>