r568 - in trunk: sammoa-application/src/main/java/fr/ulr/sammoa/application sammoa-ui-swing/src/main/java/fr/ulr/sammoa/ui/swing sammoa-ui-swing/src/main/java/fr/ulr/sammoa/ui/swing/flight sammoa-ui-swing/src/main/java/fr/ulr/sammoa/ui/swing/flight/bar/validation sammoa-ui-swing/src/main/java/fr/ulr/sammoa/ui/swing/flight/effort sammoa-ui-swing/src/main/java/fr/ulr/sammoa/ui/swing/util
Author: fdesbois Date: 2012-09-10 17:55:43 +0200 (Mon, 10 Sep 2012) New Revision: 568 Url: http://forge.codelutin.com/repositories/revision/sammoa/568 Log: fixes #1470: improve refresh for crossingNumber and realNbTimes Modified: trunk/sammoa-application/src/main/java/fr/ulr/sammoa/application/DecoratorService.java trunk/sammoa-application/src/main/java/fr/ulr/sammoa/application/FlightService.java trunk/sammoa-ui-swing/src/main/java/fr/ulr/sammoa/ui/swing/UIDecoratorService.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/TransectFlightModel.java trunk/sammoa-ui-swing/src/main/java/fr/ulr/sammoa/ui/swing/flight/bar/validation/ValidationBarHandler.java trunk/sammoa-ui-swing/src/main/java/fr/ulr/sammoa/ui/swing/flight/effort/EffortPanelHandler.java trunk/sammoa-ui-swing/src/main/java/fr/ulr/sammoa/ui/swing/flight/effort/RouteTableModel.java trunk/sammoa-ui-swing/src/main/java/fr/ulr/sammoa/ui/swing/util/SammoaUtil.java Modified: trunk/sammoa-application/src/main/java/fr/ulr/sammoa/application/DecoratorService.java =================================================================== --- trunk/sammoa-application/src/main/java/fr/ulr/sammoa/application/DecoratorService.java 2012-09-10 15:53:25 UTC (rev 567) +++ trunk/sammoa-application/src/main/java/fr/ulr/sammoa/application/DecoratorService.java 2012-09-10 15:55:43 UTC (rev 568) @@ -80,8 +80,19 @@ decoratorProvider = new DecoratorProvider() { @Override protected void loadDecorators() { - registerJXPathDecorator(Route.class, "${routeType}$s ${beginTime}$tH:%2$tM:%2$tS"); - registerJXPathDecorator(Observation.class, "Obs_${observationNumber}$s ${observationTime}$tH:%2$tM:%2$tS"); + registerDecorator(new Decorator<Route>(Route.class) { + + @Override + public String toString(Object bean) { + Route route = (Route) bean; + String result = route.getRouteType().name(); + if (route.getEffortNumber() != null) { + result += " " + route.getEffortNumber(); + } + return result; + } + }); + registerJXPathDecorator(Observation.class, "Sighting ${observationNumber}$s"); registerJXPathDecorator(Transect.class, "${name}$s"); registerJXPathDecorator(Observer.class, "${initials}$s"); registerMultiJXPathDecorator(Strate.class, "${code}$s##${name}$s", "##", " - "); 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-09-10 15:53:25 UTC (rev 567) +++ trunk/sammoa-application/src/main/java/fr/ulr/sammoa/application/FlightService.java 2012-09-10 15:55:43 UTC (rev 568) @@ -563,6 +563,10 @@ return result; } + public Long getTransectRealNbTimes(Transect transect) { + return getTransectRealNbTimes(Lists.newArrayList(transect)).get(transect); + } + public Map<Transect, Long> getTransectRealNbTimes(Collection<Transect> transects) { Modified: trunk/sammoa-ui-swing/src/main/java/fr/ulr/sammoa/ui/swing/UIDecoratorService.java =================================================================== --- trunk/sammoa-ui-swing/src/main/java/fr/ulr/sammoa/ui/swing/UIDecoratorService.java 2012-09-10 15:53:25 UTC (rev 567) +++ trunk/sammoa-ui-swing/src/main/java/fr/ulr/sammoa/ui/swing/UIDecoratorService.java 2012-09-10 15:55:43 UTC (rev 568) @@ -29,6 +29,7 @@ import fr.ulr.sammoa.application.SammoaContext; import fr.ulr.sammoa.persistence.Strate; import fr.ulr.sammoa.ui.swing.flight.StrateModel; +import fr.ulr.sammoa.ui.swing.flight.TransectFlightModel; import fr.ulr.sammoa.ui.swing.flight.TransectModel; import jaxx.runtime.swing.renderer.DecoratorListCellRenderer; import jaxx.runtime.swing.renderer.DecoratorTableCellRenderer; @@ -53,6 +54,7 @@ // add extra ui decorators decoratorProvider.registerJXPathDecorator(TransectModel.class, "${source/name}$s"); + decoratorProvider.registerJXPathDecorator(TransectFlightModel.class, "${transect/source/name}$s (${crossingNumber}$d)"); decoratorProvider.registerDecorator(new Decorator<StrateModel>(StrateModel.class) { private static final long serialVersionUID = 1L; 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-09-10 15:53:25 UTC (rev 567) +++ trunk/sammoa-ui-swing/src/main/java/fr/ulr/sammoa/ui/swing/flight/FlightUIHandler.java 2012-09-10 15:55:43 UTC (rev 568) @@ -658,6 +658,9 @@ getModel().addPropertyChangeListener( FlightUIModel.PROPERTY_NEXT_TRANSECT, nextTransectListener); + getModel().addPropertyChangeListener( + FlightUIModel.PROPERTY_TRANSECT_FLIGHTS, removeTransectListener); + transectUi = new TransectUI(context); transectUi.addComponentListener(transectUIListener); @@ -1180,6 +1183,35 @@ } }; + protected PropertyChangeListener removeTransectListener = new PropertyChangeListener() { + + // Update transectRealNbTimes on transectFlight removal + + @Override + public void propertyChange(PropertyChangeEvent evt) { + + if (evt instanceof IndexedPropertyChangeEvent) { + int index = ((IndexedPropertyChangeEvent) evt).getIndex(); + + // REMOVE case + if (SammoaUtil.isCollectionRemoveEvent(evt)) { + + List<TransectFlightModel> oldList = + (List<TransectFlightModel>) evt.getOldValue(); + + TransectFlightModel model = oldList.get(index); + + TransectModel transectModel = model.getTransect(); + FlightService service = context.getService(FlightService.class); + Long value = service.getTransectRealNbTimes(transectModel.getSource()); + + int realNbTimes = Objects.firstNonNull(value, 0).intValue(); + transectModel.setRealNbTimes(realNbTimes); + } + } + } + }; + protected PropertyChangeListener transectFlightListener = new PropertyChangeListener() { @Override Modified: trunk/sammoa-ui-swing/src/main/java/fr/ulr/sammoa/ui/swing/flight/TransectFlightModel.java =================================================================== --- trunk/sammoa-ui-swing/src/main/java/fr/ulr/sammoa/ui/swing/flight/TransectFlightModel.java 2012-09-10 15:53:25 UTC (rev 567) +++ trunk/sammoa-ui-swing/src/main/java/fr/ulr/sammoa/ui/swing/flight/TransectFlightModel.java 2012-09-10 15:55:43 UTC (rev 568) @@ -167,6 +167,12 @@ return flightModel.getFlight(); } + public static TransectFlightModel findTransectFlightModel(Iterable<TransectFlightModel> transectFlightModels, + TransectFlight transectFlight) { + return Iterables.find( + transectFlightModels, new WithTransectFlightPredicate(transectFlight)); + } + public static int indexOfTransectFlight(Iterable<TransectFlightModel> transectFlightModels, TransectFlight transectFlight) { return Iterables.indexOf( Modified: trunk/sammoa-ui-swing/src/main/java/fr/ulr/sammoa/ui/swing/flight/bar/validation/ValidationBarHandler.java =================================================================== --- trunk/sammoa-ui-swing/src/main/java/fr/ulr/sammoa/ui/swing/flight/bar/validation/ValidationBarHandler.java 2012-09-10 15:53:25 UTC (rev 567) +++ trunk/sammoa-ui-swing/src/main/java/fr/ulr/sammoa/ui/swing/flight/bar/validation/ValidationBarHandler.java 2012-09-10 15:55:43 UTC (rev 568) @@ -26,24 +26,20 @@ import fr.ulr.sammoa.application.device.audio.AudioReader; import fr.ulr.sammoa.application.flightController.FlightController; -import fr.ulr.sammoa.persistence.Observation; -import fr.ulr.sammoa.persistence.Route; +import fr.ulr.sammoa.ui.swing.SammoaUIContext; +import fr.ulr.sammoa.ui.swing.UIDecoratorService; import fr.ulr.sammoa.ui.swing.flight.FlightUI; import fr.ulr.sammoa.ui.swing.flight.FlightUIModel; -import fr.ulr.sammoa.ui.swing.flight.TransectFlightModel; +import jaxx.runtime.JAXXObject; import jaxx.runtime.JAXXUtil; +import javax.swing.JButton; import java.beans.PropertyChangeEvent; import java.beans.PropertyChangeListener; -import static org.nuiton.i18n.I18n._; - /** @author fdesbois <fdesbois@codelutin.com> */ public class ValidationBarHandler { -// private static final Logger logger = -// LoggerFactory.getLogger(ValidationBarHandler.class); - protected final ValidationBar ui; public ValidationBarHandler(ValidationBar ui) { @@ -67,61 +63,43 @@ ui.getSoundPlayer().setReader(audioReader); getModel().addPropertyChangeListener( - FlightUIModel.PROPERTY_TRANSECT_FLIGHT_EDIT_BEAN, validTransectListener); + FlightUIModel.PROPERTY_TRANSECT_FLIGHT_EDIT_BEAN, + new ValidableChangeListener(ui, ui.getValidTransectButton())); getModel().addPropertyChangeListener( - FlightUIModel.PROPERTY_ROUTE_EDIT_BEAN, validRouteListener); + FlightUIModel.PROPERTY_ROUTE_EDIT_BEAN, + new ValidableChangeListener(ui, ui.getValidRouteButton())); getModel().addPropertyChangeListener( - FlightUIModel.PROPERTY_OBSERVATION_EDIT_BEAN, validObservationListener); + FlightUIModel.PROPERTY_OBSERVATION_EDIT_BEAN, + new ValidableChangeListener(ui, ui.getValidObservationButton())); } - protected PropertyChangeListener validTransectListener = new PropertyChangeListener() { + private static class ValidableChangeListener implements PropertyChangeListener { - @Override - public void propertyChange(PropertyChangeEvent evt) { + protected SammoaUIContext context; - TransectFlightModel newValue = (TransectFlightModel) evt.getNewValue(); + protected JButton button; - String text = null; - if (newValue != null) { - text = newValue.getTransect().getSource().getName(); - } - ui.getValidTransectButton().setText(text); + private ValidableChangeListener(JAXXObject jaxxObject, + JButton button) { + this.context = jaxxObject.getContextValue(SammoaUIContext.class); + this.button = button; } - }; - protected PropertyChangeListener validRouteListener = new PropertyChangeListener() { - @Override public void propertyChange(PropertyChangeEvent evt) { + Object newValue = evt.getNewValue(); - Route newValue = (Route) evt.getNewValue(); - - String text = null; + String text; if (newValue != null) { - text = newValue.getRouteType().name(); - if (newValue.getEffortNumber() != null) { - text += " " + newValue.getEffortNumber(); - } - } - ui.getValidRouteButton().setText(text); - } - }; + UIDecoratorService service = context.getService(UIDecoratorService.class); + text = service.getDecorator(newValue).toString(newValue); - protected PropertyChangeListener validObservationListener = new PropertyChangeListener() { - - @Override - public void propertyChange(PropertyChangeEvent evt) { - - Observation newValue = (Observation) evt.getNewValue(); - - String text = null; - if (newValue != null) { - text = _("sammoa.validable.observation") - + " " + newValue.getObservationNumber(); + } else { + text = null; } - ui.getValidObservationButton().setText(text); + button.setText(text); } - }; + } } Modified: trunk/sammoa-ui-swing/src/main/java/fr/ulr/sammoa/ui/swing/flight/effort/EffortPanelHandler.java =================================================================== --- trunk/sammoa-ui-swing/src/main/java/fr/ulr/sammoa/ui/swing/flight/effort/EffortPanelHandler.java 2012-09-10 15:53:25 UTC (rev 567) +++ trunk/sammoa-ui-swing/src/main/java/fr/ulr/sammoa/ui/swing/flight/effort/EffortPanelHandler.java 2012-09-10 15:55:43 UTC (rev 568) @@ -27,6 +27,7 @@ import com.google.common.base.Supplier; import com.google.common.collect.ImmutableList; import com.google.common.collect.Iterables; +import fr.ulr.sammoa.application.DecoratorService; import fr.ulr.sammoa.application.FlightService; import fr.ulr.sammoa.application.device.DeviceState; import fr.ulr.sammoa.application.device.DeviceStateEvent; @@ -43,6 +44,7 @@ import fr.ulr.sammoa.persistence.Position; import fr.ulr.sammoa.persistence.Route; import fr.ulr.sammoa.persistence.Routes; +import fr.ulr.sammoa.persistence.TransectFlight; import fr.ulr.sammoa.ui.swing.SammoaColors; import fr.ulr.sammoa.ui.swing.SammoaUIContext; import fr.ulr.sammoa.ui.swing.UIDecoratorService; @@ -408,8 +410,21 @@ } } - // Highlighters + // Renderers/Editors/Highlighters { + UIDecoratorService decoratorService = + context.getService(UIDecoratorService.class); + + TableCellRenderer stringRenderer = table.getDefaultRenderer(String.class); + + // TransectFlight + { + TableCellRenderer renderer = new TransectFlightCellRenderer( + stringRenderer, decoratorService, getModel()); + + table.setDefaultRenderer(TransectFlight.class, renderer); + } + table.addHighlighter(SammoaUtil.newBackgroundColorHighlighter( new RouteForSelectedTransectFlightHighlightPredicate(getModel()), SammoaColors.ROUTE_FOR_TRANSECT_ROW_COLOR) @@ -863,6 +878,46 @@ } }; + private static class TransectFlightCellRenderer implements TableCellRenderer { + + protected TableCellRenderer delegate; + + protected Decorator<TransectFlightModel> decorator; + + protected FlightUIModel model; + + public TransectFlightCellRenderer(TableCellRenderer delegate, + DecoratorService decoratorService, + FlightUIModel model) { + this.delegate = delegate; + this.decorator = decoratorService.getDecoratorByType(TransectFlightModel.class); + this.model = model; + } + + @Override + public Component getTableCellRendererComponent(JTable table, + Object value, + boolean isSelected, + boolean hasFocus, + int row, + int column) { + + Object newValue = value; + + if (value != null) { + TransectFlight transectFlight = (TransectFlight) value; + + // Retrieve the transect params from matching TransectFlightModel + TransectFlightModel transectFlightModel = + TransectFlightModel.findTransectFlightModel(model.getTransectFlights(), + transectFlight); + + newValue = decorator.toString(transectFlightModel); + } + return delegate.getTableCellRendererComponent(table, newValue, isSelected, hasFocus, row, column); + } + } + private static class ObservationPositionCellRenderer implements TableCellRenderer { protected TableCellRenderer delegate; @@ -961,40 +1016,6 @@ } } -// public static class DeletedRowHighlightPredicate<T extends Deletable> extends AbstractRowHighlightPredicate { -// -// protected FlightUIModel UIModel; -// -// protected Class<T> referenceClass; -// -// public DeletedRowHighlightPredicate(FlightUIModel UIModel, -// Class<T> referenceClass) { -// this.UIModel = UIModel; -// this.referenceClass = referenceClass; -// } -// -// @Override -// protected boolean isHighlighted(int rowIndex) { -// boolean result = getValueAt(rowIndex).isDeleted(); -// return result; -// } -// -// @Override -// protected T getValueAt(int rowIndex) { -// List<T> list; -// if (Route.class.isAssignableFrom(referenceClass)) { -// list = (List<T>) UIModel.getRoutes(); -// -// } else if (Observation.class.isAssignableFrom(referenceClass)) { -// list = (List<T>) UIModel.getObservations(); -// -// } else { -// throw new IllegalStateException("Not supported type " + referenceClass.getName()); -// } -// return list.get(rowIndex); -// } -// } - public static class RouteForSelectedTransectFlightHighlightPredicate extends AbstractRowHighlightPredicate { protected FlightUIModel UIModel; Modified: trunk/sammoa-ui-swing/src/main/java/fr/ulr/sammoa/ui/swing/flight/effort/RouteTableModel.java =================================================================== --- trunk/sammoa-ui-swing/src/main/java/fr/ulr/sammoa/ui/swing/flight/effort/RouteTableModel.java 2012-09-10 15:53:25 UTC (rev 567) +++ trunk/sammoa-ui-swing/src/main/java/fr/ulr/sammoa/ui/swing/flight/effort/RouteTableModel.java 2012-09-10 15:55:43 UTC (rev 568) @@ -27,7 +27,6 @@ import fr.ulr.sammoa.persistence.Flight; import fr.ulr.sammoa.persistence.Route; import fr.ulr.sammoa.persistence.RouteType; -import fr.ulr.sammoa.persistence.Transect; import fr.ulr.sammoa.persistence.TransectFlight; import fr.ulr.sammoa.ui.swing.flight.FlightUIModel; import fr.ulr.sammoa.ui.swing.util.SammoaUtil; @@ -137,31 +136,7 @@ } }, ROUTE_TYPE(false, RouteType.class, Route.PROPERTY_ROUTE_TYPE), - TRANSECT(false, String.class, - Route.PROPERTY_TRANSECT_FLIGHT, - TransectFlight.PROPERTY_TRANSECT, - Transect.PROPERTY_NAME - ) { - @Override - public Object getValue(Route bean, RouteTableModel model) { - Object result; - TransectFlight transectFlight = bean.getTransectFlight(); - if (transectFlight != null) { - - Transect transect = transectFlight.getTransect(); - -// int index = model.getFlight().getTransectFlightIndex(transectFlight); -// result = transect.getName() + " (" + index + ")"; - - int crossingNumber = transectFlight.getCrossingNumber(); - result = transect.getName() + " (" + crossingNumber + ")"; - - } else { - result = null; - } - return result; - } - }, + TRANSECT(false, TransectFlight.class, Route.PROPERTY_TRANSECT_FLIGHT), SEA_STATE(true, int.class, Route.PROPERTY_SEA_STATE), SWELL(true, int.class, Route.PROPERTY_SWELL), TURBIDITY(true, int.class, Route.PROPERTY_TURBIDITY), Modified: trunk/sammoa-ui-swing/src/main/java/fr/ulr/sammoa/ui/swing/util/SammoaUtil.java =================================================================== --- trunk/sammoa-ui-swing/src/main/java/fr/ulr/sammoa/ui/swing/util/SammoaUtil.java 2012-09-10 15:53:25 UTC (rev 567) +++ trunk/sammoa-ui-swing/src/main/java/fr/ulr/sammoa/ui/swing/util/SammoaUtil.java 2012-09-10 15:55:43 UTC (rev 568) @@ -24,6 +24,7 @@ */ package fr.ulr.sammoa.ui.swing.util; +import com.ezware.oxbow.swingbits.util.Preconditions; import com.google.common.base.Joiner; import com.google.common.base.Predicates; import com.google.common.base.Throwables; @@ -55,8 +56,10 @@ import java.awt.Dimension; import java.awt.event.WindowAdapter; import java.awt.event.WindowEvent; +import java.beans.PropertyChangeEvent; import java.io.File; import java.lang.reflect.InvocationTargetException; +import java.util.Collection; /** * Created: 14/06/12 @@ -131,6 +134,20 @@ return result; } + public static boolean isCollectionRemoveEvent(PropertyChangeEvent event) { + boolean result = false; + if (event.getOldValue() != null && event.getNewValue() != null) { + Preconditions.checkArgument(event.getOldValue() instanceof Collection); + Preconditions.checkArgument(event.getNewValue() instanceof Collection); + + int oldSize = ((Collection) event.getOldValue()).size(); + int newSize = ((Collection) event.getNewValue()).size(); + + result = oldSize > newSize; + } + return result; + } + public static <T> TableSelectionListener<T> addTableSelectionListener(JTable table, SelectionModelAdapter<T> selectionModelAdapter) { TableSelectionListener<T> result =
participants (1)
-
fdesbois@users.forge.codelutin.com