DetailsPlace: Use a date-formatting API available in GWT client code.
[online-glom:gwt-glom.git] / ChangeLog
1 2012-12-02  Murray Cumming  <murrayc@murrayc.com>
2
3         DetailsPlace: Use a date-formatting API available in GWT client code.
4
5         * src/main/java/org/glom/web/client/place/DetailsPlace.java:
6         getStringForData(): Use DateTimeFormat.getFormat(), because that works 
7         on the client side (but not the server side) instead of String.format()
8         with Date.getYear()/getMonth()/getDate(), because they work only on the 
9         server side (but not on the client side). Rather annoying.
10         * src/test/java/org/glom/web/client/place/DetailsPlaceTest.java: Rename to
11         GwtTestDetailsPlace.
12         * src/test/java/org/glom/web/client/place/ListPlaceTest.java: Rename to
13         GwtTestListPlaceTest, so we can run these as client-side (generated 
14         Javascript) code so we can catch these problems sooner.
15         It is unfortunate that the code cannot run on the server-side as Java,
16         but it does not need to.
17
18 2012-12-02  Murray Cumming  <murrayc@murrayc.com>
19
20         In the UI, allow primary keys to be any type, and test it.
21
22         * src/main/java/org/glom/web/shared/TypedDataItem.java:
23         Added isUnknownType() for convenience.
24         * src/main/java/org/glom/web/client/place/DetailsPlace.java:
25         getToken(): Move some code into getStringForData() and handle
26         other data types.
27         * src/main/java/org/glom/web/server/Utils.java:
28         Added transformUnknownToActualType(), to parse the unknown string
29         as a particular type of data. This should correspond with 
30         getStringForData() above.
31         * src/main/java/org/glom/web/server/ConfiguredDocument.java:
32         Add setDataItemType() to set the type of data for primary
33         keys.
34         getDetailsData(), getSuitableRecordToViewDetails():
35         Call it, to have the correctly-typed primary key value.
36         We do it here, on the server, instead of before, because it 
37         is only here that we can know the field type that is in the 
38         document.
39         * src/test/java/org/glom/web/client/place/DetailsPlaceTest.java:
40         Added testGetPlaceParametersNumericPrimaryKey(),
41         testGetPlaceParametersBooleanPrimaryKey() and 
42         testGetPlaceParametersDatePrimaryKey).
43
44 2012-11-30  Murray Cumming  <murrayc@murrayc.com>
45
46         Allow primary keys to be any type, and test it.
47
48         * src/main/java/org/glom/web/shared/TypedDataItem.java:
49         Add overrides for the other set*() methods, to set the type.
50         Added getValue() which returns a generic Object.
51         * src/main/java/org/glom/web/server/SqlUtils.java:
52         buildSimpleWhereExpression(): Use TypedDataItem.getValue() instead of 
53         getNumber().
54         * src/test/java/org/glom/web/server/SelfHostExampleNonNumericPrimaryKeysTest.java:
55         Added this test, which is much like SelfHostExampleTest, but which uses this
56         test file, take from Glom:
57         * src/test/resources/org/glom/web/server/test_example_music_collection_text_pk_fields.glom:
58         which has all the primary keys changes to text instead of numbers.
59
60         However, parts of the UI code still assume that primary keys are numbers.
61
62 2012-11-28  Murray Cumming  <murrayc@murrayc.com>
63
64         SelfHostExampleTest: Move some checks into a utility function.
65
66         * src/test/java/org/glom/web/server/SelfHostExampleTest.java:
67         Move the data checks into a new file:
68         * src/test/java/org/glom/web/server/SelfHostTestUtils.java:
69         SelfHostTestUtils.java: so we can use it in some other 
70         tests, with different documents.
71
72 2012-11-28  Murray Cumming  <murrayc@murrayc.com>
73
74         SelfHosting test: Also try using a relationship.
75
76         * src/main/java/org/glom/web/server/database/DBAccess.java:
77         convertResultSetToDTO(): Move some code into a public 
78         method as:
79         * src/main/java/org/glom/web/server/SqlUtils.java:
80         fillDataItemFromResultSet(): This takes a DataItem and 
81         sets it from a value from a datbase recordset.
82         * src/main/java/org/glom/web/server/libglom/Document.java:
83         Make getDocument() public, so we can use it in a test.
84         * src/test/java/org/glom/web/server/SelfHostExampleTest.java:
85         Add testExampleMusiccollectionDataRelated() and call it from 
86         testExampleMusiccollectionData(), to do a basic test of using
87         a relationship.
88
89 2012-11-22  Murray Cumming  <murrayc@murrayc.com>
90
91         Build: Specify the source encoding.
92
93         * pom.xml: Set project.build.sourceEncoding
94         This should fix this build problem on some systems:
95         [ERROR] /var/lib/jenkins/workspace/OnlineGlom/src/test/java/org/glom/web/server/libglom/DocumentTest.java:[139,72] error: unmappable character for encoding ASCII
96
97 1.23.1:
98
99 2012-11-20  Murray Cumming  <murrayc@murrayc.com>
100
101         Update the jasperreports version.
102
103         * pom.xml: This was shown by
104         mvn versions:display-dependency-updates
105
106 2012-11-20  Murray Cumming  <murrayc@murrayc.com>
107
108         Eclipse: Reorder the Java Build Path to fix the build in Eclipse.
109
110         * .classpath: This prevents an error saying that getTextContent()
111         is undefined.
112         See http://mergetag.com/the-method-gettextcontent-is-undefined-for-the-type-node/
113
114 2012-11-20  Murray Cumming  <murrayc@murrayc.com>
115
116         Explicitly declare some dependencies (and scopes) that we use.
117
118         * pom.xml: The dependency report showed what we use.
119
120 2012-11-20  Murray Cumming  <murrayc@murrayc.com>
121
122         Update the gwt-test-utils version.
123
124         * pom.xml: gwt-test-utils 0.43 uses GWT 2.5.0, not GWT 2.4.0.
125         Using both in the same project was causing gwt-log to fail in GWTBrige,
126         with this error:
127         testOutOfBounds(org.glom.web.server.libglom.DocumentLayoutPathTest):
128         (class: com/google/gwt/core/client/GWT, method: setBridge signature: (Lcom/google/gwt/core/client/GWTBridge;)V) Incompatible argument to function
129
130 2012-11-19  Murray Cumming  <murrayc@murrayc.com>
131
132         DocumentTest: testLocales(): Update for the latest example version.
133
134         * src/test/java/org/glom/web/server/libglom/DocumentTest.java:
135         The .glom file, updated in the previous commit, now has more translations.
136
137 2012-11-19  Murray Cumming  <murrayc@murrayc.com>
138
139         Update the .glom files used for tests.
140
141         * src/test/resources/org/glom/web/server/example_film_manager.glom:
142         * src/test/resources/org/glom/web/server/example_music_collection.glom:
143         * src/test/resources/org/glom/web/server/libglom/example_film_manager.glom:
144         * src/test/resources/org/glom/web/server/libglom/example_music_collection.glom:
145         Copy them from git master of Glom.
146
147 2012-11-18  Murray Cumming  <murrayc@murrayc.com>
148
149         Update versions of dependencies.
150
151         * pom.xml: Increase some version numbers based on the output of
152         , using mvn versions:display-dependency-updates.
153         * src/test/java/org/glom/web/client/GwtTestOnlineGlom.java:
154         Use the annotation instead of getModuleName().
155         * src/test/java/org/glom/web/server/SelfHostConfiguredDocumentTest.java:
156         Do not use deprecated assert() classes/methods.
157
158 2012-11-18  Murray Cumming  <murrayc@murrayc.com>
159
160         Document: Correct an import to use the correct Log API.
161
162         * src/main/java/org/glom/web/server/libglom/Document.java:
163         Use our Utils.Log API rather than the jfree one that Eclipse
164         must have suggested at some time.
165
166 2012-11-15  Murray Cumming  <murrayc@murrayc.com>
167
168         Details: Get static image data from our images services.
169
170         * src/main/java/org/glom/web/client/ui/details/DetailsCell.java:
171         Add constructors for LayoutItemText and LayoutItemImage and
172         deal with their common type instead of just LayoutItemField.
173         setData():
174         * src/main/java/org/glom/web/client/activity/DetailsActivity.java:
175         Adapted.
176         * src/main/java/org/glom/web/client/ui/details/Group.java:
177         createChildWidget(): Use the other DetailsCell constructors for
178         these layout items, and do not add them to the list of
179         cells with data from the database.
180         * src/main/java/org/glom/web/server/ConfiguredDocument.java:
181         getValidListViewLayoutGroup(), getDetailsLayoutGroup():
182         Remove the image data when cloning the layout and storing it in the
183         cache. Clients will instead get it via the URL, from
184         our images service.
185         * src/main/java/org/glom/web/server/OnlineGlomImages.java:
186         doGet(): Depending on the URI parameters, optionally get 
187         image data from a layout_item_image in the document,
188         via its layout path.
189         * src/main/java/org/glom/web/server/database/DBAccess.java:
190         convertResultSetToDTO(): Move some URIBuilder code to:
191         * src/main/java/org/glom/web/server/Utils.java:
192         Add buildImageDataUrl() taking the primary key, etc, to
193         get data from the database.
194
195 2012-11-15  Murray Cumming  <murrayc@murrayc.com>
196
197         Document: Static image items: Store an image URL, using the layout path. 
198
199         * src/main/java/org/glom/web/server/Utils.java: Add buildImageDataUrl().
200         * src/main/java/org/glom/web/server/libglom/Document.java:
201         Add a constructor that takes the documentID, for use in the 
202         LayoutItemImage URL.
203         loadLayoutNode(): Pass a Path object to the helper methods, so we 
204         can use it to create a URL for LayoutItemImage items.
205         This seems as good a way as any to specify a layout item in the document.
206         * src/main/java/org/glom/web/server/ConfiguredDocumentSet.java:
207         Pass the documentID to the constructor, for use in the LayoutItemImage
208         URL.
209
210 2012-11-15  Murray Cumming  <murrayc@murrayc.com>
211
212         Document: Add getLayoutItemByPath().
213
214         * src/main/java/org/glom/web/server/Utils.java:
215         Add buildLayoutPath() and parseLayoutPath().
216         * src/test/java/org/glom/web/server/LayoutPathTest.java: Test that these 
217         utility methods work.
218         * src/main/java/org/glom/web/server/libglom/Document.java:
219         Add Add getLayoutItemByPath().
220         * src/test/java/org/glom/web/server/libglom/DocumentLayoutPathTest.java: Test 
221         that it works.
222
223         This will be useful in subsequent commits.
224
225 2012-11-15  Murray Cumming  <murrayc@murrayc.com>
226
227         Document: Use a better base64 decoder to read static image data.
228
229         * src/test/java/org/glom/web/server/libglom/DocumentTest.java:
230         getNodeTextChildAsValue(): Use the apache commons base64 decoder
231         instead of the gwt one, because it correctly decodes the strings
232         from g_base64_encode(). It is probably more correct.
233         The newlines might be confusing the gwt decoder.
234
235 2012-11-14  Murray Cumming  <murrayc@murrayc.com>
236
237         Document: Do not use == to compare strings. Use equals().
238
239         * src/main/java/org/glom/web/server/libglom/Document.java:
240         == only checks that they are the same object, so it can 
241         seem to fail.
242
243 2012-11-14  Murray Cumming  <murrayc@murrayc.com>
244
245         Document: Add and use public constants for layout names.
246
247         * src/main/java/org/glom/web/server/libglom/Document.java:
248         Make LAYOUT_NAME_DETAILS and LAYOUT_NAME_LIST public.
249         * src/main/java/org/glom/web/server/ConfiguredDocument.java:
250         * src/main/java/org/glom/web/server/database/DetailsDBAccess.java:
251         * src/test/java/org/glom/web/server/SelfHostConfiguredDocumentTest.java:
252         * src/test/java/org/glom/web/server/libglom/DocumentTest.java: Use 
253         them here instead of hard-coded the strings repeatedly.
254
255 2012-11-13  Murray Cumming  <murrayc@murrayc.com>
256
257         Document: Load static text and image items too.
258
259         * src/main/java/org/glom/web/shared/libglom/layout/LayoutItemImage.java:
260         * src/main/java/org/glom/web/shared/libglom/layout/LayoutItemText.java:
261         New LayoutItem classes to represent these layout items.
262         * src/main/java/org/glom/web/shared/libglom/layout/StaticText.java: The 
263         main text of a LayoutItemText.
264         * src/main/java/org/glom/web/server/libglom/Document.java:
265         load_after_layout_group(): Handle the node types and instantiate the 
266         new classes.
267         * src/test/java/org/glom/web/server/libglom/DocumentTest.java:
268         Add testLayoutItemText() to check that the text is loaded properly.
269
270 2012-11-13  Murray Cumming  <murrayc@murrayc.com>
271
272         Do not use client.GWT for shared code.
273
274         * src/main/java/org/glom/web/shared/libglom/layout/Formatting.java:
275         Import shared.GWT instead of client.GWT, which seems to be appropriate.
276
277 2012-11-12  Murray Cumming  <murrayc@murrayc.com>
278
279         Use image data when recreating databases for testing.
280
281         * src/main/java/org/glom/web/shared/DataItem.java: Add get/setImageData(),
282         for use locally (not acrosss the network) when recreating databases
283         for testing.
284         getValue(): Use it here instead of getImageDataUrl(), noting that 
285         this method is only for use when recreating databases.
286         * src/main/java/org/glom/web/server/libglom/Document.java:
287         getNodeTextChildAsValue(): Use it instead of setImageDataUrl().
288
289 2012-11-09  Murray Cumming  <murrayc@murrayc.com>
290
291         OnlineGlomImages: Detect the mime-type (content type).
292
293         * src/main/java/org/glom/web/server/OnlineGlomImages.java:
294         doGet(): Instead of hard-coding image/png.
295
296 2012-11-09  Murray Cumming  <murrayc@murrayc.com>
297
298         Eclipse project files: Use JDK 1.7 instead of JDK 1.6.
299
300         * .classpath:
301         * .settings/org.eclipse.jdt.core.prefs: By changing the Eclipse
302         Java Compiler and Java Build path settings in the UI.
303
304 2012-11-09  Murray Cumming  <murrayc@murrayc.com>
305
306         Use the latest (now stable) version of GWT.
307
308         * pom.xml: And the latest version of the gwt-maven-plugin.
309
310 2012-11-08  Murray Cumming  <murrayc@murrayc.com>
311
312         Added an Indonesian translation.
313
314         * src/main/java/org/glom/web/OnlineGlom.gwt.xml:
315         * src/main/resources/org/glom/web/client/ui/OnlineGlomConstants_id.properties:
316         This is from the new translation in Glom.
317
318 2012-07-23  Murray Cumming  <murrayc@murrayc.com>
319
320         Details: Show images.
321
322         * src/main/java/org/glom/web/server/OnlineGlomServiceImpl.java:
323         Move some code into
324         * src/main/java/org/glom/web/server/ConfiguredDocumentSet.java:
325         so it can be used in:
326         * src/main/java/org/glom/web/server/OnlineGlomImages.java: A new servlet just
327         for serving image data.
328         * src/main/webapp/WEB-INF/web.xml: Mention the new servlet.
329
330         * src/main/java/org/glom/web/shared/DataItem.java: Added get/setImageDataUrl().
331         * src/main/java/org/glom/web/client/ui/details/DetailsCell.java:
332         setData(): For image field types, add a GWT Image widget, 
333         with the URL that was set in the DataItem.
334
335         * pom.xml: Depend on org.apache.httpcomponents for UriBuilder.
336         * src/main/java/org/glom/web/server/database/DBAccess.java:
337         convertResultSetToDTO(): Set the URL for image data, so the client browser
338         can retrieve the image from our new servlet. This uses UriBuilder.
339         Move getPrimaryKeyField to:
340         * src/main/java/org/glom/web/server/libglom/Document.java:
341         Added getTablePrimaryKeyField().
342
343         * src/main/java/org/glom/web/server/database/DetailsDBAccess.java:
344         * src/main/java/org/glom/web/server/database/ListDBAccess.java:
345         * src/main/java/org/glom/web/server/database/RelatedListNavigation.java:
346         Adapted.
347
348 2012-07-22  Murray Cumming  <murrayc@murrayc.com>
349
350         Rename the servlet.
351
352         * src/main/java/org/glom/web/OnlineGlom.gwt.xml:
353         * src/main/java/org/glom/web/client/OnlineGlomService.java:
354         * src/main/webapp/WEB-INF/web.xml: Change the servlet-name from libGlom
355         to gwtGlom, which is more appropriate.
356         This servlet name does not seem to be visible to the client side anyway.
357
358 2012-07-22  Murray Cumming  <murrayc@murrayc.com>
359
360         Tests: Make the imports of assert*() consistent.
361
362         * src/test/java/org/glom/web/client/GwtTestOnlineGlom.java:
363         * src/test/java/org/glom/web/client/place/DetailsPlaceTest.java:
364         * src/test/java/org/glom/web/client/place/ListPlaceTest.java:
365         * src/test/java/org/glom/web/server/ConfiguredDocumentTest.java:
366         * src/test/java/org/glom/web/server/SelfHostConfiguredDocumentTest.java:
367         * src/test/java/org/glom/web/server/SelfHostExampleTest.java:
368         * src/test/java/org/glom/web/server/libglom/DocumentTest.java:
369         * src/test/java/org/glom/web/server/libglom/LayoutItemFieldTest.java:
370         * src/test/java/org/glom/web/server/libglom/LayoutItemPortalDeepCloneTest.java:
371         * src/test/java/org/glom/web/shared/DataItemTest.java:
372         Just do
373         import static org.junit.Assert.*;
374         which seems fairly common.
375
376 1.21.10 (unstable):
377
378 2012-07-21  Murray Cumming  <murrayc@murrayc.com>
379
380         tests: Move a test that needs a database connection.
381
382         * src/test/java/org/glom/web/server/ConfiguredDocumentTest.java:
383         Move testGetListViewLayoutGroup() to
384         * src/test/java/org/glom/web/server/SelfHostConfiguredDocumentTest.java:
385         because it needs a database connection.
386
387 2012-07-21  Murray Cumming  <murrayc@murrayc.com>
388
389         tests: Use @BeforeClass on tearDown().
390
391         * src/test/java/org/glom/web/server/OnlineGlomPropertiesTest.java:
392         * src/test/java/org/glom/web/server/SelfHostExampleTest.java:
393         This avoids leaking a postgres process in SelfHostExampleTest.
394
395 2012-07-21  Murray Cumming  <murrayc@murrayc.com>
396
397         tests: Test translations more.
398
399         * src/test/java/org/glom/web/server/ConfiguredDocumentTest.java:
400         * src/test/java/org/glom/web/server/SelfHostConfiguredDocumentTest.java:
401         Test titles in the non-default locale.
402
403 2012-07-21  Murray Cumming  <murrayc@murrayc.com>
404
405         tests: Add SelfHostConfiguredDocumentTest
406  
407         * src/test/java/org/glom/web/server/SelfHoster.java: Add getters for the 
408         username and password, for use by ConfiguredDocument.
409         * src/test/java/org/glom/web/server/SelfHostConfiguredDocumentTest.java: 
410         This tests some of the ConfiguredDocument API that requires a database connection.
411
412 2012-07-21  Murray Cumming  <murrayc@murrayc.com>
413
414         Document: Load title translations and test them.
415
416         * src/main/java/org/glom/web/server/libglom/Document.java: Load the translations
417         of titles. I am surprised that we do not do this yet.
418         * src/test/java/org/glom/web/server/ConfiguredDocumentTest.java:
419         * src/test/java/org/glom/web/server/libglom/DocumentTest.java:
420         Test translations more.
421
422 2012-07-20  Murray Cumming  <murrayc@murrayc.com>
423
424         Set JDBC timeouts.
425
426         * src/main/java/org/glom/web/server/ConfiguredDocument.java:
427         * src/main/java/org/glom/web/server/database/ListDBAccess.java:
428         Set the timeout here too.
429
430 2012-07-20  Murray Cumming  <murrayc@murrayc.com>
431
432         tests: ConfiguredDocumentTest: Make this pass.
433
434         * src/test/java/org/glom/web/server/ConfiguredDocumentTest.java:
435         Disable tests that need a database connection.
436
437 2012-07-20  Murray Cumming  <murrayc@murrayc.com>
438
439         Use Java 1.7 instead of Java 1.6.
440
441         * pom.xml: Specify the 1.7 JDK, though I don't like how we seem to need
442         to do this twice, at least for Eclipse.
443         This seems OK because it is the current version.
444
445 2012-07-20  Murray Cumming  <murrayc@murrayc.com>
446
447         Some error checking.
448
449         * src/main/java/org/glom/web/server/Log.java: Avoid using null strings.
450         * src/main/java/org/glom/web/server/database/ListDBAccess.java:
451         Avoid using a null Connection.
452
453 2012-07-20  Murray Cumming  <murrayc@murrayc.com>
454
455         tests: Add a ConfiguredDocument test.
456
457         * src/test/java/org/glom/web/server/ConfiguredDocumentTest.java:
458         Add this test.
459
460 2012-07-20  Murray Cumming  <murrayc@murrayc.com>
461
462         LayoutItemFIeld: getName(): Use the Field if it is set.
463
464         * src/main/java/org/glom/web/shared/libglom/layout/LayoutItemField.java:
465         getName(): If the full field details have been set, return its name, so that
466         callers do not need to set the name separately.
467         * src/test/java/org/glom/web/server/SelfHostExampleTest.java:
468         testExampleMusiccollectionData): Do not use a TYPE_FORWARD_ONLY statement,
469         so we can count the rows.
470
471 2012-07-20  Murray Cumming  <murrayc@murrayc.com>
472
473         tests: SelfHoster: Test SqlUtils too.
474
475         * src/test/java/org/glom/web/server/SelfHostExampleTest.java:
476         Retrieve some data and check it too, as in the regular Glom
477         test_selfhosting_new_from_example.cc test.
478         * src/test/java/org/glom/web/server/SelfHoster.java:
479         createConnection(): Make this public.
480
481 2012-07-20  Murray Cumming  <murrayc@murrayc.com>
482
483         tests: SelfHoster: createConnection(): Do not warn about expected failures.
484         
485         Let the caller say if the connection is expected to fail, to avoid 
486         irrelevant error output.
487
488 2012-07-20  Murray Cumming  <murrayc@murrayc.com>
489
490         tests: SelfHoster: createAndSelfHostNewEmpty(): Sleep after starting server.
491         
492         * src/test/java/org/glom/web/server/SelfHoster.java:
493         createAndSelfHostNewEmpty(): Sleep initially, to avoid distracting errors
494         due to the inevitable need to retry the connection while the database server
495         starts.
496
497 2012-07-20  Murray Cumming  <murrayc@murray.com>
498
499         tests: SelfHoster: createConnection(): Set a timeout.
500
501         * src/test/java/org/glom/web/server/SelfHoster.java:
502         createConnection(): Use setLoginTimeout() because it otherwise seems to take
503         ages to actually return when it fails.
504
505 2012-07-20  Murray Cumming  <murrayc@murrayc.com>
506
507         tests: SelfHoster: selfHost(): Close the test connection.
508
509         * src/test/java/org/glom/web/server/SelfHoster.java: selfHost():
510         When we check that the connection works, close the connection. This seems
511         to not be closed automatically otherwise.
512
513 2012-07-20  Murray Cumming  <murrayc@murrayc.com>
514
515         Use slf4j-simple to see JDBC errors.
516
517         * pom.xml: Depend on slf4j-simple so we can see errors from JDBC.
518
519 2012-07-19  Murray Cumming  <murrayc@murrayc.com>
520
521         SelfHoster.discoverFirstFreePort(): Close the socket.
522
523         * src/test/java/org/glom/web/server/SelfHoster.java:
524         discoverFirstFreePort(): Close the socket. Eclipse Juno warns about this.
525
526 2012-07-19  Murray Cumming  <murrayc@murrayc.com>
527
528         Avoid another code warning in Eclipse Juno.
529
530         * src/main/java/org/glom/web/server/OnlineGlomServiceImpl.java:
531         Do instanceof checks on the FileUtils.listFiles() result and its 
532         items.
533
534 2012-07-13  Murray Cumming  <murrayc@murrayc.com>
535
536         Avoid some code warnings in Eclipse Juno
537
538         * src/main/java/org/glom/web/server/libglom/Document.java:
539         getNodeTextChildAsValue(), setNodeTextChildAsValue(): Handle the invalid type.
540         * src/test/java/org/glom/web/server/SelfHoster.java
541         createTextFile(): Make sure that the FileOutputStream is closed.
542
543 2012-06-22  Murray Cumming  <murrayc@murrayc.com>
544
545         Added OnlineGlomPropertiesTest.
546
547         * src/main/java/org/glom/web/server/OnlineGlomProperties.java:
548         Make sure we never return a null string.
549         * src/test/java/org/glom/web/server/OnlineGlomPropertiesTest.java:
550         Added tests of the OnlineGlomProperties API, using our sample file.
551
552 2012-06-20  Murray Cumming  <murrayc@murrayc.com>
553
554         Make OnlineGlomProperties be a normal class.
555
556         * src/main/java/org/glom/web/server/OnlineGlomServiceImpl.java:
557         Move OnlineGlomProperties into its own file to be a regular class:
558         * src/main/java/org/glom/web/server/OnlineGlomProperties.java:
559         This makes testing simpler.
560
561 2012-06-15  Murray Cumming  <murrayc@murrayc.com>
562
563         OnlineGlomServiceImpl.init(): Move some code into a new method.
564
565         * src/main/java/org/glom/web/server/OnlineGlomServiceImpl.java:
566         Create addDocument().
567
568 2012-06-15  Murray Cumming  <murrayc@murrayc.com>
569
570         OnlineGlomServiceImpl.OnlineGlomProperties: Improve getKey().
571
572         * src/main/java/org/glom/web/server/OnlineGlomServiceImpl.java:
573         OnlineGlomProperties.getKey(): Make this more robust by moving the
574         check for *.*.filename to here.
575
576 2012-06-15  Murray Cumming  <murrayc@murrayc.com>
577
578         OnlineGlomServiceImpl: Improve the OnlineGlomProperties class.
579
580         * src/main/java/org/glom/web/server/OnlineGlomServiceImpl.java
581         init(): Move knowledge of the config file format into the 
582         OnlineGlomProperties inner class.
583
584 2012-06-15  Murray Cumming  <murrayc@murrayc.com>
585
586         SelfHostExampleTest: Make sure we cleanup on failure.
587
588         * src/test/java/org/glom/web/server/SelfHostExampleTest.java: Move
589         the use of cleanup() to a tearDown() JUnit method.
590
591 1.21.9.3:
592
593 2012-06-12  Murray Cumming  <murrayc@murrayc.com>
594
595         ConfiguredDocument: Add a primary key to portals at least once.
596
597         * src/main/java/org/glom/web/server/ConfiguredDocument.java
598         updatePortalsExtras): Fix a typo so that we add the primary key
599         column at least once.
600         This is a fix for the previous commit:
601         ConfiguredDocument: Do not add a primary key to portals each time.
602
603 2012-06-08  Murray Cumming  <murrayc@murrayc.com>
604
605         SelfHoster: Avoid some compiler warnings.
606
607         * src/test/java/org/glom/web/server/SelfHoster.java
608         executeCommandLineAndWait():
609         executeCommandLineAndWaitUntilSecondCommandReturnsSuccess(): Comment out
610         the now-unused streams for stdout and stderr from the command Processes.
611         These are not used because readln() hangs while waiting for a new line,
612         where there may be no next line. The commented out code is still there
613         to help us figure out how to do this properly.
614
615 2012-06-08  Murray Cumming  <murrayc@murrayc.com>
616
617         LayoutItemPortalDeepCloneTest: Test something to avoid warnings.
618
619         * src/test/java/org/glom/web/server/libglom/LayoutItemPortalDeepCloneTest.java:
620         Make this actually test the cloning again, though it is not very useful
621         now that we do not use the part that had a problem with cloning before.
622
623 2012-06-08  Murray Cumming  <murrayc@murrayc.com>
624
625         SelfHoster: Keep trying pg_ctl after starting postgres.
626
627         * src/test/java/org/glom/web/server/SelfHoster.java
628         executeCommandLineAndWaitUntilSecondCommandReturnsSuccess():
629         Try pg_ctl repeatedly (for ever) until it succeeds, as we do in 
630         regular Glom. This seems mad but it seems to work because the first
631         command would fail if pg_ctl would eventually fail.
632
633 2012-06-08  Murray Cumming  <murrayc@murrayc.com>
634
635         SelfHoster: Wait until the server is really ready.
636
637         * src/test/java/org/glom/web/server/SelfHoster.java
638         selfHost(): Attempt the connection after starting the server, retrying 
639         a few times if necessary, so that the server is really ready already when
640         we return from this method.
641         The regular Glom code does this too because pg_ctl reports success too soon.
642
643 2012-06-08  Murray Cumming  <murrayc@murrayc.com>
644
645         ConfiguredDocument: Do not add a primary key to portals each time.
646
647         * src/main/java/org/glom/web/server/ConfiguredDocument.java
648         updatePortalsExtras(): Only add an extra primary key field if there is 
649         none, to avoid adding one each time we retrieve the details layout from the
650         layouts cache.
651         This should fix bug #676986 (Ben Konrath) 
652
653 2012-05-25  Murray Cumming  <murrayc@murrayc.com>
654
655         Document.load(): Support version 7 documents. 
656
657         * src/main/java/org/glom/web/server/libglom/Document.java: Load the 
658         database_title attribute if the title attribute is not there.
659         Bug #676737
660
661 2012-05-24  Ben Konrath  <ben@bagu.org>
662
663         Add configuration for auto-generating mvn:i18n from with Eclipse.
664
665         * pom.xml: Add PluginExecution configuration for gwt-maven-plugin.
666
667 2012-05-24  Murray Cumming  <murrayc@murrayc.com>
668
669         Update translations, adding French.
670
671         * src/main/java/org/glom/web/OnlineGlom.gwt.xml:
672         * src/main/resources/org/glom/web/client/ui/OnlineGlomConstants_fr.properties:
673         Add a French translation, using the translation from Glom.
674
675         * src/main/resources/org/glom/web/client/ui/OnlineGlomConstants_cs.properties:
676         * src/main/resources/org/glom/web/client/ui/OnlineGlomConstants_es.properties:
677         * src/main/resources/org/glom/web/client/ui/OnlineGlomConstants_sl.properties:
678         Update these based on the translations from Glom.
679
680 2012-05-24  Murray Cumming  <murrayc@murrayc.com>
681
682         SelfHoster: Add some debug println messages to help when things fail.
683
684         * src/test/java/org/glom/web/server/SelfHoster.java: Add several
685         System.out.println() lines.
686
687 2012-05-23  Murray Cumming  <murrayc@murrayc.com>
688
689         Tests: SelfHoster: Check other paths for PostgreSQL command-line tools.
690
691         * src/test/java/org/glom/web/server/SelfHoster.java:
692         getPathToPostgresExecutable(): Try some common paths (as on Ubuntu, for 
693         instance) instead of just /usr/bin (as on Fedora). Check the result when 
694         using this method.
695
696 2012-05-23  Murray Cumming  <murrayc@murrayc.com>
697
698         Remove LayoutItemPortal.get/setNavigationTable().
699         
700         * src/main/java/org/glom/web/shared/libglom/layout/LayoutItemPortal.java:
701         Remove get/setNavigationTable(), which is only a cache, because it is not
702         used, and does not need to be used, because that decision should be made on
703         the server.
704         * src/main/java/org/glom/web/server/ConfiguredDocument.java:
705         updatePortalsExtras():
706         * src/main/java/org/glom/web/server/database/RelatedListNavigation.java:
707         getNavigationRecord():
708         * src/test/java/org/glom/web/server/libglom/LayoutItemPortalDeepCloneTest.java:
709         Adapted.
710
711 2012-05-21  Murray Cumming  <murrayc@murrayc.com>
712
713         Initial self-hosting for tests.
714
715         * pom.xml: Change the scope for log4j, to hopefully make it 
716         available to the test code which uses it indirectly via jOOQ.
717         * src/main/java/org/glom/web/server/ConfiguredDocument.java: Allow
718         self-hosting, though we only use it for testing.
719
720         * src/main/java/org/glom/web/server/libglom/Document.java:
721         example rows: Use a map instead of a list for each row of values,
722         so we know what field they are for, instead of relying on the sequence
723         being correct. This is not very efficient, but it does not really need 
724         to be.
725         * src/test/java/org/glom/web/server/libglom/DocumentTest.java
726         testReadTableExampleRows(): Adapted.
727
728         * src/main/java/org/glom/web/shared/DataItem.java: Added getValue()
729         that returns an Object, for generic use. Note that Object seems to be 
730         the implicit base even of double.
731         * src/main/java/org/glom/web/shared/libglom/Field.java: Add getSqlType(),
732         for use in CREATE TABLE SQL queries.
733         * src/test/java/org/glom/web/server/SelfHoster.java: Add this class 
734         to do self-hosting of PostgreSQL databases via its command-line 
735         utilities, based on Glom's C++ code in test_selfhosting_utils.cc and
736         backends/postgres_self.cc. This is incomplete - it needs more 
737         warnings about failures and it needs to clean up properly when things
738         fail.
739         * src/test/java/org/glom/web/server/SelfHostExampleTest.java: A simple 
740         test of this new class.
741
742 2012-05-21  Murray Cumming  <murrayc@murrayc.com>
743
744         Document: loading example data: Handle exceptions.
745
746         * src/main/java/org/glom/web/server/libglom/Document.java:
747         DateFormat.parse() and Double.valueOf() can throw exceptions, though
748         Eclipse did not warn about that.
749
750 2012-05-20  Murray Cumming  <murrayc@murrayc.com>
751
752         Document: load(), save(): Handle the example rows.
753
754         * src/main/java/org/glom/web/shared/DataItem.java: Add get/setDate() 
755         and get/setImage().
756         * src/main/java/org/glom/web/server/libglom/Document.java:
757         load(), save(): Load and save the example rows, though the date, time
758         and image types are not handled properly yet.
759         * src/test/java/org/glom/web/server/libglom/DocumentTest.java:
760         Add testReadTableExampleRows() just to check that something is read.
761
762 2012-05-20  Murray Cumming  <murrayc@murrayc.com>
763
764         Document: Add save().
765
766         * src/main/java/org/glom/web/shared/libglom/Translatable.java:
767         Added getTranslationsMap() for use while saving.
768         * src/main/java/org/glom/web/shared/libglom/layout/LayoutItemField.java:
769         Adedd getUseDefaultFormatting() for use while saving.
770         * src/main/java/org/glom/web/server/libglom/Document.java: Added save()
771         and several private methods that it uses.
772
773         This will be useful while testing via self-hosting.
774         It is not complete, but should be complete enough for testing.
775
776 2012-05-17  Murray Cumming  <murrayc@murrayc.com>
777
778         OnlineGlomService: Simplify the getList/RelatedViewData() methods.
779
780         * src/main/java/org/glom/web/client/OnlineGlomService.java
781         * src/main/java/org/glom/web/client/OnlineGlomServiceAsync.java
782         * src/main/java/org/glom/web/server/OnlineGlomServiceImpl.java
783         Remove getSortedListViewData() and getSortedRelatedListData(), adding
784         the sort column index and ascending bool to the regular method.
785         Instead, a sort column index of -1 now means no sort.
786         This is less explicit, but it's fairly simple, reduces the amount of 
787         code, and makes the OnlineGlomService API slightly smaller.
788         * src/main/java/org/glom/web/client/ui/details/RelatedListTable.java:
789         * src/main/java/org/glom/web/client/ui/list/ListViewTable.java:
790         getDataProvider():
791         * src/main/java/org/glom/web/server/ConfiguredDocument.java:
792         getListViewData(), getRelatedListData():
793         * src/main/java/org/glom/web/server/OnlineGlomServiceImpl.java:
794         getListViewData(), getRelatedListData():
795         * src/main/java/org/glom/web/server/database/ListDBAccess.java:
796         getListData():
797         * src/main/java/org/glom/web/server/database/ListViewDBAccess.java:
798         getData():
799         * src/main/java/org/glom/web/server/database/RelatedListDBAccess.java:
800         getData(): Adapted.
801
802 1.21.9.2:
803
804 2012-05-16  Murray Cumming  <murrayc@murrayc.com>
805
806         Use translations for top-level groups too.
807
808         * src/main/java/org/glom/web/server/ConfiguredDocument.java:
809         updateTitlesForLocale(): Use the translation for the group 
810         as well as for child items.
811
812 1.21.9.1:
813
814 Just recompiled to fix a problem in the released .tar.gz file.
815
816 1.21.9:
817
818 2012-05-15  Murray Cumming  <murrayc@murrayc.com>
819
820         Corrections to navigation to related records.
821         
822         * src/main/java/org/glom/web/client/OnlineGlomService.java:
823         * src/main/java/org/glom/web/client/OnlineGlomServiceAsync.java:
824         * src/main/java/org/glom/web/server/OnlineGlomServiceImpl.java:
825         getRelatedListData(), getSortedRelatedListData)(), getRelatedListRowCount(),
826         getSuitableRecordToViewDetails(): Take a LayoutItemPortal instead of a 
827         relationship name, because the relationship name is not necessarily unique 
828         on the layout.
829         TOOD: This is inefficient, because it passes the whole list of 
830         child field items back to the server, but it is more correct, and happens
831         to fix a bug with the primary key being lost after a few navigations.
832         There is probably a chance to make this more efficient anyway in some 
833         more basic way.
834         
835         * src/main/java/org/glom/web/client/activity/DetailsActivity.java
836         * src/main/java/org/glom/web/client/ui/details/RelatedListTable.jav
837         * src/main/java/org/glom/web/server/ConfiguredDocument.java
838         * src/main/java/org/glom/web/server/database/DBAccess.java
839         * src/main/java/org/glom/web/server/database/RelatedListDBAccess.java:
840         * src/main/java/org/glom/web/server/database/RelatedListNavigation.java:
841         Adapted.
842
843 2012-05-15  Murray Cumming  <murrayc@murrayc.com>
844
845         Fix the use of translations.
846
847         * src/main/java/org/glom/web/server/ConfiguredDocument.java:
848         Add updateTitlesForLocale().
849         getValidListViewLayoutGroup(), getDetailsLayoutGroup():
850         Call it to discard unwanted translations and to make getTitle() return
851         the wanted translation wihout the need for the client code to specify a locale.
852         * src/main/java/org/glom/web/shared/libglom/Translatable.java:
853         getTitle(): Fallback to the original title, as libglom does.
854
855 2012-05-15  Murray Cumming  <murrayc@murrayc.com>
856
857         Document: Correctly report the number of available translation locales.
858
859         * src/main/java/org/glom/web/server/libglom/Document.java: Fill
860         the available locale IDs list.
861         * src/test/java/org/glom/web/server/libglom/DocumentTest.java:
862         testLocales: Test this.
863
864 2012-05-15  Murray Cumming  <murrayc@murrayc.com>
865
866         SqlUtils: Use camelCase.
867
868         * src/main/java/org/glom/web/server/SqlUtils.java: Use camelCase.
869         * src/main/java/org/glom/web/server/database/DetailsDBAccess.java:
870         * src/main/java/org/glom/web/server/database/ListViewDBAccess.java:
871         * src/main/java/org/glom/web/server/database/RelatedListDBAccess.java:
872         * src/main/java/org/glom/web/server/database/RelatedListNavigation.java:
873         * src/main/java/org/glom/web/server/ReportGenerator.java: Adapt.
874
875 2012-05-15  Murray Cumming  <murrayc@murrayc.com>
876
877         Use jOOQ's tableByName() and fieldByName.
878
879         * pom.xml: Use jOOQ 2.3.1 to get the new API.
880         * src/main/java/org/glom/web/server/SqlUtils.java:
881         build_sql_select_step_with_where_clause(), .createField(),
882         builder_add_join(): Use Factory.tableByName() and Factory.fieldByName()
883         so we can get correct quoting and escaping. Thanks to Lukas Eder for 
884         adding this, and other things, to jOOQ.
885
886 2012-05-15  Murray Cumming  <murrayc@murrayc.com>
887
888         SqlUtils: Remove the Connection parameters.
889
890         * src/main/java/org/glom/web/server/SqlUtils.java:
891         build_sql_select_with_key(), build_sql_select_with_where_clause(),
892         createSelect(), build_sql_select_step_with_where_clause(),
893         build_sql_count_select_with_where_clause(),
894         build_sql_select_count_rows(): Remove the Connection parameter because
895         jOOQ does not actually need a connectionwhen it is just used to build 
896         a SQL string:
897         https://groups.google.com/forum/#!topic/jooq-user/tIwobFOR2iM
898
899         * src/main/java/org/glom/web/server/ReportGenerator.java:
900         generateReport():
901         * src/main/java/org/glom/web/server/database/DetailsDBAccess.java:
902         getData():
903         * src/main/java/org/glom/web/server/database/ListDBAccess.java:
904         Constructor, getListData(), getResultSizeOfSQLQuery():
905         * src/main/java/org/glom/web/server/database/ListViewDBAccess.java:
906         getSelectQuery(), getCountQuery():
907         * src/main/java/org/glom/web/server/database/RelatedListDBAccess.java:
908         getSelectQuery(), getCountQuery():
909         * src/main/java/org/glom/web/server/database/RelatedListNavigation.java:
910         getNavigationRecord(): Adapted.
911
912 2012-05-14  Murray Cumming  <murrayc@murrayc.com>
913
914         Fix quick find.
915
916         * src/main/java/org/glom/web/server/SqlUtils.java:
917         get_find_where_clause_quick(): Use a comparison of 
918         lowercase values, instead of a simple equals. Regular Glom
919         uses the PostgreSQL ILIKE operator but jOOQ does not 
920         support that just yet, though it will soon.
921
922 2012-05-14  Murray Cumming  <murrayc@murrayc.com>
923
924         TableToViewDetails: Use a real serialization ID.
925
926         * src/main/java/org/glom/web/shared/libglom/layout/TableToViewDetails.java:
927         Though this does not fix the serialization problem.
928
929 2012-05-12  Murray Cumming  <murrayc@murrayc.com>
930
931         Added LayoutItemPortalDeepCloneTest.
932
933 2012-05-11  Murray Cumming  <murrayc@murrayc.com>
934
935         Make navigation work again.
936
937         * src/main/java/org/glom/web/server/libglom/Document.java:
938         Add getLayoutItemFieldShouldHaveNavigation().
939         * src/main/java/org/glom/web/shared/libglom/layout/LayoutItemField.java:
940         Replace get/setAddNavigation() with the partly-existing 
941         get/setNavigationTableName(), with an empty string being no navigation,
942         because this is simpler. Use the new 
943         Document.getLayoutItemFieldShouldHaveNavigation() method to set this.
944         
945         * src/main/java/org/glom/web/server/ConfiguredDocument.java:
946         Add updateFieldsExtras() and call setNavigationTableName in it.
947         getDetailsLayoutGroup(), 
948         * src/main/java/org/glom/web/client/activity/DetailsActivity.java
949         createLayout(): Adapted.
950         * src/main/java/org/glom/web/client/ui/details/DetailsCell.java
951         Constructor: Adapted.
952
953         * src/main/java/org/glom/web/shared/libglom/layout/LayoutItemPortal.java:
954         Replace get/setAddNavigation() with get/setNavigation(), returning a
955         TableToViewDetails class with both the table name and UsesRelationship,
956         because both are need. The previous code used java-libglom's output 
957         variable (strangely, via sharedptr) to return both, but we cannot really
958         do that in Java.
959         * src/main/java/org/glom/web/server/database/RelatedListNavigation.java:
960         getNavigationRecord(): Adapt. However, we cannot actually use the cache
961         here because it somehow gets set to null during deepCopy(). I must test this.
962         * src/test/java/org/glom/web/server/libglom/DocumentTest.java
963         testGetSuitableTableToViewDetails(): Adapted.
964         
965         TODO: Find out why deepClone() is not quite working.
966         
967 2012-05-11  Murray Cumming  <murrayc@murrayc.com>
968
969         DBAccess: Simplify the retrievel of full field details.
970
971         * src/main/java/org/glom/web/server/database/DBAccess.java
972         getFieldsToShowForSQLQueryAddGroup(). This might be unnecessary anyway,
973         because the Document loading should have done this.
974
975 2012-05-11  Murray Cumming  <murrayc@murrayc.com>
976
977         Document: Correct loading of doubly-related layout fields.
978
979         * src/main/java/org/glom/web/server/libglom/Document.java:
980         loadUsesRelationship(): Actually set the related relationship, instead
981         of only setting it if it's not found.
982
983 2012-05-09  Murray Cumming  <murrayc@murrayc.com>
984
985         Replace all appearances of Colour with color.
986
987         Because US English is dominant.
988
989 2012-05-09  Murray Cumming  <murrayc@murrayc.com>
990
991         Use colors in HTML format, solving a warning about an unused function.
992
993         * src/main/java/org/glom/web/shared/libglom/NumericFormat.java
994         * src/main/java/org/glom/web/shared/libglom/layout/Formatting.java:
995         Add *asHTMLColor() versions of methods.
996         TODO: However, we should create and cache the results on the server.
997         * src/main/java/org/glom/web/client/ui/details/DetailsCell.java
998         * src/main/java/org/glom/web/client/ui/list/ListTable.java
999         * src/main/java/org/glom/web/server/ConfiguredDocument.java
1000         * src/test/java/org/glom/web/server/libglom/DocumentTest.java:
1001         Use the asHTMLcolor() versions.
1002
1003 2012-05-09  Murray Cumming  <murrayc@murrayc.com>
1004
1005         ListViewTable: Constructor: Take the table name as a parameter.
1006
1007         * src/main/java/org/glom/web/client/ui/list/ListViewTable.java:
1008         Constructor: Take the tableName, and set the member variable, because
1009         we use it here.
1010         * src/main/java/org/glom/web/client/ui/ListViewImpl.java:
1011         setCellTable(): Pass the table name.
1012         This makes navigation to non-default tables work again. I don't know 
1013         why it worked before in the master branch.
1014
1015 2012-05-07  Murray Cumming  <murrayc@murrayc.com>
1016
1017         ConfiguredDocument: Restore correct addition of hidden primary key items.
1018
1019         * src/main/java/org/glom/web/client/ui/list/ListTable.java
1020         (ListTable.createCellTable): Uncomment out the check for the hidden
1021         primary key.
1022         * src/main/java/org/glom/web/server/ConfiguredDocument.java: Only
1023         add primary key items for top-level lists and portals, as before, 
1024         instead of adding them to each group.
1025         * src/main/java/org/glom/web/shared/libglom/layout/LayoutGroup.java:
1026         Actually implement the extra methods such as setHiddenPrimaryKey() and
1027         comment that these are used only for top-level list groups and in portals.
1028         This strangeness suggests even more that this should not be squeezed
1029         into the LayoutGroup class.
1030
1031 2012-05-07  Murray Cumming  <murrayc@murrayc.com>
1032
1033         Fix Formatting loading.
1034
1035         * src/main/java/org/glom/web/shared/libglom/layout/LayoutItemField.java:
1036         getFormattingUsed(): Remove the duplicate Formatting member variable
1037         in favour of the one from the base class.
1038         * src/main/java/org/glom/web/shared/libglom/layout/LayoutItemWithFormatting.java:
1039         Initialize a new Formatting instead of using null by default, so we 
1040         have some defaults, instead of having to initialize one later just to 
1041         get the same defaults. This also makes loading of formatting from the
1042         document work, because that expected a non-null.
1043
1044 2012-05-07  Murray Cumming  <murrayc@murrayc.com>
1045
1046         RelatedListTable: Make sure that the tableName is set.
1047
1048         * src/main/java/org/glom/web/client/ui/details/RelatedListTable.java:
1049         Constructor: Take the tableName so it is available later. Otherwise, 
1050         the server assumes that we mean the default table and cannot find the
1051         relationship in it.
1052         * src/main/java/org/glom/web/client/activity/DetailsActivity.java
1053         setData(): Pass the tableName to the RelatedListTable constructor.
1054
1055 2012-05-07  Murray Cumming  <murrayc@murrayc.com>
1056
1057         Add some checks.
1058
1059         * src/main/java/org/glom/web/client/activity/DetailsActivity.java:
1060         RelatedListNavigationButtonCell.onEnterKeyDown(), setData():
1061         * src/main/java/org/glom/web/client/ui/details/RelatedListTable.java:
1062         getDataProvider():
1063         * src/main/java/org/glom/web/client/ui/list/ListTable.java:
1064         addColumn():
1065         * src/main/java/org/glom/web/server/database/DBAccess.java:
1066         convertResultSetToDTO(), getPortal():
1067         * src/main/java/org/glom/web/server/database/ListDBAccess.java
1068         getListData():
1069         * src/main/java/org/glom/web/server/database/RelatedListDBAccess.java:
1070         Add checks for null objects and out of range access, with log messages to
1071         give hints so we can fix these properly.
1072
1073 2012-05-07  Murray Cumming  <murrayc@murrayc.com>
1074
1075         Portals: some corrections.
1076
1077         * src/main/java/org/glom/web/client/activity/DetailsActivity.java
1078         setData():
1079         * src/main/java/org/glom/web/client/ui/details/RelatedListTable.java:
1080         constructor: Use getRelationshipNameUsed() instead of getName(), because
1081         that is what is meant.
1082         * src/main/java/org/glom/web/shared/libglom/layout/LayoutItemPortal.java:
1083         getFromField(): Fix a typo, to get the field name, not the table name.
1084         * src/main/java/org/glom/web/server/database/DBAccess.java:
1085         getPortal(): Fix a typo that stopped this from working.
1086
1087 2012-05-07  Murray Cumming  <murrayc@murrayc.com>
1088
1089         LayoutItemPortal: Also override getTitleOriginal().
1090
1091         * src/main/java/org/glom/web/shared/libglom/layout/LayoutItemPortal.java:
1092         This lets the base getTitle() with no parameters work.
1093         TODO: Test this properly.
1094
1095 2012-05-06  Murray Cumming  <murrayc@murrayc.com>
1096
1097         LayoutItemPortal: getTitle*(): Use the relationship title.
1098
1099 2012-05-06  Murray Cumming  <murrayc@murrayc.com>
1100
1101         LayoutItemField: Fix loading of custom titles.
1102
1103         * src/main/java/org/glom/web/server/libglom/Document.java
1104         loadDataLayoutItemField(): The title, if any, instead of the field 
1105         title, is stored in a title_custom node. Load it from there.
1106         * src/main/java/org/glom/web/shared/libglom/CustomTitle.java: Add this
1107         class.
1108         * src/main/java/org/glom/web/shared/libglom/layout/LayoutItemField:
1109         Add getCustomTitle() and use it, instead of super.getTitle*(), in the
1110         getTitle*() overrides.
1111         * src/test/java/org/glom/web/server/libglom/LayoutItemFieldTest.java:
1112         Adapt.
1113
1114 2012-05-06  Murray Cumming  <murrayc@murrayc.com>
1115
1116         LayoutItemField: Fall back to field titles, so some are really shown.
1117
1118         * src/main/java/org/glom/web/shared/libglom/layout/LayoutItemField.java:
1119         Override getTitleOriginal() and getTitle(), as in java-libglom.
1120         * src/test/java/org/glom/web/server/libglom/LayoutItemFieldTest.java:
1121         Test this behaviour.
1122
1123 2012-05-06  Murray Cumming  <murrayc@murrayc.com>
1124
1125         Correct use of setExpectedResultSize().
1126
1127         * src/main/java/org/glom/web/server/ConfiguredDocument.java
1128         getValidListViewLayoutGroup(), getDetailsLayoutGroup():
1129         Use setExpectedResultSize only on top-level groups (for instance, the
1130         list layout) or on child portals (in details views).
1131         Use the correct table name for portals to avoid SQL errors.
1132         Update the expected counts when returning cached layouts.
1133
1134 2012-05-06  Murray Cumming  <murrayc@murrayc.com>
1135
1136         Document: Interpret no group column count as 1.
1137
1138         * src/main/java/org/glom/web/server/libglom/Document.java: Use a sane
1139         default, though we now check for this in the UI code anyway.
1140
1141 2012-05-06  Murray Cumming  <murrayc@murrayc.com>
1142
1143         More null checks.
1144
1145 2012-05-06  Murray Cumming  <murrayc@murrayc.com>
1146
1147         Translatable: Use Hashmap instead of Treemap because GWT supports it.
1148
1149         * src/main/java/org/glom/web/shared/libglom/Translatable.java:
1150         The use of Treemap lead to this error from async methods, with no 
1151         further clue:
1152         "The response could not be deserialized"
1153
1154 2012-05-06  Murray Cumming  <murrayc@murrayc.com>
1155
1156         OnlineGlom.gwt.xml: Add exludes to fix explicit gwt compilation in Eclipse.
1157
1158         * src/main/java/org/glom/web/OnlineGlom.gwt.xml: This is necessary 
1159         when using the Google -> GWT Compile, or 
1160         g toolbar button -> GWT Compile Project... feature in Eclipse.
1161
1162 2012-05-06  Murray Cumming  <murrayc@murrayc.com>
1163
1164         ListTable.addColumn(): Protect against a null Formatting.
1165
1166         * src/main/java/org/glom/web/client/ui/list/ListTable.java: addColumn():
1167         Create a default Formatting if it is null, because that is the simplest
1168         way to do this.
1169
1170 2012-05-06  Murray Cumming  <murrayc@murrayc.com>
1171
1172         ConfiguredDocument.updateLayoutGroup(): Protect against a null dereference.
1173
1174         * src/main/java/org/glom/web/server/ConfiguredDocument.java
1175         updateLayoutGroup(): Check that the field is not null.
1176
1177 2012-05-06  Murray Cumming  <murrayc@murrayc.com>
1178
1179         ListViewImpl: Protected against a bad cast error.
1180
1181         * src/main/java/org/glom/web/client/ui/ListViewImpl.java:
1182         onEnterKeyDown(): Do not cast without an instanceof check.
1183
1184 2012-05-06  Murray Cumming  <murrayc@murrayc.com>
1185
1186         ListTable: Protect against an out of range error.
1187
1188         * src/main/java/org/glom/web/client/ui/list/ListTable.java
1189         createCellTable(): This is unlikely, but can happen while debugging.
1190
1191 2012-05-06  Murray Cumming  <murrayc@murrayc.com>
1192
1193         AsyncMessage onFailure() callbacks: Log the exception message.
1194
1195         * src/main/java/org/glom/web/client/activity/DetailsActivity.java
1196         * src/main/java/org/glom/web/client/activity/DocumentSelectionActivity.java:
1197         * src/main/java/org/glom/web/client/activity/ListActivity.java:
1198         * src/main/java/org/glom/web/client/activity/ReportActivity.java:
1199         * src/main/java/org/glom/web/client/activity/TableSelectionActivity:
1200         * src/main/java/org/glom/web/client/ui/details/RelatedListTable.java:
1201         * src/main/java/org/glom/web/client/ui/list/ListViewTable.java:
1202         These are useful clues when something is wrong.
1203
1204 2012-05-06  Murray Cumming  <murrayc@murrayc.com>
1205
1206         ConfiguredDocument: Avoid a null dereference.
1207
1208         * src/main/java/org/glom/web/server/ConfiguredDocument.java
1209         TableLayoutsForLocale.getMapWithAdd(): Make sure that the list and 
1210         details maps are created.
1211
1212 2012-05-06  Murray Cumming  <murrayc@murrayc.com>
1213
1214         Document: Correct the port number parsing.
1215
1216         * src/main/java/org/glom/web/server/libglom/Document.java:
1217         This lets us actually connect to the database and show the document.
1218
1219 2012-05-05  Murray Cumming  <murrayc@murrayc.com>
1220
1221         Fix mvn gwt:test
1222
1223         * pom.xml: Use htmlunit mode for gwt:test, because the default demands
1224         user-interaction, asking us to load a temporary URL in a browser.s
1225         * src/main/java/org/glom/web/OnlineGlom.gwt.xml: Add a servlet node,
1226         which is apparently necessary for testing the service. See the comment.
1227         * src/test/java/org/glom/web/client/GwtTestOnlineGlomService.java: 
1228         Show the exception, if any. This is how I saw the 404 in the HTML in 
1229         the exception.
1230
1231 2012-05-05  Murray Cumming  <murrayc@murrayc.com>
1232
1233         DocumentTest: Move the .glom files into the resources directory.
1234
1235         * src/test/java/org/glom/web/server/libglom/DocumentTest: And get the
1236         URI via getResource().
1237
1238 2012-05-05  Murray Cumming  <murrayc@murrayc.com>
1239
1240         Document: Remove the FieldIdentifies inner class.
1241
1242         * src/main/java/org/glom/web/server/libglom/Document.java: We only
1243         use the Relationship (though the same function in libglom is maybe
1244         used in other ways) and so this removes a compiler warning.
1245
1246 2012-05-05  Murray Cumming  <murrayc@murrayc.com>
1247
1248         Document.load() Remove the error code parameter.
1249
1250         * src/main/java/org/glom/web/server/libglom/Document.java: load():
1251         Remove the parameter. We do not set it yet and it could never have
1252         worked as an output parameter (though maybe it did in java-libglom).
1253         We could use an exception if we really want the failure reason.
1254         * src/main/java/org/glom/web/server/OnlineGlomServiceImpl.java:
1255         init():
1256         * src/test/java/org/glom/web/server/libglom/DocumentTest.java:
1257         setUp(), testGetSuitableTableToViewDetails(): Adapt.
1258
1259 2012-05-05  Murray Cumming  <murrayc@murrayc.com>
1260
1261         Make some inner classes static.
1262
1263         * src/main/java/org/glom/web/server/ConfiguredDocument.java
1264         * src/main/java/org/glom/web/server/OnlineGlomServiceImpl.java
1265         * src/main/java/org/glom/web/server/ReportGenerator.java
1266         * src/main/java/org/glom/web/server/libglom/Document.java
1267         Make all inner classes static that can be static.
1268
1269 2012-05-05  Murray Cumming  <murrayc@murrayc.com>
1270
1271         OnlineGlomServiceImpl: Do not load and check for java-libglom.
1272
1273         * src/main/java/org/glom/web/server/OnlineGlomServiceImpl.java
1274         init(): We do not use java-libglom any more.
1275
1276 2012-05-05  Murray Cumming  <murrayc@murrayc.com>
1277
1278         Remove mentions of java-libglom.
1279
1280         * README: Remove mention of java-libglom, because it no longer needed.
1281         * utils/build-onlineglom-war.sh:
1282         * utils/check-and-recover-tomcat.py:
1283         * utils/install-onlineglom-war.sh: Remove these as they are no longer
1284         useful. Building is now far easier, with no need for jhbuild.
1285
1286 2012-05-05  Murray Cumming  <murrayc@murrayc.com>
1287
1288         Fix the build (mvn package)
1289
1290         * src/main/java/org/glom/web/shared/libglom/layout/LayoutGroup.java
1291         (LayoutGroup): Make the LayoutItemList inner class static and protected.
1292         Otherwise the GWT Java->Javascript compilation fails with just this
1293         error, during mvn package or when attempting to view in a browser, 
1294         in the GWT developer mode in Eclipse.
1295
1296         [INFO] --- gwt-maven-plugin:2.4.0:compile (default) @ gwt-glom ---
1297         [INFO] auto discovered modules [org.glom.web.OnlineGlom]
1298         [INFO] Compiling module org.glom.web.OnlineGlom
1299         [INFO]    [ERROR] Errors in 'file:/home/murrayc/checkouts/gnome/gwt-glom/src/main/java/org/glom/web/client/OnlineGlomServiceAsync.java'
1300         [INFO]       [ERROR] Line 46:  Failed to resolve 'org.glom.web.client.OnlineGlomService' via deferred binding
1301         [INFO]    Scanning for additional dependencies: file:/home/murrayc/checkouts/gnome/gwt-glom/src/main/java/org/glom/web/client/ui/details/DetailsCell.java
1302         [INFO]       [WARN] For the following type(s), generated source was never committed (did you forget to call commit()?)
1303         [INFO]          [WARN] org.glom.web.client.OnlineGlomService_Proxy
1304         [INFO]    [ERROR] Cannot proceed due to previous errors
1305
1306         It has taken me 2 days to find out what was causing that. After reducing
1307         the code, the compiler eventually showed me the full error message.
1308
1309 2012-05-04  Murray Cumming  <murrayc@murrayc.com>
1310
1311         ConfiguredDocument: Cache the cloned and stripped layouts.
1312
1313         * src/main/java/org/glom/web/server/ConfiguredDocument.java:
1314         getValidListViewLayoutGroup(), .getDetailsLayoutGroup(): Store the cloned
1315         layout in a map, so we can retrieve it again without rebuilding it.
1316
1317 2012-05-04  Murray Cumming  <murrayc@murrayc.com>
1318
1319         UsesRelationshipImpl: Complete the relationshipEquals() implementation.
1320
1321 2012-05-04  Murray Cumming  <murrayc@murrayc.com>
1322
1323         libglom classes: Implement some auto-generated emthods.
1324
1325 2012-05-04  Murray Cumming  <murrayc@murrayc.com>
1326
1327         Add GwtTestOnlineGlomService.
1328
1329         * src/test/java/org/glom/web/client/GwtTestOnlineGlomService.java:
1330         However, this (and the other GwtTest*) does not seem to run during 
1331         mvn test. 
1332
1333 2012-05-04  Murray Cumming  <murrayc@murrayc.com>
1334
1335         Remove use of unsupported features from client code.
1336
1337         * src/main/java/org/glom/web/client/StringUtils.java: Add equals().
1338         * src/main/java/org/glom/web/shared/libglom/layout/UsesRelationshipImpl.java:
1339         * src/main/java/org/glom/web/shared/libglom/layout/reportparts/LayoutItemGroupBy.java:
1340         Use our client version of StringUtils instead of the apache commons one.
1341         
1342         However, the GWT Javascript compliation still fails.
1343
1344 2012-04-25  Murray Cumming  <murrayc@murrayc.com>
1345
1346         Add a Field class and implement some loading of it in Document.
1347
1348 2012-04-25  Murray Cumming  <murrayc@murrayc.com>
1349
1350         Initial Document loading implementation, instead of libglom.
1351
1352         * src/test/java/org/glom/web/shared/libglom/: Add Document, Report,
1353         and Translatable classes, and adapt the rest of the code to use them.
1354         However, this is still missing Layout and Field classes and loading.
1355
1356 2012-04-24  Murray Cumming  <murrayc@murrayc.com>
1357
1358         Use of jOOQ: Move Field creation into a utility method.
1359
1360         * src/main/java/org/glom/web/server/SqlUtils.java:
1361         This lets us improve it more easily.
1362
1363 2012-04-24  Murray Cumming  <murrayc@murrayc.com>
1364
1365         Use of jOOQ: Improve the code to COUNT a sub-select.
1366
1367         * src/main/java/org/glom/web/server/SqlUtils.java:
1368         Move initial query creation into 
1369         build_sql_select_step_with_where_clause().
1370         build_sql_select_count_rows(): Use the jOOQ API instead of
1371         concatentating text, because a jOOQ Select*Step is a TableLike,
1372         which is what from() takes.
1373
1374 2012-04-23  Murray Cumming  <murrayc@murrayc.com>
1375
1376         Use jOOQ instead of Glom.build_sql*(), to avoid native calls.
1377
1378         * pom.xml: Depend on jooq.
1379         * src/main/java/org/glom/web/server/SqlUtils.java: Reimplement the
1380         methods with jOOQ, based on the C++ implementations in libglom,
1381         with some changes to the logic required by jooQ.
1382         Take a jOOQ Condition rather than a Glom.SqlExpr (GdaSqlExpr) for the
1383         where clause.
1384         * src/main/java/org/glom/web/client/ui/TableSelectionViewImpl.java:
1385         * src/main/java/org/glom/web/server/ReportGenerator.java:
1386         * src/main/java/org/glom/web/server/SqlUtils.java:
1387         * src/main/java/org/glom/web/server/database/DetailsDBAccess.java:
1388         * src/main/java/org/glom/web/server/database/ListDBAccess.java:
1389         * src/main/java/org/glom/web/server/database/ListViewDBAccess.java:
1390         * src/main/java/org/glom/web/server/database/RelatedListDBAccess.java:
1391         * src/main/java/org/glom/web/server/database/RelatedListNavigation:
1392         Adapt. In particular, the SqlUtils methods now need to take a Connection,
1393         because jOOQ needs that, though it seems unnecessary.
1394
1395         This is not quite finished. Ideally jOOQ would help us to build 
1396         table_name.field_name names, quoting and escaping them properly.
1397         See http://stackoverflow.com/questions/10264001/instantiating-a-jooq-field-by-name
1398
1399 2012-04-21  Murray Cumming  <murrayc@murrayc.com>
1400
1401         Move use of Glom.build_sql*() into a new SqlUtils class.
1402
1403         * src/main/java/org/glom/web/server/SqlUtils.java: Add static methods
1404         to wrap Glom.build_sql*(). The parameter types are still Glom one,
1405         but this will make it easier to start using something other than 
1406         libglom or SqlBuilder.
1407
1408 2012-04-21  Murray Cumming  <murrayc@murrayc.com>
1409
1410         Update the project URL.
1411
1412         * pom.xml: Use an OnlineGlom-specific URL for the project URL.
1413
1414 2012-04-21  Murray Cumming  <murrayc@murrayc.com>
1415
1416         Main layout: Use a FlowTable instead of absolute positioning.
1417
1418         * src/main/java/org/glom/web/client/OnlineGlom.java: onModuleLoad():
1419         The RootLayoutPanel is a (extends) AbsolutePanel, so each of its 
1420         child panels/widgets must have an absolute position. But that is annoying, so
1421         this adds a FlowTable and puts the child panels in there.
1422
1423 2012-04-21  Murray Cumming  <murrayc@murrayc.com>
1424
1425         GwtTestOnlineGlom: Comment out unused code.
1426
1427         * src/test/java/org/glom/web/client/GwtTestOnlineGlom.java:
1428         Eclipse has started to say that some code is unused.
1429
1430 2012-04-21  Murray Cumming  <murrayc@murrayc.com>
1431
1432         Update to the latest versions of dependencies.
1433
1434         * pom.xml: Update version numbers of dependencies to the latest
1435         versions.
1436         * src/main/java/org/glom/web/server/ConfiguredDocument.java:
1437         * src/main/java/org/glom/web/server/OnlineGlomServiceImpl.java:
1438         * src/main/java/org/glom/web/server/ReportGenerator.java:
1439         * src/main/java/org/glom/web/server/database/ListViewDBAccess.java:
1440         * src/main/java/org/glom/web/server/database/RelatedListDBAccess.java:
1441         * src/main/java/org/glom/web/server/database/RelatedListNavigation.
1442         java:
1443         * src/test/java/org/glom/web/client/GwtTestOnlineGlom.java:
1444         Modify the imports where necessary.
1445
1446 2012-04-17  Murray Cumming  <murrayc@murrayc.com>
1447
1448         Style: Remove overflow:hidden from searchbox
1449
1450         * src/main/webapp/style.css: Because this pushes the Back To Link
1451         label/link on to the next row, which is then hidden due to the 
1452         hard-coded (in ems) height.
1453
1454 2012-04-20  Murray Cumming  <murrayc@murrayc.com>
1455
1456         Remove some duplicate code.
1457
1458         * src/main/java/org/glom/web/server/OnlineGlomServiceImpl.java
1459         getDocumentInfo(): This must have been duplicated during the merge from the
1460         reports branch.
1461
1462 1.21.8.1:
1463
1464 2012-04-19  Murray Cumming  <murrayc@murrayc.com>
1465
1466         Reports: Localize the waiting for report message.
1467
1468         * src/main/java/org/glom/web/client/activity/ReportActivity.java
1469         start(): Get the message from the contants.
1470         * src/main/resources/org/glom/web/client/ui/OnlineGlomConstants.properties:
1471         Add the string here.
1472         * src/main/resources/org/glom/web/client/ui/OnlineGlomConstants_cs.properties:
1473         * src/main/resources/org/glom/web/client/ui/OnlineGlomConstants_de.properties:
1474         * src/main/resources/org/glom/web/client/ui/OnlineGlomConstants_es.properties:
1475         * src/main/resources/org/glom/web/client/ui/OnlineGlomConstants_sl.properties:
1476         * src/main/resources/org/glom/web/client/ui/OnlineGlomConstants_zh_CN.properties:
1477         Update these files with the English text for newer strings for now.
1478
1479 2012-04-19  Murray Cumming  <murrayc@murrayc.com>
1480
1481         Reports: Show a message while waiting for the report.
1482
1483         * src/main/java/org/glom/web/client/ui/ReportView.java
1484         * src/main/java/org/glom/web/client/ui/ReportViewImpl.java:
1485         Add setWaitingText(), to show a message saying that we are 
1486         waiting for the report to be ready.
1487         * src/main/java/org/glom/web/client/activity/ReportActivity.java
1488         start(): Call setWaitingText() before calling the async
1489         report generation.
1490
1491 2012-04-19  Murray Cumming  <murrayc@murrayc.com>
1492
1493         ReportGenerator: Specify date and time formats.
1494
1495         * src/main/java/org/glom/web/server/ReportGenerator.java:
1496         createFieldValueElement(): Use the default (and localized)
1497         short formats, though we still need a way to show 4-digit
1498         years without providing the format for every locale.
1499         * src/main/java/org/glom/web/server/database/DBAccess.java:
1500         convertResultSetToDTO(): Use the short formats here too.
1501
1502 2012-04-18  Murray Cumming  <murrayc@murrayc.com>
1503
1504         ReportGenerator: Use the correct numeric formatting.
1505
1506         * src/main/java/org/glom/web/server/ReportGenerator.java
1507         createFieldExpression(), createFieldValueElement(): Take the
1508         whole LayoutItem_Field instead of just the field name, so
1509         we have access to the formatting.
1510         createFieldValueElement(): Use JRTextField.setPattern() to
1511         specify the numeric formatting, with the help of a 
1512         regular DecimalFormat.
1513
1514 2012-04-18  Murray Cumming  <murrayc@murrayc.com>
1515
1516         ReportGenerator: Avoid showing null for group by titles.
1517
1518         * src/main/java/org/glom/web/server/ReportGenerator.java
1519         generateReport(): Use setBlankWhenNull() on the field title
1520         style too, because this is used for values in group by
1521         sections.
1522
1523 2012-04-18  Murray Cumming  <murrayc@murrayc.com>
1524
1525         ReportGenerator: Add a colon to titles in vertical groups.
1526
1527         * src/main/java/org/glom/web/server/ReportGenerator.java
1528         addFieldToDetailBandVertical(): Pass true for the withColon
1529         parameter.
1530
1531 2012-04-18  Murray Cumming  <murrayc@murrayc.com>
1532
1533         ReportGenerator: Simplify the code by using Position more.
1534
1535 2012-04-18  Murray Cumming  <murrayc@murrayc.com>
1536
1537         Reports: Support vertical groups, roughly.
1538
1539         * src/main/java/org/glom/web/server/ReportGenerator.java:
1540         addToReport(): Rename to addGroupToReport() and, if necessary,
1541         call the new addVerticalGroupToReport() method.
1542         createFieldValueElement(): Let the caller specify the Y position
1543         too.
1544
1545 2012-04-17  Murray Cumming  <murrayc@murrayc.com>
1546
1547         Reports: Allow a second report to be shown.
1548
1549         * src/main/java/org/glom/web/client/ui/ReportViewImpl.java:
1550         clear(): Do not remove the HTML widget, which broke the whole layout.
1551
1552 2012-04-17  Murray Cumming  <murrayc@murrayc.com>
1553
1554         Locales drop-down: Show that we use English by default.
1555
1556         * src/main/java/org/glom/web/client/activity/TableSelectionActivity.java:
1557         fillView(): When we use English, just because that is the default, when
1558         no locale is specified, show that in the Locales drop-down instead of 
1559         just showing the first item.
1560
1561 2012-04-17  Murray Cumming  <murrayc@murrayc.com>
1562
1563         Unselect the Report/Locale/Table combo item when appropriate.
1564
1565         * src/main/java/org/glom/web/client/activity/TableSelectionActivity.java:
1566         setPlace(): clear reportName if this is not a ReportPlace.
1567         * src/main/java/org/glom/web/client/ui/TableSelectionViewImpl.java:
1568         setSelectedTableName(), setSelectedLocale(), setSelectedReport():
1569         When the provided name is empty, unselect all items, so that none are
1570         indicated. This uses a for loop because I cannot find a single method
1571         to do this.
1572
1573 2012-04-17  Murray Cumming  <murrayc@murrayc.com>
1574
1575         Report: Give the user a way to get back to the list.
1576
1577         * src/main/java/org/glom/web/client/activity/TableSelectionActivity.java:
1578         start(), setPlace(): Show the Back To List link on reports, and also 
1579         interpret selecting the empty report item as back to list.
1580
1581 2012-04-13  Murray Cumming  <murrayc@murrayc.com>
1582
1583         Really show the selected Report name.
1584
1585         * src/main/java/org/glom/web/client/activity/TableSelectionActivity:
1586         setPlace(): Store the reportName here, if it is that kind of Place.
1587         fillView(): Set the selected Report after filling the list of reports.
1588         * src/main/java/org/glom/web/client/ui/TableSelectionViewImpl.java:
1589         setSelectedLocale(), setSelectedReport(): Avoid possible uses of
1590         null Strings, though we need some way to unselect all ListBox items
1591         in that case.
1592
1593 2012-04-13  Murray Cumming  <murrayc@murrayc.com>
1594
1595         ReportGenerator: Try to avoid some problems.
1596
1597         * src/main/java/org/glom/web/server/ReportGenerator.java
1598         addField(): Try to avoid duplicates, and avoid using a null
1599         class type.
1600
1601 2012-04-13  Murray Cumming  <murrayc@murrayc.com>
1602
1603         Reports: Use quickFind.
1604
1605         * src/main/java/org/glom/web/client/OnlineGlomService.java;
1606         * src/main/java/org/glom/web/client/OnlineGlomServiceAsync.java:
1607         * src/main/java/org/glom/web/server/OnlineGlomServiceImpl.java:
1608         getReportHTML(): Add a quickFind parameter.
1609         * src/main/java/org/glom/web/client/activity/ReportActivity.java
1610         start(): Pass the quickFind parameter.
1611         * src/main/java/org/glom/web/server/ReportGenerator.java
1612         generateReport(): Take a quickFind parameter.
1613
1614 2012-04-13  Murray Cumming  <murrayc@murrayc.com>
1615
1616         ReportPlace: Actually use the report name.
1617
1618         * src/main/java/org/glom/web/client/place/ReportPlace.java
1619         getPlace(): Do not assign the report name to the quickfind.
1620
1621 2012-04-13  Murray Cumming  <murrayc@murrayc.com>
1622
1623         Show java.library.path when complaining.
1624
1625         * src/main/java/org/glom/web/server/OnlineGlomServiceImpl.java
1626         init(): When telling us to check java.library.path, show the
1627         current value.
1628
1629 2012-03-06  Murray Cumming  <murrayc@murrayc.com>
1630
1631         ReportGenerator: Do not show nulls.
1632
1633 2012-03-06  Murray Cumming  <murrayc@murrayc.com>
1634
1635         ReportGenerator: Make the title font larger.
1636
1637 2012-03-06  Murray Cumming  <murrayc@murrayc.com>
1638
1639         ReportGenerator: Put field titles inside groups, if there are groups.
1640
1641 2012-03-06  Murray Cumming  <murrayc@murrayc.com>
1642
1643         ReportGenerator: Take the Report itself instead of the name and group.
1644
1645         * src/main/java/org/glom/web/server/ConfiguredDocument.java
1646         Remove getReportLayoutGroup().
1647         * src/main/java/org/glom/web/server/OnlineGlomServiceImpl.java
1648         getReportHTML(): Pass the report instead
1649         of its name and layout group.
1650         * src/main/java/org/glom/web/server/ReportGenerator.java
1651         generateReport(): Use the report object to use the title 
1652         instead of the name.
1653
1654 2012-03-06  Murray Cumming  <murrayc@murrayc.com>
1655
1656         ReportGenerator: Remove designBand parameters.
1657
1658         * src/main/java/org/glom/web/server/ReportGenerator.java:
1659         Make designBand a class member instead of passing it to all
1660         methods.
1661
1662 2012-03-06  Murray Cumming  <murrayc@murrayc.com>
1663
1664         ReportGenerator: Add lines, a bit like in the desktop version.
1665
1666         * src/main/java/org/glom/web/server/ReportGenerator.java
1667         addToReport(): Use JRDesignLine.
1668
1669 2012-03-06  Murray Cumming  <murrayc@murrayc.com>
1670
1671         ReportGenerator: Correct the title positions and use some bold style.
1672
1673         * src/main/java/org/glom/web/server/ReportGenerator.java:
1674         Break the code up into reusable functions, correct the placement of 
1675         titles, and use normal/bold styles as in the reports in the desktop 
1676         version.
1677
1678 2012-03-06  Murray Cumming  <murrayc@murrayc.com>
1679
1680         ReportGenerator: Add a header band to show the field titles.
1681
1682         * src/main/java/org/glom/web/server/OnlineGlomServiceImpl.java
1683         getReportHTML(): Pass the localeId to the ReportGenerator 
1684         constructor.
1685         * src/main/java/org/glom/web/server/ReportGenerator.java
1686         constructor: Take the localeID so we can get translated field
1687         titles.
1688         generateReport(), addToReport(), addFieldToBand(): Add field 
1689         titles in a column header band.
1690
1691 2012-03-05  Murray Cumming  <murrayc@murrayc.com>
1692
1693         Reports drop-down list: Some improvement.
1694
1695         * src/main/java/org/glom/web/client/ui/TableSelectionView.java
1696         * src/main/java/org/glom/web/client/ui/TableSelectionViewImpl.java:
1697         Adedd setSelectedReport(),
1698         setReportList(): Add a blank line so that the user can select the 
1699         first one.
1700         * src/main/java/org/glom/web/client/activity/ReportActivity.java
1701         start(): Show the current report by calling setSelectedReport().
1702         This does not seem to work yet.
1703
1704 2012-03-05  Murray Cumming  <murrayc@murrayc.com>
1705
1706         DetailsActivity, ListActivity: Move some variables into a base class.
1707
1708         * src/main/java/org/glom/web/client/activity/DetailsActivity.java:
1709         * src/main/java/org/glom/web/client/activity/HasTableActivity.java:
1710         * src/main/java/org/glom/web/client/activity/ListActivity.java: Move 
1711         the clientFactory, documentID, tableName and authenticationPopup into
1712         a base class, to avoid duplication.
1713
1714 2012-03-05  Murray Cumming  <murrayc@murrayc.com>
1715
1716         Translate the Reports label.
1717
1718         * src/main/java/org/glom/web/client/ui/TableSelectionViewImpl.java
1719         Get the "Reports" label string from the constants.
1720         * src/main/resources/org/glom/web/client/ui/OnlineGlomConstants.pro
1721         perties: Add Reports to the constants.
1722
1723 2012-03-05  Murray Cumming  <murrayc@murrayc.com>
1724
1725         Reports: Implement grouping.
1726
1727         * src/main/java/org/glom/web/server/ReportGenerator.java:
1728         Handle LayoutItem_GroupBy items and try to do the right thing
1729         with JRDesignGroup. It seems to work.
1730
1731 2012-03-04  Murray Cumming  <murrayc@murrayc.com>
1732
1733         Actually show some data with JasperReports.
1734
1735         * src/main/java/org/glom/web/server/OnlineGlomServiceImpl.java: 
1736         getReportHTML(): Move most code into a ReportGenerator class.
1737         * src/main/java/org/glom/web/server/ReportGenerator.java:
1738         Recurse into sub-groups, adding fields to the JasperDesign's details
1739         band. Note that we must set an arbitrary width and height, or it just
1740         will not show any data.
1741
1742 2012-03-04  Murray Cumming  <murrayc@murrayc.com>
1743
1744         Reports Chooser: Show the titles, not the names.
1745
1746         * src/main/java/org/glom/web/client/ui/TableSelectionViewImpl.java
1747         (TableSelectionViewImpl.setReportList): Show the titles in the UI,
1748         and the names as the values.
1749         * src/main/java/org/glom/web/server/ConfiguredDocument.java
1750         (ConfiguredDocument.getReportLayoutGroup): Do not return a default
1751         group now that we provide the report name, so it should always 
1752         succeed.
1753
1754 2012-02-15  Murray Cumming  <murrayc@murrayc.com>
1755
1756         Depend on jasperreports.
1757
1758         * pom.xml: Add the dependency. My plan is to use this on the 
1759         server side.
1760
1761 2012-01-31  Murray Cumming  <murrayc@murrayc.com>
1762
1763         Implement navigation to report places.
1764
1765         * src/main/java/org/glom/web/client/activity/ReportActivity.java
1766         start(): Do not bother to handle all events here.
1767         * src/main/java/org/glom/web/client/ui/TableSelectionView.java
1768         * src/main/java/org/glom/web/client/ui/TableSelectionViewImpl.java:
1769         Added getSelectedReport().
1770         * src/main/java/org/glom/web/client/activity/TableSelectionActivity
1771         .java: start(): When handling a change to the reports chooser,
1772         call getSelectedReport() and goTo() its ReportPlace.
1773         * src/main/java/org/glom/web/client/ui/ReportView.java
1774         * src/main/java/org/glom/web/client/ui/ReportViewImpl.java:
1775         Added setReportHTML() which puts the html in a gwt HTML widget.
1776         * src/main/java/org/glom/web/server/OnlineGlomServiceImpl.java
1777         getReportHTML(): Return "TODO" just to show that this works.
1778
1779 2012-01-31  Murray Cumming  <murrayc@murrayc.com>
1780
1781         Make ReportPlace usable.
1782
1783         * src/main/java/org/glom/web/client/mvp/AppPlaceHistoryMapper.java:
1784         Mention ReportPlace.
1785         * src/main/java/org/glom/web/client/place/ReportPlace.java:
1786         Correct the @prefix annotation.
1787
1788 2012-01-31  Murray Cumming  <murrayc@murrayc.com>
1789
1790         OnlineGlomService: Return report HTML rather than the LayoutGroup.
1791
1792         * src/main/java/org/glom/web/client/OnlineGlomService.java:
1793         * src/main/java/org/glom/web/client/OnlineGlomServiceAsync.java:
1794         * src/main/java/org/glom/web/server/OnlineGlomServiceImpl.java:
1795         Change getReportLayout() to getReportHMTL() because we will not need to 
1796         parse or render the report layout on the client side.
1797         * src/main/java/org/glom/web/server/ConfiguredDocument.java:
1798         getReportLayout(): Return the libglom LayoutGroup type because we will
1799         not need to convert to a shared type, because this will not be used on
1800         the client side.
1801         * src/main/java/org/glom/web/client/activity/ReportActivity.java:
1802         Adapted.
1803
1804         Note that there is still no implementation for this.
1805
1806
1807 2012-01-27  Murray Cumming  <murrayc@murrayc.com>
1808
1809         Add a (empty) Report Place, View, and Activity.
1810
1811         * src/main/java/org/glom/web/client/place/HasSelectableTablePlace.java:
1812         Rename to:
1813         * src/main/java/org/glom/web/client/place/HasTablePlace.java
1814         * src/main/java/org/glom/web/client/place/ListPlace.java: Move some of
1815         this into a superclass:
1816         * src/main/java/org/glom/web/client/place/HasRecordsPlace.java
1817         and also use it as the base of this new ReportPlace:
1818         * src/main/java/org/glom/web/client/place/ReportPlace.java
1819
1820         * src/main/java/org/glom/web/client/ui/ReportView.java
1821         * src/main/java/org/glom/web/client/ui/ReportViewImpl.java
1822         * src/main/java/org/glom/web/client/activity/ReportActivity.java:
1823         Add these, containing mostly boiler-plate for now.
1824
1825         * src/main/java/org/glom/web/client/OnlineGlomService.java
1826         * src/main/java/org/glom/web/client/OnlineGlomServiceAsync.java
1827         * src/main/java/org/glom/web/server/ConfiguredDocument.java
1828         * src/main/java/org/glom/web/server/OnlineGlomServiceImpl.java:
1829         Add API to get the LayoutGroup for the report.
1830
1831 2012-01-23  Murray Cumming  <murrayc@murrayc.com>
1832
1833         Add and fill a Reports drop-down list box.
1834
1835         * src/main/java/org/glom/web/server/ConfiguredDocument.java:
1836         Aded getReports():
1837         * src/main/java/org/glom/web/client/OnlineGlomService.java:
1838         * src/main/java/org/glom/web/client/OnlineGlomServiceAsync.java:
1839         * src/main/java/org/glom/web/server/OnlineGlomServiceImpl.java:
1840         Added getReports(document, table, localeID), calling 
1841         ConfiguredDocument.getReports().
1842         * src/main/java/org/glom/web/client/ui/TableSelectionView.java:
1843         * src/main/java/org/glom/web/client/ui/TableSelectionViewImpl.java:
1844         Added setReportsList() and a list widget.
1845         * src/main/java/org/glom/web/client/activity/TableSelectionActivity
1846         .java (TableSelectionActivity.fillView(): Fill the view's reports list.
1847
1848
1849 1.21.8:
1850
1851 2012-04-12  Murray Cumming  <murrayc@murrayc.com>
1852
1853         Translations: Add Esperanto.
1854
1855         * src/main/java/org/glom/web/OnlineGlom.gwt.xml
1856         * src/main/resources/org/glom/web/client/ui/OnlineGlomConstants_eo.
1857         properties: Add this translation because someone took the time to make it.
1858
1859 2012-03-15  Murray Cumming  <murrayc@murrayc.com>
1860
1861         Adapt to the java-libglom 1.21.7 API. 
1862
1863         * src/main/java/org/glom/web/server/ReportGenerator.java:
1864         addToReport(): get_group_secondary_fields() is now
1865         get_secondary_fields().
1866
1867
1868 2012-03-15  Murray Cumming  <murrayc@murrayc.com>
1869
1870         Use the latest java-libglom version.
1871
1872         * pom.xml: Use java-libglom 1.21.7.
1873
1874 2012-03-03  Ben Konrath  <ben@bagu.org>
1875
1876         Display date and time in details view.
1877
1878         https://bugzilla.gnome.org/show_bug.cgi?id=671257
1879
1880         * src/main/java/org/glom/web/client/ui/details/DetailsCell.java:
1881
1882 2012-03-05  Murray Cumming  <murrayc@murrayc.com>
1883
1884         Require the latest java-libglom.
1885
1886         * pom.xml: java-libglom 1.21.5 has LayoutItem_GroupBy.
1887
1888 2012-03-04  Murray Cumming  <murrayc@murrayc.com>
1889
1890         ListViewDbAccess.getSelectQuery(): Avoid using empty quickfind strings.
1891
1892         * src/main/java/org/glom/web/server/database/ListViewDBAccess.java
1893         ListViewDBAccess.getSelectQuery(): Do not create a where clause for 
1894         an empty quickfind string. I also corrected libglom to create only 
1895         empty where clauses for empty quickfind strings, but this avoids the
1896         need for that fix.
1897
1898 2012-02-24  Ben Konrath  <ben@bagu.org>
1899
1900         Improve the tabs in the Notebook widget.
1901
1902         Bug #670728
1903
1904 2012-01-30  Murray Cumming  <murrayc@murrayc.com>
1905
1906         Translations: Try to translate the strings.
1907
1908         * src/main/resources/org/glom/web/client/ui/OnlineGlomConstants_cs.properties:
1909         * src/main/resources/org/glom/web/client/ui/OnlineGlomConstants_de.properties:
1910         * src/main/resources/org/glom/web/client/ui/OnlineGlomConstants_es.properties:
1911         * src/main/resources/org/glom/web/client/ui/OnlineGlomConstants_sl.properties:
1912         * src/main/resources/org/glom/web/client/ui/OnlineGlomConstants_zh_CN.properties:
1913         Take the Open translation from GTK+'s .po files.
1914         Take the Details translation from Glom's po files.
1915         I have added the other strings to Glom so we can get translations that way:
1916         http://git.gnome.org/browse/glom/commit/?id=c3cefe607428a84bdf8de1b04e8bef6f70b04564
1917
1918 2012-01-27  Murray Cumming  <murrayc@murrayc.com>
1919
1920         TableSelectionViewImpl: Put the search label and entry in a div.
1921
1922         * src/main/java/org/glom/web/client/ui/TableSelectionViewImpl.java:
1923         Put the search widgets in a FlowTable so that the CSS can be used to
1924         style them while keeping them together.
1925         * src/main/webapp/style.css: Mention the new div.
1926
1927 2012-01-27  Murray Cumming  <murrayc@murrayc.com>
1928
1929         Translate more strings in more locales.
1930
1931         * src/main/resources/org/glom/web/client/ui/OnlineGlomConstants.properties:
1932         * src/main/java/org/glom/web/client/ui/details/DetailsCell.java:
1933         * src/main/java/org/glom/web/client/ui/details/RelatedListTable.java:
1934         * src/main/java/org/glom/web/client/ui/list/ListViewTable.java:
1935         Translate the "Details" and "Open" string too.
1936
1937         * src/main/java/org/glom/web/OnlineGlom.gwt.xml:
1938         * src/main/resources/org/glom/web/client/ui/OnlineGlomConstants.properties:
1939         * src/main/resources/org/glom/web/client/ui/OnlineGlomConstants_cs.properties:
1940         * src/main/resources/org/glom/web/client/ui/OnlineGlomConstants_es.properties:
1941         * src/main/resources/org/glom/web/client/ui/OnlineGlomConstants_sl.properties:
1942         * src/main/resources/org/glom/web/client/ui/OnlineGlomConstants_zh_CN.properties:
1943         Add these new locales as placeholders though they currently contain English.
1944
1945 2012-01-27  Murray Cumming  <murrayc@murrayc.com>
1946
1947         OnlineGlomServiceImpl: Avoid (unlikely) null object dereferences.
1948
1949         * src/main/java/org/glom/web/server/OnlineGlomServiceImpl.java: get*():
1950         Check the ConfiguredDocument* for null before using it.
1951
1952 2012-01-26  Murray Cumming  <murrayc@murrayc.com>
1953
1954         Tell Eclipse about the generated java files.
1955
1956         * .classpath: This lets it find OnlineGlomConstants.java.
1957         It would be nice if Eclipse just used the maven build files.
1958
1959 2012-01-26  Murray Cumming  <murrayc@murrayc.com>
1960
1961         Prevent a crash when no locale is specified in the URL.
1962
1963         * src/main/java/org/glom/web/client/Utils.java: getCurrentLocaleID():
1964         Avoid returning a null string, obtained from 
1965         Window.Location.getParameter(). This caused a crash when it was
1966         later passed to libglom's API.
1967         * src/main/java/org/glom/web/server/OnlineGlomServiceImpl.java:
1968         init(), getDocumentInfo(), getListViewLayout(), getDocuments(),
1969         getDetailsLayoutAndData(): Use StringUtils.defaultString() to
1970         guard against future null strings.
1971
1972 2012-01-26  Murray Cumming  <murrayc@murrayc.com>
1973
1974         Use the ?locale= query param instead of the &lang= token param. 
1975
1976         * src/main/java/org/glom/web/client/place/ListPlace.java
1977         * src/main/java/org/glom/web/client/place/DetailsPlace.java
1978         * src/main/java/org/glom/web/client/place/HasSelectableTablePlace.java
1979         Remove the lang token key and value.
1980         
1981         * src/main/java/org/glom/web/client/ui/TableSelectionView.java
1982         * src/main/java/org/glom/web/client/ui/TableSelectionViewImpl.java:
1983         When the user selects a different locale from the chooser, use 
1984         Window.Location.assign() to change the URL, which then causes a reload.
1985         
1986         * src/main/java/org/glom/web/client/Utils.java: Added getCurrentLocaleID().
1987         * src/main/java/org/glom/web/client/activity/DetailsActivity.java
1988         * src/main/java/org/glom/web/client/activity/DocumentSelectionActivity.java
1989         * src/main/java/org/glom/web/client/activity/ListActivity.java
1990         * src/main/java/org/glom/web/client/activity/TableSelectionActivity
1991         * src/main/java/org/glom/web/client/ui/DocumentSelectionView.java
1992         * src/main/java/org/glom/web/client/ui/DocumentSelectionViewImpl.java:
1993         * src/main/java/org/glom/web/client/ui/ListView.java:
1994         * src/main/java/org/glom/web/client/ui/ListViewImpl.java:
1995
1996         Remove localeID member variables and method/constructor parameters, instead
1997         using Utils.getCurrentLocaleID() when we need a localID to pass to 
1998         OnlineGlomService.
1999
2000 2012-01-26  Murray Cumming  <murrayc@murrayc.com>
2001
2002         Internationalize the UI strings.
2003
2004         * pom.xml: gwt-maven-plugin: Add the i18n goal and specify a 
2005         <i18nConstantsBundle>, removing the unused <i18nMessagesBundle>.
2006         * src/main/resources/org/glom/web/client/Messages.properties: Remove this
2007         because it is unused. Messages are apparently strings that can have 
2008         parameters, but we do not need that yet, so Contants will be enough for now.
2009         * src/main/java/org/glom/web/OnlineGlom.gwt.xml: Add extend-property lines
2010         to say that we support the en and de locales.
2011         * src/main/resources/org/glom/web/client/ui/OnlineGlomConstants.properties:
2012         The original English strings.
2013         * src/main/resources/org/glom/web/client/ui/OnlineGlomConstants_de.properties:
2014         Some German translations of the English strings.
2015         The i18n goal then uses the .properties file to generate an 
2016         OnlineGlomConstants.java file in target/ and somehow GWT.create() magically
2017         returns an implementation that returns the translated strings.
2018         The documentation suggests putting these in src/java/*/client/, but it seems
2019         best to put it in src/resources/*/client/.
2020         * src/main/java/org/glom/web/client/ui/TableSelectionViewImpl.java:
2021         Instantiate OnlineGlomConstants via GWT.create() and use it to get the strings
2022         instead of hard-coding them.
2023         Note that we cannot import OnlineGlomConstants because it does not exist yet,
2024         but that does not seem to stop the build, though it confuses Eclipse.
2025         
2026         You can see the translated string by adding ?locale=de to the URL, like so:
2027         http://127.0.0.1:8888/OnlineGlom.html?gwt.codesvr=127.0.0.1:9997?locale=de#list:document=film_manager
2028
2029 2012-01-24  Murray Cumming  <murrayc@murrayc.com>
2030
2031         Improve null/empty String checks. 
2032
2033         * pom.xml: Add a dependency on commons-lang, to use
2034         org.apache.commons.lang.StringUtils.
2035         * src/main/java/org/glom/web/server/ConfiguredDocument.java
2036         * src/main/java/org/glom/web/server/OnlineGlomServiceImpl.java
2037         * src/main/java/org/glom/web/server/database/RelatedListDBAccess.java
2038         * src/main/java/org/glom/web/server/database/RelatedListNavigation.java:
2039         Use StringUtils.isEmpty().
2040
2041         * src/main/java/org/glom/web/client/StringUtils.java: Add a tiny
2042         StringUtils class with a static isEmpty() function because we 
2043         cannot use org.apache.commons.lang.StringUtils in client-side
2044         GWT code because it (apparently) cannot be compiled to javascript.
2045         * src/main/java/org/glom/web/client/activity/DetailsActivity.java
2046         * src/main/java/org/glom/web/client/activity/ListActivity.java
2047         * src/main/java/org/glom/web/client/activity/TableSelectionActivity.java
2048         * src/main/java/org/glom/web/client/place/DetailsPlace.java
2049         * src/main/java/org/glom/web/client/place/HasSelectableTablePlace.java
2050         * src/main/java/org/glom/web/client/place/ListPlace.java
2051         * src/main/java/org/glom/web/client/ui/cell/NumericCell.java
2052         * src/main/java/org/glom/web/client/ui/cell/TextCell.java
2053         * src/main/java/org/glom/web/client/ui/details/DetailsCell.java
2054         * src/main/java/org/glom/web/client/ui/details/Group.java
2055         * src/main/java/org/glom/web/client/ui/details/Notebook.java: Use 
2056         our StringUtils.isEmpty() function.
2057
2058 2012-01-24  Murray Cumming  <murrayc@murrayc.com>
2059
2060         Update to the latest java-libglom API.
2061
2062         * pom.xml: Require java-libglom 1.21.4.
2063         * src/main/java/org/glom/web/server/ConfiguredDocument.java
2064         getDocumentInfo(), getListViewLayoutGroup():
2065         * src/main/java/org/glom/web/server/OnlineGlomServiceImpl.java
2066         getDocuments():
2067         * src/main/java/org/glom/web/server/database/DBAccess.java
2068         getFieldsToShowForSQLQueryAddGroup(),
2069         getPrimaryKeyLayoutItemField(): Replace get_database_title()
2070         with either get_database_title_original() or 
2071         get_database_title(localeID).
2072
2073 2012-01-24  Murray Cumming  <murrayc@murrayc.com>
2074
2075         ConfiguredDocument: Avoid a null pointer exception.
2076
2077         * src/main/java/org/glom/web/server/ConfiguredDocument.java
2078         Initialize localeID to "" to avoid returning a null String which 
2079         causes a crash in java-libglom's swing-generated code.
2080
2081 2012-01-23  Murray Cumming  <murrayc@murrayc.com>
2082
2083         Some simple renaming.
2084
2085         * src/main/java/org/glom/web/client/ui/TableSelectionViewImpl.java
2086         * src/main/webapp/style.css: Rename, tableChooser to tablesChooser. Likewise
2087         for localeChooser. This seems more appropriate and is less ambiguous 
2088         particularly in the .css file.
2089
2090 2012-01-23  Murray Cumming  <murrayc@murrayc.com>
2091
2092         ConfiguredDocument: Rename the localedID private member variable.
2093
2094 2012-01-23  Murray Cumming  <murrayc@murrayc.com>
2095
2096         Adapt to the latest java-libglom API from git master.
2097
2098         * src/main/java/org/glom/web/server/database/ListDBAccess.java:
2099         libglom now uses only Vector instead of List, which uses add() instead of
2100         addLast(). 
2101
2102 2012-01-22  Murray Cumming  <murrayc@murrayc.com>
2103
2104         ConfiguredDocument: Rename the localedID private member variable.
2105
2106 2012-01-20  Murray Cumming  <murrayc@murrayc.com>
2107
2108         Build a source tarball with mvn assembly:single
2109
2110         * assembly.xml: Add this file.
2111         * pom.xml: Use the maven-assembly-plugin and tell it to use 
2112         our assembly.xml file.
2113
2114 2012-01-19  Murray Cumming  <murrayc@murrayc.com>
2115
2116         OnlineGlomServiceImpl: Get .glom files recursively.
2117
2118         * pom.xml: Depend on commons-io from org.apache.commons.
2119         * src/main/java/org/glom/web/server/OnlineGlomServiceImpl.java
2120         init(): Use org.apache.commons.io.FileUtils.listFiles() to get the 
2121         files recursively, and with the easier filter for the extension.
2122         Use org.apache.commons.io.FilenameUtils.removeExtension() to 
2123         simplify that code too.
2124
2125 2012-01-19  Murray Cumming  <murrayc@murrayc.com>
2126
2127         README: Mention that you must install java-libglom packages separately.
2128
2129         But then it works, because java-libglom is now in the central maven 
2130         repository.
2131
2132 2012-01-18  Murray Cumming  <murrayc@murrayc.com>
2133
2134         locales drop-down: Show the correct selected locale when the URL changes.
2135
2136         * src/main/java/org/glom/web/client/activity/TableSelectionActivity
2137         .java: setPlace(): Move some code into fillView().
2138
2139 2012-01-18  Murray Cumming  <murrayc@murrayc.com>
2140
2141         locales drop-down: Do not lose the primary key.
2142
2143         * src/main/java/org/glom/web/client/activity/DetailsActivity.java
2144         start(): onLocaleChange(): Pass the current primary key value, 
2145         instead of an empty value.
2146
2147 2012-01-18  Murray Cumming  <murrayc@murrayc.com>
2148
2149         locales drop-down: Do not lose the drop-down selection.
2150
2151         * src/main/java/org/glom/web/client/activity/TableSelectionActivity
2152         .java (TableSelectionActivity.fillView): Set the selected locale
2153         after changing the drop-down items (though we do not really need
2154         to change them just because the locale changes.)
2155
2156 2012-01-18  Murray Cumming  <murrayc@murrayc.com>
2157
2158         locales drop-down: Change the tables list when this changes.
2159
2160         * src/main/java/org/glom/web/client/activity/TableSelectionActivity
2161         .java: TableSelectionActivity.start(): Move the async table titles
2162         retrieval into a private fillView() method and also call this when 
2163         the chosen locale changes.
2164         Note that the document title is not actually translatable yet, but
2165         that is a problem that I should fix soon in libglom.
2166
2167 2012-01-18  Murray Cumming  <murrayc@murrayc.com>
2168
2169         Improve the placement of the locales drop-down.
2170
2171         * src/main/java/org/glom/web/client/ui/TableSelectionViewImpl.java
2172         Put the title and locales drop-down in a div (gwt.FlowTable).
2173         * src/main/webapp/style.css: Add magic css properties to make this work.
2174         Also remove the left margin from the title so that it lines up with the 
2175         headerbox below it.
2176
2177 2012-01-18  Murray Cumming  <murrayc@murrayc.com>
2178
2179         locales selector: Show human-readable locale titles.
2180
2181         * src/main/java/org/glom/web/server/ConfiguredDocument.java
2182         getDocumentInfo(): Use java.util.Locale to show a real title of 
2183         each locale, in the locale's own language.
2184
2185 2012-01-17  Murray Cumming  <murrayc@murrayc.com>
2186
2187         Add a language/locale selector drop-down.
2188
2189         * src/main/java/org/glom/web/shared/DocumentInfo.java:
2190         Add getLocaleIDs(), setLocaleIDs(), getLocaleTitles(), setLocaleTitles().
2191         * /src/main/java/org/glom/web/server/ConfiguredDocument.java:
2192         getDocumentInfo(): Store the available Locales in the DocumentInfo.
2193         * src/main/java/org/glom/web/client/ui/TableSelectionView.java:
2194         * src/main/java/org/glom/web/client/ui/TableSelectionViewImpl.java:
2195         Add a ListBox to show the available locales. Add getLocaleSelector(),
2196         setLocaleList(), getSelectedLocale(), setSelectedLocale().
2197         * src/main/java/org/glom/web/client/event/LocaleChangeEvent.java
2198         * src/main/java/org/glom/web/client/event/LocaleChangeEventHandler.
2199         java: Add these classes.
2200         * src/main/java/org/glom/web/client/activity/TableSelectionActivity.java:
2201         start(): Fill the locales ListBox. Handle its change event, firing a 
2202         LocaleChangeEvent.
2203         setPlace(): Show the selected locale as specified by the URL token.
2204         * src/main/java/org/glom/web/client/activity/DetailsActivity.java:
2205         * src/main/java/org/glom/web/client/activity/ListActivity.java:
2206         Handle LocaleChangeEvent, going to a new *Place with that locale.
2207
2208         The placement of the ListBox is not pretty, and it currently uses the ID
2209         as a title, instead of "English", "Deutsch", "Espanola", etc, but it 
2210         is a start.
2211
2212
2213 2012-01-17  Murray Cumming  <murrayc@murrayc.com>
2214
2215         Search box: Show the search text from the URL token.
2216
2217         * src/main/java/org/glom/web/client/ui/TableSelectionView.java:
2218         * src/main/java/org/glom/web/client/ui/TableSelectionViewImpl.java:
2219         Add setQuickFindText().
2220         * src/main/java/org/glom/web/client/activity/TableSelectionActivity
2221         .java: setPlace(): Store the queryText if the place is a ListPlace, 
2222         and call TableSelectionView.setQuickFindText().
2223
2224 2012-01-17  Murray Cumming  <murrayc@murrayc.com>
2225
2226         Allow use of translations via, for instance, &lang=de in the URL.
2227
2228         * pom.xml: Use the unstable java-libglom 1.21 version.
2229
2230         * src/main/java/org/glom/web/client/OnlineGlomService.java:
2231         * src/main/java/org/glom/web/client/OnlineGlomServiceAsync.java
2232         * src/main/java/org/glom/web/server/OnlineGlomServiceImpl.java:
2233         init(): Instead of calling TranslatableItem.set_current_locale() 
2234         (now removed), call ConfiguredDocument.setDefaultLocaleID().
2235         However, this is only for default locales, which are not needed to 
2236         change the locale in the URL.
2237         getDocumentInfo(), getListViewLayout(), getSortedListViewData(),
2238         getDetailsData(), getDetailsLayoutAndData(), getRelatedListData(),
2239         getSortedRelatedListData(): Add a localeID parameter, so we can get the 
2240         layout for a particular locale.
2241         * src/main/java/org/glom/web/server/ConfiguredDocument.java:
2242         Add get/setDefaultLocaleID().
2243         getDocumentInfo(), getListViewData(), getRelatedListData(),
2244         getDetailsLayoutGroup(), getListViewLayoutGroup(),
2245         createLayoutItemPortalDTO(), convertToGWTGlomLayoutItemField(): Add a 
2246         localeID parameter, so we can get the layout for a particular locale.
2247
2248         * src/main/java/org/glom/web/client/place/HasSelectableTablePlace.java:
2249         * src/main/java/org/glom/web/client/place/DetailsPlace.java:
2250         * src/main/java/org/glom/web/client/place/ListPlace.java:
2251         Parse and construct a lang parameter too.
2252
2253         * src/main/java/org/glom/web/client/activity/DocumentSelectionActivity.java:
2254         start(): Pass the defaultLocaleID to addDocumentLink(). It is then
2255         passed to subsequent methods and constructors.
2256         * src/main/java/org/glom/web/client/activity/DetailsActivity.java:
2257         * src/main/java/org/glom/web/client/activity/ListActivity.java:
2258         Store the localeID from the *Place and pass it to other constructors
2259         and methods, such as OnlineGlomServiceAsync.getDetailsLayoutAndData().
2260
2261         * src/main/java/org/glom/web/client/ui/DocumentSelectionView.java:
2262         * src/main/java/org/glom/web/client/ui/DocumentSelectionViewImpl.java:
2263         * src/main/java/org/glom/web/client/ui/TableSelectionView.java
2264         * src/main/java/org/glom/web/client/ui/TableSelectionViewImpl.java
2265         * src/main/java/org/glom/web/client/ui/ListView.java:
2266         * src/main/java/org/glom/web/client/ui/ListViewImpl.java:
2267         Take localeID parameters and pass them to subsequent constructors and 
2268         methods, so that the layout is always retrieved for that locale.
2269
2270         This is rather repetitive.
2271
2272         Note that "" means the original (default) locale of the Glom document,
2273         which is usually English.       
2274
2275 2012-01-17  Murray Cumming  <murrayc@murrayc.com>
2276
2277         Documents: Remove final keyword to fix startup configuration.
2278
2279         * src/main/java/org/glom/web/shared/Documents.java: Remove the
2280         final keywords on the private member variables because that breaks
2281         the startup, apparently (there are warnings) because it stops them
2282         from being serialized. I added these in the previous commit.
2283
2284 2012-01-13  Murray Cumming  <murrayc@murrayc.com>
2285
2286         Documents: Add some final keywords.
2287
2288         * src/main/java/org/glom/web/shared/Documents.java: Eclipse suggested
2289         this.
2290
2291 2012-01-13  Murray Cumming  <murrayc@murrayc.com>
2292
2293         OnlineGlomServiceImpl: Add to overview comments.
2294
2295         * src/main/java/org/glom/web/server/OnlineGlomServiceImpl.java:
2296         Note that this is where all the document are loaded. They are not 
2297         loaded freshly for each page.
2298
2299 2012-01-12  Murray Cumming  <murrayc@murrayc.com>
2300
2301         Add a search box.
2302
2303         * src/main/java/org/glom/web/client/ui/TableSelectionViewImpl.java:
2304         Add a TextBox for the text of a quick find.
2305         Add getQuickFindBox(), to get the widget, and getQuickFindText() to 
2306         get the text.
2307         setBackLink(): Add a String quickFind parameter.
2308         * src/main/java/org/glom/web/client/ui/TableSelectionView.java
2309         (TableSelectionView): Add getQuickFindBox() and getQuickFindText()
2310         to the base interface, because that is how TableSelectionViewImpl is used.
2311         * src/main/webapp/style.css: Add style for the search box and its label.
2312
2313         * src/main/java/org/glom/web/client/event/QuickFindChangeEvent.java:
2314         * src/main/java/org/glom/web/client/event/QuickFindChangeEventHandler.java:
2315         Add these files, based on the existing TableChangeEvent and 
2316         TableChangeEventHandlers.
2317         * src/main/java/org/glom/web/client/activity/DetailsActivity.java
2318         start(): Handle QuickFindChangeEvent, passing its quickFind text to
2319         a ListPlace() that the user should be taken to.
2320         * src/main/java/org/glom/web/client/activity/ListActivity.java
2321         start(): Handle it here too and adapt the TableChangeEvent handler to 
2322         pass the extra "" quickFind parameter to ListPlace.
2323         * src/main/java/org/glom/web/client/place/ListPlace.java: 
2324         Constructor: Take an extra String quickFind parameter and store it, 
2325         returning it from a new  getQuickFind() method.
2326         getToken(): Put the quickFind text in the URL token.
2327         getPlace(): Parse the quickFind text from the URL token.
2328         * src/main/java/org/glom/web/client/ui/DocumentSelectionViewImpl.ja
2329         va: addDocumentLink(): Pass an extra "" quickFind parameter to the 
2330         ListPlace constructor.
2331         * src/main/java/org/glom/web/client/activity/TableSelectionActivity
2332         .java: start(): Add a Change handler for the TableSelectionView's
2333         TextBox (via its base HasChangeHandlers interface), firing the new 
2334         QuickFindChangeEvent.
2335         setPlace(): Adapt the call to TableSelectionView.setbackLink(), to 
2336         pass the extra "" quickFind parameter.
2337
2338         * src/main/java/org/glom/web/client/ui/ListViewImpl.java:
2339         setCellTable(): Add a String quickFind parameter and pass it to 
2340         the ListViewTable() constructor.
2341         * src/main/java/org/glom/web/client/ui/ListView.java: Change 
2342         setCellTable() in the base interface, because that is how ListViewImpl
2343         is used.
2344
2345         * src/main/java/org/glom/web/client/ui/list/ListTable.java:
2346         Add a String quickFind member variable.
2347         * src/main/java/org/glom/web/client/ui/list/ListViewTable.java:
2348         Constructor: Add a String quickFind parameter, storing it in the
2349         base ListTable's member variable.
2350         onRangeChanged(): Pass quickFind to the 
2351         OnlineGlomServiceAsync.getSortedListViewData() and 
2352         OnlineGlomServiceAsync.getListViewData() methods.
2353
2354         * src/main/java/org/glom/web/server/OnlineGlomServiceImpl.java:
2355         getListViewData(), getSortedListViewData(): Add a String quickFind 
2356         parameter, passing it to ConfiguredDocument.getListViewData().
2357         * src/main/java/org/glom/web/client/OnlineGlomService.java:
2358         Change getListViewData(), getSortedListViewData() in the base interface,
2359         because that is how OnlineGlomServiceImpl is used, via this:
2360         * src/main/java/org/glom/web/client/OnlineGlomServiceAsync.java:
2361         Change getListViewData(), getSortedListViewData() here too.
2362         This class can apparently be used to asynchronously call methods on 
2363         OnlineGlomService, and GWT seems to implement that after recognizing 
2364         just the *Async name convention and the extra AsyncCallback parameters.
2365
2366         * src/main/java/org/glom/web/server/ConfiguredDocument.java
2367         getListViewData(): Add a String quickFind parameter, and pass it to 
2368         ListViewDBAccess.getData().
2369         * src/main/java/org/glom/web/server/database/ListDBAccess.java
2370         getListData(): Add a String quickFind parameter and pass it to 
2371         getSelectQuery().
2372         getSelectQuery(): Add a String quickFind parameter.
2373         * src/main/java/org/glom/web/server/database/ListViewDBAccess.java
2374         getSelectQuery(): Add a String quickFind parameter and use it with 
2375         Glom.get_find_where_clause_quick() to pass a where_clause to 
2376         Glom.build_sql_select_with_where_clause(), to actually filter the 
2377         list view results.
2378         getData(): Add a String quickFind parameter, passing it to getListData().
2379         * src/main/java/org/glom/web/server/database/RelatedListDBAccess.ja
2380         va: getData(): Pass an empty string to getListData() for the 
2381         quickFind parameter.
2382
2383 2012-01-12  Murray Cumming  <murrayc@murrayc.com>
2384
2385         ListTable: Minor change.
2386
2387         * src/main/java/org/glom/web/client/ui/list/ListTable.java
2388         createCellTable(): Make this protected instead of public.
2389
2390 2012-01-12  Murray Cumming  <murrayc@murrayc.com>
2391
2392         Many files: Use final for the parameters and use the @override attribute.
2393
2394 2012-01-22  Ben Konrath <ben@bagu.org>
2395
2396         Add anchor links for single line text that starts with http, ftp and www.
2397
2398         Bug #667269
2399
2400 2012-01-22  Ben Konrath <ben@bagu.org>
2401
2402         Add ellipsis to single line text in details view.
2403
2404         Bug #667269
2405
2406 2012-01-04  Murray Cumming  <murrayc@murrayc.com>
2407
2408         Remove all javadoc author tags.
2409
2410         Because they are awkward and meaningless when many people touch
2411         many files.
2412         See https://gitorious.org/online-glom/gwt-glom/commit/7628b732cb90cbc6d5635420a75568504e8b3655#comment_81164
2413  
2414 2012-01-04  Murray Cumming  <murrayc@murrayc.com>
2415
2416         Revert the COPYING.LESSER to COPYING rename.
2417
2418         Apparently both should be there if it is LGPL.
2419
2420 2012-01-03  Murray Cumming  <murrayc@murrayc.com>
2421
2422         *View: Remove unused imports.
2423
2424         * src/main/java/org/glom/web/client/ui/DetailsView.java:
2425         * src/main/java/org/glom/web/client/ui/DocumentSelectionView.java
2426         * src/main/java/org/glom/web/client/ui/ListView.java:
2427         * src/main/java/org/glom/web/client/ui/TableSelectionView.java:
2428         Remove unused imports, as suggested by Eclipse.
2429
2430 2012-01-02  Murray Cumming  <murrayc@murrayc.com>
2431
2432         Move the *View::Presenter types, and some API into one base View.
2433
2434         * src/main/java/org/glom/web/client/ui/DetailsView.java:
2435         * src/main/java/org/glom/web/client/ui/DocumentSelectionView.java:
2436         * src/main/java/org/glom/web/client/ui/ListView.java:
2437         * src/main/java/org/glom/web/client/ui/TableSelectionView.java: Move
2438         Presenter, setPresenter() and clear() into a shared base interface,
2439         to avoid the unnecessary duplicate Presenter types and to more clearly
2440         show how the *Views share the same structure, even if they are not 
2441         used polymorphically.
2442
2443         * src/main/java/org/glom/web/client/ui/DetailsViewImpl.java:
2444         * src/main/java/org/glom/web/client/ui/DocumentSelectionViewImpl.ja
2445         va:
2446         * src/main/java/org/glom/web/client/activity/DetailsActivity.java:
2447         * src/main/java/org/glom/web/client/activity/ListActivity.java:
2448         * src/main/java/org/glom/web/client/activity/DocumentSelectionActiv
2449         ity.java:
2450         * src/main/java/org/glom/web/client/activity/TableSelectionActivity
2451         .java: Adapt.
2452
2453         Feel free to revert this if there is a good reason for the duplicate
2454         types.
2455
2456 2012-01-02  Murray Cumming  <murrayc@murrayc.com>
2457
2458         OnlineGlom: Make clientFactory a (protected) member, and test it a bit.
2459
2460         * src/main/java/org/glom/web/client/OnlineGlom.java: Make clientFactory
2461         a class member instead of a local variable in the method.
2462         This lets us use it to get the view instances, for use in tests.
2463         * src/test/java/org/glom/web/client/GwtTestOnlineGlom.java:
2464         beforeOnlineGlom(): Test some more details of the initial view.
2465         Again, this is not very useful.
2466
2467         To really test gwt-glom we will need to start a local postgresql 
2468         instance with local data, like the Glom tests in C++.
2469
2470 2012-01-02  Murray Cumming  <murrayc@murrayc.com>
2471
2472         pom.xml: Mention the LGPL license.
2473
2474         * pom.xml: Add a licenses section.
2475         * COPYING.LESSER: Move this to COPYING, which
2476         previously contained the GPL. But gwt-glom is all LGPL.
2477
2478 2012-01-02  Murray Cumming  <murrayc@murrayc.com>
2479
2480         Add project information to README and pom.xml.
2481
2482         * README: Add a brief description and mention some mvn
2483         commands.
2484         * pom.xml: This extra information shows up in mvn site
2485         generated pages.
2486
2487 2011-01-02  Murray Cumming  <murrayc@murrayc.com>
2488
2489         Use the latest java-libglom version.
2490
2491         * pom.xml: Use java-libglom 1.19.2 instead of 1.19.1.
2492
2493 2012-01-01  Murray Cumming  <murrayc@murrayc.com>
2494
2495         GwtTestOnlineGlom: Test a little more.
2496
2497         * src/main/java/org/glom/web/client/OnlineGlom.java: Make the panels
2498         protected rather than private, as suggested by the gwt-test-utils
2499         maintianer here:
2500         http://stackoverflow.com/questions/7931724/gwt-testcase-simulating-clicking-a-button-on-my-page
2501         * src/test/java/org/glom/web/client/GwtTestOnlineGlom.java
2502         Test the initial visibility of the panels.
2503
2504         However, this is not a very useful test.
2505         And I wonder how we should generally test using this idea for an
2506         activity/places app like ours where the real changes happen implicitly
2507         based on the history token/URL.
2508
2509 2012-01-01  Murray Cumming  <murrayc@murrayc.com>
2510
2511         Slight modification to *Mapper comments.
2512
2513         * src/main/java/org/glom/web/client/mvp/DataActivityMapper.java
2514         (DataActivityMapper)
2515         * src/main/java/org/glom/web/client/mvp/DocumentSelectionActivityMa
2516         pper.java
2517         * src/main/java/org/glom/web/client/mvp/TableSelectionActivityMappe
2518         r.java
2519         Remove comments mentioning GIN because they are just copied from 
2520         the example code and are apparently not helpful:
2521         http://groups.google.com/group/google-web-toolkit/msg/82f0098b20669a73
2522         Also change the mention of a class that is only in the example code.
2523
2524 2012-01-01  Murray Cumming  <murrayc@murrayc.com>
2525
2526         GwtTestOnlineGlom test: Minor changes.
2527
2528         * src/test/java/org/glom/web/client/GwtTestOnlineGlom.java:
2529         Avoid the long qualified class name and modify the comment 
2530         because it is now obvious to me that the mocked class is the only
2531         custom one created via GWT.create().
2532
2533 2012-01-01  Murray Cumming  <murrayc@murrayc.com>
2534
2535         Tests: Added the beginnings of a test using gwt-test-utils.
2536
2537         * pom.xml: Add dependencies on gwt-test-utils and easymock.
2538         * src/test/resources/META-INF/gwt-test-utils.properties: Add this file
2539         which tells gwt-test-utils what class will be tested.
2540         * src/test/java/org/glom/web/client/GwtTestOnlineGlom.java:
2541         Add a simple (but empty) test case. One class, used by the OnlineGlom
2542         class, is mocked so that it can be created. However, I am not sure 
2543         why only this class needs to be mocked.
2544
2545         Note that mockito seems more popular, and clearer, than easymock,
2546         but I have not got that working yet. It might be a matter of the 
2547         mockito version.
2548
2549         This test is run during mvn integration-test.
2550
2551 2011-12-31  Murray Cumming  <murrayc@murrayc.com>
2552
2553         Tests: Use junit4-style syntax instead of junit3-style.
2554
2555         * src/test/java/org/glom/web/client/place/DetailsPlaceTest.java:
2556         * src/test/java/org/glom/web/client/place/ListPlaceTest.java:
2557         * src/test/java/org/glom/web/shared/DataItemTest.java:
2558         Use the @Test annotation rather than relying on the test*() prefix.
2559         Also no longer implement TestCase, to avoid triggering support for 
2560         the junit3-way, which stops the annotations from working.
2561         Change the imports from import junit.framework.* to 
2562         import org.junit.*, which is apparently the new way.
2563
2564 2011-12-31  Murray Cumming  <murrayc@murrayc.com>
2565
2566         Added a test for ListPlace token parsing and creation.
2567
2568         * src/test/java/org/glom/web/client/place/ListPlaceTest.java:
2569         This is much the same as DetailsPlaceTest.
2570
2571         I wonder how we could test the other parts of the *Place API.
2572
2573 2011-12-30  Murray Cumming  <murrayc@murrayc.com>
2574
2575         DetailsPlace test: Also test getToken() and recreation via getPlace().
2576
2577         * src/test/java/org/glom/web/client/place/DetailsPlaceTest.java:
2578         testGetPlaceParameters(): Get the tokens from the DetailsPlace and 
2579         recreate it, testing the recreated DetailsPlace for the same parameter
2580         values.
2581
2582 2011-12-30  Murray Cumming  <murrayc@murrayc.com>
2583
2584         Use the surefire-report plugin.
2585
2586         * pom.xml: This generates a HTML report about the tests in 
2587         target/site/surefire-report.html
2588         when you do mvn surefire-report:report. It seems to be popular/normal.
2589
2590 2011-12-30  Murray Cumming  <murrayc@murrayc.com>
2591
2592         Added a test for DetailsPlace.
2593
2594         * src/test/java/org/glom/web/client/place/DetailsPlaceTest.java:
2595         Test the getPlace() token parsing.
2596
2597 2011-12-30  Murray Cumming  <murrayc@murrayc.com>
2598
2599         Added a first unit test.
2600
2601         * pom.xml: Add a test goal, and a dependency on junit in that scope.
2602         * src/test/java/org/glom/web/shared/DataItemTest.java:
2603         This is a silly test but it is just to get things started. Note that
2604         maven/junit finds the test because it looks in src/test by default.
2605
2606 2011-12-22  Ben Konrath  <ben@bagu.org>
2607
2608         Change charsetName to "UTF-8" when replacing line breaks.
2609
2610         JavaScript requires the charsetName to be "UTF-8". CharsetName values
2611         that work in Java (such as "UTF8") will not work when compiled to
2612         JavaScript.
2613
2614         This fixes a problem with multi-line details view fields that have hard
2615         line breaks. The "License Text" field on this page demonstrates the
2616         problem:
2617
2618         http://onlineglom.openismus.com/OnlineGlom/#details:document=debian_repository_analyzer&table=licenses&value=197
2619
2620         * src/main/java/org/glom/web/client/ui/details/DetailsCell.java:
2621
2622 2011-12-22  Ben Konrath  <ben@bagu.org>
2623
2624         Fix another bug with related list navigation.
2625
2626         I've tested all the navigation buttons in all of the related lists
2627         so things should be good now.
2628
2629         * src/main/java/org/glom/web/server/ConfiguredDocument.java:
2630
2631 2011-12-22  Ben Konrath  <ben@bagu.org>
2632
2633         Fix a crasher when refreshing the list view with the default table.
2634
2635         This crash will also happen when loading the list view with the default
2636         table from a link or bookmark.
2637
2638         * src/main/java/org/glom/web/client/activity/DetailsActivity.java: Go
2639         to the main document selection page when the document id hasn't been
2640         set.
2641         * src/main/java/org/glom/web/client/activity/ListActivity.java: Go to
2642         the main document selection page when the document id hasn't been
2643         set.
2644         * src/main/java/org/glom/web/client/place/DetailsPlace.java: Use empty
2645         values for the details place when the document id hasn't been set.
2646         * src/main/java/org/glom/web/client/place/ListPlace.java: Use empty
2647         values for the list place when the document id hasn't been set.
2648
2649 2011-12-21  Ben Konrath  <ben@bagu.org>
2650
2651         Protect against NPE when glom.document.locale is not in config.
2652
2653         This patch protects against an NPE when glom.document.locale is not in
2654         the config file. This NPE will also happen if glom.document.locale is
2655         commented out.
2656
2657         The patch also updates the error message to display the class name when
2658         the getMessage() returns null. This was happening when the NPE was
2659         thrown and I had "Configuration Error: null". If an NPE is encountered
2660         with this patch, "Configuration Error: NullPointerException " will be
2661         displayed.
2662
2663         This commit closes this bug:
2664
2665         https://bugzilla.gnome.org/show_bug.cgi?id=666669
2666
2667         * src/main/java/org/glom/web/server/OnlineGlomServiceImpl.java:
2668
2669 2011-12-20  Murray Cumming  <murrayc@murrayc.com>
2670
2671         Rename onlineglom.properties to onlineglom.properties.sample.
2672
2673         * src/main/resources/onlineglom.properties: Rename to:
2674         * src/main/resources/onlineglom.properties.sample:
2675         * src/main/resources/README: And add this file explaining that people
2676         should rename it back when deploying.
2677
2678 2011-12-20  Murray Cumming  <murrayc@murrayc.com>
2679
2680         Allow choosing the translation in the .properties file.
2681
2682         * src/main/java/org/glom/web/server/OnlineGlomServiceImpl.java
2683         init(): Read a glom.document.locale value from the configuration file 
2684         and call Glom's TransatableItem::set_current_locale() method.
2685         * src/main/resources/onlineglom.properties: Add a commented-out 
2686         example of this new setting.
2687
2688         It would be better to add &lang=de_DE to the URL, but the current 
2689         libglom API does not allow us to do this easily. I am working on that.
2690
2691 2011-12-19  Murray Cumming  <murrayc@murrayc.com>
2692
2693         Avoid a crash in parsing of token parameters.
2694
2695         * src/main/java/org/glom/web/client/place/HasSelectableTablePlace.j
2696         ava: getTokenParams(): Do not crash if a parameter has a key but no 
2697         value, and ignore parameters with neither.
2698
2699 2011-12-17  Murray Cumming  <murrayc@murayc.com>
2700
2701         History token building/handling: Improve use of token parameters.
2702
2703         * src/main/java/org/glom/web/client/place/HasSelectableTablePlace.java 
2704         (HasSelectableTablePlace.Tokenizer): Add getTokenParams(String)
2705         and buildParamsToken(HashMap), for use by derived classes.
2706         Make the separator private because it is no longer be needed.
2707         * src/main/java/org/glom/web/client/place/DetailsPlace.java
2708         (DetailsPlace.Tokenizer.getToken): Use buildParamsToken()
2709         instead of manual string concatenation.
2710         (DetailsPlace.Tokenizer.getPlace): Use getTokenParams() instead 
2711         of hardcoded indices and awkward splitting code.
2712         * src/main/java/org/glom/web/client/place/ListPlace.java
2713         (ListPlace.Tokenizer.getToken): Use buildParamsToken()
2714         instead of manual string concatenation.
2715         (ListPlace.Tokenizer.getPlace): Use getTokenParams() instead 
2716         of hardcoded indices and awkward splitting code.
2717         This should fix bug #666420
2718
2719 2011-12-16  Murray Cumming  <murrayc@murrayc.com>
2720
2721         Fix a Navgiation->Navigation typo in the code.
2722
2723         * src/main/java/org/glom/web/client/activity/DetailsActivity.java
2724         Rename processNavgiation() to processNavigation().
2725
2726 2011-12-16  Murray Cumming  <murrayc@murrayc.com>
2727
2728         Fix a seperator->separator typo in the code.
2729
2730         * src/main/java/org/glom/web/client/place/DetailsPlace.java
2731         * src/main/java/org/glom/web/client/place/HasSelectableTablePlace.java
2732         * src/main/java/org/glom/web/client/place/ListPlace.java: Just a 
2733         misspelling.
2734
2735 2011-12-15  Ben Konrath <ben@bagu.org>
2736
2737         Cleanup some comments.
2738
2739         * src/main/java/org/glom/web/server/OnlineGlomServiceImpl.java:
2740
2741 2011-12-14  Ben Konrath <ben@bagu.org>
2742
2743         Replace \n with <br/> for multiline text in the details view.
2744
2745         Vertical scrollbars are added when needed as well.
2746
2747         * src/main/java/org/glom/web/client/ui/details/DetailsCell.java:
2748
2749 2011-12-14  Ben Konrath <ben@bagu.org>
2750
2751         Specify the font for document selection links.
2752
2753         * src/main/webapp/style.css:
2754
2755 2011-12-14  Ben Konrath <ben@bagu.org>
2756
2757         Fix bouncy CellTable while paging.
2758
2759         This doesn't currently work with related list tables in unselected
2760         Notebook tabs.
2761
2762         * src/main/java/org/glom/web/client/ui/list/ListTable.java
2763
2764 2011-12-14  Ben Konrath <ben@bagu.org>
2765
2766         Revamp the appearance of the document selection page.
2767
2768         * src/main/java/org/glom/web/client/ui/DocumentSelectionViewImpl.java:
2769         * src/main/java/org/glom/web/client/ui/DocumentSelectionViewImpl.ui.xml:
2770         * src/main/webapp/style.css:
2771
2772 2011-12-13  Ben Konrath <ben@bagu.org>
2773
2774         Set navigation button column to the smallest size possible.
2775
2776         * src/main/java/org/glom/web/client/ui/list/ListTable.java:
2777
2778 2011-12-13  Ben Konrath <ben@bagu.org>
2779
2780         Change OpenButton nomenclature to NavigationButton.
2781
2782         Using NavigtionButton makes things more generic. Classes, methods and
2783         variables have been changed.
2784
2785         This is a rename-only refactor.
2786
2787         * src/main/java/org/glom/web/client/activity/DetailsActivity.java:
2788         * src/main/java/org/glom/web/client/ui/ListViewImpl.java:
2789         * src/main/java/org/glom/web/client/ui/cell/NavigationButtonCell.java:
2790         Renamed from OpenButtonCell.
2791         * src/main/java/org/glom/web/client/ui/details/RelatedListTable.java:
2792         * src/main/java/org/glom/web/client/ui/list/ListTable.java:
2793         * src/main/java/org/glom/web/client/ui/list/ListViewTable.java:
2794
2795 2011-12-12  Ben Konrath <ben@bagu.org>
2796
2797         Remove unnecessary String argument in RelatedListTable and ListViewTable.
2798
2799         * src/main/java/org/glom/web/client/activity/DetailsActivity.java:
2800         * src/main/java/org/glom/web/client/ui/ListViewImpl.java:
2801         * src/main/java/org/glom/web/client/ui/details/RelatedListTable.java:
2802         * src/main/java/org/glom/web/client/ui/list/ListViewTable.java:
2803
2804 2011-12-12  Ben Konrath <ben@bagu.org>
2805
2806         Update variable names and comments.
2807
2808         * src/main/java/org/glom/web/client/ui/details/RelatedListTable.java:
2809         * src/main/java/org/glom/web/client/ui/list/ListViewTable.java:
2810
2811 2011-12-12  Ben Konrath <ben@bagu.org>
2812
2813         Properly initialize numNonEmptyRows variable to zero.
2814
2815         * src/main/java/org/glom/web/client/ui/details/RelatedListTable.java:
2816         * src/main/java/org/glom/web/client/ui/list/ListViewTable.java:
2817
2818 2011-12-05  Ben Konrath  <ben@bagu.org>
2819
2820         Add latest mockup with HTML tables.
2821
2822         Features of this mockup:
2823
2824         -> HTML table for flowtable
2825         -> HTML table for flowtable column
2826         -> Example of how related lists would look
2827         -> Not using text entries for data items
2828
2829         The current version of Online Glom doesn't use HTML tables for the
2830         flowtable columns.
2831
2832         This mockup has been sent to the glom-devel mailing list but it's good
2833         to have it here as well.
2834
2835         * mockups/details-view-html-tables.html:
2836
2837 2011-12-05  Ben Konrath  <ben@bagu.org>
2838
2839         Remove unnecessary getPrimaryKeyField() method.
2840
2841         getPrimaryKeyFieldForTable(String) has been renamed to
2842         getPrimaryKeyField(String).
2843
2844         * src/main/java/org/glom/web/server/database/DBAccess.java:
2845         * src/main/java/org/glom/web/server/database/DetailsDBAccess.java:
2846         * src/main/java/org/glom/web/server/database/RelatedListNavigation.java:
2847
2848 2011-12-05  Ben Konrath  <ben@bagu.org>
2849
2850         Add string representation of TypedDataItem value to conversion error message.
2851
2852         * src/main/java/org/glom/web/server/Utils.java: Logging the error
2853         message was extracted into its own method to avoid duplication.
2854
2855 2011-12-05  Ben Konrath  <ben@bagu.org>
2856
2857         Add type checking to navigation primary key value creation.
2858
2859         Create navigation primary key only if the expected type from the Glom
2860         document matches the type returned by the SQL query.
2861
2862         * src/main/java/org/glom/web/server/database/RelatedListNavigation.java:
2863
2864 2011-12-05  Ben Konrath  <ben@bagu.org>
2865
2866         Rename a couple of variables in RelatedListNavigation.
2867
2868         This is a rename-only refactor.
2869
2870         * src/main/java/org/glom/web/server/database/RelatedListNavigation.java:
2871
2872 2011-12-05  Ben Konrath  <ben@bagu.org>
2873
2874         Move getListLayoutGroup() into getListViewLayoutGroup().
2875
2876         This removes getListLayoutGroup(). It was only being called by
2877         getListViewLayoutGroup().
2878
2879         * src/main/java/org/glom/web/server/ConfiguredDocument.java:
2880
2881 2011-12-05  Ben Konrath  <ben@bagu.org>
2882
2883         Remove check for LayoutItem_Portal in list table method.
2884
2885         This check is no longer necessary because the method isn't being used
2886         to create the LayoutItemPortal DTO.
2887
2888         * src/main/java/org/glom/web/server/ConfiguredDocument.java:
2889
2890 2011-12-05  Ben Konrath  <ben@bagu.org>
2891
2892         Properly support related list navigation.
2893
2894         Navigation from the "Repository Analyzer -> Package Scans ->
2895         Dependencies" related table wasn't working because the primary key for
2896         related tables wasn't being set properly. This commit fixes the
2897         problem.
2898
2899         * src/main/java/org/glom/web/server/ConfiguredDocument.java: Don't use
2900         getListLayoutGroup() to create the LayoutItemPortal DTO. This method
2901         doesn't set the primary key properly for related list tables.
2902         * src/main/java/org/glom/web/server/database/DBAccess.java: Add table
2903         name parameter to getPrimaryKeyLayoutItemField(). This makes the method
2904         useful for getting the primary key for list view tables and for related
2905         list tables.
2906         * src/main/java/org/glom/web/server/database/ListDBAccess.java:
2907         * src/main/java/org/glom/web/server/database/ListViewDBAccess.java:
2908         Move code to set the primary key for the table from the abstract
2909         ListDBAccess class to ListViewDBAccess as it's only correct for list
2910         view tables.
2911         * src/main/java/org/glom/web/server/database/RelatedListDBAccess.java:
2912         Properly add primary key to related list tables.
2913
2914 2011-12-02  Ben Konrath  <ben@bagu.org>
2915
2916         Properly set the horizontal alignment of fields.
2917
2918         This fix is for both the list tables and the details view.
2919
2920         * src/main/java/org/glom/web/server/ConfiguredDocument.java: Use
2921         LayoutItem_WithFormatting.get_formatting_used_horizontal_alignment(boolean)
2922         to set the horizontal alignment of fields.
2923
2924 2011-12-02  Ben Konrath  <ben@bagu.org>
2925
2926         Display currency codes in the details view.
2927
2928         * src/main/java/org/glom/web/client/ui/details/DetailsCell.java:
2929
2930 2011-12-02  Ben Konrath  <ben@bagu.org>
2931
2932         Avoid duplicate JNI call.
2933
2934         JNI is not as efficient as pure Java and this is an easy (and small)
2935         optimization.
2936
2937         * src/main/java/org/glom/web/server/database/RelatedListDBAccess.java:
2938         Use previously retrieved value for whereClauseToTableName instead of
2939         getting it again.
2940
2941 2011-12-02  Ben Konrath  <ben@bagu.org>
2942
2943         Rename a couple of variables in RelatedListNavigation.
2944
2945         This is a rename-only refactor.
2946
2947         * src/main/java/org/glom/web/server/database/RelatedListNavigation.java:
2948
2949 2011-12-02  Ben Konrath  <ben@bagu.org>
2950
2951         Indicate clearly that a mismatched primary key type is a bug.
2952
2953         * src/main/java/org/glom/web/server/Utils.java: Change log level from
2954         warning to error. Add 'This is a bug.' to message.
2955
2956 2011-12-02  Ben Konrath  <ben@bagu.org>
2957
2958         Update / fix some comments.
2959
2960         * src/main/java/org/glom/web/client/OnlineGlomService.java: Remove old
2961         comments.
2962         * src/main/java/org/glom/web/client/ui/details/DetailsCell.java: Fix
2963         comment.
2964         * src/main/java/org/glom/web/server/database/RelatedListDBAccess.java:
2965         Fix comments. Add some TODOs.
2966
2967 2011-12-02  Ben Konrath  <ben@bagu.org>
2968
2969         Enable navigation to details view with string primary key from related list.
2970
2971         * src/main/java/org/glom/web/server/database/RelatedListNavigation.java:
2972         Create a text primary key value when return type of result is
2973         java.sql.Types.VARCHAR.
2974
2975 2011-12-02  Ben Konrath  <ben@bagu.org>
2976
2977         Use checkboxes for booleans in the details view.
2978
2979         * src/main/java/org/glom/web/client/ui/details/DetailsCell.java:
2980
2981 2011-12-01  Ben Konrath  <ben@bagu.org>
2982
2983         Improve performance of related list height calculation.
2984
2985         * src/main/java/org/glom/web/client/ui/details/RelatedListTable.java:
2986         Put code to calculate the expected height in a static initializer so
2987         that that it's only called once.
2988
2989 2011-12-01  Ben Konrath  <ben@bagu.org>
2990
2991         Show related list tables in notebooks (again).
2992
2993         Calculate the height of the related list tables so the Notebook can be
2994         set the correct height. The height of the related list table is also needed by
2995         FlowTable to be able decide how to create the layout.
2996
2997         * src/main/java/org/glom/web/client/ui/details/Portal.java: Calculate
2998         and set the Portal height based on the height of the related list
2999         table and the Portal container.
3000         * src/main/java/org/glom/web/client/ui/details/RelatedListTable.java:
3001         Add method to calculate the height of the related list tables.
3002         * src/main/java/org/glom/web/client/ui/list/ListTable.java:
3003         * src/main/webapp/style.css: Add css class for Pager. This is needed to
3004         calculate the height of the Pager widget.
3005
3006 2011-12-01  Ben Konrath  <ben@bagu.org>
3007
3008         Use CellTable API for table property instead of setting style on Element.
3009
3010         * src/main/java/org/glom/web/client/ui/details/RelatedListTable.java:
3011
3012 2011-12-01  Ben Konrath  <ben@bagu.org>
3013
3014         Make ListViewTable and RelatedListTable a consistent height.
3015
3016         The tables are now a consistent height regardless of the contents of
3017         the table. A hidden button is added to empty rows to ensure that the
3018         height of these rows will match the height of rows with data.
3019
3020         A navigation button column is now added to every table. The width of
3021         the navigation column is set to 0px when a RelatedListTable shouldn't
3022         have navigation buttons. This maintains the a consistent row height in
3023         tables that don't show the navigation buttons.
3024
3025         * src/main/java/org/glom/web/client/activity/DetailsActivity.java: Hide
3026         navigation column when not needed.
3027         * src/main/java/org/glom/web/client/ui/ListViewImpl.java: Move method
3028         arguments for navigation button to constructor of ListViewTable.
3029         * src/main/java/org/glom/web/client/ui/cell/OpenButtonCell.java: Render
3030         hidden button for empty data rows.
3031         * src/main/java/org/glom/web/client/ui/details/RelatedListTable.java: Add method
3032         arguments for navigation button to constructor.
3033         * src/main/java/org/glom/web/client/ui/list/ListTable.java: Always
3034         create navigation buttons. Add hideNavigationButtons() method.
3035         * src/main/java/org/glom/web/client/ui/list/ListViewTable.java: Add method
3036         arguments for navigation button to constructor.
3037
3038 2011-12-01  Ben Konrath  <ben@bagu.org>
3039
3040         Use 'visibility: hidden' in Utils.getWidgetHeight().
3041
3042         This is better choice because hidden elements are invisible, don't
3043         respond to events and are not part of the tab order. They will,
3044         however, 
3045