Production Releases

Morph 1.1.1 (July 3, 2008)

  • Fixed bad POM

Morph 1.1 (June 13, 2008)

  • Added several new converters/copiers
  • Improved default SimpleDelegatingTransformer component members and ordering
  • Fixed transformation caching issue that was causing conversions done using the SimpleDelegatingTransformer to return results of previous transformations rather than performing the transformation again as it should have been.
  • Improved handling of nulls by all converters.
  • Property Editor support
  • Auto-detect Spring's presence and use the built in locale thread local
  • Renamed ChainedConverter to ChainedTransformer, fixed its implementation, and added Copier functionality
  • Added CharSequence support to TextConverter
  • Introduced the concept of imprecise transformers, over which other transformers are to be preferred
  • Improved the choice of copy/convert in TransformerUtils.transform()
  • ConverterDecorator/CopierDecorator can be set with a default Locale which they will use for Decorated* (implicit Locale) operations
  • Improved handling of nested exceptions
  • Added transformerName property to BaseTransformer for inexpensive improved logging
  • Added reflectorName property to BaseReflector for inexpensive improved logging
  • Added some classes to assist integration with other libraries in subpackages of net.sf.morph.integration
  • Reflectors attempt to avoid do-nothing property set operations
  • Other fixes and improvements

Morph 1.0.1 (March 31, 2006)

  • Fixed bug that was preventing properties of POJOs without getters from being recognized by Morph in some circumstances (bug 1460440)

Morph 1.0 (February 10, 2006)

  • Improved Internationalization support for number to text and text to number conversions
  • Fixed bug that was causing Morph.convertToDouble and Morph.convertToFloat to only return Integers
  • Performanced tuned the static Morph conversion methods so that they are nearly as fast as calling the corresponding conversion method manually. For example, 10,000 iterations of Morph.convertToString used to take 6 seconds on my PC compared to only 50 milliseconds for NumberFormat.format. Now Morph only takes around 200 milliseconds.
  • Removed the BaseConverter and BaseCopier classes because they didn't really do anything. Any existing classes that extend those base classes should extend BaseTransformer instead. Just be sure to implements DecoratedConverter to your converts and implements DecoratedConverter, DecoratedCopier to your copiers.
  • Minor updates to the reference documentation
  • Added the ObjectToClassConverter and corresponding test case

Beta Releases

Morph 0.9.2 (December 5, 2005)

  • Removed the GraphTransformer interface and renamed the graphTransformer property of BaseTransformer back to nestedTransformer
  • Removed the TraverserConverter and refined the ContainerCopier so that it can convert to Iterators and Enumerators
  • Added TypeChangingGraphTransformer to assist with transformations of object graphs from a set of domain objects to a set of transfer objects
  • Various bug fixes

Morph 0.9.1 (April 14, 2005)

  • More performance immprovements, especially to the reflectors for HTTP requests, HTTP sessions, and servlet contexts. The test suite now executes in around 1.75s.
  • Moved the Composite package to its own project
  • More improvements to the ContainerCopier and PropertyCopiers
  • Introduced the ArbitraryObjectMappingConverter

Morph 0.8.3 (March 6, 2005)

  • Performance improvements. It's difficult to quantify exactly how much better performance is, but the test suite now takes around 3 seconds to execute on my laptop, whereas it used to take around 8 seconds.
  • Improved support for nested transformations using the PropertyName copiers, ContainerCopier.
  • Morph now supports transformations of cyclic graphs.
  • net/sf/morph/morphContext.xml is a Spring application context file available as a classpath resource. This file defines common beans that you may need to reference in an application built on Spring.
  • Improved log output.

Morph 0.8.2 (February 12, 2005)

  • Improvements to ObjectReflector that bring it more in line with the JavaBeans specification. Thanks to Alexander Volanis!
  • Major improvements to the PropertyNameMatchingCopier and PropertyNameMappingCopier. The capabilities of the SelectivePropertyNameMatchingCopier have been folded into the PropertyNameMatchingCopier. Again, thanks to Alexander Volanis!
  • Began a reference document
  • Renamed "pseudo properties" for Sizable and Bean objects to "implicit properties".
  • Updated the wrapper package so that it throws WrapperExceptions rather than ReflectionExceptions
  • Changed the behavior of the BeanReflector.getPropertyNames method so that it no longer returns the implicit properties for the object, unless those properties have been explicitly defined in the object.

Morph 0.8.1 (Jan 30, 2005)

  • Test coverage at 61.1%
  • New wrapper package

Alpha Releases

Morph 0.7.2 (Jan 10, 2005)

  • Defined many more transformers and refactored the existing ones
  • Introduced a new composite package that provides a standard way for implementing the Composite design pattern (let me know if you think I should split this off into a separate project)
  • Refactored the composite reflectors and transformers to use the new composite package
  • Apache Jakarta Velocity integration
  • Experimental Apache Jakarta Commons Chain integration

Morph 0.6.4 (Dec 23, 2004)

  • Improved test coverage and bug fixes

Morph 0.6.3 (Dec 21, 2004)

  • Improved test coverage and bug fixes

Morph 0.6.2 (Dec 20, 2004)

  • Combined the many different DelegatingReflectors into a single DelegatingReflector that implements every Reflector interface
  • Detect if Servlet API is present, and if so include the web reflectors in the DelegatingReflector
  • Detect if BeanUtils is present, and if so include the DynaBeanReflector in DelegatingReflector
  • Refactored container copiers (combined the old BaseContainerReflector, GrowableContainerReflector and MutableIndexedContainerReflector into just one class, ContainerReflectorCopier)
  • Make all bean reflectors expose the 'class' read-only pseudo-property so random bean-like objects
  • Made sizable reflectors expose a size pseudo-property, like JEXL.
  • Introduced the MorphFilter which places a HttpServletContext in each request. This exposes Morph's power to JSPs

Morph 0.5.2 (Dec 11, 2004)

  • Test cases now pass

Morph 0.5.1 (Dec 7, 2004)

  • Renamed LanguageEvaluator to DecoratedLanguage and similarly extended the explicit naming of the Decorator pattern to other parts of the Morph framework. and other new interfaces are DecoratedTransformer, DecoratedConverter and DecoratedCopier. The DecoratedContext is particularly nice, and I'll definitely want to use it to show a mapping of HTTP request parameters to an object model.
  • Cleaned up and improved documentation for the reflect package. The package is probably pretty close to done at this point.
  • Not all tests are passing in this release. This release was focused on API and documentation. The next release will focus on tests and test coverage (time to try out Clover!)

Morph 0.4.2 (Dec 2, 2004)

  • Settled on an API for Language and began work on its first out-of-the-box implementation, the SimpleLanguage.
  • Introduced LanguageEvaluator which is the combination of a Converter and a Language.
  • Introduced a static facade to the Morph framework (the Morph class). This facade is static so it will be easier for people who haven't started using a good dependency injection framework yet.

Morph 0.3.1 (Nov 27, 2004)

  • Introduced new Transformer abstraction, which is a common super-interface for Converters and Copiers
  • Removed isConvertible, isCopiable and isReflectable in favor of getDestinationClasses, getSourceClasses, and getReflectableClasses. This was done primarily to support the ChainConverter
  • Broke up the IndexedReflector interface into several smaller interfaces that each define pieces of functionality that a "container" of items might have

Morph 0.2.1 (Nov 23, 2004)

  • Filled out the context package