Author: tchemit Date: 2013-06-12 10:27:48 +0200 (Wed, 12 Jun 2013) New Revision: 3821 Url: http://chorem.org/projects/pollen/repository/revisions/3821 Log: implements nice id generator Added: branches/pollen-2.0/pollen-persistence/src/main/java/org/chorem/pollen/persistence/PollenEntityIdFactory.java Removed: branches/pollen-2.0/pollen-persistence/src/main/java/org/chorem/pollen/persistence/JpaEntityIdFactoryIfNotEmpty.java Modified: branches/pollen-2.0/pollen-persistence/pom.xml branches/pollen-2.0/pollen-persistence/src/main/java/org/chorem/pollen/persistence/JpaPollenPersistenceContext.java branches/pollen-2.0/pollen-persistence/src/main/java/org/chorem/pollen/persistence/entity/PollenEntities.java branches/pollen-2.0/pollen-persistence/src/main/xmi/pollen.properties branches/pollen-2.0/pollen-persistence/src/test/java/org/chorem/pollen/persistence/entity/PollenEntitiesTest.java branches/pollen-2.0/pollen-service/src/main/java/org/chorem/pollen/service/AbstractPollenService.java branches/pollen-2.0/pollen-service/src/main/java/org/chorem/pollen/service/AuthService.java branches/pollen-2.0/pollen-service/src/main/java/org/chorem/pollen/service/DefaultPollenServiceContext.java branches/pollen-2.0/pollen-service/src/main/java/org/chorem/pollen/service/PollenServiceContext.java branches/pollen-2.0/pollen-service/src/main/java/org/chorem/pollen/service/UserService.java branches/pollen-2.0/pollen-service/src/main/resources/fixtures.yaml branches/pollen-2.0/pollen-service/src/test/java/org/chorem/pollen/service/AbstractPollenServiceTest.java branches/pollen-2.0/pollen-service/src/test/java/org/chorem/pollen/service/UserServiceTest.java branches/pollen-2.0/pom.xml Modified: branches/pollen-2.0/pollen-persistence/pom.xml =================================================================== --- branches/pollen-2.0/pollen-persistence/pom.xml 2013-06-11 09:05:14 UTC (rev 3820) +++ branches/pollen-2.0/pollen-persistence/pom.xml 2013-06-12 08:27:48 UTC (rev 3821) @@ -41,6 +41,10 @@ <groupId>org.apache.commons</groupId> <artifactId>commons-lang3</artifactId> </dependency> + <dependency> + <groupId>commons-codec</groupId> + <artifactId>commons-codec</artifactId> + </dependency> <!--dependency> <groupId>org.nuiton</groupId> <artifactId>nuiton-utils</artifactId> Deleted: branches/pollen-2.0/pollen-persistence/src/main/java/org/chorem/pollen/persistence/JpaEntityIdFactoryIfNotEmpty.java =================================================================== --- branches/pollen-2.0/pollen-persistence/src/main/java/org/chorem/pollen/persistence/JpaEntityIdFactoryIfNotEmpty.java 2013-06-11 09:05:14 UTC (rev 3820) +++ branches/pollen-2.0/pollen-persistence/src/main/java/org/chorem/pollen/persistence/JpaEntityIdFactoryIfNotEmpty.java 2013-06-12 08:27:48 UTC (rev 3821) @@ -1,48 +0,0 @@ -package org.chorem.pollen.persistence; - -/* - * #%L - * Pollen :: Persistence - * $Id$ - * $HeadURL$ - * %% - * Copyright (C) 2009 - 2013 CodeLutin - * %% - * This program is free software: you can redistribute it and/or modify - * it under the terms of the GNU Affero 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 Public License for more details. - * - * You should have received a copy of the GNU Affero General Public License - * along with this program. If not, see <http://www.gnu.org/licenses/>. - * #L% - */ - -import org.apache.commons.lang3.StringUtils; -import org.nuiton.jpa.api.DefaultJpaEntityIdFactory; -import org.nuiton.jpa.api.JpaEntity; - -/** - * @author tchemit <chemit@codelutin.com> - * @since 2.0 - */ -public class JpaEntityIdFactoryIfNotEmpty extends DefaultJpaEntityIdFactory { - - @Override - public String newId(JpaEntity entity) { - String result; - boolean notEmpty = StringUtils.isNotEmpty(entity.getId()); - - if (notEmpty) { - result = entity.getId(); - } else { - result = super.newId(entity); - } - return result; - } -} Modified: branches/pollen-2.0/pollen-persistence/src/main/java/org/chorem/pollen/persistence/JpaPollenPersistenceContext.java =================================================================== --- branches/pollen-2.0/pollen-persistence/src/main/java/org/chorem/pollen/persistence/JpaPollenPersistenceContext.java 2013-06-11 09:05:14 UTC (rev 3820) +++ branches/pollen-2.0/pollen-persistence/src/main/java/org/chorem/pollen/persistence/JpaPollenPersistenceContext.java 2013-06-12 08:27:48 UTC (rev 3821) @@ -38,7 +38,7 @@ public class JpaPollenPersistenceContext extends AbstractJpaPollenPersistenceContext { public JpaPollenPersistenceContext(EntityManager entityManager) { - super(entityManager); + this(new PollenEntityIdFactory(), entityManager); } public JpaPollenPersistenceContext(JpaEntityIdFactory idGenerator, Added: branches/pollen-2.0/pollen-persistence/src/main/java/org/chorem/pollen/persistence/PollenEntityIdFactory.java =================================================================== --- branches/pollen-2.0/pollen-persistence/src/main/java/org/chorem/pollen/persistence/PollenEntityIdFactory.java (rev 0) +++ branches/pollen-2.0/pollen-persistence/src/main/java/org/chorem/pollen/persistence/PollenEntityIdFactory.java 2013-06-12 08:27:48 UTC (rev 3821) @@ -0,0 +1,22 @@ +package org.chorem.pollen.persistence; + +import com.google.common.base.Preconditions; +import org.chorem.pollen.persistence.entity.PollenEntities; +import org.nuiton.jpa.api.JpaEntity; +import org.nuiton.jpa.api.JpaEntityIdFactory; + +/** + * TODO + * + * @author tchemit <chemit@codelutin.com> + * @since 2.0 + */ +public class PollenEntityIdFactory implements JpaEntityIdFactory { + + @Override + public String newId(JpaEntity entity) { + Preconditions.checkNotNull(entity); + + return entity.getClass().getName() + '#' + PollenEntities.generateId(); + } +} Property changes on: branches/pollen-2.0/pollen-persistence/src/main/java/org/chorem/pollen/persistence/PollenEntityIdFactory.java ___________________________________________________________________ Added: svn:keywords + Author Date Id Revision Added: svn:eol-style + native Modified: branches/pollen-2.0/pollen-persistence/src/main/java/org/chorem/pollen/persistence/entity/PollenEntities.java =================================================================== --- branches/pollen-2.0/pollen-persistence/src/main/java/org/chorem/pollen/persistence/entity/PollenEntities.java 2013-06-11 09:05:14 UTC (rev 3820) +++ branches/pollen-2.0/pollen-persistence/src/main/java/org/chorem/pollen/persistence/entity/PollenEntities.java 2013-06-12 08:27:48 UTC (rev 3821) @@ -23,9 +23,14 @@ * #L% */ +import org.apache.commons.codec.DecoderException; +import org.apache.commons.codec.binary.Base64; +import org.apache.commons.codec.binary.Hex; import org.apache.commons.lang3.StringUtils; import org.nuiton.jpa.api.JpaEntity; +import java.util.UUID; + /** * TODO * @@ -35,13 +40,13 @@ public class PollenEntities { public static boolean isSimpleId(String id) { - return !id.contains("_"); + return !id.contains("#"); } public static String getSimpleId(JpaEntity e) { String result = e.getId(); if (result != null) { - result = StringUtils.substringAfter(result, "_").replaceAll("-", ""); + result = StringUtils.substringAfter(result, "#"); } return result; } @@ -49,13 +54,27 @@ public static <E extends JpaEntity> String getEntityId(Class<E> type, String simpleId) { StringBuilder result = new StringBuilder(type.getName()); - result.append("_"); - result.append(simpleId.substring(0, 8)).append('-'); - result.append(simpleId.substring(8, 12)).append('-'); - result.append(simpleId.substring(12, 16)).append('-'); - result.append(simpleId.substring(16, 20)).append('-'); - result.append(simpleId.substring(20)); + result.append('#'); + result.append(simpleId); return result.toString(); } + public static String generateId() { + // get uuid + String uuid = UUID.randomUUID().toString().replaceAll("-", ""); + + // decode in hexa decimal (reduce by 2 size of it) + byte[] decode; + try { + decode = Hex.decodeHex(uuid.toCharArray()); + } catch (DecoderException e) { + // can't happen! + throw new RuntimeException(e); + } + + // encode it in base64 (url safe version) + String result = Base64.encodeBase64URLSafeString(decode); + return result; + } + } Modified: branches/pollen-2.0/pollen-persistence/src/main/xmi/pollen.properties =================================================================== --- branches/pollen-2.0/pollen-persistence/src/main/xmi/pollen.properties 2013-06-11 09:05:14 UTC (rev 3820) +++ branches/pollen-2.0/pollen-persistence/src/main/xmi/pollen.properties 2013-06-12 08:27:48 UTC (rev 3821) @@ -19,8 +19,9 @@ # You should have received a copy of the GNU Affero General Public License # along with this program. If not, see <http://www.gnu.org/licenses/>. # #L% -### +###m model.tagValue.idFactory=true +model.tagValue.generatePropertyChangeListeners=true model.tagvalue.version=2.0 model.tagvalue.entitySuperClass=org.chorem.pollen.persistence.entity.AbstractJpaPollenEntity Modified: branches/pollen-2.0/pollen-persistence/src/test/java/org/chorem/pollen/persistence/entity/PollenEntitiesTest.java =================================================================== --- branches/pollen-2.0/pollen-persistence/src/test/java/org/chorem/pollen/persistence/entity/PollenEntitiesTest.java 2013-06-11 09:05:14 UTC (rev 3820) +++ branches/pollen-2.0/pollen-persistence/src/test/java/org/chorem/pollen/persistence/entity/PollenEntitiesTest.java 2013-06-12 08:27:48 UTC (rev 3821) @@ -23,9 +23,9 @@ * #L% */ +import org.chorem.pollen.persistence.PollenEntityIdFactory; import org.junit.Assert; import org.junit.Test; -import org.nuiton.jpa.api.DefaultJpaEntityIdFactory; import org.nuiton.jpa.api.JpaEntityIdFactoryResolver; /** @@ -37,7 +37,7 @@ @Test public void getSimpleId() { - JpaEntityIdFactoryResolver.setFactory(new DefaultJpaEntityIdFactory()); + JpaEntityIdFactoryResolver.setFactory(new PollenEntityIdFactory()); try { Poll poll = new Poll(); @@ -53,6 +53,5 @@ } finally { JpaEntityIdFactoryResolver.setFactory(null); } - } } Modified: branches/pollen-2.0/pollen-service/src/main/java/org/chorem/pollen/service/AbstractPollenService.java =================================================================== --- branches/pollen-2.0/pollen-service/src/main/java/org/chorem/pollen/service/AbstractPollenService.java 2013-06-11 09:05:14 UTC (rev 3820) +++ branches/pollen-2.0/pollen-service/src/main/java/org/chorem/pollen/service/AbstractPollenService.java 2013-06-12 08:27:48 UTC (rev 3821) @@ -59,8 +59,8 @@ return serviceContext.getNow(); } - protected String generateId() { - return serviceContext.generateUUID(); + protected String generateToken() { + return serviceContext.generateToken(); } protected PollenPersistenceContext getPersistenceContext() { Modified: branches/pollen-2.0/pollen-service/src/main/java/org/chorem/pollen/service/AuthService.java =================================================================== --- branches/pollen-2.0/pollen-service/src/main/java/org/chorem/pollen/service/AuthService.java 2013-06-11 09:05:14 UTC (rev 3820) +++ branches/pollen-2.0/pollen-service/src/main/java/org/chorem/pollen/service/AuthService.java 2013-06-12 08:27:48 UTC (rev 3821) @@ -57,7 +57,7 @@ SessionTokenJpaDao dao = getPersistenceContext().getSessionTokenDao(); SessionToken sessionToken = dao.newInstance(); - String token = serviceContext.generateUUID(); + String token = serviceContext.generateToken(); String encodedToken = serviceContext.encodePassword(token); sessionToken.setPollenUser(user); sessionToken.setToken(encodedToken); Modified: branches/pollen-2.0/pollen-service/src/main/java/org/chorem/pollen/service/DefaultPollenServiceContext.java =================================================================== --- branches/pollen-2.0/pollen-service/src/main/java/org/chorem/pollen/service/DefaultPollenServiceContext.java 2013-06-11 09:05:14 UTC (rev 3820) +++ branches/pollen-2.0/pollen-service/src/main/java/org/chorem/pollen/service/DefaultPollenServiceContext.java 2013-06-12 08:27:48 UTC (rev 3821) @@ -25,13 +25,13 @@ import org.apache.commons.lang3.RandomStringUtils; import org.chorem.pollen.persistence.PollenPersistenceContext; +import org.chorem.pollen.persistence.entity.PollenEntities; import org.chorem.pollen.service.config.PollenServiceConfig; import org.nuiton.util.StringUtil; import java.lang.reflect.Constructor; import java.lang.reflect.InvocationTargetException; import java.util.Date; -import java.util.UUID; public class DefaultPollenServiceContext implements PollenServiceContext { @@ -53,8 +53,8 @@ } @Override - public String generateUUID() { - return UUID.randomUUID().toString(); + public String generateToken() { + return PollenEntities.generateId(); } @Override Modified: branches/pollen-2.0/pollen-service/src/main/java/org/chorem/pollen/service/PollenServiceContext.java =================================================================== --- branches/pollen-2.0/pollen-service/src/main/java/org/chorem/pollen/service/PollenServiceContext.java 2013-06-11 09:05:14 UTC (rev 3820) +++ branches/pollen-2.0/pollen-service/src/main/java/org/chorem/pollen/service/PollenServiceContext.java 2013-06-12 08:27:48 UTC (rev 3821) @@ -34,7 +34,7 @@ */ public interface PollenServiceContext { - String generateUUID(); + String generateToken(); Date getNow(); Modified: branches/pollen-2.0/pollen-service/src/main/java/org/chorem/pollen/service/UserService.java =================================================================== --- branches/pollen-2.0/pollen-service/src/main/java/org/chorem/pollen/service/UserService.java 2013-06-11 09:05:14 UTC (rev 3820) +++ branches/pollen-2.0/pollen-service/src/main/java/org/chorem/pollen/service/UserService.java 2013-06-12 08:27:48 UTC (rev 3821) @@ -81,7 +81,7 @@ PollenUser toCreate = dao.newInstance(); // add a emailValidationToken - String emailValidationToken = generateId(); + String emailValidationToken = generateToken(); String password; if (generatePassword) { @@ -134,7 +134,7 @@ } // add a new emailValidationtoken - String emailValidationToken = generateId(); + String emailValidationToken = generateToken(); persisted.setEmailActivationToken(emailValidationToken); } Modified: branches/pollen-2.0/pollen-service/src/main/resources/fixtures.yaml =================================================================== --- branches/pollen-2.0/pollen-service/src/main/resources/fixtures.yaml 2013-06-11 09:05:14 UTC (rev 3820) +++ branches/pollen-2.0/pollen-service/src/main/resources/fixtures.yaml 2013-06-12 08:27:48 UTC (rev 3821) @@ -1,6 +1,5 @@ tony: &tony !user - id: pollen_user_tony login: tony password: fake name: T @@ -9,7 +8,6 @@ jean: &jean !user - id: pollen_user_jean login: jean password: fake name: J @@ -18,7 +16,6 @@ julien: &julien !user - id: pollen_user_julien login: julien password: fake name: J Modified: branches/pollen-2.0/pollen-service/src/test/java/org/chorem/pollen/service/AbstractPollenServiceTest.java =================================================================== --- branches/pollen-2.0/pollen-service/src/test/java/org/chorem/pollen/service/AbstractPollenServiceTest.java 2013-06-11 09:05:14 UTC (rev 3820) +++ branches/pollen-2.0/pollen-service/src/test/java/org/chorem/pollen/service/AbstractPollenServiceTest.java 2013-06-12 08:27:48 UTC (rev 3821) @@ -23,7 +23,6 @@ * #L% */ -import org.chorem.pollen.persistence.JpaEntityIdFactoryIfNotEmpty; import org.chorem.pollen.persistence.JpaPollenPersistenceContext; import org.chorem.pollen.service.config.PollenServiceConfig; import org.junit.Rule; @@ -66,8 +65,9 @@ EntityManager entityManager = getJpaEntityManagerRule().getEntityManager(); - JpaEntityIdFactoryIfNotEmpty idGenerator = new JpaEntityIdFactoryIfNotEmpty(); - JpaPollenPersistenceContext persistenceContext = new JpaPollenPersistenceContext(idGenerator, entityManager); +// JpaEntityIdFactoryIfNotEmpty idGenerator = new JpaEntityIdFactoryIfNotEmpty(); +// JpaPollenPersistenceContext persistenceContext = new JpaPollenPersistenceContext(idGenerator, entityManager); + JpaPollenPersistenceContext persistenceContext = new JpaPollenPersistenceContext(entityManager); serviceContext.setPersistenceContext(persistenceContext); } Modified: branches/pollen-2.0/pollen-service/src/test/java/org/chorem/pollen/service/UserServiceTest.java =================================================================== --- branches/pollen-2.0/pollen-service/src/test/java/org/chorem/pollen/service/UserServiceTest.java 2013-06-11 09:05:14 UTC (rev 3820) +++ branches/pollen-2.0/pollen-service/src/test/java/org/chorem/pollen/service/UserServiceTest.java 2013-06-12 08:27:48 UTC (rev 3821) @@ -81,7 +81,7 @@ Assert.assertTrue(true); } - PollenUser user = service.getUser("pollen_user_tony"); + PollenUser user = service.getUser(this.user.getId()); Assert.assertNotNull(user); Assert.assertEquals(this.user, user); @@ -134,7 +134,7 @@ @Test public void testEditUser() throws EntityNotFoundException, UserInvalidPasswordException, UserEmailAlreadyUsedException { - PollenUser user = service.getUser("pollen_user_tony"); + PollenUser user = service.getUser(this.user.getId()); Assert.assertNotNull(user); Assert.assertNull(user.getEmailActivationToken()); @@ -165,7 +165,7 @@ @Test public void testValidateEmail() throws EntityNotFoundException, UserInvalidPasswordException, UserEmailAlreadyUsedException, UserInvalidEmailActiviationTokenException { - PollenUser user = service.getUser("pollen_user_tony"); + PollenUser user = service.getUser(this.user.getId()); Assert.assertNotNull(user); Assert.assertNull(user.getEmailActivationToken()); @@ -194,7 +194,7 @@ - PollenUser reloadedUser = service.getUser("pollen_user_tony"); + PollenUser reloadedUser = service.getUser(this.user.getId()); Assert.assertTrue(reloadedUser.isEmailActivated()); } Modified: branches/pollen-2.0/pom.xml =================================================================== --- branches/pollen-2.0/pom.xml 2013-06-11 09:05:14 UTC (rev 3820) +++ branches/pollen-2.0/pom.xml 2013-06-12 08:27:48 UTC (rev 3821) @@ -379,8 +379,6 @@ <version>1.0</version> </dependency> - - <!-- Logging --> <dependency> @@ -393,6 +391,12 @@ <!-- Others --> <dependency> + <groupId>commons-codec</groupId> + <artifactId>commons-codec</artifactId> + <version>1.6</version> + </dependency> + + <dependency> <groupId>javax.mail</groupId> <artifactId>mail</artifactId> <version>1.4.7</version>