[jsword-devel] SwordBookMetaData

DM Smith jsword-devel@crosswire.org
Mon, 29 Mar 2004 23:10:40 -0500


Feel free to modify anything that I do.


>From: Joe Walker <joe@eireneh.com>
>Reply-To: jsword-devel@crosswire.org
>To: jsword-devel@crosswire.org
>Subject: Re: [jsword-devel] SwordBookMetaData
>Date: Mon, 29 Mar 2004 22:05:43 +0100
>
>
>Thanks DM, that's excellent.
>I made a few tweaks, Some of the local variables were called the same names 
>as class variables, which makes accidental error a bit more likely. I only 
>know because I've got that warning turned on in eclipse. There were a few 
>comments in MapTable in //'s just before a bit of JavaDoc so I put one in 
>the other. I hope that's OK
>
>I'm editing the build file to make the jnlp build do nightly updates 
>properly, and to fix some of the breakage there is at the moment.
>Having done that I'm going to fix the default Bible, which is the bug I 
>find most annoying at the moment.
>
>Joe.
>
>
>DM Smith wrote:
>>Fixed the bug, made a few more changes and tested:
>>
>>I undid the line wrap as it did not work fully. The problem was that the 
>>computation of a cell's height was static based upon initial content and 
>>not on the content and the current width of the cell. I think it can be 
>>managed with listeners, but I left it as a future todo.
>>
>>I modified MapTableModel some more:
>>
>>Because Map keys can be objects, I called toString().trim() on them.
>>
>>I made "" an invalid key and null an invalid value.
>>
>>I copied the map into a list for direct access. The getValueAt used an 
>>iterator over the map, once per cell to find the content and assumed that 
>>it would always return the same data in the same order. This required a 
>>trivial helper class, StringPair.
>>
>>I eliminated getMap as it was being used badly by MapField (violated 
>>information hiding) to directly modify the map without causing and added 
>>methods to provide the needed behavior. I modified MapField to use these 
>>new MapTableModel methods. I don't think MapField is being used anywhere, 
>>so I could not figure out how to test the changes.
>>
>>I made getColumnCount return 0 if the map was null, 2 otherwise. This 
>>fixed problems with code like
>>for (int c = 0; c < getColumnCount(); c++) { do something on the column; } 
>>when the map was null, which is the case between a default TableModel 
>>constructor call and a call to setModel().
>>
>>I removed setValueAt since it was a bit buggy, in that if a key were 
>>changed, the order of the cells in the table would change and it did not 
>>fire changes to listeners. Also, because editing was turned off.
>>
>>DM Smith" wrote:
>>
>>>The patch has a fatal bug. Dumb last minute change. I will fix and 
>>>resend.
>>>
>>>DM Smith wrote:
>>>
>>>>
>>>>Attached is a patch for BookMetaData and its display.
>>>>Here is a summary of the changes I made:
>>>>MapTableModel returns a string of the object held in the iterator. This 
>>>>allows it to be used by any map and not just Properties.
>>>>
>>>>BookMetaData used to return Properties from getProperties. Now it 
>>>>returns Map. Perhaps the named should be changed as well.
>>>>
>>>>SwordBookMetadata:
>>>>When a line ended with \, I concatenated the next line with \n as a 
>>>>separator. I added the method getContinuation as a helper.
>>>>
>>>>When creating the props map, which has strings for values, I use \n to 
>>>>separate elements in the list.
>>>>
>>>>Changed props from a Properties to a LinkedHashMap. This required 
>>>>changing from setProperty to put.
>>>>
>>>>In parseLine, I trimed the value. (The key was already trimmed.)
>>>>
>>>>There is still an opportunity to eliminate duplicate input lines. But 
>>>>that probably should be a cleanup in the input.
>>>>
>>>>Modified getFullName to output parts only if they existed. This 
>>>>eliminated the trailing ','.
>>>>
>>>>Removed BOOK and DRIVER from the props since they were objects and not 
>>>>strings. Nothing was using it. They could be added back in as strings.
>>>>
>>>>Changed "table" from a HashMap to a LinkedHashMap to preserve the input 
>>>>order. This allows for save to lossless wrt order.
>>>>
>>>>To DefaultBookMetaData
>>>>The properties member variable was used to store both strings and 
>>>>objects for the same key. I changed it that it only stored strings. For 
>>>>each pair of set functions setX(Object x) and setX(String x), I made the 
>>>>second call the first and the first set the member variable and stored 
>>>>the field in the map.
>>>>
>>>>I changed getFullName to be the same as for SwordBookMetaData.
>>>>
>>>>I changed props from a Properties to a LinkedHashMap to preserve 
>>>>insertion order.
>>>>
>>>>I added two new classes: MapTable and MapCellRenderer. The MapTable 
>>>>works with a MapTableModel to present multiline data in rows that are 
>>>>tall enough to show the entire contents. The MapCellRenderer differs 
>>>>from the DefaultTableCellRenderer in that it uses a JTextArea to render 
>>>>text instead of a JLabel. This allows for it to render html, if we ever 
>>>>decide to go there. JLabel's support for html is really weak. I set it 
>>>>up to wrap text if the column is too narrow.
>>>>
>>>>I modified SitePane to use MapTable rather than JTable. It might make 
>>>>sense to use it where ever MapTableModel is used. I only used it here.
>>
>>
>>_________________________________________________________________
>>MSN Toolbar provides one-click access to Hotmail from any Web page  FREE 
>>download! http://toolbar.msn.com/go/onm00200413ave/direct/01/
>
>
>_______________________________________________
>jsword-devel mailing list
>jsword-devel@crosswire.org
>http://www.crosswire.org/mailman/listinfo/jsword-devel

_________________________________________________________________
Get rid of annoying pop-up ads with the new MSN Toolbar – FREE! 
http://toolbar.msn.com/go/onm00200414ave/direct/01/