Author: tchemit Date: 2013-01-13 15:58:21 +0100 (Sun, 13 Jan 2013) New Revision: 184 Url: http://forge.codelutin.com/projects/tutti/repository/revisions/184 Log: refs #1807: [Persistence] Adagio r?\195?\169f?\195?\169rentiel (usage in dev storage) fixes #1911: [CAMPAGNE] - Gestion des campagnes (filtrage des navires) updates to nuiton-utils 2.6.6 fix some little NPE fix validation Added: trunk/tutti-persistence-dev/src/main/java/fr/ifremer/tutti/persistence/service/ trunk/tutti-persistence-dev/src/main/java/fr/ifremer/tutti/persistence/service/ReferentialPersistenceServiceDevImpl.java Modified: trunk/pom.xml trunk/tutti-persistence-adagio/pom.xml trunk/tutti-persistence-adagio/src/main/java/fr/ifremer/tutti/persistence/service/ReferentialPersistenceServiceImpl.java trunk/tutti-persistence-adagio/src/main/resources/tutti-db-enumerations.properties trunk/tutti-persistence-adagio/src/test/java/fr/ifremer/tutti/persistence/service/ReferentialPersistenceServiceTest.java trunk/tutti-persistence-adagio/src/test/resources/log4j.properties trunk/tutti-persistence-adagio/src/test/resources/tutti-test.properties trunk/tutti-persistence-dev/src/main/java/fr/ifremer/tutti/persistence/TuttiPersistenceDevFixtures.java 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/entities/AbstractTuttiEntity.java trunk/tutti-ui-swing/src/license/THIRD-PARTY.properties trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/cruise/EditCruiseUIHandler.java trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/operation/EditFishingOperationUIModel.java trunk/tutti-ui-swing/src/main/resources/fr/ifremer/tutti/ui/swing/content/operation/EditFishingOperationUIModel-edit-error-validation.xml trunk/tutti-ui-swing/src/main/resources/fr/ifremer/tutti/ui/swing/content/operation/EditFishingOperationUIModel-validate-error-validation.xml Modified: trunk/pom.xml =================================================================== --- trunk/pom.xml 2013-01-12 18:02:10 UTC (rev 183) +++ trunk/pom.xml 2013-01-13 14:58:21 UTC (rev 184) @@ -122,7 +122,7 @@ <!-- libraries version --> - <nuitonUtilsVersion>2.7-SNAPSHOT</nuitonUtilsVersion> + <nuitonUtilsVersion>2.6.6</nuitonUtilsVersion> <nuitonI18nVersion>2.5</nuitonI18nVersion> <eugenePluginVersion>2.6.1</eugenePluginVersion> Modified: trunk/tutti-persistence/src/main/java/fr/ifremer/tutti/persistence/entities/AbstractTuttiEntity.java =================================================================== --- trunk/tutti-persistence/src/main/java/fr/ifremer/tutti/persistence/entities/AbstractTuttiEntity.java 2013-01-12 18:02:10 UTC (rev 183) +++ trunk/tutti-persistence/src/main/java/fr/ifremer/tutti/persistence/entities/AbstractTuttiEntity.java 2013-01-13 14:58:21 UTC (rev 184) @@ -24,6 +24,7 @@ * #L% */ +import org.apache.commons.lang3.ObjectUtils; import org.nuiton.util.CollectionUtil; import java.io.Serializable; @@ -62,7 +63,16 @@ @Override public boolean equals(Object o) { - if (this == o) return true; + if (this == o) { + return true; + } + if (o == null) { + return false; + } + if (ObjectUtils.notEqual(o.getClass(), getClass())) { + // not sale class + return false; + } if (!(o instanceof AbstractTuttiEntity)) return false; AbstractTuttiEntity that = (AbstractTuttiEntity) o; @@ -75,4 +85,9 @@ public int hashCode() { return id != null ? id.hashCode() : 0; } + + @Override + public String toString() { + return super.toString() + ": " + id; + } } \ No newline at end of file Modified: trunk/tutti-persistence-adagio/pom.xml =================================================================== --- trunk/tutti-persistence-adagio/pom.xml 2013-01-12 18:02:10 UTC (rev 183) +++ trunk/tutti-persistence-adagio/pom.xml 2013-01-13 14:58:21 UTC (rev 184) @@ -47,6 +47,12 @@ </dependency> <dependency> + <groupId>${project.groupId}</groupId> + <artifactId>tutti-persistence-dev</artifactId> + <version>${project.version}</version> + </dependency> + + <dependency> <groupId>fr.ifremer.adagio</groupId> <artifactId>adagio-core</artifactId> <classifier>allegro</classifier> Modified: trunk/tutti-persistence-adagio/src/main/java/fr/ifremer/tutti/persistence/service/ReferentialPersistenceServiceImpl.java =================================================================== --- trunk/tutti-persistence-adagio/src/main/java/fr/ifremer/tutti/persistence/service/ReferentialPersistenceServiceImpl.java 2013-01-12 18:02:10 UTC (rev 183) +++ trunk/tutti-persistence-adagio/src/main/java/fr/ifremer/tutti/persistence/service/ReferentialPersistenceServiceImpl.java 2013-01-13 14:58:21 UTC (rev 184) @@ -98,7 +98,7 @@ while (list.hasNext()) { Object[] source = list.next(); Zone target = new Zone(); - target.setId((String) source[0]); + target.setId(String.valueOf(source[0])); target.setName((String) source[1]); target.setDescription((String) source[2]); setStatus((fr.ifremer.adagio.core.dao.referential.Status) source[3], target); @@ -488,10 +488,10 @@ protected FishingOperationLocation loadFishingOperationLocation(Object[] source) { FishingOperationLocation target = new FishingOperationLocation(); target.setId(String.valueOf(source[0])); - target.setName(String.valueOf(source[1])); - target.setLabel(String.valueOf(source[2])); - target.setDescription(String.valueOf(source[3])); - target.setLocationLevel(Integer.valueOf(source[4].toString())); + target.setName((String)source[1]); + target.setLabel((String)source[2]); + target.setDescription((String)source[3]); + target.setLocationLevel((Integer)source[4]); setStatus((fr.ifremer.adagio.core.dao.referential.Status) source[5], target); return target; @@ -519,8 +519,8 @@ protected Gear loadGear(Object[] source) { Gear result = new Gear(); result.setId(String.valueOf(source[0])); - result.setName(String.valueOf(source[1])); - result.setLabel(String.valueOf(source[2])); + result.setName((String)source[1]); + result.setLabel((String)source[2]); setStatus((fr.ifremer.adagio.core.dao.referential.Status) source[3], result); return result; } Modified: trunk/tutti-persistence-adagio/src/main/resources/tutti-db-enumerations.properties =================================================================== --- trunk/tutti-persistence-adagio/src/main/resources/tutti-db-enumerations.properties 2013-01-12 18:02:10 UTC (rev 183) +++ trunk/tutti-persistence-adagio/src/main/resources/tutti-db-enumerations.properties 2013-01-13 14:58:21 UTC (rev 184) @@ -300,13 +300,13 @@ # 10/01/2012 BLA Need to retrieve a Location from a given position (Lat/Long) LocationLevelId.RECTANGLE_STATISTIQUE_MED=145 -# Ajoute pour Tutti +# Ajout pour Tutti LocationLevelId.LOCALITE=22 LocationLevelId.STRATA=23 #TODO Creer la bonne valeur LocationLevelId.SUBSTRATA=-23 #TODO Mettre la bonne valeur -LocationLevelId.PROGRAM=111 +LocationLevelId.PROGRAM=21 MethodId.DECLARATION=1 @@ -316,8 +316,6 @@ ParameterGroupId.ENVIRONEMENT_MEASUREMENT=3 #TODO Mettre la bonne valeur ParameterGroupId.HYDROLOGIC_MEASUREMENT=3 -#TODO A creer -ParameterGroupId.LENGTH=3 PmfmId.SEX=196 PmfmId.SIZE_CATEGORY=198 Modified: trunk/tutti-persistence-adagio/src/test/java/fr/ifremer/tutti/persistence/service/ReferentialPersistenceServiceTest.java =================================================================== --- trunk/tutti-persistence-adagio/src/test/java/fr/ifremer/tutti/persistence/service/ReferentialPersistenceServiceTest.java 2013-01-12 18:02:10 UTC (rev 183) +++ trunk/tutti-persistence-adagio/src/test/java/fr/ifremer/tutti/persistence/service/ReferentialPersistenceServiceTest.java 2013-01-13 14:58:21 UTC (rev 184) @@ -24,7 +24,12 @@ * #L% */ +import com.google.common.base.Preconditions; import fr.ifremer.tutti.persistence.DatabaseResource; +import fr.ifremer.tutti.persistence.TuttiPersistenceDevImpl; +import fr.ifremer.tutti.persistence.config.TuttiPersistenceDevConfig; +import fr.ifremer.tutti.persistence.entities.IdAware; +import fr.ifremer.tutti.persistence.entities.TuttiEntities; import fr.ifremer.tutti.persistence.entities.referential.Caracteristic; import fr.ifremer.tutti.persistence.entities.referential.Country; import fr.ifremer.tutti.persistence.entities.referential.Gear; @@ -32,12 +37,18 @@ 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.apache.commons.logging.Log; +import org.apache.commons.logging.LogFactory; +import org.junit.AfterClass; import org.junit.Assert; import org.junit.Before; +import org.junit.BeforeClass; import org.junit.ClassRule; import org.junit.Ignore; import org.junit.Test; +import org.nuiton.util.ApplicationConfig; +import java.io.IOException; import java.util.List; /** @@ -51,8 +62,55 @@ @ClassRule public static final DatabaseResource dbResource = new DatabaseResource(); + /** Logger. */ + private static final Log log = + LogFactory.getLog(ReferentialPersistenceServiceTest.class); + + protected static TuttiPersistenceDevImpl storage; + protected ReferentialPersistenceService service; + @BeforeClass + public static void beforeClass() throws IOException { + + // create a storage + + ApplicationConfig applicationConfig = dbResource.getConfig().getConfig(); + + TuttiPersistenceDevConfig devDriverConfig = + new TuttiPersistenceDevConfig(applicationConfig); + + applicationConfig.setOption(TuttiPersistenceDevImpl.SKIP_FIXTURES_OPTION, Boolean.TRUE.toString()); + + storage = new TuttiPersistenceDevImpl(devDriverConfig) { + + @Override + public <B extends IdAware> B create(String type, + B bean, + boolean sychronize) { + Preconditions.checkNotNull(bean, "Can't persist a null bean"); + B result = TuttiEntities.newEntity(bean); + result.setId(bean.getId()); + if (log.isDebugEnabled()) { + log.debug("Will persist [" + type + ":" + bean.getId() + "]"); + } + super.persist(type, bean, result, sychronize); + return result; + } + }; + + if (log.isInfoEnabled()) { + log.info("Will open persistence driver " + storage.getImplementationName()); + } + + storage.open(); + } + + @AfterClass + public static void afterClass() throws IOException { + storage.close(); + } + @Before public void setUp() throws Exception { service = TuttiPersistenceServiceLocator.getReferentialPersistenceService(); @@ -62,7 +120,10 @@ public void getAllProgramZone() { List<Zone> result = service.getAllProgramZone(); Assert.assertNotNull(result); - Assert.assertEquals(0, result.size()); + Assert.assertEquals(240, result.size()); + + persistList(Zone.class, result); + assertSize(result, storage.getAllProgramZone()); } @Test @@ -70,6 +131,8 @@ List<Country> result = service.getAllCountry(); Assert.assertNotNull(result); Assert.assertEquals(240, result.size()); + persistList(Country.class, result); + assertSize(result, storage.getAllCountry()); } @Test @@ -77,6 +140,8 @@ List<Vessel> result = service.getAllScientificVessel(); Assert.assertNotNull(result); Assert.assertEquals(1, result.size()); + persistList(Vessel.class, "Scientific", result); + assertSize(result, storage.getAllScientificVessel()); } //FIXME : requete trop longue (index manquant, trop de jointures?) @@ -86,6 +151,8 @@ List<Vessel> result = service.getAllFishingVessel(); Assert.assertNotNull(result); Assert.assertEquals(187, result.size()); + persistList(Vessel.class, "Fishing", result); + assertSize(result, storage.getAllFishingVessel()); } @Test @@ -93,6 +160,8 @@ List<Gear> result = service.getAllScientificGear(); Assert.assertNotNull(result); Assert.assertEquals(2, result.size()); + persistList(Gear.class, "Scientific", result); + assertSize(result, storage.getAllScientificGear()); } @Test @@ -100,6 +169,8 @@ List<Gear> result = service.getAllFishingGear(); Assert.assertNotNull(result); Assert.assertEquals(75, result.size()); + persistList(Gear.class, "Fishing", result); + assertSize(result, storage.getAllFishingGear()); } @Test @@ -107,14 +178,17 @@ List<Person> result = service.getAllPerson(); Assert.assertNotNull(result); Assert.assertEquals(123, result.size()); + persistList(Person.class, result); + assertSize(result, storage.getAllPerson()); } - @Test public void getAllSpecies() { List<Species> result = service.getAllSpecies(); Assert.assertNotNull(result); Assert.assertEquals(8435, result.size()); + persistList(Species.class, result); + assertSize(result, storage.getAllSpecies()); } @Test @@ -122,6 +196,8 @@ List<Species> result = service.getAllBenthosSpecies(); Assert.assertNotNull(result); Assert.assertEquals(8435, result.size()); + persistList(Species.class, "Benthos", result); + assertSize(result, storage.getAllBenthosSpecies()); } @Test @@ -129,6 +205,8 @@ List<Species> result = service.getAllPlanktonSpecies(); Assert.assertNotNull(result); Assert.assertEquals(8435, result.size()); + persistList(Species.class, "Plankton", result); + assertSize(result, storage.getAllPlanktonSpecies()); } @Test @@ -152,6 +230,8 @@ List<Caracteristic> result = service.getAllFishingOperationEnvironmentCaracteristic(); Assert.assertNotNull(result); Assert.assertEquals(40, result.size()); + persistList(Caracteristic.class, ReferentialPersistenceServiceDevImpl.CaracteristicEnum.Environment.name(), result); + assertSize(result, storage.getAllFishingOperationEnvironmentCaracteristic()); } @Test @@ -159,13 +239,19 @@ List<Caracteristic> result = service.getAllFishingOperationGearCaracteristic(); Assert.assertNotNull(result); Assert.assertEquals(155, result.size()); + persistList(Caracteristic.class, ReferentialPersistenceServiceDevImpl.CaracteristicEnum.Gear.name(), result); + assertSize(result, storage.getAllFishingOperationGearCaracteristic()); } + //TODO Fix this! @Test + @Ignore public void getAllFishingOperationHydrologicCaracteristic() { List<Caracteristic> result = service.getAllFishingOperationHydrologicCaracteristic(); Assert.assertNotNull(result); Assert.assertEquals(40, result.size()); + persistList(Caracteristic.class, ReferentialPersistenceServiceDevImpl.CaracteristicEnum.Hydrology.name(), result); + assertSize(result, storage.getAllFishingOperationHydrologicCaracteristic()); } @Test @@ -173,6 +259,8 @@ List<Caracteristic> result = service.getAllSpeciesLengthStepCaracteristic(); Assert.assertNotNull(result); Assert.assertEquals(24, result.size()); + persistList(Caracteristic.class, ReferentialPersistenceServiceDevImpl.CaracteristicEnum.Length.name(), result); + assertSize(result, storage.getAllSpeciesLengthStepCaracteristic()); } @Test @@ -182,6 +270,8 @@ Assert.assertTrue(result.isQualitativeType()); Assert.assertNotNull(result.getQualitativeValue()); Assert.assertEquals(6, result.sizeQualitativeValue()); + persist(Caracteristic.class, ReferentialPersistenceServiceDevImpl.CaracteristicEnum.SizeCategory.name(), result); + assertCaracteristicSize(result, storage.getSizeCategoryCaracteristic()); } @Test @@ -191,6 +281,8 @@ Assert.assertTrue(result.isQualitativeType()); Assert.assertNotNull(result.getQualitativeValue()); Assert.assertEquals(4, result.sizeQualitativeValue()); + persist(Caracteristic.class, ReferentialPersistenceServiceDevImpl.CaracteristicEnum.SexCategory.name(), result); + assertCaracteristicSize(result, storage.getSexCaracteristic()); } @Test @@ -200,6 +292,8 @@ Assert.assertTrue(result.isQualitativeType()); Assert.assertNotNull(result.getQualitativeValue()); Assert.assertEquals(2, result.sizeQualitativeValue()); + persist(Caracteristic.class, ReferentialPersistenceServiceDevImpl.CaracteristicEnum.SortedUnsortedCategory.name(), result); + assertCaracteristicSize(result, storage.getSortedUnsortedCaracteristic()); } @Test @@ -209,6 +303,8 @@ Assert.assertTrue(result.isQualitativeType()); Assert.assertNotNull(result.getQualitativeValue()); Assert.assertEquals(10, result.sizeQualitativeValue()); + persist(Caracteristic.class, ReferentialPersistenceServiceDevImpl.CaracteristicEnum.MaturityCategory.name(), result); + assertCaracteristicSize(result, storage.getMaturityCaracteristic()); } @Test @@ -218,6 +314,8 @@ Assert.assertTrue(result.isQualitativeType()); Assert.assertNotNull(result.getQualitativeValue()); Assert.assertEquals(10, result.sizeQualitativeValue()); + persist(Caracteristic.class, ReferentialPersistenceServiceDevImpl.CaracteristicEnum.MacroWasteCategory.name(), result); + assertCaracteristicSize(result, storage.getMacroWasteCategoryCaracteristic()); } @Test @@ -227,6 +325,47 @@ Assert.assertTrue(result.isQualitativeType()); Assert.assertNotNull(result.getQualitativeValue()); Assert.assertEquals(10, result.sizeQualitativeValue()); + persist(Caracteristic.class, ReferentialPersistenceServiceDevImpl.CaracteristicEnum.MacroWasteSizeCategory.name(), result); + assertCaracteristicSize(result, storage.getMacroWasteSizeCategoryCaracteristic()); } + protected <S extends IdAware> void persistList(Class<S> type, List<S> result) { + persistList(type, null, result); + } + + protected <S extends IdAware> void persistList(Class<S> type, String context, List<S> result) { + + String key = TuttiPersistenceDevImpl.getKey(type, context); + for (S s : result) { + storage.create(key, s, false); + } + storage.persistToFile(key); + } + + protected <S extends IdAware> void persist(Class<S> type, S result) { + persist(type, null, result); + } + + protected <S extends IdAware> void persist(Class<S> type, String context, S result) { + String key = TuttiPersistenceDevImpl.getKey(type, context); + storage.create(key, result, true); + } + + protected void assertSize(List<?> expectedList, List<?> storageList) { + Assert.assertNotNull(expectedList); + Assert.assertNotNull(storageList); + expectedList.removeAll(storageList); + Assert.assertTrue("Some " + expectedList.size() + " entities were not persisted in storage :" + + expectedList, expectedList.isEmpty()); + + } + + protected void assertCaracteristicSize(Caracteristic incoming, + Caracteristic caracteristic) { + Assert.assertNotNull(incoming); + Assert.assertNotNull(caracteristic); + Assert.assertEquals(incoming, caracteristic); + Assert.assertEquals(incoming.sizeQualitativeValue(), + caracteristic.sizeQualitativeValue()); + } } Modified: trunk/tutti-persistence-adagio/src/test/resources/log4j.properties =================================================================== --- trunk/tutti-persistence-adagio/src/test/resources/log4j.properties 2013-01-12 18:02:10 UTC (rev 183) +++ trunk/tutti-persistence-adagio/src/test/resources/log4j.properties 2013-01-13 14:58:21 UTC (rev 184) @@ -38,5 +38,5 @@ log4j.logger.net.sf.ehcache=WARN log4j.logger.fr.ifremer.adagio.core=DEBUG -log4j.logger.fr.ifremer.tutti=DEBUG +log4j.logger.fr.ifremer.tutti=INFO log4j.logger.org.nuiton=INFO Modified: trunk/tutti-persistence-adagio/src/test/resources/tutti-test.properties =================================================================== --- trunk/tutti-persistence-adagio/src/test/resources/tutti-test.properties 2013-01-12 18:02:10 UTC (rev 183) +++ trunk/tutti-persistence-adagio/src/test/resources/tutti-test.properties 2013-01-13 14:58:21 UTC (rev 184) @@ -21,5 +21,5 @@ # <http://www.gnu.org/licenses/gpl-3.0.html>. # #L% ### -tutti.persistence.jdbc.url=jdbc:hsqldb:file:src/test/db/allegro -#tutti.persistence.jdbc.url=jdbc:hsqldb:hsql://localhost/allegro \ No newline at end of file +#tutti.persistence.jdbc.url=jdbc:hsqldb:file:src/test/db/allegro +tutti.persistence.jdbc.url=jdbc:hsqldb:hsql://localhost/allegro \ No newline at end of file Modified: trunk/tutti-persistence-dev/src/main/java/fr/ifremer/tutti/persistence/TuttiPersistenceDevFixtures.java =================================================================== --- trunk/tutti-persistence-dev/src/main/java/fr/ifremer/tutti/persistence/TuttiPersistenceDevFixtures.java 2013-01-12 18:02:10 UTC (rev 183) +++ trunk/tutti-persistence-dev/src/main/java/fr/ifremer/tutti/persistence/TuttiPersistenceDevFixtures.java 2013-01-13 14:58:21 UTC (rev 184) @@ -40,7 +40,7 @@ import java.util.List; import java.util.UUID; -import static fr.ifremer.tutti.persistence.TuttiPersistenceDevImpl.CaracteristicEnum; +import static fr.ifremer.tutti.persistence.service.ReferentialPersistenceServiceDevImpl.CaracteristicEnum; /** * TODO @@ -50,8 +50,17 @@ */ public class TuttiPersistenceDevFixtures { - protected final ArrayListMultimap<Class<? extends IdAware>, IdAware> cache; + protected final ArrayListMultimap<String, IdAware> cache; + protected void putInCache(Class<?> type, IdAware b) { + putInCache(type, null, b); + } + + protected void putInCache(Class<?> type, String context, IdAware b) { + String key = TuttiPersistenceDevImpl.getKey(type, context); + cache.put(key, b); + } + public TuttiPersistenceDevFixtures() { // inject default datas (only referential) @@ -62,7 +71,7 @@ z = new Zone(); z.setId(UUID.randomUUID().toString()); z.setName("zone1"); - cache.put(Zone.class, z); + putInCache(Zone.class, z); FishingOperationLocation l; FishingOperationLocation sl; @@ -72,122 +81,149 @@ l.setId(UUID.randomUUID().toString()); l.setName("zone1 - strata1"); l.setZone(z); - cache.put(FishingOperationLocation.class, l); + putInCache(FishingOperationLocation.class, "Strata", l); sl = new FishingOperationLocation(); sl.setId(UUID.randomUUID().toString()); sl.setName("strat1 - substrata1"); sl.setParent(l); - cache.put(FishingOperationLocation.class, sl); + putInCache(FishingOperationLocation.class, "SubStrata", sl); ssl = new FishingOperationLocation(); ssl.setId(UUID.randomUUID().toString()); ssl.setName("substrata1 - localite1"); ssl.setLocalite(true); ssl.setParent(sl); - cache.put(FishingOperationLocation.class, ssl); + putInCache(FishingOperationLocation.class, "Localite", ssl); ssl = new FishingOperationLocation(); ssl.setId(UUID.randomUUID().toString()); ssl.setName("substrata1 - localite2"); ssl.setLocalite(true); ssl.setParent(sl); - cache.put(FishingOperationLocation.class, ssl); + putInCache(FishingOperationLocation.class, "Localite", ssl); sl = new FishingOperationLocation(); sl.setId(UUID.randomUUID().toString()); sl.setName("strat1 - substrata2"); sl.setParent(l); - cache.put(FishingOperationLocation.class, sl); + putInCache(FishingOperationLocation.class, "SubStrata", sl); ssl = new FishingOperationLocation(); ssl.setId(UUID.randomUUID().toString()); ssl.setName("substrata2 - localite1"); ssl.setLocalite(true); ssl.setParent(sl); - cache.put(FishingOperationLocation.class, ssl); + putInCache(FishingOperationLocation.class, "Localite", ssl); ssl = new FishingOperationLocation(); ssl.setId(UUID.randomUUID().toString()); ssl.setName("substrata2 - localite2"); ssl.setLocalite(true); ssl.setParent(sl); - cache.put(FishingOperationLocation.class, ssl); + putInCache(FishingOperationLocation.class, "Localite", ssl); l = new FishingOperationLocation(); l.setId(UUID.randomUUID().toString()); l.setName("zone1 - strata2"); l.setZone(z); - cache.put(FishingOperationLocation.class, l); + putInCache(FishingOperationLocation.class, "Strata", l); ssl = new FishingOperationLocation(); ssl.setId(UUID.randomUUID().toString()); ssl.setName("strata2 - localite1"); ssl.setParent(l); ssl.setLocalite(true); - cache.put(FishingOperationLocation.class, ssl); + putInCache(FishingOperationLocation.class, "Localite", ssl); ssl = new FishingOperationLocation(); ssl.setId(UUID.randomUUID().toString()); ssl.setName("strata2 - localite2"); ssl.setParent(l); ssl.setLocalite(true); - cache.put(FishingOperationLocation.class, ssl); + putInCache(FishingOperationLocation.class, "Localite", ssl); z = new Zone(); z.setId(UUID.randomUUID().toString()); z.setName("zone2"); - cache.put(Zone.class, z); + putInCache(Zone.class, z); l = new FishingOperationLocation(); l.setId(UUID.randomUUID().toString()); l.setName("zone2 - strata1"); l.setZone(z); - cache.put(FishingOperationLocation.class, l); + putInCache(FishingOperationLocation.class, "Strata", l); l = new FishingOperationLocation(); l.setId(UUID.randomUUID().toString()); l.setName("zone2 - strata2"); l.setZone(z); - cache.put(FishingOperationLocation.class, l); + putInCache(FishingOperationLocation.class, "Strata", l); Country c; c = new Country(); c.setId(UUID.randomUUID().toString()); c.setName("France"); - cache.put(Country.class, c); + putInCache(Country.class, c); c = new Country(); c.setId(UUID.randomUUID().toString()); c.setName("Espagne"); - cache.put(Country.class, c); + putInCache(Country.class, c); Vessel v; v = new Vessel(); v.setId(UUID.randomUUID().toString()); v.setName("THALASSA"); + v.setScientificVessel(true); v.setRegistrationCode("RegistrationCode1"); - cache.put(Vessel.class, v); + putInCache(Vessel.class, "Scientific", v); v = new Vessel(); v.setId(UUID.randomUUID().toString()); v.setName("THALASSA-II"); + v.setScientificVessel(true); v.setRegistrationCode("RegistrationCode2"); - cache.put(Vessel.class, v); + putInCache(Vessel.class, "Scientific", v); + v = new Vessel(); + v.setId(UUID.randomUUID().toString()); + v.setName("Fishing1"); + v.setScientificVessel(false); + v.setRegistrationCode("RegistrationCode1"); + putInCache(Vessel.class, "Fishing", v); + + v = new Vessel(); + v.setId(UUID.randomUUID().toString()); + v.setName("Fishing2"); + v.setScientificVessel(false); + v.setRegistrationCode("RegistrationCode1"); + putInCache(Vessel.class, "Fishing", v); + + Gear g; g = new Gear(); g.setId(UUID.randomUUID().toString()); - g.setName("Gear-1"); - cache.put(Gear.class, g); + g.setName("Gear-Scientific-1"); + putInCache(Gear.class, "Scientific", g); g = new Gear(); g.setId(UUID.randomUUID().toString()); - g.setName("Gear-2"); - cache.put(Gear.class, g); + g.setName("Gear-Scientific-2"); + putInCache(Gear.class, "Scientific", g); + g = new Gear(); + g.setId(UUID.randomUUID().toString()); + g.setName("Gear-Fishing-1"); + putInCache(Gear.class, "Fishing", g); + + g = new Gear(); + g.setId(UUID.randomUUID().toString()); + g.setName("Gear-Fishing-2"); + putInCache(Gear.class, "Fishing", g); + Person u; u = new Person(); @@ -195,47 +231,47 @@ u.setName("Vincent Badts"); u.setFirstName("Vincent"); u.setLastName("Badts"); - cache.put(Person.class, u); + putInCache(Person.class, u); u = new Person(); u.setId(UUID.randomUUID().toString()); u.setName("Jean claude Mahet"); u.setFirstName("Jean claude"); u.setLastName("Mahet"); - cache.put(Person.class, u); + putInCache(Person.class, u); u = new Person(); u.setId(UUID.randomUUID().toString()); u.setName("Luisa Metral"); u.setFirstName("Luisa"); u.setLastName("Metral"); - cache.put(Person.class, u); + putInCache(Person.class, u); u = new Person(); u.setId(UUID.randomUUID().toString()); u.setName("Jean Hervé Bourdeix"); u.setFirstName("Jean Hervé"); u.setLastName("Bourdeix"); - cache.put(Person.class, u); + putInCache(Person.class, u); u = new Person(); u.setId(UUID.randomUUID().toString()); u.setName("Ysabelle Cheret"); u.setFirstName("Ysabelle"); u.setLastName("Cheret"); - cache.put(Person.class, u); + putInCache(Person.class, u); u = new Person(); u.setId(UUID.randomUUID().toString()); u.setName("Blandine Brisset"); u.setFirstName("Blandine"); u.setLastName("Brisset"); - cache.put(Person.class, u); + putInCache(Person.class, u); Caracteristic ca; ca = createQualitativeCaracteristic("Vent Beaufort", - CaracteristicEnum.FishingOperationEnvironment.name()); + CaracteristicEnum.Environment.name()); createCaracteristicQualitativeValue(ca, "Calme"); createCaracteristicQualitativeValue(ca, "Très légère brise"); @@ -247,83 +283,83 @@ createCaracteristicQualitativeValue(ca, "Fort coup de vent"); ca = createQualitativeCaracteristic("État de la mer", - CaracteristicEnum.FishingOperationEnvironment.name()); + CaracteristicEnum.Environment.name()); createCaracteristicQualitativeValue(ca, "Mer calme"); createCaracteristicQualitativeValue(ca, "Mer agitée"); createNumberCaracteristic("Direction du vent", - CaracteristicEnum.FishingOperationEnvironment.name()); + CaracteristicEnum.Environment.name()); createNumberCaracteristic("Profondeur (début de traine)", - CaracteristicEnum.FishingOperationEnvironment.name()); + CaracteristicEnum.Environment.name()); createNumberCaracteristic("Profondeur (fin de traine)", - CaracteristicEnum.FishingOperationEnvironment.name()); + CaracteristicEnum.Environment.name()); createNumberCaracteristic("Ouverture horizontale", - CaracteristicEnum.FishingOperationGear.name()); + CaracteristicEnum.Gear.name()); createNumberCaracteristic("Ouverture verticale", - CaracteristicEnum.FishingOperationGear.name()); + CaracteristicEnum.Gear.name()); createNumberCaracteristic("Longueur funes", - CaracteristicEnum.FishingOperationGear.name()); + CaracteristicEnum.Gear.name()); createNumberCaracteristic("Longueur bras", - CaracteristicEnum.FishingOperationGear.name()); + CaracteristicEnum.Gear.name()); ca = createQualitativeCaracteristic("Systeme cul ferme", - CaracteristicEnum.FishingOperationGear.name()); + CaracteristicEnum.Gear.name()); createCaracteristicQualitativeValue(ca, "Oui"); createCaracteristicQualitativeValue(ca, "Non"); ca = createQualitativeCaracteristic("Géométrie mesurée", - CaracteristicEnum.FishingOperationGear.name()); + CaracteristicEnum.Gear.name()); createCaracteristicQualitativeValue(ca, "Oui"); createCaracteristicQualitativeValue(ca, "Non"); createNumberCaracteristic("Température Surface_S", - CaracteristicEnum.FishingOperationHydrologic_surfaceTemperature.name()); + CaracteristicEnum.Hydrology.name()); createNumberCaracteristic("Température Surface_E", - CaracteristicEnum.FishingOperationHydrologic_surfaceTemperature.name()); + CaracteristicEnum.Hydrology.name()); createNumberCaracteristic("Température Surface_A", - CaracteristicEnum.FishingOperationHydrologic_surfaceTemperature.name()); + CaracteristicEnum.Hydrology.name()); createNumberCaracteristic("Température fond_S", - CaracteristicEnum.FishingOperationHydrologic_bottomTemperature.name()); + CaracteristicEnum.Hydrology.name()); createNumberCaracteristic("Température fond_E", - CaracteristicEnum.FishingOperationHydrologic_bottomTemperature.name()); + CaracteristicEnum.Hydrology.name()); createNumberCaracteristic("Température fond_A", - CaracteristicEnum.FishingOperationHydrologic_bottomTemperature.name()); + CaracteristicEnum.Hydrology.name()); createNumberCaracteristic("Salinité surface_S", - CaracteristicEnum.FishingOperationHydrologic_surfaceSalinity.name()); + CaracteristicEnum.Hydrology.name()); createNumberCaracteristic("Salinité surface_E", - CaracteristicEnum.FishingOperationHydrologic_surfaceSalinity.name()); + CaracteristicEnum.Hydrology.name()); createNumberCaracteristic("Salinité surface_A", - CaracteristicEnum.FishingOperationHydrologic_surfaceSalinity.name()); + CaracteristicEnum.Hydrology.name()); createNumberCaracteristic("Salinité fond_S", - CaracteristicEnum.FishingOperationHydrologic_bottomSalinity.name()); + CaracteristicEnum.Hydrology.name()); createNumberCaracteristic("Salinité fond_E", - CaracteristicEnum.FishingOperationHydrologic_bottomSalinity.name()); + CaracteristicEnum.Hydrology.name()); createNumberCaracteristic("Salinité fond_A", - CaracteristicEnum.FishingOperationHydrologic_bottomSalinity.name()); + CaracteristicEnum.Hydrology.name()); createNumberCaracteristic("Mesure au cm par un observateur (carapace)", - CaracteristicEnum.SpeciesFrequency.name()); + CaracteristicEnum.Length.name()); createNumberCaracteristic("Mesure au cm par un observateur (totale)", - CaracteristicEnum.SpeciesFrequency.name()); + CaracteristicEnum.Length.name()); createNumberCaracteristic("Mesure au cm par un observateur (céphalothorax)", - CaracteristicEnum.SpeciesFrequency.name()); + CaracteristicEnum.Length.name()); createNumberCaracteristic("Mesure au 1/2 cm par un observateur (totale)", - CaracteristicEnum.SpeciesFrequency.name()); + CaracteristicEnum.Length.name()); createNumberCaracteristic("Mesure au 1/100 mm par un observateur (queue de langoustine)", - CaracteristicEnum.SpeciesFrequency.name()); + CaracteristicEnum.Length.name()); createNumberCaracteristic("Mesure au 1/2 cm par un observateur (manteau)", - CaracteristicEnum.SpeciesFrequency.name()); + CaracteristicEnum.Length.name()); createNumberCaracteristic("Mesure au cm par un observateur (manteau)", - CaracteristicEnum.SpeciesFrequency.name()); + CaracteristicEnum.Length.name()); Species sp; @@ -331,25 +367,25 @@ sp.setId(UUID.randomUUID().toString()); sp.setCodeMemo("BAR"); sp.setGenusSpecies("Bar"); - cache.put(Species.class, sp); + putInCache(Species.class, sp); sp = new Species(); sp.setId(UUID.randomUUID().toString()); sp.setCodeMemo("CHIN"); sp.setGenusSpecies("Chinchard"); - cache.put(Species.class, sp); + putInCache(Species.class, sp); sp = new Species(); sp.setId(UUID.randomUUID().toString()); sp.setCodeMemo("FLE"); sp.setGenusSpecies("Flet"); - cache.put(Species.class, sp); + putInCache(Species.class, sp); sp = new Species(); sp.setId(UUID.randomUUID().toString()); sp.setCodeMemo("LIM"); sp.setGenusSpecies("Limande"); - cache.put(Species.class, sp); + putInCache(Species.class, sp); ca = createQualitativeCaracteristic("MacroWaste", CaracteristicEnum.MacroWasteCategory.name()); @@ -386,28 +422,27 @@ createCaracteristicQualitativeValue(ca, "<100*100cm = 1m²"); createCaracteristicQualitativeValue(ca, ">100*100cm = 1m²"); - ca = createQualitativeCaracteristic("Sorted / Unsorted Category", CaracteristicEnum.SpeciesSortedUnsorted.name()); + ca = createQualitativeCaracteristic("Sorted / Unsorted Category", CaracteristicEnum.SortedUnsortedCategory.name()); createCaracteristicQualitativeValue(ca, "Vrac"); createCaracteristicQualitativeValue(ca, "Hors Vrac"); - ca = createQualitativeCaracteristic("Species Sex Category", CaracteristicEnum.SpeciesSex.name()); + ca = createQualitativeCaracteristic("Species Sex Category", CaracteristicEnum.SexCategory.name()); createCaracteristicQualitativeValue(ca, "Male"); createCaracteristicQualitativeValue(ca, "Femelle"); createCaracteristicQualitativeValue(ca, "Indéterminé"); - ca = createQualitativeCaracteristic("Species Maturity Category", CaracteristicEnum.SpeciesMaturity.name()); + ca = createQualitativeCaracteristic("Species Maturity Category", CaracteristicEnum.MaturityCategory.name()); createCaracteristicQualitativeValue(ca, "0"); createCaracteristicQualitativeValue(ca, "1"); createCaracteristicQualitativeValue(ca, "2"); - ca = createQualitativeCaracteristic("Species Size Category", CaracteristicEnum.SpeciesSizeCategory.name()); + ca = createQualitativeCaracteristic("Species Size Category", CaracteristicEnum.SizeCategory.name()); createCaracteristicQualitativeValue(ca, "Petit"); createCaracteristicQualitativeValue(ca, "Gros"); - } protected void createCaracteristicQualitativeValue(Caracteristic ca, String name) { @@ -415,7 +450,7 @@ cqv.setId(UUID.randomUUID().toString()); cqv.setName(name); ca.addQualitativeValue(cqv); - cache.put(CaracteristicQualitativeValue.class, cqv); + putInCache(CaracteristicQualitativeValue.class, name, cqv); } protected Caracteristic createQualitativeCaracteristic(String name, String category) { @@ -425,7 +460,7 @@ ca.setCategory(category); ca.setQualitativeType(true); ca.setQualitativeValue(Lists.<CaracteristicQualitativeValue>newArrayList()); - cache.put(Caracteristic.class, ca); + putInCache(Caracteristic.class, category, ca); return ca; } @@ -435,11 +470,11 @@ ca.setName(name); ca.setCategory(category); ca.setNumberType(true); - cache.put(Caracteristic.class, ca); + putInCache(Caracteristic.class, category, ca); return ca; } - public <B extends IdAware> List<B> getData(Class<B> entityType) { + public <B extends IdAware> List<B> getData(String entityType) { List<B> result = (List<B>) cache.get(entityType); return result; } 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-12 18:02:10 UTC (rev 183) +++ trunk/tutti-persistence-dev/src/main/java/fr/ifremer/tutti/persistence/TuttiPersistenceDevImpl.java 2013-01-13 14:58:21 UTC (rev 184) @@ -56,6 +56,8 @@ 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 fr.ifremer.tutti.persistence.service.ReferentialPersistenceService; +import fr.ifremer.tutti.persistence.service.ReferentialPersistenceServiceDevImpl; import org.apache.commons.io.FileUtils; import org.apache.commons.io.IOUtils; import org.apache.commons.logging.Log; @@ -71,7 +73,6 @@ import java.io.ObjectOutputStream; import java.util.List; import java.util.Map; -import java.util.ServiceLoader; import java.util.Set; import java.util.UUID; @@ -87,40 +88,48 @@ private static final Log log = LogFactory.getLog(TuttiPersistenceDevImpl.class); - /** - * All entity types. - * - * @since 0.1 - */ - public static final List<Class<? extends IdAware>> TYPES; + public static final List<String> FILE_KEYS = Lists.newArrayList( + "fr.ifremer.tutti.persistence.entities.data.Attachment", + "fr.ifremer.tutti.persistence.entities.data.AccidentalBatch", + "fr.ifremer.tutti.persistence.entities.data.BenthosBatch", + "fr.ifremer.tutti.persistence.entities.data.FishingOperation", + "fr.ifremer.tutti.persistence.entities.data.MacroWasteBatch", + "fr.ifremer.tutti.persistence.entities.data.PlanktonBatch", + "fr.ifremer.tutti.persistence.entities.data.Program", + "fr.ifremer.tutti.persistence.entities.data.Cruise", + "fr.ifremer.tutti.persistence.entities.data.SpeciesBatch", + "fr.ifremer.tutti.persistence.entities.data.SpeciesBatchFrequency", + "fr.ifremer.tutti.persistence.entities.protocol.TuttiProtocol", + "fr.ifremer.tutti.persistence.entities.referential.CaracteristicQualitativeValue", + "fr.ifremer.tutti.persistence.entities.referential.Country", + "fr.ifremer.tutti.persistence.entities.referential.FishingOperationLocation#Strata", + "fr.ifremer.tutti.persistence.entities.referential.FishingOperationLocation#SubStrata", + "fr.ifremer.tutti.persistence.entities.referential.FishingOperationLocation#Localite", + "fr.ifremer.tutti.persistence.entities.referential.FishingOperationLocation", + "fr.ifremer.tutti.persistence.entities.referential.Gear#Scientific", + "fr.ifremer.tutti.persistence.entities.referential.Gear#Fishing", + "fr.ifremer.tutti.persistence.entities.referential.Person", + "fr.ifremer.tutti.persistence.entities.referential.Species", + "fr.ifremer.tutti.persistence.entities.referential.Species#Benthos", + "fr.ifremer.tutti.persistence.entities.referential.Species#Plankton", + "fr.ifremer.tutti.persistence.entities.referential.Vessel#Scientific", + "fr.ifremer.tutti.persistence.entities.referential.Vessel#Fishing", + "fr.ifremer.tutti.persistence.entities.referential.Zone" + ); static { - TYPES = Lists.newArrayList(); - - for (IdAware e : ServiceLoader.load(IdAware.class)) { - TYPES.add(e.getClass()); + for (ReferentialPersistenceServiceDevImpl.CaracteristicEnum caracteristicEnum : + ReferentialPersistenceServiceDevImpl.CaracteristicEnum.values()) { + FILE_KEYS.add(getKey(Caracteristic.class, caracteristicEnum.name())); } + if (log.isInfoEnabled()) { - log.info("Found " + TYPES.size() + " entity types."); + log.info("Found " + FILE_KEYS.size() + " files."); } } - enum CaracteristicEnum { - FishingOperationEnvironment, - FishingOperationGear, - FishingOperationHydrologic_bottomTemperature, - FishingOperationHydrologic_surfaceTemperature, - FishingOperationHydrologic_bottomSalinity, - FishingOperationHydrologic_surfaceSalinity, - SpeciesFrequency, - SpeciesSizeCategory, - SpeciesSex, - SpeciesSortedUnsorted, - SpeciesMaturity, - MacroWasteCategory, - MacroWasteSizeCategory - } + public static final String SKIP_FIXTURES_OPTION = "LoadFixtures"; /** * Persistence config. @@ -134,15 +143,22 @@ * * @since 0.1 */ - protected final ArrayListMultimap<Class<? extends IdAware>, IdAware> cache = ArrayListMultimap.create(); + protected final ArrayListMultimap<String, IdAware> cache = ArrayListMultimap.create(); /** * Cache of binder. * * @since 0.2 */ - protected final Map<Class<? extends IdAware>, Binder<? extends IdAware, ? extends IdAware>> binderCache = Maps.newHashMap(); + protected final Map<String, Binder<? extends IdAware, ? extends IdAware>> binderCache = Maps.newHashMap(); + /** + * Referential persistence service. + * + * @since 0.3 + */ + protected ReferentialPersistenceService referentialPersistenceService; + public TuttiPersistenceDevImpl(TuttiPersistenceDevConfig config) { this.config = config; } @@ -156,6 +172,7 @@ return "Persistence Dev implementation"; } + @Override public void open() throws IOException { Preconditions.checkNotNull(config, " No config property setted"); @@ -168,14 +185,25 @@ cache.clear(); - TuttiPersistenceDevFixtures fixtures = - new TuttiPersistenceDevFixtures(); + boolean loadFixtures = + config.getConfig().getOptionAsBoolean(SKIP_FIXTURES_OPTION); + if (!loadFixtures) { - for (Class<? extends IdAware> entityType : TYPES) { - loadEntities(entityType, fixtures); + if (log.isInfoEnabled()) { + log.info("Load default fixtures..."); + } + TuttiPersistenceDevFixtures fixtures = + new TuttiPersistenceDevFixtures(); + + for (String entityType : FILE_KEYS) { + loadEntities(entityType, fixtures); + } } + + referentialPersistenceService = new ReferentialPersistenceServiceDevImpl(cache); } + @Override public void close() throws IOException { if (log.isInfoEnabled()) { @@ -183,7 +211,7 @@ } binderCache.clear(); - for (Class<? extends IdAware> entityType : cache.keySet()) { + for (String entityType : cache.keySet()) { persistToFile(entityType); } } @@ -193,198 +221,159 @@ //------------------------------------------------------------------------// @Override - public List<Species> getAllSpecies() { - List<Species> result = getDataInNewList(Species.class); - return result; + public List<Vessel> getAllScientificVessel() { + return referentialPersistenceService.getAllScientificVessel(); } @Override - public List<Species> getAllBenthosSpecies() { - List<Species> result = getDataInNewList(Species.class); - return result; + public List<Zone> getAllProgramZone() { + return referentialPersistenceService.getAllProgramZone(); } @Override - public List<Species> getAllPlanktonSpecies() { - List<Species> result = getDataInNewList(Species.class); - return result; + public List<Country> getAllCountry() { + return referentialPersistenceService.getAllCountry(); } @Override - public Species getSpecies(String id) { - Species result = getBean(Species.class, id); - return result; + public List<Vessel> getAllFishingVessel() { + return referentialPersistenceService.getAllFishingVessel(); } - @Override - public List<Zone> getAllProgramZone() { - List<Zone> result = getDataInNewList(Zone.class); - return result; + public Vessel getVessel(String vesselCode) { + return referentialPersistenceService.getVessel(vesselCode); } @Override - public List<Country> getAllCountry() { - List<Country> result = getDataInNewList(Country.class); - return result; + public List<Species> getAllSpecies() { + return referentialPersistenceService.getAllSpecies(); } @Override - public List<Vessel> getAllScientificVessel() { - List<Vessel> result = Lists.newArrayList(Iterables.filter(getData(Vessel.class), new Predicate<Vessel>() { - @Override - public boolean apply(Vessel input) { - return input.isScientificVessel(); - } - })); - return result; + public List<Species> getAllBenthosSpecies() { + return referentialPersistenceService.getAllBenthosSpecies(); } @Override - public List<Vessel> getAllFishingVessel() { - List<Vessel> result = Lists.newArrayList(Iterables.filter(getData(Vessel.class), new Predicate<Vessel>() { - @Override - public boolean apply(Vessel input) { - return !input.isScientificVessel(); - } - })); - return result; + public List<Species> getAllPlanktonSpecies() { + return referentialPersistenceService.getAllPlanktonSpecies(); } @Override - public List<Gear> getAllScientificGear() { - List<Gear> result = getDataInNewList(Gear.class); - return result; + public Species getSpecies(String speciesId) { + return referentialPersistenceService.getSpecies(speciesId); } @Override - public List<Gear> getAllFishingGear() { - List<Gear> result = getDataInNewList(Gear.class); - return result; + public List<FishingOperationLocation> getAllFishingOperationStrata(String zoneId) { + return referentialPersistenceService.getAllFishingOperationStrata(zoneId); } @Override - public List<Person> getAllPerson() { - List<Person> result = getDataInNewList(Person.class); - return result; + public List<FishingOperationLocation> getAllFishingOperationSubStrata(String locationId) { + return referentialPersistenceService.getAllFishingOperationSubStrata(locationId); } @Override - public List<FishingOperationLocation> getAllFishingOperationStrata(final String zoneId) { - List<FishingOperationLocation> result = Lists.newArrayList(Iterables.filter(getData(FishingOperationLocation.class), new Predicate<FishingOperationLocation>() { - @Override - public boolean apply(FishingOperationLocation input) { - Zone zone = input.getZone(); - return zone != null && zoneId.equals(zone.getId()); - } - })); - return result; + public List<FishingOperationLocation> getAllFishingOperationLocation(String locationId) { + return referentialPersistenceService.getAllFishingOperationLocation(locationId); } @Override - public List<FishingOperationLocation> getAllFishingOperationSubStrata(final String locationId) { - List<FishingOperationLocation> result = Lists.newArrayList(Iterables.filter(getData(FishingOperationLocation.class), new Predicate<FishingOperationLocation>() { - @Override - public boolean apply(FishingOperationLocation input) { - FishingOperationLocation parent = input.getParent(); - return parent != null && !input.isLocalite() && locationId.equals(parent.getId()); - } - })); - return result; - } - - @Override - public List<FishingOperationLocation> getAllFishingOperationLocation(final String locationId) { - List<FishingOperationLocation> result = Lists.newArrayList(Iterables.filter(getData(FishingOperationLocation.class), new Predicate<FishingOperationLocation>() { - @Override - public boolean apply(FishingOperationLocation input) { - FishingOperationLocation parent = input.getParent(); - return parent != null && input.isLocalite() && locationId.equals(parent.getId()); - } - })); - return result; - } - - @Override public List<Caracteristic> getAllFishingOperationEnvironmentCaracteristic() { - return getAllCaracteristicByCategory(CaracteristicEnum.FishingOperationEnvironment.name()); + return referentialPersistenceService.getAllFishingOperationEnvironmentCaracteristic(); } @Override public List<Caracteristic> getAllFishingOperationGearCaracteristic() { - return getAllCaracteristicByCategory(CaracteristicEnum.FishingOperationGear.name()); + return referentialPersistenceService.getAllFishingOperationGearCaracteristic(); } @Override public List<Caracteristic> getAllFishingOperationHydrologicCaracteristic() { - - List<Caracteristic> result = Lists.newArrayList(); - result.addAll(getAllCaracteristicByCategory(CaracteristicEnum.FishingOperationHydrologic_bottomSalinity.name())); - result.addAll(getAllCaracteristicByCategory(CaracteristicEnum.FishingOperationHydrologic_surfaceSalinity.name())); - result.addAll(getAllCaracteristicByCategory(CaracteristicEnum.FishingOperationHydrologic_bottomTemperature.name())); - result.addAll(getAllCaracteristicByCategory(CaracteristicEnum.FishingOperationHydrologic_surfaceTemperature.name())); - return result; + return referentialPersistenceService.getAllFishingOperationHydrologicCaracteristic(); } @Override public List<Caracteristic> getAllSpeciesLengthStepCaracteristic() { - return getAllCaracteristicByCategory(CaracteristicEnum.SpeciesFrequency.name()); + return referentialPersistenceService.getAllSpeciesLengthStepCaracteristic(); } @Override public Caracteristic getSizeCategoryCaracteristic() { - return getCaracteristicByCategory(CaracteristicEnum.SpeciesSizeCategory.name()); + return referentialPersistenceService.getSizeCategoryCaracteristic(); } @Override public Caracteristic getSexCaracteristic() { - return getCaracteristicByCategory(CaracteristicEnum.SpeciesSex.name()); + return referentialPersistenceService.getSexCaracteristic(); } @Override public Caracteristic getSortedUnsortedCaracteristic() { - return getCaracteristicByCategory(CaracteristicEnum.SpeciesSortedUnsorted.name()); + return referentialPersistenceService.getSortedUnsortedCaracteristic(); } @Override public Caracteristic getMaturityCaracteristic() { - return getCaracteristicByCategory(CaracteristicEnum.SpeciesMaturity.name()); + return referentialPersistenceService.getMaturityCaracteristic(); } @Override public Caracteristic getMacroWasteCategoryCaracteristic() { - return getCaracteristicByCategory(CaracteristicEnum.MacroWasteCategory.name()); + return referentialPersistenceService.getMacroWasteCategoryCaracteristic(); } @Override public Caracteristic getMacroWasteSizeCategoryCaracteristic() { - return getCaracteristicByCategory(CaracteristicEnum.MacroWasteSizeCategory.name()); + return referentialPersistenceService.getMacroWasteSizeCategoryCaracteristic(); } + @Override + public List<Gear> getAllScientificGear() { + return referentialPersistenceService.getAllScientificGear(); + } + + @Override + public List<Gear> getAllFishingGear() { + return referentialPersistenceService.getAllFishingGear(); + } + + @Override + public List<Person> getAllPerson() { + return referentialPersistenceService.getAllPerson(); + } + + public Person getPerson(Integer personId) { + return referentialPersistenceService.getPerson(personId); + } + + //------------------------------------------------------------------------// //-- Program methods --// //------------------------------------------------------------------------// @Override public List<Program> getAllProgram() { - List<Program> result = getDataInNewList(Program.class); + List<Program> result = getDataInNewList(Program.class.getName()); return result; } @Override public Program getProgram(String id) { - Program result = getBean(Program.class, id); + Program result = getBean(Program.class.getName(), id); return result; } @Override public Program createProgram(Program bean) { - Program result = create(Program.class, bean); + Program result = create(Program.class.getName(), bean); return result; } @Override public Program saveProgram(Program bean) { - Program result = save(Program.class, bean); + Program result = save(Program.class.getName(), bean); return result; } @@ -394,7 +383,8 @@ @Override public List<Cruise> getAllCruise(final String programId) { - List<Cruise> result = Lists.newArrayList(Iterables.filter(getData(Cruise.class), new Predicate<Cruise>() { + List<Cruise> data = getData(Cruise.class.getName()); + List<Cruise> result = Lists.newArrayList(Iterables.filter(data, new Predicate<Cruise>() { @Override public boolean apply(Cruise input) { return programId.equals(input.getProgram().getId()); @@ -405,19 +395,19 @@ @Override public Cruise getCruise(String id) { - Cruise result = getBean(Cruise.class, id); + Cruise result = getBean(Cruise.class.getName(), id); return result; } @Override public Cruise createCruise(Cruise bean) { - Cruise result = create(Cruise.class, bean); + Cruise result = create(Cruise.class.getName(), bean); return result; } @Override public Cruise saveCruise(Cruise bean) { - Cruise result = save(Cruise.class, bean); + Cruise result = save(Cruise.class.getName(), bean); return result; } @@ -427,25 +417,25 @@ @Override public List<TuttiProtocol> getAllProtocol() { - List<TuttiProtocol> result = getDataInNewList(TuttiProtocol.class); + List<TuttiProtocol> result = getDataInNewList(TuttiProtocol.class.getName()); return result; } @Override public TuttiProtocol getProtocol(String id) { - TuttiProtocol result = getBean(TuttiProtocol.class, id); + TuttiProtocol result = getBean(TuttiProtocol.class.getName(), id); return result; } @Override public TuttiProtocol createProtocol(TuttiProtocol bean) { - TuttiProtocol result = create(TuttiProtocol.class, bean); + TuttiProtocol result = create(TuttiProtocol.class.getName(), bean); return result; } @Override public TuttiProtocol saveProtocol(TuttiProtocol bean) { - TuttiProtocol result = save(TuttiProtocol.class, bean); + TuttiProtocol result = save(TuttiProtocol.class.getName(), bean); return result; } @@ -456,7 +446,8 @@ @Override public List<FishingOperation> getAllFishingOperation(final String cruiseId) { - List<FishingOperation> result = Lists.newArrayList(Iterables.filter(getData(FishingOperation.class), new Predicate<FishingOperation>() { + List<FishingOperation> data = getData(FishingOperation.class.getName()); + List<FishingOperation> result = Lists.newArrayList(Iterables.filter(data, new Predicate<FishingOperation>() { @Override public boolean apply(FishingOperation input) { return cruiseId.equals(input.getCruise().getId()); @@ -467,19 +458,20 @@ @Override public FishingOperation getFishingOperation(String id) { - FishingOperation result = TuttiEntities.findById(getData(FishingOperation.class), id); + List<FishingOperation> data = getData(FishingOperation.class.getName()); + FishingOperation result = TuttiEntities.findById(data, id); return result; } @Override public FishingOperation createFishingOperation(FishingOperation bean) { - FishingOperation result = create(FishingOperation.class, bean); + FishingOperation result = create(FishingOperation.class.getName(), bean); return result; } @Override public FishingOperation saveFishingOperation(FishingOperation bean) { - FishingOperation result = save(FishingOperation.class, bean); + FishingOperation result = save(FishingOperation.class.getName(), bean); return result; } @@ -490,7 +482,7 @@ @Override public List<SpeciesBatch> getAllRootSpeciesBatch(String fishingOperationId) { List<SpeciesBatch> result = getAllTraitFilterBatches( - SpeciesBatch.class, fishingOperationId, new Predicate<SpeciesBatch>() { + SpeciesBatch.class.getName(), fishingOperationId, new Predicate<SpeciesBatch>() { @Override public boolean apply(SpeciesBatch input) { @@ -503,13 +495,13 @@ @Override public List<SpeciesBatch> getAllSpeciesBatch(final String fishingOperationId) { List<SpeciesBatch> result = getAllTraitFilterBatches( - SpeciesBatch.class, fishingOperationId, null); + SpeciesBatch.class.getName(), fishingOperationId, null); return result; } @Override public SpeciesBatch getSpeciesBatch(String id) { - SpeciesBatch result = getBean(SpeciesBatch.class, id); + SpeciesBatch result = getBean(SpeciesBatch.class.getName(), id); return result; } @@ -519,7 +511,7 @@ boolean withParent = parentBatchId != null; - SpeciesBatch result = create(SpeciesBatch.class, bean, !withParent); + SpeciesBatch result = create(SpeciesBatch.class.getName(), bean, !withParent); if (withParent) { @@ -536,26 +528,26 @@ childBatchs.add(result); // now persist species batches - persistToFile(SpeciesBatch.class); + persistToFile(SpeciesBatch.class.getName()); } return result; } @Override public SpeciesBatch saveSpeciesBatch(SpeciesBatch bean) { - SpeciesBatch result = save(SpeciesBatch.class, bean); + SpeciesBatch result = save(SpeciesBatch.class.getName(), bean); return result; } @Override public void deleteSpeciesBatch(String id) { - remove(SpeciesBatch.class, id); + remove(SpeciesBatch.class.getName(), id); } @Override public void deleteSpeciesSubBatch(String id) { Preconditions.checkNotNull(id, "Can't save a bean with null id"); - SpeciesBatch bean = getBean(SpeciesBatch.class, id); + SpeciesBatch bean = getBean(SpeciesBatch.class.getName(), id); Preconditions.checkNotNull( bean, "SpeciesBatch with id: " + id + " does not exist"); @@ -565,7 +557,7 @@ cache.remove(SpeciesBatch.class, toDelete); } bean.setChildBatchs(null); - persistToFile(SpeciesBatch.class); + persistToFile(SpeciesBatch.class.getName()); } protected void collectChilds(SpeciesBatch bean, Set<SpeciesBatch> collected) { @@ -579,7 +571,8 @@ @Override public List<SpeciesBatchFrequency> getAllSpeciesBatchFrequency(final String speciesBatchId) { - List<SpeciesBatchFrequency> result = Lists.newArrayList(Iterables.filter(getData(SpeciesBatchFrequency.class), new Predicate<SpeciesBatchFrequency>() { + List<SpeciesBatchFrequency> data = getData(SpeciesBatchFrequency.class.getName()); + List<SpeciesBatchFrequency> result = Lists.newArrayList(Iterables.filter(data, new Predicate<SpeciesBatchFrequency>() { @Override public boolean apply(SpeciesBatchFrequency input) { return speciesBatchId.equals(input.getBatch().getId()); @@ -597,7 +590,7 @@ getAllSpeciesBatchFrequency(speciesBatchId); List<SpeciesBatchFrequency> result = - persistList(SpeciesBatchFrequency.class, + persistList(SpeciesBatchFrequency.class.getName(), existingData, frequencies); return result; @@ -610,31 +603,31 @@ @Override public List<BenthosBatch> getAllBenthosBatch(String fishingOperationId) { List<BenthosBatch> result = getAllTraitFilterBatches( - BenthosBatch.class, fishingOperationId, null); + BenthosBatch.class.getName(), fishingOperationId, null); return result; } @Override public BenthosBatch getBenthosBatch(String id) { - BenthosBatch result = getBean(BenthosBatch.class, id); + BenthosBatch result = getBean(BenthosBatch.class.getName(), id); return result; } @Override public BenthosBatch createBenthosBatch(BenthosBatch bean) { - BenthosBatch result = create(BenthosBatch.class, bean); + BenthosBatch result = create(BenthosBatch.class.getName(), bean); return result; } @Override public BenthosBatch saveBenthosBatch(BenthosBatch bean) { - BenthosBatch result = save(BenthosBatch.class, bean); + BenthosBatch result = save(BenthosBatch.class.getName(), bean); return result; } @Override public void deleteBenthosBatch(String id) { - remove(BenthosBatch.class, id); + remove(BenthosBatch.class.getName(), id); } //------------------------------------------------------------------------// @@ -644,31 +637,31 @@ @Override public List<PlanktonBatch> getAllPlanktonBatch(String fishingOperationId) { List<PlanktonBatch> result = getAllTraitFilterBatches( - PlanktonBatch.class, fishingOperationId, null); + PlanktonBatch.class.getName(), fishingOperationId, null); return result; } @Override public PlanktonBatch getPlanktonBatch(String id) { - PlanktonBatch result = getBean(PlanktonBatch.class, id); + PlanktonBatch result = getBean(PlanktonBatch.class.getName(), id); return result; } @Override public PlanktonBatch createPlanktonBatch(PlanktonBatch bean) { - PlanktonBatch result = create(PlanktonBatch.class, bean); + PlanktonBatch result = create(PlanktonBatch.class.getName(), bean); return result; } @Override public PlanktonBatch savePlanktonBatch(PlanktonBatch bean) { - PlanktonBatch result = save(PlanktonBatch.class, bean); + PlanktonBatch result = save(PlanktonBatch.class.getName(), bean); return result; } @Override public void deletePlanktonBatch(String id) { - remove(PlanktonBatch.class, id); + remove(PlanktonBatch.class.getName(), id); } //------------------------------------------------------------------------// @@ -678,31 +671,31 @@ @Override public List<MacroWasteBatch> getAllMacroWasteBatch(String fishingOperationId) { List<MacroWasteBatch> result = getAllTraitFilterBatches( - MacroWasteBatch.class, fishingOperationId, null); + MacroWasteBatch.class.getName(), fishingOperationId, null); return result; } @Override public MacroWasteBatch getMacroWasteBatch(String id) { - MacroWasteBatch result = getBean(MacroWasteBatch.class, id); + MacroWasteBatch result = getBean(MacroWasteBatch.class.getName(), id); return result; } @Override public MacroWasteBatch createMacroWasteBatch(MacroWasteBatch bean) { - MacroWasteBatch result = create(MacroWasteBatch.class, bean); + MacroWasteBatch result = create(MacroWasteBatch.class.getName(), bean); return result; } @Override public MacroWasteBatch saveMacroWasteBatch(MacroWasteBatch bean) { - MacroWasteBatch result = save(MacroWasteBatch.class, bean); + MacroWasteBatch result = save(MacroWasteBatch.class.getName(), bean); return result; } @Override public void deleteMacroWasteBatch(String id) { - remove(MacroWasteBatch.class, id); + remove(MacroWasteBatch.class.getName(), id); } //------------------------------------------------------------------------// @@ -712,47 +705,65 @@ @Override public List<AccidentalBatch> getAllAccidentalBatch(String fishingOperationId) { List<AccidentalBatch> result = getAllTraitFilterBatches( - AccidentalBatch.class, fishingOperationId, null); + AccidentalBatch.class.getName(), fishingOperationId, null); return result; } @Override public AccidentalBatch getAccidentalBatch(String id) { - AccidentalBatch result = getBean(AccidentalBatch.class, id); + AccidentalBatch result = getBean(AccidentalBatch.class.getName(), id); return result; } @Override public AccidentalBatch createAccidentalBatch(AccidentalBatch bean) { - AccidentalBatch result = create(AccidentalBatch.class, bean); + AccidentalBatch result = create(AccidentalBatch.class.getName(), bean); return result; } @Override public AccidentalBatch saveAccidentalBatch(AccidentalBatch bean) { - AccidentalBatch result = save(AccidentalBatch.class, bean); + AccidentalBatch result = save(AccidentalBatch.class.getName(), bean); return result; } @Override public void deleteAccidentalBatch(String id) { - remove(AccidentalBatch.class, id); + remove(AccidentalBatch.class.getName(), id); } //------------------------------------------------------------------------// //-- Internal methods --// //------------------------------------------------------------------------// - protected <B extends IdAware> Binder<B, B> getBinder(Class<B> type) { + protected <B> Class<B> getType(String type) { + String typeName = type; + int i = type.indexOf('#'); + if (i > -1) { + typeName = type.substring(0, i); + } + try { + Class<B> result = (Class<B>) Class.forName(typeName); + return result; + } catch (Exception e) { + throw new RuntimeException("No class named " + typeName, e); + } + } + + protected <B extends IdAware> Binder<B, B> getBinder(String type) { + Binder<B, B> result = (Binder<B, B>) binderCache.get(type); if (result == null) { - result = BinderFactory.newBinder(type); + + Class<B> binderType = getType(type); + + result = BinderFactory.newBinder(binderType); binderCache.put(type, result); } return result; } - protected <B extends IdAware> void persist(Class<B> beanType, + protected <B extends IdAware> void persist(String beanType, B source, B target, boolean synchFile) { @@ -761,7 +772,7 @@ if (source.getId() == null) { target.setId(UUID.randomUUID().toString()); } - if (!cache.containsValue(target)) { + if (!cache.containsEntry(beanType, target)) { cache.put(beanType, target); } if (synchFile) { @@ -769,7 +780,7 @@ } } - protected <B extends IdAware> List<B> persistList(Class<B> beanType, + protected <B extends IdAware> List<B> persistList(String beanType, List<B> existingData, List<B> newData) { @@ -790,7 +801,8 @@ if (TuttiEntities.isNew(source)) { // must create it - target = TuttiEntities.newEntity(beanType); + Class<B> type = getType(beanType); + target = TuttiEntities.newEntity(type); } else { // get existing data @@ -826,9 +838,8 @@ return result; } - protected <B extends IdAware> List<B> loadEntities(Class<B> entityType, - TuttiPersistenceDevFixtures fix - ) throws IOException { + protected <B extends IdAware> List<B> loadEntities(String entityType, + TuttiPersistenceDevFixtures fix) throws IOException { File storageFile = getStorageFile(entityType); List<B> result; @@ -864,7 +875,15 @@ return result; } - protected <B extends IdAware> List<B> loadEntities(Class<B> entityType, + public static String getKey(Class<?> type, String context) { + String key = type.getName(); + if (context != null) { + key += '#' + context; + } + return key; + } + + protected <B extends IdAware> List<B> loadEntities(String entityType, List<B> defaultList) throws IOException { File storageFile = getStorageFile(entityType); @@ -898,14 +917,13 @@ return result; } - protected <B> File getStorageFile(Class<B> entityType) { + protected <B> File getStorageFile(String entityType) { File storageDirectory = this.config.getStorageDirectory(); - File result = new File(storageDirectory, - entityType.getSimpleName() + ".ser"); + File result = new File(storageDirectory, entityType + ".ser"); return result; } - protected <B extends IdAware> void persistToFile(Class<B> entityType) { + public <B extends IdAware> void persistToFile(String entityType) { List<B> entities = getDataInNewList(entityType); File storageFile = getStorageFile(entityType); @@ -929,61 +947,43 @@ } } - protected <B extends IdAware> List<B> getData(Class<B> entityType) { + protected <B extends IdAware> List<B> getData(String entityType) { List<B> result = (List<B>) cache.get(entityType); return result; } - protected <B extends IdAware> List<B> getDataInNewList(Class<B> entityType) { + protected <B extends IdAware> List<B> getDataInNewList(String entityType) { List<B> result = getData(entityType); return Lists.newArrayList(result); } protected <B extends FishingOperationAware> List<B> getAllTraitFilterBatches( - Class<B> beanType, + String beanType, String traitId, Predicate<B> extraPredicate) { Predicate<B> predicate = TuttiEntities.newTraitIdPredicate(traitId); if (extraPredicate != null) { predicate = Predicates.and(predicate, extraPredicate); } - List<B> result = Lists.newArrayList(Iterables.filter(getData(beanType), predicate)); + List<B> data = getData(beanType); + List<B> result = Lists.newArrayList(Iterables.filter(data, predicate)); return result; } - protected List<Caracteristic> getAllCaracteristicByCategory(String categoryId) { - Predicate<Caracteristic> predicate = TuttiEntities.newCaracteristicCategoryPredicate(categoryId); - List<Caracteristic> result = Lists.newArrayList(Iterables.filter(getData(Caracteristic.class), predicate)); - return result; - } - - protected Caracteristic getCaracteristicByCategory(String categoryId) { - Predicate<Caracteristic> predicate = TuttiEntities.newCaracteristicCategoryPredicate(categoryId); - List<Caracteristic> data = getData(Caracteristic.class); - Caracteristic result = null; - for (Caracteristic caracteristic : data) { - if (predicate.apply(caracteristic)) { - result = caracteristic; - break; - } - } - return result; - } - - protected <B extends IdAware> B create(Class<B> type, B bean) { + protected <B extends IdAware> B create(String type, B bean) { return create(type, bean, true); } - protected <B extends IdAware> B create(Class<B> type, - B bean, - boolean sychronize) { + public <B extends IdAware> B create(String type, + B bean, + boolean sychronize) { Preconditions.checkNotNull(bean, "Can't persist a null bean"); B result = TuttiEntities.newEntity(bean); persist(type, bean, result, sychronize); return result; } - protected <B extends IdAware> B save(Class<B> type, B bean) { + protected <B extends IdAware> B save(String type, B bean) { Preconditions.checkNotNull(bean, "Can't persist a null bean"); String id = bean.getId(); Preconditions.checkNotNull(id, "Can't save a bean with null id"); @@ -994,7 +994,7 @@ return result; } - protected <B extends IdAware> void remove(Class<B> type, String id) { + protected <B extends IdAware> void remove(String type, String id) { Preconditions.checkNotNull(id, "Can't delete a null id"); B bean = getBean(type, id); //FIXME tchemit Should never happen! @@ -1008,8 +1008,9 @@ persistToFile(type); } - protected <B extends IdAware> B getBean(Class<B> type, String id) { - B result = TuttiEntities.findById(getData(type), id); + protected <B extends IdAware> B getBean(String type, String id) { + List<B> data = getData(type); + B result = TuttiEntities.findById(data, id); return result; } Added: trunk/tutti-persistence-dev/src/main/java/fr/ifremer/tutti/persistence/service/ReferentialPersistenceServiceDevImpl.java =================================================================== --- trunk/tutti-persistence-dev/src/main/java/fr/ifremer/tutti/persistence/service/ReferentialPersistenceServiceDevImpl.java (rev 0) +++ trunk/tutti-persistence-dev/src/main/java/fr/ifremer/tutti/persistence/service/ReferentialPersistenceServiceDevImpl.java 2013-01-13 14:58:21 UTC (rev 184) @@ -0,0 +1,225 @@ +package fr.ifremer.tutti.persistence.service; + +import com.google.common.collect.ArrayListMultimap; +import com.google.common.collect.Lists; +import fr.ifremer.tutti.persistence.entities.IdAware; +import fr.ifremer.tutti.persistence.entities.TuttiEntities; +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.Vessel; +import fr.ifremer.tutti.persistence.entities.referential.Zone; + +import java.util.List; + +import static fr.ifremer.tutti.persistence.TuttiPersistenceDevImpl.getKey; + +/** + * @author tchemit <chemit@codelutin.com> + * @since 0.3 + */ +public class ReferentialPersistenceServiceDevImpl implements ReferentialPersistenceService { + + public enum CaracteristicEnum { + Environment, + Gear, + Hydrology, + Length, + SizeCategory, + SexCategory, + SortedUnsortedCategory, + MaturityCategory, + MacroWasteCategory, + MacroWasteSizeCategory + } + + /** + * Cache of data. + * + * @since 0.1 + */ + protected final ArrayListMultimap<String, IdAware> cache; + + public ReferentialPersistenceServiceDevImpl(ArrayListMultimap<String, IdAware> cache) { + this.cache = cache; + } + + @Override + public List<Species> getAllSpecies() { + List<Species> result = getDataInNewList(Species.class.getName()); + return result; + } + + @Override + public List<Species> getAllBenthosSpecies() { + List<Species> result = getDataInNewList(getKey(Species.class, "Benthos")); + return result; + } + + @Override + public List<Species> getAllPlanktonSpecies() { + List<Species> result = getDataInNewList(getKey(Species.class, "Plankton")); + return result; + } + + @Override + public Species getSpecies(String id) { + Species result = getBean(Species.class.getName(), id); + return result; + } + + @Override + public List<Zone> getAllProgramZone() { + List<Zone> result = getDataInNewList(Zone.class.getName()); + return result; + } + + @Override + public List<Country> getAllCountry() { + List<Country> result = getDataInNewList(Country.class.getName()); + return result; + } + + @Override + public List<Vessel> getAllScientificVessel() { + List<Vessel> result = getDataInNewList(getKey(Vessel.class, "Scientific")); + return result; + } + + @Override + public List<Vessel> getAllFishingVessel() { + List<Vessel> result = getDataInNewList(getKey(Vessel.class, "Fishing")); + return result; + } + + @Override + public List<Gear> getAllScientificGear() { + List<Gear> result = getDataInNewList(getKey(Gear.class, "Scientific")); + return result; + } + + @Override + public List<Gear> getAllFishingGear() { + List<Gear> result = getDataInNewList(getKey(Gear.class, "Fishing")); + return result; + } + + @Override + public List<Person> getAllPerson() { + List<Person> result = getDataInNewList(Person.class.getName()); + return result; + } + + @Override + public List<FishingOperationLocation> getAllFishingOperationStrata(final String zoneId) { + List<FishingOperationLocation> result = getDataInNewList(getKey(FishingOperationLocation.class, "Strata")); + return result; + } + + @Override + public List<FishingOperationLocation> getAllFishingOperationSubStrata(final String locationId) { + List<FishingOperationLocation> result = getDataInNewList(getKey(FishingOperationLocation.class, "SubStrata")); + return result; + } + + @Override + public List<FishingOperationLocation> getAllFishingOperationLocation(final String locationId) { + List<FishingOperationLocation> result = getDataInNewList(getKey(FishingOperationLocation.class, "Localite")); + return result; + } + + @Override + public List<Caracteristic> getAllFishingOperationEnvironmentCaracteristic() { + return getAllCaracteristic(CaracteristicEnum.Environment); + } + + @Override + public List<Caracteristic> getAllFishingOperationGearCaracteristic() { + return getAllCaracteristic(CaracteristicEnum.Gear); + } + + @Override + public List<Caracteristic> getAllFishingOperationHydrologicCaracteristic() { + + List<Caracteristic> result = Lists.newArrayList(); + //TODO Find a way to distinguish them... For the moment do not use it +// result.addAll(getAllCaracteristic(CaracteristicEnum.Hydrology)); + return result; + } + + @Override + public List<Caracteristic> getAllSpeciesLengthStepCaracteristic() { + return getAllCaracteristic(CaracteristicEnum.Length); + } + + @Override + public Caracteristic getSizeCategoryCaracteristic() { + return getCaracteristic(CaracteristicEnum.SizeCategory); + } + + @Override + public Caracteristic getSexCaracteristic() { + return getCaracteristic(CaracteristicEnum.SexCategory); + } + + @Override + public Caracteristic getSortedUnsortedCaracteristic() { + return getCaracteristic(CaracteristicEnum.SortedUnsortedCategory); + } + + @Override + public Caracteristic getMaturityCaracteristic() { + return getCaracteristic(CaracteristicEnum.MaturityCategory); + } + + @Override + public Caracteristic getMacroWasteCategoryCaracteristic() { + return getCaracteristic(CaracteristicEnum.MacroWasteCategory); + } + + @Override + public Caracteristic getMacroWasteSizeCategoryCaracteristic() { + return getCaracteristic(CaracteristicEnum.MacroWasteSizeCategory); + } + + @Override + public Vessel getVessel(String vesselCode) { + return getBean(Vessel.class.getName(), vesselCode); + } + + @Override + public Person getPerson(Integer personId) { + return getBean(Person.class.getName(), personId.toString()); + } + + + protected <B extends IdAware> List<B> getData(String entityType) { + List<B> result = (List<B>) cache.get(entityType); + return result; + } + + protected <B extends IdAware> List<B> getDataInNewList(String entityType) { + List<B> result = getData(entityType); + return Lists.newArrayList(result); + } + + protected <B extends IdAware> B getBean(String type, String id) { + List<B> data = getData(type); + B result = TuttiEntities.findById(data, id); + return result; + } + + protected List<Caracteristic> getAllCaracteristic(CaracteristicEnum categoryId) { + List<Caracteristic> result = getData(getKey(Caracteristic.class, categoryId.name())); + return result; + } + + protected Caracteristic getCaracteristic(CaracteristicEnum categoryId) { + List<Caracteristic> data = getData(getKey(Caracteristic.class, categoryId.name())); + Caracteristic result = data.get(0); + return result; + } +} Property changes on: trunk/tutti-persistence-dev/src/main/java/fr/ifremer/tutti/persistence/service/ReferentialPersistenceServiceDevImpl.java ___________________________________________________________________ Added: svn:keywords + Author Date Id Revision Added: svn:eol-style + native 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-12 18:02:10 UTC (rev 183) +++ trunk/tutti-persistence-dev/src/test/java/fr/ifremer/tutti/persistence/TuttiPersistenceDevImplTest.java 2013-01-13 14:58:21 UTC (rev 184) @@ -98,7 +98,7 @@ Assert.assertTrue(storageDirectory.exists()); TuttiPersistenceDevFixtures fixtures = new TuttiPersistenceDevFixtures(); - Assert.assertEquals(fixtures.getData(Country.class).size(), + Assert.assertEquals(fixtures.getData(Country.class.getName()).size(), persistence.getAllCountry().size()); } @@ -112,12 +112,12 @@ persistence.open(); TuttiPersistenceDevFixtures fixtures = new TuttiPersistenceDevFixtures(); - Assert.assertEquals(fixtures.getData(Country.class).size(), + Assert.assertEquals(fixtures.getData(Country.class.getName()).size(), persistence.getAllCountry().size()); persistence.close(); Assert.assertTrue(storageDirectory.exists()); - Assert.assertEquals(fixtures.getData(Country.class).size(), + Assert.assertEquals(fixtures.getData(Country.class.getName()).size(), persistence.getAllCountry().size()); } Modified: trunk/tutti-ui-swing/src/license/THIRD-PARTY.properties =================================================================== --- trunk/tutti-ui-swing/src/license/THIRD-PARTY.properties 2013-01-12 18:02:10 UTC (rev 183) +++ trunk/tutti-ui-swing/src/license/THIRD-PARTY.properties 2013-01-13 14:58:21 UTC (rev 184) @@ -1,7 +1,7 @@ # Generated by org.codehaus.mojo.license.AddThirdPartyMojo #------------------------------------------------------------------------------- # Already used licenses in project : -# - Apache License +# - Affero General Public License (AGPL) # - BSD License # - BSD-3 Clause License # - COMMON DEVELOPMENT AND DISTRIBUTION LICENSE (CDDL) Version 1.0 @@ -26,9 +26,8 @@ # Please fill the missing licenses for dependencies : # # -#Mon Jan 07 22:45:28 CET 2013 +#Sun Jan 13 15:29:41 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 javax.transaction--jta--1.1=COMMON DEVELOPMENT AND DISTRIBUTION LICENSE (CDDL) Version 1.0 Modified: trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/cruise/EditCruiseUIHandler.java =================================================================== --- trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/cruise/EditCruiseUIHandler.java 2013-01-12 18:02:10 UTC (rev 183) +++ trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/cruise/EditCruiseUIHandler.java 2013-01-13 14:58:21 UTC (rev 184) @@ -199,11 +199,17 @@ List<Gear> newGearList = getGearList(vesselType); // compute new selected vessel list - List<Vessel> newSelectedVessel = Lists.newArrayList(selectedVessel); + List<Vessel> newSelectedVessel = Lists.newArrayList(); + if (selectedVessel!=null) { + newSelectedVessel.addAll(selectedVessel); + } newSelectedVessel.retainAll(newVesselList); // compute new selected gear list - List<Gear> newSelectedGear = Lists.newArrayList(selectedGear); + List<Gear> newSelectedGear = Lists.newArrayList(); + if (selectedGear!=null) { + newSelectedGear.addAll(selectedGear); + } newSelectedGear.retainAll(newGearList); // reinit vessel list Modified: trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/operation/EditFishingOperationUIModel.java =================================================================== --- trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/operation/EditFishingOperationUIModel.java 2013-01-12 18:02:10 UTC (rev 183) +++ trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/operation/EditFishingOperationUIModel.java 2013-01-13 14:58:21 UTC (rev 184) @@ -32,14 +32,15 @@ import fr.ifremer.tutti.persistence.entities.referential.Person; import fr.ifremer.tutti.persistence.spatial.SexagecimalPosition; import fr.ifremer.tutti.ui.swing.AbstractTuttiBeanUIModel; +import org.nuiton.util.beans.Binder; +import org.nuiton.util.beans.BinderFactory; + import java.util.Calendar; import java.util.Date; import java.util.List; -import org.apache.commons.logging.Log; -import org.apache.commons.logging.LogFactory; -import org.nuiton.util.beans.Binder; -import org.nuiton.util.beans.BinderFactory; +import static org.nuiton.i18n.I18n.n_; + /** * Model for UI {@link EditFishingOperationUI}. * @@ -48,12 +49,11 @@ */ public class EditFishingOperationUIModel extends AbstractTuttiBeanUIModel<FishingOperation, EditFishingOperationUIModel> { - private static final Log log = LogFactory.getLog(EditFishingOperationUIModel.class); - private static final long serialVersionUID = 1L; - - public static final String TITLE = "tutti.label.tab.fishingOperation.general"; + public static final String TITLE = + n_("tutti.label.tab.fishingOperation.general"); + public static final String PROPERTY_PERSISTED = "persisted"; public static final String PROPERTY_EMPTY = "empty"; @@ -187,11 +187,11 @@ gearShootingEndLatitudeAsSexagecimal = SexagecimalPosition.valueOf(gearShootingEndLatitude); gearShootingEndLongitudeAsSexagecimal = SexagecimalPosition.valueOf(gearShootingEndLongitude); } - + public String getTitle() { return TITLE; } - + public FishingOperation getFishingOperation() { return fishingOperation; } @@ -556,7 +556,10 @@ public void setSaisisseur(List<Person> saisisseur) { Object oldValue = Lists.newArrayList(getSaisisseur()); - this.saisisseur = Lists.newArrayList(saisisseur); + this.saisisseur = Lists.newArrayList(); + if (saisisseur != null) { + this.saisisseur.addAll(saisisseur); + } firePropertyChange(PROPERTY_SAISISSEUR, oldValue, saisisseur); } Modified: trunk/tutti-ui-swing/src/main/resources/fr/ifremer/tutti/ui/swing/content/operation/EditFishingOperationUIModel-edit-error-validation.xml =================================================================== --- trunk/tutti-ui-swing/src/main/resources/fr/ifremer/tutti/ui/swing/content/operation/EditFishingOperationUIModel-edit-error-validation.xml 2013-01-12 18:02:10 UTC (rev 183) +++ trunk/tutti-ui-swing/src/main/resources/fr/ifremer/tutti/ui/swing/content/operation/EditFishingOperationUIModel-edit-error-validation.xml 2013-01-13 14:58:21 UTC (rev 184) @@ -29,7 +29,7 @@ <field name="stationNumber"> - <field-validator type="required" short-circuit="true"> + <field-validator type="requiredstring" short-circuit="true"> <message> tutti.validator.error.fishingOperation.stationNumber.required </message> Modified: trunk/tutti-ui-swing/src/main/resources/fr/ifremer/tutti/ui/swing/content/operation/EditFishingOperationUIModel-validate-error-validation.xml =================================================================== --- trunk/tutti-ui-swing/src/main/resources/fr/ifremer/tutti/ui/swing/content/operation/EditFishingOperationUIModel-validate-error-validation.xml 2013-01-12 18:02:10 UTC (rev 183) +++ trunk/tutti-ui-swing/src/main/resources/fr/ifremer/tutti/ui/swing/content/operation/EditFishingOperationUIModel-validate-error-validation.xml 2013-01-13 14:58:21 UTC (rev 184) @@ -29,7 +29,7 @@ <field name="stationNumber"> - <field-validator type="required" short-circuit="true"> + <field-validator type="requiredstring" short-circuit="true"> <message> tutti.validator.error.fishingOperation.stationNumber.required </message>