* Version 1.2.0, January 28, 2004 Created a new GUI package to show all views in a single application window Moved the old GUI to the package org.nakedobjects.viewer.classic Made isSameAs final in Magnitude as it should not be overriden Modified the object stores to deal gracefully with the deletion/destruction of an instance when it leaves hanging references. The objects with hanging references can now be reinstated with an empty object occupying the place where the delete object was. Fixed bug 050 Fixed bug 044 Fixed bug 051 support added for mapping collection to SQL relationships / indirection tables added support for collection mapping on sql relationships Added cache policy support to AbstractNakedObjectStore Fix to bug 0000018 where missing image caused windows to not appear. The SQL objects store had problems with Databases that changed the case of the SQL statements. All tables and columns are now quoted to avoid any such issues. Fixed SqlObjectStore tests to run using HSQLDB Replaced HypersonicSql with HSQLDB - Extracted the connection from data access classes and made it a strategy of the sql object store - Moved the dynamic loading of components into a separate utility class Fixed bug where derived fields were being stored (no 23). Fixed bug where derived fields were being stored (no 23). Fix to bug 30. Stop a runtime exception halting program when one of an order method is not static. Removed the action methods from NakedClass. These should/are done within the viewing mechanism. Replaced corrupt image files that would not load in Java. Fixed faultly Title append method that ignored the appendage when the existing was empty. Fixed problem in Date where the empty state (isEmpty) was not changing when the date was given a value. Added a truncate method to Title. Added spyglass to image list. This resolves bug 000013. * Version 1.1.2, February 20, 2003 2003-02-19 21:12 rmatthews The unit tests, and other testing code, has been split out and placed in a separate, but parallel, source tree. This will help keep the code tidy. 2003-02-18 18:52 rmatthews Tidied up the key handlinh mechanism to make the entering of text smoother. 2003-02-18 17:50 rmatthews Set up the status bar to convey feedback. The popup menu is now using this to reflect the status of the options. 2003-02-18 16:22 rmatthews Object within a form/list now appear in the right place when dragging/opening a form. 2003-02-18 16:12 rmatthews Greyed-out menus can no longer be invoked. Drops onto red targets are no longer allowed. 2003-02-18 15:08 rmatthews Forms and Instance Lists now have backgrounds, and are no longer transparent. Clicking on the views now raises them, and clicking on them with the middle button lowers them. The popup menu no longer flickers. Thanks to Ged Byrne for doing the groundwork for those. 2003-02-17 19:45 rmatthews Modified NakedObjectStore so that it does not explicitly refer to caching. This is now more integrated and the cache methods have been replace by dispose(NakedObject object), isInWorkingMemory(Object oid), and recreateObject(ExternalOid oid). 2003-02-17 16:57 rmatthews Moved NakedClassTest to be with NakedClass 2003-02-17 16:53 rmatthews Moved NakedClassTest to be with NakedClass 2003-02-17 16:52 rmatthews Tied the viewers to object store so that when the viewer is closed down the object store will also be shut down. 2003-02-17 16:49 rmatthews Tied the viewers to object store so that when the viewer is closed down the object store will also be shut down. * Version 1.1, February 12, 2003 New development stream. Added a new user interface. 2003-02-12 13:34 rmatthews Move the exploration examples (for the new GUI) to suitable locations. 2003-02-12 13:33 rmatthews Added new properties file to install the new GUI. 2003-02-11 18:54 rmatthews Incorporated the new GUI into the development release 2003-02-11 18:53 rmatthews Improved the loadComponent method in Application. Made use of it in Exploration and Client to dynamically load the user interface. 2003-02-10 13:49 rmatthews Added spyglass to image list. This resolves bug 000013. 2003-02-10 13:48 rmatthews Reverted the defaulting to null for TextString and WholeNumber. This is work that is being done in development branch. * Version 1.0.2, February 5, 2003 Added unix script (runHsqlDatabaseManager.sh)to run Hsql database manager Modified the SQL object store so that it can respond to requests that use finder objects. Improved the object matching algorithms (in TransientObjectStore.java, and FileObjectStore.java) to compare reference as well as values. Modified value objects (Label.java, TextString.java, WholeNumber.java) to handle empty/null conditions correctly Added update notification for when a finder object is changed. Added more example data to the application. This does not work yet due to a bug in the framework. Changed title method (in CreditCard.java) to deal with empty text strings. Corrected problems persisting objects Fields now checks its parent to see if it is a finder object, and if so makes that value alway editable. Checking for a feedback area that is too small and truncates the text - prevents exceptions being thrown. Started doclet that generates an HTML public Class/Method listing. Updated TextString.java so its empty state is indicated by a null string Fixed problem in TimeStamp with zero time value that affected longValue() and setValue(). Fixed inconsistency when handling abouts for Associations and OneToManyAssociations. See bug 000008. Added matching capability to instances methods (allowing finders to be used). Implmented finder capabilities in the TransientObjectStore. Modified views to initiate a find properly Each value object now must make available a String version of the data value, and be able to restore itself from such a data value. This ensures that any object store will be able to persist any new value objects added to the system. It does not have to use this mechanism to persist the value, and can still store them directly in any way it deems neccessary. Changed the serial number column (in SqlSerialNumbers)to VARCHAR(255) instead of VARCHAR. See bug 0000001. Reolved problem in recreateObject which caused a failure to recreate objects that contain internal collections. See bug 0000010 Corrected error where the object store was not passed to the viewer when running a client Corrected problem where the logo doesn't show when there is no logo file is found Introduced the notion of a foreground colour, which is the basic drawing colour. Modified the build process so that when the framework is released it will now tag the repository with the version. * Version 1.0.1, December 14, 2002 The two methods get1ParamClassAction and get1ParamAction, were mixed up (they were effectively swapped around), as was any calls to them. These have all been swapped back. Removed the use the experimental security features as they are too basic. Created a bin directory where tests and additional programs can be run from Corrected the labels for colour specifications XML Persistence example configuration Revised testing classes so the same set of tests are run via GlobalTests as via the build system. * Version 1.0, December 4, 2002 Merged the examples into the framework. Updated the build process to simply it, and to create a demo zip. Reorganised project to accommodate the SQL Object store and better organise the testing. Updated build to incorporate SQL Object Store. Removed out of date example that used Customer, Quote, Order, Product, Invoice etc. Refactored object store tests so that the concrete classes only load up the object store to test against. Add a empty test to object store tests as a way of timing the setup of a test. Cleared all instances before setup when testing instance collections. Updated and reoganised the testing classes to improve the testing of all object stores. Revised the test task to run all tests and compile html report. Resolved issues surrounding collections and persistence in AbstractNakedCollection.java. Updated and reoganised the testing classes to improve the testing of all object stores. Updated and reoganised the testing classes to improve the testing of all object stores. Added ability to create Veto and Allow objects conditionally, and to provide a reason for the unexpected state. Revised the building of object lists so when showing instances an element could be destroyed (deleted from the object store) but they cannot be removed. Any other object list remains the same. Repositioned splash window so it is central Revised the way makePersistent works so that it works with the revised setOid in AbstractnakedObject Added the ability to login, which setups a user object which can then be used to control access Sorted out missing class in build for AcceptanceTest. Removed all packages that are in an exploration state. These will be reintroduced when fully developed. Revised unserialising object so it checks that oid for internal collections match those already part of the object. Revised toString so that the title method is not called to create this string as this can cause infinite loops when restoring objects/retrieving objects over network. Pushed the creation of new logical instances to object store so that they are excuted on the server rather than the client, and perform the complete process. Made the setOid method of AbstractNakedObject set the oids for all of the obnjects internal collections as well so that collection forward requests to the server whenever they are used. Ordered the creation of new objects (in AbstractNakedObject.java and NakedClass.java), but this still fails when done remotely as NakedClass does not create the object on the server where it needs to. Fixed number of reporting and checking errors Corrected test to compensate for removal of proxy package. Collections need to know when they have been externally updated. Improved message given when no configuration file found. Clients weren't being updated about changes to collections. Made the debug label colour slightly more visible (it wasn't showing on 16 bit colour screen). Tidied up the properties files, removed duplicates and unneeded entries, and turn of all debugging. Renamed the resulting source zip file Split the main naked objects jar so that all files to do with testing the framework are placed in a new jar called notesting.jar Fixed the create methods so that the created method is called as soon as the object is instantiated and before it is made persistent. Corrected assertCantRightClick so it checked that you can select an option, rather that you can select the option. Added a splash screen which is shown on strart up. Moved NakedClass (and it helper class and test class) to the object package. Revised the getting of a FontMetrics by holding an off-sceen component and using that to call getFontMetrics (in TextStyle). This removes a deprecated warning on that class when compiled with 1.2, 1.3 & 1.4 Merged ApplicationClass into NakedClass. Same jarring problem in the source jar. Removed the basedir atttribute so the source is only stored once. Corrected discrepancy in TransientObjectStore that could cause objects to be retreived in an an inconsistent order. The objects are now held in the order they were created. * Version 1.0pre3, November 13, 2002 Added a new enable method to ActionAbout that takes a reason as well as a boolean. If the flag causes a disabling then the reason is given in the Veto object. Realigned the positioning of the elements and 'hole' in multiple-association fields. There use to be a gap between the last element and the 'hole' and when the field was empty the 'hole' failed to line up with its label. The viewers now pass update messages up to their parent viewers. This resolves the problem where changes within contained objects were not being reflected in the parent view (specifically with derived fields) whereas the change was being shown in an updated title. The text colours now default (if it is not selected, being dragged etc) to the default colour. Before it was defaulting to the 'normal text' colour and hence changing the colour of the label didn't work. Removed the resolved indicator (an asterisk) that appeared on the title. This was used for testing and is not needed. The paste method was not inserting the clipboard contents properly. It now inserts the contents of clipboard at the cursor. In the object server the logging (both to console and to the log) has been rationalised so it isn't so verbose. On start up, if the socket in UDPUpdateListener could not be created or the group could not be joined then an error would be added to the log. This now also throws an exception therefore halting the startup process so the application no longer runs if there is no mechanism for communication. Everytime the connection, in UDPUpdateListener, timed out (every 60 seconds) a debug message was created. This has been removed. Restructured the object creation hook in Exploration so that all newly created objects are now persisted after initObjects is called. Now the programmer does not need to persist the objects, it is done automatically. Correctly determining the width of the windows so the title is not being truncated. Made instance collection veto adding of objects so errors aren't shown as you drag an object over such a collection. Improved the error messages given when ordering of fields, methods etc are invalid. * Version 0.7.20 and Version 1.0pre1, November 6, 2002 Added a new object store that persists objects as XML files. Added documentation about upgrading and using the XML Object Store Added new comparative methods and other functionality to Date Reworded error messages produced during reflection to better explain the problems Replaced create method in ActionAbout & Permission with more descriptive allow getParent() in Aggregate was causing recursion problem with InternalCollection. This has been changed to forParent() as the method is not for a 'user' field. Changed licence to LGPL Renamed examples as samples (these are small samples of code rather than complete application examples). Reorganised documentation * Version 0.7.19, October 3, 2002 Reorganized the persistent classes that are being worked on so that the framework will compile & build Fixed numberOfInstances method in NakedObjectStore so it takes a pattern. Implmented that method in the implementation classes and created a new request object. Fixed drop zones (empty fields and collections) so that they can accept a NakedClass and will then create a new object of that type. Revised collections and the object stores to make collections work. Add series of unit tests. Added an excpection so that null messages in distributed requests are flagged Fixed incorrect message when set method found matching a get method for a ValueObject even though the param type was not a ValueObject Resolved problems with Time Added new testing objects; moving away from the complicated/badly named classes Deprecated checkAssociation method in (mock) View * Version 0.7.18, September 12, 2002 Started to add a series of small examples to be included in the distribution Reorganised images to allow examples to be held with the framework Corrections to time classes & tests Tidied up NakedClass and associated classes Fixed class action methods - wasn't allowing drops onto class icons. Added Test (GlobalTest) that runs all tests - calls the AllTest classes in each packages. Reinstated double-buffering on DisplayFrame and ClassesFrame Corrected problems with Time and started testing; longValue still not returning correct numerical value Fixed unit tests so logging is set up in setUp rather than main. Added AllTests.java to those packages that have more than one test. Added reading of colors from the properties files. See ViewColor.java for details of names. Modified the socketed server so it can accept an on a multi-homed host. This requires the host address to be specified when creating a ServerSocket. Creating a ServerSocket with no address only requires a port to be specified Added isSameAs(Naked) method to the Naked interface and implemented it within all necessary classes. This compares the contents of two objects of the same type. This complements the Object.equals method, which determines if two object are interchangable, i.e., one can be used is place of the other. In Naked Objects this is the case and is why each object has it own OID. Added property 'udp-updates.ttl' to control the time to live for UDP packets - defaults to 4. Added 'basic-gui.offer-debug' property to control whether an object's gets the option of displaying the debug window (when using shift-right click) Changed 'basic-gui.debug' property to 'basic-gui.show-oid' to control whether an object's oid is shown in views Added all lifecycle methods to NakedObject interface Cursor is now removed if field is not editable Change title to show type using the class name (rather than package) Replaced notifier so views are updated FeedbackFrame.java: Sorting out font issues * Version 0.7.17, August 19, 2002 Added utility.NotImplementedException class. A runtime exception to show that a method/constructor has not be implemented yet. This will save wasted time when pursuing problems as it indicates that something is still to be done rather than it needs fixing. Removed the object.NakedCollection class. This should be replaced by collection.ArbitraryCollection in any applications. Renamed the interface object.Collection to object.NakedCollection Renamed the abstract class collection.AbstractCollection to object.AbstractNakedCollection Added a reset method to object.NakedValue interface and to all implementors. This should be implemented so that it returns the value object to it default state. Ensured that all value objects have a full set of setValue methods, specifically they can be set using a corresponding Java value and from another object of the same type. * Version 0.7.16, August 30, 2002 In basicgui.view.EditField the cursor is now removed if field is not editable In collection.INstanceCollection have changed title to show type using the class name (rather than package) Replaced null notifier with basicgui.application.ViewNotifier so views are updated Updated documents to reflect the state of the framework and how it is to be distributed * Version 0.7.15, August 19, 2002 Value fields that allow keyboard input can now be resized by the use of the Ctrl-PgUp and Ctrl-PgDn key sequences. The value object classes - TextString, WholeNumber etc - have been put in a new pacakage org.nakedobjects.object.value. Currency has been replaced by Money. Date will now be for dates only. A new Time class has been added for time and TimeStamp for date/time. SelectionObject has been replaced by Option. All value classes can now be empty i.e. appear without any text in the field. Value objects now use the Java default Locale to format their display/input values All value classes can be validated via a Validity object. (The UI does not do much with this at present.) All value classes have additional functionality. NakedObject has been absorbed by AbstractNakedObject. AbstractNakedObject is now the class to create business objects from. NakedInterface has be renamed NakedObject (see previous point). Developer actions have been replaced by exploration actions (methods prefixed by explorationAction) and appear on the the object menu when the shift key is held whilst right-clicking. Uncommon, or dangerous methods, should be added as exploration actions, they are intended for adding options that allow an experienced user to try out things that might be disruptive. Collections have been completely revised. They are now paged so only small number of elements will be displayed at a time. A new package org.nakedobjects.object.collection has been created to accommodate collections including InternalCollection A new package org.nakedobjects.object.control has been created to accommodate the About objects. The XXXController classes have be renamed to XXXAbout. A new About class has been added (ProgrammableAbout) that can check multi conditions and will accumulate the reasons that the about vetos something. Removed (temporarily) XMLObjectStore & related classes. TransientObjectStore is the only persistor at present. Exploration is now the application class to use for testing. It automatically loads up the TransientObjectStore. The package org.nakedobjects.object.reflect has been tidied including class name changes and the addtion of a helper class for reflection. NakedClass and ApplicationClass are now directly related. They will become one shortly. The reflection mechanism now looks for fieldOrder rather than attribute order. A Spatial interface has been defined for objects that take a position/location. A Spatial collection is also available to hold spatial objects. The user interface has to be manually adapted at present accomodate this.