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@codelutin.com> - * @since 2.6.12 - */ -public interface TopiaEntityEnumProvider<T extends TopiaEntityEnum> { - - <E> T getEntityEnum(Class<E> type); - -}
participants (1)
-
tchemit@users.nuiton.org