Changeset 394

Show
Ignore:
Timestamp:
08/14/09 10:38:59 (3 years ago)
Author:
chris
Message:

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.

Files:

Legend:

Unmodified
Added
Removed
Modified
Copied
Moved
  • lex/trunk/.classpath

    r393 r394  
    1818        <classpathentry path="/httpunit-svn" combineaccessrules="false" kind="src"/> 
    1919        <classpathentry path="jsp/WEB-INF/lib/org.aptivate.database.jar" kind="lib"/> 
    20         <classpathentry path="jsp/WEB-INF/lib/org.aptivate.webutils.jar" kind="lib"/> 
     20        <classpathentry sourcepath="/aptivate-webutils" path="jsp/WEB-INF/lib/org.aptivate.webutils.jar" kind="lib"/> 
    2121        <classpathentry path="jsp/WEB-INF/classes" kind="output"/> 
    2222</classpath> 
  • lex/trunk/.settings/org.eclipse.core.resources.prefs

    r365 r394  
    1 #Sat Jan 05 16:55:05 CET 2008 
     1#Thu Aug 13 12:15:54 BST 2009 
    22eclipse.preferences.version=1 
    33encoding//jsp/attributes.jsp=UTF-8 
    4 encoding//jsp/auth.jsp=UTF-8 
    54encoding//jsp/clause.jsp=UTF-8 
    6 encoding//jsp/cleanup.jsp=UTF-8 
    75encoding//jsp/dump.jsp=UTF-8 
    86encoding//jsp/error.jsp=UTF-8 
    97encoding//jsp/export.jsp=UTF-8 
    10 encoding//jsp/footer.jsp=UTF-8 
    118encoding//jsp/gen-export.jsp=UTF-8 
    12 encoding//jsp/header2.jsp=UTF-8 
     9encoding//jsp/include/auth.jsp=UTF-8 
     10encoding//jsp/include/cleanup.jsp=UTF-8 
     11encoding//jsp/include/footer.jsp=UTF-8 
     12encoding//jsp/include/header.jsp=UTF-8 
     13encoding//jsp/include/navclause_body.jsp=UTF-8 
     14encoding//jsp/include/navclause_head.jsp=UTF-8 
     15encoding//jsp/include/setup.jsp=UTF-8 
    1316encoding//jsp/index.jsp=UTF-8 
     17encoding//jsp/lexicon.jsp=UTF-8 
    1418encoding//jsp/login.jsp=UTF-8 
    15 encoding//jsp/lsedit.jsp=UTF-8 
    16 encoding//jsp/navclause.jsp=UTF-8 
    1719encoding//jsp/parse.jsp=UTF-8 
    1820encoding//jsp/published.jsp=UTF-8 
  • lex/trunk/jsp/clause.jsp

    r374 r394  
    11<% String pageTitle = "Text Browser"; %> 
    2 <%@ include file="header2.jsp" %> 
     2 
    33<%@ page import="java.util.*" %> 
    44<%@ page import="java.util.regex.*" %> 
     
    1717<%@ page import="net.didion.jwnl.data.Synset" %> 
    1818 
    19 <script type="text/javascript"><!-- 
    20  
    21         function enableEditButton() 
     19<%@ include file="include/setup.jsp" %> 
     20<%@ include file="include/auth.jsp" %> 
     21<%@ include file="include/navclause_head.jsp" %> 
     22 
     23<% 
     24        ClauseController controller = new ClauseController(request, emdros, sql, 
     25                navigator);      
     26        if (controller.processRedirects(response)) 
    2227        { 
    23                 if (document.forms.changels == null) 
    24                 { 
    25                         return; 
    26                 } 
    27                  
    28                 var lsselect = document.forms.changels.lsid; 
    29                 var editform = document.forms.editls; 
    30                 if (editform == null || editform.submit == null) 
    31                 { 
    32                         return; 
    33                 } 
    34                          
    35                 var sellsid  = -1; 
    36                 if (lsselect.selectedIndex > 0) 
    37                 { 
    38                         sellsid = lsselect.options[lsselect.selectedIndex].value; 
    39                 }        
    40                  
    41                 editform.submit.disabled = (sellsid != editform.lsid.value); 
    42                 return true; 
     28                return; 
    4329        } 
    44  
    45         function enableChangeButton(button, oldValue, selectBox) 
    46         { 
    47                 if (button == null) return; 
    48                 var newValue = selectBox.options[selectBox.selectedIndex].value; 
    49                 button.disabled = (newValue == oldValue); 
    50                 return true; 
    51         } 
    52          
    53 //--></script> 
     30%> 
     31<%@ include file="include/header.jsp" %> 
     32 
     33<script type="text/javascript" src="js/clause.js"></script> 
    5434 
    5535<style type="text/css"> 
     
    6040</style> 
    6141 
    62 <%@ include file="auth.jsp" %> 
    63  
    64 <%@ include file="navclause.jsp" %> 
     42<%@ include file="include/navclause_body.jsp" %> 
    6543 
    6644<% 
    67         ClauseController controller = new ClauseController(request, emdros, sql, 
    68                navigator);      
     45        controller.processBody(); 
     46         
    6947        MatchedObject clause = controller.getClause(); 
    7048                  
     
    179157                        <form name="changels" method="POST"> 
    180158                        Choose logical structure: 
    181                         <select name="lsid" onChange="enableEditButton();  
    182                         return enableChangeButton(lssave,<%= 
    183                                 controller.getSelectedLogicalStructureId() 
    184                         %>,lsid)"> 
    185                         <option value="0" <%= 
    186                                 (controller.getSelectedLogicalStructureId() == 0) 
    187                                         ? " SELECTED" : "" %>> 
    188                                 Not specified 
    189                         </option> 
    190                         <% 
    191  
    192                         try  
    193                         { 
    194                                 PreparedStatement stmt = sql.prepareSelect 
    195                                         ("SELECT ID,Structure,Syntactic_Args " + 
    196                                          "FROM lexicon_entries WHERE Lexeme = ?"); 
    197                                 stmt.setString(1, controller.getPredicateText()); 
    198                                  
    199                                 ResultSet rs = sql.select(); 
    200                                 while (rs.next())  
    201                                 { 
    202                                         int    thisLsId      = rs.getInt("ID"); 
    203                                         String thisStructure = rs.getString("Structure"); 
    204                                         int    thisNumSMRs   = rs.getInt("Syntactic_Args"); 
    205                                          
    206                                         %> 
    207                         <option value="<%= 
    208                                 thisLsId 
    209                         %>"<%= 
    210                                 thisLsId == controller.getSelectedLogicalStructureId() 
    211                                         ? " SELECTED" : "" 
    212                         %>><%= 
    213                                 thisStructure == null 
    214                                 ? "(undefined structure "+thisLsId+")" 
    215                                 : (thisStructure 
    216                                                 .replaceAll("<", "&lt;") 
    217                                                 .replaceAll(">", "&gt;")) 
    218                         %> 
    219                                         <% 
    220                                 } 
    221                         }  
    222                         catch (DatabaseException ex)  
    223                         { 
    224                                 %><%= ex %><% 
    225                         }  
    226                         finally  
    227                         { 
    228                                 sql.finish(); 
    229                         } 
    230                  
    231                         %> 
    232                         <option value="add" <%= 
    233                                 selLsIdString != null && selLsIdString.equals("add") 
    234                                 ? " SELECTED" : "" 
    235                         %>>Add new... 
    236                         </select> 
     159                        <%= controller.getLogicalStructureSelector().toString() %> 
    237160                        <input type="submit" name="lssave" value="Change"> 
    238161                        </form> 
     
    249172                                %> 
    250173                <td> 
    251                         <form name="editls" method="get" action="lsedit.jsp"> 
     174                        <form name="editls" method="get" action="lexicon.jsp"> 
    252175                        <input type="hidden" name="lsid" value="<%= 
    253176                                controller.getSelectedLogicalStructureId() 
     
    401324</form> 
    402325 
    403 <%@ include file="footer.jsp" %> 
     326<%@ include file="include/footer.jsp" %> 
  • lex/trunk/jsp/dump.jsp

    r325 r394  
     1<%@ include file="include/setup.jsp" %> 
     2<%@ include file="include/auth.jsp" %> 
     3 
    14<% String pageTitle = "Emdros Database Dump"; %> 
    2 <%@ include file="header2.jsp" %> 
     5<%@ include file="include/header.jsp" %> 
    36 
    47<%@ page import="java.util.Enumeration" %> 
     
    1316<%@ page import="com.qwirx.lex.emdros.*" %> 
    1417         
    15 <%@ include file="auth.jsp" %> 
    16  
    17 <%@ include file="navclause.jsp" %> 
     18<%@ include file="include/navclause_head.jsp" %> 
     19<%@ include file="include/navclause_body.jsp" %> 
    1820 
    1921<% 
     
    320322        } 
    321323%> 
    322 </body></html> 
    323 <%@ include file="cleanup.jsp" %> 
     324<%@ include file="include/footer.jsp" %> 
  • lex/trunk/jsp/error.jsp

    r239 r394  
    2929</pre> 
    3030 
    31 <%@ include file="footer.jsp" %> 
     31<%@ include file="include/footer.jsp" %> 
  • lex/trunk/jsp/index.jsp

    r345 r394  
     1<%@ include file="include/setup.jsp" %> 
     2 
    13<% String pageTitle = "Home Page"; %> 
    2 <%@ include file="header2.jsp" %> 
     4<%@ include file="include/header.jsp" %> 
    35 
    46<p>You should really start at the <a href="clause.jsp">text browser</a>.</p> 
     
    1214</ul> 
    1315 
    14 <%@ include file="footer.jsp" %> 
     16<%@ include file="include/footer.jsp" %> 
  • lex/trunk/jsp/js/lsedit.js

    r304 r394  
    1 function doFilter(inputbox, list, source)  
     1function doFilter(inputbox, list, source, originalValue)  
    22{ 
    33        if (source == null) return; 
    44         
    55        var query = inputbox.value; 
    6         var oldid = -1; 
    7          
    8         if (list.selectedIndex >= 0) 
    9         { 
    10                 oldid = list.options[list.selectedIndex].value; 
    11         } 
     6        var oldid = originalValue; 
    127         
    138        list.options.length = 0; 
  • lex/trunk/jsp/lexicon.jsp

    r312 r394  
     1<%@ include file="include/setup.jsp" %> 
     2<%@ include file="include/auth.jsp" %> 
     3 
    14<% String pageTitle = "Edit Logical Structure"; %> 
    2 <%@ include file="header2.jsp" %> 
    3  
     5<%@ include file="include/header.jsp" %> 
     6 
     7<%@ page import="java.util.Arrays" %> 
    48<%@ page import="java.util.Collections" %> 
    59<%@ page import="java.util.Map" %> 
     
    1317<%@ page import="java.sql.*" %> 
    1418<%@ page import="jemdros.*" %> 
     19<%@ page import="org.aptivate.web.controls.*" %> 
    1520<%@ page import="com.qwirx.lex.*" %> 
    1621<%@ page import="com.qwirx.db.sql.*" %> 
     22<%@ page import="com.qwirx.lex.controller.LexiconController" %> 
    1723<%@ page import="com.qwirx.lex.emdros.*" %> 
    1824<%@ page import="com.qwirx.lex.lexicon.*" %> 
     
    2430</style> 
    2531 
    26 <%@ include file="auth.jsp" %> 
    27  
    2832<%       
    29         class LogicalStructureList extends Lexeme.Visitor 
     33        LexiconController controller = new LexiconController(request, emdros, sql);      
     34         
     35        List<String> errors = controller.getErrorMessages(); 
     36        if (errors.size() > 0) 
    3037        { 
    31                 private JspWriter out; 
    32                 private int selected_id, exclude_domain_id; 
    33                  
    34                 LogicalStructureList(JspWriter out,  
    35                         int selected_id, int exclude_domain_id,  
    36                         Lexeme root) 
    37                 { 
    38                         super(root); 
    39                         this.out = out; 
    40                         this.selected_id = selected_id; 
    41                         this.exclude_domain_id = exclude_domain_id; 
    42                 } 
    43                  
    44         protected void visit(Lexeme e, String parentPath) throws IOException  
    45         { 
    46                         if (e.id == exclude_domain_id) return; 
    47                         super.visit(e, parentPath); 
    48         } 
    49          
    50                 protected void output(Lexeme e, String fullPath, String desc) 
    51                 throws IOException 
    52                 { 
    53                         if (desc.length() > 60) 
    54                         { 
    55                                 desc = desc.substring(0, 60) + "..."; 
    56                         } 
    57                          
    58                         if (e.surface != null) 
    59                         { 
    60                                 desc += ": " + e.surface + ""; 
    61                         } 
    62                          
    63                         String ls = e.getLogicalStructure(); 
    64                         if (ls != null)  
    65                         { 
    66                                 desc += ": " + ls; 
    67                         } 
    68                          
    69                         desc = desc.replaceAll("&", "&amp;") 
    70                                 .replaceAll("<", "&lt;") 
    71                                 .replaceAll(">", "&gt;"); 
    72                                  
    73                  
    74                         %> 
    75                         <option <%= selected_id == e.id ? "selected=\"selected\"" : "" 
    76                         %> value="<%= e.id == 0 ? "BadID" : (e.id+"") %>"> 
    77                         <%= fullPath %> <%= desc %></option> 
    78                         <% 
    79                 }                
     38                %> 
     39                <div id="error_message"> 
     40                        <ul> 
     41                                <% for (String error : errors) { %> 
     42                                        <li><%= error %></li> 
     43                                <% } %> 
     44                        </ul> 
     45                </div> 
     46                <% 
    8047        } 
    8148 
    82         class LogicalStructureArray extends Lexeme.Visitor 
    83         { 
    84                 private JspWriter out; 
    85                 private int selected_id, exclude_domain_id; 
    86  
    87                 LogicalStructureArray(JspWriter out,  
    88                         int selected_id, Lexeme root) 
    89                 { 
    90                         super(root); 
    91                         this.out = out; 
    92                         this.selected_id = selected_id; 
    93                 } 
    94  
    95                 protected void output(Lexeme e, String fullPath, String desc) 
    96                 throws IOException 
    97                 { 
    98                         String ls = e.getLogicalStructure(); 
    99  
    100                         if (e.surface != null && ! e.surface.equals("")) 
    101                         { 
    102                                 desc += ": " + e.surface + ""; 
    103                         } 
    104                                                  
    105                         if (ls != null && ! ls.equals(""))  
    106                         { 
    107                                 desc += ": " + ls; 
    108                         } 
    109  
    110                         %> 
    111                         [ <%= e.id %>, "<%= fullPath %> <%= desc %>" ], 
    112                         <% 
    113                 }                
    114         } 
    115  
    116         int lsId = -1; 
    117         try { lsId = Integer.parseInt(request.getParameter("lsid")); } 
    118         catch (Exception e) { /* do nothing, use default */ } 
    119          
    120         // String current.surface = "", current.logic = ""; 
    121         // int domain_parent_id = 0; 
    122         // String current.label = "", current.desc = ""; 
    123          
    124         %><p><em><% 
    125          
    126         if (request.getParameter("createnew") != null) 
    127         { 
    128                 SqlChange ch = (SqlChange)sql.createChange(SqlChange.INSERT, 
    129                         "lexicon_entries", null); 
    130                 ch.setString("Domain_Desc",      "New Entry"); 
    131                 ch.execute(); 
    132                 lsId = ch.getInsertedRowId(); 
    133         } 
    134         else if (request.getParameter("savecopy") != null) 
    135         { 
    136                 throw new AssertionError("broken"); 
    137                 /* 
    138                 boolean createNew = false; 
    139                  
    140                 if (lsId <= 0)  
    141                         createNew = true; 
    142                 if (request.getParameter("savecopy") != null) 
    143                         createNew = true; 
    144                          
    145                 try { 
    146  
    147                         if (request.getParameter("surface") != null) 
    148                         { 
    149                                 ch.setString("Lexeme",       request.getParameter("surface")); 
    150                         } 
    151                         ch.setString("Structure",        request.getParameter("ls")); 
    152                         ch.setInt   ("Domain_Parent_ID", domain_parent_id); 
    153                         ch.setString("Domain_Label",     request.getParameter("dl")); 
    154                         ch.setString("Domain_Desc",      request.getParameter("dd")); 
    155                         ch.setString("Syntactic_Args",   request.getParameter("sa")); 
    156                         ch.execute(); 
    157                          
    158                         if (createNew) { 
    159                                 lsId = ((SqlChange)ch).getInsertedRowId(); 
    160                         } 
    161                 } catch (SQLException sqlEx) { 
    162                         %><%= sqlEx %><% 
    163                 } 
    164                 */ 
    165         } 
    166         else if (request.getParameter("delrepl") != null) 
    167         { 
    168                 try 
    169                 { 
    170                         int newLsId = Integer.parseInt(request.getParameter("newlsid")); 
    171                          
    172                         Sheaf sheaf = emdros.getSheaf 
    173                                 ("SELECT ALL OBJECTS "+ 
    174                                  "IN {" + emdros.getMinM() + "-" + emdros.getMaxM() + "} "+ 
    175                                  "WHERE [clause logical_struct_id = "+lsId+"]"); 
    176                          
    177                         SheafConstIterator sci = sheaf.const_iterator(); 
    178                         if (sci.hasNext()) { 
    179                                 Vector objectIds = new Vector(); 
    180          
    181                                 while (sci.hasNext()) { 
    182                                         Straw straw = sci.next(); 
    183                                         MatchedObject clause = straw.const_iterator().next(); 
    184                                         objectIds.add(new Integer(clause.getID_D())); 
    185                                 } 
    186  
    187                                 int [] objectIdArray = new int[objectIds.size()]; 
    188                                 for (int i = 0; i < objectIds.size(); i++) { 
    189                                         objectIdArray[i] =  
    190                                                 ((Integer)( objectIds.get(i) )).intValue(); 
    191                                 } 
    192                                  
    193                                 Change ch = emdros.createChange( 
    194                                         EmdrosChange.UPDATE, "clause", objectIdArray); 
    195                                 ch.setInt("logical_struct_id", newLsId); 
    196                                 ch.execute(); 
    197                         } 
    198  
    199                         sql.createChange(SqlChange.DELETE, 
    200                                 "lexicon_entries", "ID = "+lsId).execute(); 
    201                         lsId = newLsId; 
    202                 }  
    203                 catch (Exception e)  
    204                 { 
    205                         %><%= e %><% 
    206                 } 
    207         }  
    208         else if (request.getParameter("vcu") != null)  
    209         { 
    210                 // variable create or update 
    211                  
    212                 boolean createVar = false; 
    213                 int vid = 0; 
    214                 if (request.getParameter("vid") != null) { 
    215                         try { 
    216                                 vid = new Integer(request.getParameter("vid")).intValue(); 
    217                         } catch (NumberFormatException e) { 
    218                                 vid = 0; 
    219                         } 
    220                 } 
    221                 if (vid == 0) createVar = true; 
    222                  
    223                 try { 
    224                         String query =  
    225                                 "SELECT ID FROM lexicon_variables WHERE Name = ? "+ 
    226                                 "AND Lexeme_ID = ?"; 
    227  
    228                         if (!createVar) 
    229                                 query += " AND ID <> ?"; 
    230  
    231                         PreparedStatement stmt = sql.prepareSelect(query); 
    232                         stmt.setString(1, request.getParameter("vn")); 
    233                         stmt.setInt   (2, lsId); 
    234                         if (!createVar) 
    235                                 stmt.setInt(3, vid); 
    236  
    237                         ResultSet rs = sql.select(); 
    238                         boolean alreadyExists = rs.next(); 
    239                         sql.finish(); 
    240                          
    241                         if (alreadyExists) { 
    242                                 %> 
    243                                         Duplicate variable name  
    244                                         "<%= request.getParameter("vn") %>" 
    245                                 <% 
    246                         } else { 
    247                                 Change ch; 
    248                                  
    249                                 if (createVar) { 
    250                                         ch = sql.createChange(SqlChange.INSERT, 
    251                                                 "lexicon_variables", null); 
    252                                 } else { 
    253                                         ch = sql.createChange(SqlChange.UPDATE, 
    254                                                 "lexicon_variables", "ID = "+vid); 
    255                                 } 
    256  
    257                                 ch.setString("Name",      request.getParameter("vn")); 
    258                                 ch.setString("Value",     request.getParameter("vv")); 
    259                                 ch.setInt   ("Lexeme_ID", lsId); 
    260                                 ch.execute(); 
    261                         } 
    262                 } catch (DatabaseException sqlEx) { 
    263                         %><%= sqlEx %><% 
    264                 } 
    265         }  
    266         else if (request.getParameter("vd") != null)  
    267         { 
    268                 // variable delete  
    269                  
    270                 int vid = 0; 
    271  
    272                 if (request.getParameter("vid") != null) { 
    273                         try { 
    274                                 vid = new Integer(request.getParameter("vid")).intValue(); 
    275                         } catch (NumberFormatException e) { 
    276                                 vid = 0; 
    277                         } 
    278                 } 
    279  
    280                 if (vid != 0) { 
    281                         try { 
    282                                 sql.createChange(SqlChange.DELETE, 
    283                                         "lexicon_variables", "ID = "+vid).execute(); 
    284                         } catch (DatabaseException sqlEx) { 
    285                                 %><%= sqlEx %><% 
    286                         } 
    287                 } 
    288         } 
    289         else if (request.getParameter("dpid") != null) 
    290         { 
    291                 int domain_parent_id = new Integer(request.getParameter("dpid")) 
    292                         .intValue(); 
    293                                  
    294                 // parent hierarchy loop check 
    295  
    296                 if (domain_parent_id == lsId)  
    297                 { 
    298                         domain_parent_id = 0; 
    299                 } 
    300                  
    301                 if (domain_parent_id > 0)  
    302                 { 
    303                         int maxDepth = 20; 
    304                         int thisAncestor = domain_parent_id; 
    305                          
    306                         while (maxDepth > 0)  
    307                         { 
    308                                 try  
    309                                 { 
    310                                         PreparedStatement stmt = sql.prepareSelect 
    311                                                 ("SELECT Domain_Parent_ID "+ 
    312                                                 "FROM lexicon_entries "+ 
    313                                                 "WHERE ID = ?"); 
    314                                         stmt.setInt(1, thisAncestor); 
    315                                         ResultSet rs = sql.select(); 
    316                                         if (!rs.next()) { 
    317                                                 // parent tree has no path to root? 
    318                                                 domain_parent_id = 0; 
    319                                                 break; 
    320                                         } 
    321                                         thisAncestor = rs.getInt(1); 
    322                                         if (thisAncestor == 0) { 
    323                                                 // reached the root 
    324                                                 break; 
    325                                         } 
    326                                         if (thisAncestor == lsId) { 
    327                                                 // loop detected 
    328                                                 domain_parent_id = 0; 
    329                                                 break; 
    330                                         }                                                                
    331                                         maxDepth--; 
    332                                 } finally { 
    333                                         sql.finish(); 
    334                                 } 
    335                         } 
    336  
    337                         if (maxDepth == 0) { 
    338                                 %> 
    339                                 You cannot set the domain parent to one of this 
    340                                 object's children: that would create a loop! 
    341                                 <% 
    342                                 domain_parent_id = 0; 
    343                         } 
    344                 } 
    345                  
    346                 Change ch = sql.createChange(SqlChange.UPDATE, "lexicon_entries",  
    347                         "ID = " + lsId); 
    348                 ch.setInt("Domain_Parent_ID", domain_parent_id); 
    349                 ch.execute(); 
    350         } 
    351         else if (request.getParameter("dl") != null) 
    352         { 
    353                 Change ch = sql.createChange(SqlChange.UPDATE, "lexicon_entries",  
    354                         "ID = " + lsId); 
    355                 ch.setString("Domain_Label", request.getParameter("dl")); 
    356                 ch.execute(); 
    357         } 
    358         else if (request.getParameter("dd") != null) 
    359         { 
    360                 Change ch = sql.createChange(SqlChange.UPDATE, "lexicon_entries",  
    361                         "ID = " + lsId); 
    362                 ch.setString("Domain_Desc", request.getParameter("dd")); 
    363                 ch.execute(); 
    364         } 
    365         else if (request.getParameter("sa") != null) 
    366         { 
    367                 Change ch = sql.createChange(SqlChange.UPDATE, "lexicon_entries",  
    368                         "ID = " + lsId); 
    369                 ch.setString("Syntactic_Args",   request.getParameter("sa")); 
    370                 ch.execute(); 
    371         } 
    372         else if (request.getParameter("ls_save") != null) 
    373         { 
    374                 Lexeme lexeme = new Lexeme(sql); 
    375                  
    376                 if (lsId != -1) 
    377                 { 
    378                         lexeme = Lexeme.load(sql, lsId); 
    379                 } 
    380                  
    381                 lexeme.setCaused          (request.getParameter("ls_caused") != null); 
    382                 lexeme.setPunctual        (request.getParameter("ls_punct")  != null); 
    383                 lexeme.setHasResultState  (request.getParameter("ls_punct_result") != null && 
    384                                            request.getParameter("ls_punct_result").equals("1")); 
    385                 lexeme.setTelic           (request.getParameter("ls_telic") != null); 
    386                 lexeme.setDynamic         (request.getParameter("ls_dynamic") != null && 
    387                                            request.getParameter("ls_dynamic").equals("1")); 
    388                 lexeme.setHasEndpoint     (request.getParameter("ls_endpoint") != null && 
    389                                            request.getParameter("ls_endpoint").equals("1")); 
    390                  
    391                 String pred = request.getParameter("ls_pred"); 
    392                 if (pred != null && pred.equals("")) 
    393                 { 
    394                         pred = null; 
    395                 } 
    396                 lexeme.setPredicate(pred); 
    397                  
    398                 pred = request.getParameter("ls_pred_2"); 
    399                 if (pred != null && pred.equals("")) 
    400                 { 
    401                         pred = null; 
    402                 } 
    403                 lexeme.setResultPredicate(pred); 
    404  
    405                 String arg2 = request.getParameter("ls_arg_2"); 
    406                 if (arg2 != null && arg2.equals("")) 
    407                 { 
    408                         arg2 = null; 
    409                 } 
    410                 lexeme.setResultPredicateArg(arg2); 
    411                  
    412                 if (request.getParameter("ls_trel") != null) 
    413                 { 
    414                         if (request.getParameter("ls_trel").equals("")) 
    415                         { 
    416                                 lexeme.setThematicRelation(null); 
    417                         } 
    418                         else 
    419                         { 
    420                                 int i = Integer.parseInt(request.getParameter("ls_trel")); 
    421                                 lexeme.setThematicRelation(ThematicRelation.list()[i]); 
    422                         } 
    423                 } 
    424                  
    425                 lexeme.save(); 
    426                 lsId = lexeme.id; 
    427         }        
    428          
    429         %></em></p><% 
    430  
    43149        Lexeme root = Lexeme.getTreeRoot(sql); 
    432         Lexeme.Finder finder = new Lexeme.Finder(root, lsId); 
     50        Lexeme.Finder finder = new Lexeme.Finder(root, 
     51                controller.getLexeme().getID()); 
    43352        finder.visit(); 
    43453        Lexeme current = finder.getFoundLexeme(); 
     
    44160                [ "BadID", "New Structure..." ], 
    44261        <% 
    443                 new LogicalStructureArray(out, lsId, root).visit(); 
     62                controller.new LogicalStructureArray(out, root).visit(); 
    44463        %> 
    44564        ]; 
    44665 
    44766//--></script> 
    448 <script type="text/javascript" src="lsedit.js"></script> 
    449  
    450 <form name="nav" method="get" action="lsedit.jsp"> 
     67<script type="text/javascript" src="js/lsedit.js"></script> 
     68 
     69<form name="nav" method="get" action="lexicon.jsp"> 
    45170<table> 
    45271<tr class="nav1"><th colspan="4">Navigator</th></tr> 
    45372<tr class="nav2"> 
    454   <th>Filter</th> 
    455   <th>Lexicon Entry</th> 
    456   <th>Action</th> 
     73       <th>Filter</th> 
     74       <th>Lexicon Entry</th> 
     75       <th>Action</th> 
    45776</tr> 
    45877<tr class="nav1"> 
     
    46079                request.getParameter("filter") != null 
    46180                ? request.getParameter("filter") : "" 
    462         %>" onKeyUp="doFilter(filter, lsid, logics)" /></td> 
     81        %>" onKeyUp="doFilter(filter, lsid, logics, 
     82                <%= controller.getLexeme().getID() %>)" /></td> 
    46383        <td> 
    464                 <select name="lsid"> 
    465                 <option value="">New Structure...</option> 
    466                 <% new LogicalStructureList(out, lsId, -1, root).visit(); %> 
    467                 </select> 
     84                <% 
     85                LexiconController.LogicalStructureList navigateStructureLister = 
     86                        controller.new LogicalStructureList(-1, root); 
     87                navigateStructureLister.visit(); 
     88                List<String[]> navigateStructures = navigateStructureLister.getValues(); 
     89                navigateStructures.add(0, new String[]{"", "New Structure..."}); 
     90                %> 
     91                <%= new SelectBox("lsid", navigateStructures, request).toString() %> 
    46892        </td> 
    46993        <td> 
     
    477101 
    478102        var nav = document.forms.nav; 
    479         doFilter(nav.filter, nav.lsid, logics); 
     103        doFilter(nav.filter, nav.lsid, logics, <%= controller.getLexeme().getID() %>); 
    480104         
    481105//--></script> 
    482106 
    483107<% 
    484 if (lsId == -1) 
     108if (controller.getLexeme().getID() == -1) 
    485109{ 
    486110        %> 
     
    488112        <% 
    489113} 
    490 else if (lsId == 0) 
     114else if (controller.getLexeme().getID() == 0) 
    491115{ 
    492116        %> 
     
    510134        <tr> 
    511135                <td>ID</td> 
    512                 <td><%= lsId <= 0 ? "New" : (lsId + "") %></td> 
     136                <td><%= controller.getLexeme().getID() <= 0 ? "New" : 
     137                        (controller.getLexeme().getID() + "") %></td> 
    513138        </tr> 
    514139        <tr> 
     
    529154                <td>Syntactic Macroroles</td> 
    530155                <td> 
    531                         <form method="POST" action="lsedit.jsp"> 
    532                         <input type="hidden" name="lsid" value="<%= lsId %>"> 
    533                         <select name="sa"> 
    534                                 <option <%=  
    535                                         (current.numSyntacticArgs==-1)?"SELECTED":""  
    536                                 %> value="-1">Unknown/Not Specified 
    537                                 <option <%=  
    538                                         (current.numSyntacticArgs==0)?"SELECTED":""  
    539                                 %> value="0">None 
    540                                 <option <%=  
    541                                         (current.numSyntacticArgs==1)?"SELECTED":""  
    542                                 %> value="1">MR1 
    543                                 <option <%=  
    544                                         (current.numSyntacticArgs==2)?"SELECTED":""  
    545                                 %> value="2">MR2 
    546                                 <option <%=  
    547                                         (current.numSyntacticArgs==3)?"SELECTED":""  
    548                                 %> value="3">MR3 
    549                         </select> 
     156                        <form method="POST" action="lexicon.jsp"> 
     157                        <input type="hidden" name="lsid" value="<%=  
     158                                controller.getLexeme().getID() %>"> 
     159                        <% 
     160                        List<String[]> options = Arrays.asList(new String[][]{ 
     161                                new String[]{"-1", "Unknown/Not Specified"}, 
     162                                new String[]{"0",  "None"}, 
     163                                new String[]{"1",  "MR1"}, 
     164                                new String[]{"2",  "MR2"}, 
     165                                new String[]{"3",  "MR3"} 
     166                        }); 
     167                        SelectBox sb = new SelectBox("sa", options, request); 
     168                        sb.setDefaultValue("" + current.getNumSyntacticArgs()); 
     169                        %> 
     170                        <%= sb.toString() %> 
    550171                        <input type="submit" value="Save"/> 
    551172                        </form> 
     
    583204                                                        .replaceAll("<", "&lt;") 
    584205                                                        .replaceAll(">", "&gt;") + 
    585                                                 " (from <a href=\"lsedit.jsp?lsid=" + l.id +  
    586                                                 "\">" + l.id + "</a>)\n"); 
     206                                                " (from <a href=\"lexicon.jsp?lsid=" + l.getID() +  
     207                                                "\">" + l.getID() + "</a>)\n"); 
    587208                                } 
    588209                        %> 
     
    628249                                <td><%= v.name %></td> 
    629250                                <td><%= v.value %></td> 
    630                                 <td><a href="lsedit.jsp?lsid=<%= v.lexemeId %>"><%= v.lexemeId %></a></td> 
     251                                <td><a href="lexicon.jsp?lsid=<%= v.lexemeId %>"><%= v.lexemeId %></a></td> 
    631252                        </tr> 
    632253                                                        <% 
     
    655276                <td> 
    656277                        <% 
    657                         if (lsId <= 0) { 
     278                        if (controller.getLexeme().getID() <= 0) { 
    658279                                %>Save this new structure before creating variables.<% 
    659280                        } else { 
     
    680301                                                %> 
    681302                        <tr> 
    682                                 <form method="POST" action="lsedit.jsp"> 
     303                                <form method="POST" action="lexicon.jsp"> 
    683304                                <input type="hidden" name="vid" value="<%= v.id %>"> 
    684                                 <input type="hidden" name="lsid" value="<%= lsId %>"> 
     305                                <input type="hidden" name="lsid" value="<%= 
     306                                        controller.getLexeme().getID() %>"> 
    685307                                <td><input name="vn" value="<%= v.name %>"></td> 
    686308                                <td> 
     
    699321                                %> 
    700322                        <tr> 
    701                                 <form method="POST" action="lsedit.jsp"> 
    702                                 <input type="hidden" name="lsid" value="<%= lsId %>"> 
     323                                <form method="POST" action="lexicon.jsp"> 
     324                                <input type="hidden" name="lsid" value="<%= 
     325                                        controller.getLexeme().getID() %>"> 
    703326                                <td><input name="vn"></td> 
    704327                                <td> 
     
    721344                        </form> 
    722345                         
    723                         <form name="lsform" method="POST" action="lsedit.jsp"> 
    724                         <input type="hidden" name="lsid" value="<%= lsId %>" /> 
     346                        <form name="lsform" method="POST" action="lexicon.jsp"> 
     347                        <input type="hidden" name="lsid" value="<%= 
     348                                controller.getLexeme().getID() %>" /> 
    725349                        <table> 
    726350                        <tr> 
     
    1001625                                        [ "0", "None" ], 
    1002626                                        <%  
    1003                                                new LogicalStructureArray(out, current.parentId, root).visit();  
     627                                        controller.new LogicalStructureArray(out, root).visit();  
    1004628                                        %> 
    1005629                                ]; 
    1006630                        //--></script> 
    1007631                         
    1008                         <form name="dpform" method="POST" action="lsedit.jsp"> 
    1009                         <input type="hidden" name="lsid" value="<%= lsId %>" /> 
    1010                         <input name="filter" onKeyUp="doFilter(filter, dpid, parents)" /> 
    1011                         <select name="dpid"> 
    1012                         <option <%= 
    1013                                 current.parentId == 0 ? "selected=\"selected\"" : "" 
    1014                         %> value="0">None</option> 
     632                        <form name="dpform" method="POST" action="lexicon.jsp"> 
     633                        <input type="hidden" name="lsid" value="<%= 
     634                                controller.getLexeme().getID() %>" /> 
     635                        <input name="filter" onKeyUp="doFilter(filter, dpid, parents, 
     636                                <%= controller.getLexeme().getID() %>)" /> 
    1015637                        <% 
    1016                                 new LogicalStructureList(out, current.parentId, -1, root) 
    1017                                         .visit(); 
     638                        LexiconController.LogicalStructureList parentStructureLister = 
     639                                controller.new LogicalStructureList( 
     640                                        controller.getLexeme().getID(), root); 
     641                        parentStructureLister.visit(); 
     642                        List<String[]> parentStructures = parentStructureLister.getValues(); 
     643                        parentStructures.add(0, new String[]{"0", "None"}); 
    1018644                        %> 
    1019                         </select
     645                        <%= new SelectBox("dpid", parentStructures, request).toString() %
    1020646                        <input type="submit" value="Save" /> 
    1021647                        </form> 
     
    1025651                <td>Domain Label</td> 
    1026652                <td> 
    1027                         <form name="dlform" method="POST" action="lsedit.jsp"> 
    1028                         <input type="hidden" name="lsid" value="<%= lsId %>"> 
     653                        <form name="dlform" method="POST" action="lexicon.jsp"> 
     654                        <input type="hidden" name="lsid" value="<%= 
     655                                controller.getLexeme().getID() %>"> 
    1029656                        <input name="dl" value="<%=  
    1030657                                current.label == null ? "" : current.label  
     
    1037664                <td>Domain Description</td> 
    1038665                <td> 
    1039                         <form name="ddform" method="POST" action="lsedit.jsp"> 
    1040                         <input type="hidden" name="lsid" value="<%= lsId %>"> 
     666                        <form name="ddform" method="POST" action="lexicon.jsp"> 
     667                        <input type="hidden" name="lsid" value="<%= 
     668                                controller.getLexeme().getID() %>"> 
    1041669                        <input name="dd" width="80" size="80" value="<%=  
    1042670                                current.desc == null ? "" : current.desc  
     
    1050678                <td>Save changes</td> 
    1051679                <td> 
    1052                         <form name="cpform" method="POST" action="lsedit.jsp"> 
    1053                         <input type="hidden" name="lsid" value="<%= lsId %>" /> 
     680                        <form name="cpform" method="POST" action="lexicon.jsp"> 
     681                        <input type="hidden" name="lsid" value="<%= 
     682                                controller.getLexeme().getID() %>" /> 
    1054683                        <input type="hidden" name="surface" value="<%= surface %>" /> 
    1055684                        <input type="submit" name="savecopy" value="Save Copy" /> 
     
    1066695</p> 
    1067696 
    1068 <form name="delform" method="POST" action="lsedit.jsp"> 
    1069 <input type="hidden" name="lsid" value="<%= lsId %>"> 
    1070 <select name="newlsid"> 
    1071 <option value="0">Not specified 
    1072 <% new LogicalStructureList(out, 0, lsId, root).visit(); %> 
    1073 </select> 
     697<form name="delform" method="POST" action="lexicon.jsp"> 
     698<input type="hidden" name="lsid" value="<%= controller.getLexeme().getID() %>"> 
     699<% 
     700LexiconController.LogicalStructureList replacementStructureLister = 
     701        controller.new LogicalStructureList(0, root); 
     702replacementStructureLister.visit(); 
     703List<String[]> replacementStructures = replacementStructureLister.getValues(); 
     704replacementStructures.add(0, new String[]{"0", "Not specified"}); 
     705%> 
     706<%= new SelectBox("newlsid", replacementStructures, request).toString() %> 
    1074707<input type="submit" name="delrepl" value="Delete"> 
    1075708</form> 
    1076709 
    1077710        <% 
    1078 } // end if (lsId <= 0) 
     711} // end if (controller.getLexeme().getID() <= 0) 
    1079712%> 
    1080713 
    1081 <form name="addform" method="POST" action="lsedit.jsp"> 
     714<form name="addform" method="POST" action="lexicon.jsp"> 
    1082715        <h2 style="color: red">Create</h2> 
    1083716        <p> 
     
    1087720</form> 
    1088721 
    1089 <%@ include file="footer.jsp" %> 
     722<%@ include file="include/footer.jsp" %> 
  • lex/trunk/jsp/parse.jsp

    r334 r394  
     1<%@ include file="include/setup.jsp" %> 
     2<%@ include file="include/auth.jsp" %> 
     3 
    14<% String pageTitle = "Parser Testing"; %> 
    2 <%@ include file="header2.jsp" %> 
     5<%@ include file="include/header.jsp" %> 
    36 
    47<%@ page import="java.util.*" %> 
     
    1013<%@ page import="com.qwirx.lex.wordnet.*" %> 
    1114 
    12 <%@ include file="auth.jsp" %> 
    13 <%@ include file="navclause.jsp" %> 
     15<%@ include file="include/navclause_head.jsp" %> 
     16<%@ include file="include/navclause_body.jsp" %> 
    1417 
    1518<script language="javascript" src="js/parsetree.js"></script> 
     
    418421%> 
    419422 
    420 <%@ include file="footer.jsp" %> 
     423<%@ include file="include/footer.jsp" %> 
  • lex/trunk/jsp/published.jsp

    r389 r394  
    11<% String pageTitle = "Published Data"; %> 
    2 <%@ include file="header2.jsp" %> 
    32 
    43<%@ page import="java.util.*" %> 
     
    109<%@ page import="jemdros.*" %> 
    1110<%@ page import="org.aptivate.web.utils.EditField" %> 
     11 
     12<%@ include file="include/setup.jsp" %> 
     13<%@ include file="include/auth.jsp" %> 
     14<%@ include file="include/header.jsp" %> 
    1215 
    1316<% 
     
    6467                                        HebrewConverter.toHtml(result.getLogicalStructure()) 
    6568                                %></td> 
    66                                 <td><a href="<%= result.getLinkUrl() %>"><%= 
     69                                <td><a href="<%=  
     70                                        EditField.escapeEntities(result.getLinkUrl()) 
     71                                        %>"><%= 
    6772                                        result.getLocation() 
    6873                                %></a></td> 
     
    7782%> 
    7883 
    79 <%@ include file="footer.jsp" %> 
     84<%@ include file="include/footer.jsp" %> 
  • lex/trunk/jsp/rules.jsp

    r291 r394  
     1<%@ include file="include/setup.jsp" %> 
     2<%@ include file="include/auth.jsp" %> 
     3 
    14<% String pageTitle = "Parser Rules"; %> 
    2 <%@ include file="header2.jsp" %> 
     5<%@ include file="include/header.jsp" %> 
    36 
    47<%@ page import="java.util.*" %> 
     
    1922//--> 
    2023</script> 
    21  
    22 <%@ include file="auth.jsp" %> 
    2324 
    2425<% 
     
    129130%> 
    130131 
    131 <%@ include file="footer.jsp" %> 
     132<%@ include file="include/footer.jsp" %> 
  • lex/trunk/jsp/search.jsp

    r372 r394  
     1<%@ include file="include/setup.jsp" %> 
     2 
    13<% String pageTitle = "Search"; %> 
    2 <%@ include file="header2.jsp" %> 
     4<%@ include file="include/header.jsp" %> 
    35 
    46<%@ page import="java.util.*" %> 
     
    221223%> 
    222224 
    223 <%@ include file="footer.jsp" %> 
     225<%@ include file="include/footer.jsp" %> 
  • lex/trunk/jsp/wordnet.jsp

    r325 r394  
    11<% String pageTitle = "Text Browser with Wordnet"; %> 
    2 <%@ include file="header2.jsp" %> 
     2<%@ include file="include/header.jsp" %> 
    33 
    44<%@ page import="java.util.*" %> 
     
    13041304                                %> 
    13051305                <td> 
    1306                         <form name="editls" method="get" action="lsedit.jsp"> 
     1306                        <form name="editls" method="get" action="lexicon.jsp"> 
    13071307                        <input type="hidden" name="lsid" value="<%= currentLsId %>"> 
    13081308                        <input type="submit" name="submit" value="Edit..."> 
     
    15541554</form> 
    15551555 
    1556 <%@ include file="footer.jsp" %> 
     1556<%@ include file="include/footer.jsp" %> 
  • lex/trunk/src/com/qwirx/lex/controller/ClauseController.java

    r391 r394  
    1313 
    1414import javax.servlet.http.HttpServletRequest; 
     15import javax.servlet.http.HttpServletResponse; 
    1516 
    1617import jemdros.EMdFValue; 
    1718import jemdros.MatchedObject; 
     19import jemdros.SetOfMonads; 
    1820import jemdros.SheafConstIterator; 
    1921 
     22import org.aptivate.web.controls.SelectBox; 
    2023import org.aptivate.web.utils.EditField; 
    2124import org.crosswire.jsword.book.BookData; 
     
    8689     */ 
    8790    public ClauseController(EmdrosDatabase emdros, SqlDatabase sql, 
    88         int clauseId) 
     91        SetOfMonads focusMonads, int clauseId) 
    8992    throws Exception 
    9093    { 
    9194        super(emdros, sql); 
    92         loadClause(emdros.getMinM(), emdros.getMaxM(), clauseId); 
     95        loadClause(focusMonads, clauseId); 
    9396    } 
    9497 
     
    98101    { 
    99102        super(request, emdros, sql, navigator); 
    100          
    101         m_SwordVerse = KJV.getVerse(emdros, navigator); 
    102  
    103         if (request.getParameter("savearg") != null) 
     103    } 
     104     
     105    public boolean processRedirects(HttpServletResponse response) 
     106    throws Exception 
     107    { 
     108        if (m_Request.getParameter("savearg") != null) 
    104109        { 
    105110            int phraseId  = getParamInt("phraseid"); 
    106             String newArg = request.getParameter("newarg"); 
    107             Change ch = emdros.createChange(EmdrosChange.UPDATE, 
     111            String newArg = m_Request.getParameter("newarg"); 
     112            Change ch = m_Emdros.createChange(EmdrosChange.UPDATE, 
    108113                "phrase", new int[]{phraseId}); 
    109114            ch.setString("argument_name", newArg); 
     
    111116        } 
    112117         
    113         if (request.getParameter("changemr") != null && 
    114             request.getParameter("mr") != null)  
     118        if (m_Request.getParameter("changemr") != null && 
     119            m_Request.getParameter("mr") != null)  
    115120        { 
    116121            int phraseId          = getParamInt("pid"); 
    117122            int newMR             = getParamInt("mr"); 
    118             Change ch = emdros.createChange(EmdrosChange.UPDATE, 
     123            Change ch = m_Emdros.createChange(EmdrosChange.UPDATE, 
    119124                "phrase", new int[]{phraseId}); 
    120125            ch.setInt("macrorole_number", newMR); 
     
    132137        } 
    133138         
    134         if (request.getParameter("wags") != null) // WIVU alternate gloss save 
    135         { 
    136             Change ch = emdros.createChange(EmdrosChange.UPDATE, "word",  
    137                 new int[]{Integer.parseInt(request.getParameter("wagw"))}); 
    138             ch.setString("wivu_alternate_gloss", request.getParameter("wagv")); 
     139        if (m_Request.getParameter("wags") != null) // WIVU alternate gloss save 
     140        { 
     141            Change ch = m_Emdros.createChange(EmdrosChange.UPDATE, "word",  
     142                new int[]{Integer.parseInt(m_Request.getParameter("wagw"))}); 
     143            ch.setString("wivu_alternate_gloss", m_Request.getParameter("wagv")); 
    139144            ch.execute(); 
    140145        } 
     
    145150            m_Clause.getEMdFValue("logical_struct_id").getInt(); 
    146151         
    147         {    
    148             String newLsString = request.getParameter("newls"); 
    149             boolean saveLs = (request.getParameter("lssave") != null); 
    150          
    151             if (request.getParameter("create") != null && newLsString != null)  
    152             { 
    153                 Change ch = sql.createChange(SqlChange.INSERT, 
     152        if (m_Request.getParameter("lssave") != null) 
     153        { 
     154            String newLsString = m_Request.getParameter("newls"); 
     155            boolean saveLs = false; 
     156            String selLsIdString = m_Request.getParameter("lsid"); 
     157         
     158            if (selLsIdString.equals("add")) 
     159            { 
     160                // create a new structure to assign it to this clause 
     161                String predicateText = getPredicateText(); 
     162                if (predicateText == null) 
     163                { 
     164                    predicateText = ""; 
     165                } 
     166 
     167                Change ch = m_Sql.createChange(SqlChange.INSERT, 
    154168                    "lexicon_entries", null); 
    155                 ch.setString("Lexeme",    getPredicateText()); 
     169                ch.setString("Lexeme",    predicateText); 
    156170                ch.setString("Structure", newLsString); 
    157171                ch.execute(); 
     
    161175            else  
    162176            {        
    163                 String selLsIdString = request.getParameter("lsid"); 
    164177                try 
    165178                { 
    166179                    m_SelectedLogicalStructureId = Integer.parseInt(selLsIdString); 
     180                    saveLs = true; 
    167181                } 
    168182                catch (Exception e) 
     
    174188            if (saveLs)  
    175189            { 
    176                 Change ch = emdros.createChange(EmdrosChange.UPDATE, 
    177                     "clause", new int[]{navigator.getClauseId()}); 
     190                Change ch = m_Emdros.createChange(EmdrosChange.UPDATE, 
     191                    "clause", new int[]{m_Navigator.getClauseId()}); 
    178192                ch.setInt("logical_struct_id", m_SelectedLogicalStructureId); 
    179193                ch.execute(); 
    180194            } 
    181         } 
    182  
    183         PreparedStatement stmt = sql.prepareSelect( 
     195 
     196            if (selLsIdString.equals("add")) 
     197            { 
     198                // the logical structure is pretty useless right now, 
     199                // so redirect to the LS editor to configure it. 
     200                response.sendRedirect("lexicon.jsp?lsid=" +  
     201                    m_SelectedLogicalStructureId); 
     202                return true; // stop processing this request 
     203            } 
     204        } 
     205         
     206        PreparedStatement stmt = m_Sql.prepareSelect( 
    184207            "SELECT ID,Structure,Syntactic_Args " + 
    185208            "FROM lexicon_entries WHERE ID = ?"); 
    186209        stmt.setInt(1, m_SelectedLogicalStructureId); 
    187210         
    188         ResultSet rs = sql.select(); 
     211        ResultSet rs = m_Sql.select(); 
    189212 
    190213        if (rs.next())  
     
    202225        } 
    203226         
    204         sql.finish(); 
    205          
    206         if (request.getParameter("nc") != null && 
    207             request.getParameter("nt") != null) 
    208         { 
    209             String newNoteText = request.getParameter("nt"); 
     227        m_Sql.finish(); 
     228         
     229        if (m_Request.getParameter("nc") != null && 
     230            m_Request.getParameter("nt") != null) 
     231        { 
     232            String newNoteText = m_Request.getParameter("nt"); 
    210233             
    211234            EmdrosChange ch = (EmdrosChange)( 
    212235                m_Emdros.createChange(EmdrosChange.CREATE, 
    213                     "note", new int[]{navigator.getClauseId()})); 
     236                    "note", new int[]{m_Navigator.getClauseId()})); 
    214237            ch.setString("text", newNoteText); 
    215238            ch.execute(); 
    216239        } 
    217240     
    218         if (request.getParameter("nu") != null && 
    219             request.getParameter("ni") != null && 
    220             request.getParameter("nt") != null) 
    221         { 
    222             String updateNoteIdString = request.getParameter("ni"); 
     241        if (m_Request.getParameter("nu") != null && 
     242            m_Request.getParameter("ni") != null && 
     243            m_Request.getParameter("nt") != null) 
     244        { 
     245            String updateNoteIdString = m_Request.getParameter("ni"); 
    223246            int updateNoteId = Integer.parseInt(updateNoteIdString); 
    224             String newNoteText = request.getParameter("nt"); 
     247            String newNoteText = m_Request.getParameter("nt"); 
    225248             
    226249            EmdrosChange ch = (EmdrosChange)( 
    227                 emdros.createChange(EmdrosChange.UPDATE, 
     250                m_Emdros.createChange(EmdrosChange.UPDATE, 
    228251                    "note", new int [] {updateNoteId})); 
    229252            ch.setString("text", newNoteText); 
     
    231254        } 
    232255 
    233         if (request.getParameter("nd") != null && 
    234             request.getParameter("ni") != null) 
    235         { 
    236             String deleteNoteIdString = request.getParameter("ni"); 
     256        if (m_Request.getParameter("nd") != null && 
     257            m_Request.getParameter("ni") != null) 
     258        { 
     259            String deleteNoteIdString = m_Request.getParameter("ni"); 
    237260            int deleteNoteId = Integer.parseInt(deleteNoteIdString); 
    238261             
    239262            EmdrosChange ch = (EmdrosChange)( 
    240                 emdros.createChange(EmdrosChange.DELETE, 
     263                m_Emdros.createChange(EmdrosChange.DELETE, 
    241264                    "note", new int[]{deleteNoteId})); 
    242265            ch.execute(); 
     
    268291                ch.execute(); 
    269292            } 
    270             else if (request.getParameter("unpublish") != null) 
    271             { 
    272                 Change ch = sql.createChange(SqlChange.DELETE, 
     293            else if (m_Request.getParameter("unpublish") != null) 
     294            { 
     295                Change ch = m_Sql.createChange(SqlChange.DELETE, 
    273296                    "user_text_access", 
    274297                    "Monad_First = " + m_Clause.getMonads().first() + " AND " + 
     
    277300                ch.execute(); 
    278301     
    279                 ch = emdros.createChange(EmdrosChange.UPDATE, "clause",  
     302                ch = m_Emdros.createChange(EmdrosChange.UPDATE, "clause",  
    280303                    new int[]{m_Clause.getID_D()}); 
    281304                ch.setInt("published", 0); 
     
    372395            .getString(); 
    373396        if (! currentStruct.equals(m_LinkedLogicalStructure) && 
    374             emdros.canWriteTo(m_Clause)) 
    375         { 
    376             Change ch = emdros.createChange(EmdrosChange.UPDATE, 
    377                 "clause", new int[]{navigator.getClauseId()}); 
     397            m_Emdros.canWriteTo(m_Clause)) 
     398        { 
     399            Change ch = m_Emdros.createChange(EmdrosChange.UPDATE, 
     400                "clause", new int[]{m_Navigator.getClauseId()}); 
    378401            ch.setString("logical_structure", m_LinkedLogicalStructure); 
    379402            ch.execute(); 
    380403        } 
     404         
     405        return false; 
     406    } 
     407 
     408    public void processBody() throws Exception 
     409    { 
     410        m_SwordVerse = KJV.getVerse(m_Emdros, m_Navigator); 
    381411    } 
    382412     
     
    12601290        return m_LinkedLogicalStructure; 
    12611291    } 
     1292     
     1293    public SelectBox getLogicalStructureSelector() throws Exception 
     1294    { 
     1295        List<Object> options = new ArrayList<Object>(); 
     1296        options.add(new String[]{"0", "Not specified"}); 
     1297 
     1298        Lexeme [] possibleStructures = Lexeme.loadAll(m_Sql, getPredicateText()); 
     1299         
     1300        for (Lexeme structure : possibleStructures) 
     1301        { 
     1302            options.add(new String[]{"" + structure.getID(), 
     1303                structure.getLogicalStructure()}); 
     1304        } 
     1305         
     1306        options.add(new String[]{"add", "Add new..."}); 
     1307        SelectBox sb = new SelectBox("lsid", options); 
     1308        sb.setAttribute("onchange", "enableEditButton(); " +  
     1309            "return enableChangeButton(lssave," +  
     1310            getSelectedLogicalStructureId() + 
     1311            ",lsid)"); 
     1312        sb.setDefaultValue("" + getSelectedLogicalStructureId()); 
     1313        return sb; 
     1314    } 
    12621315} 
  • lex/trunk/src/com/qwirx/lex/controller/ControllerBase.java

    r365 r394  
    99 
    1010import jemdros.MatchedObject; 
     11import jemdros.SetOfMonads; 
    1112import jemdros.Sheaf; 
    1213import jemdros.SheafConstIterator; 
     
    5556        this(request, emdros, sql); 
    5657        m_Navigator = navigator; 
    57         m_Transliterator = navigator.getTransliterator(); 
     58        if (navigator != null) 
     59        { 
     60            m_Transliterator = navigator.getTransliterator(); 
     61        } 
    5862    } 
    5963     
     
    9195    throws Exception 
    9296    { 
    93         loadClause(m_Navigator.getMinM(), m_Navigator.getMaxM(), 
    94             m_Navigator.getClauseId()); 
     97        loadClause(m_Navigator.getFocusMonads(), m_Navigator.getClauseId()); 
    9598    } 
    9699     
     
    99102     * @throws Exception 
    100103     */ 
    101     protected void loadClause(int minM, int maxM, int clauseId) 
     104    protected void loadClause(SetOfMonads focusMonads, int clauseId) 
    102105    throws Exception 
    103106    { 
    104107        Sheaf sheaf = m_Emdros.getSheaf 
    105108        ( 
    106             "SELECT ALL OBJECTS IN " + 
    107             "{" + minM + "-" + maxM + "} " +  
     109            "SELECT ALL OBJECTS IN " + focusMonads.toString() + 
    108110            "WHERE [clause self = " + clauseId + 
    109111            "       GET logical_struct_id, logical_structure "+ 
  • lex/trunk/src/com/qwirx/lex/controller/Navigator.java

    r367 r394  
    99import javax.servlet.http.HttpSession; 
    1010 
     11import jemdros.BadMonadsException; 
    1112import jemdros.EmdrosException; 
    1213import jemdros.MatchedObject; 
     
    1516import jemdros.SheafConstIterator; 
    1617import jemdros.Table; 
     18import jemdros.TableException; 
    1719import jemdros.TableIterator; 
    1820import jemdros.TableRow; 
    1921 
    2022import org.aptivate.web.controls.SelectBox; 
    21 import org.aptivate.web.utils.EditField; 
    2223 
    2324import com.qwirx.db.DatabaseException; 
     
    3334    private HttpSession m_Session; 
    3435    private EmdrosDatabase m_Emdros; 
    35     private SetOfMonads m_VisibleMonads; 
    36     private int m_MinM, m_MaxM; 
     36    private SetOfMonads m_VisibleMonads, m_FocusMonads; 
    3737    private DatabaseTransliterator m_Transliterator; 
    38     private EditField m_Form; 
    3938     
    4039    public Navigator(HttpServletRequest request, HttpSession session, 
     
    4645        m_Session = session; 
    4746        m_Emdros = emdros; 
    48         m_VisibleMonads = emdros.getVisibleMonads(); 
    49         m_MinM = emdros.getMinM(); 
    50         m_MaxM = emdros.getMaxM(); 
     47        m_VisibleMonads = visibleMonads; 
     48        m_FocusMonads = m_VisibleMonads; 
    5149        m_Transliterator = transliterator; 
    52         m_Form = new EditField(request); 
    5350    } 
    5451 
     
    8077    } 
    8178     
    82     private void setParamOverride(String name, String value) 
     79    public void setParamOverride(String name, String value) 
    8380    { 
    8481        m_ParamOverrideMap.put(name, value); 
     
    9390    public String getLabel(String name) { return m_Labels.get(name); } 
    9491     
    95     public String getObjectNavigator(String objectType, String labelAttribute) 
    96     throws DatabaseException, EmdrosException 
     92    public SelectBox getObjectNavigator(String objectType, 
     93        String labelAttribute) 
     94    throws DatabaseException 
    9795    { 
    9896        return getObjectNavigator(objectType, new String[]{labelAttribute}); 
    9997    } 
    10098     
    101     public String getObjectNavigator(String objectType, 
     99    public SelectBox getObjectNavigator(String objectType, 
    102100        String [] labelAttributes) 
    103     throws DatabaseException, EmdrosException 
     101    throws DatabaseException 
    104102    { 
    105103        String selectedObject = getSessionString(objectType, null); 
     
    109107        Table objectTable = m_Emdros.getTable 
    110108        ( 
    111             "SELECT OBJECTS HAVING MONADS IN " +  
    112             m_Emdros.intersect(m_VisibleMonads, m_MinM, m_MaxM) + 
     109            "SELECT OBJECTS HAVING MONADS IN " + m_FocusMonads.toString() + 
    113110            " [" + objectType + "]" 
    114111        ); 
     
    118115         
    119116        TableIterator rows = objectTable.iterator(); 
    120         while (rows.hasNext())  
    121         { 
    122             TableRow row = rows.next(); 
    123             String objectId = row.getColumn(3); 
    124              
    125             id_dList.append(objectId); 
    126  
    127             if (rows.hasNext()) 
    128             { 
    129                 id_dList.append(","); 
    130             } 
    131  
    132             if (objectId.equals(selectedObject)) 
    133             { 
    134                 foundObject = true; 
    135             } 
    136              
    137             if (firstObject == null) 
    138             { 
    139                 firstObject = objectId; 
    140             } 
    141         } 
    142          
     117        try 
     118        { 
     119            while (rows.hasNext())  
     120            { 
     121                TableRow row = rows.next(); 
     122                String objectId = row.getColumn(3); 
     123                 
     124                id_dList.append(objectId); 
     125     
     126                if (rows.hasNext()) 
     127                { 
     128                    id_dList.append(","); 
     129                } 
     130     
     131                if (objectId.equals(selectedObject)) 
     132                { 
     133                    foundObject = true; 
     134                } 
     135                 
     136                if (firstObject == null) 
     137                { 
     138                    firstObject = objectId; 
     139                } 
     140            } 
     141        } 
     142        catch (EmdrosException e) 
     143        { 
     144            throw new DatabaseException("Failed to find visible objects", e); 
     145        } 
    143146        if (!foundObject && firstObject != null) 
    144147        { 
     
    162165            id_dList.toString() + " [" + objectType + "]"); 
    163166         
    164         List<String[]> objects = m_Emdros.getTableAsListOfArrays( 
    165             query.toString(), columnMap); 
     167        List<String[]> objects = m_Emdros.getTableAsListOfArrays(query.toString(), 
     168            columnMap); 
    166169 
    167170        for (String [] objectInfo : objects) 
     
    181184                    " [" + objectType + "]" 
    182185                ); 
    183                 TableRow monad_row = monadTable.iterator().next(); 
    184                 int new_min_m = Integer.parseInt(monad_row.getColumn(2));    
    185                 int new_max_m = Integer.parseInt(monad_row.getColumn(3));    
    186                 if (m_MinM < new_min_m) m_MinM = new_min_m; 
    187                 if (m_MaxM > new_max_m) m_MaxM = new_max_m; 
    188                 if (m_MinM > m_MaxM) m_MaxM = m_MinM + 1; 
     186 
     187                SetOfMonads objectMonads = new SetOfMonads(); 
     188 
     189                try 
     190                { 
     191                    TableRow monad_row = monadTable.iterator().next(); 
     192                    System.out.println(monad_row.getColumn(2) + "-" + 
     193                        monad_row.getColumn(3)); 
     194                    objectMonads.add(Integer.parseInt(monad_row.getColumn(2)), 
     195                        Integer.parseInt(monad_row.getColumn(3))); 
     196                } 
     197                catch (TableException te) 
     198                { 
     199                    throw new DatabaseException("Failed to retrieve monads " + 
     200                        "from object " + objectId, te); 
     201                } 
     202                catch (BadMonadsException bme) 
     203                { 
     204                    throw new DatabaseException("Failed to retrieve monads " + 
     205                        "from object " + objectId, bme);                     
     206                } 
     207                 
     208                m_FocusMonads = SetOfMonads.intersect(m_FocusMonads, 
     209                    objectMonads); 
     210 
    189211                // System.out.println("book restricts to " + min_m + "-" + max_m); 
    190212            } 
     
    195217        SelectBox sb = new SelectBox(objectType, objects, selectedObject); 
    196218        sb.setAttribute("onChange", "document.forms.nav.submit()"); 
    197         return sb.toString()
     219        return sb
    198220    } 
    199221 
     
    203225    } 
    204226     
    205     public String getClauseNavigator() 
    206     throws Exception 
     227    public SelectBox getClauseNavigator() 
     228    throws DatabaseException 
    207229    { 
    208230        int selClauseId = getClauseId(); 
    209         MatchedObject verse = null; 
    210231         
    211232        boolean foundSelectedClause = false; 
     
    215236        Sheaf sheaf = m_Emdros.getSheaf 
    216237        ( 
    217             "SELECT ALL OBJECTS IN " + 
    218             m_Emdros.intersect(m_VisibleMonads, m_MinM, m_MaxM) + 
     238            "SELECT ALL OBJECTS IN " + m_FocusMonads.toString() + 
    219239            " WHERE " + 
    220240            "[clause "+ 
     
    229249        while (clause_iter.hasNext()) 
    230250        { 
    231             MatchedObject clause = clause_iter.next().const_iterator().next(); 
     251            MatchedObject clause; 
     252             
     253            try 
     254            { 
     255                clause = clause_iter.next().const_iterator().next(); 
     256            } 
     257            catch (EmdrosException e) 
     258            { 
     259                throw new DatabaseException("Failed to iterate over clauses", e); 
     260            } 
     261             
    232262            SheafConstIterator word_iter = clause.getSheaf().const_iterator(); 
    233263            StringBuffer lexemes = new StringBuffer(); 
     
    235265            while (word_iter.hasNext()) 
    236266            { 
    237                 MatchedObject word = word_iter.next().const_iterator().next(); 
     267                MatchedObject word; 
     268                 
     269                try 
     270                { 
     271                    word = word_iter.next().const_iterator().next(); 
     272                } 
     273                catch (EmdrosException e) 
     274                { 
     275                    throw new DatabaseException("Failed to iterate over words", 
     276                        e); 
     277                } 
    238278                 
    239279                List<Morpheme> morphemes = generator.parse(word, false, 
     
    278318        sb.setAttribute("onChange", "document.forms.nav.submit()"); 
    279319        sb.setAttribute("class", "translit"); 
    280         return sb.toString(); 
    281     } 
    282      
    283     public int getMinM() 
    284     { 
    285         return m_MinM; 
    286     } 
    287  
    288     public int getMaxM() 
    289     { 
    290         return m_MaxM; 
     320        return sb; 
     321    } 
     322     
     323    public SelectBox [] getHebrewNavigator() 
     324    throws DatabaseException 
     325    { 
     326        return new SelectBox [] { 
     327            getObjectNavigator("book", "book"), 
     328            getObjectNavigator("chapter", "chapter"), 
     329            getObjectNavigator("verse", new String[]{"verse_label", "verse"}), 
     330            getClauseNavigator()   
     331        }; 
     332    } 
     333     
     334    public SetOfMonads getFocusMonads() 
     335    { 
     336        return new SetOfMonads(m_FocusMonads); 
    291337    } 
    292338     
  • lex/trunk/src/com/qwirx/lex/emdros/EmdrosDatabase.java

    r384 r394  
    1212import java.sql.SQLException; 
    1313import java.util.ArrayList; 
     14import java.util.Arrays; 
    1415import java.util.HashMap; 
    1516import java.util.Hashtable; 
     
    338339     
    339340    public SetOfMonads intersect(SetOfMonads set, int min_m, int max_m) 
    340     throws EmdrosException 
     341    throws DatabaseException 
    341342    { 
    342343        System.out.println(set.toString()); 
    343344        System.out.println(min_m + " : " + max_m); 
    344         return SetOfMonads.intersect(set, new SetOfMonads(min_m, max_m)); 
     345        try 
     346        { 
     347            return SetOfMonads.intersect(set, new SetOfMonads(min_m, max_m)); 
     348        } 
     349        catch (EmdrosException e) 
     350        { 
     351            throw new DatabaseException("Failed to calculate " + 
     352                    "monad intersection", e); 
     353        } 
    345354    } 
    346355     
     
    357366                if (id_ds != null && !canWriteTo(objectType, id_ds)) 
    358367                { 
     368                    StringBuffer objectIdsString = new StringBuffer(); 
     369                     
     370                    int [] objectIdsArray = (int [])objectIds; 
     371                     
     372                    for (int id : objectIdsArray) 
     373                    { 
     374                        if (objectIdsString.length() > 0) 
     375                        { 
     376                            objectIdsString.append(", "); 
     377                        } 
     378                        objectIdsString.append(id); 
     379                    } 
     380                     
    359381                    throw new DatabaseException("You do not have permission "+ 
    360382                        "to modify this object", changeType + " " + objectType + 
    361                         " " + objectIds); 
     383                        " [" + objectIdsString.toString() + "]"); 
    362384                } 
    363385                // must check access to monads later 
  • lex/trunk/src/com/qwirx/lex/Lex.java

    r369 r394  
    3232import com.qwirx.lex.ontology.OntologyDb; 
    3333import com.qwirx.lex.parser.Parser; 
     34import com.qwirx.lex.test.unfinished.LexTest; 
    3435import com.qwirx.lex.translit.DatabaseTransliterator; 
    3536 
  • lex/trunk/src/com/qwirx/lex/lexicon/Lexeme.java

    r356 r394  
    55import java.sql.ResultSet; 
    66import java.sql.SQLException; 
     7import java.util.ArrayList; 
    78import java.util.Collections; 
    89import java.util.Hashtable; 
     
    5152    } 
    5253     
    53     public int    id, parentId, numSyntacticArgs; 
     54    private int m_LexiconId, parentId, m_NumSyntacticArgs; 
    5455    public String label, desc, surface, m_Gloss; 
    5556    public Lexeme parent; 
     
    219220    public boolean equals(Lexeme that) 
    220221    { 
    221         if (this.id != that.id) return false; 
     222        if (this.m_LexiconId != that.m_LexiconId) return false; 
    222223        if (!compareMaybeNull(this.getLogicalStructure(),  
    223224            that.getLogicalStructure())) 
     
    258259    public int getID() 
    259260    { 
    260         return id; 
     261        return m_LexiconId; 
    261262    } 
    262263 
     
    268269            Lexeme l = new Lexeme(sqldb); 
    269270             
    270             l.id       = rs.getInt("ID"); 
     271            l.m_LexiconId       = rs.getInt("ID"); 
    271272            l.surface  = rs.getString("Lexeme"); 
    272273            l.m_Gloss  = rs.getString("Gloss"); 
     
    274275            l.desc     = rs.getString("Domain_Desc"); 
    275276            l.parentId = rs.getInt("Domain_Parent_ID"); 
    276             l.numSyntacticArgs = rs.getInt("Syntactic_Args"); 
     277            l.m_NumSyntacticArgs = rs.getInt("Syntactic_Args"); 
    277278     
    278279            l.setCaused         (rs.getInt("Caused")           == 1); 
     
    344345    { 
    345346        Lexeme result = null; 
     347 
     348        if (predicate == null) 
     349        { 
     350            predicate = ""; 
     351        } 
     352 
     353        try  
     354        { 
     355            PreparedStatement stmt = sqldb.prepareSelect 
     356                ("SELECT " + getColumnList() + " " + 
     357                 "FROM lexicon_entries " + 
     358                 "WHERE Lexeme = ? LIMIT 1"); 
     359            stmt.setString(1, predicate); 
     360            ResultSet rs = sqldb.select(); 
     361             
     362            if (!rs.next())  
     363            { 
     364                return null; 
     365            } 
     366             
     367            result = load(sqldb, rs); 
     368        }  
     369        finally  
     370        { 
     371            sqldb.finish(); 
     372        } 
     373         
     374        return result; 
     375    } 
     376 
     377    public static Lexeme[] loadAll(SqlDatabase sqldb, String predicate) 
     378    throws DatabaseException, SQLException 
     379    { 
     380        List<Lexeme> results = new ArrayList<Lexeme>(); 
     381         
     382        if (predicate == null) 
     383        { 
     384            predicate = ""; 
     385        } 
    346386         
    347387        try  
     
    353393            stmt.setString(1, predicate); 
    354394            ResultSet rs = sqldb.select(); 
    355              
    356             if (!rs.next())  
    357             { 
    358                 return null; 
    359             } 
    360              
    361             result = load(sqldb, rs); 
     395 
     396            while (rs.next()) 
     397            { 
     398                results.add(load(sqldb, rs)); 
     399            } 
    362400        }  
    363401        finally  
     
    366404        } 
    367405         
    368         return result
     406        return results.toArray(new Lexeme[results.size()])
    369407    } 
    370408 
     
    433471                Lexeme l = load(sqldb, rs);  
    434472                 
    435                 if (l.id == 0)  
     473                if (l.m_LexiconId == 0)  
    436474                { 
    437475                    System.err.println("Bad ID 0 for "+l.desc); 
     
    439477                } 
    440478     
    441                 m.put(l.id + "", l); 
     479                m.put(l.m_LexiconId + "", l); 
    442480            } 
    443481        }  
     
    474512    { 
    475513        Change ch; 
    476         if (id == 0) 
     514        if (m_LexiconId == 0) 
    477515        { 
    478516            ch = m_sqldb.createChange(SqlChange.INSERT, "lexicon_entries",  
     
    483521        { 
    484522            ch = m_sqldb.createChange(SqlChange.UPDATE, "lexicon_entries",  
    485                 "ID = " + id); 
     523                "ID = " + m_LexiconId); 
    486524        } 
    487525 
     
    531569         
    532570        ch.execute(); 
    533         if (id == 0) 
    534         { 
    535             id = ((SqlChange)ch).getInsertedRowId(); 
     571        if (m_LexiconId == 0) 
     572        { 
     573            m_LexiconId = ((SqlChange)ch).getInsertedRowId(); 
    536574        } 
    537575    } 
     
    539577    public void delete() throws DatabaseException 
    540578    { 
    541         if (id == 0) 
     579        if (m_LexiconId == 0) 
    542580        { 
    543581            throw new AssertionError("Cannot delete a Lexeme without an ID"); 
     
    545583         
    546584        Change ch = m_sqldb.createChange(SqlChange.DELETE, "lexicon_entries",  
    547             "ID = " + id); 
     585            "ID = " + m_LexiconId); 
    548586        ch.execute(); 
    549587    } 
     
    606644        protected void visit(Lexeme e, String parentPath) throws IOException 
    607645        { 
    608             if (e.id == m_lsIdToFind) 
     646            if (e.m_LexiconId == m_lsIdToFind) 
    609647            { 
    610648                m_found = e; 
     
    631669                 "FROM   lexicon_variables "+ 
    632670                 "WHERE  Lexeme_ID = ?"); 
    633             stmt.setInt(1, id); 
     671            stmt.setInt(1, m_LexiconId); 
    634672            ResultSet rs = sql.select(); 
    635673             
     
    639677                    rs.getString("Name"),  
    640678                    rs.getString("Value")); 
    641                 v.lexemeId = id; 
     679                v.lexemeId = m_LexiconId; 
    642680                v.id = rs.getInt   ("ID"); 
    643681                 
     
    699737        return logic; 
    700738    } 
     739     
     740    public int getNumSyntacticArgs() 
     741    { 
     742        return m_NumSyntacticArgs; 
     743    } 
    701744} 
  • lex/trunk/src/com/qwirx/lex/morph/HebrewMorphemeGenerator.java

    r370 r394  
    1111import jemdros.MatchedObject; 
    1212 
     13import com.qwirx.db.DatabaseException; 
    1314import com.qwirx.db.sql.SqlDatabase; 
    1415import com.qwirx.lex.lexicon.Lexeme; 
     
    146147    public List<Morpheme> parse(MatchedObject word, boolean generateGloss, 
    147148        String gloss, DatabaseTransliterator transliterator) 
    148     throws Exception 
     149    throws DatabaseException 
    149150    { 
    150151        if (!word.getObjectTypeName().equals("word")) 
     
    160161            String feature = i.next(); 
    161162             
    162             int index = word.getEMdFValueIndex(feature); 
    163             if (index == -1) 
    164             { 
    165                 throw new IllegalArgumentException("Word does not have " + 
    166                         "required feature " + feature); 
    167             } 
    168              
    169             String value = word.getFeatureAsString(index); 
    170             if (value == null) 
    171             { 
    172                 throw new IllegalArgumentException("Word does not have " + 
    173                         "required feature " + feature); 
     163            int index; 
     164            String value; 
     165             
     166            try 
     167            { 
     168                index = word.getEMdFValueIndex(feature); 
     169                if (index == -1) 
     170                { 
     171                    throw new IllegalArgumentException("Word does not have " + 
     172                            "required feature " + feature); 
     173                } 
     174                 
     175                value = word.getFeatureAsString(index); 
     176                if (value == null) 
     177                { 
     178                    throw new IllegalArgumentException("Word does not have " + 
     179                            "required feature " + feature); 
     180                } 
     181            } 
     182            catch (EmdrosException e) 
     183            { 
     184                throw new DatabaseException("Failed to retrieve feature '" + 
     185                    feature + "' from word " + word.getID_D(), e); 
    174186            } 
    175187             
     
    414426        String feature, String gloss, String symbol, 
    415427        boolean isLastMorpheme, boolean isGraphicalWordEnd) 
    416     throws EmdrosException 
    417428    { 
    418429        results.add(new Morpheme(features.get(feature), gloss, symbol, 
  • lex/trunk/src/com/qwirx/lex/Search.java

    r361 r394  
    160160        Map<Integer,SetOfMonads> verseIdToMonadsMap = 
    161161            new HashMap<Integer,SetOfMonads>(); 
     162        SetOfMonads allResultMonads = new SetOfMonads(); 
    162163         
    163164        for (TableIterator ti = table.iterator(); ti.hasNext();) 
     
    167168             
    168169            SetOfMonads som = verseIdToMonadsMap.get(new Integer(ID_D)); 
     170             
    169171            if (som == null) 
    170172            { 
     
    175177            som.add(Integer.parseInt(tr.getColumn(2)), 
    176178                Integer.parseInt(tr.getColumn(3))); 
     179             
     180            allResultMonads.unionWith(som); 
     181        } 
     182         
     183        String [] objectTypesToGet = new String [] {"book", "chapter", "verse"}; 
     184         
     185        for (String objectType : objectTypesToGet) 
     186        { 
     187            // TODO could get "verse_label" at the same time as "verse" 
     188            String verseContainerQuery = "GET OBJECTS HAVING MONADS IN " + 
     189                allResultMonads.toString() + " [" + objectType + "]"; 
     190            FlatSheaf flat = m_Emdros.getFlatSheaf(verseContainerQuery); 
     191            FlatStraw straw = flat.const_iterator().next(); 
     192            for (FlatStrawConstIterator fsci = straw.const_iterator(); 
     193                fsci.hasNext();) 
     194            { 
     195                MatchedObject object = fsci.next(); 
     196                // TODO fix another horribly slow algorithm 
     197                for (Iterator<ResultBase> i = resultBases.iterator(); i.hasNext();) 
     198                { 
     199                    ResultBase base = i.next(); 
     200                    if (base.monads.part_of(object.getMonads())) 
     201                    { 
     202                        if (base.url == null) 
     203                        { 
     204                            base.url = "clause.jsp?"; 
     205                        } 
     206                        else 
     207                        { 
     208                            base.url += "&"; 
     209                        } 
     210                         
     211                        base.url += objectType + "=" + object.getID_D(); 
     212                    } 
     213                } 
     214            } 
    177215        } 
    178216 
     
    197235                { 
    198236                    base.location = tr.getColumn(5); 
    199                     base.url = "clause.jsp?book=" + tr.getColumn(2) + 
    200                         "&amp;chapter=" + tr.getColumn(3) + 
    201                         "&amp;verse="   + tr.getColumn(4) + 
    202                         "&amp;clause="  + base.clause.getID_D(); 
    203                 } 
    204             } 
    205         } 
    206          
     237                } 
     238            } 
     239        } 
     240 
     241        for (Iterator<ResultBase> i = resultBases.iterator(); i.hasNext();) 
     242        { 
     243            ResultBase base = i.next();             
     244            base.url += "&clause=" + base.clause.getID_D(); 
     245        } 
     246 
    207247        { 
    208248            String mql = "GET FEATURES predicate, logical_structure " + 
  • lex/trunk/src/com/qwirx/lex/translit/DatabaseTransliterator.java

    r387 r394  
    1515import jemdros.EmdrosException; 
    1616import jemdros.MatchedObject; 
    17 import jemdros.StringListConstIterator; 
    1817import jemdros.StringVector; 
    1918 
    2019import org.apache.log4j.Logger; 
    2120 
     21import com.qwirx.db.DatabaseException; 
    2222import com.qwirx.db.sql.DbColumn; 
    2323import com.qwirx.db.sql.DbTable; 
     
    215215    public String transliterate(List<Morpheme> morphemes, int index, 
    216216        MatchedObject word) 
    217     throws EmdrosException 
     217    throws DatabaseException 
    218218    { 
    219219        if (! word.getObjectTypeName().equals("word")) 
     
    228228        { 
    229229            String feature = features.get(i); 
    230             String value = word.getFeatureAsString(i); 
     230            String value; 
     231             
     232            try 
     233            { 
     234                value = word.getFeatureAsString(i); 
     235            } 
     236            catch (EmdrosException e) 
     237            { 
     238                throw new DatabaseException("Failed to get value for " + 
     239                        "feature '" + feature + "'", e); 
     240            } 
     241             
    231242            attributes.put("word_" + feature, value); 
    232243        } 
  • lex/trunk/test/com/qwirx/lex/test/active/Clause.java

    r377 r394  
    1 package com.qwirx.lex
     1package com.qwirx.lex.test.active
    22 
    33import java.util.HashMap; 
  • lex/trunk/test/com/qwirx/lex/test/active/ClauseControllerTest.java

    r389 r394  
    1 package com.qwirx.lex
     1package com.qwirx.lex.test.active
    22 
    33import java.util.ArrayList; 
     
    1717import jemdros.StrawConstIterator; 
    1818 
     19import org.aptivate.web.controls.SelectBox; 
    1920import org.aptivate.web.utils.HtmlIterator; 
     21import org.aptivate.web.utils.HtmlIterator.StartElementNode; 
    2022 
    2123import com.meterware.httpunit.HttpUnitOptions; 
     
    2628import com.qwirx.db.sql.SqlChange; 
    2729import com.qwirx.lex.controller.ClauseController; 
     30import com.qwirx.lex.controller.Navigator; 
    2831import com.qwirx.lex.controller.ClauseController.Cell; 
    2932import com.qwirx.lex.emdros.EmdrosChange; 
     33import com.qwirx.lex.emdros.EmdrosDatabase; 
     34import com.qwirx.lex.lexicon.Lexeme; 
    3035import com.qwirx.lex.parser.MorphEdge; 
     36import com.qwirx.lex.test.base.LexTestBase; 
     37import com.qwirx.lex.translit.DatabaseTransliterator; 
    3138 
    3239public class ClauseControllerTest extends LexTestBase 
     
    7279    } 
    7380     
     81    private SetOfMonads getAllMonads() 
     82    throws Exception 
     83    { 
     84        return new SetOfMonads(getEmdros().getMinM(), getEmdros().getMaxM()); 
     85    } 
     86     
    7487    public void testWivuGlossCell() throws Exception 
    7588    { 
    76         ClauseController controller = new ClauseController(getEmdros(), 
    77             getSql(), 28740); 
     89        EmdrosDatabase emdros = getEmdros(); 
     90         
     91        ClauseController controller = new ClauseController(emdros, getSql(),  
     92            getAllMonads(), 28740); 
    7893 
    7994        MatchedObject word = getWord(27); // merahefet 
     
    131146        String expected = "ב֌ְךֵאשׁ֎֖ית ב֌֞ך֣֞א אֱלֹה֎֑ים אֵ֥ת הַשׁ֌֞מַ֖י֎ם וְאֵ֥ת ה֞א֞֜ךֶץ "; // Gen 1,1a 
    132147        ClauseController controller = new ClauseController(getEmdros(), 
    133             getSql(), 28737); 
     148            getSql(), getAllMonads(), 28737); 
    134149        assertEquals(expected, controller.getHebrewText()); 
    135150    } 
     
    138153    throws Exception 
    139154    { 
    140         return new ClauseController(getEmdros(), getSql(), clauseId); 
     155        return new ClauseController(getEmdros(), getSql(), getAllMonads(), 
     156            clauseId); 
    141157    } 
    142158     
     
    269285            i.assertSimple("td", clause.getEMdFValue("logical_structure").toString()); 
    270286            i.assertStart("td"); 
    271             i.assertSimple("a", clauseToVerseMap.get(clause.getID_D())); 
     287            StartElementNode node = i.assertSimple("a", 
     288                clauseToVerseMap.get(clause.getID_D())); 
     289             
     290            if (clause.getID_D() == expectedClauseId) 
     291            { 
     292                node.assertAttribute("href", "clause.jsp" + 
     293                    "?book=" +    m_Location.get("book") + 
     294                    "&chapter=" + m_Location.get("chapter") + 
     295                    "&verse=" +   m_Location.get("verse") + 
     296                    "&clause=" +  expectedClauseId); 
     297            } 
     298             
    272299            i.assertEnd("td"); 
    273300            i.assertEnd("tr"); 
     
    277304         
    278305        assertPageFooter(i); 
     306    } 
     307     
     308    private String getClauseUrl() 
     309    { 
     310        return "http://localhost:8080/lex/clause.jsp" + 
     311            "?book="    + m_Location.get("book") + 
     312            "&chapter=" + m_Location.get("chapter") + 
     313            "&verse="   + m_Location.get("verse") + 
     314            "&clause="  + m_Location.get("clause"); 
    279315    } 
    280316     
     
    325361 
    326362        WebConversation loggedin = assertLogIn();         
    327         loggedin.getResponse( 
    328             "http://localhost:8080/lex/clause.jsp" + 
    329             "?book="    + m_Location.get("book") + 
    330             "&chapter=" + m_Location.get("chapter") + 
    331             "&verse="   + m_Location.get("verse") + 
    332             "&clause="  + m_Location.get("clause") + 
    333             "&publish=Publish"); 
     363        loggedin.getResponse(getClauseUrl() + "&publish=Publish"); 
    334364         
    335365        clause = getClause(clauseId, new String[]{"published"}); 
     
    344374            "published.jsp"); 
    345375        assertPublishedPage(response, clauseId, true); 
     376         
     377        Navigator navigator = new Navigator(null, null, getEmdros(),  
     378            visible, new DatabaseTransliterator(getSql())); 
     379        navigator.setParamOverride("book", m_Location.get("book").toString()); 
     380        navigator.setParamOverride("chapter", m_Location.get("chapter").toString()); 
     381        navigator.setParamOverride("verse", m_Location.get("verse").toString()); 
     382        navigator.setParamOverride("clause", m_Location.get("clause").toString()); 
     383         
     384        navigator.getObjectNavigator("book", "book"); 
     385        assertTrue(clause.getMonads() + " is not part of " + 
     386            navigator.getFocusMonads(), 
     387            clause.getMonads().part_of(navigator.getFocusMonads())); 
     388         
     389        navigator.getObjectNavigator("chapter", "chapter"); 
     390        assertTrue(clause.getMonads() + " is not part of " + 
     391            navigator.getFocusMonads(), 
     392            clause.getMonads().part_of(navigator.getFocusMonads())); 
     393 
     394        navigator.getObjectNavigator("verse", 
     395            new String[]{"verse_label", "verse"}); 
     396        assertTrue(clause.getMonads() + " is not part of " + 
     397            navigator.getFocusMonads(), 
     398            clause.getMonads().part_of(navigator.getFocusMonads())); 
     399 
     400        navigator.getClauseNavigator(); 
     401        assertTrue(clause.getMonads() + " is not part of " + 
     402            navigator.getFocusMonads(), 
     403            clause.getMonads().part_of(navigator.getFocusMonads())); 
     404    } 
     405     
     406    public void testCreateLogicalStructure() throws Exception 
     407    { 
     408        final int clauseId = 28974; // GEN 03,05(f) 
     409        MatchedObject clause = getClause(clauseId, new String[]{}); 
     410        ClauseController clauseController = getController(clauseId); 
     411 
     412        WebConversation loggedin = assertLogIn();         
     413        WebResponse resp = loggedin.getResponse(getClauseUrl()); 
     414         
     415        WebForm form = resp.getFormWithName("changels"); 
     416        form.setParameter("lsid", "add"); 
     417 
     418        int oldCount = getSql().getSingleInteger("SELECT COUNT(1) FROM " + 
     419            "lexicon_entries"); 
     420        resp = form.submit(); 
     421        assertEquals(oldCount + 1, getSql().getSingleInteger("SELECT COUNT(1) " + 
     422            "FROM lexicon_entries")); 
     423        int newLsId = getSql().getSingleInteger("SELECT MAX(ID) " + 
     424            "FROM lexicon_entries"); 
     425        assertEquals("http://localhost:8080/lex/lexicon.jsp?lsid=" + newLsId, 
     426            resp.getURL().toString()); 
     427 
     428        clause = getClause(clauseId, new String[]{"logical_struct_id"}); 
     429        assertEquals(newLsId, clause.getEMdFValue("logical_struct_id").getInt()); 
     430         
     431        Lexeme lexeme = Lexeme.load(getSql(), newLsId); 
     432        assertEquals(clauseController.getPredicateText(), lexeme.getPredicate()); 
    346433    } 
    347434     
  • lex/trunk/test/com/qwirx/lex/test/active/CommaSeparatedValueParserTest.java

    r176 r394  
    1 package com.qwirx.lex
     1package com.qwirx.lex.test.active
    22 
    33import java.io.InputStream; 
  • lex/trunk/test/com/qwirx/lex/test/active/EmdrosDatabaseTest.java

    r379 r394  
    55 * Window - Preferences - Java - Code Style - Code Templates 
    66 */ 
    7 package com.qwirx.lex
     7package com.qwirx.lex.test.active
    88 
    99import java.sql.ResultSet; 
     
    3737import com.qwirx.db.sql.SqlChange; 
    3838import com.qwirx.lex.emdros.EmdrosChange; 
     39import com.qwirx.lex.test.base.LexTestBase; 
    3940 
    4041/** 
  • lex/trunk/test/com/qwirx/lex/test/active/GenExporterTest.java

    r365 r394  
    1 package com.qwirx.lex
     1package com.qwirx.lex.test.active
    22 
    33import jemdros.MatchedObject; 
     
    1414import com.qwirx.crosswire.kjv.KJV; 
    1515import com.qwirx.db.sql.SqlDatabase; 
     16import com.qwirx.lex.GenExporter; 
     17import com.qwirx.lex.Lex; 
    1618import com.qwirx.lex.emdros.EmdrosDatabase; 
    1719import com.qwirx.lex.lexicon.Lexeme; 
  • lex/trunk/test/com/qwirx/lex/test/active/HebrewEnglishDatabaseTest.java

    r189 r394  
    1 package com.qwirx.lex
     1package com.qwirx.lex.test.active
    22 
    33import java.util.List; 
  • lex/trunk/test/com/qwirx/lex/test/active/JswordExamples.java

    r380 r394  
    2020 * ID: $Id: APIExamples.java 1466 2007-07-02 02:48:09Z dmsmith $ 
    2121 */ 
    22 package com.qwirx.lex
     22package com.qwirx.lex.test.active
    2323 
    2424import java.io.File; 
     
    6868 
    6969import com.qwirx.crosswire.kjv.KJV; 
     70import com.qwirx.lex.Lex; 
    7071import com.qwirx.lex.emdros.EmdrosDatabase; 
    7172import com.qwirx.lex.hebrew.HebrewEnglishDatabase; 
  • lex/trunk/test/com/qwirx/lex/test/active/LexemeTest.java

    r325 r394  
    1 package com.qwirx.lex
     1package com.qwirx.lex.test.active
    22 
    33import java.util.ArrayList; 
     
    2121import com.qwirx.db.sql.SqlChange; 
    2222import com.qwirx.db.sql.SqlDatabase; 
     23import com.qwirx.lex.Lex; 
    2324import com.qwirx.lex.emdros.EmdrosChange; 
    2425import com.qwirx.lex.emdros.EmdrosDatabase; 
     
    112113    private void assertEquals(Lexeme a, Lexeme b) 
    113114    { 
    114         assertEquals(a.id, b.id); 
     115        assertEquals(a.getID(), b.getID()); 
    115116        assertEquals(a.getLogicalStructure(), b.getLogicalStructure()); 
    116117        assertEquals(a.isCaused(),            b.isCaused()); 
     
    138139        assertNotNull(expected); 
    139140 
    140         String url = "http://localhost:8080/lex/lsedit.jsp?lsid=" +  
    141             expected.id
     141        String url = "http://localhost:8080/lex/lexicon.jsp?lsid=" +  
     142            expected.getID()
    142143        WebConversation conv = new WebConversation(); 
    143144        conv.getClientProperties().setAcceptGzip(false); 
     
    147148        assertNotNull(form); 
    148149 
    149         assertEquals(expected.id == 0 ? "" : expected.id + "",  
     150        assertEquals(expected.getID() == 0 ? "" : expected.getID() + "",  
    150151            form.getParameterValue("lsid")); 
    151152        checkCheckbox(form, "ls_caused", expected.isCaused()); 
     
    184185        assertNotNull(lexeme); 
    185186         
    186         String url = "http://localhost:8080/lex/lsedit.jsp?lsid=" +  
    187             lexeme.id
     187        String url = "http://localhost:8080/lex/lexicon.jsp?lsid=" +  
     188            lexeme.getID()
    188189        WebConversation conv = new WebConversation(); 
    189190        conv.getClientProperties().setAcceptGzip(false); 
     
    228229    private Lexeme checkSaveAndLoad(Lexeme newValues) throws Exception 
    229230    { 
    230         int id = newValues.id
     231        int id = newValues.getID()
    231232        assertFalse("new values should belong to an existing lexeme", id == 0); 
    232233         
    233234        Lexeme oldValues = Lexeme.load(sql, id); 
    234         assertEquals(id, oldValues.id); 
     235        assertEquals(id, oldValues.getID()); 
    235236        assertFalse("equals method did not detect change",  
    236237            newValues.equals(oldValues)); 
    237238         
    238239        newValues.save(); 
    239         assertEquals(id, newValues.id); 
     240        assertEquals(id, newValues.getID()); 
    240241         
    241242        Lexeme newCopy = Lexeme.load(sql, id); 
     
    260261    { 
    261262        Lexeme t = new Lexeme(sql); 
    262         assertEquals(0, t.id); 
     263        assertEquals(0, t.getID()); 
    263264        t.save(); 
    264         assertTrue(t.id != 0); 
     265        assertTrue(t.getID() != 0); 
    265266        addedLexemes.add(t); 
    266267 
    267         Lexeme t2 = Lexeme.load(sql, t.id); 
     268        Lexeme t2 = Lexeme.load(sql, t.getID()); 
    268269        assertEquals(t, t2); 
    269270        assertTrue(t2.equals(t)); 
     
    501502            new String[]{"YAT","IS","$LAYK"},  
    502503            new Object[][]{subjAttr, predAttr, objcAttr},  
    503             new Integer(be.id)); 
     504            new Integer(be.getID())); 
    504505        int clauseIdCatWantsMilk = addClause( 
    505506            new String[]{"YAT","WANTS","MILK"},  
    506507            new Object[][]{subjAttr, predAttr, objcAttr}, 
    507             new Integer(want.id)); 
     508            new Integer(want.getID())); 
    508509        int clauseIdCatDrinksMilk = addClause( 
    509510            new String[]{"YAT","DRINKS","MILK"},  
    510511            new Object[][]{subjAttr, predAttr, objcAttr}, 
    511             new Integer(drink.id)); 
     512            new Integer(drink.getID())); 
    512513         
    513514        DatabaseTransliterator transliterator = new DatabaseTransliterator(sql); 
  • lex/trunk/test/com/qwirx/lex/test/active/NavigatorTest.java

    r365 r394  
    1 package com.qwirx.lex
     1package com.qwirx.lex.test.active
    22 
    33import jemdros.SetOfMonads; 
    44 
    55import com.qwirx.lex.controller.Navigator; 
     6import com.qwirx.lex.test.base.LexTestBase; 
    67import com.qwirx.lex.translit.DatabaseTransliterator; 
    78 
  • lex/trunk/test/com/qwirx/lex/test/active/ParserTest.java

    r331 r394  
    44 * Unit tests for the Lex parser code. 
    55 */ 
    6 package com.qwirx.lex
     6package com.qwirx.lex.test.active
    77 
    88import java.util.ArrayList; 
  • lex/trunk/test/com/qwirx/lex/test/active/SearchTest.java

    r389 r394  
    1 package com.qwirx.lex
     1package com.qwirx.lex.test.active
    22 
    33import java.util.ArrayList; 
     
    99import jemdros.SheafConstIterator; 
    1010import jemdros.Straw; 
    11 import junit.framework.TestCase
     11import jemdros.StrawConstIterator
    1212 
    1313import org.aptivate.web.utils.HtmlIterator; 
     
    1616import com.meterware.httpunit.WebConversation; 
    1717import com.meterware.httpunit.WebResponse; 
    18 import com.qwirx.db.sql.SqlDatabase
     18import com.qwirx.lex.Search
    1919import com.qwirx.lex.Search.SearchResult; 
    20 import com.qwirx.lex.emdros.EmdrosDatabase; 
    2120import com.qwirx.lex.hebrew.HebrewConverter; 
    2221import com.qwirx.lex.morph.HebrewMorphemeGenerator; 
     22import com.qwirx.lex.test.base.LexTestBase; 
    2323import com.qwirx.lex.translit.DatabaseTransliterator; 
    2424 
     
    5050        search.setMaxResults(limit); 
    5151        assertSearchResultsMatch(query, search, limit); 
     52    } 
     53 
     54    private MatchedObject getNestedObject(SheafConstIterator sci) 
     55    throws Exception 
     56    { 
     57        Straw objects = sci.next(); 
     58        StrawConstIterator objecti = objects.const_iterator(); 
     59        assertTrue(objecti.hasNext()); 
     60        MatchedObject object = objecti.next(); 
     61        assertFalse(objecti.hasNext()); 
     62        return object; 
    5263    } 
    5364     
     
    7889        int count = 0; 
    7990         
    80         SheafConstIterator sci = sheaf.const_iterator(); 
    81         while (sci.hasNext()) 
    82         { 
    83             Straw straw = sci.next(); 
    84  
    85             count++; 
    86             if (count > limit) continue; 
    87  
    88             MatchedObject clause = straw.const_iterator().next(); 
    89             clauses.add(new Integer(clause.getID_D())); 
     91        { 
     92            SheafConstIterator sci = sheaf.const_iterator(); 
     93            while (sci.hasNext()) 
     94            { 
     95                Straw straw = sci.next(); 
     96     
     97                count++; 
     98                if (count > limit) continue; 
     99     
     100                MatchedObject clause = straw.const_iterator().next(); 
     101                clauses.add(new Integer(clause.getID_D())); 
     102            } 
    90103        } 
    91104         
    92105        String mql = "SELECT ALL OBJECTS IN " + 
    93106            getEmdros().getVisibleMonads().toString() + " " + 
    94             "WHERE " + 
    95             "[verse GET book, chapter, verse, verse_label " + 
    96             " [clause "; 
     107            "WHERE [book [chapter [verse GET verse_label [clause "; 
    97108         
    98109        if (clauses.size() == 0) 
     
    115126        mql += "[word GET lexeme_wit, " + 
    116127            new HebrewMorphemeGenerator().getRequiredFeaturesString(false) + 
    117             "]]]"; 
     128            "]]]]]"; 
    118129 
    119130        sheaf = getEmdros().getSheaf(mql); 
    120         sci = sheaf.const_iterator(); 
    121          
    122         while (sci.hasNext()) 
    123         { 
    124             Straw straw = sci.next(); 
    125             MatchedObject verse = straw.const_iterator().next(); 
    126              
    127             SheafConstIterator clause_iter = 
    128                 verse.getSheaf().const_iterator(); 
     131         
     132        for (SheafConstIterator bsci = sheaf.const_iterator(); bsci.hasNext();) 
     133        { 
     134            MatchedObject book = getNestedObject(bsci); 
     135 
     136            for (SheafConstIterator csci = book.getSheaf().const_iterator(); 
     137                csci.hasNext();) 
     138            { 
     139                MatchedObject chapter = getNestedObject(csci); 
    129140                 
    130             while (clause_iter.hasNext()) 
    131             { 
    132                 MatchedObject clause = 
    133                     clause_iter.next().const_iterator().next(); 
    134  
    135                 String original = ""; 
    136                 String translit = ""; 
    137                  
    138                 SheafConstIterator word_iter =  
    139                     clause.getSheaf().const_iterator(); 
     141                for (SheafConstIterator vsci = chapter.getSheaf().const_iterator(); 
     142                    vsci.hasNext();) 
     143                { 
     144                    MatchedObject verse = getNestedObject(vsci); 
    140145                     
    141                 while (word_iter.hasNext()) 
    142                 { 
    143                     MatchedObject word =  
    144                         word_iter.next().const_iterator().next(); 
     146                    for (SheafConstIterator  
     147                        clsci = verse.getSheaf().const_iterator(); 
     148                        clsci.hasNext();) 
     149                    { 
     150                        MatchedObject clause = getNestedObject(clsci); 
    145151                     
    146                     String lexeme = word.getEMdFValue("lexeme_wit").getString(); 
     152                        String original = ""; 
     153                        String translit = ""; 
     154                         
     155                        SheafConstIterator word_iter =  
     156                            clause.getSheaf().const_iterator(); 
     157                             
     158                        while (word_iter.hasNext()) 
     159                        { 
     160                            MatchedObject word =  
     161                                word_iter.next().const_iterator().next(); 
     162                             
     163                            String lexeme = word.getEMdFValue("lexeme_wit").getString(); 
     164                             
     165                            boolean isMatch = lexeme.equals(query) || 
     166                                lexeme.equals(query + "/") || 
     167                                lexeme.equals(query + "["); 
     168                             
     169                            if (isMatch) 
     170                            { 
     171                                original += "<strong>"; 
     172                                translit += "<strong>"; 
     173                            } 
     174                             
     175                            original += HebrewConverter.wordHebrewToHtml  (word, generator); 
     176                            translit += HebrewConverter.wordTranslitToHtml(word, 
     177                                generator, m_Transliterator); 
     178                             
     179                            if (isMatch) 
     180                            { 
     181                                original += "</strong>"; 
     182                                translit += "</strong>"; 
     183                            } 
    147184                     
    148                     boolean isMatch = lexeme.equals(query) || 
    149                         lexeme.equals(query + "/") || 
    150                         lexeme.equals(query + "["); 
    151                      
    152                     if (isMatch) 
    153                     { 
    154                         original += "<strong>"; 
    155                         translit += "<strong>"; 
     185                            original += " "; 
     186                            translit += " "; 
     187                        } 
     188         
     189                        assertTrue("Expected to find clause " + clause.getID_D() + 
     190                            " but was missing", actualIterator.hasNext()); 
     191                        SearchResult actual = actualIterator.next(); 
     192                        assertEquals(verse.getEMdFValue("verse_label").getString(), 
     193                            actual.getLocation()); 
     194                        assertEquals(actual.getLocation(),  
     195                            "<div class=\"hebrew\">" + original + "</div>\n" + 
     196                            "<div class=\"translit\">" + translit + "</div>\n", 
     197                            actual.getDescription()); 
     198                        assertEquals(actual.getLocation(), "clause.jsp" + 
     199                            "?book="    + book.getID_D() + 
     200                            "&chapter=" + chapter.getID_D() + 
     201                            "&verse="   + verse.getID_D() + 
     202                            "&clause="  + clause.getID_D(), 
     203                            actual.getLinkUrl() 
     204                        ); 
    156205                    } 
    157                      
    158                     original += HebrewConverter.wordHebrewToHtml  (word, generator); 
    159                     translit += HebrewConverter.wordTranslitToHtml(word, 
    160                         generator, m_Transliterator); 
    161                      
    162                     if (isMatch) 
    163                     { 
    164                         original += "</strong>"; 
    165                         translit += "</strong>"; 
    166                     } 
    167              
    168                     original += " "; 
    169                     translit += " "; 
    170206                } 
    171  
    172                 assertTrue("Expected to find clause " + clause.getID_D() + 
    173                     " but was missing", actualIterator.hasNext()); 
    174                 SearchResult actual = actualIterator.next(); 
    175                 assertEquals(verse.getEMdFValue("verse_label").getString(), 
    176                     actual.getLocation()); 
    177                 assertEquals(actual.getLocation(),  
    178                     "<div class=\"hebrew\">" + original + "</div>\n" + 
    179                     "<div class=\"translit\">" + translit + "</div>\n", 
    180                     actual.getDescription()); 
    181                 assertEquals(actual.getLocation(), 
    182                     "clause.jsp?book=" +  
    183                     getEmdros().getEnumConstNameFromValue("book_name_e", 
    184                         verse.getEMdFValue("book").getInt()) + 
    185                     "&amp;chapter=" + verse.getEMdFValue("chapter") + 
    186                     "&amp;verse="   + verse.getEMdFValue("verse") + 
    187                     "&amp;clause="  + clause.getID_D(), 
    188                     actual.getLinkUrl() 
    189                 ); 
    190207            } 
    191  
    192             assertEquals(count, search.getResultCount()); 
    193208        } 
    194209         
    195210        assertFalse("Found " + (actualResults.size() - count + 1) + 
    196211            " more results than expected", actualIterator.hasNext()); 
     212        assertEquals(count, search.getResultCount()); 
    197213    } 
    198214 
  • lex/trunk/test/com/qwirx/lex/test/active/ThematicRelationTest.java

    r86 r394  
    1 package com.qwirx.lex
     1package com.qwirx.lex.test.active
    22 
    33import junit.framework.TestCase; 
  • lex/trunk/test/com/qwirx/lex/test/active/TransliteratorTest.java

    r381 r394  
    1 package com.qwirx.lex
     1package com.qwirx.lex.test.active
    22 
    33import java.sql.PreparedStatement; 
     
    1919 
    2020import com.qwirx.db.sql.SqlDatabase; 
     21import com.qwirx.lex.ImmutableMap; 
     22import com.qwirx.lex.Lex; 
    2123import com.qwirx.lex.controller.ClauseController; 
    2224import com.qwirx.lex.emdros.EmdrosDatabase; 
     
    926928 
    927929        ClauseController controller = new ClauseController(m_Emdros, m_sql, 
    928             clauses.get(0).getId()); 
     930            m_Emdros.getVisibleMonads(), clauses.get(0).getId()); 
    929931        MatchedObject clause = controller.getClause(); 
    930932        assertEquals(clauses.get(0).getId(), clause.getID_D()); 
     
    991993 
    992994        ClauseController controller = new ClauseController(m_Emdros, m_sql, 
    993             clauses.get(0).getId()); 
     995            m_Emdros.getVisibleMonads(), clauses.get(0).getId()); 
    994996        MatchedObject clause = controller.getClause(); 
    995997        assertEquals(clauses.get(0).getId(), clause.getID_D()); 
     
    10201022         
    10211023        ClauseController controller = new ClauseController(m_Emdros, m_sql, 
    1022             clauses.get(0).getId()); 
     1024            m_Emdros.getVisibleMonads(), clauses.get(0).getId()); 
    10231025         
    10241026        for (int j = 0; j < 1000; j++) 
  • lex/trunk/test/com/qwirx/lex/test/active/TreeDrawingTest.java

    r132 r394  
    1 package com.qwirx.lex
     1package com.qwirx.lex.test.active
    22 
    33import java.awt.Font; 
  • lex/trunk/test/com/qwirx/lex/test/active/TreeNodeTests.java

    r306 r394  
    1 package com.qwirx.lex
     1package com.qwirx.lex.test.active
    22 
    33import java.util.ArrayList; 
     
    77import java.util.List; 
    88import java.util.ListIterator; 
     9 
     10import com.qwirx.lex.TreeNode; 
    911 
    1012import junit.framework.TestCase; 
  • lex/trunk/test/com/qwirx/lex/test/active/WivuLexiconTest.java

    r314 r394  
    1 package com.qwirx.lex
     1package com.qwirx.lex.test.active
    22 
    33import com.qwirx.lex.hebrew.WivuLexicon; 
  • lex/trunk/test/com/qwirx/lex/test/active/WordnetTest.java

    r26 r394  
    1 package com.qwirx.lex
     1package com.qwirx.lex.test.active
    22 
    33import junit.framework.TestCase;