Author: echatellier Date: 2011-03-11 18:29:42 +0100 (Fri, 11 Mar 2011) New Revision: 2222 Url: http://nuiton.org/repositories/revision/topia/2222 Log: #1391 : TopiaContext doit pouvoir ?\195?\170tre accessible depuis l'entit?\195?\169 Added: trunk/topia-persistence/src/main/java/org/nuiton/topia/persistence/TopiaEntityContextable.java Modified: trunk/topia-persistence/src/main/java/org/nuiton/topia/framework/TopiaContextImplementor.java trunk/topia-persistence/src/main/java/org/nuiton/topia/framework/TopiaFilter.java trunk/topia-persistence/src/main/java/org/nuiton/topia/generator/EntityTransformer.java trunk/topia-persistence/src/main/java/org/nuiton/topia/generator/TopiaGeneratorUtil.java trunk/topia-persistence/src/main/java/org/nuiton/topia/generator/TopiaTagValues.java trunk/topia-persistence/src/main/java/org/nuiton/topia/persistence/TopiaDAOLegacy.java trunk/topia-persistence/src/main/java/org/nuiton/topia/persistence/TopiaEntityAbstract.java Modified: trunk/topia-persistence/src/main/java/org/nuiton/topia/framework/TopiaContextImplementor.java =================================================================== --- trunk/topia-persistence/src/main/java/org/nuiton/topia/framework/TopiaContextImplementor.java 2011-03-07 09:54:50 UTC (rev 2221) +++ trunk/topia-persistence/src/main/java/org/nuiton/topia/framework/TopiaContextImplementor.java 2011-03-11 17:29:42 UTC (rev 2222) @@ -23,17 +23,6 @@ * #L% */ -/* * - * TopiaContextImplementor.java - * - * Created: 3 janv. 2006 21:27:24 - * - * @author poussin <poussin@codelutin.com> - * @version $Revision$ - * - * Last update: $Date$ - * by : $Author$ - */ package org.nuiton.topia.framework; import org.hibernate.Session; Modified: trunk/topia-persistence/src/main/java/org/nuiton/topia/framework/TopiaFilter.java =================================================================== --- trunk/topia-persistence/src/main/java/org/nuiton/topia/framework/TopiaFilter.java 2011-03-07 09:54:50 UTC (rev 2221) +++ trunk/topia-persistence/src/main/java/org/nuiton/topia/framework/TopiaFilter.java 2011-03-11 17:29:42 UTC (rev 2222) @@ -33,8 +33,6 @@ import java.beans.PropertyChangeListener; import java.beans.PropertyChangeSupport; -import java.util.ArrayList; -import java.util.List; /** * Filter Modified: trunk/topia-persistence/src/main/java/org/nuiton/topia/generator/EntityTransformer.java =================================================================== --- trunk/topia-persistence/src/main/java/org/nuiton/topia/generator/EntityTransformer.java 2011-03-07 09:54:50 UTC (rev 2221) +++ trunk/topia-persistence/src/main/java/org/nuiton/topia/generator/EntityTransformer.java 2011-03-11 17:29:42 UTC (rev 2222) @@ -24,6 +24,14 @@ */ package org.nuiton.topia.generator; +import static org.nuiton.topia.generator.TopiaGeneratorUtil.hasUnidirectionalRelationOnAbstractType; + +import java.net.URL; +import java.util.ArrayList; +import java.util.Collection; +import java.util.List; +import java.util.Set; + import org.apache.commons.lang.StringUtils; import org.apache.commons.lang.builder.ToStringBuilder; import org.apache.commons.logging.Log; @@ -44,18 +52,11 @@ import org.nuiton.topia.persistence.EntityVisitor; import org.nuiton.topia.persistence.TopiaEntity; import org.nuiton.topia.persistence.TopiaEntityAbstract; +import org.nuiton.topia.persistence.TopiaEntityContextable; import org.nuiton.topia.persistence.util.TopiaEntityHelper; -import java.net.URL; -import java.util.ArrayList; -import java.util.Collection; -import java.util.List; -import java.util.Set; -import static org.nuiton.topia.generator.TopiaGeneratorUtil.hasUnidirectionalRelationOnAbstractType; - - /*{generator option: parentheses = false}*/ /*{generator option: writeString = +}*/ @@ -204,7 +205,12 @@ // Extends TopiaEntity (only if hasn't parent entity) if (needTopiaEntity) { - addInterface(outputInterface, TopiaEntity.class); + if (TopiaGeneratorUtil.isContextable(input)) { + addInterface(outputInterface, TopiaEntityContextable.class); + } + else { + addInterface(outputInterface, TopiaEntity.class); + } } } @@ -259,8 +265,34 @@ addConstant(outputInterface, "serialVersionUID", long.class, svUID, ObjectModelModifier.PRIVATE); } + + addContextableMethods(input, outputAbstract); } + /** + * Ajout les methodes necessaire à l'interface {@link TopiaEntityContextable} + * si le tagValue {@link TopiaTagValues#TAG_CONTEXTABLE} est renseigné. + */ + protected void addContextableMethods(ObjectModelClass input, ObjectModelClass outputAbstract) { + + if (TopiaGeneratorUtil.isContextable(input)) { + + addImport(outputAbstract, TopiaContextImplementor.class); + + ObjectModelOperation op = addOperation(outputAbstract, "update", "void", + ObjectModelModifier.PUBLIC); + addException(op, TopiaException.class); + setDocumentation(op,"@since 2.5.3"); + addAnnotation(outputAbstract, op, Override.class.getSimpleName()); + setOperationBody(op, "" +/*{ + ((TopiaContextImplementor)getTopiaContext()).getDAO(<%=input.getName()%>.class).update(this); +}*/ + ); + } + + } + protected boolean isGenerateImpl(ObjectModelClass input, Collection<ObjectModelOperation> operations) { Modified: trunk/topia-persistence/src/main/java/org/nuiton/topia/generator/TopiaGeneratorUtil.java =================================================================== --- trunk/topia-persistence/src/main/java/org/nuiton/topia/generator/TopiaGeneratorUtil.java 2011-03-07 09:54:50 UTC (rev 2221) +++ trunk/topia-persistence/src/main/java/org/nuiton/topia/generator/TopiaGeneratorUtil.java 2011-03-11 17:29:42 UTC (rev 2222) @@ -67,7 +67,6 @@ * @author tchemit <tchemit@codelutin.com> * @author fdesbois <fdesbois@codelutin.com> * @author chatellier <chatellier@codelutin.com> - * @author thimel <thimel@codelutin.com> * @version $Id$ */ public class TopiaGeneratorUtil extends JavaGeneratorUtil { @@ -819,6 +818,22 @@ } /** + * Retourne true si le tagValue {@link TopiaTagValues#TAG_CONTEXTABLE} + * à la valeur {@code true}. + * + * @param classifier classifier to test + * @return {@code true} si {@link TopiaTagValues#TAG_CONTEXTABLE} == {@code true} + */ + public static boolean isContextable(ObjectModelClassifier classifier) { + boolean result = false; + String value = classifier.getTagValue(TopiaTagValues.TAG_CONTEXTABLE); + if (StringUtils.equalsIgnoreCase(value, "true")) { + result = true; + } + return result; + } + + /** * Obtain the list of fqn of object involed in the given class. * * @param aClass the clazz to inspect Modified: trunk/topia-persistence/src/main/java/org/nuiton/topia/generator/TopiaTagValues.java =================================================================== --- trunk/topia-persistence/src/main/java/org/nuiton/topia/generator/TopiaTagValues.java 2011-03-07 09:54:50 UTC (rev 2221) +++ trunk/topia-persistence/src/main/java/org/nuiton/topia/generator/TopiaTagValues.java 2011-03-11 17:29:42 UTC (rev 2222) @@ -32,6 +32,7 @@ import org.nuiton.eugene.models.object.ObjectModelClassifier; import org.nuiton.eugene.models.object.ObjectModelElement; import org.nuiton.eugene.models.object.ObjectModelOperation; +import org.nuiton.topia.TopiaContext; import org.nuiton.topia.persistence.TopiaEntityEnum; import static org.nuiton.eugene.ModelPropertiesUtil.TagValueDefinition; @@ -65,6 +66,15 @@ String TAG_PERSISTENCE_TYPE = "persistenceType"; /** + * Tag pour que les entités etendent {@link TopiaEntityContextable} et + * se fasse injecter le {@link TopiaContext} par rapport aux autres + * entités qui ne l'ont pas. + * @since 2.5.3 + */ + @TagValueDefinition(target = {ObjectModelClassifier.class}, documentation = "") + String TAG_CONTEXTABLE = "contextable"; + + /** * Tag pour le nom du champ / entité en BD. * * @see TopiaGeneratorUtil#getDbNameTagValue(ObjectModelElement) @@ -362,7 +372,7 @@ * @since 2.3.2 */ @TagValueDefinition(target = {ObjectModel.class}, - documentation = "Sets the fully qualified name of the exeception to generate in Services and QueryHelper") + documentation = "Sets the fully qualified name of the exception to generate in Services and QueryHelper") String TAG_EXCEPTION_CLASS = "exceptionClass"; // ------------------------------------------------------------------------- Modified: trunk/topia-persistence/src/main/java/org/nuiton/topia/persistence/TopiaDAOLegacy.java =================================================================== --- trunk/topia-persistence/src/main/java/org/nuiton/topia/persistence/TopiaDAOLegacy.java 2011-03-07 09:54:50 UTC (rev 2221) +++ trunk/topia-persistence/src/main/java/org/nuiton/topia/persistence/TopiaDAOLegacy.java 2011-03-11 17:29:42 UTC (rev 2222) @@ -58,12 +58,9 @@ import java.io.Serializable; import java.lang.reflect.InvocationTargetException; import java.security.Permission; -import java.util.ArrayList; -import java.util.Collection; import java.util.HashMap; import java.util.List; import java.util.Map; -import java.util.Map.Entry; import org.apache.commons.beanutils.PropertyUtils; import org.apache.commons.logging.Log; Modified: trunk/topia-persistence/src/main/java/org/nuiton/topia/persistence/TopiaEntityAbstract.java =================================================================== --- trunk/topia-persistence/src/main/java/org/nuiton/topia/persistence/TopiaEntityAbstract.java 2011-03-07 09:54:50 UTC (rev 2221) +++ trunk/topia-persistence/src/main/java/org/nuiton/topia/persistence/TopiaEntityAbstract.java 2011-03-11 17:29:42 UTC (rev 2222) @@ -23,22 +23,8 @@ * #L% */ -/******************************************************************************* - * TopiaEntityAbstract.java - * - * Created: 28 déc. 2005 22:50:42 - * - * @author poussin <poussin@codelutin.com> - * - * @version $Revision$ - * - * Last update: $Date$ by : $Author$ - */ - package org.nuiton.topia.persistence; -import org.apache.commons.logging.Log; -import org.apache.commons.logging.LogFactory; import org.nuiton.topia.TopiaContext; import org.nuiton.topia.TopiaException; import org.nuiton.topia.framework.TopiaContextImplementor; @@ -64,16 +50,13 @@ /** serialVersionUID. */ private static final long serialVersionUID = -7458577454878852241L; - /** to use log facility, just put in your code: log.info(\"...\"); */ - static private Log log = LogFactory.getLog(TopiaEntityAbstract.class); - protected String topiaId; protected long topiaVersion; protected Date topiaCreateDate = new Date(); - transient protected TopiaContext topiaContext; + //transient protected TopiaContext topiaContext; transient protected VetoableChangeSupport readVetoables; @@ -161,21 +144,21 @@ this.topiaCreateDate = topiaCreateDate; } - public TopiaContext getTopiaContext() { + /*public TopiaContext getTopiaContext() { return topiaContext; - } + }*/ - /** + /* * @param context The context to set. * @throws TopiaException if any pb ? - */ + * public void setTopiaContext(TopiaContext context) throws TopiaException { if (topiaContext == null) { topiaContext = context; } else { throw new TopiaException("Remplacement du contexte interdit"); } - } + }*/ @Override public List<TopiaEntity> getComposite() throws TopiaException { Added: trunk/topia-persistence/src/main/java/org/nuiton/topia/persistence/TopiaEntityContextable.java =================================================================== --- trunk/topia-persistence/src/main/java/org/nuiton/topia/persistence/TopiaEntityContextable.java (rev 0) +++ trunk/topia-persistence/src/main/java/org/nuiton/topia/persistence/TopiaEntityContextable.java 2011-03-11 17:29:42 UTC (rev 2222) @@ -0,0 +1,64 @@ +/* + * #%L + * + * + * $Id$ + * $HeadURL$ + * %% + * Copyright (C) 2011 Codelutin, Chatellier Eric + * %% + * This program is free software: you can redistribute it and/or modify + * it under the terms of the GNU Lesser General Public License as + * published by the Free Software Foundation, either version 3 of the + * License, or (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Lesser Public License for more details. + * + * You should have received a copy of the GNU General Lesser Public + * License along with this program. If not, see + * <http://www.gnu.org/licenses/lgpl-3.0.html>. + * #L% + */ + +package org.nuiton.topia.persistence; + +import org.nuiton.topia.TopiaContext; +import org.nuiton.topia.TopiaException; + +/** + * {@link TopiaEntity} with {@link TopiaContext} support (injected by + * {@link TopiaContext} into entities). + * + * @author chatellier + * @version $Revision$ + * + * Last update : $Date$ + * By : $Author$ + */ +public interface TopiaEntityContextable extends TopiaEntity { + + /** + * Set topia context. + * + * @param topiaContext topia context + * @throws TopiaException if current topia entity context is not null + */ + public void setTopiaContext(TopiaContext topiaContext) throws TopiaException; + + /** + * Get topia context. + * + * @return topia context + */ + public TopiaContext getTopiaContext(); + + /** + * Update entity in persistence context. + * + * @throws TopiaException + */ + public void update() throws TopiaException; +} Property changes on: trunk/topia-persistence/src/main/java/org/nuiton/topia/persistence/TopiaEntityContextable.java ___________________________________________________________________ Added: svn:keywords + Author Date Id Revision HeadURL