r298 - in trunk: . tutti-persistence/src/main/java/fr/ifremer/tutti/persistence tutti-persistence/src/main/java/fr/ifremer/tutti/persistence/service tutti-persistence/src/main/java/fr/ifremer/tutti/persistence/service/synchro tutti-persistence-adagio tutti-persistence-adagio/src/main/java/fr/ifremer/tutti/persistence tutti-persistence-adagio/src/main/java/fr/ifremer/tutti/persistence/service tutti-persistence-adagio/src/main/java/fr/ifremer/tutti/persistence/service/synchro tutti-persistence
Author: tchemit Date: 2013-02-02 14:04:15 +0100 (Sat, 02 Feb 2013) New Revision: 298 Url: http://forge.codelutin.com/projects/tutti/repository/revisions/298 Log: - remove persistence-dev module - improve persistence service api Added: trunk/tutti-persistence/src/main/java/fr/ifremer/tutti/persistence/TuttiPersistenceDevImpl.java trunk/tutti-persistence/src/main/java/fr/ifremer/tutti/persistence/TuttiPersistenceServiceImplementor.java Removed: 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/main/java/fr/ifremer/tutti/persistence/service/ReferentialPersistenceServiceDevImpl.java trunk/tutti-persistence-dev/src/test/java/fr/ifremer/tutti/persistence/TuttiPersistenceDevImplTest.java 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/service/AbstractPersistenceService.java trunk/tutti-persistence-adagio/src/main/java/fr/ifremer/tutti/persistence/service/TuttiPersistenceServiceLocator.java trunk/tutti-persistence-adagio/src/main/java/fr/ifremer/tutti/persistence/service/synchro/ReferentialSynchronizeHelper.java trunk/tutti-persistence-adagio/src/main/java/fr/ifremer/tutti/persistence/service/synchro/ReferentialSynchronizeServiceImpl.java trunk/tutti-persistence-adagio/src/main/resources/applicationContext-service-tutti.xml trunk/tutti-persistence-adagio/src/test/java/fr/ifremer/tutti/persistence/service/ReferentialPersistenceServiceTest.java trunk/tutti-persistence/src/main/java/fr/ifremer/tutti/persistence/TuttiPersistence.java trunk/tutti-persistence/src/main/java/fr/ifremer/tutti/persistence/service/AccidentalBatchPersistenceService.java trunk/tutti-persistence/src/main/java/fr/ifremer/tutti/persistence/service/BenthosBatchPersistenceService.java trunk/tutti-persistence/src/main/java/fr/ifremer/tutti/persistence/service/CatchBatchPersistenceService.java trunk/tutti-persistence/src/main/java/fr/ifremer/tutti/persistence/service/CruisePersistenceService.java trunk/tutti-persistence/src/main/java/fr/ifremer/tutti/persistence/service/FishingOperationPersistenceService.java trunk/tutti-persistence/src/main/java/fr/ifremer/tutti/persistence/service/MacroWasteBatchPersistenceService.java trunk/tutti-persistence/src/main/java/fr/ifremer/tutti/persistence/service/PlanktonBatchPersistenceService.java trunk/tutti-persistence/src/main/java/fr/ifremer/tutti/persistence/service/ProgramPersistenceService.java trunk/tutti-persistence/src/main/java/fr/ifremer/tutti/persistence/service/ProtocolPersistenceService.java trunk/tutti-persistence/src/main/java/fr/ifremer/tutti/persistence/service/ReferentialPersistenceService.java trunk/tutti-persistence/src/main/java/fr/ifremer/tutti/persistence/service/SpeciesBatchPersistenceService.java trunk/tutti-persistence/src/main/java/fr/ifremer/tutti/persistence/service/synchro/ReferentialSynchronizeService.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/config/TuttiServiceConfig.java trunk/tutti-ui-swing/pom.xml Modified: trunk/pom.xml =================================================================== --- trunk/pom.xml 2013-02-01 22:27:32 UTC (rev 297) +++ trunk/pom.xml 2013-02-02 13:04:15 UTC (rev 298) @@ -37,7 +37,6 @@ <modules> <module>tutti-persistence</module> - <module>tutti-persistence-dev</module> <module>tutti-persistence-adagio</module> <module>tutti-service</module> <module>tutti-ui-swing</module> 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-02-01 22:27:32 UTC (rev 297) +++ trunk/tutti-persistence/src/main/java/fr/ifremer/tutti/persistence/TuttiPersistence.java 2013-02-02 13:04:15 UTC (rev 298) @@ -46,8 +46,6 @@ import fr.ifremer.tutti.persistence.entities.referential.Zone; import org.springframework.transaction.annotation.Transactional; -import java.io.Closeable; -import java.io.IOException; import java.util.List; /** @@ -57,7 +55,7 @@ * @since 0.1 */ @Transactional(readOnly = true) -public interface TuttiPersistence extends Closeable { +public interface TuttiPersistence extends TuttiPersistenceServiceImplementor { //------------------------------------------------------------------------// //-- Technical methods --// @@ -65,8 +63,6 @@ String getImplementationName(); - void open() throws IOException; - //------------------------------------------------------------------------// //-- Referential methods --// //------------------------------------------------------------------------// @@ -166,6 +162,8 @@ Person getPerson(Integer personId); + Gear getGear(Integer gearCode); + Vessel getVessel(String vesselCode); boolean isSortedQualitativeValue(CaracteristicQualitativeValue value); Copied: trunk/tutti-persistence/src/main/java/fr/ifremer/tutti/persistence/TuttiPersistenceDevImpl.java (from rev 297, trunk/tutti-persistence-dev/src/main/java/fr/ifremer/tutti/persistence/TuttiPersistenceDevImpl.java) =================================================================== --- trunk/tutti-persistence/src/main/java/fr/ifremer/tutti/persistence/TuttiPersistenceDevImpl.java (rev 0) +++ trunk/tutti-persistence/src/main/java/fr/ifremer/tutti/persistence/TuttiPersistenceDevImpl.java 2013-02-02 13:04:15 UTC (rev 298) @@ -0,0 +1,1442 @@ +package fr.ifremer.tutti.persistence; + +/* + * #%L + * Tutti :: Persistence Dev (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% + */ + + +import com.google.common.base.Function; +import com.google.common.base.Preconditions; +import com.google.common.base.Predicate; +import com.google.common.base.Predicates; +import com.google.common.collect.ArrayListMultimap; +import com.google.common.collect.Iterables; +import com.google.common.collect.Lists; +import com.google.common.collect.Maps; +import com.google.common.collect.Sets; +import fr.ifremer.tutti.persistence.entities.AbstractTuttiEntity; +import fr.ifremer.tutti.persistence.entities.IdAware; +import fr.ifremer.tutti.persistence.entities.TuttiEntities; +import fr.ifremer.tutti.persistence.entities.data.AccidentalBatch; +import fr.ifremer.tutti.persistence.entities.data.BenthosBatch; +import fr.ifremer.tutti.persistence.entities.data.CatchBatch; +import fr.ifremer.tutti.persistence.entities.data.Cruise; +import fr.ifremer.tutti.persistence.entities.data.FishingOperation; +import fr.ifremer.tutti.persistence.entities.data.FishingOperationAware; +import fr.ifremer.tutti.persistence.entities.data.MacroWasteBatch; +import fr.ifremer.tutti.persistence.entities.data.PlanktonBatch; +import fr.ifremer.tutti.persistence.entities.data.Program; +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.Caracteristic; +import fr.ifremer.tutti.persistence.entities.referential.CaracteristicQualitativeValue; +import fr.ifremer.tutti.persistence.entities.referential.CaracteristicType; +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 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 org.nuiton.util.beans.Binder; +import org.nuiton.util.beans.BinderFactory; + +import java.io.File; +import java.io.FileInputStream; +import java.io.FileOutputStream; +import java.io.IOException; +import java.io.ObjectInputStream; +import java.io.ObjectOutputStream; +import java.util.List; +import java.util.Map; +import java.util.Set; +import java.util.UUID; + +/** + * Persistence service implementation for dev purpose (no real db). + * + * @author tchemit <chemit@codelutin.com> + * @since 0.1 + */ +public class TuttiPersistenceDevImpl implements TuttiPersistence { + + /** Logger. */ + private static final Log log = + LogFactory.getLog(TuttiPersistenceDevImpl.class); + + public enum CaracteristicEnum { + All, + SizeCategory, + SexCategory, + SortedUnsortedCategory, + MaturityCategory, + MacroWasteCategory, + MacroWasteSizeCategory + } + + 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.CatchBatch", + "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.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.Vessel#Scientific", + "fr.ifremer.tutti.persistence.entities.referential.Vessel#Fishing", + "fr.ifremer.tutti.persistence.entities.referential.Zone" + ); + + static { + for (CaracteristicEnum caracteristicEnum : + CaracteristicEnum.values()) { + FILE_KEYS.add(getKey(Caracteristic.class, caracteristicEnum.name())); + } + + if (log.isInfoEnabled()) { + log.info("Found " + FILE_KEYS.size() + " files."); + } + } + + public static final String SKIP_FIXTURES_OPTION = "LoadFixtures"; + + public static final Function<TuttiProtocol, String> GET_PROTOCOL_NAME = new Function<TuttiProtocol, String>() { + + @Override + public String apply(TuttiProtocol input) { + return input.getName(); + } + }; + + /** + * Persistence config. + * + * @since 0.1 + */ + protected final ApplicationConfig config; + + /** + * Cache of data. + * + * @since 0.1 + */ + protected final ArrayListMultimap<String, IdAware> cache = ArrayListMultimap.create(); + + /** + * Cache of binder. + * + * @since 0.2 + */ + protected final Map<String, Binder<? extends IdAware, ? extends IdAware>> binderCache = Maps.newHashMap(); + + + protected final File storageDirectory; + + + public static File getStorageDirectory(ApplicationConfig config) { + return new File(config.getOptionAsFile("tutti.data.directory"), "devStorage"); + } + + public TuttiPersistenceDevImpl(ApplicationConfig config) { + + Preconditions.checkNotNull(config, " No config property setted"); + + this.config = config; + + this.storageDirectory = getStorageDirectory(this.config); + } + + //------------------------------------------------------------------------// + //-- Technical methods --// + //------------------------------------------------------------------------// + + @Override + public String getImplementationName() { + return "Persistence Dev implementation"; + } + + @Override + public void init() { + + try { + + FileUtils.forceMkdir(storageDirectory); + } catch (IOException e) { + throw new RuntimeException("Could not create directory", e); + } + + cache.clear(); + + boolean loadFixtures = + config.getOptionAsBoolean(SKIP_FIXTURES_OPTION); + if (!loadFixtures) { + + if (log.isInfoEnabled()) { + log.info("Load default fixtures..."); + } + TuttiPersistenceDevFixtures fixtures = + new TuttiPersistenceDevFixtures(); + + for (String entityType : FILE_KEYS) { + try { + loadEntities(entityType, fixtures); + } catch (IOException e) { + throw new RuntimeException("Could not load entities " + entityType, e); + } + } + } + } + + @Override + public void close() throws IOException { + + if (log.isInfoEnabled()) { + log.info("Close persistence driver " + getImplementationName()); + } + binderCache.clear(); + + for (String entityType : cache.keySet()) { + persistToFile(entityType); + } + } + + //------------------------------------------------------------------------// + //-- Referential methods --// + //------------------------------------------------------------------------// + + @Override + public List<Species> getAllSpecies() { + List<Species> result = getDataInNewList(Species.class.getName()); + return result; + } + + @Override + public Species getSpecies(String id) { + Species result = getBean(Species.class.getName(), id); + return result; + } + + @Override + public List<Caracteristic> getAllCaracteristic() { + List<Caracteristic> result = getAllCaracteristic(CaracteristicEnum.All); + 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<FishingOperationLocation> getAllFishingOperationStrata(String zoneId) { + List<FishingOperationLocation> result = getDataInNewList(getKey(FishingOperationLocation.class, "Strata")); + return result; + } + + @Override + public List<FishingOperationLocation> getAllFishingOperationSubStrata(String zoneId, String strataId) { + List<FishingOperationLocation> result = getDataInNewList(getKey(FishingOperationLocation.class, "SubStrata")); + return result; + } + + @Override + public List<FishingOperationLocation> getAllFishingOperationLocation(String zoneId, String strataId, String subStrataId) { + List<FishingOperationLocation> result = getDataInNewList(getKey(FishingOperationLocation.class, "Localite")); + 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 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()); + } + + @Override + public Gear getGear(Integer gearCode) { + return getBean(Gear.class.getName(), gearCode.toString()); + } + + @Override + public boolean isSortedQualitativeValue(CaracteristicQualitativeValue value) { + return value != null && value.getId().equals("311"); + } + + + //------------------------------------------------------------------------// + //-- Program methods --// + //------------------------------------------------------------------------// + + @Override + public List<Program> getAllProgram() { + List<Program> result = getDataInNewList(Program.class.getName()); + return result; + } + + @Override + public Program getProgram(String id) { + Program result = getBean(Program.class.getName(), id); + return result; + } + + @Override + public Program createProgram(Program bean) { + Program result = create(Program.class.getName(), bean); + return result; + } + + @Override + public Program saveProgram(Program bean) { + Program result = save(Program.class.getName(), bean); + return result; + } + + //------------------------------------------------------------------------// + //-- Cruise methods --// + //------------------------------------------------------------------------// + + @Override + public List<Cruise> getAllCruise(final String programId) { + List<Cruise> result = getFilteredDataList(Cruise.class.getName(), new Predicate<Cruise>() { + @Override + public boolean apply(Cruise input) { + return programId.equals(input.getProgram().getId()); + } + }); + return result; + } + + @Override + public Cruise getCruise(String id) { + Cruise result = getBean(Cruise.class.getName(), id); + return result; + } + + @Override + public Cruise createCruise(Cruise bean) { + Cruise result = create(Cruise.class.getName(), bean); + return result; + } + + @Override + public Cruise saveCruise(Cruise bean) { + Cruise result = save(Cruise.class.getName(), bean); + return result; + } + + //------------------------------------------------------------------------// + //-- Protocol methods --// + //------------------------------------------------------------------------// + + @Override + public List<String> getAllProtocolNames() { + throw new IllegalStateException("method 'getAllProtocolNames' not implemented"); + } + + @Override + public List<TuttiProtocol> getAllProtocol() { + throw new IllegalStateException("method 'getAllProtocol' not implemented"); + } + + @Override + public boolean isProtocolExist(String id) { + throw new IllegalStateException("method 'isProtocolExist' not implemented"); + } + + @Override + public TuttiProtocol getProtocol(String id) { + throw new IllegalStateException("method 'getProtocol' not implemented"); + } + + @Override + public TuttiProtocol createProtocol(TuttiProtocol bean) { + throw new IllegalStateException("method 'createProtocol' not implemented"); + } + + @Override + public TuttiProtocol saveProtocol(TuttiProtocol bean) { + throw new IllegalStateException("method 'saveProtocol' not implemented"); + } + + @Override + public void deleteProtocol(String id) { + throw new IllegalStateException("method 'deleteProtocol' not implemented"); + } + + //------------------------------------------------------------------------// + //-- FishingOperation methods --// + //------------------------------------------------------------------------// + + @Override + public List<FishingOperation> getAllFishingOperation(final String cruiseId) { + List<FishingOperation> result = getFilteredDataList(FishingOperation.class.getName(), new Predicate<FishingOperation>() { + @Override + public boolean apply(FishingOperation input) { + return cruiseId.equals(input.getCruise().getId()); + } + }); + return result; + } + + @Override + public FishingOperation getFishingOperation(String 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.getName(), bean); + return result; + } + + @Override + public FishingOperation saveFishingOperation(FishingOperation bean) { + FishingOperation result = save(FishingOperation.class.getName(), bean); + return result; + } + + //------------------------------------------------------------------------// + //-- CatchBatch methods --// + //------------------------------------------------------------------------// + + @Override + public CatchBatch getCatchBatchFromFishingOperation(String id) { + List<CatchBatch> data = getData(CatchBatch.class.getName()); + CatchBatch result = null; + for (CatchBatch catchBatch : data) { + if (id.equals(catchBatch.getFishingOperation().getId())) { + result = catchBatch; + break; + } + } + return result; + } + + @Override + public CatchBatch createCatchBatch(CatchBatch bean) { + CatchBatch result = create(CatchBatch.class.getName(), bean); + return result; + } + + @Override + public CatchBatch saveCatchBatch(CatchBatch bean) { + CatchBatch result = save(CatchBatch.class.getName(), bean); + return result; + } + + //------------------------------------------------------------------------// + //-- Species Batch methods --// + //------------------------------------------------------------------------// + + @Override + public List<SpeciesBatch> getAllRootSpeciesBatch(String fishingOperationId) { + List<SpeciesBatch> result = getAllTraitFilterBatches( + SpeciesBatch.class.getName(), fishingOperationId, new Predicate<SpeciesBatch>() { + + @Override + public boolean apply(SpeciesBatch input) { + return input.getParentBatch() == null; + } + }); + return result; + } + + @Override + public List<SpeciesBatch> getAllSpeciesBatch(final String fishingOperationId) { + List<SpeciesBatch> result = getAllTraitFilterBatches( + SpeciesBatch.class.getName(), fishingOperationId, null); + return result; + } + + @Override + public SpeciesBatch getSpeciesBatch(String id) { + SpeciesBatch result = getBean(SpeciesBatch.class.getName(), id); + return result; + } + + @Override + public SpeciesBatch createSpeciesBatch(SpeciesBatch bean, + String parentBatchId) { + + boolean withParent = parentBatchId != null; + + SpeciesBatch result = create(SpeciesBatch.class.getName(), bean, !withParent); + + if (withParent) { + + // link to parent + SpeciesBatch parentBatch = getSpeciesBatch(parentBatchId); + result.setParentBatch(parentBatch); + + // add to parent childs + List<SpeciesBatch> childBatchs = parentBatch.getChildBatchs(); + if (childBatchs == null) { + childBatchs = Lists.newArrayList(); + parentBatch.setChildBatchs(childBatchs); + } + childBatchs.add(result); + + // now persist species batches + persistToFile(SpeciesBatch.class.getName()); + } + return result; + } + + @Override + public SpeciesBatch saveSpeciesBatch(SpeciesBatch bean) { + SpeciesBatch result = save(SpeciesBatch.class.getName(), bean); + return result; + } + + @Override + public void deleteSpeciesBatch(String 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.getName(), id); + Preconditions.checkNotNull( + bean, "SpeciesBatch with id: " + id + " does not exist"); + + Set<SpeciesBatch> collected = Sets.newHashSet(); + collectChilds(bean, collected); + for (SpeciesBatch toDelete : collected) { + cache.remove(SpeciesBatch.class, toDelete); + } + bean.setChildBatchs(null); + persistToFile(SpeciesBatch.class.getName()); + } + + protected void collectChilds(SpeciesBatch bean, Set<SpeciesBatch> collected) { + if (!bean.isChildBatchsEmpty()) { + for (SpeciesBatch batch : bean.getChildBatchs()) { + collected.add(batch); + collectChilds(batch, collected); + } + } + } + + @Override + public List<SpeciesBatchFrequency> getAllSpeciesBatchFrequency(final String speciesBatchId) { + List<SpeciesBatchFrequency> result = getFilteredDataList(SpeciesBatchFrequency.class.getName(), new Predicate<SpeciesBatchFrequency>() { + @Override + public boolean apply(SpeciesBatchFrequency input) { + return speciesBatchId.equals(input.getBatch().getId()); + } + }); + return result; + } + + @Override + public List<SpeciesBatchFrequency> saveSpeciesBatchFrequency(String speciesBatchId, + List<SpeciesBatchFrequency> frequencies) { + + // get existing data + List<SpeciesBatchFrequency> existingData = + getAllSpeciesBatchFrequency(speciesBatchId); + + List<SpeciesBatchFrequency> result = + persistList(SpeciesBatchFrequency.class.getName(), + existingData, + frequencies); + return result; + } + + //------------------------------------------------------------------------// + //-- Benthos Batch methods --// + //------------------------------------------------------------------------// + + @Override + public List<BenthosBatch> getAllBenthosBatch(String fishingOperationId) { + List<BenthosBatch> result = getAllTraitFilterBatches( + BenthosBatch.class.getName(), fishingOperationId, null); + return result; + } + + @Override + public BenthosBatch getBenthosBatch(String id) { + BenthosBatch result = getBean(BenthosBatch.class.getName(), id); + return result; + } + + @Override + public BenthosBatch createBenthosBatch(BenthosBatch bean) { + BenthosBatch result = create(BenthosBatch.class.getName(), bean); + return result; + } + + @Override + public BenthosBatch saveBenthosBatch(BenthosBatch bean) { + BenthosBatch result = save(BenthosBatch.class.getName(), bean); + return result; + } + + @Override + public void deleteBenthosBatch(String id) { + remove(BenthosBatch.class.getName(), id); + } + + //------------------------------------------------------------------------// + //-- Plancton Batch methods --// + //------------------------------------------------------------------------// + + @Override + public List<PlanktonBatch> getAllPlanktonBatch(String fishingOperationId) { + List<PlanktonBatch> result = getAllTraitFilterBatches( + PlanktonBatch.class.getName(), fishingOperationId, null); + return result; + } + + @Override + public PlanktonBatch getPlanktonBatch(String id) { + PlanktonBatch result = getBean(PlanktonBatch.class.getName(), id); + return result; + } + + @Override + public PlanktonBatch createPlanktonBatch(PlanktonBatch bean) { + PlanktonBatch result = create(PlanktonBatch.class.getName(), bean); + return result; + } + + @Override + public PlanktonBatch savePlanktonBatch(PlanktonBatch bean) { + PlanktonBatch result = save(PlanktonBatch.class.getName(), bean); + return result; + } + + @Override + public void deletePlanktonBatch(String id) { + remove(PlanktonBatch.class.getName(), id); + } + + //------------------------------------------------------------------------// + //-- Macrodechet Batch methods --// + //------------------------------------------------------------------------// + + @Override + public List<MacroWasteBatch> getAllMacroWasteBatch(String fishingOperationId) { + List<MacroWasteBatch> result = getAllTraitFilterBatches( + MacroWasteBatch.class.getName(), fishingOperationId, null); + return result; + } + + @Override + public MacroWasteBatch getMacroWasteBatch(String id) { + MacroWasteBatch result = getBean(MacroWasteBatch.class.getName(), id); + return result; + } + + @Override + public MacroWasteBatch createMacroWasteBatch(MacroWasteBatch bean) { + MacroWasteBatch result = create(MacroWasteBatch.class.getName(), bean); + return result; + } + + @Override + public MacroWasteBatch saveMacroWasteBatch(MacroWasteBatch bean) { + MacroWasteBatch result = save(MacroWasteBatch.class.getName(), bean); + return result; + } + + @Override + public void deleteMacroWasteBatch(String id) { + remove(MacroWasteBatch.class.getName(), id); + } + + //------------------------------------------------------------------------// + //-- Accidental Batch methods --// + //------------------------------------------------------------------------// + + @Override + public List<AccidentalBatch> getAllAccidentalBatch(String fishingOperationId) { + List<AccidentalBatch> result = getAllTraitFilterBatches( + AccidentalBatch.class.getName(), fishingOperationId, null); + return result; + } + + @Override + public AccidentalBatch getAccidentalBatch(String id) { + AccidentalBatch result = getBean(AccidentalBatch.class.getName(), id); + return result; + } + + @Override + public AccidentalBatch createAccidentalBatch(AccidentalBatch bean) { + AccidentalBatch result = create(AccidentalBatch.class.getName(), bean); + return result; + } + + @Override + public AccidentalBatch saveAccidentalBatch(AccidentalBatch bean) { + AccidentalBatch result = save(AccidentalBatch.class.getName(), bean); + return result; + } + + @Override + public void deleteAccidentalBatch(String id) { + remove(AccidentalBatch.class.getName(), id); + } + + //------------------------------------------------------------------------// + //-- Internal methods --// + //------------------------------------------------------------------------// + + 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) { + + Class<B> binderType = getType(type); + + result = BinderFactory.newBinder(binderType); + binderCache.put(type, result); + } + return result; + } + + protected <B extends IdAware> void persist(String beanType, + B source, + B target, + boolean synchFile) { + + getBinder(beanType).copyExcluding(source, target, AbstractTuttiEntity.PROPERTY_ID); + if (source.getId() == null) { + target.setId(UUID.randomUUID().toString()); + } + if (!cache.containsEntry(beanType, target)) { + cache.put(beanType, target); + } + if (synchFile) { + persistToFile(beanType); + } + } + + protected <B extends IdAware> List<B> persistList(String beanType, + List<B> existingData, + List<B> newData) { + + Map<B, B> toPersist = Maps.newHashMap(); + + // mark all old entry to be dettach + TuttiEntities.fillEntries(toPersist, + existingData, + TuttiEntities.<B, B>newConstantFunction(null)); + + // index them by id + Map<String, B> existingById = TuttiEntities.splitById(existingData); + + for (B source : newData) { + + B target; + + if (TuttiEntities.isNew(source)) { + + // must create it + Class<B> type = getType(beanType); + target = TuttiEntities.newEntity(type); + } else { + + // get existing data + target = existingById.get(source.getId()); + } + + // store it to be persist in one time + toPersist.put(target, source); + } + + // persist (entry with a value) and dettach (entry with no value) + + List<B> result = Lists.newArrayList(); + + for (Map.Entry<B, B> entry : toPersist.entrySet()) { + B source = entry.getValue(); + B target = entry.getKey(); + if (source == null) { + + // dettach entity + cache.remove(beanType, target); + } else { + + // persist entity + persist(beanType, source, target, false); + + // store it back in result + result.add(target); + } + } + persistToFile(beanType); + + return result; + } + + protected <B extends IdAware> List<B> loadEntities(String entityType, + TuttiPersistenceDevFixtures fix) throws IOException { + File storageFile = getStorageFile(entityType); + + List<B> result; + + if (storageFile.exists()) { + if (log.isDebugEnabled()) { + log.debug("Load data from file: " + storageFile); + } + + ObjectInputStream oos = + new ObjectInputStream(new FileInputStream(storageFile)); + try { + + result = (List<B>) oos.readObject(); + oos.close(); + } catch (ClassNotFoundException e) { + throw new RuntimeException("Could not find a class ", e); + } finally { + IOUtils.closeQuietly(oos); + } + + cache.putAll(entityType, result); + } else { + + result = fix.getData(entityType); + + cache.putAll(entityType, result); + + // persist it right now + persistToFile(entityType); + } + + return result; + } + + 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); + + List<B> result; + + if (storageFile.exists()) { + if (log.isDebugEnabled()) { + log.debug("Load data from file: " + storageFile); + } + + ObjectInputStream oos = + new ObjectInputStream(new FileInputStream(storageFile)); + try { + + result = (List<B>) oos.readObject(); + oos.close(); + } catch (ClassNotFoundException e) { + throw new RuntimeException("Could not find a class ", e); + } finally { + IOUtils.closeQuietly(oos); + } + + } else { + result = defaultList; + + // persist it right now + persistToFile(entityType); + } + + cache.putAll(entityType, result); + return result; + } + + protected <B> File getStorageFile(String entityType) { + File result = new File(storageDirectory, entityType + ".ser"); + return result; + } + + public <B extends IdAware> void persistToFile(String entityType) { + + List<B> entities = getDataInNewList(entityType); + File storageFile = getStorageFile(entityType); + + if (log.isDebugEnabled()) { + log.debug("Persist storage to file: " + storageFile); + } + ObjectOutputStream oos = null; + try { + oos = new ObjectOutputStream(new FileOutputStream(storageFile)); + oos.writeObject(entities); + + oos.close(); + } catch (IOException e) { + throw new RuntimeException( + "Could not persist to file: " + storageFile, e); + } finally { + if (oos != null) { + IOUtils.closeQuietly(oos); + } + } + } + + 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, E> List<E> getTransformedDataList(String entityType, Function<B, E> function) { + List<B> result = getData(entityType); + return Lists.newArrayList(Iterables.transform(result, function)); + } + + protected <B extends IdAware> List<B> getFilteredDataList(String entityType, Predicate<B> predicate) { + List<B> result = getData(entityType); + return Lists.newArrayList(Iterables.filter(result, predicate)); + } + + protected <B extends FishingOperationAware> List<B> getAllTraitFilterBatches( + String beanType, + String traitId, + Predicate<B> extraPredicate) { + Predicate<B> predicate = TuttiEntities.newTraitIdPredicate(traitId); + if (extraPredicate != null) { + predicate = Predicates.and(predicate, extraPredicate); + } + List<B> result = getFilteredDataList(beanType, predicate); + return result; + } + + protected <B extends IdAware> B create(String type, B bean) { + return create(type, bean, true); + } + + 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(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"); + B result = getBean(type, id); + Preconditions.checkNotNull( + result, "Can't save a not persisted bean with id: " + id); + persist(type, bean, result, true); + return result; + } + + 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! + if (bean == null) { + if (log.isWarnEnabled()) { + log.warn("No bean with id: " + id); + } + } +// Preconditions.checkNotNull(bean, "Can't delete a null bean"); + cache.remove(type, bean); + persistToFile(type); + } + + 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 = getDataInNewList(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; + } + + /** + * TODO + * + * @author tchemit <chemit@codelutin.com> + * @since 0.1 + */ + public static class TuttiPersistenceDevFixtures { + + 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 = getKey(type, context); + cache.put(key, b); + } + + public TuttiPersistenceDevFixtures() { + + // inject default datas (only referential) + + cache = ArrayListMultimap.create(); + + Zone z; + z = new Zone(); + z.setId(UUID.randomUUID().toString()); + z.setName("zone1"); + putInCache(Zone.class, z); + + FishingOperationLocation l; + FishingOperationLocation sl; + FishingOperationLocation ssl; + + l = new FishingOperationLocation(); + l.setId(UUID.randomUUID().toString()); + l.setName("zone1 - strata1"); + l.setZone(z); + putInCache(FishingOperationLocation.class, "Strata", l); + + sl = new FishingOperationLocation(); + sl.setId(UUID.randomUUID().toString()); + sl.setName("strat1 - substrata1"); + sl.setParent(l); + putInCache(FishingOperationLocation.class, "SubStrata", sl); + + ssl = new FishingOperationLocation(); + ssl.setId(UUID.randomUUID().toString()); + ssl.setName("substrata1 - localite1"); + ssl.setLocalite(true); + ssl.setParent(sl); + putInCache(FishingOperationLocation.class, "Localite", ssl); + + ssl = new FishingOperationLocation(); + ssl.setId(UUID.randomUUID().toString()); + ssl.setName("substrata1 - localite2"); + ssl.setLocalite(true); + ssl.setParent(sl); + putInCache(FishingOperationLocation.class, "Localite", ssl); + + sl = new FishingOperationLocation(); + sl.setId(UUID.randomUUID().toString()); + sl.setName("strat1 - substrata2"); + sl.setParent(l); + putInCache(FishingOperationLocation.class, "SubStrata", sl); + + ssl = new FishingOperationLocation(); + ssl.setId(UUID.randomUUID().toString()); + ssl.setName("substrata2 - localite1"); + ssl.setLocalite(true); + ssl.setParent(sl); + putInCache(FishingOperationLocation.class, "Localite", ssl); + + ssl = new FishingOperationLocation(); + ssl.setId(UUID.randomUUID().toString()); + ssl.setName("substrata2 - localite2"); + ssl.setLocalite(true); + ssl.setParent(sl); + putInCache(FishingOperationLocation.class, "Localite", ssl); + + l = new FishingOperationLocation(); + l.setId(UUID.randomUUID().toString()); + l.setName("zone1 - strata2"); + l.setZone(z); + putInCache(FishingOperationLocation.class, "Strata", l); + + ssl = new FishingOperationLocation(); + ssl.setId(UUID.randomUUID().toString()); + ssl.setName("strata2 - localite1"); + ssl.setParent(l); + ssl.setLocalite(true); + putInCache(FishingOperationLocation.class, "Localite", ssl); + + ssl = new FishingOperationLocation(); + ssl.setId(UUID.randomUUID().toString()); + ssl.setName("strata2 - localite2"); + ssl.setParent(l); + ssl.setLocalite(true); + putInCache(FishingOperationLocation.class, "Localite", ssl); + + z = new Zone(); + z.setId(UUID.randomUUID().toString()); + z.setName("zone2"); + putInCache(Zone.class, z); + + l = new FishingOperationLocation(); + l.setId(UUID.randomUUID().toString()); + l.setName("zone2 - strata1"); + l.setZone(z); + putInCache(FishingOperationLocation.class, "Strata", l); + + l = new FishingOperationLocation(); + l.setId(UUID.randomUUID().toString()); + l.setName("zone2 - strata2"); + l.setZone(z); + putInCache(FishingOperationLocation.class, "Strata", l); + + Country c; + c = new Country(); + c.setId(UUID.randomUUID().toString()); + c.setName("France"); + putInCache(Country.class, c); + + c = new Country(); + c.setId(UUID.randomUUID().toString()); + c.setName("Espagne"); + putInCache(Country.class, c); + + Vessel v; + + v = new Vessel(); + v.setId(UUID.randomUUID().toString()); + v.setName("THALASSA"); + v.setScientificVessel(true); + v.setRegistrationCode("RegistrationCode1"); + putInCache(Vessel.class, "Scientific", v); + + v = new Vessel(); + v.setId(UUID.randomUUID().toString()); + v.setName("THALASSA-II"); + v.setScientificVessel(true); + v.setRegistrationCode("RegistrationCode2"); + 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-Scientific-1"); + putInCache(Gear.class, "Scientific", g); + + g = new Gear(); + g.setId(UUID.randomUUID().toString()); + 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(); + u.setId(UUID.randomUUID().toString()); + u.setName("Vincent Badts"); + u.setFirstName("Vincent"); + u.setLastName("Badts"); + putInCache(Person.class, u); + + u = new Person(); + u.setId(UUID.randomUUID().toString()); + u.setName("Jean claude Mahet"); + u.setFirstName("Jean claude"); + u.setLastName("Mahet"); + putInCache(Person.class, u); + + u = new Person(); + u.setId(UUID.randomUUID().toString()); + u.setName("Luisa Metral"); + u.setFirstName("Luisa"); + u.setLastName("Metral"); + putInCache(Person.class, u); + + u = new Person(); + u.setId(UUID.randomUUID().toString()); + u.setName("Jean Hervé Bourdeix"); + u.setFirstName("Jean Hervé"); + u.setLastName("Bourdeix"); + putInCache(Person.class, u); + + u = new Person(); + u.setId(UUID.randomUUID().toString()); + u.setName("Ysabelle Cheret"); + u.setFirstName("Ysabelle"); + u.setLastName("Cheret"); + putInCache(Person.class, u); + + u = new Person(); + u.setId(UUID.randomUUID().toString()); + u.setName("Blandine Brisset"); + u.setFirstName("Blandine"); + u.setLastName("Brisset"); + putInCache(Person.class, u); + + Caracteristic ca; + + Species sp; + + sp = new Species(); + sp.setId(UUID.randomUUID().toString()); + sp.setCodeMemo("BAR"); + sp.setGenusSpecies("Bar"); + putInCache(Species.class, sp); + + sp = new Species(); + sp.setId(UUID.randomUUID().toString()); + sp.setCodeMemo("CHIN"); + sp.setGenusSpecies("Chinchard"); + putInCache(Species.class, sp); + + sp = new Species(); + sp.setId(UUID.randomUUID().toString()); + sp.setCodeMemo("FLE"); + sp.setGenusSpecies("Flet"); + putInCache(Species.class, sp); + + sp = new Species(); + sp.setId(UUID.randomUUID().toString()); + sp.setCodeMemo("LIM"); + sp.setGenusSpecies("Limande"); + putInCache(Species.class, sp); + + ca = createQualitativeCaracteristic("MacroWaste", CaracteristicEnum.MacroWasteCategory.name()); + + createCaracteristicQualitativeValue(ca, "Bottle"); + createCaracteristicQualitativeValue(ca, "Sheet"); + createCaracteristicQualitativeValue(ca, "Bag"); + createCaracteristicQualitativeValue(ca, "Caps/ lids"); + createCaracteristicQualitativeValue(ca, "Fishing line (monofilament)"); + createCaracteristicQualitativeValue(ca, "Fishing line (entangled)"); + createCaracteristicQualitativeValue(ca, "Synthetic rope"); + createCaracteristicQualitativeValue(ca, "Cable ties"); + createCaracteristicQualitativeValue(ca, "Strapping band"); + createCaracteristicQualitativeValue(ca, "Crates abd containers"); + createCaracteristicQualitativeValue(ca, "Boots"); + createCaracteristicQualitativeValue(ca, "Balloons"); + createCaracteristicQualitativeValue(ca, "bobbins (fishing)"); + createCaracteristicQualitativeValue(ca, "tyre"); + createCaracteristicQualitativeValue(ca, "glove"); + createCaracteristicQualitativeValue(ca, "diapers"); + createCaracteristicQualitativeValue(ca, "cotton buds"); + createCaracteristicQualitativeValue(ca, "cigarette butts"); + createCaracteristicQualitativeValue(ca, "condoms"); + createCaracteristicQualitativeValue(ca, "syringes"); + createCaracteristicQualitativeValue(ca, "sanitary towels / tampon"); + createCaracteristicQualitativeValue(ca, "jar"); + createCaracteristicQualitativeValue(ca, "piece"); + + ca = createQualitativeCaracteristic("MacroWaste Size category", + CaracteristicEnum.MacroWasteSizeCategory.name()); + createCaracteristicQualitativeValue(ca, "<5*5cm = 25cm²"); + createCaracteristicQualitativeValue(ca, "<10*10cm = 100cm²"); + createCaracteristicQualitativeValue(ca, "<20*20cm = 400cm²"); + createCaracteristicQualitativeValue(ca, "<50*50cm = 2500cm²"); + createCaracteristicQualitativeValue(ca, "<100*100cm = 1m²"); + createCaracteristicQualitativeValue(ca, ">100*100cm = 1m²"); + + ca = createQualitativeCaracteristic("Sorted / Unsorted Category", CaracteristicEnum.SortedUnsortedCategory.name()); + + createCaracteristicQualitativeValue(ca, "Vrac"); + createCaracteristicQualitativeValue(ca, "Hors Vrac"); + + ca = createQualitativeCaracteristic("Species Sex Category", CaracteristicEnum.SexCategory.name()); + + createCaracteristicQualitativeValue(ca, "Male"); + createCaracteristicQualitativeValue(ca, "Femelle"); + createCaracteristicQualitativeValue(ca, "Indéterminé"); + + ca = createQualitativeCaracteristic("Species Maturity Category", CaracteristicEnum.MaturityCategory.name()); + + createCaracteristicQualitativeValue(ca, "0"); + createCaracteristicQualitativeValue(ca, "1"); + createCaracteristicQualitativeValue(ca, "2"); + + ca = createQualitativeCaracteristic("Species Size Category", CaracteristicEnum.SizeCategory.name()); + + createCaracteristicQualitativeValue(ca, "Petit"); + createCaracteristicQualitativeValue(ca, "Gros"); + } + + protected void createCaracteristicQualitativeValue(Caracteristic ca, String name) { + CaracteristicQualitativeValue cqv = new CaracteristicQualitativeValue(); + cqv.setId(UUID.randomUUID().toString()); + cqv.setName(name); + ca.addQualitativeValue(cqv); + putInCache(CaracteristicQualitativeValue.class, name, cqv); + } + + protected Caracteristic createQualitativeCaracteristic(String name, String category) { + Caracteristic ca = new Caracteristic(); + ca.setId(UUID.randomUUID().toString()); + ca.setName(name); + ca.setCategory(category); + ca.setCaracteristicType(CaracteristicType.QUALITATIVE); + ca.setQualitativeValue(Lists.<CaracteristicQualitativeValue>newArrayList()); + putInCache(Caracteristic.class, category, ca); + return ca; + } + + protected Caracteristic createNumberCaracteristic(String name, String category) { + Caracteristic ca = new Caracteristic(); + ca.setId(UUID.randomUUID().toString()); + ca.setName(name); + ca.setCategory(category); + ca.setCaracteristicType(CaracteristicType.NUMBER); + putInCache(Caracteristic.class, category, ca); + return ca; + } + + public <B extends IdAware> List<B> getData(String entityType) { + List<B> result = (List<B>) cache.get(entityType); + return result; + } + } +} Added: trunk/tutti-persistence/src/main/java/fr/ifremer/tutti/persistence/TuttiPersistenceServiceImplementor.java =================================================================== --- trunk/tutti-persistence/src/main/java/fr/ifremer/tutti/persistence/TuttiPersistenceServiceImplementor.java (rev 0) +++ trunk/tutti-persistence/src/main/java/fr/ifremer/tutti/persistence/TuttiPersistenceServiceImplementor.java 2013-02-02 13:04:15 UTC (rev 298) @@ -0,0 +1,18 @@ +package fr.ifremer.tutti.persistence; + +import java.io.Closeable; +import java.io.IOException; + +/** + * Contract of any tutti persistence service (mainly used to init and + * close services). + * + * @author tchemit <chemit@codelutin.com> + * @since 1.0 + */ +public interface TuttiPersistenceServiceImplementor extends Closeable { + + void init(); + + void close() throws IOException; +} Property changes on: trunk/tutti-persistence/src/main/java/fr/ifremer/tutti/persistence/TuttiPersistenceServiceImplementor.java ___________________________________________________________________ Added: svn:keywords + Author Date Id Revision Added: svn:eol-style + native Modified: trunk/tutti-persistence/src/main/java/fr/ifremer/tutti/persistence/service/AccidentalBatchPersistenceService.java =================================================================== --- trunk/tutti-persistence/src/main/java/fr/ifremer/tutti/persistence/service/AccidentalBatchPersistenceService.java 2013-02-01 22:27:32 UTC (rev 297) +++ trunk/tutti-persistence/src/main/java/fr/ifremer/tutti/persistence/service/AccidentalBatchPersistenceService.java 2013-02-02 13:04:15 UTC (rev 298) @@ -24,6 +24,7 @@ * #L% */ +import fr.ifremer.tutti.persistence.TuttiPersistenceServiceImplementor; import fr.ifremer.tutti.persistence.entities.data.AccidentalBatch; import org.springframework.transaction.annotation.Transactional; @@ -36,7 +37,7 @@ * @since 0.3 */ @Transactional(readOnly = true) -public interface AccidentalBatchPersistenceService { +public interface AccidentalBatchPersistenceService extends TuttiPersistenceServiceImplementor { List<AccidentalBatch> getAllAccidentalBatch(String fishingOperationId); Modified: trunk/tutti-persistence/src/main/java/fr/ifremer/tutti/persistence/service/BenthosBatchPersistenceService.java =================================================================== --- trunk/tutti-persistence/src/main/java/fr/ifremer/tutti/persistence/service/BenthosBatchPersistenceService.java 2013-02-01 22:27:32 UTC (rev 297) +++ trunk/tutti-persistence/src/main/java/fr/ifremer/tutti/persistence/service/BenthosBatchPersistenceService.java 2013-02-02 13:04:15 UTC (rev 298) @@ -24,6 +24,7 @@ * #L% */ +import fr.ifremer.tutti.persistence.TuttiPersistenceServiceImplementor; import fr.ifremer.tutti.persistence.entities.data.BenthosBatch; import org.springframework.transaction.annotation.Transactional; @@ -36,7 +37,7 @@ * @since 0.3 */ @Transactional(readOnly = true) -public interface BenthosBatchPersistenceService { +public interface BenthosBatchPersistenceService extends TuttiPersistenceServiceImplementor { List<BenthosBatch> getAllBenthosBatch(String fishingOperationId); Modified: trunk/tutti-persistence/src/main/java/fr/ifremer/tutti/persistence/service/CatchBatchPersistenceService.java =================================================================== --- trunk/tutti-persistence/src/main/java/fr/ifremer/tutti/persistence/service/CatchBatchPersistenceService.java 2013-02-01 22:27:32 UTC (rev 297) +++ trunk/tutti-persistence/src/main/java/fr/ifremer/tutti/persistence/service/CatchBatchPersistenceService.java 2013-02-02 13:04:15 UTC (rev 298) @@ -24,6 +24,7 @@ * #L% */ +import fr.ifremer.tutti.persistence.TuttiPersistenceServiceImplementor; import fr.ifremer.tutti.persistence.entities.data.CatchBatch; import org.springframework.transaction.annotation.Transactional; @@ -34,7 +35,7 @@ * @since 1.0 */ @Transactional(readOnly = true) -public interface CatchBatchPersistenceService { +public interface CatchBatchPersistenceService extends TuttiPersistenceServiceImplementor { /** * Get the catchBatch from the fishing Operation id. Modified: trunk/tutti-persistence/src/main/java/fr/ifremer/tutti/persistence/service/CruisePersistenceService.java =================================================================== --- trunk/tutti-persistence/src/main/java/fr/ifremer/tutti/persistence/service/CruisePersistenceService.java 2013-02-01 22:27:32 UTC (rev 297) +++ trunk/tutti-persistence/src/main/java/fr/ifremer/tutti/persistence/service/CruisePersistenceService.java 2013-02-02 13:04:15 UTC (rev 298) @@ -24,6 +24,7 @@ * #L% */ +import fr.ifremer.tutti.persistence.TuttiPersistenceServiceImplementor; import fr.ifremer.tutti.persistence.entities.data.Cruise; import org.springframework.transaction.annotation.Transactional; @@ -36,7 +37,7 @@ * @since 0.3 */ @Transactional(readOnly = true) -public interface CruisePersistenceService { +public interface CruisePersistenceService extends TuttiPersistenceServiceImplementor { List<Cruise> getAllCruise(String programId); Modified: trunk/tutti-persistence/src/main/java/fr/ifremer/tutti/persistence/service/FishingOperationPersistenceService.java =================================================================== --- trunk/tutti-persistence/src/main/java/fr/ifremer/tutti/persistence/service/FishingOperationPersistenceService.java 2013-02-01 22:27:32 UTC (rev 297) +++ trunk/tutti-persistence/src/main/java/fr/ifremer/tutti/persistence/service/FishingOperationPersistenceService.java 2013-02-02 13:04:15 UTC (rev 298) @@ -24,6 +24,7 @@ * #L% */ +import fr.ifremer.tutti.persistence.TuttiPersistenceServiceImplementor; import fr.ifremer.tutti.persistence.entities.data.FishingOperation; import org.springframework.transaction.annotation.Transactional; @@ -36,7 +37,7 @@ * @since 0.3 */ @Transactional(readOnly = true) -public interface FishingOperationPersistenceService { +public interface FishingOperationPersistenceService extends TuttiPersistenceServiceImplementor { List<FishingOperation> getAllFishingOperation(String cruiseId); Modified: trunk/tutti-persistence/src/main/java/fr/ifremer/tutti/persistence/service/MacroWasteBatchPersistenceService.java =================================================================== --- trunk/tutti-persistence/src/main/java/fr/ifremer/tutti/persistence/service/MacroWasteBatchPersistenceService.java 2013-02-01 22:27:32 UTC (rev 297) +++ trunk/tutti-persistence/src/main/java/fr/ifremer/tutti/persistence/service/MacroWasteBatchPersistenceService.java 2013-02-02 13:04:15 UTC (rev 298) @@ -24,6 +24,7 @@ * #L% */ +import fr.ifremer.tutti.persistence.TuttiPersistenceServiceImplementor; import fr.ifremer.tutti.persistence.entities.data.MacroWasteBatch; import org.springframework.transaction.annotation.Transactional; @@ -36,7 +37,7 @@ * @since 0.3 */ @Transactional(readOnly = true) -public interface MacroWasteBatchPersistenceService { +public interface MacroWasteBatchPersistenceService extends TuttiPersistenceServiceImplementor { List<MacroWasteBatch> getAllMacroWasteBatch(String fishingOperationId); Modified: trunk/tutti-persistence/src/main/java/fr/ifremer/tutti/persistence/service/PlanktonBatchPersistenceService.java =================================================================== --- trunk/tutti-persistence/src/main/java/fr/ifremer/tutti/persistence/service/PlanktonBatchPersistenceService.java 2013-02-01 22:27:32 UTC (rev 297) +++ trunk/tutti-persistence/src/main/java/fr/ifremer/tutti/persistence/service/PlanktonBatchPersistenceService.java 2013-02-02 13:04:15 UTC (rev 298) @@ -24,6 +24,7 @@ * #L% */ +import fr.ifremer.tutti.persistence.TuttiPersistenceServiceImplementor; import fr.ifremer.tutti.persistence.entities.data.PlanktonBatch; import org.springframework.transaction.annotation.Transactional; @@ -36,7 +37,7 @@ * @since 0.3 */ @Transactional(readOnly = true) -public interface PlanktonBatchPersistenceService { +public interface PlanktonBatchPersistenceService extends TuttiPersistenceServiceImplementor { List<PlanktonBatch> getAllPlanktonBatch(String fishingOperationId); Modified: trunk/tutti-persistence/src/main/java/fr/ifremer/tutti/persistence/service/ProgramPersistenceService.java =================================================================== --- trunk/tutti-persistence/src/main/java/fr/ifremer/tutti/persistence/service/ProgramPersistenceService.java 2013-02-01 22:27:32 UTC (rev 297) +++ trunk/tutti-persistence/src/main/java/fr/ifremer/tutti/persistence/service/ProgramPersistenceService.java 2013-02-02 13:04:15 UTC (rev 298) @@ -24,6 +24,7 @@ * #L% */ +import fr.ifremer.tutti.persistence.TuttiPersistenceServiceImplementor; import fr.ifremer.tutti.persistence.entities.data.Program; import org.springframework.transaction.annotation.Transactional; @@ -36,7 +37,7 @@ * @since 0.3 */ @Transactional(readOnly = true) -public interface ProgramPersistenceService { +public interface ProgramPersistenceService extends TuttiPersistenceServiceImplementor { List<Program> getAllProgram(); Modified: trunk/tutti-persistence/src/main/java/fr/ifremer/tutti/persistence/service/ProtocolPersistenceService.java =================================================================== --- trunk/tutti-persistence/src/main/java/fr/ifremer/tutti/persistence/service/ProtocolPersistenceService.java 2013-02-01 22:27:32 UTC (rev 297) +++ trunk/tutti-persistence/src/main/java/fr/ifremer/tutti/persistence/service/ProtocolPersistenceService.java 2013-02-02 13:04:15 UTC (rev 298) @@ -24,6 +24,7 @@ * #L% */ +import fr.ifremer.tutti.persistence.TuttiPersistenceServiceImplementor; import fr.ifremer.tutti.persistence.entities.protocol.TuttiProtocol; import java.util.List; @@ -35,7 +36,7 @@ * @since 0.3 */ //@Transactional(readOnly = true) -public interface ProtocolPersistenceService { +public interface ProtocolPersistenceService extends TuttiPersistenceServiceImplementor { boolean isProtocolExist(String id); @@ -56,5 +57,4 @@ // @Transactional(readOnly = false) void deleteProtocol(String protocolId); - void init(); } Modified: trunk/tutti-persistence/src/main/java/fr/ifremer/tutti/persistence/service/ReferentialPersistenceService.java =================================================================== --- trunk/tutti-persistence/src/main/java/fr/ifremer/tutti/persistence/service/ReferentialPersistenceService.java 2013-02-01 22:27:32 UTC (rev 297) +++ trunk/tutti-persistence/src/main/java/fr/ifremer/tutti/persistence/service/ReferentialPersistenceService.java 2013-02-02 13:04:15 UTC (rev 298) @@ -24,6 +24,7 @@ * #L% */ +import fr.ifremer.tutti.persistence.TuttiPersistenceServiceImplementor; import fr.ifremer.tutti.persistence.entities.data.Cruise; import fr.ifremer.tutti.persistence.entities.data.Program; import fr.ifremer.tutti.persistence.entities.referential.Caracteristic; @@ -46,7 +47,7 @@ * @since 0.3 */ @Transactional(readOnly = true) -public interface ReferentialPersistenceService { +public interface ReferentialPersistenceService extends TuttiPersistenceServiceImplementor { //------------------------------------------------------------------------// //-- Referential methods --// Modified: trunk/tutti-persistence/src/main/java/fr/ifremer/tutti/persistence/service/SpeciesBatchPersistenceService.java =================================================================== --- trunk/tutti-persistence/src/main/java/fr/ifremer/tutti/persistence/service/SpeciesBatchPersistenceService.java 2013-02-01 22:27:32 UTC (rev 297) +++ trunk/tutti-persistence/src/main/java/fr/ifremer/tutti/persistence/service/SpeciesBatchPersistenceService.java 2013-02-02 13:04:15 UTC (rev 298) @@ -24,6 +24,7 @@ * #L% */ +import fr.ifremer.tutti.persistence.TuttiPersistenceServiceImplementor; import fr.ifremer.tutti.persistence.entities.data.SpeciesBatch; import fr.ifremer.tutti.persistence.entities.data.SpeciesBatchFrequency; import org.springframework.transaction.annotation.Transactional; @@ -37,7 +38,7 @@ * @since 0.3 */ @Transactional(readOnly = true) -public interface SpeciesBatchPersistenceService { +public interface SpeciesBatchPersistenceService extends TuttiPersistenceServiceImplementor { List<SpeciesBatch> getAllRootSpeciesBatch(String fishingOperationId); Modified: trunk/tutti-persistence/src/main/java/fr/ifremer/tutti/persistence/service/synchro/ReferentialSynchronizeService.java =================================================================== --- trunk/tutti-persistence/src/main/java/fr/ifremer/tutti/persistence/service/synchro/ReferentialSynchronizeService.java 2013-02-01 22:27:32 UTC (rev 297) +++ trunk/tutti-persistence/src/main/java/fr/ifremer/tutti/persistence/service/synchro/ReferentialSynchronizeService.java 2013-02-02 13:04:15 UTC (rev 298) @@ -24,6 +24,7 @@ * #L% */ +import fr.ifremer.tutti.persistence.TuttiPersistenceServiceImplementor; import org.hibernate.dialect.Dialect; import org.springframework.transaction.annotation.Propagation; import org.springframework.transaction.annotation.Transactional; @@ -37,7 +38,7 @@ * @since 1.0 */ @Transactional(readOnly = true, propagation = Propagation.NOT_SUPPORTED) -public interface ReferentialSynchronizeService { +public interface ReferentialSynchronizeService extends TuttiPersistenceServiceImplementor { /** * Get the db connexion informations for the internal data source. Modified: trunk/tutti-persistence-adagio/pom.xml =================================================================== --- trunk/tutti-persistence-adagio/pom.xml 2013-02-01 22:27:32 UTC (rev 297) +++ trunk/tutti-persistence-adagio/pom.xml 2013-02-02 13:04:15 UTC (rev 298) @@ -47,13 +47,6 @@ </dependency> <dependency> - <groupId>${project.groupId}</groupId> - <artifactId>tutti-persistence-dev</artifactId> - <version>${project.version}</version> - <scope>test</scope> - </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/TuttiPersistenceAdagioImpl.java =================================================================== --- trunk/tutti-persistence-adagio/src/main/java/fr/ifremer/tutti/persistence/TuttiPersistenceAdagioImpl.java 2013-02-01 22:27:32 UTC (rev 297) +++ trunk/tutti-persistence-adagio/src/main/java/fr/ifremer/tutti/persistence/TuttiPersistenceAdagioImpl.java 2013-02-02 13:04:15 UTC (rev 298) @@ -112,10 +112,21 @@ } @Override - public void open() throws IOException { + public void init() { if (log.isInfoEnabled()) { log.info("Open persistence driver " + getImplementationName()); } + referentialService.init(); + programService.init(); + cruiseService.init(); + fishingOperationService.init(); + catchBatchService.init(); + speciesBatchService.init(); + benthosBatchService.init(); + benthosBatchService.init(); + planktonBatchService.init(); + macroWasteBatchService.init(); + accidentalBatchService.init(); protocolService.init(); } @@ -125,6 +136,18 @@ if (log.isInfoEnabled()) { log.info("Close persistence driver " + getImplementationName()); } + referentialService.close(); + programService.close(); + cruiseService.close(); + fishingOperationService.close(); + catchBatchService.close(); + speciesBatchService.close(); + benthosBatchService.close(); + benthosBatchService.close(); + planktonBatchService.close(); + macroWasteBatchService.close(); + accidentalBatchService.close(); + protocolService.close(); TuttiPersistenceServiceLocator.close(); } @@ -248,6 +271,11 @@ return referentialService.getPerson(personId); } + @Override + public Gear getGear(Integer gearId) { + return referentialService.getGear(gearId); + } + //------------------------------------------------------------------------// //-- Program methods --// //------------------------------------------------------------------------// Modified: trunk/tutti-persistence-adagio/src/main/java/fr/ifremer/tutti/persistence/service/AbstractPersistenceService.java =================================================================== --- trunk/tutti-persistence-adagio/src/main/java/fr/ifremer/tutti/persistence/service/AbstractPersistenceService.java 2013-02-01 22:27:32 UTC (rev 297) +++ trunk/tutti-persistence-adagio/src/main/java/fr/ifremer/tutti/persistence/service/AbstractPersistenceService.java 2013-02-02 13:04:15 UTC (rev 298) @@ -26,6 +26,7 @@ import com.google.common.base.Preconditions; import fr.ifremer.adagio.core.dao.administration.programStrategy.ProgramDao; +import fr.ifremer.tutti.persistence.TuttiPersistenceServiceImplementor; import fr.ifremer.tutti.persistence.config.TuttiPersistenceAdagioConfig; import org.apache.commons.logging.Log; import org.apache.commons.logging.LogFactory; @@ -45,7 +46,7 @@ * @author tchemit <chemit@codelutin.com> * @since 0.3 */ -public abstract class AbstractPersistenceService { +public abstract class AbstractPersistenceService implements TuttiPersistenceServiceImplementor { /** Logger. */ private static final Log log = @@ -67,6 +68,7 @@ protected TuttiPersistenceAdagioConfig config; + @Override public void init() { if (config == null) { @@ -78,6 +80,11 @@ } } + @Override + public void close() { + // do nohting by default + } + public void setConfig(TuttiPersistenceAdagioConfig config) { this.config = config; } Modified: trunk/tutti-persistence-adagio/src/main/java/fr/ifremer/tutti/persistence/service/TuttiPersistenceServiceLocator.java =================================================================== --- trunk/tutti-persistence-adagio/src/main/java/fr/ifremer/tutti/persistence/service/TuttiPersistenceServiceLocator.java 2013-02-01 22:27:32 UTC (rev 297) +++ trunk/tutti-persistence-adagio/src/main/java/fr/ifremer/tutti/persistence/service/TuttiPersistenceServiceLocator.java 2013-02-02 13:04:15 UTC (rev 298) @@ -26,6 +26,7 @@ import fr.ifremer.adagio.core.service.ServiceLocator; import fr.ifremer.tutti.persistence.TuttiPersistence; +import fr.ifremer.tutti.persistence.TuttiPersistenceServiceImplementor; import fr.ifremer.tutti.persistence.service.synchro.ReferentialSynchronizeService; /** @@ -55,7 +56,7 @@ } public static TuttiPersistence getPersistenceService() { - return instance().getService("tuttiPersistence", + return getPersistenceService("tuttiPersistence", TuttiPersistence.class); } @@ -65,68 +66,63 @@ } public static ProgramPersistenceService getProgramPersistenceService() { - return instance().getService("programPersistenceService", + return getPersistenceService("programPersistenceService", ProgramPersistenceService.class); } public static CruisePersistenceService getCruisePersistenceService() { - return instance().getService("cruisePersistenceService", + return getPersistenceService("cruisePersistenceService", CruisePersistenceService.class); } public static FishingOperationPersistenceService getFishingOperationPersistenceService() { - return instance().getService("fishingOperationPersistenceService", + return getPersistenceService("fishingOperationPersistenceService", FishingOperationPersistenceService.class); } public static CatchBatchPersistenceService getCatchBatchPersistenceService() { - return instance().getService("catchBatchPersistenceService", + return getPersistenceService("catchBatchPersistenceService", CatchBatchPersistenceService.class); } public static SpeciesBatchPersistenceService getSpeciesBatchPersistenceService() { - return instance().getService("speciesBatchPersistenceService", + return getPersistenceService("speciesBatchPersistenceService", SpeciesBatchPersistenceService.class); } public static BenthosBatchPersistenceService getBenthosBatchPersistenceService() { - return instance().getService("benthosBatchPersistenceService", + return getPersistenceService("benthosBatchPersistenceService", BenthosBatchPersistenceService.class); } public static PlanktonBatchPersistenceService getPlanktonBatchPersistenceService() { - return instance().getService("planktonBatchPersistenceService", + return getPersistenceService("planktonBatchPersistenceService", PlanktonBatchPersistenceService.class); } public static MacroWasteBatchPersistenceService getMacroWasteBatchPersistenceService() { - return instance().getService("macroWasteBatchPersistenceService", + return getPersistenceService("macroWasteBatchPersistenceService", MacroWasteBatchPersistenceService.class); } public static AccidentalBatchPersistenceService getAccidentalBatchPersistenceService() { - return instance().getService("accidentalBatchPersistenceService", + return getPersistenceService("accidentalBatchPersistenceService", AccidentalBatchPersistenceService.class); } public static ProtocolPersistenceService getProtocolPersistenceService() { - ProtocolPersistenceService result = instance().getService("protocolPersistenceService", - ProtocolPersistenceService.class); - result.init(); - return result; + return getPersistenceService("protocolPersistenceService", + ProtocolPersistenceService.class); } public static ReferentialSynchronizeService getReferentialSynchronizeService() { - return instance().getService("referentialSynchronizeService", + return getPersistenceService("referentialSynchronizeService", ReferentialSynchronizeService.class); } - @Override - public <S> S getService(String name, Class<S> serviceType) { - S service = super.getService(name, serviceType); - if (service instanceof AbstractPersistenceService) { - ((AbstractPersistenceService) service).init(); - } + public static <S extends TuttiPersistenceServiceImplementor> S getPersistenceService(String name, Class<S> serviceType) { + S service = instance().getService(name, serviceType); + service.init(); return service; } Modified: trunk/tutti-persistence-adagio/src/main/java/fr/ifremer/tutti/persistence/service/synchro/ReferentialSynchronizeHelper.java =================================================================== --- trunk/tutti-persistence-adagio/src/main/java/fr/ifremer/tutti/persistence/service/synchro/ReferentialSynchronizeHelper.java 2013-02-01 22:27:32 UTC (rev 297) +++ trunk/tutti-persistence-adagio/src/main/java/fr/ifremer/tutti/persistence/service/synchro/ReferentialSynchronizeHelper.java 2013-02-02 13:04:15 UTC (rev 298) @@ -32,6 +32,7 @@ import org.hibernate.tool.hbm2ddl.ColumnMetadata; import org.springframework.dao.DataRetrievalFailureException; import org.springframework.jdbc.support.JdbcUtils; +import org.springframework.stereotype.Component; import java.sql.Connection; import java.sql.PreparedStatement; @@ -47,6 +48,7 @@ * @author tchemit <chemit@codelutin.com> * @since 1.0 */ +@Component("referentialSynchronizeHelper") public class ReferentialSynchronizeHelper { /** Logger. */ Modified: trunk/tutti-persistence-adagio/src/main/java/fr/ifremer/tutti/persistence/service/synchro/ReferentialSynchronizeServiceImpl.java =================================================================== --- trunk/tutti-persistence-adagio/src/main/java/fr/ifremer/tutti/persistence/service/synchro/ReferentialSynchronizeServiceImpl.java 2013-02-01 22:27:32 UTC (rev 297) +++ trunk/tutti-persistence-adagio/src/main/java/fr/ifremer/tutti/persistence/service/synchro/ReferentialSynchronizeServiceImpl.java 2013-02-02 13:04:15 UTC (rev 298) @@ -25,6 +25,7 @@ */ import fr.ifremer.tutti.persistence.service.AbstractPersistenceService; +import fr.ifremer.tutti.persistence.service.measure.MeasurementPersistenceHelper; import org.apache.commons.dbcp.BasicDataSource; import org.hibernate.cfg.Environment; import org.hibernate.dialect.Dialect; @@ -32,6 +33,7 @@ import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Service; +import javax.annotation.Resource; import java.util.Properties; /** @@ -50,8 +52,8 @@ protected Properties dbconnexionProperties; - protected final ReferentialSynchronizeHelper helper = - new ReferentialSynchronizeHelper(); + @Resource(name = "referentialSynchronizeHelper") + protected ReferentialSynchronizeHelper helper ; @Override public Properties getLocalConnectionProperties() { Modified: trunk/tutti-persistence-adagio/src/main/resources/applicationContext-service-tutti.xml =================================================================== --- trunk/tutti-persistence-adagio/src/main/resources/applicationContext-service-tutti.xml 2013-02-01 22:27:32 UTC (rev 297) +++ trunk/tutti-persistence-adagio/src/main/resources/applicationContext-service-tutti.xml 2013-02-02 13:04:15 UTC (rev 298) @@ -31,7 +31,7 @@ <context:component-scan base-package="fr.ifremer.tutti.persistence.service"/> - <bean id="tuttiPersistence" init-method="open" destroy-method="close" + <bean id="tuttiPersistence" init-method="init" destroy-method="close" class="fr.ifremer.tutti.persistence.TuttiPersistenceAdagioImpl"/> <bean id="tuttiEnumerationFile" init-method="init" 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-02-01 22:27:32 UTC (rev 297) +++ trunk/tutti-persistence-adagio/src/test/java/fr/ifremer/tutti/persistence/service/ReferentialPersistenceServiceTest.java 2013-02-02 13:04:15 UTC (rev 298) @@ -25,11 +25,9 @@ */ import com.google.common.base.Preconditions; - import fr.ifremer.adagio.core.service.technical.CacheService; 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; @@ -69,7 +67,7 @@ protected static TuttiPersistenceDevImpl storage; protected ReferentialPersistenceService service; - + protected CacheService cacheService; @BeforeClass @@ -79,13 +77,10 @@ ApplicationConfig applicationConfig = dbResource.getConfig().getConfig(); - TuttiPersistenceDevConfig devDriverConfig = - new TuttiPersistenceDevConfig(applicationConfig); - applicationConfig.setOption( TuttiPersistenceDevImpl.SKIP_FIXTURES_OPTION, Boolean.TRUE.toString()); - storage = new TuttiPersistenceDevImpl(devDriverConfig) { + storage = new TuttiPersistenceDevImpl(applicationConfig) { @Override public <B extends IdAware> B create(String type, @@ -103,10 +98,10 @@ }; if (log.isInfoEnabled()) { - log.info("Will open persistence driver " + storage.getImplementationName()); + log.info("Will init persistence driver " + storage.getImplementationName()); } - storage.open(); + storage.init(); } @AfterClass @@ -118,7 +113,7 @@ public void setUp() throws Exception { service = TuttiPersistenceServiceLocator.getReferentialPersistenceService(); cacheService = TuttiPersistenceServiceLocator.instance().getCacheService(); - + // This is need for test : getAllFishingVessel() cacheService.clearAllCaches(); } @@ -208,10 +203,10 @@ @Test public void getAllFishingVessel() { - long time = System.currentTimeMillis(); + long time = System.currentTimeMillis(); List<Vessel> result = service.getAllFishingVessel(); long delta1 = System.currentTimeMillis() - time; - + Assert.assertNotNull(result); Assert.assertEquals(24805, result.size()); @@ -219,7 +214,7 @@ time = System.currentTimeMillis(); result = service.getAllFishingVessel(); long delta2 = System.currentTimeMillis() - time; - + float reduceFactor = delta2 * 100 / delta1; Assert.assertTrue("The cache on getAllFishingVessel() should have speed up more than factor 10. Make sure EhCache is well configured.", reduceFactor < 0.1); @@ -272,7 +267,7 @@ List<Caracteristic> result = service.getAllCaracteristic(); Assert.assertNotNull(result); Assert.assertEquals(482, result.size()); - persistList(Caracteristic.class, ReferentialPersistenceServiceDevImpl.CaracteristicEnum.All.name(), result); + persistList(Caracteristic.class, TuttiPersistenceDevImpl.CaracteristicEnum.All.name(), result); assertSize(result, storage.getAllCaracteristic()); } @@ -280,7 +275,7 @@ public void getSizeCategoryCaracteristic() { Caracteristic result = service.getSizeCategoryCaracteristic(); assertCaracteristicQualitative(result, 6); - persist(Caracteristic.class, ReferentialPersistenceServiceDevImpl.CaracteristicEnum.SizeCategory.name(), result); + persist(Caracteristic.class, TuttiPersistenceDevImpl.CaracteristicEnum.SizeCategory.name(), result); assertCaracteristicSize(result, storage.getSizeCategoryCaracteristic()); } @@ -288,7 +283,7 @@ public void getSexCaracteristic() { Caracteristic result = service.getSexCaracteristic(); assertCaracteristicQualitative(result, 4); - persist(Caracteristic.class, ReferentialPersistenceServiceDevImpl.CaracteristicEnum.SexCategory.name(), result); + persist(Caracteristic.class, TuttiPersistenceDevImpl.CaracteristicEnum.SexCategory.name(), result); assertCaracteristicSize(result, storage.getSexCaracteristic()); } @@ -296,7 +291,7 @@ public void getSortedUnsortedCaracteristic() { Caracteristic result = service.getSortedUnsortedCaracteristic(); assertCaracteristicQualitative(result, 2); - persist(Caracteristic.class, ReferentialPersistenceServiceDevImpl.CaracteristicEnum.SortedUnsortedCategory.name(), result); + persist(Caracteristic.class, TuttiPersistenceDevImpl.CaracteristicEnum.SortedUnsortedCategory.name(), result); assertCaracteristicSize(result, storage.getSortedUnsortedCaracteristic()); } @@ -304,7 +299,7 @@ public void getMaturityCaracteristic() { Caracteristic result = service.getMaturityCaracteristic(); assertCaracteristicQualitative(result, 6); - persist(Caracteristic.class, ReferentialPersistenceServiceDevImpl.CaracteristicEnum.MaturityCategory.name(), result); + persist(Caracteristic.class, TuttiPersistenceDevImpl.CaracteristicEnum.MaturityCategory.name(), result); assertCaracteristicSize(result, storage.getMaturityCaracteristic()); } @@ -313,7 +308,7 @@ public void getMacroWasteCategoryCaracteristic() { Caracteristic result = service.getMacroWasteCategoryCaracteristic(); assertCaracteristicQualitative(result, 21); - persist(Caracteristic.class, ReferentialPersistenceServiceDevImpl.CaracteristicEnum.MacroWasteCategory.name(), result); + persist(Caracteristic.class, TuttiPersistenceDevImpl.CaracteristicEnum.MacroWasteCategory.name(), result); assertCaracteristicSize(result, storage.getMacroWasteCategoryCaracteristic()); } @@ -322,7 +317,7 @@ public void getMacroWasteSizeCategoryCaracteristic() { Caracteristic result = service.getMacroWasteSizeCategoryCaracteristic(); assertCaracteristicQualitative(result, 6); - persist(Caracteristic.class, ReferentialPersistenceServiceDevImpl.CaracteristicEnum.MacroWasteSizeCategory.name(), result); + persist(Caracteristic.class, TuttiPersistenceDevImpl.CaracteristicEnum.MacroWasteSizeCategory.name(), result); assertCaracteristicSize(result, storage.getMacroWasteSizeCategoryCaracteristic()); } Deleted: 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-02-01 22:27:32 UTC (rev 297) +++ trunk/tutti-persistence-dev/src/main/java/fr/ifremer/tutti/persistence/TuttiPersistenceDevFixtures.java 2013-02-02 13:04:15 UTC (rev 298) @@ -1,391 +0,0 @@ -package fr.ifremer.tutti.persistence; - -/* - * #%L - * Tutti :: Persistence Dev (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% - */ - -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.referential.Caracteristic; -import fr.ifremer.tutti.persistence.entities.referential.CaracteristicQualitativeValue; -import fr.ifremer.tutti.persistence.entities.referential.CaracteristicType; -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 java.util.UUID; - -import static fr.ifremer.tutti.persistence.service.ReferentialPersistenceServiceDevImpl.CaracteristicEnum; - -/** - * TODO - * - * @author tchemit <chemit@codelutin.com> - * @since 0.1 - */ -public class TuttiPersistenceDevFixtures { - - 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) - - cache = ArrayListMultimap.create(); - - Zone z; - z = new Zone(); - z.setId(UUID.randomUUID().toString()); - z.setName("zone1"); - putInCache(Zone.class, z); - - FishingOperationLocation l; - FishingOperationLocation sl; - FishingOperationLocation ssl; - - l = new FishingOperationLocation(); - l.setId(UUID.randomUUID().toString()); - l.setName("zone1 - strata1"); - l.setZone(z); - putInCache(FishingOperationLocation.class, "Strata", l); - - sl = new FishingOperationLocation(); - sl.setId(UUID.randomUUID().toString()); - sl.setName("strat1 - substrata1"); - sl.setParent(l); - putInCache(FishingOperationLocation.class, "SubStrata", sl); - - ssl = new FishingOperationLocation(); - ssl.setId(UUID.randomUUID().toString()); - ssl.setName("substrata1 - localite1"); - ssl.setLocalite(true); - ssl.setParent(sl); - putInCache(FishingOperationLocation.class, "Localite", ssl); - - ssl = new FishingOperationLocation(); - ssl.setId(UUID.randomUUID().toString()); - ssl.setName("substrata1 - localite2"); - ssl.setLocalite(true); - ssl.setParent(sl); - putInCache(FishingOperationLocation.class, "Localite", ssl); - - sl = new FishingOperationLocation(); - sl.setId(UUID.randomUUID().toString()); - sl.setName("strat1 - substrata2"); - sl.setParent(l); - putInCache(FishingOperationLocation.class, "SubStrata", sl); - - ssl = new FishingOperationLocation(); - ssl.setId(UUID.randomUUID().toString()); - ssl.setName("substrata2 - localite1"); - ssl.setLocalite(true); - ssl.setParent(sl); - putInCache(FishingOperationLocation.class, "Localite", ssl); - - ssl = new FishingOperationLocation(); - ssl.setId(UUID.randomUUID().toString()); - ssl.setName("substrata2 - localite2"); - ssl.setLocalite(true); - ssl.setParent(sl); - putInCache(FishingOperationLocation.class, "Localite", ssl); - - l = new FishingOperationLocation(); - l.setId(UUID.randomUUID().toString()); - l.setName("zone1 - strata2"); - l.setZone(z); - putInCache(FishingOperationLocation.class, "Strata", l); - - ssl = new FishingOperationLocation(); - ssl.setId(UUID.randomUUID().toString()); - ssl.setName("strata2 - localite1"); - ssl.setParent(l); - ssl.setLocalite(true); - putInCache(FishingOperationLocation.class, "Localite", ssl); - - ssl = new FishingOperationLocation(); - ssl.setId(UUID.randomUUID().toString()); - ssl.setName("strata2 - localite2"); - ssl.setParent(l); - ssl.setLocalite(true); - putInCache(FishingOperationLocation.class, "Localite", ssl); - - z = new Zone(); - z.setId(UUID.randomUUID().toString()); - z.setName("zone2"); - putInCache(Zone.class, z); - - l = new FishingOperationLocation(); - l.setId(UUID.randomUUID().toString()); - l.setName("zone2 - strata1"); - l.setZone(z); - putInCache(FishingOperationLocation.class, "Strata", l); - - l = new FishingOperationLocation(); - l.setId(UUID.randomUUID().toString()); - l.setName("zone2 - strata2"); - l.setZone(z); - putInCache(FishingOperationLocation.class, "Strata", l); - - Country c; - c = new Country(); - c.setId(UUID.randomUUID().toString()); - c.setName("France"); - putInCache(Country.class, c); - - c = new Country(); - c.setId(UUID.randomUUID().toString()); - c.setName("Espagne"); - putInCache(Country.class, c); - - Vessel v; - - v = new Vessel(); - v.setId(UUID.randomUUID().toString()); - v.setName("THALASSA"); - v.setScientificVessel(true); - v.setRegistrationCode("RegistrationCode1"); - putInCache(Vessel.class, "Scientific", v); - - v = new Vessel(); - v.setId(UUID.randomUUID().toString()); - v.setName("THALASSA-II"); - v.setScientificVessel(true); - v.setRegistrationCode("RegistrationCode2"); - 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-Scientific-1"); - putInCache(Gear.class, "Scientific", g); - - g = new Gear(); - g.setId(UUID.randomUUID().toString()); - 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(); - u.setId(UUID.randomUUID().toString()); - u.setName("Vincent Badts"); - u.setFirstName("Vincent"); - u.setLastName("Badts"); - putInCache(Person.class, u); - - u = new Person(); - u.setId(UUID.randomUUID().toString()); - u.setName("Jean claude Mahet"); - u.setFirstName("Jean claude"); - u.setLastName("Mahet"); - putInCache(Person.class, u); - - u = new Person(); - u.setId(UUID.randomUUID().toString()); - u.setName("Luisa Metral"); - u.setFirstName("Luisa"); - u.setLastName("Metral"); - putInCache(Person.class, u); - - u = new Person(); - u.setId(UUID.randomUUID().toString()); - u.setName("Jean Hervé Bourdeix"); - u.setFirstName("Jean Hervé"); - u.setLastName("Bourdeix"); - putInCache(Person.class, u); - - u = new Person(); - u.setId(UUID.randomUUID().toString()); - u.setName("Ysabelle Cheret"); - u.setFirstName("Ysabelle"); - u.setLastName("Cheret"); - putInCache(Person.class, u); - - u = new Person(); - u.setId(UUID.randomUUID().toString()); - u.setName("Blandine Brisset"); - u.setFirstName("Blandine"); - u.setLastName("Brisset"); - putInCache(Person.class, u); - - Caracteristic ca; - - Species sp; - - sp = new Species(); - sp.setId(UUID.randomUUID().toString()); - sp.setCodeMemo("BAR"); - sp.setGenusSpecies("Bar"); - putInCache(Species.class, sp); - - sp = new Species(); - sp.setId(UUID.randomUUID().toString()); - sp.setCodeMemo("CHIN"); - sp.setGenusSpecies("Chinchard"); - putInCache(Species.class, sp); - - sp = new Species(); - sp.setId(UUID.randomUUID().toString()); - sp.setCodeMemo("FLE"); - sp.setGenusSpecies("Flet"); - putInCache(Species.class, sp); - - sp = new Species(); - sp.setId(UUID.randomUUID().toString()); - sp.setCodeMemo("LIM"); - sp.setGenusSpecies("Limande"); - putInCache(Species.class, sp); - - ca = createQualitativeCaracteristic("MacroWaste", CaracteristicEnum.MacroWasteCategory.name()); - - createCaracteristicQualitativeValue(ca, "Bottle"); - createCaracteristicQualitativeValue(ca, "Sheet"); - createCaracteristicQualitativeValue(ca, "Bag"); - createCaracteristicQualitativeValue(ca, "Caps/ lids"); - createCaracteristicQualitativeValue(ca, "Fishing line (monofilament)"); - createCaracteristicQualitativeValue(ca, "Fishing line (entangled)"); - createCaracteristicQualitativeValue(ca, "Synthetic rope"); - createCaracteristicQualitativeValue(ca, "Cable ties"); - createCaracteristicQualitativeValue(ca, "Strapping band"); - createCaracteristicQualitativeValue(ca, "Crates abd containers"); - createCaracteristicQualitativeValue(ca, "Boots"); - createCaracteristicQualitativeValue(ca, "Balloons"); - createCaracteristicQualitativeValue(ca, "bobbins (fishing)"); - createCaracteristicQualitativeValue(ca, "tyre"); - createCaracteristicQualitativeValue(ca, "glove"); - createCaracteristicQualitativeValue(ca, "diapers"); - createCaracteristicQualitativeValue(ca, "cotton buds"); - createCaracteristicQualitativeValue(ca, "cigarette butts"); - createCaracteristicQualitativeValue(ca, "condoms"); - createCaracteristicQualitativeValue(ca, "syringes"); - createCaracteristicQualitativeValue(ca, "sanitary towels / tampon"); - createCaracteristicQualitativeValue(ca, "jar"); - createCaracteristicQualitativeValue(ca, "piece"); - - ca = createQualitativeCaracteristic("MacroWaste Size category", - CaracteristicEnum.MacroWasteSizeCategory.name()); - createCaracteristicQualitativeValue(ca, "<5*5cm = 25cm²"); - createCaracteristicQualitativeValue(ca, "<10*10cm = 100cm²"); - createCaracteristicQualitativeValue(ca, "<20*20cm = 400cm²"); - createCaracteristicQualitativeValue(ca, "<50*50cm = 2500cm²"); - createCaracteristicQualitativeValue(ca, "<100*100cm = 1m²"); - createCaracteristicQualitativeValue(ca, ">100*100cm = 1m²"); - - ca = createQualitativeCaracteristic("Sorted / Unsorted Category", CaracteristicEnum.SortedUnsortedCategory.name()); - - createCaracteristicQualitativeValue(ca, "Vrac"); - createCaracteristicQualitativeValue(ca, "Hors Vrac"); - - ca = createQualitativeCaracteristic("Species Sex Category", CaracteristicEnum.SexCategory.name()); - - createCaracteristicQualitativeValue(ca, "Male"); - createCaracteristicQualitativeValue(ca, "Femelle"); - createCaracteristicQualitativeValue(ca, "Indéterminé"); - - ca = createQualitativeCaracteristic("Species Maturity Category", CaracteristicEnum.MaturityCategory.name()); - - createCaracteristicQualitativeValue(ca, "0"); - createCaracteristicQualitativeValue(ca, "1"); - createCaracteristicQualitativeValue(ca, "2"); - - ca = createQualitativeCaracteristic("Species Size Category", CaracteristicEnum.SizeCategory.name()); - - createCaracteristicQualitativeValue(ca, "Petit"); - createCaracteristicQualitativeValue(ca, "Gros"); - } - - protected void createCaracteristicQualitativeValue(Caracteristic ca, String name) { - CaracteristicQualitativeValue cqv = new CaracteristicQualitativeValue(); - cqv.setId(UUID.randomUUID().toString()); - cqv.setName(name); - ca.addQualitativeValue(cqv); - putInCache(CaracteristicQualitativeValue.class, name, cqv); - } - - protected Caracteristic createQualitativeCaracteristic(String name, String category) { - Caracteristic ca = new Caracteristic(); - ca.setId(UUID.randomUUID().toString()); - ca.setName(name); - ca.setCategory(category); - ca.setCaracteristicType(CaracteristicType.QUALITATIVE); - ca.setQualitativeValue(Lists.<CaracteristicQualitativeValue>newArrayList()); - putInCache(Caracteristic.class, category, ca); - return ca; - } - - protected Caracteristic createNumberCaracteristic(String name, String category) { - Caracteristic ca = new Caracteristic(); - ca.setId(UUID.randomUUID().toString()); - ca.setName(name); - ca.setCategory(category); - ca.setCaracteristicType(CaracteristicType.NUMBER); - putInCache(Caracteristic.class, category, ca); - return ca; - } - - public <B extends IdAware> List<B> getData(String entityType) { - List<B> result = (List<B>) cache.get(entityType); - return result; - } -} Deleted: 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-02-01 22:27:32 UTC (rev 297) +++ trunk/tutti-persistence-dev/src/main/java/fr/ifremer/tutti/persistence/TuttiPersistenceDevImpl.java 2013-02-02 13:04:15 UTC (rev 298) @@ -1,1056 +0,0 @@ -package fr.ifremer.tutti.persistence; - -/* - * #%L - * Tutti :: Persistence Dev (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% - */ - - -import com.google.common.base.Function; -import com.google.common.base.Preconditions; -import com.google.common.base.Predicate; -import com.google.common.base.Predicates; -import com.google.common.collect.ArrayListMultimap; -import com.google.common.collect.Iterables; -import com.google.common.collect.Lists; -import com.google.common.collect.Maps; -import com.google.common.collect.Sets; -import fr.ifremer.tutti.persistence.config.TuttiPersistenceDevConfig; -import fr.ifremer.tutti.persistence.entities.AbstractTuttiEntity; -import fr.ifremer.tutti.persistence.entities.IdAware; -import fr.ifremer.tutti.persistence.entities.TuttiEntities; -import fr.ifremer.tutti.persistence.entities.data.AccidentalBatch; -import fr.ifremer.tutti.persistence.entities.data.BenthosBatch; -import fr.ifremer.tutti.persistence.entities.data.CatchBatch; -import fr.ifremer.tutti.persistence.entities.data.Cruise; -import fr.ifremer.tutti.persistence.entities.data.FishingOperation; -import fr.ifremer.tutti.persistence.entities.data.FishingOperationAware; -import fr.ifremer.tutti.persistence.entities.data.MacroWasteBatch; -import fr.ifremer.tutti.persistence.entities.data.PlanktonBatch; -import fr.ifremer.tutti.persistence.entities.data.Program; -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.Caracteristic; -import fr.ifremer.tutti.persistence.entities.referential.CaracteristicQualitativeValue; -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 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; -import org.apache.commons.logging.LogFactory; -import org.nuiton.util.beans.Binder; -import org.nuiton.util.beans.BinderFactory; - -import java.io.File; -import java.io.FileInputStream; -import java.io.FileOutputStream; -import java.io.IOException; -import java.io.ObjectInputStream; -import java.io.ObjectOutputStream; -import java.util.List; -import java.util.Map; -import java.util.Set; -import java.util.UUID; - -/** - * Persistence service implementation for dev purpose (no real db). - * - * @author tchemit <chemit@codelutin.com> - * @since 0.1 - */ -public class TuttiPersistenceDevImpl implements TuttiPersistence { - - /** Logger. */ - private static final Log log = - LogFactory.getLog(TuttiPersistenceDevImpl.class); - - 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.CatchBatch", - "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.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.Vessel#Scientific", - "fr.ifremer.tutti.persistence.entities.referential.Vessel#Fishing", - "fr.ifremer.tutti.persistence.entities.referential.Zone" - ); - - static { - for (ReferentialPersistenceServiceDevImpl.CaracteristicEnum caracteristicEnum : - ReferentialPersistenceServiceDevImpl.CaracteristicEnum.values()) { - FILE_KEYS.add(getKey(Caracteristic.class, caracteristicEnum.name())); - } - - if (log.isInfoEnabled()) { - log.info("Found " + FILE_KEYS.size() + " files."); - } - } - - public static final String SKIP_FIXTURES_OPTION = "LoadFixtures"; - - public static final Function<TuttiProtocol, String> GET_PROTOCOL_NAME = new Function<TuttiProtocol, String>() { - - @Override - public String apply(TuttiProtocol input) { - return input.getName(); - } - }; - - /** - * Persistence config. - * - * @since 0.1 - */ - protected final TuttiPersistenceDevConfig config; - - /** - * Cache of data. - * - * @since 0.1 - */ - protected final ArrayListMultimap<String, IdAware> cache = ArrayListMultimap.create(); - - /** - * Cache of binder. - * - * @since 0.2 - */ - 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; - } - - //------------------------------------------------------------------------// - //-- Technical methods --// - //------------------------------------------------------------------------// - - @Override - public String getImplementationName() { - return "Persistence Dev implementation"; - } - - @Override - public void open() throws IOException { - - Preconditions.checkNotNull(config, " No config property setted"); - - try { - FileUtils.forceMkdir(this.config.getStorageDirectory()); - } catch (IOException e) { - throw new RuntimeException("Could not create directory", e); - } - - cache.clear(); - - boolean loadFixtures = - config.getConfig().getOptionAsBoolean(SKIP_FIXTURES_OPTION); - if (!loadFixtures) { - - 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()) { - log.info("Close persistence driver " + getImplementationName()); - } - binderCache.clear(); - - for (String entityType : cache.keySet()) { - persistToFile(entityType); - } - } - - //------------------------------------------------------------------------// - //-- Referential methods --// - //------------------------------------------------------------------------// - - @Override - public List<Vessel> getAllScientificVessel() { - return referentialPersistenceService.getAllScientificVessel(); - } - - @Override - public List<Zone> getAllProgramZone() { - return referentialPersistenceService.getAllProgramZone(); - } - - @Override - public List<Country> getAllCountry() { - return referentialPersistenceService.getAllCountry(); - } - - @Override - public List<FishingOperationLocation> getAllFishingOperationStrata(String zoneId) { - return referentialPersistenceService.getAllFishingOperationStrata(zoneId); - } - - @Override - public List<FishingOperationLocation> getAllFishingOperationSubStrata(String zoneId, - String strataId) { - return referentialPersistenceService.getAllFishingOperationSubStrata( - zoneId, strataId); - } - - @Override - public List<FishingOperationLocation> getAllFishingOperationLocation(String zoneId, - String strataId, - String subStrataId) { - return referentialPersistenceService.getAllFishingOperationLocation( - zoneId, strataId, subStrataId); - } - - @Override - public List<Vessel> getAllFishingVessel() { - return referentialPersistenceService.getAllFishingVessel(); - } - - public Vessel getVessel(String vesselCode) { - return referentialPersistenceService.getVessel(vesselCode); - } - - @Override - public boolean isSortedQualitativeValue(CaracteristicQualitativeValue value) { - return referentialPersistenceService.isSortedQualitativeValue(value); - } - - @Override - public List<Species> getAllSpecies() { - return referentialPersistenceService.getAllSpecies(); - } - - @Override - public Species getSpecies(String speciesId) { - return referentialPersistenceService.getSpecies(speciesId); - } - - @Override - public List<Caracteristic> getAllCaracteristic() { - return referentialPersistenceService.getAllCaracteristic(); - } - - @Override - public Caracteristic getSizeCategoryCaracteristic() { - return referentialPersistenceService.getSizeCategoryCaracteristic(); - } - - @Override - public Caracteristic getSexCaracteristic() { - return referentialPersistenceService.getSexCaracteristic(); - } - - @Override - public Caracteristic getSortedUnsortedCaracteristic() { - return referentialPersistenceService.getSortedUnsortedCaracteristic(); - } - - @Override - public Caracteristic getMaturityCaracteristic() { - return referentialPersistenceService.getMaturityCaracteristic(); - } - - @Override - public Caracteristic getMacroWasteCategoryCaracteristic() { - return referentialPersistenceService.getMacroWasteCategoryCaracteristic(); - } - - @Override - public Caracteristic getMacroWasteSizeCategoryCaracteristic() { - 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(); - } - - @Override - public Person getPerson(Integer personId) { - return referentialPersistenceService.getPerson(personId); - } - - - //------------------------------------------------------------------------// - //-- Program methods --// - //------------------------------------------------------------------------// - - @Override - public List<Program> getAllProgram() { - List<Program> result = getDataInNewList(Program.class.getName()); - return result; - } - - @Override - public Program getProgram(String id) { - Program result = getBean(Program.class.getName(), id); - return result; - } - - @Override - public Program createProgram(Program bean) { - Program result = create(Program.class.getName(), bean); - return result; - } - - @Override - public Program saveProgram(Program bean) { - Program result = save(Program.class.getName(), bean); - return result; - } - - //------------------------------------------------------------------------// - //-- Cruise methods --// - //------------------------------------------------------------------------// - - @Override - public List<Cruise> getAllCruise(final String programId) { - List<Cruise> result = getFilteredDataList(Cruise.class.getName(), new Predicate<Cruise>() { - @Override - public boolean apply(Cruise input) { - return programId.equals(input.getProgram().getId()); - } - }); - return result; - } - - @Override - public Cruise getCruise(String id) { - Cruise result = getBean(Cruise.class.getName(), id); - return result; - } - - @Override - public Cruise createCruise(Cruise bean) { - Cruise result = create(Cruise.class.getName(), bean); - return result; - } - - @Override - public Cruise saveCruise(Cruise bean) { - Cruise result = save(Cruise.class.getName(), bean); - return result; - } - - //------------------------------------------------------------------------// - //-- Protocol methods --// - //------------------------------------------------------------------------// - - @Override - public List<String> getAllProtocolNames() { - throw new IllegalStateException("method 'getAllProtocolNames' not implemented"); - } - - @Override - public List<TuttiProtocol> getAllProtocol() { - throw new IllegalStateException("method 'getAllProtocol' not implemented"); - } - - @Override - public boolean isProtocolExist(String id) { - throw new IllegalStateException("method 'isProtocolExist' not implemented"); - } - - @Override - public TuttiProtocol getProtocol(String id) { - throw new IllegalStateException("method 'getProtocol' not implemented"); - } - - @Override - public TuttiProtocol createProtocol(TuttiProtocol bean) { - throw new IllegalStateException("method 'createProtocol' not implemented"); - } - - @Override - public TuttiProtocol saveProtocol(TuttiProtocol bean) { - throw new IllegalStateException("method 'saveProtocol' not implemented"); - } - - @Override - public void deleteProtocol(String id) { - throw new IllegalStateException("method 'deleteProtocol' not implemented"); - } - - //------------------------------------------------------------------------// - //-- FishingOperation methods --// - //------------------------------------------------------------------------// - - @Override - public List<FishingOperation> getAllFishingOperation(final String cruiseId) { - List<FishingOperation> result = getFilteredDataList(FishingOperation.class.getName(), new Predicate<FishingOperation>() { - @Override - public boolean apply(FishingOperation input) { - return cruiseId.equals(input.getCruise().getId()); - } - }); - return result; - } - - @Override - public FishingOperation getFishingOperation(String 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.getName(), bean); - return result; - } - - @Override - public FishingOperation saveFishingOperation(FishingOperation bean) { - FishingOperation result = save(FishingOperation.class.getName(), bean); - return result; - } - - //------------------------------------------------------------------------// - //-- CatchBatch methods --// - //------------------------------------------------------------------------// - - @Override - public CatchBatch getCatchBatchFromFishingOperation(String id) { - List<CatchBatch> data = getData(CatchBatch.class.getName()); - CatchBatch result = null; - for (CatchBatch catchBatch : data) { - if (id.equals(catchBatch.getFishingOperation().getId())) { - result = catchBatch; - break; - } - } - return result; - } - - @Override - public CatchBatch createCatchBatch(CatchBatch bean) { - CatchBatch result = create(CatchBatch.class.getName(), bean); - return result; - } - - @Override - public CatchBatch saveCatchBatch(CatchBatch bean) { - CatchBatch result = save(CatchBatch.class.getName(), bean); - return result; - } - - //------------------------------------------------------------------------// - //-- Species Batch methods --// - //------------------------------------------------------------------------// - - @Override - public List<SpeciesBatch> getAllRootSpeciesBatch(String fishingOperationId) { - List<SpeciesBatch> result = getAllTraitFilterBatches( - SpeciesBatch.class.getName(), fishingOperationId, new Predicate<SpeciesBatch>() { - - @Override - public boolean apply(SpeciesBatch input) { - return input.getParentBatch() == null; - } - }); - return result; - } - - @Override - public List<SpeciesBatch> getAllSpeciesBatch(final String fishingOperationId) { - List<SpeciesBatch> result = getAllTraitFilterBatches( - SpeciesBatch.class.getName(), fishingOperationId, null); - return result; - } - - @Override - public SpeciesBatch getSpeciesBatch(String id) { - SpeciesBatch result = getBean(SpeciesBatch.class.getName(), id); - return result; - } - - @Override - public SpeciesBatch createSpeciesBatch(SpeciesBatch bean, - String parentBatchId) { - - boolean withParent = parentBatchId != null; - - SpeciesBatch result = create(SpeciesBatch.class.getName(), bean, !withParent); - - if (withParent) { - - // link to parent - SpeciesBatch parentBatch = getSpeciesBatch(parentBatchId); - result.setParentBatch(parentBatch); - - // add to parent childs - List<SpeciesBatch> childBatchs = parentBatch.getChildBatchs(); - if (childBatchs == null) { - childBatchs = Lists.newArrayList(); - parentBatch.setChildBatchs(childBatchs); - } - childBatchs.add(result); - - // now persist species batches - persistToFile(SpeciesBatch.class.getName()); - } - return result; - } - - @Override - public SpeciesBatch saveSpeciesBatch(SpeciesBatch bean) { - SpeciesBatch result = save(SpeciesBatch.class.getName(), bean); - return result; - } - - @Override - public void deleteSpeciesBatch(String 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.getName(), id); - Preconditions.checkNotNull( - bean, "SpeciesBatch with id: " + id + " does not exist"); - - Set<SpeciesBatch> collected = Sets.newHashSet(); - collectChilds(bean, collected); - for (SpeciesBatch toDelete : collected) { - cache.remove(SpeciesBatch.class, toDelete); - } - bean.setChildBatchs(null); - persistToFile(SpeciesBatch.class.getName()); - } - - protected void collectChilds(SpeciesBatch bean, Set<SpeciesBatch> collected) { - if (!bean.isChildBatchsEmpty()) { - for (SpeciesBatch batch : bean.getChildBatchs()) { - collected.add(batch); - collectChilds(batch, collected); - } - } - } - - @Override - public List<SpeciesBatchFrequency> getAllSpeciesBatchFrequency(final String speciesBatchId) { - List<SpeciesBatchFrequency> result = getFilteredDataList(SpeciesBatchFrequency.class.getName(), new Predicate<SpeciesBatchFrequency>() { - @Override - public boolean apply(SpeciesBatchFrequency input) { - return speciesBatchId.equals(input.getBatch().getId()); - } - }); - return result; - } - - @Override - public List<SpeciesBatchFrequency> saveSpeciesBatchFrequency(String speciesBatchId, - List<SpeciesBatchFrequency> frequencies) { - - // get existing data - List<SpeciesBatchFrequency> existingData = - getAllSpeciesBatchFrequency(speciesBatchId); - - List<SpeciesBatchFrequency> result = - persistList(SpeciesBatchFrequency.class.getName(), - existingData, - frequencies); - return result; - } - - //------------------------------------------------------------------------// - //-- Benthos Batch methods --// - //------------------------------------------------------------------------// - - @Override - public List<BenthosBatch> getAllBenthosBatch(String fishingOperationId) { - List<BenthosBatch> result = getAllTraitFilterBatches( - BenthosBatch.class.getName(), fishingOperationId, null); - return result; - } - - @Override - public BenthosBatch getBenthosBatch(String id) { - BenthosBatch result = getBean(BenthosBatch.class.getName(), id); - return result; - } - - @Override - public BenthosBatch createBenthosBatch(BenthosBatch bean) { - BenthosBatch result = create(BenthosBatch.class.getName(), bean); - return result; - } - - @Override - public BenthosBatch saveBenthosBatch(BenthosBatch bean) { - BenthosBatch result = save(BenthosBatch.class.getName(), bean); - return result; - } - - @Override - public void deleteBenthosBatch(String id) { - remove(BenthosBatch.class.getName(), id); - } - - //------------------------------------------------------------------------// - //-- Plancton Batch methods --// - //------------------------------------------------------------------------// - - @Override - public List<PlanktonBatch> getAllPlanktonBatch(String fishingOperationId) { - List<PlanktonBatch> result = getAllTraitFilterBatches( - PlanktonBatch.class.getName(), fishingOperationId, null); - return result; - } - - @Override - public PlanktonBatch getPlanktonBatch(String id) { - PlanktonBatch result = getBean(PlanktonBatch.class.getName(), id); - return result; - } - - @Override - public PlanktonBatch createPlanktonBatch(PlanktonBatch bean) { - PlanktonBatch result = create(PlanktonBatch.class.getName(), bean); - return result; - } - - @Override - public PlanktonBatch savePlanktonBatch(PlanktonBatch bean) { - PlanktonBatch result = save(PlanktonBatch.class.getName(), bean); - return result; - } - - @Override - public void deletePlanktonBatch(String id) { - remove(PlanktonBatch.class.getName(), id); - } - - //------------------------------------------------------------------------// - //-- Macrodechet Batch methods --// - //------------------------------------------------------------------------// - - @Override - public List<MacroWasteBatch> getAllMacroWasteBatch(String fishingOperationId) { - List<MacroWasteBatch> result = getAllTraitFilterBatches( - MacroWasteBatch.class.getName(), fishingOperationId, null); - return result; - } - - @Override - public MacroWasteBatch getMacroWasteBatch(String id) { - MacroWasteBatch result = getBean(MacroWasteBatch.class.getName(), id); - return result; - } - - @Override - public MacroWasteBatch createMacroWasteBatch(MacroWasteBatch bean) { - MacroWasteBatch result = create(MacroWasteBatch.class.getName(), bean); - return result; - } - - @Override - public MacroWasteBatch saveMacroWasteBatch(MacroWasteBatch bean) { - MacroWasteBatch result = save(MacroWasteBatch.class.getName(), bean); - return result; - } - - @Override - public void deleteMacroWasteBatch(String id) { - remove(MacroWasteBatch.class.getName(), id); - } - - //------------------------------------------------------------------------// - //-- Accidental Batch methods --// - //------------------------------------------------------------------------// - - @Override - public List<AccidentalBatch> getAllAccidentalBatch(String fishingOperationId) { - List<AccidentalBatch> result = getAllTraitFilterBatches( - AccidentalBatch.class.getName(), fishingOperationId, null); - return result; - } - - @Override - public AccidentalBatch getAccidentalBatch(String id) { - AccidentalBatch result = getBean(AccidentalBatch.class.getName(), id); - return result; - } - - @Override - public AccidentalBatch createAccidentalBatch(AccidentalBatch bean) { - AccidentalBatch result = create(AccidentalBatch.class.getName(), bean); - return result; - } - - @Override - public AccidentalBatch saveAccidentalBatch(AccidentalBatch bean) { - AccidentalBatch result = save(AccidentalBatch.class.getName(), bean); - return result; - } - - @Override - public void deleteAccidentalBatch(String id) { - remove(AccidentalBatch.class.getName(), id); - } - - //------------------------------------------------------------------------// - //-- Internal methods --// - //------------------------------------------------------------------------// - - 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) { - - Class<B> binderType = getType(type); - - result = BinderFactory.newBinder(binderType); - binderCache.put(type, result); - } - return result; - } - - protected <B extends IdAware> void persist(String beanType, - B source, - B target, - boolean synchFile) { - - getBinder(beanType).copyExcluding(source, target, AbstractTuttiEntity.PROPERTY_ID); - if (source.getId() == null) { - target.setId(UUID.randomUUID().toString()); - } - if (!cache.containsEntry(beanType, target)) { - cache.put(beanType, target); - } - if (synchFile) { - persistToFile(beanType); - } - } - - protected <B extends IdAware> List<B> persistList(String beanType, - List<B> existingData, - List<B> newData) { - - Map<B, B> toPersist = Maps.newHashMap(); - - // mark all old entry to be dettach - TuttiEntities.fillEntries(toPersist, - existingData, - TuttiEntities.<B, B>newConstantFunction(null)); - - // index them by id - Map<String, B> existingById = TuttiEntities.splitById(existingData); - - for (B source : newData) { - - B target; - - if (TuttiEntities.isNew(source)) { - - // must create it - Class<B> type = getType(beanType); - target = TuttiEntities.newEntity(type); - } else { - - // get existing data - target = existingById.get(source.getId()); - } - - // store it to be persist in one time - toPersist.put(target, source); - } - - // persist (entry with a value) and dettach (entry with no value) - - List<B> result = Lists.newArrayList(); - - for (Map.Entry<B, B> entry : toPersist.entrySet()) { - B source = entry.getValue(); - B target = entry.getKey(); - if (source == null) { - - // dettach entity - cache.remove(beanType, target); - } else { - - // persist entity - persist(beanType, source, target, false); - - // store it back in result - result.add(target); - } - } - persistToFile(beanType); - - return result; - } - - protected <B extends IdAware> List<B> loadEntities(String entityType, - TuttiPersistenceDevFixtures fix) throws IOException { - File storageFile = getStorageFile(entityType); - - List<B> result; - - if (storageFile.exists()) { - if (log.isDebugEnabled()) { - log.debug("Load data from file: " + storageFile); - } - - ObjectInputStream oos = - new ObjectInputStream(new FileInputStream(storageFile)); - try { - - result = (List<B>) oos.readObject(); - oos.close(); - } catch (ClassNotFoundException e) { - throw new RuntimeException("Could not find a class ", e); - } finally { - IOUtils.closeQuietly(oos); - } - - cache.putAll(entityType, result); - } else { - - result = fix.getData(entityType); - - cache.putAll(entityType, result); - - // persist it right now - persistToFile(entityType); - } - - return result; - } - - 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); - - List<B> result; - - if (storageFile.exists()) { - if (log.isDebugEnabled()) { - log.debug("Load data from file: " + storageFile); - } - - ObjectInputStream oos = - new ObjectInputStream(new FileInputStream(storageFile)); - try { - - result = (List<B>) oos.readObject(); - oos.close(); - } catch (ClassNotFoundException e) { - throw new RuntimeException("Could not find a class ", e); - } finally { - IOUtils.closeQuietly(oos); - } - - } else { - result = defaultList; - - // persist it right now - persistToFile(entityType); - } - - cache.putAll(entityType, result); - return result; - } - - protected <B> File getStorageFile(String entityType) { - File storageDirectory = this.config.getStorageDirectory(); - File result = new File(storageDirectory, entityType + ".ser"); - return result; - } - - public <B extends IdAware> void persistToFile(String entityType) { - - List<B> entities = getDataInNewList(entityType); - File storageFile = getStorageFile(entityType); - - if (log.isDebugEnabled()) { - log.debug("Persist storage to file: " + storageFile); - } - ObjectOutputStream oos = null; - try { - oos = new ObjectOutputStream(new FileOutputStream(storageFile)); - oos.writeObject(entities); - - oos.close(); - } catch (IOException e) { - throw new RuntimeException( - "Could not persist to file: " + storageFile, e); - } finally { - if (oos != null) { - IOUtils.closeQuietly(oos); - } - } - } - - 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, E> List<E> getTransformedDataList(String entityType, Function<B, E> function) { - List<B> result = getData(entityType); - return Lists.newArrayList(Iterables.transform(result, function)); - } - - protected <B extends IdAware> List<B> getFilteredDataList(String entityType, Predicate<B> predicate) { - List<B> result = getData(entityType); - return Lists.newArrayList(Iterables.filter(result, predicate)); - } - - protected <B extends FishingOperationAware> List<B> getAllTraitFilterBatches( - String beanType, - String traitId, - Predicate<B> extraPredicate) { - Predicate<B> predicate = TuttiEntities.newTraitIdPredicate(traitId); - if (extraPredicate != null) { - predicate = Predicates.and(predicate, extraPredicate); - } - List<B> result = getFilteredDataList(beanType, predicate); - return result; - } - - protected <B extends IdAware> B create(String type, B bean) { - return create(type, bean, true); - } - - 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(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"); - B result = getBean(type, id); - Preconditions.checkNotNull( - result, "Can't save a not persisted bean with id: " + id); - persist(type, bean, result, true); - return result; - } - - 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! - if (bean == null) { - if (log.isWarnEnabled()) { - log.warn("No bean with id: " + id); - } - } -// Preconditions.checkNotNull(bean, "Can't delete a null bean"); - cache.remove(type, bean); - persistToFile(type); - } - - protected <B extends IdAware> B getBean(String type, String id) { - List<B> data = getData(type); - B result = TuttiEntities.findById(data, id); - return result; - } - -} Deleted: 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 2013-02-01 22:27:32 UTC (rev 297) +++ trunk/tutti-persistence-dev/src/main/java/fr/ifremer/tutti/persistence/service/ReferentialPersistenceServiceDevImpl.java 2013-02-02 13:04:15 UTC (rev 298) @@ -1,233 +0,0 @@ -package fr.ifremer.tutti.persistence.service; - -/* - * #%L - * Tutti :: Persistence Dev (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 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.CaracteristicQualitativeValue; -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 { - All, - 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 Species getSpecies(String id) { - Species result = getBean(Species.class.getName(), id); - return result; - } - - @Override - public List<Caracteristic> getAllCaracteristic() { - List<Caracteristic> result = getAllCaracteristic(CaracteristicEnum.All); - 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<FishingOperationLocation> getAllFishingOperationStrata(String zoneId) { - List<FishingOperationLocation> result = getDataInNewList(getKey(FishingOperationLocation.class, "Strata")); - return result; - } - - @Override - public List<FishingOperationLocation> getAllFishingOperationSubStrata(String zoneId, String strataId) { - List<FishingOperationLocation> result = getDataInNewList(getKey(FishingOperationLocation.class, "SubStrata")); - return result; - } - - @Override - public List<FishingOperationLocation> getAllFishingOperationLocation(String zoneId, String strataId, String subStrataId) { - List<FishingOperationLocation> result = getDataInNewList(getKey(FishingOperationLocation.class, "Localite")); - 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 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()); - } - - @Override - public Gear getGear(Integer gearCode) { - return getBean(Gear.class.getName(), gearCode.toString()); - } - - @Override - public boolean isSortedQualitativeValue(CaracteristicQualitativeValue value) { - return value != null && value.getId().equals("311"); - } - - @Override - public Caracteristic getCaracteristic(Integer pmfmId) { - throw new RuntimeException("getCaracteristic() not supports is only support in tutti-persistence-adagio"); - } - - 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 = getDataInNewList(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; - } - - -} Deleted: 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-02-01 22:27:32 UTC (rev 297) +++ trunk/tutti-persistence-dev/src/test/java/fr/ifremer/tutti/persistence/TuttiPersistenceDevImplTest.java 2013-02-02 13:04:15 UTC (rev 298) @@ -1,239 +0,0 @@ -package fr.ifremer.tutti.persistence; - -/* - * #%L - * Tutti :: Persistence Dev (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% - */ - -import com.google.common.collect.Lists; -import fr.ifremer.tutti.persistence.config.TuttiPersistenceDevConfig; -import fr.ifremer.tutti.persistence.entities.data.Program; -import fr.ifremer.tutti.persistence.entities.data.SpeciesBatch; -import fr.ifremer.tutti.persistence.entities.data.SpeciesBatchFrequency; -import fr.ifremer.tutti.persistence.entities.referential.Country; -import org.apache.commons.lang3.StringUtils; -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.Rule; -import org.junit.Test; -import org.junit.rules.TestName; -import org.nuiton.util.ApplicationConfig; - -import java.io.File; -import java.io.IOException; -import java.util.List; - -/** - * @author tchemit <chemit@codelutin.com> - * @since 0.1 - */ -public class TuttiPersistenceDevImplTest { - - /** Logger. */ - private static final Log log = - LogFactory.getLog(TuttiPersistenceDevImplTest.class); - - /** A time-stamp, allow to make multiple build and keep the tests data. */ - public static final String TIMESTAMP = String.valueOf(System.nanoTime()); - - @Rule - public final TestName name = new TestName(); - - protected TuttiPersistenceDevConfig config; - - protected TuttiPersistence persistence; - - @Before - public void setUp() throws Exception { - - // get test directory - File testBasedir = getTestSpecificDirectory( - getClass(), - name.getMethodName(), - ""); - - ApplicationConfig applicationConfig = new ApplicationConfig(); - applicationConfig.setDefaultOption("tutti.data.directory", - testBasedir.getAbsolutePath()); - config = new TuttiPersistenceDevConfig(applicationConfig); - persistence = new TuttiPersistenceDevImpl(config); - } - - @After - public void tearDown() throws IOException { - if (persistence != null) { - persistence.close(); - } - } - - @Test - public void open() throws Exception { - - File storageDirectory = config.getStorageDirectory(); - Assert.assertNotNull(storageDirectory); - Assert.assertFalse(storageDirectory.exists()); - persistence.open(); - Assert.assertTrue(storageDirectory.exists()); - - TuttiPersistenceDevFixtures fixtures = new TuttiPersistenceDevFixtures(); - Assert.assertEquals(fixtures.getData(Country.class.getName()).size(), - persistence.getAllCountry().size()); - } - - @Test - public void close() throws Exception { - - File storageDirectory = config.getStorageDirectory(); - Assert.assertNotNull(storageDirectory); - Assert.assertFalse(storageDirectory.exists()); - - persistence.open(); - - TuttiPersistenceDevFixtures fixtures = new TuttiPersistenceDevFixtures(); - Assert.assertEquals(fixtures.getData(Country.class.getName()).size(), - persistence.getAllCountry().size()); - - persistence.close(); - Assert.assertTrue(storageDirectory.exists()); - Assert.assertEquals(fixtures.getData(Country.class.getName()).size(), - persistence.getAllCountry().size()); - } - - @Test - public void reopen() throws Exception { - - File storageDirectory = config.getStorageDirectory(); - Assert.assertNotNull(storageDirectory); - Assert.assertFalse(storageDirectory.exists()); - - persistence.open(); - Assert.assertTrue(storageDirectory.exists()); - - int size = persistence.getAllProgram().size(); - - Program s = new Program(); - s.setId("46de4ba5-3be6-4ab6-9f39-586b8e491fda"); - s.setName("Serie 3"); - s.setZone(persistence.getAllProgramZone().get(0)); - - persistence.createProgram(s); - - persistence.close(); - Assert.assertTrue(storageDirectory.exists()); - - persistence.open(); - - Assert.assertEquals(size + 1, persistence.getAllProgram().size()); - } - - @Test - public void persistList() throws Exception { - - persistence.open(); - - SpeciesBatch batch = persistence.createSpeciesBatch(new SpeciesBatch(), null); - String batchId = batch.getId(); - - SpeciesBatchFrequency f; - - f = new SpeciesBatchFrequency(); - f.setBatch(batch); - f.setLengthStep(10f); - f.setNumber(10); - - List<SpeciesBatchFrequency> frequencyList = Lists.newArrayList(); - frequencyList.add(f); - - Assert.assertEquals(0, persistence.getAllSpeciesBatchFrequency(batchId).size()); - - persistence.saveSpeciesBatchFrequency(batchId, frequencyList); - - frequencyList = persistence.getAllSpeciesBatchFrequency(batchId); - Assert.assertEquals(1, frequencyList.size()); - - f = frequencyList.get(0); - Assert.assertEquals(10, f.getNumber(), 0); - Assert.assertEquals(10f, f.getLengthStep(), 0); - Assert.assertNull(f.getWeight()); - - f.setLengthStep(12f); - f.setNumber(20); - f.setWeight(10f); - - f = new SpeciesBatchFrequency(); - f.setBatch(batch); - f.setLengthStep(30f); - f.setNumber(3); - f.setWeight(3f); - - frequencyList.add(f); - - persistence.saveSpeciesBatchFrequency(batchId, frequencyList); - frequencyList = persistence.getAllSpeciesBatchFrequency(batchId); - Assert.assertEquals(2, frequencyList.size()); - - f = frequencyList.get(0); - Assert.assertEquals(12f, f.getLengthStep(), 0); - Assert.assertEquals(20, f.getNumber(), 0); - Assert.assertEquals(10f, f.getWeight(), 0); - - f = frequencyList.get(1); - Assert.assertEquals(30f, f.getLengthStep(), 0); - Assert.assertEquals(3, f.getNumber(), 0); - Assert.assertEquals(3f, f.getWeight(), 0); - - frequencyList.clear(); - persistence.saveSpeciesBatchFrequency(batchId, frequencyList); - Assert.assertEquals(0, persistence.getAllSpeciesBatchFrequency(batchId).size()); - } - - public static File getTestSpecificDirectory(Class<?> testClassName, - String methodName, - String classifier) { - // 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 = testClassName.getName() - + File.separator // a directory with the test class name - + methodName; // a sub-directory with the method name - - if (StringUtils.isNotBlank(classifier)) { - dataBasePath += classifier; - } - dataBasePath += '_' - + TIMESTAMP; // and a timestamp - File databaseFile = new File(tempDirFile, dataBasePath); - return databaseFile; - } -} Modified: trunk/tutti-service/pom.xml =================================================================== --- trunk/tutti-service/pom.xml 2013-02-01 22:27:32 UTC (rev 297) +++ trunk/tutti-service/pom.xml 2013-02-02 13:04:15 UTC (rev 298) @@ -50,12 +50,6 @@ <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> 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-02-01 22:27:32 UTC (rev 297) +++ trunk/tutti-service/src/main/java/fr/ifremer/tutti/service/PersistenceService.java 2013-02-02 13:04:15 UTC (rev 298) @@ -27,7 +27,6 @@ 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.CatchBatch; @@ -56,6 +55,7 @@ import org.apache.commons.logging.Log; import org.apache.commons.logging.LogFactory; +import java.io.File; import java.io.IOException; import java.util.List; @@ -76,12 +76,7 @@ public void setServiceContext(TuttiServiceContext context) { super.setServiceContext(context); - try { - open(); - } catch (IOException e) { - throw new TuttiServiceTechnicalException( - "Could init persistence storage", e); - } + init(); } //------------------------------------------------------------------------// @@ -94,7 +89,7 @@ } @Override - public void open() throws IOException { + public void init() { if (log.isInfoEnabled()) { log.info("Open persistence driver " + getImplementationName()); @@ -116,28 +111,27 @@ } } else { - // still on dev drvier + // still on dev driver - TuttiPersistenceDevConfig devDriverConfig = - serviceConfig.getDevDriverConfig(); + File storageDirectory = TuttiPersistenceDevImpl.getStorageDirectory(serviceConfig.getApplicationConfig()); 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("Will still use dev dataStorage in " + storageDirectory); log.warn(""); log.warn("--------------------------------------------------------------------"); } - driver = new TuttiPersistenceDevImpl(devDriverConfig) { + driver = new TuttiPersistenceDevImpl(serviceConfig.getApplicationConfig()) { ProtocolPersistenceService protocolPersistenceService = new ProtocolPersistenceServiceImpl(); @Override - public void open() throws IOException { - super.open(); + public void init() { + super.init(); protocolPersistenceService.init(); } @@ -182,7 +176,7 @@ log.info("Will open persistence driver " + driver.getImplementationName()); } - driver.open(); + driver.init(); } } @@ -310,6 +304,11 @@ return driver.getPerson(personId); } + @Override + public Gear getGear(Integer gearCode) { + return driver.getGear(gearCode); + } + //------------------------------------------------------------------------// //-- Program methods --// //------------------------------------------------------------------------// 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-02-01 22:27:32 UTC (rev 297) +++ trunk/tutti-service/src/main/java/fr/ifremer/tutti/service/config/TuttiServiceConfig.java 2013-02-02 13:04:15 UTC (rev 298) @@ -26,7 +26,6 @@ import com.google.common.base.Preconditions; import fr.ifremer.tutti.persistence.config.TuttiPersistenceAdagioConfig; -import fr.ifremer.tutti.persistence.config.TuttiPersistenceDevConfig; import org.apache.commons.io.FileUtils; import org.apache.commons.logging.Log; import org.apache.commons.logging.LogFactory; @@ -51,16 +50,12 @@ /** Delegate application config object containing configuration. */ protected final ApplicationConfig applicationConfig; - protected final TuttiPersistenceDevConfig devDriverConfig; - protected final TuttiPersistenceAdagioConfig adagioDriverConfig; public TuttiServiceConfig(ApplicationConfig applicationConfig) { this.applicationConfig = applicationConfig; - devDriverConfig = new TuttiPersistenceDevConfig(applicationConfig); - adagioDriverConfig = new TuttiPersistenceAdagioConfig(applicationConfig); } @@ -68,10 +63,6 @@ return applicationConfig; } - public TuttiPersistenceDevConfig getDevDriverConfig() { - return devDriverConfig; - } - public TuttiPersistenceAdagioConfig getAdagioDriverConfig() { return adagioDriverConfig; } Modified: trunk/tutti-ui-swing/pom.xml =================================================================== --- trunk/tutti-ui-swing/pom.xml 2013-02-01 22:27:32 UTC (rev 297) +++ trunk/tutti-ui-swing/pom.xml 2013-02-02 13:04:15 UTC (rev 298) @@ -231,13 +231,6 @@ <dependency> <groupId>${project.groupId}</groupId> - <artifactId>tutti-persistence-dev</artifactId> - <version>${project.version}</version> - <scope>runtime</scope> - </dependency> - - <dependency> - <groupId>${project.groupId}</groupId> <artifactId>tutti-persistence-adagio</artifactId> <version>${project.version}</version> <!--<scope>runtime</scope>-->
participants (1)
-
tchemit@users.forge.codelutin.com