Subversion Repositories DevTools

Rev

Blame | Last modification | View Log | RSS feed

CREATE PACKAGE BODY "RELEASE_MANAGER"."PK_WORK_IN_PROGRESS" IS

/*
------------------------------
||  Last Modified:  S.Vukovic
||  Modified Date:  2/May/2005
||  Body Version:   1.0
------------------------------
*/


/*-------------------------------------------------------------------------------------------------------*/
PROCEDURE ADD_PACKAGE ( newPvId IN NUMBER, ViewId IN NUMBER, RtagId IN NUMBER, UserId IN NUMBER ) IS

        oldPvId NUMBER;
        ReleaseLocation VARCHAR2(4000);
        sLocation VARCHAR2(4000) := NULL;


BEGIN
        /*--------------- Business Rules Here -------------------*/
        /*-------------------------------------------------------*/

        BEGIN
                -- Check if Exists in "Work in progress" anywhere in the world, except "Closed mode" releases
                SELECT proj.PROJ_NAME ||' > '|| rt.RTAG_NAME  INTO sLocation
                  FROM WORK_IN_PROGRESS wip,
                           RELEASE_TAGS rt,
                           PROJECTS proj
                 WHERE wip.PV_ID = newPvId
                   AND wip.RTAG_ID = rt.RTAG_ID
                   AND rt.OFFICIAL != 'Y'
                   AND rt.PROJ_ID = proj.PROJ_ID;

                EXCEPTION
                WHEN NO_DATA_FOUND THEN
                        sLocation := NULL;
           
        END;               



        IF (sLocation IS NULL)  THEN

                -- Add to "Work in progress"
                INSERT INTO WORK_IN_PROGRESS ( RTAG_ID, PV_ID, VIEW_ID )
                VALUES( RtagId, newPvId, ViewId );


            /* LOG ACTION */
                SELECT proj.PROJ_NAME ||' / '|| rt.RTAG_NAME INTO ReleaseLocation
                  FROM PROJECTS proj,
                           RELEASE_TAGS rt
                 WHERE rt.PROJ_ID = proj.PROJ_ID
                   AND rt.RTAG_ID = RtagId;

                Log_Action ( newPvId, 'work_in_progress', UserId, 'Location: '|| ReleaseLocation );

        ELSE
                
                RAISE_APPLICATION_ERROR (-20000, 'This version is already in Work-In-Progress Area at '|| sLocation ||'.' );
                
        END IF;

END;
/*-------------------------------------------------------------------------------------------------------*/
PROCEDURE REMOVE_PACKAGE ( PvId IN NUMBER, RtagId IN NUMBER, UserId IN NUMBER ) IS

        ReleaseLocation VARCHAR2(4000);

BEGIN

        /*--------------- Business Rules Here -------------------*/
        /*-------------------------------------------------------*/


        -- Get release location for logging pusposes
        SELECT proj.PROJ_NAME ||' / '|| rt.RTAG_NAME INTO ReleaseLocation
          FROM PROJECTS proj,
                   RELEASE_TAGS rt
         WHERE rt.PROJ_ID = proj.PROJ_ID
           AND rt.RTAG_ID = RtagId;


        -- Delete from Work In Progress
        DELETE
          FROM WORK_IN_PROGRESS wip
         WHERE wip.RTAG_ID = RtagId
           AND wip.PV_ID = PvId;

        Log_Action ( PvId, 'delete_from_wip', UserId, 'Location: '|| ReleaseLocation );




END;
/*-------------------------------------------------------------------------------------------------------*/
PROCEDURE REMOVE_PACKAGE_BULK ( PvIdList IN VARCHAR2, RtagId IN NUMBER, UserId IN NUMBER ) IS

        nIdCollector RELMGR_NUMBER_TAB_t := RELMGR_NUMBER_TAB_t();
        ReleaseLocation VARCHAR2(4000);
        PvId NUMBER;

