This is an automated email from the git hooks/post-receive script. New commit to branch feature/6688 in repository tutti. See http://git.codelutin.com/tutti.git commit ed04df029ba2d66fd0d5b99873d910b77e234846 Author: Tony CHEMIT <chemit@codelutin.com> Date: Thu Feb 19 19:50:14 2015 +0100 introduce TuttiValidationDataContextSupport to be able to use it inside import without using the data context --- .../fr/ifremer/tutti/service/TuttiDataContext.java | 105 +------------- .../tutti/service/TuttiValidationDataContext.java | 87 ++++++++++++ .../service/TuttiValidationDataContextSupport.java | 152 +++++++++++++++++++++ .../GenericFormatImportValidationDataContext.java | 96 +++++++++++++ 4 files changed, 342 insertions(+), 98 deletions(-) diff --git a/tutti-service/src/main/java/fr/ifremer/tutti/service/TuttiDataContext.java b/tutti-service/src/main/java/fr/ifremer/tutti/service/TuttiDataContext.java index 98d416f..fb6f415 100644 --- a/tutti-service/src/main/java/fr/ifremer/tutti/service/TuttiDataContext.java +++ b/tutti-service/src/main/java/fr/ifremer/tutti/service/TuttiDataContext.java @@ -23,7 +23,6 @@ package fr.ifremer.tutti.service; */ import com.google.common.base.Preconditions; -import com.google.common.collect.Lists; import fr.ifremer.tutti.TuttiConfiguration; import fr.ifremer.tutti.persistence.entities.data.Cruise; import fr.ifremer.tutti.persistence.entities.data.FishingOperation; @@ -40,18 +39,15 @@ import fr.ifremer.tutti.persistence.entities.referential.Species; import fr.ifremer.tutti.persistence.entities.referential.TaxonCache; import fr.ifremer.tutti.persistence.entities.referential.TaxonCaches; import fr.ifremer.tutti.persistence.entities.referential.Vessel; -import fr.ifremer.tutti.util.Weights; import org.apache.commons.lang3.StringUtils; import org.apache.commons.logging.Log; import org.apache.commons.logging.LogFactory; import org.jdesktop.beans.AbstractBean; -import org.nuiton.util.DateUtil; import java.beans.PropertyChangeEvent; import java.beans.PropertyChangeListener; import java.io.Closeable; import java.util.ArrayList; -import java.util.Date; import java.util.List; /** @@ -187,7 +183,7 @@ public class TuttiDataContext extends AbstractBean implements Closeable { @Override public void propertyChange(PropertyChangeEvent evt) { fishingOperation = null; - getValidationContext().existingFishingOperations = null; + getValidationContext().resetExistingFishingOperations(); } }); } @@ -473,8 +469,7 @@ public class TuttiDataContext extends AbstractBean implements Closeable { // always propagate the change firePropertyChange(PROPERTY_FISHING_OPERATION_ID, -1, fishingOperationId); - firePropertyChange(PROPERTY_FISHING_OPERATION_FILLED, - oldValue, isFishingOperationFilled()); + firePropertyChange(PROPERTY_FISHING_OPERATION_FILLED, oldValue, isFishingOperationFilled()); } public Program getProgram() { @@ -877,104 +872,18 @@ public class TuttiDataContext extends AbstractBean implements Closeable { return service; } - protected final TuttiValidationDataContext validationContext = - new TuttiValidationDataContext(); + protected TuttiValidationDataContextSupport validationContext = new TuttiValidationDataContext(this); public void resetValidationDataContext() { validationContext.reset(); } - public TuttiValidationDataContext getValidationContext() { + public TuttiValidationDataContextSupport getValidationContext() { return validationContext; } - /** - * Data to shared by validators. - * - * @author tchemit <chemit@codelutin.com> - * @since 1.2 - */ - public class TuttiValidationDataContext { - - protected List<Program> existingPrograms = Lists.newArrayList(); - - protected List<TuttiProtocol> existingProtocols = Lists.newArrayList(); - - protected List<FishingOperation> existingFishingOperations = Lists.newArrayList(); - - public List<Program> getExistingPrograms() { - checkOpened(); - if (existingPrograms == null) { - existingPrograms = Lists.newArrayList(service.getAllProgram()); - - if (isProgramFilled()) { - - // remove current program - existingPrograms.remove(getProgram()); - } - } - return existingPrograms; - } - - public List<TuttiProtocol> getExistingProtocols() { - checkOpened(); - if (existingProtocols == null) { - existingProtocols = Lists.newArrayList(service.getAllProtocol()); - - if (isProtocolFilled()) { - - // remove current protocol - existingProtocols.remove(getProtocol()); - } - } - return existingProtocols; - } - - public List<FishingOperation> getExistingFishingOperations() { - checkOpened(); - if (existingFishingOperations == null) { - existingFishingOperations = Lists.newArrayList(service.getAllFishingOperation(getCruiseId())); - - if (isFishingOperationFilled()) { - - // remove current protocol - existingFishingOperations.remove(getFishingOperation()); - } - } - return existingFishingOperations; - } - - public boolean isDateInCruise(Date date) { - return DateUtil.between(date, getCruise().getBeginDate(), getCruise().getEndDate()); - } - - public boolean isNotWeightZeroValue(Float weight) { - return Weights.isNotEqualWeight(weight, 0f); - } - - public boolean isMutiRegNumberValid(String numberAsString) { - boolean result = false; - if (numberAsString.matches("\\d+")) { - int mutlirigNumber = Integer.valueOf(numberAsString); - Integer cruiseMultirigNumber = getCruise().getMultirigNumber(); - result = mutlirigNumber <= cruiseMultirigNumber; - } - return result; - } - - public boolean isValidDuration(Date gearShootingStartDate, Date gearShootingEndDate) { - boolean result = gearShootingStartDate == null || gearShootingEndDate == null; - if (!result) { - int minutes = DateUtil.getDifferenceInMinutes(gearShootingStartDate, gearShootingEndDate); - result = minutes <= 45 && minutes >= 20; - } - return result; - } - - public void reset() { - existingPrograms = null; - existingProtocols = null; - existingFishingOperations = null; - } + public void setValidationContext(TuttiValidationDataContextSupport validationContext) { + Preconditions.checkNotNull(validationContext, "cant set a null validation context"); + this.validationContext = validationContext; } } diff --git a/tutti-service/src/main/java/fr/ifremer/tutti/service/TuttiValidationDataContext.java b/tutti-service/src/main/java/fr/ifremer/tutti/service/TuttiValidationDataContext.java new file mode 100644 index 0000000..08370f9 --- /dev/null +++ b/tutti-service/src/main/java/fr/ifremer/tutti/service/TuttiValidationDataContext.java @@ -0,0 +1,87 @@ +package fr.ifremer.tutti.service; + +import com.google.common.collect.Lists; +import fr.ifremer.tutti.persistence.entities.data.Cruise; +import fr.ifremer.tutti.persistence.entities.data.FishingOperation; +import fr.ifremer.tutti.persistence.entities.data.Program; +import fr.ifremer.tutti.persistence.entities.protocol.TuttiProtocol; + +import java.util.List; + +/** + * Data to shared by validators. + * + * @author tchemit <chemit@codelutin.com> + * @since 1.2 + */ +public class TuttiValidationDataContext extends TuttiValidationDataContextSupport { + + private final TuttiDataContext dataContext; + + public TuttiValidationDataContext(TuttiDataContext dataContext) { + this.dataContext = dataContext; + } + + @Override + protected List<Program> loadExistingPrograms() { + dataContext.checkOpened(); + List<Program> existingPrograms = Lists.newArrayList(dataContext.service.getAllProgram()); + + if (dataContext.isProgramFilled()) { + + // remove current program + existingPrograms.remove(getProgram()); + } + + return existingPrograms; + } + + @Override + protected List<TuttiProtocol> loadExistingProtocols() { + dataContext.checkOpened(); + List<TuttiProtocol> existingProtocols = Lists.newArrayList(dataContext.service.getAllProtocol()); + + if (dataContext.isProtocolFilled()) { + + // remove current protocol + existingProtocols.remove(getProtocol()); + } + + return existingProtocols; + } + + @Override + protected List<FishingOperation> loadExistingFishingOperations() { + dataContext.checkOpened(); + List<FishingOperation> existingFishingOperations = Lists.newArrayList(dataContext.service.getAllFishingOperation(dataContext.getCruiseId())); + + if (dataContext.isFishingOperationFilled()) { + + // remove current protocol + existingFishingOperations.remove(getFishingOperation()); + } + + return existingFishingOperations; + } + + @Override + protected Program getProgram() { + return dataContext.getProgram(); + } + + @Override + protected Cruise getCruise() { + return dataContext.getCruise(); + } + + @Override + protected TuttiProtocol getProtocol() { + return dataContext.getProtocol(); + } + + @Override + protected FishingOperation getFishingOperation() { + return dataContext.getFishingOperation(); + } + +} diff --git a/tutti-service/src/main/java/fr/ifremer/tutti/service/TuttiValidationDataContextSupport.java b/tutti-service/src/main/java/fr/ifremer/tutti/service/TuttiValidationDataContextSupport.java new file mode 100644 index 0000000..94496b8 --- /dev/null +++ b/tutti-service/src/main/java/fr/ifremer/tutti/service/TuttiValidationDataContextSupport.java @@ -0,0 +1,152 @@ +package fr.ifremer.tutti.service; + +import com.google.common.collect.Lists; +import com.opensymphony.xwork2.util.ValueStack; +import fr.ifremer.tutti.persistence.entities.data.Cruise; +import fr.ifremer.tutti.persistence.entities.data.FishingOperation; +import fr.ifremer.tutti.persistence.entities.data.Program; +import fr.ifremer.tutti.persistence.entities.protocol.TuttiProtocol; +import fr.ifremer.tutti.util.Weights; +import org.apache.commons.logging.Log; +import org.apache.commons.logging.LogFactory; +import org.nuiton.util.DateUtil; +import org.nuiton.validator.xwork2.XWork2ValidatorUtil; + +import java.util.ArrayList; +import java.util.Date; +import java.util.List; + +/** + * Data to shared by validators. + * + * @author tchemit <chemit@codelutin.com> + * @since 1.2 + */ +public abstract class TuttiValidationDataContextSupport { + + /** Logger. */ + private static final Log log = LogFactory.getLog(TuttiValidationDataContextSupport.class); + + private List<Program> existingPrograms = Lists.newArrayList(); + + private List<TuttiProtocol> existingProtocols = Lists.newArrayList(); + + private List<FishingOperation> existingFishingOperations = Lists.newArrayList(); + + public static TuttiValidationDataContextSupport setValidationContext(TuttiValidationDataContextSupport validationDataContext, boolean removePrevious) { + + ValueStack sharedValueStack = XWork2ValidatorUtil.getSharedValueStack(); + + TuttiValidationDataContextSupport previousValidationContext = null; + if (removePrevious) { + List toRepush = new ArrayList(); + do { + + Object o = sharedValueStack.pop(); + + if (log.isInfoEnabled()) { + log.info("Pop object: " + o); + } + if (o instanceof TuttiValidationDataContextSupport) { + previousValidationContext = (TuttiValidationDataContextSupport) o; + } else { + toRepush.add(0, o); + } + + } while (previousValidationContext == null || sharedValueStack.size() > 0); + + for (Object o : toRepush) { + + if (log.isInfoEnabled()) { + log.info("Push object: " + o); + } + sharedValueStack.push(o); + } + + } + sharedValueStack.push(validationDataContext); + + return previousValidationContext; + } + + protected abstract List<Program> loadExistingPrograms(); + + protected abstract List<TuttiProtocol> loadExistingProtocols(); + + protected abstract List<FishingOperation> loadExistingFishingOperations(); + + protected abstract Program getProgram(); + + protected abstract Cruise getCruise(); + + protected abstract TuttiProtocol getProtocol(); + + protected abstract FishingOperation getFishingOperation(); + + public final List<Program> getExistingPrograms() { + if (existingPrograms == null) { + + existingPrograms = loadExistingPrograms(); + } + return existingPrograms; + } + + public final List<TuttiProtocol> getExistingProtocols() { + if (existingProtocols == null) { + existingProtocols = loadExistingProtocols(); + } + return existingProtocols; + } + + public final List<FishingOperation> getExistingFishingOperations() { + if (existingFishingOperations == null) { + existingFishingOperations = loadExistingFishingOperations(); + } + return existingFishingOperations; + } + + public final boolean isDateInCruise(Date date) { + return DateUtil.between(date, getCruise().getBeginDate(), getCruise().getEndDate()); + } + + public final boolean isNotWeightZeroValue(Float weight) { + return Weights.isNotEqualWeight(weight, 0f); + } + + public final boolean isMutiRegNumberValid(String numberAsString) { + boolean result = false; + if (numberAsString.matches("\\d+")) { + int mutlirigNumber = Integer.valueOf(numberAsString); + Integer cruiseMultirigNumber = getCruise().getMultirigNumber(); + result = mutlirigNumber <= cruiseMultirigNumber; + } + return result; + } + + public final boolean isValidDuration(Date gearShootingStartDate, Date gearShootingEndDate) { + boolean result = gearShootingStartDate == null || gearShootingEndDate == null; + if (!result) { + int minutes = DateUtil.getDifferenceInMinutes(gearShootingStartDate, gearShootingEndDate); + result = minutes <= 45 && minutes >= 20; + } + return result; + } + + public void reset() { + resetExistingPrograms(); + resetExistingProtocols(); + resetExistingFishingOperations(); + } + + public void resetExistingPrograms() { + existingPrograms = null; + } + + public void resetExistingProtocols() { + existingProtocols = null; + } + + public void resetExistingFishingOperations() { + existingFishingOperations = null; + } +} diff --git a/tutti-service/src/main/java/fr/ifremer/tutti/service/genericformat/GenericFormatImportValidationDataContext.java b/tutti-service/src/main/java/fr/ifremer/tutti/service/genericformat/GenericFormatImportValidationDataContext.java new file mode 100644 index 0000000..3066873 --- /dev/null +++ b/tutti-service/src/main/java/fr/ifremer/tutti/service/genericformat/GenericFormatImportValidationDataContext.java @@ -0,0 +1,96 @@ +package fr.ifremer.tutti.service.genericformat; + +import com.google.common.collect.Lists; +import fr.ifremer.tutti.persistence.entities.data.Cruise; +import fr.ifremer.tutti.persistence.entities.data.FishingOperation; +import fr.ifremer.tutti.persistence.entities.data.Program; +import fr.ifremer.tutti.persistence.entities.protocol.TuttiProtocol; +import fr.ifremer.tutti.service.TuttiValidationDataContextSupport; + +import java.util.ArrayList; +import java.util.List; +import java.util.Set; + +/** + * Created on 2/19/15. + * + * @author Tony Chemit - chemit@codelutin.com + * @since 3.14 + */ +public class GenericFormatImportValidationDataContext extends TuttiValidationDataContextSupport { + + private Cruise cruise; + + private TuttiProtocol protocol; + + private FishingOperation fishingOperation; + + private final GenericFormatImportContext importContext; + + public GenericFormatImportValidationDataContext(GenericFormatImportContext importContext) { + this.importContext = importContext; + } + + // Not used + @Override + protected List<Program> loadExistingPrograms() { + return Lists.newArrayList(); + } + + // Not used + @Override + protected List<TuttiProtocol> loadExistingProtocols() { + return Lists.newArrayList(); + } + + @Override + protected List<FishingOperation> loadExistingFishingOperations() { + + List<FishingOperation> result = new ArrayList<>(); + + if (cruise != null) { + + Set<FishingOperation> importedFishingOperations = importContext.getImportResult().getImportedFishingOperations(cruise); + result.addAll(importedFishingOperations); + if (fishingOperation != null) { + result.remove(fishingOperation); + } + + } + return result; + } + + @Override + protected Program getProgram() { + return importContext.getImportRequest().getProgram(); + } + + @Override + protected Cruise getCruise() { + return cruise; + } + + @Override + protected TuttiProtocol getProtocol() { + return protocol; + } + + @Override + protected FishingOperation getFishingOperation() { + return fishingOperation; + } + + public void setCruise(Cruise cruise) { + this.cruise = cruise; + resetExistingFishingOperations(); + } + + public void setProtocol(TuttiProtocol protocol) { + this.protocol = protocol; + } + + public void setFishingOperation(FishingOperation fishingOperation) { + this.fishingOperation = fishingOperation; + resetExistingFishingOperations(); + } +} -- To stop receiving notification emails like this one, please contact codelutin.com SCM administrator <admin+scm@codelutin.com>.