r2642 - in branches/topia-2.6.x/topia-persistence/src/main/java/org/nuiton/topia/persistence/csv: . in
Author: tchemit Date: 2012-08-23 00:01:47 +0200 (Thu, 23 Aug 2012) New Revision: 2642 Url: http://nuiton.org/repositories/revision/topia/2642 Log: still some stuff to add for import/export :( Modified: branches/topia-2.6.x/topia-persistence/src/main/java/org/nuiton/topia/persistence/csv/TopiaCsvCommons.java branches/topia-2.6.x/topia-persistence/src/main/java/org/nuiton/topia/persistence/csv/in/TopiaCsvImports.java Modified: branches/topia-2.6.x/topia-persistence/src/main/java/org/nuiton/topia/persistence/csv/TopiaCsvCommons.java =================================================================== --- branches/topia-2.6.x/topia-persistence/src/main/java/org/nuiton/topia/persistence/csv/TopiaCsvCommons.java 2012-08-22 16:04:01 UTC (rev 2641) +++ branches/topia-2.6.x/topia-persistence/src/main/java/org/nuiton/topia/persistence/csv/TopiaCsvCommons.java 2012-08-22 22:01:47 UTC (rev 2642) @@ -68,6 +68,19 @@ } }; + public static final ValueParserFormatter<Date> DAY_TIME_SECOND_MILI_WITH_TIMESTAMP = + new DateValue("dd/MM/yyyy HH:mm:ss.SSSS") { + + @Override + public Date parse(String value) throws ParseException { + + Date parse = super.parse(value); + if (parse != null) { + parse = new Timestamp(parse.getTime()); + } + return parse; + } + }; public static final AssociationValueParser ASSOCIATION_VALUE_PARSER = new AssociationValueParser(); public static <E extends TopiaEntity> ForeignKeyValue<E> newForeignKeyValue(Class<E> type, String propertyName, Map<String, E> universe) { 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-08-22 16:04:01 UTC (rev 2641) +++ branches/topia-2.6.x/topia-persistence/src/main/java/org/nuiton/topia/persistence/csv/in/TopiaCsvImports.java 2012-08-22 22:01:47 UTC (rev 2642) @@ -23,6 +23,7 @@ * #L% */ +import com.google.common.base.Preconditions; import com.google.common.collect.Maps; import org.apache.commons.lang3.StringUtils; import org.apache.commons.logging.Log; @@ -360,4 +361,103 @@ tx.executeSQL(builder.toString()); } } + + public static <T extends TopiaEntityEnum> void importNMAssociation(TopiaContext tx, + AssociationMeta<T> meta, + Map<String, TopiaEntity> universe, + ImportToMap importer, + CsvImportResult<T> csvResult, + int nbRowBuffer) throws TopiaException { + + T source = meta.getSource(); + T target = meta.getTarget(); + + StringBuilder builder = new StringBuilder(); + + + String targetTableName = target.getContract().getSimpleName(); + String sourceTableName = source.getContract().getSimpleName(); + + // relation *-* + String table = TopiaEntityHelper.getNormalizedAssociationTableName( + sourceTableName, targetTableName); + + String updateString = String.format(INSERT_ASSOCIATION, table, sourceTableName, targetTableName); + + if (log.isDebugEnabled()) { + log.debug("Will apply " + updateString); + } + int compt = 0; + for (Map<String, Object> row : importer) { + String topiaId = (String) row.get(TopiaEntity.TOPIA_ID); + String[] associations = (String[]) row.get("target"); + for (String association : associations) { + if (StringUtils.isNotEmpty(association)) { + TopiaEntity targetEntity = universe.get(association); + Preconditions.checkNotNull(targetEntity, "Could not find target entity from id: " + association); + builder.append(String.format(updateString, topiaId, targetEntity.getTopiaId())).append('\n'); + compt++; + if (compt % nbRowBuffer == 0) { + // flush it + tx.executeSQL(builder.toString()); + builder = new StringBuilder(); + } + } + } + if (csvResult != null) { + csvResult.incrementsNumberUpdated(); + } + } + if (builder.length() > 0) { + tx.executeSQL(builder.toString()); + } + } + + public static <T extends TopiaEntityEnum> void importAssociation(TopiaContext tx, + AssociationMeta<T> meta, + Map<String, TopiaEntity> universe, + ImportToMap importer, + CsvImportResult<T> csvResult, + int nbRowBuffer) throws TopiaException { + + T source = meta.getSource(); + T target = meta.getTarget(); + + StringBuilder builder = new StringBuilder(); + + String targetTableName = target.getContract().getSimpleName(); + String sourceTableName = source.getContract().getSimpleName(); + String table = targetTableName; + + String updateString = String.format(UPDATE_ASSOCIATION, table, sourceTableName); + + if (log.isDebugEnabled()) { + log.debug("Will apply " + updateString); + } + int compt = 0; + for (Map<String, Object> row : importer) { + String topiaId = (String) row.get(TopiaEntity.TOPIA_ID); + String[] associations = (String[]) row.get("target"); + for (String association : associations) { + if (StringUtils.isNotEmpty(association)) { + + TopiaEntity targetEntity = universe.get(association); + Preconditions.checkNotNull(targetEntity, "Could not find target entity from id: " + association); + builder.append(String.format(updateString, topiaId, targetEntity.getTopiaId())).append('\n'); + compt++; + if (compt % nbRowBuffer == 0) { + // flush it + tx.executeSQL(builder.toString()); + builder = new StringBuilder(); + } + } + } + if (csvResult != null) { + csvResult.incrementsNumberUpdated(); + } + } + if (builder.length() > 0) { + tx.executeSQL(builder.toString()); + } + } }
participants (1)
-
tchemit@users.nuiton.org