Author: bpoussin Date: 2008-09-01 08:37:01 +0000 (Mon, 01 Sep 2008) New Revision: 1325 Removed: trunk/isis-fish/src/java/fr/ifremer/isisfish/IsisConfig.java Modified: trunk/isis-fish/src/java/fr/ifremer/isisfish/IsisFish.java trunk/isis-fish/src/java/fr/ifremer/isisfish/IsisTray.java trunk/isis-fish/src/java/fr/ifremer/isisfish/actions/SimulationAction.java trunk/isis-fish/src/java/fr/ifremer/isisfish/datastore/AnalysePlanStorage.java trunk/isis-fish/src/java/fr/ifremer/isisfish/datastore/CodeSourceStorage.java trunk/isis-fish/src/java/fr/ifremer/isisfish/datastore/ExportStorage.java trunk/isis-fish/src/java/fr/ifremer/isisfish/datastore/FormuleStorage.java trunk/isis-fish/src/java/fr/ifremer/isisfish/datastore/JavaSourceStorage.java trunk/isis-fish/src/java/fr/ifremer/isisfish/datastore/RegionStorage.java trunk/isis-fish/src/java/fr/ifremer/isisfish/datastore/ScriptStorage.java trunk/isis-fish/src/java/fr/ifremer/isisfish/datastore/SimulationStorage.java trunk/isis-fish/src/java/fr/ifremer/isisfish/rule/Rule.java trunk/isis-fish/src/java/fr/ifremer/isisfish/simulator/AnalysePlanContext.java trunk/isis-fish/src/java/fr/ifremer/isisfish/simulator/launcher/InProcessSimulatorLauncher.java trunk/isis-fish/src/java/fr/ifremer/isisfish/simulator/launcher/SimulationJob.java trunk/isis-fish/src/java/fr/ifremer/isisfish/simulator/launcher/SimulationQueue.java trunk/isis-fish/src/java/fr/ifremer/isisfish/simulator/launcher/SimulationService.java trunk/isis-fish/src/java/fr/ifremer/isisfish/simulator/launcher/SimulationServiceListener.java trunk/isis-fish/src/java/fr/ifremer/isisfish/simulator/launcher/SimulationServiceTableModel.java trunk/isis-fish/src/java/fr/ifremer/isisfish/simulator/launcher/SubProcessSimulationLauncher.java trunk/isis-fish/src/java/fr/ifremer/isisfish/ui/simulator/Queue.java trunk/isis-fish/src/java/fr/ifremer/isisfish/ui/simulator/SimulatorAction.java Log: - correction des queues nouvelles implantations - debut de debuggade de subprocess Deleted: trunk/isis-fish/src/java/fr/ifremer/isisfish/IsisConfig.java =================================================================== --- trunk/isis-fish/src/java/fr/ifremer/isisfish/IsisConfig.java 2008-08-29 19:29:03 UTC (rev 1324) +++ trunk/isis-fish/src/java/fr/ifremer/isisfish/IsisConfig.java 2008-09-01 08:37:01 UTC (rev 1325) @@ -1,689 +0,0 @@ -/* *##% - * Copyright (C) 2002-2008 Code Lutin, Benjamin Poussin - * - * 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 fr.ifremer.isisfish; - -import static org.codelutin.i18n.I18nf._; - -import fr.ifremer.isisfish.actions.ExportAction; -import fr.ifremer.isisfish.actions.OtherAction; -import fr.ifremer.isisfish.actions.ImportAction; -import fr.ifremer.isisfish.actions.SimulationAction; -import fr.ifremer.isisfish.actions.VCSAction; -import fr.ifremer.isisfish.simulator.SimulationContext; -import fr.ifremer.isisfish.simulator.launcher.InProcessSimulatorLauncher; -import fr.ifremer.isisfish.simulator.launcher.SimulationService; -import fr.ifremer.isisfish.vcs.VCS; -import java.io.File; -import java.net.MalformedURLException; -import java.net.URL; -import java.net.URLClassLoader; -import java.text.SimpleDateFormat; -import java.util.ArrayList; -import java.util.Arrays; -import java.util.HashMap; -import java.util.List; -import java.util.Locale; -import java.util.Map; -import org.apache.commons.beanutils.ConvertUtils; -import org.apache.commons.lang.time.DurationFormatUtils; -import org.apache.commons.logging.Log; -import org.apache.commons.logging.LogFactory; -import org.codelutin.util.ApplicationConfig; -import org.codelutin.util.ArgumentsParserException; -import org.codelutin.util.StringUtil; -import org.codelutin.util.VersionNumber; - -/** - * - * @author poussin - * @version $Revision$ - * - * Last update: $Date$ - * by : $Author$ - */ -public class IsisConfig extends ApplicationConfig { - - /** to use log facility, just put in your code: log.info(\"...\"); */ - static private Log log = LogFactory.getLog(IsisConfig.class); - - /** la version du logiciel constitue de l.d.a.r - * <li>l: le numero de version du logiciel - * <li>d: le numero de version du schema de la base de donnees - * <li>a: le numero de version de l'api des scripts - * <li>r: le numero de version de de l'interface graphique ou autre modif mineur - * <p> - * lors de l'increment de l, d, a et r sont remis a 0 - * lors de l'increment de d, a et r sont remis a 0 - * lors de l'increment de a, r est remis a 0 - * <p> - * Un changement d'UI ne modifie jamais le numero de version de database - * Un changement de schema de base pour lequel on ne peut pas faire de - * migration de donnees demande automatiquement un changement de version - * d'application. - */ - protected final static VersionNumber version = new VersionNumber(3, 2, 0, 0); - protected final static VersionNumber databaseVersion = new VersionNumber( - version.getNumber(0), version.getNumber(1)); - protected final static VersionNumber apiVersion = new VersionNumber( - version.getNumber(0), version.getNumber(1), version.getNumber(2)); - - public static VersionNumber getVersionNumber() { - return version; - } - - /** - * le nombre global ex: 3.2.0.0 - * @return - */ - static public String getVersion() { - String result = version.toString(); - return result; - } - - /** - * La version de la base ex: 3.2 - * @return - */ - public static VersionNumber getDatabaseVersion() { - return databaseVersion; - } - - /** - * La version de l'api de programmation ex: 3.2.0 - * @return - */ - public static VersionNumber getApiVersion() { - return apiVersion; - } - - static final public String COPYRIGHT_TEXT = "Version " + getVersion() + " IFREMER-MAERHA © 2000-2008"; - static final public String CONFIG_FILENAME = "isis-config-" + version.getNumber(0); - - /** separateur de liste */ - static final public String SEP = ","; - static final public String REPORT_EMAIL = "isis-fish-bugreport at lists.labs.libre-entreprise.org"; - - protected transient File backupSessionDirectory = null; - protected long startingTime = System.nanoTime(); - - public IsisConfig() { - - for (Option o : Option.values()) { - setDefaultOption(o.key, o.defaultValue); - } - - for (Action a : Action.values()) { - for (String alias : a.aliases) { - addActionAlias(alias, a.action); - } - } - - } - - ////////////////////////////////////////////////// - // Methode d'acces aux options - ////////////////////////////////////////////////// - - /** - * Retourne le repertoire racine de toutes les donnees (script, simulation - * region, ...) - * @return - */ - public File getDatabaseDirectory() { - File result = getOptionAsFile(Option.DATABASE_DIRECTORY.key); - return result; - } - - /** - * retourne le repertoire ou sont stockes les scripts compiles - * @return - */ - public File getCompileDirectory() { - File result = getOptionAsFile(Option.COMPILATION_DIRECTORY.key); - if (!result.exists()) { - result.mkdirs(); - } - return result; - } - - /** - * Retourne l'objet Local a utilise pour la langue - * @return - */ - public Locale getLocale() { - String value = getOption(Option.LOCALE.key); - Locale result = (Locale)ConvertUtils.convert(value, Locale.class); - return result; - } - - /** - * Retourne l'encoding a utiliser pour les fichiers textes - * @return - */ - public String getEncoding() { - String result = getOption(Option.ENCODING.key); - return result; - } - - /** - * Retourne le serveur SMTP a utiliser pour l'envoie de mail - * @return - */ - public String getSmtpServer() { - String result = getOption(Option.SMTP_SERVER.key); - return result; - } - - /** - * Retourne le nom usuel de l'utilisateur - * @return - */ - public String getUserName() { - String result = getOption(Option.USER_NAME.key); - return result; - } - - /** - * Retourne l'email de l'utilisateur - * @return - */ - public String getUserMail() { - String result = getOption(Option.USER_MAIL.key); - return result; - } - - /** - * Retourne l'url du serveur de simulation - * @return - */ - public String getSimulatorServer() { - String result = getOption(Option.SIMULATOR_SERVER.key); - return result; - } - - /** - * Retourne le login pour acceder au serveur de simulation - * @return - */ - public String getSimulatorUsername() { - String result = getOption(Option.SIMULATOR_USER_NAME.key); - return result; - } - - /** - * Retourne le mot de passe pour acceder au serveur de simulation - * @return - */ - public String getSimulatorPassword() { - String result = getOption(Option.SIMULATOR_PASSWORD.key); - return result; - } - - public String getSimulatorClassfile() { - String result = getOption(Option.SIMULATOR_CLASSFILE.key); - return result; - } - - public void setSimulatorClassfile(String value) { - setOption(Option.SIMULATOR_CLASSFILE.key, value); - } - - /** - * Le type de simulation par defaut a utiliser (local, remote, ...) - * @return - */ - public boolean isSimulatorLocal() { - String value = getOption(Option.SIMULATOR_LAUNCHER.key); - boolean result = "local".equalsIgnoreCase(value); - return result; - } - -// public boolean isUseVCS() { -// String value = getOption(Option.VCS_TYPE.key); -// boolean result = !VCSNone.TYPE_NONE.equals(value); -// return result; -// } - - public boolean isLaunchUI() { - boolean result = getOptionAsBoolean(Option.LAUNCH_UI.key); - return result; - } - - public void setSimulatorLauncher(String value) { - setOption(Option.SIMULATOR_LAUNCHER.key, value); - } - -// public boolean isSimulationShowOnlyQueue() { -// Boolean result = getOptionAsBoolean(Option.SIMULATION_SHOW_ONLY_QUEUE.key); -// return result; -// } - - public boolean isSimulationShowOnlyError() { - Boolean result = getOptionAsBoolean(Option.SIMULATION_SHOW_ONLY_ERROR.key); - return result; - } - - public File getDefaultExportDirectory() { - File result = getOptionAsFile(Option.DEFAULT_EXPORT_DIRECTORY.key); - if (!result.exists()) { - result.mkdirs(); - } - return result; - } - - public void setDefaultExportDirectory(String value) { - setOption(Option.DEFAULT_EXPORT_DIRECTORY.key, value); - } - - public String getDefaultExportNames() { - String result = getOption(Option.DEFAULT_EXPORT_NAMES.key); - return result; - } - - public void setDefaultExportNames(List<String> exportNames) { - StringBuilder sb = new StringBuilder(); - for (String exportName : exportNames) { - sb.append(SEP).append(exportName); - } - String value = sb.toString().substring(1); - setOption(Option.DEFAULT_EXPORT_NAMES.key, value); - saveForUser(); - } - - /** - * @return la liste des noms d'exports par defaut sous forme de liste, - * a partir de la propriete {@link Option#DEFAULT_EXPORT_NAMES} - * ou null si ils n'ont jamais ete sauves par l'utilisateur. - * by user. - * @see Option#DEFAULT_EXPORT_NAMES - */ - public List<String> getDefaultExportNamesAsList() { - List<String> result = null; - String exportNamesList = getDefaultExportNames(); - if (exportNamesList != null) { - result = new ArrayList<String>(); - String[] exportNames = StringUtil.split(exportNamesList, ","); - result.addAll(Arrays.asList(exportNames)); - } - return result; - } - - public String getDefaultMapFilename() { - String result = getOption(Option.DEFAULT_MAP_FILENAME.key); - return result; - } - - public String getDefaultResultNames() { - String result = getOption(Option.DEFAULT_RESULT_NAMES.key); - return result; - } - - public void setDefaultResultNames(List<String> resultNames) { - StringBuilder sb = new StringBuilder(); - for (String resultName : resultNames) { - sb.append(SEP).append(resultName); - } - String value = sb.toString().substring(1); - setOption(Option.DEFAULT_RESULT_NAMES.key, value); - saveForUser(); - } - - /** - * @return les resultats par defaut d'une simulation sous forme de liste - * a partir de la propriete {@link Option#DEFAULT_RESULT_NAMES} - * @see Option#DEFAULT_RESULT_NAMES - */ - public List<String> getDefaultResultNamesAsList() { - List<String> result = null; - String resultNamesList = getDefaultResultNames(); - if (resultNamesList != null) { - result = new ArrayList<String>(); - String[] resultNames = StringUtil.split(resultNamesList, ","); - result.addAll(Arrays.asList(resultNames)); - } - return result; - } - - public String getDefaultTagValue() { - String result = getOption(Option.DEFAULT_TAG_VALUE.key); - return result; - } - - public void setDefaultTagValues(Map<String, String> tagValues) { - StringBuilder sb = new StringBuilder(); - for (Map.Entry<String, String> entry : tagValues.entrySet()) { - sb.append(SEP).append('"').append(entry.getKey()).append("\":\"").append(entry.getValue()).append('"'); - } - String value = sb.toString().substring(1); - setOption(Option.DEFAULT_TAG_VALUE.key, value); - saveForUser(); - } - - - - /** - * @return le dictionnaire des tags par defaut d'une simulation a partir - * de la propriete {@link Option#DEFAULT_TAG_VALUE} - * @see Option#DEFAULT_TAG_VALUE_PROPERTY_KEY - */ - public Map<String, String> getDefaultTagValueAsMap() { - Map<String, String> result = new HashMap<String, String>(); - String tagValuesList = getDefaultTagValue(); - if (tagValuesList != null) { - String[] tagValues = StringUtil.split(tagValuesList, ","); - for (String tagValue : tagValues) { - String[] tagAndValue = StringUtil.split(tagValue, ":"); - - String tag = tagAndValue[0].trim(); - tag = tag.substring(1, tag.length() - 1); // remove "..." - - String value = tagAndValue[1].trim(); - value = value.substring(1, value.length() - 1); // remove "..." - - result.put(tag, value); - } - } - return result; - } - - public String getJavadocURL() { - String result = getOption(Option.JAVADOC_URL.key); - return result; - } - - public File getBackupDirectory() { - File result = getOptionAsFile(Option.BACKUP_DIRECTORY.key); - return result; - } - - public long getStartingTime() { - return startingTime; - } - - public String getElapsedTimeAsString() { - long diff = System.nanoTime() - getStartingTime(); - String result = DurationFormatUtils.formatDuration(diff / 1000000, "s'.'S"); - return result; - } - - public File getBackupSessionDirectory() { - if (backupSessionDirectory == null) { - // le timestamp est en nano (on le veut en ms) - long time = getStartingTime() / 1000; - // creation de l'unique répertoire de backup pour la session - String path = new SimpleDateFormat("yyyy-MM-dd-HH-mm-ss").format(new java.util.Date(time)); - backupSessionDirectory = new File(getBackupDirectory(), path); - if (!backupSessionDirectory.exists()) { - backupSessionDirectory.mkdirs(); - } - } - return backupSessionDirectory; - } - - /** - * Retourne un class loader contenant le repertoire de compilation - * Il permet alors de charger des classes qui viennent d'etre compilees - * dans isis - * If current thread is in simulation then return specific simulation - * compilation directory, else default compilation directory - * - * @return the class loader adequate - */ - public ClassLoader getScriptClassLoader() { - SimulationContext simContext = SimulationContext.get(); - ClassLoader result = simContext.getClassLoader(); - if (result == null) { - // on est pas dans une simulation, il faut retourner un nouveau - // a chaque fois. on force la creation d'un nouveau classloader - // a chaque fois pour - // que l'ancienne class compiler et charg<E9> ne soit pas presente - File f = getCompileDirectory(); - try { - URL[] cp = new URL[]{f.toURI().toURL()}; - // il faut prendre le ClassLoader du thread courant comme parent - // car pour les simulations il a ete modifi<E9>, et il faut - // que les classes de script soit recherch<E9> dedans avant - // la recherche dans le getCompileDirectory(). - // ce qui est le cas avec les URLClassLoader - ClassLoader parent = Thread.currentThread().getContextClassLoader(); - result = new URLClassLoader(cp, parent); - } catch (MalformedURLException eee) { - throw new IsisFishRuntimeException(_("isisfish.error.load.classloader", f, eee.getMessage()), eee); - } - } - return result; - } - - /** - * Surcharge pour la migration des options de config qui ont change de nom - * <p> - * TODO: lors du passage en version 4.0 on pourrait supprimer cette methode - * - * @param args - * @throws org.codelutin.util.ArgumentsParserException - */ - @Override - public void parse(String[] args) throws ArgumentsParserException { - super.parse(args); - // dans la version precedente (3.1) seul le fichier user existe, il est - // donc le seul a devoir etre modifie - boolean mustSave = false; - String[] keys = new String[]{ - "compileDirectory", Option.COMPILATION_DIRECTORY.key, - "defaultBackupDirectory", Option.BACKUP_DIRECTORY.key, - "defaultExportDirectory", Option.DEFAULT_EXPORT_DIRECTORY.key, - "defaultExportNames", Option.DEFAULT_EXPORT_NAMES.key, - "defaultMapFile", Option.DEFAULT_MAP_FILENAME.key, - "defaultResultNames", Option.DEFAULT_RESULT_NAMES.key, - "defaultSimulator", Option.SIMULATOR_CLASSFILE.key, - "defaultTagValue", Option.DEFAULT_TAG_VALUE.key, - "javadocURL", Option.JAVADOC_URL.key, - "locale", Option.LOCALE.key, - "login", Option.SIMULATOR_USER_NAME.key, - "password", Option.SIMULATOR_PASSWORD.key, - "simulationServer", Option.SIMULATOR_SERVER.key, - "simulationShowOnlyError", Option.SIMULATION_SHOW_ONLY_ERROR.key, - "simulationShowOnlyQueue", null, // Option.SIMULATION_SHOW_ONLY_QUEUE.key, - "smtpServer", Option.SMTP_SERVER.key, - "userMail", Option.USER_MAIL.key, - "userName", Option.USER_NAME.key, - "vcs.keyFile", Option.VCS_SSH_KEY_FILE.key, - "vcs.localDatabasePath", Option.DATABASE_DIRECTORY.key, - // on supprime car non compatible, les valeurs par defaut sont tres bien - "localSimulator", null, - "vcs.databaseVersion", null, - "vcs.hostName", null, - "vcs.noPassPhrase", null, - "vcs.remoteDatabase", null, - "vcs.remotePath", null, - "vcs.type", null, - "vcs.typeRepo", null, - "vcs.useSshConnexion", null, - "vcs.userName", null, - "version", null, - "projectName", null, - "simulationReportMail", null, - - }; - - log.info("Check configuration change"); - for(int i=0; i<keys.length;) { - String oldKey = keys[i++]; - String newKey = keys[i++]; - if (!oldKey.equals(newKey)) { - String value = getOption(oldKey); - if (value != null) { - mustSave = true; - // quoi qu'il arrive on enleve l'ancienne cle - homefile.remove(oldKey); - if (newKey != null) { - setOption(newKey, value); - } - } - } - } - if (mustSave) { - saveForUser(); - log.info("Config file migration done"); - try { - save(new File("/tmp/test.properties"), true); - } catch(Exception eee ){ - eee.printStackTrace(); - } - } - if (log.isDebugEnabled()) { - printConfig(); - } - } - - ////////////////////////////////////////////////// - // Toutes les options disponibles - ////////////////////////////////////////////////// - - static public enum Option { - - COMPILATION_DIRECTORY("compilation.directory", _("isisfish.config.main.compileDirectory.description"), getUserHome() + File.separator + "isis-build"), - CONFIG_FILE(CONFIG_FILE_NAME, _("isisfish.config.main.configFileName.description"), CONFIG_FILENAME), - BACKUP_DIRECTORY("backup.directory", _("isisfish.config.main.defaultBackupDirectory.description"), getUserHome() + File.separator + "isis-backup"), - - DEFAULT_EXPORT_DIRECTORY("default.export.directory", _("isisfish.config.main.defaultExportDirectory.description"), getUserHome() + File.separator + "isis-export"), - DEFAULT_EXPORT_NAMES("default.export.names", _("isisfish.config.main.defaultExportNames.description"), ""), - DEFAULT_RESULT_NAMES("default.result.names", _("isisfish.config.main.defaultResultNames.description"), ""), - DEFAULT_MAP_FILENAME("default.map.filename", _("isisfish.config.main.defaultMapFile.description"), "maps/vmap_area_thin"), - DEFAULT_TAG_VALUE("default.tagvalue", _("isisfish.config.main.defaultTagValue.description"), ""), - ENCODING("encoding", _("isisfish.config.main.encoding.description"), "UTF-8"), - JAVADOC_URL("javadoc.url", _("isisfish.config.main.javadocURL.description"), "http://isis-fish.labs.libre-entreprise.org/apidocs/"), - - SIMULATOR_CLASSFILE("simulator.classfile", _("isisfish.config.main.defaultSimulator.description"), "DefaultSimulator.java"), - /** prevu pour l'architecture de lancement en plugin: local, isis-server, caparmor, ... */ - SIMULATOR_LAUNCHER(SimulationService.SIMULATION_LAUNCHER + ".localDefault", _("isisfish.config.main.localSimulator.description"), InProcessSimulatorLauncher.class.getName()), - - SIMULATOR_SERVER("simulation.server", _("isisfish.config.main.simulationServer.description"), "http://simulateur.ifremer.fr:9090"), - /** le login a utiliser pour les launcher distant, le type du launcher est ajouter a la cle (car 1 login par launcher) */ - SIMULATOR_USER_NAME("simulator.username", _("isisfish.config.main.login.description"), "anonymous"), - SIMULATOR_PASSWORD("simulator.password", _("isisfish.config.main.password.description"), "guest"), - - LOCALE("locale", _("isisfish.config.main.locale.description"), "fr_FR"), -// REGION_MAP("regionMap", _("isisfish.config.main.regionMap.description"), "maps"), -// RESULT_EXPORT("resultExport", String.class, 15, n_("isisfish.config.main.resultExport.description"), "resultExports"), - SIMULATION_SHOW_ONLY_ERROR("simulationShowOnlyError", _("isisfish.config.main.simulationShowOnlyError.description"), "false"), -// SIMULATION_SHOW_ONLY_QUEUE("simulationShowOnlyQueue", _("isisfish.config.main.simulationShowOnlyQueue.description"), "true"), - - // if false no graphical interface - LAUNCH_UI("launch.ui", _("isisfish.config.main.launchUI.description"), "true"), - - DATABASE_DIRECTORY("database.directory", _("isisfish.config.vcs.localDatabasePath.description"), getUserHome() + File.separator + "isis-database-3"), - - SSH_KEY_FILE("ssh.key.file", _("isisfish.config.vcs.keyFile.description"), getUserHome() + File.separator + ".ssh" + File.separator + "isis_rsa"), - SSH_PASSPHRASE_ENABLED("ssh.passphrase.enabled", _("isisfish.config.vcs.noPassPhrase.description"), "false"), - SSH_PASSPHRASE("ssh.passphrase", _("isisfish.config.vcs.passphrase.description"), ""), - - // can be None, CVS or SVN. only None or SVN work - VCS_TYPE(VCS.VCS_TYPE, _("isisfish.config.vcs.type.description"), VCS.TYPE_SVN), - // depend of VCS_TYPE, for SVN can be svn, svn+ssh, http or file - VCS_PROTOCOLE(VCS.VCS_PROTOCOLE, _("isisfish.config.vcs.useSshConnexion.description"), "svn"), - VCS_SSH_KEY_FILE(VCS.VCS_SSH_KEY_FILE, _("isisfish.config.vcs.keyFile.description"), getUserHome() + File.separator + ".ssh" + File.separator + "isis_rsa"), - // user login to access vcs - VCS_USER_NAME(VCS.VCS_USER_NAME, _("isisfish.config.vcs.userName.description"), ""), - VCS_USER_PASSWORD(VCS.VCS_USER_PASSWORD, _("isisfish.config.vcs.userPassword.description"), ""), - VCS_HOST_NAME(VCS.VCS_HOST_NAME, _("isisfish.config.vcs.hostName.description"), "labs.libre-entreprise.org"), - VCS_PATH(VCS.VCS_PATH, _("isisfish.config.vcs.remotePath.description"), "/svnroot/isis-fish-data"), -// VCS_TAG(VCS.VCS_TAG, _("isisfish.config.vcs.remoteDatabase.description"), "/trunk"), -// TYPE_REPO_PROPERTY_KEY = newConfigPropertyKey("typeRepo", VCSTypeRepo.class, 9, n_("isisfish.config.vcs.typeRepo.description"), "TAG"), -// PROJECT_NAME_PROPERTY_KEY = newConfigPropertyKey("projectName", String.class, 11, n_("isisfish.config.main.projectName.description"), "Isis-Fish"), - - USER_NAME("user.name", _("isisfish.config.main.userName.description"), System.getProperty("user.name")), - SMTP_SERVER("smtpServer", _("isisfish.config.main.smtpServer.description"), "smtp"), - USER_MAIL("userMail", _("isisfish.config.main.userMail.description"), USER_NAME.key + "@" + VCS_HOST_NAME.key), - - ; - - public final String key; - public final String description; - public final String defaultValue; - - private Option(String key, String description, String defaultValue) { - this.key = key; - this.description = description; - this.defaultValue = defaultValue; - } - } - - ////////////////////////////////////////////////// - // Toutes les actions disponibles - ////////////////////////////////////////////////// - - static public enum Step { - AfterInit, AfterInitVCS, AfterUI, BeforeExit - } - - static public enum Action { - HELP(_("Show help"), OtherAction.class.getName() + "#help", "-h", "--help"), - - IMPORT_ANALYSE_PLAN(_(""), ImportAction.class.getName() + "#importAnalysePlan", "--importAnalysePlan"), - IMPORT_EXPORT(_(""), ImportAction.class.getName() + "#importExport", "--importExport"), - IMPORT_RULE(_(""), ImportAction.class.getName() + "#importRule", "--importRule"), - IMPORT_SCRIPT(_("Import one java file script source"), ImportAction.class.getName() + "#importScript", "--importScript"), - IMPORT_SIMULATOR(_(""), ImportAction.class.getName() + "#importSimulator", "--importSimulator"), - IMPORT_FORMULA(_(""), ImportAction.class.getName() + "#importFormula", "--importFormula"), - IMPORT_REGION(_(""), ImportAction.class.getName() + "#importRegion", "--importRegion"), - IMPORT_REGION_AND_RENAME(_(""), ImportAction.class.getName() + "#importRegionAndRename", "--importRegionAndRename"), - IMPORT_SIMULATION(_(""), ImportAction.class.getName() + "#importSimulation", "--importSimulation"), - IMPORT_SCRIPT_MODULE(_("Import zipped file containing all scripts directory structure"), ImportAction.class.getName() + "#importScriptModule", "--importScriptModule"), - - LIST_ANALYSE_PLAN(_(""), ExportAction.class.getName() + "#listAnalysePlan", "--listAnalysePlan"), - LIST_EXPORT(_(""), ExportAction.class.getName() + "#listExport", "--listExport"), - LIST_RULE(_(""), ExportAction.class.getName() + "#listRule", "--listRule"), - LIST_SCRIPT(_(""), ExportAction.class.getName() + "#listScript", "--listScript"), - LIST_SIMULATOR(_(""), ExportAction.class.getName() + "#listSimulator", "--listSimulator"), - LIST_FORMULA(_(""), ExportAction.class.getName() + "#listFormula", "--listFormula"), - LIST_REGION(_(""), ExportAction.class.getName() + "#listRegion", "--listRegion"), - LIST_SIMULATION(_(""), ExportAction.class.getName() + "#listSimulation", "--listSimulation"), - - EXPORT_ANALYSE_PLAN(_(""), ExportAction.class.getName() + "#exportAnalysePlan", "--exportAnalysePlan"), - EXPORT_EXPORT(_(""), ExportAction.class.getName() + "#exportExport", "--exportExport"), - EXPORT_RULE(_(""), ExportAction.class.getName() + "#exportRule", "--exportRule"), - EXPORT_SCRIPT(_(""), ExportAction.class.getName() + "#exportScript", "--exportScript"), - EXPORT_SIMULATOR(_(""), ExportAction.class.getName() + "#exportSimulator", "--exportSimulator"), - EXPORT_FORMULA(_(""), ExportAction.class.getName() + "#exportFormula", "--exportFormula"), - EXPORT_REGION(_(""), ExportAction.class.getName() + "#exportRegion", "--exportRegion"), - EXPORT_SIMULATION(_(""), ExportAction.class.getName() + "#exportSimulation", "--exportSimulation"), - - VCS_SSH_CREATE_KEY(_(""), VCSAction.class.getName() + "#sshCreateKey", "--sshCreateKey"), - VCS_UPDATE(_(""), VCSAction.class.getName() + "#vcsUpdate", "--vcsUpdate"), - VCS_ADD(_(""), VCSAction.class.getName() + "#vcsAdd", "--vcsAdd"), - VCS_REMOVE(_(""), VCSAction.class.getName() + "#vcsRemove", "--vcsRemove"), - VCS_COMMIT(_(""), VCSAction.class.getName() + "#vcsCommit", "--vcsCommit"), - - SIMULATE_WITH_REGION(_(""), SimulationAction.class.getName() + "#simulateWithRegion", "--simulateWithRegion"), - SIMULATE_WITH_SIMULATION(_(""), SimulationAction.class.getName() + "#simulateWithSimulation", "--simulateWithSimulation"), - ; - - public String description; - public String action; - public String[] aliases; - - private Action(String description, String action, String ... aliases) { - this.description = description; - this.action = action; - this.aliases = aliases; - } - } -} Modified: trunk/isis-fish/src/java/fr/ifremer/isisfish/IsisFish.java =================================================================== --- trunk/isis-fish/src/java/fr/ifremer/isisfish/IsisFish.java 2008-08-29 19:29:03 UTC (rev 1324) +++ trunk/isis-fish/src/java/fr/ifremer/isisfish/IsisFish.java 2008-09-01 08:37:01 UTC (rev 1325) @@ -258,119 +258,123 @@ * l'utilisateur */ static public void initVCS() throws VCSException { - // init vcs - vcs = VCSFactory.createVCS(config); - VCSActionAsker asker = new VCSActionAsker(); - vcs.addVetoableActionListener(asker); + if (config.isLaunchUI()) { + // FIXME ajouter une option vcs.init - // Si le repo local exist mais n'est pas du bon type, on renome ce repertoire - File local = config.getDatabaseDirectory(); - log.info(_("Check state of local repository: %s", local)); + // init vcs + vcs = VCSFactory.createVCS(config); + VCSActionAsker asker = new VCSActionAsker(); + vcs.addVetoableActionListener(asker); - if (local.exists()) { - if(!vcs.isValidLocalRepository()) { - log.info(_("Local repository exists but it's not valide for current vcs: %s", config.getOption(VCS.VCS_TYPE))); - if (ask(_("Your database repository: %s\n don't use correct" + - " protocol.\nDo you want to make backup of your database" + - " and take the correct one ?", local))) { - File localBackup = new File(local.getParentFile(), - local.getName() + "-" + - new SimpleDateFormat("yyyy-mm-dd-HH-mm-ss").format(new java.util.Date())); - log.info(_("Rename data directory to %s", localBackup)); - if (!local.renameTo(localBackup)) { - throw new IsisFishRuntimeException( - "Can't rename local repository that don't use svn"); + // Si le repo local exist mais n'est pas du bon type, on renome ce repertoire + File local = config.getDatabaseDirectory(); + log.info(_("Check state of local repository: %s", local)); + + if (local.exists()) { + if (!vcs.isValidLocalRepository()) { + log.info(_("Local repository exists but it's not valide for current vcs: %s", config.getOption(VCS.VCS_TYPE))); + if (ask(_("Your database repository: %s\n don't use correct" + + " protocol.\nDo you want to make backup of your database" + + " and take the correct one ?", local))) { + File localBackup = new File(local.getParentFile(), + local.getName() + "-" + + new SimpleDateFormat("yyyy-mm-dd-HH-mm-ss").format(new java.util.Date())); + log.info(_("Rename data directory to %s", localBackup)); + if (!local.renameTo(localBackup)) { + throw new IsisFishRuntimeException( + "Can't rename local repository that don't use svn"); + } + } else { + switchToNoneVCS(); } - } else { - switchToNoneVCS(); } } - } - - // Si le repo local n'existe pas on fait un check out complet - if (!local.exists()) { - log.info(_("Local repository don't exist")); - if (!vcs.isConnected()) { - UserLog.warn(_( - "No database version %s found and can't get it.\n" + - "You must go to ISIS-Fish web site and download database manualy.", - IsisConfig.getDatabaseVersion())); - } else { - // Si on utilise pas le bon tag on change de tag - VersionNumber tag = IsisConfig.getApiVersion(); - if (!vcs.isTag(tag)) { - // pas de tag pour cette version, on checkout le trunk - tag = null; - } - // initialise le repo local - vcs.checkout(tag, false); + // Si le repo local n'existe pas on fait un check out complet + if (!local.exists()) { + log.info(_("Local repository don't exist")); + if (!vcs.isConnected()) { + UserLog.warn(_( + "No database version %s found and can't get it.\n" + + "You must go to ISIS-Fish web site and download database manualy.", + IsisConfig.getDatabaseVersion())); + } else { + // Si on utilise pas le bon tag on change de tag + VersionNumber tag = IsisConfig.getApiVersion(); + if (!vcs.isTag(tag)) { + // pas de tag pour cette version, on checkout le trunk + tag = null; + } - // ajoute les repertoires qu'il faut - AnalysePlanStorage.checkout(); - ExportStorage.checkout(); - FormuleStorage.checkout(); - RuleStorage.checkout(); - ScriptStorage.checkout(); - SimulatorStorage.checkout(); + // initialise le repo local + vcs.checkout(tag, false); - // on ne prend pas toutes les simu ni toutes les regions - vcs.update(new File(local, SimulationStorage.SIMULATION_PATH), false); - vcs.update(new File(local, RegionStorage.REGION_PATH), false); - try { - RegionStorage.checkout("DemoRegion"); - } catch (TopiaException eee) { - log.warn("Can't checkout DemoRegion", eee); + // ajoute les repertoires qu'il faut + AnalysePlanStorage.checkout(); + ExportStorage.checkout(); + FormuleStorage.checkout(); + RuleStorage.checkout(); + ScriptStorage.checkout(); + SimulatorStorage.checkout(); + + // on ne prend pas toutes les simu ni toutes les regions + vcs.update(new File(local, SimulationStorage.SIMULATION_PATH), false); + vcs.update(new File(local, RegionStorage.REGION_PATH), false); + try { + RegionStorage.checkout("DemoRegion"); + } catch (TopiaException eee) { + log.warn("Can't checkout DemoRegion", eee); + } } } - } - - if (!local.exists()) { - // arrive ici le repo devrait exister - throw new IsisFishRuntimeException("Can't find local repository"); - } - // on s'arrete la si on est pas connecte - if (vcs.isConnected()) { - - // check protocol, user, host - vcs.checkProtocol(); + if (!local.exists()) { + // arrive ici le repo devrait exister + throw new IsisFishRuntimeException("Can't find local repository"); + } - // Suivant la version du logiciel et les versions de base disponible - // il est possiblement obligatoire de ne plus etre sur le trunk, ou - // de migrer sur un autre tag + // on s'arrete la si on est pas connecte + if (vcs.isConnected()) { - // si on est sur une branche, on est en developpement, on ne fait donc rien - if (vcs.getTag().startsWith("branches")) { - log.info(_("Use branches, switch not needed")); - } else { - // Si on utilise pas le bon tag on change de tag - VersionNumber tag = IsisConfig.getApiVersion(); - if (vcs.isTag(tag)) { - // un tag dispo, on a donc pas la derniere version, on switch - vcs.setTag(tag); + // check protocol, user, host + vcs.checkProtocol(); + + // Suivant la version du logiciel et les versions de base disponible + // il est possiblement obligatoire de ne plus etre sur le trunk, ou + // de migrer sur un autre tag + + // si on est sur une branche, on est en developpement, on ne fait donc rien + if (vcs.getTag().startsWith("branches")) { + log.info(_("Use branches, switch not needed")); } else { - // pas de tag dispo on retourne sur le trunk - vcs.setTag(null); + // Si on utilise pas le bon tag on change de tag + VersionNumber tag = IsisConfig.getApiVersion(); + if (vcs.isTag(tag)) { + // un tag dispo, on a donc pas la derniere version, on switch + vcs.setTag(tag); + } else { + // pas de tag dispo on retourne sur le trunk + vcs.setTag(null); + } } - } - // check file status - vcs.checkFileStatus(); + // check file status + vcs.checkFileStatus(); + } + // fin de l'init on supprime le vetoable du vcs + vcs.remoteVetoableActionListener(asker); } - // fin de l'init on supprime le vetoable du vcs - vcs.remoteVetoableActionListener(asker); } /** * initialise et lance l'interface graphique si elle est demandee */ static public void launchUI() { - // init simulater manager - SimulationService.getService(); + if (config.isLaunchUI()) { + // init simulater manager + SimulationService.getService(); - if (config.isLaunchUI()) { // init IsisTray IsisTray.getInstance(); // init context (will luanch remote server thread) Modified: trunk/isis-fish/src/java/fr/ifremer/isisfish/IsisTray.java =================================================================== --- trunk/isis-fish/src/java/fr/ifremer/isisfish/IsisTray.java 2008-08-29 19:29:03 UTC (rev 1324) +++ trunk/isis-fish/src/java/fr/ifremer/isisfish/IsisTray.java 2008-09-01 08:37:01 UTC (rev 1325) @@ -103,7 +103,7 @@ /* (non-Javadoc) * @see fr.ifremer.isisfish.simulator.SimulationQueueListener#simulationStart(fr.ifremer.isisfish.simulator.SimulationQueueEvent) */ - public void simulationStart(SimulationJob job) { + public void simulationStart(SimulationService simService, SimulationJob job) { SimulationControl control = job.getItem().getControl(); control.addPropertyChangeListener(this); getInstance().setToolTip(_(SIMULATION_TEXT, control.getId(), control.getProgress(), control.getProgressMax())); @@ -112,12 +112,17 @@ /* (non-Javadoc) * @see fr.ifremer.isisfish.simulator.SimulationQueueListener#simulationStop(fr.ifremer.isisfish.simulator.SimulationQueueEvent) */ - public void simulationStop(SimulationJob job) { + public void simulationStop(SimulationService simService, SimulationJob job) { SimulationControl control = job.getItem().getControl(); control.removePropertyChangeListener(this); getInstance().setToolTip(_(NO_SIMULATION_TEXT)); getInstance().setImage(TRAY_IMAGE_STOP); } + + public void clearJobDone(SimulationService simService) { + // nothing to do + } + /* (non-Javadoc) * @see java.beans.PropertyChangeListener#propertyChange(java.beans.PropertyChangeEvent) */ Modified: trunk/isis-fish/src/java/fr/ifremer/isisfish/actions/SimulationAction.java =================================================================== --- trunk/isis-fish/src/java/fr/ifremer/isisfish/actions/SimulationAction.java 2008-08-29 19:29:03 UTC (rev 1324) +++ trunk/isis-fish/src/java/fr/ifremer/isisfish/actions/SimulationAction.java 2008-09-01 08:37:01 UTC (rev 1325) @@ -22,6 +22,7 @@ import static org.codelutin.i18n.I18nf._; import fr.ifremer.isisfish.IsisConfig; +import fr.ifremer.isisfish.IsisFish; import fr.ifremer.isisfish.datastore.RegionStorage; import fr.ifremer.isisfish.datastore.SimulationStorage; import fr.ifremer.isisfish.simulator.SimulationControl; @@ -76,7 +77,6 @@ } SimulationService.getService().submit(simulId, params, null, 0); - SimulationService.getService().getSimulationLaunchers(); } /** @@ -88,7 +88,7 @@ public static void simulateWithSimulation(String simulId, File simulationZip) throws Exception { log.info("id:" + simulId + ", zip:" + simulationZip); - String name = simulId + " " + new SimpleDateFormat("yyyy-MM-dd-HH-mm").format(new Date()); + String name = simulId; // ne pas mettre la date, car le sub process la met deja + " " + new SimpleDateFormat("yyyy-MM-dd-HH-mm").format(new Date()); SimulationControl control = new SimulationControl(name); // lancement de la simulation @@ -96,6 +96,8 @@ SimulationStorage simulation = launcher.simulate(null, control, simulationZip); simulation.getStorage().closeContext(); + // FIXME integrer ca dans le process normal d'init + IsisFish.quit(); } } Modified: trunk/isis-fish/src/java/fr/ifremer/isisfish/datastore/AnalysePlanStorage.java =================================================================== --- trunk/isis-fish/src/java/fr/ifremer/isisfish/datastore/AnalysePlanStorage.java 2008-08-29 19:29:03 UTC (rev 1324) +++ trunk/isis-fish/src/java/fr/ifremer/isisfish/datastore/AnalysePlanStorage.java 2008-09-01 08:37:01 UTC (rev 1325) @@ -77,9 +77,9 @@ /** * Contruit un nouveau AnalysePlan storage * + * @param rootSrc repertoire root de stockage des plans * @param directory le repertoire ou devrait se trouver le plan * @param name le nom du plan - * @param rootSrc TODO */ protected AnalysePlanStorage(File rootSrc, File directory, String name) { super(rootSrc, directory, name); @@ -95,7 +95,7 @@ /** * Retourne le nom de toutes les plans existantes * - * @return TODO + * @return les noms de tous les plans existant en local */ static public List<String> getAnalysePlanNames() { File dir = getAnalysePlanDirectory(); @@ -122,8 +122,8 @@ /** * Retourne une nouvelle instance de la regle. Compile le fichier si besoin * - * @return TODO - * @throws IsisFishException TODO + * @return retourne une nouvelle instance du plan + * @throws IsisFishException s'il y a un probleme d'instanciation */ public AnalysePlan getNewAnalysePlanInstance() throws IsisFishException { Object result = getNewInstance(); @@ -174,8 +174,8 @@ * Recherche par introspection tous les parametres de la classe * commencant par param_ * - * @param plan TODO - * @return TODO + * @param plan le plan dont on souhaite les infos de parametre + * @return retourne le nom et le type des parametres du plan */ static public Map<String, Class> getParameterNames(AnalysePlan plan) { Map<String, Class> result = new LinkedHashMap<String, Class>(); @@ -192,9 +192,9 @@ * Donne la valeur d'un parametre par introspection * * @param name le nom du parametre - * @param plan TODO + * @param plan le plan dont on souhaite la valeur du parametre * @return la valeur courante du parametre - * @throws IsisFishException TODO + * @throws IsisFishException s'il y a un probleme pour recuperer la valeur */ static public Object getParameterValue(AnalysePlan plan, String name) throws IsisFishException { if (plan == null || name == null || "".equals(name)) { @@ -216,8 +216,8 @@ * * @param name le nom de l'attribut * @param value la valeur de l'attribut - * @param plan TODO - * @throws IsisFishException TODO + * @param plan le plan dont on souhaite modifier la valeur de parametre + * @throws IsisFishException s'il y a un probleme */ static public void setParameterValue(AnalysePlan plan, String name, Object value) throws IsisFishException { try { @@ -237,9 +237,9 @@ * Recupere les parametres et leur valeur pour les retourner sous forme * de chaine. Pour pouvoir par exemple les afficher a l'utilisateur * - * @param plan TODO - * @return TODO - * @throws IsisFishException TODO + * @param plan le plan dont on souhaite la valeur du parametre en string + * @return la valeur sous forme de string + * @throws IsisFishException */ public static String getParamAsString(AnalysePlan plan) throws IsisFishException { StringBuffer result = new StringBuffer(); @@ -289,7 +289,6 @@ * * @return liste de noms de regions * @throws org.codelutin.vcs.VCSException - * TODO */ static public List<String> getNewRemoteAnalysePlanNames() throws VCSException { List<String> result = getRemoteAnalysePlanNames(); Modified: trunk/isis-fish/src/java/fr/ifremer/isisfish/datastore/CodeSourceStorage.java =================================================================== --- trunk/isis-fish/src/java/fr/ifremer/isisfish/datastore/CodeSourceStorage.java 2008-08-29 19:29:03 UTC (rev 1324) +++ trunk/isis-fish/src/java/fr/ifremer/isisfish/datastore/CodeSourceStorage.java 2008-09-01 08:37:01 UTC (rev 1325) @@ -115,7 +115,7 @@ * taille que le precedent. Pour reellement forcer la relecture on peut * utiliser la methode {@link #reload()}} * - * @return TODO + * @return le contenu du fichier */ public String getContent() { if (content == null @@ -138,7 +138,7 @@ /** * @param content The content to set. - * @throws IOException TODO + * @throws IOException */ public void setContent(String content) throws IOException { this.content = content; Modified: trunk/isis-fish/src/java/fr/ifremer/isisfish/datastore/ExportStorage.java =================================================================== --- trunk/isis-fish/src/java/fr/ifremer/isisfish/datastore/ExportStorage.java 2008-08-29 19:29:03 UTC (rev 1324) +++ trunk/isis-fish/src/java/fr/ifremer/isisfish/datastore/ExportStorage.java 2008-09-01 08:37:01 UTC (rev 1325) @@ -70,9 +70,9 @@ /** * Constructeur * - * @param rootSrc TODO - * @param directory TODO - * @param name TODO + * @param rootSrc le repertoire root de stockage des exports + * @param directory le repertoire de l'export + * @param name le nom de l'export */ protected ExportStorage(File rootSrc, File directory, String name) { super(rootSrc, directory, name); @@ -88,8 +88,8 @@ /** * Retourne une nouvelle instance de la regle. Compile le fichier si besoin * - * @return TODO - * @throws IsisFishException TODO + * @return une nouvelle instance de la classe d'export + * @throws IsisFishException */ public Export getNewExportInstance() throws IsisFishException { Object result = getNewInstance(); Modified: trunk/isis-fish/src/java/fr/ifremer/isisfish/datastore/FormuleStorage.java =================================================================== --- trunk/isis-fish/src/java/fr/ifremer/isisfish/datastore/FormuleStorage.java 2008-08-29 19:29:03 UTC (rev 1324) +++ trunk/isis-fish/src/java/fr/ifremer/isisfish/datastore/FormuleStorage.java 2008-09-01 08:37:01 UTC (rev 1325) @@ -70,11 +70,11 @@ protected String category = null; /** - * @param rootSrc TODO - * @param directory TODO - * @param category TODO - * @param name TODO - * @param extension TODO + * @param rootSrc le repertoire root de stockage des formules + * @param directory le repertoire des formules + * @param category la category de la formule + * @param name le nom de la formule + * @param extension l'extension a utiliser ".java" */ public FormuleStorage(File rootSrc, File directory, String category, String name, String extension) { super(rootSrc, new File(directory, category), name, "." + extension); @@ -99,8 +99,8 @@ /** * Retourne toutes les formules sauvegardees * - * @param category TODO - * @return TODO + * @param category la categorie des formules recherchees + * @return la liste de formule de la category */ static public List<FormuleStorage> getFormules(String category) { List<FormuleStorage> result = new ArrayList<FormuleStorage>(); @@ -124,8 +124,8 @@ /** * Retourne toutes les formules sauvegardees * - * @param category TODO - * @return TODO + * @param category la categorie des formules dont on souhiate le nom + * @return la liste des noms formules existantes dans une categorie */ static public List<String> getFormuleNames(String category) { List<String> result = new ArrayList<String>(); @@ -150,8 +150,8 @@ * Retourne toutes les categories existantes dans les formules sauvegardées * ainsi que dans le TopiaContext passé en parametre * - * @param context TODO - * @return TODO + * @param context le context dans lequel il faut faire la recherche + * @return la liste des noms des categories existantes */ static public List<String> getCategories(TopiaContext context) { List<String> result = new ArrayList<String>(); @@ -179,9 +179,10 @@ * Retourne toutes les formules sauvegardees ainsi que dans le TopiaContext * passé en parametre * - * @param category TODO - * @param context TODO - * @return TODO + * @param category la categorie dans lequel il faut faire la recherche + * @param context le context dans lequel il faut aussi recherche en plus + * des formules sauvegardees en tant que model + * @return la liste des formules de la categorie */ static public List<Formule> getFormules(TopiaContext context, String category) { List<Formule> result = new ArrayList<Formule>(); @@ -206,7 +207,7 @@ /** * Retourne toutes les categories existantes dans les formules sauvegardées * - * @return TODO + * @return la liste des categories existant en tant que modele */ static public List<String> getCategories() { List<String> result = new ArrayList<String>(); @@ -225,7 +226,7 @@ * Retourne le storage pour la regle demandée * * @param name le nom de la regle souhaitée - * @param category TODO + * @param category la categorie de la regle * @return Le storage pour la regle */ static public FormuleStorage getFormule(String category, String name) { @@ -250,7 +251,7 @@ * @param name le nom de la formule * @param extension le script de la formule * @return Le storage pour la regle - * @throws IOException TODO + * @throws IOException */ static public FormuleStorage createFormule(String category, String name, String extension) throws IOException { String key = category + File.separator + name + extension; Modified: trunk/isis-fish/src/java/fr/ifremer/isisfish/datastore/JavaSourceStorage.java =================================================================== --- trunk/isis-fish/src/java/fr/ifremer/isisfish/datastore/JavaSourceStorage.java 2008-08-29 19:29:03 UTC (rev 1324) +++ trunk/isis-fish/src/java/fr/ifremer/isisfish/datastore/JavaSourceStorage.java 2008-09-01 08:37:01 UTC (rev 1325) @@ -100,8 +100,8 @@ /** * Retourne la classe de la rule compilé. Compile le fichier si besoin * - * @return TODO - * @throws IsisFishException TODO + * @return la class representant la regle + * @throws IsisFishException */ public Class getCodeClass() throws IsisFishException { String fqn = getFQN(); @@ -119,8 +119,8 @@ /** * Retourne une nouvelle instance de la regle. Compile le fichier si besoin * - * @return TODO - * @throws IsisFishException TODO + * @return une novuelle instance de la regle + * @throws IsisFishException */ public Object getNewInstance() throws IsisFishException { Class clazz = getCodeClass(); Modified: trunk/isis-fish/src/java/fr/ifremer/isisfish/datastore/RegionStorage.java =================================================================== --- trunk/isis-fish/src/java/fr/ifremer/isisfish/datastore/RegionStorage.java 2008-08-29 19:29:03 UTC (rev 1324) +++ trunk/isis-fish/src/java/fr/ifremer/isisfish/datastore/RegionStorage.java 2008-09-01 08:37:01 UTC (rev 1325) @@ -167,6 +167,9 @@ } } + // FIXME supprimer cette methode car context jamais ferme, pour l'instant + // elle est utilise dans swixat, pour la recuperation des str et pop + // pour les parametres de lancement de simulation /** * Retourne le nom courant de la région * @@ -174,7 +177,6 @@ * @throws StorageException if db problem */ public FisheryRegion getFisheryRegion() throws StorageException { - // FIXME voir si la methode est vraiment utilisée car le context n'est jamais fermé, ce qui est dérangeant try { TopiaContext tx = getStorage().beginTransaction(); FisheryRegion result = getFisheryRegion(tx); @@ -423,8 +425,6 @@ tx.execute("DELETE " + Result.class.getName()); tx.commitTransaction(); - // FIXME le service topia de migration devrait se mettre en - // route pour les veilles base apres le restore tx.closeContext(); } } Modified: trunk/isis-fish/src/java/fr/ifremer/isisfish/datastore/ScriptStorage.java =================================================================== --- trunk/isis-fish/src/java/fr/ifremer/isisfish/datastore/ScriptStorage.java 2008-08-29 19:29:03 UTC (rev 1324) +++ trunk/isis-fish/src/java/fr/ifremer/isisfish/datastore/ScriptStorage.java 2008-09-01 08:37:01 UTC (rev 1325) @@ -69,9 +69,9 @@ * * Constructeur * - * @param rootSrc TODO - * @param directory TODO - * @param name TODO + * @param rootSrc le repertoire root de stockage + * @param directory le repertoire des scripts + * @param name le nom du script */ protected ScriptStorage(File rootSrc, File directory, String name) { super(rootSrc, directory, name); @@ -87,8 +87,8 @@ /** * Retourne une nouvelle instance de la regle. Compile le fichier si besoin * - * @return TODO - * @throws IsisFishException TODO + * @return une nouvelle instance + * @throws IsisFishException */ public Object getNewScriptInstance() throws IsisFishException { return getNewInstance(); Modified: trunk/isis-fish/src/java/fr/ifremer/isisfish/datastore/SimulationStorage.java =================================================================== --- trunk/isis-fish/src/java/fr/ifremer/isisfish/datastore/SimulationStorage.java 2008-08-29 19:29:03 UTC (rev 1324) +++ trunk/isis-fish/src/java/fr/ifremer/isisfish/datastore/SimulationStorage.java 2008-09-01 08:37:01 UTC (rev 1325) @@ -197,6 +197,17 @@ } return simulationControlFile; } + + /** + * Retourne le fichier de stockage du fichier de control de la simulation. + * Ce fichier conserve l'etat de la simulation, cela permet a un processus + * externe de connaitre l'etat d'une simulation distante + * @return + */ + static protected File getSimulationControlFile(String id) { + File result = new File(getSimulationDirectory(id), "control"); + return result; + } /** * Force la sauvegarde du fichier de control d'une simulation, ce fichier @@ -220,20 +231,26 @@ /** * Reli le fichier contenant les infos de SimulationControl, en excluant * certain champs + * @param id l'identifiant de la simulation a * @param control le control a mettre a jour en fonction de ce qui est lu * @param exclude les champs a exclure */ - public void readControl(SimulationControl control, String ... exclude) { + static public void readControl(String id, SimulationControl control, String... exclude) { try { Properties prop = new Properties(); - File file = getSimulationControlFile(); - FileInputStream in = new FileInputStream(file); - prop.load(in); - in.close(); - for (String e : exclude) { - prop.remove(e); + File file = getSimulationControlFile(id); + if (file.exists()) { + FileInputStream in = new FileInputStream(file); + try { + prop.load(in); + } finally { + in.close(); + } + for (String e : exclude) { + prop.remove(e); + } + control.updateFromProperties(prop); } - control.updateFromProperties(prop); } catch (Exception eee) { log.warn("Can't read control", eee); } Modified: trunk/isis-fish/src/java/fr/ifremer/isisfish/rule/Rule.java =================================================================== --- trunk/isis-fish/src/java/fr/ifremer/isisfish/rule/Rule.java 2008-08-29 19:29:03 UTC (rev 1324) +++ trunk/isis-fish/src/java/fr/ifremer/isisfish/rule/Rule.java 2008-09-01 08:37:01 UTC (rev 1325) @@ -66,7 +66,7 @@ /** * Permet d'afficher a l'utilisateur une aide sur la regle. * @return L'aide ou la description de la regle - * @throws Exception TODO + * @throws Exception */ public String getDescription() throws Exception; @@ -74,17 +74,17 @@ * Appelé au démarrage de la simulation, cette méthode permet d'initialiser * des valeurs * @param context La simulation pour lequel on utilise cette regle - * @throws Exception TODO + * @throws Exception */ public void init(SimulationContext context) throws Exception; /** * La condition qui doit etre vrai pour faire les actions * @param context La simulation pour lequel on utilise cette regle + * @param date la date courante + * @param metier le metier * @return vrai si on souhaite que les actions soit faites - * @throws Exception TODO - * @param date TODO - * @param metier TODO + * @throws Exception s'il y a une erreur, met fin a la simulation */ public boolean condition(SimulationContext context, Date date, Metier metier) throws Exception; @@ -92,9 +92,9 @@ * Si la condition est vrai alors cette action est executée avant le pas * de temps de la simulation. * @param context La simulation pour lequel on utilise cette regle - * @param date TODO - * @param metier TODO - * @throws Exception TODO + * @param date la date courant + * @param metier le metier + * @throws Exception s'il y a une erreur, met fin a la simulation */ public void preAction(SimulationContext context, Date date, Metier metier) throws Exception; @@ -102,9 +102,9 @@ * Si la condition est vrai alors cette action est executée apres le pas * de temps de la simulation. * @param context La simulation pour lequel on utilise cette regle - * @param date TODO - * @param metier TODO - * @throws Exception TODO + * @param date la date courante + * @param metier le metier + * @throws Exception s'il y a une erreur, met fin a la simulation */ public void postAction(SimulationContext context, Date date, Metier metier) throws Exception; Modified: trunk/isis-fish/src/java/fr/ifremer/isisfish/simulator/AnalysePlanContext.java =================================================================== --- trunk/isis-fish/src/java/fr/ifremer/isisfish/simulator/AnalysePlanContext.java 2008-08-29 19:29:03 UTC (rev 1324) +++ trunk/isis-fish/src/java/fr/ifremer/isisfish/simulator/AnalysePlanContext.java 2008-09-01 08:37:01 UTC (rev 1325) @@ -65,10 +65,17 @@ * @return Returns the number. */ public int getNumber() { - return param.getAnalysePlanNumber(); + return number; } /** + * must be call when new simulation is generated from plan + */ + public void incNumber() { + number++; + } + + /** * @return Returns the param. */ public SimulationParameter getParam() { Modified: trunk/isis-fish/src/java/fr/ifremer/isisfish/simulator/launcher/InProcessSimulatorLauncher.java =================================================================== --- trunk/isis-fish/src/java/fr/ifremer/isisfish/simulator/launcher/InProcessSimulatorLauncher.java 2008-08-29 19:29:03 UTC (rev 1324) +++ trunk/isis-fish/src/java/fr/ifremer/isisfish/simulator/launcher/InProcessSimulatorLauncher.java 2008-09-01 08:37:01 UTC (rev 1325) @@ -48,7 +48,6 @@ import org.apache.commons.lang.time.DurationFormatUtils; import org.apache.commons.logging.Log; import org.apache.commons.logging.LogFactory; -import org.codelutin.profiling.LutinTrace; import org.codelutin.topia.TopiaContext; import org.codelutin.topia.TopiaException; import org.codelutin.topia.event.TopiaTransactionEvent; @@ -339,9 +338,7 @@ String cache = Cache.printStatistiqueAndClear(); simulation.getInformation().setOptimizationUsage(cache); } - - LutinTrace.printStatistiqueAndClear(); - + } return result; } @@ -386,7 +383,7 @@ * @see org.codelutin.topia.event.TopiaTransactionListener#commit(org.codelutin.topia.event.TopiaTransactionEvent) */ public void commit(TopiaTransactionEvent event) { - // TODO Auto-generated method stub + // rien a faire, car normalement toujours rollback en fin de mois } Modified: trunk/isis-fish/src/java/fr/ifremer/isisfish/simulator/launcher/SimulationJob.java =================================================================== --- trunk/isis-fish/src/java/fr/ifremer/isisfish/simulator/launcher/SimulationJob.java 2008-08-29 19:29:03 UTC (rev 1324) +++ trunk/isis-fish/src/java/fr/ifremer/isisfish/simulator/launcher/SimulationJob.java 2008-09-01 08:37:01 UTC (rev 1325) @@ -23,6 +23,7 @@ import fr.ifremer.isisfish.simulator.SimulationControl; import fr.ifremer.isisfish.simulator.SimulationParameter; import fr.ifremer.isisfish.types.Date; +import fr.ifremer.isisfish.types.Month; import java.io.File; import static org.codelutin.i18n.I18nf._; @@ -150,7 +151,8 @@ try { SimulationControl control = item.getControl(); String id = control.getId(); - if (control.isStopSimulationRequest()) { + if (control.isStopSimulationRequest() || + (getParentJob() != null && getParentJob().getItem().getControl().isStopSimulationRequest())) { log.info(_("Not start simulation %s because user ask stop", id)); return ; } @@ -187,6 +189,10 @@ control.setProgress(0); control.setStarted(true); + int lastYear = param.getNumberOfYear(); + int lastDate = lastYear * Month.NUMBER_OF_MONTH; + control.setProgressMax(lastDate); + File zip = item.getSimulationZip(); SimulationStorage simulation = launcher.simulate(simulationService, control, zip); @@ -230,6 +236,8 @@ log.error(_("Can't do post action %s", action), eee); } } + // la simulation est termine on, avant la progress au dernier cran + control.setProgress(control.getProgress()+1); } } catch (Throwable eee) { Modified: trunk/isis-fish/src/java/fr/ifremer/isisfish/simulator/launcher/SimulationQueue.java =================================================================== --- trunk/isis-fish/src/java/fr/ifremer/isisfish/simulator/launcher/SimulationQueue.java 2008-08-29 19:29:03 UTC (rev 1324) +++ trunk/isis-fish/src/java/fr/ifremer/isisfish/simulator/launcher/SimulationQueue.java 2008-09-01 08:37:01 UTC (rev 1325) @@ -63,6 +63,8 @@ try { boolean result = false; for (SimulationQueue child : childs) { + // il faut bien faire le remove sur chaque fils, + // donc le || result doit etre en dernier result = child.remove(o) || result; } result = q.remove(o) || result; @@ -101,7 +103,7 @@ public SimulationJob poll() { SimulationJob result = super.poll(); if (result == null && parent != null) { - result = parent.peek(); + result = parent.poll(); } return result; } @@ -113,7 +115,10 @@ SimulationJob result = null; try { try { - while (q.size() == 0 && parent != null && null == parent.poll()) { + // on fait bien un poll, sur le pere, car on ne souhaite pas + // rester bloquer dessus + while (q.size() == 0 && + (parent == null || null == (result = parent.poll()))) { notEmpty.await(); } } catch (InterruptedException ie) { Modified: trunk/isis-fish/src/java/fr/ifremer/isisfish/simulator/launcher/SimulationService.java =================================================================== --- trunk/isis-fish/src/java/fr/ifremer/isisfish/simulator/launcher/SimulationService.java 2008-08-29 19:29:03 UTC (rev 1324) +++ trunk/isis-fish/src/java/fr/ifremer/isisfish/simulator/launcher/SimulationService.java 2008-09-01 08:37:01 UTC (rev 1325) @@ -231,7 +231,7 @@ if (jobs.add(job)) { idJobs.add(job.getItem().getControl().getId()); for (SimulationServiceListener l : listeners) { - l.simulationStart(job); + l.simulationStart(this, job); } } } @@ -253,7 +253,7 @@ // de plan jobDones.add(job); for (SimulationServiceListener l : listeners) { - l.simulationStop(job); + l.simulationStop(this, job); } } @@ -262,7 +262,9 @@ */ public void clearJobDone() { jobDones.clear(); - // FIXME prevoir quelque chose pour prevenir la console de queue + for (SimulationServiceListener l : listeners) { + l.clearJobDone(this); + } } /** @@ -316,7 +318,8 @@ * @param param les parametres de la simulation * @param priority la priorite de la simulation */ - public void submit(String id, SimulationParameter param, SimulatorLauncher launcher, int priority) { + public void submit(String id, SimulationParameter param, + SimulatorLauncher launcher, int priority) { // on l'ajoute tout de suite a la liste des simulations demandee SimulationControl control = new SimulationControl(id); SimulationItem item = new SimulationItem(control, param, null); @@ -347,6 +350,7 @@ if (launcher != null) { for (SimulatorLauncher l : executors.keySet()) { if (launcher == l) { + log.info(_("Add to %s queue", l)); SimulationExecutor executor = executors.get(l); executor.execute(job); return; @@ -354,6 +358,7 @@ } } // dernier recours on ajoute a la queue sans launcher + log.info(_("Add to default queue")); queue.add(job); } @@ -416,8 +421,8 @@ e.pause(); } // il faut bien penser a supprimer le launcher pour qu'un autre executor - // puisse y mettre le sien. FIXME: est ce le bon choix si l'utilisateur avait - // force un launcher particulier, ne faudrait t'il pas prevenir l'utilisateur ? + // puisse y mettre le sien. + // FIXME: est ce le bon choix si l'utilisateur avait force un launcher particulier, ne faudrait t'il pas prevenir l'utilisateur ? job.setLauncher(null); resubmit(job); } @@ -440,8 +445,8 @@ protected String id; protected SimulationControl control; protected SimulationParameter param; - protected int planNumber = 0; - + protected int done = 0; + public PrepareSimulationJob(SimulationService simulationService, SimulationJob job) { this.simulationService = simulationService; @@ -484,7 +489,8 @@ if (nextJob == null) { // Prepration de la simulation a faire // create next id simulation - planNumber++; + planContext.incNumber(); + int planNumber = planContext.getNumber(); if (planNumber > MAX_PLAN_SIMULATION) { log.error(_("Analyse plan error, too many simulation for %s : %s", id, planNumber)); doNext = false; @@ -510,8 +516,11 @@ doNext = result; if (result) { File zip = sim.createZip(); - SimulationItem item = new SimulationItem(control, param, zip); + SimulationControl childControl = new SimulationControl(simId); + SimulationParameter childParam = param.copy(); + SimulationItem item = new SimulationItem(childControl, childParam, zip); nextJob = new SimulationJob(simulationService, job, item, job.getPriority()); + nextJob.setLauncher(job.getLauncher()); nextJob.addPostAction(this); // pour l'appel des after des plans } // quoi qu'il arrive on supprime le repertoire temporaire @@ -541,13 +550,12 @@ } public void finished(SimulationJob job, SimulationStorage sim) { - doNext = true; - boolean result = true; +// doNext = true; // appel de tous les plans pour modifier la simulation for (AnalysePlan plan : sim.getParameter().getAnalysePlans()) { try { - result = plan.afterSimulation(planContext, sim); + boolean result = plan.afterSimulation(planContext, sim); doNext = doNext && result; } catch (Exception eee) { log.error(_("Stop simulation plan, because can't call afterSimulation correctly on plan %s", @@ -555,7 +563,13 @@ doNext = false; } } - + // une sim vient de se finir, on incremente le compteur + done++; + if (!hasNext() && (done + 1 == planContext.getNumber())) { + // on enleve le master plan des simulations en cours, vu que + // toutes les simu sont terminees + simulationService.fireStopEvent(this.job); + } } public void exception(SimulationJob job, Throwable eee) { @@ -563,6 +577,7 @@ // cela n'impacte pas les plan independant puisque toutes les // simulation on deja ete generee doNext = false; + simulationService.fireStopEvent(this.job); } } Modified: trunk/isis-fish/src/java/fr/ifremer/isisfish/simulator/launcher/SimulationServiceListener.java =================================================================== --- trunk/isis-fish/src/java/fr/ifremer/isisfish/simulator/launcher/SimulationServiceListener.java 2008-08-29 19:29:03 UTC (rev 1324) +++ trunk/isis-fish/src/java/fr/ifremer/isisfish/simulator/launcher/SimulationServiceListener.java 2008-09-01 08:37:01 UTC (rev 1325) @@ -31,14 +31,22 @@ /** * Notifie start of simulation + * @param simService le simulation service qui a lance la simulation * @param job job that responsable to simulation */ - public void simulationStart(SimulationJob job); + public void simulationStart(SimulationService simService, SimulationJob job); /** * Notifie end of simulation + * @param simService le simulation service qui a arrete la simulation * @param job job that responsable to simulation */ - public void simulationStop(SimulationJob job); + public void simulationStop(SimulationService simService, SimulationJob job); + /** + * Previent que le simulation service a vide ca liste de simulation faites + * @param simService le simulation service dont la liste des jobs finis + * a ete vide + */ + public void clearJobDone(SimulationService simService); } Modified: trunk/isis-fish/src/java/fr/ifremer/isisfish/simulator/launcher/SimulationServiceTableModel.java =================================================================== --- trunk/isis-fish/src/java/fr/ifremer/isisfish/simulator/launcher/SimulationServiceTableModel.java 2008-08-29 19:29:03 UTC (rev 1324) +++ trunk/isis-fish/src/java/fr/ifremer/isisfish/simulator/launcher/SimulationServiceTableModel.java 2008-09-01 08:37:01 UTC (rev 1325) @@ -39,7 +39,8 @@ * * <p> * <b>ATTENTION</b> Cette classe doit supporter les acces concurrents car - * plusieurs threads peuvent etre simultanement en train de faire de simulation + * plusieurs threads peuvent etre simultanement en train de faire des + * simulations * * @author poussin * @version $Revision$ @@ -94,17 +95,15 @@ public void addJob(SimulationJob job) { String id = job.getItem().getControl().getId(); - log.info("************* Try do add job " + id); synchronized(jobs) { - log.info("++++++++++Try do add job" + id); if (!contains(job)) { - log.info("----------Add job" + id); jobs.add(job); jobIds.put(id, job); fireTableRowsInserted(jobs.size() - 1, jobs.size() - 1); } } } + public void removeJob(SimulationJob job) { synchronized(jobs) { int index = jobs.indexOf(job); @@ -115,6 +114,11 @@ } } + public void clearJob() { + jobs.clear(); + fireTableDataChanged(); + } + public ArrayList<SimulationJob> getJobs() { return jobs; } @@ -152,7 +156,7 @@ SimulationJob result = jobs.get(row); return result; } - + public int getRowCount() { int result = jobs.size(); return result; @@ -188,12 +192,18 @@ case 1: if (param.getUseAnalysePlan()) { int number = param.getAnalysePlanNumber(); - result = number; + if (number >=0) { + result = number; + } } break; case 2: if (job.getLauncher() == null) { - result = "not started"; + if (param.getUseAnalysePlan()) { + result = _("Master plan"); + } else { + result = _("not started"); + } } else { result = job.getLauncher().toString(); } @@ -240,14 +250,18 @@ model.setJobs(new ArrayList<SimulationJob>(simulationService.getJobDones())); } - public void simulationStart(SimulationJob job) { + public void simulationStart(SimulationService simService, SimulationJob job) { // nothing to do } - public void simulationStop(SimulationJob job) { + public void simulationStop(SimulationService simService, SimulationJob job) { model.addJob(job); } + public void clearJobDone(SimulationService simService) { + model.clearJob(); + } + } class JobToDoListener implements AbstractJobListener, SimulationServiceListener { @@ -270,21 +284,25 @@ } } - public void simulationStart(SimulationJob job) { + public void simulationStart(SimulationService simService, SimulationJob job) { model.addJob(job); job.getItem().getControl().addPropertyChangeListener( model.controlListener); } - public void simulationStop(SimulationJob job) { + public void simulationStop(SimulationService simService, SimulationJob job) { model.removeJob(job); job.getItem().getControl().removePropertyChangeListener( model.controlListener); } + + public void clearJobDone(SimulationService simService) { + // nothing to do + } } - class ControlListener implements PropertyChangeListener { + protected class ControlListener implements PropertyChangeListener { protected SimulationService simulationService; protected SimulationServiceTableModel model; @@ -298,8 +316,8 @@ SimulationControl control = (SimulationControl)evt.getSource(); String id = control.getId(); synchronized(model.jobs) { - SimulationJob jobs = model.jobIds.get(id); - int index = model.getJobs().indexOf(id); + SimulationJob job = model.jobIds.get(id); + int index = model.getJobs().indexOf(job); if (index >= 0) { fireTableRowsUpdated(index, index); } Modified: trunk/isis-fish/src/java/fr/ifremer/isisfish/simulator/launcher/SubProcessSimulationLauncher.java =================================================================== --- trunk/isis-fish/src/java/fr/ifremer/isisfish/simulator/launcher/SubProcessSimulationLauncher.java 2008-08-29 19:29:03 UTC (rev 1324) +++ trunk/isis-fish/src/java/fr/ifremer/isisfish/simulator/launcher/SubProcessSimulationLauncher.java 2008-09-01 08:37:01 UTC (rev 1325) @@ -24,6 +24,7 @@ import fr.ifremer.isisfish.IsisFish; import fr.ifremer.isisfish.datastore.SimulationStorage; import fr.ifremer.isisfish.simulator.SimulationControl; +import java.io.BufferedInputStream; import java.io.File; import java.io.InputStream; import java.rmi.RemoteException; @@ -43,13 +44,21 @@ /** to use log facility, just put in your code: log.info(\"...\"); */ static private Log log = LogFactory.getLog(SubProcessSimulationLauncher.class); - public SimulationStorage simulate(SimulationService simulationService, SimulationControl control, File simulationZip) throws RemoteException { + protected boolean finished = false; + + @Override + public String toString() { + return "Sub process"; + } + + public SimulationStorage simulate(SimulationService simulationService, + SimulationControl control, File simulationZip) throws RemoteException { String simulationId = control.getId(); SimulationStorage simulation = null; try { - simulation = SimulationStorage.importAndRenameZip( - simulationZip, simulationId); - simulation = subProcessSimulate(control, simulation); +// simulation = SimulationStorage.importAndRenameZip( +// simulationZip, simulationId); + simulation = subProcessSimulate(control, simulationZip); } catch (Exception eee) { log.error(_("Can't do simulation %s", simulationId), eee); simulation.getInformation().setException(eee); @@ -67,11 +76,11 @@ } public SimulationStorage subProcessSimulate(SimulationControl control, - SimulationStorage simulation) throws Exception { + File simulationZip) throws Exception { String simulationId = control.getId(); // on ferme le SimulationStorage pour ne pas interferer avec le process - simulation.closeStorage(); +// simulation.closeStorage(); String java = System.getProperty("java.home") + File.separator + "bin" + File.separator + "java"; @@ -80,23 +89,26 @@ // prepare le process ProcessBuilder processBuilder = new ProcessBuilder( java, "-classpath", classpath, - IsisFish.class.getName(), - "--simulate", simulationId); + IsisFish.class.getName(), "--option", "launch.ui", "false", + "--simulateWithSimulation", simulationId, simulationZip.getAbsolutePath()); processBuilder.redirectErrorStream(true); // demarrage du process Process process = processBuilder.start(); + log.info(_("SubProcess start: %s %s", process, processBuilder.command())); if (control != null) { // prepare de thread de surveillance du process si control n'est pas null Thread monitor = new SimulationCheckpointExternalProcessThread( - control, simulation, process); + control, simulationId, process); monitor.start(); } // on attend que la simulation soit fini process.waitFor(); - return simulation; + finished = true; + SimulationStorage result = SimulationStorage.getSimulation(simulationId); + return result; } /** @@ -113,15 +125,16 @@ * Logger for this class */ protected SimulationControl control = null; - protected SimulationStorage simulation = null; + protected String simulationId = null; protected Process process = null; // on l'appel plutot out que in, car c le output du process lance protected InputStream out = null; public SimulationCheckpointExternalProcessThread(SimulationControl control, - SimulationStorage simulation, Process process) { + String simulationId, Process process) { + log.info("Lancement du thread de surveillance des simulations externes"); this.control = control; - this.simulation = simulation; + this.simulationId = simulationId; this.process = process; out = process.getInputStream(); @@ -131,13 +144,13 @@ public void run() { int sleepTime = 2000; int error = 0; - while (true) { + while (!finished) { try { out.skip(out.available()); Thread.sleep(sleepTime); // on ne lit pas le stop, car le stop ne peut-etre appeler // que par l'utilisateur qui est de ce cote de la machine - simulation.readControl(control, "stop"); + SimulationStorage.readControl(simulationId, control, "stop"); if (control.isStopSimulationRequest()) { // FIXME, un destroy du process est peut-etre un peu violent ? Modified: trunk/isis-fish/src/java/fr/ifremer/isisfish/ui/simulator/Queue.java =================================================================== --- trunk/isis-fish/src/java/fr/ifremer/isisfish/ui/simulator/Queue.java 2008-08-29 19:29:03 UTC (rev 1324) +++ trunk/isis-fish/src/java/fr/ifremer/isisfish/ui/simulator/Queue.java 2008-09-01 08:37:01 UTC (rev 1325) @@ -7,8 +7,6 @@ package fr.ifremer.isisfish.ui.simulator; import fr.ifremer.isisfish.logging.SimulationLoggerUtil; -import java.util.logging.Level; -import java.util.logging.Logger; import static org.codelutin.i18n.I18nf._; import fr.ifremer.isisfish.simulator.launcher.SimulationJob; @@ -33,7 +31,8 @@ import org.jdesktop.beansbinding.ELProperty; /** - * + * Widget permettant d'afficher l'etat des simulations + * * @author poussin */ public class Queue extends javax.swing.JPanel { @@ -68,7 +67,7 @@ tableJobDones.setModel(modelJobDones); } - private void stopSimulation(java.awt.event.ActionEvent evt) { + protected void stopSimulation(java.awt.event.ActionEvent evt) { int i = tableJobs.getSelectedRow(); if (i >= 0) { SimulationJob job = modelJobs.getJob(i); @@ -77,7 +76,7 @@ } } - private void viewLog(java.awt.event.ActionEvent evt) { + protected void viewLog(java.awt.event.ActionEvent evt) { int i = tableJobs.getSelectedRow(); if (i >= 0) { SimulationJob job = modelJobs.getJob(i); @@ -90,7 +89,12 @@ } } - private void initComponents() { + protected void clearDoneJobs(java.awt.event.ActionEvent evt) { + SimulationService ss = SimulationService.getService(); + ss.clearJobDone(); + } + + protected void initComponents() { bindingGroup = new BindingGroup(); tableJobsScroll = new javax.swing.JScrollPane(); @@ -98,14 +102,15 @@ tableJobDonesScroll = new javax.swing.JScrollPane(); tableJobDones = new javax.swing.JTable(); autoLaunchButton = new javax.swing.JToggleButton(); - jButton1 = new javax.swing.JButton(); - jButton2 = new javax.swing.JButton(); + stopSimuButton = new javax.swing.JButton(); + showLogButton = new javax.swing.JButton(); + clearDoneJobsButton = new javax.swing.JButton(); tableJobsScroll.setViewportView(tableJobs); tableJobDonesScroll.setViewportView(tableJobDones); - autoLaunchButton.setText("Auto Launch"); + autoLaunchButton.setText(_("Auto Launch")); Binding binding = Bindings.createAutoBinding( AutoBinding.UpdateStrategy.READ_WRITE, @@ -113,38 +118,46 @@ autoLaunchButton, BeanProperty.create("selected")); bindingGroup.addBinding(binding); - jButton1.setText("Stop simulation"); + stopSimuButton.setText(_("Stop simulation")); binding = Bindings.createAutoBinding( AutoBinding.UpdateStrategy.READ, tableJobs, ELProperty.create("${selectedElement != null}"), - jButton1, BeanProperty.create("enabled")); + stopSimuButton, BeanProperty.create("enabled")); binding.setSourceNullValue(false); binding.setSourceUnreadableValue(false); bindingGroup.addBinding(binding); - jButton1.addActionListener(new java.awt.event.ActionListener() { + stopSimuButton.addActionListener(new java.awt.event.ActionListener() { public void actionPerformed(java.awt.event.ActionEvent evt) { stopSimulation(evt); } }); - jButton2.setText("View log"); + showLogButton.setText(_("View log")); binding = Bindings.createAutoBinding( AutoBinding.UpdateStrategy.READ, tableJobDones, ELProperty.create("${selectedElement != null}"), - jButton2, BeanProperty.create("enabled")); + showLogButton, BeanProperty.create("enabled")); binding.setSourceNullValue(false); binding.setSourceUnreadableValue(false); bindingGroup.addBinding(binding); - jButton2.addActionListener(new java.awt.event.ActionListener() { + showLogButton.addActionListener(new java.awt.event.ActionListener() { public void actionPerformed(java.awt.event.ActionEvent evt) { viewLog(evt); } }); + clearDoneJobsButton.setText(_("Clear done jobs")); + + clearDoneJobsButton.addActionListener(new java.awt.event.ActionListener() { + public void actionPerformed(java.awt.event.ActionEvent evt) { + clearDoneJobs(evt); + } + }); + GroupLayout layout = new GroupLayout(this); this.setLayout(layout); layout.setHorizontalGroup( @@ -156,9 +169,11 @@ .addGap(12, 12, 12) .addComponent(autoLaunchButton) .addPreferredGap(LayoutStyle.ComponentPlacement.RELATED) - .addComponent(jButton1) + .addComponent(stopSimuButton) .addPreferredGap(LayoutStyle.ComponentPlacement.RELATED) - .addComponent(jButton2)) + .addComponent(showLogButton) + .addPreferredGap(LayoutStyle.ComponentPlacement.RELATED) + .addComponent(clearDoneJobsButton)) .addComponent(tableJobDonesScroll, GroupLayout.DEFAULT_SIZE, 376, Short.MAX_VALUE) .addComponent(tableJobsScroll, GroupLayout.DEFAULT_SIZE, 376, Short.MAX_VALUE)) .addContainerGap()) @@ -173,8 +188,9 @@ .addPreferredGap(ComponentPlacement.RELATED) .addGroup(layout.createParallelGroup(GroupLayout.Alignment.BASELINE) .addComponent(autoLaunchButton) - .addComponent(jButton1) - .addComponent(jButton2)) + .addComponent(stopSimuButton) + .addComponent(showLogButton) + .addComponent(clearDoneJobsButton)) .addContainerGap()) ); @@ -184,8 +200,9 @@ protected SimulationServiceTableModel modelJobs; protected SimulationServiceTableModel modelJobDones; protected javax.swing.JToggleButton autoLaunchButton; - protected javax.swing.JButton jButton1; - protected javax.swing.JButton jButton2; + protected javax.swing.JButton stopSimuButton; + protected javax.swing.JButton showLogButton; + protected javax.swing.JButton clearDoneJobsButton; protected javax.swing.JTable tableJobDones; protected javax.swing.JScrollPane tableJobDonesScroll; protected javax.swing.JTable tableJobs; Modified: trunk/isis-fish/src/java/fr/ifremer/isisfish/ui/simulator/SimulatorAction.java =================================================================== --- trunk/isis-fish/src/java/fr/ifremer/isisfish/ui/simulator/SimulatorAction.java 2008-08-29 19:29:03 UTC (rev 1324) +++ trunk/isis-fish/src/java/fr/ifremer/isisfish/ui/simulator/SimulatorAction.java 2008-09-01 08:37:01 UTC (rev 1325) @@ -258,7 +258,8 @@ */ static public Object simulate(Context uiContext, AbstractFrame frame, String simulId, SimulationParameter param, - boolean inQueue, JTabbedPane tabs, SimulatorLauncher luncher) { + boolean inQueue, JTabbedPane tabs, + SimulatorLauncher launcher) { log.debug("call simulate"); try { uiContext.setData("SimulationLaunched", false); @@ -272,7 +273,7 @@ } else { SimulationParameter p = param.copy(); - SimulationService.getService().submit(simulId, p, luncher, 0); + SimulationService.getService().submit(simulId, p, launcher, 0); selectTab(tabs, true, 6); }
participants (1)
-
bpoussin@users.labs.libre-entreprise.org