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