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;
+ }
}