org.javagen.agile.core.visitor
Class TypeLookupVisitor

java.lang.Object
  extended by org.javagen.agile.core.visitor.DefaultVisitor
      extended by org.javagen.agile.core.visitor.TypeLookupVisitor
All Implemented Interfaces:
Generator, Visit, Visitor
Direct Known Subclasses:
IdAssignerVisitor

public class TypeLookupVisitor
extends DefaultVisitor

Defines a generic, extensible visitor pattern based on registering a Visit instance for each Model type.

The biggest problem with the traditional visitor pattern is that it binds you to a fixed set of node types witch is not good in an open-ended framework like JavaGen-Agile. This visitor pattern avoids that by allowing any number of Visit methods to be registered by Model type.

Arbitrary model hierarchies can be combined as this example illustrates:

 Visitor visitor = new TypeLookupVisitor( new OOLookupVisitor(), new DBLookupVisitor() );
 visitor.visit( combinedModelTree );
 

Author:
Richard Easterling

Field Summary
protected  Visit defualtVisit
           
protected  Map<Class,Visit> visitInstances
           
 
Fields inherited from class org.javagen.agile.core.visitor.DefaultVisitor
itinerary
 
Constructor Summary
TypeLookupVisitor()
           
TypeLookupVisitor(TypeLookupVisitor[] lookupVisitorDelegates)
           
 
Method Summary
 void addVisitInstances(Map<Class,Visit> visitInstances)
           
 Visit get(Class clazz)
           
 Visit getDefualtVisit()
           
 Map<Class,Visit> getVisitInstances()
           
 void put(Class clazz, Visit visit)
           
 void setDefualtVisit(Visit defualtVisit)
           
 void setVisitInstances(Map<Class,Visit> visitInstances)
           
 void visit(Model model)
          Lookup Visit instance for this model type and invoke visit method.
 
Methods inherited from class org.javagen.agile.core.visitor.DefaultVisitor
gen, getItinerary, itinerary, setItinerary
 
Methods inherited from class java.lang.Object
clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
 

Field Detail

visitInstances

protected Map<Class,Visit> visitInstances

defualtVisit

protected Visit defualtVisit
Constructor Detail

TypeLookupVisitor

public TypeLookupVisitor()

TypeLookupVisitor

public TypeLookupVisitor(TypeLookupVisitor[] lookupVisitorDelegates)
Method Detail

visit

public void visit(Model model)
Lookup Visit instance for this model type and invoke visit method. If no Visit instance is registered for a given type, the defaultVisit method will be invoked if one has been specified.

Note: this method is only called if there is either no itinerary or the itinerary includes this modelType.

Specified by:
visit in interface Visit
Specified by:
visit in interface Visitor
Overrides:
visit in class DefaultVisitor
Parameters:
model - instance to visit.

addVisitInstances

public void addVisitInstances(Map<Class,Visit> visitInstances)

put

public void put(Class clazz,
                Visit visit)

get

public Visit get(Class clazz)

getVisitInstances

public Map<Class,Visit> getVisitInstances()

setVisitInstances

public void setVisitInstances(Map<Class,Visit> visitInstances)

getDefualtVisit

public Visit getDefualtVisit()

setDefualtVisit

public void setDefualtVisit(Visit defualtVisit)


Copyright 2006-2006-2007 Outsource Cafe Inc.. All Rights Reserved.