Subversion Repositories DevTools

Rev

Rev 6827 | Rev 6877 | Go to most recent revision | Details | Compare with Previous | Last modification | View Log | RSS feed

Rev Author Line No. Line
5357 dpurdie 1
<%@LANGUAGE="VBSCRIPT"%>
2
<%
3
'=====================================================
4
'|
5
'|  diff.asp
6
'|
7
'=====================================================
8
%>
9
<%
10
Option explicit
11
' Good idea to set when using redirect
12
Response.Expires = 0    ' always load the page, dont store
13
%>
14
<%
15
'To enable the script timeout to 20 mins
16
Server.ScriptTimeout=1200
17
%>
18
<!--#include file="common/conf.asp"-->
19
<!--#include file="common/globals.asp"-->
20
<!--#include file="common/formating.asp"-->
21
<!--#include file="common/qstr.asp"-->
22
<!--#include file="common/common_subs.asp"-->
23
<!--#include file="common/common_dbedit.asp"-->
24
<!--#include file="common/_form_window_common.asp"-->
25
<%
26
'------------ ACCESS CONTROL ------------------
27
%>
28
<!--#include file="_access_control_login.asp"-->
29
<!--#include file="_access_control_general.asp"-->
30
<SCRIPT LANGUAGE="VBScript" RUNAT=SERVER SRC="class/classaspJSON.vbs"></SCRIPT>
6191 dpurdie 31
<SCRIPT LANGUAGE="VBScript" RUNAT=SERVER SRC="common/base64encode.vbs"></SCRIPT>
32
<SCRIPT LANGUAGE="VBScript" RUNAT=SERVER SRC="common/jiraIssues.vbs"></SCRIPT>
5357 dpurdie 33
<%
34
'------------ Variable Definition -------------
35
Dim rsQry
36
Dim objRelCollectorA
37
Dim objRelCollectorB
38
Dim parRtagA
39
Dim parRtagB
40
Dim dDiffFilter
41
Dim colorA, colorB, ChangeTypeIcon
42
Dim btnMerge, btnRemove
43
Dim rowId
44
Dim email
45
Dim genReport
6197 dpurdie 46
Dim reportPath
5357 dpurdie 47
Dim FSO
48
Dim NewTextFile
49
Dim pkgA, pkgB, pkgname, delimiter, rsQryA, rsQryB, rsQryCommentsA, rsQryCommentsB, sqlstrA, counterA, sqlstrB, counterB
50
Dim SSsql, retVal, rsCQ, DEVIiss
51
Dim a, b, c, d, pkgversion, errormsg, ChangeASource, ChangeAUpdate, ChangeBSource, ChangeBUpdate, pvCollectionA, pvCollectionB
52
Dim source_change, scFlag
53
Dim changeType
6189 dpurdie 54
Dim pkgSeen
5357 dpurdie 55
Dim isaSdk                  ' Target is an SDK based package
56
Dim isMergable              ' Target package can be modified
57
 
58
'------------ Constants Declaration -----------
6196 dpurdie 59
Const LIMG_PENDING = "<img src='data:image/gif;base64,R0lGODlhAQABAAD/ACwAAAAAAQABAAACADs=' width='11' height='11' border='0' hspace='5' align='absmiddle' title='Merge Pending'>"
6647 dpurdie 60
Const LIMG_UNCHANGED = "<img src='images/i_unchanged.gif' width='11' height='11' border='0' hspace='5' align='absmiddle' title='Unchanged'>"
5357 dpurdie 61
Const LIMG_UPDATED = "<img src='images/i_updated.gif' width='11' height='11' border='0' hspace='5' align='absmiddle' title='Updated'>"
6196 dpurdie 62
Const LIMG_OUTDATED = "<img src='images/i_outdated.gif' width='11' height='11' border='0' hspace='5' align='absmiddle' title='Possibly Outdated'>"
5357 dpurdie 63
Const LIMG_RIPPLED = "<img src='images/i_rippled.gif' width='11' height='11' border='0' hspace='5' align='absmiddle' title='Rippled'>"
64
Const LIMG_ADDED = "<img src='images/i_added.gif' width='11' height='11' border='0' hspace='5' align='absmiddle' title='Added'>"
65
Const LIMG_REMOVED = "<img src='images/i_removed.gif' width='11' height='11' border='0' hspace='5' align='absmiddle' title='Removed'>"
66
Const LIMG_FILTER_ON = "<img src='images/i_data_table.gif' border='0' align='absmiddle' hspace='0' title='Filter in use.'>"
67
Const LIMG_FILTER_OFF = "<img src='images/i_data_table_off.gif' border='0' align='absmiddle' hspace='0' title='Filter not in use.'>"
68
Const LIMG_DROP_DOWN_ARROW = "<img src='images/i_drop_down_arrow.gif' width='5' height='15' hspace='1' border='0' align='absmiddle'>"
69
Const LCOLOR_NOT_CHANGED = "#F5F5F5"
70
Const LCOLOR_CHANGED = "#d2f7c9"
6196 dpurdie 71
Const LCOLOR_OUTDATED = "#ffd292"
5357 dpurdie 72
Const LCOLOR_RIPPLED = "#D8F8F8"
73
Const LCOLOR_BLANK = "#FFFFFF"
74
Const LIMG_MERGE = "<img src='images/bt_move_all_right.gif' title='Click to merge.' border='0'>"
75
Const LIMG_MERGE_WARN = "<img src='images/bt_move_warn_right.gif' title='Right hand side version is newer.' border='0'>"
76
Const LIMG_REMOVE = "<img src='images/bt_remove.gif' title='Remove this version from release.' border='0'>"
77
Const LIMG_UNDO = "<img src='images/bt_undo.gif' title='Undo merge/remove.' border='0'>"
78
Const LIMG_SDK = "<img src='images/i_sdkpkg.png' width='18' height='18' border='0' title='Package is imported from an SDK and cannot be modified'>"
79
'------------ Variable Init -------------------
80
parRtagA = Request("rtagA")
81
parRtagB = Request("rtagB")
82
Set objRelCollectorA = CreateObject("Scripting.Dictionary")
83
Set objRelCollectorB = CreateObject("Scripting.Dictionary")
84
Set dDiffFilter = CreateObject("Scripting.Dictionary")
6189 dpurdie 85
Set pkgSeen = CreateObject("Scripting.Dictionary")
5357 dpurdie 86
'----------------------------------------------
87
If Request("btn") = "Mail Me Report" Then
88
    email = true
89
    genReport = true
90
End If
91
If Request("btn") = "Show Me Report" Then
92
    genReport = true
93
End If
6197 dpurdie 94
If genReport Then
95
    reportPath = Server.MapPath("docs\compareReleases_"&objAccessControl.UserName&".html")
96
End If
5357 dpurdie 97
'--------------------------------------------------------------------------------------------------------------------------
98
Sub GetDiffFilterValues ( outDepFilter )
99
    Dim FilterVal, aFilterValues
100
 
101
    If Request.Cookies(enum_RELMGR_COOKIE_DOMAIN)(COOKIE_HIDE_DIFF_FILTER) <> "" Then
102
        aFilterValues = Split( Replace( Request.Cookies(enum_RELMGR_COOKIE_DOMAIN)(COOKIE_HIDE_DIFF_FILTER), " ", ""), ",")
103
 
104
        For Each FilterVal In aFilterValues
105
            outDepFilter.Item (CStr( FilterVal )) = ""
106
        Next
107
 
108
    End If
109
 
110
End Sub
111
'--------------------------------------------------------------------------------------------------------------------------
112
Sub Javascript()
113
    NewTextFile.WriteLine("<script language=""JavaScript"" type=""text/javascript"">")
114
    NewTextFile.WriteLine("function MM_findObj(n, d) { //v4.0")
115
    NewTextFile.WriteLine("  var p,i,x;")
116
    NewTextFile.WriteLine("  if(!d) d=document; ")
117
    NewTextFile.WriteLine("  if((p=n.indexOf(""?""))>0&&parent.frames.length) {")
6191 dpurdie 118
    NewTextFile.WriteLine("    d=parent.frames[n.substring(p+1)].document; n=n.substring(0,p);")
5357 dpurdie 119
    NewTextFile.WriteLine("  }")
120
    NewTextFile.WriteLine("  if(!(x=d[n])&&d.all) x=d.all[n]; ")
121
    NewTextFile.WriteLine("  for (i=0;!x&&i<d.forms.length;i++) x=d.forms[i][n];")
122
    NewTextFile.WriteLine("  for(i=0;!x&&d.layers&&i<d.layers.length;i++) x=MM_findObj(n,d.layers[i].document);")
123
    NewTextFile.WriteLine("  if(!x && document.getElementById) x=document.getElementById(n); ")
124
    NewTextFile.WriteLine("  return x;")
125
    NewTextFile.WriteLine("}")
126
 
127
    NewTextFile.WriteLine("function toggleSPAN(x) {")
128
    NewTextFile.WriteLine("    var el = MM_findObj('spanPkgInfo' + x);")
129
    NewTextFile.WriteLine("    if (el.style.display != ""block"") {")
130
    NewTextFile.WriteLine("        el.style.display = ""block"";")
131
    NewTextFile.WriteLine("    } else {")
132
    NewTextFile.WriteLine("        el.style.display = ""none"";")
133
    NewTextFile.WriteLine("    }")
134
    NewTextFile.WriteLine("}")
135
 
136
    NewTextFile.WriteLine("function MM_getElementsByClassName(cn) {")
137
    NewTextFile.WriteLine("    var allT=document.getElementsByTagName('*'), allCN=[], i=0, a;")
138
    NewTextFile.WriteLine("    while(a=allT[i++]) {")
139
    NewTextFile.WriteLine("        a.className==cn ? allCN[allCN.length]=a : null;")
140
    NewTextFile.WriteLine("    }")
141
    NewTextFile.WriteLine("    return allCN")
142
    NewTextFile.WriteLine("}")
143
 
144
    NewTextFile.WriteLine("    function MM_toggleAll(cn, show){")
145
    NewTextFile.WriteLine("        var allEl = MM_getElementsByClassName(cn);")
146
    NewTextFile.WriteLine("        for (var ii=0; ii<allEl.length;ii++){")
147
    NewTextFile.WriteLine("            var el = allEl[ii];")
148
    NewTextFile.WriteLine("            if(show) {")
149
    NewTextFile.WriteLine("                el.style.display = ""block"";")
150
    NewTextFile.WriteLine("            } else {")
151
    NewTextFile.WriteLine("                el.style.display = ""none"";")
152
    NewTextFile.WriteLine("            }")
153
    NewTextFile.WriteLine("        }")
154
    NewTextFile.WriteLine("    }")
155
 
156
    NewTextFile.WriteLine("</script>")
157
End Sub
158
'--------------------------------------------------------------------------------------------------------------------------
159
Sub GetFixedIssues(pv_id)
160
    '
161
    ' Clearcase issues
162
    '
163
    Set sqlstrA = OraDatabase.DbCreateDynaset("SELECT iss_db, iss_id, iss_state, notes FROM CQ_ISSUES WHERE pv_id="& pv_id &"  AND iss_state = "& enumISSUES_STATE_FIXED, cint(0))
164
 
165
    If sqlstrA.RecordCount <> 0 Then
166
        NewTextFile.WriteLine()
167
        NewTextFile.WriteLine("<blockquote><blockquote>Fixed ClearQuest Issues:</blockquote></blockquote>")
168
        NewTextFile.WriteLine("<blockquote><blockquote><blockquote><table class='fixed_issues' width='100%'>")
169
        NewTextFile.WriteLine("<tr>")
170
        NewTextFile.WriteLine("<td width='10%' class='form_field'>Issue Id</td>")
171
        NewTextFile.WriteLine("<td width='55%' class='form_field'>Summary</td>")
172
        NewTextFile.WriteLine("<td width='10%' class='form_field'>Issue Type</td>")
173
        NewTextFile.WriteLine("<td width='15%' class='form_field'>Priority</td>")
174
        NewTextFile.WriteLine("<td width='10%' class='form_field'>Status</td>")
175
        NewTextFile.WriteLine("</tr>")
176
 
177
        For counterA=1 to sqlstrA.RecordCount
178
            DEVIiss = "-1"
179
 
180
            If CInt(sqlstrA("iss_db")) = CInt(enumCLEARQUEST_DEVI_ID) Then
181
                DEVIiss = DEVIiss &","& sqlstrA("iss_id")
182
            End If
183
 
184
            SSsql = ReadFile( rootPath & "queries\cq_issues.sql" )
