Author: tchemit Date: 2013-01-03 18:01:03 +0100 (Thu, 03 Jan 2013) New Revision: 147 Url: http://forge.codelutin.com/projects/tutti/repository/revisions/147 Log: fixes #1805: [Onglet Poisson] Assistance ?\195?\160 la saisie des lots de poissons Modified: trunk/tutti-persistence-dev/src/main/java/fr/ifremer/tutti/persistence/TuttiPersistenceDevImpl.java trunk/tutti-persistence-dev/src/test/java/fr/ifremer/tutti/persistence/TuttiPersistenceDevImplTest.java trunk/tutti-persistence/src/main/java/fr/ifremer/tutti/persistence/TuttiPersistence.java trunk/tutti-service/src/main/java/fr/ifremer/tutti/service/PersistenceService.java trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/AbstractTuttiBeanUIModel.java trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/operation/catches/species/SampleCategory.java trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/operation/catches/species/SpeciesBatchRowModel.java trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/operation/catches/species/SpeciesBatchTableModel.java trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/operation/catches/species/SpeciesBatchUI.css trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/operation/catches/species/SpeciesBatchUIHandler.java trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/operation/catches/species/split/SplitSpeciesBatchUIHandler.java trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/operation/catches/species/split/SplitSpeciesBatchUIModel.java trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/util/table/AbstractTuttiTableUIHandler.java Modified: trunk/tutti-persistence/src/main/java/fr/ifremer/tutti/persistence/TuttiPersistence.java =================================================================== --- trunk/tutti-persistence/src/main/java/fr/ifremer/tutti/persistence/TuttiPersistence.java 2013-01-02 18:51:13 UTC (rev 146) +++ trunk/tutti-persistence/src/main/java/fr/ifremer/tutti/persistence/TuttiPersistence.java 2013-01-03 17:01:03 UTC (rev 147) @@ -168,12 +168,14 @@ SpeciesBatch getSpeciesBatch(String id); - SpeciesBatch createSpeciesBatch(SpeciesBatch bean); + SpeciesBatch createSpeciesBatch(SpeciesBatch bean, String parentBatchId); SpeciesBatch saveSpeciesBatch(SpeciesBatch bean); void deleteSpeciesBatch(String id); + void deleteSpeciesSubBatch(String id); + List<SpeciesBatchFrequency> getAllSpeciesBatchFrequency( String speciesBatchId); Modified: trunk/tutti-persistence-dev/src/main/java/fr/ifremer/tutti/persistence/TuttiPersistenceDevImpl.java =================================================================== --- trunk/tutti-persistence-dev/src/main/java/fr/ifremer/tutti/persistence/TuttiPersistenceDevImpl.java 2013-01-02 18:51:13 UTC (rev 146) +++ trunk/tutti-persistence-dev/src/main/java/fr/ifremer/tutti/persistence/TuttiPersistenceDevImpl.java 2013-01-03 17:01:03 UTC (rev 147) @@ -32,6 +32,7 @@ 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; @@ -72,6 +73,7 @@ import java.util.List; import java.util.Map; import java.util.ServiceLoader; +import java.util.Set; import java.util.UUID; /** @@ -473,8 +475,30 @@ } @Override - public SpeciesBatch createSpeciesBatch(SpeciesBatch bean) { - SpeciesBatch result = create(SpeciesBatch.class, bean); + public SpeciesBatch createSpeciesBatch(SpeciesBatch bean, + String parentBatchId) { + + boolean withParent = parentBatchId != null; + + SpeciesBatch result = create(SpeciesBatch.class, 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); + } return result; } @@ -490,6 +514,31 @@ } @Override + public void deleteSpeciesSubBatch(String id) { + Preconditions.checkNotNull(id, "Can't save a bean with null id"); + SpeciesBatch bean = getBean(SpeciesBatch.class, 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); + } + + 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 = Lists.newArrayList(Iterables.filter(getData(SpeciesBatchFrequency.class), new Predicate<SpeciesBatchFrequency>() { @Override @@ -883,9 +932,15 @@ } protected <B extends IdAware> B create(Class<B> type, B bean) { + return create(type, bean, true); + } + + protected <B extends IdAware> B create(Class<B> type, + B bean, + boolean sychronize) { Preconditions.checkNotNull(bean, "Can't persist a null bean"); B result = TuttiEntities.newEntity(bean); - persist(type, bean, result, true); + persist(type, bean, result, sychronize); return result; } @@ -894,6 +949,8 @@ 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; } Modified: trunk/tutti-persistence-dev/src/test/java/fr/ifremer/tutti/persistence/TuttiPersistenceDevImplTest.java =================================================================== --- trunk/tutti-persistence-dev/src/test/java/fr/ifremer/tutti/persistence/TuttiPersistenceDevImplTest.java 2013-01-02 18:51:13 UTC (rev 146) +++ trunk/tutti-persistence-dev/src/test/java/fr/ifremer/tutti/persistence/TuttiPersistenceDevImplTest.java 2013-01-03 17:01:03 UTC (rev 147) @@ -153,7 +153,7 @@ persistence.open(config.getConfig()); - SpeciesBatch batch = persistence.createSpeciesBatch(new SpeciesBatch()); + SpeciesBatch batch = persistence.createSpeciesBatch(new SpeciesBatch(), null); String batchId = batch.getId(); SpeciesBatchFrequency f; Modified: trunk/tutti-service/src/main/java/fr/ifremer/tutti/service/PersistenceService.java =================================================================== --- trunk/tutti-service/src/main/java/fr/ifremer/tutti/service/PersistenceService.java 2013-01-02 18:51:13 UTC (rev 146) +++ trunk/tutti-service/src/main/java/fr/ifremer/tutti/service/PersistenceService.java 2013-01-03 17:01:03 UTC (rev 147) @@ -387,9 +387,10 @@ } @Override - public SpeciesBatch createSpeciesBatch(SpeciesBatch bean) { + public SpeciesBatch createSpeciesBatch(SpeciesBatch bean, + String parentBatchId) { checkDriverExists(); - return driver.createSpeciesBatch(bean); + return driver.createSpeciesBatch(bean, parentBatchId); } @Override @@ -405,6 +406,12 @@ } @Override + public void deleteSpeciesSubBatch(String id) { + checkDriverExists(); + driver.deleteSpeciesSubBatch(id); + } + + @Override public List<SpeciesBatchFrequency> getAllSpeciesBatchFrequency(String speciesBatchId) { checkDriverExists(); return driver.getAllSpeciesBatchFrequency(speciesBatchId); Modified: trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/AbstractTuttiBeanUIModel.java =================================================================== --- trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/AbstractTuttiBeanUIModel.java 2013-01-02 18:51:13 UTC (rev 146) +++ trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/AbstractTuttiBeanUIModel.java 2013-01-03 17:01:03 UTC (rev 147) @@ -24,6 +24,7 @@ * #L% */ +import fr.ifremer.tutti.persistence.entities.IdAware; import fr.ifremer.tutti.service.TuttiServiceTechnicalException; import org.jdesktop.beans.AbstractSerializableBean; import org.nuiton.util.beans.Binder; @@ -34,7 +35,7 @@ * @author tchemit <chemit@codelutin.com> * @since 0.1 */ -public abstract class AbstractTuttiBeanUIModel<E, B extends AbstractTuttiBeanUIModel<E, B>> extends AbstractSerializableBean { +public abstract class AbstractTuttiBeanUIModel<E, B extends AbstractTuttiBeanUIModel<E, B>> extends AbstractSerializableBean implements IdAware { private static final long serialVersionUID = 1L; Modified: trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/operation/catches/species/SampleCategory.java =================================================================== --- trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/operation/catches/species/SampleCategory.java 2013-01-02 18:51:13 UTC (rev 146) +++ trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/operation/catches/species/SampleCategory.java 2013-01-03 17:01:03 UTC (rev 147) @@ -24,6 +24,9 @@ * #L% */ +import org.apache.commons.lang3.builder.ReflectionToStringBuilder; +import org.apache.commons.lang3.builder.ToStringBuilder; + import java.io.Serializable; /** @@ -93,4 +96,19 @@ public boolean isValid() { return categoryValue != null && categoryWeight != null; } + + public boolean isEmpty() { + return categoryValue == null && categoryWeight == null; + } + + public boolean isEmptyOrValid() { + return isEmpty() || isValid(); + } + + @Override + public String toString() { + return new ReflectionToStringBuilder(this). + appendSuper(super.toString()). + toString(); + } } Modified: trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/operation/catches/species/SpeciesBatchRowModel.java =================================================================== --- trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/operation/catches/species/SpeciesBatchRowModel.java 2013-01-02 18:51:13 UTC (rev 146) +++ trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/operation/catches/species/SpeciesBatchRowModel.java 2013-01-03 17:01:03 UTC (rev 147) @@ -52,40 +52,40 @@ public static final String PROPERTY_SPECIES_TO_CONFIRM = "speciesToConfirm"; - public static final String PROPERTY_SPECIES_SAMPLE_CATEGORY = "speciesSampleCategory"; - public static final String PROPERTY_SPECIES_CATEGORY = "speciesCategory"; + public static final String PROPERTY_SPECIES_CATEGORY_VALUE = "speciesCategoryValue"; + public static final String PROPERTY_SPECIES_CATEGORY_WEIGHT = "speciesCategoryWeight"; - public static final String PROPERTY_SORTED_UNSORTED_SAMPLE_CATEGORY = "sortedUnsortedSampleCategory"; - public static final String PROPERTY_SORTED_UNSORTED_CATEGORY = "sortedUnsortedCategory"; + public static final String PROPERTY_SORTED_UNSORTED_CATEGORY_VALUE = "sortedUnsortedCategoryValue"; + public static final String PROPERTY_SORTED_UNSORTED_CATEGORY_WEIGHT = "sortedUnsortedCategoryWeight"; - public static final String PROPERTY_SIZE_SAMPLE_CATEGORY = "sizeSampleCategory"; - public static final String PROPERTY_SIZE_CATEGORY = "sizeCategory"; + public static final String PROPERTY_SIZE_CATEGORY_VALUE = "sizeCategoryValue"; + public static final String PROPERTY_SIZE_CATEGORY_WEIGHT = "sizeCategoryWeight"; - public static final String PROPERTY_SEX_SAMPLE_CATEGORY = "sexSampleCategory"; - public static final String PROPERTY_SEX_CATEGORY = "sexCategory"; + public static final String PROPERTY_SEX_CATEGORY_VALUE = "sexCategoryValue"; + public static final String PROPERTY_SEX_CATEGORY_WEIGHT = "sexCategoryWeight"; - public static final String PROPERTY_MATURITY_SAMPLE_CATEGORY = "maturitySampleCategory"; - public static final String PROPERTY_MATURITY_CATEGORY = "maturityCategory"; + public static final String PROPERTY_MATURITY_CATEGORY_VALUE = "maturityCategoryValue"; + public static final String PROPERTY_MATURITY_CATEGORY_WEIGHT = "maturityCategoryWeight"; - public static final String PROPERTY_AGE_SAMPLE_CATEGORY = "ageSampleCategory"; - public static final String PROPERTY_AGE_CATEGORY = "ageCategory"; + public static final String PROPERTY_AGE_CATEGORY_VALUE = "ageCategoryValue"; + public static final String PROPERTY_AGE_CATEGORY_WEIGHT = "ageCategoryWeight"; public static final String PROPERTY_WEIGHT = "weight"; @@ -117,42 +117,42 @@ * * @since 0.2 */ - protected final SampleCategory<Species> speciesSampleCategory; + protected SampleCategory<Species> speciesCategory; /** * Is catch is vrac or horsVrac?. * * @since 0.2 */ - protected final SampleCategory<CaracteristicQualitativeValue> sortedUnsortedSampleCategory; + protected SampleCategory<CaracteristicQualitativeValue> sortedUnsortedCategory; /** * Weight category (can be null). * * @since 0.2 */ - protected final SampleCategory<CaracteristicQualitativeValue> sizeSampleCategory; + protected SampleCategory<CaracteristicQualitativeValue> sizeCategory; /** * Sex (can be null). * * @since 0.2 */ - protected final SampleCategory<CaracteristicQualitativeValue> sexSampleCategory; + protected SampleCategory<CaracteristicQualitativeValue> sexCategory; /** * Maturity (can be null). * * @since 0.2 */ - protected final SampleCategory<CaracteristicQualitativeValue> maturitySampleCategory; + protected SampleCategory<CaracteristicQualitativeValue> maturityCategory; /** * Age (can be null). * * @since 0.2 */ - protected final SampleCategory<Float> ageSampleCategory; + protected SampleCategory<Float> ageCategory; /** * Sample category of this batch. @@ -165,13 +165,6 @@ private SampleCategory<?> sampleCategory; /** - * Species observed. - * - * @since 0.2 - */ - protected Species species; - - /** * Is the species need to be confirmed?. * * @since 0.2 @@ -254,12 +247,12 @@ public SpeciesBatchRowModel() { super(SpeciesBatch.class, fromBeanBinder, toBeanBinder); frequency = Lists.newArrayList(); - speciesSampleCategory = SampleCategory.newSample(SampleCategoryType.species); - sortedUnsortedSampleCategory = SampleCategory.newSample(SampleCategoryType.sortedUnsorted); - sizeSampleCategory = SampleCategory.newSample(SampleCategoryType.size); - sexSampleCategory = SampleCategory.newSample(SampleCategoryType.sex); - maturitySampleCategory = SampleCategory.newSample(SampleCategoryType.maturity); - ageSampleCategory = SampleCategory.newSample(SampleCategoryType.age); + speciesCategory = SampleCategory.newSample(SampleCategoryType.species); + sortedUnsortedCategory = SampleCategory.newSample(SampleCategoryType.sortedUnsorted); + sizeCategory = SampleCategory.newSample(SampleCategoryType.size); + sexCategory = SampleCategory.newSample(SampleCategoryType.sex); + maturityCategory = SampleCategory.newSample(SampleCategoryType.maturity); + ageCategory = SampleCategory.newSample(SampleCategoryType.age); } public SpeciesBatchRowModel(SpeciesBatch aBatch, @@ -290,22 +283,22 @@ switch (sampleCategoryEnum) { case species: - sampleCategory = getSpeciesSampleCategory(); + sampleCategory = getSpeciesCategory(); break; case sortedUnsorted: - sampleCategory = getSortedUnsortedSampleCategory(); + sampleCategory = getSortedUnsortedCategory(); break; case size: - sampleCategory = getSizeSampleCategory(); + sampleCategory = getSizeCategory(); break; case sex: - sampleCategory = getSexSampleCategory(); + sampleCategory = getSexCategory(); break; case maturity: - sampleCategory = getMaturitySampleCategory(); + sampleCategory = getMaturityCategory(); break; case age: - sampleCategory = getAgeSampleCategory(); + sampleCategory = getAgeCategory(); break; default: } @@ -316,27 +309,31 @@ //-- Species category --// //------------------------------------------------------------------------// - public SampleCategory<Species> getSpeciesSampleCategory() { - return speciesSampleCategory; + public SampleCategory<Species> getSpeciesCategory() { + return speciesCategory; } - public Species getSpeciesCategory() { - return speciesSampleCategory.getCategoryValue(); + public void setSpeciesCategory(SampleCategory<Species> speciesCategory) { + Object oldCategory = getSpeciesCategory(); + Object oldValue = getSpeciesCategoryValue(); + Object oldWeight = getSpeciesCategoryWeight(); + this.speciesCategory = speciesCategory; + firePropertyChange(PROPERTY_SPECIES_CATEGORY, oldCategory, speciesCategory); + firePropertyChange(PROPERTY_SPECIES_CATEGORY_VALUE, oldValue, getSpeciesCategoryValue()); + firePropertyChange(PROPERTY_SPECIES_CATEGORY_WEIGHT, oldWeight, getSpeciesCategoryWeight()); } - public void setSpeciesCategory(Species speciesCategory) { - Object oldValue = getSpeciesCategory(); - speciesSampleCategory.setCategoryValue(speciesCategory); - firePropertyChange(PROPERTY_SPECIES_CATEGORY, oldValue, speciesCategory); + public Species getSpeciesCategoryValue() { + return speciesCategory.getCategoryValue(); } public Float getSpeciesCategoryWeight() { - return speciesSampleCategory.getCategoryWeight(); + return speciesCategory.getCategoryWeight(); } public void setSpeciesCategoryWeight(Float speciesCategoryWeight) { Object oldValue = getSpeciesCategoryWeight(); - speciesSampleCategory.setCategoryWeight(speciesCategoryWeight); + speciesCategory.setCategoryWeight(speciesCategoryWeight); firePropertyChange(PROPERTY_SPECIES_CATEGORY_WEIGHT, oldValue, speciesCategoryWeight); } @@ -344,27 +341,31 @@ //-- SortedUnsorted category --// //------------------------------------------------------------------------// - public SampleCategory<CaracteristicQualitativeValue> getSortedUnsortedSampleCategory() { - return sortedUnsortedSampleCategory; + public SampleCategory<CaracteristicQualitativeValue> getSortedUnsortedCategory() { + return sortedUnsortedCategory; } - public CaracteristicQualitativeValue getSortedUnsortedCategory() { - return sortedUnsortedSampleCategory.getCategoryValue(); + public void setSortedUnsortedCategory(SampleCategory<CaracteristicQualitativeValue> sortedUnsortedCategory) { + Object oldCategory = getSortedUnsortedCategory(); + Object oldValue = getSortedUnsortedCategoryValue(); + Object oldWeight = getSortedUnsortedCategoryWeight(); + this.sortedUnsortedCategory = sortedUnsortedCategory; + firePropertyChange(PROPERTY_SORTED_UNSORTED_CATEGORY, oldCategory, sortedUnsortedCategory); + firePropertyChange(PROPERTY_SORTED_UNSORTED_CATEGORY_VALUE, oldValue, getSortedUnsortedCategoryValue()); + firePropertyChange(PROPERTY_SORTED_UNSORTED_CATEGORY_WEIGHT, oldWeight, getSortedUnsortedCategoryWeight()); } - public void setSortedUnsortedCategory(CaracteristicQualitativeValue sortedUnsortedCategory) { - Object oldValue = getSortedUnsortedCategory(); - sortedUnsortedSampleCategory.setCategoryValue(sortedUnsortedCategory); - firePropertyChange(PROPERTY_SORTED_UNSORTED_CATEGORY, oldValue, sortedUnsortedCategory); + public CaracteristicQualitativeValue getSortedUnsortedCategoryValue() { + return sortedUnsortedCategory.getCategoryValue(); } public Float getSortedUnsortedCategoryWeight() { - return sortedUnsortedSampleCategory.getCategoryWeight(); + return sortedUnsortedCategory.getCategoryWeight(); } public void setSortedUnsortedCategoryWeight(Float sortedUnsortedCategoryWeight) { Object oldValue = getSortedUnsortedCategoryWeight(); - sortedUnsortedSampleCategory.setCategoryWeight(sortedUnsortedCategoryWeight); + sortedUnsortedCategory.setCategoryWeight(sortedUnsortedCategoryWeight); firePropertyChange(PROPERTY_SORTED_UNSORTED_CATEGORY_WEIGHT, oldValue, sortedUnsortedCategoryWeight); } @@ -372,27 +373,31 @@ //-- Size category --// //------------------------------------------------------------------------// - public SampleCategory<CaracteristicQualitativeValue> getSizeSampleCategory() { - return sizeSampleCategory; + public SampleCategory<CaracteristicQualitativeValue> getSizeCategory() { + return sizeCategory; } - public CaracteristicQualitativeValue getSizeCategory() { - return sizeSampleCategory.getCategoryValue(); + public void setSizeCategory(SampleCategory<CaracteristicQualitativeValue> sizeCategory) { + Object oldCategory = getSizeCategory(); + Object oldValue = getSizeCategoryValue(); + Object oldWeight = getSizeCategoryWeight(); + this.sizeCategory = sizeCategory; + firePropertyChange(PROPERTY_SIZE_CATEGORY, oldCategory, sizeCategory); + firePropertyChange(PROPERTY_SIZE_CATEGORY_VALUE, oldValue, getSizeCategoryValue()); + firePropertyChange(PROPERTY_SIZE_CATEGORY_WEIGHT, oldWeight, getSizeCategoryWeight()); } - public void setSizeCategory(CaracteristicQualitativeValue sizeCategory) { - Object oldValue = getSizeCategory(); - this.sizeSampleCategory.setCategoryValue(sizeCategory); - firePropertyChange(PROPERTY_SIZE_CATEGORY, oldValue, sizeCategory); + public CaracteristicQualitativeValue getSizeCategoryValue() { + return sizeCategory.getCategoryValue(); } public Float getSizeCategoryWeight() { - return sizeSampleCategory.getCategoryWeight(); + return sizeCategory.getCategoryWeight(); } public void setSizeCategoryWeight(Float sizeCategoryWeight) { Object oldValue = getSizeCategoryWeight(); - this.sizeSampleCategory.setCategoryWeight(sizeCategoryWeight); + this.sizeCategory.setCategoryWeight(sizeCategoryWeight); firePropertyChange(PROPERTY_SIZE_CATEGORY_WEIGHT, oldValue, sizeCategoryWeight); } @@ -400,27 +405,31 @@ //-- Sex category --// //------------------------------------------------------------------------// - public SampleCategory<CaracteristicQualitativeValue> getSexSampleCategory() { - return sexSampleCategory; + public SampleCategory<CaracteristicQualitativeValue> getSexCategory() { + return sexCategory; } - public CaracteristicQualitativeValue getSexCategory() { - return sexSampleCategory.getCategoryValue(); + public void setSexCategory(SampleCategory<CaracteristicQualitativeValue> sexCategory) { + Object oldCategory = getSexCategory(); + Object oldValue = getSexCategoryValue(); + Object oldWeight = getSexCategoryWeight(); + this.sexCategory = sexCategory; + firePropertyChange(PROPERTY_SEX_CATEGORY, oldCategory, sexCategory); + firePropertyChange(PROPERTY_SEX_CATEGORY_VALUE, oldValue, getSexCategoryValue()); + firePropertyChange(PROPERTY_SEX_CATEGORY_WEIGHT, oldWeight, getSexCategoryWeight()); } - public void setSexCategory(CaracteristicQualitativeValue sexCategory) { - Object oldValue = getSexCategory(); - this.sexSampleCategory.setCategoryValue(sexCategory); - firePropertyChange(PROPERTY_SEX_CATEGORY, oldValue, sexCategory); + public CaracteristicQualitativeValue getSexCategoryValue() { + return sexCategory.getCategoryValue(); } public Float getSexCategoryWeight() { - return sexSampleCategory.getCategoryWeight(); + return sexCategory.getCategoryWeight(); } public void setSexCategoryWeight(Float sexCategoryWeight) { Object oldValue = getSexCategoryWeight(); - this.sexSampleCategory.setCategoryWeight(sexCategoryWeight); + this.sexCategory.setCategoryWeight(sexCategoryWeight); firePropertyChange(PROPERTY_SEX_CATEGORY_WEIGHT, oldValue, sexCategoryWeight); } @@ -428,27 +437,31 @@ //-- Maturity category --// //------------------------------------------------------------------------// - public SampleCategory<CaracteristicQualitativeValue> getMaturitySampleCategory() { - return maturitySampleCategory; + public SampleCategory<CaracteristicQualitativeValue> getMaturityCategory() { + return maturityCategory; } - public CaracteristicQualitativeValue getMaturityCategory() { - return maturitySampleCategory.getCategoryValue(); + public void setMaturityCategory(SampleCategory<CaracteristicQualitativeValue> maturityCategory) { + Object oldCategory = getMaturityCategory(); + Object oldValue = getMaturityCategoryValue(); + Object oldWeight = getMaturityCategoryWeight(); + this.maturityCategory = maturityCategory; + firePropertyChange(PROPERTY_MATURITY_CATEGORY, oldCategory, maturityCategory); + firePropertyChange(PROPERTY_MATURITY_CATEGORY_VALUE, oldValue, getMaturityCategoryValue()); + firePropertyChange(PROPERTY_MATURITY_CATEGORY_WEIGHT, oldWeight, getMaturityCategoryWeight()); } - public void setMaturityCategory(CaracteristicQualitativeValue maturityCategory) { - Object oldValue = getMaturityCategory(); - this.maturitySampleCategory.setCategoryValue(maturityCategory); - firePropertyChange(PROPERTY_MATURITY_CATEGORY, oldValue, maturityCategory); + public CaracteristicQualitativeValue getMaturityCategoryValue() { + return maturityCategory.getCategoryValue(); } public Float getMaturityCategoryWeight() { - return maturitySampleCategory.getCategoryWeight(); + return maturityCategory.getCategoryWeight(); } public void setMaturityCategoryWeight(Float maturityCategoryWeight) { Object oldValue = getMaturityCategoryWeight(); - this.maturitySampleCategory.setCategoryWeight(maturityCategoryWeight); + this.maturityCategory.setCategoryWeight(maturityCategoryWeight); firePropertyChange(PROPERTY_MATURITY_CATEGORY_WEIGHT, oldValue, maturityCategoryWeight); } @@ -456,27 +469,32 @@ //-- Age category --// //------------------------------------------------------------------------// - public SampleCategory<Float> getAgeSampleCategory() { - return ageSampleCategory; + public SampleCategory<Float> getAgeCategory() { + return ageCategory; } - public Float getAgeCategory() { - return ageSampleCategory.getCategoryValue(); + public void setAgeCategory(SampleCategory<Float> ageCategory) { + Object oldCategory = getAgeCategory(); + Object oldValue = getAgeCategoryValue(); + Object oldWeight = getAgeCategoryWeight(); + this.ageCategory = ageCategory; + + firePropertyChange(PROPERTY_AGE_CATEGORY, oldCategory, ageCategory); + firePropertyChange(PROPERTY_AGE_CATEGORY_VALUE, oldValue, getAgeCategoryValue()); + firePropertyChange(PROPERTY_AGE_CATEGORY_WEIGHT, oldWeight, getAgeCategoryWeight()); } - public void setAgeCategory(Float ageCategory) { - Object oldValue = getAgeCategory(); - ageSampleCategory.setCategoryValue(ageCategory); - firePropertyChange(PROPERTY_AGE_CATEGORY, oldValue, ageCategory); + public Float getAgeCategoryValue() { + return ageCategory.getCategoryValue(); } public Float getAgeCategoryWeight() { - return ageSampleCategory.getCategoryWeight(); + return ageCategory.getCategoryWeight(); } public void setAgeCategoryWeight(Float ageCategoryWeight) { Object oldValue = getAgeCategoryWeight(); - ageSampleCategory.setCategoryWeight(ageCategoryWeight); + ageCategory.setCategoryWeight(ageCategoryWeight); firePropertyChange(PROPERTY_AGE_CATEGORY_WEIGHT, oldValue, ageCategoryWeight); } @@ -499,7 +517,7 @@ return batchChild; } - public void setChilds(List<SpeciesBatchRowModel> batchChild) { + public void setBatchChilds(List<SpeciesBatchRowModel> batchChild) { this.batchChild = batchChild; // force to propagate child changes firePropertyChange(PROPERTY_BATCH_CHILD, null, batchChild); Modified: trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/operation/catches/species/SpeciesBatchTableModel.java =================================================================== --- trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/operation/catches/species/SpeciesBatchTableModel.java 2013-01-02 18:51:13 UTC (rev 146) +++ trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/operation/catches/species/SpeciesBatchTableModel.java 2013-01-03 17:01:03 UTC (rev 147) @@ -85,42 +85,42 @@ } public static final ColumnIdentifier<SpeciesBatchRowModel> SPECIES_CATEGORY = SampleColumnIdentifier.newId( - SpeciesBatchRowModel.PROPERTY_SPECIES_SAMPLE_CATEGORY, + SpeciesBatchRowModel.PROPERTY_SPECIES_CATEGORY, SpeciesBatchRowModel.PROPERTY_SPECIES_CATEGORY_WEIGHT, SampleCategoryType.species, n_("tutti.table.species.batch.header.speciesCategory"), n_("tutti.table.species.batch.header.speciesCategory")); public static final ColumnIdentifier<SpeciesBatchRowModel> SORTED_UNSORTED_CATEGORY = SampleColumnIdentifier.newId( - SpeciesBatchRowModel.PROPERTY_SORTED_UNSORTED_SAMPLE_CATEGORY, + SpeciesBatchRowModel.PROPERTY_SORTED_UNSORTED_CATEGORY, SpeciesBatchRowModel.PROPERTY_SORTED_UNSORTED_CATEGORY_WEIGHT, SampleCategoryType.sortedUnsorted, n_("tutti.table.species.batch.header.sortedUnsortedCategory"), n_("tutti.table.species.batch.header.sortedUnsortedCategory")); public static final ColumnIdentifier<SpeciesBatchRowModel> SIZE_CATEGORY = SampleColumnIdentifier.newId( - SpeciesBatchRowModel.PROPERTY_SIZE_SAMPLE_CATEGORY, + SpeciesBatchRowModel.PROPERTY_SIZE_CATEGORY, SpeciesBatchRowModel.PROPERTY_SIZE_CATEGORY_WEIGHT, SampleCategoryType.size, n_("tutti.table.species.batch.header.sizeCategory"), n_("tutti.table.species.batch.header.sizeCategory")); public static final ColumnIdentifier<SpeciesBatchRowModel> SEX_CATEGORY = SampleColumnIdentifier.newId( - SpeciesBatchRowModel.PROPERTY_SEX_SAMPLE_CATEGORY, + SpeciesBatchRowModel.PROPERTY_SEX_CATEGORY, SpeciesBatchRowModel.PROPERTY_SEX_CATEGORY_WEIGHT, SampleCategoryType.sex, n_("tutti.table.species.batch.header.sexCategory"), n_("tutti.table.species.batch.header.sexCategory")); public static final ColumnIdentifier<SpeciesBatchRowModel> MATURITY_CATEGORY = SampleColumnIdentifier.newId( - SpeciesBatchRowModel.PROPERTY_MATURITY_SAMPLE_CATEGORY, + SpeciesBatchRowModel.PROPERTY_MATURITY_CATEGORY, SpeciesBatchRowModel.PROPERTY_MATURITY_CATEGORY_WEIGHT, SampleCategoryType.maturity, n_("tutti.table.species.batch.header.maturityCategory"), n_("tutti.table.species.batch.header.maturityCategory")); public static final ColumnIdentifier<SpeciesBatchRowModel> AGE_CATEGORY = SampleColumnIdentifier.newId( - SpeciesBatchRowModel.PROPERTY_AGE_SAMPLE_CATEGORY, + SpeciesBatchRowModel.PROPERTY_AGE_CATEGORY, SpeciesBatchRowModel.PROPERTY_AGE_CATEGORY_WEIGHT, SampleCategoryType.age, n_("tutti.table.species.batch.header.ageCategory"), @@ -266,7 +266,7 @@ SpeciesBatchRowModel entry = getEntry(rowIndex); // check from protocol what is possible ? - Species species = entry.getSpeciesCategory(); + Species species = entry.getSpeciesCategoryValue(); if (species == null) { Modified: trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/operation/catches/species/SpeciesBatchUI.css =================================================================== --- trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/operation/catches/species/SpeciesBatchUI.css 2013-01-02 18:51:13 UTC (rev 146) +++ trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/operation/catches/species/SpeciesBatchUI.css 2013-01-03 17:01:03 UTC (rev 147) @@ -117,6 +117,7 @@ value: "all"; selected: {model.isTableViewModeAll()}; buttonGroup: "filterSpeciesBatchMode"; + enabled: false; } #filterSpeciesBatchLeafButton { @@ -125,6 +126,7 @@ value: "leaf"; selected: {model.isTableViewModeLeaf()}; buttonGroup: "filterSpeciesBatchMode"; + enabled: false; } #filterSpeciesBatchRootButton { @@ -133,4 +135,5 @@ value: "root"; selected: {model.isTableViewModeRoot()}; buttonGroup: "filterSpeciesBatchMode"; + enabled: false; } Modified: trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/operation/catches/species/SpeciesBatchUIHandler.java =================================================================== --- trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/operation/catches/species/SpeciesBatchUIHandler.java 2013-01-02 18:51:13 UTC (rev 146) +++ trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/operation/catches/species/SpeciesBatchUIHandler.java 2013-01-03 17:01:03 UTC (rev 147) @@ -55,6 +55,7 @@ import fr.ifremer.tutti.ui.swing.util.TuttiBeanMonitor; import fr.ifremer.tutti.ui.swing.util.editor.AttachmentCellComponent; import fr.ifremer.tutti.ui.swing.util.editor.LongTextCellComponent; +import fr.ifremer.tutti.ui.swing.util.table.AbstractSelectTableAction; import fr.ifremer.tutti.ui.swing.util.table.ColumnIdentifier; import org.apache.commons.collections.CollectionUtils; import org.apache.commons.logging.Log; @@ -82,10 +83,6 @@ private static final Log log = LogFactory.getLog(SpeciesBatchUIHandler.class); - public static final Set<String> RECOMPUTE_TOTAL_WEIGHT = Sets.newHashSet( - SpeciesBatchRowModel.PROPERTY_SORTED_UNSORTED_CATEGORY, - SpeciesBatchRowModel.PROPERTY_WEIGHT); - public static final Set<String> SAMPLING_PROPERTIES = Sets.newHashSet( SpeciesBatchRowModel.PROPERTY_SAMPLE_CATEGORY, SpeciesBatchRowModel.PROPERTY_SPECIES_CATEGORY, @@ -182,7 +179,7 @@ SpeciesBatchRowModel rootRow = loadSpeciesBatch(aBatch, null, rows); - speciesUsed.add(rootRow.getSpeciesCategory()); + speciesUsed.add(rootRow.getSpeciesCategoryValue()); } availableSpecies.removeAll(speciesUsed); } @@ -209,12 +206,17 @@ @Override protected boolean isRowValid(SpeciesBatchRowModel row) { - boolean result = row.getSpeciesSampleCategory().isValid() || - row.getSortedUnsortedSampleCategory().isValid() || - row.getSizeSampleCategory().isValid() || - row.getSexSampleCategory().isValid() || - row.getMaturitySampleCategory().isValid() || - row.getAgeSampleCategory().isValid(); + + // a row is valid if species category is not empty and valid + // then if any of none empty category is valid + boolean result = !row.getSpeciesCategory().isEmpty() && + row.getSpeciesCategory().isValid(); + + result &= row.getSortedUnsortedCategory().isEmptyOrValid(); + result &= row.getSizeCategory().isEmptyOrValid(); + result &= row.getSexCategory().isEmptyOrValid(); + result &= row.getMaturityCategory().isEmptyOrValid(); + result &= row.getAgeCategory().isEmptyOrValid(); return result; } @@ -225,22 +227,14 @@ Object oldValue, Object newValue) { - if (RECOMPUTE_TOTAL_WEIGHT.contains(propertyName)) { + if (SAMPLING_PROPERTIES.contains(propertyName) || + SpeciesBatchRowModel.PROPERTY_WEIGHT.equals(propertyName)) { - // Need to recompute totalHorsVracWeight - recomputeTotalHorsVrac(); - } - - if (SAMPLING_PROPERTIES.contains(propertyName)) { - // species has changed, recompute valid property recomputeRowValidState(row); - } - if (SpeciesBatchRowModel.PROPERTY_WEIGHT.equals(propertyName)) { - - // weight has changed, recompute valid property - recomputeRowValidState(row); + // recompute the totalUnsorted weight + recomputeTotalUnsortedWeight(); } // when row valid state has changed, recompute action enabled states @@ -263,7 +257,7 @@ showInformationMessage( "[ Captures - Espèces ] " + - "Sauvegarde des modifications de " + row + "."); + "Sauvegarde des modifications de " + row + '.'); saveRow(row); @@ -272,15 +266,21 @@ } } else { - // row is not valid can not save it + //FIXME See how to delete rows ? Or moreover how to save tehem... + if (log.isWarnEnabled()) { + log.warn("Will not remove not valid speciesBatch: " + row.getId()); + } - SpeciesBatch catchBean = row.toBean(); - - if (!TuttiEntities.isNew(catchBean)) { - - // remove this - persistenceService.deleteSpeciesBatch(catchBean.getId()); - } +// // row is not valid can not save it +// +// SpeciesBatch catchBean = row.toBean(); +// +// if (!TuttiEntities.isNew(catchBean)) { +// +// // remove this +// persistenceService.deleteSpeciesBatch(catchBean.getId()); +// row.setId(null); +// } } } @@ -383,7 +383,7 @@ Species species = persistenceService.getSpecies( protocolSpecy.getSpeciesId()); allSpecies.add(species); - speciesSampleCategories.put(species,SampleCategoryType.species); + speciesSampleCategories.put(species, SampleCategoryType.species); if (protocolSpecy.isSortedUnsortedEnabled()) { speciesSampleCategories.put(species, SampleCategoryType.sortedUnsorted); @@ -417,7 +417,7 @@ // each species can use any category for (Species species : allSpecies) { - speciesSampleCategories.put(species,SampleCategoryType.species); + speciesSampleCategories.put(species, SampleCategoryType.species); speciesSampleCategories.put(species, SampleCategoryType.sortedUnsorted); speciesSampleCategories.put(species, SampleCategoryType.size); speciesSampleCategories.put(species, SampleCategoryType.sex); @@ -597,9 +597,11 @@ SpeciesBatchTableModel tableModel = getTableModel(); SpeciesBatchRowModel newRow = tableModel.createNewRow(); - newRow.setSpeciesCategory(createModel.getSpecies()); - newRow.setSpeciesCategoryWeight(createModel.getBatchWeight()); - newRow.setSampleCategory(newRow.getSpeciesSampleCategory()); + SampleCategory<Species> speciesCategory = newRow.getSpeciesCategory(); + Species species = createModel.getSpecies(); + speciesCategory.setCategoryValue(species); + speciesCategory.setCategoryWeight(createModel.getBatchWeight()); + newRow.setSampleCategory(speciesCategory); recomputeRowValidState(newRow); @@ -608,7 +610,7 @@ saveRow(newRow); // update available species list - getModel().getAvailableSpecies().remove(newRow.getSpeciesCategory()); + getModel().getAvailableSpecies().remove(species); } @@ -655,7 +657,6 @@ SampleCategoryType selectedCategory = splitModel.getSelectedCategory(); SampleCategoryEnum sampleCategoryEnum = selectedCategory.getType(); - // Create rows in batch table model List<SpeciesBatchRowModel> newBatches = Lists.newArrayList(); @@ -671,16 +672,15 @@ row.getCategoryValue(), row.getWeight()); + recomputeRowValidState(newBatch); + newBatches.add(newBatch); + tableModel.addNewRow(++insertRow, newBatch); - boolean rowValid = isRowValid(newBatch); - newBatch.setValid(rowValid); - newBatch.setBatchParent(parentBatch); - newBatches.add(newBatch); } } // add new batches to his parent - parentBatch.setChilds(newBatches); + parentBatch.setBatchChilds(newBatches); //TODO Should only save parentBatch (will persist all his childs) //saveRow(parentBatch); @@ -700,30 +700,44 @@ } public void removeSpeciesSubBatch() { - //TODO - int rowIndex = getTable().getSelectedRow(); + JXTable table = getTable(); + + int rowIndex = table.getSelectedRow(); + Preconditions.checkState(rowIndex != -1, "Cant remove sub batch if no batch selected"); SpeciesBatchRowModel parentBatch = getTableModel().getEntry(rowIndex); + Preconditions.checkState(!TuttiEntities.isNew(parentBatch), + "Can't remove sub batch if batch is not persisted"); + // collect of rows to remove from model Set<SpeciesBatchRowModel> rowToRemove = Sets.newHashSet(); + collectChilds(parentBatch, rowToRemove); // remove all rows from the model getModel().getRows().removeAll(rowToRemove); // remove childs from parent batch - parentBatch.setChilds(null); + parentBatch.setBatchChilds(null); // save parent batch (will destroy all his childs from db) - saveRow(parentBatch); + persistenceService.deleteSpeciesSubBatch(parentBatch.getId()); // refresh table from parent batch row index to the end - getTableModel().fireTableRowsUpdated(rowIndex, - getTableModel().getRowCount() - 1); + getTableModel().fireTableDataChanged(); + + // select parent batch row + AbstractSelectTableAction.doSelectCell(table, rowIndex, 0); + + if (table.isEditing()) { + + // but no edit it + table.getCellEditor().stopCellEditing(); + } } public SplitSpeciesBatchUI getSplitSpeciesBatchEditor() { @@ -786,21 +800,43 @@ protected void saveRow(SpeciesBatchRowModel row) { - SpeciesBatch catchBean = row.toBean(); - FishingOperation fishingOperation = getModel().getFishingOperation(); Preconditions.checkNotNull(fishingOperation); + SampleCategory<?> sampleCategory = row.getSampleCategory(); + Preconditions.checkNotNull(sampleCategory); + Preconditions.checkNotNull(sampleCategory.getCategoryType()); + Preconditions.checkNotNull(sampleCategory.getCategoryValue()); + Preconditions.checkNotNull(sampleCategory.getCategoryWeight()); + + SpeciesBatch catchBean = row.toBean(); catchBean.setFishingOperation(fishingOperation); - if (log.isInfoEnabled()) { - log.info("Selected fishingOperation: " + fishingOperation.getId()); - } + // apply sample category + catchBean.setSampleCategoryType(sampleCategory.getCategoryType().getType()); + catchBean.setSampleCategoryValue(sampleCategory.getCategoryValue()); + catchBean.setSampleCategoryWeight(sampleCategory.getCategoryWeight()); + if (TuttiEntities.isNew(catchBean)) { - catchBean = persistenceService.createSpeciesBatch(catchBean); + SpeciesBatchRowModel batchParent = row.getBatchParent(); + String parentBatchId = null; + + if (batchParent != null) { + parentBatchId = batchParent.getId(); + } + + if (log.isInfoEnabled()) { + log.info("Persist new species batch with parentId: " + + parentBatchId); + } + catchBean = persistenceService.createSpeciesBatch(catchBean, + parentBatchId); row.setId(catchBean.getId()); } else { + if (log.isInfoEnabled()) { + log.info("Persist existing species batch: " + catchBean.getId()); + } persistenceService.saveSpeciesBatch(catchBean); } @@ -820,7 +856,7 @@ row.setFrequency(frequencyRows); } - protected void recomputeTotalHorsVrac() { + protected void recomputeTotalUnsortedWeight() { // recompute total hors vrac Float totalHorsVrac = 0f; @@ -828,7 +864,7 @@ for (SpeciesBatchRowModel batch : getModel().getRows()) { CaracteristicQualitativeValue vracHorsVrac = - batch.getSortedUnsortedCategory(); + batch.getSortedUnsortedCategoryValue(); if (vracHorsVrac == null) { @@ -917,16 +953,6 @@ } } - protected <C extends Serializable> void addSampleCategoryColumnToModel(TableColumnModel columnModel, - ColumnIdentifier<SpeciesBatchRowModel> columnIdentifier, - Decorator<C> decorator, - TableCellRenderer defaultRenderer) { - addColumnToModel(columnModel, - SampleCategoryComponent.newEditor(decorator), - SampleCategoryComponent.newRender(defaultRenderer, decorator), - columnIdentifier); - } - protected SpeciesBatchRowModel loadSpeciesBatch(SpeciesBatch aBatch, SpeciesBatchRowModel parentRow, List<SpeciesBatchRowModel> rows) { @@ -944,54 +970,26 @@ sampleCategoryEnum, "Can't have a batch with no sample category, but was: " + aBatch); - loadBatchRow(parentRow, newRow, + loadBatchRow(parentRow, + newRow, sampleCategoryEnum, aBatch.getSampleCategoryValue(), aBatch.getSampleCategoryWeight()); -// SampleCategory sampleCategory = -// newRow.getSampleCategory(sampleCategoryEnum); -// -// // set sample category data from batch -// sampleCategory.setCategoryValue(aBatch.getSampleCategoryValue()); -// sampleCategory.setCategoryWeight(aBatch.getSampleCategoryWeight()); -// newRow.setSampleCategory(sampleCategory); -// -// if (parentRow != null) { -// -// // copy back parent data (mainly other sample categories -// -// newRow.setBatchParent(parentRow); -// if (sampleCategoryEnum != SampleCategoryEnum.species) { -// newRow.setSpeciesCategory(parentRow.getSpeciesCategory()); -// } -// if (sampleCategoryEnum != SampleCategoryEnum.sortedUnsorted) { -// newRow.setSortedUnsortedCategory(parentRow.getSortedUnsortedCategory()); -// } -// if (sampleCategoryEnum != SampleCategoryEnum.size) { -// newRow.setSizeCategory(parentRow.getSizeCategory()); -// } -// if (sampleCategoryEnum != SampleCategoryEnum.sex) { -// newRow.setSexCategory(parentRow.getSexCategory()); -// } -// if (sampleCategoryEnum != SampleCategoryEnum.maturity) { -// newRow.setMaturityCategory(parentRow.getMaturityCategory()); -// } -// if (sampleCategoryEnum != SampleCategoryEnum.age) { -// newRow.setAgeCategory(parentRow.getAgeCategory()); -// } -// } - rows.add(newRow); if (!aBatch.isChildBatchsEmpty()) { // create batch childs rows + List<SpeciesBatchRowModel> batchChilds = Lists. + newArrayListWithCapacity(aBatch.sizeChildBatchs()); + for (SpeciesBatch childBatch : aBatch.getChildBatchs()) { SpeciesBatchRowModel childRow = loadSpeciesBatch(childBatch, newRow, rows); - childRow.setBatchParent(newRow); + batchChilds.add(childRow); } + newRow.setBatchChilds(batchChilds); } return newRow; @@ -1019,8 +1017,8 @@ // copy back parent data (mainly other sample categories) newRow.setSpeciesToConfirm(parentRow.getSpeciesToConfirm()); + newRow.setBatchParent(parentRow); - newRow.setBatchParent(parentRow); if (sampleCategoryEnum != SampleCategoryEnum.species) { newRow.setSpeciesCategory(parentRow.getSpeciesCategory()); } @@ -1040,8 +1038,16 @@ newRow.setAgeCategory(parentRow.getAgeCategory()); } } + } - + protected <C extends Serializable> void addSampleCategoryColumnToModel(TableColumnModel columnModel, + ColumnIdentifier<SpeciesBatchRowModel> columnIdentifier, + Decorator<C> decorator, + TableCellRenderer defaultRenderer) { + addColumnToModel(columnModel, + SampleCategoryComponent.newEditor(decorator), + SampleCategoryComponent.newRender(defaultRenderer, decorator), + columnIdentifier); } } Modified: trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/operation/catches/species/split/SplitSpeciesBatchUIHandler.java =================================================================== --- trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/operation/catches/species/split/SplitSpeciesBatchUIHandler.java 2013-01-02 18:51:13 UTC (rev 146) +++ trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/operation/catches/species/split/SplitSpeciesBatchUIHandler.java 2013-01-03 17:01:03 UTC (rev 147) @@ -260,23 +260,23 @@ lastCategory, "Can't split a species batch with no sample category."); - if (batch.getSortedUnsortedSampleCategory().isValid()) { + if (batch.getSortedUnsortedCategory().isValid()) { categories.remove(SampleCategoryType.sortedUnsorted); } - if (batch.getSizeSampleCategory().isValid()) { + if (batch.getSizeCategory().isValid()) { categories.remove(SampleCategoryType.size); } - if (batch.getSexSampleCategory().isValid()) { + if (batch.getSexCategory().isValid()) { categories.remove(SampleCategoryType.sex); } - if (batch.getMaturitySampleCategory().isValid()) { + if (batch.getMaturityCategory().isValid()) { categories.remove(SampleCategoryType.maturity); } - if (batch.getAgeSampleCategory().isValid()) { + if (batch.getAgeCategory().isValid()) { categories.remove(SampleCategoryType.age); } } Modified: trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/operation/catches/species/split/SplitSpeciesBatchUIModel.java =================================================================== --- trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/operation/catches/species/split/SplitSpeciesBatchUIModel.java 2013-01-02 18:51:13 UTC (rev 146) +++ trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/operation/catches/species/split/SplitSpeciesBatchUIModel.java 2013-01-03 17:01:03 UTC (rev 147) @@ -107,7 +107,7 @@ } public Species getSpecies() { - return batch == null ? null : batch.getSpeciesCategory(); + return batch == null ? null : batch.getSpeciesCategoryValue(); } public List<SampleCategoryType> getCategory() { Modified: trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/util/table/AbstractTuttiTableUIHandler.java =================================================================== --- trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/util/table/AbstractTuttiTableUIHandler.java 2013-01-02 18:51:13 UTC (rev 146) +++ trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/util/table/AbstractTuttiTableUIHandler.java 2013-01-03 17:01:03 UTC (rev 147) @@ -52,8 +52,10 @@ import org.nuiton.util.decorator.Decorator; import javax.swing.JComboBox; +import javax.swing.JPopupMenu; import javax.swing.JTable; import javax.swing.ListSelectionModel; +import javax.swing.SwingUtilities; import javax.swing.border.LineBorder; import javax.swing.event.ListSelectionEvent; import javax.swing.event.ListSelectionListener; @@ -72,8 +74,6 @@ import java.util.Enumeration; import java.util.List; import java.util.Set; -import javax.swing.JPopupMenu; -import javax.swing.SwingUtilities; import static org.nuiton.i18n.I18n._; @@ -618,11 +618,11 @@ // apply it to row row.setValid(valid); } - + //------------------------------------------------------------------------// //-- Public methods --// //------------------------------------------------------------------------// - + public void autoSelectRowInTable(MouseEvent e, JPopupMenu popup) { boolean rightClick = SwingUtilities.isRightMouseButton(e); @@ -641,17 +641,34 @@ log.debug("At point [" + p + "] found Row " + rowIndex); } - // select row (could empty selection) - if (rowIndex == -1) { - source.clearSelection(); - } else { - source.setRowSelectionInterval(rowIndex, rowIndex); + boolean canContinue = true; + + if (source.isEditing()) { + + // stop editing + boolean stopEdit = source.getCellEditor().stopCellEditing(); + if (!stopEdit) { + if (log.isWarnEnabled()) { + log.warn("Could not stop edit cell..."); + } + canContinue = false; + } } - if (rightClick) { + if (canContinue) { - // on right click show popup - popup.show(source, e.getX(), e.getY()); + // select row (could empty selection) + if (rowIndex == -1) { + source.clearSelection(); + } else { + source.setRowSelectionInterval(rowIndex, rowIndex); + } + + if (rightClick) { + + // on right click show popup + popup.show(source, e.getX(), e.getY()); + } } } }