net.sf.morph.transform.converters
Class ArbitraryObjectMappingConverter

java.lang.Object
  extended by net.sf.morph.transform.transformers.BaseTransformer
      extended by net.sf.morph.transform.converters.ArbitraryObjectMappingConverter
All Implemented Interfaces:
net.sf.composite.Component, Converter, DecoratedConverter, DecoratedTransformer, ExplicitTransformer, Transformer

public class ArbitraryObjectMappingConverter
extends BaseTransformer
implements DecoratedConverter

A transformer which transforms defined arbitrary objects to other defined arbitrary objects based on this class' mapping property. For example, an arbitrary mapping might specify that the Integer 1 be converted to the String "one". As many mappings as are needed may be specified. By default, mappings are assumed to be bidirectional. Continuing with the example above, this means that in addition to the Integer 1 being mapped transformed to the String "one", the String "one" will be transformed to the Integer 1.

Since:
Apr 11, 2005
Author:
Matt Sgarlata

Field Summary
 
Fields inherited from class net.sf.morph.transform.transformers.BaseTransformer
destinationClasses, log, sourceClasses
 
Fields inherited from interface net.sf.morph.transform.Transformer
TRANSFORMATION_TYPE_CONVERT, TRANSFORMATION_TYPE_COPY
 
Fields inherited from interface net.sf.morph.transform.Transformer
TRANSFORMATION_TYPE_CONVERT, TRANSFORMATION_TYPE_COPY
 
Constructor Summary
ArbitraryObjectMappingConverter()
           
 
Method Summary
protected  void addContainedClasses(java.util.Set classes, java.util.Collection objects)
          Add the classes of the contents of objects to classes.
protected  java.lang.Object convertImpl(java.lang.Class destinationClass, java.lang.Object source, java.util.Locale locale)
          The implementation of the convert method, which may omit the invalid argument checks already performed by this base class.
protected  java.lang.Class[] getClasses(java.util.Collection forwardMappingKeys, java.util.Collection backwardMappingKeys)
          Get the forward classes, plus backward classes if this converter is bidi.
protected  java.lang.Class[] getDestinationClassesImpl()
          Transformer.getDestinationClasses() implementation template method.
 java.util.Map getMapping()
          Get the object mapping.
protected  java.lang.Class[] getSourceClassesImpl()
          Transformer.getSourceClasses() implementation template method.
 java.util.Map getVisitedSourceToDestinationMap()
          Deprecated.  
 boolean isBidirectional()
          Learn whether this ArbitraryObjectMappingConverter is bidirectional.
protected  boolean isWrappingRuntimeExceptions()
          Indicates whether runtime exceptions should be wrapped as TransformationExceptions.
 void setBidirectional(boolean bidirectional)
          Set whether this ArbitraryObjectMappingConverter is bidirectional.
 void setMapping(java.util.Map mapping)
          Set the mapping.
 void setVisitedSourceToDestinationMap(java.util.Map visitedSourceToDestinationMap)
          Deprecated.  
 
Methods inherited from class net.sf.morph.transform.transformers.BaseTransformer
clone, convert, convert, copy, copy, copyImpl, createDefaultReflector, createNewInstance, createNewInstanceImpl, createReusableSource, equals, equals, equalsUnidirectionalTest, getDestinationClasses, getInstantiatingReflector, getLocale, getLog, getNestedTransformer, getReflector, getReflector, getSourceClasses, getTransformableCallCache, getTransformerName, initialize, initializeImpl, isAutomaticallyHandlingNulls, isCachingIsTransformableCalls, isImpreciseTransformation, isImpreciseTransformationImpl, isInitialized, isPerformingLogging, isTransformable, isTransformableImpl, setCachingIsTransformableCalls, setDestinationClasses, setInitialized, setLog, setNestedTransformer, setReflector, setSourceClasses, setTransformableCallCache, setTransformerName, toString
 
Methods inherited from class java.lang.Object
equals, finalize, getClass, hashCode, notify, notifyAll, wait, wait, wait
 
Methods inherited from interface net.sf.morph.transform.DecoratedConverter
convert, equals, equals
 
