Author: tchemit Date: 2012-09-11 18:47:05 +0200 (Tue, 11 Sep 2012) New Revision: 2660 Url: http://nuiton.org/repositories/revision/topia/2660 Log: fixes #2310: Add progression model while importing data Added: branches/topia-2.6.x/topia-persistence/src/main/java/org/nuiton/topia/persistence/csv/CsvProgressionModel.java Modified: branches/topia-2.6.x/topia-persistence/src/main/java/org/nuiton/topia/persistence/csv/in/CsvImportResult.java branches/topia-2.6.x/topia-persistence/src/main/java/org/nuiton/topia/persistence/csv/in/TopiaCsvImports.java Added: branches/topia-2.6.x/topia-persistence/src/main/java/org/nuiton/topia/persistence/csv/CsvProgressionModel.java =================================================================== --- branches/topia-2.6.x/topia-persistence/src/main/java/org/nuiton/topia/persistence/csv/CsvProgressionModel.java (rev 0) +++ branches/topia-2.6.x/topia-persistence/src/main/java/org/nuiton/topia/persistence/csv/CsvProgressionModel.java 2012-09-11 16:47:05 UTC (rev 2660) @@ -0,0 +1,46 @@ +package org.nuiton.topia.persistence.csv; + +/* + * #%L + * ToPIA :: Persistence + * $Id$ + * $HeadURL$ + * %% + * Copyright (C) 2004 - 2012 CodeLutin + * %% + * This program is free software: you can redistribute it and/or modify + * it under the terms of the GNU Lesser 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 Lesser Public License for more details. + * + * You should have received a copy of the GNU General Lesser Public + * License along with this program. If not, see + * <http://www.gnu.org/licenses/lgpl-3.0.html>. + * #L% + */ + +import java.io.Serializable; + +/** + * Csv progression model contract. + * + * @author tchemit <chemit@codelutin.com> + * @since 2.6.13 + */ +public interface CsvProgressionModel extends Serializable { + + long getNbSteps(); + + float getProgression(); + + void setProgression(float progression); + + void incrementsProgression(); + + void setNbSteps(long nbSteps); +} Property changes on: branches/topia-2.6.x/topia-persistence/src/main/java/org/nuiton/topia/persistence/csv/CsvProgressionModel.java ___________________________________________________________________ Added: svn:keywords + Author Date Id Revision HeadURL Added: svn:eol-style + native Modified: branches/topia-2.6.x/topia-persistence/src/main/java/org/nuiton/topia/persistence/csv/in/CsvImportResult.java =================================================================== --- branches/topia-2.6.x/topia-persistence/src/main/java/org/nuiton/topia/persistence/csv/in/CsvImportResult.java 2012-09-10 12:29:27 UTC (rev 2659) +++ branches/topia-2.6.x/topia-persistence/src/main/java/org/nuiton/topia/persistence/csv/in/CsvImportResult.java 2012-09-11 16:47:05 UTC (rev 2660) @@ -24,6 +24,7 @@ */ import org.nuiton.topia.persistence.TopiaEntityEnum; +import org.nuiton.topia.persistence.csv.CsvProgressionModel; import java.io.Serializable; @@ -53,20 +54,33 @@ /** Count of updated entities. */ protected int numberUpdated; + protected final CsvProgressionModel progressionModel; + public static <T extends TopiaEntityEnum> CsvImportResult<T> newResult(T entityType, String importFileName, boolean createIfNotFound) { + CsvImportResult<T> result = newResult(entityType, importFileName, + createIfNotFound, null); + return result; + } + + public static <T extends TopiaEntityEnum> CsvImportResult<T> newResult(T entityType, + String importFileName, + boolean createIfNotFound, + CsvProgressionModel progressionModel) { CsvImportResult<T> result = new CsvImportResult<T>(entityType, importFileName, - createIfNotFound); + createIfNotFound, progressionModel); return result; } protected CsvImportResult(T entityType, String importFileName, - boolean createIfNotFound) { + boolean createIfNotFound, + CsvProgressionModel progressionModel) { this.entityType = entityType; this.importFileName = importFileName; this.createIfNotFound = createIfNotFound; + this.progressionModel = progressionModel; } public T getEntityType() { @@ -98,4 +112,7 @@ numberUpdated++; } + public CsvProgressionModel getProgressionModel() { + return progressionModel; + } } Modified: branches/topia-2.6.x/topia-persistence/src/main/java/org/nuiton/topia/persistence/csv/in/TopiaCsvImports.java =================================================================== --- branches/topia-2.6.x/topia-persistence/src/main/java/org/nuiton/topia/persistence/csv/in/TopiaCsvImports.java 2012-09-10 12:29:27 UTC (rev 2659) +++ branches/topia-2.6.x/topia-persistence/src/main/java/org/nuiton/topia/persistence/csv/in/TopiaCsvImports.java 2012-09-11 16:47:05 UTC (rev 2660) @@ -31,9 +31,11 @@ import org.apache.commons.logging.LogFactory; import org.nuiton.topia.TopiaContext; import org.nuiton.topia.TopiaException; +import org.nuiton.topia.framework.TopiaContextImplementor; import org.nuiton.topia.persistence.TopiaDAO; import org.nuiton.topia.persistence.TopiaEntity; import org.nuiton.topia.persistence.TopiaEntityEnum; +import org.nuiton.topia.persistence.csv.CsvProgressionModel; import org.nuiton.topia.persistence.metadata.AssociationMeta; import org.nuiton.topia.persistence.metadata.MetaFilenameAware; import org.nuiton.topia.persistence.metadata.TableMeta; @@ -186,9 +188,9 @@ * @see ImportStrategy#importTable(TableMeta, Import, CsvImportResult) */ public static <T extends TopiaEntityEnum, E extends TopiaEntity> Iterable<E> importTableAndReturn(Reader reader, - ImportStrategy<T> importStrategy, - TableMeta<T> meta, - CsvImportResult<T> csvResult) throws TopiaException, IOException { + ImportStrategy<T> importStrategy, + TableMeta<T> meta, + CsvImportResult<T> csvResult) throws TopiaException, IOException { if (log.isInfoEnabled()) { @@ -246,6 +248,8 @@ Import<E> importer, CsvImportResult<T> csvResult) throws TopiaException { + CsvProgressionModel progressionModel = csvResult == null ? null : + csvResult.getProgressionModel(); for (E entity : importer) { Map<String, Object> properties = meta.prepareCreate( @@ -256,15 +260,54 @@ if (csvResult != null) { csvResult.incrementsNumberUpdated(); + if (progressionModel != null) { + progressionModel.incrementsProgression(); + } } } } + public static <T extends TopiaEntityEnum, E extends TopiaEntity> void importAllEntities(TopiaDAO<E> dao, + TableMeta<T> meta, + Import<E> importer, + CsvImportResult<T> csvResult, + int nbRowBuffer) throws TopiaException { + + TopiaContextImplementor context = dao.getContext(); + + CsvProgressionModel progressionModel = csvResult == null ? null : + csvResult.getProgressionModel(); + + int compt = 0; + for (E entity : importer) { + + Map<String, Object> properties = meta.prepareCreate( + entity, entity.getTopiaId()); + E entityToSave = dao.create(properties); + + meta.copy(entity, entityToSave); + + if (csvResult != null) { + csvResult.incrementsNumberUpdated(); + if (progressionModel != null) { + progressionModel.incrementsProgression(); + } + } + compt++; + if (compt % nbRowBuffer == 0) { + // flush it + context.getHibernate().flush(); + } + } + } + public static <T extends TopiaEntityEnum, E extends TopiaEntity> Iterable<E> importAllEntitiesAndReturnThem(TopiaDAO<E> dao, TableMeta<T> meta, Import<E> importer, CsvImportResult<T> csvResult) throws TopiaException { + CsvProgressionModel progressionModel = csvResult == null ? null : + csvResult.getProgressionModel(); List<E> result = Lists.newArrayList(); for (E entity : importer) { @@ -276,7 +319,11 @@ if (csvResult != null) { csvResult.incrementsNumberUpdated(); + if (progressionModel != null) { + progressionModel.incrementsProgression(); + } } + result.add(entityToSave); } return result; @@ -288,6 +335,8 @@ Import<E> importer, CsvImportResult<T> csvResult) throws TopiaException { + CsvProgressionModel progressionModel = csvResult == null ? null : + csvResult.getProgressionModel(); for (E entity : importer) { String topiaId = entity.getTopiaId(); @@ -311,6 +360,9 @@ if (csvResult != null) { csvResult.incrementsNumberCreated(); + if (progressionModel != null) { + progressionModel.incrementsProgression(); + } } } else { // existing entity, nothing to create @@ -330,6 +382,8 @@ CsvImportResult<T> csvResult, int nbRowBuffer) throws TopiaException { + CsvProgressionModel progressionModel = csvResult == null ? null : + csvResult.getProgressionModel(); T source = meta.getSource(); T target = meta.getTarget(); @@ -361,6 +415,9 @@ } if (csvResult != null) { csvResult.incrementsNumberUpdated(); + if (progressionModel != null) { + progressionModel.incrementsProgression(); + } } } if (builder.length() > 0) { @@ -374,6 +431,8 @@ CsvImportResult<T> csvResult, int nbRowBuffer) throws TopiaException { + CsvProgressionModel progressionModel = csvResult == null ? null : + csvResult.getProgressionModel(); T source = meta.getSource(); T target = meta.getTarget(); @@ -409,6 +468,9 @@ } if (csvResult != null) { csvResult.incrementsNumberUpdated(); + if (progressionModel != null) { + progressionModel.incrementsProgression(); + } } } if (builder.length() > 0) { @@ -423,6 +485,8 @@ CsvImportResult<T> csvResult, int nbRowBuffer) throws TopiaException { + CsvProgressionModel progressionModel = csvResult == null ? null : + csvResult.getProgressionModel(); T source = meta.getSource(); T target = meta.getTarget(); @@ -460,6 +524,9 @@ } if (csvResult != null) { csvResult.incrementsNumberUpdated(); + if (progressionModel != null) { + progressionModel.incrementsProgression(); + } } } if (builder.length() > 0) { @@ -474,6 +541,9 @@ CsvImportResult<T> csvResult, int nbRowBuffer) throws TopiaException { + CsvProgressionModel progressionModel = csvResult == null ? null : + csvResult.getProgressionModel(); + T source = meta.getSource(); T target = meta.getTarget(); @@ -508,6 +578,9 @@ } if (csvResult != null) { csvResult.incrementsNumberUpdated(); + if (progressionModel != null) { + progressionModel.incrementsProgression(); + } } } if (builder.length() > 0) {