r1160 - in trunk: tutti-persistence tutti-persistence/src/main/java/fr/ifremer/tutti tutti-persistence/src/main/java/fr/ifremer/tutti/persistence tutti-persistence/src/main/java/fr/ifremer/tutti/persistence/entities/protocol tutti-persistence/src/main/java/fr/ifremer/tutti/persistence/service tutti-persistence/src/main/resources/i18n tutti-service/src/main/java/fr/ifremer/tutti/service tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swi
Author: tchemit Date: 2013-07-27 23:21:41 +0200 (Sat, 27 Jul 2013) New Revision: 1160 Url: http://forge.codelutin.com/projects/tutti/repository/revisions/1160 Log: reformat code improve action common code refs #2889: [TECH] - Prise en compte de nouvelles cat?\195?\169gories dans l'applicatif (check a edit/clone/import protocol) Added: trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/category/ trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/category/EditSampleCategoryModelRowModel.java trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/category/EditSampleCategoryModelTableModel.java trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/category/EditSampleCategoryModelUI.css trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/category/EditSampleCategoryModelUI.jaxx trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/category/EditSampleCategoryModelUIHandler.java trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/category/EditSampleCategoryModelUIModel.java trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/category/SaveSampleCategoryModelAction.java trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/util/attachment/SaveAttachmentAction.java Removed: trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/config/EditSampleCategoryModelRowModel.java trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/config/EditSampleCategoryModelTableModel.java trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/config/EditSampleCategoryModelUI.css trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/config/EditSampleCategoryModelUI.jaxx trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/config/EditSampleCategoryModelUIHandler.java trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/config/EditSampleCategoryModelUIModel.java trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/config/SaveSampleCategoryModelAction.java Modified: trunk/tutti-persistence/pom.xml trunk/tutti-persistence/src/main/java/fr/ifremer/tutti/TuttiIOUtil.java trunk/tutti-persistence/src/main/java/fr/ifremer/tutti/persistence/TuttiPersistenceImpl.java trunk/tutti-persistence/src/main/java/fr/ifremer/tutti/persistence/entities/protocol/TuttiProtocols.java trunk/tutti-persistence/src/main/java/fr/ifremer/tutti/persistence/service/AttachmentPersistenceServiceImpl.java trunk/tutti-persistence/src/main/java/fr/ifremer/tutti/persistence/service/ReferentialPersistenceService.java trunk/tutti-persistence/src/main/java/fr/ifremer/tutti/persistence/service/ReferentialPersistenceServiceImpl.java trunk/tutti-persistence/src/main/resources/i18n/tutti-persistence_fr_FR.properties trunk/tutti-service/src/main/java/fr/ifremer/tutti/service/PersistenceService.java trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/TuttiUIContext.java trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/EditSampleCategoryModelAction.java trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/ImportTemporaryReferentialAction.java trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/MainUIHandler.java trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/cruise/ExportCruiseValidationMessagesAction.java trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/cruise/ExportOperationValidationMessagesAction.java trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/db/ExportAndCleanDbAction.java trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/db/ExportDbAction.java trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/db/ImportDbAction.java trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/home/CloneProtocolAction.java trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/home/DeleteProtocolAction.java trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/home/EditProtocolAction.java trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/home/ExportCruiseAction.java trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/home/ExportCruiseForSumatraAction.java trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/home/ExportProgramAction.java trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/home/ExportProtocolAction.java trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/home/ImportProtocolAction.java trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/home/SendCruiseReportAction.java trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/operation/AbstractTuttiBatchUIModel.java trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/operation/DeleteFishingOperationAction.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/FishingOperationsUIHandler.java trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/operation/catches/AbstractExportMultiPostAction.java trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/operation/catches/AbstractImportMultiPostAction.java trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/operation/catches/benthos/ImportMultiPostAction.java trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/operation/catches/benthos/create/CreateBenthosBatchUIHandler.java trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/operation/catches/benthos/frequency/BenthosFrequencyCellComponent.java trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/operation/catches/benthos/frequency/BenthosFrequencyUI.jaxx trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/operation/catches/species/frequency/SpeciesFrequencyCellComponent.java trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/operation/catches/species/frequency/SpeciesFrequencyUI.jaxx trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/protocol/EditProtocolUI.css 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/content/protocol/ExportAllCaracteristicAction.java trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/protocol/ExportProtocolBenthosAction.java trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/protocol/ExportProtocolCaracteristicAction.java trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/protocol/ExportProtocolSpeciesAction.java trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/protocol/ExportPupitriAction.java trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/protocol/ImportProtocolBenthosAction.java trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/protocol/ImportProtocolCaracteristicAction.java trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/protocol/ImportProtocolSpeciesAction.java trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/referential/ExportTemporaryGearExampleAction.java trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/referential/ExportTemporaryPersonExampleAction.java trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/referential/ExportTemporarySpeciesExampleAction.java trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/referential/ExportTemporaryVesselExampleAction.java trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/referential/ImportTemporaryGearAction.java trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/referential/ImportTemporaryPersonAction.java trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/referential/ImportTemporarySpeciesAction.java trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/referential/ImportTemporaryVesselAction.java trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/util/AbstractTuttiUIHandler.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/action/AbstractTuttiAction.java trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/util/attachment/AttachmentEditorUIHandler.java 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/MoveToNextEditableRowAction.java trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/util/table/MoveToPreviousEditableCellAction.java trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/util/table/MoveToPreviousEditableRowAction.java trunk/tutti-ui-swing/src/main/resources/i18n/tutti-ui-swing_en_GB.properties trunk/tutti-ui-swing/src/main/resources/i18n/tutti-ui-swing_fr_FR.properties Modified: trunk/tutti-persistence/pom.xml =================================================================== --- trunk/tutti-persistence/pom.xml 2013-07-27 14:13:54 UTC (rev 1159) +++ trunk/tutti-persistence/pom.xml 2013-07-27 21:21:41 UTC (rev 1160) @@ -56,6 +56,11 @@ <dependency> <groupId>org.nuiton</groupId> + <artifactId>nuiton-decorator</artifactId> + </dependency> + + <dependency> + <groupId>org.nuiton</groupId> <artifactId>nuiton-updater</artifactId> </dependency> Modified: trunk/tutti-persistence/src/main/java/fr/ifremer/tutti/TuttiIOUtil.java =================================================================== --- trunk/tutti-persistence/src/main/java/fr/ifremer/tutti/TuttiIOUtil.java 2013-07-27 14:13:54 UTC (rev 1159) +++ trunk/tutti-persistence/src/main/java/fr/ifremer/tutti/TuttiIOUtil.java 2013-07-27 21:21:41 UTC (rev 1160) @@ -168,14 +168,18 @@ } } - public static File addExtensionIfMissing(File file, String extension) { - if (!file.getName().endsWith(extension)) { - file = new File(file.getParentFile(), file.getName() + extension); - } - return file; +// public static File addExtensionIfMissing(File file, String extension) { +// if (!file.getName().endsWith(extension)) { +// file = new File(file.getParentFile(), file.getName() + extension); +// } +// return file; +// } + + public static String getBaseName(String file) { + return FilenameUtils.getBaseName(file); } - public static String getExtension(File file) { - return FilenameUtils.getExtension(file.getName()); + public static String getExtension(String file) { + return FilenameUtils.getExtension(file); } } Modified: trunk/tutti-persistence/src/main/java/fr/ifremer/tutti/persistence/TuttiPersistenceImpl.java =================================================================== --- trunk/tutti-persistence/src/main/java/fr/ifremer/tutti/persistence/TuttiPersistenceImpl.java 2013-07-27 14:13:54 UTC (rev 1159) +++ trunk/tutti-persistence/src/main/java/fr/ifremer/tutti/persistence/TuttiPersistenceImpl.java 2013-07-27 21:21:41 UTC (rev 1160) @@ -301,6 +301,11 @@ } @Override + public List<Caracteristic> getAllCaracteristicForSampleCategory() { + return referentialService.getAllCaracteristicForSampleCategory(); + } + + @Override public List<Caracteristic> getAllNumericCaracteristic() { return referentialService.getAllNumericCaracteristic(); } Modified: trunk/tutti-persistence/src/main/java/fr/ifremer/tutti/persistence/entities/protocol/TuttiProtocols.java =================================================================== --- trunk/tutti-persistence/src/main/java/fr/ifremer/tutti/persistence/entities/protocol/TuttiProtocols.java 2013-07-27 14:13:54 UTC (rev 1159) +++ trunk/tutti-persistence/src/main/java/fr/ifremer/tutti/persistence/entities/protocol/TuttiProtocols.java 2013-07-27 21:21:41 UTC (rev 1160) @@ -28,22 +28,29 @@ import com.esotericsoftware.yamlbeans.YamlReader; import com.esotericsoftware.yamlbeans.YamlWriter; import com.google.common.base.Charsets; +import com.google.common.base.Joiner; import com.google.common.collect.Lists; import com.google.common.io.Files; import fr.ifremer.tutti.TuttiTechnicalException; +import fr.ifremer.tutti.persistence.TuttiPersistence; import fr.ifremer.tutti.persistence.entities.TuttiBeanFactory; import fr.ifremer.tutti.persistence.entities.data.BenthosBatch; import fr.ifremer.tutti.persistence.entities.data.BenthosBatchFrequency; +import fr.ifremer.tutti.persistence.entities.data.SampleCategoryModel; import fr.ifremer.tutti.persistence.entities.data.SpeciesBatch; import fr.ifremer.tutti.persistence.entities.data.SpeciesBatchFrequency; import fr.ifremer.tutti.persistence.entities.protocol.v1.SpeciesProtocol1; import fr.ifremer.tutti.persistence.entities.protocol.v1.SpeciesProtocolBean1; import fr.ifremer.tutti.persistence.entities.protocol.v1.TuttiProtocol1; import fr.ifremer.tutti.persistence.entities.protocol.v1.TuttiProtocolBean1; +import fr.ifremer.tutti.persistence.entities.referential.Caracteristic; import fr.ifremer.tutti.persistence.entities.referential.Species; import fr.ifremer.tutti.persistence.service.TuttiEnumerationFile; import org.apache.commons.collections.CollectionUtils; import org.apache.commons.io.IOUtils; +import org.apache.commons.logging.Log; +import org.apache.commons.logging.LogFactory; +import org.nuiton.decorator.Decorator; import org.nuiton.util.beans.Binder; import org.nuiton.util.beans.BinderFactory; @@ -51,6 +58,7 @@ import java.io.File; import java.io.Reader; import java.util.List; +import java.util.Set; import static org.nuiton.i18n.I18n._; @@ -62,6 +70,9 @@ */ public class TuttiProtocols { + /** Logger. */ + private static final Log log = LogFactory.getLog(TuttiProtocols.class); + public static void toFile(TuttiProtocol protocol, File file) { String id = protocol.getId(); @@ -142,6 +153,71 @@ } } + public static void checkSampleCategories(SampleCategoryModel sampleCategoryModel, + TuttiProtocol protocol, + Set<Integer> badCategories) { + + if (CollectionUtils.isNotEmpty(protocol.getSpecies())) { + for (SpeciesProtocol entry : protocol.getSpecies()) { + List<Integer> mandatorySampleCategoryId = entry.getMandatorySampleCategoryId(); + for (Integer categoryId : mandatorySampleCategoryId) { + if (!sampleCategoryModel.containsCategoryId(categoryId)) { + badCategories.add(categoryId); + } + } + } + } + if (CollectionUtils.isNotEmpty(protocol.getBenthos())) { + for (SpeciesProtocol entry : protocol.getBenthos()) { + List<Integer> mandatorySampleCategoryId = entry.getMandatorySampleCategoryId(); + for (Integer categoryId : mandatorySampleCategoryId) { + if (!sampleCategoryModel.containsCategoryId(categoryId)) { + badCategories.add(categoryId); + } + } + } + } + } + + public static void removeBadCategories(SampleCategoryModel sampleCategoryModel, TuttiProtocol protocol) { + List<Integer> samplingOrder = sampleCategoryModel.getSamplingOrder(); + if (!protocol.isSpeciesEmpty()) { + + for (SpeciesProtocol entry : protocol.getSpecies()) { + entry.getMandatorySampleCategoryId().retainAll(samplingOrder); + } + } + + if (!protocol.isBenthosEmpty()) { + + for (SpeciesProtocol entry : protocol.getBenthos()) { + entry.getMandatorySampleCategoryId().retainAll(samplingOrder); + } + } + } + + public static String getBadCategoriesMessage(Set<Integer> badCategories, + Decorator<Caracteristic> decorator, + TuttiPersistence persistenceService) { + List<String> badCategoriesStr = Lists.newArrayList(); + + for (Integer id : badCategories) { + String caracteristicStr; + try { + Caracteristic caracteristic = persistenceService.getCaracteristic(id); + caracteristicStr = decorator.toString(caracteristic); + } catch (NullPointerException e) { + if (log.isWarnEnabled()) { + log.warn("Could not find caracteristic with id: " + id); + } + caracteristicStr = _("tutti.common.caracteristic.notFound"); + } + badCategoriesStr.add("<li>" + id + " : " + caracteristicStr + "</li>"); + } + String message = _("tutti.common.protocol.categories.not.compatible", Joiner.on("").join(badCategoriesStr)); + return message; + } + protected static TuttiProtocol fromTuttiProtocol1(TuttiEnumerationFile enumeration, TuttiProtocol1 tuttiProtocol1) { TuttiProtocol result = TuttiBeanFactory.newTuttiProtocol(); Binder<TuttiProtocol1, TuttiProtocol> binder = BinderFactory.newBinder(TuttiProtocol1.class, TuttiProtocol.class); Modified: trunk/tutti-persistence/src/main/java/fr/ifremer/tutti/persistence/service/AttachmentPersistenceServiceImpl.java =================================================================== --- trunk/tutti-persistence/src/main/java/fr/ifremer/tutti/persistence/service/AttachmentPersistenceServiceImpl.java 2013-07-27 14:13:54 UTC (rev 1159) +++ trunk/tutti-persistence/src/main/java/fr/ifremer/tutti/persistence/service/AttachmentPersistenceServiceImpl.java 2013-07-27 21:21:41 UTC (rev 1160) @@ -166,7 +166,7 @@ measurementFile.getObjectType().getCode(), measurementFile.getObjectId(), measurementFile.getId(), - TuttiIOUtil.getExtension(file)); + TuttiIOUtil.getExtension(file.getName())); // store the path attachment.setPath(filePath); Modified: trunk/tutti-persistence/src/main/java/fr/ifremer/tutti/persistence/service/ReferentialPersistenceService.java =================================================================== --- trunk/tutti-persistence/src/main/java/fr/ifremer/tutti/persistence/service/ReferentialPersistenceService.java 2013-07-27 14:13:54 UTC (rev 1159) +++ trunk/tutti-persistence/src/main/java/fr/ifremer/tutti/persistence/service/ReferentialPersistenceService.java 2013-07-27 21:21:41 UTC (rev 1160) @@ -27,6 +27,7 @@ import fr.ifremer.tutti.persistence.TuttiPersistenceServiceImplementor; import fr.ifremer.tutti.persistence.entities.data.Cruise; import fr.ifremer.tutti.persistence.entities.data.Program; +import fr.ifremer.tutti.persistence.entities.data.SampleCategoryModel; import fr.ifremer.tutti.persistence.entities.referential.Caracteristic; import fr.ifremer.tutti.persistence.entities.referential.Gear; import fr.ifremer.tutti.persistence.entities.referential.ObjectType; @@ -204,6 +205,12 @@ List<Caracteristic> getAllCaracteristicWithProtected(); /** + * @return all caracteristics of the system useable for {@link SampleCategoryModel}. + * @since 2.5 + */ + List<Caracteristic> getAllCaracteristicForSampleCategory(); + + /** * @return all numeric caracteristics of the system. * @since 1.0.2 */ Modified: trunk/tutti-persistence/src/main/java/fr/ifremer/tutti/persistence/service/ReferentialPersistenceServiceImpl.java =================================================================== --- trunk/tutti-persistence/src/main/java/fr/ifremer/tutti/persistence/service/ReferentialPersistenceServiceImpl.java 2013-07-27 14:13:54 UTC (rev 1159) +++ trunk/tutti-persistence/src/main/java/fr/ifremer/tutti/persistence/service/ReferentialPersistenceServiceImpl.java 2013-07-27 21:21:41 UTC (rev 1160) @@ -25,6 +25,7 @@ */ import com.google.common.base.Preconditions; +import com.google.common.collect.Iterables; import com.google.common.collect.Lists; import fr.ifremer.adagio.core.dao.administration.user.PersonExtendDao; import fr.ifremer.adagio.core.dao.data.vessel.VesselExtendDao; @@ -472,6 +473,14 @@ return getAllCaracteristics(true); } + @Override + public List<Caracteristic> getAllCaracteristicForSampleCategory() { + List<Caracteristic> allCaracteristicWithProtected = thisService.getAllCaracteristicWithProtected(); + List<Caracteristic> result = Lists.newArrayList( + Iterables.filter(allCaracteristicWithProtected, TuttiEntities.newSampleCategoryModelPredicate())); + return result; + } + protected List<Caracteristic> getAllCaracteristics(boolean withProtected) { Iterator<Object[]> sources = queryListWithStatus( "allPmfm", Modified: trunk/tutti-persistence/src/main/resources/i18n/tutti-persistence_fr_FR.properties =================================================================== --- trunk/tutti-persistence/src/main/resources/i18n/tutti-persistence_fr_FR.properties 2013-07-27 14:13:54 UTC (rev 1159) +++ trunk/tutti-persistence/src/main/resources/i18n/tutti-persistence_fr_FR.properties 2013-07-27 21:21:41 UTC (rev 1160) @@ -1,4 +1,6 @@ nuitonutil.error.no.convertor= +tutti.common.caracteristic.notFound=Caractéristique inconnue +tutti.common.protocol.categories.not.compatible=Le protocole utilise des catégories non connues par la configuration des catégorisations \: <ul>%s</ul> tutti.config.option.persistence.SampleCategoryModel.description=Configuration des catégories d'échantillonnage tutti.config.option.persistence.db.attachment.directory.description=Répertoire où sont stockées les pièces-jointes tutti.config.option.persistence.db.cache.directory.description=Répertoire où sont stockées les caches de persistance 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-07-27 14:13:54 UTC (rev 1159) +++ trunk/tutti-service/src/main/java/fr/ifremer/tutti/service/PersistenceService.java 2013-07-27 21:21:41 UTC (rev 1160) @@ -25,15 +25,12 @@ */ import com.google.common.base.Preconditions; -import com.google.common.collect.Iterables; -import com.google.common.collect.Lists; import fr.ifremer.tutti.TuttiBusinessException; import fr.ifremer.tutti.TuttiIOUtil; import fr.ifremer.tutti.persistence.InvalidBatchModelException; import fr.ifremer.tutti.persistence.TuttiPersistence; import fr.ifremer.tutti.persistence.TuttiPersistenceNoDbImpl; import fr.ifremer.tutti.persistence.config.TuttiPersistenceConfig; -import fr.ifremer.tutti.persistence.entities.TuttiEntities; import fr.ifremer.tutti.persistence.entities.data.AccidentalBatch; import fr.ifremer.tutti.persistence.entities.data.AttachementObjectTypeEnum; import fr.ifremer.tutti.persistence.entities.data.Attachment; @@ -353,10 +350,7 @@ @Override public List<Caracteristic> getAllCaracteristicForSampleCategory() { - List<Caracteristic> allCaracteristicWithProtected = driver.getAllCaracteristicWithProtected(); - List<Caracteristic> result = Lists.newArrayList( - Iterables.filter(allCaracteristicWithProtected, TuttiEntities.newSampleCategoryModelPredicate())); - return result; + return driver.getAllCaracteristicForSampleCategory(); } @Override Modified: trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/TuttiUIContext.java =================================================================== --- trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/TuttiUIContext.java 2013-07-27 14:13:54 UTC (rev 1159) +++ trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/TuttiUIContext.java 2013-07-27 21:21:41 UTC (rev 1160) @@ -816,7 +816,7 @@ resolvedUri = new URI(resolvedUri.toString() + "#" + fragment); } if (log.isInfoEnabled()) { - log.info("help uri = "+resolvedUri); + log.info("help uri = " + resolvedUri); } TuttiUIUtil.openLink(resolvedUri); } catch (URISyntaxException e) { Modified: trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/EditSampleCategoryModelAction.java =================================================================== --- trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/EditSampleCategoryModelAction.java 2013-07-27 14:13:54 UTC (rev 1159) +++ trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/EditSampleCategoryModelAction.java 2013-07-27 21:21:41 UTC (rev 1160) @@ -25,7 +25,6 @@ */ import fr.ifremer.tutti.ui.swing.TuttiScreen; -import fr.ifremer.tutti.ui.swing.util.TuttiUIUtil; import static org.nuiton.i18n.I18n._; @@ -45,9 +44,7 @@ protected boolean prepareAction() throws Exception { boolean result = super.prepareAction(); if (result) { - result = TuttiUIUtil.askAdminPassword( - getContext().getActionUI(), - getConfig(), + result = askAdminPassword( _("tutti.editSampleCategoryModel.passwordDialog.message"), _("tutti.editSampleCategoryModel.passwordDialog.title"), _("tutti.editSampleCategoryModel.passwordDialog.error.message"), Modified: trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/ImportTemporaryReferentialAction.java =================================================================== --- trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/ImportTemporaryReferentialAction.java 2013-07-27 14:13:54 UTC (rev 1159) +++ trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/ImportTemporaryReferentialAction.java 2013-07-27 21:21:41 UTC (rev 1160) @@ -25,7 +25,6 @@ */ import fr.ifremer.tutti.ui.swing.TuttiScreen; -import fr.ifremer.tutti.ui.swing.util.TuttiUIUtil; import javax.swing.SwingUtilities; @@ -47,9 +46,7 @@ protected boolean prepareAction() throws Exception { boolean result = super.prepareAction(); if (result) { - result = TuttiUIUtil.askAdminPassword( - getContext().getActionUI(), - getConfig(), + result = askAdminPassword( _("tutti.manageTemporaryReferential.passwordDialog.message"), _("tutti.manageTemporaryReferential.passwordDialog.title"), _("tutti.manageTemporaryReferential.passwordDialog.error.message"), Modified: trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/MainUIHandler.java =================================================================== --- trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/MainUIHandler.java 2013-07-27 14:13:54 UTC (rev 1159) +++ trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/MainUIHandler.java 2013-07-27 21:21:41 UTC (rev 1160) @@ -33,7 +33,7 @@ import fr.ifremer.tutti.ui.swing.TuttiScreen; import fr.ifremer.tutti.ui.swing.TuttiUIContext; import fr.ifremer.tutti.ui.swing.config.TuttiApplicationConfig; -import fr.ifremer.tutti.ui.swing.content.config.EditSampleCategoryModelUI; +import fr.ifremer.tutti.ui.swing.content.category.EditSampleCategoryModelUI; import fr.ifremer.tutti.ui.swing.content.config.TuttiConfigUI; import fr.ifremer.tutti.ui.swing.content.cruise.EditCruiseUI; import fr.ifremer.tutti.ui.swing.content.cruise.EditCruiseUIHandler; @@ -55,6 +55,7 @@ import fr.ifremer.tutti.ui.swing.util.action.TuttiActionHelper; import fr.ifremer.tutti.ui.swing.util.action.TuttiActionUI; import fr.ifremer.tutti.ui.swing.util.action.TuttiUIAction; +import jaxx.runtime.JAXXBinding; import jaxx.runtime.SwingUtil; import jaxx.runtime.swing.session.SwingSession; import jaxx.runtime.validator.swing.SwingValidator; @@ -69,6 +70,8 @@ import javax.swing.JToolBar; import java.awt.Cursor; import java.beans.PropertyChangeEvent; +import java.beans.PropertyChangeListener; +import java.beans.PropertyChangeListenerProxy; import java.net.URL; import java.util.Locale; @@ -236,11 +239,31 @@ context.setScreen(null); context.removeMessageNotifier(this); - TuttiUIUtil.closeBean(context); + // clean context + PropertyChangeListener[] propertyChangeListeners = + context.getPropertyChangeListeners(); + for (PropertyChangeListener listener : propertyChangeListeners) { + if (listener instanceof PropertyChangeListenerProxy) { + PropertyChangeListenerProxy proxy = (PropertyChangeListenerProxy) listener; + listener = proxy.getListener(); + } + if (listener instanceof RemoveablePropertyChangeListener) { + if (log.isDebugEnabled()) { + log.debug("Remove listener: " + listener); + } + context.removePropertyChangeListener(listener); + } + } + if (ui != null) { - TuttiUIUtil.closeUI(ui); + // clean ui + + JAXXBinding[] bindings = ui.getDataBindings(); + for (JAXXBinding binding : bindings) { + SwingUtil.removeDataBinding(ui, binding.getId()); + } ui.setVisible(false); ui.dispose(); } Copied: trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/category/EditSampleCategoryModelRowModel.java (from rev 1158, trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/config/EditSampleCategoryModelRowModel.java) =================================================================== --- trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/category/EditSampleCategoryModelRowModel.java (rev 0) +++ trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/category/EditSampleCategoryModelRowModel.java 2013-07-27 21:21:41 UTC (rev 1160) @@ -0,0 +1,99 @@ +package fr.ifremer.tutti.ui.swing.content.category; + +/* + * #%L + * Tutti :: UI + * $Id$ + * $HeadURL$ + * %% + * Copyright (C) 2012 - 2013 Ifremer + * %% + * This program is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License as + * published by the Free Software Foundation, either version 3 of the + * License, or (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public + * License along with this program. If not, see + * <http://www.gnu.org/licenses/gpl-3.0.html>. + * #L% + */ + +import fr.ifremer.tutti.persistence.entities.data.SampleCategoryModelEntry; +import fr.ifremer.tutti.persistence.entities.referential.Caracteristic; +import fr.ifremer.tutti.ui.swing.util.AbstractTuttiBeanUIModel; +import org.nuiton.util.beans.Binder; +import org.nuiton.util.beans.BinderFactory; + +/** + * TODO + * + * @author tchemit <chemit@codelutin.com> + * @since TODO + */ +public class EditSampleCategoryModelRowModel extends AbstractTuttiBeanUIModel<SampleCategoryModelEntry, EditSampleCategoryModelRowModel> { + + private static final long serialVersionUID = 1L; + + public static final String PROPERTY_LABEL = "label"; + + public static final String PROPERTY_CARACTERISTIC = "caracteristic"; + + protected final SampleCategoryModelEntry editObject = new SampleCategoryModelEntry(); + + protected static final Binder<SampleCategoryModelEntry, EditSampleCategoryModelRowModel> fromBeanBinder = + BinderFactory.newBinder(SampleCategoryModelEntry.class, + EditSampleCategoryModelRowModel.class); + + protected static final Binder<EditSampleCategoryModelRowModel, SampleCategoryModelEntry> toBeanBinder = + BinderFactory.newBinder(EditSampleCategoryModelRowModel.class, + SampleCategoryModelEntry.class); + + public EditSampleCategoryModelRowModel() { + super(SampleCategoryModelEntry.class, fromBeanBinder, toBeanBinder); + } + + public EditSampleCategoryModelRowModel(SampleCategoryModelEntry entry) { + this(); + fromBean(entry); + } + + @Override + protected SampleCategoryModelEntry newEntity() { + return new SampleCategoryModelEntry(); + } + + //------------------------------------------------------------------------// + //-- SampleCategoryModelEntry delegate --// + //------------------------------------------------------------------------// + + public String getLabel() { + return editObject.getLabel(); + } + + public void setLabel(String label) { + String oldValue = getLabel(); + editObject.setLabel(label); + firePropertyChange(PROPERTY_LABEL, oldValue, label); + } + + public Integer getCategoryId() { + return editObject.getCategoryId(); + } + + public Caracteristic getCaracteristic() { + return editObject.getCaracteristic(); + } + + public void setCaracteristic(Caracteristic caracteristic) { + Caracteristic oldValue = getCaracteristic(); + editObject.setCaracteristic(caracteristic); + editObject.setCategoryId(caracteristic.getIdAsInt()); + firePropertyChange(PROPERTY_CARACTERISTIC, oldValue, caracteristic); + } +} Copied: trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/category/EditSampleCategoryModelTableModel.java (from rev 1158, trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/config/EditSampleCategoryModelTableModel.java) =================================================================== --- trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/category/EditSampleCategoryModelTableModel.java (rev 0) +++ trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/category/EditSampleCategoryModelTableModel.java 2013-07-27 21:21:41 UTC (rev 1160) @@ -0,0 +1,79 @@ +package fr.ifremer.tutti.ui.swing.content.category; + +/* + * #%L + * Tutti :: UI + * $Id$ + * $HeadURL$ + * %% + * Copyright (C) 2012 - 2013 Ifremer + * %% + * This program is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License as + * published by the Free Software Foundation, either version 3 of the + * License, or (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public + * License along with this program. If not, see + * <http://www.gnu.org/licenses/gpl-3.0.html>. + * #L% + */ + +import fr.ifremer.tutti.persistence.entities.data.SampleCategoryModelEntry; +import fr.ifremer.tutti.ui.swing.content.category.EditSampleCategoryModelRowModel; +import fr.ifremer.tutti.ui.swing.util.table.AbstractTuttiTableModel; +import fr.ifremer.tutti.ui.swing.util.table.ColumnIdentifier; +import org.jdesktop.swingx.table.TableColumnModelExt; + +import static org.nuiton.i18n.I18n.n_; + +/** + * Model of table of {@link SampleCategoryModelEntry}. + * + * @author tchemit <chemit@codelutin.com> + * @since 2.5 + */ +public class EditSampleCategoryModelTableModel extends AbstractTuttiTableModel<EditSampleCategoryModelRowModel> { + + private static final long serialVersionUID = 1L; + + public static final ColumnIdentifier<EditSampleCategoryModelRowModel> CARACTERISTIC = ColumnIdentifier.newId( + EditSampleCategoryModelRowModel.PROPERTY_CARACTERISTIC, + n_("tutti.editSampleCategoryModel.table.header.caracteristic"), + n_("tutti.editSampleCategoryModel.table.header.caracteristic.tip")); + + public static final ColumnIdentifier<EditSampleCategoryModelRowModel> LABEL = ColumnIdentifier.newId( + EditSampleCategoryModelRowModel.PROPERTY_LABEL, + n_("tutti.editSampleCategoryModel.table.header.label"), + n_("tutti.editSampleCategoryModel.table.header.label.tip")); + + public EditSampleCategoryModelTableModel(TableColumnModelExt columnModel) { + super(columnModel, false, false); + + setNoneEditableCols(CARACTERISTIC); + } + + @Override + public EditSampleCategoryModelRowModel createNewRow() { + EditSampleCategoryModelRowModel result = + new EditSampleCategoryModelRowModel(); + + // by default empty row is not valid + result.setValid(false); + return result; + } + + public void permuteEntry(int firstRow, int lastRow) { + EditSampleCategoryModelRowModel firstR = getRows().get(firstRow); + + getRows().remove(firstRow); + getRows().add(lastRow, firstR); + + fireTableRowsUpdated(firstRow, lastRow); + } +} Copied: trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/category/EditSampleCategoryModelUI.css (from rev 1158, trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/config/EditSampleCategoryModelUI.css) =================================================================== --- trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/category/EditSampleCategoryModelUI.css (rev 0) +++ trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/category/EditSampleCategoryModelUI.css 2013-07-27 21:21:41 UTC (rev 1160) @@ -0,0 +1,95 @@ +/* + * #%L + * Tutti :: UI + * $Id$ + * $HeadURL$ + * %% + * Copyright (C) 2012 - 2013 Ifremer + * %% + * This program is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License as + * published by the Free Software Foundation, either version 3 of the + * License, or (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public + * License along with this program. If not, see + * <http://www.gnu.org/licenses/gpl-3.0.html>. + * #L% + */ +BeanFilterableComboBox { + i18nPrefix: "tutti.property."; + showReset: true; +} + +#editSampleCategoryModelTopPanel { + _help: {"tutti.editSampleCategoryModel.help"}; +} + +#table { + selectionMode: {ListSelectionModel.SINGLE_SELECTION}; + selectionBackground: {null}; + selectionForeground: {Color.BLACK}; + sortable: false; +} + +#availableCaracteristicsComboBox { + property: selectedCaracteristic; + enabled: {!availableCaracteristicsComboBox.isEmpty()}; +} + +#addRow { + actionIcon: add; + enabled: {availableCaracteristicsComboBox.getSelectedItem() != null}; +} + +#removeEntryMenu { + actionIcon: delete; + text: "tutti.editSampleCategoryModel.action.removeEntry"; + toolTipText: "tutti.editSampleCategoryModel.action.removeEntry.tip"; + i18nMnemonic: "tutti.editSampleCategoryModel.action.removeEntry.mnemonic"; + enabled: {model.isRemoveEntryEnabled()}; + _help: {"tutti.editSampleCategoryModel.action.removeEntry.help"}; +} + + +#moveUpEntryMenu { + actionIcon: up; + text: "tutti.editSampleCategoryModel.action.moveUpEntry"; + toolTipText: "tutti.editSampleCategoryModel.action.moveUpEntry.tip"; + i18nMnemonic: "tutti.editSampleCategoryModel.action.moveUpEntry.mnemonic"; + enabled: {model.isMoveUpEntryEnabled()}; + _help: {"tutti.editSampleCategoryModel.action.moveUpEntry.help"}; +} + +#moveDownEntryMenu { + actionIcon: down; + text: "tutti.editSampleCategoryModel.action.moveDownEntry"; + toolTipText: "tutti.editSampleCategoryModel.action.moveDownEntry.tip"; + i18nMnemonic: "tutti.editSampleCategoryModel.action.moveDownEntry.mnemonic"; + enabled: {model.isMoveDownEntryEnabled()}; + _help: {"tutti.editSampleCategoryModel.action.moveDownEntry.help"}; +} + +#closeButton { + actionIcon: cancel; + text: "tutti.editSampleCategoryModel.action.close"; + toolTipText: "tutti.editSampleCategoryModel.action.close.tip"; + i18nMnemonic: "tutti.editSampleCategoryModel.action.close.mnemonic"; + _tuttiAction: {fr.ifremer.tutti.ui.swing.content.SelectCruiseAction.class}; + _help: {"tutti.editSampleCategoryModel.action.close.help"}; +} + +#saveButton { + actionIcon: save; + text: "tutti.editSampleCategoryModel.action.save"; + toolTipText: "tutti.editSampleCategoryModel.action.save.tip"; + i18nMnemonic: "tutti.editSampleCategoryModel.action.save.mnemonic"; + enabled: {model.isModify() && model.isValid()}; + _tuttiAction: {SaveSampleCategoryModelAction.class}; + _help: {"tutti.editSampleCategoryModel.action.save.help"}; +} \ No newline at end of file Copied: trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/category/EditSampleCategoryModelUI.jaxx (from rev 1158, trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/config/EditSampleCategoryModelUI.jaxx) =================================================================== --- trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/category/EditSampleCategoryModelUI.jaxx (rev 0) +++ trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/category/EditSampleCategoryModelUI.jaxx 2013-07-27 21:21:41 UTC (rev 1160) @@ -0,0 +1,109 @@ +<!-- + #%L + Tutti :: UI + $Id$ + $HeadURL$ + %% + Copyright (C) 2012 - 2013 Ifremer + %% + This program is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as + published by the Free Software Foundation, either version 3 of the + License, or (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public + License along with this program. If not, see + <http://www.gnu.org/licenses/gpl-3.0.html>. + #L% + --> +<JPanel id='editSampleCategoryModelTopPanel' layout='{new BorderLayout()}' + decorator='help' + implements='fr.ifremer.tutti.ui.swing.util.TuttiUI<EditSampleCategoryModelUIModel, EditSampleCategoryModelUIHandler>'> + + <import> + fr.ifremer.tutti.persistence.entities.referential.Caracteristic + + fr.ifremer.tutti.ui.swing.TuttiUIContext + fr.ifremer.tutti.ui.swing.TuttiHelpBroker + fr.ifremer.tutti.ui.swing.util.TuttiUI + + jaxx.runtime.swing.editor.bean.BeanFilterableComboBox + + org.jdesktop.swingx.JXTable + + javax.swing.ListSelectionModel + + java.awt.Color + </import> + + <script><![CDATA[ + +public EditSampleCategoryModelUI(TuttiUI parentUI) { + JAXXUtil.initContext(this, parentUI); + TuttiUIContext context = parentUI.getHandler().getContext(); + EditSampleCategoryModelUIHandler handler = new EditSampleCategoryModelUIHandler(context, this); + setContextValue(handler); + handler.beforeInitUI(); +} + +protected void $afterCompleteSetup() { handler.afterInitUI(); } + ]]></script> + + <!-- bean property --> + <EditSampleCategoryModelUIModel id='model' + initializer='getContextValue(EditSampleCategoryModelUIModel.class)'/> + + <EditSampleCategoryModelUIHandler id='handler' + initializer='getContextValue(EditSampleCategoryModelUIHandler.class)'/> + + <TuttiHelpBroker id='broker' + constructorParams='"tutti.editSampleCategoryModel.help"'/> + + <JPopupMenu id='tablePopup'> + <JMenuItem id='removeEntryMenu' + onActionPerformed='handler.removeEntry()'/> + <JMenuItem id='moveUpEntryMenu' + onActionPerformed='handler.moveUpEntry()'/> + <JMenuItem id='moveDownEntryMenu' + onActionPerformed='handler.moveDownEntry()'/> + </JPopupMenu> + + <Table> + + <row fill='both'> + <cell fill='both' weightx='1'> + <BeanFilterableComboBox id='availableCaracteristicsComboBox' + constructorParams='this' + genericType='Caracteristic'/> + </cell> + <cell fill='both'> + <JButton id='addRow' onActionPerformed='handler.addCaracteristic()'/> + </cell> + </row> + <row fill='both' weighty='1'> + <cell fill='both' columns='2'> + <JScrollPane id='tableScrollPane'> + <JXTable id='table' + onMouseClicked='handler.autoSelectRowInTable(event, tablePopup)' + onKeyPressed='handler.openRowMenu(event, tablePopup)'/> + </JScrollPane> + </cell> + </row> + + <!-- Form Actions --> + <row fill='both'> + <cell fill='both' columns='2'> + <JPanel layout='{new GridLayout(1, 0)}'> + <JButton id='closeButton'/> + <JButton id='saveButton'/> + </JPanel> + </cell> + </row> + </Table> + +</JPanel> \ No newline at end of file Copied: trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/category/EditSampleCategoryModelUIHandler.java (from rev 1158, trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/config/EditSampleCategoryModelUIHandler.java) =================================================================== --- trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/category/EditSampleCategoryModelUIHandler.java (rev 0) +++ trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/category/EditSampleCategoryModelUIHandler.java 2013-07-27 21:21:41 UTC (rev 1160) @@ -0,0 +1,369 @@ +package fr.ifremer.tutti.ui.swing.content.category; + +/* + * #%L + * Tutti :: UI + * $Id$ + * $HeadURL$ + * %% + * Copyright (C) 2012 - 2013 Ifremer + * %% + * This program is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License as + * published by the Free Software Foundation, either version 3 of the + * License, or (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public + * License along with this program. If not, see + * <http://www.gnu.org/licenses/gpl-3.0.html>. + * #L% + */ + +import com.google.common.base.Preconditions; +import com.google.common.collect.Lists; +import fr.ifremer.tutti.persistence.entities.data.SampleCategoryModel; +import fr.ifremer.tutti.persistence.entities.referential.Caracteristic; +import fr.ifremer.tutti.service.PersistenceService; +import fr.ifremer.tutti.ui.swing.TuttiUIContext; +import fr.ifremer.tutti.ui.swing.util.Cancelable; +import fr.ifremer.tutti.ui.swing.util.CloseableUI; +import fr.ifremer.tutti.ui.swing.util.TuttiBeanMonitor; +import fr.ifremer.tutti.ui.swing.util.table.AbstractTuttiTableUIHandler; +import jaxx.runtime.SwingUtil; +import jaxx.runtime.swing.editor.bean.BeanFilterableComboBox; +import jaxx.runtime.validator.swing.SwingValidator; +import org.apache.commons.lang3.StringUtils; +import org.apache.commons.logging.Log; +import org.apache.commons.logging.LogFactory; +import org.jdesktop.swingx.JXTable; +import org.jdesktop.swingx.table.DefaultTableColumnModelExt; + +import javax.swing.JComponent; +import javax.swing.SwingUtilities; +import java.beans.PropertyChangeEvent; +import java.beans.PropertyChangeListener; +import java.util.List; + +import static org.nuiton.i18n.I18n._; + +/** + * Handler of ui {@link EditSampleCategoryModelUI}. + * + * @author tchemit <chemit@codelutin.com> + * @since 2.5 + */ +public class EditSampleCategoryModelUIHandler extends AbstractTuttiTableUIHandler<EditSampleCategoryModelRowModel, EditSampleCategoryModelUIModel, EditSampleCategoryModelUI> implements Cancelable, CloseableUI { + + /** Logger. */ + private static final Log log = + LogFactory.getLog(EditSampleCategoryModelUIHandler.class); + + protected PersistenceService persistenceService; + + public EditSampleCategoryModelUIHandler(TuttiUIContext context, EditSampleCategoryModelUI ui) { + super(context, ui, + EditSampleCategoryModelRowModel.PROPERTY_CARACTERISTIC, + EditSampleCategoryModelRowModel.PROPERTY_LABEL); + this.persistenceService = context.getPersistenceService(); + } + + //------------------------------------------------------------------------// + //-- Public methods --// + //------------------------------------------------------------------------// + + public void addCaracteristic() { + BeanFilterableComboBox<Caracteristic> keyCombo = ui.getAvailableCaracteristicsComboBox(); + Caracteristic selectedItem = (Caracteristic) keyCombo.getSelectedItem(); + + getModel().removeCaracteristic(selectedItem); + + EditSampleCategoryModelTableModel tableModel = getTableModel(); + + EditSampleCategoryModelRowModel row = tableModel.createNewRow(); + row.setCaracteristic(selectedItem); + + tableModel.addNewRow(row); + + recomputeRowValidState(row); + + getModel().setModify(true); + + SwingUtilities.invokeLater(new Runnable() { + @Override + public void run() { + getTable().requestFocus(); + + int rowIndex = getTable().getRowCount() - 1; + + SwingUtil.editCell(getTable(), rowIndex, 1); + } + }); + } + + public void removeEntry() { + int selectedRow = getTable().getSelectedRow(); + Preconditions.checkState(selectedRow > -1); + + // get selected row + EditSampleCategoryModelRowModel entry = + getTableModel().getEntry(selectedRow); + + // get his caracteristic + Caracteristic caracteristic = entry.getCaracteristic(); + + // push it back to model + getModel().addCaracteristic(caracteristic); + + // remove entry from table model + getTableModel().removeRow(selectedRow); + + getModel().setModify(true); + } + + public void moveUpEntry() { + int selectedRow = getTable().getSelectedRow(); + Preconditions.checkState(selectedRow > -1); + + int newRow = selectedRow - 1; + + getTableModel().permuteEntry(newRow, selectedRow); + getTable().getSelectionModel().setSelectionInterval(newRow, newRow); + getModel().setModify(true); + } + + public void moveDownEntry() { + int selectedRow = getTable().getSelectedRow(); + Preconditions.checkState(selectedRow > -1); + int newRow = selectedRow + 1; + + getTableModel().permuteEntry(selectedRow, newRow); + getTable().getSelectionModel().setSelectionInterval(newRow, newRow); + getModel().setModify(true); + } + + //------------------------------------------------------------------------// + //-- AbstractTuttiTableUIHandler methods --// + //------------------------------------------------------------------------// + + @Override + public EditSampleCategoryModelTableModel getTableModel() { + return (EditSampleCategoryModelTableModel) getTable().getModel(); + } + + @Override + protected JComponent getComponentToFocus() { + return ui.getAvailableCaracteristicsComboBox(); + } + + @Override + public JXTable getTable() { + return ui.getTable(); + } + + @Override + protected boolean isRowValid(EditSampleCategoryModelRowModel row) { + boolean result = StringUtils.isNotBlank(row.getLabel()); + + return result; + } + + @Override + protected void onAfterSelectedRowChanged(int oldRowIndex, EditSampleCategoryModelRowModel oldRow, int newRowIndex, EditSampleCategoryModelRowModel newRow) { + super.onAfterSelectedRowChanged(oldRowIndex, oldRow, newRowIndex, newRow); + recomputePopupActions(); + } + + @Override + protected void saveSelectedRowIfRequired(TuttiBeanMonitor<EditSampleCategoryModelRowModel> rowMonitor, + EditSampleCategoryModelRowModel row) { + + } + + @Override + protected void onRowModified(int rowIndex, + EditSampleCategoryModelRowModel row, + String propertyName, + Object oldValue, + Object newValue) { + recomputeRowValidState(row); + saveSelectedRowIfNeeded(); + + // when row valid state has changed, recompute action enabled states + recomputePopupActions(); + getModel().setModify(true); + } + + //------------------------------------------------------------------------// + //-- CloseableUI methods --// + //------------------------------------------------------------------------// + + @Override + public boolean quitUI() { + boolean result = quitScreen( + getModel().isValid(), + getModel().isModify(), + _("tutti.editProtocol.askCancelEditBeforeLeaving.cancelSaveSampleCategoryModel"), + _("tutti.editProtocol.askSaveBeforeLeaving.saveSampleCategoryModel"), + ui.getSaveButton().getAction() + ); + return result; + } + + //------------------------------------------------------------------------// + //-- AbstractTuttiUIHandler methods --// + //------------------------------------------------------------------------// + + @Override + public void beforeInitUI() { + + if (log.isDebugEnabled()) { + log.debug("for " + ui); + } + + List<Caracteristic> caracteristics = Lists.newArrayList( + persistenceService.getAllCaracteristicForSampleCategory()); + + SampleCategoryModel sampleCategoryModel = + getDataContext().getSampleCategoryModel(); + + EditSampleCategoryModelUIModel model = new EditSampleCategoryModelUIModel( + persistenceService.getEnumerationFile(), + sampleCategoryModel.getCategory(), + caracteristics); + + ui.setContextValue(model); + } + + @Override + public void afterInitUI() { + initUI(ui); + + EditSampleCategoryModelUIModel model = getModel(); + + initBeanFilterableComboBox(ui.getAvailableCaracteristicsComboBox(), + model.getCaracteristicList(), + null); + + model.addPropertyChangeListener(EditSampleCategoryModelUIModel.PROPERTY_CARACTERISTIC_LIST, new PropertyChangeListener() { + @Override + public void propertyChange(PropertyChangeEvent evt) { + if (log.isDebugEnabled()) { + log.debug("propertyChange " + EditSampleCategoryModelUIModel.PROPERTY_CARACTERISTIC_LIST); + } + ui.getAvailableCaracteristicsComboBox().setData(null); + ui.getAvailableCaracteristicsComboBox().setData((List<Caracteristic>) evt.getNewValue()); + ui.getAvailableCaracteristicsComboBox().setSelectedItem(null); + } + }); + + JXTable table = getTable(); + + // create table column model + DefaultTableColumnModelExt columnModel = + new DefaultTableColumnModelExt(); + + { + // Category column + + addColumnToModel(columnModel, + null, + newTableCellRender(Caracteristic.class), + EditSampleCategoryModelTableModel.CARACTERISTIC); + + + } + + { // Label column + + addColumnToModel(columnModel, + null, + null, + EditSampleCategoryModelTableModel.LABEL); + } + + // create table model + EditSampleCategoryModelTableModel tableModel = + new EditSampleCategoryModelTableModel(columnModel); + + table.setModel(tableModel); + table.setColumnModel(columnModel); + + initTable(table); + + List<EditSampleCategoryModelRowModel> rows = model.getRows(); + tableModel.setRows(rows); + + recomputePopupActions(); + + model.setModify(true); + SwingUtilities.invokeLater(new Runnable() { + @Override + public void run() { + getModel().setModify(false); + } + }); + + } + + @Override + protected void initTable(JXTable table) { + super.initTable(table); + installTableKeyListener(table.getColumnModel(), table); + } + + @Override + public void cancel() { + + if (log.isDebugEnabled()) { + log.debug("Cancel UI " + ui); + } + + // close dialog + closeUI(ui); + } + + @Override + public void onCloseUI() { + + if (log.isDebugEnabled()) { + log.debug("Closing UI " + ui); + } + } + + @Override + public SwingValidator<EditSampleCategoryModelUIModel> getValidator() { + return null; + } + + //------------------------------------------------------------------------// + //-- Internal methods --// + //------------------------------------------------------------------------// + + protected void recomputePopupActions() { + + int rowIndex = getTable().getSelectedRow(); + + boolean enableRemoveEntry = false; + boolean enableMoveUpEntry = false; + boolean enableMoveDownEntry = false; + + if (rowIndex != -1) { + + // there is a selected row + enableRemoveEntry = true; + + enableMoveUpEntry = rowIndex > 0; + + enableMoveDownEntry = rowIndex < getTable().getModel().getRowCount() - 1; + } + EditSampleCategoryModelUIModel model = getModel(); + model.setRemoveEntryEnabled(enableRemoveEntry); + model.setMoveUpEntryEnabled(enableMoveUpEntry); + model.setMoveDownEntryEnabled(enableMoveDownEntry); + } +} Copied: trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/category/EditSampleCategoryModelUIModel.java (from rev 1158, trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/config/EditSampleCategoryModelUIModel.java) =================================================================== --- trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/category/EditSampleCategoryModelUIModel.java (rev 0) +++ trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/category/EditSampleCategoryModelUIModel.java 2013-07-27 21:21:41 UTC (rev 1160) @@ -0,0 +1,161 @@ +package fr.ifremer.tutti.ui.swing.content.category; + +/* + * #%L + * Tutti :: UI + * $Id$ + * $HeadURL$ + * %% + * Copyright (C) 2012 - 2013 Ifremer + * %% + * This program is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License as + * published by the Free Software Foundation, either version 3 of the + * License, or (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public + * License along with this program. If not, see + * <http://www.gnu.org/licenses/gpl-3.0.html>. + * #L% + */ + +import com.google.common.base.Preconditions; +import com.google.common.collect.Lists; +import fr.ifremer.tutti.persistence.entities.data.SampleCategoryModel; +import fr.ifremer.tutti.persistence.entities.data.SampleCategoryModelEntry; +import fr.ifremer.tutti.persistence.entities.referential.Caracteristic; +import fr.ifremer.tutti.persistence.service.TuttiEnumerationFile; +import fr.ifremer.tutti.ui.swing.util.table.AbstractTuttiTableUIModel; +import org.nuiton.util.beans.Binder; +import org.nuiton.util.beans.BinderFactory; + +import java.util.List; + +/** + * TODO + * + * @author tchemit <chemit@codelutin.com> + * @since 2.5 + */ +public class EditSampleCategoryModelUIModel extends AbstractTuttiTableUIModel<SampleCategoryModel, EditSampleCategoryModelRowModel, EditSampleCategoryModelUIModel> { + + private static final long serialVersionUID = 1L; + + public static final String PROPERTY_CARACTERISTIC_LIST = "caracteristicList"; + + public static final String PROPERTY_REMOVE_ENTRY_ENABLED = "removeEntryEnabled"; + + public static final String PROPERTY_MOVE_UP_ENTRY_ENABLED = "moveUpEntryEnabled"; + + public static final String PROPERTY_MOVE_DOWN_ENTRY_ENABLED = "moveDownEntryEnabled"; + + protected final SampleCategoryModelEntry firstCategory; + + protected final List<Caracteristic> caracteristicList; + + protected static Binder<SampleCategoryModel, EditSampleCategoryModelUIModel> fromBeanBinder = + BinderFactory.newBinder(SampleCategoryModel.class, + EditSampleCategoryModelUIModel.class); + + protected static Binder<EditSampleCategoryModelUIModel, SampleCategoryModel> toBeanBinder = + BinderFactory.newBinder(EditSampleCategoryModelUIModel.class, SampleCategoryModel.class); + + private boolean removeEntryEnabled; + + private boolean moveUpEntryEnabled; + + private boolean moveDownEntryEnabled; + + public EditSampleCategoryModelUIModel(TuttiEnumerationFile enumerationFile, + List<SampleCategoryModelEntry> category, + List<Caracteristic> caracteristicList) { + + super(SampleCategoryModel.class, fromBeanBinder, toBeanBinder); + + Preconditions.checkNotNull(caracteristicList, "need a not null caracteristicList"); + Preconditions.checkNotNull(enumerationFile, "need a not null enumerationFile"); + Preconditions.checkNotNull(category, "need a not null category list"); + Preconditions.checkArgument(!category.isEmpty(), "need at least one first category (sorted-unsorted)"); + this.caracteristicList = caracteristicList; + this.firstCategory = category.get(0); + Preconditions.checkArgument(enumerationFile.PMFM_ID_SORTED_UNSORTED.equals(firstCategory.getCategoryId()), "first category must be sorted-unsorted caracteristic but was: " + firstCategory.getCategoryId()); + + List<EditSampleCategoryModelRowModel> rows = Lists.newArrayList(); + + for (SampleCategoryModelEntry sampleCategoryModelEntry : category) { + caracteristicList.remove(sampleCategoryModelEntry.getCaracteristic()); + if (firstCategory.equals(sampleCategoryModelEntry)) { + continue; + } + EditSampleCategoryModelRowModel row = new EditSampleCategoryModelRowModel(); + row.setCaracteristic(sampleCategoryModelEntry.getCaracteristic()); + row.setLabel(sampleCategoryModelEntry.getLabel()); + row.setValid(true); + rows.add(row); + } + setRows(rows); + } + + @Override + protected SampleCategoryModel newEntity() { + List<SampleCategoryModelEntry> entries = Lists.newArrayList(firstCategory); + int order = 1; + for (EditSampleCategoryModelRowModel row : getRows()) { + SampleCategoryModelEntry entry = new SampleCategoryModelEntry(); + entry.setCategoryId(row.getCategoryId()); + entry.setLabel(row.getLabel()); + entry.setOrder(order++); + entries.add(entry); + } + return new SampleCategoryModel(entries); + } + + public List<Caracteristic> getCaracteristicList() { + return caracteristicList; + } + + public boolean isRemoveEntryEnabled() { + return removeEntryEnabled; + } + + public void setRemoveEntryEnabled(boolean removeEntryEnabled) { + boolean oldValue = isRemoveEntryEnabled(); + this.removeEntryEnabled = removeEntryEnabled; + firePropertyChange(PROPERTY_REMOVE_ENTRY_ENABLED, oldValue, removeEntryEnabled); + } + + public boolean isMoveUpEntryEnabled() { + return moveUpEntryEnabled; + } + + public void setMoveUpEntryEnabled(boolean moveUpEntryEnabled) { + boolean oldValue = isMoveUpEntryEnabled(); + this.moveUpEntryEnabled = moveUpEntryEnabled; + firePropertyChange(PROPERTY_MOVE_UP_ENTRY_ENABLED, oldValue, moveUpEntryEnabled); + } + + public boolean isMoveDownEntryEnabled() { + return moveDownEntryEnabled; + } + + public void setMoveDownEntryEnabled(boolean moveDownEntryEnabled) { + boolean oldValue = isMoveDownEntryEnabled(); + this.moveDownEntryEnabled = moveDownEntryEnabled; + firePropertyChange(PROPERTY_MOVE_DOWN_ENTRY_ENABLED, oldValue, moveDownEntryEnabled); + } + + public void addCaracteristic(Caracteristic caracteristic) { + caracteristicList.add(caracteristic); + firePropertyChange(PROPERTY_CARACTERISTIC_LIST, null, caracteristicList); + } + + public void removeCaracteristic(Caracteristic caracteristic) { + caracteristicList.remove(caracteristic); + firePropertyChange(PROPERTY_CARACTERISTIC_LIST, null, caracteristicList); + } +} Copied: trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/category/SaveSampleCategoryModelAction.java (from rev 1158, trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/config/SaveSampleCategoryModelAction.java) =================================================================== --- trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/category/SaveSampleCategoryModelAction.java (rev 0) +++ trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/category/SaveSampleCategoryModelAction.java 2013-07-27 21:21:41 UTC (rev 1160) @@ -0,0 +1,66 @@ +package fr.ifremer.tutti.ui.swing.content.category; + +/* + * #%L + * Tutti :: UI + * $Id$ + * $HeadURL$ + * %% + * Copyright (C) 2012 - 2013 Ifremer + * %% + * This program is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License as + * published by the Free Software Foundation, either version 3 of the + * License, or (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public + * License along with this program. If not, see + * <http://www.gnu.org/licenses/gpl-3.0.html>. + * #L% + */ + +import fr.ifremer.tutti.persistence.entities.data.SampleCategoryModel; +import fr.ifremer.tutti.ui.swing.util.action.AbstractTuttiAction; +import org.apache.commons.logging.Log; +import org.apache.commons.logging.LogFactory; + +/** + * To save the sample category model. + * + * @author tchemit <chemit@codelutin.com> + * @since 2.5 + */ +public class SaveSampleCategoryModelAction extends AbstractTuttiAction<EditSampleCategoryModelUIModel, EditSampleCategoryModelUI, EditSampleCategoryModelUIHandler> { + + /** Logger. */ + private static final Log log = + LogFactory.getLog(SaveSampleCategoryModelAction.class); + + public SaveSampleCategoryModelAction(EditSampleCategoryModelUIHandler handler) { + super(handler, true); + } + + @Override + protected void doAction() throws Exception { + EditSampleCategoryModelUIModel model = getModel(); + + SampleCategoryModel bean = model.toBean(); + + if (log.isInfoEnabled()) { + log.info("Will save sampleCategoryModel: " + bean); + } + getConfig().getServiceConfig().getPersistenceConfig().setSampleCategoryModel(bean); + + getConfig().save(); + + getDataContext().loadSampleCategoryModel(bean); + + model.setModify(false); + + } +} \ No newline at end of file Deleted: trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/config/EditSampleCategoryModelRowModel.java =================================================================== --- trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/config/EditSampleCategoryModelRowModel.java 2013-07-27 14:13:54 UTC (rev 1159) +++ trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/config/EditSampleCategoryModelRowModel.java 2013-07-27 21:21:41 UTC (rev 1160) @@ -1,99 +0,0 @@ -package fr.ifremer.tutti.ui.swing.content.config; - -/* - * #%L - * Tutti :: UI - * $Id$ - * $HeadURL$ - * %% - * Copyright (C) 2012 - 2013 Ifremer - * %% - * This program is free software: you can redistribute it and/or modify - * it under the terms of the GNU General Public License as - * published by the Free Software Foundation, either version 3 of the - * License, or (at your option) any later version. - * - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public - * License along with this program. If not, see - * <http://www.gnu.org/licenses/gpl-3.0.html>. - * #L% - */ - -import fr.ifremer.tutti.persistence.entities.data.SampleCategoryModelEntry; -import fr.ifremer.tutti.persistence.entities.referential.Caracteristic; -import fr.ifremer.tutti.ui.swing.util.AbstractTuttiBeanUIModel; -import org.nuiton.util.beans.Binder; -import org.nuiton.util.beans.BinderFactory; - -/** - * TODO - * - * @author tchemit <chemit@codelutin.com> - * @since TODO - */ -public class EditSampleCategoryModelRowModel extends AbstractTuttiBeanUIModel<SampleCategoryModelEntry, EditSampleCategoryModelRowModel> { - - private static final long serialVersionUID = 1L; - - public static final String PROPERTY_LABEL = "label"; - - public static final String PROPERTY_CARACTERISTIC = "caracteristic"; - - protected final SampleCategoryModelEntry editObject = new SampleCategoryModelEntry(); - - protected static final Binder<SampleCategoryModelEntry, EditSampleCategoryModelRowModel> fromBeanBinder = - BinderFactory.newBinder(SampleCategoryModelEntry.class, - EditSampleCategoryModelRowModel.class); - - protected static final Binder<EditSampleCategoryModelRowModel, SampleCategoryModelEntry> toBeanBinder = - BinderFactory.newBinder(EditSampleCategoryModelRowModel.class, - SampleCategoryModelEntry.class); - - public EditSampleCategoryModelRowModel() { - super(SampleCategoryModelEntry.class, fromBeanBinder, toBeanBinder); - } - - public EditSampleCategoryModelRowModel(SampleCategoryModelEntry entry) { - this(); - fromBean(entry); - } - - @Override - protected SampleCategoryModelEntry newEntity() { - return new SampleCategoryModelEntry(); - } - - //------------------------------------------------------------------------// - //-- SampleCategoryModelEntry delegate --// - //------------------------------------------------------------------------// - - public String getLabel() { - return editObject.getLabel(); - } - - public void setLabel(String label) { - String oldValue = getLabel(); - editObject.setLabel(label); - firePropertyChange(PROPERTY_LABEL, oldValue, label); - } - - public Integer getCategoryId() { - return editObject.getCategoryId(); - } - - public Caracteristic getCaracteristic() { - return editObject.getCaracteristic(); - } - - public void setCaracteristic(Caracteristic caracteristic) { - Caracteristic oldValue = getCaracteristic(); - editObject.setCaracteristic(caracteristic); - editObject.setCategoryId(caracteristic.getIdAsInt()); - firePropertyChange(PROPERTY_CARACTERISTIC, oldValue, caracteristic); - } -} Deleted: trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/config/EditSampleCategoryModelTableModel.java =================================================================== --- trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/config/EditSampleCategoryModelTableModel.java 2013-07-27 14:13:54 UTC (rev 1159) +++ trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/config/EditSampleCategoryModelTableModel.java 2013-07-27 21:21:41 UTC (rev 1160) @@ -1,78 +0,0 @@ -package fr.ifremer.tutti.ui.swing.content.config; - -/* - * #%L - * Tutti :: UI - * $Id$ - * $HeadURL$ - * %% - * Copyright (C) 2012 - 2013 Ifremer - * %% - * This program is free software: you can redistribute it and/or modify - * it under the terms of the GNU General Public License as - * published by the Free Software Foundation, either version 3 of the - * License, or (at your option) any later version. - * - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public - * License along with this program. If not, see - * <http://www.gnu.org/licenses/gpl-3.0.html>. - * #L% - */ - -import fr.ifremer.tutti.persistence.entities.data.SampleCategoryModelEntry; -import fr.ifremer.tutti.ui.swing.util.table.AbstractTuttiTableModel; -import fr.ifremer.tutti.ui.swing.util.table.ColumnIdentifier; -import org.jdesktop.swingx.table.TableColumnModelExt; - -import static org.nuiton.i18n.I18n.n_; - -/** - * Model of table of {@link SampleCategoryModelEntry}. - * - * @author tchemit <chemit@codelutin.com> - * @since 2.5 - */ -public class EditSampleCategoryModelTableModel extends AbstractTuttiTableModel<EditSampleCategoryModelRowModel> { - - private static final long serialVersionUID = 1L; - - public static final ColumnIdentifier<EditSampleCategoryModelRowModel> CARACTERISTIC = ColumnIdentifier.newId( - EditSampleCategoryModelRowModel.PROPERTY_CARACTERISTIC, - n_("tutti.editSampleCategoryModel.table.header.caracteristic"), - n_("tutti.editSampleCategoryModel.table.header.caracteristic.tip")); - - public static final ColumnIdentifier<EditSampleCategoryModelRowModel> LABEL = ColumnIdentifier.newId( - EditSampleCategoryModelRowModel.PROPERTY_LABEL, - n_("tutti.editSampleCategoryModel.table.header.label"), - n_("tutti.editSampleCategoryModel.table.header.label.tip")); - - public EditSampleCategoryModelTableModel(TableColumnModelExt columnModel) { - super(columnModel, false, false); - - setNoneEditableCols(CARACTERISTIC); - } - - @Override - public EditSampleCategoryModelRowModel createNewRow() { - EditSampleCategoryModelRowModel result = - new EditSampleCategoryModelRowModel(); - - // by default empty row is not valid - result.setValid(false); - return result; - } - - public void permuteEntry(int firstRow, int lastRow) { - EditSampleCategoryModelRowModel firstR = getRows().get(firstRow); - - getRows().remove(firstRow); - getRows().add(lastRow, firstR); - - fireTableRowsUpdated(firstRow, lastRow); - } -} Deleted: trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/config/EditSampleCategoryModelUI.css =================================================================== --- trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/config/EditSampleCategoryModelUI.css 2013-07-27 14:13:54 UTC (rev 1159) +++ trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/config/EditSampleCategoryModelUI.css 2013-07-27 21:21:41 UTC (rev 1160) @@ -1,95 +0,0 @@ -/* - * #%L - * Tutti :: UI - * $Id$ - * $HeadURL$ - * %% - * Copyright (C) 2012 - 2013 Ifremer - * %% - * This program is free software: you can redistribute it and/or modify - * it under the terms of the GNU General Public License as - * published by the Free Software Foundation, either version 3 of the - * License, or (at your option) any later version. - * - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public - * License along with this program. If not, see - * <http://www.gnu.org/licenses/gpl-3.0.html>. - * #L% - */ -BeanFilterableComboBox { - i18nPrefix: "tutti.property."; - showReset: true; -} - -#editSampleCategoryModelTopPanel { - _help: {"tutti.editSampleCategoryModel.help"}; -} - -#table { - selectionMode: {ListSelectionModel.SINGLE_SELECTION}; - selectionBackground: {null}; - selectionForeground: {Color.BLACK}; - sortable: false; -} - -#availableCaracteristicsComboBox { - property: selectedCaracteristic; - enabled: {!availableCaracteristicsComboBox.isEmpty()}; -} - -#addRow { - actionIcon: add; - enabled: {availableCaracteristicsComboBox.getSelectedItem() != null}; -} - -#removeEntryMenu { - actionIcon: delete; - text: "tutti.editSampleCategoryModel.action.removeEntry"; - toolTipText: "tutti.editSampleCategoryModel.action.removeEntry.tip"; - i18nMnemonic: "tutti.editSampleCategoryModel.action.removeEntry.mnemonic"; - enabled: {model.isRemoveEntryEnabled()}; - _help: {"tutti.editSampleCategoryModel.action.removeEntry.help"}; -} - - -#moveUpEntryMenu { - actionIcon: up; - text: "tutti.editSampleCategoryModel.action.moveUpEntry"; - toolTipText: "tutti.editSampleCategoryModel.action.moveUpEntry.tip"; - i18nMnemonic: "tutti.editSampleCategoryModel.action.moveUpEntry.mnemonic"; - enabled: {model.isMoveUpEntryEnabled()}; - _help: {"tutti.editSampleCategoryModel.action.moveUpEntry.help"}; -} - -#moveDownEntryMenu { - actionIcon: down; - text: "tutti.editSampleCategoryModel.action.moveDownEntry"; - toolTipText: "tutti.editSampleCategoryModel.action.moveDownEntry.tip"; - i18nMnemonic: "tutti.editSampleCategoryModel.action.moveDownEntry.mnemonic"; - enabled: {model.isMoveDownEntryEnabled()}; - _help: {"tutti.editSampleCategoryModel.action.moveDownEntry.help"}; -} - -#closeButton { - actionIcon: cancel; - text: "tutti.editSampleCategoryModel.action.close"; - toolTipText: "tutti.editSampleCategoryModel.action.close.tip"; - i18nMnemonic: "tutti.editSampleCategoryModel.action.close.mnemonic"; - _tuttiAction: {fr.ifremer.tutti.ui.swing.content.SelectCruiseAction.class}; - _help: {"tutti.editSampleCategoryModel.action.close.help"}; -} - -#saveButton { - actionIcon: save; - text: "tutti.editSampleCategoryModel.action.save"; - toolTipText: "tutti.editSampleCategoryModel.action.save.tip"; - i18nMnemonic: "tutti.editSampleCategoryModel.action.save.mnemonic"; - enabled: {model.isModify() && model.isValid()}; - _tuttiAction: {SaveSampleCategoryModelAction.class}; - _help: {"tutti.editSampleCategoryModel.action.save.help"}; -} \ No newline at end of file Deleted: trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/config/EditSampleCategoryModelUI.jaxx =================================================================== --- trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/config/EditSampleCategoryModelUI.jaxx 2013-07-27 14:13:54 UTC (rev 1159) +++ trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/config/EditSampleCategoryModelUI.jaxx 2013-07-27 21:21:41 UTC (rev 1160) @@ -1,109 +0,0 @@ -<!-- - #%L - Tutti :: UI - $Id$ - $HeadURL$ - %% - Copyright (C) 2012 - 2013 Ifremer - %% - This program is free software: you can redistribute it and/or modify - it under the terms of the GNU General Public License as - published by the Free Software Foundation, either version 3 of the - License, or (at your option) any later version. - - This program is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public - License along with this program. If not, see - <http://www.gnu.org/licenses/gpl-3.0.html>. - #L% - --> -<JPanel id='editSampleCategoryModelTopPanel' layout='{new BorderLayout()}' - decorator='help' - implements='fr.ifremer.tutti.ui.swing.util.TuttiUI<EditSampleCategoryModelUIModel, EditSampleCategoryModelUIHandler>'> - - <import> - fr.ifremer.tutti.persistence.entities.referential.Caracteristic - - fr.ifremer.tutti.ui.swing.TuttiUIContext - fr.ifremer.tutti.ui.swing.TuttiHelpBroker - fr.ifremer.tutti.ui.swing.util.TuttiUI - - jaxx.runtime.swing.editor.bean.BeanFilterableComboBox - - org.jdesktop.swingx.JXTable - - javax.swing.ListSelectionModel - - java.awt.Color - </import> - - <script><![CDATA[ - -public EditSampleCategoryModelUI(TuttiUI parentUI) { - JAXXUtil.initContext(this, parentUI); - TuttiUIContext context = parentUI.getHandler().getContext(); - EditSampleCategoryModelUIHandler handler = new EditSampleCategoryModelUIHandler(context, this); - setContextValue(handler); - handler.beforeInitUI(); -} - -protected void $afterCompleteSetup() { handler.afterInitUI(); } - ]]></script> - - <!-- bean property --> - <EditSampleCategoryModelUIModel id='model' - initializer='getContextValue(EditSampleCategoryModelUIModel.class)'/> - - <EditSampleCategoryModelUIHandler id='handler' - initializer='getContextValue(EditSampleCategoryModelUIHandler.class)'/> - - <TuttiHelpBroker id='broker' - constructorParams='"tutti.editSampleCategoryModel.help"'/> - - <JPopupMenu id='tablePopup'> - <JMenuItem id='removeEntryMenu' - onActionPerformed='handler.removeEntry()'/> - <JMenuItem id='moveUpEntryMenu' - onActionPerformed='handler.moveUpEntry()'/> - <JMenuItem id='moveDownEntryMenu' - onActionPerformed='handler.moveDownEntry()'/> - </JPopupMenu> - - <Table> - - <row fill='both'> - <cell fill='both' weightx='1'> - <BeanFilterableComboBox id='availableCaracteristicsComboBox' - constructorParams='this' - genericType='Caracteristic'/> - </cell> - <cell fill='both'> - <JButton id='addRow' onActionPerformed='handler.addCaracteristic()'/> - </cell> - </row> - <row fill='both' weighty='1'> - <cell fill='both' columns='2'> - <JScrollPane id='tableScrollPane'> - <JXTable id='table' - onMouseClicked='handler.autoSelectRowInTable(event, tablePopup)' - onKeyPressed='handler.openRowMenu(event, tablePopup)'/> - </JScrollPane> - </cell> - </row> - - <!-- Form Actions --> - <row fill='both'> - <cell fill='both' columns='2'> - <JPanel layout='{new GridLayout(1, 0)}'> - <JButton id='closeButton'/> - <JButton id='saveButton'/> - </JPanel> - </cell> - </row> - </Table> - -</JPanel> \ No newline at end of file Deleted: trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/config/EditSampleCategoryModelUIHandler.java =================================================================== --- trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/config/EditSampleCategoryModelUIHandler.java 2013-07-27 14:13:54 UTC (rev 1159) +++ trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/config/EditSampleCategoryModelUIHandler.java 2013-07-27 21:21:41 UTC (rev 1160) @@ -1,367 +0,0 @@ -package fr.ifremer.tutti.ui.swing.content.config; - -/* - * #%L - * Tutti :: UI - * $Id$ - * $HeadURL$ - * %% - * Copyright (C) 2012 - 2013 Ifremer - * %% - * This program is free software: you can redistribute it and/or modify - * it under the terms of the GNU General Public License as - * published by the Free Software Foundation, either version 3 of the - * License, or (at your option) any later version. - * - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public - * License along with this program. If not, see - * <http://www.gnu.org/licenses/gpl-3.0.html>. - * #L% - */ - -import com.google.common.base.Preconditions; -import com.google.common.collect.Lists; -import fr.ifremer.tutti.persistence.entities.data.SampleCategoryModel; -import fr.ifremer.tutti.persistence.entities.referential.Caracteristic; -import fr.ifremer.tutti.service.DecoratorService; -import fr.ifremer.tutti.service.PersistenceService; -import fr.ifremer.tutti.ui.swing.TuttiUIContext; -import fr.ifremer.tutti.ui.swing.util.Cancelable; -import fr.ifremer.tutti.ui.swing.util.CloseableUI; -import fr.ifremer.tutti.ui.swing.util.TuttiBeanMonitor; -import fr.ifremer.tutti.ui.swing.util.table.AbstractTuttiTableUIHandler; -import jaxx.runtime.SwingUtil; -import jaxx.runtime.swing.editor.bean.BeanFilterableComboBox; -import jaxx.runtime.validator.swing.SwingValidator; -import org.apache.commons.lang3.StringUtils; -import org.apache.commons.logging.Log; -import org.apache.commons.logging.LogFactory; -import org.jdesktop.swingx.JXTable; -import org.jdesktop.swingx.table.DefaultTableColumnModelExt; - -import javax.swing.JComponent; -import javax.swing.SwingUtilities; -import java.beans.PropertyChangeEvent; -import java.beans.PropertyChangeListener; -import java.util.List; - -import static org.nuiton.i18n.I18n._; - -/** - * Handler of ui {@link EditSampleCategoryModelUI}. - * - * @author tchemit <chemit@codelutin.com> - * @since 2.5 - */ -public class EditSampleCategoryModelUIHandler extends AbstractTuttiTableUIHandler<EditSampleCategoryModelRowModel, EditSampleCategoryModelUIModel, EditSampleCategoryModelUI> implements Cancelable, CloseableUI { - - /** Logger. */ - private static final Log log = - LogFactory.getLog(EditSampleCategoryModelUIHandler.class); - - protected PersistenceService persistenceService; - - public EditSampleCategoryModelUIHandler(TuttiUIContext context, EditSampleCategoryModelUI ui) { - super(context, ui, - EditSampleCategoryModelRowModel.PROPERTY_CARACTERISTIC, - EditSampleCategoryModelRowModel.PROPERTY_LABEL); - this.persistenceService = context.getPersistenceService(); - } - - //------------------------------------------------------------------------// - //-- Public methods --// - //------------------------------------------------------------------------// - - public void addCaracteristic() { - BeanFilterableComboBox<Caracteristic> keyCombo = ui.getAvailableCaracteristicsComboBox(); - Caracteristic selectedItem = (Caracteristic) keyCombo.getSelectedItem(); - - getModel().removeCaracteristic(selectedItem); - - EditSampleCategoryModelTableModel tableModel = getTableModel(); - - EditSampleCategoryModelRowModel row = tableModel.createNewRow(); - row.setCaracteristic(selectedItem); - - tableModel.addNewRow(row); - - recomputeRowValidState(row); - - getModel().setModify(true); - - SwingUtilities.invokeLater(new Runnable() { - @Override - public void run() { - getTable().requestFocus(); - - int rowIndex = getTable().getRowCount() - 1; - - SwingUtil.editCell(getTable(), rowIndex, 1); - } - }); - } - - public void removeEntry() { - int selectedRow = getTable().getSelectedRow(); - Preconditions.checkState(selectedRow > -1); - - // get selected row - EditSampleCategoryModelRowModel entry = getTableModel().getEntry(selectedRow); - - // get his caracteristic - Caracteristic caracteristic = entry.getCaracteristic(); - - // push it back to model - getModel().addCaracteristic(caracteristic); - - // remove entry from table model - getTableModel().removeRow(selectedRow); - - getModel().setModify(true); - } - - public void moveUpEntry() { - int selectedRow = getTable().getSelectedRow(); - Preconditions.checkState(selectedRow > -1); - - int newRow = selectedRow - 1; - - getTableModel().permuteEntry(newRow, selectedRow); - getTable().getSelectionModel().setSelectionInterval(newRow, newRow); - getModel().setModify(true); - } - - public void moveDownEntry() { - int selectedRow = getTable().getSelectedRow(); - Preconditions.checkState(selectedRow > -1); - int newRow = selectedRow + 1; - - getTableModel().permuteEntry(selectedRow, newRow); - getTable().getSelectionModel().setSelectionInterval(newRow, newRow); - getModel().setModify(true); - } - - //------------------------------------------------------------------------// - //-- AbstractTuttiTableUIHandler methods --// - //------------------------------------------------------------------------// - - @Override - public EditSampleCategoryModelTableModel getTableModel() { - return (EditSampleCategoryModelTableModel) getTable().getModel(); - } - - @Override - protected JComponent getComponentToFocus() { - return ui.getAvailableCaracteristicsComboBox(); - } - - @Override - public JXTable getTable() { - return ui.getTable(); - } - - @Override - protected boolean isRowValid(EditSampleCategoryModelRowModel row) { - boolean result = StringUtils.isNotBlank(row.getLabel()); - - return result; - } - - @Override - protected void onAfterSelectedRowChanged(int oldRowIndex, EditSampleCategoryModelRowModel oldRow, int newRowIndex, EditSampleCategoryModelRowModel newRow) { - super.onAfterSelectedRowChanged(oldRowIndex, oldRow, newRowIndex, newRow); - recomputePopupActions(); - } - - @Override - protected void saveSelectedRowIfRequired(TuttiBeanMonitor<EditSampleCategoryModelRowModel> rowMonitor, - EditSampleCategoryModelRowModel row) { - - } - - @Override - protected void onRowModified(int rowIndex, - EditSampleCategoryModelRowModel row, - String propertyName, - Object oldValue, - Object newValue) { - recomputeRowValidState(row); - saveSelectedRowIfNeeded(); - - // when row valid state has changed, recompute action enabled states - recomputePopupActions(); - getModel().setModify(true); - } - - //------------------------------------------------------------------------// - //-- CloseableUI methods --// - //------------------------------------------------------------------------// - - @Override - public boolean quitUI() { - boolean result = quitScreen( - getModel().isValid(), - getModel().isModify(), - _("tutti.editProtocol.askCancelEditBeforeLeaving.cancelSaveSampleCategoryModel"), - _("tutti.editProtocol.askSaveBeforeLeaving.saveSampleCategoryModel"), - ui.getSaveButton().getAction() - ); - return result; - } - - //------------------------------------------------------------------------// - //-- AbstractTuttiUIHandler methods --// - //------------------------------------------------------------------------// - - @Override - public void beforeInitUI() { - - if (log.isDebugEnabled()) { - log.debug("for " + ui); - } - - List<Caracteristic> caracteristics = Lists.newArrayList( - persistenceService.getAllCaracteristicForSampleCategory()); - - SampleCategoryModel sampleCategoryModel = - getDataContext().getSampleCategoryModel(); - - EditSampleCategoryModelUIModel model = new EditSampleCategoryModelUIModel( - persistenceService.getEnumerationFile(), - sampleCategoryModel.getCategory(), - caracteristics); - - ui.setContextValue(model); - } - - @Override - public void afterInitUI() { - initUI(ui); - - EditSampleCategoryModelUIModel model = getModel(); - - initBeanFilterableComboBox(ui.getAvailableCaracteristicsComboBox(), - model.getCaracteristicList(), - null); - - model.addPropertyChangeListener(EditSampleCategoryModelUIModel.PROPERTY_CARACTERISTIC_LIST, new PropertyChangeListener() { - @Override - public void propertyChange(PropertyChangeEvent evt) { - if (log.isDebugEnabled()) { - log.debug("propertyChange " + EditSampleCategoryModelUIModel.PROPERTY_CARACTERISTIC_LIST); - } - ui.getAvailableCaracteristicsComboBox().setData(null); - ui.getAvailableCaracteristicsComboBox().setData((List<Caracteristic>) evt.getNewValue()); - ui.getAvailableCaracteristicsComboBox().setSelectedItem(null); - } - }); - - JXTable table = getTable(); - - // create table column model - DefaultTableColumnModelExt columnModel = - new DefaultTableColumnModelExt(); - - { - // Category column - - addColumnToModel(columnModel, - null, - newTableCellRender(Caracteristic.class, DecoratorService.CARACTERISTIC_PARAMETER_ONLY), - EditSampleCategoryModelTableModel.CARACTERISTIC); - - - } - - { // Label column - - addColumnToModel(columnModel, - null, - null, - EditSampleCategoryModelTableModel.LABEL); - } - - // create table model - EditSampleCategoryModelTableModel tableModel = - new EditSampleCategoryModelTableModel(columnModel); - - table.setModel(tableModel); - table.setColumnModel(columnModel); - - initTable(table); - - List<EditSampleCategoryModelRowModel> rows = model.getRows(); - tableModel.setRows(rows); - - recomputePopupActions(); - - model.setModify(true); - SwingUtilities.invokeLater(new Runnable() { - @Override - public void run() { - getModel().setModify(false); - } - }); - - } - - @Override - protected void initTable(JXTable table) { - super.initTable(table); - installTableKeyListener(table.getColumnModel(), table); - } - - @Override - public void cancel() { - - if (log.isDebugEnabled()) { - log.debug("Cancel UI " + ui); - } - - // close dialog - closeUI(ui); - } - - @Override - public void onCloseUI() { - - } - - @Override - public SwingValidator<EditSampleCategoryModelUIModel> getValidator() { - return null; - } - - - //------------------------------------------------------------------------// - //-- Internal methods --// - //------------------------------------------------------------------------// - - protected void recomputePopupActions() { - - int rowIndex = getTable().getSelectedRow(); - - boolean enableRemoveEntry = false; - boolean enableMoveUpEntry = false; - boolean enableMoveDownEntry = false; - - if (rowIndex != -1) { - - // there is a selected row - enableRemoveEntry = true; - - enableMoveUpEntry = rowIndex > 0; - - enableMoveDownEntry = rowIndex < getTable().getModel().getRowCount() - 1; - } - EditSampleCategoryModelUIModel model = getModel(); - model.setRemoveEntryEnabled(enableRemoveEntry); - model.setMoveUpEntryEnabled(enableMoveUpEntry); - model.setMoveDownEntryEnabled(enableMoveDownEntry); - } -} Deleted: trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/config/EditSampleCategoryModelUIModel.java =================================================================== --- trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/config/EditSampleCategoryModelUIModel.java 2013-07-27 14:13:54 UTC (rev 1159) +++ trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/config/EditSampleCategoryModelUIModel.java 2013-07-27 21:21:41 UTC (rev 1160) @@ -1,161 +0,0 @@ -package fr.ifremer.tutti.ui.swing.content.config; - -/* - * #%L - * Tutti :: UI - * $Id$ - * $HeadURL$ - * %% - * Copyright (C) 2012 - 2013 Ifremer - * %% - * This program is free software: you can redistribute it and/or modify - * it under the terms of the GNU General Public License as - * published by the Free Software Foundation, either version 3 of the - * License, or (at your option) any later version. - * - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public - * License along with this program. If not, see - * <http://www.gnu.org/licenses/gpl-3.0.html>. - * #L% - */ - -import com.google.common.base.Preconditions; -import com.google.common.collect.Lists; -import fr.ifremer.tutti.persistence.entities.data.SampleCategoryModel; -import fr.ifremer.tutti.persistence.entities.data.SampleCategoryModelEntry; -import fr.ifremer.tutti.persistence.entities.referential.Caracteristic; -import fr.ifremer.tutti.persistence.service.TuttiEnumerationFile; -import fr.ifremer.tutti.ui.swing.util.table.AbstractTuttiTableUIModel; -import org.nuiton.util.beans.Binder; -import org.nuiton.util.beans.BinderFactory; - -import java.util.List; - -/** - * TODO - * - * @author tchemit <chemit@codelutin.com> - * @since 2.5 - */ -public class EditSampleCategoryModelUIModel extends AbstractTuttiTableUIModel<SampleCategoryModel, EditSampleCategoryModelRowModel, EditSampleCategoryModelUIModel> { - - private static final long serialVersionUID = 1L; - - public static final String PROPERTY_CARACTERISTIC_LIST = "caracteristicList"; - - public static final String PROPERTY_REMOVE_ENTRY_ENABLED = "removeEntryEnabled"; - - public static final String PROPERTY_MOVE_UP_ENTRY_ENABLED = "moveUpEntryEnabled"; - - public static final String PROPERTY_MOVE_DOWN_ENTRY_ENABLED = "moveDownEntryEnabled"; - - protected final SampleCategoryModelEntry firstCategory; - - protected final List<Caracteristic> caracteristicList; - - protected static Binder<SampleCategoryModel, EditSampleCategoryModelUIModel> fromBeanBinder = - BinderFactory.newBinder(SampleCategoryModel.class, - EditSampleCategoryModelUIModel.class); - - protected static Binder<EditSampleCategoryModelUIModel, SampleCategoryModel> toBeanBinder = - BinderFactory.newBinder(EditSampleCategoryModelUIModel.class, SampleCategoryModel.class); - - private boolean removeEntryEnabled; - - private boolean moveUpEntryEnabled; - - private boolean moveDownEntryEnabled; - - public EditSampleCategoryModelUIModel(TuttiEnumerationFile enumerationFile, - List<SampleCategoryModelEntry> category, - List<Caracteristic> caracteristicList) { - - super(SampleCategoryModel.class, fromBeanBinder, toBeanBinder); - - Preconditions.checkNotNull(caracteristicList, "need a not null caracteristicList"); - Preconditions.checkNotNull(enumerationFile, "need a not null enumerationFile"); - Preconditions.checkNotNull(category, "need a not null category list"); - Preconditions.checkArgument(!category.isEmpty(), "need at least one first category (sorted-unsorted)"); - this.caracteristicList = caracteristicList; - this.firstCategory = category.get(0); - Preconditions.checkArgument(enumerationFile.PMFM_ID_SORTED_UNSORTED.equals(firstCategory.getCategoryId()), "first category must be sorted-unsorted caracteristic but was: " + firstCategory.getCategoryId()); - - List<EditSampleCategoryModelRowModel> rows = Lists.newArrayList(); - - for (SampleCategoryModelEntry sampleCategoryModelEntry : category) { - caracteristicList.remove(sampleCategoryModelEntry.getCaracteristic()); - if (firstCategory.equals(sampleCategoryModelEntry)) { - continue; - } - EditSampleCategoryModelRowModel row = new EditSampleCategoryModelRowModel(); - row.setCaracteristic(sampleCategoryModelEntry.getCaracteristic()); - row.setLabel(sampleCategoryModelEntry.getLabel()); - row.setValid(true); - rows.add(row); - } - setRows(rows); - } - - @Override - protected SampleCategoryModel newEntity() { - List<SampleCategoryModelEntry> entries = Lists.newArrayList(firstCategory); - int order = 1; - for (EditSampleCategoryModelRowModel row : getRows()) { - SampleCategoryModelEntry entry = new SampleCategoryModelEntry(); - entry.setCategoryId(row.getCategoryId()); - entry.setLabel(row.getLabel()); - entry.setOrder(order++); - entries.add(entry); - } - return new SampleCategoryModel(entries); - } - - public List<Caracteristic> getCaracteristicList() { - return caracteristicList; - } - - public boolean isRemoveEntryEnabled() { - return removeEntryEnabled; - } - - public void setRemoveEntryEnabled(boolean removeEntryEnabled) { - boolean oldValue = isRemoveEntryEnabled(); - this.removeEntryEnabled = removeEntryEnabled; - firePropertyChange(PROPERTY_REMOVE_ENTRY_ENABLED, oldValue, removeEntryEnabled); - } - - public boolean isMoveUpEntryEnabled() { - return moveUpEntryEnabled; - } - - public void setMoveUpEntryEnabled(boolean moveUpEntryEnabled) { - boolean oldValue = isMoveUpEntryEnabled(); - this.moveUpEntryEnabled = moveUpEntryEnabled; - firePropertyChange(PROPERTY_MOVE_UP_ENTRY_ENABLED, oldValue, moveUpEntryEnabled); - } - - public boolean isMoveDownEntryEnabled() { - return moveDownEntryEnabled; - } - - public void setMoveDownEntryEnabled(boolean moveDownEntryEnabled) { - boolean oldValue = isMoveDownEntryEnabled(); - this.moveDownEntryEnabled = moveDownEntryEnabled; - firePropertyChange(PROPERTY_MOVE_DOWN_ENTRY_ENABLED, oldValue, moveDownEntryEnabled); - } - - public void addCaracteristic(Caracteristic caracteristic) { - caracteristicList.add(caracteristic); - firePropertyChange(PROPERTY_CARACTERISTIC_LIST, null, caracteristicList); - } - - public void removeCaracteristic(Caracteristic caracteristic) { - caracteristicList.remove(caracteristic); - firePropertyChange(PROPERTY_CARACTERISTIC_LIST, null, caracteristicList); - } -} Deleted: trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/config/SaveSampleCategoryModelAction.java =================================================================== --- trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/config/SaveSampleCategoryModelAction.java 2013-07-27 14:13:54 UTC (rev 1159) +++ trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/config/SaveSampleCategoryModelAction.java 2013-07-27 21:21:41 UTC (rev 1160) @@ -1,66 +0,0 @@ -package fr.ifremer.tutti.ui.swing.content.config; - -/* - * #%L - * Tutti :: UI - * $Id$ - * $HeadURL$ - * %% - * Copyright (C) 2012 - 2013 Ifremer - * %% - * This program is free software: you can redistribute it and/or modify - * it under the terms of the GNU General Public License as - * published by the Free Software Foundation, either version 3 of the - * License, or (at your option) any later version. - * - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public - * License along with this program. If not, see - * <http://www.gnu.org/licenses/gpl-3.0.html>. - * #L% - */ - -import fr.ifremer.tutti.persistence.entities.data.SampleCategoryModel; -import fr.ifremer.tutti.ui.swing.util.action.AbstractTuttiAction; -import org.apache.commons.logging.Log; -import org.apache.commons.logging.LogFactory; - -/** - * To save the sample category model. - * - * @author tchemit <chemit@codelutin.com> - * @since 2.5 - */ -public class SaveSampleCategoryModelAction extends AbstractTuttiAction<EditSampleCategoryModelUIModel, EditSampleCategoryModelUI, EditSampleCategoryModelUIHandler> { - - /** Logger. */ - private static final Log log = - LogFactory.getLog(SaveSampleCategoryModelAction.class); - - public SaveSampleCategoryModelAction(EditSampleCategoryModelUIHandler handler) { - super(handler, true); - } - - @Override - protected void doAction() throws Exception { - EditSampleCategoryModelUIModel model = getModel(); - - SampleCategoryModel bean = model.toBean(); - - if (log.isInfoEnabled()) { - log.info("Will save sampleCategoryModel: " + bean); - } - getConfig().getServiceConfig().getPersistenceConfig().setSampleCategoryModel(bean); - - getConfig().save(); - - getDataContext().loadSampleCategoryModel(bean); - - model.setModify(false); - - } -} \ No newline at end of file Modified: trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/cruise/ExportCruiseValidationMessagesAction.java =================================================================== --- trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/cruise/ExportCruiseValidationMessagesAction.java 2013-07-27 14:13:54 UTC (rev 1159) +++ trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/cruise/ExportCruiseValidationMessagesAction.java 2013-07-27 21:21:41 UTC (rev 1160) @@ -25,7 +25,6 @@ */ import fr.ifremer.tutti.service.catches.ValidateCruiseOperationsService; -import fr.ifremer.tutti.ui.swing.util.TuttiUIUtil; import fr.ifremer.tutti.ui.swing.util.action.AbstractTuttiAction; import java.io.File; @@ -52,17 +51,15 @@ protected boolean prepareAction() throws Exception { boolean doAction = super.prepareAction(); - // choose file to export - file = TuttiUIUtil.saveFile( - _("tutti.validateCruise.action.export.all.chooseFile.defaultFile", getDataContext().getCruise().getName()), - getContext().getMainUI(), - _("tutti.validateCruise.action.export.all.chooseFile.title"), - _("tutti.validateCruise.action.export.all.chooseFile.label") - ); - doAction = file != null; if (doAction) { - // ask user to confirm overwrite. - doAction = getHandler().askOverwriteFile(file); + // choose file to export + file = saveFile( + String.format("validation_%s", getDataContext().getCruise().getName()), + "txt", + _("tutti.validateCruise.action.export.all.chooseFile.title"), + _("tutti.validateCruise.action.export.all.chooseFile.label") + ); + doAction = file != null; } return doAction; } Modified: trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/cruise/ExportOperationValidationMessagesAction.java =================================================================== --- trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/cruise/ExportOperationValidationMessagesAction.java 2013-07-27 14:13:54 UTC (rev 1159) +++ trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/cruise/ExportOperationValidationMessagesAction.java 2013-07-27 21:21:41 UTC (rev 1160) @@ -27,7 +27,6 @@ import fr.ifremer.tutti.persistence.entities.data.FishingOperation; import fr.ifremer.tutti.service.DecoratorService; import fr.ifremer.tutti.service.catches.ValidateCruiseOperationsService; -import fr.ifremer.tutti.ui.swing.util.TuttiUIUtil; import fr.ifremer.tutti.ui.swing.util.action.AbstractTuttiAction; import java.io.File; @@ -54,18 +53,17 @@ protected boolean prepareAction() throws Exception { boolean doAction = super.prepareAction(); - // choose file to export - file = TuttiUIUtil.saveFile( - _("tutti.validateCruise.action.export.operation.chooseFile.defaultFile", - decorate(getModel().getSelectedFishingOperation(), DecoratorService.FILE_NAME_COMPATIBLE)), - getContext().getMainUI(), - _("tutti.validateCruise.action.export.operation.chooseFile.title"), - _("tutti.validateCruise.action.export.operation.chooseFile.label") - ); - doAction = file != null; if (doAction) { - // ask user to confirm overwrite. - doAction = getHandler().askOverwriteFile(file); + + // choose file to export + file = saveFile( + String.format("validation_%s", + decorate(getModel().getSelectedFishingOperation(), DecoratorService.FILE_NAME_COMPATIBLE)), + "txt", + _("tutti.validateCruise.action.export.operation.chooseFile.title"), + _("tutti.validateCruise.action.export.operation.chooseFile.label") + ); + doAction = file != null; } return doAction; } Modified: trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/db/ExportAndCleanDbAction.java =================================================================== --- trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/db/ExportAndCleanDbAction.java 2013-07-27 14:13:54 UTC (rev 1159) +++ trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/db/ExportAndCleanDbAction.java 2013-07-27 21:21:41 UTC (rev 1160) @@ -25,12 +25,10 @@ */ import com.google.common.base.Preconditions; -import fr.ifremer.tutti.TuttiIOUtil; import fr.ifremer.tutti.persistence.ProgressionModel; import fr.ifremer.tutti.ui.swing.RunTutti; import fr.ifremer.tutti.ui.swing.content.AbstractMainUITuttiAction; import fr.ifremer.tutti.ui.swing.content.MainUIHandler; -import fr.ifremer.tutti.ui.swing.util.TuttiUIUtil; import org.apache.commons.logging.Log; import org.apache.commons.logging.LogFactory; @@ -71,25 +69,14 @@ // ask user file where to export db // choose file to import - file = TuttiUIUtil.saveFile( - "tutti-db-" + df.format(new Date()) + ".zip", - getContext().getMainUI(), + file = saveFile( + "tutti-db-" + df.format(new Date()), + "zip", _("tutti.dbManager.title.choose.dbExportFile"), _("tutti.dbManager.action.chooseDbExportFile"), "^.*\\.zip", _("tutti.common.file.zip") ); - if (file == null) { - - // user cancel - doAction = false; - } else { - - // add extension if missing - file = TuttiIOUtil.addExtensionIfMissing(file, ".zip"); - - // ask user to confirm overwrite. - doAction = getHandler().askOverwriteFile(file); - } + doAction = file != null; } return doAction; } Modified: trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/db/ExportDbAction.java =================================================================== --- trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/db/ExportDbAction.java 2013-07-27 14:13:54 UTC (rev 1159) +++ trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/db/ExportDbAction.java 2013-07-27 21:21:41 UTC (rev 1160) @@ -25,11 +25,9 @@ */ import com.google.common.base.Preconditions; -import fr.ifremer.tutti.TuttiIOUtil; import fr.ifremer.tutti.persistence.ProgressionModel; import fr.ifremer.tutti.ui.swing.content.AbstractMainUITuttiAction; import fr.ifremer.tutti.ui.swing.content.MainUIHandler; -import fr.ifremer.tutti.ui.swing.util.TuttiUIUtil; import org.apache.commons.logging.Log; import org.apache.commons.logging.LogFactory; @@ -69,25 +67,14 @@ // ask user file where to export db // choose file to import - file = TuttiUIUtil.saveFile( - "tutti-db-" + df.format(new Date()) + ".zip", - getContext().getMainUI(), + file = saveFile( + "tutti-db-" + df.format(new Date()), + "zip", _("tutti.dbManager.title.choose.dbExportFile"), _("tutti.dbManager.action.chooseDbExportFile"), "^.*\\.zip", _("tutti.common.file.zip") ); - if (file == null) { - - // user cancel - doAction = false; - } else { - - // add extension if missing - file = TuttiIOUtil.addExtensionIfMissing(file, ".zip"); - - // ask user to confirm overwrite. - doAction = getHandler().askOverwriteFile(file); - } + doAction = file != null; } return doAction; } Modified: trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/db/ImportDbAction.java =================================================================== --- trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/db/ImportDbAction.java 2013-07-27 14:13:54 UTC (rev 1159) +++ trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/db/ImportDbAction.java 2013-07-27 21:21:41 UTC (rev 1160) @@ -29,7 +29,6 @@ import fr.ifremer.tutti.persistence.config.TuttiPersistenceConfig; import fr.ifremer.tutti.ui.swing.content.AbstractMainUITuttiAction; import fr.ifremer.tutti.ui.swing.content.MainUIHandler; -import fr.ifremer.tutti.ui.swing.util.TuttiUIUtil; import fr.ifremer.tutti.ui.swing.util.action.TuttiActionHelper; import org.apache.commons.logging.Log; import org.apache.commons.logging.LogFactory; @@ -63,8 +62,7 @@ if (doAction) { // choose file to import - file = TuttiUIUtil.chooseFile( - getContext().getMainUI(), + file = chooseFile( _("tutti.dbManager.title.choose.dbImportFile"), _("tutti.dbManager.action.chooseDbFile"), "^.*\\.zip", _("tutti.common.file.zip") Modified: trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/home/CloneProtocolAction.java =================================================================== --- trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/home/CloneProtocolAction.java 2013-07-27 14:13:54 UTC (rev 1159) +++ trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/home/CloneProtocolAction.java 2013-07-27 21:21:41 UTC (rev 1160) @@ -25,14 +25,25 @@ */ import com.google.common.base.Preconditions; +import com.google.common.collect.Sets; +import fr.ifremer.tutti.persistence.entities.data.SampleCategoryModel; import fr.ifremer.tutti.persistence.entities.protocol.TuttiProtocol; +import fr.ifremer.tutti.persistence.entities.protocol.TuttiProtocols; +import fr.ifremer.tutti.persistence.entities.referential.Caracteristic; import fr.ifremer.tutti.ui.swing.TuttiScreen; import fr.ifremer.tutti.ui.swing.content.AbstractChangeScreenAction; import fr.ifremer.tutti.ui.swing.content.MainUIHandler; +import fr.ifremer.tutti.ui.swing.util.AbstractTuttiUIHandler; import jaxx.runtime.context.JAXXContextEntryDef; import org.apache.commons.logging.Log; import org.apache.commons.logging.LogFactory; +import javax.swing.JOptionPane; +import javax.swing.UIManager; +import java.util.Set; + +import static org.nuiton.i18n.I18n._; + /** * Opens the protocol creation screen with the data of an already existing protocol. * @@ -46,25 +57,99 @@ public static final JAXXContextEntryDef<TuttiProtocol> CLONE_PROTOCOL_ENTRY = new JAXXContextEntryDef<TuttiProtocol>("cloneProtocol", TuttiProtocol.class); + protected TuttiProtocol protocol; + public CloneProtocolAction(MainUIHandler handler) { super(handler, true, TuttiScreen.EDIT_PROTOCOL); } @Override - protected void doAction() throws Exception { - Preconditions.checkState(getContext().isProtocolFilled()); - if (log.isInfoEnabled()) { - log.info("Clone protocol: " + getContext().getProtocolId()); + protected boolean prepareAction() throws Exception { + + CLONE_PROTOCOL_ENTRY.removeContextValue(getContext().getMainUI()); + + boolean doAction = super.prepareAction(); + if (doAction) { + + // check that protocol is compatible with sample category model + SampleCategoryModel sampleCategoryModel = + getDataContext().getSampleCategoryModel(); + + if (log.isInfoEnabled()) { + log.info("Clone protocol: " + getContext().getProtocolId()); + } + + // get protocol + protocol = getContext().getPersistenceService().getProtocol(getContext().getProtocolId()); + + // remove id + protocol.setId((String) null); + + Set<Integer> badCategories = Sets.newHashSet(); + + TuttiProtocols.checkSampleCategories(sampleCategoryModel, + protocol, + badCategories); + + if (!badCategories.isEmpty()) { + + // detect some bad categories + if (log.isWarnEnabled()) { + log.warn("There is some bad categories: " + badCategories); + } + + String message = TuttiProtocols.getBadCategoriesMessage( + badCategories, + getDecorator(Caracteristic.class, null), + getContext().getPersistenceService()); + String htmlMessage = String.format( + AbstractTuttiUIHandler.CONFIRMATION_FORMAT, + message, + _("tutti.common.askBeforeCloneProtocol.help")); + int response = JOptionPane.showOptionDialog( + getContext().getActionUI(), + htmlMessage, + _("tutti.common.askBeforeEditProtocol.title"), + JOptionPane.YES_NO_OPTION, + JOptionPane.WARNING_MESSAGE, + UIManager.getIcon("warning"), + new Object[]{_("tutti.option.cleanAndClone"), _("tutti.option.clone"), _("tutti.option.cancel")}, + _("tutti.option.cancel") + ); + + switch (response) { + case 0: + // clean and clone + if (log.isInfoEnabled()) { + log.info("Clean and Clone"); + } + TuttiProtocols.removeBadCategories(sampleCategoryModel, + protocol); + break; + + case 1: + // clone with no clean + if (log.isInfoEnabled()) { + log.info("Clone with no cleaning"); + } + break; + default: + + // cancel + doAction = false; + } + } } + return doAction; + } - // get protocol - TuttiProtocol protocol = getContext().getPersistenceService().getProtocol(getContext().getProtocolId()); + @Override + protected void doAction() throws Exception { + Preconditions.checkNotNull(protocol); - // remove id - protocol.setId((String) null); - // store protocol in context CLONE_PROTOCOL_ENTRY.setContextValue(getContext().getMainUI(), protocol); + protocol = null; // removed selected protocol getContext().setProtocolId(null); Modified: trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/home/DeleteProtocolAction.java =================================================================== --- trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/home/DeleteProtocolAction.java 2013-07-27 14:13:54 UTC (rev 1159) +++ trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/home/DeleteProtocolAction.java 2013-07-27 21:21:41 UTC (rev 1160) @@ -57,7 +57,7 @@ TuttiProtocol protocol = getHandler().getModel().getProtocol(); result &= - getHandler().askBeforeDelete( + askBeforeDelete( _("tutti.selectCruise.action.deleteProtocol.title"), _("tutti.selectCruise.action.deleteProtocol.message", protocol.getName()) ); Modified: trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/home/EditProtocolAction.java =================================================================== --- trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/home/EditProtocolAction.java 2013-07-27 14:13:54 UTC (rev 1159) +++ trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/home/EditProtocolAction.java 2013-07-27 21:21:41 UTC (rev 1160) @@ -25,12 +25,25 @@ */ import com.google.common.base.Preconditions; +import com.google.common.collect.Sets; +import fr.ifremer.tutti.persistence.entities.data.SampleCategoryModel; +import fr.ifremer.tutti.persistence.entities.protocol.TuttiProtocol; +import fr.ifremer.tutti.persistence.entities.protocol.TuttiProtocols; +import fr.ifremer.tutti.persistence.entities.referential.Caracteristic; import fr.ifremer.tutti.ui.swing.TuttiScreen; import fr.ifremer.tutti.ui.swing.content.AbstractChangeScreenAction; import fr.ifremer.tutti.ui.swing.content.MainUIHandler; +import fr.ifremer.tutti.ui.swing.util.AbstractTuttiUIHandler; +import jaxx.runtime.context.JAXXContextEntryDef; import org.apache.commons.logging.Log; import org.apache.commons.logging.LogFactory; +import javax.swing.JOptionPane; +import javax.swing.UIManager; +import java.util.Set; + +import static org.nuiton.i18n.I18n._; + /** * Opens the protocol edition screen. * @@ -42,11 +55,94 @@ /** Logger. */ private static final Log log = LogFactory.getLog(EditProtocolAction.class); + public static final JAXXContextEntryDef<TuttiProtocol> CLEAN_PROTOCOL_ENTRY = new JAXXContextEntryDef<TuttiProtocol>("cleanProtocol", TuttiProtocol.class); + public EditProtocolAction(MainUIHandler handler) { super(handler, true, TuttiScreen.EDIT_PROTOCOL); } @Override + protected boolean prepareAction() throws Exception { + + CLEAN_PROTOCOL_ENTRY.removeContextValue(getContext().getMainUI()); + + boolean doAction = super.prepareAction(); + if (doAction) { + + // check that protocol is compatible with sample category model + SampleCategoryModel sampleCategoryModel = + getDataContext().getSampleCategoryModel(); + + TuttiProtocol protocol = getDataContext().getProtocol(); + + Set<Integer> badCategories = Sets.newHashSet(); + + TuttiProtocols.checkSampleCategories(sampleCategoryModel, + protocol, + badCategories); + + if (!badCategories.isEmpty()) { + + // detect some bad categories + if (log.isWarnEnabled()) { + log.warn("There is some bad categories: " + badCategories); + } + + String message = TuttiProtocols.getBadCategoriesMessage( + badCategories, + getDecorator(Caracteristic.class, null), + getContext().getPersistenceService()); + + String htmlMessage = String.format( + AbstractTuttiUIHandler.CONFIRMATION_FORMAT, + message, + _("tutti.common.askBeforeEditProtocol.help")); + int response = JOptionPane.showOptionDialog( + getContext().getActionUI(), + htmlMessage, + _("tutti.common.askBeforeEditProtocol.title"), + JOptionPane.YES_NO_OPTION, + JOptionPane.WARNING_MESSAGE, + UIManager.getIcon("warning"), + new Object[]{_("tutti.option.cleanAndEdit"), _("tutti.option.edit"), _("tutti.option.cancel")}, + _("tutti.option.cancel") + ); + + switch (response) { + case 0: + // edit and clean + if (log.isInfoEnabled()) { + log.info("Clean and edit"); + } + + protocol = getContext().getPersistenceService().getProtocol(getContext().getProtocolId()); + + CLEAN_PROTOCOL_ENTRY.setContextValue(getContext().getMainUI(), protocol); + + TuttiProtocols.removeBadCategories(sampleCategoryModel, + protocol); + + break; + + case 1: + // edit with no modification + if (log.isInfoEnabled()) { + log.info("Edit with no cleaning"); + } + break; + + default: + + // cancel + doAction = false; + } + + } + } + return doAction; + } + + @Override protected void doAction() throws Exception { Preconditions.checkState(getContext().isProtocolFilled()); if (log.isInfoEnabled()) { @@ -54,4 +150,6 @@ } super.doAction(); } + + } Modified: trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/home/ExportCruiseAction.java =================================================================== --- trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/home/ExportCruiseAction.java 2013-07-27 14:13:54 UTC (rev 1159) +++ trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/home/ExportCruiseAction.java 2013-07-27 21:21:41 UTC (rev 1160) @@ -25,12 +25,10 @@ */ import com.google.common.base.Preconditions; -import fr.ifremer.tutti.TuttiIOUtil; import fr.ifremer.tutti.persistence.ProgressionModel; import fr.ifremer.tutti.persistence.entities.data.Cruise; import fr.ifremer.tutti.persistence.entities.protocol.TuttiProtocol; import fr.ifremer.tutti.service.export.TuttiExportService; -import fr.ifremer.tutti.ui.swing.util.TuttiUIUtil; import fr.ifremer.tutti.ui.swing.util.action.AbstractTuttiAction; import org.apache.commons.logging.Log; import org.apache.commons.logging.LogFactory; @@ -66,20 +64,14 @@ Cruise cruise = getModel().getCruise(); // choose file to export - file = TuttiUIUtil.saveFile( - "exportCruise-" + cruise.getName() + ".zip", - getContext().getMainUI(), + file = saveFile( + "exportCruise-" + cruise.getName(), + "zip", _("tutti.selectCruise.title.choose.exportCruiseFile"), _("tutti.selectCruise.action.chooseCruiseExportFile"), "^.+\\.zip$", _("tutti.common.file.zip") ); doAction = file != null; - if (doAction) { - file = TuttiIOUtil.addExtensionIfMissing(file, ".zip"); - - // ask user to confirm overwrite. - doAction = getHandler().askOverwriteFile(file); - } } return doAction; } @@ -110,7 +102,7 @@ if (getContext().isProtocolFilled()) { protocol = getDataContext().getProtocol(); if (log.isInfoEnabled()) { - log.info("Will use protocol "+protocol.getName()); + log.info("Will use protocol " + protocol.getName()); } } Modified: trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/home/ExportCruiseForSumatraAction.java =================================================================== --- trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/home/ExportCruiseForSumatraAction.java 2013-07-27 14:13:54 UTC (rev 1159) +++ trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/home/ExportCruiseForSumatraAction.java 2013-07-27 21:21:41 UTC (rev 1160) @@ -25,10 +25,8 @@ */ import com.google.common.base.Preconditions; -import fr.ifremer.tutti.TuttiIOUtil; import fr.ifremer.tutti.persistence.entities.data.Cruise; import fr.ifremer.tutti.service.sumatra.TuttiCatchesSumatraExportService; -import fr.ifremer.tutti.ui.swing.util.TuttiUIUtil; import fr.ifremer.tutti.ui.swing.util.action.AbstractTuttiAction; import org.apache.commons.logging.Log; import org.apache.commons.logging.LogFactory; @@ -66,20 +64,14 @@ String date = DateUtil.formatDate(new Date(), "dd-MM-yyyy"); // choose file to export - file = TuttiUIUtil.saveFile( - _("tutti.exportCruiseForSumatra.choose.exportFile.default", getDataContext().getCruise().getName(), date), - getContext().getMainUI(), + file = saveFile( + String.format("sumatra_%s_%s", getDataContext().getCruise().getName(), date), + "csv", _("tutti.exportCruiseForSumatra.title.choose.exportFile"), _("tutti.exportCruiseForSumatra.action.chooseFile"), "^.+\\.csv$", _("tutti.common.file.csv") ); doAction = file != null; - if (doAction) { - file = TuttiIOUtil.addExtensionIfMissing(file, ".csv"); - - // ask user to confirm overwrite. - doAction = getHandler().askOverwriteFile(file); - } } return doAction; } Modified: trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/home/ExportProgramAction.java =================================================================== --- trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/home/ExportProgramAction.java 2013-07-27 14:13:54 UTC (rev 1159) +++ trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/home/ExportProgramAction.java 2013-07-27 21:21:41 UTC (rev 1160) @@ -25,13 +25,11 @@ */ import com.google.common.base.Preconditions; -import fr.ifremer.tutti.TuttiIOUtil; import fr.ifremer.tutti.persistence.ProgressionModel; 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.export.TuttiExportService; -import fr.ifremer.tutti.ui.swing.util.TuttiUIUtil; import fr.ifremer.tutti.ui.swing.util.action.AbstractTuttiAction; import org.apache.commons.logging.Log; import org.apache.commons.logging.LogFactory; @@ -67,20 +65,13 @@ if (doAction) { // choose file to export - file = TuttiUIUtil.saveFile( - "exportProgram-" + program.getName() + ".zip", - getContext().getMainUI(), + file = saveFile( + "exportProgram-" + program.getName() ,"zip", _("tutti.selectCruise.title.choose.exportProgramFile"), _("tutti.selectCruise.action.chooseProgramExportFile"), "^.+\\.zip$", _("tutti.common.file.zip") ); doAction = file != null; - if (doAction) { - file = TuttiIOUtil.addExtensionIfMissing(file, ".zip"); - - // ask user to confirm overwrite. - doAction = getHandler().askOverwriteFile(file); - } } return doAction; } @@ -114,7 +105,7 @@ if (getContext().isProtocolFilled()) { protocol = getDataContext().getProtocol(); if (log.isInfoEnabled()) { - log.info("Will use protocol "+protocol.getName()); + log.info("Will use protocol " + protocol.getName()); } } TuttiExportService service = getContext().getTuttiExportService(); Modified: trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/home/ExportProtocolAction.java =================================================================== --- trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/home/ExportProtocolAction.java 2013-07-27 14:13:54 UTC (rev 1159) +++ trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/home/ExportProtocolAction.java 2013-07-27 21:21:41 UTC (rev 1160) @@ -25,10 +25,8 @@ */ import com.google.common.base.Preconditions; -import fr.ifremer.tutti.TuttiIOUtil; import fr.ifremer.tutti.persistence.entities.protocol.TuttiProtocol; import fr.ifremer.tutti.service.protocol.TuttiProtocolImportExportService; -import fr.ifremer.tutti.ui.swing.util.TuttiUIUtil; import fr.ifremer.tutti.ui.swing.util.action.AbstractTuttiAction; import org.apache.commons.logging.Log; import org.apache.commons.logging.LogFactory; @@ -64,20 +62,14 @@ TuttiProtocol protocol = getModel().getProtocol(); // choose file to export - file = TuttiUIUtil.saveFile( - "protocol-" + protocol.getName().replaceAll(" ", "_") + ".tuttiProtocol", - getContext().getMainUI(), + file = saveFile( + "protocol-" + protocol.getName().replaceAll(" ", "_") , + "tuttiProtocol", _("tutti.selectCruise.title.choose.exportFile"), _("tutti.selectCruise.action.exportProtocol"), "^.+\\.tuttiProtocol$", _("tutti.common.file.protocol") ); doAction = file != null; - if (doAction) { - file = TuttiIOUtil.addExtensionIfMissing(file, ".tuttiProtocol"); - - // ask user to confirm overwrite. - doAction = getHandler().askOverwriteFile(file); - } } return doAction; } Modified: trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/home/ImportProtocolAction.java =================================================================== --- trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/home/ImportProtocolAction.java 2013-07-27 14:13:54 UTC (rev 1159) +++ trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/home/ImportProtocolAction.java 2013-07-27 21:21:41 UTC (rev 1160) @@ -25,17 +25,24 @@ */ import com.google.common.base.Preconditions; +import com.google.common.collect.Sets; +import fr.ifremer.tutti.persistence.entities.data.SampleCategoryModel; import fr.ifremer.tutti.persistence.entities.protocol.TuttiProtocol; +import fr.ifremer.tutti.persistence.entities.protocol.TuttiProtocols; +import fr.ifremer.tutti.persistence.entities.referential.Caracteristic; import fr.ifremer.tutti.service.protocol.TuttiProtocolImportExportService; import fr.ifremer.tutti.ui.swing.TuttiScreen; import fr.ifremer.tutti.ui.swing.content.AbstractChangeScreenAction; import fr.ifremer.tutti.ui.swing.content.MainUIHandler; -import fr.ifremer.tutti.ui.swing.util.TuttiUIUtil; +import fr.ifremer.tutti.ui.swing.util.AbstractTuttiUIHandler; import jaxx.runtime.context.JAXXContextEntryDef; import org.apache.commons.logging.Log; import org.apache.commons.logging.LogFactory; +import javax.swing.JOptionPane; +import javax.swing.UIManager; import java.io.File; +import java.util.Set; import static org.nuiton.i18n.I18n._; @@ -53,7 +60,7 @@ public static final JAXXContextEntryDef<TuttiProtocol> IMPORT_PROTOCOL_ENTRY = new JAXXContextEntryDef<TuttiProtocol>("importProtocol", TuttiProtocol.class); - private File file; + protected TuttiProtocol protocol; public ImportProtocolAction(MainUIHandler handler) { super(handler, true, TuttiScreen.EDIT_PROTOCOL); @@ -62,12 +69,15 @@ @Override protected boolean prepareAction() throws Exception { + IMPORT_PROTOCOL_ENTRY.removeContextValue(getContext().getMainUI()); + boolean doAction = super.prepareAction(); + File file = null; + if (doAction) { // choose file to import - file = TuttiUIUtil.chooseFile( - getContext().getMainUI(), + file = chooseFile( _("tutti.selectCruise.title.choose.importFile"), _("tutti.selectCruise.action.importProtocol"), "^.+\\.tuttiProtocol$", _("tutti.common.file.protocol") @@ -75,36 +85,94 @@ doAction = file != null; } + + if (doAction) { + + // import protocol + if (log.isInfoEnabled()) { + log.info("Will import protocol file: " + file); + } + + TuttiProtocolImportExportService service = + getContext().getTuttiProtocolImportExportService(); + + protocol = service.importProtocol(file); + + // remove id + protocol.setId((String) null); + + sendMessage(_("tutti.importProtocol.action.success", protocol.getName())); + + // check that protocol is compatible with sample category model + SampleCategoryModel sampleCategoryModel = + getDataContext().getSampleCategoryModel(); + + Set<Integer> badCategories = Sets.newHashSet(); + + TuttiProtocols.checkSampleCategories(sampleCategoryModel, + protocol, + badCategories); + + if (!badCategories.isEmpty()) { + + // detect some bad categories + if (log.isWarnEnabled()) { + log.warn("There is some bad categories: " + badCategories); + } + + String message = TuttiProtocols.getBadCategoriesMessage( + badCategories, + getDecorator(Caracteristic.class, null), + getContext().getPersistenceService()); + + String htmlMessage = String.format( + AbstractTuttiUIHandler.CONFIRMATION_FORMAT, + message, + _("tutti.common.askBeforeImportProtocol.help")); + int response = JOptionPane.showOptionDialog( + getContext().getActionUI(), + htmlMessage, + _("tutti.common.askBeforeEditProtocol.title"), + JOptionPane.YES_NO_OPTION, + JOptionPane.WARNING_MESSAGE, + UIManager.getIcon("warning"), + new Object[]{_("tutti.option.cleanAndImport"), _("tutti.option.import"), _("tutti.option.cancel")}, + _("tutti.option.cancel") + ); + + switch (response) { + case 0: + // clean and import + if (log.isInfoEnabled()) { + log.info("Clean and Import"); + } + TuttiProtocols.removeBadCategories(sampleCategoryModel, + protocol); + break; + case 1: + // import with no clean + if (log.isInfoEnabled()) { + log.info("Import with no cleaning"); + } + break; + default: + + // cancel + doAction = false; + } + } + } return doAction; } @Override - protected void releaseAction() { - file = null; - super.releaseAction(); - } - - @Override protected void doAction() throws Exception { - Preconditions.checkNotNull(file); + Preconditions.checkNotNull(protocol); - if (log.isInfoEnabled()) { - log.info("Will import protocol file: " + file); - } - - // import protocol - TuttiProtocolImportExportService service = - getContext().getTuttiProtocolImportExportService(); - TuttiProtocol protocol = service.importProtocol(file); - - sendMessage(_("tutti.importProtocol.action.success", protocol.getName())); - // store protocol in context IMPORT_PROTOCOL_ENTRY.setContextValue(getContext().getMainUI(), protocol); + protocol = null; - // remove id - protocol.setId((String) null); - // removed selected protocol getContext().setProtocolId(null); super.doAction(); Modified: trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/home/SendCruiseReportAction.java =================================================================== --- trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/home/SendCruiseReportAction.java 2013-07-27 14:13:54 UTC (rev 1159) +++ trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/home/SendCruiseReportAction.java 2013-07-27 21:21:41 UTC (rev 1160) @@ -25,7 +25,6 @@ */ import com.google.common.base.Preconditions; -import fr.ifremer.tutti.TuttiIOUtil; import fr.ifremer.tutti.TuttiTechnicalException; import fr.ifremer.tutti.persistence.entities.data.Cruise; import fr.ifremer.tutti.service.catches.ExportCatchesReportService; @@ -34,7 +33,7 @@ import org.apache.commons.logging.Log; import org.apache.commons.logging.LogFactory; -import javax.swing.*; +import javax.swing.JOptionPane; import java.io.File; import static org.nuiton.i18n.I18n._; @@ -66,20 +65,14 @@ Cruise cruise = getModel().getCruise(); // choose file to export - file = TuttiUIUtil.saveFile( - "exportCruise-" + cruise.getName() + ".pdf", - getContext().getMainUI(), + file = saveFile( + "exportCruise-" + cruise.getName(), + "pdf", _("tutti.sendCruiseReport.title.choose.exportFile"), _("tutti.sendCruiseReport.action.chooseFile"), "^.+\\.pdf$", _("tutti.common.file.pdf") ); doAction = file != null; - if (doAction) { - file = TuttiIOUtil.addExtensionIfMissing(file, ".pdf"); - - // ask user to confirm overwrite. - doAction = getHandler().askOverwriteFile(file); - } } return doAction; } @@ -106,11 +99,11 @@ getContext().getGeneratePDFService(); service.generatePDFFile(file, cruise.getId(), getConfig().getI18nLocale()); - try { - throw new TuttiTechnicalException(); -// TuttiUIUtil.mail(_("tutti.sendCruiseReport.mail.subject", cruise.getName()), -// _("tutti.sendCruiseReport.mail.body", cruise.getName(), file.getAbsolutePath())); + try { + TuttiUIUtil.mail(_("tutti.sendCruiseReport.mail.subject", cruise.getName()), + _("tutti.sendCruiseReport.mail.body", cruise.getName(), file.getAbsolutePath())); + } catch (TuttiTechnicalException e) { JOptionPane.showMessageDialog(getContext().getMainUI(), _("tutti.sendCruiseReport.action.error.mail.message", file), Modified: trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/operation/AbstractTuttiBatchUIModel.java =================================================================== --- trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/operation/AbstractTuttiBatchUIModel.java 2013-07-27 14:13:54 UTC (rev 1159) +++ trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/operation/AbstractTuttiBatchUIModel.java 2013-07-27 21:21:41 UTC (rev 1160) @@ -27,7 +27,6 @@ import com.google.common.collect.Sets; import fr.ifremer.tutti.persistence.entities.data.FishingOperation; import fr.ifremer.tutti.ui.swing.content.operation.catches.EditCatchesUIModel; -import fr.ifremer.tutti.ui.swing.content.operation.catches.species.SpeciesBatchRowModel; import fr.ifremer.tutti.ui.swing.util.AbstractTuttiBeanUIModel; import fr.ifremer.tutti.ui.swing.util.table.AbstractTuttiTableUIModel; Modified: trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/operation/DeleteFishingOperationAction.java =================================================================== --- trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/operation/DeleteFishingOperationAction.java 2013-07-27 14:13:54 UTC (rev 1159) +++ trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/operation/DeleteFishingOperationAction.java 2013-07-27 21:21:41 UTC (rev 1160) @@ -56,7 +56,7 @@ FishingOperation fishingOperation = getModel().getSelectedFishingOperation(); canContinue &= fishingOperation != null && !TuttiEntities.isNew(fishingOperation) && - getHandler().askBeforeDelete( + askBeforeDelete( _("tutti.editFishingOperation.action.deleteFishingOperation.title"), _("tutti.editFishingOperation.action.deleteFishingOperation.message", decorate(fishingOperation)) ); 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-07-27 14:13:54 UTC (rev 1159) +++ trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/operation/EditFishingOperationUIHandler.java 2013-07-27 21:21:41 UTC (rev 1160) @@ -40,7 +40,6 @@ import fr.ifremer.tutti.ui.swing.content.operation.fishing.AbstractCaracteristicTabUIModel; import fr.ifremer.tutti.ui.swing.content.operation.fishing.GearUseFeatureTabUIModel; import fr.ifremer.tutti.ui.swing.content.operation.fishing.VesselUseFeatureTabUIModel; -import fr.ifremer.tutti.ui.swing.util.AbstractTuttiBeanUIModel; import fr.ifremer.tutti.ui.swing.util.AbstractTuttiTabContainerUIHandler; import fr.ifremer.tutti.ui.swing.util.TabHandler; import fr.ifremer.tutti.ui.swing.util.TuttiBeanMonitor; 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-07-27 14:13:54 UTC (rev 1159) +++ trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/operation/FishingOperationsUIHandler.java 2013-07-27 21:21:41 UTC (rev 1160) @@ -280,8 +280,7 @@ String result = null; if (!catchSampleModelValid) { result = _("tutti.fishingOperations.warn.catchBatch.invalidSampleCategoryModel"); - } else - if (catchNotFound) { + } else if (catchNotFound) { result = _("tutti.fishingOperations.warn.catchBatch.notFound"); } else if (!catchEnabled) { result = _("tutti.fishingOperations.warn.invalid.batch.model"); Modified: trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/operation/catches/AbstractExportMultiPostAction.java =================================================================== --- trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/operation/catches/AbstractExportMultiPostAction.java 2013-07-27 14:13:54 UTC (rev 1159) +++ trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/operation/catches/AbstractExportMultiPostAction.java 2013-07-27 21:21:41 UTC (rev 1160) @@ -29,7 +29,6 @@ import fr.ifremer.tutti.service.catches.multipost.TuttiMultiPostImportExportService; import fr.ifremer.tutti.ui.swing.util.AbstractTuttiUIHandler; import fr.ifremer.tutti.ui.swing.util.TuttiUI; -import fr.ifremer.tutti.ui.swing.util.TuttiUIUtil; import fr.ifremer.tutti.ui.swing.util.action.AbstractTuttiAction; import org.jdesktop.beans.AbstractBean; @@ -65,23 +64,15 @@ String extension = getFileExtension(); // choose file to export - file = TuttiUIUtil.saveFile( - decorate(currentOperation, DecoratorService.FILE_NAME_COMPATIBLE) + "." + extension, - getContext().getMainUI(), + file = saveFile( + decorate(currentOperation, DecoratorService.FILE_NAME_COMPATIBLE), + extension, getFileChooserTitle(), getFileChooserButton(), "^.*\\." + extension, getFileExtensionDescription() ); - if (file == null) { - - // user cancel - doAction = false; - } else { - - // ask user to confirm overwrite. - doAction = getHandler().askOverwriteFile(file); - } + doAction = file != null; } return doAction; } Modified: trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/operation/catches/AbstractImportMultiPostAction.java =================================================================== --- trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/operation/catches/AbstractImportMultiPostAction.java 2013-07-27 14:13:54 UTC (rev 1159) +++ trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/operation/catches/AbstractImportMultiPostAction.java 2013-07-27 21:21:41 UTC (rev 1160) @@ -30,7 +30,6 @@ import fr.ifremer.tutti.ui.swing.content.operation.FishingOperationsUI; import fr.ifremer.tutti.ui.swing.util.AbstractTuttiUIHandler; import fr.ifremer.tutti.ui.swing.util.TuttiUI; -import fr.ifremer.tutti.ui.swing.util.TuttiUIUtil; import fr.ifremer.tutti.ui.swing.util.action.AbstractTuttiAction; import fr.ifremer.tutti.ui.swing.util.action.TuttiActionHelper; import org.jdesktop.beans.AbstractBean; @@ -72,8 +71,7 @@ if (doAction) { // choose file to import - file = TuttiUIUtil.chooseFile( - getContext().getMainUI(), + file = chooseFile( getFileChooserTitle(), getFileChooserButton(), "^.*\\." + getFileExtension(), Modified: trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/operation/catches/benthos/ImportMultiPostAction.java =================================================================== --- trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/operation/catches/benthos/ImportMultiPostAction.java 2013-07-27 14:13:54 UTC (rev 1159) +++ trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/operation/catches/benthos/ImportMultiPostAction.java 2013-07-27 21:21:41 UTC (rev 1160) @@ -27,7 +27,6 @@ import fr.ifremer.tutti.persistence.entities.data.BenthosBatch; import fr.ifremer.tutti.persistence.entities.data.CatchBatch; import fr.ifremer.tutti.persistence.entities.data.FishingOperation; -import fr.ifremer.tutti.persistence.entities.data.SpeciesBatch; import fr.ifremer.tutti.service.catches.multipost.TuttiMultiPostImportExportService; import fr.ifremer.tutti.ui.swing.content.operation.catches.AbstractImportMultiPostAction; import fr.ifremer.tutti.ui.swing.content.operation.catches.MultiPostImportLogDialog; Modified: trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/operation/catches/benthos/create/CreateBenthosBatchUIHandler.java =================================================================== --- trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/operation/catches/benthos/create/CreateBenthosBatchUIHandler.java 2013-07-27 14:13:54 UTC (rev 1159) +++ trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/operation/catches/benthos/create/CreateBenthosBatchUIHandler.java 2013-07-27 21:21:41 UTC (rev 1160) @@ -27,7 +27,6 @@ import com.google.common.collect.Lists; import com.google.common.collect.Multimap; import fr.ifremer.tutti.persistence.TuttiPersistence; -import fr.ifremer.tutti.persistence.entities.TuttiEntities; import fr.ifremer.tutti.persistence.entities.data.SampleCategoryModel; import fr.ifremer.tutti.persistence.entities.data.SampleCategoryModelEntry; import fr.ifremer.tutti.persistence.entities.referential.Caracteristic; Modified: trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/operation/catches/benthos/frequency/BenthosFrequencyCellComponent.java =================================================================== --- trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/operation/catches/benthos/frequency/BenthosFrequencyCellComponent.java 2013-07-27 14:13:54 UTC (rev 1159) +++ trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/operation/catches/benthos/frequency/BenthosFrequencyCellComponent.java 2013-07-27 21:21:41 UTC (rev 1160) @@ -180,7 +180,7 @@ // the row is valid even if there is no data (just for the highlighter) // but we save it only if there is data if (row.isValid() - && !(row.getNumber() == null && row.getWeight() == null)) { + && !(row.getNumber() == null && row.getWeight() == null)) { // can keep this row frequency.add(row); Modified: trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/operation/catches/benthos/frequency/BenthosFrequencyUI.jaxx =================================================================== --- trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/operation/catches/benthos/frequency/BenthosFrequencyUI.jaxx 2013-07-27 14:13:54 UTC (rev 1159) +++ trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/operation/catches/benthos/frequency/BenthosFrequencyUI.jaxx 2013-07-27 21:21:41 UTC (rev 1160) @@ -187,7 +187,8 @@ </JPanel> </JPanel> </JPanel> - <Table id="lengthstepSettingsBlock" fill='both' constraints='BorderLayout.SOUTH'> + <Table id="lengthstepSettingsBlock" fill='both' + constraints='BorderLayout.SOUTH'> <row> <cell columns='6'> <JSeparator/> Modified: trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/operation/catches/species/frequency/SpeciesFrequencyCellComponent.java =================================================================== --- trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/operation/catches/species/frequency/SpeciesFrequencyCellComponent.java 2013-07-27 14:13:54 UTC (rev 1159) +++ trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/operation/catches/species/frequency/SpeciesFrequencyCellComponent.java 2013-07-27 21:21:41 UTC (rev 1160) @@ -180,7 +180,7 @@ // the row is valid even if there is no data (just for the highlighter) // but we save it only if there is data if (row.isValid() - && !(row.getNumber() == null && row.getWeight() == null)) { + && !(row.getNumber() == null && row.getWeight() == null)) { // can keep this row frequency.add(row); Modified: trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/operation/catches/species/frequency/SpeciesFrequencyUI.jaxx =================================================================== --- trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/operation/catches/species/frequency/SpeciesFrequencyUI.jaxx 2013-07-27 14:13:54 UTC (rev 1159) +++ trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/operation/catches/species/frequency/SpeciesFrequencyUI.jaxx 2013-07-27 21:21:41 UTC (rev 1160) @@ -187,7 +187,8 @@ </JPanel> </JPanel> </JPanel> - <Table id="lengthstepSettingsBlock" fill='both' constraints='BorderLayout.SOUTH'> + <Table id="lengthstepSettingsBlock" fill='both' + constraints='BorderLayout.SOUTH'> <row> <cell columns='6'> <JSeparator/> Modified: trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/protocol/EditProtocolUI.css =================================================================== --- trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/protocol/EditProtocolUI.css 2013-07-27 14:13:54 UTC (rev 1159) +++ trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/protocol/EditProtocolUI.css 2013-07-27 21:21:41 UTC (rev 1160) @@ -70,7 +70,7 @@ #saveWarningContainer { background: {new java.awt.Color(245, 218, 88)}; - visible: {model.isImported() || model.isCloned()}; + visible: {model.isImported() || model.isCloned() || model.isCleaned()}; } #saveWarning { 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-07-27 14:13:54 UTC (rev 1159) +++ trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/protocol/EditProtocolUIHandler.java 2013-07-27 21:21:41 UTC (rev 1160) @@ -37,6 +37,7 @@ import fr.ifremer.tutti.persistence.entities.referential.Species; import fr.ifremer.tutti.service.PersistenceService; import fr.ifremer.tutti.ui.swing.content.home.CloneProtocolAction; +import fr.ifremer.tutti.ui.swing.content.home.EditProtocolAction; import fr.ifremer.tutti.ui.swing.content.home.ImportProtocolAction; import fr.ifremer.tutti.ui.swing.util.AbstractTuttiUIHandler; import fr.ifremer.tutti.ui.swing.util.CloseableUI; @@ -197,6 +198,16 @@ protocol = getDataContext().getProtocol(); + if (EditProtocolAction.CLEAN_PROTOCOL_ENTRY.getContextValue(ui) != null) { + + // clean protocol + protocol = EditProtocolAction.CLEAN_PROTOCOL_ENTRY.getContextValue(ui); + + EditProtocolAction.CLEAN_PROTOCOL_ENTRY.removeContextValue(ui); + + model.setCleaned(true); + ui.getSaveWarning().setText(_("tutti.editProtocol.warn.clean")); + } model.fromBean(protocol); } else if ((protocol = ImportProtocolAction.IMPORT_PROTOCOL_ENTRY.getContextValue(ui)) != null) { @@ -291,6 +302,11 @@ for (SampleCategoryModelEntry sampleCategoryModelEntry : sampleCategoryModel.getCategory()) { + if (sampleCategoryModelEntry.getOrder() == 0) { + // first category is not editable + continue; + } + MandatorySampleCategoryColumnIdentifier identifier = MandatorySampleCategoryColumnIdentifier.newId( EditProtocolSpeciesRowModel.PROPERTY_MANDATORY_SAMPLE_CATEGORY_ID, sampleCategoryModelEntry.getCategoryId(), @@ -301,11 +317,6 @@ addBooleanColumnToModel(columnModel, identifier, table); } -// addBooleanColumnToModel(columnModel, EditProtocolSpeciesTableModel.SIZE_ENABLED, table); -// addBooleanColumnToModel(columnModel, EditProtocolSpeciesTableModel.SEX_ENABLED, table); -// addBooleanColumnToModel(columnModel, EditProtocolSpeciesTableModel.MATURITY_ENABLED, table); -// addBooleanColumnToModel(columnModel, EditProtocolSpeciesTableModel.AGE_ENABLED, table); - addBooleanColumnToModel(columnModel, EditProtocolSpeciesTableModel.CALCIFY_SAMPLE_ENABLED, table); EditProtocolSpeciesTableModel tableModel = @@ -361,11 +372,6 @@ addBooleanColumnToModel(columnModel, identifier, table); } -// addBooleanColumnToModel(columnModel, EditProtocolSpeciesTableModel.SIZE_ENABLED, table); -// addBooleanColumnToModel(columnModel, EditProtocolSpeciesTableModel.SEX_ENABLED, table); -// addBooleanColumnToModel(columnModel, EditProtocolSpeciesTableModel.MATURITY_ENABLED, table); -// addBooleanColumnToModel(columnModel, EditProtocolSpeciesTableModel.AGE_ENABLED, table); - addBooleanColumnToModel(columnModel, EditProtocolSpeciesTableModel.CALCIFY_SAMPLE_ENABLED, table); EditProtocolSpeciesTableModel tableModel = @@ -428,7 +434,7 @@ }); // if new protocol can already cancel his creation - model.setModify(model.isCreate()); + model.setModify(model.isCreate() || model.isCleaned()); ui.getCaracteristicPane().addChangeListener(new ChangeListener() { 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-07-27 14:13:54 UTC (rev 1159) +++ trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/protocol/EditProtocolUIModel.java 2013-07-27 21:21:41 UTC (rev 1160) @@ -60,6 +60,8 @@ public static final String PROPERTY_CLONED = "cloned"; + public static final String PROPERTY_CLEANED = "cleaned"; + /** * Delegate edit object. * @@ -82,6 +84,13 @@ protected boolean cloned; /** + * Flag when a incoming protocol is cleaned. + * + * @since 2.5 + */ + protected boolean cleaned; + + /** * Can user remove a selected species? * * @since 0.3 @@ -202,6 +211,16 @@ firePropertyChange(PROPERTY_CLONED, oldValue, cloned); } + public boolean isCleaned() { + return cleaned; + } + + public void setCleaned(boolean cleaned) { + Object oldValue = isCleaned(); + this.cleaned = cleaned; + firePropertyChange(PROPERTY_CLEANED, oldValue, cleaned); + } + public List<Species> getAllSpecies() { return allSpecies; } Modified: trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/protocol/ExportAllCaracteristicAction.java =================================================================== --- trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/protocol/ExportAllCaracteristicAction.java 2013-07-27 14:13:54 UTC (rev 1159) +++ trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/protocol/ExportAllCaracteristicAction.java 2013-07-27 21:21:41 UTC (rev 1160) @@ -25,9 +25,7 @@ */ import com.google.common.base.Preconditions; -import fr.ifremer.tutti.TuttiIOUtil; import fr.ifremer.tutti.service.protocol.TuttiProtocolImportExportService; -import fr.ifremer.tutti.ui.swing.util.TuttiUIUtil; import fr.ifremer.tutti.ui.swing.util.action.AbstractTuttiAction; import org.apache.commons.logging.Log; import org.apache.commons.logging.LogFactory; @@ -62,25 +60,14 @@ if (doAction) { // choose file to export - file = TuttiUIUtil.saveFile( - "tuttiProtocol-" + getModel().getName() + "-allCaracteristics.csv", - getContext().getMainUI(), + file = saveFile( + "tuttiProtocol-" + getModel().getName() + "-allCaracteristics", + "csv", _("tutti.editProtocol.title.choose.caracteristicExportFile"), _("tutti.editProtocol.action.chooseProtocolCaracteristicFile"), "^.*\\.csv", _("tutti.common.file.csv") ); - if (file == null) { - - // user cancel - doAction = false; - } else { - - // add extension if missing - file = TuttiIOUtil.addExtensionIfMissing(file, ".csv"); - - // ask user to confirm overwrite. - doAction = getHandler().askOverwriteFile(file); - } + doAction = file != null; } return doAction; } Modified: trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/protocol/ExportProtocolBenthosAction.java =================================================================== --- trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/protocol/ExportProtocolBenthosAction.java 2013-07-27 14:13:54 UTC (rev 1159) +++ trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/protocol/ExportProtocolBenthosAction.java 2013-07-27 21:21:41 UTC (rev 1160) @@ -26,10 +26,8 @@ import com.google.common.base.Preconditions; import com.google.common.collect.Lists; -import fr.ifremer.tutti.TuttiIOUtil; import fr.ifremer.tutti.persistence.entities.protocol.SpeciesProtocol; import fr.ifremer.tutti.service.protocol.TuttiProtocolImportExportService; -import fr.ifremer.tutti.ui.swing.util.TuttiUIUtil; import fr.ifremer.tutti.ui.swing.util.action.AbstractTuttiAction; import org.apache.commons.logging.Log; import org.apache.commons.logging.LogFactory; @@ -65,25 +63,14 @@ if (doAction) { // choose file to export - file = TuttiUIUtil.saveFile( - "tuttiProtocol-" + getModel().getName() + "-benthos.csv", - getContext().getMainUI(), + file = saveFile( + "tuttiProtocol-" + getModel().getName() + "-benthos", + "csv", _("tutti.editProtocol.title.choose.benthosExportFile"), _("tutti.editProtocol.action.chooseProtocolBenthosFile"), "^.*\\.csv", _("tutti.common.file.csv") ); - if (file == null) { - - // user cancel - doAction = false; - } else { - - // add extension if missing - file = TuttiIOUtil.addExtensionIfMissing(file, ".csv"); - - // ask user to confirm overwrite. - doAction = getHandler().askOverwriteFile(file); - } + doAction = file != null; } return doAction; } Modified: trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/protocol/ExportProtocolCaracteristicAction.java =================================================================== --- trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/protocol/ExportProtocolCaracteristicAction.java 2013-07-27 14:13:54 UTC (rev 1159) +++ trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/protocol/ExportProtocolCaracteristicAction.java 2013-07-27 21:21:41 UTC (rev 1160) @@ -25,10 +25,8 @@ */ import com.google.common.base.Preconditions; -import fr.ifremer.tutti.TuttiIOUtil; import fr.ifremer.tutti.persistence.entities.protocol.TuttiProtocol; import fr.ifremer.tutti.service.protocol.TuttiProtocolImportExportService; -import fr.ifremer.tutti.ui.swing.util.TuttiUIUtil; import fr.ifremer.tutti.ui.swing.util.action.AbstractTuttiAction; import org.apache.commons.logging.Log; import org.apache.commons.logging.LogFactory; @@ -63,25 +61,14 @@ if (doAction) { // choose file to export - file = TuttiUIUtil.saveFile( - "tuttiProtocol-" + getModel().getName() + "-caracteristics.csv", - getContext().getMainUI(), + file = saveFile( + "tuttiProtocol-" + getModel().getName() + "-caracteristics", + "csv", _("tutti.editProtocol.title.choose.caracteristicExportFile"), _("tutti.editProtocol.action.chooseProtocolCaracteristicFile"), "^.*\\.csv", _("tutti.common.file.csv") ); - if (file == null) { - - // user cancel - doAction = false; - } else { - - // add extension if missing - file = TuttiIOUtil.addExtensionIfMissing(file, ".csv"); - - // ask user to confirm overwrite. - doAction = getHandler().askOverwriteFile(file); - } + doAction = file != null; } return doAction; } Modified: trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/protocol/ExportProtocolSpeciesAction.java =================================================================== --- trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/protocol/ExportProtocolSpeciesAction.java 2013-07-27 14:13:54 UTC (rev 1159) +++ trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/protocol/ExportProtocolSpeciesAction.java 2013-07-27 21:21:41 UTC (rev 1160) @@ -26,10 +26,8 @@ import com.google.common.base.Preconditions; import com.google.common.collect.Lists; -import fr.ifremer.tutti.TuttiIOUtil; import fr.ifremer.tutti.persistence.entities.protocol.SpeciesProtocol; import fr.ifremer.tutti.service.protocol.TuttiProtocolImportExportService; -import fr.ifremer.tutti.ui.swing.util.TuttiUIUtil; import fr.ifremer.tutti.ui.swing.util.action.AbstractTuttiAction; import org.apache.commons.logging.Log; import org.apache.commons.logging.LogFactory; @@ -65,25 +63,14 @@ if (doAction) { // choose file to export - file = TuttiUIUtil.saveFile( - "tuttiProtocol-" + getModel().getName() + "-species.csv", - getContext().getMainUI(), + file = saveFile( + "tuttiProtocol-" + getModel().getName() + "-species", + "csv", _("tutti.editProtocol.title.choose.speciesExportFile"), _("tutti.editProtocol.action.chooseProtocolSpeciesFile"), "^.*\\.csv", _("tutti.common.file.csv") ); - if (file == null) { - - // user cancel - doAction = false; - } else { - - // add extension if missing - file = TuttiIOUtil.addExtensionIfMissing(file, ".csv"); - - // ask user to confirm overwrite. - doAction = getHandler().askOverwriteFile(file); - } + doAction = file != null; } return doAction; } Modified: trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/protocol/ExportPupitriAction.java =================================================================== --- trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/protocol/ExportPupitriAction.java 2013-07-27 14:13:54 UTC (rev 1159) +++ trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/protocol/ExportPupitriAction.java 2013-07-27 21:21:41 UTC (rev 1160) @@ -28,7 +28,6 @@ import com.google.common.collect.Lists; import fr.ifremer.tutti.persistence.entities.referential.Species; import fr.ifremer.tutti.service.pupitri.TuttiPupitriImportExportService; -import fr.ifremer.tutti.ui.swing.util.TuttiUIUtil; import fr.ifremer.tutti.ui.swing.util.action.AbstractTuttiAction; import org.apache.commons.logging.Log; import org.apache.commons.logging.LogFactory; @@ -64,21 +63,13 @@ if (doAction) { // choose file to export - file = TuttiUIUtil.saveFile( - "tuttiProtocol-" + getModel().getName() + "-pupitri.csv", - getContext().getMainUI(), + file = saveFile( + "tuttiProtocol-" + getModel().getName() + "-pupitri", + "csv", _("tutti.editProtocol.title.choose.speciesExportFile"), _("tutti.editProtocol.action.chooseProtocolSpeciesFile") ); - if (file == null) { - - // user cancel - doAction = false; - } else { - - // ask user to confirm overwrite. - doAction = getHandler().askOverwriteFile(file); - } + doAction = file != null; } return doAction; } Modified: trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/protocol/ImportProtocolBenthosAction.java =================================================================== --- trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/protocol/ImportProtocolBenthosAction.java 2013-07-27 14:13:54 UTC (rev 1159) +++ trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/protocol/ImportProtocolBenthosAction.java 2013-07-27 21:21:41 UTC (rev 1160) @@ -28,7 +28,6 @@ import fr.ifremer.tutti.persistence.entities.protocol.SpeciesProtocol; import fr.ifremer.tutti.persistence.entities.protocol.TuttiProtocol; import fr.ifremer.tutti.service.protocol.TuttiProtocolImportExportService; -import fr.ifremer.tutti.ui.swing.util.TuttiUIUtil; import fr.ifremer.tutti.ui.swing.util.action.AbstractTuttiAction; import org.apache.commons.logging.Log; import org.apache.commons.logging.LogFactory; @@ -64,8 +63,7 @@ if (doAction) { // choose file to import - file = TuttiUIUtil.chooseFile( - getContext().getMainUI(), + file = chooseFile( _("tutti.editProtocol.title.choose.benthosImportFile"), _("tutti.editProtocol.action.chooseProtocolBenthosFile"), "^.*\\.csv", _("tutti.common.file.csv") @@ -109,11 +107,9 @@ handler.toRows(protocol.getBenthos()); // update species comboBox -// getUI().getSpeciesComboBox().getHandler().sortData(); getUI().getSpeciesComboBox().getHandler().reset(); // update benthos comboBox -// getUI().getBenthosComboBox().getHandler().sortData(); getUI().getBenthosComboBox().getHandler().reset(); // update rows in model Modified: trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/protocol/ImportProtocolCaracteristicAction.java =================================================================== --- trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/protocol/ImportProtocolCaracteristicAction.java 2013-07-27 14:13:54 UTC (rev 1159) +++ trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/protocol/ImportProtocolCaracteristicAction.java 2013-07-27 21:21:41 UTC (rev 1160) @@ -27,7 +27,6 @@ import com.google.common.base.Preconditions; import fr.ifremer.tutti.persistence.entities.protocol.TuttiProtocol; import fr.ifremer.tutti.service.protocol.TuttiProtocolImportExportService; -import fr.ifremer.tutti.ui.swing.util.TuttiUIUtil; import fr.ifremer.tutti.ui.swing.util.action.AbstractTuttiAction; import org.apache.commons.logging.Log; import org.apache.commons.logging.LogFactory; @@ -62,8 +61,7 @@ if (doAction) { // choose file to import - file = TuttiUIUtil.chooseFile( - getContext().getMainUI(), + file = chooseFile( _("tutti.editProtocol.title.choose.caracteristicImportFile"), _("tutti.editProtocol.action.chooseProtocolCaracteristicFile"), "^.*\\.csv", _("tutti.common.file.csv") Modified: trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/protocol/ImportProtocolSpeciesAction.java =================================================================== --- trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/protocol/ImportProtocolSpeciesAction.java 2013-07-27 14:13:54 UTC (rev 1159) +++ trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/protocol/ImportProtocolSpeciesAction.java 2013-07-27 21:21:41 UTC (rev 1160) @@ -28,7 +28,6 @@ import fr.ifremer.tutti.persistence.entities.protocol.SpeciesProtocol; import fr.ifremer.tutti.persistence.entities.protocol.TuttiProtocol; import fr.ifremer.tutti.service.protocol.TuttiProtocolImportExportService; -import fr.ifremer.tutti.ui.swing.util.TuttiUIUtil; import fr.ifremer.tutti.ui.swing.util.action.AbstractTuttiAction; import org.apache.commons.logging.Log; import org.apache.commons.logging.LogFactory; @@ -64,8 +63,7 @@ if (doAction) { // choose file to import - file = TuttiUIUtil.chooseFile( - getContext().getMainUI(), + file = chooseFile( _("tutti.editProtocol.title.choose.speciesImportFile"), _("tutti.editProtocol.action.chooseProtocolSpeciesFile"), "^.*\\.csv", _("tutti.common.file.csv") @@ -109,11 +107,9 @@ handler.toRows(protocol.getSpecies()); // update species comboBox -// getUI().getSpeciesComboBox().getHandler().sortData(); getUI().getSpeciesComboBox().getHandler().reset(); // update benthos comboBox -// getUI().getBenthosComboBox().getHandler().sortData(); getUI().getBenthosComboBox().getHandler().reset(); // update rows in model Modified: trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/referential/ExportTemporaryGearExampleAction.java =================================================================== --- trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/referential/ExportTemporaryGearExampleAction.java 2013-07-27 14:13:54 UTC (rev 1159) +++ trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/referential/ExportTemporaryGearExampleAction.java 2013-07-27 21:21:41 UTC (rev 1160) @@ -25,10 +25,8 @@ */ import com.google.common.base.Preconditions; -import fr.ifremer.tutti.TuttiIOUtil; import fr.ifremer.tutti.service.referential.TuttiReferentialImportExportService; import fr.ifremer.tutti.ui.swing.TuttiUIContext; -import fr.ifremer.tutti.ui.swing.util.TuttiUIUtil; import fr.ifremer.tutti.ui.swing.util.action.AbstractTuttiAction; import org.apache.commons.logging.Log; import org.apache.commons.logging.LogFactory; @@ -63,25 +61,14 @@ if (doAction) { // choose file to export - file = TuttiUIUtil.saveFile( - "exportGearExample.csv", - getContext().getMainUI(), + file = saveFile( + "exportGearExample", + "csv", _("tutti.manageTemporaryReferential.title.choose.exportTemporaryGearExampleFile"), _("tutti.manageTemporaryReferential.action.chooseReferentialGearFile.export"), "^.*\\.csv", _("tutti.common.file.csv") ); - if (file == null) { - - // user cancel - doAction = false; - } else { - - // add extension if missing - file = TuttiIOUtil.addExtensionIfMissing(file, ".csv"); - - // ask user to confirm overwrite. - doAction = getHandler().askOverwriteFile(file); - } + doAction = file != null; } return doAction; } Modified: trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/referential/ExportTemporaryPersonExampleAction.java =================================================================== --- trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/referential/ExportTemporaryPersonExampleAction.java 2013-07-27 14:13:54 UTC (rev 1159) +++ trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/referential/ExportTemporaryPersonExampleAction.java 2013-07-27 21:21:41 UTC (rev 1160) @@ -25,10 +25,8 @@ */ import com.google.common.base.Preconditions; -import fr.ifremer.tutti.TuttiIOUtil; import fr.ifremer.tutti.service.referential.TuttiReferentialImportExportService; import fr.ifremer.tutti.ui.swing.TuttiUIContext; -import fr.ifremer.tutti.ui.swing.util.TuttiUIUtil; import fr.ifremer.tutti.ui.swing.util.action.AbstractTuttiAction; import org.apache.commons.logging.Log; import org.apache.commons.logging.LogFactory; @@ -64,25 +62,14 @@ if (doAction) { // choose file to export - file = TuttiUIUtil.saveFile( - "exportPersonExample.csv", - getContext().getMainUI(), + file = saveFile( + "exportPersonExample", + "csv", _("tutti.manageTemporaryReferential.title.choose.exportTemporaryPersonExampleFile"), _("tutti.manageTemporaryReferential.action.chooseReferentialPersonFile.export"), "^.*\\.csv", _("tutti.common.file.csv") ); - if (file == null) { - - // user cancel - doAction = false; - } else { - - // add extension if missing - file = TuttiIOUtil.addExtensionIfMissing(file, ".csv"); - - // ask user to confirm overwrite. - doAction = getHandler().askOverwriteFile(file); - } + doAction = file != null; } return doAction; } Modified: trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/referential/ExportTemporarySpeciesExampleAction.java =================================================================== --- trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/referential/ExportTemporarySpeciesExampleAction.java 2013-07-27 14:13:54 UTC (rev 1159) +++ trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/referential/ExportTemporarySpeciesExampleAction.java 2013-07-27 21:21:41 UTC (rev 1160) @@ -25,10 +25,8 @@ */ import com.google.common.base.Preconditions; -import fr.ifremer.tutti.TuttiIOUtil; import fr.ifremer.tutti.service.referential.TuttiReferentialImportExportService; import fr.ifremer.tutti.ui.swing.TuttiUIContext; -import fr.ifremer.tutti.ui.swing.util.TuttiUIUtil; import fr.ifremer.tutti.ui.swing.util.action.AbstractTuttiAction; import org.apache.commons.logging.Log; import org.apache.commons.logging.LogFactory; @@ -63,25 +61,14 @@ if (doAction) { // choose file to export - file = TuttiUIUtil.saveFile( - "exportSpeciesExample.csv", - getContext().getMainUI(), + file = saveFile( + "exportSpeciesExample", + "csv", _("tutti.manageTemporaryReferential.title.choose.exportTemporarySpeciesExampleFile"), _("tutti.manageTemporaryReferential.action.chooseReferentialSpeciesFile.export"), "^.*\\.csv", _("tutti.common.file.csv") ); - if (file == null) { - - // user cancel - doAction = false; - } else { - - // add extension if missing - file = TuttiIOUtil.addExtensionIfMissing(file, ".csv"); - - // ask user to confirm overwrite. - doAction = getHandler().askOverwriteFile(file); - } + doAction = file != null; } return doAction; } Modified: trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/referential/ExportTemporaryVesselExampleAction.java =================================================================== --- trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/referential/ExportTemporaryVesselExampleAction.java 2013-07-27 14:13:54 UTC (rev 1159) +++ trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/referential/ExportTemporaryVesselExampleAction.java 2013-07-27 21:21:41 UTC (rev 1160) @@ -25,10 +25,8 @@ */ import com.google.common.base.Preconditions; -import fr.ifremer.tutti.TuttiIOUtil; import fr.ifremer.tutti.service.referential.TuttiReferentialImportExportService; import fr.ifremer.tutti.ui.swing.TuttiUIContext; -import fr.ifremer.tutti.ui.swing.util.TuttiUIUtil; import fr.ifremer.tutti.ui.swing.util.action.AbstractTuttiAction; import org.apache.commons.logging.Log; import org.apache.commons.logging.LogFactory; @@ -63,25 +61,14 @@ if (doAction) { // choose file to export - file = TuttiUIUtil.saveFile( - "exportVesselExample.csv", - getContext().getMainUI(), + file = saveFile( + "exportVesselExample", + "csv", _("tutti.manageTemporaryReferential.title.choose.exportTemporaryVesselExampleFile"), _("tutti.manageTemporaryReferential.action.chooseReferentialVesselFile.export"), "^.*\\.csv", _("tutti.common.file.csv") ); - if (file == null) { - - // user cancel - doAction = false; - } else { - - // add extension if missing - file = TuttiIOUtil.addExtensionIfMissing(file, ".csv"); - - // ask user to confirm overwrite. - doAction = getHandler().askOverwriteFile(file); - } + doAction = file != null; } return doAction; } Modified: trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/referential/ImportTemporaryGearAction.java =================================================================== --- trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/referential/ImportTemporaryGearAction.java 2013-07-27 14:13:54 UTC (rev 1159) +++ trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/referential/ImportTemporaryGearAction.java 2013-07-27 21:21:41 UTC (rev 1160) @@ -27,7 +27,6 @@ import com.google.common.base.Preconditions; import fr.ifremer.tutti.service.referential.TuttiReferentialImportExportService; import fr.ifremer.tutti.ui.swing.TuttiUIContext; -import fr.ifremer.tutti.ui.swing.util.TuttiUIUtil; import fr.ifremer.tutti.ui.swing.util.action.AbstractTuttiAction; import org.apache.commons.logging.Log; import org.apache.commons.logging.LogFactory; @@ -62,8 +61,7 @@ if (doAction) { // choose file to import - file = TuttiUIUtil.chooseFile( - getContext().getMainUI(), + file = chooseFile( _("tutti.manageTemporaryReferential.title.choose.importTemporaryGearFile"), _("tutti.manageTemporaryReferential.action.chooseReferentialGearFile.import"), "^.*\\.csv", _("tutti.common.file.csv")); Modified: trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/referential/ImportTemporaryPersonAction.java =================================================================== --- trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/referential/ImportTemporaryPersonAction.java 2013-07-27 14:13:54 UTC (rev 1159) +++ trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/referential/ImportTemporaryPersonAction.java 2013-07-27 21:21:41 UTC (rev 1160) @@ -27,7 +27,6 @@ import com.google.common.base.Preconditions; import fr.ifremer.tutti.service.referential.TuttiReferentialImportExportService; import fr.ifremer.tutti.ui.swing.TuttiUIContext; -import fr.ifremer.tutti.ui.swing.util.TuttiUIUtil; import fr.ifremer.tutti.ui.swing.util.action.AbstractTuttiAction; import org.apache.commons.logging.Log; import org.apache.commons.logging.LogFactory; @@ -62,8 +61,7 @@ if (doAction) { // choose file to import - file = TuttiUIUtil.chooseFile( - getContext().getMainUI(), + file = chooseFile( _("tutti.manageTemporaryReferential.title.choose.importTemporaryPersonFile"), _("tutti.manageTemporaryReferential.action.chooseReferentialPersonFile.import"), "^.*\\.csv", _("tutti.common.file.csv")); Modified: trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/referential/ImportTemporarySpeciesAction.java =================================================================== --- trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/referential/ImportTemporarySpeciesAction.java 2013-07-27 14:13:54 UTC (rev 1159) +++ trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/referential/ImportTemporarySpeciesAction.java 2013-07-27 21:21:41 UTC (rev 1160) @@ -27,7 +27,6 @@ import com.google.common.base.Preconditions; import fr.ifremer.tutti.service.referential.TuttiReferentialImportExportService; import fr.ifremer.tutti.ui.swing.TuttiUIContext; -import fr.ifremer.tutti.ui.swing.util.TuttiUIUtil; import fr.ifremer.tutti.ui.swing.util.action.AbstractTuttiAction; import org.apache.commons.logging.Log; import org.apache.commons.logging.LogFactory; @@ -61,8 +60,7 @@ if (doAction) { // choose file to import - file = TuttiUIUtil.chooseFile( - getContext().getMainUI(), + file = chooseFile( _("tutti.manageTemporaryReferential.title.choose.importTemporarySpeciesFile"), _("tutti.manageTemporaryReferential.action.chooseReferentialSpeciesFile.import"), "^.*\\.csv", _("tutti.common.file.csv")); Modified: trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/referential/ImportTemporaryVesselAction.java =================================================================== --- trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/referential/ImportTemporaryVesselAction.java 2013-07-27 14:13:54 UTC (rev 1159) +++ trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/referential/ImportTemporaryVesselAction.java 2013-07-27 21:21:41 UTC (rev 1160) @@ -27,7 +27,6 @@ import com.google.common.base.Preconditions; import fr.ifremer.tutti.service.referential.TuttiReferentialImportExportService; import fr.ifremer.tutti.ui.swing.TuttiUIContext; -import fr.ifremer.tutti.ui.swing.util.TuttiUIUtil; import fr.ifremer.tutti.ui.swing.util.action.AbstractTuttiAction; import org.apache.commons.logging.Log; import org.apache.commons.logging.LogFactory; @@ -61,8 +60,7 @@ if (doAction) { // choose file to import - file = TuttiUIUtil.chooseFile( - getContext().getMainUI(), + file = chooseFile( _("tutti.manageTemporaryReferential.title.choose.importTemporaryVesselFile"), _("tutti.manageTemporaryReferential.action.chooseReferentialVesselFile.import"), "^.*\\.csv", _("tutti.common.file.csv")); Modified: trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/util/AbstractTuttiUIHandler.java =================================================================== --- trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/util/AbstractTuttiUIHandler.java 2013-07-27 14:13:54 UTC (rev 1159) +++ trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/util/AbstractTuttiUIHandler.java 2013-07-27 21:21:41 UTC (rev 1160) @@ -85,6 +85,7 @@ import javax.swing.ListSelectionModel; import javax.swing.ScrollPaneConstants; import javax.swing.SwingUtilities; +import javax.swing.UIManager; import javax.swing.border.LineBorder; import javax.swing.event.ChangeEvent; import javax.swing.event.ChangeListener; @@ -115,7 +116,6 @@ import java.awt.event.WindowEvent; import java.beans.PropertyChangeEvent; import java.beans.PropertyChangeListener; -import java.io.File; import java.io.Serializable; import java.text.ParseException; import java.util.Date; @@ -292,8 +292,6 @@ public static final String CONFIRMATION_FORMAT = "<html>%s<hr/><br/>%s</html>"; - public static final String WARNING_FORMAT = "<html>%s<hr/></html>"; - public int askSaveBeforeLeaving(String message) { String htmlMessage = String.format( CONFIRMATION_FORMAT, @@ -324,46 +322,6 @@ return result; } - public boolean askBeforeDelete(String title, String message) { - String htmlMessage = String.format( - CONFIRMATION_FORMAT, - message, - _("tutti.common.askBeforeDelete.help")); - int i = JOptionPane.showConfirmDialog( - getTopestUI(), - htmlMessage, - title, - JOptionPane.OK_CANCEL_OPTION, - JOptionPane.QUESTION_MESSAGE); - - boolean result = i == JOptionPane.OK_OPTION; - return result; - } - - public boolean askOverwriteFile(File file) { - boolean result; - if (file.exists()) { - - // file exists ask user to overwrite - String htmlMessage = String.format( - CONFIRMATION_FORMAT, - _("tutti.common.askOverwriteFile.message", file), - _("tutti.common.askOverwriteFile.help")); - - result = JOptionPane.showConfirmDialog( - getTopestUI(), - htmlMessage, - _("tutti.common.askOverwriteFile.title"), - JOptionPane.OK_CANCEL_OPTION, - JOptionPane.QUESTION_MESSAGE) == JOptionPane.OK_OPTION; - } else { - - // file does not exist - result = true; - } - return result; - } - public void showSuccessMessage(String title, String message) { Component topestUI = getTopestUI(); @@ -378,10 +336,13 @@ } try { - TuttiUIUtil.showSuccessMessage( + JOptionPane.showMessageDialog( topestUI, + message, title, - message); + JOptionPane.INFORMATION_MESSAGE, + UIManager.getIcon("info") + ); } finally { if (alwaysOnTop) { ((JDialog) topestUI).setAlwaysOnTop(true); @@ -389,7 +350,7 @@ } } - protected Component getTopestUI() { + public Component getTopestUI() { Component result; TuttiActionUI actionUI = getContext().getActionUI(); // if (actionUI.isVisible()) { 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-07-27 14:13:54 UTC (rev 1159) +++ trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/util/TuttiUIUtil.java 2013-07-27 21:21:41 UTC (rev 1160) @@ -27,28 +27,14 @@ import com.google.common.base.Preconditions; import fr.ifremer.tutti.TuttiBusinessException; import fr.ifremer.tutti.TuttiTechnicalException; -import fr.ifremer.tutti.ui.swing.config.TuttiApplicationConfig; -import jaxx.runtime.FileChooserUtil; -import jaxx.runtime.JAXXBinding; -import jaxx.runtime.JAXXObject; -import jaxx.runtime.SwingUtil; import org.apache.commons.beanutils.PropertyUtils; -import org.apache.commons.lang3.StringUtils; import org.apache.commons.logging.Log; import org.apache.commons.logging.LogFactory; -import org.jdesktop.beans.AbstractBean; import org.jdesktop.swingx.decorator.HighlightPredicate; import org.jdesktop.swingx.decorator.Highlighter; -import org.nuiton.util.StringUtil; -import javax.swing.JOptionPane; -import javax.swing.UIManager; import java.awt.Color; -import java.awt.Component; import java.awt.Desktop; -import java.beans.PropertyChangeListener; -import java.beans.PropertyChangeListenerProxy; -import java.io.File; import java.net.URI; import java.net.URISyntaxException; import java.net.URL; @@ -75,98 +61,6 @@ // never instanciate util class } - /** - * Choisir un fichier via un sélecteur graphique de fichiers. - * - * @param parent le component swing appelant le controle - * @param title le titre du dialogue de sélection - * @param buttonLabel le label du boutton d'acceptation - * @param filters les filtres + descriptions sur le sélecteur de - * fichiers - * @return le fichier choisi ou le fichier incoming si l'opération a été - * annulée - */ - public static File chooseFile(Component parent, - String title, - String buttonLabel, - String... filters) { - - File file = FileChooserUtil.getFile(title, buttonLabel, parent, filters); - if (log.isDebugEnabled()) { - log.debug(title + " : " + file); - } - if (file != null) { - File newDir = file.isDirectory() ? file : file.getParentFile(); - FileChooserUtil.setCurrentDirectory(newDir); - } - return file; - } - - /** - * Sauver un fichier via un sélecteur graphique de fichiers. - * - * @param parent le component swing appelant le controle - * @param title le titre du dialogue de sélection - * @param buttonLabel le label du boutton d'acceptation - * @param filters les filtres + descriptions sur le sélecteur de - * fichiers - * @return le fichier choisi ou le fichier incoming si l'opération a été - * annulée - */ - public static File saveFile(String filename, - Component parent, - String title, - String buttonLabel, - String... filters) { - - File file = FileChooserUtil.saveFile(filename, title, buttonLabel, parent, filters); - if (log.isDebugEnabled()) { - log.debug(title + " : " + file); - } - if (file != null) { - Preconditions.checkState(!file.isDirectory()); - FileChooserUtil.setCurrentDirectory(file.getParentFile()); - } - return file; - } - - /** - * Choisir un répertoire via un sélecteur graphique de fichiers. - * - * @param parent le component swing appelant le controle - * @param title le titre de la boite de dialogue de sléection - * @param buttonLabel le label de l'action d'acceptation - * @return le répertoire choisi ou le répertoire incoming si l'opération a - * été annulée - */ - public static File chooseDirectory(Component parent, - String title, - String buttonLabel) { - - String file = FileChooserUtil.getDirectory(parent, title, buttonLabel); - if (log.isDebugEnabled()) { - log.debug(title + " : " + file); - } - if (file != null) { - File newDir = new File(file); - if (!newDir.isDirectory()) { - newDir = newDir.getParentFile(); - } - FileChooserUtil.setCurrentDirectory(newDir); - } - return file == null ? null : new File(file); - } - - public static void showSuccessMessage(Component ui, String title, String message) { - JOptionPane.showMessageDialog( - ui, - message, - title, - JOptionPane.INFORMATION_MESSAGE, - UIManager.getIcon("info") - ); - } - public static void setProperty(Object bean, String property, Object value) { Preconditions.checkNotNull(bean); Preconditions.checkNotNull(property); @@ -332,30 +226,6 @@ } } - public static void closeBean(AbstractBean bean) { - PropertyChangeListener[] propertyChangeListeners = - bean.getPropertyChangeListeners(); - for (PropertyChangeListener listener : propertyChangeListeners) { - if (listener instanceof PropertyChangeListenerProxy) { - PropertyChangeListenerProxy proxy = (PropertyChangeListenerProxy) listener; - listener = proxy.getListener(); - } - if (listener instanceof RemoveablePropertyChangeListener) { - if (log.isDebugEnabled()) { - log.debug("Remove listener: " + listener); - } - bean.removePropertyChangeListener(listener); - } - } - } - - public static void closeUI(JAXXObject ui) { - JAXXBinding[] bindings = ui.getDataBindings(); - for (JAXXBinding binding : bindings) { - SwingUtil.removeDataBinding(ui, binding.getId()); - } - } - public static void tryToConnectToUpdateUrl(String url, String i18nKey) { try { URLConnection urlConnection = new URL(url).openConnection(); @@ -376,37 +246,4 @@ return result; } - - public static boolean askAdminPassword(Component container, - TuttiApplicationConfig config, - String askMessage, - String askMessageTitle, - String errorMessage, - String errorMessageTitle) { - String answer; - boolean result; - do { - answer = JOptionPane.showInputDialog(container, - askMessage, - askMessageTitle, - JOptionPane.WARNING_MESSAGE); - if (answer != null) { - String cryptedAnswer = StringUtil.encodeMD5(answer); - String correctAnswer = config.getAdminPassword(); - result = StringUtils.equals(cryptedAnswer, correctAnswer); - - if (!result) { - JOptionPane.showMessageDialog(container, - errorMessage, - errorMessageTitle, - JOptionPane.ERROR_MESSAGE); - } - - } else { - result = false; - } - - } while (!result && answer != null); - return result; - } } Modified: trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/util/action/AbstractTuttiAction.java =================================================================== --- trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/util/action/AbstractTuttiAction.java 2013-07-27 14:13:54 UTC (rev 1159) +++ trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/util/action/AbstractTuttiAction.java 2013-07-27 21:21:41 UTC (rev 1160) @@ -31,9 +31,20 @@ import fr.ifremer.tutti.ui.swing.config.TuttiApplicationConfig; import fr.ifremer.tutti.ui.swing.util.AbstractTuttiUIHandler; import fr.ifremer.tutti.ui.swing.util.TuttiUI; +import jaxx.runtime.FileChooserUtil; +import org.apache.commons.lang3.StringUtils; +import org.apache.commons.logging.Log; +import org.apache.commons.logging.LogFactory; import org.jdesktop.beans.AbstractBean; import org.nuiton.decorator.Decorator; +import org.nuiton.util.StringUtil; +import javax.swing.JOptionPane; +import java.awt.Component; +import java.io.File; + +import static org.nuiton.i18n.I18n._; + /** * Tutti base action. * @@ -43,6 +54,9 @@ public abstract class AbstractTuttiAction<M extends AbstractBean, UI extends TuttiUI<M, ?>, H extends AbstractTuttiUIHandler<M, UI>> extends AbstractBean { + /** Logger. */ + private static final Log log = LogFactory.getLog(AbstractTuttiAction.class); + public static final String PROPERTY_DONE = "done"; protected final H handler; @@ -140,4 +154,155 @@ return getDecorator(object.getClass(), context).toString(object); } + protected boolean askAdminPassword(String askMessage, + String askMessageTitle, + String errorMessage, + String errorMessageTitle) { + + Component container = getContext().getActionUI(); + + String answer; + boolean result; + do { + answer = JOptionPane.showInputDialog(container, + askMessage, + askMessageTitle, + JOptionPane.WARNING_MESSAGE); + if (answer != null) { + String cryptedAnswer = StringUtil.encodeMD5(answer); + String correctAnswer = getConfig().getAdminPassword(); + result = StringUtils.equals(cryptedAnswer, correctAnswer); + + if (!result) { + JOptionPane.showMessageDialog(container, + errorMessage, + errorMessageTitle, + JOptionPane.ERROR_MESSAGE); + } + + } else { + result = false; + } + + } while (!result && answer != null); + return result; + } + + /** + * Choisir un fichier via un sélecteur graphique de fichiers. + * + * @param title le titre du dialogue de sélection + * @param buttonLabel le label du boutton d'acceptation + * @param filters les filtres + descriptions sur le sélecteur de + * fichiers + * @return le fichier choisi ou le fichier incoming si l'opération a été + * annulée + */ + protected File chooseFile(String title, + String buttonLabel, + String... filters) { + + File file = FileChooserUtil.getFile(title, + buttonLabel, + getContext().getMainUI(), + filters); + if (log.isDebugEnabled()) { + log.debug(title + " : " + file); + } + if (file != null) { + File newDir = file.isDirectory() ? file : file.getParentFile(); + FileChooserUtil.setCurrentDirectory(newDir); + } + return file; + } + + /** + * Sauver un fichier via un sélecteur graphique de fichiers. + * + * @param title le titre du dialogue de sélection + * @param buttonLabel le label du boutton d'acceptation + * @param filters les filtres + descriptions sur le sélecteur de + * fichiers + * @return le fichier choisi ou {@code null} si pas de fichier choisi ou + * pas voulu écrasé un fichier existant. + */ + protected File saveFile(String filename, + String extension, + String title, + String buttonLabel, + String... filters) { + + boolean withExtension = StringUtils.isNotBlank(extension); + String filenameSuffix = withExtension ? "." + extension : ""; + File file = FileChooserUtil.saveFile(filename + filenameSuffix, title, buttonLabel, getContext().getMainUI(), filters); + if (log.isDebugEnabled()) { + log.debug(title + " : " + file); + } + if (file != null) { + Preconditions.checkState(!file.isDirectory()); + + // add extension if missing + if (withExtension && !file.getName().endsWith(filenameSuffix)) { + file = new File(file.getParentFile(), file.getName() + filenameSuffix); + } + + // ask user to confirm overwrite. + boolean confirm = askOverwriteFile(file); + + if (confirm) { + + // on conserve le répertoire (pour une prochaine utilisation) + FileChooserUtil.setCurrentDirectory(file.getParentFile()); + } else { + + // l'utilisateur n'a pas confirmé l'écrasement + // donc pas de fichier en retour + file = null; + } + } + + return file; + } + + private boolean askOverwriteFile(File file) { + boolean result; + if (file.exists()) { + + // file exists ask user to overwrite + String htmlMessage = String.format( + AbstractTuttiUIHandler.CONFIRMATION_FORMAT, + _("tutti.common.askOverwriteFile.message", file), + _("tutti.common.askOverwriteFile.help")); + + result = JOptionPane.showConfirmDialog( + getHandler().getTopestUI(), + htmlMessage, + _("tutti.common.askOverwriteFile.title"), + JOptionPane.OK_CANCEL_OPTION, + JOptionPane.QUESTION_MESSAGE) == JOptionPane.OK_OPTION; + } else { + + // file does not exist + result = true; + } + return result; + } + + protected boolean askBeforeDelete(String title, String message) { + String htmlMessage = String.format( + AbstractTuttiUIHandler.CONFIRMATION_FORMAT, + message, + _("tutti.common.askBeforeDelete.help")); + int i = JOptionPane.showConfirmDialog( + getHandler().getTopestUI(), + htmlMessage, + title, + JOptionPane.OK_CANCEL_OPTION, + JOptionPane.QUESTION_MESSAGE); + + boolean result = i == JOptionPane.OK_OPTION; + return result; + } + + } Modified: trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/util/attachment/AttachmentEditorUIHandler.java =================================================================== --- trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/util/attachment/AttachmentEditorUIHandler.java 2013-07-27 14:13:54 UTC (rev 1159) +++ trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/util/attachment/AttachmentEditorUIHandler.java 2013-07-27 21:21:41 UTC (rev 1160) @@ -24,7 +24,6 @@ * #L% */ -import fr.ifremer.tutti.TuttiIOUtil; import fr.ifremer.tutti.TuttiTechnicalException; import fr.ifremer.tutti.persistence.entities.TuttiBeanFactory; import fr.ifremer.tutti.persistence.entities.data.Attachment; @@ -32,6 +31,7 @@ import fr.ifremer.tutti.ui.swing.TuttiUIContext; import fr.ifremer.tutti.ui.swing.util.AbstractTuttiUIHandler; import fr.ifremer.tutti.ui.swing.util.TuttiUIUtil; +import fr.ifremer.tutti.ui.swing.util.action.TuttiActionHelper; import jaxx.runtime.SwingUtil; import jaxx.runtime.swing.ComponentMover; import jaxx.runtime.swing.ComponentResizer; @@ -272,66 +272,39 @@ } public void saveAttachment(Attachment attachment) { - boolean hackDialog = ui.isAlwaysOnTop(); - if (hackDialog) { - ui.setAlwaysOnTop(false); - } - try { - File attachmentFile = persistenceService.getAttachmentFile(attachment.getId()); - File file = TuttiUIUtil.saveFile( - attachment.getName(), - ui, - _("tutti.attachmentEditor.saveAttachment.title"), - _("tutti.attachmentEditor.saveAttachment.button")); - if (file != null) { - boolean checkOverwrite = askOverwriteFile(file); - if (checkOverwrite) { - TuttiIOUtil.copyFile(attachmentFile, file, - _("tutti.attachmentEditor.saveAttachment.error.message", attachmentFile, file.getName())); - context.showInformationMessage( - _("tutti.attachmentEditor.saveAttachment.success.message", file.getName())); - } -// if (file.exists()) { -// String htmlMessage = String.format( -// AbstractTuttiUIHandler.CONFIRMATION_FORMAT, -// _("tutti.attachmentEditor.saveAttachment.warning.message"), -// _("tutti.attachmentEditor.saveAttachment.warning.help")); + SaveAttachmentAction action = TuttiActionHelper.createLogicAction( + this, SaveAttachmentAction.class); + action.setAttachment(attachment); + TuttiActionHelper.runAction(action); + +// boolean hackDialog = ui.isAlwaysOnTop(); +// if (hackDialog) { +// ui.setAlwaysOnTop(false); +// } +// try { +// File attachmentFile = persistenceService.getAttachmentFile(attachment.getId()); +// File file = TuttiUIUtil.saveFile( +// attachment.getName(), +// ui, +// _("tutti.attachmentEditor.saveAttachment.title"), +// _("tutti.attachmentEditor.saveAttachment.button")); // -// int answer = JOptionPane.showConfirmDialog(ui, -// htmlMessage, -// _("tutti.attachmentEditor.saveAttachment.warning.title"), -// JOptionPane.YES_NO_OPTION, -// JOptionPane.WARNING_MESSAGE); -// -// if (answer == JOptionPane.NO_OPTION) { -// return; -// } +// if (file != null) { +// boolean checkOverwrite = askOverwriteFile(file); +// if (checkOverwrite) { +// TuttiIOUtil.copyFile(attachmentFile, file, +// _("tutti.attachmentEditor.saveAttachment.error.message", attachmentFile, file.getName())); +// context.showInformationMessage( +// _("tutti.attachmentEditor.saveAttachment.success.message", file.getName())); // } -// FileUtils.copyFile(attachmentFile, file); -// context.showInformationMessage( -// _("tutti.attachmentEditor.saveAttachment.success.message", file.getName())); - } - if (hackDialog) { - ui.setAlwaysOnTop(true); - } - -// } catch (IOException e) { -// if (log.isErrorEnabled()) { -// log.error("Error while saving attachment", e); // } -// JOptionPane.showMessageDialog( -// ui, -// _("tutti.attachmentEditor.saveAttachment.fail.message"), -// _("tutti.attachmentEditor.saveAttachment.fail.title"), -// JOptionPane.ERROR_MESSAGE -// ); - - } finally { - if (hackDialog) { - ui.setAlwaysOnTop(true); - } - } +// +// } finally { +// if (hackDialog) { +// ui.setAlwaysOnTop(true); +// } +// } } public void removeAttachment(AttachmentItem attachmentItem) { Added: trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/util/attachment/SaveAttachmentAction.java =================================================================== --- trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/util/attachment/SaveAttachmentAction.java (rev 0) +++ trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/util/attachment/SaveAttachmentAction.java 2013-07-27 21:21:41 UTC (rev 1160) @@ -0,0 +1,81 @@ +package fr.ifremer.tutti.ui.swing.util.attachment; + +import fr.ifremer.tutti.TuttiIOUtil; +import fr.ifremer.tutti.persistence.entities.data.Attachment; +import fr.ifremer.tutti.ui.swing.TuttiUIContext; +import fr.ifremer.tutti.ui.swing.util.action.AbstractTuttiAction; + +import java.io.File; + +import static org.nuiton.i18n.I18n._; + +/** + * To persist a attachment. + * + * @author tchemit <chemit@codelutin.com> + * @since 2.5 + */ +public class SaveAttachmentAction extends AbstractTuttiAction<TuttiUIContext, AttachmentEditorUI, AttachmentEditorUIHandler> { + + private Attachment attachment; + + public SaveAttachmentAction(AttachmentEditorUIHandler handler) { + super(handler, false); + } + + protected File file; + + protected File attachmentFile; + + @Override + protected boolean prepareAction() throws Exception { + boolean doAction = super.prepareAction(); + if (doAction) { + + attachmentFile = getContext().getPersistenceService().getAttachmentFile(attachment.getId()); + + file = saveFile( + TuttiIOUtil.getBaseName(attachment.getName()), + TuttiIOUtil.getExtension(attachmentFile.getName()), + _("tutti.attachmentEditor.saveAttachment.title"), + _("tutti.attachmentEditor.saveAttachment.button")); + doAction = file != null; + } + return doAction; + } + + @Override + protected void doAction() throws Exception { + + AttachmentEditorUI ui = getUI(); + + boolean hackDialog = ui.isAlwaysOnTop(); + if (hackDialog) { + ui.setAlwaysOnTop(false); + } + try { + + TuttiIOUtil.copyFile(attachmentFile, file, + _("tutti.attachmentEditor.saveAttachment.error.message", attachmentFile, file.getName())); + sendMessage( + _("tutti.attachmentEditor.saveAttachment.success.message", file.getName())); + + } finally { + if (hackDialog) { + ui.setAlwaysOnTop(true); + } + } + } + + public void setAttachment(Attachment attachment) { + this.attachment = attachment; + } + + @Override + protected void releaseAction() { + super.releaseAction(); + attachmentFile = null; + attachment = null; + file = null; + } +} Property changes on: trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/util/attachment/SaveAttachmentAction.java ___________________________________________________________________ Added: svn:keywords + Author Date Id Revision Added: svn:eol-style + native 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-07-27 14:13:54 UTC (rev 1159) +++ trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/util/table/AbstractTuttiTableUIHandler.java 2013-07-27 21:21:41 UTC (rev 1160) @@ -445,7 +445,7 @@ nextCellAction.actionPerformed(null); } else if (keyCode == KeyEvent.VK_UP || - (keyCode == KeyEvent.VK_ENTER && e.isShiftDown())) { + (keyCode == KeyEvent.VK_ENTER && e.isShiftDown())) { e.consume(); if (editor != null) { editor.stopCellEditing(); Modified: trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/util/table/MoveToNextEditableRowAction.java =================================================================== --- trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/util/table/MoveToNextEditableRowAction.java 2013-07-27 14:13:54 UTC (rev 1159) +++ trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/util/table/MoveToNextEditableRowAction.java 2013-07-27 21:21:41 UTC (rev 1160) @@ -59,7 +59,7 @@ if (log.isDebugEnabled()) { log.debug("Move to next row editable cell " + - getCellCoordinate(currentRow, currentColumn)); + getCellCoordinate(currentRow, currentColumn)); } int rowCount = getRowCount(); Modified: trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/util/table/MoveToPreviousEditableCellAction.java =================================================================== --- trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/util/table/MoveToPreviousEditableCellAction.java 2013-07-27 14:13:54 UTC (rev 1159) +++ trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/util/table/MoveToPreviousEditableCellAction.java 2013-07-27 21:21:41 UTC (rev 1160) @@ -79,7 +79,7 @@ } // if (isCellEditable(currentRow, currentColumn)) { - doSelectCell(currentRow, currentColumn); + doSelectCell(currentRow, currentColumn); // break; // } else { // if (log.isDebugEnabled()) { Modified: trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/util/table/MoveToPreviousEditableRowAction.java =================================================================== --- trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/util/table/MoveToPreviousEditableRowAction.java 2013-07-27 14:13:54 UTC (rev 1159) +++ trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/util/table/MoveToPreviousEditableRowAction.java 2013-07-27 21:21:41 UTC (rev 1160) @@ -60,7 +60,7 @@ if (log.isDebugEnabled()) { log.debug("Move to previous row editable cell " + - getCellCoordinate(currentRow, currentColumn)); + getCellCoordinate(currentRow, currentColumn)); } int rowCount = getRowCount(); @@ -74,7 +74,7 @@ // boolean canSelect = isCellEditable(currentRow, currentColumn); // // if (canSelect) { - doSelectCell(currentRow, currentColumn); + doSelectCell(currentRow, currentColumn); // break; // } else { Modified: trunk/tutti-ui-swing/src/main/resources/i18n/tutti-ui-swing_en_GB.properties =================================================================== --- trunk/tutti-ui-swing/src/main/resources/i18n/tutti-ui-swing_en_GB.properties 2013-07-27 14:13:54 UTC (rev 1159) +++ trunk/tutti-ui-swing/src/main/resources/i18n/tutti-ui-swing_en_GB.properties 2013-07-27 21:21:41 UTC (rev 1160) @@ -63,7 +63,13 @@ tutti.commentEditor.action.tip= tutti.commentEditor.none.tip= tutti.commentEditor.title= +tutti.common.askBeforeCloneProtocol.help= tutti.common.askBeforeDelete.help= +tutti.common.askBeforeEditProtocol.help= +tutti.common.askBeforeEditProtocol.title= +tutti.common.askBeforeEditProtocole.help= +tutti.common.askBeforeEditProtocole.title= +tutti.common.askBeforeImportProtocol.help= tutti.common.askCancelEditBeforeLeaving.help= tutti.common.askCancelEditBeforeLeaving.title= tutti.common.askOverwriteFile.help= @@ -73,7 +79,9 @@ tutti.common.askSaveBeforeLeaving.title= tutti.common.cancel= tutti.common.cancel.mnemonic= +tutti.common.caracteristic.notFound= tutti.common.datefield.tip= +tutti.common.editProtocol.categories.not.compatible= tutti.common.file.csv= tutti.common.file.pdf= tutti.common.file.protocol= @@ -83,6 +91,7 @@ tutti.common.file.tuttiMarineLitter= tutti.common.file.tuttiSpecies= tutti.common.file.zip= +tutti.common.protocol.categories.not.compatible= tutti.common.validate= tutti.common.validate.mnemonic= tutti.config.action.reload.actions= @@ -789,6 +798,7 @@ tutti.editProtocol.title.choose.speciesImportFile= tutti.editProtocol.title.create.protocol= tutti.editProtocol.title.edit.protocol= +tutti.editProtocol.warn.clean= tutti.editProtocol.warn.clone= tutti.editProtocol.warn.import= tutti.editSampleCategoryModel.action.cancel= @@ -1162,6 +1172,13 @@ tutti.multiPostImportLog.title= tutti.multiPostImportLog.totalSortedWeight= tutti.multiPostImportLog.totalWeight= +tutti.option.cancel= +tutti.option.cleanAndClone= +tutti.option.cleanAndEdit= +tutti.option.cleanAndImport= +tutti.option.clone= +tutti.option.edit= +tutti.option.import= tutti.property.get.error= tutti.property.set.error= tutti.sampleCategoryModel.passwordDialog.error.message= Modified: trunk/tutti-ui-swing/src/main/resources/i18n/tutti-ui-swing_fr_FR.properties =================================================================== --- trunk/tutti-ui-swing/src/main/resources/i18n/tutti-ui-swing_fr_FR.properties 2013-07-27 14:13:54 UTC (rev 1159) +++ trunk/tutti-ui-swing/src/main/resources/i18n/tutti-ui-swing_fr_FR.properties 2013-07-27 21:21:41 UTC (rev 1160) @@ -63,7 +63,11 @@ tutti.commentEditor.action.tip=Commentaire tutti.commentEditor.none.tip=Pas de commentaire tutti.commentEditor.title=Commentaire +tutti.common.askBeforeCloneProtocol.help=Que voulez-vous faire?<ul><li><strong>Annuler</strong> pour ne pas cloner le protocole</li><li><strong>Cloner</strong> pour cloner le protocole en conservant les catégories non connues (elle ne seront pas affichées)</li><li><strong>Nettoyer et Cloner</strong> pour supprimer les catégories non compatibles dans le protocole cloné</li></ul> tutti.common.askBeforeDelete.help=Que voulez-vous faire ?<ul><li><strong>Annuler</strong> pour ne pas supprimer</li><li><strong>OK</strong> pour supprimer l'objet en question</li></ul> +tutti.common.askBeforeEditProtocol.help=Que voulez-vous faire?<ul><li><strong>Annuler</strong> pour ne pas éditer le protocole</li><li><strong>Éditer</strong> pour éditer le protocole en conservant les catégories non connues (elle ne seront pas affichées)</li><li><strong>Nettoyer et Éditer</strong> pour supprimer les catégories non compatibles et éditer le protocole</li></ul> +tutti.common.askBeforeEditProtocol.title=Catégories non compatibles détectées dans le protocole +tutti.common.askBeforeImportProtocol.help=Que voulez-vous faire?<ul><li><strong>Annuler</strong> pour ne pas importer le protocole</li><li><strong>Importer</strong> pour importer le protocole en conservant les catégories non connues (elle ne seront pas affichées)</li><li><strong>Nettoyer et Importer</strong> pour supprimer les catégories non compatibles dans le protocole importé</li></ul> tutti.common.askCancelEditBeforeLeaving.help=Que voulez-vous faire ?<ul><li><strong>Annuler</strong> pour rester sur cet écran</li><li><strong>OK</strong> pour quitter l'écran en abandonnant les modifications</li></ul> tutti.common.askCancelEditBeforeLeaving.title=Modifications non enregistrées mais invalides tutti.common.askOverwriteFile.help=Que voulez-vous faire ?<ul><li><strong>Annuler</strong> pour ne pas écraser le fichier et annuler l'opération</li><li><strong>Oui</strong> pour écraser le fichier et continuer l'opération</li></ul> @@ -73,6 +77,7 @@ tutti.common.askSaveBeforeLeaving.title=Modifications non enregistrées tutti.common.cancel=Annuler tutti.common.cancel.mnemonic=A +tutti.common.caracteristic.notFound=Caractéristique inconnue tutti.common.datefield.tip=Format attendu \: %s tutti.common.file.csv=Extension d'un fichier csv tutti.common.file.pdf=Extension d'un fichier pdf @@ -784,6 +789,7 @@ tutti.editProtocol.title.choose.speciesImportFile=Importer les espèces tutti.editProtocol.title.create.protocol=Créer un nouveau protocole de saisie tutti.editProtocol.title.edit.protocol=Éditer un protocole de saisie existant +tutti.editProtocol.warn.clean=Des catégories non reconnues ont été supprimées du protocole, ces modifications ne seront sauvegardées que lorsque vous cliquerez sur le bouton "Enregistrer". tutti.editProtocol.warn.clone=Le protocole que vous venez de cloner ne sera sauvegardé que lorsque vous cliquerez sur le bouton "Enregistrer". tutti.editProtocol.warn.import=Le protocole que vous venez d'importer ne sera sauvegardé que lorsque vous cliquerez sur le bouton "Enregistrer". tutti.editSampleCategoryModel.action.close=Fermer @@ -1154,6 +1160,13 @@ tutti.multiPostImportLog.title=Lots non importés tutti.multiPostImportLog.totalSortedWeight=Poids total trié \: %s kg tutti.multiPostImportLog.totalWeight=Poids total \: %s kg +tutti.option.cancel=Annuler +tutti.option.cleanAndClone=Nettoyer et Cloner +tutti.option.cleanAndEdit=Nettoyer et Éditer +tutti.option.cleanAndImport=Nettoyer et Importer +tutti.option.clone=Cloner +tutti.option.edit=Éditer +tutti.option.import=Importer tutti.property.get.error=Propriété %1s non trouvée sur l'objet de type %2s tutti.property.set.error=Propriété %1s non trouvée sur l'objet de type %2s tutti.selectBenthos.title=Choisissez une espèce du benthos @@ -1267,12 +1280,10 @@ tutti.updateApplication.message.success=La mise à jour nécessite le redémarrage du l'application tutti.updateApplication.noUpdate=Aucune mise à jour de l'application détectée. tutti.updateApplication.title.success=Redémarrage de l'application nécessaire... -tutti.validateCruise.action.export.all.chooseFile.defaultFile=validation_%s.txt tutti.validateCruise.action.export.all.chooseFile.label=Choisir le fichier d'export tutti.validateCruise.action.export.all.chooseFile.title=Exporter les messages de validation de la campagne tutti.validateCruise.action.export.all.success=Les messages de validation des captures ont correctement été exporté dans le fichier %s tutti.validateCruise.action.export.all.tip=Exporter les messages de validation de la campagne -tutti.validateCruise.action.export.operation.chooseFile.defaultFile=validation_%s.txt tutti.validateCruise.action.export.operation.chooseFile.label=Choisir le fichier d'export tutti.validateCruise.action.export.operation.chooseFile.title=Exporter les messages de validation de l'opération tutti.validateCruise.action.export.operation.success=Les messages de validation de l'opération ont correctement été exporté dans le fichier %s
participants (1)
-
tchemit@users.forge.codelutin.com