Topia-commits
Threads by month
- ----- 2026 -----
- June
- May
- April
- March
- February
- January
- ----- 2025 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2024 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2023 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2022 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2021 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2020 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2019 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2018 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2017 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2016 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2015 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2014 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2013 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2012 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2011 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2010 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2009 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2008 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2007 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2006 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2005 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2004 -----
- December
- November
- October
- September
- August
- July
- June
- May
August 2012
- 3 participants
- 47 discussions
r2644 - branches/topia-2.6.x/topia-persistence/src/main/java/org/nuiton/topia/persistence/csv/in
by tchemit@users.nuiton.org 23 Aug '12
by tchemit@users.nuiton.org 23 Aug '12
23 Aug '12
Author: tchemit
Date: 2012-08-23 17:08:49 +0200 (Thu, 23 Aug 2012)
New Revision: 2644
Url: http://nuiton.org/repositories/revision/topia/2644
Log:
fixes #2266: Add some api about import / export in csv format (last javadoc and import methods)
Modified:
branches/topia-2.6.x/topia-persistence/src/main/java/org/nuiton/topia/persistence/csv/in/ImportStrategy.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/in/ImportStrategy.java
===================================================================
--- branches/topia-2.6.x/topia-persistence/src/main/java/org/nuiton/topia/persistence/csv/in/ImportStrategy.java 2012-08-23 07:45:42 UTC (rev 2643)
+++ branches/topia-2.6.x/topia-persistence/src/main/java/org/nuiton/topia/persistence/csv/in/ImportStrategy.java 2012-08-23 15:08:49 UTC (rev 2644)
@@ -22,13 +22,28 @@
*/
public interface ImportStrategy<T extends TopiaEntityEnum> {
+ /** @return the model factory (will be used to produce the model to import). */
ImportModelFactory<T> getModelFactory();
- <E extends TopiaEntity> void importTable(Import<E> importer,
- TableMeta<T> meta,
- Reader reader,
+ /**
+ * Import a table given a {@code importer}. with an optional csv result.
+ *
+ * @param meta type of table to import
+ * @param importer the csv importer
+ * @param csvResult optional object where to put csv import result
+ * @throws TopiaException if any db problem
+ */
+ <E extends TopiaEntity> void importTable(TableMeta<T> meta, Import<E> importer,
CsvImportResult<T> csvResult) throws TopiaException;
+ /**
+ * Import a association given a {@code importer}. with an optional csv result.
+ *
+ * @param meta type of association to import
+ * @param importer the csv importer
+ * @param csvResult optional object where to put csv import result
+ * @throws TopiaException if any db problem
+ */
void importAssociation(AssociationMeta<T> meta,
ImportToMap importer,
CsvImportResult<T> csvResult) throws TopiaException;
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-23 07:45:42 UTC (rev 2643)
+++ branches/topia-2.6.x/topia-persistence/src/main/java/org/nuiton/topia/persistence/csv/in/TopiaCsvImports.java 2012-08-23 15:08:49 UTC (rev 2644)
@@ -24,6 +24,7 @@
*/
import com.google.common.base.Preconditions;
+import com.google.common.collect.Lists;
import com.google.common.collect.Maps;
import org.apache.commons.lang3.StringUtils;
import org.apache.commons.logging.Log;
@@ -148,7 +149,7 @@
* @param <E> type of data
* @throws TopiaException if any db problem while storing datas
* @throws IOException if any pb while reading csv data
- * @see ImportStrategy#importTable(Import, TableMeta, Reader, CsvImportResult)
+ * @see ImportStrategy#importTable(TableMeta, Import, CsvImportResult)
*/
public static <T extends TopiaEntityEnum, E extends TopiaEntity> void importTable(Reader reader,
ImportStrategy<T> importStrategy,
@@ -163,9 +164,7 @@
ImportModel<E> model = importStrategy.getModelFactory().buildForImport(meta);
Import<E> importer = Import.newImport(model, reader);
try {
- importStrategy.importTable(importer,
- meta,
- reader,
+ importStrategy.importTable(meta, importer,
csvResult);
} finally {
importer.close();
@@ -184,7 +183,7 @@
* @param <T> type of entity enum
* @throws TopiaException if any db problem while storing datas
* @throws IOException if any pb while reading csv data
- * @see ImportStrategy#importTable(Import, TableMeta, Reader, CsvImportResult)
+ * @see ImportStrategy#importAssociation(AssociationMeta, ImportToMap, CsvImportResult)
*/
public static <T extends TopiaEntityEnum> void importAssociation(Reader reader,
ImportStrategy<T> importStrategy,
@@ -214,7 +213,7 @@
Import<E> importer,
CsvImportResult<T> csvResult) throws TopiaException {
- for (TopiaEntity entity : importer) {
+ for (E entity : importer) {
Map<String, Object> properties = meta.prepareCreate(
entity, entity.getTopiaId());
@@ -228,13 +227,35 @@
}
}
+ 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 {
+
+ List<E> result = Lists.newArrayList();
+ 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();
+ }
+ result.add(entityToSave);
+ }
+ return result;
+ }
+
public static <T extends TopiaEntityEnum, E extends TopiaEntity> void importNotExistingEntities(TopiaDAO<E> dao,
TableMeta<T> meta,
Map<String, TopiaEntity> universe,
Import<E> importer,
CsvImportResult<T> csvResult) throws TopiaException {
- for (TopiaEntity entity : importer) {
+ for (E entity : importer) {
String topiaId = entity.getTopiaId();
1
0
Author: tchemit
Date: 2012-08-23 09:45:42 +0200 (Thu, 23 Aug 2012)
New Revision: 2643
Url: http://nuiton.org/repositories/revision/topia/2643
Log:
fixes #2261: updates to nuiton-utils 2.6
Modified:
branches/topia-2.6.x/pom.xml
Modified: branches/topia-2.6.x/pom.xml
===================================================================
--- branches/topia-2.6.x/pom.xml 2012-08-22 22:01:47 UTC (rev 2642)
+++ branches/topia-2.6.x/pom.xml 2012-08-23 07:45:42 UTC (rev 2643)
@@ -60,7 +60,7 @@
<!-- libs version -->
<eugeneVersion>2.5</eugeneVersion>
- <nuitonUtilsVersion>2.6-SNAPSHOT</nuitonUtilsVersion>
+ <nuitonUtilsVersion>2.6</nuitonUtilsVersion>
<processorPluginVersion>1.2.2</processorPluginVersion>
<nuitonI18nVersion>2.4.1</nuitonI18nVersion>
<xmlrpcVersion>3.1.2</xmlrpcVersion>
1
0
r2642 - in branches/topia-2.6.x/topia-persistence/src/main/java/org/nuiton/topia/persistence/csv: . in
by tchemit@users.nuiton.org 22 Aug '12
by tchemit@users.nuiton.org 22 Aug '12
22 Aug '12
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());
+ }
+ }
}
1
0
r2641 - in branches/topia-2.6.x/topia-persistence/src/main/java/org/nuiton/topia/persistence: . csv/in
by tchemit@users.nuiton.org 22 Aug '12
by tchemit@users.nuiton.org 22 Aug '12
22 Aug '12
Author: tchemit
Date: 2012-08-22 18:04:01 +0200 (Wed, 22 Aug 2012)
New Revision: 2641
Url: http://nuiton.org/repositories/revision/topia/2641
Log:
fixes 2266: Add some api about import / export in csv format (add some doc and fix api)
Modified:
branches/topia-2.6.x/topia-persistence/src/main/java/org/nuiton/topia/persistence/TopiaPersistenceHelper.java
branches/topia-2.6.x/topia-persistence/src/main/java/org/nuiton/topia/persistence/csv/in/AbstractImportModel.java
branches/topia-2.6.x/topia-persistence/src/main/java/org/nuiton/topia/persistence/csv/in/EntityAssociationImportModel.java
branches/topia-2.6.x/topia-persistence/src/main/java/org/nuiton/topia/persistence/csv/in/ImportStrategy.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/TopiaPersistenceHelper.java
===================================================================
--- branches/topia-2.6.x/topia-persistence/src/main/java/org/nuiton/topia/persistence/TopiaPersistenceHelper.java 2012-08-22 10:47:37 UTC (rev 2640)
+++ branches/topia-2.6.x/topia-persistence/src/main/java/org/nuiton/topia/persistence/TopiaPersistenceHelper.java 2012-08-22 16:04:01 UTC (rev 2641)
@@ -38,4 +38,6 @@
<E extends TopiaEntity> TopiaDAO<E> getDAO(TopiaContext tx, Class<E> type);
+ <E extends TopiaEntity> TopiaDAO<E> getDAO(TopiaContext tx, T type);
+
}
Modified: branches/topia-2.6.x/topia-persistence/src/main/java/org/nuiton/topia/persistence/csv/in/AbstractImportModel.java
===================================================================
--- branches/topia-2.6.x/topia-persistence/src/main/java/org/nuiton/topia/persistence/csv/in/AbstractImportModel.java 2012-08-22 10:47:37 UTC (rev 2640)
+++ branches/topia-2.6.x/topia-persistence/src/main/java/org/nuiton/topia/persistence/csv/in/AbstractImportModel.java 2012-08-22 16:04:01 UTC (rev 2641)
@@ -30,6 +30,13 @@
import java.util.List;
import java.util.Map;
+/**
+ * Abstract import model which add the useful methdo about importing foreign keys.
+ *
+ * @param <E> type of entity to import
+ * @author tchemit <chemit(a)codelutin.com>
+ * @since 2.6.12
+ */
public abstract class AbstractImportModel<E> extends org.nuiton.util.csv.ext.AbstractImportModel<E> {
public AbstractImportModel(char separator) {
Modified: branches/topia-2.6.x/topia-persistence/src/main/java/org/nuiton/topia/persistence/csv/in/EntityAssociationImportModel.java
===================================================================
--- branches/topia-2.6.x/topia-persistence/src/main/java/org/nuiton/topia/persistence/csv/in/EntityAssociationImportModel.java 2012-08-22 10:47:37 UTC (rev 2640)
+++ branches/topia-2.6.x/topia-persistence/src/main/java/org/nuiton/topia/persistence/csv/in/EntityAssociationImportModel.java 2012-08-22 16:04:01 UTC (rev 2641)
@@ -32,7 +32,7 @@
import java.util.Map;
/**
- * A model to import associations of entities into csv files.
+ * A model to import associations of entities from csv files.
*
* @author tchemit <chemit(a)codelutin.com>
* @since 2.6.12
Modified: branches/topia-2.6.x/topia-persistence/src/main/java/org/nuiton/topia/persistence/csv/in/ImportStrategy.java
===================================================================
--- branches/topia-2.6.x/topia-persistence/src/main/java/org/nuiton/topia/persistence/csv/in/ImportStrategy.java 2012-08-22 10:47:37 UTC (rev 2640)
+++ branches/topia-2.6.x/topia-persistence/src/main/java/org/nuiton/topia/persistence/csv/in/ImportStrategy.java 2012-08-22 16:04:01 UTC (rev 2641)
@@ -11,7 +11,11 @@
import java.io.Reader;
/**
- * TODO
+ * Strategy to import some stuff.
+ * <p/>
+ * Implements it and then you can use it with helper methods
+ * {@link TopiaCsvImports#importTable(Reader, ImportStrategy, TableMeta, CsvImportResult)},
+ * {@link TopiaCsvImports#importAssociation(Reader, ImportStrategy, AssociationMeta, CsvImportResult)}.
*
* @author tchemit <chemit(a)codelutin.com>
* @since 2.6.12
@@ -20,17 +24,14 @@
ImportModelFactory<T> getModelFactory();
- <E extends TopiaEntity> void importTableFile(Import<E> importer,
- TableMeta<T> meta,
- Reader reader,
- CsvImportResult<T> csvResult) throws TopiaException;
+ <E extends TopiaEntity> void importTable(Import<E> importer,
+ TableMeta<T> meta,
+ Reader reader,
+ CsvImportResult<T> csvResult) throws TopiaException;
- <T extends TopiaEntityEnum> void importAssociationFile(AssociationMeta<T> meta,
- ImportToMap importer,
- CsvImportResult<T> csvResult) throws TopiaException;
+ void importAssociation(AssociationMeta<T> meta,
+ ImportToMap importer,
+ CsvImportResult<T> csvResult) throws TopiaException;
- void importNMAssociationFile(AssociationMeta<T> meta,
- ImportToMap importer,
- CsvImportResult<T> csvResult) throws TopiaException;
}
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 10:47:37 UTC (rev 2640)
+++ 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)
@@ -29,7 +29,7 @@
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.metadata.AssociationMeta;
@@ -43,6 +43,7 @@
import java.io.File;
import java.io.IOException;
import java.io.Reader;
+import java.util.Date;
import java.util.List;
import java.util.Map;
import java.util.zip.ZipEntry;
@@ -59,10 +60,95 @@
/** Logger. */
private static final Log log = LogFactory.getLog(TopiaCsvImports.class);
+ protected static final String UPDATE_ASSOCIATION =
+ "UPDATE %s SET %s = '%%s' WHERE topiaId ='%%s';";
+
+ protected static final String INSERT_ASSOCIATION =
+ "INSERT INTO %s (%s,%s) VALUES('%%s','%%s');";
+
protected TopiaCsvImports() {
// no instance of this helper
}
+ /**
+ * Discover all files that can be imported (as a table or an association) from a zipfile.
+ *
+ * @param entryPrefix prefix where to find files in the zip
+ * @param possibleMetas list of possible meta to be imported
+ * @param zipFile zip file where to seek for csv files to import
+ * @param missingEntries to fill missing files
+ * @param <T> type of topia entity enum
+ * @param <M> type of data to import (table or association)
+ * @return the map of found files indexed by his meta
+ */
+ public static <T extends TopiaEntityEnum, M extends MetaFilenameAware<T>> Map<M, ZipEntry> discoverEntries(
+ String entryPrefix,
+ Iterable<M> possibleMetas,
+ ZipFile zipFile,
+ List<String> missingEntries) {
+
+ Map<M, ZipEntry> result = Maps.newLinkedHashMap();
+
+ // check that all mandatories
+ for (M entry : possibleMetas) {
+ String filename = entry.getFilename();
+ ZipEntry zipEntry = zipFile.getEntry(entryPrefix + filename);
+
+ if (zipEntry == null) {
+ missingEntries.add(filename);
+ } else {
+ result.put(entry, zipEntry);
+ }
+ }
+ return result;
+ }
+
+ /**
+ * Discover all files that can be imported (as a table or an association) from a directory.
+ *
+ * @param possibleMetas list of possible meta to be imported
+ * @param directory directory where to seek for csv files to import
+ * @param missingEntries to fill missing files
+ * @param <T> type of topia entity enum
+ * @param <M> type of data to import (table or association)
+ * @return the map of found files indexed by his meta
+ */
+ public static <T extends TopiaEntityEnum, M extends MetaFilenameAware<T>> Map<M, File> discoverEntries(
+ Iterable<M> possibleMetas,
+ File directory,
+ List<String> missingEntries) {
+
+ Map<M, File> result = Maps.newLinkedHashMap();
+
+ // check that all mandatories
+ for (M entry : possibleMetas) {
+ String filename = entry.getFilename();
+ File zipEntry = new File(directory, filename);
+
+ if (zipEntry.exists()) {
+ result.put(entry, zipEntry);
+ } else {
+ missingEntries.add(filename);
+ }
+ }
+ return result;
+ }
+
+ /**
+ * To import a table (given by his {@code meta}) from a reader and a strategy.
+ * <p/>
+ * Result of import can be stored in an optional csv result.
+ *
+ * @param reader where to read csv data
+ * @param importStrategy import strategy used to store csv data
+ * @param meta meta of the data
+ * @param csvResult optional csv result
+ * @param <T> type of entity enum
+ * @param <E> type of data
+ * @throws TopiaException if any db problem while storing datas
+ * @throws IOException if any pb while reading csv data
+ * @see ImportStrategy#importTable(Import, TableMeta, Reader, CsvImportResult)
+ */
public static <T extends TopiaEntityEnum, E extends TopiaEntity> void importTable(Reader reader,
ImportStrategy<T> importStrategy,
TableMeta<T> meta,
@@ -75,20 +161,38 @@
ImportModel<E> model = importStrategy.getModelFactory().buildForImport(meta);
Import<E> importer = Import.newImport(model, reader);
-
- importStrategy.importTableFile(importer,
+ try {
+ importStrategy.importTable(importer,
meta,
reader,
csvResult);
-
-
+ } finally {
+ importer.close();
+ }
}
- public static <T extends TopiaEntityEnum> void importAssociationFile(Reader reader,
- ImportStrategy<T> importStrategy,
- AssociationMeta<T> meta,
- CsvImportResult<T> csvResult) throws IOException, TopiaException {
+ /**
+ * To import a association (given by his {@code meta}) from a reader and a strategy.
+ * <p/>
+ * Result of import can be stored in an optional csv result.
+ *
+ * @param reader where to read csv data
+ * @param importStrategy import strategy used to store csv data
+ * @param meta meta of the data
+ * @param csvResult optional csv result
+ * @param <T> type of entity enum
+ * @throws TopiaException if any db problem while storing datas
+ * @throws IOException if any pb while reading csv data
+ * @see ImportStrategy#importTable(Import, TableMeta, Reader, CsvImportResult)
+ */
+ public static <T extends TopiaEntityEnum> void importAssociation(Reader reader,
+ ImportStrategy<T> importStrategy,
+ AssociationMeta<T> meta,
+ CsvImportResult<T> csvResult) throws IOException, TopiaException {
+ if (log.isInfoEnabled()) {
+ log.info("Will import " + meta);
+ }
// load a association input
ImportModelFactory<T> modelFactory = importStrategy.getModelFactory();
@@ -97,121 +201,80 @@
ImportToMap importer = ImportToMap.newImportToMap(model, reader, false);
try {
- if (modelFactory.isNMAssociationMeta(meta)) {
- importStrategy.importAssociationFile(meta, importer, csvResult);
- } else {
- importStrategy.importNMAssociationFile(meta, importer, csvResult);
- }
+ importStrategy.importAssociation(meta, importer, csvResult);
+
} finally {
importer.close();
}
}
-// public static <T extends TopiaEntityEnum> void importTableFile(TopiaContextImplementor tx,
-// ImportModelFactory<T> modelFactory,
-// TableMeta<T> meta,
-// Reader reader,
-// CsvImportResult<T> csvResult) throws IOException, TopiaException {
-//
-// ImportModel<TopiaEntity> model = modelFactory.buildForImport(meta);
-// Import<TopiaEntity> importer = Import.newImport(model, reader);
-//
-// try {
-// TopiaDAO<TopiaEntity> dao = (TopiaDAO<TopiaEntity>) tx.getDAO(meta.getSource().getContract());
-// importEntityFile(dao, meta, importer, csvResult);
-// } finally {
-// importer.close();
-// }
-// }
+ public static <T extends TopiaEntityEnum, E extends TopiaEntity> void importAllEntities(TopiaDAO<E> dao,
+ TableMeta<T> meta,
+ Import<E> importer,
+ CsvImportResult<T> csvResult) throws TopiaException {
- public static <T extends TopiaEntityEnum> void importAssociationFile(TopiaContextImplementor tx,
- ImportModelFactory<T> modelFactory,
- AssociationMeta<T> meta,
- Reader reader,
- CsvImportResult<T> csvResult) throws IOException, TopiaException {
+ for (TopiaEntity entity : importer) {
+ Map<String, Object> properties = meta.prepareCreate(
+ entity, entity.getTopiaId());
+ E entityToSave = dao.create(properties);
- // load a association input
- ImportModel<Map<String, Object>> model =
- modelFactory.buildForImport(meta);
- ImportToMap importer = ImportToMap.newImportToMap(model, reader, false);
+ meta.copy(entity, entityToSave);
- try {
- if (modelFactory.isNMAssociationMeta(meta)) {
- importNMAssociationFile(tx, meta, importer, csvResult, 1000);
- } else {
- importAssociationFile(tx, meta, importer, csvResult, 1000);
+ if (csvResult != null) {
+ csvResult.incrementsNumberUpdated();
}
- } finally {
- importer.close();
}
}
- public static <T extends TopiaEntityEnum, M extends MetaFilenameAware<T>> Map<M, ZipEntry> discoverEntries(
- String entryPrefix,
- Iterable<M> entries,
- ZipFile zipFile,
- List<String> missingEntries) {
+ public static <T extends TopiaEntityEnum, E extends TopiaEntity> void importNotExistingEntities(TopiaDAO<E> dao,
+ TableMeta<T> meta,
+ Map<String, TopiaEntity> universe,
+ Import<E> importer,
+ CsvImportResult<T> csvResult) throws TopiaException {
- Map<M, ZipEntry> result = Maps.newLinkedHashMap();
+ for (TopiaEntity entity : importer) {
- // check that all mandatories
- for (M entry : entries) {
- String filename = entry.getFilename();
- ZipEntry zipEntry = zipFile.getEntry(entryPrefix + filename);
+ String topiaId = entity.getTopiaId();
- if (zipEntry == null) {
- missingEntries.add(filename);
- } else {
- result.put(entry, zipEntry);
- }
- }
- return result;
- }
+ Map<String, Object> properties = meta.prepareCreate(entity, null);
+ E existingEntity = dao.findByProperties(properties);
+ if (existingEntity == null) {
- public static <T extends TopiaEntityEnum, M extends MetaFilenameAware<T>> Map<M, File> discoverEntries(
- Iterable<M> entries,
- File zipFile,
- List<String> missingEntries) {
+ // new entity to create
+ E entityToSave = dao.create(properties);
+ String newTopiaId = entityToSave.getTopiaId();
+ Date topiaCreateDate = entityToSave.getTopiaCreateDate();
+ meta.copy(entity, entityToSave);
+ entityToSave.setTopiaId(newTopiaId);
+ entityToSave.setTopiaCreateDate(topiaCreateDate);
- Map<M, File> result = Maps.newLinkedHashMap();
+ if (log.isInfoEnabled()) {
+ log.info(String.format("Create entity [%s becomes %s] with naturalId %s", topiaId, newTopiaId, properties));
+ }
+ universe.put(topiaId, entityToSave);
- // check that all mandatories
- for (M entry : entries) {
- String filename = entry.getFilename();
- File zipEntry = new File(zipFile, filename);
+ if (csvResult != null) {
+ csvResult.incrementsNumberCreated();
+ }
+ } else {
+ // existing entity, nothing to create
+ // just add a ref into universe to make translation possible by foreign keys
- if (zipEntry.exists()) {
- result.put(entry, zipEntry);
- } else {
- missingEntries.add(filename);
+ if (log.isDebugEnabled()) {
+ log.debug(String.format("Existing entity [%s] with naturalId %s, do not create anything", topiaId, properties));
+ }
+
+ universe.put(topiaId, existingEntity);
}
}
- return result;
}
-// public static <T extends TopiaEntityEnum, E extends TopiaEntity> void importEntityFile(TopiaDAO<E> dao,
-// TableMeta<T> meta,
-// Import<E> importer,
-// CsvImportResult<T> csvResult) throws TopiaException {
-//
-// for (TopiaEntity entity : importer) {
-//
-// Map<String, Object> properties = meta.prepareCreate(
-// entity, entity.getTopiaId());
-// E entityToSave = dao.create(properties);
-//
-// meta.copy(entity, entityToSave);
-//
-// csvResult.incrementsNumberUpdated();
-// }
-// }
+ public static <T extends TopiaEntityEnum> void importAssociation(TopiaContext tx, AssociationMeta<T> meta,
+ ImportToMap importer,
+ CsvImportResult<T> csvResult,
+ int nbRowBuffer) throws TopiaException {
- public static <T extends TopiaEntityEnum> void importAssociationFile(TopiaContext tx, AssociationMeta<T> meta,
- ImportToMap importer,
- CsvImportResult<T> csvResult,
- int nbRowBuffer) throws TopiaException {
-
T source = meta.getSource();
T target = meta.getTarget();
@@ -221,7 +284,7 @@
String sourceTableName = source.getContract().getSimpleName();
String table = targetTableName;
- String updateString = String.format("UPDATE %s SET %s = '%%s' WHERE topiaId ='%%s';", table, sourceTableName);
+ String updateString = String.format(UPDATE_ASSOCIATION, table, sourceTableName);
if (log.isDebugEnabled()) {
log.debug("Will apply " + updateString);
@@ -241,18 +304,20 @@
}
}
}
- csvResult.incrementsNumberUpdated();
+ if (csvResult != null) {
+ csvResult.incrementsNumberUpdated();
+ }
}
if (builder.length() > 0) {
tx.executeSQL(builder.toString());
}
}
- public static <T extends TopiaEntityEnum> void importNMAssociationFile(TopiaContext tx,
- AssociationMeta<T> meta,
- ImportToMap importer,
- CsvImportResult<T> csvResult,
- int nbRowBuffer) throws TopiaException {
+ public static <T extends TopiaEntityEnum> void importNMAssociation(TopiaContext tx,
+ AssociationMeta<T> meta,
+ ImportToMap importer,
+ CsvImportResult<T> csvResult,
+ int nbRowBuffer) throws TopiaException {
T source = meta.getSource();
T target = meta.getTarget();
@@ -267,7 +332,7 @@
String table = TopiaEntityHelper.getNormalizedAssociationTableName(
sourceTableName, targetTableName);
- String updateString = String.format("INSERT INTO %s (%s,%s) VALUES('%%s','%%s');", table, sourceTableName, targetTableName);
+ String updateString = String.format(INSERT_ASSOCIATION, table, sourceTableName, targetTableName);
if (log.isDebugEnabled()) {
log.debug("Will apply " + updateString);
@@ -287,7 +352,9 @@
}
}
}
- csvResult.incrementsNumberUpdated();
+ if (csvResult != null) {
+ csvResult.incrementsNumberUpdated();
+ }
}
if (builder.length() > 0) {
tx.executeSQL(builder.toString());
1
0
r2640 - in branches/topia-2.6.x/topia-persistence/src/main/java/org/nuiton/topia/persistence/csv: in out
by tchemit@users.nuiton.org 22 Aug '12
by tchemit@users.nuiton.org 22 Aug '12
22 Aug '12
Author: tchemit
Date: 2012-08-22 12:47:37 +0200 (Wed, 22 Aug 2012)
New Revision: 2640
Url: http://nuiton.org/repositories/revision/topia/2640
Log:
refs #2266: Add some api about import / export in csv format
Added:
branches/topia-2.6.x/topia-persistence/src/main/java/org/nuiton/topia/persistence/csv/in/ImportStrategy.java
Modified:
branches/topia-2.6.x/topia-persistence/src/main/java/org/nuiton/topia/persistence/csv/in/CsvFileImportResult.java
branches/topia-2.6.x/topia-persistence/src/main/java/org/nuiton/topia/persistence/csv/in/EntityAssociationImportModel.java
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/out/TopiaCsvExports.java
Modified: branches/topia-2.6.x/topia-persistence/src/main/java/org/nuiton/topia/persistence/csv/in/CsvFileImportResult.java
===================================================================
--- branches/topia-2.6.x/topia-persistence/src/main/java/org/nuiton/topia/persistence/csv/in/CsvFileImportResult.java 2012-08-22 10:47:23 UTC (rev 2639)
+++ branches/topia-2.6.x/topia-persistence/src/main/java/org/nuiton/topia/persistence/csv/in/CsvFileImportResult.java 2012-08-22 10:47:37 UTC (rev 2640)
@@ -35,8 +35,8 @@
/**
* To keep result of the import of a file.
*
+ * @author tchemit <chemit(a)codelutin.com>
* @since 2.6.12
- * @author tchemit <chemit(a)codelutin.com>
*/
public class CsvFileImportResult<T extends TopiaEntityEnum> implements Serializable {
Modified: branches/topia-2.6.x/topia-persistence/src/main/java/org/nuiton/topia/persistence/csv/in/EntityAssociationImportModel.java
===================================================================
--- branches/topia-2.6.x/topia-persistence/src/main/java/org/nuiton/topia/persistence/csv/in/EntityAssociationImportModel.java 2012-08-22 10:47:23 UTC (rev 2639)
+++ branches/topia-2.6.x/topia-persistence/src/main/java/org/nuiton/topia/persistence/csv/in/EntityAssociationImportModel.java 2012-08-22 10:47:37 UTC (rev 2640)
@@ -24,8 +24,9 @@
*/
import org.nuiton.topia.persistence.TopiaEntity;
+import org.nuiton.topia.persistence.TopiaEntityEnum;
+import org.nuiton.topia.persistence.csv.TopiaCsvCommons;
import org.nuiton.topia.persistence.metadata.AssociationMeta;
-import org.nuiton.topia.persistence.csv.TopiaCsvCommons;
import org.nuiton.util.csv.ImportModel;
import java.util.Map;
@@ -36,14 +37,13 @@
* @author tchemit <chemit(a)codelutin.com>
* @since 2.6.12
*/
-public class EntityAssociationImportModel extends AbstractImportModel<Map<String, Object>> {
+public class EntityAssociationImportModel<T extends TopiaEntityEnum> extends AbstractImportModel<Map<String, Object>> {
protected final AssociationMeta meta;
- public static ImportModel<Map<String, Object>> newImportModel(char separator,
- AssociationMeta meta
- ) {
- EntityAssociationImportModel model = new EntityAssociationImportModel(
+ public static <T extends TopiaEntityEnum> ImportModel<Map<String, Object>> newImportModel(char separator,
+ AssociationMeta<T> meta) {
+ EntityAssociationImportModel<T> model = new EntityAssociationImportModel<T>(
separator, meta);
// topiaId <-> topiaId
@@ -67,7 +67,7 @@
return null;
}
- public EntityAssociationImportModel(char separator, AssociationMeta meta) {
+ public EntityAssociationImportModel(char separator, AssociationMeta<T> meta) {
super(separator);
this.meta = meta;
}
Added: branches/topia-2.6.x/topia-persistence/src/main/java/org/nuiton/topia/persistence/csv/in/ImportStrategy.java
===================================================================
--- branches/topia-2.6.x/topia-persistence/src/main/java/org/nuiton/topia/persistence/csv/in/ImportStrategy.java (rev 0)
+++ branches/topia-2.6.x/topia-persistence/src/main/java/org/nuiton/topia/persistence/csv/in/ImportStrategy.java 2012-08-22 10:47:37 UTC (rev 2640)
@@ -0,0 +1,36 @@
+package org.nuiton.topia.persistence.csv.in;
+
+import org.nuiton.topia.TopiaException;
+import org.nuiton.topia.persistence.TopiaEntity;
+import org.nuiton.topia.persistence.TopiaEntityEnum;
+import org.nuiton.topia.persistence.metadata.AssociationMeta;
+import org.nuiton.topia.persistence.metadata.TableMeta;
+import org.nuiton.util.csv.Import;
+import org.nuiton.util.csv.ImportToMap;
+
+import java.io.Reader;
+
+/**
+ * TODO
+ *
+ * @author tchemit <chemit(a)codelutin.com>
+ * @since 2.6.12
+ */
+public interface ImportStrategy<T extends TopiaEntityEnum> {
+
+ ImportModelFactory<T> getModelFactory();
+
+ <E extends TopiaEntity> void importTableFile(Import<E> importer,
+ TableMeta<T> meta,
+ Reader reader,
+ CsvImportResult<T> csvResult) throws TopiaException;
+
+ <T extends TopiaEntityEnum> void importAssociationFile(AssociationMeta<T> meta,
+ ImportToMap importer,
+ CsvImportResult<T> csvResult) throws TopiaException;
+
+ void importNMAssociationFile(AssociationMeta<T> meta,
+ ImportToMap importer,
+ CsvImportResult<T> csvResult) throws TopiaException;
+
+}
Property changes on: branches/topia-2.6.x/topia-persistence/src/main/java/org/nuiton/topia/persistence/csv/in/ImportStrategy.java
___________________________________________________________________
Added: svn:keywords
+ Author Date Id Revision
Added: svn:eol-style
+ native
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 10:47:23 UTC (rev 2639)
+++ branches/topia-2.6.x/topia-persistence/src/main/java/org/nuiton/topia/persistence/csv/in/TopiaCsvImports.java 2012-08-22 10:47:37 UTC (rev 2640)
@@ -30,7 +30,6 @@
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.metadata.AssociationMeta;
@@ -64,57 +63,100 @@
// no instance of this helper
}
- public static <T extends TopiaEntityEnum> void importFile(TopiaContextImplementor tx,
- ImportModelFactory<T> modelFactory,
- MetaFilenameAware<T> entry,
- Reader reader,
- CsvImportResult<T> csvResult) throws IOException, TopiaException {
+ public static <T extends TopiaEntityEnum, E extends TopiaEntity> void importTable(Reader reader,
+ ImportStrategy<T> importStrategy,
+ TableMeta<T> meta,
+ CsvImportResult<T> csvResult) throws TopiaException, IOException {
- if (entry instanceof AssociationMeta) {
- // load a association input
- AssociationMeta<T> meta = (AssociationMeta<T>) entry;
- ImportModel<Map<String, Object>> model =
- modelFactory.buildForImport(meta);
- ImportToMap importer = ImportToMap.newImportToMap(model, reader, false);
+ if (log.isInfoEnabled()) {
+ log.info("Will import " + meta);
+ }
- try {
- if (modelFactory.isNMAssociationMeta(meta)) {
- importNMAssociationFile(tx, meta, importer, csvResult, 1000);
- } else {
- importAssociationFile(tx, meta, importer, csvResult, 1000);
- }
- } finally {
- importer.close();
+ ImportModel<E> model = importStrategy.getModelFactory().buildForImport(meta);
+ Import<E> importer = Import.newImport(model, reader);
+
+ importStrategy.importTableFile(importer,
+ meta,
+ reader,
+ csvResult);
+
+
+ }
+
+ public static <T extends TopiaEntityEnum> void importAssociationFile(Reader reader,
+ ImportStrategy<T> importStrategy,
+ AssociationMeta<T> meta,
+ CsvImportResult<T> csvResult) throws IOException, TopiaException {
+
+
+ // load a association input
+ ImportModelFactory<T> modelFactory = importStrategy.getModelFactory();
+ ImportModel<Map<String, Object>> model =
+ modelFactory.buildForImport(meta);
+ ImportToMap importer = ImportToMap.newImportToMap(model, reader, false);
+
+ try {
+ if (modelFactory.isNMAssociationMeta(meta)) {
+ importStrategy.importAssociationFile(meta, importer, csvResult);
+ } else {
+ importStrategy.importNMAssociationFile(meta, importer, csvResult);
}
+ } finally {
+ importer.close();
+ }
+ }
- } else {
+// public static <T extends TopiaEntityEnum> void importTableFile(TopiaContextImplementor tx,
+// ImportModelFactory<T> modelFactory,
+// TableMeta<T> meta,
+// Reader reader,
+// CsvImportResult<T> csvResult) throws IOException, TopiaException {
+//
+// ImportModel<TopiaEntity> model = modelFactory.buildForImport(meta);
+// Import<TopiaEntity> importer = Import.newImport(model, reader);
+//
+// try {
+// TopiaDAO<TopiaEntity> dao = (TopiaDAO<TopiaEntity>) tx.getDAO(meta.getSource().getContract());
+// importEntityFile(dao, meta, importer, csvResult);
+// } finally {
+// importer.close();
+// }
+// }
- // normal entity table import
- TableMeta<T> meta = (TableMeta<T>) entry;
- ImportModel<TopiaEntity> model = modelFactory.buildForImport(meta);
- Import<TopiaEntity> importer = Import.newImport(model, reader);
+ public static <T extends TopiaEntityEnum> void importAssociationFile(TopiaContextImplementor tx,
+ ImportModelFactory<T> modelFactory,
+ AssociationMeta<T> meta,
+ Reader reader,
+ CsvImportResult<T> csvResult) throws IOException, TopiaException {
- try {
- TopiaDAO<TopiaEntity> dao = (TopiaDAO<TopiaEntity>) tx.getDAO(meta.getSource().getContract());
- importEntityFile(dao, meta, importer, csvResult);
- } finally {
- importer.close();
+
+ // load a association input
+ ImportModel<Map<String, Object>> model =
+ modelFactory.buildForImport(meta);
+ ImportToMap importer = ImportToMap.newImportToMap(model, reader, false);
+
+ try {
+ if (modelFactory.isNMAssociationMeta(meta)) {
+ importNMAssociationFile(tx, meta, importer, csvResult, 1000);
+ } else {
+ importAssociationFile(tx, meta, importer, csvResult, 1000);
}
+ } finally {
+ importer.close();
}
-
}
- public static <T extends TopiaEntityEnum> Map<MetaFilenameAware<T>, ZipEntry> discoverEntries(
+ public static <T extends TopiaEntityEnum, M extends MetaFilenameAware<T>> Map<M, ZipEntry> discoverEntries(
String entryPrefix,
- MetaFilenameAware<T>[] entries,
+ Iterable<M> entries,
ZipFile zipFile,
List<String> missingEntries) {
- Map<MetaFilenameAware<T>, ZipEntry> result = Maps.newLinkedHashMap();
+ Map<M, ZipEntry> result = Maps.newLinkedHashMap();
// check that all mandatories
- for (MetaFilenameAware<T> entry : entries) {
+ for (M entry : entries) {
String filename = entry.getFilename();
ZipEntry zipEntry = zipFile.getEntry(entryPrefix + filename);
@@ -127,15 +169,15 @@
return result;
}
- public static <T extends TopiaEntityEnum> Map<MetaFilenameAware<T>, File> discoverEntries(
- MetaFilenameAware<T>[] entries,
+ public static <T extends TopiaEntityEnum, M extends MetaFilenameAware<T>> Map<M, File> discoverEntries(
+ Iterable<M> entries,
File zipFile,
List<String> missingEntries) {
- Map<MetaFilenameAware<T>, File> result = Maps.newLinkedHashMap();
+ Map<M, File> result = Maps.newLinkedHashMap();
// check that all mandatories
- for (MetaFilenameAware<T> entry : entries) {
+ for (M entry : entries) {
String filename = entry.getFilename();
File zipEntry = new File(zipFile, filename);
@@ -148,23 +190,23 @@
return result;
}
- public static <T extends TopiaEntityEnum, E extends TopiaEntity> void importEntityFile(TopiaDAO<E> dao,
- TableMeta<T> meta,
- Import<E> importer,
- CsvImportResult<T> csvResult) throws TopiaException {
+// public static <T extends TopiaEntityEnum, E extends TopiaEntity> void importEntityFile(TopiaDAO<E> dao,
+// TableMeta<T> meta,
+// Import<E> importer,
+// CsvImportResult<T> csvResult) throws TopiaException {
+//
+// for (TopiaEntity entity : importer) {
+//
+// Map<String, Object> properties = meta.prepareCreate(
+// entity, entity.getTopiaId());
+// E entityToSave = dao.create(properties);
+//
+// meta.copy(entity, entityToSave);
+//
+// csvResult.incrementsNumberUpdated();
+// }
+// }
- for (TopiaEntity entity : importer) {
-
- Map<String, Object> properties = meta.prepareCreate(
- entity, entity.getTopiaId());
- E entityToSave = dao.create(properties);
-
- meta.copy(entity, entityToSave);
-
- csvResult.incrementsNumberUpdated();
- }
- }
-
public static <T extends TopiaEntityEnum> void importAssociationFile(TopiaContext tx, AssociationMeta<T> meta,
ImportToMap importer,
CsvImportResult<T> csvResult,
@@ -206,7 +248,8 @@
}
}
- public static <T extends TopiaEntityEnum> void importNMAssociationFile(TopiaContext tx, AssociationMeta<T> meta,
+ public static <T extends TopiaEntityEnum> void importNMAssociationFile(TopiaContext tx,
+ AssociationMeta<T> meta,
ImportToMap importer,
CsvImportResult<T> csvResult,
int nbRowBuffer) throws TopiaException {
Modified: branches/topia-2.6.x/topia-persistence/src/main/java/org/nuiton/topia/persistence/csv/out/TopiaCsvExports.java
===================================================================
--- branches/topia-2.6.x/topia-persistence/src/main/java/org/nuiton/topia/persistence/csv/out/TopiaCsvExports.java 2012-08-22 10:47:23 UTC (rev 2639)
+++ branches/topia-2.6.x/topia-persistence/src/main/java/org/nuiton/topia/persistence/csv/out/TopiaCsvExports.java 2012-08-22 10:47:37 UTC (rev 2640)
@@ -37,6 +37,7 @@
import org.nuiton.topia.persistence.TopiaEntityEnum;
import org.nuiton.topia.persistence.metadata.AssociationMeta;
import org.nuiton.topia.persistence.metadata.MetaFilenameAware;
+import org.nuiton.topia.persistence.metadata.Metadatas;
import org.nuiton.topia.persistence.metadata.TableMeta;
import org.nuiton.util.TimeLog;
import org.nuiton.util.csv.Export;
@@ -191,6 +192,44 @@
}
+ public static <T extends TopiaEntityEnum> Map<T, EntityExportContext<T>> createReplicateEntityVisitorContexts(ExportModelFactory<T> modelFactory,
+ Iterable<TableMeta<T>> entityMetas,
+ Iterable<AssociationMeta<T>> associationMetas,
+ File container) {
+
+ Preconditions.checkNotNull(modelFactory);
+ Preconditions.checkNotNull(entityMetas);
+ Preconditions.checkNotNull(associationMetas);
+ Preconditions.checkNotNull(container);
+
+ Multimap<T, AssociationMeta<T>> associations = Metadatas.split(associationMetas);
+ Map<T, EntityExportContext<T>> contexts = Maps.newHashMap();
+
+ for (TableMeta<T> meta : entityMetas) {
+
+ ExportModel<TopiaEntity> model = modelFactory.buildForExport(meta);
+
+ EntityExportContext<T> exportContext = EntityExportContext.newExportContext(
+ model,
+ meta,
+ container);
+
+ T source = meta.getSource();
+
+ contexts.put(source, exportContext);
+
+ for (AssociationMeta<T> associationMeta : associations.get(source)) {
+
+ ExportModel<TopiaEntity> associationModel =
+ modelFactory.buildForExport(associationMeta);
+ exportContext.addAssociationExportContext(associationMeta,
+ associationModel,
+ container);
+ }
+ }
+ return contexts;
+ }
+
/**
* to export entity as csv files.
*
1
0
r2639 - branches/topia-2.6.x/topia-persistence/src/main/java/org/nuiton/topia/persistence/metadata
by tchemit@users.nuiton.org 22 Aug '12
by tchemit@users.nuiton.org 22 Aug '12
22 Aug '12
Author: tchemit
Date: 2012-08-22 12:47:23 +0200 (Wed, 22 Aug 2012)
New Revision: 2639
Url: http://nuiton.org/repositories/revision/topia/2639
Log:
refs #2260: Add a metadata package in persistence
Modified:
branches/topia-2.6.x/topia-persistence/src/main/java/org/nuiton/topia/persistence/metadata/DbMeta.java
branches/topia-2.6.x/topia-persistence/src/main/java/org/nuiton/topia/persistence/metadata/Metadatas.java
Modified: branches/topia-2.6.x/topia-persistence/src/main/java/org/nuiton/topia/persistence/metadata/DbMeta.java
===================================================================
--- branches/topia-2.6.x/topia-persistence/src/main/java/org/nuiton/topia/persistence/metadata/DbMeta.java 2012-08-21 16:09:15 UTC (rev 2638)
+++ branches/topia-2.6.x/topia-persistence/src/main/java/org/nuiton/topia/persistence/metadata/DbMeta.java 2012-08-22 10:47:23 UTC (rev 2639)
@@ -57,6 +57,28 @@
return new DbMeta<T>(typeProvider, universe, nonEditables);
}
+ public void addTables(List<TableMeta<T>> entities,
+ Iterable<T> types) {
+ for (T type : types) {
+
+ TableMeta<T> tableMeta = getTable(type);
+ if (entities != null) {
+ entities.add(tableMeta);
+ }
+ }
+ }
+
+ public void addAssociations(List<AssociationMeta<T>> associations,
+ Iterable<T> types) {
+ for (T type : types) {
+
+ TableMeta<T> tableMeta = getTable(type);
+ if (associations != null) {
+ associations.addAll(tableMeta.getAssociations());
+ }
+ }
+ }
+
public List<String> getTableNames() {
List<String> result = Lists.newArrayList();
for (TableMeta tableMeta : getTables()) {
Modified: branches/topia-2.6.x/topia-persistence/src/main/java/org/nuiton/topia/persistence/metadata/Metadatas.java
===================================================================
--- branches/topia-2.6.x/topia-persistence/src/main/java/org/nuiton/topia/persistence/metadata/Metadatas.java 2012-08-21 16:09:15 UTC (rev 2638)
+++ branches/topia-2.6.x/topia-persistence/src/main/java/org/nuiton/topia/persistence/metadata/Metadatas.java 2012-08-22 10:47:23 UTC (rev 2639)
@@ -29,7 +29,6 @@
import com.google.common.collect.Multimaps;
import org.nuiton.topia.persistence.TopiaEntityEnum;
-import java.util.List;
import java.util.Map;
/**
@@ -40,39 +39,23 @@
*/
public class Metadatas {
- public static <T extends TopiaEntityEnum> void addEntries(DbMeta<T> dbMeta,
- List<MetaFilenameAware<T>> entities,
- List<MetaFilenameAware<T>> associations,
- T... types) {
- for (T type : types) {
-
- TableMeta<T> tableMeta = dbMeta.getTable(type);
- if (entities != null) {
- entities.add(tableMeta);
- }
- if (associations != null) {
- associations.addAll(tableMeta.getAssociations());
- }
- }
- }
-
- public static <T extends TopiaEntityEnum> Multimap<T, MetaFilenameAware<T>> split(List<MetaFilenameAware<T>> metas) {
- Function<MetaFilenameAware<T>, T> function = newMetaBySourcefunction();
- Multimap<T, MetaFilenameAware<T>> associationsBySource = Multimaps.index(metas, function);
+ public static <T extends TopiaEntityEnum, M extends MetaFilenameAware<T>> Multimap<T, M> split(Iterable<M> metas) {
+ Function<M, T> function = newMetaBySourcefunction();
+ Multimap<T, M> associationsBySource = Multimaps.index(metas, function);
return associationsBySource;
}
- public static <T extends TopiaEntityEnum> Map<T, MetaFilenameAware<T>> uniqueIndex(List<MetaFilenameAware<T>> metas) {
- Function<MetaFilenameAware<T>, T> function = newMetaBySourcefunction();
- Map<T, MetaFilenameAware<T>> associationsBySource = Maps.uniqueIndex(metas, function);
+ public static <T extends TopiaEntityEnum, M extends MetaFilenameAware<T>> Map<T, M> uniqueIndex(Iterable<M> metas) {
+ Function<M, T> function = newMetaBySourcefunction();
+ Map<T, M> associationsBySource = Maps.uniqueIndex(metas, function);
return associationsBySource;
}
- protected static <T extends TopiaEntityEnum> Function<MetaFilenameAware<T>, T> newMetaBySourcefunction() {
- return new Function<MetaFilenameAware<T>, T>() {
+ protected static <T extends TopiaEntityEnum, M extends MetaFilenameAware<T>> Function<M, T> newMetaBySourcefunction() {
+ return new Function<M, T>() {
@Override
- public T apply(MetaFilenameAware<T> input) {
+ public T apply(M input) {
return input.getSource();
}
};
1
0
r2638 - in branches/topia-2.6.x/topia-persistence/src/main/java/org/nuiton/topia/persistence: csv csv/in csv/out metadata
by tchemit@users.nuiton.org 21 Aug '12
by tchemit@users.nuiton.org 21 Aug '12
21 Aug '12
Author: tchemit
Date: 2012-08-21 18:09:15 +0200 (Tue, 21 Aug 2012)
New Revision: 2638
Url: http://nuiton.org/repositories/revision/topia/2638
Log:
refs #2266: Add some api about import / export in csv format (improve import api)
Removed:
branches/topia-2.6.x/topia-persistence/src/main/java/org/nuiton/topia/persistence/metadata/TopiaEntityEnumProvider.java
Modified:
branches/topia-2.6.x/topia-persistence/src/main/java/org/nuiton/topia/persistence/csv/EntityCsvModel.java
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/out/ExportEntityVisitor.java
branches/topia-2.6.x/topia-persistence/src/main/java/org/nuiton/topia/persistence/metadata/DbMeta.java
branches/topia-2.6.x/topia-persistence/src/main/java/org/nuiton/topia/persistence/metadata/Metadatas.java
branches/topia-2.6.x/topia-persistence/src/main/java/org/nuiton/topia/persistence/metadata/TableMeta.java
Modified: branches/topia-2.6.x/topia-persistence/src/main/java/org/nuiton/topia/persistence/csv/EntityCsvModel.java
===================================================================
--- branches/topia-2.6.x/topia-persistence/src/main/java/org/nuiton/topia/persistence/csv/EntityCsvModel.java 2012-08-21 16:08:41 UTC (rev 2637)
+++ branches/topia-2.6.x/topia-persistence/src/main/java/org/nuiton/topia/persistence/csv/EntityCsvModel.java 2012-08-21 16:09:15 UTC (rev 2638)
@@ -140,6 +140,16 @@
);
}
+ public <E extends TopiaEntity> void addForeignKeyForImport(String propertyName,
+ Class<E> entityType,
+ Map<String, E> universe) {
+
+ newMandatoryColumn(propertyName,
+ TopiaCsvCommons.newForeignKeyValue(entityType,
+ propertyName,
+ universe)
+ );
+ }
public void addDefaultColumn(String propertyName, Class<?> type) {
addDefaultColumn(propertyName, propertyName, type);
}
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-21 16:08:41 UTC (rev 2637)
+++ branches/topia-2.6.x/topia-persistence/src/main/java/org/nuiton/topia/persistence/csv/in/TopiaCsvImports.java 2012-08-21 16:09:15 UTC (rev 2638)
@@ -41,6 +41,7 @@
import org.nuiton.util.csv.ImportModel;
import org.nuiton.util.csv.ImportToMap;
+import java.io.File;
import java.io.IOException;
import java.io.Reader;
import java.util.List;
@@ -126,6 +127,27 @@
return result;
}
+ public static <T extends TopiaEntityEnum> Map<MetaFilenameAware<T>, File> discoverEntries(
+ MetaFilenameAware<T>[] entries,
+ File zipFile,
+ List<String> missingEntries) {
+
+ Map<MetaFilenameAware<T>, File> result = Maps.newLinkedHashMap();
+
+ // check that all mandatories
+ for (MetaFilenameAware<T> entry : entries) {
+ String filename = entry.getFilename();
+ File zipEntry = new File(zipFile, filename);
+
+ if (zipEntry.exists()) {
+ result.put(entry, zipEntry);
+ } else {
+ missingEntries.add(filename);
+ }
+ }
+ return result;
+ }
+
public static <T extends TopiaEntityEnum, E extends TopiaEntity> void importEntityFile(TopiaDAO<E> dao,
TableMeta<T> meta,
Import<E> importer,
Modified: branches/topia-2.6.x/topia-persistence/src/main/java/org/nuiton/topia/persistence/csv/out/ExportEntityVisitor.java
===================================================================
--- branches/topia-2.6.x/topia-persistence/src/main/java/org/nuiton/topia/persistence/csv/out/ExportEntityVisitor.java 2012-08-21 16:08:41 UTC (rev 2637)
+++ branches/topia-2.6.x/topia-persistence/src/main/java/org/nuiton/topia/persistence/csv/out/ExportEntityVisitor.java 2012-08-21 16:09:15 UTC (rev 2638)
@@ -32,7 +32,7 @@
import org.nuiton.topia.persistence.EntityVisitor;
import org.nuiton.topia.persistence.TopiaEntity;
import org.nuiton.topia.persistence.TopiaEntityEnum;
-import org.nuiton.topia.persistence.metadata.TopiaEntityEnumProvider;
+import org.nuiton.topia.persistence.TopiaPersistenceHelper;
import org.nuiton.util.TimeLog;
import java.io.Closeable;
@@ -57,20 +57,20 @@
/** Export for simple entity. */
protected final Map<T, TopiaCsvExports.EntityExportContext<T>> entityExporters;
- protected final TopiaEntityEnumProvider<T> entityEnumProvider;
+ protected final TopiaPersistenceHelper<T> persistenceHelper;
public static <T extends TopiaEntityEnum> ExportEntityVisitor<T> newVisitor(
- TopiaEntityEnumProvider<T> entityEnumProvider,
+ TopiaPersistenceHelper<T> persistenceHelper,
Map<T, TopiaCsvExports.EntityExportContext<T>> entityExporters) {
return new ExportEntityVisitor<T>(
- entityEnumProvider,
+ persistenceHelper,
entityExporters
);
}
- public ExportEntityVisitor(TopiaEntityEnumProvider<T> entityEnumProvider,
+ public ExportEntityVisitor(TopiaPersistenceHelper<T> persistenceHelper,
Map<T, TopiaCsvExports.EntityExportContext<T>> entityExporters) {
- this.entityEnumProvider = entityEnumProvider;
+ this.persistenceHelper = persistenceHelper;
this.entityExporters = entityExporters;
}
@@ -150,7 +150,7 @@
Object value) {
if (TopiaEntity.class.isAssignableFrom(type) &&
- getEntityContext(type) != null) {
+ getEntityContext((Class<? extends TopiaEntity>) type) != null) {
Collection<?> cValue = (Collection<?>) value;
if (CollectionUtils.isNotEmpty(cValue)) {
@@ -203,8 +203,8 @@
// prefer use the close api
}
- protected TopiaCsvExports.EntityExportContext getEntityContext(Class<?> entityType) {
- T entityEnum = entityEnumProvider.getEntityEnum(entityType);
+ protected TopiaCsvExports.EntityExportContext getEntityContext(Class<? extends TopiaEntity> entityType) {
+ T entityEnum = persistenceHelper.getEntityEnum(entityType);
return entityEnum == null ? null : entityExporters.get(entityEnum);
}
Modified: branches/topia-2.6.x/topia-persistence/src/main/java/org/nuiton/topia/persistence/metadata/DbMeta.java
===================================================================
--- branches/topia-2.6.x/topia-persistence/src/main/java/org/nuiton/topia/persistence/metadata/DbMeta.java 2012-08-21 16:08:41 UTC (rev 2637)
+++ branches/topia-2.6.x/topia-persistence/src/main/java/org/nuiton/topia/persistence/metadata/DbMeta.java 2012-08-21 16:09:15 UTC (rev 2638)
@@ -28,6 +28,7 @@
import com.google.common.collect.Lists;
import com.google.common.collect.Sets;
import org.nuiton.topia.persistence.TopiaEntityEnum;
+import org.nuiton.topia.persistence.TopiaPersistenceHelper;
import java.util.Iterator;
import java.util.List;
@@ -47,10 +48,10 @@
/** All types non editables. */
protected final Set<T> nonEditableTypes;
- protected final TopiaEntityEnumProvider<T> entityEnumProvider;
+ protected final TopiaPersistenceHelper<T> persistenceHelper;
public static <T extends TopiaEntityEnum> DbMeta<T> newDbMeta(
- TopiaEntityEnumProvider<T> typeProvider,
+ TopiaPersistenceHelper<T> typeProvider,
T[] universe,
T... nonEditables) {
return new DbMeta<T>(typeProvider, universe, nonEditables);
@@ -85,14 +86,14 @@
return getTables().iterator();
}
- protected DbMeta(TopiaEntityEnumProvider<T> entityEnumProvider,
+ protected DbMeta(TopiaPersistenceHelper<T> persistenceHelper,
T[] entityTypes,
T... nonEditableTypes) {
- this.entityEnumProvider = entityEnumProvider;
+ this.persistenceHelper = persistenceHelper;
this.nonEditableTypes = Sets.newHashSet(nonEditableTypes);
tables = Lists.newArrayList();
for (T entityEnum : entityTypes) {
- TableMeta<T> tableMeta = TableMeta.newMeta(entityEnum, entityEnumProvider);
+ TableMeta<T> tableMeta = TableMeta.newMeta(entityEnum, persistenceHelper);
tables.add(tableMeta);
}
}
@@ -101,7 +102,7 @@
return !nonEditableTypes.contains(meta.getSource());
}
- public TopiaEntityEnumProvider<T> getEntityEnumProvider() {
- return entityEnumProvider;
+ public TopiaPersistenceHelper<T> getPersistenceHelper() {
+ return persistenceHelper;
}
}
Modified: branches/topia-2.6.x/topia-persistence/src/main/java/org/nuiton/topia/persistence/metadata/Metadatas.java
===================================================================
--- branches/topia-2.6.x/topia-persistence/src/main/java/org/nuiton/topia/persistence/metadata/Metadatas.java 2012-08-21 16:08:41 UTC (rev 2637)
+++ branches/topia-2.6.x/topia-persistence/src/main/java/org/nuiton/topia/persistence/metadata/Metadatas.java 2012-08-21 16:09:15 UTC (rev 2638)
@@ -24,11 +24,13 @@
*/
import com.google.common.base.Function;
+import com.google.common.collect.Maps;
import com.google.common.collect.Multimap;
import com.google.common.collect.Multimaps;
import org.nuiton.topia.persistence.TopiaEntityEnum;
import java.util.List;
+import java.util.Map;
/**
* Useful methods around metadatas.
@@ -58,7 +60,12 @@
Function<MetaFilenameAware<T>, T> function = newMetaBySourcefunction();
Multimap<T, MetaFilenameAware<T>> associationsBySource = Multimaps.index(metas, function);
return associationsBySource;
+ }
+ public static <T extends TopiaEntityEnum> Map<T, MetaFilenameAware<T>> uniqueIndex(List<MetaFilenameAware<T>> metas) {
+ Function<MetaFilenameAware<T>, T> function = newMetaBySourcefunction();
+ Map<T, MetaFilenameAware<T>> associationsBySource = Maps.uniqueIndex(metas, function);
+ return associationsBySource;
}
protected static <T extends TopiaEntityEnum> Function<MetaFilenameAware<T>, T> newMetaBySourcefunction() {
Modified: branches/topia-2.6.x/topia-persistence/src/main/java/org/nuiton/topia/persistence/metadata/TableMeta.java
===================================================================
--- branches/topia-2.6.x/topia-persistence/src/main/java/org/nuiton/topia/persistence/metadata/TableMeta.java 2012-08-21 16:08:41 UTC (rev 2637)
+++ branches/topia-2.6.x/topia-persistence/src/main/java/org/nuiton/topia/persistence/metadata/TableMeta.java 2012-08-21 16:09:15 UTC (rev 2638)
@@ -30,6 +30,7 @@
import org.nuiton.topia.TopiaRuntimeException;
import org.nuiton.topia.persistence.TopiaEntity;
import org.nuiton.topia.persistence.TopiaEntityEnum;
+import org.nuiton.topia.persistence.TopiaPersistenceHelper;
import org.nuiton.topia.persistence.util.EntityOperator;
import org.nuiton.topia.persistence.util.EntityOperatorStore;
import org.nuiton.util.ObjectUtil;
@@ -58,7 +59,7 @@
private static final long serialVersionUID = 1L;
public static <T extends TopiaEntityEnum> TableMeta<T> newMeta(T entityEnum,
- TopiaEntityEnumProvider<T> typeProvider) {
+ TopiaPersistenceHelper<T> typeProvider) {
return new TableMeta<T>(entityEnum, typeProvider);
}
@@ -204,7 +205,7 @@
return binder;
}
- protected TableMeta(T source, TopiaEntityEnumProvider<T> typeProvider) {
+ protected TableMeta(T source, TopiaPersistenceHelper<T> typeProvider) {
Preconditions.checkNotNull(source);
this.source = source;
@@ -219,7 +220,7 @@
if (TopiaEntity.class.isAssignableFrom(propertyType)) {
// only use it for entity
- T targetEnum = typeProvider.getEntityEnum(propertyType);
+ T targetEnum = typeProvider.getEntityEnum((Class<TopiaEntity>) propertyType);
AssociationMeta<T> meta = AssociationMeta.newMeta(source,
targetEnum,
@@ -237,7 +238,7 @@
ColumnMeta meta = ColumnMeta.newMeta(property, propertyType);
columns.add(meta);
if (meta.isFK()) {
- T dependency = typeProvider.getEntityEnum(propertyType);
+ T dependency = typeProvider.getEntityEnum((Class<TopiaEntity>) propertyType);
deps.add(dependency);
}
}
Deleted: branches/topia-2.6.x/topia-persistence/src/main/java/org/nuiton/topia/persistence/metadata/TopiaEntityEnumProvider.java
===================================================================
--- branches/topia-2.6.x/topia-persistence/src/main/java/org/nuiton/topia/persistence/metadata/TopiaEntityEnumProvider.java 2012-08-21 16:08:41 UTC (rev 2637)
+++ branches/topia-2.6.x/topia-persistence/src/main/java/org/nuiton/topia/persistence/metadata/TopiaEntityEnumProvider.java 2012-08-21 16:09:15 UTC (rev 2638)
@@ -1,38 +0,0 @@
-package org.nuiton.topia.persistence.metadata;
-/*
- * #%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 org.nuiton.topia.persistence.TopiaEntityEnum;
-
-/**
- * Provider of {@link TopiaEntityEnum}.
- *
- * @author tchemit <chemit(a)codelutin.com>
- * @since 2.6.12
- */
-public interface TopiaEntityEnumProvider<T extends TopiaEntityEnum> {
-
- <E> T getEntityEnum(Class<E> type);
-
-}
1
0
r2637 - branches/topia-2.6.x/topia-persistence/src/main/java/org/nuiton/topia/persistence
by tchemit@users.nuiton.org 21 Aug '12
by tchemit@users.nuiton.org 21 Aug '12
21 Aug '12
Author: tchemit
Date: 2012-08-21 18:08:41 +0200 (Tue, 21 Aug 2012)
New Revision: 2637
Url: http://nuiton.org/repositories/revision/topia/2637
Log:
fixes #2278: Introduce a TopiaPersistenceHelper
Added:
branches/topia-2.6.x/topia-persistence/src/main/java/org/nuiton/topia/persistence/TopiaPersistenceHelper.java
Copied: branches/topia-2.6.x/topia-persistence/src/main/java/org/nuiton/topia/persistence/TopiaPersistenceHelper.java (from rev 2636, branches/topia-2.6.x/topia-persistence/src/main/java/org/nuiton/topia/persistence/metadata/TopiaEntityEnumProvider.java)
===================================================================
--- branches/topia-2.6.x/topia-persistence/src/main/java/org/nuiton/topia/persistence/TopiaPersistenceHelper.java (rev 0)
+++ branches/topia-2.6.x/topia-persistence/src/main/java/org/nuiton/topia/persistence/TopiaPersistenceHelper.java 2012-08-21 16:08:41 UTC (rev 2637)
@@ -0,0 +1,41 @@
+package org.nuiton.topia.persistence;
+/*
+ * #%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 org.nuiton.topia.TopiaContext;
+
+/**
+ * Object which helps to wrap some static generated code
+ * (dao helper, entityEnum).
+ *
+ * @author tchemit <chemit(a)codelutin.com>
+ * @since 2.6.12
+ */
+public interface TopiaPersistenceHelper<T extends TopiaEntityEnum> {
+
+ <E extends TopiaEntity> T getEntityEnum(Class<E> type);
+
+ <E extends TopiaEntity> TopiaDAO<E> getDAO(TopiaContext tx, Class<E> type);
+
+}
Property changes on: branches/topia-2.6.x/topia-persistence/src/main/java/org/nuiton/topia/persistence/TopiaPersistenceHelper.java
___________________________________________________________________
Added: svn:keywords
+ Author Date Id Revision HeadURL
Added: svn:eol-style
+ native
1
0
r2636 - branches/topia-2.6.x/topia-persistence/src/main/java/org/nuiton/topia/persistence
by tchemit@users.nuiton.org 19 Aug '12
by tchemit@users.nuiton.org 19 Aug '12
19 Aug '12
Author: tchemit
Date: 2012-08-19 17:11:52 +0200 (Sun, 19 Aug 2012)
New Revision: 2636
Url: http://nuiton.org/repositories/revision/topia/2636
Log:
fixes #2276: Add deleteAll method on TopiaDAO
Modified:
branches/topia-2.6.x/topia-persistence/src/main/java/org/nuiton/topia/persistence/TopiaDAO.java
branches/topia-2.6.x/topia-persistence/src/main/java/org/nuiton/topia/persistence/TopiaDAOImpl.java
Modified: branches/topia-2.6.x/topia-persistence/src/main/java/org/nuiton/topia/persistence/TopiaDAO.java
===================================================================
--- branches/topia-2.6.x/topia-persistence/src/main/java/org/nuiton/topia/persistence/TopiaDAO.java 2012-08-19 14:34:44 UTC (rev 2635)
+++ branches/topia-2.6.x/topia-persistence/src/main/java/org/nuiton/topia/persistence/TopiaDAO.java 2012-08-19 15:11:52 UTC (rev 2636)
@@ -133,6 +133,14 @@
*/
void delete(E e) throws TopiaException;
+ /**
+ * Permet de supprimer des entités.
+ *
+ * @param entities les entités à supprimer
+ * @throws TopiaException if any pb while deleting datas
+ */
+ void deleteAll(Iterable<E> entities) throws TopiaException;
+
//------------------------------------------------------------------------//
//-- findByXXX methods ---------------------------------------------------//
//------------------------------------------------------------------------//
Modified: branches/topia-2.6.x/topia-persistence/src/main/java/org/nuiton/topia/persistence/TopiaDAOImpl.java
===================================================================
--- branches/topia-2.6.x/topia-persistence/src/main/java/org/nuiton/topia/persistence/TopiaDAOImpl.java 2012-08-19 14:34:44 UTC (rev 2635)
+++ branches/topia-2.6.x/topia-persistence/src/main/java/org/nuiton/topia/persistence/TopiaDAOImpl.java 2012-08-19 15:11:52 UTC (rev 2636)
@@ -325,6 +325,13 @@
}
@Override
+ public void deleteAll(Iterable<E> entities) throws TopiaException {
+ for (E entity : entities) {
+ delete(entity);
+ }
+ }
+
+ @Override
public TopiaQuery createQuery() {
return new TopiaQuery(getEntityClass());
}
1
0
r2635 - in branches/topia-2.6.x/topia-persistence/src: license main/resources/i18n
by tchemit@users.nuiton.org 19 Aug '12
by tchemit@users.nuiton.org 19 Aug '12
19 Aug '12
Author: tchemit
Date: 2012-08-19 16:34:44 +0200 (Sun, 19 Aug 2012)
New Revision: 2635
Url: http://nuiton.org/repositories/revision/topia/2635
Log:
fix i18n + optimize third-parties
Modified:
branches/topia-2.6.x/topia-persistence/src/license/THIRD-PARTY.properties
branches/topia-2.6.x/topia-persistence/src/main/resources/i18n/topia-persistence_en_GB.properties
branches/topia-2.6.x/topia-persistence/src/main/resources/i18n/topia-persistence_fr_FR.properties
Modified: branches/topia-2.6.x/topia-persistence/src/license/THIRD-PARTY.properties
===================================================================
--- branches/topia-2.6.x/topia-persistence/src/license/THIRD-PARTY.properties 2012-08-19 11:11:48 UTC (rev 2634)
+++ branches/topia-2.6.x/topia-persistence/src/license/THIRD-PARTY.properties 2012-08-19 14:34:44 UTC (rev 2635)
@@ -5,6 +5,7 @@
# - BSD style
# - COMMON DEVELOPMENT AND DISTRIBUTION LICENSE (CDDL) Version 1.0
# - Common Public License Version 1.0
+# - GNU Library or Lesser General Public License
# - Indiana University Extreme! Lab Software License, vesion 1.1.1
# - Lesser General Public License (LGPL) v 3.0
# - Lesser General Public License (LPGL)
@@ -14,16 +15,17 @@
# - Mozilla Public License Version 1.0
# - The Apache Software License, Version 2.0
# - The H2 License, Version 1.0
-# - http://jaxen.codehaus.org/license.html
+# - The SAX License
+# - The W3C License
+# - The Werken Company License
# - license.txt
#-------------------------------------------------------------------------------
# Please fill the missing licenses for dependencies :
#
#
-#Thu Jan 12 16:55:28 CET 2012
+#Sun Aug 19 16:33:57 CEST 2012
antlr--antlr--2.7.6=BSD License
commons-primitives--commons-primitives--1.0=The Apache Software License, Version 2.0
dom4j--dom4j--1.6.1=BSD License
javax.transaction--jta--1.1=COMMON DEVELOPMENT AND DISTRIBUTION LICENSE (CDDL) Version 1.0
-jaxen--jaxen--1.1.1=http\://jaxen.codehaus.org/license.html
jdom--jdom--1.0=The Apache Software License, Version 2.0
Modified: branches/topia-2.6.x/topia-persistence/src/main/resources/i18n/topia-persistence_en_GB.properties
===================================================================
--- branches/topia-2.6.x/topia-persistence/src/main/resources/i18n/topia-persistence_en_GB.properties 2012-08-19 11:11:48 UTC (rev 2634)
+++ branches/topia-2.6.x/topia-persistence/src/main/resources/i18n/topia-persistence_en_GB.properties 2012-08-19 14:34:44 UTC (rev 2635)
@@ -5,7 +5,7 @@
topia.persistence.error.empty.doc=Empty document
topia.persistence.error.no.hibernate.session=No hinernate session found, you must at first, open a new transaction via 'beaginTransaction' method.
topia.persistence.error.null.param=The method '%1$s' requires a non null parameter '%2$s'.
-topia.persistence.error.on.clear=
+topia.persistence.error.on.clear=Error %s on clear operation
topia.persistence.error.on.commit=An error occurs while commit operation \: %1$s
topia.persistence.error.on.export=An error occurs while export operation \: %1$s
topia.persistence.error.on.loding.xml.doc=Could not read xml document for following reason \: %1$s
@@ -21,7 +21,7 @@
topia.persistence.error.service.unknown=The service %1$s of type %2$s was not found.
topia.persistence.error.unsupported.class=The following entity type %1$s is not managed by this context, you probably forgot to declare it.
topia.persistence.error.unsupported.operation.on.closed.context=This context is closed, it is not possible to release the operation '%1$s'
-topia.persistence.error.unsupported.operation.on.root.context=
+topia.persistence.error.unsupported.operation.on.root.context=Unsupported operation %s on root context
topia.persistence.error.update.schema=Schema could not be updated for following reason \: %1$s
topia.persistence.service.loaded=Service '%1$s' loaded (implementation %2$s)
topia.persistence.supported.classes.for.context=List of supported persistence classes \: %1$s
Modified: branches/topia-2.6.x/topia-persistence/src/main/resources/i18n/topia-persistence_fr_FR.properties
===================================================================
--- branches/topia-2.6.x/topia-persistence/src/main/resources/i18n/topia-persistence_fr_FR.properties 2012-08-19 11:11:48 UTC (rev 2634)
+++ branches/topia-2.6.x/topia-persistence/src/main/resources/i18n/topia-persistence_fr_FR.properties 2012-08-19 14:34:44 UTC (rev 2635)
@@ -5,7 +5,7 @@
topia.persistence.error.empty.doc=Document vide
topia.persistence.error.no.hibernate.session=Aucune session hibernate trouvée, vous devez démarré une transaction avec la méthode 'beginTransaction'
topia.persistence.error.null.param=La méthode '%1$s' requière un paramètre '%2$s' non null.
-topia.persistence.error.on.clear=
+topia.persistence.error.on.clear=Une erreur est apparue pendant le clear \: %s
topia.persistence.error.on.commit=Une erreur est apparue pendant le commit \: %1$s
topia.persistence.error.on.export=Une erreur est apparue pendant l'export \: %1$s
topia.persistence.error.on.loding.xml.doc=Lecture du document impossible pour la raison suivante \: %1$s
@@ -21,7 +21,7 @@
topia.persistence.error.service.unknown=Le service '%1$s' ayant pour classe '%2$s' n'est pas connu
topia.persistence.error.unsupported.class=La classe %1$s n'est pas supportée par ce TopiaContext, vous avez sans doute oublié d'ajouter son mapping
topia.persistence.error.unsupported.operation.on.closed.context=Ce contexte a été fermé, impossible de réaliser l'opération %1$s
-topia.persistence.error.unsupported.operation.on.root.context=
+topia.persistence.error.unsupported.operation.on.root.context=Opération interdite %s sur le rootContext
topia.persistence.error.update.schema=Le schéma n'a pas pu être mis à jour pour la raison suivante \: %2$s
topia.persistence.service.loaded=Service '%1$s' chargé par '%2$s'
topia.persistence.supported.classes.for.context=Classes supportées par ce TopiaContext \: %1$s
1
0