Subversion Repositories DevTools

Rev

Details | Last modification | View Log | RSS feed

Rev Author Line No. Line
221 vnguyen 1
CREATE PACKAGE BODY "RELEASE_MANAGER"."PK_PACKAGE" 
2
IS
3
/*
4
------------------------------
5
||  Last Modified:  J. Tweddle
6
||  Modified Date:  24/08/2007
7
||  Body Version:   1.8
8
------------------------------
9
*/
10
 
11
   /*-------------------------------------------------------------------------------------------------------*/
12
   PROCEDURE new_version (
13
      nlastpvid                   IN       NUMBER,
14
      snewpkgversion              IN       VARCHAR2 DEFAULT NULL,
15
      cbuildtype                  IN       CHAR,
16
      nsettopvid                  IN       NUMBER DEFAULT NULL,
17
      nrtagid                     IN       NUMBER,
18
      nuserid                     IN       NUMBER,
19
      enumissues_state_imported   IN       NUMBER,
20
      returnpvid                  OUT      NUMBER
21
   )
22
   IS
23
      origpkg_id                   package_versions.pkg_id%TYPE;
24
      origdlocked                  package_versions.dlocked%TYPE;
25
      ssv_mm                       package_versions.v_mm%TYPE;
26
      ssv_nmm                      package_versions.v_nmm%TYPE;
27
      ssv_ext                      package_versions.v_ext%TYPE;
28
      spackageversion              VARCHAR2 (4000);
29
      nissuestypes                 NUMBER;
30
      nviewid                      NUMBER;
31
      reccount                     NUMBER;
32
      isreleased                   package_versions.dlocked%TYPE       := 'N';
33
      slabel                       VARCHAR2 (4000)                    := NULL;
34
 
35
      CURSOR package_versions_cur
36
      IS
37
         SELECT pv.pv_id, pv.is_patch, pv.dlocked
38
           FROM package_versions pv
39
          WHERE pv.pkg_version = snewpkgversion
40
            AND pv.pkg_id IN (SELECT DISTINCT origpv.pkg_id
41
                                         FROM package_versions origpv
42
                                        WHERE origpv.pv_id = nlastpvid);
43
 
44
      package_versions_rec         package_versions_cur%ROWTYPE;
45
 
46
      CURSOR clone_package_versions_cur
47
      IS
48
         SELECT DISTINCT pkg_id, dlocked
49
                    FROM package_versions
50
                   WHERE pv_id = nlastpvid;
51
 
52
      clone_package_versions_rec   clone_package_versions_cur%ROWTYPE;
53
   BEGIN
54
      spackageversion := snewpkgversion;
55
 
56
      IF nsettopvid IS NULL
57
      THEN
58
         -- SetToPv_id is not supplied, hence proceed.
59
 
60
         /* ---------------------------------------------------- */
61
/* Find id package_version exists                       */
62
/* ---------------------------------------------------- */
63
         OPEN package_versions_cur;
64
 
65
         FETCH package_versions_cur
66
          INTO package_versions_rec;
67
 
68
         IF package_versions_cur%NOTFOUND
69
         THEN
70
            ---  Create brand new package ---
71
            SELECT seq_pv_id.NEXTVAL
72
              INTO returnpvid
73
              FROM DUAL;
74
 
75
            -- Split Version to get extention + other
76
            split_version (spackageversion, ssv_mm, ssv_nmm, ssv_ext);
77
 
78
            -- Get previous package to clone from
79
            OPEN clone_package_versions_cur;
80
 
81
            FETCH clone_package_versions_cur
82
             INTO clone_package_versions_rec;
83
 
84
            origpkg_id := clone_package_versions_rec.pkg_id;
85
            origdlocked := clone_package_versions_rec.dlocked;
86
 
87
            CLOSE clone_package_versions_cur;
88
 
89
            -- Automated built config
90
            IF (cbuildtype = 'A')
91
            THEN
92
               spackageversion := '(' || returnpvid || ')' || ssv_ext;
93
                                    -- Make sure that version is still unique
94
            END IF;
95
 
96
            -- Clone Package Version Details --
97
            INSERT INTO package_versions
98
                        (pv_id, pkg_id, pkg_version, dlocked, created_stamp,
99
                         creator_id, modified_stamp, modifier_id, v_mm, v_nmm,
100
                         v_ext, src_path, pv_description, pv_overview,
101
                         last_pv_id, owner_id, is_deployable,
102
                         is_build_env_required, build_type, bs_id, is_autobuildable, ripple_field)
103
               SELECT returnpvid AS pv_id, origpkg_id AS pkg_id,
104
                      spackageversion AS pkg_version, 'N' AS dlocked,
105
                      ora_sysdate AS created_stamp, nuserid AS creator_id,
106
                      ora_sysdatetime AS modified_stamp,
