r1288 - in trunk/tutti-service/src: main/java/fr/ifremer/tutti/service test/java/fr/ifremer/tutti/service
Author: tchemit Date: 2013-10-08 17:19:57 +0200 (Tue, 08 Oct 2013) New Revision: 1288 Url: http://forge.codelutin.com/projects/tutti/repository/revisions/1288 Log: fixes #3462: [TRAIT] le tri de la liste des traits ne marche pas Modified: trunk/tutti-service/src/main/java/fr/ifremer/tutti/service/DecoratorService.java trunk/tutti-service/src/main/java/fr/ifremer/tutti/service/TuttiDecorator.java trunk/tutti-service/src/test/java/fr/ifremer/tutti/service/DecoratorServiceTest.java Modified: trunk/tutti-service/src/main/java/fr/ifremer/tutti/service/DecoratorService.java =================================================================== --- trunk/tutti-service/src/main/java/fr/ifremer/tutti/service/DecoratorService.java 2013-10-08 14:12:38 UTC (rev 1287) +++ trunk/tutti-service/src/main/java/fr/ifremer/tutti/service/DecoratorService.java 2013-10-08 15:19:57 UTC (rev 1288) @@ -24,6 +24,7 @@ * #L% */ +import com.google.common.collect.Sets; import fr.ifremer.tutti.LabelAware; import fr.ifremer.tutti.persistence.entities.data.Attachment; import fr.ifremer.tutti.persistence.entities.data.Cruise; @@ -102,7 +103,7 @@ registerTuttiDecorator(TuttiLocation.class, "${label}$s#${name}$s", SEPARATOR, " - "); registerTuttiDecorator(Cruise.class, "${name}$s", SEPARATOR, " - "); registerTuttiDecorator(TuttiProtocol.class, "${name}$s", SEPARATOR, " - "); - registerTuttiDecorator(FishingOperation.class, "${stationNumber}$s#${fishingOperationNumber}$s#${multirigAggregation}$s#${gearShootingStartDate}$td/%4$tm/%4$tY", SEPARATOR, " - "); + registerTuttiDecorator(FishingOperation.class, "${stationNumber}$s#${fishingOperationNumber}$d#${multirigAggregation}$s#${gearShootingStartDate}$td/%4$tm/%4$tY", SEPARATOR, " - "); registerTuttiDecorator(FishingOperation.class, FILE_NAME_COMPATIBLE, "${stationNumber}$s#${fishingOperationNumber}$s#${multirigAggregation}$s#${gearShootingStartDate}$td%4$tm%4$tY", SEPARATOR, "-"); registerTuttiDecorator(Gear.class, "${label}$s#${name}$s", SEPARATOR, " - "); registerTuttiDecorator(Gear.class, GEAR_WITH_RANK_ORDER, "${rankOrder}$d#${label}$s#${name}$s", SEPARATOR, " - "); @@ -129,6 +130,10 @@ registerDecorator(new SpeciesDecorator()); registerDecorator(FROM_PROTOCOL, new SpeciesFromProtocolDecorator()); registerTuttiDecorator(Caracteristic.class, CARACTERISTIC_WITH_UNIT, "${parameterName}$s#${matrixName}$s#${fractionName}$s#${methodName}$s (${unit}$s)", SEPARATOR, " - "); + + TuttiDecorator<FishingOperation> fishingOperationTuttiDecorator = (TuttiDecorator<FishingOperation>) getDecoratorByType(FishingOperation.class); + fishingOperationTuttiDecorator.setSortOnlyOnSelectedContext(true); + fishingOperationTuttiDecorator.setSortOnlyOnSelectedContextTokens(Sets.newHashSet(FishingOperation.PROPERTY_FISHING_OPERATION_NUMBER)); } public void registerTuttiDecorator(Class<?> klass, String expression, String separator, String separatorReplacement) { Modified: trunk/tutti-service/src/main/java/fr/ifremer/tutti/service/TuttiDecorator.java =================================================================== --- trunk/tutti-service/src/main/java/fr/ifremer/tutti/service/TuttiDecorator.java 2013-10-08 14:12:38 UTC (rev 1287) +++ trunk/tutti-service/src/main/java/fr/ifremer/tutti/service/TuttiDecorator.java 2013-10-08 15:19:57 UTC (rev 1288) @@ -64,6 +64,21 @@ protected boolean useCache; + /** + * To sort always on the selected context. + * + * @since 2.8 + */ + protected boolean sortOnlyOnSelectedContext; + + /** + * List of tokens to sort using the {@link #sortOnlyOnSelectedContext} mode. + * + * If the mode is not set, then won't use this. + * @since 2.8 + */ + protected Set<String> sortOnlyOnSelectedContextTokens; + public static <O> TuttiDecorator<O> newDecorator(Class<O> internalClass, String expression, String separator, @@ -129,6 +144,22 @@ cache.invalidateAll(); } + public boolean isSortOnlyOnSelectedContext() { + return sortOnlyOnSelectedContext; + } + + public void setSortOnlyOnSelectedContext(boolean sortOnlyOnSelectedContext) { + this.sortOnlyOnSelectedContext = sortOnlyOnSelectedContext; + } + + public Set<String> getSortOnlyOnSelectedContextTokens() { + return sortOnlyOnSelectedContextTokens; + } + + public void setSortOnlyOnSelectedContextTokens(Set<String> sortOnlyOnSelectedContextTokens) { + this.sortOnlyOnSelectedContextTokens = sortOnlyOnSelectedContextTokens; + } + @Override public String toString(Object bean) { O bean1 = (O) bean; @@ -218,12 +249,20 @@ @Override public void init(JXPathDecorator<O> decorator, List<O> datas) { clear(); - TuttiDecorator<O> tuttDecorator = (TuttiDecorator<O>) decorator; + TuttiDecorator<O> tuttiDecorator = (TuttiDecorator<O>) decorator; + String token = decorator.getTokens()[0]; + boolean sortOnlyOnSelectedContext = + tuttiDecorator.isSortOnlyOnSelectedContext() && tuttiDecorator.getSortOnlyOnSelectedContextTokens()!=null && tuttiDecorator.getSortOnlyOnSelectedContextTokens().contains(token); + for (O data : datas) { - if (data instanceof Number) { - valueCache.put(data, (Comparable)data); + if (sortOnlyOnSelectedContext) { + Object tokenValue = tuttiDecorator.getValue(data, token); + + valueCache.put(data, (Comparable) tokenValue); + } else if (data instanceof Number) { + valueCache.put(data, (Comparable) data); } else { - Comparable key = (Comparable) tuttDecorator.toString(data); + Comparable key = tuttiDecorator.toString(data); valueCache.put(data, key); } } Modified: trunk/tutti-service/src/test/java/fr/ifremer/tutti/service/DecoratorServiceTest.java =================================================================== --- trunk/tutti-service/src/test/java/fr/ifremer/tutti/service/DecoratorServiceTest.java 2013-10-08 14:12:38 UTC (rev 1287) +++ trunk/tutti-service/src/test/java/fr/ifremer/tutti/service/DecoratorServiceTest.java 2013-10-08 15:19:57 UTC (rev 1288) @@ -54,6 +54,7 @@ import fr.ifremer.tutti.persistence.entities.referential.Vessel; import fr.ifremer.tutti.persistence.entities.referential.Vessels; import fr.ifremer.tutti.service.config.TuttiServiceConfig; +import org.apache.commons.lang3.time.DateUtils; import org.junit.Assert; import org.junit.Before; import org.junit.Test; @@ -61,6 +62,7 @@ import org.nuiton.decorator.DecoratorUtil; import org.nuiton.decorator.JXPathDecorator; +import java.text.ParseException; import java.util.List; import static org.nuiton.i18n.I18n._; @@ -147,7 +149,46 @@ } + // see http://forge.codelutin.com/issues/3462 @Test + public void decorateFishingOperation() throws ParseException { + + JXPathDecorator<FishingOperation> d = (JXPathDecorator<FishingOperation>) assertDecoratorByTypeFound(FishingOperation.class); + + List<FishingOperation> data = Lists.newArrayList(); + + FishingOperation p0 = FishingOperations.newFishingOperation(); + p0.setStationNumber("A"); + p0.setFishingOperationNumber(1); + p0.setMultirigAggregation("1"); + p0.setGearShootingStartDate(DateUtils.parseDate("08/10/2013", "dd/MM/yyyy")); + data.add(p0); + + FishingOperation p1 = FishingOperations.newFishingOperation(); + p1.setStationNumber("A"); + p1.setFishingOperationNumber(10); + p1.setMultirigAggregation("1"); + p1.setGearShootingStartDate(DateUtils.parseDate("08/10/2013", "dd/MM/yyyy")); + data.add(p1); + + FishingOperation p2 = FishingOperations.newFishingOperation(); + p2.setStationNumber("A"); + p2.setFishingOperationNumber(2); + p2.setMultirigAggregation("1"); + p2.setGearShootingStartDate(DateUtils.parseDate("08/10/2013", "dd/MM/yyyy")); + data.add(p2); + + DecoratorUtil.sort(d, data, 0); + // A1 A10 A2 + Assert.assertEquals(Lists.newArrayList(p0, p1, p2), data); + + + DecoratorUtil.sort(d, data, 1); + // A1 A2 A10 + Assert.assertEquals(Lists.newArrayList(p0, p2, p1), data); + } + + @Test public void decorateGear() { Decorator<Gear> d = assertDecoratorByTypeFound(DecoratorService.GEAR_WITH_RANK_ORDER, Gear.class); @@ -184,7 +225,7 @@ Assert.assertEquals(gears, Lists.newArrayList(g0, g1, g2, g11)); DecoratorUtil.sort((JXPathDecorator<Gear>) d, gears, 0, true); - Assert.assertEquals(gears, Lists.newArrayList( g11,g2, g1, g0)); + Assert.assertEquals(gears, Lists.newArrayList(g11, g2, g1, g0)); }
participants (1)
-
tchemit@users.forge.codelutin.com