This is an automated email from the git hooks/post-receive script. New commit to branch develop in repository tutti. See http://git.codelutin.com/tutti.git commit 057b4a84db2f8602ffbad0c10f8610729fd08185 Author: Tony CHEMIT <chemit@codelutin.com> Date: Mon Mar 30 15:55:47 2015 +0200 introduce DataModel API in persistence module --- .../tutti/persistence/TuttiPersistence.java | 33 +++++++++ .../tutti/persistence/TuttiPersistenceImpl.java | 78 +++++++++++++++++++++- .../persistence/TuttiPersistenceNoDbImpl.java | 16 +++++ .../tutti/persistence/model/CruiseDataModel.java | 39 +++++++++++ .../tutti/persistence/model/DataModelSupport.java | 47 +++++++++++++ .../persistence/model/OperationDataModel.java | 33 +++++++++ .../tutti/persistence/model/ProgramDataModel.java | 39 +++++++++++ .../ifremer/tutti/service/PersistenceService.java | 18 ++++- 8 files changed, 301 insertions(+), 2 deletions(-) diff --git a/tutti-persistence/src/main/java/fr/ifremer/tutti/persistence/TuttiPersistence.java b/tutti-persistence/src/main/java/fr/ifremer/tutti/persistence/TuttiPersistence.java index b594cb6..d3a2912 100644 --- a/tutti-persistence/src/main/java/fr/ifremer/tutti/persistence/TuttiPersistence.java +++ b/tutti-persistence/src/main/java/fr/ifremer/tutti/persistence/TuttiPersistence.java @@ -22,6 +22,7 @@ package fr.ifremer.tutti.persistence; * #L% */ +import fr.ifremer.tutti.persistence.model.ProgramDataModel; import fr.ifremer.tutti.persistence.service.AccidentalBatchPersistenceService; import fr.ifremer.tutti.persistence.service.AttachmentPersistenceService; import fr.ifremer.tutti.persistence.service.BenthosBatchPersistenceService; @@ -73,4 +74,36 @@ public interface TuttiPersistence extends TuttiPersistenceServiceImplementor, String getImplementationName(); + /** + * To load a program with all his cruises and fishing operations. + * + * @param programId id of the program to load + * @param loadFishingOperation flag to load cruise fishing operations + * @return loaded program + * @since 3.14.3 + */ + ProgramDataModel loadProgram(String programId, boolean loadFishingOperation); + + /** + * * To load a program with given cruises and fishing operations. + * + * @param programId id of the program to load + * @param loadFishingOperation flag to load cruise fishing operations + * @param cruiseIds ids of cruises to load + * @return loaded program + * @since 3.14.3 + */ + ProgramDataModel loadCruises(String programId, boolean loadFishingOperation, String... cruiseIds); + + /** + * * To load a program for his given cruise and fishing operations. + * + * @param programId id of the program to load + * @param cruiseId id of cruise to load + * @param fishingOperationIds ids of fishing operation to load + * @return loaded program + * @since 3.14.3 + */ + ProgramDataModel loadCruise(String programId, String cruiseId, String... fishingOperationIds); + } diff --git a/tutti-persistence/src/main/java/fr/ifremer/tutti/persistence/TuttiPersistenceImpl.java b/tutti-persistence/src/main/java/fr/ifremer/tutti/persistence/TuttiPersistenceImpl.java index f125b75..0ebc857 100644 --- a/tutti-persistence/src/main/java/fr/ifremer/tutti/persistence/TuttiPersistenceImpl.java +++ b/tutti-persistence/src/main/java/fr/ifremer/tutti/persistence/TuttiPersistenceImpl.java @@ -54,6 +54,9 @@ import fr.ifremer.tutti.persistence.entities.referential.Species; import fr.ifremer.tutti.persistence.entities.referential.TuttiLocation; import fr.ifremer.tutti.persistence.entities.referential.TuttiReferentialEntity; import fr.ifremer.tutti.persistence.entities.referential.Vessel; +import fr.ifremer.tutti.persistence.model.CruiseDataModel; +import fr.ifremer.tutti.persistence.model.OperationDataModel; +import fr.ifremer.tutti.persistence.model.ProgramDataModel; import fr.ifremer.tutti.persistence.service.AccidentalBatchPersistenceService; import fr.ifremer.tutti.persistence.service.AttachmentPersistenceService; import fr.ifremer.tutti.persistence.service.BenthosBatchPersistenceService; @@ -85,9 +88,13 @@ import javax.annotation.Resource; import java.io.File; import java.io.IOException; import java.sql.SQLException; +import java.util.Arrays; import java.util.Collection; +import java.util.Collections; +import java.util.LinkedHashSet; import java.util.List; import java.util.Map; +import java.util.Set; import java.util.concurrent.Callable; /** @@ -261,6 +268,76 @@ public class TuttiPersistenceImpl implements TuttiPersistence { } } + @Override + public ProgramDataModel loadProgram(String programId, boolean loadFishingOperation) { + + Program program = getProgram(programId); + + Set<CruiseDataModel> cruiseModels = new LinkedHashSet<>(); + List<Cruise> cruises = getAllCruise(programId); + for (Cruise cruise : cruises) { + List<String> fishingOperationIds = loadFishingOperation ? getAllFishingOperationIds(cruise.getId()) : Collections.<String>emptyList(); + CruiseDataModel model = loadCruise(cruise, fishingOperationIds); + cruiseModels.add(model); + } + + ProgramDataModel result = new ProgramDataModel(program, cruiseModels); + return result; + + } + + @Override + public ProgramDataModel loadCruises(String programId, boolean loadFishingOperation, String... cruiseIds) { + + Program program = getProgram(programId); + + Set<CruiseDataModel> cruiseModels = new LinkedHashSet<>(); + for (String cruiseId : cruiseIds) { + Cruise cruise = getCruise(cruiseId); + List<String> fishingOperationIds = loadFishingOperation ? getAllFishingOperationIds(cruise.getId()) : Collections.<String>emptyList(); + CruiseDataModel model = loadCruise(cruise, fishingOperationIds); + cruiseModels.add(model); + } + + ProgramDataModel result = new ProgramDataModel(program, cruiseModels); + return result; + + } + + @Override + public ProgramDataModel loadCruise(String programId, String cruiseId, String... fishingOperationIds) { + + Program program = getProgram(programId); + + Set<CruiseDataModel> cruiseModels = new LinkedHashSet<>(); + Cruise cruise = getCruise(cruiseId); + CruiseDataModel model = loadCruise(cruise, Arrays.asList(fishingOperationIds)); + cruiseModels.add(model); + + ProgramDataModel result = new ProgramDataModel(program, cruiseModels); + return result; + + } + + protected CruiseDataModel loadCruise(Cruise cruise, List<String> fishingOperationIds) { + + Set<OperationDataModel> fishingOperationModels = new LinkedHashSet<>(); + + List<FishingOperation> fishingOperations = getAllFishingOperation(cruise.getId()); + for (FishingOperation fishingOperation : fishingOperations) { + + if (fishingOperationIds.contains(fishingOperation.getId())) { + OperationDataModel model = new OperationDataModel(fishingOperation); + fishingOperationModels.add(model); + } + + } + + CruiseDataModel result = new CruiseDataModel(cruise, fishingOperationModels); + return result; + + } + //------------------------------------------------------------------------// //-- CaracteristicPersistenceService methods --// //------------------------------------------------------------------------// @@ -860,7 +937,6 @@ public class TuttiPersistenceImpl implements TuttiPersistence { } - @Override public List<TuttiProtocol> getAllProtocol() { return getProtocolService().getAllProtocol(); diff --git a/tutti-persistence/src/main/java/fr/ifremer/tutti/persistence/TuttiPersistenceNoDbImpl.java b/tutti-persistence/src/main/java/fr/ifremer/tutti/persistence/TuttiPersistenceNoDbImpl.java index 879c146..bd05c77 100644 --- a/tutti-persistence/src/main/java/fr/ifremer/tutti/persistence/TuttiPersistenceNoDbImpl.java +++ b/tutti-persistence/src/main/java/fr/ifremer/tutti/persistence/TuttiPersistenceNoDbImpl.java @@ -49,6 +49,7 @@ import fr.ifremer.tutti.persistence.entities.referential.Species; import fr.ifremer.tutti.persistence.entities.referential.TuttiLocation; import fr.ifremer.tutti.persistence.entities.referential.TuttiReferentialEntity; import fr.ifremer.tutti.persistence.entities.referential.Vessel; +import fr.ifremer.tutti.persistence.model.ProgramDataModel; import fr.ifremer.tutti.persistence.service.UpdateSchemaContextSupport; import org.nuiton.util.version.Version; @@ -72,6 +73,21 @@ public class TuttiPersistenceNoDbImpl implements TuttiPersistence { } @Override + public ProgramDataModel loadProgram(String programId, boolean loadFishingOperation) { + throw notImplemented(); + } + + @Override + public ProgramDataModel loadCruises(String programId, boolean loadFishingOperation, String... cruiseIds) { + throw notImplemented(); + } + + @Override + public ProgramDataModel loadCruise(String programId, String cruiseId, String... fishingOperationIds) { + throw notImplemented(); + } + + @Override public <V> V invoke(Callable<V> call) { throw notImplemented(); } diff --git a/tutti-persistence/src/main/java/fr/ifremer/tutti/persistence/model/CruiseDataModel.java b/tutti-persistence/src/main/java/fr/ifremer/tutti/persistence/model/CruiseDataModel.java new file mode 100644 index 0000000..2414aa6 --- /dev/null +++ b/tutti-persistence/src/main/java/fr/ifremer/tutti/persistence/model/CruiseDataModel.java @@ -0,0 +1,39 @@ +package fr.ifremer.tutti.persistence.model; + +import com.google.common.collect.ImmutableSet; +import fr.ifremer.tutti.persistence.entities.data.Cruise; + +import java.util.Iterator; +import java.util.Set; + +/** + * Created on 3/29/15. + * + * @author Tony Chemit - chemit@codelutin.com + * @since 3.14.3 + */ +public class CruiseDataModel extends DataModelSupport implements Iterable<OperationDataModel> { + + private static final long serialVersionUID = 1L; + + private final Set<OperationDataModel> operations; + + public CruiseDataModel(Cruise cruise, Set<OperationDataModel> operations) { + this(cruise.getId(), cruise.getName(), operations); + } + + public CruiseDataModel(String id, String label, Set<OperationDataModel> operations) { + super(id, label); + this.operations = ImmutableSet.copyOf(operations); + } + + @Override + public Iterator<OperationDataModel> iterator() { + return operations.iterator(); + } + + public int size() { + return operations.size(); + } + +} diff --git a/tutti-persistence/src/main/java/fr/ifremer/tutti/persistence/model/DataModelSupport.java b/tutti-persistence/src/main/java/fr/ifremer/tutti/persistence/model/DataModelSupport.java new file mode 100644 index 0000000..d596bf5 --- /dev/null +++ b/tutti-persistence/src/main/java/fr/ifremer/tutti/persistence/model/DataModelSupport.java @@ -0,0 +1,47 @@ +package fr.ifremer.tutti.persistence.model; + +import java.io.Serializable; + +/** + * Created on 3/29/15. + * + * @author Tony Chemit - chemit@codelutin.com + * @since 3.14.3 + */ +public abstract class DataModelSupport implements Serializable { + + private static final long serialVersionUID = 1L; + + private final String id; + + private final String label; + + public DataModelSupport(String id, String label) { + this.id = id; + this.label = label; + } + + public String getId() { + return id; + } + + public String getLabel() { + return label; + } + + @Override + public boolean equals(Object o) { + if (this == o) return true; + if (!(o instanceof DataModelSupport)) return false; + + DataModelSupport that = (DataModelSupport) o; + + return id.equals(that.id); + + } + + @Override + public int hashCode() { + return id.hashCode(); + } +} diff --git a/tutti-persistence/src/main/java/fr/ifremer/tutti/persistence/model/OperationDataModel.java b/tutti-persistence/src/main/java/fr/ifremer/tutti/persistence/model/OperationDataModel.java new file mode 100644 index 0000000..e5e541e --- /dev/null +++ b/tutti-persistence/src/main/java/fr/ifremer/tutti/persistence/model/OperationDataModel.java @@ -0,0 +1,33 @@ +package fr.ifremer.tutti.persistence.model; + +import fr.ifremer.tutti.persistence.entities.data.FishingOperation; + +/** + * Created on 3/29/15. + * + * @author Tony Chemit - chemit@codelutin.com + * @since 3.14.3 + */ +public class OperationDataModel extends DataModelSupport { + + private static final long serialVersionUID = 1L; + + private static String getLabel(FishingOperation operation) { + String label = String.format("%1$s - %2$d - %3$s - %4$td/%4$tm/%4$tY", + operation.getStationNumber(), + operation.getFishingOperationNumber(), + operation.getMultirigAggregation(), + operation.getGearShootingStartDate()); + return label; + } + + public OperationDataModel(FishingOperation operation) { + this(operation.getId(), getLabel(operation)); + } + + public OperationDataModel(String id, String label) { + super(id,label); + } + + +} diff --git a/tutti-persistence/src/main/java/fr/ifremer/tutti/persistence/model/ProgramDataModel.java b/tutti-persistence/src/main/java/fr/ifremer/tutti/persistence/model/ProgramDataModel.java new file mode 100644 index 0000000..1743002 --- /dev/null +++ b/tutti-persistence/src/main/java/fr/ifremer/tutti/persistence/model/ProgramDataModel.java @@ -0,0 +1,39 @@ +package fr.ifremer.tutti.persistence.model; + +import com.google.common.collect.ImmutableSet; +import fr.ifremer.tutti.persistence.entities.data.Program; + +import java.util.Iterator; +import java.util.Set; + +/** + * Created on 3/29/15. + * + * @author Tony Chemit - chemit@codelutin.com + * @since 3.14.3 + */ +public class ProgramDataModel extends DataModelSupport implements Iterable<CruiseDataModel> { + + private static final long serialVersionUID = 1L; + + private final Set<CruiseDataModel> cruises; + + public ProgramDataModel(Program program, Set<CruiseDataModel> cruises) { + this(program.getId(), program.getName(),cruises); + } + + public ProgramDataModel(String id, String label, Set<CruiseDataModel> cruises) { + super(id, label); + this.cruises = ImmutableSet.copyOf(cruises); + } + + public int size() { + return cruises.size(); + } + + @Override + public Iterator<CruiseDataModel> iterator() { + return cruises.iterator(); + } + +} diff --git a/tutti-service/src/main/java/fr/ifremer/tutti/service/PersistenceService.java b/tutti-service/src/main/java/fr/ifremer/tutti/service/PersistenceService.java index 8512225..48d68f1 100644 --- a/tutti-service/src/main/java/fr/ifremer/tutti/service/PersistenceService.java +++ b/tutti-service/src/main/java/fr/ifremer/tutti/service/PersistenceService.java @@ -66,6 +66,7 @@ import fr.ifremer.tutti.persistence.entities.referential.TuttiLocation; import fr.ifremer.tutti.persistence.entities.referential.TuttiReferentialEntity; import fr.ifremer.tutti.persistence.entities.referential.Vessel; import fr.ifremer.tutti.persistence.entities.referential.Vessels; +import fr.ifremer.tutti.persistence.model.ProgramDataModel; import fr.ifremer.tutti.persistence.service.TuttiPersistenceServiceLocator; import fr.ifremer.tutti.persistence.service.UpdateSchemaContextSupport; import org.apache.commons.collections4.CollectionUtils; @@ -163,7 +164,7 @@ public class PersistenceService extends AbstractTuttiService implements TuttiPer } - public static interface FrequencyFunction<S extends SpeciesAbleBatch, F extends SpeciesAbleBatchFrequency> extends Function<S, List<F>> { + public interface FrequencyFunction<S extends SpeciesAbleBatch, F extends SpeciesAbleBatchFrequency> extends Function<S, List<F>> { } public FrequencyFunction<SpeciesBatch, SpeciesBatchFrequency> newSpeciesFrequenciesFunction() { @@ -236,6 +237,21 @@ public class PersistenceService extends AbstractTuttiService implements TuttiPer } @Override + public ProgramDataModel loadProgram(String programId, boolean loadFishingOperation) { + return driver.loadProgram(programId, loadFishingOperation); + } + + @Override + public ProgramDataModel loadCruises(String programId, boolean loadFishingOperation, String... cruiseIds) { + return driver.loadCruises(programId, loadFishingOperation, cruiseIds); + } + + @Override + public ProgramDataModel loadCruise(String programId, String cruiseId, String... fishingOperationIds) { + return driver.loadCruise(programId, cruiseId, fishingOperationIds); + } + + @Override public void lazyInit() { // this service does not used lazy init } -- To stop receiving notification emails like this one, please contact codelutin.com SCM administrator <admin+scm@codelutin.com>.