Author: fdesbois Date: 2012-08-09 15:50:53 +0200 (Thu, 09 Aug 2012) New Revision: 379 Url: http://forge.codelutin.com/repositories/revision/sammoa/379 Log: Improve orderings Modified: trunk/sammoa-application/src/main/java/fr/ulr/sammoa/application/FlightService.java trunk/sammoa-persistence/src/main/java/fr/ulr/sammoa/persistence/FlightDAOImpl.java trunk/sammoa-persistence/src/main/java/fr/ulr/sammoa/persistence/Flights.java trunk/sammoa-persistence/src/main/java/fr/ulr/sammoa/persistence/Strates.java trunk/sammoa-ui-swing/src/main/java/fr/ulr/sammoa/ui/swing/flight/FlightUIHandler.java trunk/sammoa-ui-swing/src/main/java/fr/ulr/sammoa/ui/swing/flight/StrateModel.java Modified: trunk/sammoa-application/src/main/java/fr/ulr/sammoa/application/FlightService.java =================================================================== --- trunk/sammoa-application/src/main/java/fr/ulr/sammoa/application/FlightService.java 2012-08-09 09:48:59 UTC (rev 378) +++ trunk/sammoa-application/src/main/java/fr/ulr/sammoa/application/FlightService.java 2012-08-09 13:50:53 UTC (rev 379) @@ -32,6 +32,7 @@ import fr.ulr.sammoa.persistence.Campaign; import fr.ulr.sammoa.persistence.Flight; import fr.ulr.sammoa.persistence.FlightDAO; +import fr.ulr.sammoa.persistence.Flights; import fr.ulr.sammoa.persistence.GeoPoint; import fr.ulr.sammoa.persistence.GeoPointDAO; import fr.ulr.sammoa.persistence.Observation; @@ -103,8 +104,10 @@ FlightDAO dao = SammoaDAOHelper.getFlightDAO(transaction); - result = dao.findAllByCampaignOrderedByBeginDateDesc(campaign); + result = dao.findAllByCampaign(campaign); + Collections.sort(result, Flights.onDate()); + } catch (TopiaException e) { throw new TopiaRuntimeException(e); 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-09 09:48:59 UTC (rev 378) +++ trunk/sammoa-persistence/src/main/java/fr/ulr/sammoa/persistence/FlightDAOImpl.java 2012-08-09 13:50:53 UTC (rev 379) @@ -27,8 +27,6 @@ import org.nuiton.topia.TopiaException; import org.nuiton.topia.TopiaRuntimeException; -import java.util.List; - /** * Created: 08/06/12 * @@ -60,23 +58,23 @@ return result; } - public List<Flight> findAllByCampaignOrderedByBeginDateDesc(Campaign campaign) { - - List<Flight> result; - - String ql = String.format("FROM %1$s WHERE %2$s = :campaign ORDER BY %3$s DESC", - FlightImpl.class.getSimpleName(), - Flight.PROPERTY_CAMPAIGN, - Flight.PROPERTY_BEGIN_DATE - ); - - try { - result = context.findAll(ql, "campaign", campaign); - - } catch (TopiaException e) { - throw new TopiaRuntimeException(e); - } - return result; - } +// public List<Flight> findAllByCampaignOrderedByBeginDateDesc(Campaign campaign) { +// +// List<Flight> result; +// +// String ql = String.format("FROM %1$s WHERE %2$s = :campaign ORDER BY %3$s DESC", +// FlightImpl.class.getSimpleName(), +// Flight.PROPERTY_CAMPAIGN, +// Flight.PROPERTY_BEGIN_DATE +// ); +// +// try { +// result = context.findAll(ql, "campaign", campaign); +// +// } catch (TopiaException e) { +// throw new TopiaRuntimeException(e); +// } +// return result; +// } } Modified: trunk/sammoa-persistence/src/main/java/fr/ulr/sammoa/persistence/Flights.java =================================================================== --- trunk/sammoa-persistence/src/main/java/fr/ulr/sammoa/persistence/Flights.java 2012-08-09 09:48:59 UTC (rev 378) +++ trunk/sammoa-persistence/src/main/java/fr/ulr/sammoa/persistence/Flights.java 2012-08-09 13:50:53 UTC (rev 379) @@ -25,7 +25,11 @@ import com.google.common.base.Function; import com.google.common.base.Predicate; +import com.google.common.collect.ComparisonChain; +import com.google.common.collect.Ordering; +import java.util.Comparator; + /** * Created: 19/07/12 * @@ -36,6 +40,10 @@ private Flights() { // static class do not have instanciation } + + public static Comparator<Flight> onDate() { + return ON_DATE_COMPARATOR; + } public static Function<Flight, String> toSystemId() { return TO_SYSTEM_ID_FUNCTION; @@ -80,4 +88,33 @@ return input == null || systemId.equals(input.getSystemId()); } } + + protected static Comparator<Flight> ON_DATE_COMPARATOR = + new Comparator<Flight>() { + + @Override + public int compare(Flight flight1, Flight flight2) { + int result = ComparisonChain + .start() + // on beginDate, first null + .compare( + flight1.getBeginDate(), + flight2.getBeginDate(), + Ordering.natural().reverse().nullsFirst() + ) + // on endDate null + .compareTrueFirst( + flight1.getEndDate() == null, + flight2.getEndDate() == null + ) + // on flightNumber + .compare( + flight1.getFlightNumber(), + flight2.getFlightNumber(), + Ordering.natural().reverse() + ) + .result(); + return result; + } + }; } Modified: trunk/sammoa-persistence/src/main/java/fr/ulr/sammoa/persistence/Strates.java =================================================================== --- trunk/sammoa-persistence/src/main/java/fr/ulr/sammoa/persistence/Strates.java 2012-08-09 09:48:59 UTC (rev 378) +++ trunk/sammoa-persistence/src/main/java/fr/ulr/sammoa/persistence/Strates.java 2012-08-09 13:50:53 UTC (rev 379) @@ -26,6 +26,7 @@ import com.google.common.base.Function; import com.google.common.base.Preconditions; import com.google.common.base.Predicate; +import com.google.common.collect.Ordering; import java.util.Comparator; @@ -89,19 +90,9 @@ @Override public int compare(Strate o1, Strate o2) { - int result; - if (o1 == null && o2 != null) { - result = -1; - - } else if (o1 != null && o2 == null) { - result = 1; - - } else if (o1 == null) { - result = 0; - - } else { - result = o1.getCode().compareTo(o2.getCode()); - } + int result = Ordering.natural() + .nullsFirst() + .compare(o1.getCode(), o2.getCode()); return result; } }; Modified: trunk/sammoa-ui-swing/src/main/java/fr/ulr/sammoa/ui/swing/flight/FlightUIHandler.java =================================================================== --- trunk/sammoa-ui-swing/src/main/java/fr/ulr/sammoa/ui/swing/flight/FlightUIHandler.java 2012-08-09 09:48:59 UTC (rev 378) +++ trunk/sammoa-ui-swing/src/main/java/fr/ulr/sammoa/ui/swing/flight/FlightUIHandler.java 2012-08-09 13:50:53 UTC (rev 379) @@ -305,7 +305,7 @@ } List<StrateModel> result = - Ordering.from(StrateModel.onCode()).sortedCopy(strateMap.values()); + Ordering.natural().sortedCopy(strateMap.values()); result.add(0, strateAll); Modified: trunk/sammoa-ui-swing/src/main/java/fr/ulr/sammoa/ui/swing/flight/StrateModel.java =================================================================== --- trunk/sammoa-ui-swing/src/main/java/fr/ulr/sammoa/ui/swing/flight/StrateModel.java 2012-08-09 09:48:59 UTC (rev 378) +++ trunk/sammoa-ui-swing/src/main/java/fr/ulr/sammoa/ui/swing/flight/StrateModel.java 2012-08-09 13:50:53 UTC (rev 379) @@ -29,7 +29,6 @@ import fr.ulr.sammoa.persistence.Strates; import fr.ulr.sammoa.ui.swing.BaseModel; -import java.util.Comparator; import java.util.List; /** @@ -37,7 +36,7 @@ * * @author fdesbois <desbois@codelutin.com> */ -public class StrateModel extends BaseModel { +public class StrateModel extends BaseModel implements Comparable<StrateModel> { private static final long serialVersionUID = 1L; @@ -76,28 +75,16 @@ firePropertyChange(PROPERTY_TRANSECTS, oldValue, transects); } - public static Comparator<StrateModel> onCode() { - return ON_CODE_COMPARATOR; + @Override + public int compareTo(StrateModel o) { + int result = Strates.onCode().compare(getSource(), o.getSource()); + return result; } public static Predicate<StrateModel> withStrate(Strate strate) { return new StrateModelWithStratePredicate(strate); } - protected static Comparator<StrateModel> ON_CODE_COMPARATOR = - new Comparator<StrateModel>() { - - Comparator<Strate> strateComparator = Strates.onCode(); - - @Override - public int compare(StrateModel o1, StrateModel o2) { - Strate strate1 = o1.getSource(); - Strate strate2 = o2.getSource(); - int result = strateComparator.compare(strate1, strate2); - return result; - } - }; - protected static class StrateModelWithStratePredicate implements Predicate<StrateModel> {