r4405 - in trunk/src: main/java/fr/ifremer/isisfish/logging test/java/fr/ifremer/isisfish/logging
Author: echatellier Date: 2017-03-17 10:15:03 +0100 (Fri, 17 Mar 2017) New Revision: 4405 Url: http://forge.codelutin.com/projects/isis-fish/repository/revisions/4405 Log: refs #8451: Log de toutes les modifications de la base Added: trunk/src/test/java/fr/ifremer/isisfish/logging/RegionChangeLoggerTest.java Modified: trunk/src/main/java/fr/ifremer/isisfish/logging/RegionChangeLogger.java Modified: trunk/src/main/java/fr/ifremer/isisfish/logging/RegionChangeLogger.java =================================================================== --- trunk/src/main/java/fr/ifremer/isisfish/logging/RegionChangeLogger.java 2017-03-16 13:42:46 UTC (rev 4404) +++ trunk/src/main/java/fr/ifremer/isisfish/logging/RegionChangeLogger.java 2017-03-17 09:15:03 UTC (rev 4405) @@ -64,9 +64,13 @@ /** Context. */ protected TopiaContext context; + /** Output log file. */ + protected File logFile; + public RegionChangeLogger(RegionStorage regionStorage, TopiaContext context) { this.regionStorage = regionStorage; this.context = context; + logFile = new File(regionStorage.getDirectory(), CHANGES_FILE_NAME); } @Override @@ -94,7 +98,11 @@ String oldValueString = oldValue != null ? oldValue.toString() : ""; Object newValue = event.getState()[dirtyProperty]; String newValueString = newValue != null ? newValue.toString() : ""; - addLogLine("UPDATE", clazz, event.getEntity(), fieldName, oldValueString, newValueString); + + // on ne log que s'il y a vraiment un changement + if (!StringUtils.equals(oldValueString, newValueString)) { + addLogLine("UPDATE", clazz, event.getEntity(), fieldName, oldValueString, newValueString); + } } } } @@ -110,12 +118,9 @@ protected void addLogLine(String changeType, Class<? extends TopiaEntity> clazz, Object entity, String field, String oldValue, String newValue) { - // on ne log que s'il y a vraiment un changement - if (!StringUtils.equals(oldValue, newValue)) { - String date = DateFormatUtils.format(new Date(), "yyyy/MM/dd HH:mm:ss"); - String entityDisplayInfo = getEntityDisplayInfo(entity); - addLine(date, changeType, clazz.getSimpleName().replace("Impl", ""), entityDisplayInfo, field, oldValue, newValue); - } + String date = DateFormatUtils.format(new Date(), "yyyy/MM/dd HH:mm:ss"); + String entityDisplayInfo = getEntityDisplayInfo(entity); + addLine(date, changeType, clazz.getSimpleName().replace("Impl", ""), entityDisplayInfo, field, oldValue, newValue); } @@ -127,13 +132,12 @@ * @param data data to add */ protected void addLine(String... data) { - File outFile = new File(regionStorage.getDirectory(), CHANGES_FILE_NAME); - boolean fileExists = outFile.length() > 0; + boolean fileExists = logFile.length() > 0; - try (CSVWriter out = new CSVWriter(new BufferedWriter(new FileWriter(outFile, true)), CSV_SEPARATOR)) { + try (CSVWriter out = new CSVWriter(new BufferedWriter(new FileWriter(logFile, true)), CSV_SEPARATOR)) { // add header if necessary if (!fileExists) { - out.writeNext(new String[] {"date","class","entity","field","oldvalue","newvalue"}); + out.writeNext(new String[] {"date","type","entity","name","field","oldvalue","newvalue"}); } out.writeNext(data); Added: trunk/src/test/java/fr/ifremer/isisfish/logging/RegionChangeLoggerTest.java =================================================================== --- trunk/src/test/java/fr/ifremer/isisfish/logging/RegionChangeLoggerTest.java (rev 0) +++ trunk/src/test/java/fr/ifremer/isisfish/logging/RegionChangeLoggerTest.java 2017-03-17 09:15:03 UTC (rev 4405) @@ -0,0 +1,88 @@ +package fr.ifremer.isisfish.logging; + +import fr.ifremer.isisfish.AbstractIsisFishTest; +import fr.ifremer.isisfish.IsisFishDAOHelper; +import fr.ifremer.isisfish.datastore.RegionStorage; +import fr.ifremer.isisfish.datastore.StorageException; +import fr.ifremer.isisfish.entities.Cell; +import fr.ifremer.isisfish.entities.CellDAO; +import fr.ifremer.isisfish.entities.CellImpl; +import fr.ifremer.isisfish.entities.FisheryRegion; +import fr.ifremer.isisfish.entities.FisheryRegionDAO; +import org.apache.commons.io.FileUtils; +import org.junit.Assert; +import org.junit.Test; +import org.nuiton.topia.TopiaContext; + +import java.io.IOException; +import java.nio.charset.StandardCharsets; +import java.util.List; + +public class RegionChangeLoggerTest extends AbstractIsisFishTest { + + /** + * Test que les evenements sur les entités existantes sont bien logués. + * + * @throws IOException si le fichier ne peux pas être lu + * @throws StorageException + */ + @Test + public void testLoggingOnExistingEntities() throws IOException, StorageException { + RegionStorage regionStorage = RegionStorage.getRegion("BaseMotosICA"); + TopiaContext storage = regionStorage.getStorage(); + TopiaContext topiaContext = storage.beginTransaction(); + RegionChangeLogger regionChangeLogger = new RegionChangeLogger(regionStorage, topiaContext); + topiaContext.addTopiaEntityListener(regionChangeLogger); + + FisheryRegionDAO fisheryRegionDAO = IsisFishDAOHelper.getFisheryRegionDAO(topiaContext); + FisheryRegion baseMotosICA = fisheryRegionDAO.findByName("BaseMotosICA"); + baseMotosICA.setCellLengthLongitude(0.25f); + baseMotosICA.setCellLengthLatitude(0.25f); + baseMotosICA.update(); + topiaContext.commitTransaction(); + regionStorage.closeStorage(); + + List<String> lines = FileUtils.readLines(regionChangeLogger.logFile, StandardCharsets.UTF_8); + Assert.assertEquals(3, lines.size()); + Assert.assertTrue(lines.get(0).contains("\"date\";\"type\";\"entity\";\"name\";\"field\";\"oldvalue\";\"newvalue\"")); + Assert.assertTrue(lines.get(1).contains("\"cellLengthLongitude\";\"0.5\";\"0.25\"")); + Assert.assertTrue(lines.get(2).contains("\"cellLengthLatitude\";\"0.5\";\"0.25\"")); + } + + /** + * Test que les evenements sur les nouvelles entités sont bien logués (ca ne fonctionnait pas à la première + * implémentation pour les nouvelles entités). + * + * @throws IOException si le fichier ne peux pas être lu + * @throws StorageException + */ + @Test + public void testLoggingOnNewEntities() throws IOException, StorageException { + RegionStorage regionStorage = RegionStorage.getRegion("BaseMotosICA"); + TopiaContext storage = regionStorage.getStorage(); + TopiaContext topiaContext = storage.beginTransaction(); + RegionChangeLogger regionChangeLogger = new RegionChangeLogger(regionStorage, topiaContext); + topiaContext.addTopiaEntityListener(regionChangeLogger); + CellDAO cellDAO = IsisFishDAOHelper.getCellDAO(topiaContext); + + Cell cell = new CellImpl(); + cell.setName("test"); + cellDAO.create(cell); + + Cell cell2 = cellDAO.create("name", "test 2"); + cell2.setName("test 2 (bis)"); + cellDAO.update(cell2); + topiaContext.commitTransaction(); + + cellDAO.delete(cell); + cellDAO.delete(cell2); + topiaContext.commitTransaction(); + regionStorage.closeStorage(); + + List<String> lines = FileUtils.readLines(regionChangeLogger.logFile, StandardCharsets.UTF_8); + Assert.assertEquals(6, lines.size()); + Assert.assertTrue(lines.get(0).contains("\"date\";\"type\";\"entity\";\"name\";\"field\";\"oldvalue\";\"newvalue\"")); + Assert.assertTrue(lines.get(1).contains("\"CREATE\";\"Cell\";\"test\"")); + Assert.assertTrue(lines.get(5).contains("\"DELETE\";\"Cell\";\"test 2 (bis)\"")); + } +} Property changes on: trunk/src/test/java/fr/ifremer/isisfish/logging/RegionChangeLoggerTest.java ___________________________________________________________________ Added: svn:keywords ## -0,0 +1 ## +Author Date Id Revision HeadURL \ No newline at end of property Added: svn:eol-style ## -0,0 +1 ## +native \ No newline at end of property
participants (1)
-
echatellier@users.forge.codelutin.com