185
            SSsql = Replace( SSsql, "/*enumCLEARQUEST_DEVI_ID*/", enumCLEARQUEST_DEVI_ID)
186
            SSsql = Replace( SSsql, "/*DEVIiss*/", DEVIiss)
187
            retVal = Get_CQ_Issues ( SSsql, rsCQ )
188
 
189
            NewTextFile.WriteLine("<tr>")
190
            NewTextFile.WriteLine("<td nowrap class='form_item'>"&rsCQ("iss_num")&"</td>")
191
 
192
            NewTextFile.WriteLine("<td class='form_item'>"&NewLine_To_BR ( To_HTML ( rsCQ("summary") ) )&"</td>")
193
            NewTextFile.WriteLine("<td class='form_item'>"&rsCQ("issue_type")&"</td>")
194
            NewTextFile.WriteLine("<td class='form_item'>"&rsCQ("priority")&"</td>")
195
            NewTextFile.WriteLine("<td class='form_item'>"&rsCQ("Status")&"</td>")
196
            NewTextFile.WriteLine("</tr>")
197
 
198
            sqlstrA.MoveNext
199
        Next
200
        sqlstrA.Close()
6191 dpurdie 201
        NewTextFile.WriteLine( "                        </table></blockquote></blockquote></blockquote>")
5357 dpurdie 202
    End If
6191 dpurdie 203
 
5357 dpurdie 204
    ' Must also handle Jira Issues
205
    On Error Resume Next
206
 
207
    Dim issueInfo, el, key
208
    Set issueInfo = CreateObject( "Scripting.Dictionary" )
209
    Call getJiraIssueDetails(pv_id, issueInfo, 1)
210
    If issueInfo.Count > 0 Then
211
        ' Table Header
212
        NewTextFile.WriteLine()
213
        NewTextFile.WriteLine("<blockquote><blockquote>Jira Issues:</blockquote></blockquote>")
214
        NewTextFile.WriteLine("<blockquote><blockquote><blockquote><table class='fixed_issues' width='100%'>")
215
        NewTextFile.WriteLine("<tr>")
216
        NewTextFile.WriteLine("<td width='8%' class='form_field'>Issue Id</td>")
217
        NewTextFile.WriteLine("<td width='58%' class='form_field'>Summary</td>")
218
        NewTextFile.WriteLine("<td width='8%' class='form_field'>Issue Type</td>")
219
        NewTextFile.WriteLine("<td width='10%' class='form_field'>Priority</td>")
220
        NewTextFile.WriteLine("<td width='8%' class='form_field'>Status</td>")
221
        NewTextFile.WriteLine("<td width='8%' class='form_field'>Resolution</td>")
222
        NewTextFile.WriteLine("</tr>")
223
 
224
        ' Table Body
225
        For Each key In issueInfo
226
            Set el = issueInfo.item(key)
227
 
228
            NewTextFile.WriteLine("<tr>")
229
            NewTextFile.WriteLine("<td nowrap class='form_item'>"&key&"</td>")
230
            NewTextFile.WriteLine("<td class='form_item'>"&NewLine_To_BR ( To_HTML ( el.item("summary") ) )&"</td>")
231
            NewTextFile.WriteLine("<td class='form_item'>"&el.item("issuetype")&"</td>")
232
            NewTextFile.WriteLine("<td class='form_item'>"&el.item("priority")&"</td>")
233
            NewTextFile.WriteLine("<td class='form_item'>"&el.item("status")&"</td>")
234
            NewTextFile.WriteLine("<td class='form_item'>"&el.item("resolution")&"</td>")
235
            NewTextFile.WriteLine("</tr>")
236
        Next
6191 dpurdie 237
        NewTextFile.WriteLine( "                        </table></blockquote></blockquote></blockquote>")
5357 dpurdie 238
    Set issueInfo = nothing
239
    End If
240
End Sub
241
'--------------------------------------------------------------------------------------------------------------------------
242
Sub LastPvIdA(a)
243
 
244
    Dim qryA
245
    Set qryA = OraDatabase.DbCreateDynaset("SELECT LAST_PV_ID FROM PACKAGE_VERSIONS WHERE PV_ID="&a, cint(0))
246
 
247
    'If a <> qryA("last_pv_id") Then
248
        a = qryA("last_pv_id")
249
    'Else
250
    '    errormsg = true
251
    'End If
252
 
253
    If pvCollectionA.Exists(CStr(a)) Then
254
        errormsg = true
255
        Exit Sub
256
    End If
257
 
258
    qryA.Close()
259
End Sub
260
'--------------------------------------------------------------------------------------------------------------------------
261
Sub LastPvIdB(b)
262
    Dim qryB
263
    Set qryB = OraDatabase.DbCreateDynaset("SELECT LAST_PV_ID FROM PACKAGE_VERSIONS WHERE PV_ID="&b, cint(0))
264
 
265
    'If b <> qryB("last_pv_id") Then
266
        b = qryB("last_pv_id")
267
    'Else
268
    '    errormsg = true
269
    'End If
270
 
271
    If pvCollectionB.Exists(CStr(b)) Then
272
        errormsg = true
273
        Exit Sub
274
    End If
275
 
276
    qryB.Close()
277
End Sub
278
'--------------------------------------------------------------------------------------------------------------------------
279
Sub pkg_Version(pv)
280
    Dim qry
281
    Set qry = OraDatabase.DbCreateDynaset("SELECT PKG_VERSION FROM PACKAGE_VERSIONS WHERE PV_ID="&pv, cint(0))
282
    pkgversion = qry("pkg_version")
283
    qry.Close()
284
End Sub
285
'--------------------------------------------------------------------------------------------------------------------------
286
Sub LastPvIdAa(a)
287
    Dim qryA
288
    Set qryA = OraDatabase.DbCreateDynaset("SELECT LAST_PV_ID FROM PACKAGE_VERSIONS WHERE PV_ID="&a, cint(0))
289
    c = qryA("last_pv_id")
290
    qryA.Close()
291
End Sub
292
'--------------------------------------------------------------------------------------------------------------------------
293
Sub LastPvIdBb(b)
294
    Dim qryB
295
    Set qryB = OraDatabase.DbCreateDynaset("SELECT LAST_PV_ID FROM PACKAGE_VERSIONS WHERE PV_ID="&b, cint(0))
296
    d = qryB("last_pv_id")
297
    qryB.Close()
298
End Sub
299
'--------------------------------------------------------------------------------------------------------------------------
300
Sub Comments(Pv_Id)
301
    Dim comments
302
    Set comments = OraDatabase.DbCreateDynaset("SELECT COMMENTS, PKG_VERSION FROM PACKAGE_VERSIONS WHERE PV_ID="&Pv_id, cint(0))
303
 
304
    scFlag = false
305
    If comments("comments") <> "Rippled Build." Then
306
        NewTextFile.WriteLine("<blockquote><blockquote><font color="&chr(34)&"blue"&chr(34)&">Version: "& comments("pkg_version")&"</font></blockquote></blockquote>")
307
        If comments("comments") <> "" Then
308
            NewTextFile.WriteLine("<blockquote><blockquote>Comments: </blockquote></blockquote>")
309
            NewTextFile.WriteLine("<blockquote><blockquote><blockquote>"& TextToHTML(comments("comments")) &"</blockquote></blockquote></blockquote>")
310
            source_change = true
311
            scFlag = true
312
        End If
313
    End If
314
 
315
End Sub
316
'--------------------------------------------------------------------------------------------------------------------------
317
Sub Release(pvId)
318
    Dim release
319
    Set release = OraDatabase.DbCreateDynaset("SELECT INSERT_STAMP FROM RELEASE_CONTENT WHERE PV_ID="&pvId, cint(0))
320
 
321
    If release("insert_stamp") <> "" Then
322
        NewTextFile.Write(release("insert_stamp"))
323
    Else
324
        NewTextFile.Write("Version Not Used.")
325
    End If
326
 
327
End Sub
328
'--------------------------------------------------------------------------------------------------------------------------
329
Sub Header()
330
    NewTextFile.WriteLine("<html>")
331
    NewTextFile.WriteLine("<head>")
332
End Sub
333
'--------------------------------------------------------------------------------------------------------------------------
334
Sub Footer()
335
    NewTextFile.WriteLine("</body>")
336
    NewTextFile.WriteLine("</html>")
337
End Sub
338
'--------------------------------------------------------------------------------------------------------------------------
339
Sub Styles()
340
  NewTextFile.WriteLine("<style type="&chr(34)&"text/css"&chr(34)&">")
341
  NewTextFile.WriteLine("body { font-family:Verdana,Arial,Helvetica,sans-serif; }")
342
  NewTextFile.WriteLine("table { border-collapse:collapse; }")
343
  NewTextFile.WriteLine("table.fixed_issues td { border-width:1; border-style:solid; border-color:black; padding:3 5 3 5; }")
344
  NewTextFile.WriteLine(".fixed_issues { border-width:1; border-style:solid; border-color:black; }")
345
  NewTextFile.WriteLine(".page_title { color:red; font-size:110%; text-align:center; }")
346
  NewTextFile.WriteLine(".highlight_text { color:blue; }")
347
  NewTextFile.WriteLine(".form_field { background-color:#EAE5D7; font:bold 70% Tahoma,sans-serif; }")
348
  NewTextFile.WriteLine(".form_item { background-color:#EAE5D7; color:red; font:bold 70% Tahoma,sans-serif; vertical-align:top; }")
6827 dpurdie 349
  NewTextFile.WriteLine(".pointer { cursor:pointer;text-decoration-style:solid; color:rgb(0, 0, 238)};")
5357 dpurdie 350
 
351
  NewTextFile.WriteLine(".changesa { background-color:red; }")
352
  NewTextFile.WriteLine(".changesb { background-color:#FF9933; }")
353
  NewTextFile.WriteLine(".changesnone { color:#999999; }")
354
 
355
  NewTextFile.WriteLine(".texta { color:red; }")
356
  NewTextFile.WriteLine(".textb { color:#FF9933; }")
357
  NewTextFile.WriteLine(".textnone { color:#999999; }")
358
 
359
  NewTextFile.WriteLine("</style>")
360
End Sub
361
'--------------------------------------------------------------------------------------------------------------------------
362
Function GetIsDiffFilterInUseIcon()
363
    GetIsDiffFilterInUseIcon = LIMG_FILTER_OFF & LIMG_DROP_DOWN_ARROW
364
 
365
    If dDiffFilter.Count > 0 Then
366
        GetIsDiffFilterInUseIcon = LIMG_FILTER_ON & LIMG_DROP_DOWN_ARROW
367
    End If
368
 
369
End Function
370
'--------------------------------------------------------------------------------------------------------------------------
371
Function GetIsDiffFilterChecked( nFilterId )
372
 
373
    If dDiffFilter.Exists ( CStr(nFilterId)  ) Then
374
        GetIsDiffFilterChecked = "checked"
375
    End If
376
 
377
End Function
378
'---------------------------------------------------------------------------------------------------------------------------
379
Function  Get_CQ_Issues ( SSsql, OOrsCQ )
380
 
381
    On Error Resume Next
382
    Set OOrsCQ = OraDatabase.DbCreateDynaset( SSsql, cint(0))
383
    Get_CQ_Issues = Err.Number
384
 
385
End Function
386
'--------------------------------------------------------------------------------------------------------------------------
387
Public Function TextToHTML ( sString )
388
    Dim mString
389
 
390
    If (sString = "") OR IsNull(sString) Then Exit Function
391
 
392
    mString = Server.HTMLEncode( sString )
393
    mString = Replace(mString, VBNewLine, "<br>")
394
 
395
    TextToHTML = mString
396
End Function
397
'--------------------------------------------------------------------------------------------------------------------------
398
 
399
Sub GetFormDetails ( nSourceRtagId, ByRef outobjDetails )
400
    Dim rsQry, query
401
 
402
    ' Exit if nSourceRtagId is empty
403
    If nSourceRtagId = "" Then Exit Sub
404
 
405
    OraDatabase.Parameters.Add "SOURCE_RTAG_ID",     nSourceRtagId,        ORAPARM_INPUT, ORATYPE_NUMBER
406
 
407
    query = _
408
    " SELECT pr.PROJ_NAME ||' &gt; '|| rt.RTAG_NAME    AS LOCATION, "&_
409
    "          rt.OFFICIAL, pr.PROJ_ID, rt.RTAG_ID"&_
410
    "  FROM RELEASE_TAGS rt,"&_
411
    "            PROJECTS pr"&_
412
    " WHERE rt.PROJ_ID = pr.PROJ_ID"&_
413
    "    AND rt.RTAG_ID = :SOURCE_RTAG_ID"
414
 