107
                      nuserid AS modifier_id, ssv_mm AS v_mm,
108
                      ssv_nmm AS v_nmm, ssv_ext AS v_ext, pv.src_path,
109
                      pv.pv_description, pv.pv_overview,
110
                      nlastpvid AS last_pv_id, pv.owner_id, pv.is_deployable,
111
                      pv.is_build_env_required, cbuildtype, pv.bs_id, pv.is_autobuildable, pv.ripple_field
112
                 FROM package_versions pv
113
                WHERE pv.pv_id = nlastpvid;
114
 
115
            -- Set Issues Type for cloning ---
116
            IF origdlocked = 'Y'
117
            THEN
118
               nissuestypes := enumissues_state_imported;
119
            ELSE
120
               nissuestypes := NULL;
121
            END IF;
122
 
123
            -- Update Label for automated built
124
            IF (cbuildtype = 'A')
125
            THEN
126
               slabel := get_automated_label (returnpvid);
127
 
128
               UPDATE package_versions pv
129
                  SET pv.pkg_label = slabel
130
                WHERE pv.pv_id = returnpvid;
131
            END IF;
132
 
133
            basic_clone (nlastpvid,
134
                         returnpvid,
135
                         nrtagid,
136
                         nuserid,
137
                         origpkg_id,
138
                         nissuestypes
139
                        );
140
         ELSE
141
            --- Package already exists, hence reuse ---
142
            returnpvid := package_versions_rec.pv_id;
143
            isreleased := package_versions_rec.dlocked;
144
         END IF;
145
 
146
         CLOSE package_versions_cur;
147
      ELSE
148
         returnpvid := nsettopvid;
149
      END IF;
150
   END new_version;
151
 
152
/*-------------------------------------------------------------------------------------------------------*/
153
   PROCEDURE change_state (
154
      pvid       IN   NUMBER,
155
      newstate   IN   package_versions.dlocked%TYPE,
156
      userid     IN   NUMBER
157
   )
158
   IS
159
   BEGIN
160
      -- Set package in Released mode
161
      UPDATE package_versions pv
162
         SET pv.dlocked = newstate,
163
             pv.modified_stamp = ora_sysdatetime,
164
             pv.modifier_id = userid
165
       WHERE pv.pv_id = pvid;
166
 
167
      -- Log action --
168
      IF newstate = 'Y'
169
      THEN
170
         -- RELEASED --
171
         log_action (pvid,
172
                     'makeofficial',
173
                     userid,
174
                     'Package state change to: Released'
175
                    );
176
      ELSIF newstate = 'N'
177
      THEN
178
         -- UNLOCKED --
179
         log_action (pvid,
180
                     'makeunofficial',
181
                     userid,
182
                     'Package state change to: Ulocked'
183
                    );
184
      ELSIF newstate = 'P'
185
      THEN
186
         -- PENDING APPROVAL --
187
         log_action (pvid,
188
                     'add_to_planned',
189
                     userid,
190
                     'Package state change to: Pending Approval'
191
                    );
192
      ELSIF newstate = 'R'
193
      THEN
194
         -- REJECTED --
195
         log_action (pvid,
196
                     'reject_package',
197
                     userid,
198
                     'Package state change to: Rejected'
199
                    );
200
      ELSIF newstate = 'A'
201
      THEN
202
         -- APPROVED --
203
         log_action (pvid,
204
                     'approve_package',
205
                     userid,
206
                     'Package state change to: Approved'
207
                    );
208
      END IF;
209
   END;
210
 
211
/*-------------------------------------------------------------------------------------------------------*/
212
   PROCEDURE destroy_package (
213
      pvid               IN       NUMBER,
214
      overridewarnings   IN       CHAR DEFAULT 'N',
215
      problemstring      OUT      VARCHAR2
216
   )
217
   IS
218
      LOCKED     CHAR;
219
      pkgid      NUMBER;
220
      ROWCOUNT   NUMBER;
221
   BEGIN
222
      /*
223
      || This will destroy all package details from database.
224
      || It will only be used to remove unwanted work in progress packages,
225
      || or mestaken versions
226
      */
227
 
228
      /*--------------- Business Rules Here 
229
-------------------*/
230
      problemstring := NULL;
231
 
232
      IF overridewarnings = 'N'
233
      THEN
234
         -- Package must not be official
235
         SELECT pv.dlocked
236
           INTO LOCKED
237
           FROM package_versions pv
238
          WHERE pv.pv_id = pvid;
239
 
240
         IF LOCKED = 'Y'
241
         THEN
242
            problemstring :=
243
                  problemstring
244
               || '- Package is locked and released.'
245
               || UTL_TCP.crlf;
246
         END IF;
247
 
248
         -- Cannot remove if used in BOMs
249
         SELECT COUNT (osc.prod_id)
250
           INTO ROWCOUNT
