Author: tchemit Date: 2012-08-23 17:29:20 +0200 (Thu, 23 Aug 2012) New Revision: 467 Url: http://forge.codelutin.com/repositories/revision/sammoa/467 Log: fixes #1269: Import/Export base H2 (fix transectFlight index import/export) + finalize import Modified: trunk/sammoa-application/src/main/java/fr/ulr/sammoa/application/io/input/application/ImportApplicationService.java trunk/sammoa-application/src/main/java/fr/ulr/sammoa/application/io/input/application/strategy/AbstractImportStrategy.java trunk/sammoa-application/src/main/java/fr/ulr/sammoa/application/io/input/application/strategy/DataImportStrategy.java trunk/sammoa-application/src/main/java/fr/ulr/sammoa/application/io/input/application/strategy/ReferentialImportStrategy.java trunk/sammoa-application/src/main/java/fr/ulr/sammoa/application/io/output/application/ExportApplicationService.java trunk/sammoa-persistence/src/main/java/fr/ulr/sammoa/persistence/FlightDAOImpl.java trunk/sammoa-persistence/src/main/java/fr/ulr/sammoa/persistence/TransectFlightDAOImpl.java trunk/sammoa-persistence/src/main/java/fr/ulr/sammoa/persistence/TransectFlightImpl.java Modified: trunk/sammoa-application/src/main/java/fr/ulr/sammoa/application/io/input/application/ImportApplicationService.java =================================================================== --- trunk/sammoa-application/src/main/java/fr/ulr/sammoa/application/io/input/application/ImportApplicationService.java 2012-08-23 15:27:10 UTC (rev 466) +++ trunk/sammoa-application/src/main/java/fr/ulr/sammoa/application/io/input/application/ImportApplicationService.java 2012-08-23 15:29:20 UTC (rev 467) @@ -155,7 +155,7 @@ } } - tx.commitTransaction(); + persistence.flushTransaction(tx); startTime = timeLog.log(startTime, "importDb", "after flights delete"); @@ -181,8 +181,6 @@ try { importReferentials(tx, modelFactory, tableMap); -// tx.commitTransaction(); - startTime = timeLog.log(startTime, "importDb", "after referential import"); @@ -191,7 +189,8 @@ ); for (String flightId : model.getFlightIds()) { - FlightStorage flightStorage = storage.getFlightStorage(flightId); + FlightStorage flightStorage = + storage.getFlightStorage(flightId); importFlight(tx, dbMetas, strategy, @@ -235,10 +234,10 @@ } finally { reader.close(); - } } + // need to flush session (otherwise object are not accessible by a find ?) persistence.flushTransaction(tx); for (Map.Entry<AssociationMeta<SammoaEntityEnum>, File> entry : associationMap.entrySet()) { Modified: trunk/sammoa-application/src/main/java/fr/ulr/sammoa/application/io/input/application/strategy/AbstractImportStrategy.java =================================================================== --- trunk/sammoa-application/src/main/java/fr/ulr/sammoa/application/io/input/application/strategy/AbstractImportStrategy.java 2012-08-23 15:27:10 UTC (rev 466) +++ trunk/sammoa-application/src/main/java/fr/ulr/sammoa/application/io/input/application/strategy/AbstractImportStrategy.java 2012-08-23 15:29:20 UTC (rev 467) @@ -37,8 +37,6 @@ import org.nuiton.util.csv.Import; import org.nuiton.util.csv.ImportToMap; -import java.io.Reader; - /** * Base import stragey for sammo application import. * @@ -67,9 +65,7 @@ } @Override - public <E extends TopiaEntity> void importTable(Import<E> importer, - TableMeta<SammoaEntityEnum> meta, - Reader reader, + public <E extends TopiaEntity> void importTable(TableMeta<SammoaEntityEnum> meta, Import<E> importer, CsvImportResult<SammoaEntityEnum> csvResult) throws TopiaException { throw new UnsupportedOperationException(); } @@ -89,4 +85,8 @@ return persistenceHelper.getDAO(tx, type); } + protected void flushTransaction() throws TopiaException { + persistenceHelper.flushTransaction(tx); + } + } Modified: trunk/sammoa-application/src/main/java/fr/ulr/sammoa/application/io/input/application/strategy/DataImportStrategy.java =================================================================== --- trunk/sammoa-application/src/main/java/fr/ulr/sammoa/application/io/input/application/strategy/DataImportStrategy.java 2012-08-23 15:27:10 UTC (rev 466) +++ trunk/sammoa-application/src/main/java/fr/ulr/sammoa/application/io/input/application/strategy/DataImportStrategy.java 2012-08-23 15:29:20 UTC (rev 467) @@ -24,8 +24,11 @@ */ import fr.ulr.sammoa.application.io.input.application.SammoaImportModelFactory; +import fr.ulr.sammoa.persistence.SammoaDAOHelper; import fr.ulr.sammoa.persistence.SammoaEntityEnum; import fr.ulr.sammoa.persistence.SammoaPersistenceHelper; +import fr.ulr.sammoa.persistence.TransectFlight; +import fr.ulr.sammoa.persistence.TransectFlightDAO; import org.nuiton.topia.TopiaContext; import org.nuiton.topia.TopiaException; import org.nuiton.topia.persistence.TopiaDAO; @@ -37,7 +40,6 @@ import org.nuiton.util.csv.Import; import org.nuiton.util.csv.ImportToMap; -import java.io.Reader; import java.util.Map; /** @@ -55,15 +57,31 @@ } @Override - public <E extends TopiaEntity> void importTable(Import<E> importer, - TableMeta<SammoaEntityEnum> meta, - Reader reader, + public <E extends TopiaEntity> void importTable(TableMeta<SammoaEntityEnum> meta, Import<E> importer, CsvImportResult<SammoaEntityEnum> csvResult) throws TopiaException { - TopiaDAO<E> dao = getDAO(meta.getSource()); + if (meta.getSource() != SammoaEntityEnum.TransectFlight) { - TopiaCsvImports.importAllEntities(dao, meta, importer, csvResult); + TopiaDAO<E> dao = getDAO(meta.getSource()); + TopiaCsvImports.importAllEntities(dao, meta, importer, csvResult); + } else { + TransectFlightDAO dao = SammoaDAOHelper.getTransectFlightDAO(getTx()); + + // import transect flights + Iterable<TransectFlight> transectFlights = + TopiaCsvImports.importAllEntitiesAndReturnThem(dao, + meta, + (Import<TransectFlight>) importer, + csvResult); + + + // must flush hibernate session before we want to send our own sql requests... + flushTransaction(); + + //must now reattach (in pure sql indexInFlight) + dao.reAttachIndexInFlight(transectFlights); + } } @Override @@ -71,7 +89,6 @@ ImportToMap importer, CsvImportResult<SammoaEntityEnum> csvResult) throws TopiaException { - SammoaEntityEnum target = meta.getTarget(); boolean nmAssociationMeta = getModelFactory().isNMAssociationMeta(meta); @@ -105,7 +122,7 @@ importer, csvResult, 1000); - }else { + } else { TopiaCsvImports.importAssociation(getTx(), meta, importer, Modified: trunk/sammoa-application/src/main/java/fr/ulr/sammoa/application/io/input/application/strategy/ReferentialImportStrategy.java =================================================================== --- trunk/sammoa-application/src/main/java/fr/ulr/sammoa/application/io/input/application/strategy/ReferentialImportStrategy.java 2012-08-23 15:27:10 UTC (rev 466) +++ trunk/sammoa-application/src/main/java/fr/ulr/sammoa/application/io/input/application/strategy/ReferentialImportStrategy.java 2012-08-23 15:29:20 UTC (rev 467) @@ -36,7 +36,6 @@ import org.nuiton.topia.persistence.metadata.TableMeta; import org.nuiton.util.csv.Import; -import java.io.Reader; import java.util.Map; /** @@ -57,9 +56,7 @@ } @Override - public <E extends TopiaEntity> void importTable(Import<E> importer, - TableMeta<SammoaEntityEnum> meta, - Reader reader, + public <E extends TopiaEntity> void importTable(TableMeta<SammoaEntityEnum> meta, Import<E> importer, CsvImportResult<SammoaEntityEnum> csvResult) throws TopiaException { TopiaDAO<E> dao = getDAO(meta.getSource()); Modified: trunk/sammoa-application/src/main/java/fr/ulr/sammoa/application/io/output/application/ExportApplicationService.java =================================================================== --- trunk/sammoa-application/src/main/java/fr/ulr/sammoa/application/io/output/application/ExportApplicationService.java 2012-08-23 15:27:10 UTC (rev 466) +++ trunk/sammoa-application/src/main/java/fr/ulr/sammoa/application/io/output/application/ExportApplicationService.java 2012-08-23 15:29:20 UTC (rev 467) @@ -41,8 +41,10 @@ import fr.ulr.sammoa.persistence.SammoaDAOHelper; import fr.ulr.sammoa.persistence.SammoaDbMeta; import fr.ulr.sammoa.persistence.SammoaEntityEnum; +import fr.ulr.sammoa.persistence.TransectFlight; import org.apache.commons.io.FileUtils; import org.apache.commons.io.IOUtils; +import org.apache.commons.lang3.tuple.Pair; import org.nuiton.topia.TopiaContext; import org.nuiton.topia.TopiaException; import org.nuiton.topia.persistence.TopiaEntity; @@ -175,6 +177,8 @@ flightStorage, flightId); } + } catch (TopiaException e) { + throw new SammoaTechnicalException(e); } catch (IOException e) { throw new SammoaTechnicalException("Could not create export file", e); } finally { @@ -230,7 +234,6 @@ SammoaPrepareDataForExport prepareDataForExport = new SammoaPrepareDataForExport(dbMetas, tx); - List<TableMeta<SammoaEntityEnum>> referencialEntries = dbMetas.getReferentialTables(); @@ -250,7 +253,7 @@ protected void exportFlightData(TopiaContext tx, FlightStorage storage, - String flightId) throws IOException { + String flightId) throws IOException, TopiaException { File csvDirectory = storage.getCsvDirectory(); @@ -274,6 +277,7 @@ try { Flight flight = flightService.getFlight(tx, flightId); + attachIndexInFlight(tx, flight); exportVisitor.export(flight); List<GeoPoint> geoPoints = @@ -292,6 +296,25 @@ } } + protected void attachIndexInFlight(TopiaContext tx, + Flight flight) throws TopiaException { + + FlightDAO flightDAO = SammoaDAOHelper.getFlightDAO(tx); + + List<Pair<String, Integer>> map = flightDAO.findAllIndexInFlight(flight); + for (Pair<String, Integer> entry : map) { + + String transectFLightId = entry.getKey(); + Integer indexInFlight = entry.getValue(); + + TransectFlight transectFlight = + flight.getTransectFlightByTopiaId(transectFLightId); + Preconditions.checkNotNull(transectFlight); + transectFlight.setIndexInFlight(indexInFlight); + } + + } + protected void compressZipFile(File zipFile, File directory) { try { Modified: trunk/sammoa-persistence/src/main/java/fr/ulr/sammoa/persistence/FlightDAOImpl.java =================================================================== --- trunk/sammoa-persistence/src/main/java/fr/ulr/sammoa/persistence/FlightDAOImpl.java 2012-08-23 15:27:10 UTC (rev 466) +++ trunk/sammoa-persistence/src/main/java/fr/ulr/sammoa/persistence/FlightDAOImpl.java 2012-08-23 15:29:20 UTC (rev 467) @@ -24,24 +24,29 @@ */ package fr.ulr.sammoa.persistence; +import org.apache.commons.lang3.tuple.Pair; import org.nuiton.topia.TopiaException; import org.nuiton.topia.TopiaRuntimeException; +import org.nuiton.topia.framework.TopiaSQLQuery; +import java.sql.Connection; +import java.sql.PreparedStatement; +import java.sql.ResultSet; +import java.sql.SQLException; +import java.util.List; + /** * Created: 08/06/12 * * @author fdesbois <desbois@codelutin.com> + * @author tchemit <chemit@codelutin.com> */ public class FlightDAOImpl<E extends Flight> extends FlightDAOAbstract<E> { public int findLastFlightNumber(int defaultValue) { + String ql = "SELECT max(flightNumber) FROM FlightImpl"; - String ql = String.format("SELECT max(%1$s) FROM %2$s", - Flight.PROPERTY_FLIGHT_NUMBER, - FlightImpl.class.getSimpleName() - ); - try { Integer queryResult = findByQuery(Integer.class, ql); @@ -56,6 +61,37 @@ } } + public List<Pair<String, Integer>> findAllIndexInFlight(final Flight flight) { + + TopiaSQLQuery<Pair<String, Integer>> query = new TopiaSQLQuery<Pair<String, Integer>>() { + + @Override + protected PreparedStatement prepareQuery(Connection connection) throws SQLException { + String ql = "SELECT t.topiaId, t.flight_idx " + + "FROM Flight f, TransectFlight t " + + "WHERE f.topiaid = ? " + + "AND t.flight = f.topiaId"; + PreparedStatement ps = connection.prepareStatement(ql); + ps.setString(1, flight.getTopiaId()); + return ps; + } + + @Override + protected Pair<String, Integer> prepareResult(ResultSet set) throws SQLException { + Pair<String, Integer> result = Pair.of(set.getString(1), set.getInt(2)); + return result; + } + }; + + try { + + List<Pair<String, Integer>> result = query.findMultipleResult(getContext()); + return result; + } catch (TopiaException e) { + throw new TopiaRuntimeException(e); + } + } + // public List<Flight> findAllByCampaignOrderedByBeginDateDesc(Campaign campaign) { // // List<Flight> result; Modified: trunk/sammoa-persistence/src/main/java/fr/ulr/sammoa/persistence/TransectFlightDAOImpl.java =================================================================== --- trunk/sammoa-persistence/src/main/java/fr/ulr/sammoa/persistence/TransectFlightDAOImpl.java 2012-08-23 15:27:10 UTC (rev 466) +++ trunk/sammoa-persistence/src/main/java/fr/ulr/sammoa/persistence/TransectFlightDAOImpl.java 2012-08-23 15:29:20 UTC (rev 467) @@ -35,10 +35,8 @@ public Map<Transect, Long> countAllByTransect() { - String ql = String.format( - "SELECT %2$s, count(*) FROM %1$s GROUP BY %2$s", - TransectFlightImpl.class.getSimpleName(), - TransectFlight.PROPERTY_TRANSECT); + String ql = "SELECT transect, count(*) FROM TransectFlightImpl " + + "GROUP BY transect"; try { List<Object[]> queryResults = findAllByQuery(Object[].class, ql); @@ -57,10 +55,8 @@ public Map<Transect, Long> countAllByTransects(Collection<Transect> transects) { - String ql = String.format( - "SELECT %2$s, count(*) FROM %1$s WHERE %2$s IN (:transects) GROUP BY %2$s", - TransectFlightImpl.class.getSimpleName(), - TransectFlight.PROPERTY_TRANSECT); + String ql = "SELECT transect, count(*) FROM TransectFlightImpl " + + "WHERE transect IN (:transects) GROUP BY transect"; try { List<Object[]> queryResults = findAllByQuery( @@ -77,6 +73,19 @@ } } + public void reAttachIndexInFlight(Iterable<TransectFlight> transectFlights) throws TopiaException { + StringBuilder builder = new StringBuilder(); + + String ql = "UPDATE TransectFlight SET flight_idx = %s " + + "WHERE topiaid = '%s';"; + + for (TransectFlight transectFlight : transectFlights) { + builder.append(String.format(ql, transectFlight.getIndexInFlight(), + transectFlight.getTopiaId())); + } + + getContext().executeSQL(builder.toString()); + } // public Long countByTransect(Transect transect) { // // Long result; @@ -95,4 +104,5 @@ // return result; // } -} //TransectFlightDAOImpl<E extends TransectFlight> + +} Modified: trunk/sammoa-persistence/src/main/java/fr/ulr/sammoa/persistence/TransectFlightImpl.java =================================================================== --- trunk/sammoa-persistence/src/main/java/fr/ulr/sammoa/persistence/TransectFlightImpl.java 2012-08-23 15:27:10 UTC (rev 466) +++ trunk/sammoa-persistence/src/main/java/fr/ulr/sammoa/persistence/TransectFlightImpl.java 2012-08-23 15:29:20 UTC (rev 467) @@ -33,12 +33,25 @@ * Created: 13/06/12 * * @author fdesbois <desbois@codelutin.com> + * @author tchemit <chemit@codelutin.com> */ public class TransectFlightImpl extends TransectFlightAbstract { private static final long serialVersionUID = 1L; + private transient int indexInFlight; + @Override + public int getIndexInFlight() { + return indexInFlight; + } + + @Override + public void setIndexInFlight(int indexInFlight) { + this.indexInFlight = indexInFlight; + } + + @Override public Collection<ObserverPosition> getObserverPosition() { if (observerPosition == null) { observerPosition = Lists.newArrayList();