r372 - in trunk/echobase-entities/src: main/java/fr/ifremer/echobase main/java/fr/ifremer/echobase/csv main/java/fr/ifremer/echobase/entities main/resources main/resources/i18n test/java/fr/ifremer/echobase/entities
Author: tchemit Date: 2012-03-19 16:55:36 +0100 (Mon, 19 Mar 2012) New Revision: 372 Url: http://forge.codelutin.com/repositories/revision/echobase/372 Log: move csv neutral api to entity module Added: trunk/echobase-entities/src/main/java/fr/ifremer/echobase/csv/ trunk/echobase-entities/src/main/java/fr/ifremer/echobase/csv/AssociationExportContext.java trunk/echobase-entities/src/main/java/fr/ifremer/echobase/csv/EchoBaseExport.java trunk/echobase-entities/src/main/java/fr/ifremer/echobase/csv/EchoBaseImport.java trunk/echobase-entities/src/main/java/fr/ifremer/echobase/csv/EntityExportContext.java Modified: trunk/echobase-entities/src/main/java/fr/ifremer/echobase/EchoBaseFunctions.java trunk/echobase-entities/src/main/java/fr/ifremer/echobase/entities/EntitiesUtil.java trunk/echobase-entities/src/main/resources/i18n/echobase-entities_en_GB.properties trunk/echobase-entities/src/main/resources/i18n/echobase-entities_fr_FR.properties trunk/echobase-entities/src/main/resources/topia-h2.properties trunk/echobase-entities/src/test/java/fr/ifremer/echobase/entities/EntitiesUtilTest.java Modified: trunk/echobase-entities/src/main/java/fr/ifremer/echobase/EchoBaseFunctions.java =================================================================== --- trunk/echobase-entities/src/main/java/fr/ifremer/echobase/EchoBaseFunctions.java 2012-03-19 15:10:55 UTC (rev 371) +++ trunk/echobase-entities/src/main/java/fr/ifremer/echobase/EchoBaseFunctions.java 2012-03-19 15:55:36 UTC (rev 372) @@ -24,11 +24,13 @@ package fr.ifremer.echobase; import com.google.common.base.Function; +import fr.ifremer.echobase.entities.EchoBaseEntityEnum; import fr.ifremer.echobase.entities.data.DataProcessing; import fr.ifremer.echobase.entities.data.Echotype; import fr.ifremer.echobase.entities.data.Operation; import fr.ifremer.echobase.entities.data.Transect; import fr.ifremer.echobase.entities.data.Voyage; +import fr.ifremer.echobase.entities.meta.MetaFilenameAware; import fr.ifremer.echobase.entities.references.AcousticInstrument; import fr.ifremer.echobase.entities.references.AgeCategory; import fr.ifremer.echobase.entities.references.AreaOfOperation; @@ -303,6 +305,13 @@ } }; + public static final Function<MetaFilenameAware,EchoBaseEntityEnum> META_BY_SOURCE = new Function<MetaFilenameAware, EchoBaseEntityEnum>() { + @Override + public EchoBaseEntityEnum apply(MetaFilenameAware input) { + return input.getSource(); + } + }; + public static String getSpeciesCategoryKey(Species species, SizeCategory sizeCategory, SexCategory sexCategory) { String key = species.getBaracoudaCode(); if (sizeCategory != null) { Added: trunk/echobase-entities/src/main/java/fr/ifremer/echobase/csv/AssociationExportContext.java =================================================================== --- trunk/echobase-entities/src/main/java/fr/ifremer/echobase/csv/AssociationExportContext.java (rev 0) +++ trunk/echobase-entities/src/main/java/fr/ifremer/echobase/csv/AssociationExportContext.java 2012-03-19 15:55:36 UTC (rev 372) @@ -0,0 +1,110 @@ +/* + * #%L + * EchoBase :: Entities + * + * $Id$ + * $HeadURL$ + * %% + * Copyright (C) 2011 - 2012 Ifremer, Codelutin + * %% + * This program is free software: you can redistribute it and/or modify + * it under the terms of the GNU Affero 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 Affero General Public License + * along with this program. If not, see <http://www.gnu.org/licenses/>. + * #L% + */ +package fr.ifremer.echobase.csv; + +import com.google.common.base.Charsets; +import com.google.common.base.Preconditions; +import fr.ifremer.echobase.entities.meta.AssociationMeta; +import org.apache.commons.io.FileUtils; +import org.apache.commons.io.IOUtils; +import org.apache.commons.logging.Log; +import org.apache.commons.logging.LogFactory; +import org.nuiton.topia.persistence.TopiaEntity; +import org.nuiton.util.csv.ExportModel; + +import java.io.Closeable; +import java.io.File; +import java.io.FileNotFoundException; +import java.io.FileOutputStream; +import java.io.IOException; +import java.io.OutputStreamWriter; +import java.io.Writer; +import java.util.List; + +/** + * To export associations as csv files. + * + * @author tchemit <chemit@codelutin.com> + * @since 0.3 + */ +public class AssociationExportContext implements Closeable { + + /** Logger. */ + private static final Log log = + LogFactory.getLog(AssociationExportContext.class); + + /** association meta to export. */ + protected final AssociationMeta meta; + + /** Exporter object. */ + protected final EchoBaseExport export; + + /** Where to export datas. */ + protected final Writer writer; + + protected final File entryFile; + + public AssociationExportContext(ExportModel<TopiaEntity> model, + AssociationMeta meta, + File container, + List<TopiaEntity> data) throws FileNotFoundException { + Preconditions.checkNotNull(model); + Preconditions.checkNotNull(meta); + Preconditions.checkNotNull(container); + Preconditions.checkNotNull(data); + this.meta = meta; + + export = EchoBaseExport.newExport(model, data, true); + + entryFile = new File(container, meta.getFilename()); + if (log.isDebugEnabled()) { + log.debug("Creates AssociationExportContext::" + meta + " - " + entryFile.getName()); + } + writer = new OutputStreamWriter(new FileOutputStream(entryFile), + Charsets.UTF_8); + } + + @Override + public void close() throws IOException { + try { + if (export.isHeaderWritten()) { + + if (log.isInfoEnabled()) { + log.info("Export association " + meta + " to " + entryFile); + } + writer.flush(); + } else { + + // this file was not used, delete it + FileUtils.deleteQuietly(entryFile); + } + } finally { + IOUtils.closeQuietly(writer); + } + } + + public void write() throws Exception { + export.write(writer); + } +} Property changes on: trunk/echobase-entities/src/main/java/fr/ifremer/echobase/csv/AssociationExportContext.java ___________________________________________________________________ Added: svn:keywords + Author Date Id Revision HeadURL Added: svn:eol-style + native Added: trunk/echobase-entities/src/main/java/fr/ifremer/echobase/csv/EchoBaseExport.java =================================================================== --- trunk/echobase-entities/src/main/java/fr/ifremer/echobase/csv/EchoBaseExport.java (rev 0) +++ trunk/echobase-entities/src/main/java/fr/ifremer/echobase/csv/EchoBaseExport.java 2012-03-19 15:55:36 UTC (rev 372) @@ -0,0 +1,101 @@ +/* + * #%L + * EchoBase :: Entities + * + * $Id$ + * $HeadURL$ + * %% + * Copyright (C) 2011 - 2012 Ifremer, Codelutin + * %% + * This program is free software: you can redistribute it and/or modify + * it under the terms of the GNU Affero 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 Affero General Public License + * along with this program. If not, see <http://www.gnu.org/licenses/>. + * #L% + */ +package fr.ifremer.echobase.csv; + +import org.nuiton.util.csv.Export; +import org.nuiton.util.csv.ExportModel; + +import java.io.File; +import java.io.IOException; +import java.io.Writer; +import java.nio.charset.Charset; + +/** + * Extends the {@link Export} classes to be able to generate only once + * the header. + * + * @author tchemit <chemit@codelutin.com> + * @since 0.3 + */ +public class EchoBaseExport<E> extends Export<E> { + + public static <E> EchoBaseExport<E> newExport(ExportModel<E> model, + Iterable<E> data, + boolean writeOnceHeader) { + return new EchoBaseExport<E>(model, data, writeOnceHeader); + } + + public static <E> void exportToWriter(ExportModel<E> model, + Iterable<E> data, + Writer writer, + boolean writeOnceHeader) throws Exception { + Export<E> exporter = newExport(model, data, writeOnceHeader); + exporter.write(writer); + } + + public static <E> void exportToFile(ExportModel<E> model, + Iterable<E> data, + File file, + Charset charset, + boolean writeOnceHeader) throws Exception { + Export<E> exporter = newExport(model, data, writeOnceHeader); + exporter.write(file, charset); + } + + public static <E> String exportToString(ExportModel<E> model, + Iterable<E> data, + Charset charset, + boolean writeOnceHeader) throws Exception { + Export<E> exporter = newExport(model, data, writeOnceHeader); + return exporter.toString(charset); + } + + protected final boolean writeOnceHeader; + + protected boolean headerWritten; + + public boolean isHeaderWritten() { + return headerWritten; + } + + protected EchoBaseExport(ExportModel<E> model, + Iterable<E> data, + boolean writeOnceHeader) { + super(model, data); + this.writeOnceHeader = writeOnceHeader; + } + + @Override + protected void writeHeader(Writer writer) throws IOException { + if (!writeOnceHeader || !headerWritten) { + + // no header generated, let's do it! + + super.writeHeader(writer); + + // mark it as written + headerWritten = true; + } + } +} Property changes on: trunk/echobase-entities/src/main/java/fr/ifremer/echobase/csv/EchoBaseExport.java ___________________________________________________________________ Added: svn:keywords + Author Date Id Revision HeadURL Added: svn:eol-style + native Copied: trunk/echobase-entities/src/main/java/fr/ifremer/echobase/csv/EchoBaseImport.java (from rev 369, trunk/echobase-services/src/main/java/fr/ifremer/echobase/services/csv/EchoBaseImport.java) =================================================================== --- trunk/echobase-entities/src/main/java/fr/ifremer/echobase/csv/EchoBaseImport.java (rev 0) +++ trunk/echobase-entities/src/main/java/fr/ifremer/echobase/csv/EchoBaseImport.java 2012-03-19 15:55:36 UTC (rev 372) @@ -0,0 +1,137 @@ +/* + * #%L + * EchoBase :: Entities + * + * $Id$ + * $HeadURL$ + * %% + * Copyright (C) 2011 - 2012 Ifremer, Codelutin + * %% + * This program is free software: you can redistribute it and/or modify + * it under the terms of the GNU Affero 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 Affero General Public License + * along with this program. If not, see <http://www.gnu.org/licenses/>. + * #L% + */ +package fr.ifremer.echobase.csv; + +import com.google.common.base.Charsets; +import org.nuiton.util.StringUtil; +import org.nuiton.util.csv.Import; +import org.nuiton.util.csv.ImportModel; +import org.nuiton.util.csv.ImportRuntimeException; +import org.nuiton.util.csv.ImportableColumn; + +import java.io.BufferedReader; +import java.io.File; +import java.io.FileInputStream; +import java.io.IOException; +import java.io.InputStream; +import java.io.InputStreamReader; +import java.io.Reader; +import java.util.ArrayList; +import java.util.LinkedList; +import java.util.List; + +import static org.nuiton.i18n.I18n._; + +/** + * This extends of the {@link Import} offers to allow case on header names. + * + * @author tchemit <chemit@codelutin.com> + * @since 0.3 + */ +public class EchoBaseImport<E> extends Import<E> { + + public static String[] getHeader(File file, char charSeprator) { + + try { + BufferedReader reader = new BufferedReader(new InputStreamReader(new FileInputStream(file), Charsets.UTF_8.name())); + try { + String header = reader.readLine(); + String[] result = header.split(charSeprator + ""); + return result; + } finally { + reader.close(); + } + } catch (IOException e) { + throw new ImportRuntimeException("Could not obtain header of file " + file, e); + } + } + + public static <E> EchoBaseImport<E> newImport(ImportModel<E> model, + InputStream inputStream) { + return new EchoBaseImport<E>(model, inputStream); + } + + public static <E> EchoBaseImport<E> newImport(ImportModel<E> model, + Reader reader) { + return new EchoBaseImport<E>(model, reader); + } + + public EchoBaseImport(ImportModel<E> importModel, InputStream inputStream) { + super(importModel, inputStream); + } + + public EchoBaseImport(ImportModel<E> importModel, Reader reader) { + super(importModel, reader); + } + + @Override + protected void checkAllMandatoryHeadersArePresent(String[] headers) { + + List<String> csvHeaders = new ArrayList<String>(); + for (String header : headers) { + csvHeaders.add(header.toLowerCase()); + } +// Collections.addAll(csvHeaders, headers); + + List<String> mandatoryHeadersNames = new ArrayList<String>(); + for (ImportableColumn<E, ?> field : getAllMandatoryHeaders()) { +// mandatoryHeadersNames.add(field.getHeaderName()); + mandatoryHeadersNames.add(field.getHeaderName().toLowerCase()); + } + mandatoryHeadersNames.removeAll(csvHeaders); + + if (!mandatoryHeadersNames.isEmpty()) { + String validationMessage = + _("csv.import.error.missingMandatoryHeaders", + StringUtil.join(mandatoryHeadersNames, ", ", true)); + throw new ImportRuntimeException(validationMessage); + } + } + + @Override + protected void checkHeaderNamesAreAllKnown(String[] headers) { + List<String> csvHeaders = new ArrayList<String>(); + for (String header : headers) { + csvHeaders.add(header.toLowerCase()); + } +// Collections.addAll(csvHeaders, headers); + + for (ImportableColumn<E, ?> field : model.getColumnsForImport()) { + csvHeaders.remove(field.getHeaderName().toLowerCase()); +// csvHeaders.remove(field.getHeaderName()); + } + if (!csvHeaders.isEmpty()) { + List<String> validHeaderNames = new LinkedList<String>(); + for (ImportableColumn<E, ?> importableColumn : + model.getColumnsForImport()) { + validHeaderNames.add(importableColumn.getHeaderName()); + } + String validationMessage = + _("csv.import.error.unrecognizedHeaders", + StringUtil.join(csvHeaders, ", ", true), + StringUtil.join(validHeaderNames, ", ", true)); + throw new ImportRuntimeException(validationMessage); + } + } +} Property changes on: trunk/echobase-entities/src/main/java/fr/ifremer/echobase/csv/EchoBaseImport.java ___________________________________________________________________ Added: svn:keywords + Author Date Id Revision HeadURL Added: svn:eol-style + native Added: trunk/echobase-entities/src/main/java/fr/ifremer/echobase/csv/EntityExportContext.java =================================================================== --- trunk/echobase-entities/src/main/java/fr/ifremer/echobase/csv/EntityExportContext.java (rev 0) +++ trunk/echobase-entities/src/main/java/fr/ifremer/echobase/csv/EntityExportContext.java 2012-03-19 15:55:36 UTC (rev 372) @@ -0,0 +1,143 @@ +/* + * #%L + * EchoBase :: Entities + * + * $Id$ + * $HeadURL$ + * %% + * Copyright (C) 2011 - 2012 Ifremer, Codelutin + * %% + * This program is free software: you can redistribute it and/or modify + * it under the terms of the GNU Affero 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 Affero General Public License + * along with this program. If not, see <http://www.gnu.org/licenses/>. + * #L% + */ +package fr.ifremer.echobase.csv; + +import com.google.common.base.Charsets; +import com.google.common.base.Preconditions; +import com.google.common.collect.Lists; +import fr.ifremer.echobase.entities.meta.AssociationMeta; +import fr.ifremer.echobase.entities.meta.TableMeta; +import org.apache.commons.io.FileUtils; +import org.apache.commons.io.IOUtils; +import org.apache.commons.logging.Log; +import org.apache.commons.logging.LogFactory; +import org.nuiton.topia.persistence.TopiaEntity; +import org.nuiton.util.csv.ExportModel; + +import java.io.Closeable; +import java.io.File; +import java.io.FileNotFoundException; +import java.io.FileOutputStream; +import java.io.IOException; +import java.io.OutputStreamWriter; +import java.io.Writer; +import java.util.Collection; +import java.util.List; + +/** + * to export entity as csv files. + * + * @author tchemit <chemit@codelutin.com> + * @since 0.3 + */ +public class EntityExportContext implements Closeable { + + /** Logger. */ + private static final Log log = LogFactory.getLog(EntityExportContext.class); + + /** meta to export. */ + protected final TableMeta meta; + + /** Exporter object. */ + protected final EchoBaseExport export; + + /** Where to export datas. */ + protected final Writer writer; + + /** + * Unique list to store data to export. (will be shared with + * association export context.) + */ + protected final List<TopiaEntity> data; + + /** Association export context for this type of entity. */ + protected final Collection<AssociationExportContext> associationExportContexts; + + protected final File entryFile; + + public EntityExportContext(ExportModel<TopiaEntity> model, + TableMeta meta, + File container) throws FileNotFoundException { + Preconditions.checkNotNull(model); + Preconditions.checkNotNull(meta); + Preconditions.checkNotNull(container); + + this.meta = meta; + export = EchoBaseExport.newExport(model, data = Lists.newArrayList(), true); + entryFile = new File(container, meta.getFilename()); + if (log.isDebugEnabled()) { + log.debug("Creates EntityExportContext::" + meta + " - " + entryFile.getName()); + } + writer = new OutputStreamWriter(new FileOutputStream(entryFile), Charsets.UTF_8); + associationExportContexts = Lists.newArrayList(); + } + + public void addAssociationExportContext(AssociationMeta meta, + ExportModel<TopiaEntity> model, + File container) throws FileNotFoundException { + associationExportContexts.add( + new AssociationExportContext(model, + meta, + container, + data) + ); + } + + public void setData(TopiaEntity entity) { + data.clear(); + data.add(entity); + } + + @Override + public void close() throws IOException { + + try { + if (export.isHeaderWritten()) { + + if (log.isInfoEnabled()) { + log.info("Export table " + meta + " to " + entryFile); + } + writer.flush(); + } else { + // this file was not used, delete it + FileUtils.deleteQuietly(entryFile); + } + } finally { + IOUtils.closeQuietly(writer); + for (AssociationExportContext c : associationExportContexts) { + c.close(); + } + } + } + + public void write() throws Exception { + export.write(writer); + } + + public void writeAssociations() throws Exception { + for (AssociationExportContext c : associationExportContexts) { + c.write(); + } + } +} Property changes on: trunk/echobase-entities/src/main/java/fr/ifremer/echobase/csv/EntityExportContext.java ___________________________________________________________________ Added: svn:keywords + Author Date Id Revision HeadURL Added: svn:eol-style + native Modified: trunk/echobase-entities/src/main/java/fr/ifremer/echobase/entities/EntitiesUtil.java =================================================================== --- trunk/echobase-entities/src/main/java/fr/ifremer/echobase/entities/EntitiesUtil.java 2012-03-19 15:10:55 UTC (rev 371) +++ trunk/echobase-entities/src/main/java/fr/ifremer/echobase/entities/EntitiesUtil.java 2012-03-19 15:55:36 UTC (rev 372) @@ -24,6 +24,9 @@ package fr.ifremer.echobase.entities; import com.google.common.collect.Lists; +import com.google.common.collect.Multimap; +import com.google.common.collect.Multimaps; +import fr.ifremer.echobase.EchoBaseFunctions; import fr.ifremer.echobase.entities.meta.DbMeta; import fr.ifremer.echobase.entities.meta.MetaFilenameAware; import fr.ifremer.echobase.entities.meta.TableMeta; @@ -46,39 +49,7 @@ List<EchoBaseEntityEnum> result = Lists.newLinkedList(); - result.add(EchoBaseEntityEnum.Voyage); - result.add(EchoBaseEntityEnum.Transit); - result.add(EchoBaseEntityEnum.Transect); - result.add(EchoBaseEntityEnum.DataAcquisition); - result.add(EchoBaseEntityEnum.DataProcessing); - result.add(EchoBaseEntityEnum.Cell); - result.add(EchoBaseEntityEnum.Data); - - result.add(EchoBaseEntityEnum.Operation); - result.add(EchoBaseEntityEnum.OperationMetadataValue); - result.add(EchoBaseEntityEnum.GearMetadataValue); - result.add(EchoBaseEntityEnum.Sample); result.add(EchoBaseEntityEnum.SampleData); - - result.add(EchoBaseEntityEnum.Echotype); - result.add(EchoBaseEntityEnum.LengthAgeKey); - result.add(EchoBaseEntityEnum.LengthWeightKey); - result.add(EchoBaseEntityEnum.Category); - - result.add(EchoBaseEntityEnum.Result); - - return result.toArray(new EchoBaseEntityEnum[result.size()]); - } - - /** - * @return the entity types of data in correct order for replication - * purpose. - */ - public static EchoBaseEntityEnum[] getDataTypesForCopy() { - - List<EchoBaseEntityEnum> result = Lists.newLinkedList(); - - result.add(EchoBaseEntityEnum.SampleData); result.add(EchoBaseEntityEnum.Sample); result.add(EchoBaseEntityEnum.OperationMetadataValue); @@ -97,7 +68,6 @@ result.add(EchoBaseEntityEnum.Transect); result.add(EchoBaseEntityEnum.Transit); - result.add(EchoBaseEntityEnum.LengthAgeKey); result.add(EchoBaseEntityEnum.LengthWeightKey); @@ -107,57 +77,10 @@ } /** - * @return the entity types of reference in correct order for replication - * purpose. - */ - public static EchoBaseEntityEnum[] getReferenceTypes() { - List<EchoBaseEntityEnum> result = Lists.newLinkedList(); - result.add(EchoBaseEntityEnum.SexCategory); - result.add(EchoBaseEntityEnum.AgeCategory); - result.add(EchoBaseEntityEnum.SizeCategory); - result.add(EchoBaseEntityEnum.MeasureType); - result.add(EchoBaseEntityEnum.DataType); - result.add(EchoBaseEntityEnum.ReferenceDatumType); - result.add(EchoBaseEntityEnum.VesselType); - result.add(EchoBaseEntityEnum.EchotypeCategory); - result.add(EchoBaseEntityEnum.DepthStratum); - result.add(EchoBaseEntityEnum.Strata); - result.add(EchoBaseEntityEnum.CellMethod); - result.add(EchoBaseEntityEnum.AcousticInstrument); - result.add(EchoBaseEntityEnum.CategoryType); - result.add(EchoBaseEntityEnum.CategoryMeaning); - result.add(EchoBaseEntityEnum.Species); - result.add(EchoBaseEntityEnum.GearCharacteristic); - result.add(EchoBaseEntityEnum.ReferenceDatum); - result.add(EchoBaseEntityEnum.ReferencingMethod); - result.add(EchoBaseEntityEnum.GearCharacteristicValue); - result.add(EchoBaseEntityEnum.GearMetadata); - result.add(EchoBaseEntityEnum.Calibration); - result.add(EchoBaseEntityEnum.MeasurementMetadata); - result.add(EchoBaseEntityEnum.SampleDataType); - result.add(EchoBaseEntityEnum.SampleType); - result.add(EchoBaseEntityEnum.Vessel); - result.add(EchoBaseEntityEnum.DataMetadata); - result.add(EchoBaseEntityEnum.CellType); - result.add(EchoBaseEntityEnum.Impacte); - result.add(EchoBaseEntityEnum.Mission); - result.add(EchoBaseEntityEnum.OperationEvent); - result.add(EchoBaseEntityEnum.OperationMetadata); - result.add(EchoBaseEntityEnum.AreaOfOperation); - result.add(EchoBaseEntityEnum.CategoryRef); - result.add(EchoBaseEntityEnum.DataQuality); - result.add(EchoBaseEntityEnum.TSParameters); - result.add(EchoBaseEntityEnum.Gear); - result.add(EchoBaseEntityEnum.DataProtocol); - result.add(EchoBaseEntityEnum.SpeciesCategory); - return result.toArray(new EchoBaseEntityEnum[result.size()]); - } - - /** * @return the entity types of reference in correct order for copy * purpose (says import / export of all a database. */ - public static EchoBaseEntityEnum[] getReferenceTypesForCopy() { + public static EchoBaseEntityEnum[] getReferenceTypes() { List<EchoBaseEntityEnum> result = Lists.newLinkedList(); // with no dep @@ -210,12 +133,40 @@ List<MetaFilenameAware> entities = Lists.newArrayList(); List<MetaFilenameAware> associations = Lists.newArrayList(); - addEntries(dbMeta, entities, associations, getReferenceTypesForCopy()); - addEntries(dbMeta, entities, associations, getDataTypesForCopy()); + addEntries(dbMeta, entities, associations, getReferenceTypes()); + addEntries(dbMeta, entities, associations, getDataTypes()); entities.addAll(associations); return entities.toArray(new MetaFilenameAware[entities.size()]); } + public static MetaFilenameAware[] getReferenceEntries(DbMeta dbMeta) { + + List<MetaFilenameAware> entities = Lists.newArrayList(); + List<MetaFilenameAware> associations = Lists.newArrayList(); + + addEntries(dbMeta, entities, associations, getReferenceTypes()); + entities.addAll(associations); + return entities.toArray(new MetaFilenameAware[entities.size()]); + } + + public static MetaFilenameAware[] getDataEntries(DbMeta dbMeta) { + + List<MetaFilenameAware> entities = Lists.newArrayList(); + + addEntries(dbMeta, entities, null, getDataTypes()); + return entities.toArray(new MetaFilenameAware[entities.size()]); + } + + public static Multimap<EchoBaseEntityEnum, MetaFilenameAware> getDataAssociationsEntries(DbMeta dbMeta) { + + List<MetaFilenameAware> associations = Lists.newArrayList(); + + addEntries(dbMeta, null, associations, getDataTypes()); + + Multimap<EchoBaseEntityEnum, MetaFilenameAware> associationsBySource = Multimaps.index(associations, EchoBaseFunctions.META_BY_SOURCE); + return associationsBySource; + } + protected static void addEntries(DbMeta dbMeta, List<MetaFilenameAware> entities, List<MetaFilenameAware> associations, @@ -223,8 +174,12 @@ for (EchoBaseEntityEnum type : types) { TableMeta tableMeta = getTableMeta(dbMeta, type); - entities.add(tableMeta); - associations.addAll(tableMeta.getAssociations()); + if (entities != null) { + entities.add(tableMeta); + } + if (associations != null) { + associations.addAll(tableMeta.getAssociations()); + } } } Modified: trunk/echobase-entities/src/main/resources/i18n/echobase-entities_en_GB.properties =================================================================== --- trunk/echobase-entities/src/main/resources/i18n/echobase-entities_en_GB.properties 2012-03-19 15:10:55 UTC (rev 371) +++ trunk/echobase-entities/src/main/resources/i18n/echobase-entities_en_GB.properties 2012-03-19 15:55:36 UTC (rev 372) @@ -1,3 +1,5 @@ +csv.import.error.missingMandatoryHeaders= +csv.import.error.unrecognizedHeaders= echobase.common.AParameter= echobase.common.BParameter= echobase.common.TSParameters= Modified: trunk/echobase-entities/src/main/resources/i18n/echobase-entities_fr_FR.properties =================================================================== --- trunk/echobase-entities/src/main/resources/i18n/echobase-entities_fr_FR.properties 2012-03-19 15:10:55 UTC (rev 371) +++ trunk/echobase-entities/src/main/resources/i18n/echobase-entities_fr_FR.properties 2012-03-19 15:55:36 UTC (rev 372) @@ -1,3 +1,5 @@ +csv.import.error.missingMandatoryHeaders= +csv.import.error.unrecognizedHeaders= echobase.common.AParameter= echobase.common.BParameter= echobase.common.TSParameters= Modified: trunk/echobase-entities/src/main/resources/topia-h2.properties =================================================================== --- trunk/echobase-entities/src/main/resources/topia-h2.properties 2012-03-19 15:10:55 UTC (rev 371) +++ trunk/echobase-entities/src/main/resources/topia-h2.properties 2012-03-19 15:55:36 UTC (rev 372) @@ -24,9 +24,6 @@ hibernate.hbm2ddl.auto=update hibernate.show_sql=false -# Replication configuration -topia.service.replication=org.nuiton.topia.replication.TopiaReplicationServiceImpl - hibernate.dialect=org.hibernate.dialect.H2Dialect hibernate.connection.username=sa hibernate.connection.password=sa Modified: trunk/echobase-entities/src/test/java/fr/ifremer/echobase/entities/EntitiesUtilTest.java =================================================================== --- trunk/echobase-entities/src/test/java/fr/ifremer/echobase/entities/EntitiesUtilTest.java 2012-03-19 15:10:55 UTC (rev 371) +++ trunk/echobase-entities/src/test/java/fr/ifremer/echobase/entities/EntitiesUtilTest.java 2012-03-19 15:55:36 UTC (rev 372) @@ -24,25 +24,15 @@ package fr.ifremer.echobase.entities; import com.google.common.collect.Lists; -import com.google.common.collect.Sets; import fr.ifremer.echobase.entities.data.Voyage; import fr.ifremer.echobase.entities.references.Mission; import junit.framework.Assert; -import org.apache.commons.logging.Log; -import org.apache.commons.logging.LogFactory; import org.junit.Test; -import org.nuiton.topia.TopiaException; import org.nuiton.topia.persistence.TopiaEntity; -import org.nuiton.topia.persistence.TopiaEntityEnum; -import org.nuiton.topia.replication.TopiaReplicationModelBuilder; -import org.nuiton.topia.replication.model.ReplicationModel; -import org.nuiton.topia.replication.model.ReplicationNode; import java.util.ArrayList; import java.util.Arrays; -import java.util.Collection; import java.util.List; -import java.util.Set; /** * To test the class {@link EntitiesUtil}. @@ -52,9 +42,6 @@ */ public class EntitiesUtilTest { - /** Logger. */ - private static final Log log = LogFactory.getLog(EntitiesUtilTest.class); - @Test public void getReferenceTypes() { @@ -73,23 +60,6 @@ } @Test - public void getReferenceTypesForCopy() { - - List<EchoBaseEntityEnum> types = - Arrays.asList(EntitiesUtil.getReferenceTypesForCopy()); - - List<EchoBaseEntityEnum> expectedTypes = - Lists.newArrayList(getContractsOf(Mission.class.getPackage())); - - Assert.assertNotNull(types); - - for (EchoBaseEntityEnum type : expectedTypes) { - Assert.assertTrue("Missing type : " + type, types.contains(type)); - } - Assert.assertEquals(expectedTypes.size(), types.size()); - } - - @Test public void getDataTypes() { List<EchoBaseEntityEnum> types = @@ -97,24 +67,7 @@ List<EchoBaseEntityEnum> expectedTypes = Lists.newArrayList(getContractsOf(Voyage.class.getPackage())); - Assert.assertNotNull(types); - for (EchoBaseEntityEnum type : expectedTypes) { - Assert.assertTrue("Missing type : " + type, types.contains(type)); - } - Assert.assertEquals(expectedTypes.size(), types.size()); - } - - - @Test - public void getDataTypesForCopy() { - - List<EchoBaseEntityEnum> types = - Arrays.asList(EntitiesUtil.getDataTypesForCopy()); - - List<EchoBaseEntityEnum> expectedTypes = - Lists.newArrayList(getContractsOf(Voyage.class.getPackage())); - Assert.assertNotNull(types); for (EchoBaseEntityEnum type : expectedTypes) { @@ -123,90 +76,6 @@ Assert.assertEquals(expectedTypes.size(), types.size()); } - @Test - public void testGetReferentielCopyModel() throws TopiaException { - - EchoBaseEntityEnum[] types = EntitiesUtil.getReferenceTypesForCopy(); - Set<TopiaEntityEnum> dones = Sets.newHashSet(); - - ReplicationModel model = new ReplicationModel(types, false); - new TopiaReplicationModelBuilder().initModel(model, false); - List<ReplicationNode> order = model.getOrder(); - - StringBuilder buffer = new StringBuilder(); - for (ReplicationNode node : order) { - TopiaEntityEnum type = node.getContract(); - Assert.assertTrue(type + " was already treated.", dones.add(type)); - Collection<ReplicationNode> dependencies = node.getDependencies().values(); - for (ReplicationNode dependency : node.getDependencies().values()) { - TopiaEntityEnum dependencyType = dependency.getContract(); - Assert.assertTrue(dependencyType + - " was detected as a dependency of node " + - type + " but was not still registred", - dones.contains(dependencyType)); - } - Collection<ReplicationNode> assocations = node.getAssociations().values(); - for (ReplicationNode assocation : assocations) { - TopiaEntityEnum assocationType = assocation.getContract(); - Assert.assertTrue(assocationType + - " was detected as a association of node " + - type + " but was not still registred", - dones.contains(assocationType)); - } - buffer.append('\n'); - buffer.append(type); - buffer.append(" - "); - buffer.append(dependencies); - buffer.append(" - "); - buffer.append(assocations); - } - if (log.isInfoEnabled()) { - log.info(buffer.toString()); - } - } - - @Test - public void testGetDataCopyModel() throws TopiaException { - - EchoBaseEntityEnum[] types = EntitiesUtil.getDataTypesForCopy(); - Set<TopiaEntityEnum> dones = Sets.newHashSet(); - - ReplicationModel model = new ReplicationModel(types, false); - new TopiaReplicationModelBuilder().initModel(model, false); - List<ReplicationNode> order = model.getOrder(); - - StringBuilder buffer = new StringBuilder(); - for (ReplicationNode node : order) { - TopiaEntityEnum type = node.getContract(); - Assert.assertTrue(type + " was already treated.", dones.add(type)); - Collection<ReplicationNode> dependencies = node.getDependencies().values(); - for (ReplicationNode dependency : node.getDependencies().values()) { - TopiaEntityEnum dependencyType = dependency.getContract(); - Assert.assertTrue(dependencyType + - " was detected as a dependency of node " + - type + " but was not still registred", - dones.contains(dependencyType)); - } - Collection<ReplicationNode> assocations = node.getAssociations().values(); - for (ReplicationNode assocation : assocations) { - TopiaEntityEnum assocationType = assocation.getContract(); - Assert.assertTrue(assocationType + - " was detected as a association of node " + - type + " but was not still registred", - dones.contains(assocationType)); - } - buffer.append('\n'); - buffer.append(type); - buffer.append(" - "); - buffer.append(dependencies); - buffer.append(" - "); - buffer.append(assocations); - } - if (log.isInfoEnabled()) { - log.info(buffer.toString()); - } - } - /** * Used to get all contract of a package *
participants (1)
-
tchemit@users.forge.codelutin.com