415
    Set rsQry = OraDatabase.DbCreateDynaset( query, ORADYN_DEFAULT )
416
 
417
    OraDatabase.Parameters.Remove "SOURCE_RTAG_ID"
418
 
419
    If rsQry.RecordCount > 0 Then
420
        outobjDetails.Item ("location") = rsQry("location")
421
        outobjDetails.Item ("official") = rsQry("official")
422
        outobjDetails.Item ("proj_id") = rsQry("proj_id")
423
        outobjDetails.Item ("rtag_id") = rsQry("rtag_id")
424
    Else
425
        Err.Raise 8, "Sub GetFormDetails in "& ScriptName, "Empty record set returned. nSourceRtagId="& nSourceRtagId
426
    End If
427
 
428
    rsQry.Close
429
    Set rsQry = Nothing
430
End Sub
431
'--------------------------------------------------------------------------------------------------------------------------
432
Sub GetDiffStateIcon( nDiffState, outIcon )
433
 
434
    Select Case nDiffState
435
        Case "U"
436
            outIcon  = LIMG_UPDATED
437
        Case "UW"
6196 dpurdie 438
            outIcon  = LIMG_OUTDATED
5357 dpurdie 439
        Case "A"
440
            outIcon = LIMG_ADDED
441
        Case "R"
442
            outIcon = LIMG_REMOVED
443
        Case "UR"
444
            outIcon = LIMG_RIPPLED
6196 dpurdie 445
        Case "B"
446
            outIcon = LIMG_UNCHANGED
5357 dpurdie 447
        Case Else
448
            outIcon = ""
449
    End Select
450
 
451
End Sub
452
'--------------------------------------------------------------------------------------------------------------------------
453
Function Get_Record_Count ( SSsql )
454
    Dim rsTemp
455
    Set rsTemp = OraDatabase.DbCreateDynaset( "SELECT COUNT(*) as record_count FROM "& SSsql , cint(0))
456
 
457
    If (NOT rsTemp.BOF) AND (NOT rsTemp.EOF) Then
458
        Get_Record_Count = rsTemp("record_count")
459
    Else
460
        Get_Record_Count = 0
461
    End If
462
    rsTemp.Close
463
    Set rsTemp = nothing
464
End Function
465
'--------------------------------------------------------------------------------------------------------------------------
466
Sub MergePackages ()
467
    Dim aFullList, aAddPkgList, aRemovePkgList, dAddPkgList, dRemovePkgList, PvId
468
    Dim OraParameter
469
    Dim rc
470
 
471
    Set dAddPkgList = CreateObject("Scripting.Dictionary")
472
    Set dRemovePkgList = CreateObject("Scripting.Dictionary")
473
 
474
    '--- Get Add Packages ---
475
    ' Get full list of "addpkg" parameter
476
    aFullList = Split ( Replace( Request("addpkg"), " ", "" ), "," )
477
 
478
    ' Clean empty parameters
479
    For Each PvId In aFullList
480
        If PvId <> "" Then
481
            dAddPkgList.Add CStr( PvId ), Empty
482
        End If
483
    Next
484
 
485
    aFullList = NULL
486
    aAddPkgList = dAddPkgList.Keys
487
 
488
    '--- Get Remove Packages ---
489
    ' Get full list of "removepkg" parameter
490
    aFullList = Split ( Replace( Request("removepkg"), " ", "" ), "," )
491
 
492
    ' Clean empty parameters
493
    For Each PvId In aFullList
494
        If PvId <> "" Then
495
            dRemovePkgList.Add CStr( PvId ), Empty
496
        End If
497
    Next
498
 
499
    aFullList = NULL
500
    aRemovePkgList = dRemovePkgList.Keys
501
 
502
    '-- Add package List to release --
503
    OraDatabase.Parameters.Add "PV_ID",     NULL, ORAPARM_INPUT, ORATYPE_NUMBER
504
    OraDatabase.Parameters.Add "VIEW_ID",  NULL, ORAPARM_BOTH, ORATYPE_NUMBER
505
    OraDatabase.Parameters.Add "RTAG_A",    Request("rtagA"), ORAPARM_INPUT, ORATYPE_NUMBER
506
    OraDatabase.Parameters.Add "RTAG_B",    Request("rtagB"), ORAPARM_INPUT, ORATYPE_NUMBER
507
    OraDatabase.Parameters.Add "PROJB",     objRelCollectorB.Item("proj_id"), ORAPARM_INPUT, ORATYPE_NUMBER
508
    OraDatabase.Parameters.Add "COMMENTS", "Merging from "& objRelCollectorA.Item("location") &" to "& objRelCollectorB.Item("location"), ORAPARM_INPUT, ORATYPE_VARCHAR2
509
    OraDatabase.Parameters.Add "USER_ID",  objAccessControl.UserId, ORAPARM_INPUT, ORATYPE_NUMBER
510
    OraDatabase.Parameters.Add "OPERATION",NULL, ORAPARM_INPUT, ORATYPE_CHAR
511
 
512
    Set OraParameter = OraDatabase.Parameters
513
 
514
 
515
    On Error Resume Next
516
 
517
 
518
    ' Begin Database entry
519
    objEH.TryORA ( OraSession )
520
 
521
    '-- Add Packages --
522
    OraParameter("OPERATION").Value = "A"
523
    For Each PvId In aAddPkgList
524
        OraParameter("PV_ID").Value = PvId
525
        ' DEVI-45275, Merge into Planned (pending) table instead of release_content table.
526
        If Err.Number = 0 Then
527
            OraDatabase.ExecuteSQL _
528
            "BEGIN  "&_
529
            "  :VIEW_ID := PK_RELEASE.GET_PACKAGE_VIEW ( :PV_ID, :RTAG_A ); "&_
530
            "  PK_PLANNED.MERGE_PACKAGE ( :PV_ID, :VIEW_ID, :RTAG_B, :USER_ID, :OPERATION );  "&_
531
            "END;"
532
        End If
533
    Next
534
 
535
    '-- Remove Packages --
536
    If Err.Number = 0 Then
537
        OraParameter("OPERATION").Value = "S"
538
        For Each PvId In aRemovePkgList
539
            OraParameter("PV_ID").Value = PvId
540
 
541
            If Err.Number = 0 Then
542
                ' Does this PV_ID exist in the destination release's planned table?
543
                rc = Get_Record_Count ("PLANNED pl WHERE pl.pv_id = " & PvId & " AND pl.rtag_id = " & Request("rtagB") )
544
                If  rc > 0 Then
545
                    ' Given that merging now merges into pending, the merge page may be used to remove items that have
6189 dpurdie 546
                    ' previously been merged but have not yet been committed to the destination release.
5357 dpurdie 547
                    OraDatabase.ExecuteSQL _
6189 dpurdie 548
                   "BEGIN "&_
549
                   " PK_ENVIRONMENT.MAKE_REJECT ( :PV_ID, :RTAG_B, :USER_ID ); "&_
550
                   "END; "
5357 dpurdie 551
                Else
552
                    ' DEVI-45275, Merge into Planned (pending) table instead of release_content table.
553
                    OraDatabase.ExecuteSQL _
554
                    "BEGIN  "&_
555
                    "  :VIEW_ID := PK_RELEASE.GET_PACKAGE_VIEW ( :PV_ID, :RTAG_B ); "&_
556
                    "  PK_PLANNED.MERGE_PACKAGE ( :PV_ID, :VIEW_ID, :RTAG_B, :USER_ID, :OPERATION );  "&_
557
                    "END;"
558
                End If
559
            End If
560
        Next
561
 
562
        '-- Log Project Merge Action
563
        If Err.Number = 0 Then
564
            OraDatabase.ExecuteSQL _
565
            "BEGIN  LOG_PROJECT_ACTION ( :PROJB, 'merge_release', :USER_ID, :COMMENTS, :RTAG_B );  END;"
566
        End If
567
 
568
    End If
569
 
570
    objEH.CatchORA ( OraSession )     ' sets up LastOraFailed as appropriate
571
 
572
    ' NOTE, The Touch_Release stored procedure does a commit itself, so we should not do it unless all the ExecuteSQL's we
573
    ' have just performed, were successful
574
    If objEH.LastOraFailed = FALSE Then
575
        '-- Force package state recalculate
576
        objEH.TryORA ( OraSession )
577
        OraDatabase.ExecuteSQL _
578
            "BEGIN  "&_
579
            "  TOUCH_RELEASE ( :RTAG_B );  "&_
580
            "END;"
581
        objEH.CatchORA ( OraSession )
582
    End If
583
 
584
    Set OraParameter = Nothing
585
    OraDatabase.Parameters.Remove "PV_ID"
586
    OraDatabase.Parameters.Remove "VIEW_ID"
587
    OraDatabase.Parameters.Remove "RTAG_A"
588
    OraDatabase.Parameters.Remove "RTAG_B"
589
    OraDatabase.Parameters.Remove "USER_ID"
590
    OraDatabase.Parameters.Remove "PROJB"
591
    OraDatabase.Parameters.Remove "COMMENTS"
592
    OraDatabase.Parameters.Remove "OPERATION"
593
    'Response.write "<br>"& sAddPkgList &"-"& dAddPkgList.Count &"-"& UBound( aFullList )
594
End Sub
595
'--------------------------------------------------------------------------------------------------------------------------
596
Function AddTrailingZeros(byval n, byval count)
597
    if len(n) >= count then
598
        AddTrailingZeros = n
599
        exit function
600
    end if
601
 
602
    dim c, s, i
603
    c = count - len(n)
604
 
605
    for i = 1 to c
606
        s = s & "0"
607
    next
608
    s = cstr(n) & s
609
 
610
    AddTrailingZeros = s
611
End function
612
'--------------------------------------------------------------------------------------------------------------------------
613
'------------ RUN BEFORE PAGE RENDER ----------
614
If Request("btn") = "Exit" Then
615
    Call OpenInWindow ( "index.asp" )
616
End If
617
 
618
' Get release details
619
Call GetFormDetails ( parRtagA, objRelCollectorA )
620
Call GetFormDetails ( parRtagB, objRelCollectorB )
621
setActiveProject (objRelCollectorB.Item("proj_id"))
622
isMergable = releaseIsMergable(objRelCollectorB.Item("official"))
623
 
624
If (Request("btn") = "Merge") AND isMergable Then
625
    Call MergePackages ()
626
End If
627
 
628
If Request("btn") = "Swap Compare" Then
629
    Call OpenInWindow ( ScriptName &"?rtagA="& parRtagB &"&rtagB="& parRtagA )
630
End If
631
 
6191 dpurdie 632
If Request("btn") = "Refresh" Then
5357 dpurdie 633
    ' Store filter in cookie
634
    Response.Cookies(enum_RELMGR_COOKIE_DOMAIN)(COOKIE_HIDE_DIFF_FILTER) = Request("difilter")
635
End If
636
 
637
Call GetDiffFilterValues ( dDiffFilter )
638
'----------------------------------------------
639
%>
640
<html>
641
<head>
642
<title>Release Manager</title>
643
<link rel="shortcut icon" href="<%=FavIcon%>"/>
644
<meta HTTP-EQUIV="Pragma" CONTENT="no-cache">
645
<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1">
6579 dpurdie 646
<link rel="stylesheet" href="images/release_manager_style.css?ver=<%=VixVerNum%>" type="text/css">
647
<link rel="stylesheet" href="images/navigation.css?ver=<%=VixVerNum%>" type="text/css">
648
<script language="JavaScript" src="images/common.js?ver=<%=VixVerNum%>"></script>
649
<script language="JavaScript" src="scripts/remote_scripting.js?ver=<%=VixVerNum%>"></script>
6070 dpurdie 650
<!--#include file="_menu_def.asp"-->
6579 dpurdie 651
<script language="JavaScript1.2" src="images/popup_menu.js?ver=<%=VixVerNum%>"></script>
5357 dpurdie 652
<!-- TIPS -->
6579 dpurdie 653
<script language="JavaScript" src="images/tipster.js?ver=<%=VixVerNum%>"></script>
654
<script language="JavaScript" src="images/_help_tips.js?ver=<%=VixVerNum%>"></script>
5357 dpurdie 655
<script language="JavaScript" type="text/javascript">
656
<!--
657
 
