Author: tchemit Date: 2010-11-26 18:25:14 +0100 (Fri, 26 Nov 2010) New Revision: 2152 Url: http://nuiton.org/repositories/revision/topia/2152 Log: Anomalie #1103: Can NOT use an association from an entity to a simple bean Modified: trunk/topia-persistence/src/main/java/org/nuiton/topia/generator/DAOAbstractTransformer.java Modified: trunk/topia-persistence/src/main/java/org/nuiton/topia/generator/DAOAbstractTransformer.java =================================================================== --- trunk/topia-persistence/src/main/java/org/nuiton/topia/generator/DAOAbstractTransformer.java 2010-11-25 10:44:42 UTC (rev 2151) +++ trunk/topia-persistence/src/main/java/org/nuiton/topia/generator/DAOAbstractTransformer.java 2010-11-26 17:25:14 UTC (rev 2152) @@ -53,6 +53,7 @@ import java.util.Arrays; import java.util.Collection; import java.util.HashMap; +import java.util.HashSet; import java.util.List; import java.util.Map; import java.util.Set; @@ -69,19 +70,25 @@ * Created: 13 déc. 2009 * * @author tchemit <chemit@codelutin.com> - * @version $Id: DAOAbstractTransformer.java 1960 2010-05-13 17:18:23Z tchemit - * $ + * @version $Id: DAOAbstractTransformer.java 1960 2010-05-13 17:18:23Z tchemit$ * @plexus.component role="org.nuiton.eugene.Template" role-hint="org.nuiton.topia.generator.DAOAbstractTransformer" * @since 2.3.0 */ public class DAOAbstractTransformer extends ObjectModelTransformerToJava { - /** Logger */ + /** Logger. */ private static final Log log = LogFactory.getLog( DAOAbstractTransformer.class); - Map<ObjectModelClass, Set<ObjectModelClass>> usages; + /** TODO */ + protected Map<ObjectModelClass, Set<ObjectModelClass>> usages; + /** + * All entities fqn of the model (used to detect if an attribute is not + * an entity). + */ + Set<String> allEntitiesFqn; + protected boolean extendLegacyDAO; /** @@ -96,6 +103,12 @@ usages = TopiaGeneratorUtil.searchDirectUsages(model); extendLegacyDAO = Boolean.valueOf(model.getTagValue("useLegacyDAO")); + + List<ObjectModelClass> allEntities = TopiaGeneratorUtil.getEntityClasses(model, true); + allEntitiesFqn = new HashSet<String>(allEntities.size()); + for (ObjectModelClass entity : allEntities) { + allEntitiesFqn.add(entity.getQualifiedName()); + } } @Override @@ -361,7 +374,7 @@ generateFindUsages(clazz, result, usagesForclass); } - private void generateDelete(ObjectModelClass clazz, + protected void generateDelete(ObjectModelClass clazz, ObjectModelClass result) { ObjectModelOperation op; op = addOperation(result, "delete", "void", ObjectModelModifier.PUBLIC); @@ -372,12 +385,38 @@ String providerFQN = getOutputProperties().getProperty( PROP_DEFAULT_PACKAGE) + '.' + modelName + "DAOHelper.getImplementationClass"; + for (ObjectModelAttribute attr : clazz.getAttributes()) { + String attrType = GeneratorUtil.getSimpleName(attr.getType()); + String reverseAttrName = attr.getReverseAttributeName(); ObjectModelAttribute reverse = attr.getReverseAttribute(); - if (!attr.hasAssociationClass() && reverse != null && reverse.isNavigable() - && GeneratorUtil.isNMultiplicity(attr) && GeneratorUtil.isNMultiplicity(reverse)) { + if (attr.hasAssociationClass() || + reverse == null || !reverse.isNavigable()) { + + // never treate a non reverse and navigable attribute + // never treate an association class attribute + continue; + } + + // at this point we are sure to have a attribute which is + // - reverse + // - navigable + // - not from an association class + if (!allEntitiesFqn.contains(attr.getType())) { + + // this attribute is not from an entity, don't treate it + if (log.isDebugEnabled()) { + log.debug("[" + result.getName() + "] Skip attribute [" + + attr.getName() + "] with type " + attr.getType()); + } + continue; + } + + // At this point, the attribute type is a entity + if (GeneratorUtil.isNMultiplicity(attr) && + GeneratorUtil.isNMultiplicity(reverse)) { // On doit absolument supprimer pour les relations many-to-many // le this de la collection de l'autre cote @@ -428,9 +467,7 @@ } }*/ ); - } else if (!attr.hasAssociationClass() && reverse != null - && reverse.isNavigable() - && !GeneratorUtil.isNMultiplicity(reverse)) { + } else if (!GeneratorUtil.isNMultiplicity(reverse)) { // On doit mettre a null les attributs qui ont cet objet sur les // autres entites en one-to-* // TODO peut-etre qu'hibernate est capable de faire ca tout seul ?
participants (1)
-
tchemit@users.nuiton.org