Author: kmorin Date: 2013-03-27 19:06:07 +0100 (Wed, 27 Mar 2013) New Revision: 689 Url: http://forge.codelutin.com/projects/tutti/repository/revisions/689 Log: Java 7 power ! \o/ refs #1868 [CAPTURE] - Import/Export PUPITRI refs #1972 [ERGO] - Symbologie des onglets sans donn?\195?\169es Modified: trunk/pom.xml trunk/tutti-service/src/main/java/fr/ifremer/tutti/service/pupitri/TuttiPupitriImportExportService.java trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/operation/EditFishingOperationAction.java 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/SaveFishingOperationAction.java trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/operation/catches/EditCatchesUI.jaxx trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/operation/catches/EditCatchesUIHandler.java trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/operation/catches/EditCatchesUIModel.java trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/operation/catches/benthos/BenthosBatchUIModel.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/SpeciesBatchUIModel.java trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/operation/fishing/AbstractCaracteristicTabUIModel.java trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/util/AbstractTuttiBeanUIModel.java trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/util/AbstractTuttiTabContainerUIHandler.java trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/util/CustomTab.java Modified: trunk/pom.xml =================================================================== --- trunk/pom.xml 2013-03-27 13:59:54 UTC (rev 688) +++ trunk/pom.xml 2013-03-27 18:06:07 UTC (rev 689) @@ -118,6 +118,12 @@ <platform>forge.codelutin.com</platform> <projectId>tutti</projectId> + <!-- Java version --> + <maven.compiler.source>1.7</maven.compiler.source> + <maven.compiler.target>1.7</maven.compiler.target> + <signatureArtifactId>java17</signatureArtifactId> + <signatureVersion>1.0</signatureVersion> + <!-- libraries version --> <nuitonUtilsVersion>2.6.12</nuitonUtilsVersion> @@ -166,7 +172,7 @@ <!-- Last tutti db version --> <!--<dbVersion>2013.02.27</dbVersion>--> - + </properties> <dependencyManagement> Modified: trunk/tutti-service/src/main/java/fr/ifremer/tutti/service/pupitri/TuttiPupitriImportExportService.java =================================================================== --- trunk/tutti-service/src/main/java/fr/ifremer/tutti/service/pupitri/TuttiPupitriImportExportService.java 2013-03-27 13:59:54 UTC (rev 688) +++ trunk/tutti-service/src/main/java/fr/ifremer/tutti/service/pupitri/TuttiPupitriImportExportService.java 2013-03-27 18:06:07 UTC (rev 689) @@ -130,7 +130,7 @@ addFileAsAttachment(trunkFile, catchBatch); addFileAsAttachment(carrouselFile, catchBatch); addFileAsAttachment(speciesFile, catchBatch); - + persistenceService.saveCatchBatch(catchBatch); } @@ -394,7 +394,7 @@ childBatch.setSampleCategoryValue(splitCqv); childBatch.setSpecies(pupitriCatch.getSpecies()); childBatch.setSampleCategoryWeight(pupitriCatch.getWeightBySign().get(s)); - + persistenceService.createSpeciesBatch(childBatch, batch.getId()); } } @@ -405,7 +405,7 @@ reader.close(); } catch (Exception e) { - throw new TuttiTechnicalException("Could not import protocol [" + operation.toString() + "] caracteristic from file " + carrouselFile, e); + throw new TuttiTechnicalException("Could not import carrousel data [" + operation.toString() + "] from file " + carrouselFile, e); } finally { IOUtils.closeQuietly(carrouselImporter); Modified: trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/operation/EditFishingOperationAction.java =================================================================== --- trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/operation/EditFishingOperationAction.java 2013-03-27 13:59:54 UTC (rev 688) +++ trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/operation/EditFishingOperationAction.java 2013-03-27 18:06:07 UTC (rev 689) @@ -435,9 +435,6 @@ List<Person> saisisseur = editFishingOperationUIModel.getRecorderPerson(); ui.getRecorderPersonList().getHandler().setSelected(saisisseur); - // update model empty property - editFishingOperationUIModel.setEmpty(false); - //reset gear use feature tab GearUseFeatureTabUI gearUseFeatureTabContent = ui.getGearUseFeatureTabContent(); gearUseFeatureTabContent.getHandler().reset(bean); 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-03-27 13:59:54 UTC (rev 688) +++ trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/operation/EditFishingOperationUIHandler.java 2013-03-27 18:06:07 UTC (rev 689) @@ -288,8 +288,6 @@ initBeanFilterableComboBox(ui.getLocationComboBox(), locations, location); - model.setEmpty(true); - changeValidatorContext(model.getValidationContext(), ui.getValidator()); listenValidatorValid(ui.getValidator(), model); 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-03-27 13:59:54 UTC (rev 688) +++ trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/operation/EditFishingOperationUIModel.java 2013-03-27 18:06:07 UTC (rev 689) @@ -36,9 +36,12 @@ import fr.ifremer.tutti.persistence.entities.referential.Vessel; import fr.ifremer.tutti.persistence.spatial.SexagecimalPosition; import fr.ifremer.tutti.ui.swing.util.AbstractTuttiBeanUIModel; +import fr.ifremer.tutti.ui.swing.util.TabContentModel; import fr.ifremer.tutti.ui.swing.util.TuttiUIUtil; import fr.ifremer.tutti.ui.swing.util.attachment.AttachmentModelAware; import fr.ifremer.tutti.ui.swing.util.editor.CoordinateEditorType; +import org.apache.commons.collections.CollectionUtils; +import org.apache.commons.lang3.StringUtils; import org.nuiton.util.DateUtil; import org.nuiton.util.beans.Binder; import org.nuiton.util.beans.BinderFactory; @@ -56,7 +59,8 @@ * @author tchemit <chemit@codelutin.com> * @since 0.1 */ -public class EditFishingOperationUIModel extends AbstractTuttiBeanUIModel<FishingOperation, EditFishingOperationUIModel> implements AttachmentModelAware { +public class EditFishingOperationUIModel extends AbstractTuttiBeanUIModel<FishingOperation, EditFishingOperationUIModel> + implements AttachmentModelAware, TabContentModel { private static final long serialVersionUID = 1L; @@ -64,8 +68,6 @@ public static final String PROPERTY_PERSISTED = "persisted"; - public static final String PROPERTY_EMPTY = "empty"; - public static final String PROPERTY_STATION_NUMBER = "stationNumber"; public static final String PROPERTY_FISHING_OPERATION_NUMBER = "fishingOperationNumber"; @@ -140,13 +142,6 @@ public static final String PROPERTY_VALIDATION_CONTEXT = "validationContext"; - /** - * Flag when there is no fishing operation selected. - * - * @since 0.2 - */ - protected boolean empty; - protected Cruise cruise; protected String stationNumber; @@ -225,6 +220,31 @@ return TITLE; } + @Override + public String getIcon() { + return null; + } + + public boolean isEmpty() { + return StringUtils.isEmpty(stationNumber) + && fishingOperationNumber == null + && strata == null + && subStrata == null + && location == null + && gearShootingStartLatitudeAsSexagecimal.isNull() + && gearShootingStartLongitudeAsSexagecimal.isNull() + && gearShootingStartDate == null + && gearShootingEndLatitudeAsSexagecimal.isNull() + && gearShootingEndLongitudeAsSexagecimal.isNull() + && gearShootingEndDate == null + && recorderPerson == null + && gear == null + && StringUtils.isEmpty(comment) + && CollectionUtils.isEmpty(getAttachment()); + + // TODO add the otehr ones + } + public FishingOperation getFishingOperation() { return fishingOperation; } @@ -238,16 +258,6 @@ return fishingOperation != null && !TuttiEntities.isNew(fishingOperation); } - public boolean isEmpty() { - return empty; - } - - public void setEmpty(boolean empty) { - Object oldValue = isEmpty(); - this.empty = empty; - firePropertyChange(PROPERTY_EMPTY, oldValue, empty); - } - public Cruise getCruise() { return cruise; } @@ -839,16 +849,16 @@ public void convertGearShootingCoordinatesDMSToDD() { Float decimalValue = gearShootingStartLatitudeAsSexagecimal.toDecimal(); - setGearShootingStartLatitude(decimalValue); + gearShootingStartLatitude = decimalValue; decimalValue = gearShootingStartLongitudeAsSexagecimal.toDecimal(); - setGearShootingStartLongitude(decimalValue); + gearShootingStartLongitude = decimalValue; decimalValue = gearShootingEndLatitudeAsSexagecimal.toDecimal(); - setGearShootingEndLatitude(decimalValue); + gearShootingEndLatitude = decimalValue; decimalValue = gearShootingEndLongitudeAsSexagecimal.toDecimal(); - setGearShootingEndLongitude(decimalValue); + gearShootingEndLongitude = decimalValue; } public void computeDistance() { Modified: trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/operation/SaveFishingOperationAction.java =================================================================== --- trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/operation/SaveFishingOperationAction.java 2013-03-27 13:59:54 UTC (rev 688) +++ trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/operation/SaveFishingOperationAction.java 2013-03-27 18:06:07 UTC (rev 689) @@ -83,8 +83,8 @@ EditFishingOperationUIModel beanToSave = monitor.getBean(); // must save when bean is new or was modifiy and is valid - boolean mustSave = (beanToSave.isCreate() || !beanToSave.isEmpty()) && - beanToSave.isValid(); + boolean mustSave = beanToSave.getFishingOperation() != null + && beanToSave.isValid(); if (mustSave) { Modified: trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/operation/catches/EditCatchesUI.jaxx =================================================================== --- trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/operation/catches/EditCatchesUI.jaxx 2013-03-27 13:59:54 UTC (rev 688) +++ trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/operation/catches/EditCatchesUI.jaxx 2013-03-27 18:06:07 UTC (rev 689) @@ -297,7 +297,7 @@ </JScrollPane> </JXTitledPanel> </tab> - <tab id='speciesTab' title='tutti.label.tab.species'> + <tab id='speciesTab'> <JPanel id='speciesTabPanel'> <JXTitledPanel id='speciesTabFishingOperationReminderLabel' constraints='EditCatchesUIHandler.MAIN_CARD'> @@ -320,7 +320,7 @@ </JXTitledPanel> </JPanel> </tab> - <tab id='benthosTab' title='tutti.label.tab.benthos'> + <tab id='benthosTab'> <JPanel id='benthosTabPanel'> <JXTitledPanel id='benthosTabFishingOperationReminderLabel' constraints='EditCatchesUIHandler.MAIN_CARD'> Modified: trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/operation/catches/EditCatchesUIHandler.java =================================================================== --- trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/operation/catches/EditCatchesUIHandler.java 2013-03-27 13:59:54 UTC (rev 688) +++ trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/operation/catches/EditCatchesUIHandler.java 2013-03-27 18:06:07 UTC (rev 689) @@ -114,6 +114,8 @@ listenValidatorValid(getValidator(), model); setCustomTab(0, model); + setCustomTab(1, ui.getSpeciesTabContent().getModel()); + setCustomTab(2, ui.getBenthosTabContent().getModel()); getParentUi().getFishingOperationTabContent().getModel() .addPropertyChangeListener(EditFishingOperationUIModel.PROPERTY_VESSEL, new PropertyChangeListener() { Modified: trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/operation/catches/EditCatchesUIModel.java =================================================================== --- trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/operation/catches/EditCatchesUIModel.java 2013-03-27 13:59:54 UTC (rev 688) +++ trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/operation/catches/EditCatchesUIModel.java 2013-03-27 18:06:07 UTC (rev 689) @@ -34,8 +34,10 @@ import fr.ifremer.tutti.persistence.entities.referential.CaracteristicQualitativeValue; import fr.ifremer.tutti.persistence.entities.referential.Species; import fr.ifremer.tutti.ui.swing.util.AbstractTuttiBeanUIModel; +import fr.ifremer.tutti.ui.swing.util.TabContentModel; import fr.ifremer.tutti.ui.swing.util.TuttiComputedOrNotData; import fr.ifremer.tutti.ui.swing.util.attachment.AttachmentModelAware; +import org.apache.commons.collections.CollectionUtils; import org.nuiton.util.beans.Binder; import org.nuiton.util.beans.BinderFactory; @@ -50,7 +52,7 @@ * @author tchemit <chemit@codelutin.com> * @since 0.3 */ -public class EditCatchesUIModel extends AbstractTuttiBeanUIModel<CatchBatch, EditCatchesUIModel> implements AttachmentModelAware { +public class EditCatchesUIModel extends AbstractTuttiBeanUIModel<CatchBatch, EditCatchesUIModel> implements AttachmentModelAware, TabContentModel { private static final long serialVersionUID = 1L; @@ -662,4 +664,16 @@ return catchBatch; } + @Override + public boolean isEmpty() { + return getCatchTotalWeight() == null + && getCatchTotalRejectedWeight() == null + && CollectionUtils.isEmpty(getAttachment()); + } + + @Override + public String getIcon() { + return null; + } + } Modified: trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/operation/catches/benthos/BenthosBatchUIModel.java =================================================================== --- trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/operation/catches/benthos/BenthosBatchUIModel.java 2013-03-27 13:59:54 UTC (rev 688) +++ trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/operation/catches/benthos/BenthosBatchUIModel.java 2013-03-27 18:06:07 UTC (rev 689) @@ -33,8 +33,10 @@ import fr.ifremer.tutti.ui.swing.content.operation.AbstractTuttiBatchUIModel; import fr.ifremer.tutti.ui.swing.content.operation.catches.EditCatchesUIModel; import fr.ifremer.tutti.ui.swing.content.operation.catches.TableViewMode; +import fr.ifremer.tutti.ui.swing.util.TabContentModel; import fr.ifremer.tutti.ui.swing.util.TuttiComputedOrNotData; import fr.ifremer.tutti.ui.swing.util.attachment.AttachmentModelAware; +import org.apache.commons.collections.CollectionUtils; import java.util.Collection; import java.util.List; @@ -43,7 +45,8 @@ * @author tchemit <chemit@codelutin.com> * @since 0.1 */ -public class BenthosBatchUIModel extends AbstractTuttiBatchUIModel<BenthosBatchRowModel, BenthosBatchUIModel> implements AttachmentModelAware { +public class BenthosBatchUIModel extends AbstractTuttiBatchUIModel<BenthosBatchRowModel, BenthosBatchUIModel> + implements AttachmentModelAware, TabContentModel { private static final long serialVersionUID = 1L; @@ -382,4 +385,22 @@ firePropertyChange(PROPERTY_ATTACHMENT, null, getAttachment()); } + @Override + public boolean isEmpty() { + return CollectionUtils.isEmpty(getRows()) + && getBenthosTotalSortedWeight() == null + && getBenthosTotalInertWeight() == null + && getBenthosTotalLivingNotItemizedWeight() == null + && CollectionUtils.isEmpty(getAttachment()); + } + + @Override + public String getTitle() { + return "tutti.label.tab.benthos"; + } + + @Override + public String getIcon() { + return null; + } } 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-03-27 13:59:54 UTC (rev 688) +++ trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/operation/catches/species/SpeciesBatchUIHandler.java 2013-03-27 18:06:07 UTC (rev 689) @@ -50,6 +50,7 @@ import fr.ifremer.tutti.ui.swing.content.operation.catches.species.frequency.SpeciesFrequencyRowModel; import fr.ifremer.tutti.ui.swing.content.operation.catches.species.split.SplitSpeciesBatchRowModel; import fr.ifremer.tutti.ui.swing.content.operation.catches.species.split.SplitSpeciesBatchUI; +import fr.ifremer.tutti.ui.swing.util.TabHandler; import fr.ifremer.tutti.ui.swing.util.TuttiBeanMonitor; import fr.ifremer.tutti.ui.swing.util.TuttiUI; import fr.ifremer.tutti.ui.swing.util.TuttiUIUtil; @@ -1101,5 +1102,4 @@ return model.getSelectedSpecies(); } - } Modified: trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/operation/catches/species/SpeciesBatchUIModel.java =================================================================== --- trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/operation/catches/species/SpeciesBatchUIModel.java 2013-03-27 13:59:54 UTC (rev 688) +++ trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/operation/catches/species/SpeciesBatchUIModel.java 2013-03-27 18:06:07 UTC (rev 689) @@ -33,8 +33,10 @@ import fr.ifremer.tutti.ui.swing.content.operation.AbstractTuttiBatchUIModel; import fr.ifremer.tutti.ui.swing.content.operation.catches.EditCatchesUIModel; import fr.ifremer.tutti.ui.swing.content.operation.catches.TableViewMode; +import fr.ifremer.tutti.ui.swing.util.TabContentModel; import fr.ifremer.tutti.ui.swing.util.TuttiComputedOrNotData; import fr.ifremer.tutti.ui.swing.util.attachment.AttachmentModelAware; +import org.apache.commons.collections.CollectionUtils; import java.util.Collection; import java.util.List; @@ -43,7 +45,8 @@ * @author tchemit <chemit@codelutin.com> * @since 0.1 */ -public class SpeciesBatchUIModel extends AbstractTuttiBatchUIModel<SpeciesBatchRowModel, SpeciesBatchUIModel> implements AttachmentModelAware { +public class SpeciesBatchUIModel extends AbstractTuttiBatchUIModel<SpeciesBatchRowModel, SpeciesBatchUIModel> + implements AttachmentModelAware, TabContentModel { private static final long serialVersionUID = 1L; @@ -382,4 +385,22 @@ firePropertyChange(PROPERTY_ATTACHMENT, null, getAttachment()); } + @Override + public boolean isEmpty() { + return CollectionUtils.isEmpty(getRows()) + && getSpeciesTotalSortedWeight() == null + && getSpeciesTotalInertWeight() == null + && getSpeciesTotalLivingNotItemizedWeight() == null + && CollectionUtils.isEmpty(getAttachment()); + } + + @Override + public String getTitle() { + return "tutti.label.tab.species"; + } + + @Override + public String getIcon() { + return null; + } } Modified: trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/operation/fishing/AbstractCaracteristicTabUIModel.java =================================================================== --- trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/operation/fishing/AbstractCaracteristicTabUIModel.java 2013-03-27 13:59:54 UTC (rev 688) +++ trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/operation/fishing/AbstractCaracteristicTabUIModel.java 2013-03-27 18:06:07 UTC (rev 689) @@ -25,21 +25,27 @@ * #L% */ +import com.google.common.collect.Lists; +import com.google.common.collect.Sets; import fr.ifremer.tutti.persistence.entities.CaracteristicMap; import fr.ifremer.tutti.persistence.entities.data.FishingOperation; import fr.ifremer.tutti.persistence.entities.referential.Caracteristic; import fr.ifremer.tutti.ui.swing.util.AbstractTuttiBeanUIModel; +import fr.ifremer.tutti.ui.swing.util.TabContentModel; import fr.ifremer.tutti.ui.swing.util.table.AbstractTuttiTableUIModel; import java.io.Serializable; import java.util.List; +import java.util.Set; +import org.apache.commons.collections.CollectionUtils; + /** * @author kmorin <kmorin@codelutin.com> * @since 1.0 */ public abstract class AbstractCaracteristicTabUIModel<RM extends AbstractTuttiBeanUIModel<Serializable, RM>, M extends AbstractCaracteristicTabUIModel<RM, M>> - extends AbstractTuttiTableUIModel<FishingOperation, RM, M> { + extends AbstractTuttiTableUIModel<FishingOperation, RM, M> implements TabContentModel { public static final String PROPERTY_CARACTERISTIC_MAP = "caracteristicMap"; @@ -98,4 +104,21 @@ this.removeCaracteristicEnabled = removeCaracteristicEnabled; firePropertyChange(PROPERTY_REMOVE_CARACTERISTIC_ENABLED, oldValue, removeCaracteristicEnabled); } + + @Override + public boolean isEmpty() { + boolean result = caracteristicMap == null; + if (!result) { + Set s = Sets.newHashSet(caracteristicMap.values()); + s.remove(null); + result = s.isEmpty(); + } + return result; + } + + @Override + public String getIcon() { + return null; + } + } Modified: trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/util/AbstractTuttiBeanUIModel.java =================================================================== --- trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/util/AbstractTuttiBeanUIModel.java 2013-03-27 13:59:54 UTC (rev 688) +++ trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/util/AbstractTuttiBeanUIModel.java 2013-03-27 18:06:07 UTC (rev 689) @@ -96,14 +96,6 @@ firePropertyChange(PROPERTY_ID, oldValue, id); } - public String getTitle() { - return null; - } - - public String getIcon() { - return null; - } - public boolean isModify() { return modify; } Modified: trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/util/AbstractTuttiTabContainerUIHandler.java =================================================================== --- trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/util/AbstractTuttiTabContainerUIHandler.java 2013-03-27 13:59:54 UTC (rev 688) +++ trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/util/AbstractTuttiTabContainerUIHandler.java 2013-03-27 18:06:07 UTC (rev 689) @@ -125,7 +125,7 @@ * @param index * @param model */ - protected void setCustomTab(int index, AbstractTuttiBeanUIModel model) { + protected void setCustomTab(int index, TabContentModel model) { getTabPanel().setTabComponentAt(index, new CustomTab(model)); } } Modified: trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/util/CustomTab.java =================================================================== --- trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/util/CustomTab.java 2013-03-27 13:59:54 UTC (rev 688) +++ trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/util/CustomTab.java 2013-03-27 18:06:07 UTC (rev 689) @@ -30,8 +30,16 @@ import javax.swing.JLabel; import javax.swing.JPanel; import java.awt.Color; +import java.awt.Font; import java.beans.PropertyChangeEvent; import java.beans.PropertyChangeListener; +import java.lang.reflect.InvocationTargetException; +import javax.swing.UIManager; +import jaxx.runtime.JAXXUtil; +import org.apache.commons.beanutils.MethodUtils; +import org.apache.commons.logging.Log; +import org.apache.commons.logging.LogFactory; +import org.nuiton.util.beans.BeanUtil; import static org.nuiton.i18n.I18n._; @@ -46,31 +54,37 @@ private static final long serialVersionUID = 1L; - protected AbstractTuttiBeanUIModel model; + private static final Log log = LogFactory.getLog(CustomTab.class); + protected TabContentModel model; + protected JLabel title = new JLabel(); - public AbstractTuttiBeanUIModel getModel() { + public TabContentModel getModel() { return model; } - public CustomTab(AbstractTuttiBeanUIModel model) { + public CustomTab(TabContentModel model) { this.model = model; - this.model.addPropertyChangeListener(AbstractTuttiBeanUIModel.PROPERTY_MODIFY, new PropertyChangeListener() { + try { + BeanUtil.addPropertyChangeListener( + new PropertyChangeListener() { - public void propertyChange(PropertyChangeEvent evt) { - Boolean modified = (Boolean) evt.getNewValue(); - String title = _(CustomTab.this.model.getTitle()); - if (modified) { - title = "<html><strong>" + title + "*</strong></html>"; - } - CustomTab.this.title.setText(title); - } - }); + @Override + public void propertyChange(PropertyChangeEvent evt) { + updateTitle(); + } + },this.model); + + } catch (NoSuchMethodException + | IllegalAccessException + | InvocationTargetException ex) { + log.error("Error while adding the listener to the model modifications", ex); + } setBackground(null); - title.setText(_(model.getTitle())); + updateTitle(); String actionIcon = model.getIcon(); if (actionIcon != null) { title.setIcon(SwingUtil.createActionIcon(actionIcon)); @@ -95,4 +109,24 @@ } } + protected void updateTitle() { + Font f = UIManager.getDefaults().getFont("Label.font"); + String titleValue = _(model.getTitle()); + + int style; + if (model.isModify()) { + style = Font.BOLD; + titleValue += "*"; + + } else if (model.isEmpty()) { + style = Font.ITALIC; + + } else { + style = Font.PLAIN; + } + + title.setText(titleValue); + title.setFont(f.deriveFont(style)); + } + }