r63 - in trunk: . magalie-persistence/src/main/java/com/franciaflex/magalie magalie-services/src/main magalie-services/src/main/java/com/franciaflex/magalie/services magalie-services/src/main/java/com/franciaflex/magalie/services/service magalie-services/src/main/resources magalie-services/src/test/java/com/franciaflex/magalie/services magalie-services/src/test/resources magalie-web/src/main/java/com/franciaflex/magalie/web
Author: bleny Date: 2013-03-29 18:12:01 +0100 (Fri, 29 Mar 2013) New Revision: 63 Url: http://forge.codelutin.com/projects/franciaflex-magalie/repository/revisions... Log: makes fixtures a service in itself, load fixtures at application startup Added: trunk/magalie-services/src/main/java/com/franciaflex/magalie/services/MagalieFixtures.java trunk/magalie-services/src/main/java/com/franciaflex/magalie/services/service/FixturesService.java trunk/magalie-services/src/main/resources/ trunk/magalie-services/src/main/resources/fixtures.yaml Removed: trunk/magalie-services/src/test/java/com/franciaflex/magalie/services/MagalieFixtures.java trunk/magalie-services/src/test/resources/fixtures.yaml Modified: trunk/magalie-persistence/src/main/java/com/franciaflex/magalie/MagalieApplicationConfig.java trunk/magalie-services/src/main/java/com/franciaflex/magalie/services/DefaultMagalieServiceContext.java trunk/magalie-services/src/test/java/com/franciaflex/magalie/services/AbstractMagalieServiceTest.java trunk/magalie-web/src/main/java/com/franciaflex/magalie/web/MagalieInterceptor.java trunk/pom.xml Modified: trunk/magalie-persistence/src/main/java/com/franciaflex/magalie/MagalieApplicationConfig.java =================================================================== --- trunk/magalie-persistence/src/main/java/com/franciaflex/magalie/MagalieApplicationConfig.java 2013-03-29 14:21:44 UTC (rev 62) +++ trunk/magalie-persistence/src/main/java/com/franciaflex/magalie/MagalieApplicationConfig.java 2013-03-29 17:12:01 UTC (rev 63) @@ -47,4 +47,8 @@ return jpaParameters; } + public boolean isDevMode() { + boolean isDevMode = applicationConfig.getOptionAsBoolean(MagalieConfigOption.DEV_MODE.key); + return isDevMode; + } } Modified: trunk/magalie-services/src/main/java/com/franciaflex/magalie/services/DefaultMagalieServiceContext.java =================================================================== --- trunk/magalie-services/src/main/java/com/franciaflex/magalie/services/DefaultMagalieServiceContext.java 2013-03-29 14:21:44 UTC (rev 62) +++ trunk/magalie-services/src/main/java/com/franciaflex/magalie/services/DefaultMagalieServiceContext.java 2013-03-29 17:12:01 UTC (rev 63) @@ -34,6 +34,10 @@ this.entityManager = entityManager; } + public EntityManager getEntityManager() { + return entityManager; + } + @Override public MagalieApplicationConfig getMagalieApplicationConfig() { return magalieApplicationConfig; Copied: trunk/magalie-services/src/main/java/com/franciaflex/magalie/services/MagalieFixtures.java (from rev 40, trunk/magalie-services/src/test/java/com/franciaflex/magalie/services/MagalieFixtures.java) =================================================================== --- trunk/magalie-services/src/main/java/com/franciaflex/magalie/services/MagalieFixtures.java (rev 0) +++ trunk/magalie-services/src/main/java/com/franciaflex/magalie/services/MagalieFixtures.java 2013-03-29 17:12:01 UTC (rev 63) @@ -0,0 +1,47 @@ +package com.franciaflex.magalie.services; + +import com.esotericsoftware.yamlbeans.YamlException; +import com.esotericsoftware.yamlbeans.YamlReader; +import com.franciaflex.magalie.MagalieTechnicalException; +import com.franciaflex.magalie.persistence.entity.Article; +import com.franciaflex.magalie.persistence.entity.MagalieUser; +import com.franciaflex.magalie.persistence.entity.RequestedArticle; +import com.franciaflex.magalie.persistence.entity.Site; +import com.franciaflex.magalie.persistence.entity.StoredArticle; +import org.apache.commons.io.Charsets; +import org.apache.commons.io.IOUtils; + +import java.io.IOException; +import java.io.InputStream; +import java.util.Map; + +public class MagalieFixtures { + + protected Map<String, Object> fixtures; + + public MagalieFixtures(String fixturesName) { + String yamlPath = "/" + fixturesName + ".yaml"; + InputStream inputStream = MagalieFixtures.class.getResourceAsStream(yamlPath); + String yaml; + try { + yaml = IOUtils.toString(inputStream, Charsets.UTF_8); + } catch (IOException e) { + throw new IllegalArgumentException(fixturesName + " is not a valid fixtures set name", e); + } + YamlReader reader = new YamlReader(yaml); + reader.getConfig().setClassTag("article", Article.class); + reader.getConfig().setClassTag("stored-article", StoredArticle.class); + reader.getConfig().setClassTag("user", MagalieUser.class); + reader.getConfig().setClassTag("requested-article", RequestedArticle.class); + reader.getConfig().setClassTag("site", Site.class); + try { + fixtures = (Map<String, Object>) reader.read(); + } catch (YamlException e) { + throw new MagalieTechnicalException("unable to read yaml file", e); + } + } + + public <E> E fixture(String id) { + return (E) fixtures.get(id); + } +} Added: trunk/magalie-services/src/main/java/com/franciaflex/magalie/services/service/FixturesService.java =================================================================== --- trunk/magalie-services/src/main/java/com/franciaflex/magalie/services/service/FixturesService.java (rev 0) +++ trunk/magalie-services/src/main/java/com/franciaflex/magalie/services/service/FixturesService.java 2013-03-29 17:12:01 UTC (rev 63) @@ -0,0 +1,128 @@ +package com.franciaflex.magalie.services.service; + +import com.franciaflex.magalie.persistence.dao.ArticleDao; +import com.franciaflex.magalie.persistence.dao.MagalieUserDao; +import com.franciaflex.magalie.persistence.dao.SiteDao; +import com.franciaflex.magalie.persistence.dao.StoredArticleDao; +import com.franciaflex.magalie.persistence.entity.Article; +import com.franciaflex.magalie.persistence.entity.MagalieUser; +import com.franciaflex.magalie.persistence.entity.Site; +import com.franciaflex.magalie.persistence.entity.StoredArticle; +import com.franciaflex.magalie.services.DefaultMagalieServiceContext; +import com.franciaflex.magalie.services.MagalieFixtures; +import com.franciaflex.magalie.services.MagalieService; +import com.franciaflex.magalie.services.MagalieServiceContext; +import com.google.common.collect.Iterables; +import org.apache.commons.logging.Log; +import org.apache.commons.logging.LogFactory; + +import javax.persistence.EntityManager; +import java.util.Collection; + +public class FixturesService implements MagalieService { + + private static final Log log = LogFactory.getLog(FixturesService.class); + + protected MagalieServiceContext serviceContext; + + protected static MagalieFixtures fixtures; + + @Override + public void setServiceContext(MagalieServiceContext serviceContext) { + this.serviceContext = serviceContext; + } + + public void loadFixtures() { + + boolean devMode = serviceContext.getMagalieApplicationConfig().isDevMode(); + + if (devMode) { + + if (fixtures == null) { + + fixtures = new MagalieFixtures("fixtures"); + + } + + if (log.isInfoEnabled()) { + log.info("will restore database with fixture set"); + } + + EntityManager entityManager = + ((DefaultMagalieServiceContext) serviceContext).getEntityManager(); + +// entityManager. +// MetadataImplementor getDatabase +// ull; +// try { +// conn = getConnection(); +// metadata = new DatabaseMetadata(conn, dialect); +// DROP_SCRIPTS = config.generateDropSchemaScript(dialect); +// CREATE_SCRIPTS = config.generateSchemaCreationScript(dialect); +// } finally { +// close(conn); +// } + +// ((org.hibernate.service.internal.SessionFactoryServiceRegistryImpl) ((org.hibernate.ejb.EntityManagerFactoryImpl) entityManager.getEntityManagerFactory()).getSessionFactory().getServiceRegistry()) +// +// ((SessionImpl) entityManager.getDelegate()).get + + MagalieUserDao magalieUserDao = serviceContext.getMagalieUserDao(); + + Collection<MagalieUser> users = fixtures.fixture("users"); + + boolean alreadyLoaded = magalieUserDao.findById(Iterables.get(users, 0).getId()) != null; + + if ( ! alreadyLoaded) { + + for (MagalieUser user : users) { + + magalieUserDao.persist(user); + + } + + SiteDao siteDao = serviceContext.getSiteDao(); + + Collection<Site> sites = fixtures.fixture("sites"); + + for (Site site : sites) { + + siteDao.persist(site); + + } + + ArticleDao articleDao = serviceContext.getArticleDao(); + + Collection<Article> articles = fixtures.fixture("articles"); + + for (Article article : articles) { + + articleDao.persist(article); + + } + + StoredArticleDao storedArticleDao = serviceContext.getStoredArticleDao(); + + Collection<StoredArticle> storedArticles = fixtures.fixture("storedArticles"); + + for (StoredArticle storedArticle : storedArticles) { + + storedArticleDao.persist(storedArticle); + + } + } + + } else { + + if (log.isWarnEnabled()) { + log.warn("tried to load fixtures with devMode disabled, did nothing"); + } + + } + + } + + public <E> E fixture(String id) { + return fixtures.fixture(id); + } +} Copied: trunk/magalie-services/src/main/resources/fixtures.yaml (from rev 45, trunk/magalie-services/src/test/resources/fixtures.yaml) =================================================================== --- trunk/magalie-services/src/main/resources/fixtures.yaml (rev 0) +++ trunk/magalie-services/src/main/resources/fixtures.yaml 2013-03-29 17:12:01 UTC (rev 63) @@ -0,0 +1,146 @@ +alexandre: + &alexandre !user + id: magalie_user_alexandre + login: ale + name: Alexandre + accreditationLevel: 9 + +basile: + &basile !user + id: magalie_user_basile + login: bas + name: Basile + accreditationLevel: 0 + +cathy: + &cathy !user + id: magalie_user_cathy + login: cat + name: Cathy + accreditationLevel: 9 + +david: + &david !user + id: magalie_user_david + login: dav + name: David + accreditationLevel: 0 + +users: + - *alexandre + - *basile + - *cathy + - *david + +site1: + &site1 !site + id: site1 + storeCode: UO1 + locationCode: A1 + requiredAccreditationLevel: 0 + +site2: + &site2 !site + id: site2 + storeCode: UO1 + locationCode: B2 + requiredAccreditationLevel: 9 + +site3: + &site3 !site + id: site3 + storeCode: UO1 + locationCode: C3 + requiredAccreditationLevel: 0 + +site4: + &site4 !site + id: site4 + storeCode: UO1 + locationCode: D4 + requiredAccreditationLevel: 9 + +site5: + &site5 !site + id: site5 + storeCode: UO2 + locationCode: A1 + requiredAccreditationLevel: 0 + +sites: + - *site1 + - *site2 + - *site3 + - *site4 + - *site5 + +article1: + &article1 !article + id: article1 + fixedSites: + - *site1 + code: 111111111 + quantityInKanban: 10 + unit: kg + description: very big screws + +article2: + &article2 !article + id: article2 + code: 222222222 + quantityInKanban: 2 + unit: box + description: little buttons + +article3: + &article3 !article + id: article3 + fixedSites: + - *site2 + code: 333333333 + quantityInKanban: 50 + unit: g + description: magic powder + +articles: + - *article1 + - *article2 + - *article3 + +storedArticle1: + &storedArticle1 !stored-article + id: storedArticle1 + article: *article1 + site: *site1 + quantity: 50 + +storedArticle2: + &storedArticle2 !stored-article + id: storedArticle2 + article: *article1 + site: *site2 + quantity: 20 + +storedArticle3: + &storedArticle3 !stored-article + id: storedArticle3 + article: *article2 + site: *site1 + quantity: 10 + +storedArticle4: + &storedArticle4 !stored-article + id: storedArticle4 + article: *article3 + site: *site4 + quantity: 1000 + +storedArticles: + - *storedArticle1 + - *storedArticle2 + - *storedArticle3 + - *storedArticle4 + +storedArticlesForArticle1: + - *storedArticle1 + - *storedArticle2 Modified: trunk/magalie-services/src/test/java/com/franciaflex/magalie/services/AbstractMagalieServiceTest.java =================================================================== --- trunk/magalie-services/src/test/java/com/franciaflex/magalie/services/AbstractMagalieServiceTest.java 2013-03-29 14:21:44 UTC (rev 62) +++ trunk/magalie-services/src/test/java/com/franciaflex/magalie/services/AbstractMagalieServiceTest.java 2013-03-29 17:12:01 UTC (rev 63) @@ -1,14 +1,10 @@ package com.franciaflex.magalie.services; import com.franciaflex.magalie.MagalieApplicationConfig; -import com.franciaflex.magalie.persistence.entity.AbstractEntity; -import com.google.common.collect.Lists; +import com.franciaflex.magalie.services.service.FixturesService; import org.junit.Rule; import javax.persistence.EntityManager; -import javax.persistence.EntityTransaction; -import java.util.Collection; -import java.util.List; import java.util.Map; public abstract class AbstractMagalieServiceTest { @@ -23,6 +19,8 @@ protected FakeMagalieServiceContext serviceContext; + protected FixturesService fixturesService; + protected static MagalieApplicationConfig getMagalieApplicationConfig() { if (magalieApplicationConfig == null) { @@ -35,23 +33,6 @@ } - public static MagalieFixtures getFixtures() { - - if (fixtures == null) { - - fixtures = new MagalieFixtures("fixtures"); - - } - - return fixtures; - } - - protected static <E> E fixture(String id) { - - return getFixtures().fixture(id); - - } - protected MagalieServiceContext getServiceContext() { if (serviceContext == null) { @@ -64,32 +45,25 @@ serviceContext.setEntityManager(entityManager); - MagalieFixtures fixtures = getFixtures(); + this.serviceContext = serviceContext; - List<AbstractEntity> toPersist = Lists.newArrayList(); + } - toPersist.addAll(fixtures.<Collection<? extends AbstractEntity>>fixture("users")); - toPersist.addAll(fixtures.<Collection<? extends AbstractEntity>>fixture("sites")); - toPersist.addAll(fixtures.<Collection<? extends AbstractEntity>>fixture("articles")); - toPersist.addAll(fixtures.<Collection<? extends AbstractEntity>>fixture("storedArticles")); + return serviceContext; - EntityTransaction transaction = entityManager.getTransaction(); + } - transaction.begin(); + protected <E> E fixture(String id) { - for (AbstractEntity entity : toPersist) { + if (fixturesService == null) { - entityManager.persist(entity); + fixturesService = getServiceContext().newService(FixturesService.class); - } + fixturesService.loadFixtures(); - transaction.commit(); - - this.serviceContext = serviceContext; - } - return serviceContext; + return fixturesService.fixture(id); } Deleted: trunk/magalie-services/src/test/java/com/franciaflex/magalie/services/MagalieFixtures.java =================================================================== --- trunk/magalie-services/src/test/java/com/franciaflex/magalie/services/MagalieFixtures.java 2013-03-29 14:21:44 UTC (rev 62) +++ trunk/magalie-services/src/test/java/com/franciaflex/magalie/services/MagalieFixtures.java 2013-03-29 17:12:01 UTC (rev 63) @@ -1,47 +0,0 @@ -package com.franciaflex.magalie.services; - -import com.esotericsoftware.yamlbeans.YamlException; -import com.esotericsoftware.yamlbeans.YamlReader; -import com.franciaflex.magalie.MagalieTechnicalException; -import com.franciaflex.magalie.persistence.entity.Article; -import com.franciaflex.magalie.persistence.entity.MagalieUser; -import com.franciaflex.magalie.persistence.entity.RequestedArticle; -import com.franciaflex.magalie.persistence.entity.Site; -import com.franciaflex.magalie.persistence.entity.StoredArticle; -import org.apache.commons.io.Charsets; -import org.apache.commons.io.IOUtils; - -import java.io.IOException; -import java.io.InputStream; -import java.util.Map; - -public class MagalieFixtures { - - protected Map<String, Object> fixtures; - - public MagalieFixtures(String fixturesName) { - String yamlPath = "/" + fixturesName + ".yaml"; - InputStream inputStream = MagalieFixtures.class.getResourceAsStream(yamlPath); - String yaml; - try { - yaml = IOUtils.toString(inputStream, Charsets.UTF_8); - } catch (IOException e) { - throw new IllegalArgumentException(fixturesName + " is not a valid fixtures set name", e); - } - YamlReader reader = new YamlReader(yaml); - reader.getConfig().setClassTag("article", Article.class); - reader.getConfig().setClassTag("stored-article", StoredArticle.class); - reader.getConfig().setClassTag("user", MagalieUser.class); - reader.getConfig().setClassTag("requested-article", RequestedArticle.class); - reader.getConfig().setClassTag("site", Site.class); - try { - fixtures = (Map<String, Object>) reader.read(); - } catch (YamlException e) { - throw new MagalieTechnicalException("unable to read yaml file", e); - } - } - - public <E> E fixture(String id) { - return (E) fixtures.get(id); - } -} Deleted: trunk/magalie-services/src/test/resources/fixtures.yaml =================================================================== --- trunk/magalie-services/src/test/resources/fixtures.yaml 2013-03-29 14:21:44 UTC (rev 62) +++ trunk/magalie-services/src/test/resources/fixtures.yaml 2013-03-29 17:12:01 UTC (rev 63) @@ -1,146 +0,0 @@ -alexandre: - &alexandre !user - id: magalie_user_alexandre - login: ale - name: Alexandre - accreditationLevel: 9 - -basile: - &basile !user - id: magalie_user_basile - login: bas - name: Basile - accreditationLevel: 0 - -cathy: - &cathy !user - id: magalie_user_cathy - login: cat - name: Cathy - accreditationLevel: 9 - -david: - &david !user - id: magalie_user_david - login: dav - name: David - accreditationLevel: 0 - -users: - - *alexandre - - *basile - - *cathy - - *david - -site1: - &site1 !site - id: site1 - storeCode: UO1 - locationCode: A1 - requiredAccreditationLevel: 0 - -site2: - &site2 !site - id: site2 - storeCode: UO1 - locationCode: B2 - requiredAccreditationLevel: 9 - -site3: - &site3 !site - id: site3 - storeCode: UO1 - locationCode: C3 - requiredAccreditationLevel: 0 - -site4: - &site4 !site - id: site4 - storeCode: UO1 - locationCode: D4 - requiredAccreditationLevel: 9 - -site5: - &site5 !site - id: site5 - storeCode: UO2 - locationCode: A1 - requiredAccreditationLevel: 0 - -sites: - - *site1 - - *site2 - - *site3 - - *site4 - - *site5 - -article1: - &article1 !article - id: article1 - fixedSites: - - *site1 - code: 111111111 - quantityInKanban: 10 - unit: kg - description: very big screws - -article2: - &article2 !article - id: article2 - code: 222222222 - quantityInKanban: 2 - unit: box - description: little buttons - -article3: - &article3 !article - id: article3 - fixedSites: - - *site2 - code: 333333333 - quantityInKanban: 50 - unit: g - description: magic powder - -articles: - - *article1 - - *article2 - - *article3 - -storedArticle1: - &storedArticle1 !stored-article - id: storedArticle1 - article: *article1 - site: *site1 - quantity: 50 - -storedArticle2: - &storedArticle2 !stored-article - id: storedArticle2 - article: *article1 - site: *site2 - quantity: 20 - -storedArticle3: - &storedArticle3 !stored-article - id: storedArticle3 - article: *article2 - site: *site1 - quantity: 10 - -storedArticle4: - &storedArticle4 !stored-article - id: storedArticle4 - article: *article3 - site: *site4 - quantity: 1000 - -storedArticles: - - *storedArticle1 - - *storedArticle2 - - *storedArticle3 - - *storedArticle4 - -storedArticlesForArticle1: - - *storedArticle1 - - *storedArticle2 Modified: trunk/magalie-web/src/main/java/com/franciaflex/magalie/web/MagalieInterceptor.java =================================================================== --- trunk/magalie-web/src/main/java/com/franciaflex/magalie/web/MagalieInterceptor.java 2013-03-29 14:21:44 UTC (rev 62) +++ trunk/magalie-web/src/main/java/com/franciaflex/magalie/web/MagalieInterceptor.java 2013-03-29 17:12:01 UTC (rev 63) @@ -27,6 +27,7 @@ import com.franciaflex.magalie.services.DefaultMagalieServiceContext; import com.franciaflex.magalie.services.MagalieService; import com.franciaflex.magalie.services.MagalieServiceContext; +import com.franciaflex.magalie.services.service.FixturesService; import com.google.common.base.Preconditions; import com.opensymphony.xwork2.ActionInvocation; import com.opensymphony.xwork2.interceptor.Interceptor; @@ -48,6 +49,8 @@ private static final Log log = LogFactory.getLog(MagalieInterceptor.class); + protected boolean fixturesLoaded = false; + @Override public void init() { // nothing to do @@ -67,6 +70,16 @@ MagalieServiceContext serviceContext = newServiceContext(invocation); + if ( ! fixturesLoaded && serviceContext.getMagalieApplicationConfig().isDevMode()) { + + FixturesService fixturesService = serviceContext.newService(FixturesService.class); + + fixturesService.loadFixtures(); + + fixturesLoaded = true; + + } + for (PropertyDescriptor propertyDescriptor : descriptors) { Class<?> propertyType = propertyDescriptor.getPropertyType(); @@ -161,6 +174,12 @@ serviceContext.setEntityManager(entityManager); + MagalieApplicationContext magalieApplicationContext = getMagalieApplicationContext(invocation); + + MagalieApplicationConfig magalieApplicationConfig = magalieApplicationContext.getMagalieApplicationConfig(); + + serviceContext.setMagalieApplicationConfig(magalieApplicationConfig); + return serviceContext; } Modified: trunk/pom.xml =================================================================== --- trunk/pom.xml 2013-03-29 14:21:44 UTC (rev 62) +++ trunk/pom.xml 2013-03-29 17:12:01 UTC (rev 63) @@ -266,7 +266,6 @@ <groupId>com.esotericsoftware.yamlbeans</groupId> <artifactId>yamlbeans</artifactId> <version>1.06</version> - <scope>test</scope> </dependency> </dependencies>
participants (1)
-
bleny@users.forge.codelutin.com