Author: tchemit Date: 2012-08-20 15:45:15 +0200 (Mon, 20 Aug 2012) New Revision: 443 Url: http://forge.codelutin.com/repositories/revision/sammoa/443 Log: add closeable on services and context + close flightcontroller when leaving the flightui Modified: trunk/sammoa-application/src/main/java/fr/ulr/sammoa/application/SammoaContext.java trunk/sammoa-application/src/main/java/fr/ulr/sammoa/application/SammoaService.java trunk/sammoa-application/src/main/java/fr/ulr/sammoa/application/SammoaServiceSupport.java trunk/sammoa-persistence/src/main/java/fr/ulr/sammoa/persistence/SammoaPersistence.java trunk/sammoa-ui-swing/src/main/java/fr/ulr/sammoa/ui/swing/MainUIHandler.java trunk/sammoa-ui-swing/src/main/java/fr/ulr/sammoa/ui/swing/SammoaUIContext.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/home/HomeUI.css trunk/sammoa-ui-swing/src/main/java/fr/ulr/sammoa/ui/swing/home/HomeUIHandler.java trunk/sammoa-ui-swing/src/main/java/fr/ulr/sammoa/ui/swing/home/HomeUIModel.java Modified: trunk/sammoa-application/src/main/java/fr/ulr/sammoa/application/SammoaContext.java =================================================================== --- trunk/sammoa-application/src/main/java/fr/ulr/sammoa/application/SammoaContext.java 2012-08-20 12:44:55 UTC (rev 442) +++ trunk/sammoa-application/src/main/java/fr/ulr/sammoa/application/SammoaContext.java 2012-08-20 13:45:15 UTC (rev 443) @@ -29,9 +29,12 @@ import com.google.common.cache.CacheLoader; import com.google.common.cache.LoadingCache; import fr.ulr.sammoa.persistence.SammoaPersistence; +import org.apache.commons.io.IOUtils; import org.slf4j.Logger; import org.slf4j.LoggerFactory; +import java.io.Closeable; +import java.io.IOException; import java.lang.reflect.Constructor; import java.util.concurrent.ExecutionException; @@ -40,7 +43,7 @@ * * @author fdesbois <desbois@codelutin.com> */ -public class SammoaContext { +public class SammoaContext implements Closeable { /** Logger. */ private static final Logger logger = LoggerFactory.getLogger(SammoaContext.class); @@ -95,17 +98,16 @@ throw new SammoaTechnicalException( "Could not instanciate service " + serviceType, e); } + } -// try { -// Constructor<S> constructor = serviceType.getConstructor(); -// Preconditions.checkNotNull(constructor); -// S s = constructor.newInstance(); -// s.setSammoaContext(this); -// return s; -// } catch (Exception e) { -// throw new SammoaTechnicalException( -// "Could not instanciate service " + serviceType, e); -// } + public <S extends SammoaService> void closeService(S service) throws IOException { + + services.invalidate(service.getClass()); + + if (logger.isInfoEnabled()) { + logger.info("Close service {}", service); + } + service.close(); } public void open() { @@ -115,7 +117,17 @@ ); } - public void close() { - persistence.close(); + @Override + public void close() throws IOException { + + IOUtils.closeQuietly(persistence); + + for (SammoaService service : services.asMap().values()) { + if (logger.isInfoEnabled()) { + logger.info("Close service {}", service); + } + IOUtils.closeQuietly(service); + } + services.cleanUp(); } } Modified: trunk/sammoa-application/src/main/java/fr/ulr/sammoa/application/SammoaService.java =================================================================== --- trunk/sammoa-application/src/main/java/fr/ulr/sammoa/application/SammoaService.java 2012-08-20 12:44:55 UTC (rev 442) +++ trunk/sammoa-application/src/main/java/fr/ulr/sammoa/application/SammoaService.java 2012-08-20 13:45:15 UTC (rev 443) @@ -23,6 +23,8 @@ * #L% */ +import java.io.Closeable; + /** * Contract for any saommoa service. * <p/> @@ -31,13 +33,13 @@ * A default support implement in given: {@link SammoaServiceSupport}. * <p/> * To use a such service, you should not instanciate it by your self but prefer - * use the servie factory method: {@link SammoaContext#newService(Class)}. + * use the servie factory method: {@link SammoaContext#getService(Class)}. * * @author tchemit <chemit@codelutin.com> * @see SammoaServiceSupport * @since 0.6 */ -public interface SammoaService { +public interface SammoaService extends Closeable { void setSammoaContext(SammoaContext context); } Modified: trunk/sammoa-application/src/main/java/fr/ulr/sammoa/application/SammoaServiceSupport.java =================================================================== --- trunk/sammoa-application/src/main/java/fr/ulr/sammoa/application/SammoaServiceSupport.java 2012-08-20 12:44:55 UTC (rev 442) +++ trunk/sammoa-application/src/main/java/fr/ulr/sammoa/application/SammoaServiceSupport.java 2012-08-20 13:45:15 UTC (rev 443) @@ -29,6 +29,7 @@ import org.nuiton.topia.TopiaContext; import java.io.File; +import java.io.IOException; /** * Sammoa service support. @@ -76,4 +77,9 @@ protected void endTransaction(TopiaContext tx) { persistence.endTransaction(tx); } + + @Override + public void close() throws IOException { + // by default nothing to close + } } Modified: trunk/sammoa-persistence/src/main/java/fr/ulr/sammoa/persistence/SammoaPersistence.java =================================================================== --- trunk/sammoa-persistence/src/main/java/fr/ulr/sammoa/persistence/SammoaPersistence.java 2012-08-20 12:44:55 UTC (rev 442) +++ trunk/sammoa-persistence/src/main/java/fr/ulr/sammoa/persistence/SammoaPersistence.java 2012-08-20 13:45:15 UTC (rev 443) @@ -33,6 +33,7 @@ import org.nuiton.topia.persistence.TopiaEntity; import org.nuiton.topia.persistence.metadata.DbMeta; +import java.io.Closeable; import java.util.Properties; /** @@ -48,7 +49,7 @@ * * @author fdesbois <desbois@codelutin.com> */ -public class SammoaPersistence { +public class SammoaPersistence implements Closeable { protected static SammoaPersistence instance; @@ -181,6 +182,7 @@ * * @see AutoSaveListener#stop() */ + @Override public void close() { autoSaveListener.stop(); if (rootContext != null) { Modified: trunk/sammoa-ui-swing/src/main/java/fr/ulr/sammoa/ui/swing/MainUIHandler.java =================================================================== --- trunk/sammoa-ui-swing/src/main/java/fr/ulr/sammoa/ui/swing/MainUIHandler.java 2012-08-20 12:44:55 UTC (rev 442) +++ trunk/sammoa-ui-swing/src/main/java/fr/ulr/sammoa/ui/swing/MainUIHandler.java 2012-08-20 13:45:15 UTC (rev 443) @@ -236,8 +236,8 @@ // Re-open the context context.open(); - MainUI ui = new MainUI(context); - ui.setVisible(true); + MainUI mainUI = new MainUI(context); + mainUI.setVisible(true); } public void showConfig() { Modified: trunk/sammoa-ui-swing/src/main/java/fr/ulr/sammoa/ui/swing/SammoaUIContext.java =================================================================== --- trunk/sammoa-ui-swing/src/main/java/fr/ulr/sammoa/ui/swing/SammoaUIContext.java 2012-08-20 12:44:55 UTC (rev 442) +++ trunk/sammoa-ui-swing/src/main/java/fr/ulr/sammoa/ui/swing/SammoaUIContext.java 2012-08-20 13:45:15 UTC (rev 443) @@ -28,15 +28,17 @@ import fr.ulr.sammoa.application.SammoaConfig; import fr.ulr.sammoa.application.SammoaContext; import fr.ulr.sammoa.application.SammoaService; -import fr.ulr.sammoa.application.flightController.FlightController; import fr.ulr.sammoa.persistence.Campaign; import fr.ulr.sammoa.persistence.Flight; import fr.ulr.sammoa.ui.swing.flight.FlightUIHandler; -import fr.ulr.sammoa.ui.swing.flight.FlightUIModel; +import org.apache.commons.io.IOUtils; import org.nuiton.widget.SwingSession; +import java.io.Closeable; +import java.io.IOException; + /** @author sletellier <letellier@codelutin.com> */ -public class SammoaUIContext { +public class SammoaUIContext implements Closeable { private static SammoaUIContext uiContext; @@ -46,12 +48,6 @@ protected FlightUIHandler flightUIHandler; - @Deprecated - protected FlightUIModel flightUIModel; - - @Deprecated - protected FlightController flightController; - protected SwingSession swingSession; protected String campaignId; @@ -59,6 +55,7 @@ protected String flightId; public static SammoaUIContext newUIContext(SammoaContext context) { + Preconditions.checkNotNull(context); uiContext = new SammoaUIContext(context); return uiContext; } @@ -82,6 +79,10 @@ return context.getService(serviceType); } + public <S extends SammoaService> void closeService(S service) throws IOException { + context.closeService(service); + } + public SammoaConfig getConfig() { return context.getConfig(); } @@ -133,6 +134,9 @@ public void changeScreen(SammoaScreen newScreen, Campaign campaign, Flight flight) { + + Preconditions.checkNotNull(mainUIHandler); + if (campaign != null) { this.campaignId = campaign.getTopiaId(); } @@ -144,6 +148,9 @@ } public void setStatusMessage(String message) { + + Preconditions.checkNotNull(mainUIHandler); + mainUIHandler.getUI().getStatus().setStatus(message); } @@ -151,17 +158,14 @@ context.open(); } + @Override public void close() { - if (flightController != null) { - flightController.close(); - flightController = null; - } - flightUIModel = null; // Clear data references + mainUIHandler = null; campaignId = null; flightId = null; - context.close(); + IOUtils.closeQuietly(context); } } 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-20 12:44:55 UTC (rev 442) +++ trunk/sammoa-ui-swing/src/main/java/fr/ulr/sammoa/ui/swing/flight/FlightUIHandler.java 2012-08-20 13:45:15 UTC (rev 443) @@ -126,6 +126,7 @@ import java.beans.PropertyChangeEvent; import java.beans.PropertyChangeListener; import java.io.File; +import java.io.IOException; import java.util.Arrays; import java.util.List; import java.util.Map; @@ -146,8 +147,6 @@ protected SammoaUIContext context; - protected FlightController flightController; - protected FlightUI ui; protected long uiStartTime; @@ -164,6 +163,8 @@ protected final UIDecoratorService decoratorService; + protected final FlightController flightController; + public FlightUIHandler(SammoaUIContext context, FlightUI ui) { this.context = context; this.context.setFlightUIHandler(this); @@ -173,6 +174,9 @@ this.flightService = context.getService(FlightService.class); this.referentialService = context.getService(ReferentialService.class); this.decoratorService = context.getService(UIDecoratorService.class); + + //TODO use the correct flightController from the flyMode + this.flightController = context.getService(FlightControllerDefault.class); } public FlightController getFlightController() { @@ -225,10 +229,6 @@ startTime = timeLog.log(startTime, "beforeInitUI", "entities are loaded"); - context.getService(FlightControllerDefault.class); - - flightController = context.getService(FlightControllerDefault.class); - try { flightController.openGpsDevice(context.getConfig().getGpsConfig()); } catch (DeviceTechnicalException ex) { @@ -419,12 +419,12 @@ } ui.getStrateCombobox().setRenderer( - decoratorService.newListCellRender(Strate.class)); + decoratorService.newListCellRender(StrateModel.class)); ui.getObserverSelector().setRenderer( new ObserverListCellRenderer(observerListCellRenderer) ); ui.getTransectList().setCellRenderer( - new TransectListCellRenderer(decoratorService.newListCellRender((Transect.class)))); + new TransectListCellRenderer(decoratorService.newListCellRender((TransectModel.class)))); long startTime = TimeLog.getTime(); @@ -477,8 +477,16 @@ @Override public void onCloseUI() { - flightController.close(); transectUi.removeComponentListener(transectUIListener); + + try { + context.closeService(flightController); + } catch (IOException e) { + if (logger.isErrorEnabled()) { + logger.error("Could not close flightController", e); + } + } + } public ActionMap getActionMap() { Modified: trunk/sammoa-ui-swing/src/main/java/fr/ulr/sammoa/ui/swing/home/HomeUI.css =================================================================== --- trunk/sammoa-ui-swing/src/main/java/fr/ulr/sammoa/ui/swing/home/HomeUI.css 2012-08-20 12:44:55 UTC (rev 442) +++ trunk/sammoa-ui-swing/src/main/java/fr/ulr/sammoa/ui/swing/home/HomeUI.css 2012-08-20 13:45:15 UTC (rev 443) @@ -29,7 +29,6 @@ #campaignCombobox { model: {campaignListModel}; - /*renderer: {new DecoratorProviderListCellRenderer(getHandler().getDecoratorProvider())};*/ } #systemIdLabel { @@ -37,7 +36,7 @@ } #systemIdCombobox { - enabled: {getModel().getCampaign() != null}; + enabled: {model.isCampaignFound()}; model: {systemIdListModel}; } @@ -46,13 +45,12 @@ } #flightCombobox { - enabled: {getModel().getCampaign() != null}; + enabled: {model.isCampaignFound()}; model: {flightListModel}; - /*renderer: {new DecoratorProviderListCellRenderer(getHandler().getDecoratorProvider())};*/ } #editCampaignButton { - enabled: {getModel().getCampaign() != null}; + enabled: {model.isCampaignFound()}; text: "sammoa.action.edit"; } @@ -74,10 +72,10 @@ #onBoardButton { text: "sammoa.action.onBoard"; - enabled: {!getModel().isFlightEnded()}; + enabled: {model.isCampaignFound() && !getModel().isFlightEnded()}; } #validationButton { text: "sammoa.action.validation"; - enabled: {getModel().isFlightEnded()}; + enabled: {model.isCampaignFound() && getModel().isFlightEnded()}; } Modified: trunk/sammoa-ui-swing/src/main/java/fr/ulr/sammoa/ui/swing/home/HomeUIHandler.java =================================================================== --- trunk/sammoa-ui-swing/src/main/java/fr/ulr/sammoa/ui/swing/home/HomeUIHandler.java 2012-08-20 12:44:55 UTC (rev 442) +++ trunk/sammoa-ui-swing/src/main/java/fr/ulr/sammoa/ui/swing/home/HomeUIHandler.java 2012-08-20 13:45:15 UTC (rev 443) @@ -24,6 +24,7 @@ */ import com.google.common.base.Joiner; +import com.google.common.base.Preconditions; import com.google.common.collect.Iterables; import com.google.common.collect.Lists; import com.google.common.collect.Sets; @@ -281,6 +282,7 @@ // Save the campaignId in the config for next loading Campaign campaign = getModel().getCampaign(); + Preconditions.checkNotNull(campaign); getConfig().setCampaignId(campaign.getTopiaId()); getConfig().save(); Modified: trunk/sammoa-ui-swing/src/main/java/fr/ulr/sammoa/ui/swing/home/HomeUIModel.java =================================================================== --- trunk/sammoa-ui-swing/src/main/java/fr/ulr/sammoa/ui/swing/home/HomeUIModel.java 2012-08-20 12:44:55 UTC (rev 442) +++ trunk/sammoa-ui-swing/src/main/java/fr/ulr/sammoa/ui/swing/home/HomeUIModel.java 2012-08-20 13:45:15 UTC (rev 443) @@ -38,6 +38,8 @@ public static final String PROPERTY_CAMPAIGN = "campaign"; + public static final String PROPERTY_CAMPAIGN_FOUND = "campaignFound"; + public static final String PROPERTY_SYSTEM_ID = "systemId"; public static final String PROPERTY_FLIGHT = "flight"; @@ -60,8 +62,13 @@ Campaign oldValue = getCampaign(); this.campaign = campaign; firePropertyChange(PROPERTY_CAMPAIGN, oldValue, campaign); + firePropertyChange(PROPERTY_CAMPAIGN_FOUND, oldValue != null, campaign != null); } + public boolean isCampaignFound() { + return campaign != null; + } + public String getSystemId() { return systemId; }