Author: tchemit Date: 2011-12-13 18:20:56 +0100 (Tue, 13 Dec 2011) New Revision: 181 Url: http://forge.codelutin.com/repositories/revision/echobase/181 Log: fix loadRow when property is id (avoid conflict with topiaId) Modified: trunk/echobase-services/src/main/java/fr/ifremer/echobase/services/DbEditorService.java trunk/echobase-services/src/main/java/fr/ifremer/echobase/services/DbImportExportService.java Modified: trunk/echobase-services/src/main/java/fr/ifremer/echobase/services/DbEditorService.java =================================================================== --- trunk/echobase-services/src/main/java/fr/ifremer/echobase/services/DbEditorService.java 2011-12-13 17:19:39 UTC (rev 180) +++ trunk/echobase-services/src/main/java/fr/ifremer/echobase/services/DbEditorService.java 2011-12-13 17:20:56 UTC (rev 181) @@ -106,7 +106,28 @@ String sidx, Boolean ascendantOrder) { - return getDatas(entityType, pager, sidx, ascendantOrder, true); + TableMeta meta = getTableMeta(entityType); + + List<TopiaEntity> entities = getEntities(meta, + pager, + sidx, + ascendantOrder, + null + ); + + Map<?, ?>[] rows = new Map[entities.size()]; + + ImportExportModel<TopiaEntity> model = buildForLoad(meta, "id", true); + + int i = 0; + for (Object o : entities) { + TopiaEntity entity = (TopiaEntity) o; + Map<String, Object> row = loadRow(entity, model); + rows[i++] = row; + } + return rows; + +// return getDatas(entityType, pager, sidx, ascendantOrder, true); } @@ -169,41 +190,13 @@ } } - public Map<?, ?>[] getDatas(EchoBaseEntityEnum entityType, - Pager pager, - String sidx, - Boolean ascendantOrder, - boolean addDecorated) { - - TableMeta meta = getTableMeta(entityType); - - List<TopiaEntity> entities = getEntities(meta, - pager, - sidx, - ascendantOrder, - null - ); - - Map<?, ?>[] rows = new Map[entities.size()]; - - ImportExportModel<TopiaEntity> model = buildForLoad(meta, addDecorated); - - int i = 0; - for (Object o : entities) { - TopiaEntity entity = (TopiaEntity) o; - Map<String, Object> row = loadRow(entity, model); - rows[i++] = row; - } - return rows; - } - public Map<?, ?> getData(TableMeta tableMeta, String topiaId) { EchoBaseEntityEnum entityEnum = tableMeta.getSource(); try { TopiaDAO<?> dao = getDAO(entityEnum.getContract()); TopiaEntity entity = dao.findByTopiaId(topiaId); - ImportExportModel<TopiaEntity> model = buildForLoad(tableMeta, true); + ImportExportModel<TopiaEntity> model = buildForLoad(tableMeta, TopiaEntity.TOPIA_ID, true); return loadRow(entity, model); } catch (TopiaException eee) { throw new EchoBaseTechnicalException("Could not obtain data", eee); @@ -497,9 +490,17 @@ } catch (Exception eee) { throw new EchoBaseTechnicalException( "Could not obtain property [" + propertyName + - "] value ", eee); + "] value from entity " + entity.getTopiaId(), eee); } - String formatedValue = column.formatValue(value); + String formatedValue; + try { + formatedValue = column.formatValue(value); + } catch (Exception eee) { + throw new EchoBaseTechnicalException( + "Could not format property [" + propertyName + + "] from value [" + value + + "] from entity " + entity.getTopiaId(), eee); + } row.put(propertyName, formatedValue); } @@ -607,12 +608,13 @@ } protected <E extends TopiaEntity> ImportExportModel<E> buildForLoad(TableMeta meta, + String idName, boolean addDecorated) { EntityCsvModel<E> model = EntityCsvModel.newModel( getConfiguration().getCsvSeparator(), meta, - "id" + idName ); for (ColumnMeta columnMeta : meta) { @@ -638,6 +640,18 @@ ); } + } else if ("id".equals(propertyName)) { + + if ("id".equals(idName)) { + + // there will be a conflict with this meta, rename it to ID + model.addDefaultColumn("ID", propertyName, type); + } else { + + // no id conflict + model.addDefaultColumn(propertyName, type); + + } } else { model.addDefaultColumn(propertyName, type); } Modified: trunk/echobase-services/src/main/java/fr/ifremer/echobase/services/DbImportExportService.java =================================================================== --- trunk/echobase-services/src/main/java/fr/ifremer/echobase/services/DbImportExportService.java 2011-12-13 17:19:39 UTC (rev 180) +++ trunk/echobase-services/src/main/java/fr/ifremer/echobase/services/DbImportExportService.java 2011-12-13 17:20:56 UTC (rev 181) @@ -31,6 +31,7 @@ import fr.ifremer.echobase.entities.EchoBaseEntityEnum; import fr.ifremer.echobase.entities.EchoBaseUser; import fr.ifremer.echobase.entities.EntitiesUtil; +import fr.ifremer.echobase.entities.EntityModificationLog; import fr.ifremer.echobase.entities.meta.AssociationMeta; import fr.ifremer.echobase.entities.meta.MetaFilenameAware; import fr.ifremer.echobase.entities.meta.TableMeta; @@ -76,8 +77,9 @@ * @param model model of the db import operation * @param user user which perform the import * @throws IOException if any io exception while import + * @throws TopiaException if any pb while topia treatment */ - public void importDb(ImportDbConfiguration model, EchoBaseUser user) throws IOException { + public void importDb(ImportDbConfiguration model, EchoBaseUser user) throws IOException, TopiaException { File file = model.getInput().getFile(); @@ -143,6 +145,16 @@ if (log.isInfoEnabled()) { log.info("Import done with user " + user.getEmail()); } + TopiaDAO<EntityModificationLog> dao = + getDAO(EntityModificationLog.class); + + dao.create( + EntityModificationLog.PROPERTY_ENTITY_TYPE, "import db", + EntityModificationLog.PROPERTY_ENTITY_ID, "Complete db", + EntityModificationLog.PROPERTY_MODIFICATION_USER, user.getEmail(), + EntityModificationLog.PROPERTY_MODIFICATION_DATE, newDate(), + EntityModificationLog.PROPERTY_MODIFICATION_TEXT, "import db from file " + file + ); commitTransaction("Could not commit db import from file " + file); } finally { zipFile.close(); @@ -300,20 +312,20 @@ } try { - EchoBaseEntityEnum sourceType = meta.getSource(); + EchoBaseEntityEnum sourceType = meta.getSource(); // EchoBaseEntityEnum targetType = meta.getTarget(); - Import<E> importer = Import.newImport(csvModel, reader); + Import<E> importer = Import.newImport(csvModel, reader); TopiaDAO<E> sourceDAO = getDAO(sourceType); // TopiaDAO<TopiaEntity> targetDAO = getDAO(targetType); - List<E> sourceEntities = getEntities(sourceType); - Map<String, E> sourcesById = - Maps.uniqueIndex(sourceEntities, EchoBaseFunctions.TO_TOPIAID); - try { - for (E row : importer) { - E entityToSave = sourcesById.get(row.getTopiaId()); - Collection<TopiaEntity> assoc = meta.getChilds(row); - meta.setChilds(entityToSave, assoc); + List<E> sourceEntities = getEntities(sourceType); + Map<String, E> sourcesById = + Maps.uniqueIndex(sourceEntities, EchoBaseFunctions.TO_TOPIAID); + try { + for (E row : importer) { + E entityToSave = sourcesById.get(row.getTopiaId()); + Collection<TopiaEntity> assoc = meta.getChilds(row); + meta.setChilds(entityToSave, assoc); // sourceDAO.update(entityToSave); // E entityToSave = sourceDAO.findByTopiaId(row.getTopiaId()); @@ -335,13 +347,13 @@ // result.incrementsNumberUpdated(); // } // meta.setChilds(entityToSave, associationToSave); + } + } finally { + + importer.close(); } - } finally { - importer.close(); - } - - commitTransaction("Could not commit transaction"); + commitTransaction("Could not commit transaction"); } catch (TopiaException eee) { throw new EchoBaseTechnicalException(eee); }