658
function RequestReleaseCombo( paramString, rowId )
659
{
660
    var requestURL = 'RequestReleaseCombo.asp';
661
 
662
    // Set ajax divname
663
    ajaxdivname = rowId;
664
 
665
    //Append the name to search for to the requestURL
666
    var url = requestURL + paramString;
667
 
668
    //Progress
669
    //alert(MM_findObj( rowId ));
670
 
671
    //MM_findObj( rowId ).options[0] = new Option('Loading...','');
672
    //MM_findObj( rowId ).selectedIndex = 0;
673
    rowId.options[0] = new Option('Loading...','');
674
    rowId.selectedIndex = 0;
675
 
676
 
677
    //Create the xmlHttp object to use in the request
678
    //stateChangeHandler will fire when the state has changed, i.e. data is received back
679
    // This is non-blocking (asynchronous)
680
    xmlHttp = GetXmlHttpObject(stateComboChangeHandler);
681
 
682
    //Send the xmlHttp get to the specified url
683
    xmlHttp_Get(xmlHttp, url);
684
}
685
 
5725 dpurdie 686
function SetDisplay(name, mode)
687
{
6191 dpurdie 688
    var o;
689
    if (o = MM_findObj(name))
690
    {
691
        o.style.display = mode;
692
    }
5725 dpurdie 693
}
5357 dpurdie 694
 
695
function MergePackage ( pkga, pkgb, rowId )
696
{
697
    // Set merge hidden field with new value
698
    MM_findObj( 'ADDPKG_' + rowId ).value = pkga;
6070 dpurdie 699
    MM_findObj( 'ADDPKG_' + rowId ).removeAttribute("disabled");
5357 dpurdie 700
 
701
    var divA = MM_findObj( 'PVA' + rowId );
702
    var divB = MM_findObj( 'PVB' + rowId );
703
 
704
    // Set text equal
705
    divB.innerHTML = divA.innerHTML;
706
 
707
    // Set highlight to blank
708
    divA.style.backgroundColor = '<%=LCOLOR_NOT_CHANGED%>';
709
    divB.style.backgroundColor = '<%=LCOLOR_NOT_CHANGED%>';
710
 
711
     // Set Change state icon to blank
5725 dpurdie 712
    SetDisplay( 'IMGSTATE' + rowId, 'none');
5357 dpurdie 713
 
714
    // Remove Merge Button
5725 dpurdie 715
    SetDisplay( 'IMGMERGE' + rowId, 'none');
716
    SetDisplay( 'IMGREMOVE' + rowId, 'none');
5357 dpurdie 717
 
718
    // Show undo button
5725 dpurdie 719
    SetDisplay( 'IMGUNDO' + rowId, 'block');
5357 dpurdie 720
}
721
 
722
 
723
function RemovePackage ( pkga, pkgb, rowId )
724
{
725
    // Set remove hidden field with new value
726
    MM_findObj( 'REMOVEPKG_' + rowId ).value = pkgb;
6070 dpurdie 727
    MM_findObj( 'REMOVEPKG_' + rowId ).removeAttribute("disabled");
5357 dpurdie 728
 
729
    var divA = MM_findObj( 'PVA' + rowId );
730
    var divB = MM_findObj( 'PVB' + rowId );
731
 
732
    // Set text equal
733
    divB.style.textDecoration = 'line-through';
734
 
735
    // Set highlight to blank
6070 dpurdie 736
    if (GetChangeType(rowId) != "A")
5357 dpurdie 737
    {
738
        divA.style.backgroundColor = '<%=LCOLOR_NOT_CHANGED%>';
739
    }
740
    divB.style.backgroundColor = '<%=LCOLOR_NOT_CHANGED%>';
741
 
742
     // Set Change state icon to blank
5725 dpurdie 743
    SetDisplay( 'IMGSTATE' + rowId , 'none');
5357 dpurdie 744
 
745
    // Remove Merge Button
5725 dpurdie 746
    SetDisplay( 'IMGMERGE' + rowId , 'none');
747
    SetDisplay( 'IMGREMOVE' + rowId , 'none');
5357 dpurdie 748
 
749
    // Show undo button
5725 dpurdie 750
    SetDisplay( 'IMGUNDO' + rowId ,'block');
5357 dpurdie 751
}
752
 
6070 dpurdie 753
function GetChangeType(rowId)
754
{
755
    var cht = MM_findObj( 'IMGSTATE' + rowId );
756
    var chd = '?';
757
    if (cht) {
758
       chd = cht.getAttribute('data_ct');
759
    }
760
    return chd;
761
}
5357 dpurdie 762
 
763
function UndoPackage ( rowId )
764
{
765
    // Set merge/remove hidden field with new value
766
    MM_findObj( 'ADDPKG_' + rowId ).value = '';
6070 dpurdie 767
    MM_findObj( 'ADDPKG_' + rowId ).setAttribute("disabled", "disabled" );
5357 dpurdie 768
    MM_findObj( 'REMOVEPKG_' + rowId ).value = '';
6070 dpurdie 769
    MM_findObj( 'REMOVEPKG_' + rowId ).setAttribute("disabled", "disabled" );
5357 dpurdie 770
 
771
    var divA = MM_findObj( 'PVA' + rowId );
772
    var divB = MM_findObj( 'PVB' + rowId );
773
 
774
    // Set text equal
6190 dpurdie 775
    //divB.innerHTML = divB.getAttribute('data_pkg');
5357 dpurdie 776
    divB.style.textDecoration = 'none';
777
 
778
    // Set highlight to blank
6070 dpurdie 779
    divA.style.backgroundColor = divA.getAttribute('data_color');
780
    divB.style.backgroundColor = divB.getAttribute('data_color');
5357 dpurdie 781
 
782
     // Set Change state icon to blank
5725 dpurdie 783
    SetDisplay( 'IMGSTATE' + rowId, 'block');
5357 dpurdie 784
 
785
    // Remove Merge Button
6070 dpurdie 786
    var chd = GetChangeType(rowId);
787
    if (chd == "R")
5357 dpurdie 788
    {
5725 dpurdie 789
        SetDisplay( 'IMGMERGE' + rowId, 'block');
5357 dpurdie 790
    }
6070 dpurdie 791
    else if ( (chd == "A") || (chd == "") )
5357 dpurdie 792
    {
5725 dpurdie 793
        SetDisplay( 'IMGREMOVE' + rowId, 'block');
5357 dpurdie 794
    }
795
    else
796
    {
5725 dpurdie 797
        SetDisplay( 'IMGMERGE' + rowId, 'block');
798
        SetDisplay( 'IMGREMOVE' + rowId,'block');
5357 dpurdie 799
    }
800
 
801
    // Show undo button
5725 dpurdie 802
    SetDisplay( 'IMGUNDO' + rowId, 'none');
5357 dpurdie 803
}
804
 
805
 
806
function MergeAll()
807
{
808
    var elem
809
 
810
    if (document.all)
811
    {
812
        // Run this for IE
813
        elem = document.all;
814
    } else {
815
        // Run this for other browsers
816
        elem = document.getElementsByTagName('div');
817
    }
818
 
819
    for (i in elem)
820
    {
821
        if (elem[i].id)
822
        {
823
            if (elem[i].id.indexOf('SHORT_') == 0) elem[i].style.display = 'none';
824
            if (elem[i].id.indexOf('LONG_') == 0) elem[i].style.display = 'block';
825
        }
826
    }
827
}
6196 dpurdie 828
 
829
//  An object to contain the filter data
830
var filter;
831
 
832
// Flip the current state of each Filter check boxes
833
function initFilter() {
834
    filter = new Object();
835
    filter.btn = document.getElementById("difilterBtn");
836
    filter.x = document.getElementsByName("difilter");
837
    filter.len = filter.x.length;
838
 
839
    saveFilterState();
840
    filter.oValues = filter.Values.slice(0);
841
    setFilterTitle();
842
}
843
 
844
function toggleFilters()
845
{
846
    switch ( filter.State )
847
    {
848
    case 'Flip':
849
        for (var i = 0; i < filter.len; i++) {
850
            filter.x[i].checked = !filter.x[i].checked;
851
        }
852
        filter.State = 'On';
853
        break;
854
 
855
    case 'On':
856
        for (var i = 0; i < filter.len; i++) {
857
            filter.x[i].checked = true;
858
        }
859
        filter.State = 'Off';
860
        break;
861
 
862
    case 'Off':
863
        for (var i = 0; i < filter.len; i++) {
864
            filter.x[i].checked = false;
865
        }
866
        filter.State = 'Restore';
867
        break;
868
 
869
    case 'Restore':
870
        for (var i = 0; i < filter.len; i++) {
871
            filter.x[i].checked = filter.Values[i];
872
        }
873
        filter.State = 'Reset';
874
        break;
875
 
876
    default:
877
        for (var i = 0; i < filter.len; i++) {
878
            filter.x[i].checked = filter.oValues[i];
879
        }
880
        filter.State = 'Flip';
881
        break;
882
    }
883
 
884
    setFilterTitle();
885
    EnableRefresh();
886
}
887
 
888
// Enable the "Refresh" button - when filter is changed
889
function EnableRefresh(state)
890
{
891
    if ( filter.btn ) {
892
        // Check if shown values match the initial values
893
        var btnState = true;
894
        for (var i = 1; i < filter.len; i++) {
895
            console.log ( filter.x[i].checked,filter.oValues[i],  filter.x[i].checked != filter.oValues[i] )
896
            if ( filter.x[i].checked != filter.oValues[i] ) {
897
                btnState = false;
898
                break;
899
            }
900
        }
901
        filter.btn.disabled = btnState; 
902
    }
903
}
904
// One of the filter buttons has been clicked
905
//  First one is special (and we don't want to know about its click)
906
function filterClicked(e)
907
{
908
    if ( ! e.target.id ) {
909
        saveFilterState();
910
        setFilterTitle();
911
        EnableRefresh();
912
    }
913
}
914
 
915
function saveFilterState()
916
{
917
    filter.State = 'Flip';
918
    filter.Title = filter.x[0];
919
    filter.Values = new Array(filter.len);
920
    for (var i = 0; i < filter.len; i++) {
921
        filter.Values[i] = filter.x[i].checked;
922
    }
923
}
924
 
925
function setFilterTitle()
926
{
927
    filter.Title.checked = false;
928
    filter.Title.title = "Toggle filters: Flip, On, Off, Restore, Reset - " + filter.State;
929
}
930
 
5357 dpurdie 931
//-->
932
</script>
6191 dpurdie 933
<style>
934
#filterTable td { background-color:#E4E9EC }
935
}
936
</style>
5357 dpurdie 937
</head>
6070 dpurdie 938
<!-- HEADER -->
939
<!--#include file="_header.asp"-->
6240 dpurdie 940
<form name="FormName" method="post" action="<%=ScriptName%>">
5357 dpurdie 941
    <!-- BODY ---->
942
    <table width="100%" border="0" cellspacing="0" cellpadding="0">
943
        <tr>
944
            <td width="20%">
945
            <td width="60%">
946
            <td width="20%">
947
        </tr>
948
        <tr>
6876 dpurdie 949
            <td class='bg_panel'>
5357 dpurdie 950
                <!-- SELECT RELEASE A ---------------------------------------------->
951
                <br>
952
                <table width="100%"  border="0" cellspacing="10" cellpadding="0">
953
                    <tr>
954
                        <td align="left" class="body_col"><img src="images/i_rtag_open_mode.gif" border="0" align="absmiddle" width="15" height="13">&nbsp;Select Release A<hr size="1px" color="Olive" noshade></td>
955
                    </tr>
956
                    <tr>
957
                        <td align="left">
958
                            <select name="projA" class="form_item" onChange="RequestReleaseCombo( '?proj_id='+ this.value, FormName.rtagA );">
959
                                <option value="">-- Select Project --</option>
960
                                <%
961
                                OraDatabase.Parameters.Add "PROJ_ID",     objRelCollectorA.Item("proj_id"),    ORAPARM_INPUT, ORATYPE_NUMBER
962
 
963
                                Set rsQry = OraDatabase.DbCreateDynaset( GetQuery("ProjectsCombo.sql"), cint(0))
964
 
965
                                OraDatabase.Parameters.Remove "PROJ_ID"
966
 
967
                                While ((NOT rsQry.BOF) AND (NOT rsQry.EOF))%>
968
                                    <option value="<%=rsQry("proj_id")%>" <%=rsQry("selected")%>><%=rsQry("proj_name")%></option>
969
                                    <%rsQry.MoveNext
970
                                WEnd
971
 
972
                                rsQry.Close
973
                                Set rsQry = Nothing
974
                                %>
975
                            </select>
976
                        </td>
977
                    </tr>
978
                    <tr>
979
                        <td align="left">
980
                            <select name="rtagA" id="rtagA" class="form_item">
981
                                <%
982
                                OraDatabase.Parameters.Add "PROJ_ID",     objRelCollectorA.Item("proj_id"),    ORAPARM_INPUT,  ORATYPE_NUMBER