251
           FROM deployment_manager.os_contents osc
252
          WHERE osc.prod_id = pvid;
253
 
254
         IF ROWCOUNT > 0
255
         THEN
256
            problemstring :=
257
                  problemstring
258
               || '- Package is part of Bill-Of-Material (BOM) in Deployment Manager.'
259
               || UTL_TCP.crlf;
260
         END IF;
261
 
262
         -- Cannot remove if Referenced as build dependency
263
         SELECT COUNT (dep.pv_id)
264
           INTO ROWCOUNT
265
           FROM package_dependencies dep
266
          WHERE dep.dpv_id = pvid;
267
 
268
         IF ROWCOUNT > 0
269
         THEN
270
            problemstring :=
271
                  problemstring
272
               || '- Package is referenced by other package as build dependency.'
273
               || UTL_TCP.crlf;
274
         END IF;
275
 
276
         -- Cannot remove if Referenced as runtime dependency
277
         SELECT COUNT (rd.pv_id)
278
           INTO ROWCOUNT
279
           FROM runtime_dependencies rd
280
          WHERE rd.rtd_id = pvid;
281
 
282
         IF ROWCOUNT > 0
283
         THEN
284
            problemstring :=
285
                  problemstring
286
               || '- Package is referenced by other package as runtime dependency.'
287
               || UTL_TCP.crlf;
288
         END IF;
289
 
290
         -- Cannot remove if Referenced as patch
291
         SELECT COUNT (pp.pv_id)
292
           INTO ROWCOUNT
293
           FROM package_patches pp
294
          WHERE pp.patch_id = pvid;
295
 
296
         IF ROWCOUNT > 0
297
         THEN
298
            problemstring :=
299
                  problemstring
300
               || '- Package is used as patch by other package.'
301
               || UTL_TCP.crlf;
302
         END IF;
303
      END IF;
304
 
305
/*-------------------------------------------------------*/
306
      IF (problemstring IS NULL)
307
      THEN
308
         --- Remove From Work in Progress
309
         DELETE FROM work_in_progress wip
310
               WHERE wip.pv_id = pvid;
311
 
312
         --- Remove From Pending
313
         DELETE FROM planned pl
314
               WHERE pl.pv_id = pvid;
315
 
316
         --- Remove From Released area
317
         DELETE FROM release_content rc
318
               WHERE rc.pv_id = pvid;
319
 
320
         ---Remove From Package Processes
321
         DELETE FROM package_processes pp
322
               WHERE pp.pv_id = pvid;
323
 
324
         --- Remove Dependencies
325
         DELETE FROM package_dependencies dep
326
               WHERE dep.pv_id = pvid;
327
 
328
         DELETE FROM package_dependencies dep
329
               WHERE dep.dpv_id = pvid;
330
 
331
         --- Remove Runtime dependencies
332
         DELETE FROM runtime_dependencies rtd
333
               WHERE rtd.pv_id = pvid;
334
 
335
         DELETE FROM runtime_dependencies rtd
336
               WHERE rtd.rtd_id = pvid;
337
 
338
         --- Remove components
339
         DELETE FROM product_components pc
340
               WHERE pc.pv_id = pvid;
341
 
342
         DELETE FROM release_components rc
343
               WHERE rc.pv_id = pvid;
344
 
345
         --- Remove From Notification History
346
         DELETE FROM notification_history nh
347
               WHERE nh.pv_id = pvid;
348
 
349
         --- Remove From Ignore Warnings
350
         DELETE FROM ignore_warnings iw
351
               WHERE iw.pv_id = pvid;
352
 
353
         --- Remove From Additional Notes
354
         DELETE FROM additional_notes an
355
               WHERE an.pv_id = pvid;
356
 
357
         --- Remove From CQ Issues
358
         DELETE FROM cq_issues cq
359
               WHERE cq.pv_id = pvid;
360
 
361
         --- Remove from Package Patches
362
         DELETE FROM package_patches pp
363
               WHERE pp.pv_id = pvid;
364
 
365
         DELETE FROM package_patches pp
366
               WHERE pp.patch_id = pvid;
367
 
368
         --- Remove From Package Documents
369
         DELETE FROM package_documents pd
370
               WHERE pd.pv_id = pvid;
371
 
372
         --- Remove from Code Review
373
         DELETE FROM code_reviews cr
374
               WHERE cr.pv_id = pvid;
375
 
376
         --- Remove from Code Review URL
377
         DELETE FROM code_review_url cru
378
               WHERE cru.pv_id = pvid;
379
 
380
         --- Remove from Unit Tests
381
         DELETE FROM unit_tests ut
382
               WHERE ut.pv_id = pvid;
383
 
384
         --- Remove from Package BuildEnv
385
         DELETE FROM package_build_env pbe
386
               WHERE pbe.pv_id = pvid;
387
 
