Author: tchemit Date: 2013-03-03 21:22:36 +0100 (Sun, 03 Mar 2013) New Revision: 523 Url: http://forge.codelutin.com/projects/tutti/repository/revisions/523 Log: - move TuttiIOUtil to persistence module - refs #1860: [CAMPAGNE] - Fonctionnalit?\195?\169s de pi?\195?\168ces jointes (add persistence service) Added: trunk/tutti-persistence/src/main/java/fr/ifremer/tutti/TuttiIOUtil.java trunk/tutti-persistence/src/main/java/fr/ifremer/tutti/persistence/service/AttachmentPersistenceService.java trunk/tutti-persistence/src/main/java/fr/ifremer/tutti/persistence/service/AttachmentPersistenceServiceImpl.java Removed: trunk/tutti-service/src/main/java/fr/ifremer/tutti/service/TuttiIOUtil.java Modified: trunk/tutti-persistence/src/main/java/fr/ifremer/tutti/persistence/TuttiPersistence.java trunk/tutti-persistence/src/main/java/fr/ifremer/tutti/persistence/TuttiPersistenceImpl.java trunk/tutti-persistence/src/main/java/fr/ifremer/tutti/persistence/TuttiPersistenceNoDbImpl.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/java/fr/ifremer/tutti/persistence/service/TuttiEnumerationFile.java trunk/tutti-persistence/src/main/java/fr/ifremer/tutti/persistence/service/TuttiPersistenceServiceLocator.java trunk/tutti-persistence/src/main/resources/applicationContext-service-tutti.xml trunk/tutti-persistence/src/main/resources/queries-override.hbm.xml trunk/tutti-persistence/src/main/resources/tutti-db-enumerations.properties trunk/tutti-persistence/src/main/xmi/tutti-persistence.zargo trunk/tutti-persistence/src/test/java/fr/ifremer/tutti/persistence/DatabaseFixtures.java trunk/tutti-persistence/src/test/java/fr/ifremer/tutti/persistence/service/ReferentialPersistenceServiceReadTest.java trunk/tutti-service/src/main/java/fr/ifremer/tutti/service/PersistenceService.java trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/db/ExportDbAction.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/protocol/ExportAllCaracteristicAction.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/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 Copied: trunk/tutti-persistence/src/main/java/fr/ifremer/tutti/TuttiIOUtil.java (from rev 518, trunk/tutti-service/src/main/java/fr/ifremer/tutti/service/TuttiIOUtil.java) =================================================================== --- trunk/tutti-persistence/src/main/java/fr/ifremer/tutti/TuttiIOUtil.java (rev 0) +++ trunk/tutti-persistence/src/main/java/fr/ifremer/tutti/TuttiIOUtil.java 2013-03-03 20:22:36 UTC (rev 523) @@ -0,0 +1,115 @@ +package fr.ifremer.tutti; + +/* + * #%L + * Tutti :: Persistence + * $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 org.apache.commons.io.FileUtils; +import org.apache.commons.io.FilenameUtils; +import org.nuiton.util.ZipUtil; + +import java.io.Closeable; +import java.io.File; +import java.io.IOException; + +/** + * Useful methods around IO, all method errors are boxes a + * {@link TuttiTechnicalException}. + * + * @author tchemit <chemit@codelutin.com> + * @since 1.0.2 + */ +public class TuttiIOUtil { + + protected TuttiIOUtil() { + // no instance + } + + public static void close(Closeable toClose, String errorMessage) { + + try { + toClose.close(); + } catch (IOException e) { + throw new TuttiTechnicalException(errorMessage, e); + } + } + + public static void zip(File source, File archiveFile, String errorMessage) { + try { + ZipUtil.compress(archiveFile, source); + } catch (IOException e) { + throw new TuttiTechnicalException(errorMessage, e); + } + } + + public static void forceMkdir(File dir, String errorMessage) { + try { + FileUtils.forceMkdir(dir); + } catch (IOException e) { + throw new TuttiTechnicalException(errorMessage, e); + } + } + + public static void copyDirectory(File source, File target, String errorMessage) { + try { + FileUtils.copyDirectory(source, target); + } catch (IOException e) { + throw new TuttiTechnicalException(errorMessage, e); + } + } + + public static void copyFileToDirectory(File source, File target, String errorMessage) { + try { + FileUtils.copyFileToDirectory(source, target); + } catch (IOException e) { + throw new TuttiTechnicalException(errorMessage, e); + } + } + + public static void copyFile(File source, File target, String errorMessage) { + try { + FileUtils.copyFile(source, target); + } catch (IOException e) { + throw new TuttiTechnicalException(errorMessage, e); + } + } + + public static void deleteFile(File file, String errorMessage) { + try { + FileUtils.forceDelete(file); + } catch (IOException e) { + throw new TuttiTechnicalException(errorMessage, e); + } + } + + 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 getExtension(File file) { + return FilenameUtils.getExtension(file.getName()); + } +} Modified: trunk/tutti-persistence/src/main/java/fr/ifremer/tutti/persistence/TuttiPersistence.java =================================================================== --- trunk/tutti-persistence/src/main/java/fr/ifremer/tutti/persistence/TuttiPersistence.java 2013-03-03 17:45:10 UTC (rev 522) +++ trunk/tutti-persistence/src/main/java/fr/ifremer/tutti/persistence/TuttiPersistence.java 2013-03-03 20:22:36 UTC (rev 523) @@ -25,6 +25,7 @@ */ import fr.ifremer.tutti.persistence.entities.data.AccidentalBatch; +import fr.ifremer.tutti.persistence.entities.data.Attachment; import fr.ifremer.tutti.persistence.entities.data.CatchBatch; import fr.ifremer.tutti.persistence.entities.data.Cruise; import fr.ifremer.tutti.persistence.entities.data.FishingOperation; @@ -39,12 +40,14 @@ import fr.ifremer.tutti.persistence.entities.referential.Country; import fr.ifremer.tutti.persistence.entities.referential.FishingOperationLocation; import fr.ifremer.tutti.persistence.entities.referential.Gear; +import fr.ifremer.tutti.persistence.entities.referential.ObjectType; import fr.ifremer.tutti.persistence.entities.referential.Person; import fr.ifremer.tutti.persistence.entities.referential.Species; import fr.ifremer.tutti.persistence.entities.referential.Vessel; import fr.ifremer.tutti.persistence.entities.referential.Zone; import org.springframework.transaction.annotation.Transactional; +import java.io.File; import java.util.List; /** @@ -199,12 +202,20 @@ List<Person> getAllPerson(); + /** + * @return all object type + * @since 1.0.2 + */ + List<ObjectType> getAllObjectType(); + Person getPerson(Integer personId); Gear getGear(Integer gearCode); Vessel getVessel(String vesselCode); + ObjectType getObjectType(String objectTypeCode); + boolean isSortedQualitativeValue(CaracteristicQualitativeValue value); /** @@ -243,7 +254,55 @@ @Transactional(readOnly = false) List<Gear> importTemporaryGear(List<Gear> gears); + //------------------------------------------------------------------------// + //-- Attachments methods --// + //------------------------------------------------------------------------// + /** + * Get all attachments for the given object {@code objectId}. + * + * @param objectId id of the object + * @return list of all attachments for the given {@code objectId}. + */ + List<Attachment> getAllAttachments(String objectId); + + /** + * Get the file of the given {@code attachmentId}. + * + * @param attachmentId id of the attachment + * @return the file for the given attachment + */ + File getAttachmentFile(String attachmentId); + + /** + * Creates the given attachment. + * + * @param attachment attachment to create + * @param file file to store in this attachment + * @return the attachment with his id. + */ + @Transactional(readOnly = false) + Attachment createAttachment(Attachment attachment, File file); + + + /** + * Saves the given attachment. + * + * @param attachment attachment to create + * @return the attachment with his id. + */ + @Transactional(readOnly = false) + Attachment saveAttachment(Attachment attachment); + + + /** + * Deletes the given attachment given his id. + * + * @param attachmentId id of the attachment to delete + */ + @Transactional(readOnly = false) + void deleteAttachment(String attachmentId); + //------------------------------------------------------------------------// //-- Program methods --// //------------------------------------------------------------------------// 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-03-03 17:45:10 UTC (rev 522) +++ trunk/tutti-persistence/src/main/java/fr/ifremer/tutti/persistence/TuttiPersistenceImpl.java 2013-03-03 20:22:36 UTC (rev 523) @@ -28,6 +28,7 @@ import fr.ifremer.adagio.core.dao.data.batch.validator.CatchBatchValidationException; import fr.ifremer.adagio.core.service.technical.CacheService; import fr.ifremer.tutti.persistence.entities.data.AccidentalBatch; +import fr.ifremer.tutti.persistence.entities.data.Attachment; import fr.ifremer.tutti.persistence.entities.data.CatchBatch; import fr.ifremer.tutti.persistence.entities.data.Cruise; import fr.ifremer.tutti.persistence.entities.data.FishingOperation; @@ -43,11 +44,13 @@ import fr.ifremer.tutti.persistence.entities.referential.Country; import fr.ifremer.tutti.persistence.entities.referential.FishingOperationLocation; import fr.ifremer.tutti.persistence.entities.referential.Gear; +import fr.ifremer.tutti.persistence.entities.referential.ObjectType; import fr.ifremer.tutti.persistence.entities.referential.Person; import fr.ifremer.tutti.persistence.entities.referential.Species; import fr.ifremer.tutti.persistence.entities.referential.Vessel; import fr.ifremer.tutti.persistence.entities.referential.Zone; import fr.ifremer.tutti.persistence.service.AccidentalBatchPersistenceService; +import fr.ifremer.tutti.persistence.service.AttachmentPersistenceService; import fr.ifremer.tutti.persistence.service.BatchPersistenceService; import fr.ifremer.tutti.persistence.service.CruisePersistenceService; import fr.ifremer.tutti.persistence.service.FishingOperationPersistenceService; @@ -62,6 +65,7 @@ import org.apache.commons.logging.LogFactory; import org.springframework.beans.factory.annotation.Autowired; +import java.io.File; import java.io.IOException; import java.util.List; import java.util.Map; @@ -104,6 +108,9 @@ protected ProtocolPersistenceService protocolService; @Autowired + protected AttachmentPersistenceService attachmentService; + + @Autowired protected CacheService cacheService; @Override @@ -130,6 +137,7 @@ macroWasteBatchService.init(); accidentalBatchService.init(); protocolService.init(); + attachmentService.init(); } @Override @@ -147,6 +155,7 @@ macroWasteBatchService.close(); accidentalBatchService.close(); protocolService.close(); + attachmentService.close(); TuttiPersistenceServiceLocator.close(); } @@ -240,6 +249,11 @@ } @Override + public List<ObjectType> getAllObjectType() { + return referentialService.getAllObjectType(); + } + + @Override public Caracteristic getSizeCategoryCaracteristic() { return referentialService.getSizeCategoryCaracteristic(); } @@ -305,6 +319,11 @@ } @Override + public ObjectType getObjectType(String objectTypeCode) { + return referentialService.getObjectType(objectTypeCode); + } + + @Override public List<Species> importTemporarySpecies(List<Species> species) { return referentialService.importTemporarySpecies(species); } @@ -325,6 +344,36 @@ } //------------------------------------------------------------------------// + //-- Attachment methods --// + //------------------------------------------------------------------------// + + @Override + public List<Attachment> getAllAttachments(String objectId) { + return attachmentService.getAllAttachments(objectId); + } + + @Override + public File getAttachmentFile(String attachmentId) { + return attachmentService.getAttachmentFile(attachmentId); + } + + @Override + public Attachment createAttachment(Attachment attachment, File file) { + return attachmentService.createAttachment(attachment, file); + } + + @Override + public Attachment saveAttachment(Attachment attachment) { + return attachmentService.saveAttachment(attachment); + } + + @Override + public void deleteAttachment(String attachmentId) { + attachmentService.deleteAttachment(attachmentId); + } + + + //------------------------------------------------------------------------// //-- Program methods --// //------------------------------------------------------------------------// Modified: trunk/tutti-persistence/src/main/java/fr/ifremer/tutti/persistence/TuttiPersistenceNoDbImpl.java =================================================================== --- trunk/tutti-persistence/src/main/java/fr/ifremer/tutti/persistence/TuttiPersistenceNoDbImpl.java 2013-03-03 17:45:10 UTC (rev 522) +++ trunk/tutti-persistence/src/main/java/fr/ifremer/tutti/persistence/TuttiPersistenceNoDbImpl.java 2013-03-03 20:22:36 UTC (rev 523) @@ -25,6 +25,7 @@ */ import fr.ifremer.tutti.persistence.entities.data.AccidentalBatch; +import fr.ifremer.tutti.persistence.entities.data.Attachment; import fr.ifremer.tutti.persistence.entities.data.CatchBatch; import fr.ifremer.tutti.persistence.entities.data.Cruise; import fr.ifremer.tutti.persistence.entities.data.FishingOperation; @@ -39,11 +40,13 @@ import fr.ifremer.tutti.persistence.entities.referential.Country; import fr.ifremer.tutti.persistence.entities.referential.FishingOperationLocation; import fr.ifremer.tutti.persistence.entities.referential.Gear; +import fr.ifremer.tutti.persistence.entities.referential.ObjectType; import fr.ifremer.tutti.persistence.entities.referential.Person; import fr.ifremer.tutti.persistence.entities.referential.Species; import fr.ifremer.tutti.persistence.entities.referential.Vessel; import fr.ifremer.tutti.persistence.entities.referential.Zone; +import java.io.File; import java.io.IOException; import java.util.List; @@ -211,6 +214,16 @@ } @Override + public List<ObjectType> getAllObjectType() { + throw new RuntimeException("method not implemented"); + } + + @Override + public ObjectType getObjectType(String objectTypeCode) { + throw new RuntimeException("method not implemented"); + } + + @Override public List<Program> getAllProgram() { throw new RuntimeException("method not implemented"); } @@ -476,6 +489,31 @@ } @Override + public List<Attachment> getAllAttachments(String objectId) { + throw new RuntimeException("method not implemented"); + } + + @Override + public File getAttachmentFile(String attachmentId) { + throw new RuntimeException("method not implemented"); + } + + @Override + public Attachment createAttachment(Attachment attachment, File file) { + throw new RuntimeException("method not implemented"); + } + + @Override + public Attachment saveAttachment(Attachment attachment) { + throw new RuntimeException("method not implemented"); + } + + @Override + public void deleteAttachment(String attachmentId) { + throw new RuntimeException("method not implemented"); + } + + @Override public void init() { } Added: trunk/tutti-persistence/src/main/java/fr/ifremer/tutti/persistence/service/AttachmentPersistenceService.java =================================================================== --- trunk/tutti-persistence/src/main/java/fr/ifremer/tutti/persistence/service/AttachmentPersistenceService.java (rev 0) +++ trunk/tutti-persistence/src/main/java/fr/ifremer/tutti/persistence/service/AttachmentPersistenceService.java 2013-03-03 20:22:36 UTC (rev 523) @@ -0,0 +1,88 @@ +package fr.ifremer.tutti.persistence.service; + +/* + * #%L + * Tutti :: Persistence + * $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.TuttiPersistenceServiceImplementor; +import fr.ifremer.tutti.persistence.entities.data.Attachment; +import org.springframework.transaction.annotation.Transactional; + +import java.io.File; +import java.util.List; + +/** + * To persist {@link Attachment}. + * + * @author tchemit <chemit@codelutin.com> + * @since 1.0.2 + */ +@Transactional(readOnly = true) +public interface AttachmentPersistenceService extends TuttiPersistenceServiceImplementor { + + /** + * Get all attachments for the given object {@code objectId}. + * + * @param objectId id of the object + * @return list of all attachments for the given {@code objectId}. + */ + List<Attachment> getAllAttachments(String objectId); + + /** + * Get the file of the given {@code attachmentId}. + * + * @param attachmentId id of the attachment + * @return the file for the given attachment + */ + File getAttachmentFile(String attachmentId); + + /** + * Creates the given attachment. + * + * @param attachment attachment to create + * @param file file to store in this attachment + * @return the attachment with his id. + */ + @Transactional(readOnly = false) + Attachment createAttachment(Attachment attachment, File file); + + + /** + * Saves the given attachment. + * + * @param attachment attachment to create + * @return the attachment with his id. + */ + @Transactional(readOnly = false) + Attachment saveAttachment(Attachment attachment); + + + /** + * Deletes the given attachment given his id. + * + * @param attachmentId id of the attachment to delete + */ + @Transactional(readOnly = false) + void deleteAttachment(String attachmentId); + +} Property changes on: trunk/tutti-persistence/src/main/java/fr/ifremer/tutti/persistence/service/AttachmentPersistenceService.java ___________________________________________________________________ Added: svn:keywords + Author Date Id Revision HeadURL Added: svn:eol-style + native Added: 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 (rev 0) +++ trunk/tutti-persistence/src/main/java/fr/ifremer/tutti/persistence/service/AttachmentPersistenceServiceImpl.java 2013-03-03 20:22:36 UTC (rev 523) @@ -0,0 +1,253 @@ +package fr.ifremer.tutti.persistence.service; + +/* + * #%L + * Tutti :: Persistence + * $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.adagio.core.dao.data.measure.file.MeasurementFile; +import fr.ifremer.adagio.core.dao.data.measure.file.MeasurementFileDao; +import fr.ifremer.adagio.core.dao.referential.ObjectTypeImpl; +import fr.ifremer.adagio.core.dao.referential.QualityFlagImpl; +import fr.ifremer.adagio.core.dao.referential.pmfm.PmfmImpl; +import fr.ifremer.tutti.TuttiIOUtil; +import fr.ifremer.tutti.persistence.entities.data.Attachment; +import org.apache.commons.lang3.ObjectUtils; +import org.apache.commons.logging.Log; +import org.apache.commons.logging.LogFactory; +import org.hibernate.type.IntegerType; +import org.hibernate.type.StringType; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.dao.DataRetrievalFailureException; +import org.springframework.dao.InvalidDataAccessResourceUsageException; +import org.springframework.stereotype.Service; + +import javax.annotation.Resource; +import java.io.File; +import java.util.Iterator; +import java.util.List; + +/** + * Default implementation of the service {@link AttachmentPersistenceService}. + * + * @author tchemit <chemit@codelutin.com> + * @since 1.0.2 + */ +@Service("attachmentPersistenceService") +public class AttachmentPersistenceServiceImpl extends AbstractPersistenceService implements AttachmentPersistenceService { + + /** Logger. */ + private static final Log log = + LogFactory.getLog(AttachmentPersistenceServiceImpl.class); + + protected static final String ATTACHMENT_PATH_FORMAT = + "%1$s/OBJ-%2$s/%1$s-%2$s-%3$s.%4$s"; + + @Autowired + protected ReferentialPersistenceService referentialService; + + @Resource(name = "measurementFileDao") + protected MeasurementFileDao measurementFileDao; + + protected File dbAttachmentDirectory; + + @Override + public void init() { + super.init(); + dbAttachmentDirectory = config.getDbAttachmentDirectory(); + + if (log.isInfoEnabled()) { + log.info("Db Attachment storage: " + dbAttachmentDirectory); + } + } + + //------------------------------------------------------------------------// + //-- AttachmentPersistenceService implementation --// + //------------------------------------------------------------------------// + + @Override + public List<Attachment> getAllAttachments(String objectId) { + Iterator<Object[]> list = queryList( + "allAttachment", + "objectId", StringType.INSTANCE, objectId); + + List<Attachment> result = Lists.newArrayList(); + while (list.hasNext()) { + Object[] source = list.next(); + Attachment target = new Attachment(); + loadAttachment(source, target); + result.add(target); + } + return result; + } + + @Override + public File getAttachmentFile(String attachmentId) { + Object[] source = queryUnique( + "attachment", + "attachmetId", IntegerType.INSTANCE, Integer.valueOf(attachmentId)); + + if (source == null) { + throw new DataRetrievalFailureException( + "Could not retrieve Attachment with id=" + attachmentId); + } + Attachment target = new Attachment(); + loadAttachment(source, target); + + File result = getFile(target); + return result; + } + + @Override + public Attachment createAttachment(Attachment attachment, File file) { + Preconditions.checkNotNull(attachment); + Preconditions.checkNotNull(attachment.getObjectType()); + Preconditions.checkNotNull(attachment.getObjectType().getId()); + Preconditions.checkArgument( + attachment.getId() == null, + "Attachment 'id' must be null to call createAttachment()."); + Preconditions.checkNotNull(file); + + // Use first a fake filePath (we don't know the id of attachment entity) + attachment.setPath("FAKE-" + System.nanoTime()); + + // Create measurement file + MeasurementFile measurementFile = MeasurementFile.Factory.newInstance(); + + // set measurementFile pmfm + measurementFile.setPmfm(load(PmfmImpl.class, enumeration.PMFM_ID_MEASUREMENT_FILE)); + + // set not qualifed flag + measurementFile.setQualityFlag(load(QualityFlagImpl.class, enumeration.QUALITY_FLAG_CODE_NOT_QUALIFIED)); + + // set objectType + measurementFile.setObjectType(load(ObjectTypeImpl.class, attachment.getObjectType().getId())); + + // copy our property + attachmentToEntity(attachment, measurementFile); + measurementFileDao.create(measurementFile); + + // get created id + attachment.setId(String.valueOf(measurementFile.getId())); + + // Build now the real path + String filePath = String.format(ATTACHMENT_PATH_FORMAT, + measurementFile.getObjectType().getCode(), + measurementFile.getObjectId(), + measurementFile.getId(), + TuttiIOUtil.getExtension(file)); + + // store the path + attachment.setPath(filePath); + measurementFile.setPath(filePath); + + if (log.isInfoEnabled()) { + log.info("Created attachment: " + attachment.getId() + + ", path: " + filePath); + } + + // update measurementFile with correct path + measurementFileDao.update(measurementFile); + + // copy file to disk local storage + File targetFile = getFile(attachment); + + TuttiIOUtil.copyFile( + file, targetFile, + "Could not copy attachment file " + file + " to " + targetFile); + + return null; + } + + @Override + public Attachment saveAttachment(Attachment attachment) { + Preconditions.checkNotNull(attachment); + Preconditions.checkNotNull(attachment.getObjectType()); + Preconditions.checkNotNull(attachment.getObjectType().getId()); + Preconditions.checkNotNull(attachment.getId(), "Attachment 'id' must not be null or empty to be saved."); + + MeasurementFile measurementFile = measurementFileDao.load(Integer.valueOf(attachment.getId())); + if (measurementFile == null) { + throw new DataRetrievalFailureException("Could not retrieve Attachment with id=" + attachment.getId()); + } + + // can't change the objectType + if (ObjectUtils.notEqual(attachment.getObjectType().getId(), + measurementFile.getObjectType().getCode())) { + throw new InvalidDataAccessResourceUsageException( + "Can't change objectId, was before " + + measurementFile.getObjectType().getCode()); + } + + attachmentToEntity(attachment, measurementFile); + measurementFileDao.update(measurementFile); + return attachment; + } + + @Override + public void deleteAttachment(String attachmentId) { + Integer id = Integer.valueOf(attachmentId); + Object[] source = queryUnique( + "attachment", + "attachmetId", IntegerType.INSTANCE, id); + + if (source == null) { + throw new DataRetrievalFailureException( + "Could not retrieve Attachment with id=" + attachmentId); + } + Attachment target = new Attachment(); + loadAttachment(source, target); + + measurementFileDao.remove(id); + getCurrentSession().flush(); + + File file = getFile(target); + //TODO Hum we do not have a transaction manager for file :( + TuttiIOUtil.deleteFile(file, "Could not delete attachement file " + file); + } + + //------------------------------------------------------------------------// + //-- Internal methods --// + //------------------------------------------------------------------------// + + protected void loadAttachment(Object[] source, + Attachment target) { + + target.setId(String.valueOf(source[0])); + target.setPath((String) source[1]); + target.setName((String) source[2]); + target.setComment((String) source[3]); + } + + protected void attachmentToEntity(Attachment attachment, + MeasurementFile measurementFile) { + measurementFile.setName(attachment.getName()); + measurementFile.setComments(attachment.getComment()); + } + + protected File getFile(Attachment attachment) { + File result = new File(dbAttachmentDirectory, attachment.getPath()); + return result; + } +} Property changes on: trunk/tutti-persistence/src/main/java/fr/ifremer/tutti/persistence/service/AttachmentPersistenceServiceImpl.java ___________________________________________________________________ Added: svn:keywords + Author Date Id Revision HeadURL Added: svn:eol-style + native 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-03-03 17:45:10 UTC (rev 522) +++ trunk/tutti-persistence/src/main/java/fr/ifremer/tutti/persistence/service/ReferentialPersistenceService.java 2013-03-03 20:22:36 UTC (rev 523) @@ -33,6 +33,7 @@ import fr.ifremer.tutti.persistence.entities.referential.Country; import fr.ifremer.tutti.persistence.entities.referential.FishingOperationLocation; import fr.ifremer.tutti.persistence.entities.referential.Gear; +import fr.ifremer.tutti.persistence.entities.referential.ObjectType; import fr.ifremer.tutti.persistence.entities.referential.Person; import fr.ifremer.tutti.persistence.entities.referential.Species; import fr.ifremer.tutti.persistence.entities.referential.Vessel; @@ -178,6 +179,13 @@ */ List<Caracteristic> getAllNumericCaracteristic(); + /** + * @return all object type + * @since 1.0.2 + */ + @Cacheable(value = "objectTypes") + List<ObjectType> getAllObjectType(); + Caracteristic getSizeCategoryCaracteristic(); Caracteristic getSexCaracteristic(); @@ -205,6 +213,9 @@ @Cacheable(value = "pmfmById", key = "#pmfmId") Caracteristic getCaracteristic(Integer pmfmId); + @Cacheable(value = "objectTypeByCode", key = "#objectTypeCode") + ObjectType getObjectType(String objectTypeCode); + boolean isSortedQualitativeValue(CaracteristicQualitativeValue value); List<Integer> getSampleCategoryIds(); 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-03-03 17:45:10 UTC (rev 522) +++ trunk/tutti-persistence/src/main/java/fr/ifremer/tutti/persistence/service/ReferentialPersistenceServiceImpl.java 2013-03-03 20:22:36 UTC (rev 523) @@ -43,6 +43,7 @@ import fr.ifremer.tutti.persistence.entities.referential.Country; import fr.ifremer.tutti.persistence.entities.referential.FishingOperationLocation; import fr.ifremer.tutti.persistence.entities.referential.Gear; +import fr.ifremer.tutti.persistence.entities.referential.ObjectType; import fr.ifremer.tutti.persistence.entities.referential.Person; import fr.ifremer.tutti.persistence.entities.referential.Species; import fr.ifremer.tutti.persistence.entities.referential.Status; @@ -453,6 +454,29 @@ } @Override + public List<ObjectType> getAllObjectType() { + Iterator<Object[]> sources = queryList("allObjectType"); + List<ObjectType> result = Lists.newArrayList(); + Cache cache = cacheService.getCache("objectTypeByCode"); + while (sources.hasNext()) { + Object[] source = sources.next(); + String code = (String) source[0]; + ObjectType target = loadObjectType(source); + cache.put(code, target); + result.add(target); + } + return result; + } + + @Override + public ObjectType getObjectType(String objectTypeCode) { + Object[] source = queryUnique("objectType", + "objectTypeCode", StringType.INSTANCE, objectTypeCode); + ObjectType target = loadObjectType(source); + return target; + } + + @Override public List<Caracteristic> getAllNumericCaracteristic() { List<Caracteristic> result = Lists.newArrayList(); @@ -761,6 +785,14 @@ return result; } + protected ObjectType loadObjectType(Object[] source) { + ObjectType result = new ObjectType(); + result.setId((String) source[0]); + result.setName((String) source[1]); + result.setDescription((String) source[2]); + return result; + } + protected Species loadSpecies(TaxonRefTaxVO source) { Species target = new Species(); target.setId(String.valueOf(source.getTaxonNameId())); Modified: trunk/tutti-persistence/src/main/java/fr/ifremer/tutti/persistence/service/TuttiEnumerationFile.java =================================================================== --- trunk/tutti-persistence/src/main/java/fr/ifremer/tutti/persistence/service/TuttiEnumerationFile.java 2013-03-03 17:45:10 UTC (rev 522) +++ trunk/tutti-persistence/src/main/java/fr/ifremer/tutti/persistence/service/TuttiEnumerationFile.java 2013-03-03 20:22:36 UTC (rev 523) @@ -188,6 +188,10 @@ @Value("${PmfmId.SURVEY_PART}") public final Integer PMFM_ID_SURVEY_PART = null; + @Value("${PmfmId.MEASUREMENT_FILE}") + public final Integer PMFM_ID_MEASUREMENT_FILE= null; + + @Value("${ProgramCode.SCIENTIFIC_CRUISE_PREFIX}") public final String PROGRAM_CODE_SCIENTIFIC_CRUISE_PREFIX = null; Modified: trunk/tutti-persistence/src/main/java/fr/ifremer/tutti/persistence/service/TuttiPersistenceServiceLocator.java =================================================================== --- trunk/tutti-persistence/src/main/java/fr/ifremer/tutti/persistence/service/TuttiPersistenceServiceLocator.java 2013-03-03 17:45:10 UTC (rev 522) +++ trunk/tutti-persistence/src/main/java/fr/ifremer/tutti/persistence/service/TuttiPersistenceServiceLocator.java 2013-03-03 20:22:36 UTC (rev 523) @@ -110,6 +110,11 @@ ReferentialSynchronizeService.class); } + public static AttachmentPersistenceService getAttachmentPersistenceService() { + return getPersistenceService("attachmentPersistenceService", + AttachmentPersistenceService.class); + } + public static <S extends TuttiPersistenceServiceImplementor> S getPersistenceService(String name, Class<S> serviceType) { S service = instance().getService(name, serviceType); service.init(); Modified: trunk/tutti-persistence/src/main/resources/applicationContext-service-tutti.xml =================================================================== --- trunk/tutti-persistence/src/main/resources/applicationContext-service-tutti.xml 2013-03-03 17:45:10 UTC (rev 522) +++ trunk/tutti-persistence/src/main/resources/applicationContext-service-tutti.xml 2013-03-03 20:22:36 UTC (rev 523) @@ -83,7 +83,14 @@ <bean id="tuttiPmfmByIdCache" parent="tuttiAbstractEternalCache"> <property name="cacheName" value="pmfmById" /> </bean> - + + <bean id="tuttiObjectTypeCache" parent="tuttiAbstractEternalCache"> + <property name="cacheName" value="objectTypes" /> + </bean> + <bean id="tuttiObjectTypeByCodeCache" parent="tuttiAbstractEternalCache"> + <property name="cacheName" value="objectTypeByCode" /> + </bean> + <bean id="tuttiFishingVesselsCache" parent="tuttiAbstractEternalCache"> <property name="cacheName" value="fishingVessels" /> <property name="maxElementsInMemory" value="1"/> Modified: trunk/tutti-persistence/src/main/resources/queries-override.hbm.xml =================================================================== --- trunk/tutti-persistence/src/main/resources/queries-override.hbm.xml 2013-03-03 17:45:10 UTC (rev 522) +++ trunk/tutti-persistence/src/main/resources/queries-override.hbm.xml 2013-03-03 20:22:36 UTC (rev 523) @@ -327,8 +327,7 @@ <query-param name="pmfmIdSorted" type="java.lang.Integer"/> <query-param name="pmfmIdSortingType" type="java.lang.Integer"/> </query> - - + <query name="allSpeciesBatchFrequency"> <![CDATA[ SELECT @@ -354,8 +353,41 @@ ORDER BY sm.numericalValue ]]> <query-param name="parentBatchId" type="java.lang.Integer"/> - </query> + </query> + <query name="allAttachment"> + <![CDATA[ + SELECT + m.id AS attachmentId, + m.path AS attachmentPath, + m.name AS attachmentName, + m.comments as attachmentComment + FROM + MeasurementFileImpl m + WHERE + m.objectId = :objectId + AND m.pmfm.id = :pmfmId + ORDER BY m.id + ]]> + <query-param name="objectId" type="java.lang.Integer"/> + <query-param name="pmfmId" type="java.lang.Integer"/> + </query> + + <query name="attachment"> + <![CDATA[ + SELECT + m.id AS attachmentId, + m.path AS attachmentPath, + m.name AS attachmentName, + m.comments as attachmentComment + FROM + MeasurementFileImpl m + WHERE + m.id = :id + ]]> + <query-param name="id" type="java.lang.Integer"/> + </query> + <!-- ===================================================================== --> <!-- === Requete techniques sur référentiels [REF-TXXX] === --> <!-- ===================================================================== --> @@ -432,7 +464,6 @@ <query-param name="statusTemporaryCode" type="java.lang.String"/> </query> - <!-- ===================================================================== --> <!-- === Requete sur référentiels [REF-XXX] === --> <!-- ===================================================================== --> @@ -743,6 +774,30 @@ <query-param name="statusTemporaryCode" type="java.lang.String"/> </query> + <!-- [REF-17] Get all ObjectType --> + <query cacheable="true" name="allObjectType"> + <![CDATA[ + SELECT + p.code AS objectTypeCode, + p.name AS objectTypeName, + p.description AS objectTypeDescription + FROM ObjectTypeImpl p + ]]> + </query> + + <!-- [REF-18] Get one ObjectType --> + <query cacheable="true" name="objectType"> + <![CDATA[ + SELECT + p.code AS objectTypeCode, + p.name AS objectTypeName, + p.description AS objectTypeDescription + FROM ObjectTypeImpl p + WHERE p.code = :objectTypeCode + ]]> + <query-param name="objectTypeCode" type="java.lang.String"/> + </query> + <!-- ===================================================================== --> <!-- === Fetch profiles === --> <!-- ===================================================================== --> Modified: trunk/tutti-persistence/src/main/resources/tutti-db-enumerations.properties =================================================================== --- trunk/tutti-persistence/src/main/resources/tutti-db-enumerations.properties 2013-03-03 17:45:10 UTC (rev 522) +++ trunk/tutti-persistence/src/main/resources/tutti-db-enumerations.properties 2013-03-03 20:22:36 UTC (rev 523) @@ -328,10 +328,16 @@ # Classe de taille macro-déchet PmfmId.MARINE_LITTER_SIZE_CATEGORY=1422 +# Pour stoquer Cruise.surveyPart # TODO Alphanumeric = true A creer (dans les enumerations Allegro) -# TODO Change this number +# FIXME Change this number PmfmId.SURVEY_PART=1310 +# Pmfm associé aux pièces-jointes +# TODO Alphanumeric = true A creer (dans les enumerations Allegro) +# FIXME Change this number +PmfmId.MEASUREMENT_FILE=1310 + # TODO A creer (dans les enumerations Allegro) PmfmId.STATION_NUMBER=1243 # TODO A creer (dans les enumerations Allegro) Modified: trunk/tutti-persistence/src/main/xmi/tutti-persistence.zargo =================================================================== (Binary files differ) Modified: trunk/tutti-persistence/src/test/java/fr/ifremer/tutti/persistence/DatabaseFixtures.java =================================================================== --- trunk/tutti-persistence/src/test/java/fr/ifremer/tutti/persistence/DatabaseFixtures.java 2013-03-03 17:45:10 UTC (rev 522) +++ trunk/tutti-persistence/src/test/java/fr/ifremer/tutti/persistence/DatabaseFixtures.java 2013-03-03 20:22:36 UTC (rev 523) @@ -118,6 +118,10 @@ return 123; } + public int refNbObjectType() { + return 56; + } + public String refSpeciesId() { return "15461"; } @@ -133,4 +137,8 @@ public Integer refBad2SpeciesTaxonId() { return 2320; } + + public String objectTypeCode() { + return "BATCH"; + } } Modified: trunk/tutti-persistence/src/test/java/fr/ifremer/tutti/persistence/service/ReferentialPersistenceServiceReadTest.java =================================================================== --- trunk/tutti-persistence/src/test/java/fr/ifremer/tutti/persistence/service/ReferentialPersistenceServiceReadTest.java 2013-03-03 17:45:10 UTC (rev 522) +++ trunk/tutti-persistence/src/test/java/fr/ifremer/tutti/persistence/service/ReferentialPersistenceServiceReadTest.java 2013-03-03 20:22:36 UTC (rev 523) @@ -33,6 +33,7 @@ import fr.ifremer.tutti.persistence.entities.referential.Country; import fr.ifremer.tutti.persistence.entities.referential.FishingOperationLocation; import fr.ifremer.tutti.persistence.entities.referential.Gear; +import fr.ifremer.tutti.persistence.entities.referential.ObjectType; import fr.ifremer.tutti.persistence.entities.referential.Person; import fr.ifremer.tutti.persistence.entities.referential.Species; import fr.ifremer.tutti.persistence.entities.referential.Vessel; @@ -76,7 +77,6 @@ TuttiPersistenceServiceLocator.instance().getCacheService().clearAllCaches(); } - @Before public void setUp() throws Exception { service = TuttiPersistenceServiceLocator.getReferentialPersistenceService(); @@ -100,6 +100,18 @@ } @Test + public void getAllObjectType() { + List<ObjectType> result = service.getAllObjectType(); + assertResultList(result, fixtures.refNbObjectType()); + } + + @Test + public void getObjectType() { + ObjectType result = service.getObjectType(fixtures.objectTypeCode()); + Assert.assertNotNull(result); + } + + @Test public void getAllFishingOperationStrata(/*String zoneId*/) { String zoneId = dbResource.getFixtures().zoneId(); List<FishingOperationLocation> result = 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-03-03 17:45:10 UTC (rev 522) +++ trunk/tutti-service/src/main/java/fr/ifremer/tutti/service/PersistenceService.java 2013-03-03 20:22:36 UTC (rev 523) @@ -25,11 +25,13 @@ */ import com.google.common.base.Preconditions; +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.data.AccidentalBatch; +import fr.ifremer.tutti.persistence.entities.data.Attachment; import fr.ifremer.tutti.persistence.entities.data.CatchBatch; import fr.ifremer.tutti.persistence.entities.data.Cruise; import fr.ifremer.tutti.persistence.entities.data.FishingOperation; @@ -44,6 +46,7 @@ import fr.ifremer.tutti.persistence.entities.referential.Country; import fr.ifremer.tutti.persistence.entities.referential.FishingOperationLocation; import fr.ifremer.tutti.persistence.entities.referential.Gear; +import fr.ifremer.tutti.persistence.entities.referential.ObjectType; import fr.ifremer.tutti.persistence.entities.referential.Person; import fr.ifremer.tutti.persistence.entities.referential.Species; import fr.ifremer.tutti.persistence.entities.referential.Vessel; @@ -271,6 +274,11 @@ } @Override + public List<ObjectType> getAllObjectType() { + return driver.getAllObjectType(); + } + + @Override public List<FishingOperationLocation> getAllFishingOperationStrata(String zoneId) { return driver.getAllFishingOperationStrata(zoneId); } @@ -336,6 +344,11 @@ } @Override + public ObjectType getObjectType(String objectTypeCode) { + return driver.getObjectType(objectTypeCode); + } + + @Override public List<Species> importTemporarySpecies(List<Species> species) { return driver.importTemporarySpecies(species); } @@ -356,6 +369,35 @@ } //------------------------------------------------------------------------// + //-- Attachment methods --// + //------------------------------------------------------------------------// + + @Override + public List<Attachment> getAllAttachments(String objectId) { + return driver.getAllAttachments(objectId); + } + + @Override + public File getAttachmentFile(String attachmentId) { + return driver.getAttachmentFile(attachmentId); + } + + @Override + public Attachment createAttachment(Attachment attachment, File file) { + return driver.createAttachment(attachment, file); + } + + @Override + public Attachment saveAttachment(Attachment attachment) { + return driver.saveAttachment(attachment); + } + + @Override + public void deleteAttachment(String attachmentId) { + driver.deleteAttachment(attachmentId); + } + + //------------------------------------------------------------------------// //-- Program methods --// //------------------------------------------------------------------------// Deleted: trunk/tutti-service/src/main/java/fr/ifremer/tutti/service/TuttiIOUtil.java =================================================================== --- trunk/tutti-service/src/main/java/fr/ifremer/tutti/service/TuttiIOUtil.java 2013-03-03 17:45:10 UTC (rev 522) +++ trunk/tutti-service/src/main/java/fr/ifremer/tutti/service/TuttiIOUtil.java 2013-03-03 20:22:36 UTC (rev 523) @@ -1,95 +0,0 @@ -package fr.ifremer.tutti.service; - -/* - * #%L - * Tutti :: Service - * $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.TuttiTechnicalException; -import org.apache.commons.io.FileUtils; -import org.nuiton.util.ZipUtil; - -import java.io.Closeable; -import java.io.File; -import java.io.IOException; - -/** - * Useful methods around IO, all method errors are boxes a - * {@link TuttiTechnicalException}. - * - * @author tchemit <chemit@codelutin.com> - * @since 1.0.2 - */ -public class TuttiIOUtil { - - protected TuttiIOUtil() { - // no instance - } - - public static void close(Closeable toClose, String errorMessage) { - - try { - toClose.close(); - } catch (IOException e) { - throw new TuttiTechnicalException(errorMessage, e); - } - } - - public static void zip(File source, File archiveFile, String errorMessage) { - try { - ZipUtil.compress(archiveFile, source); - } catch (IOException e) { - throw new TuttiTechnicalException(errorMessage, e); - } - } - - public static void forceMkdir(File dir, String errorMessage) { - try { - FileUtils.forceMkdir(dir); - } catch (IOException e) { - throw new TuttiTechnicalException(errorMessage, e); - } - } - - public static void copyDirectory(File source, File target, String errorMessage) { - try { - FileUtils.copyDirectory(source, target); - } catch (IOException e) { - throw new TuttiTechnicalException(errorMessage, e); - } - } - - public static void copyFile(File source, File target, String errorMessage) { - try { - FileUtils.copyFileToDirectory(source, target); - } catch (IOException e) { - throw new TuttiTechnicalException(errorMessage, e); - } - } - - public static File addExtensionIfMissing(File file, String extension) { - if (!file.getName().endsWith(extension)) { - file = new File(file.getParentFile(), file.getName() + extension); - } - return file; - } -} 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-03-03 17:45:10 UTC (rev 522) +++ trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/db/ExportDbAction.java 2013-03-03 20:22:36 UTC (rev 523) @@ -25,7 +25,7 @@ */ import com.google.common.base.Preconditions; -import fr.ifremer.tutti.service.TuttiIOUtil; +import fr.ifremer.tutti.TuttiIOUtil; import fr.ifremer.tutti.ui.swing.content.AbstractMainUITuttiAction; import fr.ifremer.tutti.ui.swing.content.MainUIHandler; import fr.ifremer.tutti.ui.swing.util.TuttiUIUtil; 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-03-03 17:45:10 UTC (rev 522) +++ trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/home/ExportProtocolAction.java 2013-03-03 20:22:36 UTC (rev 523) @@ -26,7 +26,7 @@ import com.ezware.oxbow.swingbits.util.Preconditions; import fr.ifremer.tutti.persistence.entities.protocol.TuttiProtocol; -import fr.ifremer.tutti.service.TuttiIOUtil; +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; 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-03-03 17:45:10 UTC (rev 522) +++ trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/protocol/ExportAllCaracteristicAction.java 2013-03-03 20:22:36 UTC (rev 523) @@ -25,7 +25,7 @@ */ import com.ezware.oxbow.swingbits.util.Preconditions; -import fr.ifremer.tutti.service.TuttiIOUtil; +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; 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-03-03 17:45:10 UTC (rev 522) +++ trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/protocol/ExportProtocolCaracteristicAction.java 2013-03-03 20:22:36 UTC (rev 523) @@ -26,7 +26,7 @@ import com.ezware.oxbow.swingbits.util.Preconditions; import fr.ifremer.tutti.persistence.entities.protocol.TuttiProtocol; -import fr.ifremer.tutti.service.TuttiIOUtil; +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; 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-03-03 17:45:10 UTC (rev 522) +++ trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/protocol/ExportProtocolSpeciesAction.java 2013-03-03 20:22:36 UTC (rev 523) @@ -27,7 +27,7 @@ import com.ezware.oxbow.swingbits.util.Preconditions; import com.google.common.collect.Lists; import fr.ifremer.tutti.persistence.entities.protocol.SpeciesProtocol; -import fr.ifremer.tutti.service.TuttiIOUtil; +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; 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-03-03 17:45:10 UTC (rev 522) +++ trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/referential/ExportTemporaryGearExampleAction.java 2013-03-03 20:22:36 UTC (rev 523) @@ -25,7 +25,7 @@ */ import com.ezware.oxbow.swingbits.util.Preconditions; -import fr.ifremer.tutti.service.TuttiIOUtil; +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; 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-03-03 17:45:10 UTC (rev 522) +++ trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/referential/ExportTemporaryPersonExampleAction.java 2013-03-03 20:22:36 UTC (rev 523) @@ -25,7 +25,7 @@ */ import com.ezware.oxbow.swingbits.util.Preconditions; -import fr.ifremer.tutti.service.TuttiIOUtil; +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; 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-03-03 17:45:10 UTC (rev 522) +++ trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/referential/ExportTemporarySpeciesExampleAction.java 2013-03-03 20:22:36 UTC (rev 523) @@ -25,7 +25,7 @@ */ import com.ezware.oxbow.swingbits.util.Preconditions; -import fr.ifremer.tutti.service.TuttiIOUtil; +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; 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-03-03 17:45:10 UTC (rev 522) +++ trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/referential/ExportTemporaryVesselExampleAction.java 2013-03-03 20:22:36 UTC (rev 523) @@ -25,7 +25,7 @@ */ import com.ezware.oxbow.swingbits.util.Preconditions; -import fr.ifremer.tutti.service.TuttiIOUtil; +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;