Buix-commits
Threads by month
- ----- 2026 -----
- June
- May
- April
- March
- February
- January
- ----- 2025 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2024 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2023 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2022 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2021 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2020 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2019 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2018 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2017 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2016 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2015 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2014 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2013 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2012 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2011 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2010 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2009 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2008 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2007 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2006 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2005 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2004 -----
- December
- November
- October
- September
- August
April 2008
- 1 participants
- 373 discussions
Author: tchemit
Date: 2008-04-18 18:12:55 +0000 (Fri, 18 Apr 2008)
New Revision: 553
Removed:
trunk/jaxx/src/main/java/org/
Log:
lutinui module
1
0
18 Apr '08
Author: tchemit
Date: 2008-04-18 18:12:16 +0000 (Fri, 18 Apr 2008)
New Revision: 552
Removed:
trunk/jaxx/src/main/java/org/codelutin/ui/
Log:
lutinui module
1
0
r551 - in trunk: jaxx/src/main/java/org/codelutin/ui lutinui/src/main/java/org/codelutin/ui
by tchemit@users.labs.libre-entreprise.org 18 Apr '08
by tchemit@users.labs.libre-entreprise.org 18 Apr '08
18 Apr '08
Author: tchemit
Date: 2008-04-18 17:43:38 +0000 (Fri, 18 Apr 2008)
New Revision: 551
Added:
trunk/lutinui/src/main/java/org/codelutin/ui/UIHelper.java
Removed:
trunk/jaxx/src/main/java/org/codelutin/ui/UIHelper.java
Modified:
trunk/lutinui/src/main/java/org/codelutin/ui/DialogUI.java
Log:
lutinui module
Deleted: trunk/jaxx/src/main/java/org/codelutin/ui/UIHelper.java
===================================================================
--- trunk/jaxx/src/main/java/org/codelutin/ui/UIHelper.java 2008-04-18 17:42:35 UTC (rev 550)
+++ trunk/jaxx/src/main/java/org/codelutin/ui/UIHelper.java 2008-04-18 17:43:38 UTC (rev 551)
@@ -1,65 +0,0 @@
-/*
-* ##% Copyright (C) 2002, 2003, 2004, 2005, 2006, 2007, 2008 Code Lutin,
-* Tony Chemit
-*
-* This program is free software; you can redistribute it and/or
-* modify it under the terms of the GNU General Public License
-* as published by the Free Software Foundation; either version 2
-* of the License, or (at your option) any later version.
-*
-* This program is distributed in the hope that it will be useful,
-* but WITHOUT ANY WARRANTY; without even the implied warranty of
-* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
-* GNU General Public License for more details.
-*
-* You should have received a copy of the GNU General Public License
-* along with this program; if not, write to the Free Software
-* Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
-* ##% */
-package org.codelutin.ui;
-
-import javax.swing.ImageIcon;
-import javax.swing.JDialog;
-import javax.swing.JRootPane;
-import javax.swing.Action;
-import javax.swing.AbstractAction;
-import javax.swing.JComponent;
-import javax.swing.KeyStroke;
-import java.awt.event.ActionEvent;
-
-/** @author tony */
-public class UIHelper {
-
- public static ImageIcon createImageIcon(String path) {
- java.net.URL imgURL = UIHelper.class.getResource("/icons/" + path);
- if (imgURL != null) {
- return new ImageIcon(imgURL);
- } else {
- throw new RuntimeException("could not find icon " + path);
- }
- }
-
- /**
- * Attach to <code>ui</code> an abort action,accessible by <code>ESC</code> key.
- *
- * @param ui ui
- */
- public static void setQuitAction(final JDialog ui) {
- JRootPane rootPane = ui.getRootPane();
-
- Action quitAction = new AbstractAction("quit") {
- private static final long serialVersionUID = -869095664995763057L;
-
- public void actionPerformed(ActionEvent e) {
- ui.dispose();
- }
- };
- rootPane.getInputMap(JComponent.WHEN_IN_FOCUSED_WINDOW).put(KeyStroke.getKeyStroke("ESCAPE"), "quit");
- rootPane.getActionMap().put("quit", quitAction);
- }
-
- public static ImageIcon createActionIcon(String name) {
- return createImageIcon("action-" + name + ".png");
- }
-
-}
Modified: trunk/lutinui/src/main/java/org/codelutin/ui/DialogUI.java
===================================================================
--- trunk/lutinui/src/main/java/org/codelutin/ui/DialogUI.java 2008-04-18 17:42:35 UTC (rev 550)
+++ trunk/lutinui/src/main/java/org/codelutin/ui/DialogUI.java 2008-04-18 17:43:38 UTC (rev 551)
@@ -14,8 +14,6 @@
*/
package org.codelutin.ui;
-import jaxx.runtime.UIHelper;
-
import javax.swing.AbstractAction;
import javax.swing.AbstractButton;
import javax.swing.ImageIcon;
Copied: trunk/lutinui/src/main/java/org/codelutin/ui/UIHelper.java (from rev 549, trunk/jaxx/src/main/java/org/codelutin/ui/UIHelper.java)
===================================================================
--- trunk/lutinui/src/main/java/org/codelutin/ui/UIHelper.java (rev 0)
+++ trunk/lutinui/src/main/java/org/codelutin/ui/UIHelper.java 2008-04-18 17:43:38 UTC (rev 551)
@@ -0,0 +1,65 @@
+/*
+* ##% Copyright (C) 2002, 2003, 2004, 2005, 2006, 2007, 2008 Code Lutin,
+* Tony Chemit
+*
+* This program is free software; you can redistribute it and/or
+* modify it under the terms of the GNU General Public License
+* as published by the Free Software Foundation; either version 2
+* of the License, or (at your option) any later version.
+*
+* This program is distributed in the hope that it will be useful,
+* but WITHOUT ANY WARRANTY; without even the implied warranty of
+* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+* GNU General Public License for more details.
+*
+* You should have received a copy of the GNU General Public License
+* along with this program; if not, write to the Free Software
+* Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
+* ##% */
+package org.codelutin.ui;
+
+import javax.swing.ImageIcon;
+import javax.swing.JDialog;
+import javax.swing.JRootPane;
+import javax.swing.Action;
+import javax.swing.AbstractAction;
+import javax.swing.JComponent;
+import javax.swing.KeyStroke;
+import java.awt.event.ActionEvent;
+
+/** @author tony */
+public class UIHelper {
+
+ public static ImageIcon createImageIcon(String path) {
+ java.net.URL imgURL = UIHelper.class.getResource("/icons/" + path);
+ if (imgURL != null) {
+ return new ImageIcon(imgURL);
+ } else {
+ throw new RuntimeException("could not find icon " + path);
+ }
+ }
+
+ /**
+ * Attach to <code>ui</code> an abort action,accessible by <code>ESC</code> key.
+ *
+ * @param ui ui
+ */
+ public static void setQuitAction(final JDialog ui) {
+ JRootPane rootPane = ui.getRootPane();
+
+ Action quitAction = new AbstractAction("quit") {
+ private static final long serialVersionUID = -869095664995763057L;
+
+ public void actionPerformed(ActionEvent e) {
+ ui.dispose();
+ }
+ };
+ rootPane.getInputMap(JComponent.WHEN_IN_FOCUSED_WINDOW).put(KeyStroke.getKeyStroke("ESCAPE"), "quit");
+ rootPane.getActionMap().put("quit", quitAction);
+ }
+
+ public static ImageIcon createActionIcon(String name) {
+ return createImageIcon("action-" + name + ".png");
+ }
+
+}
1
0
r550 - in trunk: jaxx/src/main/java/org/codelutin/ui lutinui/src/main/java/org/codelutin/ui
by tchemit@users.labs.libre-entreprise.org 18 Apr '08
by tchemit@users.labs.libre-entreprise.org 18 Apr '08
18 Apr '08
Author: tchemit
Date: 2008-04-18 17:42:35 +0000 (Fri, 18 Apr 2008)
New Revision: 550
Added:
trunk/lutinui/src/main/java/org/codelutin/ui/DialogUI.java
trunk/lutinui/src/main/java/org/codelutin/ui/DialogUIDef.java
trunk/lutinui/src/main/java/org/codelutin/ui/DialogUIHandler.java
trunk/lutinui/src/main/java/org/codelutin/ui/DialogUIModel.java
trunk/lutinui/src/main/java/org/codelutin/ui/UIFactory.java
trunk/lutinui/src/main/java/org/codelutin/ui/UIProvider.java
Removed:
trunk/jaxx/src/main/java/org/codelutin/ui/DialogUI.java
trunk/jaxx/src/main/java/org/codelutin/ui/DialogUIDef.java
trunk/jaxx/src/main/java/org/codelutin/ui/DialogUIHandler.java
trunk/jaxx/src/main/java/org/codelutin/ui/DialogUIModel.java
trunk/jaxx/src/main/java/org/codelutin/ui/UIFactory.java
trunk/jaxx/src/main/java/org/codelutin/ui/UIProvider.java
Log:
lutinui module
Deleted: trunk/jaxx/src/main/java/org/codelutin/ui/DialogUI.java
===================================================================
--- trunk/jaxx/src/main/java/org/codelutin/ui/DialogUI.java 2008-04-18 17:42:04 UTC (rev 549)
+++ trunk/jaxx/src/main/java/org/codelutin/ui/DialogUI.java 2008-04-18 17:42:35 UTC (rev 550)
@@ -1,79 +0,0 @@
-/**
- * ##% Copyright (C) 2008 Code Lutin, Tony Chemit
- * This program is free software; you
- * can redistribute it and/or modify it under the terms of the GNU General
- * Public License as published by the Free Software Foundation; either version 2
- * of the License, or (at your option) any later version. This program is
- * distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY;
- * without even the implied warranty of MERCHANTABILITY or FITNESS FOR A
- * PARTICULAR PURPOSE. See the GNU General Public License for more details. You
- * should have received a copy of the GNU General Public License along with this
- * program; if not, write to the Free Software Foundation, Inc., 59 Temple Place
- * - Suite 330, Boston, MA 02111-1307, USA.
- * ##%
- */
-package org.codelutin.ui;
-
-import jaxx.runtime.UIHelper;
-
-import javax.swing.AbstractAction;
-import javax.swing.AbstractButton;
-import javax.swing.ImageIcon;
-import javax.swing.JDialog;
-import java.awt.event.WindowEvent;
-import java.awt.event.WindowListener;
-
-/**
- * A abstract dialog contract to be realised by a dialogUI (WindowEvent adapter)
- * <p/>
- * TODO : make jaxx authorized implementing interface for root tag :)
- *
- * @author chemit
- */
-public abstract class DialogUI<H extends DialogUIHandler> extends JDialog implements WindowListener {
-
- private H handler;
-
- public abstract AbstractButton getHelp();
-
- //TODO will be handled by jaxx with javax.help...
- protected abstract AbstractAction createHelpAction();
-
- protected DialogUI() {
- UIHelper.setQuitAction(this);
- addWindowListener(this);
- }
-
- public H getHandler() {
- return handler;
- }
-
- public void setHandler(H handler) {
- this.handler = handler;
- }
-
- protected ImageIcon createActionIcon(String name) {
- return UIHelper.createActionIcon(name);
- }
-
- public void windowOpened(WindowEvent e) {
- }
-
- public void windowClosed(WindowEvent e) {
- }
-
- public void windowClosing(WindowEvent e) {
- }
-
- public void windowIconified(WindowEvent e) {
- }
-
- public void windowDeiconified(WindowEvent e) {
- }
-
- public void windowActivated(WindowEvent e) {
- }
-
- public void windowDeactivated(WindowEvent e) {
- }
-}
\ No newline at end of file
Deleted: trunk/jaxx/src/main/java/org/codelutin/ui/DialogUIDef.java
===================================================================
--- trunk/jaxx/src/main/java/org/codelutin/ui/DialogUIDef.java 2008-04-18 17:42:04 UTC (rev 549)
+++ trunk/jaxx/src/main/java/org/codelutin/ui/DialogUIDef.java 2008-04-18 17:42:35 UTC (rev 550)
@@ -1,57 +0,0 @@
-/**
- * ##% Copyright (C) 2008 Code Lutin, Tony Chemit
- * This program is free software; you
- * can redistribute it and/or modify it under the terms of the GNU General
- * Public License as published by the Free Software Foundation; either version 2
- * of the License, or (at your option) any later version. This program is
- * distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY;
- * without even the implied warranty of MERCHANTABILITY or FITNESS FOR A
- * PARTICULAR PURPOSE. See the GNU General Public License for more details. You
- * should have received a copy of the GNU General Public License along with this
- * program; if not, write to the Free Software Foundation, Inc., 59 Temple Place
- * - Suite 330, Boston, MA 02111-1307, USA.
- * ##%
- */
-package org.codelutin.ui;
-
-/** @author chemit */
-public class DialogUIDef<M extends DialogUIModel, U extends DialogUI<?>, H extends DialogUIHandler<M, U>> {
-
- private final Class<U> uiClass;
- private final Class<M> modelClass;
- private final Class<H> handlerClass;
-
- public DialogUIDef(Class<H> handlerClass, Class<U> uiClass, Class<M> modelClass) {
- this.handlerClass = handlerClass;
- this.uiClass = uiClass;
- this.modelClass = modelClass;
- }
-
- public Class<U> getUiClass() {
- return uiClass;
- }
-
- public Class<H> getHandlerClass() {
- return handlerClass;
- }
-
- public Class<M> getModelClass() {
- return modelClass;
- }
-
- @Override
- public boolean equals(Object o) {
- return this == o || o instanceof DialogUIDef && uiClass.equals(((DialogUIDef) o).uiClass);
-
- }
-
- @Override
- public int hashCode() {
- return uiClass.hashCode();
- }
-
- @Override
- public String toString() {
- return super.toString() + "<model:" + modelClass + ", ui:" + uiClass + ", handler:" + handlerClass + '>';
- }
-}
Deleted: trunk/jaxx/src/main/java/org/codelutin/ui/DialogUIHandler.java
===================================================================
--- trunk/jaxx/src/main/java/org/codelutin/ui/DialogUIHandler.java 2008-04-18 17:42:04 UTC (rev 549)
+++ trunk/jaxx/src/main/java/org/codelutin/ui/DialogUIHandler.java 2008-04-18 17:42:35 UTC (rev 550)
@@ -1,60 +0,0 @@
-/**
- * ##% Copyright (C) 2008 Code Lutin, Tony Chemit
- * This program is free software; you
- * can redistribute it and/or modify it under the terms of the GNU General
- * Public License as published by the Free Software Foundation; either version 2
- * of the License, or (at your option) any later version. This program is
- * distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY;
- * without even the implied warranty of MERCHANTABILITY or FITNESS FOR A
- * PARTICULAR PURPOSE. See the GNU General Public License for more details. You
- * should have received a copy of the GNU General Public License along with this
- * program; if not, write to the Free Software Foundation, Inc., 59 Temple Place
- * - Suite 330, Boston, MA 02111-1307, USA.
- * ##%
- */
-package org.codelutin.ui;
-
-import org.apache.commons.logging.Log;
-import org.apache.commons.logging.LogFactory;
-
-import java.beans.PropertyChangeListener;
-
-/**
- * DialogUI handler
- *
- * @author chemit
- */
-public abstract class DialogUIHandler<M extends DialogUIModel, U extends DialogUI<? extends DialogUIHandler>> implements PropertyChangeListener {
-
- protected static Log log = LogFactory.getLog(DialogUIHandler.class);
-
- /** ui handled */
- private U ui;
-
- /** model handled */
- private M model;
-
- protected DialogUIHandler(U ui, M model) {
- this.ui = ui;
- this.model = model;
- }
-
- public U getUi() {
- return ui;
- }
-
- public M getModel() {
- return model;
- }
-
- public void init() {
- if (model == null) {
- throw new IllegalStateException("no model was defined for " + this);
- }
- model.addPropertyChangeListener(this);
- }
-
- public void dispose() {
- model.removePropertyChangeListener(this);
- }
-}
\ No newline at end of file
Deleted: trunk/jaxx/src/main/java/org/codelutin/ui/DialogUIModel.java
===================================================================
--- trunk/jaxx/src/main/java/org/codelutin/ui/DialogUIModel.java 2008-04-18 17:42:04 UTC (rev 549)
+++ trunk/jaxx/src/main/java/org/codelutin/ui/DialogUIModel.java 2008-04-18 17:42:35 UTC (rev 550)
@@ -1,85 +0,0 @@
-/**
- * ##% Copyright (C) 2008 Code Lutin, Tony Chemit
- * This program is free software; you
- * can redistribute it and/or modify it under the terms of the GNU General
- * Public License as published by the Free Software Foundation; either version 2
- * of the License, or (at your option) any later version. This program is
- * distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY;
- * without even the implied warranty of MERCHANTABILITY or FITNESS FOR A
- * PARTICULAR PURPOSE. See the GNU General Public License for more details. You
- * should have received a copy of the GNU General Public License along with this
- * program; if not, write to the Free Software Foundation, Inc., 59 Temple Place
- * - Suite 330, Boston, MA 02111-1307, USA.
- * ##%
- */
-package org.codelutin.ui;
-
-import org.apache.commons.logging.Log;
-import org.apache.commons.logging.LogFactory;
-
-import java.beans.PropertyChangeListener;
-import java.beans.PropertyChangeSupport;
-
-/**
- * Abstract ui model, with property change support.
- *
- * @author chemit
- */
-public abstract class DialogUIModel {
-
- static protected final Log log = LogFactory.getLog(DialogUIModel.class);
-
- /** support for change properties support */
- protected PropertyChangeSupport changeSupport;
-
- public synchronized void addPropertyChangeListener(String propertyName, PropertyChangeListener listener) {
- if (listener == null) {
- return;
- }
- if (changeSupport == null) {
- changeSupport = new PropertyChangeSupport(this);
- }
- changeSupport.addPropertyChangeListener(propertyName, listener);
- }
-
- public synchronized void addPropertyChangeListener(PropertyChangeListener listener) {
- if (listener == null) {
- return;
- }
- if (changeSupport == null) {
- changeSupport = new PropertyChangeSupport(this);
- }
- changeSupport.addPropertyChangeListener(listener);
- }
-
- public synchronized void removePropertyChangeListener(PropertyChangeListener listener) {
- if (listener == null || changeSupport == null) {
- return;
- }
- changeSupport.removePropertyChangeListener(listener);
- }
-
- public synchronized void removePropertyChangeListeners() {
- if (changeSupport == null) {
- return;
- }
- for (PropertyChangeListener listener : getPropertyChangeListeners()) {
- changeSupport.removePropertyChangeListener(listener);
- }
- }
-
- public synchronized PropertyChangeListener[] getPropertyChangeListeners() {
- if (changeSupport == null) {
- return new PropertyChangeListener[0];
- }
- return changeSupport.getPropertyChangeListeners();
- }
-
- public void firePropertyChange(String propertyName, Object oldValue, Object newValue) {
- if (changeSupport == null || (oldValue == null && newValue == null) ||
- (oldValue != null && oldValue.equals(newValue))) {
- return;
- }
- changeSupport.firePropertyChange(propertyName, oldValue, newValue);
- }
-}
\ No newline at end of file
Deleted: trunk/jaxx/src/main/java/org/codelutin/ui/UIFactory.java
===================================================================
--- trunk/jaxx/src/main/java/org/codelutin/ui/UIFactory.java 2008-04-18 17:42:04 UTC (rev 549)
+++ trunk/jaxx/src/main/java/org/codelutin/ui/UIFactory.java 2008-04-18 17:42:35 UTC (rev 550)
@@ -1,218 +0,0 @@
-/**
- * ##% Copyright (C) 2008 Code Lutin, Tony Chemit
- * This program is free software; you
- * can redistribute it and/or modify it under the terms of the GNU General
- * Public License as published by the Free Software Foundation; either version 2
- * of the License, or (at your option) any later version. This program is
- * distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY;
- * without even the implied warranty of MERCHANTABILITY or FITNESS FOR A
- * PARTICULAR PURPOSE. See the GNU General Public License for more details. You
- * should have received a copy of the GNU General Public License along with this
- * program; if not, write to the Free Software Foundation, Inc., 59 Temple Place
- * - Suite 330, Boston, MA 02111-1307, USA.
- * ##%
- */
-package org.codelutin.ui;
-
-import org.apache.commons.logging.Log;
-import org.apache.commons.logging.LogFactory;
-import org.codelutin.util.ListenerSet;
-import org.codelutin.util.StringUtil;
-
-import java.awt.event.WindowAdapter;
-import java.awt.event.WindowEvent;
-import java.lang.reflect.InvocationTargetException;
-import java.util.HashMap;
-import java.util.Map;
-import java.util.ServiceLoader;
-
-/**
- * Factory if VCS UI, using a cache.
- *
- * @author chemit
- */
-public class UIFactory {
-
- static protected final Log log = LogFactory.getLog(UIFactory.class);
-
- protected static UIFactory instance;
-
- protected Map<DialogUIDef, DialogUI> cache;
-
- protected ServiceLoader<UIProvider> loader;
-
- protected String applicationName;
-
- protected ListenerSet<FactoryWindowListener> listeners;
-
- public static void initFactory(String applicationName, FactoryWindowListener... listeners) {
- UIFactory factory = getInstance();
- synchronized (factory) {
- factory.applicationName = applicationName;
- for (FactoryWindowListener listener : listeners) {
- listener.setFactory(factory);
- factory.addFactoryWindowListener(listener);
- }
- }
- }
-
- public void addFactoryWindowListener(FactoryWindowListener l) {
- listeners.add(l);
- }
-
- public void removeFactoryWindowListener(FactoryWindowListener l) {
- listeners.remove(l);
- }
-
- public void close() {
- if (cache != null) {
- cache.clear();
- cache = null;
- }
- if (loader != null) {
- loader.reload();
- loader = null;
- }
- while (listeners.size() > 0) {
- removeFactoryWindowListener(listeners.iterator().next());
- }
-
- }
-
- protected static UIFactory getInstance() {
- if (instance == null) {
- instance = new UIFactory();
- }
- return instance;
- }
-
- @Override
- protected void finalize() throws Throwable {
- super.finalize();
- close();
- }
-
- protected synchronized Map<DialogUIDef, DialogUI> getCache() {
- if (cache == null) {
- cache = new HashMap<DialogUIDef, DialogUI>();
- }
- return cache;
- }
-
- protected synchronized ServiceLoader<UIProvider> getProviders() {
- checkInit();
- if (loader == null) {
- long t0 = System.nanoTime();
-
- loader = ServiceLoader.load(UIProvider.class);
- int nb = 0;
- for (UIProvider provider : loader) {
- log.info(provider.getName() + " [" + provider + ']');
- nb++;
- }
- log.info("found " + nb + " ui provider(s) in " + StringUtil.convertTime(t0, System.nanoTime()));
- }
- return loader;
- }
-
- protected DialogUI newUI(DialogUIDef uiType) {
-
- DialogUI result = getInstance().getCache().get(uiType);
- if (result == null) {
- try {
- getCache().put(uiType, result = newUI0(uiType));
- for (FactoryWindowListener listener : listeners) {
- result.addWindowListener(listener);
- }
- } catch (Exception e) {
- throw new IllegalStateException("could not instanciate ui handler " + uiType + " for reason : " + e.getMessage());
- }
- }
- return result;
- }
-
- protected DialogUI newUI0(DialogUIDef uiType, Object... params) throws IllegalAccessException, InstantiationException, NoSuchMethodException, InvocationTargetException {
- for (UIProvider provider : getProviders()) {
- DialogUI ui = provider.newUI(uiType);
- if (ui != null) {
- Class<?>[] prototype = getHandlerPrototype(ui.getClass(), params);
- Object[] parameters = getHandlerParameters(ui, params);
- uiType.getHandlerClass().getConstructor(prototype).newInstance(ui, parameters);
- ui.getHandler().init();
- return ui;
- }
- }
- throw new IllegalStateException("could not find ui " + uiType);
- }
-
- protected UIFactory() {
- listeners = new ListenerSet<FactoryWindowListener>();
- }
-
- protected Class<?>[] getHandlerPrototype(Class<? extends DialogUI> aClass, Object[] params) {
- Class<?>[] classes = new Class<?>[1 + params.length];
- classes[0] = aClass.getSuperclass();
- for (int i = 0; i < params.length; i++) {
- classes[i + 1] = params[i].getClass();
- }
- return classes;
- }
-
- protected Object[] getHandlerParameters(DialogUI ui, Object[] params) {
- Object[] classes = new Object[1 + params.length];
- classes[0] = ui;
- System.arraycopy(params, 0, classes, 1, params.length);
- return classes;
- }
-
- private void checkInit() throws IllegalStateException {
- if (applicationName == null) {
- throw new IllegalStateException("factory " + this + " was not init ");
- }
- }
-
- public static abstract class FactoryWindowListener extends WindowAdapter {
-
- protected abstract void allWindowsClosed();
-
- private UIFactory factory;
-
- private boolean wasClosed;
-
- public UIFactory getFactory() {
- return factory;
- }
-
- public void setFactory(UIFactory factory) {
- this.factory = factory;
- }
-
- @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 (DialogUI vcsui : factory.getCache().values()) {
- if (vcsui.isVisible()) {
- // at least one ui visible, do not kill connexions
- return;
- }
- }
- if (wasClosed) {
- // make sure to process once
- return;
- }
- synchronized (this) {
- try {
- allWindowsClosed();
- } finally {
- wasClosed = true;
- }
- }
- }
- }
-}
\ No newline at end of file
Deleted: trunk/jaxx/src/main/java/org/codelutin/ui/UIProvider.java
===================================================================
--- trunk/jaxx/src/main/java/org/codelutin/ui/UIProvider.java 2008-04-18 17:42:04 UTC (rev 549)
+++ trunk/jaxx/src/main/java/org/codelutin/ui/UIProvider.java 2008-04-18 17:42:35 UTC (rev 550)
@@ -1,68 +0,0 @@
-/**
- * # #% Copyright (C) 2008 Code Lutin, Tony Chemit
- * This program is free software; you
- * can redistribute it and/or modify it under the terms of the GNU General
- * Public License as published by the Free Software Foundation; either version 2
- * of the License, or (at your option) any later version. This program is
- * distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY;
- * without even the implied warranty of MERCHANTABILITY or FITNESS FOR A
- * PARTICULAR PURPOSE. See the GNU General Public License for more details. You
- * should have received a copy of the GNU General Public License along with this
- * program; if not, write to the Free Software Foundation, Inc., 59 Temple Place
- * - Suite 330, Boston, MA 02111-1307, USA.
- * # #%
- */
-package org.codelutin.ui;
-
-/** @author chemit */
-public abstract class UIProvider {
-
- /** the name of application using this provider */
- protected String applicationName;
-
- /** the name of ui implementation used by this provider */
- protected String name;
-
- /** array of ui implementations */
- protected Class<?>[] implementations;
-
- protected UIProvider(String applicationName, String name, Class<?>... implementations) {
- this.applicationName = applicationName;
- this.name = name;
- this.implementations = implementations;
- }
-
- /** @return the identifier of the ui provider (eg jaxx, swing, ...) */
- public String getName() {
- return name;
- }
-
- public String getApplicationName() {
- return applicationName;
- }
-
- public Class<?>[] getImplementations() {
- return implementations;
- }
-
- public <U extends DialogUI<?>, D extends DialogUIDef<?, U, ?>> U newUI(D def) throws InstantiationException, IllegalAccessException {
- Class<U> uiImpl = finImpl(def.getUiClass());
- return uiImpl != null ? uiImpl.newInstance() : null;
- }
-
- @Override
- public String toString() {
- return super.toString() + " application:" + applicationName + ", provider:" + name + ", uis:" + (java.util.Arrays.toString(implementations));
- }
-
- @SuppressWarnings({"unchecked"})
- private <X extends DialogUI> Class<X> finImpl(Class<X> uiType) {
- for (Class<?> klass : implementations) {
- if (uiType.isAssignableFrom(klass)) {
- return (Class<X>) klass;
- }
- }
- return null;
- }
-
-}
\ No newline at end of file
Copied: trunk/lutinui/src/main/java/org/codelutin/ui/DialogUI.java (from rev 547, trunk/jaxx/src/main/java/org/codelutin/ui/DialogUI.java)
===================================================================
--- trunk/lutinui/src/main/java/org/codelutin/ui/DialogUI.java (rev 0)
+++ trunk/lutinui/src/main/java/org/codelutin/ui/DialogUI.java 2008-04-18 17:42:35 UTC (rev 550)
@@ -0,0 +1,79 @@
+/**
+ * ##% Copyright (C) 2008 Code Lutin, Tony Chemit
+ * This program is free software; you
+ * can redistribute it and/or modify it under the terms of the GNU General
+ * Public License as published by the Free Software Foundation; either version 2
+ * of the License, or (at your option) any later version. This program is
+ * distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY;
+ * without even the implied warranty of MERCHANTABILITY or FITNESS FOR A
+ * PARTICULAR PURPOSE. See the GNU General Public License for more details. You
+ * should have received a copy of the GNU General Public License along with this
+ * program; if not, write to the Free Software Foundation, Inc., 59 Temple Place
+ * - Suite 330, Boston, MA 02111-1307, USA.
+ * ##%
+ */
+package org.codelutin.ui;
+
+import jaxx.runtime.UIHelper;
+
+import javax.swing.AbstractAction;
+import javax.swing.AbstractButton;
+import javax.swing.ImageIcon;
+import javax.swing.JDialog;
+import java.awt.event.WindowEvent;
+import java.awt.event.WindowListener;
+
+/**
+ * A abstract dialog contract to be realised by a dialogUI (WindowEvent adapter)
+ * <p/>
+ * TODO : make jaxx authorized implementing interface for root tag :)
+ *
+ * @author chemit
+ */
+public abstract class DialogUI<H extends DialogUIHandler> extends JDialog implements WindowListener {
+
+ private H handler;
+
+ public abstract AbstractButton getHelp();
+
+ //TODO will be handled by jaxx with javax.help...
+ protected abstract AbstractAction createHelpAction();
+
+ protected DialogUI() {
+ UIHelper.setQuitAction(this);
+ addWindowListener(this);
+ }
+
+ public H getHandler() {
+ return handler;
+ }
+
+ public void setHandler(H handler) {
+ this.handler = handler;
+ }
+
+ protected ImageIcon createActionIcon(String name) {
+ return UIHelper.createActionIcon(name);
+ }
+
+ public void windowOpened(WindowEvent e) {
+ }
+
+ public void windowClosed(WindowEvent e) {
+ }
+
+ public void windowClosing(WindowEvent e) {
+ }
+
+ public void windowIconified(WindowEvent e) {
+ }
+
+ public void windowDeiconified(WindowEvent e) {
+ }
+
+ public void windowActivated(WindowEvent e) {
+ }
+
+ public void windowDeactivated(WindowEvent e) {
+ }
+}
\ No newline at end of file
Copied: trunk/lutinui/src/main/java/org/codelutin/ui/DialogUIDef.java (from rev 547, trunk/jaxx/src/main/java/org/codelutin/ui/DialogUIDef.java)
===================================================================
--- trunk/lutinui/src/main/java/org/codelutin/ui/DialogUIDef.java (rev 0)
+++ trunk/lutinui/src/main/java/org/codelutin/ui/DialogUIDef.java 2008-04-18 17:42:35 UTC (rev 550)
@@ -0,0 +1,57 @@
+/**
+ * ##% Copyright (C) 2008 Code Lutin, Tony Chemit
+ * This program is free software; you
+ * can redistribute it and/or modify it under the terms of the GNU General
+ * Public License as published by the Free Software Foundation; either version 2
+ * of the License, or (at your option) any later version. This program is
+ * distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY;
+ * without even the implied warranty of MERCHANTABILITY or FITNESS FOR A
+ * PARTICULAR PURPOSE. See the GNU General Public License for more details. You
+ * should have received a copy of the GNU General Public License along with this
+ * program; if not, write to the Free Software Foundation, Inc., 59 Temple Place
+ * - Suite 330, Boston, MA 02111-1307, USA.
+ * ##%
+ */
+package org.codelutin.ui;
+
+/** @author chemit */
+public class DialogUIDef<M extends DialogUIModel, U extends DialogUI<?>, H extends DialogUIHandler<M, U>> {
+
+ private final Class<U> uiClass;
+ private final Class<M> modelClass;
+ private final Class<H> handlerClass;
+
+ public DialogUIDef(Class<H> handlerClass, Class<U> uiClass, Class<M> modelClass) {
+ this.handlerClass = handlerClass;
+ this.uiClass = uiClass;
+ this.modelClass = modelClass;
+ }
+
+ public Class<U> getUiClass() {
+ return uiClass;
+ }
+
+ public Class<H> getHandlerClass() {
+ return handlerClass;
+ }
+
+ public Class<M> getModelClass() {
+ return modelClass;
+ }
+
+ @Override
+ public boolean equals(Object o) {
+ return this == o || o instanceof DialogUIDef && uiClass.equals(((DialogUIDef) o).uiClass);
+
+ }
+
+ @Override
+ public int hashCode() {
+ return uiClass.hashCode();
+ }
+
+ @Override
+ public String toString() {
+ return super.toString() + "<model:" + modelClass + ", ui:" + uiClass + ", handler:" + handlerClass + '>';
+ }
+}
Copied: trunk/lutinui/src/main/java/org/codelutin/ui/DialogUIHandler.java (from rev 547, trunk/jaxx/src/main/java/org/codelutin/ui/DialogUIHandler.java)
===================================================================
--- trunk/lutinui/src/main/java/org/codelutin/ui/DialogUIHandler.java (rev 0)
+++ trunk/lutinui/src/main/java/org/codelutin/ui/DialogUIHandler.java 2008-04-18 17:42:35 UTC (rev 550)
@@ -0,0 +1,60 @@
+/**
+ * ##% Copyright (C) 2008 Code Lutin, Tony Chemit
+ * This program is free software; you
+ * can redistribute it and/or modify it under the terms of the GNU General
+ * Public License as published by the Free Software Foundation; either version 2
+ * of the License, or (at your option) any later version. This program is
+ * distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY;
+ * without even the implied warranty of MERCHANTABILITY or FITNESS FOR A
+ * PARTICULAR PURPOSE. See the GNU General Public License for more details. You
+ * should have received a copy of the GNU General Public License along with this
+ * program; if not, write to the Free Software Foundation, Inc., 59 Temple Place
+ * - Suite 330, Boston, MA 02111-1307, USA.
+ * ##%
+ */
+package org.codelutin.ui;
+
+import org.apache.commons.logging.Log;
+import org.apache.commons.logging.LogFactory;
+
+import java.beans.PropertyChangeListener;
+
+/**
+ * DialogUI handler
+ *
+ * @author chemit
+ */
+public abstract class DialogUIHandler<M extends DialogUIModel, U extends DialogUI<? extends DialogUIHandler>> implements PropertyChangeListener {
+
+ protected static Log log = LogFactory.getLog(DialogUIHandler.class);
+
+ /** ui handled */
+ private U ui;
+
+ /** model handled */
+ private M model;
+
+ protected DialogUIHandler(U ui, M model) {
+ this.ui = ui;
+ this.model = model;
+ }
+
+ public U getUi() {
+ return ui;
+ }
+
+ public M getModel() {
+ return model;
+ }
+
+ public void init() {
+ if (model == null) {
+ throw new IllegalStateException("no model was defined for " + this);
+ }
+ model.addPropertyChangeListener(this);
+ }
+
+ public void dispose() {
+ model.removePropertyChangeListener(this);
+ }
+}
\ No newline at end of file
Copied: trunk/lutinui/src/main/java/org/codelutin/ui/DialogUIModel.java (from rev 547, trunk/jaxx/src/main/java/org/codelutin/ui/DialogUIModel.java)
===================================================================
--- trunk/lutinui/src/main/java/org/codelutin/ui/DialogUIModel.java (rev 0)
+++ trunk/lutinui/src/main/java/org/codelutin/ui/DialogUIModel.java 2008-04-18 17:42:35 UTC (rev 550)
@@ -0,0 +1,85 @@
+/**
+ * ##% Copyright (C) 2008 Code Lutin, Tony Chemit
+ * This program is free software; you
+ * can redistribute it and/or modify it under the terms of the GNU General
+ * Public License as published by the Free Software Foundation; either version 2
+ * of the License, or (at your option) any later version. This program is
+ * distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY;
+ * without even the implied warranty of MERCHANTABILITY or FITNESS FOR A
+ * PARTICULAR PURPOSE. See the GNU General Public License for more details. You
+ * should have received a copy of the GNU General Public License along with this
+ * program; if not, write to the Free Software Foundation, Inc., 59 Temple Place
+ * - Suite 330, Boston, MA 02111-1307, USA.
+ * ##%
+ */
+package org.codelutin.ui;
+
+import org.apache.commons.logging.Log;
+import org.apache.commons.logging.LogFactory;
+
+import java.beans.PropertyChangeListener;
+import java.beans.PropertyChangeSupport;
+
+/**
+ * Abstract ui model, with property change support.
+ *
+ * @author chemit
+ */
+public abstract class DialogUIModel {
+
+ static protected final Log log = LogFactory.getLog(DialogUIModel.class);
+
+ /** support for change properties support */
+ protected PropertyChangeSupport changeSupport;
+
+ public synchronized void addPropertyChangeListener(String propertyName, PropertyChangeListener listener) {
+ if (listener == null) {
+ return;
+ }
+ if (changeSupport == null) {
+ changeSupport = new PropertyChangeSupport(this);
+ }
+ changeSupport.addPropertyChangeListener(propertyName, listener);
+ }
+
+ public synchronized void addPropertyChangeListener(PropertyChangeListener listener) {
+ if (listener == null) {
+ return;
+ }
+ if (changeSupport == null) {
+ changeSupport = new PropertyChangeSupport(this);
+ }
+ changeSupport.addPropertyChangeListener(listener);
+ }
+
+ public synchronized void removePropertyChangeListener(PropertyChangeListener listener) {
+ if (listener == null || changeSupport == null) {
+ return;
+ }
+ changeSupport.removePropertyChangeListener(listener);
+ }
+
+ public synchronized void removePropertyChangeListeners() {
+ if (changeSupport == null) {
+ return;
+ }
+ for (PropertyChangeListener listener : getPropertyChangeListeners()) {
+ changeSupport.removePropertyChangeListener(listener);
+ }
+ }
+
+ public synchronized PropertyChangeListener[] getPropertyChangeListeners() {
+ if (changeSupport == null) {
+ return new PropertyChangeListener[0];
+ }
+ return changeSupport.getPropertyChangeListeners();
+ }
+
+ public void firePropertyChange(String propertyName, Object oldValue, Object newValue) {
+ if (changeSupport == null || (oldValue == null && newValue == null) ||
+ (oldValue != null && oldValue.equals(newValue))) {
+ return;
+ }
+ changeSupport.firePropertyChange(propertyName, oldValue, newValue);
+ }
+}
\ No newline at end of file
Copied: trunk/lutinui/src/main/java/org/codelutin/ui/UIFactory.java (from rev 547, trunk/jaxx/src/main/java/org/codelutin/ui/UIFactory.java)
===================================================================
--- trunk/lutinui/src/main/java/org/codelutin/ui/UIFactory.java (rev 0)
+++ trunk/lutinui/src/main/java/org/codelutin/ui/UIFactory.java 2008-04-18 17:42:35 UTC (rev 550)
@@ -0,0 +1,218 @@
+/**
+ * ##% Copyright (C) 2008 Code Lutin, Tony Chemit
+ * This program is free software; you
+ * can redistribute it and/or modify it under the terms of the GNU General
+ * Public License as published by the Free Software Foundation; either version 2
+ * of the License, or (at your option) any later version. This program is
+ * distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY;
+ * without even the implied warranty of MERCHANTABILITY or FITNESS FOR A
+ * PARTICULAR PURPOSE. See the GNU General Public License for more details. You
+ * should have received a copy of the GNU General Public License along with this
+ * program; if not, write to the Free Software Foundation, Inc., 59 Temple Place
+ * - Suite 330, Boston, MA 02111-1307, USA.
+ * ##%
+ */
+package org.codelutin.ui;
+
+import org.apache.commons.logging.Log;
+import org.apache.commons.logging.LogFactory;
+import org.codelutin.util.ListenerSet;
+import org.codelutin.util.StringUtil;
+
+import java.awt.event.WindowAdapter;
+import java.awt.event.WindowEvent;
+import java.lang.reflect.InvocationTargetException;
+import java.util.HashMap;
+import java.util.Map;
+import java.util.ServiceLoader;
+
+/**
+ * Factory if VCS UI, using a cache.
+ *
+ * @author chemit
+ */
+public class UIFactory {
+
+ static protected final Log log = LogFactory.getLog(UIFactory.class);
+
+ protected static UIFactory instance;
+
+ protected Map<DialogUIDef, DialogUI> cache;
+
+ protected ServiceLoader<UIProvider> loader;
+
+ protected String applicationName;
+
+ protected ListenerSet<FactoryWindowListener> listeners;
+
+ public static void initFactory(String applicationName, FactoryWindowListener... listeners) {
+ UIFactory factory = getInstance();
+ synchronized (factory) {
+ factory.applicationName = applicationName;
+ for (FactoryWindowListener listener : listeners) {
+ listener.setFactory(factory);
+ factory.addFactoryWindowListener(listener);
+ }
+ }
+ }
+
+ public void addFactoryWindowListener(FactoryWindowListener l) {
+ listeners.add(l);
+ }
+
+ public void removeFactoryWindowListener(FactoryWindowListener l) {
+ listeners.remove(l);
+ }
+
+ public void close() {
+ if (cache != null) {
+ cache.clear();
+ cache = null;
+ }
+ if (loader != null) {
+ loader.reload();
+ loader = null;
+ }
+ while (listeners.size() > 0) {
+ removeFactoryWindowListener(listeners.iterator().next());
+ }
+
+ }
+
+ protected static UIFactory getInstance() {
+ if (instance == null) {
+ instance = new UIFactory();
+ }
+ return instance;
+ }
+
+ @Override
+ protected void finalize() throws Throwable {
+ super.finalize();
+ close();
+ }
+
+ protected synchronized Map<DialogUIDef, DialogUI> getCache() {
+ if (cache == null) {
+ cache = new HashMap<DialogUIDef, DialogUI>();
+ }
+ return cache;
+ }
+
+ protected synchronized ServiceLoader<UIProvider> getProviders() {
+ checkInit();
+ if (loader == null) {
+ long t0 = System.nanoTime();
+
+ loader = ServiceLoader.load(UIProvider.class);
+ int nb = 0;
+ for (UIProvider provider : loader) {
+ log.info(provider.getName() + " [" + provider + ']');
+ nb++;
+ }
+ log.info("found " + nb + " ui provider(s) in " + StringUtil.convertTime(t0, System.nanoTime()));
+ }
+ return loader;
+ }
+
+ protected DialogUI newUI(DialogUIDef uiType) {
+
+ DialogUI result = getInstance().getCache().get(uiType);
+ if (result == null) {
+ try {
+ getCache().put(uiType, result = newUI0(uiType));
+ for (FactoryWindowListener listener : listeners) {
+ result.addWindowListener(listener);
+ }
+ } catch (Exception e) {
+ throw new IllegalStateException("could not instanciate ui handler " + uiType + " for reason : " + e.getMessage());
+ }
+ }
+ return result;
+ }
+
+ protected DialogUI newUI0(DialogUIDef uiType, Object... params) throws IllegalAccessException, InstantiationException, NoSuchMethodException, InvocationTargetException {
+ for (UIProvider provider : getProviders()) {
+ DialogUI ui = provider.newUI(uiType);
+ if (ui != null) {
+ Class<?>[] prototype = getHandlerPrototype(ui.getClass(), params);
+ Object[] parameters = getHandlerParameters(ui, params);
+ uiType.getHandlerClass().getConstructor(prototype).newInstance(ui, parameters);
+ ui.getHandler().init();
+ return ui;
+ }
+ }
+ throw new IllegalStateException("could not find ui " + uiType);
+ }
+
+ protected UIFactory() {
+ listeners = new ListenerSet<FactoryWindowListener>();
+ }
+
+ protected Class<?>[] getHandlerPrototype(Class<? extends DialogUI> aClass, Object[] params) {
+ Class<?>[] classes = new Class<?>[1 + params.length];
+ classes[0] = aClass.getSuperclass();
+ for (int i = 0; i < params.length; i++) {
+ classes[i + 1] = params[i].getClass();
+ }
+ return classes;
+ }
+
+ protected Object[] getHandlerParameters(DialogUI ui, Object[] params) {
+ Object[] classes = new Object[1 + params.length];
+ classes[0] = ui;
+ System.arraycopy(params, 0, classes, 1, params.length);
+ return classes;
+ }
+
+ private void checkInit() throws IllegalStateException {
+ if (applicationName == null) {
+ throw new IllegalStateException("factory " + this + " was not init ");
+ }
+ }
+
+ public static abstract class FactoryWindowListener extends WindowAdapter {
+
+ protected abstract void allWindowsClosed();
+
+ private UIFactory factory;
+
+ private boolean wasClosed;
+
+ public UIFactory getFactory() {
+ return factory;
+ }
+
+ public void setFactory(UIFactory factory) {
+ this.factory = factory;
+ }
+
+ @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 (DialogUI vcsui : factory.getCache().values()) {
+ if (vcsui.isVisible()) {
+ // at least one ui visible, do not kill connexions
+ return;
+ }
+ }
+ if (wasClosed) {
+ // make sure to process once
+ return;
+ }
+ synchronized (this) {
+ try {
+ allWindowsClosed();
+ } finally {
+ wasClosed = true;
+ }
+ }
+ }
+ }
+}
\ No newline at end of file
Copied: trunk/lutinui/src/main/java/org/codelutin/ui/UIProvider.java (from rev 547, trunk/jaxx/src/main/java/org/codelutin/ui/UIProvider.java)
===================================================================
--- trunk/lutinui/src/main/java/org/codelutin/ui/UIProvider.java (rev 0)
+++ trunk/lutinui/src/main/java/org/codelutin/ui/UIProvider.java 2008-04-18 17:42:35 UTC (rev 550)
@@ -0,0 +1,68 @@
+/**
+ * # #% Copyright (C) 2008 Code Lutin, Tony Chemit
+ * This program is free software; you
+ * can redistribute it and/or modify it under the terms of the GNU General
+ * Public License as published by the Free Software Foundation; either version 2
+ * of the License, or (at your option) any later version. This program is
+ * distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY;
+ * without even the implied warranty of MERCHANTABILITY or FITNESS FOR A
+ * PARTICULAR PURPOSE. See the GNU General Public License for more details. You
+ * should have received a copy of the GNU General Public License along with this
+ * program; if not, write to the Free Software Foundation, Inc., 59 Temple Place
+ * - Suite 330, Boston, MA 02111-1307, USA.
+ * # #%
+ */
+package org.codelutin.ui;
+
+/** @author chemit */
+public abstract class UIProvider {
+
+ /** the name of application using this provider */
+ protected String applicationName;
+
+ /** the name of ui implementation used by this provider */
+ protected String name;
+
+ /** array of ui implementations */
+ protected Class<?>[] implementations;
+
+ protected UIProvider(String applicationName, String name, Class<?>... implementations) {
+ this.applicationName = applicationName;
+ this.name = name;
+ this.implementations = implementations;
+ }
+
+ /** @return the identifier of the ui provider (eg jaxx, swing, ...) */
+ public String getName() {
+ return name;
+ }
+
+ public String getApplicationName() {
+ return applicationName;
+ }
+
+ public Class<?>[] getImplementations() {
+ return implementations;
+ }
+
+ public <U extends DialogUI<?>, D extends DialogUIDef<?, U, ?>> U newUI(D def) throws InstantiationException, IllegalAccessException {
+ Class<U> uiImpl = finImpl(def.getUiClass());
+ return uiImpl != null ? uiImpl.newInstance() : null;
+ }
+
+ @Override
+ public String toString() {
+ return super.toString() + " application:" + applicationName + ", provider:" + name + ", uis:" + (java.util.Arrays.toString(implementations));
+ }
+
+ @SuppressWarnings({"unchecked"})
+ private <X extends DialogUI> Class<X> finImpl(Class<X> uiType) {
+ for (Class<?> klass : implementations) {
+ if (uiType.isAssignableFrom(klass)) {
+ return (Class<X>) klass;
+ }
+ }
+ return null;
+ }
+
+}
\ No newline at end of file
1
0
r549 - in trunk/jaxx/src/main/java: jaxx/compiler jaxx/runtime jaxx/runtime/builder org/codelutin/ui
by tchemit@users.labs.libre-entreprise.org 18 Apr '08
by tchemit@users.labs.libre-entreprise.org 18 Apr '08
18 Apr '08
Author: tchemit
Date: 2008-04-18 17:42:04 +0000 (Fri, 18 Apr 2008)
New Revision: 549
Added:
trunk/jaxx/src/main/java/org/codelutin/ui/UIHelper.java
Removed:
trunk/jaxx/src/main/java/jaxx/runtime/UIHelper.java
Modified:
trunk/jaxx/src/main/java/jaxx/compiler/JAXXCompiler.java
trunk/jaxx/src/main/java/jaxx/runtime/builder/ActionFactory.java
Log:
lutinui module
Modified: trunk/jaxx/src/main/java/jaxx/compiler/JAXXCompiler.java
===================================================================
--- trunk/jaxx/src/main/java/jaxx/compiler/JAXXCompiler.java 2008-04-18 17:39:23 UTC (rev 548)
+++ trunk/jaxx/src/main/java/jaxx/compiler/JAXXCompiler.java 2008-04-18 17:42:04 UTC (rev 549)
@@ -107,7 +107,7 @@
staticImports.add("jaxx.runtime.swing.VBox");
staticImports.add("jaxx.runtime.swing.Table");
staticImports.add("static org.codelutin.i18n.I18n._");
- staticImports.add("static jaxx.runtime.UIHelper.createImageIcon");
+ staticImports.add("static org.codelutin.ui.UIHelper.createImageIcon");
}
private static DefaultObjectHandler firstPassClassTagHandler = new DefaultObjectHandler(ClassDescriptorLoader.getClassDescriptor(Object.class));
Deleted: trunk/jaxx/src/main/java/jaxx/runtime/UIHelper.java
===================================================================
--- trunk/jaxx/src/main/java/jaxx/runtime/UIHelper.java 2008-04-18 17:39:23 UTC (rev 548)
+++ trunk/jaxx/src/main/java/jaxx/runtime/UIHelper.java 2008-04-18 17:42:04 UTC (rev 549)
@@ -1,65 +0,0 @@
-/*
-* ##% Copyright (C) 2002, 2003, 2004, 2005, 2006, 2007, 2008 Code Lutin,
-* Tony Chemit
-*
-* This program is free software; you can redistribute it and/or
-* modify it under the terms of the GNU General Public License
-* as published by the Free Software Foundation; either version 2
-* of the License, or (at your option) any later version.
-*
-* This program is distributed in the hope that it will be useful,
-* but WITHOUT ANY WARRANTY; without even the implied warranty of
-* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
-* GNU General Public License for more details.
-*
-* You should have received a copy of the GNU General Public License
-* along with this program; if not, write to the Free Software
-* Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
-* ##% */
-package jaxx.runtime;
-
-import javax.swing.ImageIcon;
-import javax.swing.JDialog;
-import javax.swing.JRootPane;
-import javax.swing.Action;
-import javax.swing.AbstractAction;
-import javax.swing.JComponent;
-import javax.swing.KeyStroke;
-import java.awt.event.ActionEvent;
-
-/** @author tony */
-public class UIHelper {
-
- public static ImageIcon createImageIcon(String path) {
- java.net.URL imgURL = UIHelper.class.getResource("/icons/" + path);
- if (imgURL != null) {
- return new ImageIcon(imgURL);
- } else {
- throw new RuntimeException("could not find icon " + path);
- }
- }
-
- /**
- * Attach to <code>ui</code> an abort action,accessible by <code>ESC</code> key.
- *
- * @param ui ui
- */
- public static void setQuitAction(final JDialog ui) {
- JRootPane rootPane = ui.getRootPane();
-
- Action quitAction = new AbstractAction("quit") {
- private static final long serialVersionUID = -869095664995763057L;
-
- public void actionPerformed(ActionEvent e) {
- ui.dispose();
- }
- };
- rootPane.getInputMap(JComponent.WHEN_IN_FOCUSED_WINDOW).put(KeyStroke.getKeyStroke("ESCAPE"), "quit");
- rootPane.getActionMap().put("quit", quitAction);
- }
-
- public static ImageIcon createActionIcon(String name) {
- return createImageIcon("action-" + name + ".png");
- }
-
-}
Modified: trunk/jaxx/src/main/java/jaxx/runtime/builder/ActionFactory.java
===================================================================
--- trunk/jaxx/src/main/java/jaxx/runtime/builder/ActionFactory.java 2008-04-18 17:39:23 UTC (rev 548)
+++ trunk/jaxx/src/main/java/jaxx/runtime/builder/ActionFactory.java 2008-04-18 17:42:04 UTC (rev 549)
@@ -19,7 +19,7 @@
package jaxx.runtime.builder;
import jaxx.runtime.JAXXObject;
-import jaxx.runtime.UIHelper;
+import org.codelutin.ui.UIHelper;
import jaxx.runtime.swing.JAXXToggleButton;
import org.apache.commons.logging.Log;
import org.apache.commons.logging.LogFactory;
Copied: trunk/jaxx/src/main/java/org/codelutin/ui/UIHelper.java (from rev 547, trunk/jaxx/src/main/java/jaxx/runtime/UIHelper.java)
===================================================================
--- trunk/jaxx/src/main/java/org/codelutin/ui/UIHelper.java (rev 0)
+++ trunk/jaxx/src/main/java/org/codelutin/ui/UIHelper.java 2008-04-18 17:42:04 UTC (rev 549)
@@ -0,0 +1,65 @@
+/*
+* ##% Copyright (C) 2002, 2003, 2004, 2005, 2006, 2007, 2008 Code Lutin,
+* Tony Chemit
+*
+* This program is free software; you can redistribute it and/or
+* modify it under the terms of the GNU General Public License
+* as published by the Free Software Foundation; either version 2
+* of the License, or (at your option) any later version.
+*
+* This program is distributed in the hope that it will be useful,
+* but WITHOUT ANY WARRANTY; without even the implied warranty of
+* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+* GNU General Public License for more details.
+*
+* You should have received a copy of the GNU General Public License
+* along with this program; if not, write to the Free Software
+* Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
+* ##% */
+package org.codelutin.ui;
+
+import javax.swing.ImageIcon;
+import javax.swing.JDialog;
+import javax.swing.JRootPane;
+import javax.swing.Action;
+import javax.swing.AbstractAction;
+import javax.swing.JComponent;
+import javax.swing.KeyStroke;
+import java.awt.event.ActionEvent;
+
+/** @author tony */
+public class UIHelper {
+
+ public static ImageIcon createImageIcon(String path) {
+ java.net.URL imgURL = UIHelper.class.getResource("/icons/" + path);
+ if (imgURL != null) {
+ return new ImageIcon(imgURL);
+ } else {
+ throw new RuntimeException("could not find icon " + path);
+ }
+ }
+
+ /**
+ * Attach to <code>ui</code> an abort action,accessible by <code>ESC</code> key.
+ *
+ * @param ui ui
+ */
+ public static void setQuitAction(final JDialog ui) {
+ JRootPane rootPane = ui.getRootPane();
+
+ Action quitAction = new AbstractAction("quit") {
+ private static final long serialVersionUID = -869095664995763057L;
+
+ public void actionPerformed(ActionEvent e) {
+ ui.dispose();
+ }
+ };
+ rootPane.getInputMap(JComponent.WHEN_IN_FOCUSED_WINDOW).put(KeyStroke.getKeyStroke("ESCAPE"), "quit");
+ rootPane.getActionMap().put("quit", quitAction);
+ }
+
+ public static ImageIcon createActionIcon(String name) {
+ return createImageIcon("action-" + name + ".png");
+ }
+
+}
1
0
r548 - in trunk: . lutinui lutinui/doc lutinui/src lutinui/src/main lutinui/src/main/java lutinui/src/main/java/org lutinui/src/main/java/org/codelutin lutinui/src/main/resources lutinui/src/main/resources/META-INF lutinui/src/test
by tchemit@users.labs.libre-entreprise.org 18 Apr '08
by tchemit@users.labs.libre-entreprise.org 18 Apr '08
18 Apr '08
Author: tchemit
Date: 2008-04-18 17:39:23 +0000 (Fri, 18 Apr 2008)
New Revision: 548
Added:
trunk/lutinui/
trunk/lutinui/LICENSE.txt
trunk/lutinui/changelog
trunk/lutinui/doc/
trunk/lutinui/doc/Todo.rst
trunk/lutinui/doc/index.rst
trunk/lutinui/pom.xml
trunk/lutinui/src/
trunk/lutinui/src/main/
trunk/lutinui/src/main/java/
trunk/lutinui/src/main/java/org/
trunk/lutinui/src/main/java/org/codelutin/
trunk/lutinui/src/main/java/org/codelutin/ui/
trunk/lutinui/src/main/resources/
trunk/lutinui/src/main/resources/META-INF/
trunk/lutinui/src/main/resources/META-INF/services/
trunk/lutinui/src/site/
trunk/lutinui/src/test/
trunk/lutinui/src/test/java/
trunk/lutinui/src/test/resources/
Log:
lutinui module
Property changes on: trunk/lutinui
___________________________________________________________________
Name: svn:ignore
+ target
Added: trunk/lutinui/LICENSE.txt
===================================================================
--- trunk/lutinui/LICENSE.txt (rev 0)
+++ trunk/lutinui/LICENSE.txt 2008-04-18 17:39:23 UTC (rev 548)
@@ -0,0 +1,280 @@
+ GNU GENERAL PUBLIC LICENSE
+ Version 2, June 1991
+
+ Copyright (C) 1989, 1991 Free Software Foundation, Inc.
+ 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
+ Everyone is permitted to copy and distribute verbatim copies
+ of this license document, but changing it is not allowed.
+
+ Preamble
+
+ The licenses for most software are designed to take away your
+freedom to share and change it. By contrast, the GNU General Public
+License is intended to guarantee your freedom to share and change free
+software--to make sure the software is free for all its users. This
+General Public License applies to most of the Free Software
+Foundation's software and to any other program whose authors commit to
+using it. (Some other Free Software Foundation software is covered by
+the GNU Library General Public License instead.) You can apply it to
+your programs, too.
+
+ When we speak of free software, we are referring to freedom, not
+price. Our General Public Licenses are designed to make sure that you
+have the freedom to distribute copies of free software (and charge for
+this service if you wish), that you receive source code or can get it
+if you want it, that you can change the software or use pieces of it
+in new free programs; and that you know you can do these things.
+
+ To protect your rights, we need to make restrictions that forbid
+anyone to deny you these rights or to ask you to surrender the rights.
+These restrictions translate to certain responsibilities for you if you
+distribute copies of the software, or if you modify it.
+
+ For example, if you distribute copies of such a program, whether
+gratis or for a fee, you must give the recipients all the rights that
+you have. You must make sure that they, too, receive or can get the
+source code. And you must show them these terms so they know their
+rights.
+
+ We protect your rights with two steps: (1) copyright the software, and
+(2) offer you this license which gives you legal permission to copy,
+distribute and/or modify the software.
+
+ Also, for each author's protection and ours, we want to make certain
+that everyone understands that there is no warranty for this free
+software. If the software is modified by someone else and passed on, we
+want its recipients to know that what they have is not the original, so
+that any problems introduced by others will not reflect on the original
+authors' reputations.
+
+ Finally, any free program is threatened constantly by software
+patents. We wish to avoid the danger that redistributors of a free
+program will individually obtain patent licenses, in effect making the
+program proprietary. To prevent this, we have made it clear that any
+patent must be licensed for everyone's free use or not licensed at all.
+
+ The precise terms and conditions for copying, distribution and
+modification follow.
+
+ GNU GENERAL PUBLIC LICENSE
+ TERMS AND CONDITIONS FOR COPYING, DISTRIBUTION AND MODIFICATION
+
+ 0. This License applies to any program or other work which contains
+a notice placed by the copyright holder saying it may be distributed
+under the terms of this General Public License. The "Program", below,
+refers to any such program or work, and a "work based on the Program"
+means either the Program or any derivative work under copyright law:
+that is to say, a work containing the Program or a portion of it,
+either verbatim or with modifications and/or translated into another
+language. (Hereinafter, translation is included without limitation in
+the term "modification".) Each licensee is addressed as "you".
+
+Activities other than copying, distribution and modification are not
+covered by this License; they are outside its scope. The act of
+running the Program is not restricted, and the output from the Program
+is covered only if its contents constitute a work based on the
+Program (independent of having been made by running the Program).
+Whether that is true depends on what the Program does.
+
+ 1. You may copy and distribute verbatim copies of the Program's
+source code as you receive it, in any medium, provided that you
+conspicuously and appropriately publish on each copy an appropriate
+copyright notice and disclaimer of warranty; keep intact all the
+notices that refer to this License and to the absence of any warranty;
+and give any other recipients of the Program a copy of this License
+along with the Program.
+
+You may charge a fee for the physical act of transferring a copy, and
+you may at your option offer warranty protection in exchange for a fee.
+
+ 2. You may modify your copy or copies of the Program or any portion
+of it, thus forming a work based on the Program, and copy and
+distribute such modifications or work under the terms of Section 1
+above, provided that you also meet all of these conditions:
+
+ a) You must cause the modified files to carry prominent notices
+ stating that you changed the files and the date of any change.
+
+ b) You must cause any work that you distribute or publish, that in
+ whole or in part contains or is derived from the Program or any
+ part thereof, to be licensed as a whole at no charge to all third
+ parties under the terms of this License.
+
+ c) If the modified program normally reads commands interactively
+ when run, you must cause it, when started running for such
+ interactive use in the most ordinary way, to print or display an
+ announcement including an appropriate copyright notice and a
+ notice that there is no warranty (or else, saying that you provide
+ a warranty) and that users may redistribute the program under
+ these conditions, and telling the user how to view a copy of this
+ License. (Exception: if the Program itself is interactive but
+ does not normally print such an announcement, your work based on
+ the Program is not required to print an announcement.)
+
+These requirements apply to the modified work as a whole. If
+identifiable sections of that work are not derived from the Program,
+and can be reasonably considered independent and separate works in
+themselves, then this License, and its terms, do not apply to those
+sections when you distribute them as separate works. But when you
+distribute the same sections as part of a whole which is a work based
+on the Program, the distribution of the whole must be on the terms of
+this License, whose permissions for other licensees extend to the
+entire whole, and thus to each and every part regardless of who wrote it.
+
+Thus, it is not the intent of this section to claim rights or contest
+your rights to work written entirely by you; rather, the intent is to
+exercise the right to control the distribution of derivative or
+collective works based on the Program.
+
+In addition, mere aggregation of another work not based on the Program
+with the Program (or with a work based on the Program) on a volume of
+a storage or distribution medium does not bring the other work under
+the scope of this License.
+
+ 3. You may copy and distribute the Program (or a work based on it,
+under Section 2) in object code or executable form under the terms of
+Sections 1 and 2 above provided that you also do one of the following:
+
+ a) Accompany it with the complete corresponding machine-readable
+ source code, which must be distributed under the terms of Sections
+ 1 and 2 above on a medium customarily used for software interchange; or,
+
+ b) Accompany it with a written offer, valid for at least three
+ years, to give any third party, for a charge no more than your
+ cost of physically performing source distribution, a complete
+ machine-readable copy of the corresponding source code, to be
+ distributed under the terms of Sections 1 and 2 above on a medium
+ customarily used for software interchange; or,
+
+ c) Accompany it with the information you received as to the offer
+ to distribute corresponding source code. (This alternative is
+ allowed only for noncommercial distribution and only if you
+ received the program in object code or executable form with such
+ an offer, in accord with Subsection b above.)
+
+The source code for a work means the preferred form of the work for
+making modifications to it. For an executable work, complete source
+code means all the source code for all modules it contains, plus any
+associated interface definition files, plus the scripts used to
+control compilation and installation of the executable. However, as a
+special exception, the source code distributed need not include
+anything that is normally distributed (in either source or binary
+form) with the major components (compiler, kernel, and so on) of the
+operating system on which the executable runs, unless that component
+itself accompanies the executable.
+
+If distribution of executable or object code is made by offering
+access to copy from a designated place, then offering equivalent
+access to copy the source code from the same place counts as
+distribution of the source code, even though third parties are not
+compelled to copy the source along with the object code.
+
+ 4. You may not copy, modify, sublicense, or distribute the Program
+except as expressly provided under this License. Any attempt
+otherwise to copy, modify, sublicense or distribute the Program is
+void, and will automatically terminate your rights under this License.
+However, parties who have received copies, or rights, from you under
+this License will not have their licenses terminated so long as such
+parties remain in full compliance.
+
+ 5. You are not required to accept this License, since you have not
+signed it. However, nothing else grants you permission to modify or
+distribute the Program or its derivative works. These actions are
+prohibited by law if you do not accept this License. Therefore, by
+modifying or distributing the Program (or any work based on the
+Program), you indicate your acceptance of this License to do so, and
+all its terms and conditions for copying, distributing or modifying
+the Program or works based on it.
+
+ 6. Each time you redistribute the Program (or any work based on the
+Program), the recipient automatically receives a license from the
+original licensor to copy, distribute or modify the Program subject to
+these terms and conditions. You may not impose any further
+restrictions on the recipients' exercise of the rights granted herein.
+You are not responsible for enforcing compliance by third parties to
+this License.
+
+ 7. If, as a consequence of a court judgment or allegation of patent
+infringement or for any other reason (not limited to patent issues),
+conditions are imposed on you (whether by court order, agreement or
+otherwise) that contradict the conditions of this License, they do not
+excuse you from the conditions of this License. If you cannot
+distribute so as to satisfy simultaneously your obligations under this
+License and any other pertinent obligations, then as a consequence you
+may not distribute the Program at all. For example, if a patent
+license would not permit royalty-free redistribution of the Program by
+all those who receive copies directly or indirectly through you, then
+the only way you could satisfy both it and this License would be to
+refrain entirely from distribution of the Program.
+
+If any portion of this section is held invalid or unenforceable under
+any particular circumstance, the balance of the section is intended to
+apply and the section as a whole is intended to apply in other
+circumstances.
+
+It is not the purpose of this section to induce you to infringe any
+patents or other property right claims or to contest validity of any
+such claims; this section has the sole purpose of protecting the
+integrity of the free software distribution system, which is
+implemented by public license practices. Many people have made
+generous contributions to the wide range of software distributed
+through that system in reliance on consistent application of that
+system; it is up to the author/donor to decide if he or she is willing
+to distribute software through any other system and a licensee cannot
+impose that choice.
+
+This section is intended to make thoroughly clear what is believed to
+be a consequence of the rest of this License.
+
+ 8. If the distribution and/or use of the Program is restricted in
+certain countries either by patents or by copyrighted interfaces, the
+original copyright holder who places the Program under this License
+may add an explicit geographical distribution limitation excluding
+those countries, so that distribution is permitted only in or among
+countries not thus excluded. In such case, this License incorporates
+the limitation as if written in the body of this License.
+
+ 9. The Free Software Foundation may publish revised and/or new versions
+of the General Public License from time to time. Such new versions will
+be similar in spirit to the present version, but may differ in detail to
+address new problems or concerns.
+
+Each version is given a distinguishing version number. If the Program
+specifies a version number of this License which applies to it and "any
+later version", you have the option of following the terms and conditions
+either of that version or of any later version published by the Free
+Software Foundation. If the Program does not specify a version number of
+this License, you may choose any version ever published by the Free Software
+Foundation.
+
+ 10. If you wish to incorporate parts of the Program into other free
+programs whose distribution conditions are different, write to the author
+to ask for permission. For software which is copyrighted by the Free
+Software Foundation, write to the Free Software Foundation; we sometimes
+make exceptions for this. Our decision will be guided by the two goals
+of preserving the free status of all derivatives of our free software and
+of promoting the sharing and reuse of software generally.
+
+ NO WARRANTY
+
+ 11. BECAUSE THE PROGRAM IS LICENSED FREE OF CHARGE, THERE IS NO WARRANTY
+FOR THE PROGRAM, TO THE EXTENT PERMITTED BY APPLICABLE LAW. EXCEPT WHEN
+OTHERWISE STATED IN WRITING THE COPYRIGHT HOLDERS AND/OR OTHER PARTIES
+PROVIDE THE PROGRAM "AS IS" WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESSED
+OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
+MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. THE ENTIRE RISK AS
+TO THE QUALITY AND PERFORMANCE OF THE PROGRAM IS WITH YOU. SHOULD THE
+PROGRAM PROVE DEFECTIVE, YOU ASSUME THE COST OF ALL NECESSARY SERVICING,
+REPAIR OR CORRECTION.
+
+ 12. IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING
+WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MAY MODIFY AND/OR
+REDISTRIBUTE THE PROGRAM AS PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES,
+INCLUDING ANY GENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING
+OUT OF THE USE OR INABILITY TO USE THE PROGRAM (INCLUDING BUT NOT LIMITED
+TO LOSS OF DATA OR DATA BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY
+YOU OR THIRD PARTIES OR A FAILURE OF THE PROGRAM TO OPERATE WITH ANY OTHER
+PROGRAMS), EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE
+POSSIBILITY OF SUCH DAMAGES.
+
+ END OF TERMS AND CONDITIONS
Added: trunk/lutinui/changelog
===================================================================
--- trunk/lutinui/changelog (rev 0)
+++ trunk/lutinui/changelog 2008-04-18 17:39:23 UTC (rev 548)
@@ -0,0 +1 @@
+ver-0-1 chemit initial release imported from jaxx-1-0-5 04-2008
Added: trunk/lutinui/doc/Todo.rst
===================================================================
Added: trunk/lutinui/doc/index.rst
===================================================================
--- trunk/lutinui/doc/index.rst (rev 0)
+++ trunk/lutinui/doc/index.rst 2008-04-18 17:39:23 UTC (rev 548)
@@ -0,0 +1,13 @@
+Lutinui
+=======
+
+.. contents::
+
+
+Pr�sentation
+------------
+
+TODO
+
+**Veuillez consulter la JavaDoc pour de plus ample d�tails sur les diff�rentes
+librairies.**
Added: trunk/lutinui/pom.xml
===================================================================
--- trunk/lutinui/pom.xml (rev 0)
+++ trunk/lutinui/pom.xml 2008-04-18 17:39:23 UTC (rev 548)
@@ -0,0 +1,99 @@
+<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/maven-v4_0_0.xsd">
+
+ <modelVersion>4.0.0</modelVersion>
+
+ <!-- ************************************************************* -->
+ <!-- *** POM Relationships *************************************** -->
+ <!-- ************************************************************* -->
+
+ <parent>
+ <groupId>lutinpom</groupId>
+ <artifactId>lutinproject</artifactId>
+ <version>2.3</version>
+ </parent>
+
+ <groupId>lutinlib</groupId>
+ <artifactId>lutinui</artifactId>
+
+ <dependencies>
+ <dependency>
+ <groupId>lutinlib</groupId>
+ <artifactId>lutinutil</artifactId>
+ <version>0.31-SNAPSHOT</version>
+ <scope>compile</scope>
+ </dependency>
+
+ </dependencies>
+
+ <!-- ************************************************************* -->
+ <!-- *** Project Information ************************************* -->
+ <!-- ************************************************************* -->
+
+ <name>Lutin ui framework library</name>
+ <version>0.1-SNAPSHOT</version>
+
+ <description>Library of framework lutinui</description>
+ <inceptionYear>2008</inceptionYear>
+
+ <developers>
+ <developer>
+ <name>Tony Chemit</name>
+ <email>chemit(a)codelutin.com</email>
+ <organization>Code Lutin</organization>
+ <timezone>+2</timezone>
+ <roles>
+ <role>Developer</role>
+ </roles>
+ </developer>
+ </developers>
+
+ <!-- ************************************************************* -->
+ <!-- *** Build Settings ****************************************** -->
+ <!-- ************************************************************* -->
+
+ <packaging>jar</packaging>
+
+ <profiles>
+ <profile>
+ <id>project</id>
+
+ <activation>
+ <activeByDefault>true</activeByDefault>
+ </activation>
+
+ <properties>
+
+ <!-- buix projects labs' id -->
+ <labs.id>38</labs.id>
+
+ <!-- the project is inside the buix labs project -->
+ <labs.project>buix</labs.project>
+
+ <!-- maven will suffix with /${pom.artifactId} AND This is not good at all -->
+ <!--maven.scm.url>https://${labs.host}/plugins/scmsvn/viewcvs.php/trunk/${pom.artifactId}?root=${labs.project}</maven.scm.url-->
+
+ <!-- maven will suffix with /${pom.artifactId} -->
+ <maven.scm.developerConnection>scm:svn:svn+ssh://tchemit@${labs.host}/svnroot/${labs.project}/trunk</maven.scm.developerConnection>
+
+ <!-- maven will suffix with /${pom.artifactId} -->
+ <maven.scm.connection>scm:svn:svn:anonymous@${labs.host}/svnroot/${labs.project}/trunk</maven.scm.connection>
+
+ <!--Main class in JAR -->
+ <!--maven.jar.main.class></maven.jar.main.class-->
+
+ </properties>
+ </profile>
+ </profiles>
+ <!-- ************************************************************* -->
+ <!-- *** Build Environment ************************************** -->
+ <!-- ************************************************************* -->
+
+ <!-- the project is a module in a labs project (buix), so we have to override
+ this property (see in the parent pom for more explanation)
+ -->
+ <scm>
+ <developerConnection>${maven.scm.developerConnection}</developerConnection>
+ <!--url>${maven.scm.url}</url-->
+ </scm>
+
+</project>
1
0
r547 - in trunk/jaxx/src/main/java: . jaxx org org/codelutin org/codelutin/ui
by tchemit@users.labs.libre-entreprise.org 18 Apr '08
by tchemit@users.labs.libre-entreprise.org 18 Apr '08
18 Apr '08
Author: tchemit
Date: 2008-04-18 17:15:23 +0000 (Fri, 18 Apr 2008)
New Revision: 547
Added:
trunk/jaxx/src/main/java/org/
trunk/jaxx/src/main/java/org/codelutin/
trunk/jaxx/src/main/java/org/codelutin/ui/
trunk/jaxx/src/main/java/org/codelutin/ui/DialogUI.java
trunk/jaxx/src/main/java/org/codelutin/ui/DialogUIDef.java
trunk/jaxx/src/main/java/org/codelutin/ui/DialogUIHandler.java
trunk/jaxx/src/main/java/org/codelutin/ui/DialogUIModel.java
trunk/jaxx/src/main/java/org/codelutin/ui/UIFactory.java
trunk/jaxx/src/main/java/org/codelutin/ui/UIProvider.java
Removed:
trunk/jaxx/src/main/java/jaxx/DialogUI.java
trunk/jaxx/src/main/java/jaxx/DialogUIDef.java
trunk/jaxx/src/main/java/jaxx/DialogUIHandler.java
trunk/jaxx/src/main/java/jaxx/DialogUIModel.java
trunk/jaxx/src/main/java/jaxx/UIFactory.java
trunk/jaxx/src/main/java/jaxx/UIProvider.java
Log:
generic UIPRovider, UIFactory and introduce DialogUIDef, outside jaxx namespace
Deleted: trunk/jaxx/src/main/java/jaxx/DialogUI.java
===================================================================
--- trunk/jaxx/src/main/java/jaxx/DialogUI.java 2008-04-18 17:11:28 UTC (rev 546)
+++ trunk/jaxx/src/main/java/jaxx/DialogUI.java 2008-04-18 17:15:23 UTC (rev 547)
@@ -1,79 +0,0 @@
-/**
- * ##% Copyright (C) 2008 Code Lutin, Tony Chemit
- * This program is free software; you
- * can redistribute it and/or modify it under the terms of the GNU General
- * Public License as published by the Free Software Foundation; either version 2
- * of the License, or (at your option) any later version. This program is
- * distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY;
- * without even the implied warranty of MERCHANTABILITY or FITNESS FOR A
- * PARTICULAR PURPOSE. See the GNU General Public License for more details. You
- * should have received a copy of the GNU General Public License along with this
- * program; if not, write to the Free Software Foundation, Inc., 59 Temple Place
- * - Suite 330, Boston, MA 02111-1307, USA.
- * ##%
- */
-package jaxx;
-
-import jaxx.runtime.UIHelper;
-
-import javax.swing.AbstractAction;
-import javax.swing.AbstractButton;
-import javax.swing.ImageIcon;
-import javax.swing.JDialog;
-import java.awt.event.WindowEvent;
-import java.awt.event.WindowListener;
-
-/**
- * A abstract dialog contract to be realised by a dialogUI (WindowEvent adapter)
- * <p/>
- * TODO : make jaxx authorized implementing interface for root tag :)
- *
- * @author chemit
- */
-public abstract class DialogUI<H extends DialogUIHandler> extends JDialog implements WindowListener {
-
- private H handler;
-
- public abstract AbstractButton getHelp();
-
- //TODO will be handled by jaxx with javax.help...
- protected abstract AbstractAction createHelpAction();
-
- protected DialogUI() {
- UIHelper.setQuitAction(this);
- addWindowListener(this);
- }
-
- public H getHandler() {
- return handler;
- }
-
- public void setHandler(H handler) {
- this.handler = handler;
- }
-
- protected ImageIcon createActionIcon(String name) {
- return UIHelper.createActionIcon(name);
- }
-
- public void windowOpened(WindowEvent e) {
- }
-
- public void windowClosed(WindowEvent e) {
- }
-
- public void windowClosing(WindowEvent e) {
- }
-
- public void windowIconified(WindowEvent e) {
- }
-
- public void windowDeiconified(WindowEvent e) {
- }
-
- public void windowActivated(WindowEvent e) {
- }
-
- public void windowDeactivated(WindowEvent e) {
- }
-}
\ No newline at end of file
Deleted: trunk/jaxx/src/main/java/jaxx/DialogUIDef.java
===================================================================
--- trunk/jaxx/src/main/java/jaxx/DialogUIDef.java 2008-04-18 17:11:28 UTC (rev 546)
+++ trunk/jaxx/src/main/java/jaxx/DialogUIDef.java 2008-04-18 17:15:23 UTC (rev 547)
@@ -1,57 +0,0 @@
-/**
- * ##% Copyright (C) 2008 Code Lutin, Tony Chemit
- * This program is free software; you
- * can redistribute it and/or modify it under the terms of the GNU General
- * Public License as published by the Free Software Foundation; either version 2
- * of the License, or (at your option) any later version. This program is
- * distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY;
- * without even the implied warranty of MERCHANTABILITY or FITNESS FOR A
- * PARTICULAR PURPOSE. See the GNU General Public License for more details. You
- * should have received a copy of the GNU General Public License along with this
- * program; if not, write to the Free Software Foundation, Inc., 59 Temple Place
- * - Suite 330, Boston, MA 02111-1307, USA.
- * ##%
- */
-package jaxx;
-
-/** @author chemit */
-public class DialogUIDef<M extends DialogUIModel, U extends DialogUI<?>, H extends DialogUIHandler<M, U>> {
-
- private final Class<U> uiClass;
- private final Class<M> modelClass;
- private final Class<H> handlerClass;
-
- public DialogUIDef(Class<H> handlerClass, Class<U> uiClass, Class<M> modelClass) {
- this.handlerClass = handlerClass;
- this.uiClass = uiClass;
- this.modelClass = modelClass;
- }
-
- public Class<U> getUiClass() {
- return uiClass;
- }
-
- public Class<H> getHandlerClass() {
- return handlerClass;
- }
-
- public Class<M> getModelClass() {
- return modelClass;
- }
-
- @Override
- public boolean equals(Object o) {
- return this == o || o instanceof DialogUIDef && uiClass.equals(((DialogUIDef) o).uiClass);
-
- }
-
- @Override
- public int hashCode() {
- return uiClass.hashCode();
- }
-
- @Override
- public String toString() {
- return super.toString() + "<model:" + modelClass + ", ui:" + uiClass + ", handler:" + handlerClass + '>';
- }
-}
Deleted: trunk/jaxx/src/main/java/jaxx/DialogUIHandler.java
===================================================================
--- trunk/jaxx/src/main/java/jaxx/DialogUIHandler.java 2008-04-18 17:11:28 UTC (rev 546)
+++ trunk/jaxx/src/main/java/jaxx/DialogUIHandler.java 2008-04-18 17:15:23 UTC (rev 547)
@@ -1,60 +0,0 @@
-/**
- * ##% Copyright (C) 2008 Code Lutin, Tony Chemit
- * This program is free software; you
- * can redistribute it and/or modify it under the terms of the GNU General
- * Public License as published by the Free Software Foundation; either version 2
- * of the License, or (at your option) any later version. This program is
- * distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY;
- * without even the implied warranty of MERCHANTABILITY or FITNESS FOR A
- * PARTICULAR PURPOSE. See the GNU General Public License for more details. You
- * should have received a copy of the GNU General Public License along with this
- * program; if not, write to the Free Software Foundation, Inc., 59 Temple Place
- * - Suite 330, Boston, MA 02111-1307, USA.
- * ##%
- */
-package jaxx;
-
-import org.apache.commons.logging.Log;
-import org.apache.commons.logging.LogFactory;
-
-import java.beans.PropertyChangeListener;
-
-/**
- * DialogUI handler
- *
- * @author chemit
- */
-public abstract class DialogUIHandler<M extends DialogUIModel, U extends DialogUI<? extends DialogUIHandler>> implements PropertyChangeListener {
-
- protected static Log log = LogFactory.getLog(DialogUIHandler.class);
-
- /** ui handled */
- private U ui;
-
- /** model handled */
- private M model;
-
- protected DialogUIHandler(U ui, M model) {
- this.ui = ui;
- this.model = model;
- }
-
- public U getUi() {
- return ui;
- }
-
- public M getModel() {
- return model;
- }
-
- public void init() {
- if (model == null) {
- throw new IllegalStateException("no model was defined for " + this);
- }
- model.addPropertyChangeListener(this);
- }
-
- public void dispose() {
- model.removePropertyChangeListener(this);
- }
-}
\ No newline at end of file
Deleted: trunk/jaxx/src/main/java/jaxx/DialogUIModel.java
===================================================================
--- trunk/jaxx/src/main/java/jaxx/DialogUIModel.java 2008-04-18 17:11:28 UTC (rev 546)
+++ trunk/jaxx/src/main/java/jaxx/DialogUIModel.java 2008-04-18 17:15:23 UTC (rev 547)
@@ -1,85 +0,0 @@
-/**
- * ##% Copyright (C) 2008 Code Lutin, Tony Chemit
- * This program is free software; you
- * can redistribute it and/or modify it under the terms of the GNU General
- * Public License as published by the Free Software Foundation; either version 2
- * of the License, or (at your option) any later version. This program is
- * distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY;
- * without even the implied warranty of MERCHANTABILITY or FITNESS FOR A
- * PARTICULAR PURPOSE. See the GNU General Public License for more details. You
- * should have received a copy of the GNU General Public License along with this
- * program; if not, write to the Free Software Foundation, Inc., 59 Temple Place
- * - Suite 330, Boston, MA 02111-1307, USA.
- * ##%
- */
-package jaxx;
-
-import org.apache.commons.logging.Log;
-import org.apache.commons.logging.LogFactory;
-
-import java.beans.PropertyChangeListener;
-import java.beans.PropertyChangeSupport;
-
-/**
- * Abstract ui model, with property change support.
- *
- * @author chemit
- */
-public abstract class DialogUIModel {
-
- static protected final Log log = LogFactory.getLog(DialogUIModel.class);
-
- /** support for change properties support */
- protected PropertyChangeSupport changeSupport;
-
- public synchronized void addPropertyChangeListener(String propertyName, PropertyChangeListener listener) {
- if (listener == null) {
- return;
- }
- if (changeSupport == null) {
- changeSupport = new PropertyChangeSupport(this);
- }
- changeSupport.addPropertyChangeListener(propertyName, listener);
- }
-
- public synchronized void addPropertyChangeListener(PropertyChangeListener listener) {
- if (listener == null) {
- return;
- }
- if (changeSupport == null) {
- changeSupport = new PropertyChangeSupport(this);
- }
- changeSupport.addPropertyChangeListener(listener);
- }
-
- public synchronized void removePropertyChangeListener(PropertyChangeListener listener) {
- if (listener == null || changeSupport == null) {
- return;
- }
- changeSupport.removePropertyChangeListener(listener);
- }
-
- public synchronized void removePropertyChangeListeners() {
- if (changeSupport == null) {
- return;
- }
- for (PropertyChangeListener listener : getPropertyChangeListeners()) {
- changeSupport.removePropertyChangeListener(listener);
- }
- }
-
- public synchronized PropertyChangeListener[] getPropertyChangeListeners() {
- if (changeSupport == null) {
- return new PropertyChangeListener[0];
- }
- return changeSupport.getPropertyChangeListeners();
- }
-
- public void firePropertyChange(String propertyName, Object oldValue, Object newValue) {
- if (changeSupport == null || (oldValue == null && newValue == null) ||
- (oldValue != null && oldValue.equals(newValue))) {
- return;
- }
- changeSupport.firePropertyChange(propertyName, oldValue, newValue);
- }
-}
\ No newline at end of file
Deleted: trunk/jaxx/src/main/java/jaxx/UIFactory.java
===================================================================
--- trunk/jaxx/src/main/java/jaxx/UIFactory.java 2008-04-18 17:11:28 UTC (rev 546)
+++ trunk/jaxx/src/main/java/jaxx/UIFactory.java 2008-04-18 17:15:23 UTC (rev 547)
@@ -1,218 +0,0 @@
-/**
- * ##% Copyright (C) 2008 Code Lutin, Tony Chemit
- * This program is free software; you
- * can redistribute it and/or modify it under the terms of the GNU General
- * Public License as published by the Free Software Foundation; either version 2
- * of the License, or (at your option) any later version. This program is
- * distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY;
- * without even the implied warranty of MERCHANTABILITY or FITNESS FOR A
- * PARTICULAR PURPOSE. See the GNU General Public License for more details. You
- * should have received a copy of the GNU General Public License along with this
- * program; if not, write to the Free Software Foundation, Inc., 59 Temple Place
- * - Suite 330, Boston, MA 02111-1307, USA.
- * ##%
- */
-package jaxx;
-
-import org.apache.commons.logging.Log;
-import org.apache.commons.logging.LogFactory;
-import org.codelutin.util.ListenerSet;
-import org.codelutin.util.StringUtil;
-
-import java.awt.event.WindowAdapter;
-import java.awt.event.WindowEvent;
-import java.lang.reflect.InvocationTargetException;
-import java.util.HashMap;
-import java.util.Map;
-import java.util.ServiceLoader;
-
-/**
- * Factory if VCS UI, using a cache.
- *
- * @author chemit
- */
-public class UIFactory {
-
- static protected final Log log = LogFactory.getLog(UIFactory.class);
-
- protected static UIFactory instance;
-
- protected Map<DialogUIDef, DialogUI> cache;
-
- protected ServiceLoader<UIProvider> loader;
-
- protected String applicationName;
-
- protected ListenerSet<FactoryWindowListener> listeners;
-
- public static void initFactory(String applicationName, FactoryWindowListener... listeners) {
- UIFactory factory = getInstance();
- synchronized (factory) {
- factory.applicationName = applicationName;
- for (FactoryWindowListener listener : listeners) {
- listener.setFactory(factory);
- factory.addFactoryWindowListener(listener);
- }
- }
- }
-
- public void addFactoryWindowListener(FactoryWindowListener l) {
- listeners.add(l);
- }
-
- public void removeFactoryWindowListener(FactoryWindowListener l) {
- listeners.remove(l);
- }
-
- public void close() {
- if (cache != null) {
- cache.clear();
- cache = null;
- }
- if (loader != null) {
- loader.reload();
- loader = null;
- }
- while (listeners.size() > 0) {
- removeFactoryWindowListener(listeners.iterator().next());
- }
-
- }
-
- protected static UIFactory getInstance() {
- if (instance == null) {
- instance = new UIFactory();
- }
- return instance;
- }
-
- @Override
- protected void finalize() throws Throwable {
- super.finalize();
- close();
- }
-
- protected synchronized Map<DialogUIDef, DialogUI> getCache() {
- if (cache == null) {
- cache = new HashMap<DialogUIDef, DialogUI>();
- }
- return cache;
- }
-
- protected synchronized ServiceLoader<UIProvider> getProviders() {
- checkInit();
- if (loader == null) {
- long t0 = System.nanoTime();
-
- loader = ServiceLoader.load(UIProvider.class);
- int nb = 0;
- for (UIProvider provider : loader) {
- log.info(provider.getName() + " [" + provider + ']');
- nb++;
- }
- log.info("found " + nb + " ui provider(s) in " + StringUtil.convertTime(t0, System.nanoTime()));
- }
- return loader;
- }
-
- protected DialogUI newUI(DialogUIDef uiType) {
-
- DialogUI result = getInstance().getCache().get(uiType);
- if (result == null) {
- try {
- getCache().put(uiType, result = newUI0(uiType));
- for (FactoryWindowListener listener : listeners) {
- result.addWindowListener(listener);
- }
- } catch (Exception e) {
- throw new IllegalStateException("could not instanciate ui handler " + uiType + " for reason : " + e.getMessage());
- }
- }
- return result;
- }
-
- protected DialogUI newUI0(DialogUIDef uiType, Object... params) throws IllegalAccessException, InstantiationException, NoSuchMethodException, InvocationTargetException {
- for (UIProvider provider : getProviders()) {
- DialogUI ui = provider.newUI(uiType);
- if (ui != null) {
- Class<?>[] prototype = getHandlerPrototype(ui.getClass(), params);
- Object[] parameters = getHandlerParameters(ui, params);
- uiType.getHandlerClass().getConstructor(prototype).newInstance(ui, parameters);
- ui.getHandler().init();
- return ui;
- }
- }
- throw new IllegalStateException("could not find ui " + uiType);
- }
-
- protected UIFactory() {
- listeners = new ListenerSet<FactoryWindowListener>();
- }
-
- protected Class<?>[] getHandlerPrototype(Class<? extends DialogUI> aClass, Object[] params) {
- Class<?>[] classes = new Class<?>[1 + params.length];
- classes[0] = aClass.getSuperclass();
- for (int i = 0; i < params.length; i++) {
- classes[i + 1] = params[i].getClass();
- }
- return classes;
- }
-
- protected Object[] getHandlerParameters(DialogUI ui, Object[] params) {
- Object[] classes = new Object[1 + params.length];
- classes[0] = ui;
- System.arraycopy(params, 0, classes, 1, params.length);
- return classes;
- }
-
- private void checkInit() throws IllegalStateException {
- if (applicationName == null) {
- throw new IllegalStateException("factory " + this + " was not init ");
- }
- }
-
- public static abstract class FactoryWindowListener extends WindowAdapter {
-
- protected abstract void allWindowsClosed();
-
- private UIFactory factory;
-
- private boolean wasClosed;
-
- public UIFactory getFactory() {
- return factory;
- }
-
- public void setFactory(UIFactory factory) {
- this.factory = factory;
- }
-
- @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 (DialogUI vcsui : factory.getCache().values()) {
- if (vcsui.isVisible()) {
- // at least one ui visible, do not kill connexions
- return;
- }
- }
- if (wasClosed) {
- // make sure to process once
- return;
- }
- synchronized (this) {
- try {
- allWindowsClosed();
- } finally {
- wasClosed = true;
- }
- }
- }
- }
-}
\ No newline at end of file
Deleted: trunk/jaxx/src/main/java/jaxx/UIProvider.java
===================================================================
--- trunk/jaxx/src/main/java/jaxx/UIProvider.java 2008-04-18 17:11:28 UTC (rev 546)
+++ trunk/jaxx/src/main/java/jaxx/UIProvider.java 2008-04-18 17:15:23 UTC (rev 547)
@@ -1,68 +0,0 @@
-/**
- * # #% Copyright (C) 2008 Code Lutin, Tony Chemit
- * This program is free software; you
- * can redistribute it and/or modify it under the terms of the GNU General
- * Public License as published by the Free Software Foundation; either version 2
- * of the License, or (at your option) any later version. This program is
- * distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY;
- * without even the implied warranty of MERCHANTABILITY or FITNESS FOR A
- * PARTICULAR PURPOSE. See the GNU General Public License for more details. You
- * should have received a copy of the GNU General Public License along with this
- * program; if not, write to the Free Software Foundation, Inc., 59 Temple Place
- * - Suite 330, Boston, MA 02111-1307, USA.
- * # #%
- */
-package jaxx;
-
-/** @author chemit */
-public abstract class UIProvider {
-
- /** the name of application using this provider */
- protected String applicationName;
-
- /** the name of ui implementation used by this provider */
- protected String name;
-
- /** array of ui implementations */
- protected Class<?>[] implementations;
-
- protected UIProvider(String applicationName, String name, Class<?>... implementations) {
- this.applicationName = applicationName;
- this.name = name;
- this.implementations = implementations;
- }
-
- /** @return the identifier of the ui provider (eg jaxx, swing, ...) */
- public String getName() {
- return name;
- }
-
- public String getApplicationName() {
- return applicationName;
- }
-
- public Class<?>[] getImplementations() {
- return implementations;
- }
-
- public <U extends DialogUI<?>, D extends DialogUIDef<?, U, ?>> U newUI(D def) throws InstantiationException, IllegalAccessException {
- Class<U> uiImpl = finImpl(def.getUiClass());
- return uiImpl != null ? uiImpl.newInstance() : null;
- }
-
- @Override
- public String toString() {
- return super.toString() + " application:" + applicationName + ", provider:" + name + ", uis:" + (java.util.Arrays.toString(implementations));
- }
-
- @SuppressWarnings({"unchecked"})
- private <X extends DialogUI> Class<X> finImpl(Class<X> uiType) {
- for (Class<?> klass : implementations) {
- if (uiType.isAssignableFrom(klass)) {
- return (Class<X>) klass;
- }
- }
- return null;
- }
-
-}
\ No newline at end of file
Copied: trunk/jaxx/src/main/java/org/codelutin/ui/DialogUI.java (from rev 540, trunk/jaxx/src/main/java/jaxx/DialogUI.java)
===================================================================
--- trunk/jaxx/src/main/java/org/codelutin/ui/DialogUI.java (rev 0)
+++ trunk/jaxx/src/main/java/org/codelutin/ui/DialogUI.java 2008-04-18 17:15:23 UTC (rev 547)
@@ -0,0 +1,79 @@
+/**
+ * ##% Copyright (C) 2008 Code Lutin, Tony Chemit
+ * This program is free software; you
+ * can redistribute it and/or modify it under the terms of the GNU General
+ * Public License as published by the Free Software Foundation; either version 2
+ * of the License, or (at your option) any later version. This program is
+ * distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY;
+ * without even the implied warranty of MERCHANTABILITY or FITNESS FOR A
+ * PARTICULAR PURPOSE. See the GNU General Public License for more details. You
+ * should have received a copy of the GNU General Public License along with this
+ * program; if not, write to the Free Software Foundation, Inc., 59 Temple Place
+ * - Suite 330, Boston, MA 02111-1307, USA.
+ * ##%
+ */
+package org.codelutin.ui;
+
+import jaxx.runtime.UIHelper;
+
+import javax.swing.AbstractAction;
+import javax.swing.AbstractButton;
+import javax.swing.ImageIcon;
+import javax.swing.JDialog;
+import java.awt.event.WindowEvent;
+import java.awt.event.WindowListener;
+
+/**
+ * A abstract dialog contract to be realised by a dialogUI (WindowEvent adapter)
+ * <p/>
+ * TODO : make jaxx authorized implementing interface for root tag :)
+ *
+ * @author chemit
+ */
+public abstract class DialogUI<H extends DialogUIHandler> extends JDialog implements WindowListener {
+
+ private H handler;
+
+ public abstract AbstractButton getHelp();
+
+ //TODO will be handled by jaxx with javax.help...
+ protected abstract AbstractAction createHelpAction();
+
+ protected DialogUI() {
+ UIHelper.setQuitAction(this);
+ addWindowListener(this);
+ }
+
+ public H getHandler() {
+ return handler;
+ }
+
+ public void setHandler(H handler) {
+ this.handler = handler;
+ }
+
+ protected ImageIcon createActionIcon(String name) {
+ return UIHelper.createActionIcon(name);
+ }
+
+ public void windowOpened(WindowEvent e) {
+ }
+
+ public void windowClosed(WindowEvent e) {
+ }
+
+ public void windowClosing(WindowEvent e) {
+ }
+
+ public void windowIconified(WindowEvent e) {
+ }
+
+ public void windowDeiconified(WindowEvent e) {
+ }
+
+ public void windowActivated(WindowEvent e) {
+ }
+
+ public void windowDeactivated(WindowEvent e) {
+ }
+}
\ No newline at end of file
Copied: trunk/jaxx/src/main/java/org/codelutin/ui/DialogUIDef.java (from rev 546, trunk/jaxx/src/main/java/jaxx/DialogUIDef.java)
===================================================================
--- trunk/jaxx/src/main/java/org/codelutin/ui/DialogUIDef.java (rev 0)
+++ trunk/jaxx/src/main/java/org/codelutin/ui/DialogUIDef.java 2008-04-18 17:15:23 UTC (rev 547)
@@ -0,0 +1,57 @@
+/**
+ * ##% Copyright (C) 2008 Code Lutin, Tony Chemit
+ * This program is free software; you
+ * can redistribute it and/or modify it under the terms of the GNU General
+ * Public License as published by the Free Software Foundation; either version 2
+ * of the License, or (at your option) any later version. This program is
+ * distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY;
+ * without even the implied warranty of MERCHANTABILITY or FITNESS FOR A
+ * PARTICULAR PURPOSE. See the GNU General Public License for more details. You
+ * should have received a copy of the GNU General Public License along with this
+ * program; if not, write to the Free Software Foundation, Inc., 59 Temple Place
+ * - Suite 330, Boston, MA 02111-1307, USA.
+ * ##%
+ */
+package org.codelutin.ui;
+
+/** @author chemit */
+public class DialogUIDef<M extends DialogUIModel, U extends DialogUI<?>, H extends DialogUIHandler<M, U>> {
+
+ private final Class<U> uiClass;
+ private final Class<M> modelClass;
+ private final Class<H> handlerClass;
+
+ public DialogUIDef(Class<H> handlerClass, Class<U> uiClass, Class<M> modelClass) {
+ this.handlerClass = handlerClass;
+ this.uiClass = uiClass;
+ this.modelClass = modelClass;
+ }
+
+ public Class<U> getUiClass() {
+ return uiClass;
+ }
+
+ public Class<H> getHandlerClass() {
+ return handlerClass;
+ }
+
+ public Class<M> getModelClass() {
+ return modelClass;
+ }
+
+ @Override
+ public boolean equals(Object o) {
+ return this == o || o instanceof DialogUIDef && uiClass.equals(((DialogUIDef) o).uiClass);
+
+ }
+
+ @Override
+ public int hashCode() {
+ return uiClass.hashCode();
+ }
+
+ @Override
+ public String toString() {
+ return super.toString() + "<model:" + modelClass + ", ui:" + uiClass + ", handler:" + handlerClass + '>';
+ }
+}
Copied: trunk/jaxx/src/main/java/org/codelutin/ui/DialogUIHandler.java (from rev 540, trunk/jaxx/src/main/java/jaxx/DialogUIHandler.java)
===================================================================
--- trunk/jaxx/src/main/java/org/codelutin/ui/DialogUIHandler.java (rev 0)
+++ trunk/jaxx/src/main/java/org/codelutin/ui/DialogUIHandler.java 2008-04-18 17:15:23 UTC (rev 547)
@@ -0,0 +1,60 @@
+/**
+ * ##% Copyright (C) 2008 Code Lutin, Tony Chemit
+ * This program is free software; you
+ * can redistribute it and/or modify it under the terms of the GNU General
+ * Public License as published by the Free Software Foundation; either version 2
+ * of the License, or (at your option) any later version. This program is
+ * distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY;
+ * without even the implied warranty of MERCHANTABILITY or FITNESS FOR A
+ * PARTICULAR PURPOSE. See the GNU General Public License for more details. You
+ * should have received a copy of the GNU General Public License along with this
+ * program; if not, write to the Free Software Foundation, Inc., 59 Temple Place
+ * - Suite 330, Boston, MA 02111-1307, USA.
+ * ##%
+ */
+package org.codelutin.ui;
+
+import org.apache.commons.logging.Log;
+import org.apache.commons.logging.LogFactory;
+
+import java.beans.PropertyChangeListener;
+
+/**
+ * DialogUI handler
+ *
+ * @author chemit
+ */
+public abstract class DialogUIHandler<M extends DialogUIModel, U extends DialogUI<? extends DialogUIHandler>> implements PropertyChangeListener {
+
+ protected static Log log = LogFactory.getLog(DialogUIHandler.class);
+
+ /** ui handled */
+ private U ui;
+
+ /** model handled */
+ private M model;
+
+ protected DialogUIHandler(U ui, M model) {
+ this.ui = ui;
+ this.model = model;
+ }
+
+ public U getUi() {
+ return ui;
+ }
+
+ public M getModel() {
+ return model;
+ }
+
+ public void init() {
+ if (model == null) {
+ throw new IllegalStateException("no model was defined for " + this);
+ }
+ model.addPropertyChangeListener(this);
+ }
+
+ public void dispose() {
+ model.removePropertyChangeListener(this);
+ }
+}
\ No newline at end of file
Copied: trunk/jaxx/src/main/java/org/codelutin/ui/DialogUIModel.java (from rev 540, trunk/jaxx/src/main/java/jaxx/DialogUIModel.java)
===================================================================
--- trunk/jaxx/src/main/java/org/codelutin/ui/DialogUIModel.java (rev 0)
+++ trunk/jaxx/src/main/java/org/codelutin/ui/DialogUIModel.java 2008-04-18 17:15:23 UTC (rev 547)
@@ -0,0 +1,85 @@
+/**
+ * ##% Copyright (C) 2008 Code Lutin, Tony Chemit
+ * This program is free software; you
+ * can redistribute it and/or modify it under the terms of the GNU General
+ * Public License as published by the Free Software Foundation; either version 2
+ * of the License, or (at your option) any later version. This program is
+ * distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY;
+ * without even the implied warranty of MERCHANTABILITY or FITNESS FOR A
+ * PARTICULAR PURPOSE. See the GNU General Public License for more details. You
+ * should have received a copy of the GNU General Public License along with this
+ * program; if not, write to the Free Software Foundation, Inc., 59 Temple Place
+ * - Suite 330, Boston, MA 02111-1307, USA.
+ * ##%
+ */
+package org.codelutin.ui;
+
+import org.apache.commons.logging.Log;
+import org.apache.commons.logging.LogFactory;
+
+import java.beans.PropertyChangeListener;
+import java.beans.PropertyChangeSupport;
+
+/**
+ * Abstract ui model, with property change support.
+ *
+ * @author chemit
+ */
+public abstract class DialogUIModel {
+
+ static protected final Log log = LogFactory.getLog(DialogUIModel.class);
+
+ /** support for change properties support */
+ protected PropertyChangeSupport changeSupport;
+
+ public synchronized void addPropertyChangeListener(String propertyName, PropertyChangeListener listener) {
+ if (listener == null) {
+ return;
+ }
+ if (changeSupport == null) {
+ changeSupport = new PropertyChangeSupport(this);
+ }
+ changeSupport.addPropertyChangeListener(propertyName, listener);
+ }
+
+ public synchronized void addPropertyChangeListener(PropertyChangeListener listener) {
+ if (listener == null) {
+ return;
+ }
+ if (changeSupport == null) {
+ changeSupport = new PropertyChangeSupport(this);
+ }
+ changeSupport.addPropertyChangeListener(listener);
+ }
+
+ public synchronized void removePropertyChangeListener(PropertyChangeListener listener) {
+ if (listener == null || changeSupport == null) {
+ return;
+ }
+ changeSupport.removePropertyChangeListener(listener);
+ }
+
+ public synchronized void removePropertyChangeListeners() {
+ if (changeSupport == null) {
+ return;
+ }
+ for (PropertyChangeListener listener : getPropertyChangeListeners()) {
+ changeSupport.removePropertyChangeListener(listener);
+ }
+ }
+
+ public synchronized PropertyChangeListener[] getPropertyChangeListeners() {
+ if (changeSupport == null) {
+ return new PropertyChangeListener[0];
+ }
+ return changeSupport.getPropertyChangeListeners();
+ }
+
+ public void firePropertyChange(String propertyName, Object oldValue, Object newValue) {
+ if (changeSupport == null || (oldValue == null && newValue == null) ||
+ (oldValue != null && oldValue.equals(newValue))) {
+ return;
+ }
+ changeSupport.firePropertyChange(propertyName, oldValue, newValue);
+ }
+}
\ No newline at end of file
Copied: trunk/jaxx/src/main/java/org/codelutin/ui/UIFactory.java (from rev 546, trunk/jaxx/src/main/java/jaxx/UIFactory.java)
===================================================================
--- trunk/jaxx/src/main/java/org/codelutin/ui/UIFactory.java (rev 0)
+++ trunk/jaxx/src/main/java/org/codelutin/ui/UIFactory.java 2008-04-18 17:15:23 UTC (rev 547)
@@ -0,0 +1,218 @@
+/**
+ * ##% Copyright (C) 2008 Code Lutin, Tony Chemit
+ * This program is free software; you
+ * can redistribute it and/or modify it under the terms of the GNU General
+ * Public License as published by the Free Software Foundation; either version 2
+ * of the License, or (at your option) any later version. This program is
+ * distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY;
+ * without even the implied warranty of MERCHANTABILITY or FITNESS FOR A
+ * PARTICULAR PURPOSE. See the GNU General Public License for more details. You
+ * should have received a copy of the GNU General Public License along with this
+ * program; if not, write to the Free Software Foundation, Inc., 59 Temple Place
+ * - Suite 330, Boston, MA 02111-1307, USA.
+ * ##%
+ */
+package org.codelutin.ui;
+
+import org.apache.commons.logging.Log;
+import org.apache.commons.logging.LogFactory;
+import org.codelutin.util.ListenerSet;
+import org.codelutin.util.StringUtil;
+
+import java.awt.event.WindowAdapter;
+import java.awt.event.WindowEvent;
+import java.lang.reflect.InvocationTargetException;
+import java.util.HashMap;
+import java.util.Map;
+import java.util.ServiceLoader;
+
+/**
+ * Factory if VCS UI, using a cache.
+ *
+ * @author chemit
+ */
+public class UIFactory {
+
+ static protected final Log log = LogFactory.getLog(UIFactory.class);
+
+ protected static UIFactory instance;
+
+ protected Map<DialogUIDef, DialogUI> cache;
+
+ protected ServiceLoader<UIProvider> loader;
+
+ protected String applicationName;
+
+ protected ListenerSet<FactoryWindowListener> listeners;
+
+ public static void initFactory(String applicationName, FactoryWindowListener... listeners) {
+ UIFactory factory = getInstance();
+ synchronized (factory) {
+ factory.applicationName = applicationName;
+ for (FactoryWindowListener listener : listeners) {
+ listener.setFactory(factory);
+ factory.addFactoryWindowListener(listener);
+ }
+ }
+ }
+
+ public void addFactoryWindowListener(FactoryWindowListener l) {
+ listeners.add(l);
+ }
+
+ public void removeFactoryWindowListener(FactoryWindowListener l) {
+ listeners.remove(l);
+ }
+
+ public void close() {
+ if (cache != null) {
+ cache.clear();
+ cache = null;
+ }
+ if (loader != null) {
+ loader.reload();
+ loader = null;
+ }
+ while (listeners.size() > 0) {
+ removeFactoryWindowListener(listeners.iterator().next());
+ }
+
+ }
+
+ protected static UIFactory getInstance() {
+ if (instance == null) {
+ instance = new UIFactory();
+ }
+ return instance;
+ }
+
+ @Override
+ protected void finalize() throws Throwable {
+ super.finalize();
+ close();
+ }
+
+ protected synchronized Map<DialogUIDef, DialogUI> getCache() {
+ if (cache == null) {
+ cache = new HashMap<DialogUIDef, DialogUI>();
+ }
+ return cache;
+ }
+
+ protected synchronized ServiceLoader<UIProvider> getProviders() {
+ checkInit();
+ if (loader == null) {
+ long t0 = System.nanoTime();
+
+ loader = ServiceLoader.load(UIProvider.class);
+ int nb = 0;
+ for (UIProvider provider : loader) {
+ log.info(provider.getName() + " [" + provider + ']');
+ nb++;
+ }
+ log.info("found " + nb + " ui provider(s) in " + StringUtil.convertTime(t0, System.nanoTime()));
+ }
+ return loader;
+ }
+
+ protected DialogUI newUI(DialogUIDef uiType) {
+
+ DialogUI result = getInstance().getCache().get(uiType);
+ if (result == null) {
+ try {
+ getCache().put(uiType, result = newUI0(uiType));
+ for (FactoryWindowListener listener : listeners) {
+ result.addWindowListener(listener);
+ }
+ } catch (Exception e) {
+ throw new IllegalStateException("could not instanciate ui handler " + uiType + " for reason : " + e.getMessage());
+ }
+ }
+ return result;
+ }
+
+ protected DialogUI newUI0(DialogUIDef uiType, Object... params) throws IllegalAccessException, InstantiationException, NoSuchMethodException, InvocationTargetException {
+ for (UIProvider provider : getProviders()) {
+ DialogUI ui = provider.newUI(uiType);
+ if (ui != null) {
+ Class<?>[] prototype = getHandlerPrototype(ui.getClass(), params);
+ Object[] parameters = getHandlerParameters(ui, params);
+ uiType.getHandlerClass().getConstructor(prototype).newInstance(ui, parameters);
+ ui.getHandler().init();
+ return ui;
+ }
+ }
+ throw new IllegalStateException("could not find ui " + uiType);
+ }
+
+ protected UIFactory() {
+ listeners = new ListenerSet<FactoryWindowListener>();
+ }
+
+ protected Class<?>[] getHandlerPrototype(Class<? extends DialogUI> aClass, Object[] params) {
+ Class<?>[] classes = new Class<?>[1 + params.length];
+ classes[0] = aClass.getSuperclass();
+ for (int i = 0; i < params.length; i++) {
+ classes[i + 1] = params[i].getClass();
+ }
+ return classes;
+ }
+
+ protected Object[] getHandlerParameters(DialogUI ui, Object[] params) {
+ Object[] classes = new Object[1 + params.length];
+ classes[0] = ui;
+ System.arraycopy(params, 0, classes, 1, params.length);
+ return classes;
+ }
+
+ private void checkInit() throws IllegalStateException {
+ if (applicationName == null) {
+ throw new IllegalStateException("factory " + this + " was not init ");
+ }
+ }
+
+ public static abstract class FactoryWindowListener extends WindowAdapter {
+
+ protected abstract void allWindowsClosed();
+
+ private UIFactory factory;
+
+ private boolean wasClosed;
+
+ public UIFactory getFactory() {
+ return factory;
+ }
+
+ public void setFactory(UIFactory factory) {
+ this.factory = factory;
+ }
+
+ @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 (DialogUI vcsui : factory.getCache().values()) {
+ if (vcsui.isVisible()) {
+ // at least one ui visible, do not kill connexions
+ return;
+ }
+ }
+ if (wasClosed) {
+ // make sure to process once
+ return;
+ }
+ synchronized (this) {
+ try {
+ allWindowsClosed();
+ } finally {
+ wasClosed = true;
+ }
+ }
+ }
+ }
+}
\ No newline at end of file
Copied: trunk/jaxx/src/main/java/org/codelutin/ui/UIProvider.java (from rev 546, trunk/jaxx/src/main/java/jaxx/UIProvider.java)
===================================================================
--- trunk/jaxx/src/main/java/org/codelutin/ui/UIProvider.java (rev 0)
+++ trunk/jaxx/src/main/java/org/codelutin/ui/UIProvider.java 2008-04-18 17:15:23 UTC (rev 547)
@@ -0,0 +1,68 @@
+/**
+ * # #% Copyright (C) 2008 Code Lutin, Tony Chemit
+ * This program is free software; you
+ * can redistribute it and/or modify it under the terms of the GNU General
+ * Public License as published by the Free Software Foundation; either version 2
+ * of the License, or (at your option) any later version. This program is
+ * distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY;
+ * without even the implied warranty of MERCHANTABILITY or FITNESS FOR A
+ * PARTICULAR PURPOSE. See the GNU General Public License for more details. You
+ * should have received a copy of the GNU General Public License along with this
+ * program; if not, write to the Free Software Foundation, Inc., 59 Temple Place
+ * - Suite 330, Boston, MA 02111-1307, USA.
+ * # #%
+ */
+package org.codelutin.ui;
+
+/** @author chemit */
+public abstract class UIProvider {
+
+ /** the name of application using this provider */
+ protected String applicationName;
+
+ /** the name of ui implementation used by this provider */
+ protected String name;
+
+ /** array of ui implementations */
+ protected Class<?>[] implementations;
+
+ protected UIProvider(String applicationName, String name, Class<?>... implementations) {
+ this.applicationName = applicationName;
+ this.name = name;
+ this.implementations = implementations;
+ }
+
+ /** @return the identifier of the ui provider (eg jaxx, swing, ...) */
+ public String getName() {
+ return name;
+ }
+
+ public String getApplicationName() {
+ return applicationName;
+ }
+
+ public Class<?>[] getImplementations() {
+ return implementations;
+ }
+
+ public <U extends DialogUI<?>, D extends DialogUIDef<?, U, ?>> U newUI(D def) throws InstantiationException, IllegalAccessException {
+ Class<U> uiImpl = finImpl(def.getUiClass());
+ return uiImpl != null ? uiImpl.newInstance() : null;
+ }
+
+ @Override
+ public String toString() {
+ return super.toString() + " application:" + applicationName + ", provider:" + name + ", uis:" + (java.util.Arrays.toString(implementations));
+ }
+
+ @SuppressWarnings({"unchecked"})
+ private <X extends DialogUI> Class<X> finImpl(Class<X> uiType) {
+ for (Class<?> klass : implementations) {
+ if (uiType.isAssignableFrom(klass)) {
+ return (Class<X>) klass;
+ }
+ }
+ return null;
+ }
+
+}
\ No newline at end of file
1
0
18 Apr '08
Author: tchemit
Date: 2008-04-18 17:11:28 +0000 (Fri, 18 Apr 2008)
New Revision: 546
Added:
trunk/jaxx/src/main/java/jaxx/DialogUIDef.java
trunk/jaxx/src/main/java/jaxx/UIFactory.java
trunk/jaxx/src/main/java/jaxx/UIProvider.java
Log:
generic UIPRovider, UIFactory and introduce DialogUIDef
Added: trunk/jaxx/src/main/java/jaxx/DialogUIDef.java
===================================================================
--- trunk/jaxx/src/main/java/jaxx/DialogUIDef.java (rev 0)
+++ trunk/jaxx/src/main/java/jaxx/DialogUIDef.java 2008-04-18 17:11:28 UTC (rev 546)
@@ -0,0 +1,57 @@
+/**
+ * ##% Copyright (C) 2008 Code Lutin, Tony Chemit
+ * This program is free software; you
+ * can redistribute it and/or modify it under the terms of the GNU General
+ * Public License as published by the Free Software Foundation; either version 2
+ * of the License, or (at your option) any later version. This program is
+ * distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY;
+ * without even the implied warranty of MERCHANTABILITY or FITNESS FOR A
+ * PARTICULAR PURPOSE. See the GNU General Public License for more details. You
+ * should have received a copy of the GNU General Public License along with this
+ * program; if not, write to the Free Software Foundation, Inc., 59 Temple Place
+ * - Suite 330, Boston, MA 02111-1307, USA.
+ * ##%
+ */
+package jaxx;
+
+/** @author chemit */
+public class DialogUIDef<M extends DialogUIModel, U extends DialogUI<?>, H extends DialogUIHandler<M, U>> {
+
+ private final Class<U> uiClass;
+ private final Class<M> modelClass;
+ private final Class<H> handlerClass;
+
+ public DialogUIDef(Class<H> handlerClass, Class<U> uiClass, Class<M> modelClass) {
+ this.handlerClass = handlerClass;
+ this.uiClass = uiClass;
+ this.modelClass = modelClass;
+ }
+
+ public Class<U> getUiClass() {
+ return uiClass;
+ }
+
+ public Class<H> getHandlerClass() {
+ return handlerClass;
+ }
+
+ public Class<M> getModelClass() {
+ return modelClass;
+ }
+
+ @Override
+ public boolean equals(Object o) {
+ return this == o || o instanceof DialogUIDef && uiClass.equals(((DialogUIDef) o).uiClass);
+
+ }
+
+ @Override
+ public int hashCode() {
+ return uiClass.hashCode();
+ }
+
+ @Override
+ public String toString() {
+ return super.toString() + "<model:" + modelClass + ", ui:" + uiClass + ", handler:" + handlerClass + '>';
+ }
+}
Added: trunk/jaxx/src/main/java/jaxx/UIFactory.java
===================================================================
--- trunk/jaxx/src/main/java/jaxx/UIFactory.java (rev 0)
+++ trunk/jaxx/src/main/java/jaxx/UIFactory.java 2008-04-18 17:11:28 UTC (rev 546)
@@ -0,0 +1,218 @@
+/**
+ * ##% Copyright (C) 2008 Code Lutin, Tony Chemit
+ * This program is free software; you
+ * can redistribute it and/or modify it under the terms of the GNU General
+ * Public License as published by the Free Software Foundation; either version 2
+ * of the License, or (at your option) any later version. This program is
+ * distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY;
+ * without even the implied warranty of MERCHANTABILITY or FITNESS FOR A
+ * PARTICULAR PURPOSE. See the GNU General Public License for more details. You
+ * should have received a copy of the GNU General Public License along with this
+ * program; if not, write to the Free Software Foundation, Inc., 59 Temple Place
+ * - Suite 330, Boston, MA 02111-1307, USA.
+ * ##%
+ */
+package jaxx;
+
+import org.apache.commons.logging.Log;
+import org.apache.commons.logging.LogFactory;
+import org.codelutin.util.ListenerSet;
+import org.codelutin.util.StringUtil;
+
+import java.awt.event.WindowAdapter;
+import java.awt.event.WindowEvent;
+import java.lang.reflect.InvocationTargetException;
+import java.util.HashMap;
+import java.util.Map;
+import java.util.ServiceLoader;
+
+/**
+ * Factory if VCS UI, using a cache.
+ *
+ * @author chemit
+ */
+public class UIFactory {
+
+ static protected final Log log = LogFactory.getLog(UIFactory.class);
+
+ protected static UIFactory instance;
+
+ protected Map<DialogUIDef, DialogUI> cache;
+
+ protected ServiceLoader<UIProvider> loader;
+
+ protected String applicationName;
+
+ protected ListenerSet<FactoryWindowListener> listeners;
+
+ public static void initFactory(String applicationName, FactoryWindowListener... listeners) {
+ UIFactory factory = getInstance();
+ synchronized (factory) {
+ factory.applicationName = applicationName;
+ for (FactoryWindowListener listener : listeners) {
+ listener.setFactory(factory);
+ factory.addFactoryWindowListener(listener);
+ }
+ }
+ }
+
+ public void addFactoryWindowListener(FactoryWindowListener l) {
+ listeners.add(l);
+ }
+
+ public void removeFactoryWindowListener(FactoryWindowListener l) {
+ listeners.remove(l);
+ }
+
+ public void close() {
+ if (cache != null) {
+ cache.clear();
+ cache = null;
+ }
+ if (loader != null) {
+ loader.reload();
+ loader = null;
+ }
+ while (listeners.size() > 0) {
+ removeFactoryWindowListener(listeners.iterator().next());
+ }
+
+ }
+
+ protected static UIFactory getInstance() {
+ if (instance == null) {
+ instance = new UIFactory();
+ }
+ return instance;
+ }
+
+ @Override
+ protected void finalize() throws Throwable {
+ super.finalize();
+ close();
+ }
+
+ protected synchronized Map<DialogUIDef, DialogUI> getCache() {
+ if (cache == null) {
+ cache = new HashMap<DialogUIDef, DialogUI>();
+ }
+ return cache;
+ }
+
+ protected synchronized ServiceLoader<UIProvider> getProviders() {
+ checkInit();
+ if (loader == null) {
+ long t0 = System.nanoTime();
+
+ loader = ServiceLoader.load(UIProvider.class);
+ int nb = 0;
+ for (UIProvider provider : loader) {
+ log.info(provider.getName() + " [" + provider + ']');
+ nb++;
+ }
+ log.info("found " + nb + " ui provider(s) in " + StringUtil.convertTime(t0, System.nanoTime()));
+ }
+ return loader;
+ }
+
+ protected DialogUI newUI(DialogUIDef uiType) {
+
+ DialogUI result = getInstance().getCache().get(uiType);
+ if (result == null) {
+ try {
+ getCache().put(uiType, result = newUI0(uiType));
+ for (FactoryWindowListener listener : listeners) {
+ result.addWindowListener(listener);
+ }
+ } catch (Exception e) {
+ throw new IllegalStateException("could not instanciate ui handler " + uiType + " for reason : " + e.getMessage());
+ }
+ }
+ return result;
+ }
+
+ protected DialogUI newUI0(DialogUIDef uiType, Object... params) throws IllegalAccessException, InstantiationException, NoSuchMethodException, InvocationTargetException {
+ for (UIProvider provider : getProviders()) {
+ DialogUI ui = provider.newUI(uiType);
+ if (ui != null) {
+ Class<?>[] prototype = getHandlerPrototype(ui.getClass(), params);
+ Object[] parameters = getHandlerParameters(ui, params);
+ uiType.getHandlerClass().getConstructor(prototype).newInstance(ui, parameters);
+ ui.getHandler().init();
+ return ui;
+ }
+ }
+ throw new IllegalStateException("could not find ui " + uiType);
+ }
+
+ protected UIFactory() {
+ listeners = new ListenerSet<FactoryWindowListener>();
+ }
+
+ protected Class<?>[] getHandlerPrototype(Class<? extends DialogUI> aClass, Object[] params) {
+ Class<?>[] classes = new Class<?>[1 + params.length];
+ classes[0] = aClass.getSuperclass();
+ for (int i = 0; i < params.length; i++) {
+ classes[i + 1] = params[i].getClass();
+ }
+ return classes;
+ }
+
+ protected Object[] getHandlerParameters(DialogUI ui, Object[] params) {
+ Object[] classes = new Object[1 + params.length];
+ classes[0] = ui;
+ System.arraycopy(params, 0, classes, 1, params.length);
+ return classes;
+ }
+
+ private void checkInit() throws IllegalStateException {
+ if (applicationName == null) {
+ throw new IllegalStateException("factory " + this + " was not init ");
+ }
+ }
+
+ public static abstract class FactoryWindowListener extends WindowAdapter {
+
+ protected abstract void allWindowsClosed();
+
+ private UIFactory factory;
+
+ private boolean wasClosed;
+
+ public UIFactory getFactory() {
+ return factory;
+ }
+
+ public void setFactory(UIFactory factory) {
+ this.factory = factory;
+ }
+
+ @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 (DialogUI vcsui : factory.getCache().values()) {
+ if (vcsui.isVisible()) {
+ // at least one ui visible, do not kill connexions
+ return;
+ }
+ }
+ if (wasClosed) {
+ // make sure to process once
+ return;
+ }
+ synchronized (this) {
+ try {
+ allWindowsClosed();
+ } finally {
+ wasClosed = true;
+ }
+ }
+ }
+ }
+}
\ No newline at end of file
Added: trunk/jaxx/src/main/java/jaxx/UIProvider.java
===================================================================
--- trunk/jaxx/src/main/java/jaxx/UIProvider.java (rev 0)
+++ trunk/jaxx/src/main/java/jaxx/UIProvider.java 2008-04-18 17:11:28 UTC (rev 546)
@@ -0,0 +1,68 @@
+/**
+ * # #% Copyright (C) 2008 Code Lutin, Tony Chemit
+ * This program is free software; you
+ * can redistribute it and/or modify it under the terms of the GNU General
+ * Public License as published by the Free Software Foundation; either version 2
+ * of the License, or (at your option) any later version. This program is
+ * distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY;
+ * without even the implied warranty of MERCHANTABILITY or FITNESS FOR A
+ * PARTICULAR PURPOSE. See the GNU General Public License for more details. You
+ * should have received a copy of the GNU General Public License along with this
+ * program; if not, write to the Free Software Foundation, Inc., 59 Temple Place
+ * - Suite 330, Boston, MA 02111-1307, USA.
+ * # #%
+ */
+package jaxx;
+
+/** @author chemit */
+public abstract class UIProvider {
+
+ /** the name of application using this provider */
+ protected String applicationName;
+
+ /** the name of ui implementation used by this provider */
+ protected String name;
+
+ /** array of ui implementations */
+ protected Class<?>[] implementations;
+
+ protected UIProvider(String applicationName, String name, Class<?>... implementations) {
+ this.applicationName = applicationName;
+ this.name = name;
+ this.implementations = implementations;
+ }
+
+ /** @return the identifier of the ui provider (eg jaxx, swing, ...) */
+ public String getName() {
+ return name;
+ }
+
+ public String getApplicationName() {
+ return applicationName;
+ }
+
+ public Class<?>[] getImplementations() {
+ return implementations;
+ }
+
+ public <U extends DialogUI<?>, D extends DialogUIDef<?, U, ?>> U newUI(D def) throws InstantiationException, IllegalAccessException {
+ Class<U> uiImpl = finImpl(def.getUiClass());
+ return uiImpl != null ? uiImpl.newInstance() : null;
+ }
+
+ @Override
+ public String toString() {
+ return super.toString() + " application:" + applicationName + ", provider:" + name + ", uis:" + (java.util.Arrays.toString(implementations));
+ }
+
+ @SuppressWarnings({"unchecked"})
+ private <X extends DialogUI> Class<X> finImpl(Class<X> uiType) {
+ for (Class<?> klass : implementations) {
+ if (uiType.isAssignableFrom(klass)) {
+ return (Class<X>) klass;
+ }
+ }
+ return null;
+ }
+
+}
\ No newline at end of file
1
0
Author: tchemit
Date: 2008-04-18 14:57:33 +0000 (Fri, 18 Apr 2008)
New Revision: 545
Modified:
trunk/lutinvcs/tools/
Log:
tools module
generateSshKey ui
Property changes on: trunk/lutinvcs/tools
___________________________________________________________________
Name: svn:ignore
+ target
1
0
18 Apr '08
Author: tchemit
Date: 2008-04-18 14:57:00 +0000 (Fri, 18 Apr 2008)
New Revision: 544
Added:
trunk/lutinvcs/tools/
trunk/lutinvcs/tools/LICENSE.txt
trunk/lutinvcs/tools/changelog
trunk/lutinvcs/tools/pom.xml
trunk/lutinvcs/tools/src/
trunk/lutinvcs/tools/src/main/
trunk/lutinvcs/tools/src/main/java/
trunk/lutinvcs/tools/src/main/java/org/
trunk/lutinvcs/tools/src/main/java/org/codelutin/
trunk/lutinvcs/tools/src/main/java/org/codelutin/vcs/
trunk/lutinvcs/tools/src/main/resources/
trunk/lutinvcs/tools/src/main/resources/META-INF/
trunk/lutinvcs/tools/src/main/resources/META-INF/services/
trunk/lutinvcs/tools/src/main/resources/META-INF/services/org.apache.commons.logging.LogFactory
trunk/lutinvcs/tools/src/main/resources/i18n/
trunk/lutinvcs/tools/src/main/resources/i18n/core-en_GB.properties
trunk/lutinvcs/tools/src/main/resources/i18n/core-fr_FR.properties
trunk/lutinvcs/tools/src/main/resources/i18n/tools-en_GB.properties
trunk/lutinvcs/tools/src/main/resources/i18n/tools-fr_FR.properties
trunk/lutinvcs/tools/src/site/
trunk/lutinvcs/tools/src/site/fr/
trunk/lutinvcs/tools/src/site/fr/rst/
trunk/lutinvcs/tools/src/site/fr/rst/devel/
trunk/lutinvcs/tools/src/site/fr/rst/devel/index.rst
trunk/lutinvcs/tools/src/site/fr/rst/index.rst
trunk/lutinvcs/tools/src/site/fr/rst/todo.rst
trunk/lutinvcs/tools/src/site/site_fr.xml
trunk/lutinvcs/tools/src/test/
trunk/lutinvcs/tools/src/test/java/
trunk/lutinvcs/tools/src/test/java/org/
trunk/lutinvcs/tools/src/test/java/org/codelutin/
trunk/lutinvcs/tools/src/test/java/org/codelutin/vcs/
trunk/lutinvcs/tools/src/test/java/org/codelutin/vcs/ConfigUITest.java
trunk/lutinvcs/tools/src/test/java/org/codelutin/vcs/UITest.java
trunk/lutinvcs/tools/src/test/resources/
trunk/lutinvcs/tools/src/test/resources/log4j.properties
trunk/lutinvcs/ui/common/src/main/java/org/codelutin/vcs/ui/GenerateSshKeyUI.java
trunk/lutinvcs/ui/common/src/main/java/org/codelutin/vcs/ui/handler/GenerateSshKeyUIHandler.java
trunk/lutinvcs/ui/common/src/main/java/org/codelutin/vcs/ui/model/GenerateSshKeyUIModel.java
Removed:
trunk/lutinvcs/ui/common/src/test/java/org/
Modified:
trunk/lutinvcs/pom.xml
trunk/lutinvcs/provider/pom.xml
trunk/lutinvcs/ui/pom.xml
Log:
tools module
generateSshKey ui
Modified: trunk/lutinvcs/pom.xml
===================================================================
--- trunk/lutinvcs/pom.xml 2008-04-18 14:24:26 UTC (rev 543)
+++ trunk/lutinvcs/pom.xml 2008-04-18 14:57:00 UTC (rev 544)
@@ -22,6 +22,7 @@
<module>core</module>
<module>ui</module>
<module>provider</module>
+ <module>tools</module>
</modules>
<dependencies>
@@ -57,10 +58,6 @@
<!-- current version -->
<current.version>0.1-SNAPSHOT</current.version>
- <common.groupId>org.codelutin.vcs</common.groupId>
- <provider.groupId>org.codelutin.vcs.provider</provider.groupId>
- <ui.groupId>org.codelutin.vcs.ui</ui.groupId>
-
<!-- par defaut, mode non verbeux -->
<!--maven.verbose>false</maven.verbose-->
<!-- compile with ? -->
@@ -160,45 +157,6 @@
</plugins>
</build>
-
- <!--repositories>
- <repository>
- <id>java.net</id>
- <url>http://download.java.net/maven/2</url>
- </repository>
- <repository>
- <id>codelutin-lib</id>
- <url>
- http://lutinbuilder.labs.libre-entreprise.org/maven2
- </url>
- </repository>
- </repositories>
-
- <pluginRepositories>
- <pluginRepository>
- <id>codelutin-plugin</id>
- <url>
- http://lutinbuilder.labs.libre-entreprise.org/maven2
- </url>
- </pluginRepository>
- </pluginRepositories-->
-
- <!--distributionManagement>
- <repository>
- <id>labs</id>
- <url>
- scp://labs.libre-entreprise.org/home/groups/lutinbuilder/htdocs/maven2
- </url>
- </repository>
- <site>
- <id>labs</id>
- <url>
- scp://labs.libre-entreprise.org/home/groups/lutinvcs/htdocs/
- </url>
- </site>
- </distributionManagement-->
-
-
<dependencyManagement>
<dependencies>
<dependency>
@@ -208,41 +166,40 @@
</dependency>
<dependency>
- <groupId>${common.groupId}</groupId>
+ <groupId>org.codelutin.vcs</groupId>
<artifactId>core</artifactId>
<version>${current.version}</version>
</dependency>
<dependency>
- <groupId>${common.groupId}</groupId>
- <artifactId>all</artifactId>
+ <groupId>org.codelutin.vcs</groupId>
+ <artifactId>tools</artifactId>
<version>${current.version}</version>
</dependency>
<dependency>
- <groupId>${ui.groupId}</groupId>
+ <groupId>org.codelutin.vcs.ui</groupId>
<artifactId>common</artifactId>
<version>${current.version}</version>
</dependency>
<dependency>
- <groupId>${ui.groupId}</groupId>
+ <groupId>org.codelutin.vcs.ui</groupId>
<artifactId>jaxx</artifactId>
<version>${current.version}</version>
- </dependency>
+ </dependency>
<dependency>
- <groupId>${provider.groupId}</groupId>
+ <groupId>org.codelutin.vcs.provider</groupId>
<artifactId>mock</artifactId>
<version>${current.version}</version>
</dependency>
<dependency>
- <groupId>${provider.groupId}</groupId>
+ <groupId>org.codelutin.vcs.provider</groupId>
<artifactId>cvs</artifactId>
<version>${current.version}</version>
</dependency>
<dependency>
- <groupId>${provider.groupId}</groupId>
+ <groupId>org.codelutin.vcs.provider</groupId>
<artifactId>svn</artifactId>
<version>${current.version}</version>
</dependency>
-
<!-- Plugins -->
<dependency>
<groupId>lutinplugin</groupId>
Modified: trunk/lutinvcs/provider/pom.xml
===================================================================
--- trunk/lutinvcs/provider/pom.xml 2008-04-18 14:24:26 UTC (rev 543)
+++ trunk/lutinvcs/provider/pom.xml 2008-04-18 14:57:00 UTC (rev 544)
@@ -44,21 +44,6 @@
<dependencyManagement>
<dependencies>
<dependency>
- <groupId>${provider.groupId}</groupId>
- <artifactId>mock</artifactId>
- <version>${current.version}</version>
- </dependency>
- <dependency>
- <groupId>${provider.groupId}</groupId>
- <artifactId>cvs</artifactId>
- <version>${current.version}</version>
- </dependency>
- <dependency>
- <groupId>${provider.groupId}</groupId>
- <artifactId>svn</artifactId>
- <version>${current.version}</version>
- </dependency>
- <dependency>
<groupId>org.netbeans.lib</groupId>
<artifactId>cvsclient</artifactId>
<version>20051129</version>
Added: trunk/lutinvcs/tools/LICENSE.txt
===================================================================
--- trunk/lutinvcs/tools/LICENSE.txt (rev 0)
+++ trunk/lutinvcs/tools/LICENSE.txt 2008-04-18 14:57:00 UTC (rev 544)
@@ -0,0 +1,280 @@
+ GNU GENERAL PUBLIC LICENSE
+ Version 2, June 1991
+
+ Copyright (C) 1989, 1991 Free Software Foundation, Inc.
+ 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
+ Everyone is permitted to copy and distribute verbatim copies
+ of this license document, but changing it is not allowed.
+
+ Preamble
+
+ The licenses for most software are designed to take away your
+freedom to share and change it. By contrast, the GNU General Public
+License is intended to guarantee your freedom to share and change free
+software--to make sure the software is free for all its users. This
+General Public License applies to most of the Free Software
+Foundation's software and to any other program whose authors commit to
+using it. (Some other Free Software Foundation software is covered by
+the GNU Library General Public License instead.) You can apply it to
+your programs, too.
+
+ When we speak of free software, we are referring to freedom, not
+price. Our General Public Licenses are designed to make sure that you
+have the freedom to distribute copies of free software (and charge for
+this service if you wish), that you receive source code or can get it
+if you want it, that you can change the software or use pieces of it
+in new free programs; and that you know you can do these things.
+
+ To protect your rights, we need to make restrictions that forbid
+anyone to deny you these rights or to ask you to surrender the rights.
+These restrictions translate to certain responsibilities for you if you
+distribute copies of the software, or if you modify it.
+
+ For example, if you distribute copies of such a program, whether
+gratis or for a fee, you must give the recipients all the rights that
+you have. You must make sure that they, too, receive or can get the
+source code. And you must show them these terms so they know their
+rights.
+
+ We protect your rights with two steps: (1) copyright the software, and
+(2) offer you this license which gives you legal permission to copy,
+distribute and/or modify the software.
+
+ Also, for each author's protection and ours, we want to make certain
+that everyone understands that there is no warranty for this free
+software. If the software is modified by someone else and passed on, we
+want its recipients to know that what they have is not the original, so
+that any problems introduced by others will not reflect on the original
+authors' reputations.
+
+ Finally, any free program is threatened constantly by software
+patents. We wish to avoid the danger that redistributors of a free
+program will individually obtain patent licenses, in effect making the
+program proprietary. To prevent this, we have made it clear that any
+patent must be licensed for everyone's free use or not licensed at all.
+
+ The precise terms and conditions for copying, distribution and
+modification follow.
+
+ GNU GENERAL PUBLIC LICENSE
+ TERMS AND CONDITIONS FOR COPYING, DISTRIBUTION AND MODIFICATION
+
+ 0. This License applies to any program or other work which contains
+a notice placed by the copyright holder saying it may be distributed
+under the terms of this General Public License. The "Program", below,
+refers to any such program or work, and a "work based on the Program"
+means either the Program or any derivative work under copyright law:
+that is to say, a work containing the Program or a portion of it,
+either verbatim or with modifications and/or translated into another
+language. (Hereinafter, translation is included without limitation in
+the term "modification".) Each licensee is addressed as "you".
+
+Activities other than copying, distribution and modification are not
+covered by this License; they are outside its scope. The act of
+running the Program is not restricted, and the output from the Program
+is covered only if its contents constitute a work based on the
+Program (independent of having been made by running the Program).
+Whether that is true depends on what the Program does.
+
+ 1. You may copy and distribute verbatim copies of the Program's
+source code as you receive it, in any medium, provided that you
+conspicuously and appropriately publish on each copy an appropriate
+copyright notice and disclaimer of warranty; keep intact all the
+notices that refer to this License and to the absence of any warranty;
+and give any other recipients of the Program a copy of this License
+along with the Program.
+
+You may charge a fee for the physical act of transferring a copy, and
+you may at your option offer warranty protection in exchange for a fee.
+
+ 2. You may modify your copy or copies of the Program or any portion
+of it, thus forming a work based on the Program, and copy and
+distribute such modifications or work under the terms of Section 1
+above, provided that you also meet all of these conditions:
+
+ a) You must cause the modified files to carry prominent notices
+ stating that you changed the files and the date of any change.
+
+ b) You must cause any work that you distribute or publish, that in
+ whole or in part contains or is derived from the Program or any
+ part thereof, to be licensed as a whole at no charge to all third
+ parties under the terms of this License.
+
+ c) If the modified program normally reads commands interactively
+ when run, you must cause it, when started running for such
+ interactive use in the most ordinary way, to print or display an
+ announcement including an appropriate copyright notice and a
+ notice that there is no warranty (or else, saying that you provide
+ a warranty) and that users may redistribute the program under
+ these conditions, and telling the user how to view a copy of this
+ License. (Exception: if the Program itself is interactive but
+ does not normally print such an announcement, your work based on
+ the Program is not required to print an announcement.)
+
+These requirements apply to the modified work as a whole. If
+identifiable sections of that work are not derived from the Program,
+and can be reasonably considered independent and separate works in
+themselves, then this License, and its terms, do not apply to those
+sections when you distribute them as separate works. But when you
+distribute the same sections as part of a whole which is a work based
+on the Program, the distribution of the whole must be on the terms of
+this License, whose permissions for other licensees extend to the
+entire whole, and thus to each and every part regardless of who wrote it.
+
+Thus, it is not the intent of this section to claim rights or contest
+your rights to work written entirely by you; rather, the intent is to
+exercise the right to control the distribution of derivative or
+collective works based on the Program.
+
+In addition, mere aggregation of another work not based on the Program
+with the Program (or with a work based on the Program) on a volume of
+a storage or distribution medium does not bring the other work under
+the scope of this License.
+
+ 3. You may copy and distribute the Program (or a work based on it,
+under Section 2) in object code or executable form under the terms of
+Sections 1 and 2 above provided that you also do one of the following:
+
+ a) Accompany it with the complete corresponding machine-readable
+ source code, which must be distributed under the terms of Sections
+ 1 and 2 above on a medium customarily used for software interchange; or,
+
+ b) Accompany it with a written offer, valid for at least three
+ years, to give any third party, for a charge no more than your
+ cost of physically performing source distribution, a complete
+ machine-readable copy of the corresponding source code, to be
+ distributed under the terms of Sections 1 and 2 above on a medium
+ customarily used for software interchange; or,
+
+ c) Accompany it with the information you received as to the offer
+ to distribute corresponding source code. (This alternative is
+ allowed only for noncommercial distribution and only if you
+ received the program in object code or executable form with such
+ an offer, in accord with Subsection b above.)
+
+The source code for a work means the preferred form of the work for
+making modifications to it. For an executable work, complete source
+code means all the source code for all modules it contains, plus any
+associated interface definition files, plus the scripts used to
+control compilation and installation of the executable. However, as a
+special exception, the source code distributed need not include
+anything that is normally distributed (in either source or binary
+form) with the major components (compiler, kernel, and so on) of the
+operating system on which the executable runs, unless that component
+itself accompanies the executable.
+
+If distribution of executable or object code is made by offering
+access to copy from a designated place, then offering equivalent
+access to copy the source code from the same place counts as
+distribution of the source code, even though third parties are not
+compelled to copy the source along with the object code.
+
+ 4. You may not copy, modify, sublicense, or distribute the Program
+except as expressly provided under this License. Any attempt
+otherwise to copy, modify, sublicense or distribute the Program is
+void, and will automatically terminate your rights under this License.
+However, parties who have received copies, or rights, from you under
+this License will not have their licenses terminated so long as such
+parties remain in full compliance.
+
+ 5. You are not required to accept this License, since you have not
+signed it. However, nothing else grants you permission to modify or
+distribute the Program or its derivative works. These actions are
+prohibited by law if you do not accept this License. Therefore, by
+modifying or distributing the Program (or any work based on the
+Program), you indicate your acceptance of this License to do so, and
+all its terms and conditions for copying, distributing or modifying
+the Program or works based on it.
+
+ 6. Each time you redistribute the Program (or any work based on the
+Program), the recipient automatically receives a license from the
+original licensor to copy, distribute or modify the Program subject to
+these terms and conditions. You may not impose any further
+restrictions on the recipients' exercise of the rights granted herein.
+You are not responsible for enforcing compliance by third parties to
+this License.
+
+ 7. If, as a consequence of a court judgment or allegation of patent
+infringement or for any other reason (not limited to patent issues),
+conditions are imposed on you (whether by court order, agreement or
+otherwise) that contradict the conditions of this License, they do not
+excuse you from the conditions of this License. If you cannot
+distribute so as to satisfy simultaneously your obligations under this
+License and any other pertinent obligations, then as a consequence you
+may not distribute the Program at all. For example, if a patent
+license would not permit royalty-free redistribution of the Program by
+all those who receive copies directly or indirectly through you, then
+the only way you could satisfy both it and this License would be to
+refrain entirely from distribution of the Program.
+
+If any portion of this section is held invalid or unenforceable under
+any particular circumstance, the balance of the section is intended to
+apply and the section as a whole is intended to apply in other
+circumstances.
+
+It is not the purpose of this section to induce you to infringe any
+patents or other property right claims or to contest validity of any
+such claims; this section has the sole purpose of protecting the
+integrity of the free software distribution system, which is
+implemented by public license practices. Many people have made
+generous contributions to the wide range of software distributed
+through that system in reliance on consistent application of that
+system; it is up to the author/donor to decide if he or she is willing
+to distribute software through any other system and a licensee cannot
+impose that choice.
+
+This section is intended to make thoroughly clear what is believed to
+be a consequence of the rest of this License.
+
+ 8. If the distribution and/or use of the Program is restricted in
+certain countries either by patents or by copyrighted interfaces, the
+original copyright holder who places the Program under this License
+may add an explicit geographical distribution limitation excluding
+those countries, so that distribution is permitted only in or among
+countries not thus excluded. In such case, this License incorporates
+the limitation as if written in the body of this License.
+
+ 9. The Free Software Foundation may publish revised and/or new versions
+of the General Public License from time to time. Such new versions will
+be similar in spirit to the present version, but may differ in detail to
+address new problems or concerns.
+
+Each version is given a distinguishing version number. If the Program
+specifies a version number of this License which applies to it and "any
+later version", you have the option of following the terms and conditions
+either of that version or of any later version published by the Free
+Software Foundation. If the Program does not specify a version number of
+this License, you may choose any version ever published by the Free Software
+Foundation.
+
+ 10. If you wish to incorporate parts of the Program into other free
+programs whose distribution conditions are different, write to the author
+to ask for permission. For software which is copyrighted by the Free
+Software Foundation, write to the Free Software Foundation; we sometimes
+make exceptions for this. Our decision will be guided by the two goals
+of preserving the free status of all derivatives of our free software and
+of promoting the sharing and reuse of software generally.
+
+ NO WARRANTY
+
+ 11. BECAUSE THE PROGRAM IS LICENSED FREE OF CHARGE, THERE IS NO WARRANTY
+FOR THE PROGRAM, TO THE EXTENT PERMITTED BY APPLICABLE LAW. EXCEPT WHEN
+OTHERWISE STATED IN WRITING THE COPYRIGHT HOLDERS AND/OR OTHER PARTIES
+PROVIDE THE PROGRAM "AS IS" WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESSED
+OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
+MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. THE ENTIRE RISK AS
+TO THE QUALITY AND PERFORMANCE OF THE PROGRAM IS WITH YOU. SHOULD THE
+PROGRAM PROVE DEFECTIVE, YOU ASSUME THE COST OF ALL NECESSARY SERVICING,
+REPAIR OR CORRECTION.
+
+ 12. IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING
+WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MAY MODIFY AND/OR
+REDISTRIBUTE THE PROGRAM AS PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES,
+INCLUDING ANY GENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING
+OUT OF THE USE OR INABILITY TO USE THE PROGRAM (INCLUDING BUT NOT LIMITED
+TO LOSS OF DATA OR DATA BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY
+YOU OR THIRD PARTIES OR A FAILURE OF THE PROGRAM TO OPERATE WITH ANY OTHER
+PROGRAMS), EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE
+POSSIBILITY OF SUCH DAMAGES.
+
+ END OF TERMS AND CONDITIONS
Added: trunk/lutinvcs/tools/changelog
===================================================================
--- trunk/lutinvcs/tools/changelog (rev 0)
+++ trunk/lutinvcs/tools/changelog 2008-04-18 14:57:00 UTC (rev 544)
@@ -0,0 +1,57 @@
+ver-0-26 poussin 2007????
+ * bug in concat(Object [] ...), better array type now work
+ * add unaccent in StringUtil
+
+ver-0-25 poussin 20070425
+ * add StringUtil.toArrayXXX(String ... s) methodes
+ * use generic
+
+ver-0-24 poussin
+ * ArgumentsParser have 1 as repetitionMax by default
+ * ArgumentsParser use jdk 1.5 syntaxe (..., <>)
+
+ver-0-23 poussin 20061004
+ * move i18n in lutinutil
+ * add method Resource.getConfigProperties(String, Properties) to chains
+ properties
+
+ver-0-22 poussin 20060913
+ * use Generics in CategorisedListenerSet
+ * add org.codelutin.log package (LutinLog, ...)
+ * remove org.codelutin.util.Log
+
+ver-0-21 poussin 20060907
+
+ * Add TransformedList
+ * Add FileUtil.getTempFile(String):File
+ * add FileUtil.getFile():File that prompt user
+ * add FileUtil.getDirectory(): String that prompt user
+ * add FileUtil.copyRecursively(File, File, String ... patternFilter)
+ * add ZipUtil class to compress/uncompress zip file
+ * Transparente*Reference accept null object
+
+ver-0-17 thimel 20050610
+
+ * Ajout de BoundedList et BoundedListOutOfBoundsException
+
+ver-0-16 poussin 20050526
+
+ * Ajout de la methode getConfigProperties dans Resource
+
+ver-0-9 poussin 20040728
+
+ * Ajout de methode isJar, isZip, dans Resource
+
+ver-0-3 poussin 20040405
+
+ * utilisation de maven pour la gestion du projet
+ * Ajout de ExceptionUtil
+
+ver-0-2 poussin 20031021
+
+ * ajout du parser d'argument, ArgumentsParser
+ * ajout de StringUtil
+
+ver-0-1
+
+ * premier version contient seulement Resource
Added: trunk/lutinvcs/tools/pom.xml
===================================================================
--- trunk/lutinvcs/tools/pom.xml (rev 0)
+++ trunk/lutinvcs/tools/pom.xml 2008-04-18 14:57:00 UTC (rev 544)
@@ -0,0 +1,59 @@
+<?xml version="1.0" encoding="ISO-8859-1"?>
+<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
+ xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/maven-v4_0_0.xsd">
+
+ <modelVersion>4.0.0</modelVersion>
+
+ <parent>
+ <groupId>org.codelutin.vcs</groupId>
+ <artifactId>pom</artifactId>
+ <version>${current.version}</version>
+ </parent>
+
+ <artifactId>tools</artifactId>
+ <name>tools</name>
+
+ <packaging>jar</packaging>
+ <version>${current.version}</version>
+ <description>Lutin vcs tools</description>
+
+ <build>
+ <plugins>
+ <plugin>
+ <groupId>lutinplugin</groupId>
+ <artifactId>maven-i18n-plugin</artifactId>
+ <executions>
+ <execution>
+ <phase>process-classes</phase>
+ <goals>
+ <goal>parserJava</goal>
+ <goal>gen</goal>
+ </goals>
+ </execution>
+ </executions>
+ </plugin>
+ </plugins>
+ </build>
+ <dependencies>
+ <dependency>
+ <groupId>org.codelutin.vcs.ui</groupId>
+ <artifactId>common</artifactId>
+ </dependency>
+ <dependency>
+ <groupId>org.codelutin.vcs.ui</groupId>
+ <artifactId>jaxx</artifactId>
+ </dependency>
+ <dependency>
+ <groupId>org.codelutin.vcs.provider</groupId>
+ <artifactId>mock</artifactId>
+ </dependency>
+ <dependency>
+ <groupId>org.codelutin.vcs.provider</groupId>
+ <artifactId>cvs</artifactId>
+ </dependency>
+ <dependency>
+ <groupId>org.codelutin.vcs.provider</groupId>
+ <artifactId>svn</artifactId>
+ </dependency>
+ </dependencies>
+</project>
Added: trunk/lutinvcs/tools/src/main/resources/META-INF/services/org.apache.commons.logging.LogFactory
===================================================================
--- trunk/lutinvcs/tools/src/main/resources/META-INF/services/org.apache.commons.logging.LogFactory (rev 0)
+++ trunk/lutinvcs/tools/src/main/resources/META-INF/services/org.apache.commons.logging.LogFactory 2008-04-18 14:57:00 UTC (rev 544)
@@ -0,0 +1 @@
+org.codelutin.util.LutinLogFactory
\ No newline at end of file
Added: trunk/lutinvcs/tools/src/main/resources/i18n/core-en_GB.properties
===================================================================
--- trunk/lutinvcs/tools/src/main/resources/i18n/core-en_GB.properties (rev 0)
+++ trunk/lutinvcs/tools/src/main/resources/i18n/core-en_GB.properties 2008-04-18 14:57:00 UTC (rev 544)
@@ -0,0 +1,33 @@
+lutinvcs.action.add=add
+lutinvcs.action.changeLog=changeLog
+lutinvcs.action.checkout=checkout
+lutinvcs.action.commit=commit
+lutinvcs.action.delete=delete
+lutinvcs.action.diff=diff
+lutinvcs.action.overwriteAndUpdate=overwrite and update
+lutinvcs.action.refresh=
+lutinvcs.action.revert=revert
+lutinvcs.action.update=update
+lutinvcs.error.checkout.dir=Can''t checkout dir {0}
+lutinvcs.error.connexion.noinit=connexion {0} was not init
+lutinvcs.error.connexion.noopen=connexion {0} was not opened
+lutinvcs.error.provider.init.connexion=could not instanciate connexion {0}, for provider {1}, reason\: {2}
+lutinvcs.error.provider.init.handler=could not instanciate handler {0}, for provider {1}, reason\: {2}
+lutinvcs.error.thread.action=
+lutinvcs.location.all.libelle=all
+lutinvcs.location.all.tip=Show both local and remote files
+lutinvcs.location.local.libelle=local
+lutinvcs.location.local.tip=Show local files
+lutinvcs.location.remote.libelle=remote
+lutinvcs.location.remote.tip=Show remote files
+lutinvcs.location.unknow.tip=Show unknown files...
+lutinvcs.location.unknown.libelle=Unknow
+lutinvcs.state.missing=missing
+lutinvcs.state.modified=modified
+lutinvcs.state.outofdate=out of date
+lutinvcs.state.outofdateAndModified=out of date and modified
+lutinvcs.state.removed=removed
+lutinvcs.state.unknown=unknown
+lutinvcs.state.unversionned=unversionned
+lutinvcs.state.unversionnedOrMissing=unversionned or missing
+lutinvcs.state.uptodate=uptodate
Added: trunk/lutinvcs/tools/src/main/resources/i18n/core-fr_FR.properties
===================================================================
--- trunk/lutinvcs/tools/src/main/resources/i18n/core-fr_FR.properties (rev 0)
+++ trunk/lutinvcs/tools/src/main/resources/i18n/core-fr_FR.properties 2008-04-18 14:57:00 UTC (rev 544)
@@ -0,0 +1,33 @@
+lutinvcs.action.add=Ajouter
+lutinvcs.action.changeLog=Journal des changements
+lutinvcs.action.checkout=R\u00E9cup\u00E9rer
+lutinvcs.action.commit=Publier
+lutinvcs.action.delete=Supprimer
+lutinvcs.action.diff=Voir les diff\u00E9rences
+lutinvcs.action.overwriteAndUpdate=Update
+lutinvcs.action.refresh=Rafra\u00EEchir
+lutinvcs.action.revert=Annuler les modifications
+lutinvcs.action.update=Mettre \u00E0 jour
+lutinvcs.error.checkout.dir=Ne peut pas uploader le fichier ''{0}''
+lutinvcs.error.connexion.noinit=La connexion {0} n''a pas \u00E9t\u00E9 initialis\u00E9e
+lutinvcs.error.connexion.noopen=La connexion {0} n''a pas \u00E9t\u00E9 ouverte
+lutinvcs.error.provider.init.connexion=Erreur lors de l''instanciation de la connexion {0}, provider {1}, cause\: {2}
+lutinvcs.error.provider.init.handler=Erreur lors de l''instanciation du handler {0}, provider {1}, cause\: {2}
+lutinvcs.error.thread.action=
+lutinvcs.location.all.libelle=Tout
+lutinvcs.location.all.tip=Voir tous les fichiers locaux et distants
+lutinvcs.location.local.libelle=Local
+lutinvcs.location.local.tip=Voir uniquement les fichiers locaux
+lutinvcs.location.remote.libelle=Distant
+lutinvcs.location.remote.tip=Voir uniquement les fichiers distants
+lutinvcs.location.unknow.tip=Voir uniquement les fichiers de type inconnu...
+lutinvcs.location.unknown.libelle=Unknow
+lutinvcs.state.missing=non pr\u00E9sent
+lutinvcs.state.modified=modifi\u00E9
+lutinvcs.state.outofdate=obsol\u00E8te
+lutinvcs.state.outofdateAndModified=modifi\u00E9 et obsol\u00E8te
+lutinvcs.state.removed=supprim\u00E9
+lutinvcs.state.unknown=\u00E9tat inconnu
+lutinvcs.state.unversionned=non publi\u00E9
+lutinvcs.state.unversionnedOrMissing=non publi\u00E9 ou non pr\u00E9sent localement
+lutinvcs.state.uptodate=fichier \u00E0 jour
Added: trunk/lutinvcs/tools/src/main/resources/i18n/tools-en_GB.properties
===================================================================
Added: trunk/lutinvcs/tools/src/main/resources/i18n/tools-fr_FR.properties
===================================================================
Added: trunk/lutinvcs/tools/src/site/fr/rst/devel/index.rst
===================================================================
--- trunk/lutinvcs/tools/src/site/fr/rst/devel/index.rst (rev 0)
+++ trunk/lutinvcs/tools/src/site/fr/rst/devel/index.rst 2008-04-18 14:57:00 UTC (rev 544)
@@ -0,0 +1,5 @@
+===================
+Lutin vcs core dev
+===================
+
+TODO
Added: trunk/lutinvcs/tools/src/site/fr/rst/index.rst
===================================================================
--- trunk/lutinvcs/tools/src/site/fr/rst/index.rst (rev 0)
+++ trunk/lutinvcs/tools/src/site/fr/rst/index.rst 2008-04-18 14:57:00 UTC (rev 544)
@@ -0,0 +1,5 @@
+==============
+Lutin vcs core
+==============
+
+TODO
\ No newline at end of file
Added: trunk/lutinvcs/tools/src/site/fr/rst/todo.rst
===================================================================
--- trunk/lutinvcs/tools/src/site/fr/rst/todo.rst (rev 0)
+++ trunk/lutinvcs/tools/src/site/fr/rst/todo.rst 2008-04-18 14:57:00 UTC (rev 544)
@@ -0,0 +1,4 @@
+======================
+Lutinvcs - core - TODO
+======================
+
Added: trunk/lutinvcs/tools/src/site/site_fr.xml
===================================================================
--- trunk/lutinvcs/tools/src/site/site_fr.xml (rev 0)
+++ trunk/lutinvcs/tools/src/site/site_fr.xml 2008-04-18 14:57:00 UTC (rev 544)
@@ -0,0 +1,37 @@
+<?xml version="1.0" encoding="ISO-8859-1"?>
+<project name="simexplorer-si">
+
+ <skin>
+ <groupId>lutinlib</groupId>
+ <artifactId>lutin-site-skin</artifactId>
+ <version>0.1</version>
+ </skin>
+
+ <bannerLeft>
+ <name>Système d'information - SimExplorer</name>
+ </bannerLeft>
+
+ <bannerRight>
+ <src>
+ http://www.codelutin.com/images/lutinorange-codelutin.png
+ </src>
+ <href>http://www.codelutin.com</href>
+ </bannerRight>
+
+ <poweredBy>
+ <logo href="http://docutils.sourceforge.net/rst.html"
+ img="/images/restructuredtext-logo.png" name="reStructuredText"/>
+ </poweredBy>
+
+ <body>
+ <menu name="Common Links" inherit="top"/>
+ <menu ref="parent"/>
+ <menu ref="reports"/>
+
+ <menu name="Liens">
+ <item href="http://java.sun.com/j2se"
+ name="Le site Java de Sun">
+ </item>
+ </menu>
+ </body>
+</project>
Added: trunk/lutinvcs/tools/src/test/java/org/codelutin/vcs/ConfigUITest.java
===================================================================
--- trunk/lutinvcs/tools/src/test/java/org/codelutin/vcs/ConfigUITest.java (rev 0)
+++ trunk/lutinvcs/tools/src/test/java/org/codelutin/vcs/ConfigUITest.java 2008-04-18 14:57:00 UTC (rev 544)
@@ -0,0 +1,47 @@
+/**
+ * ##% Copyright (C) 2008 Code Lutin, Tony Chemit
+ * This program is free software; you
+ * can redistribute it and/or modify it under the terms of the GNU General
+ * Public License as published by the Free Software Foundation; either version 2
+ * of the License, or (at your option) any later version. This program is
+ * distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY;
+ * without even the implied warranty of MERCHANTABILITY or FITNESS FOR A
+ * PARTICULAR PURPOSE. See the GNU General Public License for more details. You
+ * should have received a copy of the GNU General Public License along with this
+ * program; if not, write to the Free Software Foundation, Inc., 59 Temple Place
+ * - Suite 330, Boston, MA 02111-1307, USA.
+ * ##%
+ */
+package org.codelutin.vcs;
+
+import org.codelutin.vcs.ui.ConfigUI;
+import org.codelutin.vcs.ui.VCSUIFactory;
+import org.codelutin.vcs.ui.model.ConfigUIModel;
+
+import java.io.File;
+import java.io.IOException;
+
+/** @author chemit */
+public class ConfigUITest {
+
+ public static void main(String[] args) throws IOException, VCSException {
+
+ RepositoryGenerator generator = new RepositoryGenerator();
+
+ File root = generator.generateWorkingRepositoryPath();
+
+ VCSConnexion connexion = UITest.initMockVCS(root);
+
+ UITest.initUI(generator, connexion);
+
+ connexion.open();
+
+ ConfigUI ui = VCSUIFactory.newConfigUI();
+
+ ConfigUIModel model = ui.getHandler().getModel();
+
+ model.populate(connexion.getConfig(), true, "tony", "chemit", "chemit(a)codelutin.com");
+
+ ui.setVisible(true);
+ }
+}
\ No newline at end of file
Added: trunk/lutinvcs/tools/src/test/java/org/codelutin/vcs/UITest.java
===================================================================
--- trunk/lutinvcs/tools/src/test/java/org/codelutin/vcs/UITest.java (rev 0)
+++ trunk/lutinvcs/tools/src/test/java/org/codelutin/vcs/UITest.java 2008-04-18 14:57:00 UTC (rev 544)
@@ -0,0 +1,80 @@
+/**
+ * ##% Copyright (C) 2008 Code Lutin, Tony Chemit
+ * This program is free software; you
+ * can redistribute it and/or modify it under the terms of the GNU General
+ * Public License as published by the Free Software Foundation; either version 2
+ * of the License, or (at your option) any later version. This program is
+ * distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY;
+ * without even the implied warranty of MERCHANTABILITY or FITNESS FOR A
+ * PARTICULAR PURPOSE. See the GNU General Public License for more details. You
+ * should have received a copy of the GNU General Public License along with this
+ * program; if not, write to the Free Software Foundation, Inc., 59 Temple Place
+ * - Suite 330, Boston, MA 02111-1307, USA.
+ * ##%
+ */
+package org.codelutin.vcs;
+
+import org.codelutin.vcs.type.VCSConnexionMode;
+import org.codelutin.vcs.ui.SynchUI;
+import org.codelutin.vcs.ui.VCSUIFactory;
+import org.codelutin.vcs.ui.VCSUIFactory.VCSWindowListener;
+import org.codelutin.vcs.ui.util.model.AbstractTabUIModel;
+import org.codelutin.vcs.util.VCSConnexionConfigImpl;
+
+import java.io.File;
+import java.io.IOException;
+
+/** @author chemit */
+public class UITest {
+
+ public static void main(String[] args) throws IOException, VCSException {
+
+ RepositoryGenerator generator = new RepositoryGenerator();
+
+ File root = generator.generateWorkingRepositoryPath();
+
+ generator.generateWorkingRepository(root, 10, 5, 10, 1024);
+
+ VCSConnexion connexion = initMockVCS(root);
+
+ initUI(generator, connexion);
+
+ connexion.open();
+
+ SynchUI ui = VCSUIFactory.newSynchUI();
+
+ AbstractTabUIModel model = ui.getHandler().getModel();
+
+ model.populate(connexion);
+
+ generator.generateStates(model.getEntriesModel());
+
+ ui.setVisible(true);
+ }
+
+ public static VCSConnexion initMockVCS(final File root) {
+ VCSConnexionConfig config = new VCSConnexionConfigImpl();
+ config.setKeyFile(new File("/home/tony/.ssh/id_dsa"));
+ config.setUserName("tchemit");
+ //config.setPassPhrase("pass");
+ config.setNoPassPhrase(true);
+ config.setType("MOCK");
+ config.setLocalDatabasePath(root);
+ config.setConnexionMode(VCSConnexionMode.SSH);
+ VCSConnexion connexion = VCSFactory.newConnexion(VCSConnexionMode.ANONYMOUS, config);
+ connexion.init(config);
+ return connexion;
+ }
+
+ protected static void initUI(final RepositoryGenerator generator, final VCSConnexion connexion) {
+ VCSUIFactory.initFactory(connexion.getConfig(), new VCSWindowListener() {
+
+ protected void allWindowsClosed() {
+ generator.deleteWorkingCopy(connexion.getWorkingCopy());
+ }
+
+ protected void closeConnexion(VCSConnexion connexion) {
+ }
+ });
+ }
+}
\ No newline at end of file
Added: trunk/lutinvcs/tools/src/test/resources/log4j.properties
===================================================================
--- trunk/lutinvcs/tools/src/test/resources/log4j.properties (rev 0)
+++ trunk/lutinvcs/tools/src/test/resources/log4j.properties 2008-04-18 14:57:00 UTC (rev 544)
@@ -0,0 +1,9 @@
+# Global logging configuration
+log4j.rootLogger=ERROR, stdout
+# Console output...
+log4j.appender.stdout=org.apache.log4j.ConsoleAppender
+log4j.appender.stdout.layout=org.apache.log4j.PatternLayout
+log4j.appender.stdout.layout.ConversionPattern=%5p [%t] (%F:%L) %M - %m%n
+#log4j.appender.stdout.layout.ConversionPattern=%%c=%c %%C=%C %%d=%d %%F=%F %%l=%l %%L=%L %%m=%m %%M=%M %%p=%p %%r=%r %%t=%t %%x=%x %%X=%X
+# package level
+log4j.logger.org.codelutin=INFO
Copied: trunk/lutinvcs/ui/common/src/main/java/org/codelutin/vcs/ui/GenerateSshKeyUI.java (from rev 540, trunk/lutinvcs/ui/common/src/main/java/org/codelutin/vcs/ui/ConfigUI.java)
===================================================================
--- trunk/lutinvcs/ui/common/src/main/java/org/codelutin/vcs/ui/GenerateSshKeyUI.java (rev 0)
+++ trunk/lutinvcs/ui/common/src/main/java/org/codelutin/vcs/ui/GenerateSshKeyUI.java 2008-04-18 14:57:00 UTC (rev 544)
@@ -0,0 +1,111 @@
+/**
+ * # #% Copyright (C) 2008 Code Lutin, Tony Chemit
+ * This program is free software; you
+ * can redistribute it and/or modify it under the terms of the GNU General
+ * Public License as published by the Free Software Foundation; either version 2
+ * of the License, or (at your option) any later version. This program is
+ * distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY;
+ * without even the implied warranty of MERCHANTABILITY or FITNESS FOR A
+ * PARTICULAR PURPOSE. See the GNU General Public License for more details. You
+ * should have received a copy of the GNU General Public License along with this
+ * program; if not, write to the Free Software Foundation, Inc., 59 Temple Place
+ * - Suite 330, Boston, MA 02111-1307, USA.
+ * # #%
+ */
+package org.codelutin.vcs.ui;
+
+import static org.codelutin.i18n.I18n._;
+import org.codelutin.util.FileUtil;
+import org.codelutin.vcs.ui.handler.GenerateSshKeyUIHandler;
+import org.codelutin.vcs.ui.util.ui.AbstractUI;
+
+import javax.swing.AbstractButton;
+import javax.swing.JCheckBox;
+import javax.swing.JComponent;
+import javax.swing.JEditorPane;
+import javax.swing.JLabel;
+import javax.swing.JPasswordField;
+import javax.swing.JTextField;
+import java.io.File;
+
+/** @author chemit */
+public abstract class GenerateSshKeyUI extends AbstractUI<GenerateSshKeyUIHandler> {
+
+ public enum Element {
+ login,
+ passphrase,
+ nopassphrase,
+ dir,
+ keyName
+ }
+
+ public abstract String getElementValue(Element element);
+
+ public abstract JLabel getElementLabel(Element element);
+
+ public abstract JComponent getElement(Element element);
+
+ public abstract JEditorPane getDoc();
+
+ public abstract JTextField getLogin();
+
+ public abstract JTextField getKeyName();
+
+ public abstract JPasswordField getPassphrase();
+
+ public abstract JCheckBox getNoPassPhrase();
+
+ public abstract JTextField getDir();
+
+ public abstract AbstractButton getGenerateKey();
+
+ public abstract AbstractButton getOk();
+
+ public abstract AbstractButton getReset();
+
+ public abstract AbstractButton getCancel();
+
+ public abstract JLabel getLoginLabel();
+
+ public abstract JLabel getPassphraseLabel();
+
+ public abstract JLabel getDirLabel();
+
+ public abstract JLabel getKeyNameLabel();
+
+ public boolean isConfigValid() {
+ return getHandler().isConfigValid();
+ }
+
+ protected void reset() {
+ getHandler().reset();
+ }
+
+ protected void save() {
+ getHandler().save();
+ dispose();
+ }
+
+ protected void doCheck(Element element) {
+ getHandler().doCheck(element);
+ }
+
+ protected void changeDirFile() {
+ //TODO add title in lutinutil :)
+ File file = FileUtil.getFile(".*.pub$", _("lutinvcs.config.find.public.key"));
+ if (file != null) {
+ String path = file.getAbsolutePath();
+ getDir().setText(path.substring(0, path.length() - 4));
+ doCheck(Element.dir);
+ }
+ }
+
+ protected void generateKey() {
+ //TODO
+ }
+
+ protected void testConnexion() {
+ //TODO
+ }
+
+}
\ No newline at end of file
Copied: trunk/lutinvcs/ui/common/src/main/java/org/codelutin/vcs/ui/handler/GenerateSshKeyUIHandler.java (from rev 540, 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/GenerateSshKeyUIHandler.java (rev 0)
+++ trunk/lutinvcs/ui/common/src/main/java/org/codelutin/vcs/ui/handler/GenerateSshKeyUIHandler.java 2008-04-18 14:57:00 UTC (rev 544)
@@ -0,0 +1,211 @@
+/**
+ * ##% Copyright (C) 2008 Code Lutin, Tony Chemit
+ * This program is free software; you
+ * can redistribute it and/or modify it under the terms of the GNU General
+ * Public License as published by the Free Software Foundation; either version 2
+ * of the License, or (at your option) any later version. This program is
+ * distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY;
+ * without even the implied warranty of MERCHANTABILITY or FITNESS FOR A
+ * PARTICULAR PURPOSE. See the GNU General Public License for more details. You
+ * should have received a copy of the GNU General Public License along with this
+ * program; if not, write to the Free Software Foundation, Inc., 59 Temple Place
+ * - Suite 330, Boston, MA 02111-1307, USA.
+ * ##%
+ */
+package org.codelutin.vcs.ui.handler;
+
+import org.codelutin.vcs.VCSConnexionConfig;
+import org.codelutin.vcs.ui.GenerateSshKeyUI;
+import org.codelutin.vcs.ui.GenerateSshKeyUI.Element;
+import static org.codelutin.vcs.ui.GenerateSshKeyUI.Element.dir;
+import static org.codelutin.vcs.ui.GenerateSshKeyUI.Element.keyName;
+import static org.codelutin.vcs.ui.GenerateSshKeyUI.Element.login;
+import static org.codelutin.vcs.ui.GenerateSshKeyUI.Element.nopassphrase;
+import static org.codelutin.vcs.ui.GenerateSshKeyUI.Element.passphrase;
+import static org.codelutin.vcs.ui.GenerateSshKeyUI.Element.values;
+import org.codelutin.vcs.ui.model.ConfigUIModel;
+import org.codelutin.vcs.ui.model.GenerateSshKeyUIModel;
+import org.codelutin.vcs.ui.util.handler.AbstractUIHandler;
+
+import javax.swing.JComponent;
+import javax.swing.text.JTextComponent;
+import java.awt.Color;
+import java.beans.PropertyChangeEvent;
+import java.io.File;
+import java.util.ArrayList;
+import java.util.Arrays;
+import java.util.List;
+
+/** @author chemit */
+public class GenerateSshKeyUIHandler extends AbstractUIHandler<GenerateSshKeyUIModel, GenerateSshKeyUI> {
+
+ protected List<Element> errors;
+
+
+ public GenerateSshKeyUIHandler(GenerateSshKeyUI ui, VCSConnexionConfig config) {
+ super(ui, new GenerateSshKeyUIModel(), config);
+ ui.setHandler(this);
+ errors = new ArrayList<Element>();
+ }
+
+ @Override
+ public void init() {
+ super.init();
+ }
+
+ public void propertyChange(PropertyChangeEvent evt) {
+ if (log.isDebugEnabled()) {
+ log.debug(evt.getPropertyName() + " old:" + evt.getOldValue() + ", new:" + evt.getNewValue());
+ }
+ String action = evt.getPropertyName();
+
+ if (ConfigUIModel.CONFIG_PROPERTY_CHANGED.equals(action)) {
+ // update ui with model values,
+ populateUI((GenerateSshKeyUIModel) evt.getNewValue());
+ doCheck(null);
+ return;
+ }
+
+ if (ConfigUIModel.MODIFIED_PROPERTY_CHANGED.equals(action)) {
+ Boolean newValue = (Boolean) evt.getNewValue();
+ getUi().getReset().setEnabled(newValue != null && newValue);
+ getUi().getGenerateKey().setEnabled(isConfigValid());
+ return;
+ }
+ throw new IllegalStateException("unimplemented property changed : " + evt + " for " + this);
+ }
+
+ public synchronized List<Element> validateModel(Element element) {
+ errors.clear();
+ GenerateSshKeyUI ui = getUi();
+ if (element != null) {
+ // compute modifed
+ setModified(element, ui);
+ }
+
+ // login + private key exists
+ checkData(ui.getLogin(), login);
+ checkData(ui.getKeyName(), keyName);
+
+ String s = ui.getDir().getText();
+ File file = new File(s);
+ checkData(s.isEmpty() || !file.exists(), dir);
+
+ if (ui.getElementValue(nopassphrase).equals("false")) {
+ // check it there is a pass-phrase
+ checkData(ui.getPassphrase().getPassword().length == 0, passphrase);
+ } else {
+ errors.remove(passphrase);
+ }
+
+ return errors;
+ }
+
+ public void setModified(Element element, GenerateSshKeyUI ui) {
+ boolean modify = false;
+ GenerateSshKeyUIModel model = getModel();
+
+ String value = ui.getElementValue(element);
+
+ switch (element) {
+ case login:
+ modify = !model.getLogin().equals(value);
+ break;
+ case nopassphrase:
+ boolean b = ui.getNoPassPhrase().isSelected();
+ modify = model.isNoPassPhrase() == b;
+ if (!b) {
+ model.removeModified(passphrase);
+ } else {
+ char[] password = ui.getPassphrase().getPassword();
+ boolean modify2;
+ if (model.getPassphrase() == null || model.getPassphrase().isEmpty()) {
+ modify2 = password.length == 0;
+ } else {
+ modify2 = model.getPassphrase().equals(Arrays.toString(password));
+ }
+ if (modify2) {
+ model.addModified(passphrase);
+ }
+ }
+ break;
+ case keyName:
+ modify = !model.getKeyName().equals(value);
+ break;
+ case dir:
+ modify = !model.getDir().getAbsolutePath().equals(value);
+ break;
+ case passphrase:
+ modify = !model.getPassphrase().equals(value);
+ break;
+ }
+ if (modify) {
+ model.addModified(element);
+ } else if (model.getModifieds().contains(element)) {
+ model.removeModified(element);
+ }
+ }
+
+ public void doCheck(Element element) {
+ List<Element> errors = validateModel(element);
+ updateUI(errors);
+ }
+
+ public boolean isConfigValid() {
+ return errors.isEmpty();
+ }
+
+ public void reset() {
+ getModel().reset();
+ }
+
+ protected void populateUI(GenerateSshKeyUIModel model) {
+ GenerateSshKeyUI ui = getUi();
+
+ ui.getLogin().setText(model.getLogin());
+ ui.getNoPassPhrase().setSelected(model.isNoPassPhrase());
+ ui.getDir().setText(model.getDir() == null ? "" : model.getDir().getAbsolutePath());
+ ui.getPassphrase().setText(model.getPassphrase() == null ? "" : model.getPassphrase());
+
+ }
+
+ protected void updateUI(List<Element> errors) {
+ GenerateSshKeyUI ui = getUi();
+ boolean valid = isConfigValid();
+ ui.getOk().setEnabled(valid && getModel().isModified());
+ ui.getGenerateKey().setEnabled(isConfigValid());
+ for (Element element : values()) {
+ setLabelColor(errors, element);
+ }
+ }
+
+ protected void checkData(JTextComponent component, Element errorName) {
+ if (component.getText().isEmpty()) {
+ errors.add(errorName);
+ }
+ }
+
+ protected void checkData(boolean notValid, Element errorName) {
+ if (notValid) {
+ errors.add(errorName);
+ }
+ }
+
+ protected void setLabelColor(List<Element> errors, Element element) {
+ JComponent component = getUi().getElementLabel(element);
+ if (component != null && component.isVisible()) {
+ component.setForeground(errors.contains(element) ? Color.red : Color.black);
+ }
+ }
+
+ public void save() {
+ if (!getModel().isModified()) {
+ log.warn("nothing to save");
+ }
+ for (Element element : getModel().getModifieds()) {
+ String value = getUi().getElementValue(element);
+ getModel().save(element, value);
+ log.info("save " + element);
+ }
+ }
+}
\ No newline at end of file
Copied: trunk/lutinvcs/ui/common/src/main/java/org/codelutin/vcs/ui/model/GenerateSshKeyUIModel.java (from rev 540, trunk/lutinvcs/ui/common/src/main/java/org/codelutin/vcs/ui/model/ConfigUIModel.java)
===================================================================
--- trunk/lutinvcs/ui/common/src/main/java/org/codelutin/vcs/ui/model/GenerateSshKeyUIModel.java (rev 0)
+++ trunk/lutinvcs/ui/common/src/main/java/org/codelutin/vcs/ui/model/GenerateSshKeyUIModel.java 2008-04-18 14:57:00 UTC (rev 544)
@@ -0,0 +1,183 @@
+/**
+ * ##% Copyright (C) 2008 Code Lutin, Tony Chemit
+ * This program is free software; you
+ * can redistribute it and/or modify it under the terms of the GNU General
+ * Public License as published by the Free Software Foundation; either version 2
+ * of the License, or (at your option) any later version. This program is
+ * distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY;
+ * without even the implied warranty of MERCHANTABILITY or FITNESS FOR A
+ * PARTICULAR PURPOSE. See the GNU General Public License for more details. You
+ * should have received a copy of the GNU General Public License along with this
+ * program; if not, write to the Free Software Foundation, Inc., 59 Temple Place
+ * - Suite 330, Boston, MA 02111-1307, USA.
+ * ##%
+ */
+package org.codelutin.vcs.ui.model;
+
+import org.codelutin.vcs.ui.GenerateSshKeyUI.Element;
+import org.codelutin.vcs.ui.util.model.AbstractUIModel;
+
+import java.io.File;
+import java.util.ArrayList;
+import java.util.List;
+
+/**
+ * Model of a a confirmation of action on entries (single type of action possible)
+ *
+ * @author chemit
+ */
+public class GenerateSshKeyUIModel extends AbstractUIModel {
+
+ public static final String MODIFIED_PROPERTY_CHANGED = "modified";
+ public static final String CONFIG_PROPERTY_CHANGED = "config";
+ public static final String DIR_PROPERTY_CHANGED = "dir";
+ public static final String LOGIN_PROPERTY_CHANGED = "login";
+ public static final String PASSPHRASE_PROPERTY_CHANGED = "passphrase";
+ public static final String KEY_NAME_PROPERTY_CHANGED = "keyname";
+
+ private File dir;
+ private String keyName;
+ private String login;
+ private String passphrase;
+
+ protected List<Element> modifieds;
+
+ private boolean noPassPhrase;
+
+ public GenerateSshKeyUIModel() {
+ modifieds = new ArrayList<Element>();
+ }
+
+ public void populate(File dir, String keyname, String login, String passphrase) {
+ this.dir = dir;
+ this.keyName = keyname;
+ this.login = login;
+ this.passphrase = passphrase;
+ this.noPassPhrase = passphrase == null || passphrase.isEmpty();
+ setModified(false);
+ firePropertyChange(CONFIG_PROPERTY_CHANGED, null, this);
+ }
+
+ public void reset() {
+ checkInit();
+ populate(dir, keyName, login, passphrase);
+ }
+
+ public File getDir() {
+ return dir;
+ }
+
+ public String getKeyName() {
+ return keyName;
+ }
+
+ public String getLogin() {
+ return login;
+ }
+
+ public String getPassphrase() {
+ return passphrase;
+ }
+
+ public boolean isModified() {
+ return !modifieds.isEmpty();
+ }
+
+ public List<Element> getModifieds() {
+ return modifieds;
+ }
+
+ public void setDir(File dir) {
+ this.dir = dir;
+ }
+
+ public void setKeyName(String keyName) {
+ this.keyName = keyName;
+ }
+
+ public void setLogin(String login) {
+ this.login = login;
+ }
+
+ public void setModifieds(List<Element> modifieds) {
+ this.modifieds = modifieds;
+ }
+
+ public void setPassphrase(String passphrase) {
+ this.passphrase = passphrase;
+ }
+
+ public void addModified(Element elementname) {
+ if (!modifieds.contains(elementname)) {
+ modifieds.add(elementname);
+
+ }
+ setModified(!modifieds.isEmpty());
+ }
+
+ public void removeModified(Element... elementnames) {
+ for (Element elementname : elementnames) {
+ if (modifieds.contains(elementname)) {
+ modifieds.remove(elementname);
+ }
+ setModified(!modifieds.isEmpty());
+ }
+ }
+
+ public void save(Element element, String value) {
+ checkInit();
+ switch (element) {
+ case login:
+ setLogin(value);
+ break;
+ case nopassphrase:
+ noPassPhrase = Boolean.valueOf(value);
+ if (noPassPhrase) {
+ passphrase = null;
+ }
+ break;
+ case passphrase:
+
+ passphrase = value;
+
+ break;
+ case dir:
+ dir = new File(value);
+
+ break;
+ case keyName:
+ keyName = value;
+ break;
+ }
+ }
+
+ /**
+ * Transfert values from ui to model
+ *
+ * @throws IllegalStateException if model was not populated
+ */
+ public void save() throws IllegalStateException {
+ checkInit();
+ if (!isModified()) {
+ // nothing to do :)
+ }
+ }
+
+ public void setModified(boolean modified) {
+ if (!modified) {
+ modifieds.clear();
+ }
+ firePropertyChange(MODIFIED_PROPERTY_CHANGED, null, modified);
+ }
+
+
+ protected void checkInit() throws IllegalStateException {
+ if (dir == null) {
+ throw new IllegalStateException("no populate was done for model " + this);
+ }
+ }
+
+ public boolean isNoPassPhrase() {
+ return noPassPhrase;
+ }
+}
\ No newline at end of file
Modified: trunk/lutinvcs/ui/pom.xml
===================================================================
--- trunk/lutinvcs/ui/pom.xml 2008-04-18 14:24:26 UTC (rev 543)
+++ trunk/lutinvcs/ui/pom.xml 2008-04-18 14:57:00 UTC (rev 544)
@@ -43,16 +43,6 @@
<dependencyManagement>
<dependencies>
<dependency>
- <groupId>${ui.groupId}</groupId>
- <artifactId>common</artifactId>
- <version>${current.version}</version>
- </dependency>
- <dependency>
- <groupId>${ui.groupId}</groupId>
- <artifactId>jaxx</artifactId>
- <version>${current.version}</version>
- </dependency>
- <dependency>
<groupId>lutinlib</groupId>
<artifactId>jaxx</artifactId>
<version>1.0.4-SNAPSHOT</version>
1
0