983
                                OraDatabase.Parameters.Add "RTAG_ID",     objRelCollectorA.Item("rtag_id"),    ORAPARM_INPUT, ORATYPE_NUMBER
984
 
985
                                Set rsQry = OraDatabase.DbCreateDynaset( GetQuery("ReleasesCombo.sql"), cint(0))
986
 
987
                                OraDatabase.Parameters.Remove "PROJ_ID"
988
                                OraDatabase.Parameters.Remove "RTAG_ID"
989
 
990
                                While ((NOT rsQry.BOF) AND (NOT rsQry.EOF))%>
991
                                        <option value="<%=rsQry("rtag_id")%>" <%=rsQry("selected")%>><%=rsQry("rtag_name")%></option>
992
                                    <%rsQry.MoveNext
993
                                WEnd
994
 
995
                                rsQry.Close
996
                                Set rsQry = Nothing
997
                                %>
998
                            </select>
999
                        </td>
1000
                    </tr>
1001
                    <%If (parRtagA <> "") Then%>
1002
                        <tr>
1003
                            <td align="left"><a href="dependencies.asp?rtag_id=<%=parRtagA%>" class="body_txt_drk">Go To Release A &raquo;</a></td>
1004
                        </tr>
1005
                    <%End If%>
6191 dpurdie 1006
                                            <tr class="body_txt">
1007
                                                <td>
1008
                                                    <%If (parRtagA <> "") AND (parRtagB <> "")Then%>
1009
                                                        <!-- DIFF FILTER +++++++++++++++++++++++++++++++++++++++++++ -->
6196 dpurdie 1010
                                                        <p>&nbsp;
1011
                                                        <fieldset style="width:200px;" onclick="filterClicked(event);">
6191 dpurdie 1012
                                                            <legend class="body_txt"><%=GetIsDiffFilterInUseIcon() %>&nbsp;Filter&nbsp;Results...</legend>
1013
                                                            <table width="100%"  border="0" cellspacing="2" cellpadding="0" id=filterTable class="body_txt">
1014
                                                                <tr >
6196 dpurdie 1015
                                                                    <td><input id="filterFipper" name="difilter" type="checkbox" onclick="toggleFilters();"></td>
1016
                                                                    <td colspan=1>Hide the marked change types.</td>
6191 dpurdie 1017
                                                                </tr>
1018
                                                                <tr>
1019
                                                                    <td width="1"><input name="difilter" type="checkbox" value="<%=enumDB_NUM_DIFF_UPDATED%>" <%=GetIsDiffFilterChecked(enumDB_NUM_DIFF_UPDATED)%>></td>
1020
                                                                    <td width="50" nowrap class="form_field"><%=LIMG_UPDATED%>Updated</td>
1021
                                                                </tr>
1022
                                                                <tr>
1023
                                                                    <td><input type="checkbox" name="difilter" value="<%=enumDB_NUM_DIFF_WARN%>" <%=GetIsDiffFilterChecked(enumDB_NUM_DIFF_WARN)%>></td>
6196 dpurdie 1024
                                                                    <td nowrap class="form_field"><%=LIMG_OUTDATED%>Updated with Warning</td>
6191 dpurdie 1025
                                                                </tr>
1026
                                                                <tr>
1027
                                                                    <td><input type="checkbox" name="difilter" value="<%=enumDB_NUM_DIFF_NEW%>" <%=GetIsDiffFilterChecked(enumDB_NUM_DIFF_NEW)%>></td>
1028
                                                                    <td nowrap class="form_field"><%=LIMG_ADDED%>Added</td>
1029
                                                                </tr>
1030
                                                                <tr>
1031
                                                                    <td><input type="checkbox" name="difilter" value="<%=enumDB_NUM_DIFF_REMOVED%>" <%=GetIsDiffFilterChecked(enumDB_NUM_DIFF_REMOVED)%>></td>
1032
                                                                    <td nowrap class="form_field"><%=LIMG_REMOVED%>Removed</td>
1033
                                                                </tr>
1034
                                                                <tr>
1035
                                                                    <td><input type="checkbox" name="difilter" value="<%=enumDB_NUM_DIFF_RIPPLE%>" <%=GetIsDiffFilterChecked(enumDB_NUM_DIFF_RIPPLE)%>></td>
1036
                                                                    <td nowrap class="form_field"><%=LIMG_RIPPLED%>Rippled</td>
1037
                                                                </tr>
1038
                                                                <tr>
1039
                                                                    <td><input type="checkbox" name="difilter" value="<%=enumDB_NUM_DIFF_NO_CHANGE%>" <%=GetIsDiffFilterChecked(enumDB_NUM_DIFF_NO_CHANGE)%>></td>
6196 dpurdie 1040
                                                                    <td nowrap class="form_field"><%=LIMG_UNCHANGED%>Unchanged</td>
6191 dpurdie 1041
                                                                </tr>
1042
                                                                <tr>
1043
                                                                    <td><input type="checkbox" name="difilter" value="<%=enumDB_NUM_DIFF_PENDING%>" <%=GetIsDiffFilterChecked(enumDB_NUM_DIFF_PENDING)%>></td>
6196 dpurdie 1044
                                                                    <td nowrap class="form_field"><%=LIMG_PENDING%>Pending</td>
6191 dpurdie 1045
                                                                </tr>
1046
                                                                <tr>
1047
                                                                    <td>&nbsp;</td>
6196 dpurdie 1048
                                                                    <td width="100%">
1049
                                                                        <input id=difilterBtn name="btn" type="submit" class="form_btn" value="Refresh" disabled="true">
1050
                                                                    </td>
6191 dpurdie 1051
                                                                </tr>
1052
                                                            </table>
6196 dpurdie 1053
                                                            <img src onerror='initFilter();'>
6191 dpurdie 1054
                                                        </fieldset>
1055
                                                        <!-- +++++++++++++++++++++++++++++++++++++++++++++++++++++++ -->
1056
                                                    <%End If%>
1057
                                                </td>
1058
                                                <td></td>
1059
                                            </tr>
1060
 
5357 dpurdie 1061
                </table>
1062
 
1063
                <!-- SELECT RELEASE A END ---------------------------------------------->
1064
            </td>
1065
 
1066
            <td rowspan="2" valign="top" background="images/bg_lght_gray.gif" align="center">
1067
                <!-- DIFF -------------------------------------------------------->
1068
                <br>
1069
                <table width="100%" border="0" cellspacing="10" cellpadding="0">
1070
                    <tr>
1071
                        <td>
1072
                            <table width="100%" border="0" cellspacing="0" cellpadding="0">
1073
                                <tr>
1074
                                    <td width="1%"></td>
1075
                                    <td width="100%" align="left" class="form_ttl">DIFF / MERGE RELEASE
1076
                                        <%If genReport Then%>
1077
                                        &nbsp;[Generating Report]
1078
                                        <%End If%>
1079
                                        </td>
1080
                                    <td width="1%"></td>
1081
                                </tr>
1082
                                <tr>
1083
                                    <td align="left" valign="top" background="images/lbox_bg_blue.gif"><img src="images/lbox_tl_cnr_b.gif" width="13" height="13"></td>
1084
                                    <td background="images/lbox_bg_blue.gif" align="left" class="wform_ttl">&nbsp;</td>
1085
                                    <td align="right" valign="top" background="images/lbox_bg_blue.gif"><img src="images/lbox_tr_cnr_b.gif" width="13" height="13"></td>
1086
                                </tr>
1087
                                <tr>
1088
                                    <td width="1%" bgcolor="#FFFFFF"><img src="images/h_trsp_dot.gif" width="10" height="100"></td>
1089
                                    <td bgcolor="#FFFFFF" valign="top" class="form_item">
1090
                                        <table width="100%"  border="0" cellspacing="0" cellpadding="5">
1091
                                            <tr>
1092
                                                <td width="100%" bgcolor="#DAD7C8">
1093
                                                    <input type="submit" name="btn" value="Compare" class="form_btn_comp" style="margin-right:5px;">
1094
                                                    <input type="submit" name="btn" value="Swap Compare" class="form_btn_comp">
1095
                                                    <span class="body_txt">
1096
                                                        <input name="btn" type="submit" class="form_btn" value="Mail Me Report">
6197 dpurdie 1097
                                                        <%'<input name="btn" type="submit" class="form_btn" value="Show Me Report">%>
5357 dpurdie 1098
                                                    </span>
1099
                                                </td>
1100
                                                <td width="1" align="right" bgcolor="#DAD7C8" nowrap>
1101
                                                    <table width="100%"  border="0" cellspacing="0" cellpadding="0">
1102
                                                        <tr>
5684 dpurdie 1103
                                                            <%
1104
                                                                Dim mergeMessage, mergeDisabled
1105
                                                                mergeDisabled = " disabled"
1106
                                                                If (parRtagA = "") Then
1107
                                                                    mergeMessage = "Select Release A"
6191 dpurdie 1108
                                                                ElseIf (parRtagB = "") Then
5684 dpurdie 1109
                                                                    mergeMessage = "Select Release B"
6191 dpurdie 1110
                                                                ElseIf NOT isMergable Then
5684 dpurdie 1111
                                                                    mergeMessage = "Release B cannot be modified"
1112
                                                                Else
1113
                                                                    mergeDisabled = ""
1114
                                                                End If
1115
                                                            %>
1116
                                                            <td class="err_alert nowrap" style="padding-right:1em">
1117
                                                                <%=mergeMessage%>
1118
                                                            </td>
5357 dpurdie 1119
                                                            <td>
5684 dpurdie 1120
                                                                <input type="submit" name="btn" value="Merge" class="form_btn_comp" style="margin-right:10px;" <%=mergeDisabled%>>
5357 dpurdie 1121
                                                            </td>
1122
                                                            <td>
1123
                                                                <input type="submit" name="btn" value="Exit" class="form_btn_comp">
1124
                                                            </td>
1125
                                                        </tr>
1126
                                                    </table>
1127
                                                </td>
1128
                                            </tr>
1129
                                        </table>
1130
 
1131
                                        <%
1132
                                        ' Successfull Merge
1133
                                        If (Request("btn") = "Merge") Then
1134
                                            Call Messenger ( "Merge has completed successfully.", 3, "100%" )
1135
                                        End If
1136
 
6197 dpurdie 1137
                                        If genReport Then
1138
                                            Set FSO=Server.CreateObject("Scripting.FileSystemObject")
1139
                                            Set NewTextFile=FSO.CreateTextFile(reportPath, true)
5357 dpurdie 1140
 
6197 dpurdie 1141
                                            Call Header()
1142
                                        End If
5357 dpurdie 1143
 
1144
                                        If (parRtagA <> "") AND (parRtagB <> "")Then%>
1145
                                            <table width="100%"  border="0" cellspacing="1" cellpadding="0">
1146
                                                <tr>
1147
                                                    <td width="50%" bgcolor="#E4E9EC" class="body_row" nowrap><%= ReleaseIcon(objRelCollectorA.Item("official")) & objRelCollectorA.Item("location")%> </td>
1148
                                                    <td width="1" bgcolor="#E4E9EC"><img src="images/spacer.gif" width="20" height="1"></td>
1149
                                                    <td width="1" bgcolor="#E4E9EC"><img src="images/spacer.gif" width="20" height="20"></td>
1150
                                                    <td width="1" bgcolor="#E4E9EC"><img src="images/spacer.gif" width="20" height="1"></td>
1151
                                                    <td width="50%" bgcolor="#E4E9EC" class="body_row" nowrap><%= ReleaseIcon(objRelCollectorB.Item("official")) & objRelCollectorB.Item("location")%></td>
1152
                                                    <td width="1" bgcolor="#E4E9EC"><img src="images/spacer.gif" width="20" height="1"></td>
1153
                                                </tr>
1154
                                                <%
1155
                                                OraDatabase.Parameters.Add "RTAG_A",     parRtagA,    ORAPARM_INPUT, ORATYPE_NUMBER
1156
                                                OraDatabase.Parameters.Add "RTAG_B",     parRtagB,    ORAPARM_INPUT, ORATYPE_NUMBER
6189 dpurdie 1157
                                                OraDatabase.Parameters.Add "NO_CHANGE",  GetIsDiffFilterChecked(enumDB_NUM_DIFF_NO_CHANGE), ORAPARM_INPUT, ORATYPE_VARCHAR2
1158
                                                OraDatabase.Parameters.Add "ADDED",      GetIsDiffFilterChecked(enumDB_NUM_DIFF_NEW),       ORAPARM_INPUT, ORATYPE_VARCHAR2
