Author: tchemit Date: 2013-01-07 23:58:44 +0100 (Mon, 07 Jan 2013) New Revision: 156 Url: http://forge.codelutin.com/projects/tutti/repository/revisions/156 Log: refs #1807: [Persistence] Adagio r?\195?\169f?\195?\169rentiel (mise en place technique) Added: trunk/tutti-persistence-adagio/src/main/resources/META-INF/services/org.nuiton.util.ApplicationConfigProvider trunk/tutti-persistence-adagio/src/main/resources/tutti-db-conf.properties trunk/tutti-persistence-adagio/src/main/resources/tutti-db-enumerations.properties trunk/tutti-persistence-adagio/src/test/java/fr/ifremer/tutti/persistence/TestUtil.java trunk/tutti-persistence-adagio/src/test/java/fr/ifremer/tutti/persistence/TuttiPersistenceAdagioImplTest.java trunk/tutti-persistence/src/main/java/fr/ifremer/tutti/persistence/RessourceClassLoader.java Removed: trunk/tutti-persistence-adagio/src/main/resources/META-INF/services/fr.ifremer.tutti.persistence.TuttiPersistence trunk/tutti-persistence-adagio/src/test/resources/conf.properties trunk/tutti-persistence-dev/src/main/resources/META-INF/services/fr.ifremer.tutti.persistence.TuttiPersistence Modified: trunk/pom.xml trunk/tutti-persistence-adagio/pom.xml trunk/tutti-persistence-adagio/src/main/java/fr/ifremer/tutti/persistence/TuttiPersistenceAdagioImpl.java trunk/tutti-persistence-adagio/src/main/java/fr/ifremer/tutti/persistence/config/TuttiPersistenceAdagioConfig.java trunk/tutti-persistence-adagio/src/main/java/fr/ifremer/tutti/persistence/config/TuttiPersistenceAdagioConfigOption.java trunk/tutti-persistence-adagio/src/main/resources/applicationContext-service-tutti.xml trunk/tutti-persistence-adagio/src/main/resources/queries-override.hbm.xml trunk/tutti-persistence-adagio/src/test/java/fr/ifremer/tutti/persistence/BaseDaoTest.java trunk/tutti-persistence-adagio/src/test/java/fr/ifremer/tutti/persistence/GearDaoTest.java trunk/tutti-persistence-adagio/src/test/java/fr/ifremer/tutti/persistence/ProgramDaoTest.java trunk/tutti-persistence-adagio/src/test/java/fr/ifremer/tutti/persistence/VesselDaoTest.java trunk/tutti-persistence-adagio/src/test/resources/tutti-test.properties trunk/tutti-persistence-dev/src/main/java/fr/ifremer/tutti/persistence/TuttiPersistenceDevImpl.java trunk/tutti-persistence-dev/src/test/java/fr/ifremer/tutti/persistence/TuttiPersistenceDevImplTest.java trunk/tutti-persistence/src/main/java/fr/ifremer/tutti/persistence/TuttiPersistence.java trunk/tutti-service/pom.xml trunk/tutti-service/src/main/java/fr/ifremer/tutti/service/PersistenceService.java trunk/tutti-service/src/main/java/fr/ifremer/tutti/service/TuttiServiceContext.java trunk/tutti-service/src/main/java/fr/ifremer/tutti/service/config/TuttiServiceConfig.java trunk/tutti-ui-swing/pom.xml trunk/tutti-ui-swing/src/license/THIRD-PARTY.properties trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/RunTutti.java trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/TuttiUIContext.java trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/config/TuttiConfig.java trunk/tutti-ui-swing/src/main/resources/fr/ifremer/tutti/ui/swing/content/operation/EditFishingOperationUIModel-warning-validation.xml trunk/tutti-ui-swing/src/main/resources/log4j.properties Modified: trunk/pom.xml =================================================================== --- trunk/pom.xml 2013-01-07 16:42:45 UTC (rev 155) +++ trunk/pom.xml 2013-01-07 22:58:44 UTC (rev 156) @@ -38,7 +38,7 @@ <modules> <module>tutti-persistence</module> <module>tutti-persistence-dev</module> - <!--module>tutti-persistence-adagio</module--> + <module>tutti-persistence-adagio</module> <module>tutti-service</module> <module>tutti-ui-swing</module> </modules> @@ -77,6 +77,17 @@ </roles> <timezone>Europe/Paris</timezone> </developer> + <developer> + <id>morin</id> + <name>Kevin Morin</name> + <email>morin at codelutin dot com</email> + <organization>CodeLutin</organization> + <organizationUrl>http://www.codelutin.com</organizationUrl> + <roles> + <role>developer</role> + </roles> + <timezone>Europe/Paris</timezone> + </developer> </developers> <scm> @@ -105,7 +116,7 @@ <!-- libraries version --> - <nuitonUtilsVersion>2.6.5</nuitonUtilsVersion> + <nuitonUtilsVersion>2.7-SNAPSHOT</nuitonUtilsVersion> <nuitonI18nVersion>2.5</nuitonI18nVersion> <eugenePluginVersion>2.6</eugenePluginVersion> @@ -122,7 +133,7 @@ <adagioVersion>3.3.1-SNAPSHOT</adagioVersion> <msaccessImporterVersion>1.4.1</msaccessImporterVersion> - + <i18n.bundles>fr_FR</i18n.bundles> <i18n.silent>true</i18n.silent> @@ -204,13 +215,13 @@ <groupId>org.nuiton.jaxx</groupId> <artifactId>jaxx-validator</artifactId> <version>${jaxxVersion}</version> - </dependency> + </dependency> <dependency> <groupId>org.nuiton.jaxx</groupId> <artifactId>jaxx-widgets</artifactId> <version>${jaxxVersion}</version> - </dependency> + </dependency> <dependency> <groupId>org.nuiton.jaxx</groupId> @@ -370,11 +381,9 @@ <scope>test</scope> </dependency> - <!-- Runtime --> <dependency> <groupId>hsqldb</groupId> <artifactId>hsqldb</artifactId> - <scope>runtime</scope> <version>${jdbc.hsqldb.version}</version> </dependency> @@ -405,6 +414,16 @@ <artifactId>doxia-module-jrst</artifactId> <version>${jrstPluginVersion}</version> </dependency> + <dependency> + <groupId>hsqldb</groupId> + <artifactId>hsqldb</artifactId> + <version>${jdbc.hsqldb.version}</version> + </dependency> + <dependency> + <groupId>org.hibernate</groupId> + <artifactId>hibernate-core</artifactId> + <version>${hibernateVersion}</version> + </dependency> </dependencies> </plugin> @@ -482,13 +501,13 @@ <profiles> <profile> - <id>license-profile</id> - <activation> - <property> - <name>performRelease</name> - <value>true</value> - </property> - </activation> + <id>license-profile</id> + <activation> + <property> + <name>performRelease</name> + <value>true</value> + </property> + </activation> <build> <defaultGoal>generate-resources</defaultGoal> @@ -504,8 +523,12 @@ </goals> <phase>generate-resources</phase> <configuration> - <roots><root>${project.basedir}</root></roots> - <includes><include>pom.xml</include></includes> + <roots> + <root>${project.basedir}</root> + </roots> + <includes> + <include>pom.xml</include> + </includes> <addSvnKeyWords>false</addSvnKeyWords> <verbose>false</verbose> </configuration> Added: trunk/tutti-persistence/src/main/java/fr/ifremer/tutti/persistence/RessourceClassLoader.java =================================================================== --- trunk/tutti-persistence/src/main/java/fr/ifremer/tutti/persistence/RessourceClassLoader.java (rev 0) +++ trunk/tutti-persistence/src/main/java/fr/ifremer/tutti/persistence/RessourceClassLoader.java 2013-01-07 22:58:44 UTC (rev 156) @@ -0,0 +1,183 @@ +package fr.ifremer.tutti.persistence; + +/* + * #%L + * Tutti :: Persistence API + * $Id$ + * $HeadURL$ + * %% + * Copyright (C) 2012 - 2013 Ifremer + * %% + * This program is free software: you can redistribute it and/or modify + * it under the terms of the GNU 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 General Public + * License along with this program. If not, see + * <http://www.gnu.org/licenses/gpl-3.0.html>. + * #L% + */ + +import com.google.common.base.Preconditions; +import com.google.common.base.Predicate; +import com.google.common.base.Predicates; +import com.google.common.collect.Lists; +import org.apache.commons.io.FileUtils; +import org.apache.commons.logging.Log; +import org.apache.commons.logging.LogFactory; + +import java.io.File; +import java.io.IOException; +import java.net.URL; +import java.net.URLClassLoader; +import java.util.Enumeration; +import java.util.List; + +/** + * A class loader that search first in a given directory before in parent + * class loader. + * + * @author tchemit <chemit@codelutin.com> + * @since 0.3 + */ +public class RessourceClassLoader extends ClassLoader { + + /** Logger. */ + private static final Log log = + LogFactory.getLog(RessourceClassLoader.class); + + public static final URL[] EMPTY_URL_ARRAY = new URL[0]; + + protected URLClassLoader loader; + + protected Predicate<String> searchInDirectoriesPredicate; + + protected final List<File> directories; + + public RessourceClassLoader(ClassLoader parent) { + super(parent); + + // by default try in directories if there is some + this.searchInDirectoriesPredicate = new Predicate<String>() { + @Override + public boolean apply(String input) { + return !directories.isEmpty(); + } + }; + directories = Lists.newArrayList(); + loader = URLClassLoader.newInstance(EMPTY_URL_ARRAY); + } + + public void addDirectory(File... directories) throws IOException { + for (File directory : directories) { + if (!this.directories.contains(directory)) { + this.directories.add(directory); + } + } + loader = null; + } + + public void removeDirectory(File... directories) { + for (File directory : directories) { + this.directories.remove(directory); + } + loader = null; + } + + public Predicate<String> getSearchInDirectoriesPredicate() { + return searchInDirectoriesPredicate; + } + + public void addSearchInDirectoriesPredicate(Predicate<String> predicate) { + Preconditions.checkNotNull(predicate, + "search predicate can not be null"); + this.searchInDirectoriesPredicate = Predicates.and(searchInDirectoriesPredicate, predicate); + } + public void setSearchInDirectoriesPredicate(Predicate<String> searchInDirectoriesPredicate) { + Preconditions.checkNotNull(searchInDirectoriesPredicate, + "search predicate can not be null"); + this.searchInDirectoriesPredicate = searchInDirectoriesPredicate; + } + + @Override + public URL findResource(String name) { + URL result = null; + if (searchInDirectoriesPredicate.apply(name)) { + if (log.isInfoEnabled()) { + log.info("findResource [" + name + "] in [" + directories + ']'); + } + result = getLoader().findResource(name); + } + if (result == null) { + result = super.findResource(name); + } + return result; + } + + @Override + public Enumeration<URL> findResources(String name) throws IOException { + Enumeration<URL> result = null; + if (searchInDirectoriesPredicate.apply(name)) { + if (log.isInfoEnabled()) { + log.info("findResources [" + name + "] in [" + directories + ']'); + } + result = getLoader().findResources(name); + } + if (result == null || !result.hasMoreElements()) { + result = super.findResources(name); + } + return result; + } + + @Override + public URL getResource(String name) { + URL result = null; + if (searchInDirectoriesPredicate.apply(name)) { + if (log.isInfoEnabled()) { + log.info("getResource [" + name + "] in [" + + directories + ']'); + } + result = getLoader().getResource(name); + } + if (result == null) { + result = super.getResource(name); + } + return result; + } + + @Override + public Enumeration<URL> getResources(String name) throws IOException { + Enumeration<URL> result = null; + if (searchInDirectoriesPredicate.apply(name)) { + if (log.isInfoEnabled()) { + log.info("getResources [" + name + "] in [" + directories + ']'); + } + result = getLoader().getResources(name); + } + if (result == null || !result.hasMoreElements()) { + result = super.getResources(name); + } + return result; + } + + protected URLClassLoader getLoader() { + if (loader == null) { + try { + URL[] urls = FileUtils.toURLs( + directories.toArray(new File[directories.size()])); + loader = URLClassLoader.newInstance(urls); + } catch (IOException e) { + throw new RuntimeException( + "Could not convert directories " + directories + + " to url.", e); + } + } + return loader; + } +} Property changes on: trunk/tutti-persistence/src/main/java/fr/ifremer/tutti/persistence/RessourceClassLoader.java ___________________________________________________________________ Added: svn:keywords + Author Date Id Revision HeadURL Added: svn:eol-style + native Modified: trunk/tutti-persistence/src/main/java/fr/ifremer/tutti/persistence/TuttiPersistence.java =================================================================== --- trunk/tutti-persistence/src/main/java/fr/ifremer/tutti/persistence/TuttiPersistence.java 2013-01-07 16:42:45 UTC (rev 155) +++ trunk/tutti-persistence/src/main/java/fr/ifremer/tutti/persistence/TuttiPersistence.java 2013-01-07 22:58:44 UTC (rev 156) @@ -42,11 +42,11 @@ import fr.ifremer.tutti.persistence.entities.referential.Species; import fr.ifremer.tutti.persistence.entities.referential.Vessel; import fr.ifremer.tutti.persistence.entities.referential.Zone; -import org.nuiton.util.ApplicationConfig; import java.io.Closeable; import java.io.IOException; import java.util.List; +import java.util.Properties; /** * Contract for a persistence driver used by Tutti. @@ -62,10 +62,12 @@ String getImplementationName(); - void open(ApplicationConfig config) throws IOException; + void open() throws IOException; void close() throws IOException; + void setEnumerations(Properties dbEnumerations); + //------------------------------------------------------------------------// //-- Referential methods --// //------------------------------------------------------------------------// @@ -237,5 +239,4 @@ AccidentalBatch saveAccidentalBatch(AccidentalBatch bean); void deleteAccidentalBatch(String id); - } Modified: trunk/tutti-persistence-adagio/pom.xml =================================================================== --- trunk/tutti-persistence-adagio/pom.xml 2013-01-07 16:42:45 UTC (rev 155) +++ trunk/tutti-persistence-adagio/pom.xml 2013-01-07 22:58:44 UTC (rev 156) @@ -6,7 +6,7 @@ <parent> <groupId>fr.ifremer</groupId> <artifactId>tutti</artifactId> - <version>0.2-SNAPSHOT</version> + <version>0.3-SNAPSHOT</version> </parent> <groupId>fr.ifremer.tutti</groupId> @@ -40,17 +40,19 @@ <artifactId>guava</artifactId> </dependency> - <dependency> - <groupId>commons-io</groupId> - <artifactId>commons-io</artifactId> - </dependency> + <dependency> <groupId>org.apache.commons</groupId> <artifactId>commons-lang3</artifactId> </dependency--> <dependency> + <groupId>commons-io</groupId> + <artifactId>commons-io</artifactId> + </dependency> + + <dependency> <groupId>commons-logging</groupId> <artifactId>commons-logging</artifactId> </dependency> Modified: trunk/tutti-persistence-adagio/src/main/java/fr/ifremer/tutti/persistence/TuttiPersistenceAdagioImpl.java =================================================================== --- trunk/tutti-persistence-adagio/src/main/java/fr/ifremer/tutti/persistence/TuttiPersistenceAdagioImpl.java 2013-01-07 16:42:45 UTC (rev 155) +++ trunk/tutti-persistence-adagio/src/main/java/fr/ifremer/tutti/persistence/TuttiPersistenceAdagioImpl.java 2013-01-07 22:58:44 UTC (rev 156) @@ -24,7 +24,9 @@ * #L% */ -import fr.ifremer.tutti.persistence.config.TuttiPersistenceAdagioConfig; +import com.google.common.base.Preconditions; +import com.google.common.collect.Lists; +import fr.ifremer.adagio.core.dao.referential.gear.GearImpl; import fr.ifremer.tutti.persistence.entities.data.AccidentalBatch; import fr.ifremer.tutti.persistence.entities.data.BenthosBatch; import fr.ifremer.tutti.persistence.entities.data.Cruise; @@ -35,168 +37,234 @@ import fr.ifremer.tutti.persistence.entities.data.SpeciesBatch; import fr.ifremer.tutti.persistence.entities.data.SpeciesBatchFrequency; import fr.ifremer.tutti.persistence.entities.protocol.TuttiProtocol; +import fr.ifremer.tutti.persistence.entities.referential.AbstractTuttiReferentialEntity; import fr.ifremer.tutti.persistence.entities.referential.Caracteristic; import fr.ifremer.tutti.persistence.entities.referential.Country; import fr.ifremer.tutti.persistence.entities.referential.FishingOperationLocation; import fr.ifremer.tutti.persistence.entities.referential.Gear; import fr.ifremer.tutti.persistence.entities.referential.Person; import fr.ifremer.tutti.persistence.entities.referential.Species; +import fr.ifremer.tutti.persistence.entities.referential.Status; import fr.ifremer.tutti.persistence.entities.referential.Vessel; import fr.ifremer.tutti.persistence.entities.referential.Zone; -import org.apache.commons.io.FileUtils; -import org.nuiton.util.ApplicationConfig; +import org.apache.commons.logging.Log; +import org.apache.commons.logging.LogFactory; +import org.hibernate.Query; +import org.hibernate.SessionFactory; +import org.springframework.transaction.annotation.Transactional; import java.io.IOException; import java.util.List; +import java.util.Properties; /** * @author tchemit <chemit@codelutin.com> * @since 0.2 */ +//@TransactionConfiguration(transactionManager = "transactionManager") public class TuttiPersistenceAdagioImpl implements TuttiPersistence { + /** Logger. */ + private static final Log log = + LogFactory.getLog(TuttiPersistenceAdagioImpl.class); + /** - * Persistence config. + * Session factory. * - * @since 0.2 + * @since 0.3 */ - protected TuttiPersistenceAdagioConfig config; + protected SessionFactory sessionFactory; + protected Properties enumerations; + + public void setSessionFactory(SessionFactory sessionFactory) { + this.sessionFactory = sessionFactory; + } + + public void setEnumerations(Properties enumerations) { + this.enumerations = enumerations; + } + @Override public String getImplementationName() { return "Persistence Adagio implementation"; } @Override - public void open(ApplicationConfig config) throws IOException { - this.config = new TuttiPersistenceAdagioConfig(config); - try { - FileUtils.forceMkdir(this.config.getDbDirectory()); - } catch (IOException e) { - throw new RuntimeException("Could not create directory", e); - } + public void open() throws IOException { + Preconditions.checkNotNull(sessionFactory, " No sessionFactory property setted"); + Preconditions.checkNotNull(enumerations, " No enumerations property setted"); } @Override public void close() throws IOException { + + if (log.isInfoEnabled()) { + log.info("Close persistence driver " + getImplementationName()); + } + + sessionFactory.close(); } //------------------------------------------------------------------------// //-- Referential methods --// //------------------------------------------------------------------------// + @Transactional(readOnly = true) @Override public List<Species> getAllSpecies() { return null; } + @Transactional(readOnly = true) @Override + public Species getSpecies(String speciesId) { + return null; + } + + @Transactional(readOnly = true) + @Override public List<FishingOperationLocation> getAllFishingOperationStrata(String zoneId) { return null; } + @Transactional(readOnly = true) @Override public List<FishingOperationLocation> getAllFishingOperationSubStrata(String locationId) { return null; } + @Transactional(readOnly = true) @Override public List<FishingOperationLocation> getAllFishingOperationLocation(String locationId) { return null; } + @Transactional(readOnly = true) @Override public List<Zone> getAllZone() { return null; } + @Transactional(readOnly = true) @Override public List<Country> getAllCountry() { return null; } + @Transactional(readOnly = true) @Override public List<Vessel> getAllVessel() { return null; } + @Transactional(readOnly = true) @Override public List<Gear> getAllGear() { - return null; + Query query = sessionFactory.getCurrentSession().getNamedQuery("getAllGears"); + + List gears = query.list(); + List<Gear> result = Lists.newArrayList(); + for (Object o : gears) { + GearImpl gearImpl = (GearImpl) o; + Gear g = new Gear(); + g.setId(String.valueOf(gearImpl.getId())); + g.setName(gearImpl.getName()); + g.setDescription(gearImpl.getLabel()); + setStatus(gearImpl.getStatus(), g); + result.add(g); + } + return result; } + @Transactional(readOnly = true) @Override public List<Person> getAllPerson() { return null; } + @Transactional(readOnly = true) @Override public List<Caracteristic> getAllFishingOperationEnvironmentCaracteristic() { return null; } + @Transactional(readOnly = true) @Override public List<Caracteristic> getAllFishingOperationGearCaracteristic() { return null; } + @Transactional(readOnly = true) @Override public List<Caracteristic> getAllFishingOperationHydrologicCaracteristic() { return null; } + @Transactional(readOnly = true) @Override - public List<Caracteristic> getAllSpeciesFrequencyCaracteristic() { + public List<Caracteristic> getAllSpeciesLengthStepCaracteristic() { return null; } + @Transactional(readOnly = true) @Override public Caracteristic getSizeCategoryCaracteristic() { return null; } + @Transactional(readOnly = true) @Override public Caracteristic getSexCaracteristic() { return null; } + @Transactional(readOnly = true) @Override public Caracteristic getSortedUnsortedCaracteristic() { return null; } + @Transactional(readOnly = true) @Override public Caracteristic getMaturityCaracteristic() { return null; } + @Transactional(readOnly = true) @Override public Caracteristic getMacroWasteCategoryCaracteristic() { return null; } + @Transactional(readOnly = true) + @Override + public Caracteristic getMacroWasteSizeCategoryCaracteristic() { + return null; + } + //------------------------------------------------------------------------// //-- Program methods --// //------------------------------------------------------------------------// @Override public List<Program> getAllProgram() { - return null; + throw new UnsupportedOperationException(); } @Override public Program getProgram(String id) { - return null; + throw new UnsupportedOperationException(); } @Override public Program createProgram(Program bean) { - return null; + throw new UnsupportedOperationException(); } @Override public Program saveProgram(Program bean) { - return null; + throw new UnsupportedOperationException(); } //------------------------------------------------------------------------// @@ -205,22 +273,22 @@ @Override public List<Cruise> getAllCruise(String programId) { - return null; + throw new UnsupportedOperationException(); } @Override public Cruise getCruise(String id) { - return null; + throw new UnsupportedOperationException(); } @Override public Cruise createCruise(Cruise bean) { - return null; + throw new UnsupportedOperationException(); } @Override public Cruise saveCruise(Cruise bean) { - return null; + throw new UnsupportedOperationException(); } //------------------------------------------------------------------------// @@ -229,22 +297,22 @@ @Override public List<TuttiProtocol> getAllProtocol() { - return null; + throw new UnsupportedOperationException(); } @Override public TuttiProtocol getProtocol(String id) { - return null; + throw new UnsupportedOperationException(); } @Override public TuttiProtocol createProtocol(TuttiProtocol bean) { - return null; + throw new UnsupportedOperationException(); } @Override public TuttiProtocol saveProtocol(TuttiProtocol bean) { - return null; + throw new UnsupportedOperationException(); } //------------------------------------------------------------------------// @@ -253,60 +321,74 @@ @Override public List<FishingOperation> getAllFishingOperation(String cruiseId) { - return null; + throw new UnsupportedOperationException(); } @Override public FishingOperation getFishingOperation(String id) { - return null; + throw new UnsupportedOperationException(); } @Override public FishingOperation createFishingOperation(FishingOperation bean) { - return null; + throw new UnsupportedOperationException(); } @Override public FishingOperation saveFishingOperation(FishingOperation bean) { - return null; + throw new UnsupportedOperationException(); } //------------------------------------------------------------------------// //-- Species Batch methods --// //------------------------------------------------------------------------// + @Override + public List<SpeciesBatch> getAllRootSpeciesBatch(String fishingOperationId) { + throw new UnsupportedOperationException(); + } + + @Override public List<SpeciesBatch> getAllSpeciesBatch(String fishingOperationId) { - return null; + throw new UnsupportedOperationException(); } @Override public SpeciesBatch getSpeciesBatch(String id) { - return null; + throw new UnsupportedOperationException(); } @Override - public SpeciesBatch createSpeciesBatch(SpeciesBatch bean) { - return null; + public SpeciesBatch createSpeciesBatch(SpeciesBatch bean, + String parentBatchId) { + throw new UnsupportedOperationException(); } @Override public SpeciesBatch saveSpeciesBatch(SpeciesBatch bean) { - return null; + throw new UnsupportedOperationException(); } @Override public void deleteSpeciesBatch(String id) { + throw new UnsupportedOperationException(); } @Override + public void deleteSpeciesSubBatch(String id) { + throw new UnsupportedOperationException(); + } + + @Override public List<SpeciesBatchFrequency> getAllSpeciesBatchFrequency(String speciesBatchId) { - return null; + throw new UnsupportedOperationException(); } @Override - public List<SpeciesBatchFrequency> saveSpeciesBatchFrequency(String speciesBatchId, List<SpeciesBatchFrequency> frequencies) { - return null; + public List<SpeciesBatchFrequency> saveSpeciesBatchFrequency(String speciesBatchId, + List<SpeciesBatchFrequency> frequencies) { + throw new UnsupportedOperationException(); } //------------------------------------------------------------------------// @@ -315,26 +397,27 @@ @Override public List<BenthosBatch> getAllBenthosBatch(String fishingOperationId) { - return null; + throw new UnsupportedOperationException(); } @Override public BenthosBatch getBenthosBatch(String id) { - return null; + throw new UnsupportedOperationException(); } @Override public BenthosBatch createBenthosBatch(BenthosBatch bean) { - return null; + throw new UnsupportedOperationException(); } @Override public BenthosBatch saveBenthosBatch(BenthosBatch bean) { - return null; + throw new UnsupportedOperationException(); } @Override public void deleteBenthosBatch(String id) { + throw new UnsupportedOperationException(); } //------------------------------------------------------------------------// @@ -343,26 +426,27 @@ @Override public List<PlanktonBatch> getAllPlanktonBatch(String fishingOperationId) { - return null; + throw new UnsupportedOperationException(); } @Override public PlanktonBatch getPlanktonBatch(String id) { - return null; + throw new UnsupportedOperationException(); } @Override public PlanktonBatch createPlanktonBatch(PlanktonBatch bean) { - return null; + throw new UnsupportedOperationException(); } @Override public PlanktonBatch savePlanktonBatch(PlanktonBatch bean) { - return null; + throw new UnsupportedOperationException(); } @Override public void deletePlanktonBatch(String id) { + throw new UnsupportedOperationException(); } //------------------------------------------------------------------------// @@ -371,26 +455,27 @@ @Override public List<MacroWasteBatch> getAllMacroWasteBatch(String fishingOperationId) { - return null; + throw new UnsupportedOperationException(); } @Override public MacroWasteBatch getMacroWasteBatch(String id) { - return null; + throw new UnsupportedOperationException(); } @Override public MacroWasteBatch createMacroWasteBatch(MacroWasteBatch bean) { - return null; + throw new UnsupportedOperationException(); } @Override public MacroWasteBatch saveMacroWasteBatch(MacroWasteBatch bean) { - return null; + throw new UnsupportedOperationException(); } @Override public void deleteMacroWasteBatch(String id) { + throw new UnsupportedOperationException(); } //------------------------------------------------------------------------// @@ -399,25 +484,37 @@ @Override public List<AccidentalBatch> getAllAccidentalBatch(String fishingOperationId) { - return null; + throw new UnsupportedOperationException(); } @Override public AccidentalBatch getAccidentalBatch(String id) { - return null; + throw new UnsupportedOperationException(); } @Override public AccidentalBatch createAccidentalBatch(AccidentalBatch bean) { - return null; + throw new UnsupportedOperationException(); } @Override public AccidentalBatch saveAccidentalBatch(AccidentalBatch bean) { - return null; + throw new UnsupportedOperationException(); } @Override public void deleteAccidentalBatch(String id) { + throw new UnsupportedOperationException(); } + + //------------------------------------------------------------------------// + //-- Internal methods --// + //------------------------------------------------------------------------// + + protected <E extends AbstractTuttiReferentialEntity> void setStatus(fr.ifremer.adagio.core.dao.referential.Status status, E entity) { + Status newStatus = new Status(); + newStatus.setId(status.getCode()); + newStatus.setName(status.getName()); + entity.setStatus(newStatus); + } } Modified: trunk/tutti-persistence-adagio/src/main/java/fr/ifremer/tutti/persistence/config/TuttiPersistenceAdagioConfig.java =================================================================== --- trunk/tutti-persistence-adagio/src/main/java/fr/ifremer/tutti/persistence/config/TuttiPersistenceAdagioConfig.java 2013-01-07 16:42:45 UTC (rev 155) +++ trunk/tutti-persistence-adagio/src/main/java/fr/ifremer/tutti/persistence/config/TuttiPersistenceAdagioConfig.java 2013-01-07 22:58:44 UTC (rev 156) @@ -24,9 +24,24 @@ * #L% */ +import com.google.common.base.Charsets; +import com.google.common.base.Predicate; +import com.google.common.collect.Sets; +import com.google.common.io.Files; +import fr.ifremer.tutti.persistence.RessourceClassLoader; +import org.apache.commons.io.FileUtils; +import org.apache.commons.io.IOUtils; +import org.apache.commons.logging.Log; +import org.apache.commons.logging.LogFactory; import org.nuiton.util.ApplicationConfig; +import java.io.BufferedReader; +import java.io.BufferedWriter; import java.io.File; +import java.io.IOException; +import java.io.InputStream; +import java.util.Properties; +import java.util.Set; /** * Configuration for the persistence driver. @@ -36,31 +51,194 @@ */ public class TuttiPersistenceAdagioConfig { + /** Logger. */ + private static final Log log = + LogFactory.getLog(TuttiPersistenceAdagioConfig.class); + protected final ApplicationConfig config; public TuttiPersistenceAdagioConfig(ApplicationConfig config) { this.config = config; - config.loadDefaultOptions(TuttiPersistenceAdagioConfigOption.values()); } + public void initConfig(RessourceClassLoader resourceLoader) throws IOException { + try { + FileUtils.forceMkdir(getDbDirectory()); + } catch (Exception e) { + throw new RuntimeException("Could not create directory", e); + } + + // add a predicate to search the configuration file from his directory instead of the class-path + resourceLoader.addSearchInDirectoriesPredicate(new Predicate<String>() { + + Set<String> matchingNames = Sets.newHashSet( + getDbConfigurationPath().getName(), + getDbEnumerationPath().getName()); + + @Override + public boolean apply(String input) { + return matchingNames.contains(input); + } + }); + + // get configuration file path + File configurationPath = getDbConfigurationPath(); + + // add his directory in path to search + resourceLoader.addDirectory(configurationPath.getParentFile()); + + // generate configuration file if required + generateDbConfiguration(configurationPath); + + // get enumeration file path + File enumerationPath = getDbEnumerationPath(); + + // add his directory in path to search + resourceLoader.addDirectory(enumerationPath.getParentFile()); + + generateDbEnumerationConfiguration(enumerationPath); + } + + public File getDbConfigurationPath() { + return config.getOptionAsFile(TuttiPersistenceAdagioConfigOption.DB_CONFIGURATION_PATH.getKey()); + } + public File getDbDirectory() { - return config.getOptionAsFile(TuttiPersistenceAdagioConfigOption.DB_PATH.getKey()); + return config.getOptionAsFile(TuttiPersistenceAdagioConfigOption.DB_DIRECTORY.getKey()); } public File getDbName() { return config.getOptionAsFile(TuttiPersistenceAdagioConfigOption.DB_NAME.getKey()); } - public File getDbConfigurationPath() { - return config.getOptionAsFile(TuttiPersistenceAdagioConfigOption.DB_CONFIGURATION_PATH.getKey()); + public File getDbEnumerationPath() { + return config.getOptionAsFile(TuttiPersistenceAdagioConfigOption.DB_ENUMERATION_PATH.getKey()); } - public File getDbMappingPath() { - return config.getOptionAsFile(TuttiPersistenceAdagioConfigOption.BB_MAPPING_PATH.getKey()); + public String getJdbcUrl() { + return config.getOption(TuttiPersistenceAdagioConfigOption.JDBC_URL.getKey()); } + public Class getJdbcDriver() { + return config.getOptionAsClass(TuttiPersistenceAdagioConfigOption.JDBC_DRIVER.getKey()); + } + + public String getJdbcUsername() { + return config.getOption(TuttiPersistenceAdagioConfigOption.JDBC_USERNAME.getKey()); + } + + public String getJdbcPassword() { + return config.getOption(TuttiPersistenceAdagioConfigOption.JDBC_PASSWORD.getKey()); + } + + public Class getHibernateDialect() { + return config.getOptionAsClass(TuttiPersistenceAdagioConfigOption.HIBERNATE_DIALECT.getKey()); + } + + public boolean isHibernateShowSql() { + Boolean result = config.getOptionAsBoolean(TuttiPersistenceAdagioConfigOption.HIBERNATE_SHOW_SQL.getKey()); + return result != null && result; + } + + public boolean isHibernateUseSqlComment() { + Boolean result = config.getOptionAsBoolean(TuttiPersistenceAdagioConfigOption.HIBERNATE_USE_SQL_COMMENT.getKey()); + return result != null && result; + } + + public boolean isHibernateFormatSql() { + Boolean result = config.getOptionAsBoolean(TuttiPersistenceAdagioConfigOption.HIBERNATE_FORMAT_SQL.getKey()); + return result != null && result; + } + public ApplicationConfig getConfig() { return config; } + public void generateDbConfiguration(File destination) throws IOException { + + if (!destination.exists()) { + + // load db configuration template (tutti-db.properties) + + if (log.isInfoEnabled()) { + log.info("Generate " + destination + " from classpath."); + } + Properties result = new Properties(); + InputStream in = getClass().getResourceAsStream("/tutti-db-conf.properties"); + try { + result.load(in); + in.close(); + } finally { + IOUtils.closeQuietly(in); + } + + // replace some values from ApplicationConfig + + result.put("dataSource.jdbc.driver", getJdbcDriver().getName()); + result.put("dataSource.jdbc.username", getJdbcUsername()); + result.put("dataSource.jdbc.password", getJdbcPassword()); + result.put("dataSource.jdbc.url", getJdbcUrl()); + result.put("hibernate.dialect", getHibernateDialect().getName()); + result.put("hibernate.show_sql", isHibernateShowSql() + ""); + result.put("hibernate.format_sql", isHibernateFormatSql() + ""); + result.put("hibernate.use_sql_comments", isHibernateUseSqlComment() + ""); + + // write result file at destination + + BufferedWriter writer = Files.newWriter(destination, Charsets.UTF_8); + try { + result.store(writer, "Generated by " + getClass().getName()); + writer.close(); + } finally { + IOUtils.closeQuietly(writer); + } + } + } + + public void generateDbEnumerationConfiguration(File destination) throws IOException { + + if (!destination.exists()) { + + // load enumeration mapping from classpath (enumerations.properties) + + if (log.isInfoEnabled()) { + log.info("Generate " + destination + " from classpath."); + } + + Properties result = new Properties(); + InputStream in = getClass().getResourceAsStream("/tutti-db-enumerations.properties"); + try { + result.load(in); + in.close(); + } finally { + IOUtils.closeQuietly(in); + } + + // replace some values from ApplicationConfig + + + // write result file at destination + + BufferedWriter writer = + Files.newWriter(destination, Charsets.UTF_8); + try { + result.store(writer, "Generated by " + getClass().getName()); + writer.close(); + } finally { + IOUtils.closeQuietly(writer); + } + } + } + + public Properties getDbEnumerations() throws IOException { + Properties result = new Properties(); + BufferedReader in = Files.newReader(getDbEnumerationPath(), Charsets.UTF_8); + try { + result.load(in); + in.close(); + } finally { + IOUtils.closeQuietly(in); + } + return result; + } } \ No newline at end of file Modified: trunk/tutti-persistence-adagio/src/main/java/fr/ifremer/tutti/persistence/config/TuttiPersistenceAdagioConfigOption.java =================================================================== --- trunk/tutti-persistence-adagio/src/main/java/fr/ifremer/tutti/persistence/config/TuttiPersistenceAdagioConfigOption.java 2013-01-07 16:42:45 UTC (rev 155) +++ trunk/tutti-persistence-adagio/src/main/java/fr/ifremer/tutti/persistence/config/TuttiPersistenceAdagioConfigOption.java 2013-01-07 22:58:44 UTC (rev 156) @@ -24,6 +24,8 @@ * #L% */ +import org.hibernate.dialect.HSQLDialect; +import org.hsqldb.jdbcDriver; import org.nuiton.util.ApplicationConfig; import java.io.File; @@ -36,32 +38,92 @@ */ public enum TuttiPersistenceAdagioConfigOption implements ApplicationConfig.OptionDef { - DB_PATH("tutti.persistence.dbPath", + DB_CONFIGURATION_PATH( + "tutti.persistence.db.configurationPath", + "Chemin du fichier de configuration d'Adagio", + "${tutti.data.directory}/conf.properties", + File.class, + true, + true), + + DB_DIRECTORY( + "tutti.persistence.db.directory", "Répertoire où est la base de données", "${tutti.data.directory}/db", File.class, true, true), - DB_NAME("tutti.persistence.dbName", + DB_NAME( + "tutti.persistence.db.name", "Nom du fichier de la base de données", - "tutti", + "allegro", String.class, true, true), + DB_ENUMERATION_PATH( + "tutti.persistence.db.enumerationPath", + "Chemin du fichier de correspondance des énumérations", + "${tutti.data.directory}/enumerations.properties", + File.class, + true, + true), + JDBC_USERNAME( + "tutti.persistence.jdbc.username", + "Login de l'utilisateur pour se connecter à la base de données", + "sa", + String.class, + true, + true), + JDBC_PASSWORD( + "tutti.persistence.jdbc.password", + "Mot de passe de l'utilisateur pour se connecter à la base de données", + "", + String.class, + true, + true), + JDBC_URL( + "tutti.persistence.jdbc.url", + "URL de connexion à la base de données", + "jdbc:hsqldb:file:${tutti.persistence.db.directory}/${tutti.persistence.db.name}", + String.class, + true, + true), + JDBC_DRIVER( + "tutti.persistence.jdbc.driver", + "Le pilote JDBC utilisé pour communiquer avec la base de données", + jdbcDriver.class.getName(), + Class.class, + true, + true), + HIBERNATE_DIALECT( + "tutti.persistence.hibernate.dialect", + "Le dialect hibernate utilisée pour communiquer avec la base de données", + HSQLDialect.class.getName(), + Class.class, + true, + true), + HIBERNATE_SHOW_SQL( + "tutti.persistence.hibernate.showSql", + "Option pour afficher ou non les requète sql dans les logs", + Boolean.FALSE.toString(), + boolean.class, + true, + true), + HIBERNATE_USE_SQL_COMMENT( + "tutti.persistence.hibernate.useSqlComment", + "Option pour ajouter les commentaires dans les requètes sql générées", + Boolean.FALSE.toString(), + boolean.class, + true, + true), + HIBERNATE_FORMAT_SQL( + "tutti.persistence.hibernate.formatSql", + "Option pour ajouter les commentaires dans les requètes sql générées", + Boolean.FALSE.toString(), + boolean.class, + true, + true); - DB_CONFIGURATION_PATH("tutti.persistence.dbConfigurationµPath", - "Chemin du fichier de configuration de la base", - "${tutti.data.directory}/dbConfiguration.properties", - File.class, - true, - true), - BB_MAPPING_PATH("tutti.persistence.dbMappingPath", - "Chemin du fichier de mapping des constantes de la base", - "${tutti.data.directory}/dbMapping.properties", - File.class, - true, - true); - /** Configuration key. */ private final String key; Deleted: trunk/tutti-persistence-adagio/src/main/resources/META-INF/services/fr.ifremer.tutti.persistence.TuttiPersistence =================================================================== --- trunk/tutti-persistence-adagio/src/main/resources/META-INF/services/fr.ifremer.tutti.persistence.TuttiPersistence 2013-01-07 16:42:45 UTC (rev 155) +++ trunk/tutti-persistence-adagio/src/main/resources/META-INF/services/fr.ifremer.tutti.persistence.TuttiPersistence 2013-01-07 22:58:44 UTC (rev 156) @@ -1 +0,0 @@ -fr.ifremer.tutti.persistence.TuttiPersistenceAdagioImpl \ No newline at end of file Added: trunk/tutti-persistence-adagio/src/main/resources/META-INF/services/org.nuiton.util.ApplicationConfigProvider =================================================================== --- trunk/tutti-persistence-adagio/src/main/resources/META-INF/services/org.nuiton.util.ApplicationConfigProvider (rev 0) +++ trunk/tutti-persistence-adagio/src/main/resources/META-INF/services/org.nuiton.util.ApplicationConfigProvider 2013-01-07 22:58:44 UTC (rev 156) @@ -0,0 +1 @@ +fr.ifremer.tutti.persistence.config.TuttiPersistenceAdagioProvider \ No newline at end of file Property changes on: trunk/tutti-persistence-adagio/src/main/resources/META-INF/services/org.nuiton.util.ApplicationConfigProvider ___________________________________________________________________ Added: svn:keywords + Author Date Id Revision HeadURL Added: svn:eol-style + native Modified: trunk/tutti-persistence-adagio/src/main/resources/applicationContext-service-tutti.xml =================================================================== --- trunk/tutti-persistence-adagio/src/main/resources/applicationContext-service-tutti.xml 2013-01-07 16:42:45 UTC (rev 155) +++ trunk/tutti-persistence-adagio/src/main/resources/applicationContext-service-tutti.xml 2013-01-07 22:58:44 UTC (rev 156) @@ -35,12 +35,12 @@ http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-3.0.xsd http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context-3.0.xsd"> - <context:component-scan base-package="fr.ifremer.adagio.core.service" /> + <!--<context:component-scan base-package="fr.ifremer.adagio.core.service" />--> <!-- Activates various annotations to be detected in bean classes: Spring's @Required and @Autowired, as well as JSR 250's @PostConstruct, @PreDestroy and @Resource (if available) and JPA's @PersistenceContext and @PersistenceUnit (if available). --> - <context:annotation-config /> + <!--<context:annotation-config />--> <!--Platform Transaction Manager declared as "transactionManager" will be used. --> @@ -50,8 +50,13 @@ from outside) --> <tx:annotation-driven transaction-manager="transactionManager" /> + <bean id="adagioPersistenceService" destroy-method="close" + class="fr.ifremer.tutti.persistence.TuttiPersistenceAdagioImpl"> + <property name="sessionFactory" ref="sessionFactory" /> + </bean> + <!--Enables the use of @AspectJ style of aspects' declarations. AspectJ run-time isn't necessarily involved --> - <aop:aspectj-autoproxy /> + <!--<aop:aspectj-autoproxy />--> </beans> \ No newline at end of file Modified: trunk/tutti-persistence-adagio/src/main/resources/queries-override.hbm.xml =================================================================== --- trunk/tutti-persistence-adagio/src/main/resources/queries-override.hbm.xml 2013-01-07 16:42:45 UTC (rev 155) +++ trunk/tutti-persistence-adagio/src/main/resources/queries-override.hbm.xml 2013-01-07 22:58:44 UTC (rev 156) @@ -26,6 +26,11 @@ <!DOCTYPE hibernate-mapping PUBLIC "-//Hibernate/Hibernate Mapping DTD 3.0//EN" "http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd"> <hibernate-mapping> + + <!--<fetch-profile name="tutti">--> + <!--TODO Create fetch profile to avoid eager loading --> + <!--</fetch-profile>--> + <!-- Exemple HQL : > <query cacheable="true" name="selectProgramFromUser">select distinct Added: trunk/tutti-persistence-adagio/src/main/resources/tutti-db-conf.properties =================================================================== --- trunk/tutti-persistence-adagio/src/main/resources/tutti-db-conf.properties (rev 0) +++ trunk/tutti-persistence-adagio/src/main/resources/tutti-db-conf.properties 2013-01-07 22:58:44 UTC (rev 156) @@ -0,0 +1,46 @@ +### +# #%L +# Tutti :: Persistence Adagio (impl) +# $Id$ +# $HeadURL$ +# %% +# Copyright (C) 2012 - 2013 Ifremer +# %% +# This program is free software: you can redistribute it and/or modify +# it under the terms of the GNU 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 General Public +# License along with this program. If not, see +# <http://www.gnu.org/licenses/gpl-3.0.html>. +# #L% +### +# dataSource : jndi ou local +dataSource.type=local + +# Si 'dataSource.type=jndi' : +# - pour tomcat : jdbc/adagio-ds +# - pour jboss : java:jdbc/adagio-ds +#dataSource.jndi-name=jdbc/adagio-ds + +# Si 'dataSource.type=local' : +dataSource.jdbc.driver=${tutti.persistence.jdbc.driver} +dataSource.jdbc.username=${tutti.persistence.jdbc.username} +dataSource.jdbc.password=${tutti.persistence.jdbc.password} +dataSource.jdbc.url=${tutti.persistence.jdbc.url} +#dataSource.jdbc.url=jdbc:hsqldb:hsql://localhost/toto + +# Hibernate configuration : +hibernate.dialect=${tutti.persistence.hibernate.dialect} +hibernate.show_sql=${tutti.persistence.hibernate.showSql} +hibernate.format_sql=${tutti.persistence.hibernate.formatSql} +hibernate.use_sql_comments=${tutti.persistence.hibernate.useSqlComment} +hibernate.generate_statistics=false +hibernate.query.substitutions=true 1, false 0 +hibernate.hbm2ddl.auto=none \ No newline at end of file Property changes on: trunk/tutti-persistence-adagio/src/main/resources/tutti-db-conf.properties ___________________________________________________________________ Added: svn:keywords + Author Date Id Revision HeadURL Added: svn:eol-style + native Added: trunk/tutti-persistence-adagio/src/main/resources/tutti-db-enumerations.properties =================================================================== --- trunk/tutti-persistence-adagio/src/main/resources/tutti-db-enumerations.properties (rev 0) +++ trunk/tutti-persistence-adagio/src/main/resources/tutti-db-enumerations.properties 2013-01-07 22:58:44 UTC (rev 156) @@ -0,0 +1,297 @@ +### +# #%L +# Tutti :: Persistence Adagio (impl) +# $Id$ +# $HeadURL$ +# %% +# Copyright (C) 2012 - 2013 Ifremer +# %% +# This program is free software: you can redistribute it and/or modify +# it under the terms of the GNU 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 General Public +# License along with this program. If not, see +# <http://www.gnu.org/licenses/gpl-3.0.html>. +# #L% +### +# v3 Version de test + +AcquisitionLevelCode.ACTIVITY=ACTIVITY +AcquisitionLevelCode.ACTIVITY_CALENDAR=ACTIVITY_CALENDAR +AcquisitionLevelCode.BATCH=LOT +AcquisitionLevelCode.FISHING_EFFORT_CALENDAR=EFFORT_CALENDAR +AcquisitionLevelCode.FISHING_OPERATION=OPER_PREL +AcquisitionLevelCode.FISHING_TRIP=FISHING_TRIP +AcquisitionLevelCode.FISHING_TRIP_PHYSICAL_GEAR=OBSERVED_PHYSICAL_GEAR +AcquisitionLevelCode.LANDING=LANDING +AcquisitionLevelCode.MONTHLY_EFFORT=EFFORT_MENS +AcquisitionLevelCode.OBSERVED_LANDING=OBSERVED_LANDING +AcquisitionLevelCode.OBSERVED_SALE=OBSERVED_SALE +AcquisitionLevelCode.OBSERVED_TRIP_ON_BOARD=MAREE_OBSERV_MER +AcquisitionLevelCode.OPERATION=OPER +AcquisitionLevelCode.OPERATION_GROUP=OPERATION_GROUP +AcquisitionLevelCode.PHYSICAL_GEAR=PHYS_GEAR +AcquisitionLevelCode.SALE=SALE +AcquisitionLevelCode.SALE_SURVEY=SALE_SURVEY +AcquisitionLevelCode.SAMPLE=ECHANT +AcquisitionLevelCode.SCIENTIFIC_CRUISE=SCIENTIFIC_CRUISE +AcquisitionLevelCode.VESSEL_PHYSICALFEATURES=VESSEL_PHYSICAL_FEATURES +AcquisitionLevelCode.YEARLYEFFORT=EFFORT_ANN +AcquisitionLevelCode.CONTROLS_REFERENTIAL=CONTROLS_REFERENTIAL +ActivityCalendarNumericalPmfmIds.GREATER_VALUE_PMFM=82 +ActivityCalendarNumericalPmfmIds.LOWER_VALUE_PMFM=85 +AggregationLevelId.DAY=1 +AggregationLevelId.FISHING_TRIP=6 +AggregationLevelId.HOUR=7 +AggregationLevelId.MONTH=2 +AggregationLevelId.NONE=0 +AggregationLevelId.SEMESTER=4 +AggregationLevelId.TRIMESTER=3 +AggregationLevelId.YEAR=5 +CriteriaType.DEFAULT=0 +CriteriaType.EXISTS=3 +CriteriaType.JOIN=1 +CriteriaType.NOT_EXISTS=4 +CriteriaType.SELECT=2 +DepartmentCode.OUTSIDE=EXT +FractionId.ALL=1 +FractionId.GEAR=2 +GearClassificationId.CNTS=3 +GearClassificationId.EU=2 +GearClassificationId.FAO=1 +GearClassificationId.SCIENTIFIC_CRUISE=5 +GearUseFeaturesOriginMapping.ACTIVITY_CALENDAR=<PROGRAM> N-1|<PROGRAM>,Enquêteur|<INVESTIGATOR>,Déclaratif|<DECLARATIVE>,Ventes|SIH_OBSMER +GearUseFeaturesOriginMapping.EFFORT_CALENDAR=<PROGRAM> N-1|<PROGRAM>,Enquêteur|<INVESTIGATOR>,Déclaratif|<DECLARATIVE>,Ventes|SIH_OBSMER +isActive.ACTIVE=1 +isActive.INACTIVE=0 +isActive.NOT_EXISTS=2 +LocationClassificationId.REGULATION=4 +LocationClassificationId.SECTOR=2 +LocationClassificationId.TERRITORIAL=1 +LocationLabel.FRANCE=FRA +LocationLabel.MEDITERRANEAN_AND_BLACK_SEA=37 +LocationLevelId.CRIEE=7 +LocationLevelId.DEPARTEMENT=32 +LocationLevelId.FAO_ZONE=101 +LocationLevelId.PAYS_ISO3=21 +LocationLevelId.PORT=6 +LocationLevelId.QUARTIER=13 +LocationLevelId.RECTANGLE_STATISTIQUE=113 +LocationLevelId.REGION=31 +LocationLevelId.SOUS_RECTANGLE_STATISTIQUE=114 +ManageDataTypeId.ACTIVITY_CALENDAR=4 +ManageDataTypeId.OBSERVED_FISHING_TRIP_ON_BOARD=5 +ManageDataTypeId.PHYSICAL_GEAR_SURVEY=6 +ManageDataTypeId.SALE=7 +ManageDataTypeId.SCIENTIFIC_CRUISE=8 +MatrixId.FISHING_METIER=10 +MatrixId.GEAR=2 +MatrixId.OPERATION=7 +MatrixId.VESSEL=8 +MatrixId.SUPPORT_WITH_GEAR=17 +MatrixId.SUPPORT_WITH_METIER=18 +MethodId.ALIVE_WEIGHT_EQUIVALENT=6 +MethodId.ESTIMATED=2 +MethodId.HEIGHT_WEIGHT=7 +MethodId.TOTAL_BATCH=17 +OrderTypeId.NORTH_SOUTH_LOCATION_RANK=1 +ParameterCode.ANOTHER_SURVEY=AUTRE_ENQ +ParameterCode.BULK=VRAC/HORS VRAC +ParameterCode.CALCULATED_WEIGHT=POIDS_CALCULE +ParameterCode.CONTRACT_CODE=CONTRACT_CODE +ParameterCode.CREW_SIZE=NB_HOMME_BORD +ParameterCode.DATA_RELIABILITY=FIAB_DATA +ParameterCode.DISCARD_TYPE=DISCARD_TYPE +ParameterCode.ENGIN_TIME=NB_HEURES_MOTEUR +ParameterCode.FISHING_DAY_COUNT=NB_JOURS_PECHE +ParameterCode.GEAR_DEPTH=PROF +ParameterCode.IS_SAMPLING=IS_SAMPLING +ParameterCode.LANDING_REJECTION=DEB/REJ +ParameterCode.PRESENTATION=PRES +ParameterCode.PROCEEDING=DEROULEMENT +ParameterCode.RECEPTION_QUALITY=QUALIT_ACC +ParameterCode.SEA_DAY_COUNT=NB_JOURS_MER +ParameterCode.SEA_STATE=ETAT_MER +ParameterCode.SEX=SEXE +ParameterCode.SIZE=TAILLE +ParameterCode.STATUS=ETAT +ParameterCode.SURVEY_QUALIFICATION=QUALIF_ENQ +ParameterCode.VALIDATION_PROGRAM=VALIDPRO +ParameterCode.VALIDATION_SUPERVISOR=VALIDSUP +ParameterCode.WEIGHT=POIDS +ParameterCode.SIZE_UNLI_CAT=CATEGORIE +ParameterCode.SIZE_UE_CAT=SIZE_UE_CAT +ParameterCode.CASE=CASE +ParameterCode.SORTING_TYPE=SORTING_TYPE +ParameterCode.PRESERVATION=ETAT +ParameterCode.DRESSING=DRESSING +ParameterCode.AGE=AGE +ParameterCode.LENGTH_TOTAL=LENGTH_TOTAL +ParameterCode.LONG_CARAPACE=LONG_CARAPACE +ParameterCode.LENGTH_PREANAL=LENGTH_PREANAL +ParameterCode.LENGTH=LENGTH +ParameterCode.LENGTH_CARAPACE=LENGTH_CARAPACE +ParameterCode.LENGTH_FORK=LENGTH_FORK +ParameterCode.LENGTH_LM_FORK=LENGTH_LM_FORK +ParameterCode.LENGTH_MANTLE=LENGTH_MANTLE +ParameterCode.LENGTH_PELVIC=LENGTH_PELVIC +ParameterCode.LENGTH_PRE_SUPRA_CAUDAL=LENGTH_PRE_SUPRA_CAUDAL +ParameterCode.LENGTH_STANDARD=LENGTH_STANDARD +ParameterCode.BEAM_LENGTH=BEAM_LENGTH +ParameterCode.BEAM_TOTAL_LENGTH=BEAM_TOTAL_LENGTH +ParameterCode.GEAR_TOTAL_LENGTH=GEAR_TOTAL_LENGTH +ParameterCode.HEADLINE_LENGTH=HEADLINE_LENGTH +ParameterCode.LBP=LBP +ParameterCode.LG_ENGINS_PERDUS=LG_ENGINS_PERDUS +ParameterCode.LG_RELEVEE=LG_RELEVEE +ParameterCode.LOA=LOA +ParameterCode.LONG=LONG +ParameterCode.LONGLINE_LENGTH=LONGLINE_LENGTH +ParameterCode.LONG_FORK=LONG_FORK +ParameterCode.LONG_MANTLE=LONG_MANTLE +ParameterCode.NET_LENGTH=NET_LENGTH +ParameterCode.SEGMENT_LENGTH=SEGMENT_LENGTH +ParameterCode.SEINE_LENGTH=SEINE_LENGTH +ParameterCode.STD_CURVE_LENGTH=STD_CURVE_LENGTH +ParameterCode.STD_STRAIGTH_LENGTH=STD_STRAIGTH_LENGTH +ParameterCode.SWEEP_LENGTH=SWEEP_LENGTH +ParameterCode.TOTAL_LENGTH_HAULED=TOTAL_LENGTH_HAULED +ParameterCode.TOTAL_LENGTH_SOAKED=TOTAL_LENGTH_SOAKED +ParameterCode.WARP_LENGTH=WARP_LENGTH +ParameterCode.CIRCUMFERENCE=CIRCUMFERENCE +ParameterCode.WIDTH=WIDTH +ParameterGroupId.SURVEY_MEASUREMENT=6 +PmfmId.ALIVE_WEIGHT_CALCULATED=POIDS_CALCULE;6;1;6 +PmfmId.CALCULATED_WEIGHT_CHILDREN_SUM=POIDS_CALCULE;6;1;24 +PmfmId.WEIGHT_SIZE_CALCULATED=POIDS_CALCULE;6;1;7 +PmfmId.WEIGHT_SIZE_EXTRAPOLATE=POIDS_CALCULE;6;1;21 +PmfmId.WEIGHT_TOTAL_CALCULATED=POIDS_CALCULE;6;1;17 +PmfmId.MAX_DURATION_FOR_OPERATION_WITH_GEAR=DUREE_MAX_OPERATION;17;1;1 +PmfmId.MAX_DISTANCE_FOR_OPERATION_WITH_GEAR=DISTANCE_MAX_OPERATION;17;1;1 +PmfmId.MAX_DURATION_FOR_OPERATION_WITH_METIER=DUREE_MAX_OPERATION;18;1;1 +PmfmId.MAX_DISTANCE_FOR_OPERATION_WITH_METIER=DISTANCE_MAX_OPERATION;18;1;1 +PmfmId.STORAGE_STATE=CLOSE_OBSVENTE_STOCK;19;11;1 +ProgramCode.ACTIVITY=SIH_STATPECHE +ProgramCode.ACTIVITY_MERGE=SIH_STATPECHE_CONFLIT +ProgramCode.DECLARATIVE_FLOW=SIPA +ProgramCode.PRE_RECOPESCA=SIH-preRECOPESCA +ProgramCode.RECOPESCA=SIH-RECOPESCA +ProgramCode.SIH_OBSERVED_FISHING_TRIP_ON_BOARD=SIH_OBSMER +ProgramCode.SIH_OBSMER=SIH_OBSMER +ProgramCode.SIH_STATPECHE_CONFLIT=SIH_STATPECHE_CONFLIT +ProgramCode.STAT_PECHE=SIH_STATPECHE +SaleDateControlByProgram.MAX_DAYS_AFTER_FISHING_TRIP=SIH_OBSMER|3,SIH_OBSVENTE|3 +BatchControl.SORTING_CRITERIA_PARAMETER_NEEDS_REFERENCE_WEIGHT=PRES,SIZE_UNLI_CAT,SEXE +BatchControl.CHILDREN_SUM_DIFFERENCE_BETWEEN_REFERENCE_AND_SIZE_WEIGHT_RULE1_THRESHOLD_PERCENT=SIH_OBSMER|50,SIH_OBSVENTE|50 +BatchControl.CHILDREN_SUM_DIFFERENCE_BETWEEN_REFERENCE_AND_SIZE_WEIGHT_RULE1_KILO_MIN=SIH_OBSMER|5,SIH_OBSVENTE|5 +BatchControl.CHILDREN_SUM_DIFFERENCE_BETWEEN_REFERENCE_AND_SIZE_WEIGHT_RULE2_THRESHOLD_PERCENT=SIH_OBSMER|100,SIH_OBSVENTE|100 +BatchControl.CHILDREN_SUM_DIFFERENCE_BETWEEN_REFERENCE_AND_SIZE_WEIGHT_RULE2_KILO_MAX=SIH_OBSMER|5,SIH_OBSVENTE|5 +ProgramManagedDataTypeMapping.FISHING_TRIP=SIH_OBSMER|5 +ProgramManagedDataTypeMapping.SALE=SIH_OBSVENTE|7 +ProgramObjectTypeMapping.FISHING_TRIP=SIH_OBSMER|OBSERVED_FISHING_TRIP +ProgramObjectTypeMapping.SALE=SIH_OBSVENTE|OBSERVED_SALE +ProgramPrivilegeId.MANAGER=1 +ProgramPrivilegeId.QUALIFICATOR=5 +ProgramPrivilegeId.RECORDER=2 +ProgramPrivilegeId.VALIDATOR=4 +ProgramPrivilegeId.VIEWER=3 +QualitativeValueId.ABNORMAL=28 +QualitativeValueId.ANOTHER_SURVEY_NO=34 +QualitativeValueId.ANOTHER_SURVEY_YES=33 +QualitativeValueId.DIRECT_SURVEY=49 +QualitativeValueId.DISCARD_TYPE_ANIMALS=48 +QualitativeValueId.ESTIMATE_SURVEY=51 +QualitativeValueId.FRY_STATUS=31 +QualitativeValueId.INDIRECT_SURVEY=50 +QualitativeValueId.INTEGRAL_PRESENTATION=7 +QualitativeValueId.IS_SAMPLING=56 +QualitativeValueId.LANDING=3 +QualitativeValueId.NON_SEXED_SEX=55 +QualitativeValueId.VALIDATION_PROGRAM_DO_CORRECTION=2162 +QualitativeValueId.VALIDATION_SUPERVISOR_NO=2151 +QualitativeValueId.VALIDATION_SUPERVISOR_YES=2150 +QualitativeValueId.SORTING_TYPE_TPN=71 +QualitativeValueId.SORTING_TYPE_TCC=70 +QualitativeValueId.REJECTED=4 +QualitativeValueId.VRAC=1 +QualityFlagCode.BAD=4 +QualityFlagCode.CORRECTED=5 +QualityFlagCode.DOUBTFUL=3 +QualityFlagCode.GOOD=1 +QualityFlagCode.INCOMPLETE=8 +QualityFlagCode.MISSING=9 +QualityFlagCode.NOTQUALIFIED=0 +QualityFlagCode.OUT_OF_STAT=2 +QualityFlagConfiguration.COLOR_MAPPING=GOOD|0,128,0;DOUBTFUL|255,128,0;BAD|255,0,0;CORRECTED|0,128,255 +QualityFlagConfiguration.INVALID_FLAG_LIST=2,4,8,9 +SaleTypeId.COOPERATIVE=-5 +SaleTypeId.CRIEE=1 +SaleTypeId.HORS_CONTROLE=9 +SaleTypeId.MARCHE_EXTERIEUR=5 +SaleTypeId.MARCHE_INTERIEUR=4 +SaleTypeId.MAREYEUR=2 +SaleTypeId.POISSONNIER=-6 +SaleTypeId.PRODUCTEUR=6 +SaleTypeId.RESTAURATION_COLLECTIVE=-3 +SaleTypeId.RESTAURATION_PRIVEE=-2 +SaleTypeId.RETRAIT_OP=7 +SaleTypeId.RETRAIT_SANITAIRE=8 +SaleTypeId.SUPERMARCHE=-4 +SaleTypeId.TRANSFORMATEUR=3 +SaleTypeId.VENTE_PARTICULIER=-1 +SamplingSchemeControl.MANDATORY_PROGRAM_LIST=SIH_OBSMER,SIH_OBSVENTE +SpatialItemTypeId.DEPTH_GRADIENT=1 +SpatialItemTypeId.DISTANCE_TO_COAST_GRADIENT=3 +SpatialItemTypeId.GEAR=4 +SpatialItemTypeId.METIER=7 +SpatialItemTypeId.NEARBY_SPECIFIC_AREA=2 +SpatialItemTypeId.TAXON_GROUP=5 +StatusCode.DELETED=3 +StatusCode.DISABLE=0 +StatusCode.ENABLE=1 +StatusCode.TEMPORARY=2 +StorageStateValues.CLOSED=69 +SurveyQualificationId.DIRECT=1 +SurveyQualificationId.ESTIMATION=3 +SurveyQualificationId.INDIRECT=2 +SurveyQualificationId.PREDOCUMENTATION=4 +SurveyQualificationId.UNKNOWN=0 +SynchronizationStatus.DELETED=DELETED +SynchronizationStatus.DIRTY=DIRTY +SynchronizationStatus.READY_TO_SYNCHRONIZE=READY_TO_SYNC +SynchronizationStatus.SYNCHRONIZED=SYNC +TaxonGroupId.FISH=8 +TaxonGroupTypeCode.COMMERCIAL_SPECIES=1 +TaxonGroupTypeCode.METIER_SPECIES=2 +TaxonomicLevelCode.SPECIES=5 +TaxonomicLevelCode.VARIETY=6 +TranscribingSideId.IN=2 +TranscribingSideId.IN_OUT=3 +TranscribingSideId.OUT=1 +TranscribingSystemId.FAO=4 +TranscribingSystemId.HARMONIE=1 +TranscribingSystemId.OFIMER=3 +TranscribingSystemId.SIPA=2 +UnitId.DAY=17 +UnitId.DECIMAL_HOURS=9 +UnitId.MILLIMETER=6 +UnitId.NONE=1 +UserProfilId.OBSERVER=2 +UserProfilId.PROJECT_MEMBER=3 +UserProfilId.REFERENTIAL_ADMINISTRATOR=1 +UserProfilId.USER=4 +VesselTypeId.FISHING_VESSEL=1 +VesselTypeId.FISHING_VESSEL_GROUP=2 +VesselTypeId.PLEASURE_BOAT=4 +VesselTypeId.SCIENTIFIC_RESEARCH_VESSEL=5 +VesselTypeId.SHELLFISH_GATHERER=3 +ZoneCompetenceMapping.GROUND=Finistère|506;516,Méditerranée|408;391 +ZoneCompetenceMapping.SEA=Finistère|4018,Méditerranée|4022 +ZoneCompetenceMapping.DEFAULT_LOCATION_LEVEL=Finistère|113;114,Méditerranée|142 Property changes on: trunk/tutti-persistence-adagio/src/main/resources/tutti-db-enumerations.properties ___________________________________________________________________ Added: svn:keywords + Author Date Id Revision HeadURL Added: svn:eol-style + native Modified: trunk/tutti-persistence-adagio/src/test/java/fr/ifremer/tutti/persistence/BaseDaoTest.java =================================================================== --- trunk/tutti-persistence-adagio/src/test/java/fr/ifremer/tutti/persistence/BaseDaoTest.java 2013-01-07 16:42:45 UTC (rev 155) +++ trunk/tutti-persistence-adagio/src/test/java/fr/ifremer/tutti/persistence/BaseDaoTest.java 2013-01-07 22:58:44 UTC (rev 156) @@ -24,45 +24,89 @@ * #L% */ +import fr.ifremer.tutti.persistence.config.TuttiPersistenceAdagioConfig; import org.apache.commons.logging.Log; import org.apache.commons.logging.LogFactory; import org.hibernate.SessionFactory; -import org.junit.Assume; +import org.hibernate.classic.Session; +import org.junit.After; +import org.junit.Before; import org.junit.BeforeClass; -import org.junit.runner.RunWith; -import org.springframework.test.context.ContextConfiguration; -import org.springframework.test.context.junit4.SpringJUnit4ClassRunner; -import org.springframework.test.context.transaction.TransactionConfiguration; -import org.springframework.transaction.annotation.Transactional; +import org.junit.Rule; +import org.junit.rules.TestName; +import org.springframework.context.ApplicationContext; -import javax.annotation.Resource; -import java.io.File; - -@RunWith(SpringJUnit4ClassRunner.class) +//@RunWith(SpringJUnit4ClassRunner.class) // Skip bean definition for services, in the Spring context for DAO unit testing // This is need to increase test execution -@ContextConfiguration(locations = {"classpath:applicationContext-conf.xml", - "classpath:applicationContext-dataSource-local.xml", - "classpath:applicationContext-entities.xml"}) -@TransactionConfiguration(transactionManager = "transactionManager") -@Transactional +//@ContextConfiguration(locations = {"classpath:applicationContext-conf.xml", +// "classpath:applicationContext-dataSource-local.xml", +// "classpath:applicationContext-entities.xml"}) +//@TransactionConfiguration(transactionManager = "transactionManager") +//@Transactional public abstract class BaseDaoTest { /** Logger. */ private static final Log log = LogFactory.getLog(BaseDaoTest.class); - @Resource - protected SessionFactory sessionFactory; + // @Resource + private SessionFactory sessionFactory; + private Session session; + + @Rule + public TestName name = new TestName(); + + protected TuttiPersistenceAdagioConfig config; + @BeforeClass public static void beforeClass() { - File db = new File("src/test/db"); - if (!db.exists()) { - if (log.isWarnEnabled()) { - log.warn("Could not find db at " + db + ", test is skipped."); + TestUtil.checkDbExists(); + } + + @Before + public void setUp() throws Exception { + + config = TestUtil.createConfig(getClass(), name); + + if (log.isDebugEnabled()) { + log.debug("Use conf.properties at " + config.getDbConfigurationPath()); + } + + ApplicationContext context = TestUtil.createSpringContext(); + + sessionFactory = (SessionFactory) context.getBean("sessionFactory"); + } + + @After + public void tearDown() throws Exception { + + TestUtil.resetClassLoader(); + + // close hibernate session if was used + try { + if (session != null) { + session.close(); } - Assume.assumeTrue(false); + } finally { + + // close session factory + sessionFactory.close(); } + } + + protected Session getSession() { + if (session == null) { + session = sessionFactory.openSession(); + } + return session; + } + + protected SessionFactory getSessionFactory() { + return sessionFactory; + } + + } Modified: trunk/tutti-persistence-adagio/src/test/java/fr/ifremer/tutti/persistence/GearDaoTest.java =================================================================== --- trunk/tutti-persistence-adagio/src/test/java/fr/ifremer/tutti/persistence/GearDaoTest.java 2013-01-07 16:42:45 UTC (rev 155) +++ trunk/tutti-persistence-adagio/src/test/java/fr/ifremer/tutti/persistence/GearDaoTest.java 2013-01-07 22:58:44 UTC (rev 156) @@ -24,52 +24,25 @@ * #L% */ -import fr.ifremer.adagio.core.dao.Search; -import fr.ifremer.adagio.core.dao.SearchParameter; -import fr.ifremer.adagio.core.dao.referential.gear.Gear; -import fr.ifremer.adagio.core.dao.referential.gear.GearDao; import org.apache.commons.logging.Log; import org.apache.commons.logging.LogFactory; import org.hibernate.Query; -import org.hibernate.classic.Session; -import org.junit.After; import org.junit.Assert; -import org.junit.Before; import org.junit.Test; -import javax.annotation.Resource; -import java.util.Collection; import java.util.List; -import java.util.Set; - public class GearDaoTest extends BaseDaoTest { /** Logger. */ private static final Log log = LogFactory.getLog(GearDaoTest.class); - protected Session session; - - @Before - public void setUp() throws Exception { - - session = sessionFactory.openSession(); - } - - @After - public void tearDown() throws Exception { - if (session != null) { - session.close(); - } - } - @Test public void getAllGear() { - Query query = session.getNamedQuery("getAllGears"); + Query query = getSession().getNamedQuery("getAllGears"); List gears = query.list(); Assert.assertNotNull(gears); } - } Modified: trunk/tutti-persistence-adagio/src/test/java/fr/ifremer/tutti/persistence/ProgramDaoTest.java =================================================================== --- trunk/tutti-persistence-adagio/src/test/java/fr/ifremer/tutti/persistence/ProgramDaoTest.java 2013-01-07 16:42:45 UTC (rev 155) +++ trunk/tutti-persistence-adagio/src/test/java/fr/ifremer/tutti/persistence/ProgramDaoTest.java 2013-01-07 22:58:44 UTC (rev 156) @@ -47,7 +47,7 @@ @Test public void getAllProgramFromHibernate() { - Session sess = sessionFactory.openSession(); + Session sess = getSession(); Query query = sess.createQuery("from ProgramImpl"); List actual = query.list(); Assert.assertNotNull(actual); Added: trunk/tutti-persistence-adagio/src/test/java/fr/ifremer/tutti/persistence/TestUtil.java =================================================================== --- trunk/tutti-persistence-adagio/src/test/java/fr/ifremer/tutti/persistence/TestUtil.java (rev 0) +++ trunk/tutti-persistence-adagio/src/test/java/fr/ifremer/tutti/persistence/TestUtil.java 2013-01-07 22:58:44 UTC (rev 156) @@ -0,0 +1,137 @@ +package fr.ifremer.tutti.persistence; + +/* + * #%L + * Tutti :: Persistence Adagio (impl) + * $Id$ + * $HeadURL$ + * %% + * Copyright (C) 2012 - 2013 Ifremer + * %% + * This program is free software: you can redistribute it and/or modify + * it under the terms of the GNU 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 General Public + * License along with this program. If not, see + * <http://www.gnu.org/licenses/gpl-3.0.html>. + * #L% + */ + +import fr.ifremer.tutti.persistence.config.TuttiPersistenceAdagioConfig; +import fr.ifremer.tutti.persistence.config.TuttiPersistenceAdagioConfigOption; +import org.apache.commons.io.FileUtils; +import org.apache.commons.logging.Log; +import org.apache.commons.logging.LogFactory; +import org.junit.Assume; +import org.junit.rules.TestName; +import org.nuiton.util.ApplicationConfig; +import org.nuiton.util.ArgumentsParserException; +import org.springframework.context.ApplicationContext; +import org.springframework.context.support.ClassPathXmlApplicationContext; + +import java.io.File; +import java.io.IOException; + +/** + * TODO + * + * @author tchemit <chemit@codelutin.com> + * @since 0.3 + */ +public final class TestUtil { + + /** Logger. */ + private static final Log log = LogFactory.getLog(TestUtil.class); + + public static long BUILD_TIMESTAMP = System.nanoTime(); + + private static ClassLoader oldClassLoader; + + public static TuttiPersistenceAdagioConfig createConfig(Class<?> klass, + TestName name) throws ArgumentsParserException, IOException { + + File resourceDirectory = TestUtil.getTestSpecificDirectory(klass, name); + + RessourceClassLoader loader = + new RessourceClassLoader(klass.getClassLoader()); + + oldClassLoader = Thread.currentThread().getContextClassLoader(); + Thread.currentThread().setContextClassLoader(loader); + + ApplicationConfig applicationConfig = + new ApplicationConfig("tutti-test.properties"); + applicationConfig.loadDefaultOptions( + TuttiPersistenceAdagioConfigOption.values()); + applicationConfig.setDefaultOption("tutti.data.directory", + resourceDirectory.getAbsolutePath()); + applicationConfig.parse(); + + TuttiPersistenceAdagioConfig config = + new TuttiPersistenceAdagioConfig(applicationConfig); + + config.initConfig(loader); + return config; + } + + public static void resetClassLoader() { + if (oldClassLoader != null) { + Thread.currentThread().setContextClassLoader(oldClassLoader); + } + } + + public static void checkDbExists() { + File db = new File("src/test/db"); + if (!db.exists()) { + + if (log.isWarnEnabled()) { + log.warn("Could not find db at " + db + ", test is skipped."); + } + Assume.assumeTrue(false); + } + } + + public static File getTestSpecificDirectory(Class<?> klass, + TestName name) throws IOException { + // Trying to look for the temporary folder to store data for the test + String tempDirPath = System.getProperty("java.io.tmpdir"); + if (tempDirPath == null) { + // can this really occur ? + tempDirPath = ""; + if (log.isWarnEnabled()) { + log.warn("'\"java.io.tmpdir\" not defined"); + } + } + File tempDirFile = new File(tempDirPath); + + // create the directory to store database data + String dataBasePath = klass.getName() + + File.separator // a directory with the test class name + + name.getMethodName() // a sub-directory with the method name + + '_' + + BUILD_TIMESTAMP; // and a timestamp + File databaseFile = new File(tempDirFile, dataBasePath); + FileUtils.forceMkdir(databaseFile); + + return databaseFile; + } + + public static ApplicationContext createSpringContext() { + return new ClassPathXmlApplicationContext( + "applicationContext-conf.xml", + "applicationContext-dataSource-local.xml", + "applicationContext-entities.xml", + "applicationContext-service-tutti.xml"); + } + + private TestUtil() { + } + + +} Property changes on: trunk/tutti-persistence-adagio/src/test/java/fr/ifremer/tutti/persistence/TestUtil.java ___________________________________________________________________ Added: svn:keywords + Author Date Id Revision HeadURL Added: svn:eol-style + native Added: trunk/tutti-persistence-adagio/src/test/java/fr/ifremer/tutti/persistence/TuttiPersistenceAdagioImplTest.java =================================================================== --- trunk/tutti-persistence-adagio/src/test/java/fr/ifremer/tutti/persistence/TuttiPersistenceAdagioImplTest.java (rev 0) +++ trunk/tutti-persistence-adagio/src/test/java/fr/ifremer/tutti/persistence/TuttiPersistenceAdagioImplTest.java 2013-01-07 22:58:44 UTC (rev 156) @@ -0,0 +1,103 @@ +package fr.ifremer.tutti.persistence; + +/* + * #%L + * Tutti :: Persistence Adagio (impl) + * $Id$ + * $HeadURL$ + * %% + * Copyright (C) 2012 - 2013 Ifremer + * %% + * This program is free software: you can redistribute it and/or modify + * it under the terms of the GNU 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 General Public + * License along with this program. If not, see + * <http://www.gnu.org/licenses/gpl-3.0.html>. + * #L% + */ + +import fr.ifremer.tutti.persistence.config.TuttiPersistenceAdagioConfig; +import fr.ifremer.tutti.persistence.entities.referential.Gear; +import org.apache.commons.logging.Log; +import org.apache.commons.logging.LogFactory; +import org.junit.After; +import org.junit.Assert; +import org.junit.Before; +import org.junit.BeforeClass; +import org.junit.Rule; +import org.junit.Test; +import org.junit.rules.TestName; +import org.springframework.context.ApplicationContext; + +import java.util.List; + +/** + * To test the {@link TuttiPersistenceAdagioImpl} service. + * + * @author tchemit <chemit@codelutin.com> + * @since 0.3 + */ +public class TuttiPersistenceAdagioImplTest { + + /** Logger. */ + private static final Log log = + LogFactory.getLog(TuttiPersistenceAdagioImplTest.class); + + @Rule + public TestName name = new TestName(); + + protected TuttiPersistenceAdagioConfig config; + + protected TuttiPersistence driver; + + @BeforeClass + public static void beforeClass() { + + TestUtil.checkDbExists(); + } + + @Before + public void setUp() throws Exception { + + config = TestUtil.createConfig(getClass(), name); + + if (log.isDebugEnabled()) { + log.debug("Use conf.properties at " + config.getDbConfigurationPath()); + } + ApplicationContext context = TestUtil.createSpringContext(); + + driver = (TuttiPersistence) context.getBean("adagioPersistenceService"); + + driver.setEnumerations(config.getDbEnumerations()); + + driver.open(); + } + + @After + public void tearDown() throws Exception { + + // push back old classLoader + TestUtil.resetClassLoader(); + + // close hibernate session if was used + if (driver != null) { + driver.close(); + } + } + + @Test + public void testGetAllGear() throws Exception { + + List<Gear> allGear = driver.getAllGear(); + Assert.assertNotNull(allGear); + Assert.assertFalse(allGear.isEmpty()); + } +} Property changes on: trunk/tutti-persistence-adagio/src/test/java/fr/ifremer/tutti/persistence/TuttiPersistenceAdagioImplTest.java ___________________________________________________________________ Added: svn:keywords + Author Date Id Revision HeadURL Added: svn:eol-style + native Modified: trunk/tutti-persistence-adagio/src/test/java/fr/ifremer/tutti/persistence/VesselDaoTest.java =================================================================== --- trunk/tutti-persistence-adagio/src/test/java/fr/ifremer/tutti/persistence/VesselDaoTest.java 2013-01-07 16:42:45 UTC (rev 155) +++ trunk/tutti-persistence-adagio/src/test/java/fr/ifremer/tutti/persistence/VesselDaoTest.java 2013-01-07 22:58:44 UTC (rev 156) @@ -24,13 +24,8 @@ * #L% */ -import org.apache.commons.logging.Log; -import org.apache.commons.logging.LogFactory; import org.hibernate.Query; -import org.hibernate.classic.Session; -import org.junit.After; import org.junit.Assert; -import org.junit.Before; import org.junit.Ignore; import org.junit.Test; @@ -38,28 +33,10 @@ public class VesselDaoTest extends BaseDaoTest { - /** Logger. */ - private static final Log log = LogFactory.getLog(VesselDaoTest.class); - - protected Session session; - - @Before - public void setUp() throws Exception { - - session = sessionFactory.openSession(); - } - - @After - public void tearDown() throws Exception { - if (session != null) { - session.close(); - } - } - @Test public void getScientificVessel() { - Query query = session.getNamedQuery("getAllScientificVessels"); + Query query = getSession().getNamedQuery("getAllScientificVessels"); List vessels = query.list(); Assert.assertNotNull(vessels); @@ -69,7 +46,7 @@ @Test public void getFishingVessel() { - Query query = session.getNamedQuery("getAllFishingVessels"); + Query query = getSession().getNamedQuery("getAllFishingVessels"); List vessels = query.list(); Assert.assertNotNull(vessels); Deleted: trunk/tutti-persistence-adagio/src/test/resources/conf.properties =================================================================== --- trunk/tutti-persistence-adagio/src/test/resources/conf.properties 2013-01-07 16:42:45 UTC (rev 155) +++ trunk/tutti-persistence-adagio/src/test/resources/conf.properties 2013-01-07 22:58:44 UTC (rev 156) @@ -1,49 +0,0 @@ -### -# #%L -# Tutti :: Persistence Adagio (impl) -# $Id$ -# $HeadURL$ -# %% -# Copyright (C) 2012 Ifremer -# %% -# This program is free software: you can redistribute it and/or modify -# it under the terms of the GNU 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 General Public -# License along with this program. If not, see -# <http://www.gnu.org/licenses/gpl-3.0.html>. -# #L% -### - -# dataSource : jndi ou local -dataSource.type=local - -# Si 'dataSource.type=jndi' : -# - pour tomcat : jdbc/adagio-ds -# - pour jboss : java:jdbc/adagio-ds -#dataSource.jndi-name=jdbc/adagio-ds - -# Si 'dataSource.type=local' : -dataSource.jdbc.driver=org.hsqldb.jdbcDriver -dataSource.jdbc.username=sa -dataSource.jdbc.password= -dataSource.jdbc.url=jdbc:hsqldb:file:src/test/db/allegro -#dataSource.jdbc.url=jdbc:hsqldb:file:${tutti.persistence.dbPath}/${tutti.persistence.dbName} -#dataSource.jdbc.url=jdbc:hsqldb:hsql://localhost/toto - -# Hibernate configuration : -hibernate.dialect=org.hibernate.dialect.HSQLDialect -#hibernate.show_sql=true -hibernate.format_sql=false -hibernate.use_sql_comments=true -hibernate.generate_statistics=false -hibernate.query.substitutions=true 1, false 0 -hibernate.hbm2ddl.auto=none - Modified: trunk/tutti-persistence-adagio/src/test/resources/tutti-test.properties =================================================================== --- trunk/tutti-persistence-adagio/src/test/resources/tutti-test.properties 2013-01-07 16:42:45 UTC (rev 155) +++ trunk/tutti-persistence-adagio/src/test/resources/tutti-test.properties 2013-01-07 22:58:44 UTC (rev 156) @@ -21,4 +21,4 @@ # <http://www.gnu.org/licenses/gpl-3.0.html>. # #L% ### -tutti.data.directory=${testDirectory} +tutti.persistence.jdbc.url=jdbc:hsqldb:file:src/test/db/allegro \ No newline at end of file Modified: trunk/tutti-persistence-dev/src/main/java/fr/ifremer/tutti/persistence/TuttiPersistenceDevImpl.java =================================================================== --- trunk/tutti-persistence-dev/src/main/java/fr/ifremer/tutti/persistence/TuttiPersistenceDevImpl.java 2013-01-07 16:42:45 UTC (rev 155) +++ trunk/tutti-persistence-dev/src/main/java/fr/ifremer/tutti/persistence/TuttiPersistenceDevImpl.java 2013-01-07 22:58:44 UTC (rev 156) @@ -60,7 +60,6 @@ import org.apache.commons.io.IOUtils; import org.apache.commons.logging.Log; import org.apache.commons.logging.LogFactory; -import org.nuiton.util.ApplicationConfig; import org.nuiton.util.beans.Binder; import org.nuiton.util.beans.BinderFactory; @@ -72,6 +71,7 @@ import java.io.ObjectOutputStream; import java.util.List; import java.util.Map; +import java.util.Properties; import java.util.ServiceLoader; import java.util.Set; import java.util.UUID; @@ -128,7 +128,7 @@ * * @since 0.1 */ - protected TuttiPersistenceDevConfig config; + protected final TuttiPersistenceDevConfig config; /** * Cache of data. @@ -144,6 +144,10 @@ */ protected final Map<Class<? extends IdAware>, Binder<? extends IdAware, ? extends IdAware>> binderCache = Maps.newHashMap(); + public TuttiPersistenceDevImpl(TuttiPersistenceDevConfig config) { + this.config = config; + } + //------------------------------------------------------------------------// //-- Technical methods --// //------------------------------------------------------------------------// @@ -154,9 +158,10 @@ } @Override - public void open(ApplicationConfig config) throws IOException { + public void open() throws IOException { - this.config = new TuttiPersistenceDevConfig(config); + Preconditions.checkNotNull(config, " No config property setted"); + try { FileUtils.forceMkdir(this.config.getStorageDirectory()); } catch (IOException e) { @@ -176,6 +181,9 @@ @Override public void close() throws IOException { + if (log.isInfoEnabled()) { + log.info("Close persistence driver " + getImplementationName()); + } binderCache.clear(); for (Class<? extends IdAware> entityType : cache.keySet()) { @@ -183,6 +191,10 @@ } } + @Override + public void setEnumerations(Properties dbEnumerations) { + } + //------------------------------------------------------------------------// //-- Referential methods --// //------------------------------------------------------------------------// Deleted: trunk/tutti-persistence-dev/src/main/resources/META-INF/services/fr.ifremer.tutti.persistence.TuttiPersistence =================================================================== --- trunk/tutti-persistence-dev/src/main/resources/META-INF/services/fr.ifremer.tutti.persistence.TuttiPersistence 2013-01-07 16:42:45 UTC (rev 155) +++ trunk/tutti-persistence-dev/src/main/resources/META-INF/services/fr.ifremer.tutti.persistence.TuttiPersistence 2013-01-07 22:58:44 UTC (rev 156) @@ -1 +0,0 @@ -fr.ifremer.tutti.persistence.TuttiPersistenceDevImpl \ No newline at end of file Modified: trunk/tutti-persistence-dev/src/test/java/fr/ifremer/tutti/persistence/TuttiPersistenceDevImplTest.java =================================================================== --- trunk/tutti-persistence-dev/src/test/java/fr/ifremer/tutti/persistence/TuttiPersistenceDevImplTest.java 2013-01-07 16:42:45 UTC (rev 155) +++ trunk/tutti-persistence-dev/src/test/java/fr/ifremer/tutti/persistence/TuttiPersistenceDevImplTest.java 2013-01-07 22:58:44 UTC (rev 156) @@ -78,7 +78,7 @@ applicationConfig.setDefaultOption("tutti.data.directory", testBasedir.getAbsolutePath()); config = new TuttiPersistenceDevConfig(applicationConfig); - persistence = new TuttiPersistenceDevImpl(); + persistence = new TuttiPersistenceDevImpl(config); } @After @@ -94,7 +94,7 @@ File storageDirectory = config.getStorageDirectory(); Assert.assertNotNull(storageDirectory); Assert.assertFalse(storageDirectory.exists()); - persistence.open(config.getConfig()); + persistence.open(); Assert.assertTrue(storageDirectory.exists()); TuttiPersistenceDevFixtures fixtures = new TuttiPersistenceDevFixtures(); @@ -109,7 +109,7 @@ Assert.assertNotNull(storageDirectory); Assert.assertFalse(storageDirectory.exists()); - persistence.open(config.getConfig()); + persistence.open(); TuttiPersistenceDevFixtures fixtures = new TuttiPersistenceDevFixtures(); Assert.assertEquals(fixtures.getData(Country.class).size(), @@ -128,7 +128,7 @@ Assert.assertNotNull(storageDirectory); Assert.assertFalse(storageDirectory.exists()); - persistence.open(config.getConfig()); + persistence.open(); Assert.assertTrue(storageDirectory.exists()); int size = persistence.getAllProgram().size(); @@ -143,7 +143,7 @@ persistence.close(); Assert.assertTrue(storageDirectory.exists()); - persistence.open(config.getConfig()); + persistence.open(); Assert.assertEquals(size + 1, persistence.getAllProgram().size()); } @@ -151,7 +151,7 @@ @Test public void persistList() throws Exception { - persistence.open(config.getConfig()); + persistence.open(); SpeciesBatch batch = persistence.createSpeciesBatch(new SpeciesBatch(), null); String batchId = batch.getId(); Modified: trunk/tutti-service/pom.xml =================================================================== --- trunk/tutti-service/pom.xml 2013-01-07 16:42:45 UTC (rev 155) +++ trunk/tutti-service/pom.xml 2013-01-07 22:58:44 UTC (rev 156) @@ -48,8 +48,20 @@ <version>${project.version}</version> </dependency> + <dependency> + <groupId>${project.groupId}</groupId> + <artifactId>tutti-persistence-dev</artifactId> + <version>${project.version}</version> + </dependency> <dependency> + <groupId>${project.groupId}</groupId> + <artifactId>tutti-persistence-adagio</artifactId> + <version>${project.version}</version> + </dependency> + + + <dependency> <groupId>org.nuiton</groupId> <artifactId>nuiton-utils</artifactId> </dependency> Modified: trunk/tutti-service/src/main/java/fr/ifremer/tutti/service/PersistenceService.java =================================================================== --- trunk/tutti-service/src/main/java/fr/ifremer/tutti/service/PersistenceService.java 2013-01-07 16:42:45 UTC (rev 155) +++ trunk/tutti-service/src/main/java/fr/ifremer/tutti/service/PersistenceService.java 2013-01-07 22:58:44 UTC (rev 156) @@ -24,8 +24,10 @@ * #L% */ -import com.google.common.base.Preconditions; import fr.ifremer.tutti.persistence.TuttiPersistence; +import fr.ifremer.tutti.persistence.TuttiPersistenceDevImpl; +import fr.ifremer.tutti.persistence.config.TuttiPersistenceAdagioConfig; +import fr.ifremer.tutti.persistence.config.TuttiPersistenceDevConfig; import fr.ifremer.tutti.persistence.entities.data.AccidentalBatch; import fr.ifremer.tutti.persistence.entities.data.BenthosBatch; import fr.ifremer.tutti.persistence.entities.data.Cruise; @@ -47,11 +49,12 @@ import org.apache.commons.logging.Log; import org.apache.commons.logging.LogFactory; import org.nuiton.util.ApplicationConfig; +import org.springframework.context.ApplicationContext; +import org.springframework.context.support.ClassPathXmlApplicationContext; import java.io.IOException; -import java.util.Iterator; import java.util.List; -import java.util.ServiceLoader; +import java.util.Properties; /** * Persistence service. @@ -64,6 +67,8 @@ /** Logger. */ private static final Log log = LogFactory.getLog(PersistenceService.class); + protected TuttiPersistence devDriver; + protected TuttiPersistence driver; @Override @@ -71,7 +76,7 @@ super.setServiceContext(context); try { - open(context.getConfig().getApplicationConfig()); + open(); } catch (IOException e) { throw new TuttiServiceTechnicalException( "Could init persistence storage", e); @@ -84,170 +89,188 @@ @Override public String getImplementationName() { - checkDriverExists(); - return driver.getImplementationName(); + return "Tutti Persistence Service"; } @Override - public void open(ApplicationConfig config) throws IOException { + public void open() throws IOException { - ServiceLoader<TuttiPersistence> loader = - ServiceLoader.load(TuttiPersistence.class); + if (log.isInfoEnabled()) { + log.info("Open persistence driver " + getImplementationName()); + } - Iterator<TuttiPersistence> iterator = loader.iterator(); + ApplicationConfig config = context.getConfig().getApplicationConfig(); - if (!iterator.hasNext()) { + TuttiPersistenceDevConfig devDriverConfig = new TuttiPersistenceDevConfig(config); - // no driver found - throw new TuttiServiceTechnicalException("No persistence driver found"); + devDriver = new TuttiPersistenceDevImpl(devDriverConfig); + + if (log.isInfoEnabled()) { + log.info("Will open persistence driver " + devDriver.getImplementationName()); } - driver = iterator.next(); + devDriver.open(); - if (iterator.hasNext()) { + TuttiPersistenceAdagioConfig driverConfig = new TuttiPersistenceAdagioConfig(config); - // yet another driver found, not possible - throw new TuttiServiceTechnicalException("No persistence driver found"); + if (!driverConfig.getDbDirectory().exists()) { + if (log.isWarnEnabled()) { + + log.warn("--------------------------------------------------------------------"); + log.warn(""); + log.warn("Could not find database directory at " + driverConfig.getDbDirectory()); + log.warn("Will still use dev dataStorage in " + devDriverConfig.getStorageDirectory()); + log.warn(""); + log.warn("--------------------------------------------------------------------"); + } + + driver = devDriver; + } else { + driverConfig.initConfig(context.getResourceLoader()); + + // can now instanciate Spring context + + ApplicationContext springContext = new ClassPathXmlApplicationContext( + "applicationContext-conf.xml", + "applicationContext-dataSource-local.xml", + "applicationContext-entities.xml", + "applicationContext-service-tutti.xml" + ); + + driver = (TuttiPersistence) springContext.getBean("adagioPersistenceService"); + + if (log.isInfoEnabled()) { + log.info("Will open persistence driver " + driver.getImplementationName()); + } + + Properties enumerations = driverConfig.getDbEnumerations(); + driver.setEnumerations(enumerations); + driver.open(); } - if (log.isInfoEnabled()) { - log.info("Using persistence driver " + getImplementationName()); - } - driver.open(config); + } @Override public void close() throws IOException { - checkDriverExists(); if (log.isInfoEnabled()) { - log.info("Will close persistence driver " + getImplementationName()); + log.info("Will close persistence Service " + getImplementationName()); } - driver.close(); + try { + driver.close(); + } finally { + + devDriver.close(); + } } + @Override + public void setEnumerations(Properties dbEnumerations) { + } + //------------------------------------------------------------------------// //-- Referential methods --// //------------------------------------------------------------------------// @Override public List<Species> getAllSpecies() { - checkDriverExists(); - return driver.getAllSpecies(); + return devDriver.getAllSpecies(); } @Override public Species getSpecies(String speciesId) { - checkDriverExists(); - return driver.getSpecies(speciesId); + return devDriver.getSpecies(speciesId); } @Override public List<Zone> getAllZone() { - checkDriverExists(); - return driver.getAllZone(); + return devDriver.getAllZone(); } @Override public List<Country> getAllCountry() { - checkDriverExists(); - return driver.getAllCountry(); + return devDriver.getAllCountry(); } @Override public List<Vessel> getAllVessel() { - checkDriverExists(); - return driver.getAllVessel(); + return devDriver.getAllVessel(); } @Override public List<Gear> getAllGear() { - checkDriverExists(); - return driver.getAllGear(); + return devDriver.getAllGear(); } @Override public List<Person> getAllPerson() { - checkDriverExists(); - return driver.getAllPerson(); + return devDriver.getAllPerson(); } @Override public List<FishingOperationLocation> getAllFishingOperationStrata(String zoneId) { - checkDriverExists(); - return driver.getAllFishingOperationStrata(zoneId); + return devDriver.getAllFishingOperationStrata(zoneId); } @Override public List<FishingOperationLocation> getAllFishingOperationSubStrata(String locationId) { - checkDriverExists(); - return driver.getAllFishingOperationSubStrata(locationId); + return devDriver.getAllFishingOperationSubStrata(locationId); } @Override public List<FishingOperationLocation> getAllFishingOperationLocation(String locationId) { - checkDriverExists(); - return driver.getAllFishingOperationLocation(locationId); + return devDriver.getAllFishingOperationLocation(locationId); } @Override public List<Caracteristic> getAllFishingOperationEnvironmentCaracteristic() { - checkDriverExists(); - return driver.getAllFishingOperationEnvironmentCaracteristic(); + return devDriver.getAllFishingOperationEnvironmentCaracteristic(); } @Override public List<Caracteristic> getAllFishingOperationGearCaracteristic() { - checkDriverExists(); - return driver.getAllFishingOperationGearCaracteristic(); + return devDriver.getAllFishingOperationGearCaracteristic(); } @Override public List<Caracteristic> getAllFishingOperationHydrologicCaracteristic() { - checkDriverExists(); - return driver.getAllFishingOperationHydrologicCaracteristic(); + return devDriver.getAllFishingOperationHydrologicCaracteristic(); } @Override public List<Caracteristic> getAllSpeciesLengthStepCaracteristic() { - checkDriverExists(); - return driver.getAllSpeciesLengthStepCaracteristic(); + return devDriver.getAllSpeciesLengthStepCaracteristic(); } @Override public Caracteristic getSizeCategoryCaracteristic() { - checkDriverExists(); - return driver.getSizeCategoryCaracteristic(); + return devDriver.getSizeCategoryCaracteristic(); } @Override public Caracteristic getSexCaracteristic() { - checkDriverExists(); - return driver.getSexCaracteristic(); + return devDriver.getSexCaracteristic(); } @Override public Caracteristic getSortedUnsortedCaracteristic() { - checkDriverExists(); - return driver.getSortedUnsortedCaracteristic(); + return devDriver.getSortedUnsortedCaracteristic(); } @Override public Caracteristic getMaturityCaracteristic() { - checkDriverExists(); - return driver.getMaturityCaracteristic(); + return devDriver.getMaturityCaracteristic(); } @Override public Caracteristic getMacroWasteCategoryCaracteristic() { - checkDriverExists(); - return driver.getMacroWasteCategoryCaracteristic(); + return devDriver.getMacroWasteCategoryCaracteristic(); } @Override public Caracteristic getMacroWasteSizeCategoryCaracteristic() { - checkDriverExists(); - return driver.getMacroWasteSizeCategoryCaracteristic(); + return devDriver.getMacroWasteSizeCategoryCaracteristic(); } //------------------------------------------------------------------------// @@ -256,26 +279,22 @@ @Override public List<Program> getAllProgram() { - checkDriverExists(); - return driver.getAllProgram(); + return devDriver.getAllProgram(); } @Override public Program getProgram(String id) { - checkDriverExists(); - return driver.getProgram(id); + return devDriver.getProgram(id); } @Override public Program createProgram(Program bean) { - checkDriverExists(); - return driver.createProgram(bean); + return devDriver.createProgram(bean); } @Override public Program saveProgram(Program bean) { - checkDriverExists(); - return driver.saveProgram(bean); + return devDriver.saveProgram(bean); } //------------------------------------------------------------------------// @@ -284,26 +303,22 @@ @Override public List<Cruise> getAllCruise(String programId) { - checkDriverExists(); - return driver.getAllCruise(programId); + return devDriver.getAllCruise(programId); } @Override public Cruise getCruise(String id) { - checkDriverExists(); - return driver.getCruise(id); + return devDriver.getCruise(id); } @Override public Cruise createCruise(Cruise bean) { - checkDriverExists(); - return driver.createCruise(bean); + return devDriver.createCruise(bean); } @Override public Cruise saveCruise(Cruise bean) { - checkDriverExists(); - return driver.saveCruise(bean); + return devDriver.saveCruise(bean); } //------------------------------------------------------------------------// @@ -312,26 +327,22 @@ @Override public List<TuttiProtocol> getAllProtocol() { - checkDriverExists(); - return driver.getAllProtocol(); + return devDriver.getAllProtocol(); } @Override public TuttiProtocol getProtocol(String id) { - checkDriverExists(); - return driver.getProtocol(id); + return devDriver.getProtocol(id); } @Override public TuttiProtocol createProtocol(TuttiProtocol bean) { - checkDriverExists(); - return driver.createProtocol(bean); + return devDriver.createProtocol(bean); } @Override public TuttiProtocol saveProtocol(TuttiProtocol bean) { - checkDriverExists(); - return driver.saveProtocol(bean); + return devDriver.saveProtocol(bean); } @@ -341,26 +352,22 @@ @Override public List<FishingOperation> getAllFishingOperation(String cruiseId) { - checkDriverExists(); - return driver.getAllFishingOperation(cruiseId); + return devDriver.getAllFishingOperation(cruiseId); } @Override public FishingOperation getFishingOperation(String id) { - checkDriverExists(); - return driver.getFishingOperation(id); + return devDriver.getFishingOperation(id); } @Override public FishingOperation createFishingOperation(FishingOperation bean) { - checkDriverExists(); - return driver.createFishingOperation(bean); + return devDriver.createFishingOperation(bean); } @Override public FishingOperation saveFishingOperation(FishingOperation bean) { - checkDriverExists(); - return driver.saveFishingOperation(bean); + return devDriver.saveFishingOperation(bean); } //------------------------------------------------------------------------// @@ -370,58 +377,49 @@ @Override public List<SpeciesBatch> getAllRootSpeciesBatch(String fishingOperationId) { - checkDriverExists(); - return driver.getAllRootSpeciesBatch(fishingOperationId); + return devDriver.getAllRootSpeciesBatch(fishingOperationId); } @Override public List<SpeciesBatch> getAllSpeciesBatch(String fishingOperationId) { - checkDriverExists(); - return driver.getAllSpeciesBatch(fishingOperationId); + return devDriver.getAllSpeciesBatch(fishingOperationId); } @Override public SpeciesBatch getSpeciesBatch(String id) { - checkDriverExists(); - return driver.getSpeciesBatch(id); + return devDriver.getSpeciesBatch(id); } @Override public SpeciesBatch createSpeciesBatch(SpeciesBatch bean, String parentBatchId) { - checkDriverExists(); - return driver.createSpeciesBatch(bean, parentBatchId); + return devDriver.createSpeciesBatch(bean, parentBatchId); } @Override public SpeciesBatch saveSpeciesBatch(SpeciesBatch bean) { - checkDriverExists(); - return driver.saveSpeciesBatch(bean); + return devDriver.saveSpeciesBatch(bean); } @Override public void deleteSpeciesBatch(String id) { - checkDriverExists(); - driver.deleteSpeciesBatch(id); + devDriver.deleteSpeciesBatch(id); } @Override public void deleteSpeciesSubBatch(String id) { - checkDriverExists(); - driver.deleteSpeciesSubBatch(id); + devDriver.deleteSpeciesSubBatch(id); } @Override public List<SpeciesBatchFrequency> getAllSpeciesBatchFrequency(String speciesBatchId) { - checkDriverExists(); - return driver.getAllSpeciesBatchFrequency(speciesBatchId); + return devDriver.getAllSpeciesBatchFrequency(speciesBatchId); } @Override public List<SpeciesBatchFrequency> saveSpeciesBatchFrequency(String speciesBatchId, List<SpeciesBatchFrequency> frequencies) { - checkDriverExists(); - return driver.saveSpeciesBatchFrequency(speciesBatchId, frequencies); + return devDriver.saveSpeciesBatchFrequency(speciesBatchId, frequencies); } //------------------------------------------------------------------------// @@ -430,32 +428,27 @@ @Override public List<BenthosBatch> getAllBenthosBatch(String fishingOperationId) { - checkDriverExists(); - return driver.getAllBenthosBatch(fishingOperationId); + return devDriver.getAllBenthosBatch(fishingOperationId); } @Override public BenthosBatch getBenthosBatch(String id) { - checkDriverExists(); - return driver.getBenthosBatch(id); + return devDriver.getBenthosBatch(id); } @Override public BenthosBatch createBenthosBatch(BenthosBatch bean) { - checkDriverExists(); - return driver.createBenthosBatch(bean); + return devDriver.createBenthosBatch(bean); } @Override public BenthosBatch saveBenthosBatch(BenthosBatch bean) { - checkDriverExists(); - return driver.saveBenthosBatch(bean); + return devDriver.saveBenthosBatch(bean); } @Override public void deleteBenthosBatch(String id) { - checkDriverExists(); - driver.deleteBenthosBatch(id); + devDriver.deleteBenthosBatch(id); } //------------------------------------------------------------------------// @@ -464,32 +457,27 @@ @Override public List<PlanktonBatch> getAllPlanktonBatch(String fishingOperationId) { - checkDriverExists(); - return driver.getAllPlanktonBatch(fishingOperationId); + return devDriver.getAllPlanktonBatch(fishingOperationId); } @Override public PlanktonBatch getPlanktonBatch(String id) { - checkDriverExists(); - return driver.getPlanktonBatch(id); + return devDriver.getPlanktonBatch(id); } @Override public PlanktonBatch createPlanktonBatch(PlanktonBatch bean) { - checkDriverExists(); - return driver.createPlanktonBatch(bean); + return devDriver.createPlanktonBatch(bean); } @Override public PlanktonBatch savePlanktonBatch(PlanktonBatch bean) { - checkDriverExists(); - return driver.savePlanktonBatch(bean); + return devDriver.savePlanktonBatch(bean); } @Override public void deletePlanktonBatch(String id) { - checkDriverExists(); - driver.deletePlanktonBatch(id); + devDriver.deletePlanktonBatch(id); } //------------------------------------------------------------------------// @@ -498,32 +486,27 @@ @Override public List<MacroWasteBatch> getAllMacroWasteBatch(String fishingOperationId) { - checkDriverExists(); - return driver.getAllMacroWasteBatch(fishingOperationId); + return devDriver.getAllMacroWasteBatch(fishingOperationId); } @Override public MacroWasteBatch getMacroWasteBatch(String id) { - checkDriverExists(); - return driver.getMacroWasteBatch(id); + return devDriver.getMacroWasteBatch(id); } @Override public MacroWasteBatch createMacroWasteBatch(MacroWasteBatch bean) { - checkDriverExists(); - return driver.createMacroWasteBatch(bean); + return devDriver.createMacroWasteBatch(bean); } @Override public MacroWasteBatch saveMacroWasteBatch(MacroWasteBatch bean) { - checkDriverExists(); - return driver.saveMacroWasteBatch(bean); + return devDriver.saveMacroWasteBatch(bean); } @Override public void deleteMacroWasteBatch(String id) { - checkDriverExists(); - driver.deleteMacroWasteBatch(id); + devDriver.deleteMacroWasteBatch(id); } //------------------------------------------------------------------------// @@ -532,41 +515,31 @@ @Override public List<AccidentalBatch> getAllAccidentalBatch(String fishingOperationId) { - checkDriverExists(); - return driver.getAllAccidentalBatch(fishingOperationId); + return devDriver.getAllAccidentalBatch(fishingOperationId); } @Override public AccidentalBatch getAccidentalBatch(String id) { - checkDriverExists(); - return driver.getAccidentalBatch(id); + return devDriver.getAccidentalBatch(id); } @Override public AccidentalBatch createAccidentalBatch(AccidentalBatch bean) { - checkDriverExists(); - return driver.createAccidentalBatch(bean); + return devDriver.createAccidentalBatch(bean); } @Override public AccidentalBatch saveAccidentalBatch(AccidentalBatch bean) { - checkDriverExists(); - return driver.saveAccidentalBatch(bean); + return devDriver.saveAccidentalBatch(bean); } @Override public void deleteAccidentalBatch(String id) { - checkDriverExists(); - driver.deleteAccidentalBatch(id); + devDriver.deleteAccidentalBatch(id); } //------------------------------------------------------------------------// //-- Internal methods --// //------------------------------------------------------------------------// - protected void checkDriverExists() { - Preconditions.checkNotNull( - driver, - "Driver not initialized, please use the open method before all."); - } } Modified: trunk/tutti-service/src/main/java/fr/ifremer/tutti/service/TuttiServiceContext.java =================================================================== --- trunk/tutti-service/src/main/java/fr/ifremer/tutti/service/TuttiServiceContext.java 2013-01-07 16:42:45 UTC (rev 155) +++ trunk/tutti-service/src/main/java/fr/ifremer/tutti/service/TuttiServiceContext.java 2013-01-07 22:58:44 UTC (rev 156) @@ -28,6 +28,7 @@ import com.google.common.cache.CacheBuilder; import com.google.common.cache.CacheLoader; import com.google.common.cache.LoadingCache; +import fr.ifremer.tutti.persistence.RessourceClassLoader; import fr.ifremer.tutti.service.config.TuttiServiceConfig; import org.apache.commons.io.IOUtils; import org.apache.commons.logging.Log; @@ -54,9 +55,13 @@ protected final TuttiServiceConfig config; + protected final RessourceClassLoader resourceLoader; + protected final LoadingCache<Class<? extends TuttiService>, TuttiService> services; - public TuttiServiceContext(TuttiServiceConfig config) { + public TuttiServiceContext(RessourceClassLoader resourceLoader, + TuttiServiceConfig config) { + this.resourceLoader = resourceLoader; this.config = config; this.services = CacheBuilder.newBuilder().build(new CacheLoader<Class<? extends TuttiService>, TuttiService>() { @Override @@ -78,6 +83,10 @@ return config; } + public RessourceClassLoader getResourceLoader() { + return resourceLoader; + } + public <S extends TuttiService> S getService(Class<S> serviceType) { try { S s = (S) services.get(serviceType); Modified: trunk/tutti-service/src/main/java/fr/ifremer/tutti/service/config/TuttiServiceConfig.java =================================================================== --- trunk/tutti-service/src/main/java/fr/ifremer/tutti/service/config/TuttiServiceConfig.java 2013-01-07 16:42:45 UTC (rev 155) +++ trunk/tutti-service/src/main/java/fr/ifremer/tutti/service/config/TuttiServiceConfig.java 2013-01-07 22:58:44 UTC (rev 156) @@ -53,7 +53,7 @@ this.applicationConfig = applicationConfig; - applicationConfig.loadDefaultOptions(TuttiServiceConfigOption.values()); +// applicationConfig.loadDefaultOptions(TuttiServiceConfigOption.values()); } public ApplicationConfig getApplicationConfig() { Modified: trunk/tutti-ui-swing/pom.xml =================================================================== --- trunk/tutti-ui-swing/pom.xml 2013-01-07 16:42:45 UTC (rev 155) +++ trunk/tutti-ui-swing/pom.xml 2013-01-07 22:58:44 UTC (rev 156) @@ -218,6 +218,14 @@ <scope>runtime</scope> </dependency> + <dependency> + <groupId>${project.groupId}</groupId> + <artifactId>tutti-persistence-adagio</artifactId> + <version>${project.version}</version> + <scope>runtime</scope> + </dependency> + + <!--dependency> <groupId>com.jidesoft</groupId> <artifactId>jide-oss</artifactId> Modified: trunk/tutti-ui-swing/src/license/THIRD-PARTY.properties =================================================================== --- trunk/tutti-ui-swing/src/license/THIRD-PARTY.properties 2013-01-07 16:42:45 UTC (rev 155) +++ trunk/tutti-ui-swing/src/license/THIRD-PARTY.properties 2013-01-07 22:58:44 UTC (rev 156) @@ -1,18 +1,36 @@ # Generated by org.codehaus.mojo.license.AddThirdPartyMojo #------------------------------------------------------------------------------- # Already used licenses in project : +# - Apache License # - BSD License +# - BSD-3 Clause License +# - COMMON DEVELOPMENT AND DISTRIBUTION LICENSE (CDDL) Version 1.0 +# - Common Development and Distribution License (CDDL) v1.0 +# - Common Public License Version 1.0 +# - Eclipse Public License - v 1.0 # - GNU General Public License - Version 2 with the class path exception +# - GNU LESSER GENERAL PUBLIC LICENSE +# - GNU Lesser General Public License # - General Public License (GPL) +# - HSQLDB License # - LGPL 2.1 # - Lesser General Public License (LGPL) # - Lesser General Public License (LGPL) v 3.0 # - MIT License # - MPL 1.1 +# - New BSD License +# - Public Domain # - The Apache Software License, Version 2.0 +# - license.txt #------------------------------------------------------------------------------- # Please fill the missing licenses for dependencies : # # -#Thu Nov 22 16:54:03 CET 2012 +#Mon Jan 07 22:45:28 CET 2013 +antlr--antlr--2.7.6=BSD License +commons-codec--commons-codec--1.2=The Apache Software License, Version 2.0 commons-primitives--commons-primitives--1.0=The Apache Software License, Version 2.0 +dom4j--dom4j--1.6.1=BSD License +fr.ifremer.adagio--adagio-core--3.3.1-SNAPSHOT=Lesser General Public License (LGPL) v 3.0 +javax.transaction--jta--1.1=COMMON DEVELOPMENT AND DISTRIBUTION LICENSE (CDDL) Version 1.0 +regexp--regexp--1.3=The Apache Software License, Version 2.0 Modified: trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/RunTutti.java =================================================================== --- trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/RunTutti.java 2013-01-07 16:42:45 UTC (rev 155) +++ trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/RunTutti.java 2013-01-07 22:58:44 UTC (rev 156) @@ -55,6 +55,9 @@ // Create application context final TuttiUIContext context = TuttiUIContext.newContext(config); + // use our special classLoader (which will read some files from resources from a configuration directory) + Thread.currentThread().setContextClassLoader(context.getResourceLoader()); + // Use shutdownHook to close context on System.exit Runtime.getRuntime().addShutdownHook(new Thread(new Runnable() { Modified: trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/TuttiUIContext.java =================================================================== --- trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/TuttiUIContext.java 2013-01-07 16:42:45 UTC (rev 155) +++ trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/TuttiUIContext.java 2013-01-07 22:58:44 UTC (rev 156) @@ -26,6 +26,7 @@ import com.google.common.base.Preconditions; import com.google.common.collect.Sets; +import fr.ifremer.tutti.persistence.RessourceClassLoader; import fr.ifremer.tutti.persistence.entities.data.Cruise; import fr.ifremer.tutti.persistence.entities.data.Program; import fr.ifremer.tutti.persistence.entities.protocol.TuttiProtocol; @@ -89,6 +90,13 @@ protected final TuttiConfig config; /** + * ClassLoader ressource. + * + * @since 0.3 + */ + protected final RessourceClassLoader resourceLoader; + + /** * Service context used by any service. * * @since 0.1 @@ -147,7 +155,8 @@ protected TuttiUIContext(TuttiConfig config) { this.config = config; - this.serviceContext = new TuttiServiceContext(config.getServiceConfig()); + this.resourceLoader = new RessourceClassLoader(Thread.currentThread().getContextClassLoader()); + this.serviceContext = new TuttiServiceContext(resourceLoader, config.getServiceConfig()); this.swingSession = new SwingSession(getConfig().getUIConfigFile(), false); UIMessageNotifier logMessageNotifier = new UIMessageNotifier() { @@ -389,4 +398,8 @@ messageNotifier.showInformationMessage(message); } } + + public RessourceClassLoader getResourceLoader() { + return resourceLoader; + } } Modified: trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/config/TuttiConfig.java =================================================================== --- trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/config/TuttiConfig.java 2013-01-07 16:42:45 UTC (rev 155) +++ trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/config/TuttiConfig.java 2013-01-07 22:58:44 UTC (rev 156) @@ -32,6 +32,7 @@ import org.apache.commons.logging.Log; import org.apache.commons.logging.LogFactory; import org.nuiton.util.ApplicationConfig; +import org.nuiton.util.ApplicationConfigHelper; import org.nuiton.util.ArgumentsParserException; import org.nuiton.util.Version; @@ -69,14 +70,15 @@ public TuttiConfig(String file, String... args) { applicationConfig = new ApplicationConfig(); + + // load all config default options + ApplicationConfigHelper.loadAllDefaultOption(applicationConfig, + null, + null, + null, + true); applicationConfig.setConfigFileName(file); - log.info(this + " is initializing..."); - - applicationConfig.loadDefaultOptions(TuttiConfigOption.values()); - - serviceConfig = new TuttiServiceConfig(applicationConfig); - try { applicationConfig.parse(args); @@ -85,6 +87,11 @@ "Could not parse configuration", e); } + log.info(this + " is initializing..."); + + serviceConfig = new TuttiServiceConfig(applicationConfig); + + try { serviceConfig.prepareDirectories(); } catch (IOException e) { Modified: trunk/tutti-ui-swing/src/main/resources/fr/ifremer/tutti/ui/swing/content/operation/EditFishingOperationUIModel-warning-validation.xml =================================================================== --- trunk/tutti-ui-swing/src/main/resources/fr/ifremer/tutti/ui/swing/content/operation/EditFishingOperationUIModel-warning-validation.xml 2013-01-07 16:42:45 UTC (rev 155) +++ trunk/tutti-ui-swing/src/main/resources/fr/ifremer/tutti/ui/swing/content/operation/EditFishingOperationUIModel-warning-validation.xml 2013-01-07 22:58:44 UTC (rev 156) @@ -1,5 +1,29 @@ <?xml version="1.0" encoding="UTF-8"?> +<!-- + #%L + Tutti :: UI + $Id$ + $HeadURL$ + %% + Copyright (C) 2012 - 2013 Ifremer + %% + This program is free software: you can redistribute it and/or modify + it under the terms of the GNU 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 General Public + License along with this program. If not, see + <http://www.gnu.org/licenses/gpl-3.0.html>. + #L% + --> + <!DOCTYPE validators PUBLIC "-//Apache Struts//XWork Validator 1.0.3//EN" "http://struts.apache.org/dtds/xwork-validator-1.0.3.dtd"> Modified: trunk/tutti-ui-swing/src/main/resources/log4j.properties =================================================================== --- trunk/tutti-ui-swing/src/main/resources/log4j.properties 2013-01-07 16:42:45 UTC (rev 155) +++ trunk/tutti-ui-swing/src/main/resources/log4j.properties 2013-01-07 22:58:44 UTC (rev 156) @@ -38,3 +38,4 @@ # tutti levels log4j.logger.fr.ifremer=INFO +log4j.logger.org.nuiton.util=INFO