xref: /OpenGrok/opengrok-web/src/main/webapp/diff.jsp (revision 0d40e9d0d07acb46ebe450cbc6042a9705a36e41)
1*0d40e9d0SAdam Hornáček<%--
2*0d40e9d0SAdam Hornáček$Id$
3*0d40e9d0SAdam Hornáček
4*0d40e9d0SAdam HornáčekCDDL HEADER START
5*0d40e9d0SAdam Hornáček
6*0d40e9d0SAdam HornáčekThe contents of this file are subject to the terms of the
7*0d40e9d0SAdam HornáčekCommon Development and Distribution License (the "License").
8*0d40e9d0SAdam HornáčekYou may not use this file except in compliance with the License.
9*0d40e9d0SAdam Hornáček
10*0d40e9d0SAdam HornáčekSee LICENSE.txt included in this distribution for the specific
11*0d40e9d0SAdam Hornáčeklanguage governing permissions and limitations under the License.
12*0d40e9d0SAdam Hornáček
13*0d40e9d0SAdam HornáčekWhen distributing Covered Code, include this CDDL HEADER in each
14*0d40e9d0SAdam Hornáčekfile and include the License file at LICENSE.txt.
15*0d40e9d0SAdam HornáčekIf applicable, add the following below this CDDL HEADER, with the
16*0d40e9d0SAdam Hornáčekfields enclosed by brackets "[]" replaced with your own identifying
17*0d40e9d0SAdam Hornáčekinformation: Portions Copyright [yyyy] [name of copyright owner]
18*0d40e9d0SAdam Hornáček
19*0d40e9d0SAdam HornáčekCDDL HEADER END
20*0d40e9d0SAdam Hornáček
21*0d40e9d0SAdam HornáčekCopyright (c) 2006, 2017, Oracle and/or its affiliates. All rights reserved.
22*0d40e9d0SAdam Hornáček
23*0d40e9d0SAdam HornáčekPortions Copyright 2011 Jens Elkner.
24*0d40e9d0SAdam Hornáček--%><%@page errorPage="error.jsp" import="
25*0d40e9d0SAdam Hornáčekjava.io.ByteArrayInputStream,
26*0d40e9d0SAdam Hornáčekjava.io.OutputStream,
27*0d40e9d0SAdam Hornáčekjava.io.BufferedReader,
28*0d40e9d0SAdam Hornáčekjava.io.FileNotFoundException,
29*0d40e9d0SAdam Hornáčekjava.io.InputStream,
30*0d40e9d0SAdam Hornáčekjava.io.InputStreamReader,
31*0d40e9d0SAdam Hornáčekjava.io.UnsupportedEncodingException,
32*0d40e9d0SAdam Hornáčekjava.net.URLDecoder,
33*0d40e9d0SAdam Hornáčekjava.util.ArrayList,
34*0d40e9d0SAdam Hornáček
35*0d40e9d0SAdam Hornáčekorg.apache.commons.jrcs.diff.Chunk,
36*0d40e9d0SAdam Hornáčekorg.apache.commons.jrcs.diff.Delta,
37*0d40e9d0SAdam Hornáčekorg.apache.commons.jrcs.diff.Diff,
38*0d40e9d0SAdam Hornáčekorg.apache.commons.jrcs.diff.Revision,
39*0d40e9d0SAdam Hornáčekorg.opensolaris.opengrok.analysis.AnalyzerGuru,
40*0d40e9d0SAdam Hornáčekorg.opensolaris.opengrok.analysis.FileAnalyzer.Genre,
41*0d40e9d0SAdam Hornáčekorg.opensolaris.opengrok.web.DiffData,
42*0d40e9d0SAdam Hornáčekorg.opensolaris.opengrok.web.DiffType"
43*0d40e9d0SAdam Hornáček%><%!
44*0d40e9d0SAdam Hornáčekprivate String getAnnotateRevision(DiffData data) {
45*0d40e9d0SAdam Hornáček    if (data.type == DiffType.OLD || data.type == DiffType.NEW) {
46*0d40e9d0SAdam Hornáček        String rev = data.rev[data.type == DiffType.NEW ? 1 : 0];
47*0d40e9d0SAdam Hornáček        return "<script type=\"text/javascript\">/* <![CDATA[ */ "
48*0d40e9d0SAdam Hornáček            + "document.rev = function() { return " + Util.htmlize(Util.jsStringLiteral(rev))
49*0d40e9d0SAdam Hornáček            + "; } /* ]]> */</script>";
50*0d40e9d0SAdam Hornáček    }
51*0d40e9d0SAdam Hornáček    return "";
52*0d40e9d0SAdam Hornáček}
53*0d40e9d0SAdam Hornáček%>
54*0d40e9d0SAdam Hornáček<%
55*0d40e9d0SAdam Hornáček{
56*0d40e9d0SAdam Hornáček    PageConfig cfg = PageConfig.get(request);
57*0d40e9d0SAdam Hornáček    cfg.addScript("diff");
58*0d40e9d0SAdam Hornáček    cfg.checkSourceRootExistence();
59*0d40e9d0SAdam Hornáček    /**
60*0d40e9d0SAdam Hornáček     * This block must be the first block before any other output in the
61*0d40e9d0SAdam Hornáček     * response.
62*0d40e9d0SAdam Hornáček     *
63*0d40e9d0SAdam Hornáček     * If there is already any output written into the response and we
64*0d40e9d0SAdam Hornáček     * use the same response and reset the content and the headers then we have
65*0d40e9d0SAdam Hornáček     * a collision with the response streams and the "getOutputStream() has
66*0d40e9d0SAdam Hornáček     * already been called" exception occurs.
67*0d40e9d0SAdam Hornáček     */
68*0d40e9d0SAdam Hornáček    DiffData data = cfg.getDiffData();
69*0d40e9d0SAdam Hornáček    request.setAttribute("diff.jsp-data", data);
70*0d40e9d0SAdam Hornáček    if (data.type == DiffType.TEXT
71*0d40e9d0SAdam Hornáček            && request.getParameter("action") != null
72*0d40e9d0SAdam Hornáček            && request.getParameter("action").equals("download")) {
73*0d40e9d0SAdam Hornáček        try (OutputStream o = response.getOutputStream()) {
74*0d40e9d0SAdam Hornáček            for (int i = 0; i < data.revision.size(); i++) {
75*0d40e9d0SAdam Hornáček                Delta d = data.revision.getDelta(i);
76*0d40e9d0SAdam Hornáček                try (InputStream in = new ByteArrayInputStream(d.toString().getBytes("UTF-8"))) {
77*0d40e9d0SAdam Hornáček                    response.setHeader("content-disposition", "attachment; filename="
78*0d40e9d0SAdam Hornáček                            + cfg.getResourceFile().getName() + "@" + data.rev[0]
79*0d40e9d0SAdam Hornáček                            + "-" + data.rev[1] + ".diff");
80*0d40e9d0SAdam Hornáček                    byte[] buffer = new byte[8192];
81*0d40e9d0SAdam Hornáček                    int nr;
82*0d40e9d0SAdam Hornáček                    while ((nr = in.read(buffer)) > 0) {
83*0d40e9d0SAdam Hornáček                        o.write(buffer, 0, nr);
84*0d40e9d0SAdam Hornáček                    }
85*0d40e9d0SAdam Hornáček                }
86*0d40e9d0SAdam Hornáček            }
87*0d40e9d0SAdam Hornáček            o.flush();
88*0d40e9d0SAdam Hornáček            o.close();
89*0d40e9d0SAdam Hornáček            return;
90*0d40e9d0SAdam Hornáček        }
91*0d40e9d0SAdam Hornáček    }
92*0d40e9d0SAdam Hornáček}
93*0d40e9d0SAdam Hornáček%><%@
94*0d40e9d0SAdam Hornáček
95*0d40e9d0SAdam Hornáčekinclude file="mast.jsp"
96*0d40e9d0SAdam Hornáček
97*0d40e9d0SAdam Hornáček%><%
98*0d40e9d0SAdam Hornáček/* ---------------------- diff.jsp start --------------------- */
99*0d40e9d0SAdam Hornáček{
100*0d40e9d0SAdam Hornáček    PageConfig cfg = PageConfig.get(request);
101*0d40e9d0SAdam Hornáček    DiffData data = (DiffData) request.getAttribute("diff.jsp-data");
102*0d40e9d0SAdam Hornáček
103*0d40e9d0SAdam Hornáček    // the data is never null as the getDiffData always return valid object
104*0d40e9d0SAdam Hornáček    if (data.errorMsg != null)  {
105*0d40e9d0SAdam Hornáček
106*0d40e9d0SAdam Hornáček%>
107*0d40e9d0SAdam Hornáček<div class="src">
108*0d40e9d0SAdam Hornáček    <h3 class="error">Error:</h3>
109*0d40e9d0SAdam Hornáček    <p><%= data.errorMsg %></p>
110*0d40e9d0SAdam Hornáček</div><%
111*0d40e9d0SAdam Hornáček    } else if (data.genre == Genre.IMAGE) {
112*0d40e9d0SAdam Hornáček
113*0d40e9d0SAdam Hornáček        String link = request.getContextPath() + Prefix.DOWNLOAD_P
114*0d40e9d0SAdam Hornáček            + Util.htmlize(cfg.getPath());
115*0d40e9d0SAdam Hornáček%>
116*0d40e9d0SAdam Hornáček<div id="difftable">
117*0d40e9d0SAdam Hornáček    <table class="image">
118*0d40e9d0SAdam Hornáček        <thead>
119*0d40e9d0SAdam Hornáček        <tr><th><%= data.filename %> (revision <%= data.rev[0] %>)</th>
120*0d40e9d0SAdam Hornáček            <th><%= data.filename %> (revision <%= data.rev[1] %>)</th>
121*0d40e9d0SAdam Hornáček        </tr>
122*0d40e9d0SAdam Hornáček        </thead>
123*0d40e9d0SAdam Hornáček        <tbody>
124*0d40e9d0SAdam Hornáček        <tr><td><img src="<%= link %>?r=<%= data.rev[0] %>"/></td>
125*0d40e9d0SAdam Hornáček            <td><img src="<%= link %>?r=<%= data.rev[1] %>"/></td>
126*0d40e9d0SAdam Hornáček        </tr>
127*0d40e9d0SAdam Hornáček        </tbody>
128*0d40e9d0SAdam Hornáček    </table>
129*0d40e9d0SAdam Hornáček</div><%
130*0d40e9d0SAdam Hornáček
131*0d40e9d0SAdam Hornáček    } else if (data.genre != Genre.PLAIN && data.genre != Genre.HTML) {
132*0d40e9d0SAdam Hornáček
133*0d40e9d0SAdam Hornáček        String link = request.getContextPath() + Prefix.DOWNLOAD_P
134*0d40e9d0SAdam Hornáček            + Util.htmlize(cfg.getPath());
135*0d40e9d0SAdam Hornáček%>
136*0d40e9d0SAdam Hornáček<div id="src">Diffs for binary files cannot be displayed! Files are <a
137*0d40e9d0SAdam Hornáček    href="<%= link %>?r=<%= data.rev[0] %>"><%=
138*0d40e9d0SAdam Hornáček        data.filename %>(revision <%= data.rev[0] %>)</a> and <a
139*0d40e9d0SAdam Hornáček    href="<%= link %>?r=<%= data.rev[1] %>"><%=
140*0d40e9d0SAdam Hornáček        data.filename %>(revision <%= data.rev[1] %>)</a>.
141*0d40e9d0SAdam Hornáček</div><%
142*0d40e9d0SAdam Hornáček
143*0d40e9d0SAdam Hornáček    } else if (data.revision.size() == 0) {
144*0d40e9d0SAdam Hornáček        %>
145*0d40e9d0SAdam Hornáček        <%= getAnnotateRevision(data) %>
146*0d40e9d0SAdam Hornáček        <b>No differences found!</b><%
147*0d40e9d0SAdam Hornáček
148*0d40e9d0SAdam Hornáček    } else {
149*0d40e9d0SAdam Hornáček        //-------- Do THE DIFFS ------------
150*0d40e9d0SAdam Hornáček        int ln1 = 0;
151*0d40e9d0SAdam Hornáček        int ln2 = 0;
152*0d40e9d0SAdam Hornáček        String rp1 = data.param[0];
153*0d40e9d0SAdam Hornáček        String rp2 = data.param[1];
154*0d40e9d0SAdam Hornáček        String reqURI = request.getRequestURI();
155*0d40e9d0SAdam Hornáček        String[] file1 = data.file[0];
156*0d40e9d0SAdam Hornáček        String[] file2 = data.file[1];
157*0d40e9d0SAdam Hornáček
158*0d40e9d0SAdam Hornáček        DiffType type = data.type;
159*0d40e9d0SAdam Hornáček        boolean full = data.full;
160*0d40e9d0SAdam Hornáček%>
161*0d40e9d0SAdam Hornáček<%= getAnnotateRevision(data) %>
162*0d40e9d0SAdam Hornáček<div id="diffbar">
163*0d40e9d0SAdam Hornáček    <div class="legend">
164*0d40e9d0SAdam Hornáček        <span class="d">Deleted</span>
165*0d40e9d0SAdam Hornáček        <span class="a">Added</span>
166*0d40e9d0SAdam Hornáček    </div>
167*0d40e9d0SAdam Hornáček    <div class="tabs"><%
168*0d40e9d0SAdam Hornáček        for (DiffType t : DiffType.values()) {
169*0d40e9d0SAdam Hornáček            if (type == t) {
170*0d40e9d0SAdam Hornáček        %> <span class="active"><%= t.toString() %><%
171*0d40e9d0SAdam Hornáček                if (t == DiffType.OLD) {
172*0d40e9d0SAdam Hornáček            %>  ( <%= data.rev[0] %> )<%
173*0d40e9d0SAdam Hornáček                } else if (t == DiffType.NEW) {
174*0d40e9d0SAdam Hornáček            %>  ( <%= data.rev[1] %> )<%
175*0d40e9d0SAdam Hornáček                }
176*0d40e9d0SAdam Hornáček            %></span><%
177*0d40e9d0SAdam Hornáček            } else {
178*0d40e9d0SAdam Hornáček        %> <span><a href="<%= reqURI %>?r1=<%= rp1 %>&amp;r2=<%= rp2
179*0d40e9d0SAdam Hornáček            %>&amp;format=<%= t.getAbbrev() %>&amp;full=<%= full ? '1' : '0'
180*0d40e9d0SAdam Hornáček            %>"><%= t.toString() %><%
181*0d40e9d0SAdam Hornáček                if (t == DiffType.OLD) {
182*0d40e9d0SAdam Hornáček            %>  ( <%= data.rev[0] %> )<%
183*0d40e9d0SAdam Hornáček                } else if (t == DiffType.NEW) {
184*0d40e9d0SAdam Hornáček            %>  ( <%= data.rev[1] %> )<%
185*0d40e9d0SAdam Hornáček                }
186*0d40e9d0SAdam Hornáček            %></a></span><%
187*0d40e9d0SAdam Hornáček            }
188*0d40e9d0SAdam Hornáček        }
189*0d40e9d0SAdam Hornáček    %></div>
190*0d40e9d0SAdam Hornáček    <div class="ctype"><%
191*0d40e9d0SAdam Hornáček        if (!full) {
192*0d40e9d0SAdam Hornáček        %>
193*0d40e9d0SAdam Hornáček        <span><a href="<%= reqURI %>?r1=<%= rp1 %>&amp;r2=<%= rp2
194*0d40e9d0SAdam Hornáček            %>&amp;format=<%= type.getAbbrev() %>&amp;full=1">full</a></span>
195*0d40e9d0SAdam Hornáček        <span class="active">compact</span><%
196*0d40e9d0SAdam Hornáček        } else {
197*0d40e9d0SAdam Hornáček        %>
198*0d40e9d0SAdam Hornáček        <span class="active">full</span>
199*0d40e9d0SAdam Hornáček        <span> <a href="<%= reqURI %>?r1=<%= rp1 %>&amp;r2=<%= rp2
200*0d40e9d0SAdam Hornáček            %>&amp;format=<%= type.getAbbrev() %>&amp;full=0">compact</a></span><%
201*0d40e9d0SAdam Hornáček        }
202*0d40e9d0SAdam Hornáček        %><span><a href="#" id="toggle-jumper">jumper</a></span>
203*0d40e9d0SAdam Hornáček          <span><a href="<%= reqURI %>?r1=<%= rp1 %>&amp;r2=<%= rp2 %>&amp;format=<%= DiffType.TEXT %>&amp;action=download">download diff</a></span><%
204*0d40e9d0SAdam Hornáček    %></div>
205*0d40e9d0SAdam Hornáček</div>
206*0d40e9d0SAdam Hornáček
207*0d40e9d0SAdam Hornáček<div id="difftable">
208*0d40e9d0SAdam Hornáček    <div class="pre"><%
209*0d40e9d0SAdam Hornáček        if (type == DiffType.SIDEBYSIDE || type == DiffType.UNIFIED) {
210*0d40e9d0SAdam Hornáček        %><table class="plain"><%
211*0d40e9d0SAdam Hornáček            if (type == DiffType.SIDEBYSIDE) {
212*0d40e9d0SAdam Hornáček            %>
213*0d40e9d0SAdam Hornáček            <thead><tr>
214*0d40e9d0SAdam Hornáček                <th><%= data.filename %> (<%= data.rev[0] %>)</th>
215*0d40e9d0SAdam Hornáček                <th><%= data.filename %> (<%= data.rev[1] %>)</th>
216*0d40e9d0SAdam Hornáček            </tr></thead><%
217*0d40e9d0SAdam Hornáček            }
218*0d40e9d0SAdam Hornáček            %>
219*0d40e9d0SAdam Hornáček            <tbody><%
220*0d40e9d0SAdam Hornáček        }
221*0d40e9d0SAdam Hornáček
222*0d40e9d0SAdam Hornáček        for (int i=0; i < data.revision.size(); i++) {
223*0d40e9d0SAdam Hornáček            Delta d = data.revision.getDelta(i);
224*0d40e9d0SAdam Hornáček            if (type == DiffType.TEXT) {
225*0d40e9d0SAdam Hornáček        %><%= Util.htmlize(d.toString()) %><%
226*0d40e9d0SAdam Hornáček            } else {
227*0d40e9d0SAdam Hornáček                Chunk c1 = d.getOriginal();
228*0d40e9d0SAdam Hornáček                Chunk c2 = d.getRevised();
229*0d40e9d0SAdam Hornáček                int cn1 = c1.first();
230*0d40e9d0SAdam Hornáček                int cl1 = c1.last();
231*0d40e9d0SAdam Hornáček                int cn2 = c2.first();
232*0d40e9d0SAdam Hornáček                int cl2 = c2.last();
233*0d40e9d0SAdam Hornáček
234*0d40e9d0SAdam Hornáček                int i1 = cn1, i2 = cn2;
235*0d40e9d0SAdam Hornáček                StringBuilder bl1 = new StringBuilder(80);
236*0d40e9d0SAdam Hornáček                StringBuilder bl2 = new StringBuilder(80);
237*0d40e9d0SAdam Hornáček                for (; i1 <= cl1 && i2 <= cl2; i1++, i2++) {
238*0d40e9d0SAdam Hornáček                    String[] ss = Util.diffline(
239*0d40e9d0SAdam Hornáček                            new StringBuilder(file1[i1]),
240*0d40e9d0SAdam Hornáček                            new StringBuilder(file2[i2]));
241*0d40e9d0SAdam Hornáček                    file1[i1] = ss[0];
242*0d40e9d0SAdam Hornáček                    file2[i2] = ss[1];
243*0d40e9d0SAdam Hornáček                }
244*0d40e9d0SAdam Hornáček                // deleted
245*0d40e9d0SAdam Hornáček                for (; i1 <= cl1; i1++) {
246*0d40e9d0SAdam Hornáček                    bl1.setLength(0);
247*0d40e9d0SAdam Hornáček                    bl1.append("<span class=\"d\">");
248*0d40e9d0SAdam Hornáček                    Util.htmlize(file1[i1], bl1);
249*0d40e9d0SAdam Hornáček                    file1[i1] = bl1.append("</span>").toString();
250*0d40e9d0SAdam Hornáček                }
251*0d40e9d0SAdam Hornáček                // added
252*0d40e9d0SAdam Hornáček                for (; i2 <= cl2; i2++) {
253*0d40e9d0SAdam Hornáček                    bl2.setLength(0);
254*0d40e9d0SAdam Hornáček                    bl2.append("<span class=\"a\">");
255*0d40e9d0SAdam Hornáček                    Util.htmlize(file2[i2], bl2);
256*0d40e9d0SAdam Hornáček                    file2[i2] = bl2.append("</span>").toString();
257*0d40e9d0SAdam Hornáček                }
258*0d40e9d0SAdam Hornáček
259*0d40e9d0SAdam Hornáček                if (type == DiffType.UNIFIED) {
260*0d40e9d0SAdam Hornáček// UDIFF
261*0d40e9d0SAdam Hornáček                    if (cn1 > ln1 || cn2 > ln2) {
262*0d40e9d0SAdam Hornáček            %>
263*0d40e9d0SAdam Hornáček            <tr class="k"><td><%
264*0d40e9d0SAdam Hornáček                        if (full || (cn2 - ln2 < 20)) {
265*0d40e9d0SAdam Hornáček                            for (int j = ln2; j < cn2; j++) {
266*0d40e9d0SAdam Hornáček                %><i><%= ++ln2 %></i><%=
267*0d40e9d0SAdam Hornáček                    Util.htmlize(file2[j]) %><br/><%
268*0d40e9d0SAdam Hornáček                            }
269*0d40e9d0SAdam Hornáček                        } else {
270*0d40e9d0SAdam Hornáček                            for (int j = ln2; j < ln2 + 8; j++) {
271*0d40e9d0SAdam Hornáček                %><i><%= j+1 %></i><%=
272*0d40e9d0SAdam Hornáček                    Util.htmlize(file2[j]) %><br/><%
273*0d40e9d0SAdam Hornáček                            }
274*0d40e9d0SAdam Hornáček                %><br/>--- <b><%= cn2 - ln2 - 16
275*0d40e9d0SAdam Hornáček                    %> unchanged lines hidden</b> (<a href="<%= reqURI
276*0d40e9d0SAdam Hornáček                    %>?r1=<%= rp1 %>&amp;r2=<%= rp2
277*0d40e9d0SAdam Hornáček                    %>&amp;format=<%= type.getAbbrev()
278*0d40e9d0SAdam Hornáček                    %>&amp;full=1#<%= ln2 %>">view full</a>) --- <br/><br/><%
279*0d40e9d0SAdam Hornáček                            ln2 = cn2 - 8;
280*0d40e9d0SAdam Hornáček                            for (int j = ln2; j < cn2; j++) {
281*0d40e9d0SAdam Hornáček                %><i><%= ++ln2 %></i><%= Util.htmlize(file2[j]) %><br/><%
282*0d40e9d0SAdam Hornáček                            }
283*0d40e9d0SAdam Hornáček                        }
284*0d40e9d0SAdam Hornáček                %></td>
285*0d40e9d0SAdam Hornáček            </tr><%
286*0d40e9d0SAdam Hornáček                        ln1 = cn1;
287*0d40e9d0SAdam Hornáček                    }
288*0d40e9d0SAdam Hornáček                    if (cn1 <= cl1) {
289*0d40e9d0SAdam Hornáček            %>
290*0d40e9d0SAdam Hornáček            <tr class="chunk"><td><%
291*0d40e9d0SAdam Hornáček                        for (int j = cn1; j  <= cl1 ; j++) {
292*0d40e9d0SAdam Hornáček                %><del class="d"><%= ++ln1 %></del><%= file1[j]
293*0d40e9d0SAdam Hornáček                %><br/><%
294*0d40e9d0SAdam Hornáček                        }
295*0d40e9d0SAdam Hornáček                %></td>
296*0d40e9d0SAdam Hornáček            </tr><%
297*0d40e9d0SAdam Hornáček                    }
298*0d40e9d0SAdam Hornáček                    if (cn2 <= cl2) {
299*0d40e9d0SAdam Hornáček            %>
300*0d40e9d0SAdam Hornáček            <tr class="k<%
301*0d40e9d0SAdam Hornáček                    if (cn1 > cl1) {
302*0d40e9d0SAdam Hornáček                        %> chunk<%
303*0d40e9d0SAdam Hornáček                    }
304*0d40e9d0SAdam Hornáček                %>"><td><%
305*0d40e9d0SAdam Hornáček                        for (int j = cn2; j  < cl2; j++) {
306*0d40e9d0SAdam Hornáček                %><i class="a"><%= ++ln2 %></i><%= file2[j]
307*0d40e9d0SAdam Hornáček                %><br/><%
308*0d40e9d0SAdam Hornáček                        }
309*0d40e9d0SAdam Hornáček                %><i class="a"><%= ++ln2 %></i><%= file2[cl2] %><%
310*0d40e9d0SAdam Hornáček                        if(full) {
311*0d40e9d0SAdam Hornáček                %><a name="<%= ln2 %>" /><%
312*0d40e9d0SAdam Hornáček                        }
313*0d40e9d0SAdam Hornáček                %></td>
314*0d40e9d0SAdam Hornáček            </tr><%
315*0d40e9d0SAdam Hornáček                    }
316*0d40e9d0SAdam Hornáček                } else if (type == DiffType.SIDEBYSIDE) {
317*0d40e9d0SAdam Hornáček// SDIFF
318*0d40e9d0SAdam Hornáček                    if (cn1 > ln1 || cn2 > ln2) {
319*0d40e9d0SAdam Hornáček            %>
320*0d40e9d0SAdam Hornáček            <tr class="k"><td><%
321*0d40e9d0SAdam Hornáček                        if (full || cn2 - ln2 < 20) {
322*0d40e9d0SAdam Hornáček                            for (int j = ln1; j < cn1; j++) {
323*0d40e9d0SAdam Hornáček                %><i><%= ++ln1 %></i><%=
324*0d40e9d0SAdam Hornáček                    Util.htmlize(file1[j]) %><br/><%
325*0d40e9d0SAdam Hornáček                            }
326*0d40e9d0SAdam Hornáček                %></td><td><%
327*0d40e9d0SAdam Hornáček                            for (int j = ln2; j  < cn2 ; j++) {
328*0d40e9d0SAdam Hornáček                %><i><%= ++ln2 %></i><%=
329*0d40e9d0SAdam Hornáček                    Util.htmlize(file2[j]) %><br/><%
330*0d40e9d0SAdam Hornáček                            }
331*0d40e9d0SAdam Hornáček                        } else {
332*0d40e9d0SAdam Hornáček                            for (int j = ln1; j < ln1 + 8; j++) {
333*0d40e9d0SAdam Hornáček                %><i><%= j+1 %></i><%=
334*0d40e9d0SAdam Hornáček                    Util.htmlize(file1[j]) %><br/><%
335*0d40e9d0SAdam Hornáček                            }
336*0d40e9d0SAdam Hornáček                %><br/>--- <b><%= cn1 - ln1 - 16
337*0d40e9d0SAdam Hornáček                    %> unchanged lines hidden</b> (<a href="<%= reqURI
338*0d40e9d0SAdam Hornáček                    %>?r1=<%= rp1 %>&amp;r2=<%= rp2
339*0d40e9d0SAdam Hornáček                    %>&amp;format=<%= type.getAbbrev()
340*0d40e9d0SAdam Hornáček                    %>&amp;full=1#<%= ln2 %>">view full</a>) --- <br/><br/><%
341*0d40e9d0SAdam Hornáček                            ln1 = cn1 - 8;
342*0d40e9d0SAdam Hornáček                            for (int j = ln1; j < cn1; j++) {
343*0d40e9d0SAdam Hornáček                %><i><%= ++ln1 %></i><%=
344*0d40e9d0SAdam Hornáček                    Util.htmlize(file1[j]) %><br/><%
345*0d40e9d0SAdam Hornáček                            }
346*0d40e9d0SAdam Hornáček                %></td><td><%
347*0d40e9d0SAdam Hornáček                            for (int j = ln2; j < ln2 + 8; j++) {
348*0d40e9d0SAdam Hornáček                %><i><%= j+1 %></i><%=
349*0d40e9d0SAdam Hornáček                    Util.htmlize(file2[j]) %><br/><%
350*0d40e9d0SAdam Hornáček                            }
351*0d40e9d0SAdam Hornáček                %><br/>--- <b><%= cn2 - ln2 - 16
352*0d40e9d0SAdam Hornáček                    %> unchanged lines hidden</b> (<a href="<%= reqURI
353*0d40e9d0SAdam Hornáček                    %>?r1=<%= rp1 %>&amp;r2=<%= rp2
354*0d40e9d0SAdam Hornáček                    %>&amp;format=<%= type.getAbbrev()
355*0d40e9d0SAdam Hornáček                    %>&amp;full=1#<%= ln2 %>">view full</a>) --- <br/><br/><%
356*0d40e9d0SAdam Hornáček                            ln2 = cn2 - 8;
357*0d40e9d0SAdam Hornáček                            for (int j = ln2; j < cn2; j++) {
358*0d40e9d0SAdam Hornáček                %><i><%= ++ln2 %></i><%=
359*0d40e9d0SAdam Hornáček                    Util.htmlize(file2[j]) %><br/><%
360*0d40e9d0SAdam Hornáček                            }
361*0d40e9d0SAdam Hornáček                        }
362*0d40e9d0SAdam Hornáček                %></td>
363*0d40e9d0SAdam Hornáček            </tr><%
364*0d40e9d0SAdam Hornáček                    }
365*0d40e9d0SAdam Hornáček            %>
366*0d40e9d0SAdam Hornáček            <tr class="k chunk"><td><%
367*0d40e9d0SAdam Hornáček                    for (int j = cn1; j  <= cl1; j++) {
368*0d40e9d0SAdam Hornáček                %><i><%= ++ln1 %></i><%= file1[j] %><br/><%
369*0d40e9d0SAdam Hornáček                    }
370*0d40e9d0SAdam Hornáček                %></td><td><%
371*0d40e9d0SAdam Hornáček                    for (int j = cn2; j  <= cl2; j++) {
372*0d40e9d0SAdam Hornáček                %><i><%= ++ln2 %></i><a name="<%= ln2 %>"></a><%=
373*0d40e9d0SAdam Hornáček                    file2[j] %><br/><%
374*0d40e9d0SAdam Hornáček                    }
375*0d40e9d0SAdam Hornáček                %></td>
376*0d40e9d0SAdam Hornáček            </tr><%
377*0d40e9d0SAdam Hornáček// OLD
378*0d40e9d0SAdam Hornáček                } else if (type == DiffType.OLD) {
379*0d40e9d0SAdam Hornáček                    // OLD
380*0d40e9d0SAdam Hornáček                    if (cn1 > ln1) {
381*0d40e9d0SAdam Hornáček                        if (full || cn1 - ln1 < 20) {
382*0d40e9d0SAdam Hornáček                            for (int j = ln1; j < cn1; j++) {
383*0d40e9d0SAdam Hornáček        %><i><%= ++ln1 %></i><%=
384*0d40e9d0SAdam Hornáček            Util.htmlize(file1[j]) %><br/><%
385*0d40e9d0SAdam Hornáček                            }
386*0d40e9d0SAdam Hornáček                        } else {
387*0d40e9d0SAdam Hornáček                            for (int j = ln1; j < ln1 + 8; j++) {
388*0d40e9d0SAdam Hornáček        %><i><%= j+1 %></i><%=
389*0d40e9d0SAdam Hornáček            Util.htmlize(file1[j]) %><br/><%
390*0d40e9d0SAdam Hornáček                            }
391*0d40e9d0SAdam Hornáček        %><br/>--- <b><%= cn1 - ln1 - 16
392*0d40e9d0SAdam Hornáček            %> unchanged lines hidden</b> (<a href="<%= reqURI
393*0d40e9d0SAdam Hornáček            %>?r1=<%= rp1 %>&amp;r2=<%= rp2
394*0d40e9d0SAdam Hornáček            %>&amp;format=<%= type.getAbbrev()
395*0d40e9d0SAdam Hornáček            %>&amp;full=1#<%=ln1%>">view full</a>) --- <br/><br/><%
396*0d40e9d0SAdam Hornáček                            ln1 = cn1 - 8;
397*0d40e9d0SAdam Hornáček                            for (int j = ln1; j < cn1; j++) {
398*0d40e9d0SAdam Hornáček        %><i><%= ++ln1 %></i><%=
399*0d40e9d0SAdam Hornáček            Util.htmlize(file1[j]) %><br/><%
400*0d40e9d0SAdam Hornáček                            }
401*0d40e9d0SAdam Hornáček                        }
402*0d40e9d0SAdam Hornáček                    }
403*0d40e9d0SAdam Hornáček                    for (int j = cn1; j  <= cl1 ; j++) {
404*0d40e9d0SAdam Hornáček        %><i><%= ++ln1 %></i><%= file1[j] %><br/><%
405*0d40e9d0SAdam Hornáček                    }
406*0d40e9d0SAdam Hornáček                    if (full) {
407*0d40e9d0SAdam Hornáček        %><a name="<%=ln1%>" ></a><%
408*0d40e9d0SAdam Hornáček                    }
409*0d40e9d0SAdam Hornáček// NEW
410*0d40e9d0SAdam Hornáček                } else if (type == DiffType.NEW) {
411*0d40e9d0SAdam Hornáček                    if (cn2 > ln2) {
412*0d40e9d0SAdam Hornáček                        if (full || cn2 - ln2 < 20) {
413*0d40e9d0SAdam Hornáček                            for (int j = ln2; j  < cn2 ; j++) {
414*0d40e9d0SAdam Hornáček        %><i><%= ++ln2 %></i><%=
415*0d40e9d0SAdam Hornáček            Util.htmlize(file2[j]) %><br/><%
416*0d40e9d0SAdam Hornáček                            }
417*0d40e9d0SAdam Hornáček                        } else {
418*0d40e9d0SAdam Hornáček                            for (int j = ln2; j < ln2 + 8; j++) {
419*0d40e9d0SAdam Hornáček        %><i><%= j+1 %></i><%=
420*0d40e9d0SAdam Hornáček            Util.htmlize(file2[j]) %><br/><%
421*0d40e9d0SAdam Hornáček                            }
422*0d40e9d0SAdam Hornáček        %><br/>--- <b><%= cn2 - ln2 - 16
423*0d40e9d0SAdam Hornáček            %> unchanged lines hidden</b> (<a href="<%= reqURI
424*0d40e9d0SAdam Hornáček            %>?r1=<%= rp1 %>&amp;r2=<%= rp2
425*0d40e9d0SAdam Hornáček            %>&amp;format=<%= type.getAbbrev()
426*0d40e9d0SAdam Hornáček            %>&amp;full=1#<%= ln2 %>">view full</a>) --- <br/><br/><%
427*0d40e9d0SAdam Hornáček                            ln2 = cn2 - 8;
428*0d40e9d0SAdam Hornáček                            for (int j = ln2; j < cn2; j++) {
429*0d40e9d0SAdam Hornáček            %><i><%= ++ln2 %></i><%=
430*0d40e9d0SAdam Hornáček                Util.htmlize(file2[j]) %><br/><%
431*0d40e9d0SAdam Hornáček                            }
432*0d40e9d0SAdam Hornáček                        }
433*0d40e9d0SAdam Hornáček                    }
434*0d40e9d0SAdam Hornáček                    for (int j = cn2; j  <= cl2 ; j++) {
435*0d40e9d0SAdam Hornáček        %><i><%= ++ln2 %></i><%= file2[j] %><br/><%
436*0d40e9d0SAdam Hornáček                    }
437*0d40e9d0SAdam Hornáček                    if (full) {
438*0d40e9d0SAdam Hornáček        %><a name="<%= ln2 %>"></a><%
439*0d40e9d0SAdam Hornáček                    }
440*0d40e9d0SAdam Hornáček                }
441*0d40e9d0SAdam Hornáček            } // else
442*0d40e9d0SAdam Hornáček        } // for
443*0d40e9d0SAdam Hornáček// deltas done, dump the remaining
444*0d40e9d0SAdam Hornáček        if (file1.length >= ln1) {
445*0d40e9d0SAdam Hornáček            if (type == DiffType.SIDEBYSIDE) {
446*0d40e9d0SAdam Hornáček                if (full || file1.length - ln1 < 20) {
447*0d40e9d0SAdam Hornáček            %>
448*0d40e9d0SAdam Hornáček            <tr><td><%
449*0d40e9d0SAdam Hornáček                    for (int j = ln1; j < file1.length ; j++) {
450*0d40e9d0SAdam Hornáček                %><i><%= j+1 %></i><%= Util.htmlize(file1[j]) %><br/><%
451*0d40e9d0SAdam Hornáček                    }
452*0d40e9d0SAdam Hornáček                %></td><td><%
453*0d40e9d0SAdam Hornáček                    for (int j = ln2; j < file2.length ; j++) {
454*0d40e9d0SAdam Hornáček                %><i><%= j+1 %></i><%= Util.htmlize(file2[j]) %><br/><%
455*0d40e9d0SAdam Hornáček                    }
456*0d40e9d0SAdam Hornáček                %></td>
457*0d40e9d0SAdam Hornáček            </tr>
458*0d40e9d0SAdam Hornáček            </tbody>
459*0d40e9d0SAdam Hornáček        </table><%
460*0d40e9d0SAdam Hornáček                } else {
461*0d40e9d0SAdam Hornáček            %>
462*0d40e9d0SAdam Hornáček            <tr><td><%
463*0d40e9d0SAdam Hornáček                    for (int j = ln1; j < ln1 + 8 ; j++) {
464*0d40e9d0SAdam Hornáček                %><i><%= j+1 %></i><%= Util.htmlize(file1[j]) %><br/><%
465*0d40e9d0SAdam Hornáček                    }
466*0d40e9d0SAdam Hornáček                %><br/> --- <b><%= file1.length - ln1 - 8
467*0d40e9d0SAdam Hornáček                %> unchanged lines hidden</b> --- </td><td><%
468*0d40e9d0SAdam Hornáček                    for (int j = ln2; j < ln2 + 8 ; j++) {
469*0d40e9d0SAdam Hornáček                %><i><%= j+1 %></i><%= Util.htmlize(file2[j]) %><br/><%
470*0d40e9d0SAdam Hornáček                    }
471*0d40e9d0SAdam Hornáček                %><br/>--- <b><%= file1.length - ln1 - 8
472*0d40e9d0SAdam Hornáček                %> unchanged lines hidden</b> ---</td>
473*0d40e9d0SAdam Hornáček            </tr>
474*0d40e9d0SAdam Hornáček            </tbody>
475*0d40e9d0SAdam Hornáček        </table><%
476*0d40e9d0SAdam Hornáček                }
477*0d40e9d0SAdam Hornáček            } else if (type == DiffType.UNIFIED) {
478*0d40e9d0SAdam Hornáček                if (full || file2.length - ln2 < 20) {
479*0d40e9d0SAdam Hornáček            %>
480*0d40e9d0SAdam Hornáček            <tr><td><%
481*0d40e9d0SAdam Hornáček                    for (int j = ln2; j < file2.length ; j++) {
482*0d40e9d0SAdam Hornáček                %><i><%= j+1 %></i><%= Util.htmlize(file2[j]) %><br/><%
483*0d40e9d0SAdam Hornáček                    }
484*0d40e9d0SAdam Hornáček                %></td>
485*0d40e9d0SAdam Hornáček            </tr>
486*0d40e9d0SAdam Hornáček            </tbody>
487*0d40e9d0SAdam Hornáček        </table><%
488*0d40e9d0SAdam Hornáček                } else {
489*0d40e9d0SAdam Hornáček            %>
490*0d40e9d0SAdam Hornáček            <tr><td><%
491*0d40e9d0SAdam Hornáček                    for (int j = ln2; j < ln2 + 8 ; j++) {
492*0d40e9d0SAdam Hornáček                %><i><%= j+1 %></i><%= Util.htmlize(file2[j]) %><br/><%
493*0d40e9d0SAdam Hornáček                    }
494*0d40e9d0SAdam Hornáček                %><br/>--- <b><%= file2.length - ln2 - 8
495*0d40e9d0SAdam Hornáček                %> unchanged lines hidden</b> ---</td>
496*0d40e9d0SAdam Hornáček            </tr>
497*0d40e9d0SAdam Hornáček            </tbody>
498*0d40e9d0SAdam Hornáček        </table><%
499*0d40e9d0SAdam Hornáček                }
500*0d40e9d0SAdam Hornáček            } else if (type == DiffType.OLD) {
501*0d40e9d0SAdam Hornáček                if (full || file1.length - ln1 < 20) {
502*0d40e9d0SAdam Hornáček                    for (int j = ln1; j < file1.length ; j++) {
503*0d40e9d0SAdam Hornáček        %><i><%= j+1 %></i><%= Util.htmlize(file1[j]) %><br/><%
504*0d40e9d0SAdam Hornáček                    }
505*0d40e9d0SAdam Hornáček                } else {
506*0d40e9d0SAdam Hornáček                    for (int j = ln1; j < ln1 + 8 ; j++) {
507*0d40e9d0SAdam Hornáček        %><i><%= j+1 %></i><%= Util.htmlize(file1[j]) %><br/><%
508*0d40e9d0SAdam Hornáček                    }
509*0d40e9d0SAdam Hornáček        %><br/> --- <b><%= file1.length - ln1 - 8
510*0d40e9d0SAdam Hornáček        %> unchanged lines hidden</b> ---<br/><%
511*0d40e9d0SAdam Hornáček                }
512*0d40e9d0SAdam Hornáček            } else if (type == DiffType.NEW) {
513*0d40e9d0SAdam Hornáček                if (full || file2.length - ln2 < 20) {
514*0d40e9d0SAdam Hornáček                    for (int j = ln2; j < file2.length ; j++) {
515*0d40e9d0SAdam Hornáček        %><i><%= j+1 %></i><%=Util.htmlize(file2[j])%><br/><%
516*0d40e9d0SAdam Hornáček                    }
517*0d40e9d0SAdam Hornáček                } else {
518*0d40e9d0SAdam Hornáček                    for (int j = ln2; j < ln2 + 8 ; j++) {
519*0d40e9d0SAdam Hornáček        %><i><%= j+1 %></i><%= Util.htmlize(file2[j]) %><br/><%
520*0d40e9d0SAdam Hornáček                    }
521*0d40e9d0SAdam Hornáček        %><br/> --- <b><%= file2.length - ln2 - 8
522*0d40e9d0SAdam Hornáček        %> unchanged lines hidden</b> ---<br/><%
523*0d40e9d0SAdam Hornáček                }
524*0d40e9d0SAdam Hornáček            }
525*0d40e9d0SAdam Hornáček        }
526*0d40e9d0SAdam Hornáček
527*0d40e9d0SAdam Hornáček//----DIFFS Done--------
528*0d40e9d0SAdam Hornáček    %></div>
529*0d40e9d0SAdam Hornáček</div><%
530*0d40e9d0SAdam Hornáček    }
531*0d40e9d0SAdam Hornáček}
532*0d40e9d0SAdam Hornáček/* ---------------------- diff.jsp end --------------------- */
533*0d40e9d0SAdam Hornáček%><%@
534*0d40e9d0SAdam Hornáček
535*0d40e9d0SAdam Hornáčekinclude file="foot.jspf"
536*0d40e9d0SAdam Hornáček
537*0d40e9d0SAdam Hornáček%>