6190 dpurdie 1159
                                                OraDatabase.Parameters.Add "UPDATED",    NULL,                                              ORAPARM_INPUT, ORATYPE_VARCHAR2
6189 dpurdie 1160
                                                OraDatabase.Parameters.Add "REMOVED",    GetIsDiffFilterChecked(enumDB_NUM_DIFF_REMOVED),   ORAPARM_INPUT, ORATYPE_VARCHAR2
5357 dpurdie 1161
 
1162
                                                Set rsQry = OraDatabase.DbCreateDynaset( GetQuery("ReleaseDiff.sql"), cint(0))
1163
 
1164
                                                OraDatabase.Parameters.Remove "RTAG_A"
1165
                                                OraDatabase.Parameters.Remove "RTAG_B"
1166
                                                OraDatabase.Parameters.Remove "NO_CHANGE"
1167
                                                OraDatabase.Parameters.Remove "ADDED"
1168
                                                OraDatabase.Parameters.Remove "UPDATED"
1169
                                                OraDatabase.Parameters.Remove "REMOVED"
1170
 
1171
                                                Set rsQryA = OraDatabase.DbCreateDynaset( "SELECT RT.RTAG_NAME, PRJ.PROJ_NAME FROM RELEASE_TAGS RT, PROJECTS PRJ WHERE RTAG_ID="& parRtagA &" AND RT.PROJ_ID=PRJ.PROJ_ID", cint(0))
1172
                                                Set rsQryB = OraDatabase.DbCreateDynaset( "SELECT RT.RTAG_NAME, PRJ.PROJ_NAME FROM RELEASE_TAGS RT, PROJECTS PRJ WHERE RTAG_ID="& parRtagB &" AND RT.PROJ_ID=PRJ.PROJ_ID", cint(0))
1173
 
6197 dpurdie 1174
                                                If genReport Then
1175
                                                    Call Javascript()
1176
                                                    Call Styles()
5357 dpurdie 1177
 
6197 dpurdie 1178
                                                    NewTextFile.WriteLine("<title>Difference Report Between "&rsQryA("proj_name")&" "&rsQryA("rtag_name")&" and "&rsQryB("proj_name")&" "&rsQryB("rtag_name")&"</title>")
1179
                                                    NewTextFile.WriteLine("<div class=""page_title"">Difference Report Between "&rsQryA("proj_name")&" "&rsQryA("rtag_name")&" and "&rsQryB("proj_name")&" "&rsQryB("rtag_name")&"</div><br>")
1180
                                                    NewTextFile.WriteLine("<b>Key:</b><br><blockquote>")
1181
                                                    NewTextFile.WriteLine("<span class=changesa><b>SOURCE CODE CHANGES</b></span><span class=texta> Indicates Changes to a Package in "& rsQryA("rtag_name") &".</span><br>")
1182
                                                    NewTextFile.WriteLine("<span class=changesb><b>SOURCE CODE CHANGES</b></span><span class=textb> Indicates Changes to a Package in "& rsQryB("rtag_name") &".</span><br>")
1183
                                                    NewTextFile.WriteLine("<span class=changesnone><b>Grey Text</b></span><span class=textnone> No Source Code Changes to a Package in either Release.</span>")
1184
                                                    NewTextFile.WriteLine("</blockquote>")
5357 dpurdie 1185
 
6197 dpurdie 1186
                                                    NewTextFile.WriteLine("<b>Toggle Sections:</b><blockquote>")
6827 dpurdie 1187
                                                    NewTextFile.WriteLine("<span class=pointer onClick=""MM_toggleAll('divPkgInfo','1');"">Expand All</span>")
1188
                                                    NewTextFile.WriteLine("<span class=pointer onClick=""MM_toggleAll('divPkgInfo','');"">Collapse All</span>")
6197 dpurdie 1189
                                                    NewTextFile.WriteLine("</blockquote>")
1190
                                                End If
5357 dpurdie 1191
 
1192
                                                Dim currView_id
1193
                                                currView_id = -1
1194
 
1195
                                                While ((NOT rsQry.BOF) AND (NOT rsQry.EOF))
1196
                                                    errormsg = false
1197
                                                    rowId = rsQry("pv_id_a") &"_"& rsQry("pv_id_b")
1198
 
1199
                                                    btnMerge = LIMG_MERGE
1200
                                                    btnRemove = LIMG_REMOVE
1201
 
1202
                                                    changeType = rsQry("change_type")
1203
                                                    isaSdk = rsQry("PKG_SDK_B")
1204
 
1205
                                                    If changeType = "U" OR changeType = "UW" OR changeType = "UR" Then
1206
                                                        Dim MajorA, MajorB, MinorA, MinorB, PatchA, PatchB, BuildA, BuildB, pos, pkgVersionA, pkgVersionB, majMinA, majMinB
1207
                                                        MajorA = NULL
1208
                                                        MajorB = NULL
1209
                                                        MinorA = NULL
1210
                                                        MinorB = NULL
1211
 
1212
                                                        pkgVersionA = rsQry("pkg_version_a")
1213
                                                        pkgVersionB = rsQry("pkg_version_b")
1214
 
1215
                                                        PatchA = rsQry("patch_number_a")
1216
                                                        PatchB = rsQry("patch_number_b")
1217
                                                        BuildA = rsQry("build_number_a")
1218
                                                        BuildB = rsQry("build_number_b")
1219
 
1220
 
1221
                                                        ' Find the first occurence of the dot in package version A
1222
                                                        pos = InStr(pkgVersionA, ".")
1223
                                                        If pos <> 0 Then
1224
                                                            ' Extract the Major Version for A
1225
                                                            MajorA = Mid(pkgVersionA, 1, pos - 1)
1226
                                                            ' Delete the Major Version Value from the string to get the minor and patch version
1227
                                                            pkgVersionA = Mid(pkgVersionA, pos + 1, Len(pkgVersionA))
1228
                                                            ' Find the second occurence of the dot in package version A
1229
                                                            pos = InStr(pkgVersionA, ".")
1230
                                                            ' Extract the Minor Version for A
1231
                                                            If pos <> 0 Then
1232
                                                                MinorA = Mid(pkgVersionA, 1, pos - 1)
1233
                                                            End If
1234
                                                        End If
1235
 
1236
                                                        ' Find the first occurence of the dot in package version B
1237
                                                        pos = InStr(pkgVersionB, ".")
1238
                                                        If pos <> 0 Then
1239
                                                            ' Extract the Major Version for B
1240
                                                            MajorB = Mid(pkgVersionB, 1, pos - 1)
1241
                                                            ' Delete the Major Version Value from the string to get the minor and patch version
1242
                                                            pkgVersionB = Mid(pkgVersionB, pos + 1, Len(pkgVersionB))
1243
                                                            ' Find the second occurence of the dot in package version B
1244
                                                            pos = InStr(pkgVersionB, ".")
1245
                                                            ' Extract the Minor Version for B
1246
                                                            If pos <> 0 Then
1247
                                                                MinorB = Mid(pkgVersionB, 1, pos - 1)
1248
                                                            End If
1249
                                                        End If
1250
 
1251
                                                        If MajorA = MajorB Then
1252
                                                            If MinorA = MinorB Then
1253
                                                                If IsNumeric(PatchA) AND IsNumeric(PatchB) Then
1254
                                                                    If CInt(PatchB) > CInt(PatchA) Then
1255
                                                                        btnMerge = LIMG_MERGE_WARN
1256
                                                                    Else
1257
                                                                        btnMerge = LIMG_MERGE
1258
                                                                    End If
1259
                                                                End If
1260
                                                            Else
1261
                                                                If IsNumeric(MinorA) AND IsNumeric(MinorB) Then
1262
                                                                    If CInt(MinorB) > CInt(MinorA) Then
1263
                                                                        btnMerge = LIMG_MERGE_WARN
1264
                                                                    Else
1265
                                                                        btnMerge = LIMG_MERGE
1266
                                                                    End If
1267
                                                                End If
1268
                                                            End If
1269
                                                        Else
1270
                                                            If IsNumeric(MajorA) AND IsNumeric(MajorB) Then
1271
                                                                If     CInt(MajorB) > CInt(MajorA) Then
1272
                                                                    btnMerge = LIMG_MERGE_WARN
1273
                                                                Else
1274
                                                                    btnMerge = LIMG_MERGE
1275
                                                                End If
1276
                                                            End If
1277
                                                        End If
6191 dpurdie 1278
 
1279
                                                        If btnMerge = LIMG_MERGE_WARN Then
1280
                                                            changeType = "UW"
1281
                                                        End If
5357 dpurdie 1282
                                                    End If
1283
 
6190 dpurdie 1284
                                                    ' -------- END GROUP ------------------------
1285
                                                    %>
1286
                                                    <%
1287
                                                    'Determine if we are dealing with a PV_ID that we have already encountered and displayed as a pending addition
1288
                                                    'If we are, we do not need to display anything more about it, so skip the row.
1289
                                                    ' NOTE. the result set is sorted by change type (see releasediff.sql) such that if there are multiple entries
1290
                                                    '         for the same PV_ID, they are sorted in the following order: pending, unchanged, additions, removals, updates.
1291
                                                    '         This is important to the row skip filtering carried out below.
1292
                                                    Dim skipRow
1293
                                                    If rsQry("pv_id_a") Then
1294
                                                        skipRow = pkgSeen.Exists(CStr(rsQry("pv_id_a")))
1295
                                                        pkgSeen.Item(CStr(rsQry("pv_id_a"))) = 1
1296
                                                    Else
1297
                                                        skipRow = FALSE
1298
                                                    End If
5357 dpurdie 1299
 
6190 dpurdie 1300
                                                    If GetIsDiffFilterChecked(enumDB_NUM_DIFF_PENDING) <> "" Then
1301
                                                        If changeType = "APS" OR changeType = "APA" Then
1302
                                                            skipRow = TRUE
5357 dpurdie 1303
                                                        End If
6190 dpurdie 1304
                                                    End If
1305
 
1306
                                                    If GetIsDiffFilterChecked(enumDB_NUM_DIFF_UPDATED) <> "" Then
1307
                                                        If changeType = "U" Then
1308
                                                            skipRow = TRUE
5357 dpurdie 1309
                                                        End If
6190 dpurdie 1310
                                                    End If
6189 dpurdie 1311
 
6190 dpurdie 1312
                                                    If GetIsDiffFilterChecked(enumDB_NUM_DIFF_WARN) <> "" Then
1313
                                                        If changeType = "UW" Then
1314
                                                            skipRow = TRUE
6189 dpurdie 1315
                                                        End If
6190 dpurdie 1316
                                                    End If
6189 dpurdie 1317
 
6190 dpurdie 1318
                                                    If GetIsDiffFilterChecked(enumDB_NUM_DIFF_RIPPLE) <> "" Then
1319
                                                        If changeType = "UR" Then
1320
                                                            skipRow = TRUE
1321
                                                        End If
1322
                                                    End If
5357 dpurdie 1323
 
6190 dpurdie 1324
                                                    If NOT skipRow Then
6196 dpurdie 1325
                                                        Call GetDiffStateIcon ( changeType, ChangeTypeIcon )
1326
 
1327
                                                    colorA = LCOLOR_NOT_CHANGED
1328
                                                    colorB = LCOLOR_NOT_CHANGED
1329
                                                    Select Case changeType
1330
                                                        Case "U"
1331
                                                            colorA = LCOLOR_CHANGED
1332
                                                            colorB = LCOLOR_CHANGED
1333
                                                        Case "UW"
1334
                                                            colorA = LCOLOR_OUTDATED
1335
                                                            colorB = LCOLOR_OUTDATED
1336
                                                            btnMerge = LIMG_MERGE_WARN
1337
                                                        Case "UR"
1338
                                                            colorA = LCOLOR_RIPPLED
1339
                                                            colorB = LCOLOR_RIPPLED
1340
                                                        Case "A"
1341
                                                            colorA = LCOLOR_BLANK
1342
                                                        Case "R"
1343
                                                            colorB = LCOLOR_BLANK
1344
                                                    End Select
1345
 
1346
 
6190 dpurdie 1347
                                                    ' -------- GROUP BY BASE VIEW  -----------------
1348
                                                    If CDbl(currView_id) <> CDbl(rsQry("view_id")) Then
1349
                                                    %>
1350
                                                        <tr>
1351
                                                            <td valign="top" nowrap class="form_ttl"><b><%=rsQry("view_name")%></b></td>
1352
                                                            <td class="form_ttl">&nbsp;</td>
1353
                                                            <td class="form_ttl">&nbsp;</td>
1354
                                                            <td class="form_ttl">&nbsp;</td>
1355
                                                            <td class="form_ttl">&nbsp;</td>