Methods inherited from interface net.sf.morph.transform.Converter
convert
 
Methods inherited from interface net.sf.morph.transform.Transformer
getDestinationClasses, getSourceClasses
 
Methods inherited from interface net.sf.morph.transform.Transformer
getDestinationClasses, getSourceClasses
 
Methods inherited from interface net.sf.morph.transform.ExplicitTransformer
isTransformable
 

Constructor Detail

ArbitraryObjectMappingConverter

public ArbitraryObjectMappingConverter()
Method Detail

convertImpl

protected java.lang.Object convertImpl(java.lang.Class destinationClass,
                                       java.lang.Object source,
                                       java.util.Locale locale)
                                throws java.lang.Exception
The implementation of the convert method, which may omit the invalid argument checks already performed by this base class. By default, this method creates a new instance of the destinationClass and copies information from the source to the destination. This implementation should be fine as-is for Copiers, but Converters will need to implement this method since they will not be implementing the copy method.

Overrides:
convertImpl in class BaseTransformer
locale - the locale in which the conversion should take place. for converters that are not locale-aware, the local argument can simply be ignored
Throws:
java.lang.Exception

getClasses

protected java.lang.Class[] getClasses(java.util.Collection forwardMappingKeys,
                                       java.util.Collection backwardMappingKeys)
                                throws java.lang.Exception
Get the forward classes, plus backward classes if this converter is bidi.

Parameters:
forwardMappingKeys -
backwardMappingKeys -
Returns:
Class[]
Throws:
java.lang.Exception - not likely

addContainedClasses

protected void addContainedClasses(java.util.Set classes,
                                   java.util.Collection objects)
Add the classes of the contents of objects to classes.

Parameters:
classes -
objects -

getSourceClassesImpl

protected java.lang.Class[] getSourceClassesImpl()
                                          throws java.lang.Exception
Transformer.getSourceClasses() implementation template method.

Specified by:
getSourceClassesImpl in class BaseTransformer
Returns:
Class[]
Throws:
java.lang.Exception

getDestinationClassesImpl

protected java.lang.Class[] getDestinationClassesImpl()
                                               throws java.lang.Exception
Transformer.getDestinationClasses() implementation template method.

Specified by:
getDestinationClassesImpl in class BaseTransformer
Returns:
Class[]
Throws:
java.lang.Exception

isWrappingRuntimeExceptions

protected boolean isWrappingRuntimeExceptions()
Indicates whether runtime exceptions should be wrapped as TransformationExceptions. By default, this method returns true.

Simple transformers in Morph that operate on JDK types like Numbers and Strings will usually set this value to true so that they throw TransformationExceptions if problems occur. More complex transformers that operate on graphs of objects are encouraged to set this value to false so that runtime exceptions are not wrapped. This way, problems accessing data will be expressed by the native API of a user's domain objects and avoid the need to catch Morph-specific exceptions (assuming the use of runtime exceptions in said domain objects).

Overrides:
isWrappingRuntimeExceptions in class BaseTransformer
Returns:
true

isBidirectional

public boolean isBidirectional()
Learn whether this ArbitraryObjectMappingConverter is bidirectional.

Returns:
boolean

setBidirectional

public void setBidirectional(boolean bidirectional)
Set whether this ArbitraryObjectMappingConverter is bidirectional.

Parameters:
bidirectional -

getMapping

public java.util.Map getMapping()
Get the object mapping.

Returns:
Map

setMapping

public void setMapping(java.util.Map mapping)
Set the mapping.

Parameters:
mapping - the mapping
Throws:
java.lang.IllegalArgumentException - if bidirectional is true and there is some value which is mapped to more than one key. In this case, it is impossible to construct a bidirectional map because there is no way to determine to which key the value is mapped.

getVisitedSourceToDestinationMap

public java.util.Map getVisitedSourceToDestinationMap()
Deprecated. 

Returns:
Map

setVisitedSourceToDestinationMap

public void setVisitedSourceToDestinationMap(java.util.Map visitedSourceToDestinationMap)
Deprecated. 

Parameters:
visitedSourceToDestinationMap -


Copyright © 2004-2008.