KickJava   Java API By Example, From Geeks To Geeks.

Java > Open Source Codes > org > apache > tapestry > describe > LocationRenderStrategy


1 // Copyright 2005 The Apache Software Foundation
2
//
3
// Licensed under the Apache License, Version 2.0 (the "License");
4
// you may not use this file except in compliance with the License.
5
// You may obtain a copy of the License at
6
//
7
// http://www.apache.org/licenses/LICENSE-2.0
8
//
9
// Unless required by applicable law or agreed to in writing, software
10
// distributed under the License is distributed on an "AS IS" BASIS,
11
// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
12
// See the License for the specific language governing permissions and
13
// limitations under the License.
14

15 package org.apache.tapestry.describe;
16
17 import java.io.BufferedReader JavaDoc;
18 import java.io.IOException JavaDoc;
19 import java.io.InputStreamReader JavaDoc;
20 import java.io.LineNumberReader JavaDoc;
21 import java.io.Reader JavaDoc;
22 import java.net.URL JavaDoc;
23
24 import org.apache.hivemind.Location;
25 import org.apache.tapestry.IMarkupWriter;
26 import org.apache.tapestry.IRequestCycle;
27
28 /**
29  * Adapter for displaying {@link org.apache.hivemind.Location} objects as HTML. This may
30  * include showing the content of the {@link org.apache.hivemind.Resource}, with the line indicated
31  * in the Location highlighted.
32  *
33  * @author Howard M. Lewis Ship
34  * @since 4.0
35  */

36 public class LocationRenderStrategy implements RenderStrategy
37 {
38     /**
39      * Lines before and after the actual location to display.
40      */

41     private static final int RANGE = 5;
42
43     public void renderObject(Object JavaDoc object, IMarkupWriter writer, IRequestCycle cycle)
44     {
45         Location l = (Location) object;
46
47         // Always print out the location as a string.
48

49         writer.print(l.toString());
50
51         int lineNumber = l.getLineNumber();
52
53         if (lineNumber < 1)
54             return;
55
56         URL JavaDoc url = l.getResource().getResourceURL();
57
58         if (url == null)
59             return;
60
61         writeResourceContent(writer, url, lineNumber);
62     }
63
64     private void writeResourceContent(IMarkupWriter writer, URL JavaDoc url, int lineNumber)
65     {
66         LineNumberReader JavaDoc reader = null;
67
68         try
69         {
70             reader = new LineNumberReader JavaDoc(new BufferedReader JavaDoc(
71                     new InputStreamReader JavaDoc(url.openStream())));
72
73             writer.beginEmpty("br");
74             writer.begin("table");
75             writer.attribute("class", "location-content");
76
77             while (true)
78             {
79                 String JavaDoc line = reader.readLine();
80
81                 if (line == null)
82                     break;
83
84                 int currentLine = reader.getLineNumber();
85
86                 if (currentLine > lineNumber + RANGE)
87                     break;
88
89                 if (currentLine < lineNumber - RANGE)
90                     continue;
91
92                 writer.begin("tr");
93
94                 if (currentLine == lineNumber)
95                     writer.attribute("class", "target-line");
96
97                 writer.begin("td");
98                 writer.attribute("class", "line-number");
99                 writer.print(currentLine);
100                 writer.end();
101
102                 writer.begin("td");
103                 writer.print(line);
104                 writer.end("tr");
105                 writer.println();
106             }
107
108             reader.close();
109             reader = null;
110         }
111         catch (Exception JavaDoc ex)
112         {
113             // Ignore it.
114
}
115         finally
116         {
117             writer.end("table");
118             close(reader);
119         }
120     }
121
122     private void close(Reader JavaDoc reader)
123     {
124         try
125         {
126             if (reader != null)
127                 reader.close();
128         }
129         catch (IOException JavaDoc ex)
130         {
131             // Ignore
132
}
133     }
134
135 }
Popular Tags