388
		 --- Remove from Package Build Info
389
		 DELETE FROM package_build_info pbi
390
		 	   WHERE pbi.pv_id = pvid;    
391
 
392
 
393
         --- Remove from Build Order
394
         DELETE FROM build_order bo
395
               WHERE bo.pv_id = pvid;
396
 
397
         --- Remove from Note Manager
398
         DELETE FROM note_manager nm
399
               WHERE nm.nid = pvid;
400
 
401
         --- Remove from Action log
402
         DELETE FROM action_log al
403
               WHERE al.pv_id = pvid;
404
 
405
		 --- Remove from Do Not Ripple 
406
		 DELETE FROM DO_NOT_RIPPLE dnr
407
		 	   WHERE dnr.PV_ID = pvid;
408
 
409
		 --- Remove from Advisory Ripple 
410
		 DELETE FROM ADVISORY_RIPPLE ar
411
		 	   WHERE ar.PV_ID = pvid;			   
412
 
413
		 --- Remove from Jira Issues 
414
		 DELETE FROM JIRA_ISSUES jira
415
		 	   WHERE jira.PV_ID = pvid;
416
 
417
         --- Finally Remove From Package Versions
418
         --- Get Package name
419
         SELECT pv.pkg_id
420
           INTO pkgid
421
           FROM package_versions pv
422
          WHERE pv.pv_id = pvid;
423
 
424
         DELETE FROM package_versions pv
425
               WHERE pv.pv_id = pvid;
426
 
427
         --- Remove package name if not used any more
428
         SELECT COUNT (pv.pv_id)
429
           INTO ROWCOUNT
430
           FROM package_versions pv
431
          WHERE pv.pkg_id = pkgid;
432
 
433
         IF ROWCOUNT < 1
434
         THEN
435
            DELETE FROM PACKAGES pkg
436
                  WHERE pkg.pkg_id = pkgid;
437
         END IF;
438
      END IF;
439
   END;
440
 
441
/*-------------------------------------------------------------------------------------------------------*/
442
   PROCEDURE new_patch (
443
      snewpatchversion   IN       package_versions.pkg_version%TYPE,
444
      nparentpvid        IN       NUMBER,
445
      spatchidlist       IN       VARCHAR2,
446
      nuserid            IN       NUMBER,
447
      returnpatchid      OUT      NUMBER
448
   )
449
   IS
450
      patchpv_id           NUMBER;
451
      parpkg_id            NUMBER;
452
      lastinstallorder     NUMBER;
453
      ispatchdlocked       package_versions.dlocked%TYPE;
454
      ssv_mm               package_versions.v_mm%TYPE;
455
      ssv_nmm              package_versions.v_nmm%TYPE;
456
      ssv_ext              package_versions.v_ext%TYPE;
457
      opatchdepcollector   relmgr_number_tab_t      := relmgr_number_tab_t
458
                                                                          ();
459
 
460
      CURSOR parent_cur
461
      IS
462
         SELECT pv.*, pkg.pkg_name
463
           FROM package_versions pv, PACKAGES pkg
464
          WHERE pv.pv_id = nparentpvid AND pv.pkg_id = pkg.pkg_id;
465
 
466
      parent_rec           parent_cur%ROWTYPE;
467
 
468
      CURSOR patch_cur
469
      IS
470
         SELECT pv.*, pg.pkg_name
471
           FROM package_versions pv, PACKAGES pg
472
          WHERE pv.pkg_id = parpkg_id
473
            AND pv.pkg_version = snewpatchversion
474
            AND pv.pkg_id = pg.pkg_id;
475
 
476
      patch_rec            patch_cur%ROWTYPE;
477
 
478
      CURSOR releases_cur
479
      IS
480
         SELECT rc.pv_id
481
           FROM release_content rc
482
          WHERE rc.pv_id = patch_rec.pv_id;
483
 
484
      releases_rec         releases_cur%ROWTYPE;
485
   BEGIN
486
      -- Get Last Install Order
487
      SELECT COUNT (*)
488
        INTO lastinstallorder
489
        FROM package_patches pp
490
       WHERE pp.pv_id = nparentpvid;
491
 
492
      -- Get parent details
493
      OPEN parent_cur;
494
 
495
      FETCH parent_cur
496
       INTO parent_rec;
497
 
498
      parpkg_id := parent_rec.pkg_id;
499
 
500
      -- Find if patch exists in database
501
      OPEN patch_cur;
502
 
503
      FETCH patch_cur
504
       INTO patch_rec;
505
 
506
      -- Parent must be official
507
      IF parent_rec.dlocked = 'Y'
508
      THEN
509
         IF patch_cur%NOTFOUND
510
         THEN
511
            ispatchdlocked 
512
:= 'N';
513
 
514
            -- Create new patch version --
515
            SELECT seq_pv_id.NEXTVAL
