r1678 - in isis-fish/trunk/src/main: java/fr/ifremer/isisfish/actions java/fr/ifremer/isisfish/datastore java/fr/ifremer/isisfish/simulator java/fr/ifremer/isisfish/simulator/launcher java/fr/ifremer/isisfish/ui/simulator resources resources/i18n
Author: chatellier Date: 2008-12-17 13:40:51 +0000 (Wed, 17 Dec 2008) New Revision: 1678 Modified: isis-fish/trunk/src/main/java/fr/ifremer/isisfish/actions/SimulationAction.java isis-fish/trunk/src/main/java/fr/ifremer/isisfish/datastore/ScriptStorage.java isis-fish/trunk/src/main/java/fr/ifremer/isisfish/datastore/SimulationInformation.java isis-fish/trunk/src/main/java/fr/ifremer/isisfish/datastore/SimulationStorage.java isis-fish/trunk/src/main/java/fr/ifremer/isisfish/simulator/SimulationControl.java isis-fish/trunk/src/main/java/fr/ifremer/isisfish/simulator/launcher/InProcessSimulatorLauncher.java isis-fish/trunk/src/main/java/fr/ifremer/isisfish/simulator/launcher/SimulationJob.java isis-fish/trunk/src/main/java/fr/ifremer/isisfish/simulator/launcher/SimulationService.java isis-fish/trunk/src/main/java/fr/ifremer/isisfish/simulator/launcher/SimulationServiceTableModel.java isis-fish/trunk/src/main/java/fr/ifremer/isisfish/simulator/launcher/SshSimulatorLauncher.java isis-fish/trunk/src/main/java/fr/ifremer/isisfish/simulator/launcher/SubProcessSimulationLauncher.java isis-fish/trunk/src/main/java/fr/ifremer/isisfish/ui/simulator/SimulAction.java isis-fish/trunk/src/main/resources/i18n/isis-fish-en_GB.properties isis-fish/trunk/src/main/resources/i18n/isis-fish-fr_FR.properties isis-fish/trunk/src/main/resources/log4j.properties Log: Corection du lancement des simulations par sous process Modified: isis-fish/trunk/src/main/java/fr/ifremer/isisfish/actions/SimulationAction.java =================================================================== --- isis-fish/trunk/src/main/java/fr/ifremer/isisfish/actions/SimulationAction.java 2008-12-17 13:11:32 UTC (rev 1677) +++ isis-fish/trunk/src/main/java/fr/ifremer/isisfish/actions/SimulationAction.java 2008-12-17 13:40:51 UTC (rev 1678) @@ -21,6 +21,13 @@ import static org.codelutin.i18n.I18n._; +import java.io.File; +import java.io.FileInputStream; +import java.util.Properties; + +import org.apache.commons.logging.Log; +import org.apache.commons.logging.LogFactory; + import fr.ifremer.isisfish.IsisConfig; import fr.ifremer.isisfish.IsisFish; import fr.ifremer.isisfish.datastore.RegionStorage; @@ -30,16 +37,11 @@ import fr.ifremer.isisfish.simulator.launcher.InProcessSimulatorLauncher; import fr.ifremer.isisfish.simulator.launcher.SimulationService; import fr.ifremer.isisfish.simulator.launcher.SimulatorLauncher; -import java.io.File; -import java.io.FileInputStream; -import java.text.SimpleDateFormat; -import java.util.Date; -import java.util.Properties; -import org.apache.commons.logging.Log; -import org.apache.commons.logging.LogFactory; +import fr.ifremer.isisfish.types.Month; /** - * + * Action des simulations. + * * @author poussin * @version $Revision$ * @@ -56,48 +58,66 @@ public SimulationAction(IsisConfig config) { this.config = config; } - - public static void simulateWithRegion(String simulId, File parameterFile, File region) throws Exception { - Properties props = new Properties(); - FileInputStream inStream = new FileInputStream(parameterFile); - props.load(inStream); - inStream.close(); - SimulationParameter params = new SimulationParameter(); - params.fromProperties(SimulationStorage.getSimulationDirectory(), props); + /** + * + * @param simulId + * @param parameterFile + * @param region + * @throws Exception + */ + public static void simulateWithRegion(String simulId, File parameterFile, + File region) throws Exception { + Properties props = new Properties(); + FileInputStream inStream = new FileInputStream(parameterFile); + props.load(inStream); + inStream.close(); - // try to import region if needed - String regionName = params.getRegionName(); - if (region != null) { - if (!RegionStorage.exists(regionName)) { - RegionStorage.importAndRenameZip(region, regionName); - } else { - log.warn(_("Region %s allready exist in repository. Cant import", regionName)); - } + SimulationParameter params = new SimulationParameter(); + params.fromProperties(SimulationStorage.getSimulationDirectory(), + props); + + // try to import region if needed + String regionName = params.getRegionName(); + if (region != null) { + if (!RegionStorage.exists(regionName)) { + RegionStorage.importAndRenameZip(region, regionName); + } else { + log.warn(_( + "Region %s allready exist in repository. Can't import", + regionName)); } + } - SimulationService.getService().submit(simulId, params, null, 0); + SimulationService.getService().submit(simulId, params, null, 0); } - + /** * * @param simulId id de simulation - * @param zip Zip de la simulation - * @param parameterFile parametre optionnel pour la simulation + * @param simulationZip Zip de la simulation + * @throws Exception */ - public static void simulateWithSimulation(String simulId, File simulationZip) throws Exception { + public static void simulateWithSimulation(String simulId, File simulationZip) + throws Exception { log.info("id:" + simulId + ", zip:" + simulationZip); 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); - SimulationControl control = new SimulationControl(name); + // pour forcer le fichier de control a être sauver + // pour ensuite être lu par le processus parent + control.setAutoSaveState(true); + // lancement de la simulation SimulatorLauncher launcher = new InProcessSimulatorLauncher(); - SimulationStorage simulation = launcher.simulate(null, control, simulationZip); + SimulationStorage simulation = launcher.simulate(null, control, + simulationZip); simulation.getStorage().closeContext(); + // FIXME integrer ca dans le process normal d'init IsisFish.quit(); } - } Modified: isis-fish/trunk/src/main/java/fr/ifremer/isisfish/datastore/ScriptStorage.java =================================================================== --- isis-fish/trunk/src/main/java/fr/ifremer/isisfish/datastore/ScriptStorage.java 2008-12-17 13:11:32 UTC (rev 1677) +++ isis-fish/trunk/src/main/java/fr/ifremer/isisfish/datastore/ScriptStorage.java 2008-12-17 13:40:51 UTC (rev 1678) @@ -50,10 +50,8 @@ import java.util.Map; /** - * - * Gestion des fichers CVS de type scripts (appratenant au module scripts). + * Gestion des fichers CVS de type scripts (appartenant au module scripts). */ - public class ScriptStorage extends JavaSourceStorage implements Docable { static final public String SCRIPT_PATH = "scripts"; @@ -207,7 +205,6 @@ * @see Docable */ public String getDescription() { - throw new IsisFishRuntimeException(_("isisfish.error.not.support.class" + - "Docable#getDescription() method %1$s",this)); + throw new IsisFishRuntimeException(_("isisfish.error.not.support.class",this)); } } Modified: isis-fish/trunk/src/main/java/fr/ifremer/isisfish/datastore/SimulationInformation.java =================================================================== --- isis-fish/trunk/src/main/java/fr/ifremer/isisfish/datastore/SimulationInformation.java 2008-12-17 13:11:32 UTC (rev 1677) +++ isis-fish/trunk/src/main/java/fr/ifremer/isisfish/datastore/SimulationInformation.java 2008-12-17 13:40:51 UTC (rev 1678) @@ -292,5 +292,3 @@ setInfo(OTHER_INFO, getInfomation() + value + "\n"); } } - - Modified: isis-fish/trunk/src/main/java/fr/ifremer/isisfish/datastore/SimulationStorage.java =================================================================== --- isis-fish/trunk/src/main/java/fr/ifremer/isisfish/datastore/SimulationStorage.java 2008-12-17 13:11:32 UTC (rev 1677) +++ isis-fish/trunk/src/main/java/fr/ifremer/isisfish/datastore/SimulationStorage.java 2008-12-17 13:40:51 UTC (rev 1678) @@ -104,7 +104,7 @@ } /** - * Retourne le repertoire de base de stockage des simultions + * Retourne le repertoire de base de stockage des simulations * @return */ static public File getSimulationDirectory() { @@ -251,6 +251,11 @@ } control.updateFromProperties(prop); } + else { + if(log.isDebugEnabled()) { + log.debug("Control file '" + file.getAbsolutePath() + "'doesn't exists"); + } + } } catch (Exception eee) { log.warn("Can't read control", eee); } Modified: isis-fish/trunk/src/main/java/fr/ifremer/isisfish/simulator/SimulationControl.java =================================================================== --- isis-fish/trunk/src/main/java/fr/ifremer/isisfish/simulator/SimulationControl.java 2008-12-17 13:11:32 UTC (rev 1677) +++ isis-fish/trunk/src/main/java/fr/ifremer/isisfish/simulator/SimulationControl.java 2008-12-17 13:40:51 UTC (rev 1678) @@ -31,17 +31,18 @@ package fr.ifremer.isisfish.simulator; -import fr.ifremer.isisfish.datastore.SimulationStorage; import java.beans.PropertyChangeEvent; import java.beans.PropertyChangeListener; import java.beans.PropertyChangeSupport; import java.util.Hashtable; +import java.util.Map; +import java.util.Properties; import org.apache.commons.logging.Log; import org.apache.commons.logging.LogFactory; +import fr.ifremer.isisfish.datastore.SimulationStorage; import fr.ifremer.isisfish.types.Date; -import java.util.Properties; /** * Permit to communicate with user interface from simulation thread @@ -67,10 +68,11 @@ protected int progress = 0; protected String text = ""; - protected Hashtable<String, Object> update = new Hashtable<String, Object>(); + protected Map<String, Object> update = new Hashtable<String, Object>(); /** * + * @param id simulation id */ public SimulationControl(String id) { this.id = id; @@ -121,14 +123,15 @@ /** * appelee juste avant de reellement demarrer le thread de simulation * indique que cette simulation est en cours et qu'il ne faut plus la lancer - * @param running The running to set. + * + * @param started The running to set. */ public void setStarted(boolean started) { boolean oldValue = this.started; this.started = started; listeners.firePropertyChange("started", oldValue, this.started); } - + /** * Method running * @@ -208,11 +211,15 @@ public void setProgress(int progress) { int oldValue = this.progress; this.progress = progress; + if(log.isTraceEnabled()) { + log.trace("control fire event 'progress' (" + oldValue + "/" + this.progress); + } listeners.firePropertyChange("progress", oldValue, this.progress); } /** * demande l'arret de la simulation + * @param val */ public void setStopSimulationRequest(boolean val){ boolean oldValue = this.stop; @@ -261,7 +268,7 @@ * that contains last modified field * @return */ - public Hashtable getUpdateHashtable() { + public Hashtable<String, Object> getUpdateHashtable() { Hashtable<String, Object> result = new Hashtable<String, Object>(update); update.clear(); @@ -290,37 +297,46 @@ /** * update current object from Properties representation - * + * + * @param props new properties to update from */ - public void updateFromProperties(Properties h) { + public void updateFromProperties(Properties props) { inUpdateFromHashtable = true; + + if(log.isTraceEnabled()) { + log.trace("updateFromProperties properties = " + props.toString()); + } + + // warning : props.contains("started") + // seems to not works on properties :( + // use containsKey() try { - if (h.contains("started")) { - boolean started = "true".equalsIgnoreCase(h.getProperty("started")); + if (props.containsKey("started")) { + boolean started = "true".equalsIgnoreCase(props.getProperty("started")); setStarted(started); } - if (h.contains("running")) { - boolean running = "true".equalsIgnoreCase(h.getProperty("running")); + if (props.containsKey("running")) { + boolean running = "true".equalsIgnoreCase(props.getProperty("running")); setRunning(running); } - if (h.contains("stop")) { - boolean stop = "true".equalsIgnoreCase(h.getProperty("stop")); + if (props.containsKey("stop")) { + boolean stop = "true".equalsIgnoreCase(props.getProperty("stop")); setStopSimulationRequest(stop); } - if (h.contains("date")) { - Date date = new Date(Integer.parseInt(h.getProperty("date"))); + if (props.containsKey("date")) { + Date date = new Date(Integer.parseInt(props.getProperty("date"))); setDate(date); } - if (h.contains("progressMax")) { - int progressMax = Integer.parseInt(h.getProperty("progressMax")); + if (props.containsKey("progressMax")) { + int progressMax = Integer.parseInt(props.getProperty("progressMax")); setProgressMax(progressMax); } - if (h.contains("progress")) { - int progress = Integer.parseInt(h.getProperty("progress")); + if (props.containsKey("progress")) { + int progress = Integer.parseInt(props.getProperty("progress")); setProgress(progress); } - if (h.contains("text")) { - String text = h.getProperty("text"); + if (props.containsKey("text")) { + String text = props.getProperty("text"); setText(text); } } finally { @@ -333,34 +349,34 @@ * update current object from hashtable representation * */ - public void updateFromHashtable(Hashtable h) { + public void updateFromHashtable(Hashtable<String, Object> h) { inUpdateFromHashtable = true; try { - if (h.contains("started")) { + if (h.containsKey("started")) { boolean started = (Boolean)h.get("started"); setStarted(started); } - if (h.contains("running")) { + if (h.containsKey("running")) { boolean running = (Boolean)h.get("running"); setRunning(running); } - if (h.contains("stop")) { + if (h.containsKey("stop")) { boolean stop = (Boolean)h.get("stop"); setStopSimulationRequest(stop); } - if (h.contains("date")) { + if (h.containsKey("date")) { Date date = new Date((Integer)h.get("date")); setDate(date); } - if (h.contains("progressMax")) { + if (h.containsKey("progressMax")) { int progressMax = (Integer)h.get("progressMax"); setProgressMax(progressMax); } - if (h.contains("progress")) { + if (h.containsKey("progress")) { int progress = (Integer)h.get("progress"); setProgress(progress); } - if (h.contains("text")) { + if (h.containsKey("text")) { String text = (String)h.get("text"); setText(text); } Modified: isis-fish/trunk/src/main/java/fr/ifremer/isisfish/simulator/launcher/InProcessSimulatorLauncher.java =================================================================== --- isis-fish/trunk/src/main/java/fr/ifremer/isisfish/simulator/launcher/InProcessSimulatorLauncher.java 2008-12-17 13:11:32 UTC (rev 1677) +++ isis-fish/trunk/src/main/java/fr/ifremer/isisfish/simulator/launcher/InProcessSimulatorLauncher.java 2008-12-17 13:40:51 UTC (rev 1678) @@ -60,6 +60,8 @@ import fr.ifremer.isisfish.simulator.SimulationParameter; import fr.ifremer.isisfish.simulator.SimulationPreScript; import fr.ifremer.isisfish.simulator.Simulator; +import fr.ifremer.isisfish.types.Date; +import fr.ifremer.isisfish.types.Month; /** * Fait une simulation dans la meme jvm @@ -75,22 +77,42 @@ /** to use log facility, just put in your code: log.info(\"...\"); */ static private Log log = LogFactory.getLog(InProcessSimulatorLauncher.class); + /* + * @see fr.ifremer.isisfish.simulator.launcher.SimulatorLauncher#simulate(fr.ifremer.isisfish.simulator.launcher.SimulationService, fr.ifremer.isisfish.simulator.SimulationControl, java.io.File) + */ public SimulationStorage simulate(SimulationService simulationService, SimulationControl control, File simulationZip) throws RemoteException{ + String id = control.getId(); log.info(_("simulate %s with file %s", id, simulationZip)); SimulationStorage simulation = null; + try { simulation = SimulationStorage.importAndRenameZip(simulationZip, id); + + // add missing control informations + SimulationParameter param = simulation.getParameter(); + control.setDate(new Date()); + control.setProgress(0); + control.setStarted(true); + int lastYear = param.getNumberOfYear(); + int lastDate = lastYear * Month.NUMBER_OF_MONTH; + control.setProgressMax(lastDate); + simulation = localSimulate(control, simulation); } catch (Exception eee) { log.error(_("Can't do simulation %s", id), eee); - simulation.getInformation().setException(eee); + if(simulation != null) { + simulation.getInformation().setException(eee); + } } return simulation; } + /* + * @see fr.ifremer.isisfish.simulator.launcher.SimulatorLauncher#maxSimulationThread() + */ public int maxSimulationThread() { return 1; } @@ -162,7 +184,7 @@ } } - /** + /** * Modifie le classloader du thread passé en paramètre. * <p> * Sert pour les simulations pour qu'elles puissent trouver les @@ -175,8 +197,8 @@ protected AspectClassLoader changeClassLoader(Thread thread, File directory) { try { URL [] classpath = new URL[]{directory.toURI().toURL(), - // poussin 20080821 - // il semble ne plus trouve les formules, est-ce mieux avec le compile dir ? + // poussin 20080821 + // il semble ne plus trouve les formules, est-ce mieux avec le compile dir ? IsisFish.config.getCompileDirectory().toURI().toURL() }; //URL [] classpath = new URL[]{directory.toURL()}; @@ -293,7 +315,7 @@ simulatorObject.simulate(context); // - // Ajout des nouveaux objets créées durant la simulation + // Ajout des nouveaux objets créés durant la simulation // message(control, _("isisfish.message.add.objets.simulation")); // on ajoute sur le DBResult car pour les exports peut-etre auront Modified: isis-fish/trunk/src/main/java/fr/ifremer/isisfish/simulator/launcher/SimulationJob.java =================================================================== --- isis-fish/trunk/src/main/java/fr/ifremer/isisfish/simulator/launcher/SimulationJob.java 2008-12-17 13:11:32 UTC (rev 1677) +++ isis-fish/trunk/src/main/java/fr/ifremer/isisfish/simulator/launcher/SimulationJob.java 2008-12-17 13:40:51 UTC (rev 1678) @@ -184,6 +184,8 @@ } else { // on est sur une simple simulation, ou le resultat d'un plan + /* code moved to + fr.ifremer.isisfish.simulator.launcher.InProcessSimulatorLauncher.simulate(SimulationService, SimulationControl, File) // set date to 0 at beginning of simulation control.setDate(new Date()); control.setProgress(0); @@ -191,7 +193,7 @@ int lastYear = param.getNumberOfYear(); int lastDate = lastYear * Month.NUMBER_OF_MONTH; - control.setProgressMax(lastDate); + control.setProgressMax(lastDate);*/ File zip = item.getSimulationZip(); SimulationStorage simulation = launcher.simulate(simulationService, control, zip); Modified: isis-fish/trunk/src/main/java/fr/ifremer/isisfish/simulator/launcher/SimulationService.java =================================================================== --- isis-fish/trunk/src/main/java/fr/ifremer/isisfish/simulator/launcher/SimulationService.java 2008-12-17 13:11:32 UTC (rev 1677) +++ isis-fish/trunk/src/main/java/fr/ifremer/isisfish/simulator/launcher/SimulationService.java 2008-12-17 13:40:51 UTC (rev 1678) @@ -324,6 +324,7 @@ * * @param id l'identifiant de la simulation * @param param les parametres de la simulation + * @param launcher * @param priority la priorite de la simulation */ public void submit(String id, SimulationParameter param, @@ -590,26 +591,26 @@ } /** - * Prepare les fichiers qui seront utils ? la simulation: + * Prepare les fichiers qui seront utilsé à la simulation: * <li> scripts * <li> rules * <li> exports * <li> simulators * <li> export de la database de la region * <p> - * Le tout est zipp? et le zip est retourn?, il peut-?tre directement - * import? dans le SimulationStorage (en le renomant comme il faut + * Le tout est zippé et le zip est retourné, il peut-être directement + * importé dans le SimulationStorage (en le renomant comme il faut * importAndRenameZip). * <p> - * Ce zip est automatiquement supprim? a la fin de l'application. + * Ce zip est automatiquement supprimé à la fin de l'application. * * @param control le controleur * @param param les parametre de la simulation * @param compile si vrai la version compile des fichiers Java est aussi * mise dans le fichier zip. Cela peut servir pour les simulations locales * pour ne pas recompiler pour chaque simulation avec plan d'analyse - * @return un zip de simulation pour une simulation pret a ?tre faite - * @throws SimulationException pour tout probl?me rencontr? (IO,Topia...) + * @return un zip de simulation pour une simulation pret a être faite + * @throws SimulationException pour tout problème rencontré (IO,Topia...) */ protected File prepareSimulationZipFile(SimulationControl control, SimulationParameter param, boolean compile) throws SimulationException { @@ -695,16 +696,16 @@ } /** - * Compile les fichiers pr?sent dans le r?pertoire pass? en - * parametre, ce r?pertoire est hi?rarchis? en: rules, exports, simulators - * et scripts. Seul les fichiers des 3 premiers r?pertoire sont compil? - * les fichiers du dernier sont compil? par les d?pendances qu'on les autres + * Compile les fichiers présent dans le répertoire passé en + * parametre, ce répertoire est hiérarchisé en: rules, exports, simulators + * et scripts. Seuls les fichiers des 3 premiers répertoires sont compilés + * les fichiers du dernier sont compilé par les dépendances qu'on les autres * <p> * Il permet donc de compiler facilement tous les fichiers pour une * simulation * * @param control le controleur - * @param directory le r?pertoire o? compiler + * @param directory le répertoire où compiler */ protected void compileAllFile(SimulationControl control, File directory) { @@ -713,9 +714,9 @@ // // Recherche des fichiers a compiler - // On ne prend pas les scripts, car ils sont tous copi?s mais pas - // forc?ment util. Lors de la compilation des autres fichiers, les - // script servant r?ellement seront automatiquement compil? + // On ne prend pas les scripts, car ils sont tous copiés mais pas + // forcément util. Lors de la compilation des autres fichiers, les + // script servant réellement seront automatiquement compilé List<File> fileToCompile = new ArrayList<File>(); Modified: isis-fish/trunk/src/main/java/fr/ifremer/isisfish/simulator/launcher/SimulationServiceTableModel.java =================================================================== --- isis-fish/trunk/src/main/java/fr/ifremer/isisfish/simulator/launcher/SimulationServiceTableModel.java 2008-12-17 13:11:32 UTC (rev 1677) +++ isis-fish/trunk/src/main/java/fr/ifremer/isisfish/simulator/launcher/SimulationServiceTableModel.java 2008-12-17 13:40:51 UTC (rev 1678) @@ -50,6 +50,9 @@ */ public class SimulationServiceTableModel extends AbstractTableModel { + /** serialVersionUID */ + private static final long serialVersionUID = 2414926794815727974L; + /** to use log facility, just put in your code: log.info(\"...\"); */ static private Log log = LogFactory.getLog(SimulationServiceTableModel.class); @@ -60,8 +63,9 @@ _("isisfish.queue.status"), _("isisfish.queue.progression"), }; + /** columns types */ - protected Class[] columnClass = new Class[]{ + protected Class<?>[] columnClass = new Class[]{ String.class, // id String.class, // analyse plan number String.class, // local, remote, batch @@ -157,27 +161,48 @@ return result; } + /* + * @see javax.swing.table.TableModel#getRowCount() + */ public int getRowCount() { int result = jobs.size(); return result; } + /* + * @see javax.swing.table.TableModel#getColumnCount() + */ public int getColumnCount() { int result = columnHeader.length; return result; } + /* + * @see javax.swing.table.AbstractTableModel#getColumnClass(int) + */ @Override public Class<?> getColumnClass(int columnIndex) { return columnClass[columnIndex]; } + /* + * @see javax.swing.table.AbstractTableModel#getColumnName(int) + */ @Override public String getColumnName(int column) { return columnHeader[column]; } + /* + * @see javax.swing.table.TableModel#getValueAt(int, int) + */ public Object getValueAt(int rowIndex, int columnIndex) { + + // FIXME ArrayIndexOutOfBoundException here + if(rowIndex >= jobs.size()) { + return null; + } + SimulationJob job = jobs.get(rowIndex); SimulationControl control = job.getItem().getControl(); String id = control.getId(); @@ -185,6 +210,14 @@ Object result = ""; + if(log.isDebugEnabled()) { + log.debug("Update table model : " + + "id = " + control.getId() + ", " + + "control.getProgress() = " + control.getProgress() + ", " + + "control.getProgressMax() = " + control.getProgressMax() + ", "+ + "control.getDate() = " + control.getDate()); + } + switch (columnIndex) { case 0: result = id; @@ -209,21 +242,17 @@ } break; case 3: - if (control != null) { - if (control.isStopSimulationRequest()) { - result = _("isisfish.launch.stop"); - } else { - result = control.getText(); - } + if (control.isStopSimulationRequest()) { + result = _("isisfish.launch.stop"); + } else { + result = control.getText(); } break; case 4: JProgressBar pb = getProgressBar(job); - if (control != null) { - pb.setMaximum(control.getProgressMax()); - pb.setValue(control.getProgress()); - pb.setString(control.getDate().getMonth() + "/" + control.getDate().getYear()); - } + pb.setMaximum(control.getProgressMax()); + pb.setValue(control.getProgress()); + pb.setString(control.getDate().getMonth() + "/" + control.getDate().getYear()); result = pb; break; } Modified: isis-fish/trunk/src/main/java/fr/ifremer/isisfish/simulator/launcher/SshSimulatorLauncher.java =================================================================== --- isis-fish/trunk/src/main/java/fr/ifremer/isisfish/simulator/launcher/SshSimulatorLauncher.java 2008-12-17 13:11:32 UTC (rev 1677) +++ isis-fish/trunk/src/main/java/fr/ifremer/isisfish/simulator/launcher/SshSimulatorLauncher.java 2008-12-17 13:40:51 UTC (rev 1678) @@ -197,7 +197,73 @@ } } + + protected class NonInteractiveUserInfo implements UserInfo { + protected String passphrase; + protected JTextField passphraseField = new JPasswordField(20); + protected String passwd; + protected JTextField passwordField = new JPasswordField(20); + + /** + * Constructor with password. + * + * @param passwd password + */ + public NonInteractiveUserInfo(String passwd) { + this.passwd = passwd; + } + + public boolean promptYesNo(String str) { + log.debug("promptYesNo"); + Object[] options = { "yes", "no" }; + int foo = JOptionPane.showOptionDialog(null, str, "Warning", + JOptionPane.DEFAULT_OPTION, JOptionPane.WARNING_MESSAGE, + null, options, options[0]); + return foo == 0; + } + + public String getPassphrase() { + log.debug("getPassphrase"); + return passphrase; + } + + public boolean promptPassphrase(String message) { + log.debug("promptPassphrase"); + Object[] ob = { passphraseField }; + int result = JOptionPane.showConfirmDialog(null, ob, message, + JOptionPane.OK_CANCEL_OPTION); + boolean bResult = false; + if (result == JOptionPane.OK_OPTION) { + passphrase = passphraseField.getText(); + bResult = true; + } + return bResult; + } + + public String getPassword() { + log.debug("getPassword"); + return passwd; + } + + public boolean promptPassword(String message) { + log.debug("promptPassword"); + Object[] ob = { passwordField }; + int result = JOptionPane.showConfirmDialog(null, ob, message, + JOptionPane.OK_CANCEL_OPTION); + boolean bResult = false; + if (result == JOptionPane.OK_OPTION) { + passwd = passwordField.getText(); + bResult = true; + } + return bResult; + } + + public void showMessage(String message) { + JOptionPane.showMessageDialog(null, message); + } + } + /* * @see fr.ifremer.isisfish.simulator.launcher.SimulatorLauncher#maxSimulationThread() */ @@ -276,9 +342,9 @@ Session session = jsch.getSession(username, host, port); // username and password will be given via UserInfo interface. - UserInfo ui = new MyUserInfo(password); + UserInfo ui = new NonInteractiveUserInfo(password); session.setUserInfo(ui); - session.connect(60000); + session.connect(60000); // timeout return session; } Modified: isis-fish/trunk/src/main/java/fr/ifremer/isisfish/simulator/launcher/SubProcessSimulationLauncher.java =================================================================== --- isis-fish/trunk/src/main/java/fr/ifremer/isisfish/simulator/launcher/SubProcessSimulationLauncher.java 2008-12-17 13:11:32 UTC (rev 1677) +++ isis-fish/trunk/src/main/java/fr/ifremer/isisfish/simulator/launcher/SubProcessSimulationLauncher.java 2008-12-17 13:40:51 UTC (rev 1678) @@ -20,6 +20,8 @@ package fr.ifremer.isisfish.simulator.launcher; import static org.codelutin.i18n.I18n._; + +import java.beans.PropertyChangeListener; import java.io.BufferedReader; import java.io.File; import java.io.IOException; @@ -87,9 +89,24 @@ return result; } + /** + * Display both message on UI (listeners and log). + * + * @param control + * @param message + */ + protected void message(SimulationControl control, String message) { + log.info(message); + if (control != null) { + control.setText(message); + } + } + public SimulationStorage subProcessSimulate(SimulationControl control, File simulationZip) throws Exception { + message(control, _("isisfish.message.simulation.prepare")); + String simulationId = control.getId(); // on ferme le SimulationStorage pour ne pas interferer avec le process //simulation.closeStorage(); @@ -104,20 +121,17 @@ IsisFish.class.getName(), "--option", "launch.ui", "false", "--simulateWithSimulation", simulationId, simulationZip.getAbsolutePath()); processBuilder.redirectErrorStream(true); - + // demarrage du process Process process = processBuilder.start(); if(log.isInfoEnabled()) { log.info(_("SubProcess start: %s %s", process, processBuilder.command())); } - // FIXME control can't be null here - if (control != null) { - // prepare de thread de surveillance du process si control n'est pas null - Thread monitor = new SimulationCheckpointExternalProcessThread( - control, simulationId, process); - monitor.start(); - } + // prepare de thread de surveillance du process si control n'est pas null + Thread monitor = new SimulationCheckpointExternalProcessThread( + control, simulationId, process); + monitor.start(); // on attend que la simulation soit fini process.waitFor(); @@ -156,7 +170,6 @@ this.simulationId = simulationId; this.process = process; this.out = process.getInputStream(); - } @Override @@ -189,14 +202,11 @@ // passe artificiellement le control a fini control.stopSimulation(); } + if (!control.isRunning()) { return; } } - //} catch (InterruptedException eee) { - // if(log.isDebugEnabled()) { - // log.debug("Can't update control for " + control.getId(), eee); - // } } catch (IOException e) { if(log.isErrorEnabled()) { log.error(_("isisfish.simulator.subprocess.readoutput.error"), e); Modified: isis-fish/trunk/src/main/java/fr/ifremer/isisfish/ui/simulator/SimulAction.java =================================================================== --- isis-fish/trunk/src/main/java/fr/ifremer/isisfish/ui/simulator/SimulAction.java 2008-12-17 13:11:32 UTC (rev 1677) +++ isis-fish/trunk/src/main/java/fr/ifremer/isisfish/ui/simulator/SimulAction.java 2008-12-17 13:40:51 UTC (rev 1678) @@ -615,11 +615,11 @@ return SimulationService.getService().getSimulationLaunchers(); } /** - * Launch automaticaly the simulation, when is possible (no other simulation) - * or wait for the last automaticaly simulation ended. + * Launch automatically the simulation, when is possible (no other simulation) + * or wait for the last automatically simulation ended. * * @param simulId id of the simulation to simulate - * @param inQueue flag to say put in queue + * @param launcher launcher to use */ public void simul(String simulId, SimulatorLauncher launcher) { simulId += " " + dateFormat.format(new java.util.Date()); @@ -628,7 +628,7 @@ if (simulId == null || "".equals(simulId) || SimulationStorage.localyExists(simulId) || SimulationService.getService().exists(simulId)) { - UserLog.error(_("Can't start simulation, bad id: %s", simulId)); + UserLog.error(_("isisfish.simulator.simulaction.badid", simulId)); } else { SimulationParameter p = param.copy(); Modified: isis-fish/trunk/src/main/resources/i18n/isis-fish-en_GB.properties =================================================================== --- isis-fish/trunk/src/main/resources/i18n/isis-fish-en_GB.properties 2008-12-17 13:11:32 UTC (rev 1677) +++ isis-fish/trunk/src/main/resources/i18n/isis-fish-en_GB.properties 2008-12-17 13:40:51 UTC (rev 1678) @@ -16,7 +16,6 @@ Can't\ instantiate\ %s= Can't\ open\ log\ for\ %s= Can't\ simulate\ %s= -Can't\ start\ simulation,\ bad\ id\:\ %s= Check\ state\ of\ local\ repository\:\ %s= Checkout\ pom.xml\ to\ %s= Clear\ done\ jobs= @@ -38,7 +37,7 @@ No\ database\ version\ %s\ found\ and\ can't\ get\ it.\\n= Normal\ stop\ thread,\ this\ is\ not\ an\ error= Not\ start\ simulation\ %s\ because\ user\ ask\ stop= -Region\ %s\ allready\ exist\ in\ repository.\ Cant\ import= +Region\ %s\ allready\ exist\ in\ repository.\ Can't\ import= Region\ %s\ already\ inited= Rename\ data\ directory\ to\ %s= Show\ help= @@ -276,7 +275,7 @@ isisfish.error.not.found.class=this class does not isisfish.error.not.found.code=could not found codeclass for %1$s isisfish.error.not.found.description=could not found description for %1$s -isisfish.error.not.found.field=could not found field %1$s doc for %1$s +isisfish.error.not.found.field=could not found field %1$s doc for %2$s isisfish.error.not.found.field.class=could not found field %1$s for class %2$s isisfish.error.not.null.class.grown=classe mature vaut nul isisfish.error.not.null.mean.weight=poids moyen nul @@ -563,6 +562,7 @@ isisfish.message.setting.trace.aspects=Setting Trace aspects isisfish.message.simulation.ended=Simulation ended isisfish.message.simulation.execution=Simulation execution +isisfish.message.simulation.prepare=Preparing simulation isisfish.message.tray.disabled=SystemTray disabled isisfish.message.update.finished=update finished isisfish.metier.comments=Comments @@ -695,14 +695,14 @@ isisfish.port.name=Name isisfish.preScript.backParameter=Back to parameter tab isisfish.preScript.title=Pre simulation script -isisfish.queue.id=id +isisfish.queue.id=Id isisfish.queue.launcher=Simulation launcher isisfish.queue.plan=Plan isisfish.queue.progression=Progression isisfish.queue.showLog=Show simulation log isisfish.queue.simulationLaunch=Simulation queue launch isisfish.queue.status=Status -isisfish.queue.stopSimulation= +isisfish.queue.stopSimulation=Stop simulation isisfish.queue.title=Queue isisfish.result.abundance=Abondance isisfish.result.add=Add a result @@ -714,7 +714,7 @@ isisfish.result.datasRadioButton=defaultToolTip-fr.ifremer.resultat.ResultatEdit.donneeRadioButton isisfish.result.desktopPane=defaultToolTip-fr.ifremer.resultat.ResultatView.desktopPane isisfish.result.dimension=Dimension -isisfish.result.end.simulation=En fin de Simulation\: +isisfish.result.end.simulation=Simuation end \: isisfish.result.export=Export isisfish.result.export.file=Export text file isisfish.result.file=File @@ -850,10 +850,7 @@ isisfish.simulator.launcher.inprocess=in current process isisfish.simulator.launcher.remote=on remote server isisfish.simulator.launcher.subprocess=in subprocess -isisfish.simulator.simulaction.init=Error during simulation init \: %s -isisfish.simulator.simulaction.loadOldSimulation=Can't load old simulation \: %s -isisfish.simulator.simulaction.regionChange=Can't change region \: %s -isisfish.simulator.simulaction.viewlogerror=Can't view log \: %s +isisfish.simulator.simulaction.badid=Can't start simulation, bad id\: %s isisfish.simulator.subprocess.readoutput.error= isisfish.species.age=age isisfish.species.cee=CEE Modified: isis-fish/trunk/src/main/resources/i18n/isis-fish-fr_FR.properties =================================================================== --- isis-fish/trunk/src/main/resources/i18n/isis-fish-fr_FR.properties 2008-12-17 13:11:32 UTC (rev 1677) +++ isis-fish/trunk/src/main/resources/i18n/isis-fish-fr_FR.properties 2008-12-17 13:40:51 UTC (rev 1678) @@ -16,7 +16,6 @@ Can't\ instantiate\ %s= Can't\ open\ log\ for\ %s= Can't\ simulate\ %s= -Can't\ start\ simulation,\ bad\ id\:\ %s= Check\ state\ of\ local\ repository\:\ %s= Checkout\ pom.xml\ to\ %s= Clear\ done\ jobs= @@ -38,7 +37,7 @@ No\ database\ version\ %s\ found\ and\ can't\ get\ it.\\n= Normal\ stop\ thread,\ this\ is\ not\ an\ error= Not\ start\ simulation\ %s\ because\ user\ ask\ stop= -Region\ %s\ allready\ exist\ in\ repository.\ Cant\ import= +Region\ %s\ allready\ exist\ in\ repository.\ Can't\ import= Region\ %s\ already\ inited=La r\u00E9gion %s a d\u00E9j\u00E0 \u00E9t\u00E9 initialis\u00E9e Rename\ data\ directory\ to\ %s= Show\ help= @@ -276,13 +275,13 @@ isisfish.error.not.found.class=this class does not isisfish.error.not.found.code=could not found codeclass for %1$s isisfish.error.not.found.description=could not found description for %1$s -isisfish.error.not.found.field=could not found field %1$s doc for %1$s +isisfish.error.not.found.field=could not found field %1$s doc for %2$s isisfish.error.not.found.field.class=could not found field %1$s for class %2$s isisfish.error.not.null.class.grown=classe mature vaut nul isisfish.error.not.null.mean.weight=poids moyen nul isisfish.error.not.null.natiral.death=mortalite naturelle nulle isisfish.error.not.possible.metier=Pas de m\u00E9tier possible -isisfish.error.not.support.class=this class does not support +isisfish.error.not.support.class=La classe %s ne supporte pas les descritions isisfish.error.number.classes.upper.zero=Error, the number of classes must be upper than 0 isisfish.error.obtain.analyseplan=Can't obtain description of AnalysePlan isisfish.error.obtain.doc.export=Can't obtain @Doc on class Export @@ -497,7 +496,7 @@ isisfish.log.tooltip.mailTo=Entrer l'adresse du destinataire du courriel isisfish.log.tooltip.sendAll=Envoyer toute la simulation, ou uniquement le fichier de log isisfish.log.tooltip.sendMail=Cliquer pour envoyer le courriel contentant les fichiers -isisfish.message.add.objets.simulation=Add new objets simulation +isisfish.message.add.objets.simulation=Ajout des nouveaux objets cr\u00E9\u00E9s durant la simulation isisfish.message.backup.database.finished=backup database finished isisfish.message.backup.database.progress=backup database in progress isisfish.message.cancel.finished=Cancel finished @@ -563,6 +562,7 @@ isisfish.message.setting.trace.aspects=Mise en place des aspects Trace isisfish.message.simulation.ended=Simulation termin\u00E9e isisfish.message.simulation.execution=Simulation execution +isisfish.message.simulation.prepare=Pr\u00E9paration de la simulation isisfish.message.tray.disabled=Icone de notification d\u00E9sactiv\u00E9e isisfish.message.update.finished=Mise \u00E0 jour termin\u00E9e isisfish.metier.comments=Commentaires @@ -695,20 +695,20 @@ isisfish.port.name=Nom isisfish.preScript.backParameter=Retour aux param\u00E8tres isisfish.preScript.title=Script de pr\u00E9-simulation -isisfish.queue.id=identifiant +isisfish.queue.id=Identifiant isisfish.queue.launcher=Lanceur de simulation isisfish.queue.plan=Plan isisfish.queue.progression=Progression isisfish.queue.showLog=Voir les logs de la simulation isisfish.queue.simulationLaunch=Lanceur de la queue des simulations -isisfish.queue.status=Etat -isisfish.queue.stopSimulation=Arreter la simulation +isisfish.queue.status=\u00C9tat +isisfish.queue.stopSimulation=Arr\u00EAter la simulation isisfish.queue.title=Queue isisfish.result.abundance=Abondance isisfish.result.add=Ajouter un r\u00E9sultat\= -isisfish.result.begin.simulation=En debut de Simulation\: +isisfish.result.begin.simulation=En d\u00E9but de simulation\: isisfish.result.capture=Capturer -isisfish.result.capture.metier=Capturer par metier +isisfish.result.capture.metier=Capturer par m\u00E9tier isisfish.result.choose.simulation=Choisir une simulation isisfish.result.datas=Donn\u00E9es isisfish.result.datasRadioButton=defaultToolTip-fr.ifremer.resultat.ResultatEdit.donneeRadioButton @@ -716,7 +716,7 @@ isisfish.result.dimension=Dimension isisfish.result.end.simulation=En fin de Simulation\: isisfish.result.export=Export -isisfish.result.export.file=Exporter text file +isisfish.result.export.file=Exporter un fichier texte isisfish.result.file=Fichier isisfish.result.graph=Graphe isisfish.result.graphRadioButton=defaultToolTip-fr.ifremer.resultat.ResultatEdit.graphRadioButton @@ -850,10 +850,7 @@ isisfish.simulator.launcher.inprocess=dans le m\u00EAme processus isisfish.simulator.launcher.remote=sur un serveur distant isisfish.simulator.launcher.subprocess=dans un sous processus -isisfish.simulator.simulaction.init=Erreur d'initialisation de la simulation \: %s -isisfish.simulator.simulaction.loadOldSimulation=Erreur lors du chargement d'une ancienne simulation \: %s -isisfish.simulator.simulaction.regionChange=Erreur lors du changement de region \: %s -isisfish.simulator.simulaction.viewlogerror=Erreur de visualisation des logs \: %s +isisfish.simulator.simulaction.badid=Impossible de lancer la simulation '%s' \: l'identifiant existe d\u00E9j\u00E0 \! isisfish.simulator.subprocess.readoutput.error= isisfish.species.age=age isisfish.species.cee=CEE Modified: isis-fish/trunk/src/main/resources/log4j.properties =================================================================== --- isis-fish/trunk/src/main/resources/log4j.properties 2008-12-17 13:11:32 UTC (rev 1677) +++ isis-fish/trunk/src/main/resources/log4j.properties 2008-12-17 13:40:51 UTC (rev 1678) @@ -6,12 +6,11 @@ log4j.appender.stdout.layout.ConversionPattern=%5p [%t] (%F:%L) %M - %m%n # package level -log4j.logger.fr.ifremer.isisfish=INFO +log4j.logger.fr.ifremer.isisfish=DEBUG log4j.logger.org.codelutin=INFO -log4j.logger.analyseplans=INFO -log4j.logger.exports=INFO -log4j.logger.formules=INFO -log4j.logger.rules=INFO -log4j.logger.scripts=INFO -log4j.logger.simulators=INFO -log4j.logger.fr.ifremer.isisfish.ui.input.InputNavigationTreeSelectionAdapter=DEBUG +log4j.logger.analyseplans=DEBUG +log4j.logger.exports=DEBUG +log4j.logger.formules=DEBUG +log4j.logger.rules=DEBUG +log4j.logger.scripts=DEBUG +log4j.logger.simulators=DEBUG
participants (1)
-
chatellier@users.labs.libre-entreprise.org