Update of /cvsroot/xdoclet/xdoclet/modules/ejb/src/xdoclet/modules/ejb/entity
In directory 
sc8-pr-cvs1.sourceforge.net:/tmp/cvs-serv5627/modules/ejb/src/xdoclet/modules/ejb/entity

Modified Files:
        ValueObjectTagsHandler.java 
Log Message:
New tag parameter to let user decide the concrete type of collections in Value 
Objects (XDT-518)

Index: ValueObjectTagsHandler.java
===================================================================
RCS file: 
/cvsroot/xdoclet/xdoclet/modules/ejb/src/xdoclet/modules/ejb/entity/ValueObjectTagsHandler.java,v
retrieving revision 1.22
retrieving revision 1.23
diff -C2 -r1.22 -r1.23
*** ValueObjectTagsHandler.java 3 Apr 2005 10:46:57 -0000       1.22
--- ValueObjectTagsHandler.java 3 Apr 2005 12:03:20 -0000       1.23
***************
*** 5,8 ****
--- 5,9 ----
  package xdoclet.modules.ejb.entity;
  
+ import java.lang.reflect.Modifier;
  import java.text.MessageFormat;
  import java.util.*;
***************
*** 15,23 ****
--- 16,27 ----
  import xdoclet.DocletTask;
  import xdoclet.XDocletException;
+ import xdoclet.XDocletMessages;
  import xdoclet.modules.ejb.EjbTagsHandler;
+ import xdoclet.modules.ejb.XDocletModulesEjbMessages;
  import xdoclet.modules.ejb.entity.ValueObjectSubTask;
  import xdoclet.modules.ejb.intf.InterfaceTagsHandler;
  import xdoclet.tagshandler.MethodTagsHandler;
  import xdoclet.util.LogUtil;
+ import xdoclet.util.Translator;
  
  import xdoclet.util.TypeConversionUtil;
***************
*** 518,529 ****
      public String concreteCollectionType() throws XDocletException
      {
          String currentReturnType = 
getCurrentMethod().getReturnType().getType().getQualifiedName();
-         String res = null;
  
          if (currentReturnType.equals("java.util.Collection")) {
!             res = "java.util.ArrayList";
          }
          else if (currentReturnType.equals("java.util.Set")) {
!             res = "java.util.HashSet";
          }
          else {
--- 522,580 ----
      public String concreteCollectionType() throws XDocletException
      {
+         String concreteType = 
getCurrentMethod().getDoc().getTagAttributeValue("ejb.value-object", 
"concrete-type");
+         Class concreteClass = null;
+ 
+         // test the concrete class
+         if (concreteType != null) {
+             try {
+                 concreteClass = Class.forName(concreteType);
+             }
+             catch (ClassNotFoundException e) {
+                 throw new 
XDocletException(Translator.getString(XDocletModulesEjbMessages.class,
+                     
XDocletModulesEjbMessages.VALUE_OBJECT_CONCRETE_TYPE_NOT_FOUND,
+                     new String[]{concreteType}));
+             }
+             if (concreteClass.isInterface()) {
+                 throw new 
XDocletException(Translator.getString(XDocletModulesEjbMessages.class,
+                     
XDocletModulesEjbMessages.VALUE_OBJECT_CONCRETE_TYPE_IS_INTF,
+                     new String[]{concreteType}));
+             }
+             if (Modifier.isAbstract(concreteClass.getModifiers())) {
+                 throw new 
XDocletException(Translator.getString(XDocletModulesEjbMessages.class,
+                     
XDocletModulesEjbMessages.VALUE_OBJECT_CONCRETE_TYPE_IS_ABSTRACT,
+                     new String[]{concreteType}));
+             }
+         }
+ 
          String currentReturnType = 
getCurrentMethod().getReturnType().getType().getQualifiedName();
  
          if (currentReturnType.equals("java.util.Collection")) {
!             if (concreteClass == null) {
!                 return "java.util.ArrayList";
!             }
!             else {
!                 // verify that the concrete class is a Collection
!                 if (!Collection.class.isAssignableFrom(concreteClass)) {
!                     throw new 
XDocletException(Translator.getString(XDocletModulesEjbMessages.class,
!                         
XDocletModulesEjbMessages.VALUE_OBJECT_CONCRETE_TYPE_INVALID,
!                         new String[]{concreteType, "java.util.Collection"}));
!                 }
!                 return concreteType;
!             }
! 
          }
          else if (currentReturnType.equals("java.util.Set")) {
!             if (concreteClass == null) {
!                 return "java.util.HashSet";
!             }
!             else {
!                 // verify that the concrete class is a Set
!                 if (!Set.class.isAssignableFrom(concreteClass)) {
!                     throw new 
XDocletException(Translator.getString(XDocletModulesEjbMessages.class,
!                         
XDocletModulesEjbMessages.VALUE_OBJECT_CONCRETE_TYPE_INVALID,
!                         new String[]{concreteType, "java.util.Set"}));
!                 }
!                 return concreteType;
!             }
          }
          else {
***************
*** 532,536 ****
                  " on aggregate or composition.");
          }
-         return res;
      }
  
--- 583,586 ----



-------------------------------------------------------
SF email is sponsored by - The IT Product Guide
Read honest & candid reviews on hundreds of IT Products from real users.
Discover which products truly live up to the hype. Start reading now.
http://ads.osdn.com/?ad_id=6595&alloc_id=14396&op=click
_______________________________________________
xdoclet-devel mailing list
xdoclet-devel@lists.sourceforge.net
https://lists.sourceforge.net/lists/listinfo/xdoclet-devel

Reply via email to