516
              INTO patchpv_id
517
              FROM DUAL;
518
 
519
            split_version (snewpatchversion, ssv_mm, ssv_nmm, ssv_ext);
520
 
521
            INSERT INTO package_versions
522
                        (pv_id, pkg_id, pkg_version,
523
                         dlocked, created_stamp, creator_id,
524
                         modified_stamp, modifier_id, v_mm, v_nmm, v_ext,
525
                         src_path,
526
                         pv_description,
527
                         owner_id, is_patch, last_pv_id, build_type, is_build_env_required, bs_id,
528
						 is_autobuildable, ripple_field
529
                        )
530
                 VALUES (patchpv_id, parpkg_id, snewpatchversion,
531
                         ispatchdlocked, ora_sysdate, nuserid,
532
                         ora_sysdatetime, nuserid, ssv_mm, ssv_nmm, ssv_ext,
533
                         parent_rec.src_path,
534
                            'This is a patch to '
535
                         || parent_rec.pkg_name
536
                         || ' '
537
                         || parent_rec.pkg_version,
538
                         nuserid, 'Y', patchpv_id, 'M', 'N', 3, 'N', parent_rec.ripple_field
539
                        );
540
 
541
            INSERT INTO package_patches
542
                        (pv_id, patch_id, install_order)
543
               (SELECT nparentpvid AS pv_id, pv.pv_id AS patch_id,
544
                       lastinstallorder + 1 AS install_order
545
                  FROM package_versions pv
546
                 WHERE pv.pv_id = patchpv_id AND pv.is_patch = 'Y');
547
 
548
            /* LOG ACTION */
549
            log_action (patchpv_id,
550
                        'new_version',
551
                        nuserid,
552
                        'Patch version created: ' || snewpatchversion
553
                       );
554
            log_action (nparentpvid,
555
                        'patch_add',
556
                        nuserid,
557
                        'New patch created and attached: ' || snewpatchversion
558
                       );
559
         ELSE
560
            patchpv_id := patch_rec.pv_id;
561
            ispatchdlocked := patch_rec.dlocked;
562
 
563
            -- Find if pv_id exists in release content (i.e. it cannot be a patch)
564
            OPEN releases_cur;
565
 
566
            FETCH releases_cur
567
             INTO releases_rec;
568
 
569
            IF releases_cur%NOTFOUND
570
            THEN
571
               -- This pv_id is trully a patch, hence add Y to column IS_PATCH
572
               UPDATE package_versions
573
                  SET is_patch = 'Y'
574
                WHERE pv_id = patchpv_id;
575
 
576
               INSERT INTO package_patches
577
                           (pv_id, patch_id, install_order)
578
                  (SELECT nparentpvid AS pv_id, pv.pv_id AS patch_id,
579
                          lastinstallorder + 1 AS install_order
580
                     FROM package_versions pv
581
                    WHERE pv.pv_id = patchpv_id AND pv.is_patch = 'Y');
582
            END IF;
583
 
584
            CLOSE releases_cur;
585
 
586
            /* LOG ACTION */
587
            log_action (nparentpvid,
588
                        'patch_add',
589
                        nuserid,
590
                           'Patch version was found and attached: '
591
                        || snewpatchversion
592
                       );
593
         END IF;
594
      END IF;
595
 
596
      /* Create Patch Dependencies */
597
      opatchdepcollector := in_list_number (spatchidlist);
598
 
599
      -- Make sure patch is unofficial before altering its dependencies
600
      IF (opatchdepcollector.COUNT > 0) AND (ispatchdlocked = 'N')
601
      THEN
602
         -- Delete Existing Dependencies
603
         DELETE FROM package_dependencies dep
604
               WHERE dep.pv_id = patchpv_id;
605
 
606
         -- Insert new dependencies
607
         INSERT INTO package_dependencies
608
                     (pv_id, dpv_id, pkg_id, dpkg_id, build_type)
609
            SELECT patchpv_id AS pv_id, pv.pv_id AS dpv_id,
610
                   parpkg_id AS pkg_id, pv.pkg_id AS dpkg_id,
611
                   'L' AS build_type
612
              FROM package_versions pv
613
             WHERE pv.pv_id IN (
614
                      SELECT *
615
                        FROM TABLE
616
                                (CAST
617
                                    (opatchdepcollector AS relmgr_number_tab_t)
618
                                ));
619
      END IF;
620
 
621
      -- Return patch_id
622
      returnpatchid := patchpv_id;
623
 
624
      CLOSE parent_cur;
625
 
626
      CLOSE patch_cur;
627
   EXCEPTION
628
      WHEN DUP_VAL_ON_INDEX
629
      THEN
630
         raise_application_error (-20000,
631
                                     'Patch version '
632
                                  || snewpatchversion
633
                                  || ' already exist.'
634
                                 );
635
   END;
636
 
