April 30 2009
Summary of Changes
ui
- revised ui to not allow display of duplicate view for same instance; instead just focus on existing view that's in ui
- list view's titlebar "active area" for right-clicking list commands is now wider (a layout fix)
- disabled substance application of a colorization factor
libs
- updated swingx lib to version 0.9.7
- updated h2 jar file (20090410)
- updated embedded groovy libs to v1.6
- updated hibernate to v3.3.1 and spring to v2.5.6
- updated jasperreports (v3.0 -> v3.5); updated iText (-> v2.1.5)
- removed jfreereport support/dependencies from jmatter
calendar
- fixed/revised algorithm in calendar for positioning overlapping events
persistence
- slightly improved hbmmaker hibernate map generation to specify good defaults for choiceeo type columns
authorization
- ensuring that time and duration of events in calendar can be changed only if timespan field is not restricted
development
- adding substance skin switching as menu in app frame
localization
- i was not localizing list commands
deployment
- revised template jnlp file to specify j2se v1.6+
bugs
- fixed possible npe in eocommand 'returnsaview' check (minor)
- fixed some edt violations
- various other bug fixes (see subversion log for complete details)
Again, thank you to the various subscribers on the mailing list who have provided feedback, reported bugs, and posted fixes
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
April 5 2009
Summary of Changes
deployment-related
- can now deploy app either as webstart app or as java applet (same target "jws-dist"
will produce both a web page (index.html) that can be used to launch app as a webstart app
and a web page (applet.html) for deploying app as an applet
- webstart app is now configured to work with jnlp downloadservlet (war file bundles the
necessary dependency)
- a new ant target is available for producing a pack200-enabled webstart distribution.
ui-related
- look and feel
- substance (v5.1) is now the standard look and feel
- edt bugfixes
- ensured that ui respects swing.defaultlaft setting (to override look and feel if desired)
- date picker and calendar minimonth view now use swingx jxmonthview
- made dateeditor popup placement aware of screen edges (so it doesn't gets clipped by screen bounds)
- css4swing
- css bug fix: selector of type {component}.{cssclassname} now works
- css implementation now supports gradients and rgba color specification
- tweaked login panel look
- various tweaks to default/template stylesheet
- css styles "logged out" jdesktoppane with background image (centered)
- added ability to set a different/custom delay time on msgpnl in enhdesktoppane
- wrote a new type of stringeditor that translates a list of comma separated values in a single string
into a multiple choice selector
- integrated a contribution from michadraelian on mailing list: the ability to disable double-click -> default action on a type
- trying to use mostly swingx containers so can be background-paintable: exploited by css implementation
- added ability to specify/customize main tab caption in formview (per type)
- added the notion of a type's default focus field
api
- color coding can be done now per instance. useful in calendar context
to, for example, distinguish various events by state
- added utility method: isinwebstartmode on application
- added support for per-instance metaproperty 'readOnly' on atomic types
- added a basic money atomic type along with ability to persist and display/edit, along with a simple example in sympster.Symposium
persistence-related
- fixed an issue with blob types and oracle
- revised imgeo persistence strategy to encode image as png (not ideal but better than before) instead of image serialization which is extremely inefficient (100:1 ratio in blob size)
- slight enhancement to hbmmaker: composite list table name specification is now explicit: uses full concatenated field name for better namespacing
fixes
- fixed issue with logic testing whether two timespans overlap
- fixed DateTime to support custom formatter and to allow for null/empty value
- various bug fixes
libraries updated:
- h2 jar (new version 20090403)
- miglayout (updated to v3.7)
- swingx (updated to v 0.96)
- removed skinlf.jar
- antlr runtime (used by css4swing) (updated to v3.1.1)
- stringtemplate (design time) (upped to v3.2)
- jexplose
other
- continued updates/fixes/refinement of json-based object marshalling
a big thank you to the various members of the jmatter mailing list who have
reported issues, contributed fixes, and enhancements to this release!
Oct 2 2008
Summary of Changes
- Addressed memory leaks. app memory consumption should no longer grow with prolonged activity.
started working on AppBuilder: a jmatter application for constructing / generating jmatter applications
Supporting list reordering in the ui for relationallists marked @IdxFld(ordered=true)
Added an annotation attribute on relational lists @IdxFld(ownsChildren=true) which treats the relation as cascade=delete-orphan and disabled list item association from ui widget
Updated h2 database jar file to latest version (v20080926)
Removed hsqldb jar from repository
Minor ui layout improvements
- Fixed a validation issue with a many-to-one association field
- Made datetimeeditor fire change notification on focuslost
- Integrated itemlistener on choiceradioeditor per michadraelian suggestion on mailing list
- Various other bug fixes
Sept 2 2008
Summary of Changes
Internal
No longer using jibx for marshalling xml. Any marshalling, such as the classbar template,
or codes lists, are now described using JSON. Side effect: class-list.xml is now class-list.json
The principal layout manager for the swing view mechanism is now MigLayout (replacing JGoodies Forms).
The side effect is that JMatter now works both with left-to-right and right-to-left
languages. As an example, the Sympster demo app has been localized for Hebrew. Try it out
(launch the app with user.language=he).
Localization & Internationalization
JMatter now works with non-latin character sets. Resource bundles can be input in utf-8
and translated to required iso-8859-1 via native2ascii tool (transparently through ant build
file).
Adding support for looking up localized field labels in a type hierarchy; e.g. locale-metadata_fr.properties
in jmatter/app can specify keys such as AbstractComplexEobject.createdOn
Automatically adding to uidefaults a resource bundle base name 'app/uidefaults'; see jmatter/resources/app/uidefaults_??.properties
which will automatically be added to localize strings such as minimize, restore, maximize, etc.. (re: mailing list discussion
thread w/kittipat)
Other
Added support for association qualification/constraints to to-many associations
DateEO retrofitted to support/allow null value
Improvement to base implementation of equals/hashcode
Synchronizing access to list items across AbstractListEO type hierarchy
Enhanced json-based marshalling; supporting the notion of a dereferencer for 'byref' marshalled objects
Database Access
- Integration with vjdbc to proxy database calls via http/tomcat (see file vjdbc/readme)
August 11 2008
Summary of Changes
- improved authorization: ensuring that restricted commands for a session are not exposed to the ui; specifically issues with association views exposing 'new' command now fixed (issues reported by crownus on mailing list)
- several localization-related improvements (thanks michalg for bringing these to my attention)
persistence-related
- @Persist is replaced with JPA's @Entity; added support for @Table(name) annotation as well; also added (non-jpa) initial support for natural (instead of surrogate) primary keys
- beginning integration of liquibase into jmatter to support migrations; added a number of ant targets pertaining to generating a changelog, diffing hibernate with db to produce a changelog, and executing a migration
ui-related
- added window button bar to user interface
- improved simple calendar view layout manager to draw overlapping events side by side instead of on top of one another
- added "maxlength" limit on textfield for fields with colsize spefications (per michalg request)
misc
libs
- updated hibernate libs from v3.2.5 to v3.2.6
- updated h2 database driver to version 20080714
- updated jasperreports jar file from v2.04 to v3.0
Jun 27 2008
For a full list of svn log comments for this release, issue the following command
against the jmatter svn repository:
svn log -r {2008-04-10}:{2008-06-27} > svnlog
Changes
Main Changes
metamodel/core
- improvement to algorithm for deriving concrete type maps; now recursing through superclasses (not just one level)
- Field.readOnly is now a bound property; atomicview now supports dynamically changing field.readonly property;
model objects
- renamed loggedevent property from 'type' to 'eventtype' so as not to potentially mask/clash with superclass property with same name
- added command 'viewingooglemaps' to usaddress
bug fixes:
- no longer restoring window bounds if was maximized
- fixed issue whereby sometimes initial width of the classbar view (after login) would be incorrect; appear to clip some of the text/icons
- fixed bug introduced when enhanced authorization with filters by not checking condition where a filter is not even defined
- fixed a java 5 bug with action.mnemonic having to be the integer value of the upper case version of the character in question (file->exit by mnemonic now works)
- fixed issue with disabled navigation keys on jmatter jlistviews in java5
- ensuring that read-only views are not a part of the focus traversal
- association views now abide by read-only setting/specification
- fixed issue with restoring object state after a refresh
- (deployment-related) fixed an issue with application loading in the context of a webstart-deployed appbrowser
- fixed issue with validation of uri if blank
- improved/corrected impl of hashcode() on base abstract complexeobject
minor, ui-related
- revising fancylabel background painting to use a vertical gradient; used in calendaring; looks nicer
- added a radioubuttongroup view for choiceeo's
- improvements to float (numeric) editor
- revising preferred/default appframe size to 1024x768
- revised slightly appframe design to use a cardpanel for loggedin and loggedout states
- Can now customize format for DateTime types, in addition to TimeEO and DateEO
performance/stability
- lazy loading disabled icons in nullcomplexeobject (contribution: mikeH)
- memory leak reduction work; mostly detaching commandadapter when view is detached
third-party libs
- updated h2 jar to v20080621
- updated smc (state machine compiler) to latest version (5.0.2)
- updated formsrt.jar (abeille runtime)
Apr 9 2008
Changes
general
adding support for filtering lists as part of authorization policy; based on hibernate's query filtering support; using convention of defining typeFilter() method returning a string defining the condition for filtering; can be parameterized by variable 'currentUser' representing the primary key of the currently logged in user (no filtering done for admin role)
added support for a service object in the app (see example in contactmgr sample application) to expose commands in a toolbar
adding command.enabled transient property support
added ability to override naturalname for a type just like one can now for pluralname
added a little flexibility into json marshalling implementation: can specify a list of immediate child association fields to include in serialization (default is to not traverse associations)
ui enhancements
- enhanced outlookfolderview's listviews to allow reordering of items in classbar
- added visual hint for dnd drop in classbar
added ability to lock/unlock dnd editability of classbar from the ui
improved focus traversal behavior of associationview2 w.r.t. switching modes to an editable association
since msgpnl autodismisses after a few seconds, added a "messages" list view that can be referenced if necessary (can be opened from desktop context menu)
improved layout of calendar view - now fills vertically properly; also update row height on view resize; also supporting dblclick->defaultaction on caleventview; finally tweaked event span visual resizing to snap to row, though still needs work
usability enhancement: added shift-click gesture for dragging windows (internalframes)
minor: specifying custom icon for logout action
streamlined the icon resolution logic; also revised implementation so that default type icon is instance plural icon if there's one, otherwise falling back to instance icon
bug fixes
ensuring that authorization-restricted commands are not exposed in visual command interface
fixed issue with initial positioning of login dialog
appframe now properly adds 'unload app' cmd in file menu only in the context of an appbrowser-loaded application
fixed a timespan bug in setting startdate and enddate individually
adjusting logout/quit sequence of events to ensure that things happen in proper order; are serialized properly. i.e. saveuserdesktop happens off edt, and that appsession.setuser(null) takes place only after logout steps have finished
fixed a bug whereby upon login, hibernate would unnecessarily issue update statements to database to synchronize metadata
enhancement: defining explicit typecommand so that static methods can optionally receive a reference to the type instance upon which the command was invoked
ensuring that editing of aggregates in the context of a parent form results in editing in place (no new window)
added basic implementation of method parseValue() for atomic type TimeSpan
improved pushstate/popstate implementation to extend to child aggregates. i.e. if a child aggregate has a custom set of states, and push into edit mode, when restore, the child aggregate state will properly restore to its former state instead of just to read state
improved implementation of setstartstate to properly recurse to children and use possibly child's designated start state
removed extraneous 'new' command on lists, added json import command on lists
trapping possible exception in attempting to display a map view (e.g. failing to resolve lat/lon for an address)
Mar 20 2008
Changes
apple: fixing a number of macosx-specific issues; added macappbundle target to produce appbundles.
calendaring: added ability to adjust event duration by dragging bottom border of caleventview
reporting: adding jasperreports libraries to jmatter. enhancing sympster with a jasperreports example: producing a basic sessions schedule for a given symposium
fixed some memory leaks. fixing memory leak in css4swing
revising distro build file to include appbrowser specifically (inadvertantly omitted AppBrowser in previous distribution)
adding animatingcardlayout project code to jmatter; making customreadview use flip animation (see sympster session custom view)
retrofitted association editor to support association constraint specified either as a query constraint or supplied as a list of valid options. further specifying sympster session as belonging to a specific symposium instance; applying a list-based association constraint on session location (must be among list of rooms session.symposium.venue.rooms)
major review of entire jmatter manual. new revision of manual with many edits, reorganization, and some new chapters.
Feb 21 2008
JMatter 2008-02-21 release notes
New Features:
support for autologin: configuring an application so that no authentication is required.
see documentation, ch12
alternative deployment model: first release of the jmatter application browser.
see documentation, ch17
ability to contribute instances to visual command interface index.
see documentation, ch19
refactoring: separated model metadata and locale metadata into two parts: framework-specific entries,
(which now live in resources/app) and application-specific entries.
revised demo-app build files to compile with target jvm -1.5 (thanks to Corey Puffalt for catching this)
updated default postgres jdbc driver to v8.3, updated mysql jdbc driver to v5.0.8,
updated groovy binary to version 1.5.4
revised image type database mapping for mysql. varbinary maps to tinyblob which is too small and
longvarbinary does not work, so falling back to blob type.
added two new chapters to the jmatter manual: on authentication and authorization, and on
deployment using the application browser
Feb 11 2008
JMatter 2008-02-11 release notes
This release is a patch release that fixes these issues discovered in last week's release:
- a rendering issue with the login panel
- issue with persisting BigDecimalEO's
- a bug in minimizing a maximized internal frame (reported by alexcrown (thx))
- a classloader issue that manifested itself with a webstart-deployed app
Feb 4 2008
JMatter 2008-02 release notes
This release contains many small improvements and bug fixes.
Below we list the main enhancements to JMatter in the Feb 2008 release
(since the previous release from Aug 2007), in chronological order.
JMatter Wizards Enhancements
JMatter Wizards is a subframework within JMatter that removes the need
to write the UI relating to a software wizard.
This release introduces a number of additional ways to create wizards
that further simplify matters. Examples are provided as part of
the ContactMgr demo application; see the class PersonContact.
JMatter now has a groovy builder for wizards. If you're familiar with
some of the groovy language's other builders (swingbuilder, graphicsbuilder),
then you probably already appreciate this feature.
Written and Contributed by: Andres Almiray
Introductory support for Geographical Maps
Initially inspired by Andres' blog on adding google maps to JMatter
apps, JMatter now provides basic integration with the swingx-ws project from
swinglabs.org.
This integration allows you to use geographical maps as a new means of
viewing objects. Objects are displayed as markers on the map in question.
The map is both zoomable and pannable, thanks to swingx-ws.
For an example, run the ContactMgr sample application, open a contact,
and right-click their physical address, and finally invoke the command:
"View On Map" which will display the address in question on a map.
A generic mechanism is provided for exposing types on a map. Part of this
mechanism includes implementing the interface "MappableEO" in which an
object formally exposes its lat/lon geographic position. The simplest
way to integrate this feature with your types is to extend the base class:
AbstractComplexMappableEObject
which will automatically lend the command "View on Map" both on instances
and on lists of the type in question.
css4swing now supports complex selectors. i.e. selectors that imply
matching a specific containment hierarchy. e.g.:
#aboutPnl JTextArea
will target all swing jtextareas (and their subclasses) that are
descendants of the component with the identifier "aboutPnl".
direct child relationship (>) is likewise supported.
JMatter now supports a new atomic type: BigDecimalEO, backed by a Java
BigDecimal, for arbitrary-precision decimal numbers.
Written and Contributed by: Christian Gruber
Added feature whereby type commands (static commands) can be given an
application-level keyboard shortcut (accelerator); see example in
ContactMgr where wizard can be invoked with the shortcut "control z"
Added basic support for constrained associations. An example usage
was added to the Sympster demo application. The model was extended
such that a City type was added, as well as a Symposium City field.
Also venue's now have a city field.
When selecting a venu for a Symposium, the association now lists only venue
options that match the symposium's city.
To illustrate how this works, here's the implementation from Sympster:
public Venue getVenue() { return venue; }
public void setVenue(Venue venue)
{
Venue oldVenue = this.venue;
this.venue = venue;
firePropertyChange("venue", oldVenue, this.venue);
}
public QuerySpecification venueOptions()
{
if (venue == null || city == null) return null;
Field cityField = venue.field("city");
FieldPath fp = new FieldPath(cityField.fullPath());
Inequality equals = new IdentityInequality(cityField).new Equals();
return new QuerySpecification(fp, equals, getCity());
}
so by exposing a method with the right name "${associationname}Options()"
the framework will use the returned query specification to construct
the proper query to show the valid association options.
Support for starting a JMatter project from an existing Database Schema
Support for generating the JMatter source code and accompanying
hibernate mapping files from an existing database schema.
See section 16.1 of the JMatter manual: Reverse Engineering an Existing Schema for complete details.
Written and Contributed by: Jim Slack
List Commands
JMatter now supports list commands. This feature is fully documented in the
JMatter manual. See chapter 11 on commands and types of commands.
List commands provides the means for improving the usability of a software
application by making it easy to expose an instance command on an
entire list of instances of a given type (or writing a custom command
implementation for lists of a specified type).
For example, if a type "Product" has a command "AugmentPriceByPercentage",
the command can now easily be exposed on all lists of type Product, removing
the tedium of having to perform multiple gestures on each of a number of
instances in the user interface. The command can be invoked once and applied
to all instances in the list (search results included).
Visual Command Interface
Over the past year, a new type of interface to a desktop has emerged.
On macosx, many users are now using a visual command interface by the name
of "QuickSilver." On linux a similar such feature is "Gnome Do."
JMatter now sports the same sort of visual command interface.
It is fully documented in the JMatter manual in Chapter 17
"The power user".
Command icons
JMatter now supports the ability to specify icons for commands through
a new Cmd annotation attribute.
Here's a simple ficticious example:
@Cmd(iconref="money")
public void AugmentPrice(CommandInfo cmdInfo) ...
In the above command we specify a reference to an icon name.
In your resources/images folder place a corresponding money32.png and money16.png
(or gif), and you're done. Now throughout your application buttons and
menu items containing the command to invoke will now be decorated with the
specified icon.
JMatter itself was updated to include many basic command icons out of the box
for commands such as "find", "browse", "edit", "delete", etc..
Preview implementation of the JMatter Application Browser
We're in the process of developing an alternative deployment mechanism
for JMatter applications. JMatter will soon be available as a standalone
downloadable application with a standard multiplatform installer.
The application will act as an application browser, allowing
end users to dynamically load remote applications in a manner analogous
to the way that a web browser downloads and runs remote web applications.
There are several major benefits to this new deployment mechanism:
- users will not have to install jmatter applications any longer, only the browser;
- developers will be able to update their applications' at any time, without
requiring clients to make any changes on their end;
- application downloads will be relatively tiny: in the order of 50KB-500KB.
The fundamental changes necessary to support this feature are already
in the february release, though this feature is not yet complete.
To try out this feature, follow these instructions:
- let's use sympster again as the example app
revise hibernate.properties' h2 database settings to specify
a database with a fully qualified path:
hibernate.connection.url=jdbc:h2:file:db/h2db
becomes:
hibernate.connection.url=jdbc:h2:file:///home/eitan/tmp/db/h2db
(for example)
revise sympster's build.xml "jar" target to exclude the jmatter base
code
i.e. this:
becomes this:
jar up sympster: ant clean jar
you should end up with jws-dist/Sympster.jar at about 76KB
also if the db doesn't exist yet, schema-export it
go to the jmatter directory:
Sympster$ cd ../../jmatter
and invoke: ant run
you'll be prompted for an app url. this was the url on my box:
file:///home/eitan/work/jmatter-complet/demo-apps/Sympster/jws-dist/Sympster.jar
and click on 'Load App'. the application is url-classloaded.
try this with an http-loaded jar file.
~~~~~~~~~~~~~~
For a complete list of changes in this Feb 2008 release, invoke this command
against subversion:
svn log --revision {2007-08-09}:HEAD
August 09 2007 Release
- class-list.xml default location moved from src/com/u2d/class-list.xml
to src/class-list.xml, for consistency with other xml config files
- updated default stylesheet styles.css (in project resources/ directory)
- this release is the first implementation of jmatter that contains
an implementation of authorization. by default, when a jmatter application
starts up, the initial roles "Default" and "Admin" will be created,
along with two users: admin/admin and johndoe/johndoe (a member of
the default role). you'll also notice a new command on types: manage
restrictions for type, whereby [as an administrator] you will be able
to manage permissioning on both fields and commands. for an example
on how to set permissioning programmatically, see
com.u2d.app.Role#initializePermissions()
- the login dialog was reimplemented as a JPanel (was a jinternalframe)
and looks a little nicer
- default icons for lists are now enhanced, customized as a composition
of an icon representing a list, and one representing the list item type
- the bundled css4swing jar has seen enhancements, with support for
border-radius and opacity properties (css3) on swingx components.
- also, not entirely related to jmatter, css4swing does a much better
job now at dynamically restyling a ui (this feature is not used in
jmatter) than before
- added a new @Fld annotation attribute: colname() to override the
field's corresponding database column name. this resolves an issue
specific to mysql and the fact that the word 'sensitive' is reserved.
- fixed some reported minor issues with the generated jnlp file for
deployment to java web start
- removed look and feel menu from application menubar. this didn't
work well. will likely replace in the future with a list of alternate
css-driven themes
- updated h2 database jar file
- updated swingx jar file
- added a new ant target "seed-database" which can be used after
a schema export to create base users and roles without launching
the application
- fixed a bug with "open in new tab/replace existing view" windowing
navigation options (obtained when holding down shift while invoking
a command) that manifested itself in java 6
- defined the new keyboard shortcut ctrl-/ for opening focused comopnents
context menu as an alternative to using the mouse
- commands can now return a JComponent, which jmatter will wrap in a
jinternalframe and display
- there's now a second, much simpler way to use calendaring within
your application without having to implement any interfaces. if
a type has a field of type TimeSpan and if it extends CalEvent,
the type command "Browse In Calendar" will automatically be exposed
on the type in question.
- added some integration with the abeille forms designer (see
abeille.dev.java.net) to allow for the customization of a form's
layout. this feature relies on conventions. see description
of this feature in more detail at:
http://groups.google.com/group/jmatter/browse_thread/thread/3b68c7235d35adde
- applications now sport that standard about dialog, invoked via the menubar
(help->about); likewise you can now easily link to your application's documentation
through a url (specified in applicationContext.xml) and invoked via help->contents
- class bar's functionality is now also exposed alternately through the menubar
- updated jgoodies forms jar to version 1.1.0
- added a new demo-app named "Self" that illustrates another way to plug in
custom swing views into jmatter
- fixed a bug where a read only association field could be dissociated
- there's now an alternative set of build files written in gant (groovy-ant)
though the default build file remains build.xml
- calendar cell resolution can now be controlled using the scrollwheel,
while holding down the ctrl key
June 13 2007 Release
I will be compiling the list of changes that have taken place
in the framework within the next few weeks, and will be updating
the manual to go with it.
This release includes css4swing which I find to be very nice, though there is
a noticeable performance hit on the ui. Optimization of css4swing or perhaps
turning off css inheritance can help this.
The subversion change log, then the mailing list, are good sources of
information on what has changed recently.
April 2007
Formally added field metadata property "hidden". Prior to this
release the only way to set a field hidden was by programmatically
calling field.setHidden(true). Now, can mark field hidden either
as an annotation on field getter:
@Fld(hidden=true)
or using the new field string array static member "hidden":
public static String[] hidden = {"secret", "secret2"};
CSS: The JMatter swing gui is now css-enabled. The JMatter UI
is now styled by the global stylesheet which you'll find in
resources/styles.css. See the new chapter (14) in the manual
for further details.
The jmatter manual is now available in print (> 200 pages)
from http://lulu.com. See http://jmatter.org/pages/documentation
for the link (or just search the lulu.com web site for 'jmatter').
Calendaring (Thanks to Mike Kienenberger)
Mike Kienenberger contributed an enhancement to calendaring
that allows you to customize the day view and week view bounds.
i.e. from time, to time can now be customized and are no longer
fixed to 7am-7pm), and start and end day of week can be changed
as well.
Eitan has made a major overhaul of the calendaring ui code.
The views are now much more robust and strictly reflect their
model objects. That is, making any changes to a CalEvent (time,
date, other information, deleting or adding a calevent, is
immediately reflected in any open calendar views.
Another major enhancement to the calendar views: they now
include a query panel for filtering calendar events through an
ad-hoc query. This feature has been available on list views
for a long while and is now available on calendar views.
e.g. If you're looking at a calendar of talks for javaone, you
can easily filter out from the view any talks not in a
specific track.
Localization (Thanks for Marco Meschieri)
Marco Meschieri has contributed code that completely localizes
all text used by jmatter applications. If you're updating an
existing JMatter application, make sure to update you
locale-metadata.properties file. You'll also find a new
locale-metadata_it.properties for support of Italian, again
thanks to Marco.
Revised window resizing logic to never shrink the view (i.e.
only resize if resulting window size is larger than existing
window size)
Fixed trac issue #122: enforce readOnly on association fields.
As always thanks to members of the community who've contributed
answers on the mailing list, feedback, and bug reports.
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
Feb 27 2007
Changes in Beta 3 (since Feb 20)
- Added ability to focus on first item in classbar with 'alt-/' keyboard shortcut
- Minor cosmetic improvements to new-project-ui target
- Replaced message panel at bottom (status bar) with messages now appear as
timed-dismissed translucent panels at the center of the desktop (styled with black
background color, rounded corners, and large font for the text; feedback solicited)
- Updated swingx jar
- Updated hibernate to v3.2.2
- Commented out base commands "Export to .."
- Retired doc/Cliche; updated doc/README
- Fixed a bug in positioning event at proper time in calendar (forgot to set minutes)
- Added ability to localize file menu name and file->exit command name through
locale-metadata bundle
- Fixed bug in ant task that manifests itself in v1.7 (Thanks to Joan Pujol for
finding this bug)
- Slight revisions to documentation: print improvements; merged two chapters.
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
Feb 20 2007
Changes in Beta 2 (since Feb 2)
Complete overhaul of the existing documentation, and addition of
new chapters to round out / complete the manual.
All documentation consolidated into JMatter manual.
Fixed bug # 119: supporting specification of Date format and Time format application-wide.
(requested on mailing list)
SaveAndClose() logs activity just like Save() action does.
(reported by Justin on mailing list)
Revised new Swing-based component (GridListView) to work with both
Java5 and Java6 (Issue with Java SE moving SwingUtilities2 to another
package). (reported by Curt Cox on mailing list)
Fixed an incorrect build dependency in in standalone build file (build-standalone.xml)
(reported by dmcpaul on mailing list)
new-project-ui target now uses the ant api directly instead of forking a process
Internally replacing usage of Velocity with StringTemplate
Adding keyboard focus and navigation abilities to classbar items
Renamed @Cmd parameter isSensitive to 'sensitive'
Switched to using an enumeration for appeventtypes; documented appevents in manual
Fixed a bug having to do with incorrect redrawing of aggregated object views on
initial save (reported by Justin on mailing list).
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
Feb 2 2007
Changes (since August 25 2006 release)
A. Features / Enhancements
Major enhancement to navigation: ability to open views either in new
windows, in a separate tab, or in place (replacing current view); ui
gesture/mechanism: hold down SHIFT while invoking a command, will
prompt you how to open new view.
Complete details at:
http://jmatter.org/articles/2006/12/12/gui-navigation-part-2-new-view-placement-options
Icon inference logic is improved to be inheritance-aware.
For example, if class Bus extends Vehicle and does not
provide a corresponding Bus32.png icon, JMatter will fall back
the Vehicle icon.
More complete documentation of icon inference is available
at: http://jmatter.org/articles/2006/11/16/icon-fun
When creating a new instance or editing an existing one,
Form views now auto-focus on first text component, so that
the end-user is not required to use the mouse or to tab
before data entry.
List Views, when in a separate tab are now default-expanded.
Added ability to do a "vacant drop" on items in the classbar; that
is, to remove items from the classbar by simply dragging them out
of the classbar and dropping them onto an empty area in the desktoppane
(can similarly add types or instances to the class bar with dnd by dropping
them in)
JMatter now defines by default two roles: an administrative role
and a new "Default" role. When creating new users, their role
defaults to that "Default" role.
JMatter tested with H2 database. Also, H2 is now default database
when creating new projects (instead of hsqldb). Jar included with
distribution.
Added a long overdue atomic type: ColorEO. ColorEO is already
being used in conjunction with calendaring. When dealing with
calendars that have multiple schedules, Schedulable model objects
now can define a ColorEO field representing the schedule's color
code, which is now used by the calendar views to distinguish
schedules.
Added annotation attribute "format" for fields of type DateEO and TimeEO
which overrides and controls both the display and parsing format used
by JMatter for the field in question. Format is specified using the
SimpleDateFormat notation. See example in MyTunes demo application,
where Song durations are now displayed in a custom format.
The JMatter class-bar is now per-user. That is, the class bar can be
customized / different for each user. For example, in a multi-user
application with users who have different roles.
Added ability to specify that a field should not be persisted
via a @Fld annotation attribute "persist=false". This is useful
when working with derived/calculated fields. See ticket #105
in the jmatter trac.
In a fashion similar to how url types can be clicked on and open
in the default web browser: added integration with default Mail
application. New model object EmailMessage and enhanced Person
object with an action to send them an email. Action opens
OS's default mail app's composition window and automatically
fills person's email address field.
Enhancement of Icon List View (this is one of the alternate views
for lists). Previous version didn't support item-level focus,
selectability, and keyboard navigation like JList-based views did.
Now it does.
JMatter has a new target "new-project-ui" which somewhat supercedes
"new-project." Can now create a new child project usinga GUI
front end. New option: projects can now be created either as
standalone (frozen) (i.e. including all the libraries it depends on),
or as dependent (one that references the jmatter project's
codebase and libraries).
The styles of captions for required fields and for validation-related
messages in the user interface is now specified via css (see the
file "resources/styles.css" in child projects). Currently supporting
a very few set of properties (font-related, color-related).
Implementation of a more complete solution for using css to style
swing will likely accompany a future release.
Alternative to jibx for unmarshalling data for prepopulating
lists: json. mytunes demo app was retrofitted to use
the json format for uploading genres
Localization. jmatter apps can now be localized!
a warm thanks goes out to Felix Torre
Ultraviolet tool (not source) is now integrated
into jmatter. don't have to set the jmatter
base directory.
B. Refactorings
JMatter now internally uses the spring framework. Spring's ioc
capabilities have helped streamline and simplify JMatter applications'
startup code. Some earlier reliance on Jibx to unmarshal configuration
information (such as app-config.xml) has now been replaced with
Spring and its applicationContext.xml files.
Restructured how JMatter applications start up and are launched
to accomodate web deployments / three-tier architectures.
Swing view mechanism has now been completely modularized. Used
to exist as part of the JMatter core project. Now a separate project,
built separately and included as a jar.
C. Conventions
- @CommandAt annotations have been renamed to @Cmd
Similarly, @ParamAt becomes @Arg, and @FieldAt becomes @Fld
Can now specify tooltip for Fld or Cmd via attribute "description."
Beside mnemonic, can now also override label.
app-config.xml replaced by spring persistClasses.xml
Added convenience where instead of having to manually edit
persistClasses.xml, now can simply tag persisted model types
with a @Persist annotation (jmatter will do the rest). JMatter
uses velocity to dynamically produce persistClasses.xml.
In the long term, JMatter will attempt to move to using JPA
annotations.
D. Libraries
Updated Hibernate jars from v3.1 to v3.2
Updated l2fprod commons library with 11.2006 version; also using
outlookbar-only jar which is smaller as i'm not using any of the
other components at this time
Removed flexdock jars which were not being used
Got rid or/removed JDNC libraries. Project is now defunct,
or carried over through/to SwingX.
Added SwingX libraries. Beginning to think about how to leverage
this work to improve the look/feel/behaviour of JMatter applications.
Minor: renamed lib/src directory to more apt lib/runtime
E. Miscellaneous
Meta types are now persisted as entities. As a prelude
to supporting applying authorization rules and persisting them
I have been updating ultraviolet/umlc and keeping it in sync
with JMatter changes.
Both the JMatter ant build file (build.xml) and generated
jmatter project build files have been significantly cleaned
up, streamlined, updated
The IntelliJ IDEA support for JMatter (in terms of templates
and live templates) is now included with the distribution
Source distribution now includes a prebuilt jmatter.jar (binary)
Improved the MyTunes demo. mp3's are now streamed.
Achieved by using the underlying jlayer library directly, and not
as a service provider interface for the java sound api.
Removed deleted and deletedOn fields; these fields are not used
for the moment.
JMatter includes two new modules: one for a web-based view
mechanism based on the WingS framework, which may be considered
an early alpha implementation. The other based on NextApp's Echo2
which mostly has yet to be written (currently implements a quick
and dirty AppFrame, LoginDialog, and ClassBar).
JMatter tries to be smart about which jdbc driver to include when
producing a distribution, so as to keep the distribution lean.
All demo apps have been updated/synched with framework changes
F. Bug Fixes
Actually tested JMatter with Oracle Express and fixed
a persistence issue which prevented JMatter from working
with oracle databases.
Fixes to bugs documented on the JMatter trac:
(this list is not a complete list of bugs resolved on
the JMatter trac; many others have been resolved/closed
but may not have required active code changes, or were
resolved as a side effect of an enhancement or another
fix. see the jmatter trac at http://trac.jmatter.org/
for complete reports).
r265 | eitan | 2006-12-13 18:29:53 -0600 (Wed, 13 Dec 2006) | 1 line
added validation to compositequery, as noted in trac issue # 66
r271 | eitan | 2006-12-14 15:47:47 -0600 (Thu, 14 Dec 2006) | 1 line
fixed trac bug #82: persisting choices in the context of a saved query
r274 | eitan | 2006-12-15 10:49:20 -0600 (Fri, 15 Dec 2006) | 1 line
added ability to specify that a field should not be persisted via a field annotation persist=false; related to ticket #105
r275 | eitan | 2006-12-18 11:59:07 -0600 (Mon, 18 Dec 2006) | 1 line
fixed trac bug #106: save and close in tabbed mode should close tab, not window
r300 | eitan | 2007-01-02 13:27:24 -0600 (Tue, 02 Jan 2007) | 1 line
fixed bug #111: bug in binding for text areas
r324 | eitan | 2007-01-09 10:03:36 -0600 (Tue, 09 Jan 2007) | 1 line
implemented issue #28 (see trac): desire for system to prompt on New which subtype to create, not only for abstract base types, but also for concrete base types
r333 | eitan | 2007-01-10 11:16:53 -0600 (Wed, 10 Jan 2007) | 1 line
fixed bug #62: exception when trying to bring up a calendar view for an object that has no schedulables
r336 | eitan | 2007-01-10 17:46:01 -0600 (Wed, 10 Jan 2007) | 1 line
fixed ticket #114; see comments in ticket; having to do with supporting command overriding in gui: not showing duplicate commands with the same name on a type; feature will likely need more work at a future time
r337 | eitan | 2007-01-10 18:05:08 -0600 (Wed, 10 Jan 2007) | 1 line
fixed issue #76: remove command Type.New(): produces an exception; gui is not for creating new types anyway
r343 | eitan | 2007-01-11 11:15:35 -0600 (Thu, 11 Jan 2007) | 1 line
fixed bug #64: incorrect calculation of event position on calendar for events whose times are on or beyond the bounds of displayed sheet (early morning, late evening)
r358 | eitan | 2007-01-16 21:23:20 -0600 (Tue, 16 Jan 2007) | 1 line
fixed bug #68: jcombobox model should reflect list changes immediately
r361 | eitan | 2007-01-23 10:03:51 -0600 (Tue, 23 Jan 2007) | 1 line
fixed two issues: [a] issue #55: lists allowing adding duplicates; [b] a bug in dissociating in a bidirectional many-many situation
r362 | eitan | 2007-01-23 10:50:21 -0600 (Tue, 23 Jan 2007) | 1 line
looked at issue #53: displaying list editing buttons (+/-) only in editable state; implemented it and worked with it a bit before deciding that enabling these buttons in read state is preferable (left implementation commented out in code (see EditableListView.java)
r367 | eitan | 2007-01-23 11:52:14 -0600 (Tue, 23 Jan 2007) | 1 line
a small, first step in the direction of providing a separate place for styling various parts of a jmatter/swing application; doing this in the context of issue #45: providing a way for customizing required field caption styling without 'digging into the codebase'
r369 | eitan | 2007-01-30 15:14:13 -0600 (Tue, 30 Jan 2007) | 1 line
adding first rough implementation of css interpreter for swing; default stylesheet is in resources/styles.css; currently used only to style required captions on forms, to address bug # 45; will be expanded to provide full styling support using css in jmatter (stay tuned)
r374 | eitan | 2007-02-01 14:48:07 -0600 (Thu, 01 Feb 2007) | 1 line
fixed bug #70: making associationviews aware of their associated item's lifecycle (i.e. when they get deleted) so can auto-sever association if in edit mode
r375 | eitan | 2007-02-01 15:16:46 -0600 (Thu, 01 Feb 2007) | 1 line
fixed bug#60: repeatedly clicking on save (when vetoed) can cause multiple concurrent calls to hibernate which of course is not good
r377 | eitan | 2007-02-01 18:02:33 -0600 (Thu, 01 Feb 2007) | 1 line
fixed bug#117: ensuring classbar folder and items order is correct and consistent
For a complete change log since the last (August 25 2006) release,
issue this command:
svn log -r176:HEAD http://svn.jmatter.org/jmatter-complet/trunk
Eitan Suez
Feb 2 2007
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
JMatter release v20060825
Summary of Bug Fixes, Enhancements
To find out further details about each item below, simply lookup the issue in trac at http://trac.jmatter.org/
Authentication
Issue #33: Fixed a problem with the redrawing of the login dialog that would sometimes occur when attempting to authenticate
Calendaring
Issue #1: Fix an issue where events shown on the calendar did not have appropriate minimum bounds. Widget's height was a strict function of the event's duration. So that a 5-minute event on a 30-minute resolution grid would draw ridiculously thin.
Documentation
- PDF documentation search now works
Issue #27: Posted Javadocs online (see http://jmatter.org/pages/documentation/
i18n and l12n
Issue #15: FloatEO's parse() method was not friendly to, say, numbers displayed with different localization. e.g. French 1.500,23
Issue #20: Fixed a character encoding issue in unmarshalling app-config.xml
MetaSystem
Issue #22: Added ability to customize field caption. Caption is usually derived from introspection of the bean property. Now can specify in annotation an overriding caption
Issue #23: Added ability to specify in annotation desired custom field length, both from display and persistence perspectives.
Persistence
Issue #2: JMatter now supports hsqldb and defaults to hsqldb
Issue #5: Persistence with MySQL works
Issue #11: Revised boolean types to bind to a bit type instead of char, which for some reason was a problem for oracle.
Issue #10: Added optimistic locking support. Base type (AbstractComplexEObject) now has a version property, passed on to hibernate for optimistic locking. When stale object exceptions are thrown, the ui properly catches the exception and posts a validation message.
Swing GUI
Issue #24: Fixed a bug which prohibited the specification of a list type in a separate tab view.
Tooling
Issue #26: Integrated Ryan Ramage's first umlc prototype for jmatter.
Miscellaneous
A discrepancy existed between the build file in the binary distribution and the one in the source
distribution. Specifically, in regards to the target "new-project" there was confusion whether
where the new project base directory resided. This distribution tries to rectify this. The default
directory where the project is placed is next to (as a sibling of) the jmatter/ directory.
The project is standalone (it contains all the jars it needs) and so can later be moved to any
other location on one's disk.