Author: tchemit Date: 2013-05-29 10:54:49 +0200 (Wed, 29 May 2013) New Revision: 635 Url: http://nuiton.org/projects/sandbox/repository/revisions/635 Log: continue nuitpn-jpa dev Added: nuiton-jpa/nuiton-jpa-api/src/main/java/org/nuiton/jpa/api/JpaPersistenceContext.java Modified: nuiton-jpa/nuiton-jpa-api/src/main/java/org/nuiton/jpa/api/AbstractJpaDao.java nuiton-jpa/nuiton-jpa-api/src/main/java/org/nuiton/jpa/api/AbstractJpaPersistenceContext.java nuiton-jpa/nuiton-jpa-templates/src/main/java/org/nuiton/jpa/templates/JpaEntityTransformer.java nuiton-jpa/nuiton-jpa-templates/src/main/java/org/nuiton/jpa/templates/JpaTemplatesGeneratorUtil.java nuiton-jpa/nuiton-jpa-templates/src/main/java/org/nuiton/jpa/templates/JpaTemplatesStereoTypes.java Modified: nuiton-jpa/nuiton-jpa-api/src/main/java/org/nuiton/jpa/api/AbstractJpaDao.java =================================================================== --- nuiton-jpa/nuiton-jpa-api/src/main/java/org/nuiton/jpa/api/AbstractJpaDao.java 2013-05-27 21:25:49 UTC (rev 634) +++ nuiton-jpa/nuiton-jpa-api/src/main/java/org/nuiton/jpa/api/AbstractJpaDao.java 2013-05-29 08:54:49 UTC (rev 635) @@ -143,6 +143,51 @@ return query; } + protected <E> TypedQuery<E> createQuery(Class<E> type, String hql) { + TypedQuery<E> query = entityManager.createQuery(hql, type); + return query; + } + + protected <E> TypedQuery<E> createQuery(Class<E> type, String propertyName, + Object propertyValue, + Object... others) { + + Map<String, Object> properties = new HashMap<String, Object>(); + properties.put(propertyName, propertyValue); + Object name = null; + for (int i = 0; i < others.length; ) { + try { + name = others[i++]; + propertyValue = others[i++]; + properties.put((String) name, propertyValue); + } catch (ClassCastException eee) { + throw new IllegalArgumentException( + "Les noms des propriétés doivent être des chaines et " + + "non pas " + propertyName.getClass().getName(), + eee); + } catch (ArrayIndexOutOfBoundsException eee) { + throw new IllegalArgumentException( + "Le nombre d'argument n'est pas un nombre pair: " + + (others.length + 2) + + " La dernière propriété était: " + name, eee); + } + } + return createQuery(type, properties); + } + + protected <E>TypedQuery<E> createQuery(Class<E> type, Map<String, Object> properties) { + List<String> whereClauses = new LinkedList<String>(); + for (String propertyName : properties.keySet()) { + whereClauses.add(propertyName + " = :" + propertyName); + } + String hql = "from " + getEntityClass().getSimpleName() + " where " + StringUtils.join(whereClauses, " and "); + TypedQuery<E> query = createQuery(type, hql); + for (Map.Entry<String, Object> property : properties.entrySet()) { + query.setParameter(property.getKey(), property.getValue()); + } + return query; + } + protected TypedQuery<E> createQuery(String hql) { TypedQuery<E> query = entityManager.createQuery(hql, getEntityClass()); return query; Modified: nuiton-jpa/nuiton-jpa-api/src/main/java/org/nuiton/jpa/api/AbstractJpaPersistenceContext.java =================================================================== --- nuiton-jpa/nuiton-jpa-api/src/main/java/org/nuiton/jpa/api/AbstractJpaPersistenceContext.java 2013-05-27 21:25:49 UTC (rev 634) +++ nuiton-jpa/nuiton-jpa-api/src/main/java/org/nuiton/jpa/api/AbstractJpaPersistenceContext.java 2013-05-29 08:54:49 UTC (rev 635) @@ -34,7 +34,7 @@ * @author tchemit <chemit@codelutin.com> * @since 0.1 */ -public class AbstractJpaPersistenceContext { +public class AbstractJpaPersistenceContext implements JpaPersistenceContext { protected EntityManager entityManager; @@ -48,15 +48,25 @@ } } + @Override public void commit() { entityTransaction.commit(); entityTransaction = entityManager.getTransaction(); entityTransaction.begin(); } + @Override public void rollback() { entityTransaction.rollback(); entityTransaction = entityManager.getTransaction(); entityTransaction.begin(); } + + public EntityManager getEntityManager() { + return entityManager; + } + + public EntityTransaction getEntityTransaction() { + return entityTransaction; + } } Added: nuiton-jpa/nuiton-jpa-api/src/main/java/org/nuiton/jpa/api/JpaPersistenceContext.java =================================================================== --- nuiton-jpa/nuiton-jpa-api/src/main/java/org/nuiton/jpa/api/JpaPersistenceContext.java (rev 0) +++ nuiton-jpa/nuiton-jpa-api/src/main/java/org/nuiton/jpa/api/JpaPersistenceContext.java 2013-05-29 08:54:49 UTC (rev 635) @@ -0,0 +1,47 @@ +package org.nuiton.jpa.api; + +/* + * #%L + * Nuiton Jpa :: API + * $Id$ + * $HeadURL$ + * %% + * Copyright (C) 2013 CodeLutin + * %% + * 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% + */ + +import javax.persistence.EntityManager; +import javax.persistence.EntityTransaction; + +/** + * TODO + * + * @author tchemit <chemit@codelutin.com> + * @since 0.1 + */ +public interface JpaPersistenceContext { + + EntityManager getEntityManager(); + + EntityTransaction getEntityTransaction(); + + void commit(); + + void rollback(); + + +} Property changes on: nuiton-jpa/nuiton-jpa-api/src/main/java/org/nuiton/jpa/api/JpaPersistenceContext.java ___________________________________________________________________ Added: svn:keywords + Author Date Id Revision HeadURL Added: svn:eol-style + native Modified: nuiton-jpa/nuiton-jpa-templates/src/main/java/org/nuiton/jpa/templates/JpaEntityTransformer.java =================================================================== --- nuiton-jpa/nuiton-jpa-templates/src/main/java/org/nuiton/jpa/templates/JpaEntityTransformer.java 2013-05-27 21:25:49 UTC (rev 634) +++ nuiton-jpa/nuiton-jpa-templates/src/main/java/org/nuiton/jpa/templates/JpaEntityTransformer.java 2013-05-29 08:54:49 UTC (rev 635) @@ -241,7 +241,9 @@ if (PROPERTY_ID.equals(propertyName)) { addAnnotation(result, property, output, Id.class); - addAnnotation(result, property, output, GeneratedValue.class); + if (!JpaTemplatesGeneratorUtil.hasNotGeneratedValueStereotype(input)) { + addAnnotation(result, property, output, GeneratedValue.class); + } continue; } Modified: nuiton-jpa/nuiton-jpa-templates/src/main/java/org/nuiton/jpa/templates/JpaTemplatesGeneratorUtil.java =================================================================== --- nuiton-jpa/nuiton-jpa-templates/src/main/java/org/nuiton/jpa/templates/JpaTemplatesGeneratorUtil.java 2013-05-27 21:25:49 UTC (rev 634) +++ nuiton-jpa/nuiton-jpa-templates/src/main/java/org/nuiton/jpa/templates/JpaTemplatesGeneratorUtil.java 2013-05-29 08:54:49 UTC (rev 635) @@ -359,4 +359,17 @@ public static boolean hasUniqueStereotype(ObjectModelAttribute attribute) { return attribute.hasStereotype(JpaTemplatesStereoTypes.STEREOTYPE_UNIQUE); } + + /** + * Check if the given class has the + * {@link JpaTemplatesStereoTypes#STEREOTYPE_NOT_GENERATED_VALUE} stereotype. + * + * @param clazz class to test + * @return {@code true} if stereotype was found, {@code false otherwise} + * @see JpaTemplatesStereoTypes#STEREOTYPE_NOT_GENERATED_VALUE + * @since 2.5 + */ + public static boolean hasNotGeneratedValueStereotype(ObjectModelClass clazz) { + return clazz.hasStereotype(JpaTemplatesStereoTypes.STEREOTYPE_NOT_GENERATED_VALUE); + } } Modified: nuiton-jpa/nuiton-jpa-templates/src/main/java/org/nuiton/jpa/templates/JpaTemplatesStereoTypes.java =================================================================== --- nuiton-jpa/nuiton-jpa-templates/src/main/java/org/nuiton/jpa/templates/JpaTemplatesStereoTypes.java 2013-05-27 21:25:49 UTC (rev 634) +++ nuiton-jpa/nuiton-jpa-templates/src/main/java/org/nuiton/jpa/templates/JpaTemplatesStereoTypes.java 2013-05-29 08:54:49 UTC (rev 635) @@ -27,7 +27,10 @@ import org.nuiton.eugene.EugeneStereoTypes; import org.nuiton.eugene.ModelPropertiesUtil; import org.nuiton.eugene.models.object.ObjectModelAttribute; +import org.nuiton.eugene.models.object.ObjectModelClass; +import javax.persistence.GeneratedValue; + /** * Defines all stereotypes managed by JPA templates. * @@ -44,4 +47,13 @@ @ModelPropertiesUtil.StereotypeDefinition(target = ObjectModelAttribute.class, documentation = "To specify that an attribute is unique (JPA mapping)") String STEREOTYPE_UNIQUE = "unique"; + + /** + * Stéréotype pour ne pas générer l' annotation {@link GeneratedValue} sur une entité. + * + * @see JpaTemplatesGeneratorUtil#hasNotGeneratedValueStereotype(ObjectModelAttribute) + */ + @ModelPropertiesUtil.StereotypeDefinition(target = ObjectModelClass.class, + documentation = "To specify that an entity deal by itself with his id, the GeneratedValue annotation will not be generated then(JPA mapping)") + String STEREOTYPE_NOT_GENERATED_VALUE = "notGeneratedValue"; }