637
/*-------------------------------------------------------------------------------------------------------*/
638
   PROCEDURE obsolete_patch (
639
      patchid            IN   NUMBER,
640
      isobsolete         IN   CHAR,
641
      obsoletecomments   IN   VARCHAR2,
642
      userid             IN   NUMBER
643
   )
644
   IS
645
   BEGIN
646
      -- Update patch
647
      UPDATE package_versions pv
648
         SET pv.is_obsolete = isobsolete,
649
             pv.obsolete_comments = obsoletecomments
650
       WHERE pv.pv_id = patchid;
651
 
652
      /*
653
      -- Update patch children
654
      UPDATE PACKAGE_VERSIONS pv SET
655
      pv.IS_OBSOLETE = IsObsolete,
656
      pv.OBSOLETE_COMMENTS = ObsoleteComments
657
      WHERE pv.PV_ID IN (
658
                     SELECT DISTINCT dep.DPV_ID
659
                       FROM PACKAGE_DEPENDENCIES dep
660
                      WHERE dep.PV_ID = PatchId
661
                     );
662
 
663
 
664
      -- Update patch parent
665
      UPDATE PACKAGE_VERSIONS pv SET
666
      pv.IS_OBSOLETE = IsObsolete,
667
      pv.OBSOLETE_COMMENTS = ObsoleteComments
668
      WHERE pv.PV_ID IN (
669
                     SELECT DISTINCT dep.PV_ID
670
                       FROM PACKAGE_DEPENDENCIES dep
671
                      WHERE dep.DPV_ID = PatchId
672
                     );
673
 
674
         */
675
 
676
      /* LOG ACTION */
677
      IF isobsolete IS NOT NULL
678
      THEN
679
         log_action (patchid,
680
                     'patch_obsolete',
681
                     userid,
682
                     'Obsolete patch. ' || obsoletecomments
683
                    );
684
      ELSE
685
         log_action (patchid,
686
                     'patch_obsolete',
687
                     userid,
688
                     'Undo patch obsolete.'
689
                    );
690
      END IF;
691
   END;
692
 
693
/*-------------------------------------------------------------------------------------------------------*/
694
   PROCEDURE obsolete_patches (
695
      spatchidlist       IN   VARCHAR2,
696
      isobsolete         IN   CHAR,
697
      obsoletecomments   IN   VARCHAR2,
698
      userid             IN   NUMBER
699
   )
700
   IS
701
   BEGIN
702
      /*--------------- Business Rules Here -------------------*/
703
      IF spatchidlist IS NULL
704
      THEN
705
         raise_application_error (-20000,
706
                                  'Please select one or more Patches.'
707
                                 );
708
      END IF;
709
 
710
/*-------------------------------------------------------*/
711
 
712
      -- Update patch
713
      UPDATE package_versions pv
714
         SET pv.is_obsolete = isobsolete,
715
             pv.obsolete_comments = obsoletecomments
716
       WHERE pv.pv_id IN (
717
                SELECT *
718
                  FROM THE
719
                          (SELECT CAST
720
                                     (in_list_number (spatchidlist) AS relmgr_number_tab_t
721
                                     )
722
                             FROM DUAL
723
                          ));
724
   /*
725
   -- Update patch children
726
   UPDATE PACKAGE_VERSIONS pv SET
727
   pv.IS_OBSOLETE = IsObsolete,
728
   pv.OBSOLETE_COMMENTS = ObsoleteComments
729
   WHERE pv.PV_ID IN (
730
                  SELECT DISTINCT dep.DPV_ID
731
                    FROM PACKAGE_DEPENDENCIES dep
732
                   WHERE dep.PV_ID = PatchId
733
                  );
734
 
735
 
736
   -- Update patch parent
737
   UPDATE PACKAGE_VERSIONS pv SET
738
   pv.IS_OBSOLETE = IsObsolete,
739
   pv.OBSOLETE_COMMENTS = ObsoleteComments
740
   WHERE pv.PV_ID IN (
741
                  SELECT DISTINCT dep.PV_ID
742
                    FROM PACKAGE_DEPENDENCIES dep
743
                   WHERE dep.DPV_ID = PatchId
744
                  );
745
 
746
      */
747
 
748
   /* LOG ACTION
749
   IF IsObsolete IS NOT NULL THEN
750
         Log_Action ( PatchId, 
751
'patch_obsolete', UserId,
752
                  'Obsolete patch. '|| ObsoleteComments );
753
   ELSE
754
      Log_Action ( PatchId, 'patch_obsolete', UserId,
755
                  'Undo patch obsolete.' );
756
   END IF;  */
757
   END;
758
 
