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&oslash;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&oslash;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&oslash;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&oslash;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&oslash;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&oslash;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&oslash;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&oslash;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&oslash;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

Reply via email to