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 {
throw new XDocletException("Invalid return type (" +
currentReturnType +
" on aggregate or composition.");
}
}