BEGIN

        /*--------------- Business Rules Here -------------------*/
        IF (PvIdList IS NULL)
        THEN
                RAISE_APPLICATION_ERROR (-20000, 'Please select at least one package.' );
        END IF;
        /*-------------------------------------------------------*/


        nIdCollector := IN_LIST_NUMBER ( PvIdList );


        -- Get release location for logging pusposes
        SELECT proj.PROJ_NAME  ||' / '|| rt.RTAG_NAME INTO ReleaseLocation
          FROM PROJECTS proj,
                   RELEASE_TAGS rt
         WHERE rt.PROJ_ID = proj.PROJ_ID
           AND rt.RTAG_ID = RtagId;


        FOR i IN 1..nIdCollector.COUNT
        LOOP
                PvId := nIdCollector(i);

                -- Delete from Work In Progress
                DELETE
                  FROM WORK_IN_PROGRESS wip
                 WHERE wip.RTAG_ID = RtagId
                   AND wip.PV_ID = PvId;

                Log_Action ( PvId, 'remove_from_work_in_progress', UserId, 'Location: '|| ReleaseLocation );

        END LOOP;


END;
/*-------------------------------------------------------------------------------------------------------*/
FUNCTION GET_PACKAGE_VIEW ( PvId IN NUMBER, RtagId IN NUMBER ) RETURN NUMBER IS

        ReturnValue NUMBER;

BEGIN
        SELECT wip.VIEW_ID INTO ReturnValue
          FROM WORK_IN_PROGRESS wip
         WHERE wip.RTAG_ID = RtagId
           AND wip.PV_ID = PvId;

        RETURN ReturnValue;
END;
/*-------------------------------------------------------------------------------------------------------*/
PROCEDURE GET_VIEW_CONTENT ( RtagId IN NUMBER, ViewId IN NUMBER, RecordSet OUT typeCur ) IS

        IsBaseView CHAR(1);
        
BEGIN

        -- Check if the view is BASE VIEW
        SELECT vi.BASE_VIEW INTO IsBaseView
          FROM VIEWS vi
         WHERE vi.VIEW_ID = ViewId;
         
        IF (IsBaseView = 'Y') THEN 
                -- Get Base view content
                OPEN RecordSet FOR
                SELECT 0 AS PKG_STATE,
                           NULL AS DEPRECATED_STATE,
                           pv.pv_id, 
                           pkg.pkg_name, 
                           pv.pkg_version, 
                           pv.dlocked, 
                           pv.pv_description,
                           pv.BUILD_TYPE
                  FROM WORK_IN_PROGRESS rel,
                       packages pkg,
                       package_versions pv
                 WHERE pv.pkg_id = pkg.pkg_id
                   AND rel.pv_id = pv.pv_id
                   AND rel.VIEW_ID = ViewId
                   AND rel.RTAG_ID = RtagId
                 ORDER BY UPPER(pkg.PKG_NAME);
         

        ELSE     
         
                -- Get non base view content
                OPEN RecordSet FOR
                SELECT 0 AS PKG_STATE,
                           NULL AS DEPRECATED_STATE,
                           pv.pv_id, 
                           pkg.pkg_name, 
                           pv.pkg_version, 
                           pv.dlocked, 
                           pv.pv_description,
                           pv.BUILD_TYPE
                  FROM WORK_IN_PROGRESS rel,
                       packages pkg,
                       package_versions pv,
                           VIEW_DEF vd
                 WHERE pv.pkg_id = pkg.pkg_id
                   AND rel.pv_id = pv.pv_id
                   AND vd.VIEW_ID = ViewId
                   AND vd.PKG_ID = pv.PKG_ID
                   AND rel.RTAG_ID = RtagId
                 ORDER BY UPPER(pkg.PKG_NAME);
         
         
        END IF;         
        

END;
/*-------------------------------------------------------------------------------------------------------*/
PROCEDURE CHANGE_PACKAGE_VIEW ( PvId IN NUMBER, RtagId IN NUMBER, NewViewId IN NUMBER ) IS
        
BEGIN
        
        UPDATE WORK_IN_PROGRESS wip SET
        wip.VIEW_ID = NewViewId
        WHERE wip.PV_ID = PvId
          AND wip.RTAG_ID = RtagId;
        
END;
/*-------------------------------------------------------------------------------------------------------*/
END PK_WORK_IN_PROGRESS;
/
ALTER PACKAGE "RELEASE_MANAGER"."PK_WORK_IN_PROGRESS" 
  COMPILE BODY 
    PLSQL_OPTIMIZE_LEVEL=  2
    PLSQL_CODE_TYPE=  INTERPRETED
    PLSQL_DEBUG=  FALSE
 REUSE SETTINGS TIMESTAMP '2007-08-23 16:23:51'
/