1356
                                                            <td class="form_ttl">&nbsp;</td>
1357
                                                        </tr>
1358
                                                    <%
1359
                                                        currView_id = CDbl(rsQry("view_id"))
1360
                                                    End If
1361
                                                    %>
1362
                                                        <tr>
1363
                                                            <td class="body_row" nowrap>
1364
                                                                <DIV id="PVA<%=rowId%>" style="background:<%=colorA%>; padding:5px;" data_color="<%=colorA%>">
1365
                                                                    <%=rsQry("pkg_name_a") &" "& rsQry("pkg_version_a")%>
1366
                                                                </DIV>
1367
                                                            </td>
5357 dpurdie 1368
 
6190 dpurdie 1369
                                                            <%
1370
                                                            Dim pkgADisplayControl
1371
                                                            pkgADisplayControl = isMergable
1372
                                                            If IsNull( changeType ) OR (changeType = "A")  OR (changeType = "B") OR (changeType = "APA")  OR (changeType = "APS")  Then pkgADisplayControl = FALSE
1373
                                                            If isaSdk Then pkgADisplayControl = FALSE
1374
                                                            %>
1375
                                                            <td bgcolor="#F5F5F5">
1376
                                                                <%If pkgADisplayControl Then%>
6827 dpurdie 1377
                                                                    <DIV id="IMGMERGE<%=rowId%>" class=pointer onClick="MergePackage( '<%=rsQry("pv_id_a")%>', '<%=rsQry("pv_id_b")%>', '<%=rowId%>' );"><%=btnMerge%></DIV>
6190 dpurdie 1378
                                                                <%End If%>
1379
                                                            </td>
5357 dpurdie 1380
 
6190 dpurdie 1381
                                                            <td bgcolor="#E4E9EC">
1382
                                                                <DIV id="IMGSTATE<%=rowId%>" DATA_CT="<%=changeType%>"><%=ChangeTypeIcon%></DIV>
1383
                                                            </td>
5357 dpurdie 1384
 
6190 dpurdie 1385
                                                            <%
1386
                                                            Dim pkgBDisplayControl
1387
                                                            pkgBDisplayControl = isMergable
1388
                                                            If changeType = "R" Then pkgBDisplayControl = FALSE
1389
                                                            If isaSdk Then pkgBDisplayControl = FALSE
1390
                                                            %>
1391
                                                            <td bgcolor="#F5F5F5">
1392
                                                                <%If pkgBDisplayControl Then%>
6827 dpurdie 1393
                                                                    <DIV id="IMGREMOVE<%=rowId%>" class=pointer onClick="RemovePackage( '<%=rsQry("pv_id_a")%>', '<%=rsQry("pv_id_b")%>', '<%=rowId%>' );"><%=btnRemove%></DIV>
6191 dpurdie 1394
                                                                <%ElseIf isaSdk Then %>
6190 dpurdie 1395
                                                                    <DIV ><%=LIMG_SDK%></DIV>
1396
                                                                <%End If%>
1397
                                                            </td>
5357 dpurdie 1398
 
6190 dpurdie 1399
                                                            <td class="body_row" nowrap>
6191 dpurdie 1400
                                                                <DIV id="PVB<%=rowId%>"
1401
                                                                     style="background:<%=colorB%>; padding:5px;"
6190 dpurdie 1402
                                                                     data_color="<%=colorB%>"
1403
                                                                     data_pkg="<%=rsQry("pkg_name_b") &" "& rsQry("pkg_version_b")%>"
1404
                                                                     >
1405
                                                                    <%=rsQry("pkg_name_b") &" "& rsQry("pkg_version_b")%>
1406
                                                                    <%If ChangeType = "APS" Then%>
1407
                                                                            (removal pending<%=Quick_Help("RemovalPending")%>)
1408
                                                                    <%ElseIf ChangeType = "APA" Then%>
1409
                                                                            (addition pending<%=Quick_Help("AdditionPending")%>)
1410
                                                                    <%End If %>
1411
                                                                </DIV>
1412
                                                                <input type="hidden" disabled="disabled" name="addpkg" id="ADDPKG_<%=rowId%>" value="">
1413
                                                                <input type="hidden" disabled="disabled" name="removepkg" id="REMOVEPKG_<%=rowId%>" value="">
1414
                                                            </td>
5357 dpurdie 1415
 
6190 dpurdie 1416
                                                            <td bgcolor="#F5F5F5">
6827 dpurdie 1417
                                                                <DIV id="IMGUNDO<%=rowId%>" style="display:none;" class=pointer onClick="UndoPackage( '<%=rowId%>' );"><%=LIMG_UNDO%></DIV>
6190 dpurdie 1418
                                                            </td>
1419
                                                        </tr>
1420
                                                    <%End If %>
5357 dpurdie 1421
 
6190 dpurdie 1422
                                                    <%
1423
                                                    If genReport AND NOT skipRow  Then
1424
                                                        If rsQry("pv_id_a") Then
1425
                                                            Set rsQryCommentsA = OraDatabase.DbCreateDynaset( "SELECT COMMENTS FROM PACKAGE_VERSIONS WHERE PV_ID="& rsQry("pv_id_a"), cint(0))
1426
                                                        End If
5357 dpurdie 1427
 
6190 dpurdie 1428
                                                        If rsQry("pv_id_b") Then
1429
                                                            Set rsQryCommentsB = OraDatabase.DbCreateDynaset( "SELECT COMMENTS FROM PACKAGE_VERSIONS WHERE PV_ID="& rsQry("pv_id_b"), cint(0))
1430
                                                        End If
5357 dpurdie 1431
 
6190 dpurdie 1432
                                                        pkgA = rsQry("pkg_name_a")
1433
                                                        pkgB = rsQry("pkg_name_b")
5357 dpurdie 1434
 
6190 dpurdie 1435
                                                        If pkgA <> "" then
1436
                                                            pkgname = pkgA
1437
                                                        Else
1438
                                                            pkgname = pkgB
1439
                                                        End If
5357 dpurdie 1440
 
6190 dpurdie 1441
                                                        If changeType = "U" OR  changeType = "UW" Then
1442
                                                            ChangeASource = false
1443
                                                            ChangeAUpdate = false
1444
                                                            ChangeBSource = false
1445
                                                            ChangeBUpdate = false
5357 dpurdie 1446
 
6197 dpurdie 1447
                                                            If genReport Then
1448
                                                                'NewTextFile.WriteLine("<br><b><font face="&chr(34)&"arial"&chr(34)&">"&pkgname&"</font></b>")
6827 dpurdie 1449
                                                                NewTextFile.Write("<span class=""body_scol pointer"" onClick=""toggleSPAN('"& rowId &"');"">"& pkgname &"</span>")
