|
From: <de...@us...> - 2012-03-25 19:53:13
|
Revision: 7033
http://fudaa.svn.sourceforge.net/fudaa/?rev=7033&view=rev
Author: deniger
Date: 2012-03-25 19:53:06 +0000 (Sun, 25 Mar 2012)
Log Message:
-----------
Modified Paths:
--------------
trunk/soft/fudaa-prepro/ui/src/main/java/org/fudaa/fudaa/tr/TrLauncherDefault.java
trunk/soft/fudaa-prepro/ui/src/main/java/org/fudaa/fudaa/tr/TrSupervisorImplementation.java
trunk/soft/fudaa-prepro/ui/src/main/java/org/fudaa/fudaa/tr/common/TrCommonImplementation.java
trunk/soft/fudaa-prepro/ui/src/main/java/org/fudaa/fudaa/tr/post/persist/TrPostPersistenceManager.java
trunk/soft/fudaa-prepro/ui/src/main/resources/org/fudaa/fudaa/tr/common/tr_en.fr_txt
Removed Paths:
-------------
trunk/soft/fudaa-prepro/ui/src/main/java/org/fudaa/fudaa/tr/TrSoftUpdater.java
Modified: trunk/soft/fudaa-prepro/ui/src/main/java/org/fudaa/fudaa/tr/TrLauncherDefault.java
===================================================================
--- trunk/soft/fudaa-prepro/ui/src/main/java/org/fudaa/fudaa/tr/TrLauncherDefault.java 2012-03-24 03:23:26 UTC (rev 7032)
+++ trunk/soft/fudaa-prepro/ui/src/main/java/org/fudaa/fudaa/tr/TrLauncherDefault.java 2012-03-25 19:53:06 UTC (rev 7033)
@@ -48,21 +48,7 @@
static BuInformationsSoftware infoSoft;
- private static void updateVersion() {
- if (BuPreferences.BU.getBooleanProperty("check.update", true)) {
- if (Fu.DEBUG && FuLog.isDebug()) {
- FuLog.debug("FTR: search for updates");
- }
- final Thread d = new Thread() {
- @Override
- public void run() {
- new TrSoftUpdater(infoSoft).update();
- }
- };
- d.setPriority(Thread.NORM_PRIORITY);
- d.start();
- }
- }
+
public static void init() {
@@ -116,7 +102,6 @@
"Didier Roug\xE9" };
infoSoft.citation = "";
FudaaSaveLib.configureDb4o();
- updateVersion();
}
/**
Deleted: trunk/soft/fudaa-prepro/ui/src/main/java/org/fudaa/fudaa/tr/TrSoftUpdater.java
===================================================================
--- trunk/soft/fudaa-prepro/ui/src/main/java/org/fudaa/fudaa/tr/TrSoftUpdater.java 2012-03-24 03:23:26 UTC (rev 7032)
+++ trunk/soft/fudaa-prepro/ui/src/main/java/org/fudaa/fudaa/tr/TrSoftUpdater.java 2012-03-25 19:53:06 UTC (rev 7033)
@@ -1,339 +0,0 @@
-/*
- * @creation 21 juil. 06
- * @modification $Date: 2007-05-04 14:01:52 $
- * @license GNU General Public License 2
- * @copyright (c)1998-2001 CETMEF 2 bd Gambetta F-60231 Compiegne
- * @mail de...@fu...
- */
-package org.fudaa.fudaa.tr;
-
-import java.awt.Frame;
-import java.awt.Window;
-import java.io.IOException;
-import java.io.InputStream;
-import java.io.InputStreamReader;
-import java.io.LineNumberReader;
-import java.net.URL;
-import java.net.URLConnection;
-import java.util.Properties;
-
-import javax.swing.JDialog;
-import javax.swing.JOptionPane;
-import javax.swing.ListModel;
-
-import com.memoire.bu.*;
-import com.memoire.fu.Fu;
-import com.memoire.fu.FuLib;
-import com.memoire.fu.FuLog;
-
-import org.fudaa.ctulu.CtuluLib;
-import org.fudaa.ctulu.CtuluLibString;
-import org.fudaa.ctulu.gui.CtuluLibDialog;
-import org.fudaa.ctulu.gui.CtuluOptionPane;
-import org.fudaa.fudaa.commun.FudaaBrowserControl;
-import org.fudaa.fudaa.commun.FudaaLib;
-import org.fudaa.fudaa.tr.common.TrLib;
-import org.fudaa.fudaa.tr.common.TrResource;
-
-/**
- * @author fred deniger
- * @version $Id: TrSoftUpdater.java,v 1.12 2007-05-04 14:01:52 deniger Exp $
- */
-public class TrSoftUpdater {
-
- BuCommonImplementation impl_;
- final BuInformationsSoftware infos_;
- boolean isConnected_;
- boolean isUptoDate_;
- int nbTry_ = 7;
-
- final String updateURL_;
-
- int wait_ = 1000;
-
- public TrSoftUpdater(final BuInformationsSoftware _infos) {
- super();
- infos_ = _infos;
- updateURL_ = TrLib.getMajURl(infos_);
- BuPreferences.BU.applyNetwork();
- }
-
- void afficheDialogueForUpdate(final String _version) {
-
- final String title = TrResource.getS("Mise \xE0 jour de Fudaa-Prepro:") + CtuluLibString.ESPACE + _version;
- final String message = "<html><body><p>"
- + TrResource.getS("Une nouvelle version est disponible:")
- + "<b> "
- + _version
- + "</b>.</p><p>"
- + TrResource.getS("Cliquer {0} pour voir les modifications apport\xE9es \xE0 la derni\xE8re version.",
- "<a href=\"GO_UPDATE\">" + TrResource.getS("ici") + "</a>")
- + "</p><p>"
- + TrResource
- .getS("Pour utiliser la nouvelle version, vous devrez fermer toutes les applications de Fudaa-Prepro.")
- + "<br>"
- + TrResource
- .getS("Pour cela, vous pouvez utiliser directement l'option ci-dessous <br> ou le menu 'Fichier>Fermer toutes les applications'.")
- + "<p><b>"
- + TrResource.getS("Mettre \xE0 jour en arri\xE8re-plan:")
- + "</b><br>"
- + TrResource
- .getS("La nouvelle version sera t\xE9l\xE9charg\xE9e et install\xE9e en tache de fond. Elle sera utilis\xE9e au prochain red\xE9marrage de Fudaa Prepro.")
- + "</p>";
- final boolean isJnlp = TrLib.isJnlp();
- final String closeAll = TrResource.getS("Fermer toutes les applications et mettre \xE0 jour");
- final String ignore = FudaaLib.getS("Ignorer");
- final String background = TrResource.getS("Mettre \xE0 jour en arri\xE8re-plan");
- final String ignoreAndForget = TrResource.getS("Ignorer et ne plus demander");
- final String[] options = isJnlp ? new String[] { closeAll, background, ignoreAndForget, ignore } : new String[] {
- closeAll, ignoreAndForget, ignore };
-
- final CtuluOptionPane pane = new CtuluOptionPane(message, JOptionPane.INFORMATION_MESSAGE) {
- @Override
- protected void linkActivated(final String _url) {
- if (_url == null) {
- new Thread() {
- @Override
- public void run() {
- showUpdateModification(_version);
- }
- }.start();
-
- } else {
- super.linkActivated(_url);
- }
- }
- };
- pane.setOptions(options);
- final JDialog d = pane.createDialog(getFrame(), title);
- // en fait c'est juste pour avoir le joli icone en haut a gauche
- d.setResizable(true);
- d.setModal(true);
- d.pack();
- TrLauncherDefault.updateDial_ = d;
- d.show();
- d.dispose();
- TrLauncherDefault.updateDial_ = null;
-
- final Object o = pane.getValue();
- final String preproJnlp = "http://fudaa.fr/install/prepro/prepro.jnlp";
- final boolean isJava16 = "1.6".compareTo(FuLib.getJavaVersion()) <= 0;
- if (options[0].equals(o)) {
- Object tmp = null;
- final boolean onlySup = isOnlySupervisor();
- // un objet temporaire pour eviter que Bu fasse un System.exit(0);
- if (!onlySup) {
- tmp = new Object();
- BuRegistry.register(tmp);
- closeAll();
- }
- if (onlySup || (tmp != null && BuRegistry.getModel().getSize() == 1 && tmp.equals(BuRegistry.getModel().get(0)))) {
- if (TrLib.isJnlp()) {
- try {
- String[] strings = new String[] { TrLib.getJavaws(), "-online", preproJnlp };
- if (isJava16) {
- strings = new String[] { TrLib.getJavaws(), preproJnlp };
- }
- // on importe la nouvelle version
- // Runtime.getRuntime().exec(new String[] { TrLib.getJavaws(), "-wait", "-import", preproJnlp });
- // on lance le tout
- Runtime.getRuntime().exec(strings);
- } catch (final IOException _evt) {
- FudaaBrowserControl.displayURL(updateURL_);
- FuLog.error(_evt);
-
- }
- }
- System.exit(0);
- } else {
- BuRegistry.unregister(tmp);
- FudaaBrowserControl.displayURL(updateURL_);
- }
- // tache de fond
- } else if (isJnlp && options[1].equals(o)) {
- if (TrLib.isJnlp()) {
- try {
- Runtime.getRuntime().exec(new String[] { TrLib.getJavaws(), "-import", "-silent", preproJnlp });
- } catch (final IOException _evt) {
- FudaaBrowserControl.displayURL(updateURL_);
- FuLog.error(_evt);
-
- }
- } else {
- FudaaBrowserControl.displayURL(updateURL_);
- }
- } else if (options[options.length - 2].equals(o)) {
- BuPreferences.BU.putBooleanProperty("check.update", false);
- BuPreferences.BU.writeIniFile();
- CtuluLibDialog
- .showMessage(
- getFrame(),
- TrResource.getS("V\xE9rification des mises \xE0 jour au d\xE9marrage"),
- TrResource
- .getS("Pour activer \xE0 nouveau cette option, aller dans les pr\xE9f\xE9rences (menu Edition) et\n choisir l'onglet 'Syst\xE8me' et 'D\xE9marrage/sortie'"));
- }
-
- }
-
- private Frame getFrame() {
- return impl_ == null ? BuLib.HELPER : impl_.getFrame();
-
- }
-
- protected void showUpdateModification(final String _version) {
- InputStream in = null;
- LineNumberReader reader = null;
- try {
- final String lang = CtuluLib.isFrenchLanguageSelected() ? "fr" : "en";
- final URL url = new URL("http://www.fudaa.fr/prepro/inc.last-changelog." + lang + ".html");
- // in = url.openStream();
- final URLConnection connection = url.openConnection();
- for (int i = 0; i < nbTry_ && in == null; i++) {
- connection.connect();
- in = url.openStream();
- try {
- if (in == null) {
- Thread.sleep(wait_);
- }
- } catch (final InterruptedException _evt) {
-
- }
- }
- if (in == null) {
- BuBrowserControl.displayURL(updateURL_);
-
- } else {
- final StringBuffer buf = new StringBuffer(300);
- buf.append("<html><body>");
- reader = new LineNumberReader(new InputStreamReader(in));
- String line = reader.readLine();
- while (line != null) {
- buf.append(line);
- line = reader.readLine();
- }
- buf.append("</body></html>");
- CtuluLibDialog.showMessage(getFrame(), TrResource.getS("Modifications apport\xE9es \xE0 la version {0}", _version),
- buf.toString());
-
- }
- } catch (final IOException _evt) {
- // FuLog.error(_evt);
-
- } finally {
- FuLib.safeClose(in);
- FuLib.safeClose(reader);
- }
- }
-
- public void closeAll() {
- if (impl_ != null) {
- impl_.exit();
- }
- final ListModel model = BuRegistry.getModel();
- final int nb = model.getSize() - 1;
- for (int i = 0; i < nb; i++) {
- final Object o = model.getElementAt(i);
- if (o instanceof BuApplication) {
- ((BuApplication) o).exit();
- } else if (o instanceof Window) {
- ((Window) o).hide();
- ((Window) o).dispose();
- }
- }
- }
-
- public BuCommonImplementation getImpl() {
- return impl_;
- }
-
- public int getNbTry() {
- return nbTry_;
- }
-
- public int getWait() {
- return wait_;
- }
-
- public boolean isConnected() {
- return isConnected_;
- }
-
- public boolean isOnlySupervisor() {
- if (BuRegistry.getModel().getSize() == 0) { return true; }
- if (BuRegistry.getModel().getSize() == 1) {
- final Object o = BuRegistry.getModel().get(0);
- return (o instanceof BuApplication)
- && ((((BuApplication) o).getImplementation()) instanceof TrSupervisorImplementation);
- }
- return false;
- }
-
- public boolean isUptoDate() {
- return isUptoDate_;
- }
-
- public void setImpl(final BuCommonImplementation _impl) {
- impl_ = _impl;
- }
-
- public void setNbTry(final int _nbTry) {
- nbTry_ = _nbTry;
- }
-
- public void setWait(final int _millsec) {
- wait_ = _millsec;
- }
-
- public void update() {
- if (Fu.DEBUG && FuLog.isDebug()) {
- FuLog.debug("FTR: update start load properties");
- }
- InputStream in = null;
- try {
- final URL url = new URL("http://www.fudaa.fr/prepro/prepro.properties");
- // in = url.openStream();
- final URLConnection connection = url.openConnection();
- connection.setUseCaches(false);
- for (int i = 0; i < nbTry_ && in == null; i++) {
- connection.connect();
- in = url.openStream();
- try {
- if (in == null) {
- Thread.sleep(wait_);
- }
- } catch (final InterruptedException _evt) {
-
- }
- }
- if (in == null) {
- isConnected_ = false;
- } else {
- isConnected_ = true;
- final Properties prop = new Properties();
- prop.load(in);
- final String version = prop.getProperty("@version@");
- if (Fu.DEBUG && FuLog.isDebug()) {
- FuLog.debug("FTR: version read from site " + version);
- }
- if (version != null && version.compareTo(infos_.version) > 0) {
- isUptoDate_ = false;
- BuLib.invokeLater(new Runnable() {
-
- public void run() {
- afficheDialogueForUpdate(version);
- }
- });
- } else {
- isUptoDate_ = true;
- }
-
- }
- } catch (final IOException _evt) {
- // FuLog.error(_evt);
-
- } finally {
- FuLib.safeClose(in);
- }
- }
-
-}
Modified: trunk/soft/fudaa-prepro/ui/src/main/java/org/fudaa/fudaa/tr/TrSupervisorImplementation.java
===================================================================
--- trunk/soft/fudaa-prepro/ui/src/main/java/org/fudaa/fudaa/tr/TrSupervisorImplementation.java 2012-03-24 03:23:26 UTC (rev 7032)
+++ trunk/soft/fudaa-prepro/ui/src/main/java/org/fudaa/fudaa/tr/TrSupervisorImplementation.java 2012-03-25 19:53:06 UTC (rev 7033)
@@ -98,7 +98,6 @@
r.addMenuItem(BuResource.BU.getString("Licence..."), "TEXTE_LICENCE", true);
r.addSeparator();
r.addMenuItem(BuResource.BU.getString("Site WWW"), "WWW_ACCUEIL", true);
- r.addMenuItem(BuResource.BU.getString("Mise \xE0 jour"), "MAJ", true);
TrLib.addJavawsForJnlp(r);
r.addMenuItem(TrResource.getS("Soumettre une demande d'am\xE9lioration"), "SEND_COMMENT", BuResource.BU.getIcon("envoyer"), true);
TrLib.addJava3DJMFTest(r);
Modified: trunk/soft/fudaa-prepro/ui/src/main/java/org/fudaa/fudaa/tr/common/TrCommonImplementation.java
===================================================================
--- trunk/soft/fudaa-prepro/ui/src/main/java/org/fudaa/fudaa/tr/common/TrCommonImplementation.java 2012-03-24 03:23:26 UTC (rev 7032)
+++ trunk/soft/fudaa-prepro/ui/src/main/java/org/fudaa/fudaa/tr/common/TrCommonImplementation.java 2012-03-25 19:53:06 UTC (rev 7033)
@@ -29,31 +29,9 @@
import javax.swing.KeyStroke;
import javax.swing.event.InternalFrameEvent;
-import com.memoire.bu.BuActionRemover;
-import com.memoire.bu.BuBrowserPreferencesPanel;
-import com.memoire.bu.BuColumn;
-import com.memoire.bu.BuDesktopPreferencesPanel;
-import com.memoire.bu.BuIcon;
-import com.memoire.bu.BuInternalFrame;
-import com.memoire.bu.BuLanguagePreferencesPanel;
-import com.memoire.bu.BuLib;
-import com.memoire.bu.BuMainPanel;
-import com.memoire.bu.BuMenu;
-import com.memoire.bu.BuMenuBar;
-import com.memoire.bu.BuMenuItem;
-import com.memoire.bu.BuPreferences;
-import com.memoire.bu.BuResource;
-import com.memoire.bu.BuScrollPane;
-import com.memoire.bu.BuTaskView;
-import com.memoire.bu.BuToolBar;
-import com.memoire.bu.BuUserPreferencesPanel;
-import com.memoire.fu.FuLib;
-import com.memoire.fu.FuLog;
-
import org.fudaa.ctulu.BuNetworkPreferencesPanel;
import org.fudaa.ctulu.CtuluLib;
import org.fudaa.ctulu.CtuluLibArray;
-import org.fudaa.ctulu.CtuluTaskDelegate;
import org.fudaa.ctulu.ProgressionInterface;
import org.fudaa.ctulu.gui.CtuluFavoriteFiles;
import org.fudaa.ctulu.gui.CtuluHelpComponent;
@@ -72,9 +50,29 @@
import org.fudaa.fudaa.fdico.FDicoPreferences;
import org.fudaa.fudaa.sig.FSigLib;
import org.fudaa.fudaa.sig.layer.FSigImageImportAction;
-import org.fudaa.fudaa.tr.TrSoftUpdater;
import org.jdesktop.swingx.ScrollPaneSelector;
+import com.memoire.bu.BuActionRemover;
+import com.memoire.bu.BuBrowserPreferencesPanel;
+import com.memoire.bu.BuColumn;
+import com.memoire.bu.BuDesktopPreferencesPanel;
+import com.memoire.bu.BuIcon;
+import com.memoire.bu.BuInternalFrame;
+import com.memoire.bu.BuLanguagePreferencesPanel;
+import com.memoire.bu.BuLib;
+import com.memoire.bu.BuMainPanel;
+import com.memoire.bu.BuMenu;
+import com.memoire.bu.BuMenuBar;
+import com.memoire.bu.BuMenuItem;
+import com.memoire.bu.BuPreferences;
+import com.memoire.bu.BuResource;
+import com.memoire.bu.BuScrollPane;
+import com.memoire.bu.BuTaskView;
+import com.memoire.bu.BuToolBar;
+import com.memoire.bu.BuUserPreferencesPanel;
+import com.memoire.fu.FuLib;
+import com.memoire.fu.FuLog;
+
/**
* @author Fred Deniger
* @version $Id: TrCommonImplementation.java,v 1.59.2.1 2008-03-18 11:05:44 bmarchan Exp $
@@ -215,30 +213,8 @@
return null;
}
- protected void maj() {
- final String s = TrResource.getS("Recherche mise \xE0 jour"); //Finding update
- final CtuluTaskDelegate task = createTask(s);
- task.start(new Runnable() {
+
- public void run() {
- final TrSoftUpdater up = new TrSoftUpdater(getInformationsSoftware());
- up.setNbTry(3);
- up.setImpl(TrCommonImplementation.this);
- up.setWait(500);
- up.update();
- if (up.isConnected()) {
- if (up.isUptoDate()) {
- message(s, TrResource.getS("Votre version est \xE0 jour"), false);
- }
- } else {
- displayURL(TrLib.getMajURl(getInformationsSoftware()));
- }
- }
-
- });
-
- }
-
protected abstract void ouvrir();
protected void removeUnusedActions() {
@@ -341,8 +317,6 @@
} else if ("AIDE_INDEX".equals(act)) {
// displayAideIndex();
displayHelpPDF(getInformationsSoftware().baseManUrl());
- } else if ("MAJ".equals(act)) {
- maj();
} else if ("SEND_COMMENT".equals(act)) {
new Thread() {
@Override
@@ -487,7 +461,6 @@
setEnabledForAction("QUITTER", true);
setEnabledForAction("PREFERENCE", true);
- setEnabledForAction("MAJ", true);
setEnabledForAction("SEND_COMMENT", true);
setEnabledForAction("LAUNCH_JAVAWS", true);
final BuMenu mFichier = (BuMenu) b.getMenu("MENU_FICHIER");
Modified: trunk/soft/fudaa-prepro/ui/src/main/java/org/fudaa/fudaa/tr/post/persist/TrPostPersistenceManager.java
===================================================================
--- trunk/soft/fudaa-prepro/ui/src/main/java/org/fudaa/fudaa/tr/post/persist/TrPostPersistenceManager.java 2012-03-24 03:23:26 UTC (rev 7032)
+++ trunk/soft/fudaa-prepro/ui/src/main/java/org/fudaa/fudaa/tr/post/persist/TrPostPersistenceManager.java 2012-03-25 19:53:06 UTC (rev 7033)
@@ -1036,16 +1036,17 @@
*/
public void loadProject(final boolean executeByExplorer, final File explorerFile) {
managerError.clear();
+ progression("Chargement du projet", 0);
// -- on elimine les doublons potentiels des frames layouts --//
ui_.elimineDoublonNomsLayout();
-
+ ui_.setGlassPaneStop();
progression("Lecture du r\xE9pertoire", 10);
// -- etape 1 lecture du repertoire global ou du fichier param --//
if (!loadPersistDirectory(executeByExplorer, explorerFile)) {
return;
}
- ui_.setGlassPaneStop();
+
final String pathVariables = projet_.getAbsolutePath() + File.separator + REP_VAR;
try {
new File(pathVariables).mkdir();
@@ -1053,15 +1054,7 @@
// pas grave on continue
FuLog.debug("Le repertoire des variables existe deja");
}
- // -- etape 2 sauvegarde du fichier contenant tous les sources ouverts
- progression("Chargement du fichier descripteur de sources", 15);
- File file = new File(projet_.getAbsolutePath() + File.separator + setupProject);
- final HashMap<String, Object> parametres = new HashMap<String, Object>();
- if (!loadSource(file, parametres)) {
- managerError.addMessageError("Veuillez corriger les chemins des fichiers r\xE9sultats dans le fichier setup et r\xE9it\xE9rez l'op\xE9ration.");
- managerError.showDialog(ui_);
- return;
- }
+
// boolean containsVariables = containsVariables(pathVariables);
// boolean loadVar = true;
// if (containsVariables) {
@@ -1073,7 +1066,15 @@
public void run() {
try {
-
+ // -- etape 2 sauvegarde du fichier contenant tous les sources ouverts
+ progression("Chargement du fichier descripteur de sources", 15);
+ File file = new File(projet_.getAbsolutePath() + File.separator + setupProject);
+ final HashMap<String, Object> parametres = new HashMap<String, Object>();
+ if (!loadSource(file, parametres)) {
+ managerError.addMessageError("Veuillez corriger les chemins des fichiers r\xE9sultats dans le fichier setup et r\xE9it\xE9rez l'op\xE9ration.");
+ managerError.showDialog(ui_);
+ return;
+ }
// -- etape 6; lecture des variables --//
progression("Lecture variables", 20);
// if (loadVarFinal) {
@@ -1082,7 +1083,7 @@
// -- etape 3: sauvegarde du fichier de descriptions des layout
// --//
progression("Cr\xE9ation du descripteur de layout", 30);
- File file = new File(projet_.getAbsolutePath() + File.separator + INFOSCENE);
+ file = new File(projet_.getAbsolutePath() + File.separator + INFOSCENE);
final List<String> listeFichiers = loadDescriptorScenes(file);
// -- etape 4 chargement des ebliscene unitairement --//
progression("Cr\xE9ation des fichiers layout", 40);
Modified: trunk/soft/fudaa-prepro/ui/src/main/resources/org/fudaa/fudaa/tr/common/tr_en.fr_txt
===================================================================
--- trunk/soft/fudaa-prepro/ui/src/main/resources/org/fudaa/fudaa/tr/common/tr_en.fr_txt 2012-03-24 03:23:26 UTC (rev 7032)
+++ trunk/soft/fudaa-prepro/ui/src/main/resources/org/fudaa/fudaa/tr/common/tr_en.fr_txt 2012-03-25 19:53:06 UTC (rev 7033)
@@ -1,4 +1,5 @@
Le fichier r\xE9sultat utilis\xE9 actuellement=The current source used
+Chargement du projet=Project loading
Le projet contient des variables calcul\xE9es. Voulez-vous les charger ?=The project contained computed variables. Do you want to load them ?
Chargement des variables=Variables loading
Au moins un ouvrage doit \xEAtre cr\xE9\xE9=At least one structure must be created
This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site.
|