Author: tchemit Date: 2010-07-19 12:42:36 +0200 (Mon, 19 Jul 2010) New Revision: 2083 Url: http://nuiton.org/repositories/revision/topia/2083 Log: test if there is a natyural id + reformat code Modified: trunk/topia-persistence/src/main/java/org/nuiton/topia/persistence/util/EntityOperator.java Modified: trunk/topia-persistence/src/main/java/org/nuiton/topia/persistence/util/EntityOperator.java =================================================================== --- trunk/topia-persistence/src/main/java/org/nuiton/topia/persistence/util/EntityOperator.java 2010-07-19 10:03:11 UTC (rev 2082) +++ trunk/topia-persistence/src/main/java/org/nuiton/topia/persistence/util/EntityOperator.java 2010-07-19 10:42:36 UTC (rev 2083) @@ -25,6 +25,13 @@ package org.nuiton.topia.persistence.util; +import org.apache.commons.lang.StringUtils; +import org.apache.commons.logging.Log; +import org.apache.commons.logging.LogFactory; +import org.nuiton.topia.persistence.TopiaEntity; +import org.nuiton.topia.persistence.TopiaEntityEnum; +import org.nuiton.util.ObjectUtil; + import java.beans.BeanInfo; import java.beans.IntrospectionException; import java.beans.Introspector; @@ -42,20 +49,13 @@ import java.util.Set; import java.util.TreeMap; -import org.apache.commons.lang.StringUtils; -import org.apache.commons.logging.Log; -import org.apache.commons.logging.LogFactory; -import org.nuiton.topia.persistence.TopiaEntityEnum; -import org.nuiton.topia.persistence.TopiaEntity; -import org.nuiton.util.ObjectUtil; - /** * Un objet qui permet d'effecuter des operations de manipulation des donnees * dans les entites du type donne. - * + * <p/> * L'objet connait la liste des proprietes et des associations du type donne et * permet de modifier ces valeurs : - * + * <p/> * {@link #get(String, TopiaEntity)} * {@link #set(String, TopiaEntity,Object)} * {@link #copy(String, TopiaEntity,TopiaEntity)} @@ -63,18 +63,18 @@ * {@link #addChild(String, TopiaEntity, Object)} * {@link #removeChild(String, TopiaEntity, Object)} * ... - * + * <p/> * D'autres methodes permettent d'effectuer des operations en lot (sur plusieurs * proprietes en meme temps) sur les proprietes : - * + * <p/> * {@link #copyProperties(TopiaEntity, TopiaEntity, boolean, String...)} * {@link #obtainProperties(TopiaEntity, String...)} * {@link #clearProperties(TopiaEntity, String...)} - * + * <p/> * Note : cet objet ne permet pas d'operation vers les bases. * - * @param <B> type de l'entite * @author tchemit <chemit@codelutin.com> + * @param <B> type de l'entite * @since 2.2.0 */ public class EntityOperator<B extends TopiaEntity> { @@ -82,64 +82,40 @@ /** Logger */ private static Log log = LogFactory.getLog(EntityOperator.class); - /** - * the constant of the entity - */ + /** the constant of the entity */ protected final TopiaEntityEnum contract; - /** - * list of property names available on the entity. - */ + /** list of property names available on the entity. */ protected List<String> properties; - /** - * list of association names available on the entity. - */ + /** list of association names available on the entity. */ protected List<String> associationProperties; - /** - * cache of getter methods. - */ + /** cache of getter methods. */ protected Method[] getMethods; - /** - * cache of setter methods. - */ + /** cache of setter methods. */ protected Method[] setMethods; - /** - * cache of assocation {@code get} methods. - */ + /** cache of assocation {@code get} methods. */ protected Method[] childGetMethods; - /** - * cache of assocation {@code add} methods. - */ + /** cache of assocation {@code add} methods. */ protected Method[] childAddMethods; - /** - * cache of assocation {@code addAll} methods. - */ + /** cache of assocation {@code addAll} methods. */ protected Method[] childAddAllMethods; - /** - * cache of assocation {@code remove} methods. - */ + /** cache of assocation {@code remove} methods. */ protected Method[] childRemoveMethods; - /** - * cache of assocation {@code size} methods. - */ + /** cache of assocation {@code size} methods. */ protected Method[] childSizeMethods; - /** - * cache of assocation {@code isEmpty} methods. - */ + /** cache of assocation {@code isEmpty} methods. */ protected Method[] childIsEmptyMethods; - /** - * cache of assocation {@code clear}methods. - */ + /** cache of assocation {@code clear}methods. */ protected Method[] childClearMethods; protected EntityOperator(TopiaEntityEnum contract) { @@ -153,9 +129,9 @@ /** * Recupere la valeur de la propriete donnee. - * + * <p/> * Note : cela apellera la methode <code>getXXX()</code>. - + * * @param name le nom de la propriete * @param bean l'instance a interroger * @return la valeur de la propriete @@ -168,11 +144,11 @@ /** * Positionner la valeur donne de la propriete donnee. - * + * <p/> * Note : cela apellera la methode <code>setXXX(value)</code>. * - * @param name le nom de la propriete - * @param bean l'instance a mettre a jour + * @param name le nom de la propriete + * @param bean l'instance a mettre a jour * @param value la valeur a positionner */ public void set(String name, B bean, Object value) { @@ -183,26 +159,30 @@ /** * Pour obtenir un dictionnaire de la clef naturelle (clef métier) du {@code bean} * donne. + * * @param bean le bean a inspecter * @return le dictionnaire de la clef naturel du bean * @since 2.4.1 */ - public Map<String,Object> getNaturalId(B bean) { - Map<String,Object> result = new TreeMap<String, Object>(); + public Map<String, Object> getNaturalId(B bean) { + Map<String, Object> result = new TreeMap<String, Object>(); String[] ids = contract.getNaturalIds(); - for (String id : ids) { - result.put(id,get(id, bean)); + if (ids != null) { + for (String id : ids) { + result.put(id, get(id, bean)); + } } return result; } + /** * Copie une propriete de src vers dst. - * + * <p/> * Note : cela apellera la methode <code>setXXX(value)</code>. * * @param name le nom de la propriete * @param from l'instance a interroger - * @param dst l'instance a mettre a jour + * @param dst l'instance a mettre a jour */ public void copy(String name, B from, B dst) { int index = checkPropertyIndex(name); @@ -212,7 +192,7 @@ /** * Positionner la valeur nulle de la propriete donnee. - * + * <p/> * Note : cela apellera la methode <code>setXXX(nullValue)</code>. * * @param name le nom de la propriete @@ -228,11 +208,11 @@ /** * Recupere une entite d'association a partir de son id. - * + * <p/> * Note : cela apellera la methode <code>getXXXByTopiaId(topiaId)</code>. * - * @param name le nom de la propriete d'association - * @param bean l'instance a interroger + * @param name le nom de la propriete d'association + * @param bean l'instance a interroger * @param topiaId l'id de l'entite recherchee * @return l'entite */ @@ -244,7 +224,7 @@ /** * Test s'il existe des entites d'association pour la propriete donnee. - * + * <p/> * Note : cela apellera la methode <code>isXXXEmpty()</code>. * * @param name le nom de la propriete d'association @@ -259,11 +239,11 @@ /** * Ajoute une entite d'association. - * + * <p/> * Note : cela apellera la methode <code>addXXX(child)</code>. * - * @param name le nom de la propriete d'association - * @param bean l'instance a mettre a jour + * @param name le nom de la propriete d'association + * @param bean l'instance a mettre a jour * @param child l'entite a ajouter */ public void addChild(String name, B bean, Object child) { @@ -273,11 +253,11 @@ /** * Ajoute toutes les entites d'association. - * + * <p/> * Note : cela apellera la methode <code>addXXX(child)</code>. * - * @param name le nom de la propriete d'association - * @param bean l'instance a mettre a jour + * @param name le nom de la propriete d'association + * @param bean l'instance a mettre a jour * @param childs les entites a ajouter */ public void addAllChild(String name, B bean, Collection<?> childs) { @@ -287,11 +267,11 @@ /** * Retire une entite d'association. - * + * <p/> * Note : cela apellera la methode <code>removeXXX(child)</code>. * - * @param name le nom de la propriete d'association - * @param bean l'instance a mettre a jour + * @param name le nom de la propriete d'association + * @param bean l'instance a mettre a jour * @param child l'entite a retirer */ public void removeChild(String name, B bean, Object child) { @@ -301,7 +281,7 @@ /** * Retourne le nombre d'entite d'association. - * + * <p/> * Note : cela apellera la methode <code>sizeXXX(childs)</code>. * * @param name le nom de la propriete d'association @@ -316,7 +296,7 @@ /** * Retire toutes les entites d'association. - * + * <p/> * Note : cela apellera la methode <code>clearXXX(childs)</code>. * * @param name le nom de la propriete d'association @@ -329,13 +309,13 @@ /** * Recopie toutes les proprietes donnes depuis src vers dst. - * + * <p/> * Note : si aucune propriete n'est donnee, on utilise toutes les proprietes * connues par l'operateur. - * - * @param from l'entite a interroger - * @param dst l'entite a mettre a jour - * @param tech un drapeau pour recopier aussi les infos techniques + * + * @param from l'entite a interroger + * @param dst l'entite a mettre a jour + * @param tech un drapeau pour recopier aussi les infos techniques * @param properties les proprietes a recopier */ public void copyProperties(B from, B dst, boolean tech, @@ -362,11 +342,11 @@ /** * Obtenir dans un dictionnaire, les valeurs des proprietes donnees. - * + * <p/> * Si aucune proropiete n'est donne, alors on utilise toutes les proprietes * connu par l'operateur. * - * @param from l'object a scanne + * @param from l'object a scanne * @param properties les proprietes a retenir (vide si on les veut toutes) * @return le dictionnaire des valeurs des proprietes */ @@ -389,11 +369,11 @@ /** * Met a null toutes les proprietes donnees. - * + * <p/> * Si aucune proropiete n'est donnee, alors on utilise toutes les proprietes * connu par l'operateur. * - * @param from l'object a scanne + * @param from l'object a scanne * @param properties les proprietes a retenir (vide si on les veut toutes) */ public void clearProperties(B from, String... properties) { @@ -448,7 +428,7 @@ return super.clone(); } catch (CloneNotSupportedException e) { throw new RuntimeException("could not clone " + this + - " for reason : " + e.getMessage(), e); + " for reason : " + e.getMessage(), e); } } @@ -526,9 +506,9 @@ } init(getClazz(), explored, properties, associationProperties, - getters, setters, childGetters, childAdders, - childAddersAll, childRemovers, childSize, - childClearers, childIsEmpty); + getters, setters, childGetters, childAdders, + childAddersAll, childRemovers, childSize, + childClearers, childIsEmpty); if (!properties.isEmpty()) { int size = properties.size(); @@ -553,8 +533,8 @@ } if (log.isDebugEnabled()) { log.debug("===== end for " + getClazz() + " (" + - properties.size() + " properties, " + - associationProperties.size() + " associations)"); + properties.size() + " properties, " + + associationProperties.size() + " associations)"); } } catch (IntrospectionException e) { throw new RuntimeException(e); @@ -576,7 +556,7 @@ Method[] methodDescriptors) { for (Method m : methodDescriptors) { if (name.equals(m.getName()) && - m.getParameterTypes().length == nbParams) { + m.getParameterTypes().length == nbParams) { return m; } } @@ -587,7 +567,7 @@ int index = properties.indexOf(name); if (index == -1) { throw new IllegalArgumentException("property " + name + - " is unknown for " + this); + " is unknown for " + this); } return index; } @@ -596,7 +576,7 @@ int index = associationProperties.indexOf(name); if (index == -1) { throw new IllegalArgumentException("association property " + - name + " is unknown for " + this); + name + " is unknown for " + this); } return index; } @@ -630,25 +610,25 @@ } protected void init(Class<?> entityClass, - Set<Class<?>> explored, - List<String> properties, - List<String> associationProperties, - List<Method> getters, - List<Method> setters, - List<Method> childGetters, - List<Method> childAdders, - List<Method> childAddersAll, - List<Method> childRemovers, - List<Method> childSize, - List<Method> childClearers, - List<Method> childIsEmpty) throws IntrospectionException { + Set<Class<?>> explored, + List<String> properties, + List<String> associationProperties, + List<Method> getters, + List<Method> setters, + List<Method> childGetters, + List<Method> childAdders, + List<Method> childAddersAll, + List<Method> childRemovers, + List<Method> childSize, + List<Method> childClearers, + List<Method> childIsEmpty) throws IntrospectionException { if (entityClass == null) { throw new NullPointerException("entityClass can not be null!"); } if (!entityClass.isInterface()) { throw new IllegalArgumentException("entityClass parameter " + - entityClass + " is not interface!"); + entityClass + " is not interface!"); } if (explored.contains(entityClass)) { return; @@ -669,7 +649,7 @@ for (PropertyDescriptor propertydescriptor : propertyDescriptors) { String propertyName = propertydescriptor.getName(); if (propertydescriptor.getReadMethod() != null && - propertydescriptor.getWriteMethod() != null) { + propertydescriptor.getWriteMethod() != null) { // on a detecte une propriete (lecture/ecriture) if (log.isDebugEnabled()) { log.debug("detected property : " + propertyName); @@ -696,12 +676,12 @@ Method isEmptyMethod = getMethod("is" + cap + "Empty", 0, methods); if (addMethod != null && - addAllMethod != null && - removeMethod != null && - sizeMethod != null && - getMethod != null && - clearMethod != null && - isEmptyMethod != null) { + addAllMethod != null && + removeMethod != null && + sizeMethod != null && + getMethod != null && + clearMethod != null && + isEmptyMethod != null) { // on a detecte une association if (log.isDebugEnabled()) { log.debug("detected association : " + propertyName); @@ -721,24 +701,24 @@ if (interfaces.length > 0) { for (Class<?> c : interfaces) { if (TopiaEntity.class.equals(c) || - !TopiaEntity.class.isAssignableFrom(c) || - explored.contains(c)) { + !TopiaEntity.class.isAssignableFrom(c) || + explored.contains(c)) { // on ne traite pas continue; } init(c, - explored, - properties, - associationProperties, - getters, - setters, - childGetters, - childAdders, - childAddersAll, - childRemovers, - childSize, - childClearers, - childIsEmpty); + explored, + properties, + associationProperties, + getters, + setters, + childGetters, + childAdders, + childAddersAll, + childRemovers, + childSize, + childClearers, + childIsEmpty); } }
participants (1)
-
tchemit@users.nuiton.org