root/lex/trunk/jsp/dump.jsp

Revision 394, 7.1 kB (checked in by chris, 3 years ago)

Fix problem with being unable to create an LS for clauses with no
predicate, e.g. Gen 3,5(f).

Reorganised jsp directory to separate includes and css from jsp pages.

Renamed lsedit.jsp to lexicon.jsp.

Added a controller for lexicon.jsp.

Moved tests into their own package.

Separated finished and unfinished tests to make it easier to run all the
finished and working ones.

Line 
1 <%@ include file="include/setup.jsp" %>
2 <%@ include file="include/auth.jsp" %>
3
4 <% String pageTitle = "Emdros Database Dump"; %>
5 <%@ include file="include/header.jsp" %>
6
7 <%@ page import="java.util.Enumeration" %>
8 <%@ page import="java.util.Hashtable" %>
9 <%@ page import="java.util.Vector" %>
10 <%@ page import="java.util.TreeSet" %>
11 <%@ page import="java.util.SortedSet" %>
12 <%@ page import="java.util.Iterator" %>
13 <%@ page import="jemdros.*" %>
14 <%@ page import="com.qwirx.lex.*" %>
15 <%@ page import="com.qwirx.db.sql.*" %>
16 <%@ page import="com.qwirx.lex.emdros.*" %>
17        
18 <%@ include file="include/navclause_head.jsp" %>
19 <%@ include file="include/navclause_body.jsp" %>
20
21 <%
22         if (username.equals("anonymous"))
23         {
24                 %>Sorry, you must log in to access this feature.<%
25                 return;
26         }
27
28         class MonadRange
29         {
30                 int first, last;
31         }
32        
33         class DbObject
34         {
35                 String type;
36                 int id;
37                 int firstMonad, lastMonad;
38                 MonadRange [] monadRanges;
39                 Hashtable features;
40         }
41
42         int left = 728, right = 734;
43
44         int clauseId = navigator.getClauseId();
45
46         Sheaf sheaf = emdros.getSheaf
47         (
48                 "SELECT ALL OBJECTS IN " +
49                 emdros.intersect(userTextAccessSet, min_m, max_m) +
50                 " WHERE [clause self = "+clauseId+"]"
51         );
52
53         MatchedObject clause = null;
54         {
55                 SheafConstIterator sci = sheaf.const_iterator();
56                 if (sci.hasNext())
57                 {
58                         Straw straw = sci.next();
59                         StrawConstIterator swci = straw.const_iterator();
60                         if (swci.hasNext())
61                         {
62                                 clause = swci.next();
63                         }
64                 }
65         }
66
67         if (clause != null)
68         {
69                 Table monads = emdros.getTable
70                         ("GET MONADS FROM OBJECT WITH ID_D = "+clause.getID_D()+" "+
71                          "[clause]");
72                 TableRow tr = monads.iterator().next();
73                 left  = Integer.parseInt(tr.getColumn(2));
74                 right = Integer.parseInt(tr.getColumn(3));
75         }
76         else
77         {
78                 %>Null clause!<%
79         }
80        
81         Table objects = emdros.getTable("SELECT OBJECTS HAVING MONADS IN " +
82                 "{" + left + "-" + right + "} [ALL] GO");
83
84         int numObjects = objects.size();
85         DbObject [] dbObjects = new DbObject [numObjects];
86         TableIterator ti = objects.iterator();
87
88         // collect information about each object, specifically the set of monads
89         // which fall within our range (between left and right borders)
90
91         for (int objectNum = 0; objectNum < numObjects; objectNum++)
92         {
93                 TableRowIterator tri = ti.next().iterator();
94
95                 DbObject object = new DbObject();
96                 object.type = tri.next();
97                 object.firstMonad = Integer.parseInt(tri.next());
98
99                 String objectIdString = tri.next();
100                 object.id = Integer.parseInt(objectIdString);
101                
102                 Table monad_ranges = emdros.getTable("GET MONADS FROM OBJECTS " +
103                         "WITH ID_Ds = "+objectIdString+" ["+object.type+"] GO");
104                
105                 int numRanges = monad_ranges.size();
106                 Vector monadRangeVector = new Vector();
107                
108                 TableIterator mi = monad_ranges.iterator();
109                 for (int rangeNum = 0; rangeNum < numRanges; rangeNum++)
110                 {
111                         TableRowIterator mri = mi.next().iterator();
112                         mri.next(); // skip the object id_d, we know what it is
113                         MonadRange range = new MonadRange();
114                         range.first = Integer.parseInt(mri.next());
115                         range.last = Integer.parseInt(mri.next());
116                         if (range.last >= left && range.first <= right)
117                         {
118                                 if (range.first < left)
119                                         range.first = left;
120                                 if (range.last > right)
121                                         range.last = right;
122                                 if (range.last - range.first >= 0)
123                                         monadRangeVector.add(range);
124                         }
125                 }
126
127                 if (monadRangeVector.size() == 0)
128                 {
129                         throw new RuntimeException("no valid ranges in object ["+
130                                 object.type+" "+object.id+"]");
131                 }
132                
133                 object.monadRanges = new MonadRange[monadRangeVector.size()];
134                 monadRangeVector.copyInto(object.monadRanges);
135
136                 String query = "SELECT FEATURES FROM [" +
137                         object.type + "]";
138
139                 %>
140                 <!-- <p><%= object.type %> '<%= query %>'</p> -->
141                 <%
142                
143                 Table features = emdros.getTable(query);
144                 int numFeatures = features.size();
145                 String [] featureNames = new String [numFeatures];
146                 StringBuffer featureValueQuery = new StringBuffer("GET FEATURES ");
147
148                 {
149                         TableIterator ti2 = features.iterator();
150                         while (ti2.hasNext())
151                         {
152                                 TableRow tr = ti2.next();
153                                 %>
154                                 <!--<p><%= object.type %> <%= tr.getColumn(1) %></p>-->
155                                 <%
156                         }
157                 }
158                
159                 {
160                         TableIterator fni = features.iterator();
161                         int index = 0;
162                         for (int i = 0; i < numFeatures; i++)
163                         {
164                                 TableRowIterator fnri = fni.next().iterator();
165                                 String name = fnri.next();
166                                 if (i < numFeatures - 1)
167                                 {
168                                         featureValueQuery.append(name+",");
169                                 }
170                                 else
171                                 {
172                                         featureValueQuery.append(name);
173                                 }
174                         }
175                 }
176                
177                 featureValueQuery.append(" FROM OBJECTS WITH ID_DS = "+object.id+
178                         " ["+object.type+"] GO");
179                 object.features = new Hashtable();
180                 Table featureValues = emdros.getTable(featureValueQuery.toString());
181
182                 TableIterator fvi;
183                 TableIterator fni = features.iterator();
184                 fvi = featureValues.iterator();
185                 TableRowIterator fvri = fvi.next().iterator();
186                 fvri.next(); // skip the id_d column of GET FEATURES result
187                
188                 while (fni.hasNext())
189                 {
190                         TableRowIterator fnri = fni.next().iterator();
191                         String name = fnri.next();
192                         String value = fvri.next();
193                         object.features.put(name, value);
194                 }
195                
196                 dbObjects[objectNum] = object;
197         }
198        
199         if (dbObjects.length > 0)
200         {
201                 %>
202                 <table border>
203                 <tr>
204                 <th>type</th>
205                 <%
206                
207                 for (int i = left; i <= right; i++)
208                 {
209                         %>
210                         <th><%= i %></th>
211                         <%
212                 }
213                
214                 %>
215                 </tr>
216                 <%
217                
218                 for (int objectNum = 0; objectNum < dbObjects.length; objectNum++)
219                 {
220                         DbObject object = dbObjects[objectNum];
221                         Object [] featureNames = new TreeSet(object.features.keySet())
222                                 .toArray();
223                         MonadRange [] ranges = object.monadRanges;
224                        
225                         for (int featureNum = -1; featureNum < featureNames.length; featureNum++)
226                         {
227                                 String featureName;
228
229                                 if (featureNum == -1)
230                                 {
231                                         featureName = null;
232                                 }
233                                 else
234                                 {
235                                         featureName = (String)( featureNames[featureNum] );
236                                 }
237                                
238                                 /*
239                                 if (featureName != null &&
240                                         ! featureName.equals("lexeme")) {
241                                         continue;
242                                 }
243                                 */
244                                
245                                 if (featureName == null)
246                                 {
247                                         %>
248                                         <tr>
249                                         <td><b><%= object.type %></b></td>
250                                         <%
251                                 }
252                                 else
253                                 {
254                                         %>
255                                         <tr>
256                                         <td>&nbsp;&nbsp;<i><%= featureName %></i></td>
257                                         <%
258                                 }
259                                
260                                 String featureValue = null;
261                                 if (featureNum >= 0)
262                                         featureValue =
263                                                 ((String)( object.features.get(featureName) ))
264                                                 .replaceAll("<", "&lt;")
265                                                 .replaceAll(">", "&gt;");
266                
267                                 /* pad up to the first monad */         
268                                 MonadRange firstRange = ranges[0];
269                                 if (firstRange.first > left)
270                                 {
271                                         %>
272                                         <td colspan="<%= firstRange.first - left %>"/>
273                                         <%
274                                 }
275                                
276                                 for (int rangeNum = 0; rangeNum < ranges.length; rangeNum++)
277                                 {
278                                         MonadRange range = ranges[rangeNum];
279                                        
280                                         %>
281                                         <td bgcolor="#E0E0E0" colspan="<%= range.last - range.first + 1 %>"><%
282                                         if (featureNum >= 0)
283                                         {
284                                                 %><%= featureValue %><%
285                                         }
286                                         else
287                                         {
288                                                 %><%= object.id %><%
289                                         }
290                                         %></td>
291                                         <%
292                                        
293                                         if (rangeNum < ranges.length - 1)
294                                         {
295                                                 %>
296                                                 <td colspan="<%= ranges[rangeNum+1].first - range.last - 1 %>"/>
297                                                 <%
298                                         }
299                                 }
300                                
301                                 MonadRange lastRange = ranges[ranges.length-1];
302                                 if (lastRange.last < right)
303                                 {
304                                         %>
305                                         <td colspan="<%= right - lastRange.last %>"/>
306                                         <%
307                                 }
308                         }
309                        
310                         %>
311                         </tr>
312                         <%
313                 }
314                
315                 %>
316                 </table>
317                 <%
318         }
319         else
320         {
321                 %>No objects found<%
322         }
323 %>
324 <%@ include file="include/footer.jsp" %>
Note: See TracBrowser for help on using the browser.