759
/*-------------------------------------------------------------------------------------------------------*/
760
   PROCEDURE add_process (
761
      nprocid         IN   processes.proc_id%TYPE,
762
      shealthtag      IN   processes.proc_name%TYPE,
763
      sprocdesc       IN   processes.proc_description%TYPE,
764
      scmdinterface   IN   processes.run_as%TYPE,
765
      spkgowner       IN   processes.pkg_owner%TYPE,
766
      sisinterface    IN   processes.is_interface%TYPE,
767
      npvid           IN   package_processes.pv_id%TYPE,
768
      nuserid         IN   NUMBER
769
   )
770
   IS
771
      pkgname   VARCHAR2 (100);
772
/*Rupesh Release on 17/05/2006*/
773
   BEGIN
774
      INSERT INTO processes
775
                  (proc_id, proc_name, proc_description, run_as, pkg_owner,
776
                   is_interface
777
                  )
778
           VALUES (nprocid, shealthtag, sprocdesc, scmdinterface, spkgowner,
779
                   sisinterface
780
                  );
781
 
782
      pk_package.add_package_process (nprocid, npvid, nuserid);
783
   END;
784
 
785
/*-------------------------------------------------------------------------------------------------------*/
786
   PROCEDURE add_package_process (
787
      nprocidlist   IN   VARCHAR2,
788
      npvid         IN   package_processes.pv_id%TYPE,
789
      nuserid       IN   NUMBER
790
   )
791
   IS
792
      processname   VARCHAR2 (4000);
793
 
794
/*Rupesh Release on 17/05/2006*/
795
      CURSOR proc_cur
796
      IS
797
         SELECT prc.proc_id
798
           FROM processes prc
799
          WHERE prc.proc_id IN (
800
                   SELECT *
801
                     FROM THE
802
                             (SELECT CAST
803
                                        (in_list_number (nprocidlist) AS relmgr_number_tab_t
804
                                        )
805
                                FROM DUAL
806
                             ));
807
 
808
      proc_rec      proc_cur%ROWTYPE;
809
   BEGIN
810
      OPEN proc_cur;
811
 
812
      FETCH proc_cur
813
       INTO proc_rec;
814
 
815
      WHILE proc_cur%FOUND
816
      LOOP
817
         INSERT INTO package_processes
818
                     (proc_id, pv_id
819
                     )
820
              VALUES (proc_rec.proc_id, npvid
821
                     );
822
 
823
         SELECT prc.proc_name
824
           INTO processname
825
           FROM processes prc
826
          WHERE prc.proc_id = proc_rec.proc_id;
827
 
828
         -- Log Action --
829
         log_action (npvid,
830
                     'process_add',
831
                     nuserid,
832
                     'Added process with health tag ' || processname
833
                    );
834
 
835
         FETCH proc_cur
836
          INTO proc_rec;
837
      END LOOP;
838
   END;
839
 
840
/*-------------------------------------------------------------------------------------------------------*/
841
   PROCEDURE remove_process (
842
      nprocid   IN   package_processes.proc_id%TYPE,
843
      npvid     IN   package_processes.pv_id%TYPE,
844
      nuserid   IN   NUMBER
845
   )
846
   IS
847
      processname   VARCHAR2 (4000);
848
/* Rupesh Release on 17/05/2006*/
849
   BEGIN
850
      SELECT prc.proc_name
851
        INTO processname
852
        FROM processes prc
853
       WHERE prc.proc_id = nprocid;
854
 
855
      DELETE FROM package_processes
856
            WHERE proc_id = nprocid AND pv_id = npvid;
857
 
858
      -- Log Action --
859
      log_action (npvid,
860
                  'process_remove',
861
                  nuserid,
862
                  'Removed process with health tag ' || processname
863
                 );
864
   END;
865
/*-------------------------------------------------------------------------------------------------------*/
866
  /* 
867
  Author: Rupesh Solanki
868
  Purpose: To move package versions from one release to another
869
  Release: 4th September 2006 
870
 
871
  */
872
  PROCEDURE move_package (
873
   	  npvid  			  IN package_versions.pv_id%TYPE,
874
	  nrtagid 			  IN release_tags.rtag_id%TYPE,
875
	  nnewrtagid 		  IN release_tags.rtag_id%TYPE,
876
	  nuserid			  IN NUMBER	
877
  )	
878
  IS	
879
 
880
  oldrtag_name VARCHAR2(4000);
881
  newrtag_name VARCHAR2(4000);
882
 
883
 
884
 
885
  BEGIN
886
 
887
 
888
  SELECT rtag_name into oldrtag_name
889
  FROM RELEASE_TAGS
890
  WHERE rtag_id = nrtagid;
891
 
892
  SELECT rtag_name into newrtag_name
893
  FROM RELEASE_TAGS
894
  WHERE rtag_id = nnewrtagid;
895
 
896
  /* Table Work In Progress*/
897
  	   UPDATE WORK_IN_PROGRESS
898
	   SET RTAG_ID = nnewrtagid