6197 dpurdie 1450
                                                                NewTextFile.WriteLine("<DIV class=divPkgInfo id=""spanPkgInfo"& rowId &""" name=""spanPkgInfo"" style=""display:none;"">")
1451
                                                                NewTextFile.Write(rsQryA("rtag_name")&" uses: "&rsQry("pkg_version_a")&" (")
1452
                                                                Call Release(rsQry("pv_id_a"))
1453
                                                                NewTextFile.WriteLine(")<br>")
1454
                                                                NewTextFile.Write(rsQryB("rtag_name")&" uses: "&rsQry("pkg_version_b")&" (")
1455
                                                                Call Release(rsQry("pv_id_b"))
1456
                                                                NewTextFile.WriteLine(")<br>")
5357 dpurdie 1457
 
6197 dpurdie 1458
                                                                a = rsQry("pv_id_a")
1459
                                                                b = rsQry("pv_id_b")
1460
                                                                c = rsQry("pv_id_a")
1461
                                                                d = rsQry("pv_id_b")
5357 dpurdie 1462
 
6197 dpurdie 1463
                                                                Set pvCollectionA = CreateObject("Scripting.Dictionary")
1464
                                                                Set pvCollectionB = CreateObject("Scripting.Dictionary")
1465
                                                                On Error Resume Next
1466
                                                                While CLng(a) <> CLng(b) and NOT errormsg
5357 dpurdie 1467
 
6197 dpurdie 1468
                                                                    'NewTextFile.WriteLine("A: "&a)
1469
                                                                    'NewTextFile.WriteLine("B: "&b)
1470
                                                                    pvCollectionA.Add CStr(a), Empty
1471
                                                                    pvCollectionB.Add CStr(b), Empty
1472
                                                                    If CLng(a) > CLng(b) Then
1473
                                                                        'NewTextFile.WriteLine("TestA")
1474
                                                                        Call LastPvIdA(a)
1475
                                                                    ElseIf CLng(b) > CLng(a) Then
1476
                                                                        'NewTextFile.WriteLine("TestB")
1477
                                                                        Call LastPvIdB(b)
1478
                                                                    End If
1479
                                                                Wend
5357 dpurdie 1480
 
6197 dpurdie 1481
                                                                Set pvCollectionA = Nothing
1482
                                                                Set pvCollectionB = Nothing
5357 dpurdie 1483
 
6197 dpurdie 1484
                                                                Call pkg_Version(a)
1485
                                                                NewTextFile.Write("Common PARENT package version: "&pkgversion&" (")
1486
                                                                Call Release(a)
1487
                                                                NewTextFile.WriteLine(")<br><br>")
1488
                                                                NewTextFile.WriteLine()
1489
                                                                NewTextFile.WriteLine("<b>"&rsQryA("rtag_name")&"</b>")
5357 dpurdie 1490
 
6197 dpurdie 1491
                                                                If pkgversion <> rsQry("pkg_version_a") Then
1492
                                                                    NewTextFile.WriteLine("<blockquote><b><i>Versions between "& pkgversion &" and "& rsQry("pkg_version_a")&"</i></b></blockquote>")
5357 dpurdie 1493
 
6197 dpurdie 1494
                                                                    If errormsg Then
1495
                                                                        NewTextFile.WriteLine("Error determining root!<br>")
1496
                                                                        NewTextFile.WriteLine()
1497
                                                                    End If
5357 dpurdie 1498
 
6197 dpurdie 1499
                                                                    source_change = false
5357 dpurdie 1500
 
6197 dpurdie 1501
                                                                    While CLng(a) <> CLng(c) and NOT errormsg
1502
                                                                        Call Comments(c)
1503
                                                                        If scFlag = TRUE Then
1504
                                                                            Call GetFixedIssues(c)
1505
                                                                        End If
1506
                                                                        Call LastPvIdAa(c)
1507
                                                                        NewTextFile.WriteLine()
1508
                                                                    Wend
1509
 
1510
                                                                    If source_change = false Then
1511
                                                                        NewTextFile.WriteLine("<blockquote><b><i>No source changes to "& rsQryA("rtag_name")&". Only Rippled Builds.</i></b></blockquote><br>")
1512
                                                                        ChangeASource = true
5357 dpurdie 1513
                                                                    End If
6197 dpurdie 1514
 
1515
                                                                    Call pkg_Version(b)
5357 dpurdie 1516
                                                                    NewTextFile.WriteLine()
6197 dpurdie 1517
                                                                    NewTextFile.WriteLine()
5357 dpurdie 1518
 
6197 dpurdie 1519
                                                                ElseIf pkgversion = rsQry("pkg_version_a") Then
1520
                                                                    NewTextFile.WriteLine("<blockquote><b><i>No updates to "& rsQryA("rtag_name")&"</i></b></blockquote><br>")
1521
                                                                    ChangeAUpdate = true
1522
                                                                    NewTextFile.WriteLine()
5357 dpurdie 1523
                                                                End If
1524
 
6197 dpurdie 1525
                                                                NewTextFile.WriteLine("<b>"&rsQryB("rtag_name")&"</b>")
5357 dpurdie 1526
 
6197 dpurdie 1527
                                                                If pkgversion <> rsQry("pkg_version_b") Then
1528
                                                                    NewTextFile.WriteLine("<blockquote><b><i>Versions between "& pkgversion &" and "& rsQry("pkg_version_b")&"</i></b></blockquote>")
5357 dpurdie 1529
 
6197 dpurdie 1530
                                                                    If errormsg Then
1531
                                                                        NewTextFile.WriteLine("Error determining root!<br>")
1532
                                                                        NewTextFile.WriteLine()
1533
                                                                    End If
5357 dpurdie 1534
 
6197 dpurdie 1535
                                                                    source_change = false
5357 dpurdie 1536
 
6197 dpurdie 1537
                                                                    While CLng(b) <> CLng(d) and NOT errormsg
1538
                                                                        Call Comments(d)
1539
                                                                        If scFlag = TRUE Then
1540
                                                                            Call GetFixedIssues(d)
1541
                                                                        End If
1542
                                                                        Call LastPvIdBb(d)
1543
                                                                        NewTextFile.WriteLine()
1544
                                                                    Wend
1545
 
1546
                                                                    If source_change = false Then
1547
                                                                        NewTextFIle.WriteLine("<blockquote><b><i>No source changes to "& rsQryB("rtag_name")&". Only Rippled Builds.</i></b></blockquote><br>")
1548
                                                                        ChangeBSource = true
1549
                                                                    End If
1550
 
1551
                                                                ElseIf pkgversion = rsQry("pkg_version_b") Then
1552
                                                                    NewTextFile.WriteLine("<blockquote><b><i>No updates to "& rsQryB("rtag_name")&"</i></b></blockquote><br>")
1553
                                                                    ChangeBUpdate = true
6190 dpurdie 1554
                                                                    NewTextFile.WriteLine()
1555
                                                                End If
5357 dpurdie 1556
 
6197 dpurdie 1557
                                                                NewTextFile.WriteLine("</DIV>")
6190 dpurdie 1558
 
6197 dpurdie 1559
                                                                If ChangeASource Then
1560
                                                                    If ChangeBSource Then
1561
                                                                        NewTextFile.WriteLine("<blockquote><table width=""100%"" border=""0"">  <tr><td width=""50%""><b>"& Ucase(rsQryA("rtag_name")) &": .</b class=changesnone> Ripple Builds Only.</td><td width=""50%""><b>"& Ucase(rsQryB("rtag_name")) &": </b class=changesnone> Ripple Builds Only.</td>  </tr></table></blockquote>")
1562
                                                                    ElseIf ChangeBUpdate Then
1563
                                                                        NewTextFile.WriteLine("<blockquote><table width=""100%"" border=""0"">  <tr><td width=""50%""><b>"& Ucase(rsQryA("rtag_name")) &": </b><span class=changesnone>Ripple Builds Only.</span></td><td width=""50%""><b>"& Ucase(rsQryB("rtag_name")) &": </b><span class=changesnone> No Updates.</span></td>  </tr></table></blockquote>")
1564
                                                                    ElseIf NOT ChangeBSource AND NOT ChangeBUpdate Then
1565
                                                                        NewTextFile.WriteLine("<blockquote><table width=""100%"" border=""0""><tr><td width=""50%""><b>"& Ucase(rsQryA("rtag_name")) &":</b> <span class=changesnone>Ripple Builds Only.</span></td>    <td width=""50%"">    <b>"& Ucase(rsQryB("rtag_name")) &":</b> <b class=changesb> SOURCE CODE CHANGES.</b></td></tr></table></blockquote>")
5357 dpurdie 1566
                                                                    End If
1567
                                                                End If
1568
 
6190 dpurdie 1569
                                                                If ChangeBSource Then
6197 dpurdie 1570
                                                                    If NOT ChangeAUpdate Then
1571
                                                                        If NOT ChangeASource AND NOT ChangeBUpdate Then
1572
                                                                            NewTextFile.WriteLine("<blockquote><table width=""100%"" border=""0"">  <tr><td width=""50%""><b>"& Ucase(rsQryA("rtag_name")) &": </b><b class=changesa> SOURCE CODE CHANGES</b>.</td>    <td width=""50%""> <b>"& Ucase(rsQryB("rtag_name")) &":</b> <span class=changesnone> Ripple Builds Only.</span></td>  </tr></table></blockquote>")
1573
                                                                        End If
5357 dpurdie 1574
                                                                    End If
1575
                                                                End If
1576
 
6197 dpurdie 1577
                                                                If NOT ChangeASource Then
1578
                                                                    If NOT ChangeAUpdate Then
1579
                                                                        If NOT ChangeBSource AND NOT ChangeBUpdate Then
1580
                                                                            NewTextFile.WriteLine("<blockquote><table width=""100%"" border=""0"">  <tr><td width=""50%""><b>"& Ucase(rsQryA("rtag_name")) &":</b> <b class=changesa> SOURCE CODE CHANGES.</b></td><td width=""50%""><b>"& Ucase(rsQryB("rtag_name")) &":</b><b class=changesb> SOURCE CODE CHANGES.</b></td></tr></table></blockquote>")
1581
                                                                        ElseIf ChangeBUpdate Then
1582
                                                                            NewTextFile.WriteLine("<blockquote><table width=""100%"" border=""0"">  <tr><td width=""50%""><b>"& Ucase(rsQryA("rtag_name")) &":</b> <b class=changesa> SOURCE CODE CHANGES.</b></td> <td width=""50%""><b>"& Ucase(rsQryB("rtag_name")) &":</b><span class=changesnone> No Updates.</span></td>  </tr></table></blockquote>")
1583
                                                                        End If
1584
                                                                    ElseIf ChangeAUpdate Then
1585
                                                                        If NOT ChangeBSource AND NOT ChangeBUpdate Then
1586
                                                                            NewTextFile.WriteLine("<blockquote><table width=""100%"" border=""0"">  <tr><td width=""50%""><b>"& Ucase(rsQryA("rtag_name")) &":</b> <span class=changesnone>No Updates.</span></td> <td width=""50%"">  <b></font>"& Ucase(rsQryB("rtag_name")) &":</b><b class=changesb> SOURCE CODE CHANGES.</b></td></tr></table></blockquote>")
1587
                                                                        ElseIf ChangeBSource Then
1588
                                                                            NewTextFile.WriteLine("<blockquote><table width=""100%"" border=""0"">  <tr><td width=""50%""><b>"& Ucase(rsQryA("rtag_name")) &":</b> <span class=changesnone>No Updates.</span></td> <td width=""50%""> </font><b>"& Ucase(rsQryB("rtag_name")) &":</b> <span class=changesnone> Ripple Builds Only.</span></td>  </tr></table></blockquote>")
1589
                                                                        End If
5357 dpurdie 1590
                                                                    End If
1591
                                                                End If
6190 dpurdie 1592
                                                            End If
5357 dpurdie 1593
 
6190 dpurdie 1594
                                                        End If  'changeType = "U" OR  changeType = "UW"
5357 dpurdie 1595
 
6190 dpurdie 1596
                                                    End If  'email
5357 dpurdie 1597
 
1598
                                                    rsQry.MoveNext
1599
                                                WEnd
1600
 
1601
                                                rsQry.Close
1602
                                                Set rsQry = Nothing
1603
                                                %>
1604
                                                <%
6197 dpurdie 1605
                                                If genReport Then
1606
                                                    Call Footer()
1607
                                                    NewTextFile.Close
1608
                                                    Set NewTextFile=Nothing
1609
                                                End If
5357 dpurdie 1610
                                                %>
1611
                                            </table>
1612
                                            <br>
1613
                                        <%Else%>
1614
                                            <br>
1615
                                            <%
1616
                                            If (parRtagB <> "") Then
1617
                                                Call Messenger ( "Select <b>Release A</b> to compare.", 3, "100%" )
1618
                                            ElseIf (parRtagA <> "") Then
1619
                                                Call Messenger ( "Select <b>Release B</b> to compare.", 3, "100%" )
1620
                                            Else
1621
                                                Call Messenger ( "Select <b>Release A</b> and <b>Release B</b> to compare.", 3, "100%" )
1622
                                            End If
1623
                                            %>
1624
                                        <%End If%>
1625
                                    </td>
1626
                                    <td width="1%" background="images/lbox_bgside_white.gif">&nbsp;</td>
1627
                                </tr>
1628
                                <tr>
1629
                                    <td width="1%" background="images/lbox_bg_blue.gif" valign="bottom"><img src="images/lbox_bl_cnr_b.gif" width="13" height="13"></td>
1630
                                    <td background="images/lbox_bg_blue.gif"></td>
1631
                                    <td width="1%" background="images/lbox_bg_blue.gif" valign="bottom" align="right"><img src="images/lbox_br_cnr_b.gif" width="13" height="13"></td>
1632
                                </tr>
1633
                            </table>
1634
                        </td>
1635
                    </tr>
1636
                </table>
1637
                <!-- DIFF END ---------------------------------------------------->
1638
            </td>
6876 dpurdie 1639
            <td class='bg_panel'>
5357 dpurdie 1640
 
1641
                <!-- SELECT RELEASE B ---------------------------------------------->
1642
                <br>
1643
                <table width="100%"  border="0" cellspacing="10" cellpadding="0">
1644
                    <tr>
1645
                        <td align="left" class="body_col">
1646
                            <img src="images/i_rtag_open_mode.gif" border="0" align="absmiddle" width="15" height="13">&nbsp;Select Release B<hr size="1px" color="Olive" noshade>
1647
                        </td>
1648
                    </tr>
1649
                    <tr>
1650
                        <td align="left">
1651
                            <select name="projB" class="form_item" onChange="RequestReleaseCombo( '?proj_id='+ this.value, FormName.rtagB );">
1652
                                <option value="">-- Select Project --</option>
1653
                                <%
1654
                                OraDatabase.Parameters.Add "PROJ_ID",     objRelCollectorB.Item("proj_id"),    ORAPARM_INPUT, ORATYPE_NUMBER
1655
 
1656
                                Set rsQry = OraDatabase.DbCreateDynaset( GetQuery("ProjectsCombo.sql"), cint(0))
1657
 
1658
                                OraDatabase.Parameters.Remove "PROJ_ID"
1659
 
1660
                                While ((NOT rsQry.BOF) AND (NOT rsQry.EOF))%>
1661
                                    <option value="<%=rsQry("proj_id")%>" <%=rsQry("selected")%>><%=rsQry("proj_name")%></option>
1662
                                    <%rsQry.MoveNext
1663
                                WEnd
1664
 
1665
                                rsQry.Close
1666
                                Set rsQry = Nothing
1667
                                %>
1668
                            </select>
1669
                        </td>
1670
                    </tr>
1671
                    <tr>
1672
                        <td align="left">
1673
                            <select name="rtagB" id="rtagB" class="form_item">
1674
                                <%
1675
                                OraDatabase.Parameters.Add "PROJ_ID",     objRelCollectorB.Item("proj_id"),    ORAPARM_INPUT,  ORATYPE_NUMBER
1676
                                OraDatabase.Parameters.Add "RTAG_ID",     objRelCollectorB.Item("rtag_id"),    ORAPARM_INPUT, ORATYPE_NUMBER
1677
 
1678
                                Set rsQry = OraDatabase.DbCreateDynaset( GetQuery("ReleasesCombo.sql"), cint(0))
1679
 
1680
                                OraDatabase.Parameters.Remove "PROJ_ID"
1681
                                OraDatabase.Parameters.Remove "RTAG_ID"
1682
 
1683
                                While ((NOT rsQry.BOF) AND (NOT rsQry.EOF))%>
1684
                                        <option value="<%=rsQry("rtag_id")%>" <%=rsQry("selected")%>><%=rsQry("rtag_name")%></option>
1685
                                    <%rsQry.MoveNext
1686
                                WEnd
1687
 
1688
                                rsQry.Close
1689
                                Set rsQry = Nothing
1690
                                %>
1691
                            </select>
1692
                        </td>
1693
                    </tr>
1694
                    <%If (parRtagB <> "") Then%>
1695
                        <tr>
1696
                            <td align="left"><a href="dependencies.asp?rtag_id=<%=parRtagB%>" class="body_txt_drk">Go To Release B &raquo;</a></td>
1697
                        </tr>
1698
                    <%End If%>
1699
                </table>
1700
                <!-- SELECT RELEASE B END ---------------------------------------------->
1701
            </td>
1702
        </tr>
1703
        <tr>
6876 dpurdie 1704
            <td class='bg_panel_btm'>
5357 dpurdie 1705
                <img src="images/img_vtree.gif" width="86" height="99" vspace="20" hspace="30">
1706
            </td>
6876 dpurdie 1707
            <td class='bg_panel_btm'>
5357 dpurdie 1708
                <img src="images/img_vtree.gif" width="86" height="99" vspace="20" hspace="30">
1709
            </td>
1710
      </tr>
1711
    </table>
1712
</form>
1713
<%
1714
If email Then
1715
    Send_Email    "Release Manager Notification",_
1716
                     ADMIN_EMAIL, _
1717
                     objAccessControl.UserEmail,_
1718
                     "Release Comparisons from Release Manager", _
1719
                     "Your requested report...",_
6197 dpurdie 1720
                     reportPath
5357 dpurdie 1721
End If
1722
%>
5957 dpurdie 1723
<!-- FOOTER -->
1724
<!--#include file="_footer.asp"-->
5357 dpurdie 1725
</body>
1726
</html>
6191 dpurdie 1727