Update of /cvsroot/xdoclet/xdoclet2/plugins/xmlFacade/src/java/xdoclet/plugins/xmlFacade In directory sc8-pr-cvs1:/tmp/cvs-serv31320/plugins/xmlFacade/src/java/xdoclet/plugins/xmlFacade
Modified Files: CastorClassPredicate.java CastorMethodPredicate.java xmlFacade.vm XMLFacadePlugin.java Added Files: ClassModel.java CreateElementMethod.java InterfaceGenerator.java MethodModel.java SetAttributeMethod.java ZeusClassPredicate.java ZeusMethodPredicate.java Removed Files: XMLFacadeClassModel.java XMLFacadeDestination.java XMLFacadeGenerator.java Log Message: Simplified everything and improved the overall design Closer to a successful build that works with Maven from CVS HEAD --- NEW FILE: ClassModel.java --- package xdoclet.plugins.xmlFacade; import java.util.*; /** * This class is a data object for Velocity used during generation of XML * facade classes. Each instance represents one or more XML elements. For * example, the ejb-jar element is described in the DTDs for EJB 1.1 and EJB * 2.0. Further in the XSD for EJB 2.1. For each distinct XML element in * all DTDs/XSDs representing different versions of the same XML - there * will be one instance of this class. * * @author <a href="mailto:aslak.hellesoy at bekk.no">Aslak Hellesøy</a> * @version $Revision: 1.1 $ */ public class ClassModel { private final String _name; private Map _methods = new HashMap(); private final Collection _versions = new ArrayList(); protected ClassModel(String version, String name) { addVersion(version); _name = name; } public String getName() { return _name; } public void addVersion(String version) { _versions.add( version ); } public void addMethod(MethodModel methodModel) { // See if we already have a method with that signature. MethodModel alreadyMethodModel = (MethodModel) _methods.get(methodModel.getSignature()); if( alreadyMethodModel == null ) { // add it _methods.put( methodModel.getSignature(), methodModel ); } else { // add versions to the existing model. alreadyMethodModel.addVersionsFrom(methodModel); } } public Collection getMethods() { return _methods.values(); } public Collection getVersions() { return _versions; } } --- NEW FILE: CreateElementMethod.java --- package xdoclet.plugins.xmlFacade; /** * * @author <a href="mailto:aslak.hellesoy at bekk.no">Aslak Hellesøy</a> * @version $Revision: 1.1 $ */ public class CreateElementMethod extends MethodModel { private final String _type; public CreateElementMethod(String version, String type) { super( version ); _type = type; } public String getSignature() { return _type + " create" + _type + "()"; } } --- NEW FILE: InterfaceGenerator.java --- package xdoclet.plugins.xmlFacade; import java.util.Collection; import java.util.Map; import java.util.HashMap; import java.util.Iterator; import java.io.Writer; import java.io.IOException; import java.io.File; import java.io.FileWriter; import xdoclet.generators.VelocityGenerator; import xjavadoc.ClassIterator; import xjavadoc.XCollections; import xjavadoc.XClass; import xjavadoc.XMethod; /** * Generates facade interfaces for classes generated by Castor and Zeus. * * @author <a href="mailto:aslak.hellesoy at bekk.no">Aslak Hellesøy</a> * @version $Revision: 1.1 $ */ public class InterfaceGenerator extends VelocityGenerator { /** * {@inheritDoc} * */ public InterfaceGenerator( Collection acceptedClasses) { super(acceptedClasses, "xdoclet/plugins/xmlFacade/xmlFacade.vm"); } /** * Sets the facade package. * * @param facadePackage package where the facade classes will be generated. */ public void setFacadePackage( String facadePackage ) { getContectObjects().put("facadePackage", facadePackage); } protected final int getGenerationMode() { return MODE_CUSTOM; } /** * Returns a Collection of {@link ClassModel} * * @return */ public Collection getCustomObjects() { Map classModels = new HashMap(); Collection acceptedClasses = getAcceptedClasses(); for( ClassIterator i = XCollections.classIterator(acceptedClasses); i.hasNext();) { XClass clazz = i.next(); String classModelName = null; Collection methods = null; // See if it is a Castor class or a Zeus class. if( XMLFacadePlugin.CASTOR_CLASS_PREDICATE.evaluate(clazz)) { classModelName = CastorClassPredicate.getNameForCastorClass(clazz); methods = clazz.getMethods(XMLFacadePlugin.CASTOR_METHOD_PREDICATE, false); } else if ( XMLFacadePlugin.ZEUS_CLASS_PREDICATE.evaluate(clazz)) { classModelName = ZeusClassPredicate.getNameForZeusClass(clazz); methods = clazz.getMethods(XMLFacadePlugin.ZEUS_METHOD_PREDICATE, false); } ClassModel classModel = (ClassModel) classModels.get(classModelName); if( classModel == null ) { classModel = new ClassModel(clazz.getContainingPackage().getName(), classModelName); classModels.put(classModelName, classModel); } else { classModel.addVersion(clazz.getContainingPackage().getName()); } if( XMLFacadePlugin.CASTOR_CLASS_PREDICATE.evaluate(clazz)) { for(Iterator m = methods.iterator(); m.hasNext();) { XMethod method = (XMethod) m.next(); // String methodModelName = CastorMethodPredicate.getNameForCastorMethod(method); MethodModel methodModel = CastorMethodPredicate.createMethodModel(method); classModel.addMethod(methodModel); } } else if ( XMLFacadePlugin.ZEUS_CLASS_PREDICATE.evaluate(clazz)) { for(Iterator m = methods.iterator(); m.hasNext();) { XMethod method = (XMethod) m.next(); // String methodModelName = CastorMethodPredicate.getNameForCastorMethod(method); MethodModel methodModel = CastorMethodPredicate.createMethodModel(method); classModel.addMethod(methodModel); } } } return classModels.values(); } protected String getFileNameValue(Object o) { ClassModel model = (ClassModel) o; return model.getName(); } } --- NEW FILE: MethodModel.java --- package xdoclet.plugins.xmlFacade; import java.util.Collection; import java.util.ArrayList; /** * * @author <a href="mailto:aslak.hellesoy at bekk.no">Aslak Hellesøy</a> * @version $Revision: 1.1 $ */ public abstract class MethodModel { private final Collection _versions = new ArrayList(); protected MethodModel(String version) { _versions.add( version ); } public void addVersionsFrom( MethodModel m) { _versions.addAll(m.getVersions()); } /** * Gets all the versions of the DTD/XSD this method applies to * * @return a Collection of {@link String}. */ public Collection getVersions() { return _versions; } public abstract String getSignature(); } --- NEW FILE: SetAttributeMethod.java --- package xdoclet.plugins.xmlFacade; /** * * @author <a href="mailto:aslak.hellesoy at bekk.no">Aslak Hellesøy</a> * @version $Revision: 1.1 $ */ public class SetAttributeMethod extends MethodModel { private final String _name; public SetAttributeMethod(String version, String name) { super( version ); _name = name; } public String getSignature() { return "void " + _name + "(String s)"; } } --- NEW FILE: ZeusClassPredicate.java --- package xdoclet.plugins.xmlFacade; import org.apache.commons.collections.Predicate; import xjavadoc.XClass; import xjavadoc.XField; import xjavadoc.FieldIterator; import xjavadoc.XCollections; import java.util.Collection; /** * This predicate filters out Castor classes that contain the interface methods we're * interested in for generation of ClassModel objects. * * @author <a href="mailto:aslak.hellesoy at bekk.no">Aslak Hellesøy</a> * @version $Revision: 1.1 $ */ public class ZeusClassPredicate implements Predicate { public boolean evaluate(Object o) { XClass clazz = (XClass)o; boolean zeusInterface = clazz.isInterface() && containsField(clazz.getFields(),"ZEUS_XML_NAME"); return zeusInterface; } private static boolean containsField(Collection field, String fieldName) { for( FieldIterator i = XCollections.fieldIterator(field); i.hasNext();) { if( i.next().getName().equals(fieldName) ) { return true; } } return false; } public static String getNameForZeusClass(XClass clazz) { return clazz.getName(); } } --- NEW FILE: ZeusMethodPredicate.java --- // Decompiled by DJ v3.2.2.67 Copyright 2002 Atanas Neshkov Date: 19.11.2002 22:37:02 // Home Page : http://members.fortunecity.com/neshkov/dj.html - Check often for new version! // Decompiler options: packimports(3) // Source File Name: CastorMethodPredicate.java package xdoclet.plugins.xmlFacade; import org.apache.commons.collections.Predicate; import xjavadoc.XMethod; import xjavadoc.XParameter; import xjavadoc.XClass; public class ZeusMethodPredicate implements Predicate { public ZeusMethodPredicate() { } public boolean evaluate(Object o) { XMethod method = (XMethod)o; return isElementAdder(method) || isElementSetter(method)|| isAttributeSetter(method); } private static boolean isElementAdder(XMethod method) { return method.getName().startsWith("add") && method.getDimension() == 0 && method.getParameters().size() == 1 && method.isPublic(); } private static boolean isElementSetter(XMethod method) { return method.getName().startsWith("set") && !method.getName().equals("setOutputEncoding") && method.getDimension() == 0 && method.getParameters().size() == 1 && ((XParameter)method.getParameters().iterator().next()).getDimension() == 0 && !((XParameter)method.getParameters().iterator().next()).getType().getQualifiedName().equals("java.lang.String") && !((XParameter)method.getParameters().iterator().next()).getType().getQualifiedName().equals("java.util.List") && method.isPublic(); } private static boolean isAttributeSetter(XMethod method) { return method.getName().startsWith("set") && !method.getName().equals("setOutputEncoding") && method.getDimension() == 0 && method.getParameters().size() == 1 && ((XParameter)method.getParameters().iterator().next()).getDimension() == 0 && ((XParameter)method.getParameters().iterator().next()).getType().getQualifiedName().equals("java.lang.String") && method.isPublic(); } public static MethodModel createMethodModel(XMethod method) { MethodModel result = null; // the version is the package name String version = method.getContainingPackage().getName(); if( isElementAdder(method) || isElementSetter(method)) { XClass type = ((XParameter) method.getParameters().iterator().next()).getType(); result = new CreateElementMethod(version, type.getName()); } else if( isAttributeSetter(method) ) { result = new SetAttributeMethod(version, method.getName()); } return result; } } Index: CastorClassPredicate.java =================================================================== RCS file: /cvsroot/xdoclet/xdoclet2/plugins/xmlFacade/src/java/xdoclet/plugins/xmlFacade/CastorClassPredicate.java,v retrieving revision 1.2 retrieving revision 1.3 diff -C2 -r1.2 -r1.3 *** CastorClassPredicate.java 23 Nov 2002 10:57:51 -0000 1.2 --- CastorClassPredicate.java 28 Jan 2003 21:18:52 -0000 1.3 *************** *** 11,15 **** /** * This predicate filters out Castor classes that contain the interface methods we're ! * interested in for generation of XMLFacadeClassModel objects. * * @author <a href="mailto:aslak.hellesoy at bekk.no">Aslak Hellesøy</a> --- 11,15 ---- /** * This predicate filters out Castor classes that contain the interface methods we're ! * interested in for generation of ClassModel objects. * * @author <a href="mailto:aslak.hellesoy at bekk.no">Aslak Hellesøy</a> *************** *** 32,35 **** --- 32,39 ---- } return false; + } + + public static String getNameForCastorClass(XClass clazz) { + return clazz.getName(); } } Index: CastorMethodPredicate.java =================================================================== RCS file: /cvsroot/xdoclet/xdoclet2/plugins/xmlFacade/src/java/xdoclet/plugins/xmlFacade/CastorMethodPredicate.java,v retrieving revision 1.1.1.1 retrieving revision 1.2 diff -C2 -r1.1.1.1 -r1.2 *** CastorMethodPredicate.java 19 Nov 2002 23:10:47 -0000 1.1.1.1 --- CastorMethodPredicate.java 28 Jan 2003 21:18:53 -0000 1.2 *************** *** 6,14 **** package xdoclet.plugins.xmlFacade; - import java.util.Collection; - import java.util.Iterator; import org.apache.commons.collections.Predicate; import xjavadoc.XMethod; import xjavadoc.XParameter; public class CastorMethodPredicate --- 6,13 ---- package xdoclet.plugins.xmlFacade; import org.apache.commons.collections.Predicate; import xjavadoc.XMethod; import xjavadoc.XParameter; + import xjavadoc.XClass; public class CastorMethodPredicate *************** *** 16,29 **** { - public CastorMethodPredicate() - { - } - public boolean evaluate(Object o) { XMethod method = (XMethod)o; ! boolean adder = method.getName().startsWith("add") && method.getDimension() == 0 && method.getParameters().size() == 1 && method.isPublic(); ! boolean setter = method.getName().startsWith("set") && method.getDimension() == 0 && method.getParameters().size() == 1 && ((XParameter)method.getParameters().iterator().next()).getDimension() == 0 && method.isPublic(); ! return adder || setter; } } --- 15,62 ---- { public boolean evaluate(Object o) { XMethod method = (XMethod)o; ! return isElementAdder(method) || isElementSetter(method)|| isAttributeSetter(method); ! } ! ! private static boolean isElementAdder(XMethod method) { ! return method.getName().startsWith("add") && ! method.getDimension() == 0 && ! method.getParameters().size() == 1 && ! method.isPublic(); ! } ! ! private static boolean isElementSetter(XMethod method) { ! return method.getName().startsWith("set") && ! method.getDimension() == 0 && ! method.getParameters().size() == 1 && ! ((XParameter)method.getParameters().iterator().next()).getDimension() == 0 && ! !((XParameter)method.getParameters().iterator().next()).getType().getQualifiedName().equals("java.lang.String") && ! method.isPublic(); ! } ! ! private static boolean isAttributeSetter(XMethod method) { ! return method.getName().startsWith("set") && ! method.getDimension() == 0 && ! method.getParameters().size() == 1 && ! ((XParameter)method.getParameters().iterator().next()).getDimension() == 0 && ! ((XParameter)method.getParameters().iterator().next()).getType().getQualifiedName().equals("java.lang.String") && ! method.isPublic(); ! } ! ! public static MethodModel createMethodModel(XMethod method) { ! MethodModel result = null; ! ! // the version is the package name ! String version = method.getContainingPackage().getName(); ! ! if( isElementAdder(method) || isElementSetter(method)) { ! XClass type = ((XParameter) method.getParameters().iterator().next()).getType(); ! result = new CreateElementMethod(version, type.getName()); ! } else if( isAttributeSetter(method) ) { ! result = new SetAttributeMethod(version, method.getName()); ! } ! return result; } } Index: xmlFacade.vm =================================================================== RCS file: /cvsroot/xdoclet/xdoclet2/plugins/xmlFacade/src/java/xdoclet/plugins/xmlFacade/xmlFacade.vm,v retrieving revision 1.2 retrieving revision 1.3 diff -C2 -r1.2 -r1.3 *** xmlFacade.vm 23 Nov 2002 10:57:51 -0000 1.2 --- xmlFacade.vm 28 Jan 2003 21:18:59 -0000 1.3 *************** *** 2,16 **** /** ! * Generated class do not edit! * @author <a href="http://xdoclet.sf.net/">XDoclet</a> */ ! class $custom.name { ! #foreach( $method in $class.getMethods($castorMethodPredicate, false) ) ! #set( $type = ${method.parameters.iterator().next().type} ) ! #if( $type.qualifiedName == "java.lang.String" ) ! set${type.name}(); ! #else ! create${type.qualifiedName}(); #end #end } --- 2,26 ---- /** ! * Generated facade class for Zeuz and/or Castor classes. Do not edit! ! * ! * <ul> ! #foreach( $version in $custom.versions ) ! * <li>$version</li> ! #end ! * </ul> ! * * @author <a href="http://xdoclet.sf.net/">XDoclet</a> */ ! public interface $custom.name { ! #foreach( $method in $custom.methods ) ! /** ! * <ul> ! #foreach( $version in $method.versions ) ! * <li>$version</li> #end + * </ul> + */ + public $method.signature; + #end } Index: XMLFacadePlugin.java =================================================================== RCS file: /cvsroot/xdoclet/xdoclet2/plugins/xmlFacade/src/java/xdoclet/plugins/xmlFacade/XMLFacadePlugin.java,v retrieving revision 1.2 retrieving revision 1.3 diff -C2 -r1.2 -r1.3 *** XMLFacadePlugin.java 23 Nov 2002 10:57:51 -0000 1.2 --- XMLFacadePlugin.java 28 Jan 2003 21:19:03 -0000 1.3 *************** *** 1,27 **** - // Decompiled by DJ v3.2.2.67 Copyright 2002 Atanas Neshkov Date: 19.11.2002 22:37:03 - // Home Page : http://members.fortunecity.com/neshkov/dj.html - Check often for new version! - // Decompiler options: packimports(3) - // Source File Name: XMLFacadePlugin.java - package xdoclet.plugins.xmlFacade; import java.util.*; - import xdoclet.JavaDestination; import xdoclet.Plugin; import xdoclet.util.predicates.Or; import xjavadoc.XClass; ! // Referenced classes of package xdoclet.plugins.xmlFacade: ! // XMLFacadeGenerator ! public class XMLFacadePlugin extends Plugin { private static final Or _interfaceClasses = new Or(); ! public static final CastorClassPredicate _castorClasses = new CastorClassPredicate(); static { ! _interfaceClasses.add(new CastorClassPredicate()); } public XMLFacadePlugin() { --- 1,33 ---- package xdoclet.plugins.xmlFacade; import java.util.*; import xdoclet.Plugin; import xdoclet.util.predicates.Or; import xjavadoc.XClass; ! /** ! * ! * @author <a href="mailto:aslak.hellesoy at bekk.no">Aslak Hellesøy</a> ! * @version $Revision$ ! */ public class XMLFacadePlugin extends Plugin { private static final Or _interfaceClasses = new Or(); ! public static final CastorClassPredicate CASTOR_CLASS_PREDICATE = new CastorClassPredicate(); ! public static final CastorMethodPredicate CASTOR_METHOD_PREDICATE = new CastorMethodPredicate(); ! ! public static final ZeusClassPredicate ZEUS_CLASS_PREDICATE = new ZeusClassPredicate(); ! public static final ZeusMethodPredicate ZEUS_METHOD_PREDICATE = new ZeusMethodPredicate(); ! ! // private String _xmlFacadePackage; static { ! _interfaceClasses.add(CASTOR_CLASS_PREDICATE); ! _interfaceClasses.add(ZEUS_CLASS_PREDICATE); } + /* + private List _castorPackages; + public XMLFacadePlugin() { *************** *** 33,42 **** _castorPackages.add(castorPackage); } protected List createGenerators() { ArrayList result = new ArrayList(1); ! XMLFacadeDestination destination = new XMLFacadeDestination(getDestinationDir(), "{0}.java"); ! XMLFacadeGenerator xmlFacadeGenerator = new XMLFacadeGenerator(destination, getAcceptedClasses(),"xdoclet.fubar"); result.add(xmlFacadeGenerator); return result; --- 39,49 ---- _castorPackages.add(castorPackage); } + */ protected List createGenerators() { ArrayList result = new ArrayList(1); ! InterfaceGenerator xmlFacadeGenerator = new InterfaceGenerator( getAcceptedClasses()); ! xmlFacadeGenerator.setFacadePackage("fooo.baaar"); result.add(xmlFacadeGenerator); return result; *************** *** 46,50 **** { Collection allVersionsClasses = super.getAcceptedClasses(); ! return allVersionsClasses; } --- 53,57 ---- { Collection allVersionsClasses = super.getAcceptedClasses(); ! return allVersionsClasses; } *************** *** 53,57 **** return _interfaceClasses.evaluate(clazz); } - - private List _castorPackages; } --- 60,62 ---- --- XMLFacadeClassModel.java DELETED --- --- XMLFacadeDestination.java DELETED --- --- XMLFacadeGenerator.java DELETED --- ------------------------------------------------------- This SF.NET email is sponsored by: SourceForge Enterprise Edition + IBM + LinuxWorld = Something 2 See! http://www.vasoftware.com _______________________________________________ Xdoclet-devel mailing list [EMAIL PROTECTED] https://lists.sourceforge.net/lists/listinfo/xdoclet-devel