899
	   WHERE RTAG_ID = nrtagid
900
	   AND PV_ID = npvid;
901
 
902
  /* Table PLANNED*/	
903
  	   UPDATE PLANNED
904
	   SET RTAG_ID = nnewrtagid
905
	   WHERE RTAG_ID = nrtagid
906
	   AND PV_ID = npvid;   
907
 
908
      -- Log Action --
909
      log_action (npvid,
910
                  'move_package_version',
911
                  nuserid,
912
                  'Moved package version from ' || oldrtag_name || ' to ' || newrtag_name
913
                 );  	   	     
914
 
915
 
916
  END;
917
 
918
/*-------------------------------------------------------------------------------------------------------*/
919
PROCEDURE modify_product_state (
920
   	  npvid IN package_versions.pv_id%TYPE,
921
	  nrtagid IN release_tags.rtag_id%TYPE,
922
	  nstateid IN product_states.state_id%TYPE,
923
	  nuserid IN NUMBER
924
   ) IS
925
 
926
   sStateName VARCHAR2(4000);
927
   sRtagName VARCHAR2(4000);
928
 
929
  /* 
930
  Author: Rupesh Solanki
931
  Purpose: To modify the product state from integration to test to deployment
932
  Release: 25th January 2006 
933
  */   
934
 
935
  BEGIN
936
 
937
  UPDATE RELEASE_CONTENT
938
  SET PRODUCT_STATE = nstateid
939
  WHERE PV_ID = npvid
940
  AND RTAG_ID = nrtagid;
941
 
942
 
943
  SELECT STATE INTO sStateName
944
  FROM PRODUCT_STATES 
945
  WHERE STATE_ID = nstateid;
946
 
947
  SELECT RTAG_NAME into sRtagName
948
  FROM RELEASE_TAGS
949
  WHERE RTAG_ID = nrtagid;
950
 
951
 
952
  -- Log Action --
953
  log_action (npvid,
954
              'modify_product_state',
955
               nuserid,
956
               sStateName || ' in '|| sRtagName
957
              );  
958
 
959
 
960
  END;			  	   	     
961
/*-------------------------------------------------------------------------------------------------------*/
962
  PROCEDURE add_code_review_url (
963
        npvid           IN    NUMBER,
964
        nprojid         IN    NUMBER,
965
        surl            IN    VARCHAR2,
966
        sreason         IN    VARCHAR2,
967
        ddateofreview   IN    DATE
968
  ) IS
969
 
970
  ncrid NUMBER;
971
 
972
  /* 
973
  Author: Jeremy Tweddle
974
  Date: 24/Aug/2007 
975
  */   
976
 
977
  BEGIN
978
 
979
      SELECT seq_cr_id.NEXTVAL INTO ncrid FROM DUAL;
980
 
981
 
982
      INSERT INTO code_review_url ( cr_id, pv_id, proj_id, url, reason, date_of_review,
983
                                    last_modified )
984
      VALUES ( ncrid, npvid, nprojid, surl, sreason, ddateofreview, ora_sysdate );
985
 
986
  END;
987
/*-------------------------------------------------------------------------------------------------------*/
988
  PROCEDURE update_code_review_url (
989
        ncrid           IN    NUMBER,
990
        nprojid         IN    NUMBER,
991
        surl            IN    VARCHAR2,
992
        sreason         IN    VARCHAR2
993
  ) IS
994
 
995
  /* 
996
  Author: Jeremy Tweddle
997
  Date: 22/Aug/2007 
998
  */ 
999
 
1000
  BEGIN
1001
 
1002
      UPDATE code_review_url
1003
      SET url = surl,
1004
          proj_id = nprojid,
1005
          reason = sreason,
1006
          last_modified = ora_sysdate
1007
      WHERE cr_id = ncrid;
1008
 
1009
  END;
1010
/*-------------------------------------------------------------------------------------------------------*/
1011
  PROCEDURE remove_code_review_url (
1012
        ncrid           IN    NUMBER
1013
  ) IS
1014
 
1015
  /* 
1016
  Author: Jeremy Tweddle
1017
  Date: 22/Aug/2007 
1018
  */
1019
 
1020
  BEGIN
1021
 
1022
      DELETE FROM code_review_url
1023
      WHERE cr_id = ncrid;
1024
 
1025
  END;
1026
/*-------------------------------------------------------------------------------------------------------*/
1027
END pk_package;
1028
/
1029
ALTER PACKAGE "RELEASE_MANAGER"."PK_PACKAGE" 
1030
  COMPILE BODY 
1031
    PLSQL_OPTIMIZE_LEVEL=  2
1032
    PLSQL_CODE_TYPE=  INTERPRETED
1033
    PLSQL_DEBUG=  TRUE
1034
 REUSE SETTINGS TIMESTAMP '2008-04-11 12:58:37'
1035
/