$("#ray_6165").html("\n
1<\/a>
2<\/a>
3<\/a>
4<\/a>
5<\/a>
6<\/a>
7<\/a>
8<\/a>
9<\/a>
10<\/a><\/strong>
11<\/a>
12<\/a>
13<\/a>
14<\/a>
15<\/a>
16<\/a>
17<\/a>
18<\/a>
19<\/a>
20<\/a><\/strong>
21<\/a>
22<\/a>
23<\/a>
24<\/a>
25<\/a>
26<\/a>
27<\/a>
28<\/a>
29<\/a>
30<\/a><\/strong>
31<\/a>
32<\/a>
33<\/a>
34<\/a>
35<\/a>
36<\/a>
37<\/a>
38<\/a>
39<\/a>
40<\/a><\/strong>
41<\/a>
42<\/a>
43<\/a>
44<\/a>
45<\/a>
46<\/a>
47<\/a>
48<\/a>
49<\/a>
50<\/a><\/strong>
51<\/a>
52<\/a>
53<\/a>
54<\/a>
55<\/a>
56<\/a>
57<\/a>
58<\/a>
59<\/a>
60<\/a><\/strong>
61<\/a>
62<\/a>
63<\/a>
64<\/a>
65<\/a>
66<\/a>
67<\/a>
68<\/a>
69<\/a>
70<\/a><\/strong>
71<\/a>
72<\/a>
73<\/a>
74<\/a>
75<\/a>
76<\/a>
77<\/a>
78<\/a>
79<\/a>
80<\/a><\/strong>
81<\/a>
82<\/a>
83<\/a>
84<\/a>
85<\/a>
86<\/a>
87<\/a>
88<\/a>
89<\/a>
90<\/a><\/strong>
91<\/a>
92<\/a>
93<\/a>
94<\/a>
95<\/a>
96<\/a>
97<\/a>
98<\/a>
99<\/a>
100<\/a><\/strong>
101<\/a>
102<\/a>
103<\/a>
104<\/a>
105<\/a>
106<\/a>
107<\/a>
108<\/a>
109<\/a>
110<\/a><\/strong>
111<\/a>
112<\/a>
113<\/a>
114<\/a>
115<\/a>
116<\/a>
117<\/a>
118<\/a>
119<\/a>
120<\/a><\/strong>
121<\/a>
122<\/a>
123<\/a>
124<\/a>
125<\/a>
126<\/a>
127<\/a>
128<\/a>
129<\/a>
130<\/a><\/strong>
131<\/a>
132<\/a>
133<\/a>
134<\/a>
135<\/a>
136<\/a>
137<\/a>
138<\/a>
139<\/a>
140<\/a><\/strong>
141<\/a>
142<\/a>
143<\/a>
144<\/a>
145<\/a>
146<\/a>
147<\/a>
148<\/a>
149<\/a>
150<\/a><\/strong>
151<\/a>
152<\/a>
153<\/a>
154<\/a>
155<\/a>
156<\/a>
157<\/a>
158<\/a><\/pre><\/td>\n  
/* 
 * Copyright (C) 2007, 2008 Martin Kempf, Reto Kleeb, Michael Klenk
 *
 * IFS Institute for Software, HSR Rapperswil, Switzerland
 * http://ifs.hsr.ch/
 *
 */<\/span>
<\/span>package<\/span> <\/span>org<\/span>.<\/span>codehaus<\/span>.<\/span>groovy<\/span>.<\/span>eclipse<\/span>.<\/span>refactoring<\/span>.<\/span>core<\/span>.<\/span>utils<\/span>

<\/span>import<\/span> <\/span>org.codehaus.groovy.antlr.*<\/span>;<\/span>
<\/span>import<\/span> <\/span>org.eclipse.jface.text.*<\/span>;<\/span>

<\/span>/**
 * Reads parts of a file
 * @author reto kleeb
 */<\/span>
<\/span>class<\/span> <\/span>FilePartReader<\/span> <\/span>{<\/span>
  
  <\/span>private<\/span> <\/span>static<\/span> <\/span>String<\/span> <\/span>getLineInFile<\/span>(<\/span>filename<\/span>,<\/span> <\/span>line<\/span>)<\/span>{<\/span>
    <\/span>File<\/span> <\/span>fileObject<\/span> <\/span>=<\/span> <\/span>openFile<\/span>(<\/span>filename<\/span>)<\/span>
    <\/span>fileObject<\/span>.<\/span>readLines<\/span>(<\/span>)<\/span>.<\/span>get<\/span>(<\/span>line<\/span>-<\/span>1<\/span>)<\/span>
  <\/span>}<\/span>
  
  <\/span>private<\/span> <\/span>static<\/span> <\/span>getWords<\/span>(<\/span>line<\/span>,<\/span> <\/span>range<\/span>)<\/span>{<\/span>
    <\/span>def<\/span> <\/span>relevantPieceOfLine<\/span> <\/span>=<\/span> <\/span>line<\/span>.<\/span>getAt<\/span>(<\/span>range<\/span>)<\/span>
    <\/span>relevantPieceOfLine<\/span> <\/span>=<\/span> <\/span>relevantPieceOfLine<\/span>.<\/span>replaceAll<\/span>(<\/span>/<\/span>\\(<\/span>/<\/span><\/span>,<\/span> <\/span>"<\/span> ( <\/span>"<\/span><\/span>)<\/span>
    <\/span>relevantPieceOfLine<\/span> <\/span>=<\/span> <\/span>relevantPieceOfLine<\/span>.<\/span>replaceAll<\/span>(<\/span>/<\/span>\\)<\/span>/<\/span><\/span>,<\/span> <\/span>"<\/span> ) <\/span>"<\/span><\/span>)<\/span>
    <\/span>relevantPieceOfLine<\/span>.<\/span>tokenize<\/span>(<\/span>)<\/span>
  <\/span>}<\/span>
  
  <\/span>public<\/span> <\/span>static<\/span> <\/span>String<\/span> <\/span>readBackwardsFromCoordinate<\/span>(<\/span>IDocument<\/span> <\/span>doc<\/span>,<\/span> <\/span>LineColumn<\/span> <\/span>coord<\/span>)<\/span>{<\/span>
    <\/span>//make sure that no one reads from a file with impossible coordinates<\/span>
    <\/span>if<\/span>(<\/span>coord<\/span>.<\/span>getLine<\/span>(<\/span>)<\/span> <\/span>><\/span> <\/span>0<\/span> <\/span>&&<\/span> <\/span>coord<\/span>.<\/span>getColumn<\/span>(<\/span>)<\/span> <\/span>><\/span> <\/span>0<\/span>)<\/span> <\/span>{<\/span>
      <\/span>int<\/span> <\/span>lineLength<\/span> <\/span>=<\/span> <\/span>doc<\/span>.<\/span>getLineLength<\/span>(<\/span>coord<\/span>.<\/span>getLine<\/span>(<\/span>)<\/span>-<\/span>1<\/span>)<\/span>
      <\/span>int<\/span> <\/span>offset<\/span> <\/span>=<\/span> <\/span>doc<\/span>.<\/span>getLineOffset<\/span>(<\/span>coord<\/span>.<\/span>getLine<\/span>(<\/span>)<\/span>-<\/span>1<\/span>)<\/span>
      <\/span>String<\/span> <\/span>line<\/span> <\/span>=<\/span> <\/span>doc<\/span>.<\/span>get<\/span>(<\/span>offset<\/span>,<\/span> <\/span>lineLength<\/span>)<\/span>
      <\/span>return<\/span> <\/span>getWords<\/span>(<\/span>line<\/span>,<\/span>(<\/span>0<\/span>..<\/span>coord<\/span>.<\/span>getColumn<\/span>(<\/span>)<\/span>-<\/span>2<\/span>)<\/span>)<\/span>[<\/span>-<\/span>1<\/span>]<\/span>
    <\/span>}<\/span> <\/span>else<\/span> <\/span>{<\/span>
      <\/span>return<\/span> <\/span>"<\/span> <\/span>"<\/span><\/span>
    <\/span>}<\/span>
  <\/span>}<\/span>
  
  <\/span>public<\/span> <\/span>static<\/span> <\/span>String<\/span> <\/span>readForwardFromCoordinate<\/span>(<\/span>IDocument<\/span> <\/span>doc<\/span>,<\/span> <\/span>LineColumn<\/span> <\/span>coord<\/span>)<\/span>{<\/span>
    <\/span>//make sure that no one reads from a file with impossible coordinates<\/span>
    <\/span>if<\/span>(<\/span>coord<\/span>.<\/span>getLine<\/span>(<\/span>)<\/span> <\/span>><\/span> <\/span>0<\/span> <\/span>&&<\/span> <\/span>coord<\/span>.<\/span>getColumn<\/span>(<\/span>)<\/span> <\/span>><\/span> <\/span>0<\/span>)<\/span> <\/span>{<\/span>
      <\/span>int<\/span> <\/span>lineLength<\/span> <\/span>=<\/span> <\/span>doc<\/span>.<\/span>getLineLength<\/span>(<\/span>coord<\/span>.<\/span>getLine<\/span>(<\/span>)<\/span>-<\/span>1<\/span>)<\/span>
      <\/span>int<\/span> <\/span>offset<\/span> <\/span>=<\/span> <\/span>doc<\/span>.<\/span>getLineOffset<\/span>(<\/span>coord<\/span>.<\/span>getLine<\/span>(<\/span>)<\/span>-<\/span>1<\/span>)<\/span>
      <\/span>String<\/span> <\/span>line<\/span> <\/span>=<\/span> <\/span>doc<\/span>.<\/span>get<\/span>(<\/span>offset<\/span>,<\/span> <\/span>lineLength<\/span>)<\/span>
      <\/span>return<\/span> <\/span>getWords<\/span>(<\/span>line<\/span>,<\/span>(<\/span>coord<\/span>.<\/span>getColumn<\/span>(<\/span>)<\/span>-<\/span>1<\/span>..<\/span>-<\/span>1<\/span>)<\/span>)<\/span>[<\/span>0<\/span>]<\/span>
    <\/span>}<\/span> <\/span>else<\/span> <\/span>{<\/span>
      <\/span>return<\/span> <\/span>"<\/span> <\/span>"<\/span><\/span>
    <\/span>}<\/span>
    
  <\/span>}<\/span>
  
  <\/span>/*
   * DEPRECATED, no filenames anymore
  public static String readBackwardsFromCoordinate(filename, Coord){
    def relevantLine = getLineInFile(filename, Coord.getLine())
    return getWords(relevantLine,(0..Coord.getColumn()) )[-1]
  }
  
  public static String readForwardFromCoordinate(filename, Coord){
    def relevantLine = getLineInFile(filename, Coord.getLine())
    return getWords(relevantLine,(Coord.getColumn()..-1))[0]
  }*/<\/span>
  
  <\/span>private<\/span> <\/span>static<\/span> <\/span>boolean<\/span> <\/span>validateCoords<\/span>(<\/span>Top<\/span>,<\/span> <\/span>Bottom<\/span>)<\/span>{<\/span>
    <\/span>if<\/span>(<\/span>Top<\/span>.<\/span>getLine<\/span>(<\/span>)<\/span> <\/span>><\/span> <\/span>Bottom<\/span>.<\/span>getLine<\/span>(<\/span>)<\/span>)<\/span> <\/span>{<\/span>
      <\/span>return<\/span> <\/span>false<\/span>
    <\/span>}<\/span>
    <\/span>if<\/span>(<\/span>Top<\/span>.<\/span>getLine<\/span>(<\/span>)<\/span> <\/span>==<\/span> <\/span>Bottom<\/span>.<\/span>getLine<\/span>(<\/span>)<\/span>)<\/span>{<\/span>
      <\/span>if<\/span>(<\/span>Top<\/span>.<\/span>getColumn<\/span>(<\/span>)<\/span> <\/span>>=<\/span> <\/span>Bottom<\/span>.<\/span>getColumn<\/span>(<\/span>)<\/span> <\/span>)<\/span>{<\/span>
        <\/span>return<\/span> <\/span>false<\/span>
      <\/span>}<\/span>
    <\/span>}<\/span>
    <\/span>return<\/span> <\/span>true<\/span>
  <\/span>}<\/span>
  
  <\/span>private<\/span> <\/span>static<\/span> <\/span>File<\/span> <\/span>openFile<\/span>(<\/span>filename<\/span>)<\/span>{<\/span>
    <\/span>File<\/span> <\/span>fileObject<\/span> <\/span>=<\/span> <\/span>new<\/span> <\/span>File<\/span>(<\/span>filename<\/span>)<\/span>;<\/span>
    
    <\/span>if<\/span>(<\/span>  <\/span>!<\/span> <\/span>(<\/span>fileObject<\/span>.<\/span>exists<\/span>(<\/span>)<\/span> <\/span>&&<\/span> <\/span>fileObject<\/span>.<\/span>isFile<\/span>(<\/span>)<\/span> <\/span>&&<\/span> 
        <\/span>fileObject<\/span>.<\/span>canRead<\/span>(<\/span>)<\/span> <\/span>&&<\/span> <\/span>!<\/span>(<\/span>fileObject<\/span>.<\/span>isDirectory<\/span>(<\/span>)<\/span>)<\/span>)<\/span>)<\/span>{<\/span>
        <\/span>println<\/span> <\/span>"<\/span>Error Reading File<\/span>"<\/span><\/span>
        <\/span>return<\/span> <\/span>null<\/span>
    <\/span>}<\/span>else<\/span>{<\/span>
      <\/span>return<\/span> <\/span>fileObject<\/span>
    <\/span>}<\/span>
  <\/span>}<\/span>
  
  <\/span>public<\/span> <\/span>static<\/span> <\/span>String<\/span> <\/span>readPartsOfAFile<\/span>(<\/span>filename<\/span>,<\/span> <\/span>Top<\/span>,<\/span> <\/span>Bottom<\/span>)<\/span>{<\/span>
    
    <\/span>if<\/span>(<\/span>!<\/span>validateCoords<\/span>(<\/span>Top<\/span>,<\/span> <\/span>Bottom<\/span>)<\/span>)<\/span>{<\/span>
      <\/span>return<\/span> <\/span>"<\/span>IMPOSSIBLE COORDINATES<\/span>"<\/span><\/span>
    <\/span>}<\/span>
    
    <\/span>int<\/span> <\/span>LineCounter<\/span> <\/span>=<\/span> <\/span>0<\/span>
    <\/span>StringBuilder<\/span> <\/span>sb<\/span> <\/span>=<\/span> <\/span>new<\/span> <\/span>StringBuilder<\/span>(<\/span>)<\/span>
    
    <\/span>try<\/span>{<\/span>
      <\/span>File<\/span> <\/span>fileObject<\/span> <\/span>=<\/span> <\/span>openFile<\/span>(<\/span>filename<\/span>)<\/span>
      <\/span>String<\/span> <\/span>LineDelimiter<\/span> <\/span>=<\/span> <\/span>getLineDelimiter<\/span>(<\/span>fileObject<\/span>)<\/span>
      
      <\/span>int<\/span> <\/span>TopLine<\/span> <\/span>=<\/span> <\/span>Top<\/span>.<\/span>getLine<\/span>(<\/span>)<\/span>-<\/span>1<\/span>
      <\/span>int<\/span> <\/span>BottomLine<\/span> <\/span>=<\/span> <\/span>Bottom<\/span>.<\/span>getLine<\/span>(<\/span>)<\/span>-<\/span>1<\/span>
      
      <\/span>def<\/span> <\/span>LineArray<\/span> <\/span>=<\/span> <\/span>fileObject<\/span>.<\/span>readLines<\/span>(<\/span>)<\/span>.<\/span>getAt<\/span>(<\/span>TopLine<\/span>..<\/span>BottomLine<\/span>)<\/span>
  
      <\/span>LineArray<\/span>.<\/span>each<\/span>{<\/span>line<\/span> <\/span>-><\/span>
        <\/span>LineCounter<\/span>++<\/span>
        <\/span>if<\/span>(<\/span>TopLine<\/span> <\/span>==<\/span> <\/span>BottomLine<\/span>)<\/span>{<\/span>
          <\/span>return<\/span> <\/span>sb<\/span>.<\/span>append<\/span>(<\/span>line<\/span>[<\/span>Top<\/span>.<\/span>getColumn<\/span>(<\/span>)<\/span>..<\/span>Bottom<\/span>.<\/span>getColumn<\/span>(<\/span>)<\/span>]<\/span>)<\/span>
        <\/span>}<\/span>
        <\/span>else<\/span> <\/span>if<\/span>(<\/span>LineCounter<\/span> <\/span>==<\/span> <\/span>1<\/span>)<\/span>{<\/span>
          <\/span>sb<\/span>.<\/span>append<\/span>(<\/span>line<\/span>[<\/span>Top<\/span>.<\/span>getColumn<\/span>(<\/span>)<\/span>..<\/span>-<\/span>1<\/span>]<\/span> <\/span>+<\/span> <\/span>LineDelimiter<\/span>)<\/span>
        <\/span>}<\/span>
        <\/span>else<\/span> <\/span>if<\/span>(<\/span>LineCounter<\/span> <\/span>==<\/span> <\/span>LineArray<\/span>.<\/span>size<\/span>(<\/span>)<\/span>)<\/span>{<\/span>
          <\/span>sb<\/span>.<\/span>append<\/span>(<\/span>line<\/span>[<\/span>0<\/span>..<\/span>Bottom<\/span>.<\/span>getColumn<\/span>(<\/span>)<\/span>]<\/span> <\/span>+<\/span> <\/span>LineDelimiter<\/span>)<\/span>
          <\/span>return<\/span> <\/span>sb<\/span>
        <\/span>}<\/span>
        <\/span>else<\/span>{<\/span>
          <\/span>sb<\/span>.<\/span>append<\/span>(<\/span>line<\/span> <\/span>+<\/span> <\/span>LineDelimiter<\/span>)<\/span>
        <\/span>}<\/span>
      <\/span>}<\/span>
    <\/span>}<\/span>  
    <\/span>catch<\/span>(<\/span>Exception<\/span> <\/span>e<\/span>)<\/span>{<\/span>
      <\/span>return<\/span> <\/span>"<\/span>Couldn\'t read file contents at this position<\/span>"<\/span><\/span>
    <\/span>}<\/span>
    <\/span>return<\/span> <\/span>sb<\/span>.<\/span>toString<\/span>(<\/span>)<\/span>
  
  <\/span>}<\/span>
  
  <\/span>public<\/span> <\/span>static<\/span> <\/span>final<\/span> <\/span>String<\/span> <\/span>DEFAULT_LINE_DELIMITER<\/span> <\/span>=<\/span> <\/span>System<\/span>.<\/span>getProperty<\/span>(<\/span>"<\/span>line.separator<\/span>"<\/span><\/span>)<\/span>;<\/span>
  
  <\/span>public<\/span> <\/span>static<\/span> <\/span>String<\/span> <\/span>getLineDelimiter<\/span>(<\/span>File<\/span> <\/span>file<\/span>)<\/span>{<\/span>

    <\/span>def<\/span> <\/span>content<\/span> <\/span>=<\/span> <\/span>file<\/span>.<\/span>getText<\/span>(<\/span>)<\/span>
    <\/span>def<\/span> <\/span>lineDelimiter<\/span> <\/span>=<\/span> <\/span>DEFAULT_LINE_DELIMITER<\/span>
    <\/span>int<\/span> <\/span>index<\/span> <\/span>=<\/span> <\/span>0<\/span>
    <\/span>for<\/span> <\/span>(<\/span>currentChar<\/span> <\/span>in<\/span> <\/span>content<\/span>)<\/span> <\/span>{<\/span>
      <\/span>if<\/span>(<\/span>currentChar<\/span> <\/span>==<\/span> <\/span>\'<\/span>\\r<\/span>\'<\/span><\/span>)<\/span>{<\/span>
        <\/span>if<\/span>(<\/span>content<\/span>[<\/span>index<\/span>+<\/span>1<\/span>]<\/span> <\/span>==<\/span> <\/span>\'<\/span>\\n<\/span>\'<\/span><\/span>)<\/span>{<\/span> 
          <\/span>lineDelimiter<\/span> <\/span>=<\/span> <\/span>"<\/span>\\r<\/span>\\n<\/span>"<\/span><\/span>
          <\/span>break<\/span>
        <\/span>}<\/span>
        <\/span>lineDelimiter<\/span> <\/span>=<\/span>  <\/span>"<\/span>\\r<\/span>"<\/span><\/span>    <\/span>//mac os 9<\/span>
        <\/span>break<\/span>
      <\/span>}<\/span>
      <\/span>else<\/span> <\/span>if<\/span>(<\/span>currentChar<\/span> <\/span>==<\/span> <\/span>\'<\/span>\\n<\/span>\'<\/span><\/span>)<\/span>{<\/span>
        <\/span>lineDelimiter<\/span> <\/span>=<\/span> <\/span>"<\/span>\\n<\/span>"<\/span><\/span>
        <\/span>break<\/span>
      <\/span>}<\/span>
      <\/span>index<\/span>++<\/span>;<\/span>
    <\/span>}<\/span>
    <\/span>return<\/span> <\/span>lineDelimiter<\/span>;<\/span>
  <\/span>}<\/span>
<\/span>}<\/span><\/pre><\/td>\n<\/tr><\/table>\n\n");