r215 - in trunk: tutti-persistence/src/main/java/fr/ifremer/tutti/persistence tutti-persistence/src/main/java/fr/ifremer/tutti/persistence/entities tutti-persistence/src/main/xmi tutti-persistence-adagio/src/main/java/fr/ifremer/tutti/persistence/service tutti-persistence-adagio/src/main/resources tutti-persistence-adagio/src/test/java/fr/ifremer/tutti/persistence/service tutti-persistence-dev/src/main/java/fr/ifremer/tutti/persistence tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/c
Author: tchemit Date: 2013-01-17 14:55:41 +0100 (Thu, 17 Jan 2013) New Revision: 215 Url: http://forge.codelutin.com/projects/tutti/repository/revisions/215 Log: refs #1920: [Persistence] Adagio Donn?\195?\169es th?\195?\169matiques - add specific vessel and gear in FishingOperation refs #1919: [Persistence] Adagio r?\195?\169f?\195?\169rentiel (keep only no calculated pmfm + improve their type (NUMERIC, TEXT or QUALITATIVE via an enum) refs #1824: [PROTOCOLE] - Gestion des param?\195?\168tres suivis par esp?\195?\168ces (review SampleCategoryEnum and add lengthStep) usage of protocole where it is possible Modified: trunk/tutti-persistence-adagio/src/main/java/fr/ifremer/tutti/persistence/service/ReferentialPersistenceServiceImpl.java trunk/tutti-persistence-adagio/src/main/resources/queries-override.hbm.xml trunk/tutti-persistence-adagio/src/test/java/fr/ifremer/tutti/persistence/service/ReferentialPersistenceServiceTest.java trunk/tutti-persistence-dev/src/main/java/fr/ifremer/tutti/persistence/TuttiPersistenceDevFixtures.java trunk/tutti-persistence/src/main/java/fr/ifremer/tutti/persistence/RessourceClassLoader.java trunk/tutti-persistence/src/main/java/fr/ifremer/tutti/persistence/entities/TuttiEntities.java trunk/tutti-persistence/src/main/xmi/tutti-persistence.properties trunk/tutti-persistence/src/main/xmi/tutti-persistence.zargo trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/operation/EditFishingOperationUIHandler.java trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/operation/EditFishingOperationUIModel.java trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/operation/FishingOperationsUIHandler.java trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/operation/FishingOperationsUIModel.java 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/frequency/SpeciesFrequencyUIHandler.java trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/protocol/EditProtocolSpeciesTableModel.java trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/protocol/EditProtocolUIHandler.java trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/protocol/EditProtocolUIModel.java trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/util/HydrologicCaracteristicUtil.java trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/util/TuttiUIUtil.java trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/util/editor/CaracteristicValueEditor.java trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/util/editor/CaracteristicValueRenderer.java Modified: trunk/tutti-persistence/src/main/java/fr/ifremer/tutti/persistence/RessourceClassLoader.java =================================================================== --- trunk/tutti-persistence/src/main/java/fr/ifremer/tutti/persistence/RessourceClassLoader.java 2013-01-17 08:21:00 UTC (rev 214) +++ trunk/tutti-persistence/src/main/java/fr/ifremer/tutti/persistence/RessourceClassLoader.java 2013-01-17 13:55:41 UTC (rev 215) @@ -99,6 +99,7 @@ "search predicate can not be null"); this.searchInDirectoriesPredicate = Predicates.and(searchInDirectoriesPredicate, predicate); } + public void setSearchInDirectoriesPredicate(Predicate<String> searchInDirectoriesPredicate) { Preconditions.checkNotNull(searchInDirectoriesPredicate, "search predicate can not be null"); @@ -109,8 +110,8 @@ public URL findResource(String name) { URL result = null; if (searchInDirectoriesPredicate.apply(name)) { - if (log.isInfoEnabled()) { - log.info("findResource [" + name + "] in [" + directories + ']'); + if (log.isDebugEnabled()) { + log.debug("findResource [" + name + "] in " + directories); } result = getLoader().findResource(name); } @@ -124,8 +125,8 @@ public Enumeration<URL> findResources(String name) throws IOException { Enumeration<URL> result = null; if (searchInDirectoriesPredicate.apply(name)) { - if (log.isInfoEnabled()) { - log.info("findResources [" + name + "] in [" + directories + ']'); + if (log.isDebugEnabled()) { + log.debug("findResources [" + name + "] in " + directories); } result = getLoader().findResources(name); } @@ -139,9 +140,9 @@ public URL getResource(String name) { URL result = null; if (searchInDirectoriesPredicate.apply(name)) { - if (log.isInfoEnabled()) { - log.info("getResource [" + name + "] in [" + - directories + ']'); + if (log.isDebugEnabled()) { + log.debug("getResource [" + name + "] in " + + directories); } result = getLoader().getResource(name); } @@ -155,8 +156,8 @@ public Enumeration<URL> getResources(String name) throws IOException { Enumeration<URL> result = null; if (searchInDirectoriesPredicate.apply(name)) { - if (log.isInfoEnabled()) { - log.info("getResources [" + name + "] in [" + directories + ']'); + if (log.isDebugEnabled()) { + log.debug("getResources [" + name + "] in " + directories); } result = getLoader().getResources(name); } Modified: trunk/tutti-persistence/src/main/java/fr/ifremer/tutti/persistence/entities/TuttiEntities.java =================================================================== --- trunk/tutti-persistence/src/main/java/fr/ifremer/tutti/persistence/entities/TuttiEntities.java 2013-01-17 08:21:00 UTC (rev 214) +++ trunk/tutti-persistence/src/main/java/fr/ifremer/tutti/persistence/entities/TuttiEntities.java 2013-01-17 13:55:41 UTC (rev 215) @@ -32,6 +32,7 @@ import com.google.common.collect.Maps; import fr.ifremer.tutti.persistence.entities.data.FishingOperationAware; import fr.ifremer.tutti.persistence.entities.referential.Caracteristic; +import fr.ifremer.tutti.persistence.entities.referential.CaracteristicType; import java.util.Collection; import java.util.Collections; @@ -167,4 +168,30 @@ } }; } + + public static CaracteristicType getType(boolean isAlpha, + boolean isQualitative) { + CaracteristicType result; + if (isAlpha) { + result = CaracteristicType.TEXT; + } else if (isQualitative) { + result = CaracteristicType.QUALITATIVE; + } else { + result = CaracteristicType.NUMBER; + } + return result; + } + + public static boolean isNumberCaracteristic(Caracteristic c) { + return CaracteristicType.NUMBER == c.getCaracteristicType(); + } + + public static boolean isTextCaracteristic(Caracteristic c) { + return CaracteristicType.TEXT == c.getCaracteristicType(); + } + + public static boolean isQualitativeCaracteristic(Caracteristic c) { + return CaracteristicType.QUALITATIVE == c.getCaracteristicType(); + } + } Modified: trunk/tutti-persistence/src/main/xmi/tutti-persistence.properties =================================================================== --- trunk/tutti-persistence/src/main/xmi/tutti-persistence.properties 2013-01-17 08:21:00 UTC (rev 214) +++ trunk/tutti-persistence/src/main/xmi/tutti-persistence.properties 2013-01-17 13:55:41 UTC (rev 215) @@ -42,5 +42,7 @@ fr.ifremer.tutti.persistence.entities.protocol.TuttiProtocol.attribute.hydrologyPmfmId.stereotype=ordered fr.ifremer.tutti.persistence.entities.protocol.TuttiProtocol.attribute.species.stereotype=ordered fr.ifremer.tutti.persistence.entities.protocol.TuttiProtocol.attribute.sampleCategoryOrder.stereotype=ordered +fr.ifremer.tutti.persistence.entities.protocol.TuttiProtocol.attribute.benthosSpeciesId.stereotype=ordered +fr.ifremer.tutti.persistence.entities.protocol.TuttiProtocol.attribute.planktonSpeciesId.stereotype=ordered fr.ifremer.tutti.persistence.entities.referential.Caracteristic.attribute.qualitativeValue.stereotype=ordered Modified: trunk/tutti-persistence/src/main/xmi/tutti-persistence.zargo =================================================================== (Binary files differ) Modified: trunk/tutti-persistence-adagio/src/main/java/fr/ifremer/tutti/persistence/service/ReferentialPersistenceServiceImpl.java =================================================================== --- trunk/tutti-persistence-adagio/src/main/java/fr/ifremer/tutti/persistence/service/ReferentialPersistenceServiceImpl.java 2013-01-17 08:21:00 UTC (rev 214) +++ trunk/tutti-persistence-adagio/src/main/java/fr/ifremer/tutti/persistence/service/ReferentialPersistenceServiceImpl.java 2013-01-17 13:55:41 UTC (rev 215) @@ -28,9 +28,11 @@ import fr.ifremer.adagio.core.dao.referential.StatusDao; import fr.ifremer.adagio.core.dao.referential.taxon.TaxonNameExtendDao; import fr.ifremer.adagio.core.dao.referential.taxon.TaxonRefTaxVO; +import fr.ifremer.tutti.persistence.entities.TuttiEntities; import fr.ifremer.tutti.persistence.entities.referential.AbstractTuttiReferentialEntity; 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; @@ -446,16 +448,19 @@ result.setMatrixName((String) source[2]); result.setFractionName((String) source[3]); result.setMethodName((String) source[4]); - result.setNumberType((Boolean) source[5]); - result.setQualitativeType((Boolean) source[6]); + CaracteristicType type = TuttiEntities.getType((Boolean) source[5], + (Boolean) source[6]); + result.setCaracteristicType(type); result.setSignifFiguresNumber((Integer) source[7]); result.setMaximumNumberDecimals((Integer) source[8]); result.setPrecision((Float) source[9]); result.setUnit((String) source[10]); setStatus((fr.ifremer.adagio.core.dao.referential.Status) source[11], result); - if (result.isQualitativeType()) { + if (TuttiEntities.isQualitativeCaracteristic(result)) { + // load qualitative values + Iterator<Object[]> sources = queryListWithStatus( "pmfmQualitativeValues", "pmfmId", IntegerType.INSTANCE, pmfmId); Modified: trunk/tutti-persistence-adagio/src/main/resources/queries-override.hbm.xml =================================================================== --- trunk/tutti-persistence-adagio/src/main/resources/queries-override.hbm.xml 2013-01-17 08:21:00 UTC (rev 214) +++ trunk/tutti-persistence-adagio/src/main/resources/queries-override.hbm.xml 2013-01-17 13:55:41 UTC (rev 215) @@ -185,6 +185,7 @@ FROM PmfmImpl p WHERE p.status.code IN (:statusValidCode, :statusTemporaryCode) + AND p.parameter.isCalculated = false AND p.id= :pmfmId ]]> <query-param name="pmfmId" type="java.lang.Integer"/> @@ -230,6 +231,7 @@ FROM PmfmImpl p WHERE p.status.code IN (:statusValidCode, :statusTemporaryCode) + AND p.parameter.isCalculated = false AND p.matrix.id= :matrixId ]]> <query-param name="matrixId" type="java.lang.Integer"/> @@ -257,6 +259,7 @@ FROM PmfmImpl p WHERE p.status.code IN (:statusValidCode, :statusTemporaryCode) + AND p.parameter.isCalculated = false AND p.parameter.parameterGroup.id= :parameterGroupId ]]> <query-param name="parameterGroupId" type="java.lang.Integer"/> Modified: trunk/tutti-persistence-adagio/src/test/java/fr/ifremer/tutti/persistence/service/ReferentialPersistenceServiceTest.java =================================================================== --- trunk/tutti-persistence-adagio/src/test/java/fr/ifremer/tutti/persistence/service/ReferentialPersistenceServiceTest.java 2013-01-17 08:21:00 UTC (rev 214) +++ trunk/tutti-persistence-adagio/src/test/java/fr/ifremer/tutti/persistence/service/ReferentialPersistenceServiceTest.java 2013-01-17 13:55:41 UTC (rev 215) @@ -284,10 +284,7 @@ @Test public void getSizeCategoryCaracteristic() { Caracteristic result = service.getSizeCategoryCaracteristic(); - Assert.assertNotNull(result); - Assert.assertTrue(result.isQualitativeType()); - Assert.assertNotNull(result.getQualitativeValue()); - Assert.assertEquals(6, result.sizeQualitativeValue()); + assertCaracteristicQualitative(result, 6); persist(Caracteristic.class, ReferentialPersistenceServiceDevImpl.CaracteristicEnum.SizeCategory.name(), result); assertCaracteristicSize(result, storage.getSizeCategoryCaracteristic()); } @@ -295,10 +292,7 @@ @Test public void getSexCaracteristic() { Caracteristic result = service.getSexCaracteristic(); - Assert.assertNotNull(result); - Assert.assertTrue(result.isQualitativeType()); - Assert.assertNotNull(result.getQualitativeValue()); - Assert.assertEquals(4, result.sizeQualitativeValue()); + assertCaracteristicQualitative(result, 4); persist(Caracteristic.class, ReferentialPersistenceServiceDevImpl.CaracteristicEnum.SexCategory.name(), result); assertCaracteristicSize(result, storage.getSexCaracteristic()); } @@ -306,10 +300,7 @@ @Test public void getSortedUnsortedCaracteristic() { Caracteristic result = service.getSortedUnsortedCaracteristic(); - Assert.assertNotNull(result); - Assert.assertTrue(result.isQualitativeType()); - Assert.assertNotNull(result.getQualitativeValue()); - Assert.assertEquals(2, result.sizeQualitativeValue()); + assertCaracteristicQualitative(result, 2); persist(Caracteristic.class, ReferentialPersistenceServiceDevImpl.CaracteristicEnum.SortedUnsortedCategory.name(), result); assertCaracteristicSize(result, storage.getSortedUnsortedCaracteristic()); } @@ -317,10 +308,7 @@ @Test public void getMaturityCaracteristic() { Caracteristic result = service.getMaturityCaracteristic(); - Assert.assertNotNull(result); - Assert.assertTrue(result.isQualitativeType()); - Assert.assertNotNull(result.getQualitativeValue()); - Assert.assertEquals(10, result.sizeQualitativeValue()); + assertCaracteristicQualitative(result, 10); persist(Caracteristic.class, ReferentialPersistenceServiceDevImpl.CaracteristicEnum.MaturityCategory.name(), result); assertCaracteristicSize(result, storage.getMaturityCaracteristic()); } @@ -328,10 +316,7 @@ @Test public void getMacroWasteCategoryCaracteristic() { Caracteristic result = service.getMacroWasteCategoryCaracteristic(); - Assert.assertNotNull(result); - Assert.assertTrue(result.isQualitativeType()); - Assert.assertNotNull(result.getQualitativeValue()); - Assert.assertEquals(10, result.sizeQualitativeValue()); + assertCaracteristicQualitative(result, 10); persist(Caracteristic.class, ReferentialPersistenceServiceDevImpl.CaracteristicEnum.MacroWasteCategory.name(), result); assertCaracteristicSize(result, storage.getMacroWasteCategoryCaracteristic()); } @@ -339,10 +324,7 @@ @Test public void getMacroWasteSizeCategoryCaracteristic() { Caracteristic result = service.getMacroWasteSizeCategoryCaracteristic(); - Assert.assertNotNull(result); - Assert.assertTrue(result.isQualitativeType()); - Assert.assertNotNull(result.getQualitativeValue()); - Assert.assertEquals(10, result.sizeQualitativeValue()); + assertCaracteristicQualitative(result, 10); persist(Caracteristic.class, ReferentialPersistenceServiceDevImpl.CaracteristicEnum.MacroWasteSizeCategory.name(), result); assertCaracteristicSize(result, storage.getMacroWasteSizeCategoryCaracteristic()); } @@ -378,11 +360,21 @@ } + protected void assertCaracteristicQualitative(Caracteristic result, int nbValues) { + Assert.assertNotNull(result); + Assert.assertNotNull(result.getCaracteristicType()); + Assert.assertTrue(TuttiEntities.isQualitativeCaracteristic(result)); + Assert.assertNotNull(result.getQualitativeValue()); + Assert.assertEquals(nbValues, result.sizeQualitativeValue()); + } + protected void assertCaracteristicSize(Caracteristic incoming, Caracteristic caracteristic) { Assert.assertNotNull(incoming); Assert.assertNotNull(caracteristic); Assert.assertEquals(incoming, caracteristic); + Assert.assertEquals(incoming.getCaracteristicType(), + caracteristic.getCaracteristicType()); Assert.assertEquals(incoming.sizeQualitativeValue(), caracteristic.sizeQualitativeValue()); } Modified: trunk/tutti-persistence-dev/src/main/java/fr/ifremer/tutti/persistence/TuttiPersistenceDevFixtures.java =================================================================== --- trunk/tutti-persistence-dev/src/main/java/fr/ifremer/tutti/persistence/TuttiPersistenceDevFixtures.java 2013-01-17 08:21:00 UTC (rev 214) +++ trunk/tutti-persistence-dev/src/main/java/fr/ifremer/tutti/persistence/TuttiPersistenceDevFixtures.java 2013-01-17 13:55:41 UTC (rev 215) @@ -29,6 +29,7 @@ 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; @@ -458,7 +459,7 @@ ca.setId(UUID.randomUUID().toString()); ca.setName(name); ca.setCategory(category); - ca.setQualitativeType(true); + ca.setCaracteristicType(CaracteristicType.QUALITATIVE); ca.setQualitativeValue(Lists.<CaracteristicQualitativeValue>newArrayList()); putInCache(Caracteristic.class, category, ca); return ca; @@ -469,7 +470,7 @@ ca.setId(UUID.randomUUID().toString()); ca.setName(name); ca.setCategory(category); - ca.setNumberType(true); + ca.setCaracteristicType(CaracteristicType.NUMBER); putInCache(Caracteristic.class, category, ca); return ca; } Modified: trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/operation/EditFishingOperationUIHandler.java =================================================================== --- trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/operation/EditFishingOperationUIHandler.java 2013-01-17 08:21:00 UTC (rev 214) +++ trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/operation/EditFishingOperationUIHandler.java 2013-01-17 13:55:41 UTC (rev 215) @@ -24,6 +24,7 @@ * #L% */ +import com.google.common.base.Preconditions; import com.google.common.collect.Lists; import fr.ifremer.tutti.persistence.entities.data.FishingOperation; import fr.ifremer.tutti.persistence.entities.data.Program; @@ -32,9 +33,7 @@ import fr.ifremer.tutti.persistence.entities.referential.Zone; import fr.ifremer.tutti.service.PersistenceService; import fr.ifremer.tutti.ui.swing.AbstractTuttiBeanUIModel; -import fr.ifremer.tutti.ui.swing.AbstractTuttiUIHandler; import fr.ifremer.tutti.ui.swing.MainUI; -import fr.ifremer.tutti.ui.swing.TuttiUIContext; import fr.ifremer.tutti.ui.swing.content.operation.fishing.environment.EnvironmentTabUI; import fr.ifremer.tutti.ui.swing.content.operation.fishing.environment.EnvironmentTabUIModel; import fr.ifremer.tutti.ui.swing.content.operation.fishing.gearshooting.GearShootingTabUI; @@ -45,20 +44,21 @@ import fr.ifremer.tutti.ui.swing.util.CustomTab; import fr.ifremer.tutti.ui.swing.util.TabHandler; import fr.ifremer.tutti.ui.swing.util.TuttiBeanMonitor; -import java.awt.BorderLayout; -import java.beans.PropertyChangeEvent; -import java.beans.PropertyChangeListener; -import java.util.List; -import javax.swing.DefaultSingleSelectionModel; -import javax.swing.JLabel; -import javax.swing.JPanel; -import javax.swing.JTabbedPane; +import fr.ifremer.tutti.ui.swing.util.TuttiUIUtil; import org.apache.commons.collections.CollectionUtils; import org.apache.commons.lang3.StringUtils; import org.apache.commons.logging.Log; import org.apache.commons.logging.LogFactory; +import javax.swing.JLabel; +import javax.swing.JPanel; +import javax.swing.JTabbedPane; +import java.awt.BorderLayout; +import java.beans.PropertyChangeEvent; +import java.beans.PropertyChangeListener; +import java.util.List; + /** * Handler for UI {@link EditFishingOperationUI}. * @@ -66,7 +66,7 @@ * @since 0.1 */ public class EditFishingOperationUIHandler extends AbstractTuttiTabContainerUIHandler<EditFishingOperationUIModel> - implements TabHandler { + implements TabHandler { /** Logger. */ private static final Log log = @@ -173,7 +173,7 @@ @Override public void afterInitUI() { - + ui.getFishingOperationValidPanel().remove( ui.getFishingOperationResetRadio()); @@ -184,10 +184,11 @@ initBeanList(ui.getSaisisseurList(), persistenceService.getAllPerson(), model.getSaisisseur()); - - String programId = context.getProgramId(); - Program program = persistenceService.getProgram(programId); + Program program = TuttiUIUtil.getProgram(ui); + Preconditions.checkNotNull(program, + "Could not find program in ui context"); + Zone zone = program.getZone(); FishingOperationLocation strata = model.getStrata(); @@ -227,21 +228,21 @@ initBeanComboBox(ui.getSubStrataComboBox(), subStratas, subStrata); initBeanComboBox(ui.getLocationComboBox(), locations, location); - + model.setEmpty(true); changeValidatorContext(model.getValidationContext(), ui.getValidator()); listenValidatorValid(ui.getValidator(), model); - + setCustomTab(0, model); listModelIsModify(model); - + //init gear shooting GearShootingTabUIModel gearShootingModel = ui.getGearShootingTabContent().getModel(); gearShootingModel.setAvailableCaracteristics(persistenceService.getAllFishingOperationGearCaracteristic()); setCustomTab(1, gearShootingModel); - + //init environment EnvironmentTabUIModel environmentModel = ui.getEnvironmentTabContent().getModel(); @@ -252,23 +253,23 @@ HydrologyTabUIModel hydrologyModel = ui.getHydrologyTabContent().getModel(); hydrologyModel.setAvailableCaracteristics(persistenceService.getAllFishingOperationHydrologicCaracteristic()); setCustomTab(3, hydrologyModel); - + MainUI main = ui.getContextValue(MainUI.class, MainUI.class.getName()); main.clearValidators(); main.registerValidator(ui.getValidator()); - + } - + @Override public void onCloseUI() { if (log.isInfoEnabled()) { log.info("closing: " + ui); } - + MainUI main = ui.getContextValue(MainUI.class, MainUI.class.getName()); main.clearValidators(); - + closeUI(ui.getGearShootingTabContent()); closeUI(ui.getEnvironmentTabContent()); closeUI(ui.getHydrologyTabContent()); @@ -293,7 +294,7 @@ } return result; } - + @Override public boolean onHideTab() { AbstractTuttiBeanUIModel model = getModel(); @@ -322,17 +323,17 @@ if (fishingOperationMonitor.wasModified()) { save(); } - + EditFishingOperationUIModel model = getModel(); model.fromBean(new FishingOperation()); - + model.setModify(false); fishingOperationMonitor.clearModified(); - + model.setEmpty(true); - + } - + public void selectFishingOperation(FishingOperation bean) { if (fishingOperationMonitor.wasModified()) { Modified: trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/operation/EditFishingOperationUIModel.java =================================================================== --- trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/operation/EditFishingOperationUIModel.java 2013-01-17 08:21:00 UTC (rev 214) +++ trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/operation/EditFishingOperationUIModel.java 2013-01-17 13:55:41 UTC (rev 215) @@ -29,7 +29,9 @@ import fr.ifremer.tutti.persistence.entities.data.Cruise; import fr.ifremer.tutti.persistence.entities.data.FishingOperation; 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.Vessel; import fr.ifremer.tutti.persistence.spatial.SexagecimalPosition; import fr.ifremer.tutti.ui.swing.AbstractTuttiBeanUIModel; import org.nuiton.util.beans.Binder; @@ -116,6 +118,10 @@ public static final String PROPERTY_SAISISSEUR = "saisisseur"; + public static final String PROPERTY_VESSEL = "vessel"; + + public static final String PROPERTY_GEAR = "gear"; + public static final String PROPERTY_VALIDATION_CONTEXT = "validationContext"; /** @@ -173,6 +179,10 @@ protected String validationContext; + protected Gear gear; + + protected Vessel vessel; + protected static Binder<EditFishingOperationUIModel, FishingOperation> toBeanBinder = BinderFactory.newBinder(EditFishingOperationUIModel.class, FishingOperation.class); @@ -385,7 +395,7 @@ calendar.setTime(gearShootingStartDate); calendar.set(Calendar.SECOND, 0); this.gearShootingStartDate = calendar.getTime(); - + } else { this.gearShootingStartDate = null; } @@ -503,7 +513,7 @@ calendar.setTime(gearShootingEndDate); calendar.set(Calendar.SECOND, 0); this.gearShootingEndDate = calendar.getTime(); - + } else { this.gearShootingEndDate = null; } @@ -583,6 +593,26 @@ firePropertyChange(PROPERTY_VALIDATION_CONTEXT, oldValue, validationContext); } + public Gear getGear() { + return gear; + } + + public void setGear(Gear gear) { + Object oldValue = getGear(); + this.gear = gear; + firePropertyChange(PROPERTY_GEAR, oldValue, gear); + } + + public Vessel getVessel() { + return vessel; + } + + public void setVessel(Vessel vessel) { + Object oldValue = getVessel(); + this.vessel = vessel; + firePropertyChange(PROPERTY_VESSEL, oldValue, vessel); + } + @Override protected FishingOperation newEntity() { return fishingOperation; Modified: trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/operation/FishingOperationsUIHandler.java =================================================================== --- trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/operation/FishingOperationsUIHandler.java 2013-01-17 08:21:00 UTC (rev 214) +++ trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/operation/FishingOperationsUIHandler.java 2013-01-17 13:55:41 UTC (rev 215) @@ -28,24 +28,23 @@ import fr.ifremer.tutti.persistence.entities.data.Cruise; import fr.ifremer.tutti.persistence.entities.data.FishingOperation; import fr.ifremer.tutti.persistence.entities.protocol.TuttiProtocol; +import fr.ifremer.tutti.persistence.entities.referential.Gear; +import fr.ifremer.tutti.persistence.entities.referential.Vessel; import fr.ifremer.tutti.service.PersistenceService; -import fr.ifremer.tutti.ui.swing.AbstractTuttiUIHandler; -import fr.ifremer.tutti.ui.swing.MainUI; import fr.ifremer.tutti.ui.swing.TuttiUI; import fr.ifremer.tutti.ui.swing.content.operation.catches.EditCatchesUIModel; import fr.ifremer.tutti.ui.swing.util.AbstractTuttiTabContainerUIHandler; -import fr.ifremer.tutti.ui.swing.util.TabHandler; +import fr.ifremer.tutti.ui.swing.util.TuttiUIUtil; import org.apache.commons.lang3.time.DateUtils; import org.apache.commons.logging.Log; import org.apache.commons.logging.LogFactory; import org.nuiton.util.decorator.Decorator; +import javax.swing.JTabbedPane; import java.beans.PropertyChangeEvent; import java.beans.PropertyChangeListener; import java.util.Date; import java.util.List; -import javax.swing.DefaultSingleSelectionModel; -import javax.swing.JTabbedPane; import static org.nuiton.i18n.I18n._; @@ -86,25 +85,31 @@ // load existing cruise Cruise cruise = persistenceService.getCruise(cruiseId); - model.setCruise(cruise); + // store it in context + TuttiUIUtil.setCruise(ui, cruise); + TuttiUIUtil.setProgram(ui, cruise.getProgram()); + +// model.setCruise(cruise); + + TuttiProtocol protocol; if (getContext().isProtocolFilled()) { // load existing protocol - TuttiProtocol protocol = - persistenceService.getProtocol(getContext().getProtocolId()); + protocol = persistenceService.getProtocol(getContext().getProtocolId()); if (log.isInfoEnabled()) { log.info("Loading existing protocol: " + protocol); } - ui.setContextValue(protocol); } else { // remove any previous existing protocol - ui.removeContextValue(TuttiProtocol.class); + protocol = null; } + TuttiUIUtil.setProtocol(ui, protocol); + List<FishingOperation> fishingOperations = persistenceService.getAllFishingOperation(cruiseId); model.setFishingOperation(fishingOperations); @@ -161,16 +166,16 @@ // when quitting ui, let's de-select fishingOperation (will save any changes) selectFishingOperation(null); - + closeUI(ui.getFishingOperationTabContent()); - closeUI(ui.getCatchesTabContent()); + closeUI(ui.getCatchesTabContent()); } @Override protected FishingOperationsUIModel getModel() { return ui.getModel(); } - + @Override protected JTabbedPane getTabPanel() { return ui.getTabPane(); @@ -179,23 +184,30 @@ public void createNewFishingOperation() { FishingOperationsUIModel model = getModel(); - + // deselect selected fishingOperation model.setSelectedFishingOperation(null); // use a new empty fishingOperation FishingOperation newFishingOperation = new FishingOperation(); - newFishingOperation.setCruise(model.getCruise()); + newFishingOperation.setCruise(TuttiUIUtil.getCruise(ui)); + //TODO Should select vessel from possible one ? + Vessel vessel = newFishingOperation.getCruise().getVessel(0); + newFishingOperation.setVessel(vessel); + + //TODO Should select gear from possible one ? + Gear gear = newFishingOperation.getCruise().getGear(0); + newFishingOperation.setGear(gear); + // by default use the current day with no time information - Date currentDate = new Date(); - currentDate = DateUtils.setHours(currentDate, 0); - currentDate = DateUtils.setMinutes(currentDate, 0); + Date currentDate = DateUtils.setMinutes( + DateUtils.setHours(new Date(), 0), 0); newFishingOperation.setDate(currentDate); newFishingOperation.setGearShootingStartDate(currentDate); newFishingOperation.setGearShootingEndDate(currentDate); - + selectFishingOperation(newFishingOperation); } @@ -226,12 +238,12 @@ // repaint tabs ui.getTabPane().repaint(); - + } else { ui.getFishingOperationTabContent().getHandler().clearFishingOperation(); } } - + public void closeCurrentFishingOperation() { ui.getFishingOperationTabContent().getHandler().selectFishingOperation(null); ui.getCatchesTabContent().getHandler().selectFishingOperation(null, ""); @@ -246,13 +258,14 @@ FishingOperation savedFishingOperation; if (create) { + savedFishingOperation = persistenceService.createFishingOperation(toSave); model.addFishingOperation(savedFishingOperation); model.setSelectedFishingOperation(savedFishingOperation); - + } else { savedFishingOperation = persistenceService.saveFishingOperation(toSave); - + // add the saved fishingOperation to fishingOperation list List<FishingOperation> data = model.getFishingOperation(); Modified: trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/operation/FishingOperationsUIModel.java =================================================================== --- trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/operation/FishingOperationsUIModel.java 2013-01-17 08:21:00 UTC (rev 214) +++ trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/operation/FishingOperationsUIModel.java 2013-01-17 13:55:41 UTC (rev 215) @@ -25,13 +25,13 @@ */ import com.google.common.collect.Lists; -import fr.ifremer.tutti.persistence.entities.data.Cruise; import fr.ifremer.tutti.persistence.entities.data.FishingOperation; -import java.util.List; import org.apache.commons.logging.Log; import org.apache.commons.logging.LogFactory; import org.jdesktop.beans.AbstractSerializableBean; +import java.util.List; + /** * Model fo UI {@link FishingOperationsUI}. * @@ -48,13 +48,13 @@ public static final String PROPERTY_SELECTED_FISHING_OPERATION = "selectedFishingOperation"; - public static final String PROPERTY_CRUISE = "cruise"; +// public static final String PROPERTY_CRUISE = "cruise"; protected List<FishingOperation> fishingOperation; protected FishingOperation selectedFishingOperation; - protected Cruise cruise; +// protected Cruise cruise; public List<FishingOperation> getFishingOperation() { return fishingOperation; @@ -71,15 +71,15 @@ this.fishingOperation.add(fishingOperation); firePropertyChange(PROPERTY_FISHING_OPERATION, oldValue, this.fishingOperation); } - + public void removeFishingOperation(FishingOperation fishingOperation) { Object oldValue = Lists.newArrayList(getFishingOperation()); this.fishingOperation.remove(fishingOperation); firePropertyChange(PROPERTY_FISHING_OPERATION, oldValue, this.fishingOperation); } - - public void updateFishingOperation(FishingOperation oldFishingOperation, - FishingOperation newFishingOperation) { + + public void updateFishingOperation(FishingOperation oldFishingOperation, + FishingOperation newFishingOperation) { int oldFishingOperationIndex = fishingOperation.indexOf(oldFishingOperation); fishingOperation.remove(oldFishingOperation); if (oldFishingOperationIndex >= 0) { @@ -89,7 +89,7 @@ } firePropertyChange(PROPERTY_FISHING_OPERATION, null, fishingOperation); } - + public FishingOperation getSelectedFishingOperation() { return selectedFishingOperation; } @@ -100,13 +100,13 @@ firePropertyChange(PROPERTY_SELECTED_FISHING_OPERATION, oldValue, selectedFishingOperation); } - public Cruise getCruise() { - return cruise; - } - - public void setCruise(Cruise cruise) { - Object oldValue = getCruise(); - this.cruise = cruise; - firePropertyChange(PROPERTY_CRUISE, oldValue, cruise); - } +// public Cruise getCruise() { +// return cruise; +// } +// +// public void setCruise(Cruise cruise) { +// Object oldValue = getCruise(); +// this.cruise = cruise; +// firePropertyChange(PROPERTY_CRUISE, oldValue, cruise); +// } } 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-17 08:21:00 UTC (rev 214) +++ trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/operation/catches/species/SpeciesBatchUIHandler.java 2013-01-17 13:55:41 UTC (rev 215) @@ -53,6 +53,7 @@ import fr.ifremer.tutti.ui.swing.content.operation.catches.species.split.SplitSpeciesBatchUI; import fr.ifremer.tutti.ui.swing.content.operation.catches.species.split.SplitSpeciesBatchUIModel; import fr.ifremer.tutti.ui.swing.util.TuttiBeanMonitor; +import fr.ifremer.tutti.ui.swing.util.TuttiUIUtil; 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; @@ -410,13 +411,44 @@ List<Species> allSpecies; - TuttiProtocol protocol = ui.getContextValue(TuttiProtocol.class); + TuttiProtocol protocol = null; + if (context.isProtocolFilled()) { + + // get loaded protocol + + protocol = TuttiUIUtil.getProtocol(ui); + Preconditions.checkNotNull(protocol, + "Could not find protocol in ui context"); + } + Multimap<Species, SampleCategoryType> speciesSampleCategories = HashMultimap.create(); - if (protocol != null) { + if (protocol == null) { + // no protocol, use default values + + samplingOrder = Lists.newArrayList( + SampleCategoryType.sortedUnsorted, + SampleCategoryType.size, + SampleCategoryType.sex, + SampleCategoryType.maturity, + SampleCategoryType.age); + + allSpecies = Lists.newArrayList( + persistenceService.getAllSpecies()); + + // each species can use any category + for (Species species : allSpecies) { + speciesSampleCategories.put(species, SampleCategoryType.sortedUnsorted); + speciesSampleCategories.put(species, SampleCategoryType.size); + speciesSampleCategories.put(species, SampleCategoryType.sex); + speciesSampleCategories.put(species, SampleCategoryType.maturity); + speciesSampleCategories.put(species, SampleCategoryType.age); + } + } else { + // fill sampling order from protocol List<SampleCategoryEnum> sampleCategoryOrder = @@ -443,28 +475,6 @@ speciesSampleCategories.put(species, SampleCategoryType.maturity); speciesSampleCategories.put(species, SampleCategoryType.age); } - } else { - - // no protocol, use default values - - samplingOrder = Lists.newArrayList( - SampleCategoryType.sortedUnsorted, - SampleCategoryType.size, - SampleCategoryType.sex, - SampleCategoryType.maturity, - SampleCategoryType.age); - - allSpecies = Lists.newArrayList( - persistenceService.getAllSpecies()); - - // each species can use any category - for (Species species : allSpecies) { - speciesSampleCategories.put(species, SampleCategoryType.sortedUnsorted); - speciesSampleCategories.put(species, SampleCategoryType.size); - speciesSampleCategories.put(species, SampleCategoryType.sex); - speciesSampleCategories.put(species, SampleCategoryType.maturity); - speciesSampleCategories.put(species, SampleCategoryType.age); - } } if (log.isInfoEnabled()) { @@ -477,7 +487,9 @@ JXTable table = getTable(); + // can show / hide some columns in model table.setColumnControlVisible(true); + // create table column model TableCellRenderer defaultRenderer = table.getDefaultRenderer(Object.class); Modified: trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/operation/catches/species/frequency/SpeciesFrequencyUIHandler.java =================================================================== --- trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/operation/catches/species/frequency/SpeciesFrequencyUIHandler.java 2013-01-17 08:21:00 UTC (rev 214) +++ trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/operation/catches/species/frequency/SpeciesFrequencyUIHandler.java 2013-01-17 13:55:41 UTC (rev 215) @@ -26,13 +26,18 @@ import com.ezware.oxbow.swingbits.util.Preconditions; import com.google.common.collect.Lists; +import fr.ifremer.tutti.persistence.entities.TuttiEntities; +import fr.ifremer.tutti.persistence.entities.protocol.SpeciesProtocol; +import fr.ifremer.tutti.persistence.entities.protocol.TuttiProtocol; import fr.ifremer.tutti.persistence.entities.referential.Caracteristic; +import fr.ifremer.tutti.persistence.entities.referential.Species; import fr.ifremer.tutti.ui.swing.TuttiUI; import fr.ifremer.tutti.ui.swing.TuttiUIContext; import fr.ifremer.tutti.ui.swing.content.operation.catches.species.SpeciesBatchRowModel; import fr.ifremer.tutti.ui.swing.content.operation.catches.species.SpeciesBatchUIHandler; import fr.ifremer.tutti.ui.swing.util.Cancelable; import fr.ifremer.tutti.ui.swing.util.TuttiBeanMonitor; +import fr.ifremer.tutti.ui.swing.util.TuttiUIUtil; import fr.ifremer.tutti.ui.swing.util.table.AbstractTuttiTableUIHandler; import jaxx.runtime.validator.swing.SwingValidatorMessageTableRenderer; import jaxx.runtime.validator.swing.SwingValidatorUtil; @@ -67,6 +72,12 @@ */ private final SpeciesFrequencyUI ui; + private TuttiProtocol protocol; + + private Map<String, SpeciesProtocol> speciesProtocol; + + private Map<String, Caracteristic> lengthSteCaracteristic; + public SpeciesFrequencyUIHandler(TuttiUIContext context, SpeciesFrequencyUI ui) { super(context, @@ -154,8 +165,20 @@ SpeciesBatchUIHandler.FREQUENCY_LENGTH_CONTEXT_ENTRY.getContextValue(ui); Preconditions.checkNotNull(lengthStepCaracterics); + lengthSteCaracteristic = TuttiEntities.splitById(lengthStepCaracterics); + SpeciesFrequencyUIModel model = getModel(); + if (context.isProtocolFilled()) { + + // get loaded protocol + protocol = TuttiUIUtil.getProtocol(ui); + Preconditions.checkNotNull(protocol, + "Could not find protocol in ui context"); + + speciesProtocol = TuttiEntities.splitById(protocol.getSpecies()); + } + //TODO Use protocol to have lengthStepCaracteristic to use (if any protocol) initBeanComboBox(ui.getLengthStepCaracteristicComboBox(), lengthStepCaracterics, @@ -352,38 +375,81 @@ public void editBatch(SpeciesBatchRowModel speciesBatch) { - List<SpeciesFrequencyRowModel> frequency = null; - Caracteristic lengthStepCaracteristic = null; - if (speciesBatch != null) { - frequency = speciesBatch.getFrequency(); - } + Float lengthStep = 1f; List<SpeciesFrequencyRowModel> editFrequency = Lists.newArrayList(); - if (frequency != null) { + if (speciesBatch != null) { - SpeciesFrequencyTableModel tableModel = getTableModel(); + List<SpeciesFrequencyRowModel> frequency = + speciesBatch.getFrequency(); - for (SpeciesFrequencyRowModel rowModel : frequency) { + // try to load existing frequency - SpeciesFrequencyRowModel newRow = tableModel.createNewRow(); - newRow.setLengthStepCaracteristic(rowModel.getLengthStepCaracteristic()); - newRow.setLengthStep(rowModel.getLengthStep()); - newRow.setNumber(rowModel.getNumber()); - newRow.setComputedWeight(rowModel.getComputedWeight()); - editFrequency.add(newRow); - } + if (frequency != null) { - if (CollectionUtils.isNotEmpty(frequency)) { - lengthStepCaracteristic = - frequency.get(0).getLengthStepCaracteristic(); + SpeciesFrequencyTableModel tableModel = getTableModel(); + + for (SpeciesFrequencyRowModel rowModel : frequency) { + + SpeciesFrequencyRowModel newRow = tableModel.createNewRow(); + newRow.setLengthStepCaracteristic(rowModel.getLengthStepCaracteristic()); + newRow.setLengthStep(rowModel.getLengthStep()); + newRow.setNumber(rowModel.getNumber()); + newRow.setComputedWeight(rowModel.getComputedWeight()); + editFrequency.add(newRow); + } + + if (CollectionUtils.isNotEmpty(frequency)) { + + // use first frequency row length step caracteristics + + SpeciesFrequencyRowModel rowModel = frequency.get(0); + lengthStepCaracteristic = rowModel.getLengthStepCaracteristic(); + lengthStep = rowModel.getLengthStep(); + + if (log.isInfoEnabled()) { + log.info("Use existing lengthStep " + + "caracteristic / step " + + decorate(lengthStepCaracteristic) + " / " + + lengthStep); + } + } + } else { + + // not frequency, guess from protocol (if any) + + if (protocol != null) { + + Species species = speciesBatch.getSpecies(); + + SpeciesProtocol sProtocol = + speciesProtocol.get(species.getId()); + + if (sProtocol != null) { + + + String lengthStepPmfmId = sProtocol.getLengthStepPmfmId(); + + lengthStepCaracteristic = + lengthSteCaracteristic.get(lengthStepPmfmId); + lengthStep = sProtocol.getLengthStep(); + + if (log.isInfoEnabled()) { + log.info("Use existing from protocol lengthStep " + + "caracteristic / step " + + decorate(lengthStepCaracteristic) + " / " + + lengthStep); + } + } + } } } - if (log.isInfoEnabled()) { - log.info("Will edit batch row: " + speciesBatch + " with " + - editFrequency.size() + " frequency"); + if (log.isDebugEnabled()) { + log.debug("Will edit batch row: " + speciesBatch + " with " + + editFrequency.size() + " frequency"); } SpeciesFrequencyUIModel model = getModel(); @@ -392,25 +458,9 @@ ui.getValidator().setBean(model); model.setRows(editFrequency); + model.setStep(lengthStep); + model.setLengthStepCaracteristic(lengthStepCaracteristic); - if (lengthStepCaracteristic == null) { - - // no lengthStep caracteristic to apply make sure it is not setted. - if (log.isInfoEnabled()) { - log.info("No lengthStepCaracteristic to set."); - } - model.setLengthStepCaracteristic(null); - } else { - - // apply existing lengthStepCaracteristic - - if (log.isInfoEnabled()) { - log.info("Use lengthStepCaracteristic: " + - lengthStepCaracteristic.getName()); - } - model.setLengthStepCaracteristic(lengthStepCaracteristic); - } - // keep batch (will be used to push back editing entry) model.setBatch(speciesBatch); } Modified: trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/protocol/EditProtocolSpeciesTableModel.java =================================================================== --- trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/protocol/EditProtocolSpeciesTableModel.java 2013-01-17 08:21:00 UTC (rev 214) +++ trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/protocol/EditProtocolSpeciesTableModel.java 2013-01-17 13:55:41 UTC (rev 215) @@ -66,23 +66,23 @@ EditProtocolSpeciesRowModel.PROPERTY_LENGTH_STEP_PMFM, n_("tutti.table.protocol.species.header.lengthStep"), n_("tutti.table.protocol.species.header.lengthStep")); - + public static final ColumnIdentifier<EditProtocolSpeciesRowModel> WEIGHT_ENABLED = ColumnIdentifier.newId( EditProtocolSpeciesRowModel.PROPERTY_WEIGHT_ENABLED, n_("tutti.table.protocol.species.header.weight"), n_("tutti.table.protocol.species.header.weight")); - + public static final ColumnIdentifier<EditProtocolSpeciesRowModel> COUNT_IF_NO_FREQUENCY_ENABLED = ColumnIdentifier.newId( EditProtocolSpeciesRowModel.PROPERTY_COUNT_IF_NO_FREQUENCY_ENABLED, n_("tutti.table.protocol.species.header.countIfNoFrequency"), n_("tutti.table.protocol.species.header.countIfNoFrequency")); - + public static final ColumnIdentifier<EditProtocolSpeciesRowModel> CALCIFY_SAMPLE_ENABLED = ColumnIdentifier.newId( EditProtocolSpeciesRowModel.PROPERTY_CALCIFY_SAMPLE_ENABLED, n_("tutti.table.protocol.species.header.calcifySample"), n_("tutti.table.protocol.species.header.calcifySample")); - + private static final long serialVersionUID = 1L; public EditProtocolSpeciesTableModel(TableColumnModel columnModel) { Modified: trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/protocol/EditProtocolUIHandler.java =================================================================== --- trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/protocol/EditProtocolUIHandler.java 2013-01-17 08:21:00 UTC (rev 214) +++ trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/protocol/EditProtocolUIHandler.java 2013-01-17 13:55:41 UTC (rev 215) @@ -29,6 +29,7 @@ import com.google.common.collect.BiMap; import com.google.common.collect.HashBiMap; import com.google.common.collect.Lists; +import com.google.common.collect.Maps; import com.google.common.collect.Multimap; import fr.ifremer.tutti.persistence.entities.TuttiEntities; import fr.ifremer.tutti.persistence.entities.data.SampleCategoryEnum; @@ -44,15 +45,6 @@ import fr.ifremer.tutti.ui.swing.util.TuttiBeanMonitor; import fr.ifremer.tutti.ui.swing.util.table.AbstractTuttiTableUIHandler; import fr.ifremer.tutti.ui.swing.util.table.ColumnIdentifier; -import java.util.Collection; -import java.util.List; -import java.util.Map; -import javax.swing.event.ChangeEvent; -import javax.swing.event.ListSelectionEvent; -import javax.swing.event.TableColumnModelEvent; -import javax.swing.event.TableColumnModelListener; -import javax.swing.table.TableColumn; -import javax.swing.table.TableColumnModel; import jaxx.runtime.swing.editor.bean.BeanDoubleList; import jaxx.runtime.validator.swing.SwingValidator; import org.apache.commons.collections.CollectionUtils; @@ -61,7 +53,17 @@ import org.jdesktop.swingx.JXTable; import org.jdesktop.swingx.table.DefaultTableColumnModelExt; +import javax.swing.event.ChangeEvent; +import javax.swing.event.ListSelectionEvent; +import javax.swing.event.TableColumnModelEvent; +import javax.swing.event.TableColumnModelListener; +import javax.swing.table.TableColumn; +import javax.swing.table.TableColumnModel; +import java.util.Collection; +import java.util.List; +import java.util.Map; + /** * TODO * @@ -98,14 +100,11 @@ public EditProtocolUIHandler(TuttiUI parentUi, EditProtocolUI ui) { super(parentUi.getHandler().getContext()); this.ui = ui; - columToSampleCategory = HashBiMap.create(SampleCategoryEnum.values().length-1); + columToSampleCategory = HashBiMap.create(SampleCategoryEnum.values().length - 1); columToSampleCategory.put(EditProtocolSpeciesTableModel.SIZE_ENABLED, SampleCategoryEnum.size); columToSampleCategory.put(EditProtocolSpeciesTableModel.SEX_ENABLED, SampleCategoryEnum.sex); columToSampleCategory.put(EditProtocolSpeciesTableModel.MATURITY_ENABLED, SampleCategoryEnum.maturity); columToSampleCategory.put(EditProtocolSpeciesTableModel.AGE_ENABLED, SampleCategoryEnum.age); - columToSampleCategory.put(EditProtocolSpeciesTableModel.WEIGHT_ENABLED, SampleCategoryEnum.weight); - columToSampleCategory.put(EditProtocolSpeciesTableModel.COUNT_IF_NO_FREQUENCY_ENABLED, SampleCategoryEnum.countIfNoFrequency); - columToSampleCategory.put(EditProtocolSpeciesTableModel.CALCIFY_SAMPLE_ENABLED, SampleCategoryEnum.calcifySample); } //------------------------------------------------------------------------// @@ -201,7 +200,7 @@ initUI(ui); EditProtocolUIModel model = getModel(); - + // load protocol if existing String protocolId = context.getProtocolId(); @@ -218,7 +217,7 @@ // load existing protocol protocol = persistenceService.getProtocol(protocolId); Boolean mustClone = ui.getContextValue(Boolean.class, MainUIHandler.CLONE_PROTOCOL); - + model.fromBean(protocol); if (mustClone != null && mustClone) { ui.setContextValue(false, MainUIHandler.CLONE_PROTOCOL); @@ -228,7 +227,7 @@ SwingValidator validator = ui.getValidator(); listenValidatorValid(validator, model); - + MainUI main = ui.getContextValue(MainUI.class, MainUI.class.getName()); main.clearValidators(); main.registerValidator(validator); @@ -249,6 +248,10 @@ getDecorator(Caracteristic.class, null), Lists.newArrayList(allLengthStepPmfm.values())); + addBooleanColumnToModel(columnModel, EditProtocolSpeciesTableModel.WEIGHT_ENABLED, table); + addBooleanColumnToModel(columnModel, EditProtocolSpeciesTableModel.COUNT_IF_NO_FREQUENCY_ENABLED, table); + addBooleanColumnToModel(columnModel, EditProtocolSpeciesTableModel.CALCIFY_SAMPLE_ENABLED, table); + Map<SampleCategoryEnum, ColumnIdentifier<EditProtocolSpeciesRowModel>> sampleCategoryToColumn = columToSampleCategory.inverse(); List<SampleCategoryEnum> sampleCategoryOrder = model.getSampleCategoryOrder(); @@ -369,13 +372,13 @@ MainUI main = ui.getContextValue(MainUI.class, MainUI.class.getName()); main.clearValidators(); } - + @Override protected void onAfterSelectedRowChanged(int oldRowIndex, EditProtocolSpeciesRowModel oldRow, int newRowIndex, EditProtocolSpeciesRowModel newRow) { - + super.onAfterSelectedRowChanged(oldRowIndex, oldRow, newRowIndex, newRow); getModel().setRemoveSpeciesEnabled(newRow != null); } @@ -416,16 +419,27 @@ } bean.setHydrologyPmfmId(allIds); - List<SampleCategoryEnum> sampleOrder = Lists.newArrayList(); + // find out sampling order + TableColumnModel columnModel = getTable().getColumnModel(); - for (int i = 0; i < columnModel.getColumnCount(); i++) { + int columnCount = columnModel.getColumnCount(); + Map<Integer, SampleCategoryEnum> sampleCategoryOrders = Maps.newTreeMap(); + + for (int i = 0; i < columnCount; i++) { + TableColumn column = columnModel.getColumn(i); - ColumnIdentifier identifier = (ColumnIdentifier) column.getIdentifier(); + ColumnIdentifier<EditProtocolSpeciesRowModel> identifier = (ColumnIdentifier<EditProtocolSpeciesRowModel>) column.getIdentifier(); SampleCategoryEnum sampleCategory = columToSampleCategory.get(identifier); if (sampleCategory != null) { - sampleOrder.add(sampleCategory); + + // found a sample category, keep it + sampleCategoryOrders.put(i, sampleCategory); } } + + List<SampleCategoryEnum> sampleOrder = + Lists.newArrayList(sampleCategoryOrders.values()); + bean.setSampleCategoryOrder(sampleOrder); TuttiProtocol saved; @@ -456,10 +470,10 @@ log.info("addRow 6"); selectFirstInCombo(ui.getSpeciesComboBox()); log.info("addRow 7"); - + // getModel().setModify(true); } - + /** Removes a species */ public void removeSpecies() { int rowIndex = getTable().getSelectedRow(); Modified: trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/protocol/EditProtocolUIModel.java =================================================================== --- trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/protocol/EditProtocolUIModel.java 2013-01-17 08:21:00 UTC (rev 214) +++ trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/protocol/EditProtocolUIModel.java 2013-01-17 13:55:41 UTC (rev 215) @@ -26,7 +26,6 @@ import com.google.common.collect.Lists; import fr.ifremer.tutti.persistence.entities.data.SampleCategoryEnum; -import fr.ifremer.tutti.persistence.entities.protocol.SpeciesProtocol; import fr.ifremer.tutti.persistence.entities.protocol.TuttiProtocol; import fr.ifremer.tutti.persistence.entities.referential.Caracteristic; import fr.ifremer.tutti.ui.swing.util.table.AbstractTuttiTableUIModel; @@ -54,7 +53,7 @@ public static final String PROPERTY_HYDROLOGY_PMFM_ID = "hydrologyPmfmId"; public static final String PROPERTY_SAMPLE_CATEGORY_ORDER = "sampleCategoryOrder"; - + public static final String PROPERTY_REMOVE_SPECIES_ENABLED = "removeSpeciesEnabled"; protected String name; @@ -72,11 +71,8 @@ SampleCategoryEnum.size, SampleCategoryEnum.sex, SampleCategoryEnum.maturity, - SampleCategoryEnum.age, - SampleCategoryEnum.weight, - SampleCategoryEnum.countIfNoFrequency, - SampleCategoryEnum.calcifySample); - + SampleCategoryEnum.age); + /** * Can user remove a selected species? * @@ -178,7 +174,7 @@ this.sampleCategoryOrder = sampleCategoryOrder; firePropertyChange(PROPERTY_SAMPLE_CATEGORY_ORDER, oldValue, sampleCategoryOrder); } - + public boolean isRemoveSpeciesEnabled() { return removeSpeciesEnabled; } Modified: trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/util/HydrologicCaracteristicUtil.java =================================================================== --- trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/util/HydrologicCaracteristicUtil.java 2013-01-17 08:21:00 UTC (rev 214) +++ trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/util/HydrologicCaracteristicUtil.java 2013-01-17 13:55:41 UTC (rev 215) @@ -26,9 +26,12 @@ */ import fr.ifremer.tutti.persistence.entities.referential.Caracteristic; +import org.nuiton.util.beans.Binder; +import org.nuiton.util.beans.BinderFactory; /** * @author kmorin <kmorin@codelutin.com> + * @author tchemit <chemit@codelutin.com> * @since 0.3 */ public class HydrologicCaracteristicUtil { @@ -39,6 +42,8 @@ AVERAGE } + protected static Binder<Caracteristic, Caracteristic> caracteristicBinder; + public static String getGlobalName(String name) { if (name.charAt(name.length() - 2) == '_') { name = name.substring(0, name.length() - 2); @@ -46,21 +51,15 @@ return name; } - public static Caracteristic createGlobalCaracteristic(String name, Caracteristic toClone) { - Caracteristic caracteristic = new Caracteristic(); - caracteristic.setName(name); - caracteristic.setId(name); - if (toClone != null) { - caracteristic.setCategory(toClone.getCategory()); - caracteristic.setPrecision(toClone.getPrecision()); - caracteristic.setMaximumNumberDecimals(toClone.getMaximumNumberDecimals()); - caracteristic.setSignifFiguresNumber(toClone.getSignifFiguresNumber()); - caracteristic.setNumberType(toClone.isNumberType()); - caracteristic.setQualitativeType(toClone.isQualitativeType()); - caracteristic.setQualitativeValue(toClone.getQualitativeValue()); - caracteristic.setUnit(toClone.getUnit()); + public static Caracteristic createGlobalCaracteristic(String name, + Caracteristic source) { + Caracteristic result = new Caracteristic(); + if (source != null) { + getCaracteristicBinder().copy(source, result); } - return caracteristic; + result.setName(name); + result.setId(name); + return result; } public static Type getTypeOfCaracteristic(Caracteristic caracteristic) { @@ -81,4 +80,12 @@ } return result; } + + protected static Binder<Caracteristic, Caracteristic> getCaracteristicBinder() { + if (caracteristicBinder == null) { + caracteristicBinder = + BinderFactory.newBinder(Caracteristic.class); + } + return caracteristicBinder; + } } Modified: trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/util/TuttiUIUtil.java =================================================================== --- trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/util/TuttiUIUtil.java 2013-01-17 08:21:00 UTC (rev 214) +++ trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/util/TuttiUIUtil.java 2013-01-17 13:55:41 UTC (rev 215) @@ -25,15 +25,13 @@ */ import com.google.common.base.Preconditions; +import fr.ifremer.tutti.persistence.entities.data.Cruise; +import fr.ifremer.tutti.persistence.entities.data.Program; +import fr.ifremer.tutti.persistence.entities.protocol.TuttiProtocol; import fr.ifremer.tutti.service.TuttiServiceTechnicalException; -import java.awt.Color; -import java.awt.Component; -import java.awt.Cursor; -import java.io.File; -import java.text.DateFormat; -import java.util.Date; -import javax.swing.JOptionPane; -import javax.swing.UIManager; +import jaxx.runtime.JAXXContext; +import jaxx.runtime.JAXXUtil; +import jaxx.runtime.context.JAXXContextEntryDef; import org.apache.commons.beanutils.PropertyUtils; import org.apache.commons.lang3.time.DurationFormatUtils; import org.apache.commons.logging.Log; @@ -42,6 +40,14 @@ import org.jdesktop.swingx.decorator.Highlighter; import org.nuiton.util.FileUtil; +import javax.swing.JOptionPane; +import javax.swing.UIManager; +import java.awt.Color; +import java.awt.Component; +import java.awt.Cursor; +import java.io.File; +import java.util.Date; + import static org.nuiton.i18n.I18n._; /** @@ -59,6 +65,54 @@ // never instanciate util class } + private static final JAXXContextEntryDef<Program> PROGRAM_ENTRY = + JAXXUtil.newContextEntryDef("loadedProgram", Program.class); + + private static final JAXXContextEntryDef<Cruise> CRUISE_ENTRY = + JAXXUtil.newContextEntryDef("loadedCruise", Cruise.class); + + private static final JAXXContextEntryDef<TuttiProtocol> PROTOCOL_ENTRY = + JAXXUtil.newContextEntryDef("loadedProtocol", TuttiProtocol.class); + + public static Program getProgram(JAXXContext context) { + return PROGRAM_ENTRY.getContextValue(context); + } + + public static Cruise getCruise(JAXXContext context) { + return CRUISE_ENTRY.getContextValue(context); + } + + public static TuttiProtocol getProtocol(JAXXContext context) { + return PROTOCOL_ENTRY.getContextValue(context); + } + + public static void setProgram(JAXXContext context, Program value) { + if (value == null) { + + PROGRAM_ENTRY.removeContextValue(context); + } else { + + PROGRAM_ENTRY.setContextValue(context, value); + } + } + + public static void setCruise(JAXXContext context, Cruise value) { + if (value == null) { + CRUISE_ENTRY.removeContextValue(context); + } else { + CRUISE_ENTRY.setContextValue(context, value); + } + } + + public static void setProtocol(JAXXContext context, TuttiProtocol value) { + if (value == null) { + + PROTOCOL_ENTRY.removeContextValue(context); + } else { + PROTOCOL_ENTRY.setContextValue(context, value); + } + } + // public static JDialog openInDialog(JComponent ui, // Frame frame, // String title, @@ -248,7 +302,7 @@ public static Highlighter newForegroundColorHighlighter(HighlightPredicate predicate, Color color) { return new TuttiColorHighlighter(predicate, color, true); } - + public static String getDuration(Date startDate, Date endDate, String format) { String duration = ""; if (startDate != null && endDate != null) { Modified: trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/util/editor/CaracteristicValueEditor.java =================================================================== --- trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/util/editor/CaracteristicValueEditor.java 2013-01-17 08:21:00 UTC (rev 214) +++ trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/util/editor/CaracteristicValueEditor.java 2013-01-17 13:55:41 UTC (rev 215) @@ -81,36 +81,55 @@ } @Override - public Component getTableCellEditorComponent(JTable table, Object value, boolean isSelected, int row, int column) { - editor = table.getDefaultEditor(Object.class); + public Component getTableCellEditorComponent(JTable table, + Object value, + boolean isSelected, + int row, + int column) { - Caracteristic caracteristic = (Caracteristic) table.getModel().getValueAt(row, caracteristicColumn); - if (caracteristic != null) { - if (caracteristic.isNumberType()) { - NumberCellEditor<Float> editor = - JAXXWidgetUtil.newNumberTableCellEditor(Float.class, false); - editor.getNumberEditor().setSelectAllTextOnError(true); - editor.getNumberEditor().getTextField().setBorder(new LineBorder(Color.GRAY, 2)); - this.editor = editor; + Caracteristic caracteristic = (Caracteristic) + table.getModel().getValueAt(row, caracteristicColumn); + if (caracteristic == null) { - } else if (caracteristic.isQualitativeType()) { - JComboBox comboBox = new JComboBox(); - comboBox.setRenderer(new DecoratorListCellRenderer(decorator)); + // can't edit a null value ? - List<CaracteristicQualitativeValue> data = caracteristic.getQualitativeValue(); - // add a null value at first position - if (!data.isEmpty() && data.get(0) != null) { - data.add(0, null); - } - SwingUtil.fillComboBox(comboBox, data, null); + } else { + switch (caracteristic.getCaracteristicType()) { - ObjectToStringConverter converter = BeanUIUtil.newDecoratedObjectToStringConverter(decorator); - BeanUIUtil.decorate(comboBox, converter); - editor = new ComboBoxCellEditor(comboBox); + case NUMBER: + // by default this is a number + NumberCellEditor<Float> editor = + JAXXWidgetUtil.newNumberTableCellEditor(Float.class, false); + editor.getNumberEditor().setSelectAllTextOnError(true); + editor.getNumberEditor().getTextField().setBorder(new LineBorder(Color.GRAY, 2)); + this.editor = editor; + break; + case QUALITATIVE: + JComboBox comboBox = new JComboBox(); + comboBox.setRenderer(new DecoratorListCellRenderer(decorator)); + + List<CaracteristicQualitativeValue> data = caracteristic.getQualitativeValue(); + // add a null value at first position + if (!data.isEmpty() && data.get(0) != null) { + data.add(0, null); + } + SwingUtil.fillComboBox(comboBox, data, null); + + ObjectToStringConverter converter = + BeanUIUtil.newDecoratedObjectToStringConverter(decorator); + BeanUIUtil.decorate(comboBox, converter); + this.editor = new ComboBoxCellEditor(comboBox); + break; + case TEXT: + // use default editor + + this.editor = table.getDefaultEditor(Object.class); + break; } } - Component result = editor.getTableCellEditorComponent(table, value, isSelected, row, column); + Component result = editor.getTableCellEditorComponent( + table, value, isSelected, row, column); return result; } Modified: trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/util/editor/CaracteristicValueRenderer.java =================================================================== --- trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/util/editor/CaracteristicValueRenderer.java 2013-01-17 08:21:00 UTC (rev 214) +++ trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/util/editor/CaracteristicValueRenderer.java 2013-01-17 13:55:41 UTC (rev 215) @@ -60,15 +60,37 @@ decorator = decoratorService.getDecoratorByType(CaracteristicQualitativeValue.class); } - public Component getTableCellRendererComponent(JTable table, Object value, boolean isSelected, boolean hasFocus, int row, int column) { - TableCellRenderer renderer = table.getDefaultRenderer(Object.class); - Caracteristic caracteristic = (Caracteristic) table.getModel().getValueAt(row, caracteristicColumn); - if (caracteristic != null) { - if (caracteristic.isQualitativeType()) { - renderer = new DecoratorTableCellRenderer(decorator); + public Component getTableCellRendererComponent(JTable table, + Object value, + boolean isSelected, + boolean hasFocus, + int row, + int column) { + TableCellRenderer renderer; + + Caracteristic caracteristic = (Caracteristic) + table.getModel().getValueAt(row, caracteristicColumn); + if (caracteristic == null) { + + // should be render a null value ? + renderer = table.getDefaultRenderer(Object.class); + + } else { + switch (caracteristic.getCaracteristicType()) { + + case QUALITATIVE: + renderer = new DecoratorTableCellRenderer(decorator); + break; + case TEXT: + case NUMBER: + default: + + // use default text renderer + renderer = table.getDefaultRenderer(Object.class); } } - Component result = renderer.getTableCellRendererComponent(table, value, isSelected, hasFocus, row, column); + Component result = renderer.getTableCellRendererComponent( + table, value, isSelected, hasFocus, row, column); return result; }
participants (1)
-
tchemit@users.forge.codelutin.com