Author: tchemit Date: 2008-04-16 22:43:18 +0000 (Wed, 16 Apr 2008) New Revision: 537 Modified: trunk/lutinvcs/core/src/main/java/org/codelutin/vcs/VCSFactory.java trunk/lutinvcs/ui/common/src/main/java/org/codelutin/vcs/ui/VCSUIFactory.java trunk/lutinvcs/ui/common/src/main/java/org/codelutin/vcs/ui/action/ShowConfigAction.java trunk/lutinvcs/ui/common/src/main/java/org/codelutin/vcs/ui/handler/ChangelogUIHandler.java trunk/lutinvcs/ui/common/src/main/java/org/codelutin/vcs/ui/handler/ConfigUIHandler.java trunk/lutinvcs/ui/common/src/main/java/org/codelutin/vcs/ui/handler/ConfirmUIHandler.java trunk/lutinvcs/ui/common/src/main/java/org/codelutin/vcs/ui/handler/DiffUIHandler.java trunk/lutinvcs/ui/common/src/main/java/org/codelutin/vcs/ui/handler/SynchUIHandler.java trunk/lutinvcs/ui/common/src/main/java/org/codelutin/vcs/ui/util/handler/AbstractBasicUIHandler.java trunk/lutinvcs/ui/common/src/main/java/org/codelutin/vcs/ui/util/handler/AbstractTabOneFileUIHandler.java trunk/lutinvcs/ui/common/src/main/java/org/codelutin/vcs/ui/util/handler/AbstractTabUIHandler.java trunk/lutinvcs/ui/common/src/main/java/org/codelutin/vcs/ui/util/handler/AbstractUIHandler.java Log: add config in handler add generic window in VCSUIFactory to close vcs when no more ui are visible. Modified: trunk/lutinvcs/core/src/main/java/org/codelutin/vcs/VCSFactory.java =================================================================== --- trunk/lutinvcs/core/src/main/java/org/codelutin/vcs/VCSFactory.java 2008-04-16 21:30:00 UTC (rev 536) +++ trunk/lutinvcs/core/src/main/java/org/codelutin/vcs/VCSFactory.java 2008-04-16 22:43:18 UTC (rev 537) @@ -57,7 +57,7 @@ /** action manager */ protected VCSActionManager actionManager; - protected static VCSFactory getInstance() { + public static VCSFactory getInstance() { if (instance == null) { instance = new VCSFactory(); } @@ -139,8 +139,10 @@ providers.add(provider); } log.info("found " + providers.size() + " provider(s) " + providers.toString() + " in " + StringUtil.convertTime(t0, System.nanoTime())); - for (VCSProvider provider : providers) { - log.info(provider.getName() + " [" + provider + ']'); + if (log.isDebugEnabled()) { + for (VCSProvider provider : providers) { + log.debug(provider.getName() + " [" + provider + ']'); + } } actionManager = new VCSActionManager(); connexions = new ArrayList<VCSConnexion>(); Modified: trunk/lutinvcs/ui/common/src/main/java/org/codelutin/vcs/ui/VCSUIFactory.java =================================================================== --- trunk/lutinvcs/ui/common/src/main/java/org/codelutin/vcs/ui/VCSUIFactory.java 2008-04-16 21:30:00 UTC (rev 536) +++ trunk/lutinvcs/ui/common/src/main/java/org/codelutin/vcs/ui/VCSUIFactory.java 2008-04-16 22:43:18 UTC (rev 537) @@ -17,9 +17,14 @@ import org.apache.commons.logging.Log; import org.apache.commons.logging.LogFactory; import org.codelutin.util.StringUtil; +import org.codelutin.vcs.VCSConnexion; +import org.codelutin.vcs.VCSConnexionConfig; import org.codelutin.vcs.VCSFactory; import org.codelutin.vcs.ui.util.ui.AbstractUI; +import java.awt.event.WindowAdapter; +import java.awt.event.WindowEvent; +import java.awt.event.WindowListener; import java.lang.reflect.InvocationTargetException; import java.util.HashMap; import java.util.Map; @@ -40,6 +45,17 @@ protected ServiceLoader<VCSUIProvider> loader; + protected VCSConnexionConfig config; + + protected WindowListener defaultWindowListener; + + protected WindowListener windowListener; + + public static void initFactory(VCSConnexionConfig config, VCSWindowListener myWindowAdapter) { + getInstance().setConfig(config); + getInstance().setWindowListener(myWindowAdapter); + } + public static SynchUI newSynchUI() { return (SynchUI) getInstance().newUI(VCSUI.synch); } @@ -91,7 +107,6 @@ return cache; } - protected synchronized ServiceLoader<VCSUIProvider> getProviders() { if (loader == null) { long t0 = System.nanoTime(); @@ -112,10 +127,11 @@ AbstractUI result = getInstance().getCache().get(uiType); if (result == null) { try { - // instance of handler - result = newUI0(uiType); - - getCache().put(uiType, result); + getCache().put(uiType, result = newUI0(uiType)); + result.addWindowListener(defaultWindowListener); + if (windowListener != null) { + result.addWindowListener(windowListener); + } } catch (Exception e) { throw new IllegalStateException("could not instanciate ui handler " + uiType + " for reason : " + e.getMessage()); } @@ -128,8 +144,7 @@ AbstractUI ui = provider.newUI(uiType); if (ui != null) { - uiType.getHandlerClass().getConstructor(ui.getClass().getSuperclass()).newInstance(ui); - + uiType.getHandlerClass().getConstructor(ui.getClass().getSuperclass(), VCSConnexionConfig.class).newInstance(ui, config); ui.getHandler().init(); return ui; } @@ -138,5 +153,64 @@ } protected VCSUIFactory() { + defaultWindowListener = new VCSWindowListener() { + protected void allWindowsClosed() { + } + + protected void closeConnexion(VCSConnexion connexion) { + log.info(connexion); + connexion.close(); + } + }; } + + protected void setConfig(VCSConnexionConfig config) { + this.config = config; + } + + protected void setWindowListener(WindowListener windowListener) { + this.windowListener = windowListener; + } + + public static abstract class VCSWindowListener extends WindowAdapter { + + protected abstract void allWindowsClosed(); + + protected abstract void closeConnexion(VCSConnexion connexion); + + private boolean wasClosed; + + @Override + public void windowClosed(WindowEvent e) { + if (log.isDebugEnabled()) { + log.debug(e.getSource()); + } + if (e.getWindow().isVisible()) { + // only deal with real closed and none visible windows... + return; + } + for (AbstractUI vcsui : VCSUIFactory.getInstance().cache.values()) { + if (vcsui.isVisible()) { + // at least one ui visible, do not kill connexions + return; + } + } + if (wasClosed) { + // make sure to process once + return; + } + log.info("kill connexions... (last ui : " + e.getSource() + ")"); + synchronized (this) { + try { + // all ui are down, kill all connexions + for (VCSConnexion connexion : VCSFactory.getInstance().getConnexions()) { + closeConnexion(connexion); + } + allWindowsClosed(); + } finally { + wasClosed = true; + } + } + } + } } \ No newline at end of file Modified: trunk/lutinvcs/ui/common/src/main/java/org/codelutin/vcs/ui/action/ShowConfigAction.java =================================================================== --- trunk/lutinvcs/ui/common/src/main/java/org/codelutin/vcs/ui/action/ShowConfigAction.java 2008-04-16 21:30:00 UTC (rev 536) +++ trunk/lutinvcs/ui/common/src/main/java/org/codelutin/vcs/ui/action/ShowConfigAction.java 2008-04-16 22:43:18 UTC (rev 537) @@ -15,10 +15,11 @@ package org.codelutin.vcs.ui.action; import static org.codelutin.i18n.I18n._; +import org.codelutin.vcs.ui.ConfigUI; +import org.codelutin.vcs.ui.VCSUIFactory; +import static org.codelutin.vcs.ui.util.UIHelper.createActionIcon; +import org.codelutin.vcs.ui.util.handler.AbstractUIHandler; import org.codelutin.vcs.ui.util.ui.AbstractUI; -import org.codelutin.vcs.ui.util.handler.AbstractUIHandler; -import static org.codelutin.vcs.ui.util.UIHelper.createActionIcon; -import org.codelutin.vcs.ui.VCSUIFactory; import javax.swing.AbstractAction; import java.awt.event.ActionEvent; @@ -36,8 +37,10 @@ public void actionPerformed(ActionEvent e) { checkInit(); - ui = VCSUIFactory.newConfigUI(); - ui.setVisible(true); + ConfigUI i = VCSUIFactory.newConfigUI(); + // populate with common config + i.getHandler().getModel().populate(i.getHandler().getConfig()); + i.setVisible(true); } protected ShowConfigAction() { Modified: trunk/lutinvcs/ui/common/src/main/java/org/codelutin/vcs/ui/handler/ChangelogUIHandler.java =================================================================== --- trunk/lutinvcs/ui/common/src/main/java/org/codelutin/vcs/ui/handler/ChangelogUIHandler.java 2008-04-16 21:30:00 UTC (rev 536) +++ trunk/lutinvcs/ui/common/src/main/java/org/codelutin/vcs/ui/handler/ChangelogUIHandler.java 2008-04-16 22:43:18 UTC (rev 537) @@ -15,6 +15,7 @@ package org.codelutin.vcs.ui.handler; import org.codelutin.vcs.VCSEntry; +import org.codelutin.vcs.VCSConnexionConfig; import org.codelutin.vcs.event.VCSActionThreadEvent; import org.codelutin.vcs.type.VCSAction; import org.codelutin.vcs.type.VCSState; @@ -32,8 +33,8 @@ /** @author chemit */ public class ChangelogUIHandler extends AbstractTabOneFileUIHandler<ChangelogUIModel, ChangelogUI> { - public ChangelogUIHandler(ChangelogUI ui) { - super(ui, new ChangelogUIModel(), true); + public ChangelogUIHandler(ChangelogUI ui, VCSConnexionConfig config) { + super(ui, new ChangelogUIModel(),config, true); ui.setHandler(this); } Modified: trunk/lutinvcs/ui/common/src/main/java/org/codelutin/vcs/ui/handler/ConfigUIHandler.java =================================================================== --- trunk/lutinvcs/ui/common/src/main/java/org/codelutin/vcs/ui/handler/ConfigUIHandler.java 2008-04-16 21:30:00 UTC (rev 536) +++ trunk/lutinvcs/ui/common/src/main/java/org/codelutin/vcs/ui/handler/ConfigUIHandler.java 2008-04-16 22:43:18 UTC (rev 537) @@ -39,8 +39,8 @@ protected List<Element> errors; - public ConfigUIHandler(ConfigUI ui) { - super(ui, new ConfigUIModel()); + public ConfigUIHandler(ConfigUI ui,VCSConnexionConfig config) { + super(ui, new ConfigUIModel(),config); ui.setHandler(this); errors = new ArrayList<Element>(); } Modified: trunk/lutinvcs/ui/common/src/main/java/org/codelutin/vcs/ui/handler/ConfirmUIHandler.java =================================================================== --- trunk/lutinvcs/ui/common/src/main/java/org/codelutin/vcs/ui/handler/ConfirmUIHandler.java 2008-04-16 21:30:00 UTC (rev 536) +++ trunk/lutinvcs/ui/common/src/main/java/org/codelutin/vcs/ui/handler/ConfirmUIHandler.java 2008-04-16 22:43:18 UTC (rev 537) @@ -16,6 +16,7 @@ import static org.codelutin.i18n.I18n._; import org.codelutin.vcs.VCSEntry; +import org.codelutin.vcs.VCSConnexionConfig; import org.codelutin.vcs.event.VCSActionThreadEvent; import org.codelutin.vcs.type.VCSAction; import org.codelutin.vcs.ui.ConfirmUI; @@ -41,8 +42,8 @@ public class ConfirmUIHandler extends AbstractBasicUIHandler<ConfirmUIModel, ConfirmUI> { - public ConfirmUIHandler(ConfirmUI ui) { - super(ui, new ConfirmUIModel(), false); + public ConfirmUIHandler(ConfirmUI ui, VCSConnexionConfig config) { + super(ui, new ConfirmUIModel(),config, false); ui.setHandler(this); } Modified: trunk/lutinvcs/ui/common/src/main/java/org/codelutin/vcs/ui/handler/DiffUIHandler.java =================================================================== --- trunk/lutinvcs/ui/common/src/main/java/org/codelutin/vcs/ui/handler/DiffUIHandler.java 2008-04-16 21:30:00 UTC (rev 536) +++ trunk/lutinvcs/ui/common/src/main/java/org/codelutin/vcs/ui/handler/DiffUIHandler.java 2008-04-16 22:43:18 UTC (rev 537) @@ -17,6 +17,7 @@ import static org.codelutin.i18n.I18n._; import org.codelutin.util.FileUtil; import org.codelutin.vcs.VCSEntry; +import org.codelutin.vcs.VCSConnexionConfig; import org.codelutin.vcs.event.VCSActionThreadEvent; import org.codelutin.vcs.type.VCSAction; import org.codelutin.vcs.type.VCSState; @@ -35,8 +36,8 @@ /** @author chemit */ public class DiffUIHandler extends AbstractTabOneFileUIHandler<DiffUIModel, DiffUI> { - public DiffUIHandler(DiffUI ui) { - super(ui, new DiffUIModel(), true); + public DiffUIHandler(DiffUI ui, VCSConnexionConfig config) { + super(ui, new DiffUIModel(), config,true); ui.setHandler(this); } Modified: trunk/lutinvcs/ui/common/src/main/java/org/codelutin/vcs/ui/handler/SynchUIHandler.java =================================================================== --- trunk/lutinvcs/ui/common/src/main/java/org/codelutin/vcs/ui/handler/SynchUIHandler.java 2008-04-16 21:30:00 UTC (rev 536) +++ trunk/lutinvcs/ui/common/src/main/java/org/codelutin/vcs/ui/handler/SynchUIHandler.java 2008-04-16 22:43:18 UTC (rev 537) @@ -2,6 +2,7 @@ import static org.codelutin.i18n.I18n._; import org.codelutin.vcs.VCSEntry; +import org.codelutin.vcs.VCSConnexionConfig; import org.codelutin.vcs.event.VCSActionThreadEvent; import org.codelutin.vcs.type.VCSAction; import org.codelutin.vcs.type.VCSState; @@ -23,8 +24,8 @@ /** @author chemit */ public class SynchUIHandler extends AbstractTabUIHandler<SynchUIModel, SynchUI> { - public SynchUIHandler(SynchUI ui) { - super(ui, new SynchUIModel(), true); + public SynchUIHandler(SynchUI ui,VCSConnexionConfig config) { + super(ui, new SynchUIModel(), config,true); ui.setHandler(this); } Modified: trunk/lutinvcs/ui/common/src/main/java/org/codelutin/vcs/ui/util/handler/AbstractBasicUIHandler.java =================================================================== --- trunk/lutinvcs/ui/common/src/main/java/org/codelutin/vcs/ui/util/handler/AbstractBasicUIHandler.java 2008-04-16 21:30:00 UTC (rev 536) +++ trunk/lutinvcs/ui/common/src/main/java/org/codelutin/vcs/ui/util/handler/AbstractBasicUIHandler.java 2008-04-16 22:43:18 UTC (rev 537) @@ -15,6 +15,7 @@ package org.codelutin.vcs.ui.util.handler; import org.codelutin.vcs.VCSFactory; +import org.codelutin.vcs.VCSConnexionConfig; import org.codelutin.vcs.ui.util.model.AbstractBasicUIModel; import org.codelutin.vcs.ui.util.ui.AbstractBasicUI; import org.codelutin.vcs.ui.util.UIHelper; @@ -34,8 +35,8 @@ protected abstract void afterSelectionChanged(); - protected AbstractBasicUIHandler(U ui, M model, boolean useThreadListener) { - super(ui, model); + protected AbstractBasicUIHandler(U ui, M model, VCSConnexionConfig config, boolean useThreadListener) { + super(ui, model,config); this.useThreadListener = useThreadListener; } Modified: trunk/lutinvcs/ui/common/src/main/java/org/codelutin/vcs/ui/util/handler/AbstractTabOneFileUIHandler.java =================================================================== --- trunk/lutinvcs/ui/common/src/main/java/org/codelutin/vcs/ui/util/handler/AbstractTabOneFileUIHandler.java 2008-04-16 21:30:00 UTC (rev 536) +++ trunk/lutinvcs/ui/common/src/main/java/org/codelutin/vcs/ui/util/handler/AbstractTabOneFileUIHandler.java 2008-04-16 22:43:18 UTC (rev 537) @@ -16,6 +16,7 @@ import static org.codelutin.i18n.I18n._; import org.codelutin.vcs.VCSEntry; +import org.codelutin.vcs.VCSConnexionConfig; import org.codelutin.vcs.type.VCSAction; import org.codelutin.vcs.type.VCSEntryLocation; import org.codelutin.vcs.ui.model.DiffUIModel; @@ -31,8 +32,8 @@ /** @author chemit */ public abstract class AbstractTabOneFileUIHandler<M extends AbstractTabOneFileUIModel, U extends AbstractTabOneFileUI<? extends AbstractTabUIHandler>> extends AbstractTabUIHandler<M, U> { - protected AbstractTabOneFileUIHandler(U ui, M model,boolean useThreadListener) { - super(ui, model,useThreadListener); + protected AbstractTabOneFileUIHandler(U ui, M model, VCSConnexionConfig config,boolean useThreadListener) { + super(ui, model,config,useThreadListener); } @Override Modified: trunk/lutinvcs/ui/common/src/main/java/org/codelutin/vcs/ui/util/handler/AbstractTabUIHandler.java =================================================================== --- trunk/lutinvcs/ui/common/src/main/java/org/codelutin/vcs/ui/util/handler/AbstractTabUIHandler.java 2008-04-16 21:30:00 UTC (rev 536) +++ trunk/lutinvcs/ui/common/src/main/java/org/codelutin/vcs/ui/util/handler/AbstractTabUIHandler.java 2008-04-16 22:43:18 UTC (rev 537) @@ -16,6 +16,7 @@ import org.codelutin.vcs.VCSEntry; import org.codelutin.vcs.VCSException; +import org.codelutin.vcs.VCSConnexionConfig; import org.codelutin.vcs.type.VCSAction; import org.codelutin.vcs.ui.ChangelogUI; import org.codelutin.vcs.ui.ConfirmUI; @@ -35,8 +36,8 @@ /** @author chemit */ public abstract class AbstractTabUIHandler<M extends AbstractTabUIModel, U extends AbstractTabUI<? extends AbstractTabUIHandler>> extends AbstractBasicUIHandler<M, U> implements TableModelListener { - protected AbstractTabUIHandler(U ui, M model,boolean useThreadListener) { - super(ui, model,useThreadListener); + protected AbstractTabUIHandler(U ui, M model, VCSConnexionConfig config,boolean useThreadListener) { + super(ui, model,config, useThreadListener); } public void propertyChange(PropertyChangeEvent evt) { Modified: trunk/lutinvcs/ui/common/src/main/java/org/codelutin/vcs/ui/util/handler/AbstractUIHandler.java =================================================================== --- trunk/lutinvcs/ui/common/src/main/java/org/codelutin/vcs/ui/util/handler/AbstractUIHandler.java 2008-04-16 21:30:00 UTC (rev 536) +++ trunk/lutinvcs/ui/common/src/main/java/org/codelutin/vcs/ui/util/handler/AbstractUIHandler.java 2008-04-16 22:43:18 UTC (rev 537) @@ -16,6 +16,7 @@ import org.codelutin.vcs.ui.util.model.AbstractUIModel; import org.codelutin.vcs.ui.util.ui.AbstractUI; +import org.codelutin.vcs.VCSConnexionConfig; /** * TODO Move this classe in jaxx @@ -24,7 +25,18 @@ */ public abstract class AbstractUIHandler<M extends AbstractUIModel, U extends AbstractUI<? extends AbstractUIHandler>> extends jaxx.DialogUIHandler<M, U> { - protected AbstractUIHandler(U ui, M model) { + private VCSConnexionConfig config; + + protected AbstractUIHandler(U ui, M model,VCSConnexionConfig config) { super(ui, model); + this.config=config; } + + public VCSConnexionConfig getConfig() { + return config; + } + + public void setConfig(VCSConnexionConfig config) { + this.config = config; + } }
participants (1)
-
tchemit@users.labs.libre-entreprise.org