Author: chatellier Date: 2009-04-30 12:18:41 +0000 (Thu, 30 Apr 2009) New Revision: 2158 Modified: isis-fish/trunk/pom.xml isis-fish/trunk/src/main/java/fr/ifremer/isisfish/IsisTray.java isis-fish/trunk/src/main/java/fr/ifremer/isisfish/actions/SimulationAction.java isis-fish/trunk/src/main/java/fr/ifremer/isisfish/datastore/SimulationInformation.java isis-fish/trunk/src/main/java/fr/ifremer/isisfish/simulator/launcher/SSHSimulatorLauncher.java Log: Modify zip/unzip without export/import Modified: isis-fish/trunk/pom.xml =================================================================== --- isis-fish/trunk/pom.xml 2009-04-29 15:04:54 UTC (rev 2157) +++ isis-fish/trunk/pom.xml 2009-04-30 12:18:41 UTC (rev 2158) @@ -527,6 +527,11 @@ </links> </configuration> </plugin> + <plugin> + <groupId>org.codehaus.mojo</groupId> + <artifactId>findbugs-maven-plugin</artifactId> + <version>1.2</version> + </plugin> </plugins> </reporting> Modified: isis-fish/trunk/src/main/java/fr/ifremer/isisfish/IsisTray.java =================================================================== --- isis-fish/trunk/src/main/java/fr/ifremer/isisfish/IsisTray.java 2009-04-29 15:04:54 UTC (rev 2157) +++ isis-fish/trunk/src/main/java/fr/ifremer/isisfish/IsisTray.java 2009-04-30 12:18:41 UTC (rev 2158) @@ -1,6 +1,5 @@ /* *##% - * Copyright (C) 2007 - * Ifremer, Code Lutin, Cédric Pineau, Benjamin Poussin + * Copyright (C) 2007 - 2009 Ifremer, Code Lutin * * This program is free software; you can redistribute it and/or * modify it under the terms of the GNU General Public License @@ -17,18 +16,6 @@ * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. *##%*/ -/* * - * IsisTray.java - * - * Created: 6 janv. 07 13:52:25 - * - * @author poussin - * @version $Revision$ - * - * Last update: $Date$ - * by : $Author$ - */ - package fr.ifremer.isisfish; import static org.codelutin.i18n.I18n._; @@ -51,54 +38,72 @@ import fr.ifremer.isisfish.simulator.launcher.SimulationServiceListener; /** + * IsisTray.java + * + * Created: 6 janv. 07 13:52:25 + * * @author poussin + * @version $Revision$ * + * Last update: $Date$ + * by : $Author$ */ -public abstract class IsisTray implements SimulationServiceListener, PropertyChangeListener { +public abstract class IsisTray implements SimulationServiceListener, + PropertyChangeListener { /** to use log facility, just put in your code: log.info(\"...\"); */ - protected static Log log = LogFactory.getLog(IsisTray.class); + protected static final Log log = LogFactory.getLog(IsisTray.class); protected static final ImageIcon TRAY_IMAGE_STOP = Resource.getIcon("/images/BulbR.gif"); protected static final ImageIcon TRAY_IMAGE_START = Resource.getIcon("/images/BulbG.gif"); - - static final public String NO_SIMULATION_TEXT = n_("isisfish.tray.simulation.no"); - /** text a utiliser pour afficher l'etat de la simulation en cours + + private static final String NO_SIMULATION_TEXT = n_("isisfish.tray.simulation.no"); + + /** + * Texte a utiliser pour afficher l'etat de la simulation en cours. + * * <li>0 = id de simulation * <li>1 = pas de temps courant de la simulation * <li>2 = nombre total de pas de temps attendu */ - static final public String SIMULATION_TEXT = n_("isisfish.tray.simulation"); - - static protected IsisTray instance = null; - - abstract public void setImage(ImageIcon image); - abstract public void setToolTip(String text); - - static public IsisTray getInstance() { + private static final String SIMULATION_TEXT = n_("isisfish.tray.simulation"); + + private static IsisTray instance = null; + + public abstract void setImage(ImageIcon image); + + public abstract void setToolTip(String text); + + public static IsisTray getInstance() { if (instance == null) { if (AWTSystemTray.isSupported()) { instance = new AWTSystemTray(); } else { instance = new DummySystemTray(); } - log.info("Use System tray: " + instance.getClass().getName()); + if (log.isInfoEnabled()) { + log.info("Use System tray: " + instance.getClass().getName()); + } instance.setToolTip(_(NO_SIMULATION_TEXT)); - SimulationService.getService().addSimulationServiceListener(instance); + SimulationService.getService().addSimulationServiceListener( + instance); } return instance; } - - /* (non-Javadoc) + + /* * @see fr.ifremer.isisfish.simulator.SimulationQueueListener#simulationStart(fr.ifremer.isisfish.simulator.SimulationQueueEvent) */ 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())); + getInstance().setToolTip( + _(SIMULATION_TEXT, control.getId(), control.getProgress(), + control.getProgressMax())); getInstance().setImage(TRAY_IMAGE_START); } - /* (non-Javadoc) + + /* * @see fr.ifremer.isisfish.simulator.SimulationQueueListener#simulationStop(fr.ifremer.isisfish.simulator.SimulationQueueEvent) */ public void simulationStop(SimulationService simService, SimulationJob job) { @@ -111,51 +116,54 @@ public void clearJobDone(SimulationService simService) { // nothing to do } - - /* (non-Javadoc) + + /* * @see java.beans.PropertyChangeListener#propertyChange(java.beans.PropertyChangeEvent) */ public void propertyChange(PropertyChangeEvent evt) { - SimulationControl control = (SimulationControl)evt.getSource(); - getInstance().setToolTip(_(SIMULATION_TEXT, control.getId(), control.getProgress(), control.getProgressMax())); + SimulationControl control = (SimulationControl) evt.getSource(); + getInstance().setToolTip( + _(SIMULATION_TEXT, control.getId(), control.getProgress(), + control.getProgressMax())); } - + static class DummySystemTray extends IsisTray { - /* (non-Javadoc) + /* * @see fr.ifremer.isisfish.IsisTray#setImage(javax.swing.ImageIcon) */ @Override public void setImage(ImageIcon image) { } - /* (non-Javadoc) + /* * @see fr.ifremer.isisfish.IsisTray#setToolTip(java.lang.String) */ @Override - public void setToolTip(String text) { + public void setToolTip(String text) { } - + } - + static class AWTSystemTray extends IsisTray { protected java.awt.TrayIcon trayIcon = null; - + static public boolean isSupported() { boolean result = SystemTray.isSupported(); return result; } - + @Override public void setImage(ImageIcon image) { trayIcon.setImage(image.getImage()); } + @Override public void setToolTip(String text) { trayIcon.setToolTip(text); } - - public AWTSystemTray() { + + public AWTSystemTray() { if (SystemTray.isSupported()) { // get the SystemTray instance SystemTray tray = SystemTray.getSystemTray(); @@ -179,7 +187,8 @@ popup.add(defaultItem);*/ /// ... add other items // construct a TrayIcon - trayIcon = new java.awt.TrayIcon(TRAY_IMAGE_STOP.getImage(), "Tray Demo", null); + trayIcon = new java.awt.TrayIcon(TRAY_IMAGE_STOP.getImage(), + "Tray Demo", null); trayIcon.setImageAutoSize(true); // set the TrayIcon properties //trayIcon.addActionListener(trayListener); 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 2009-04-29 15:04:54 UTC (rev 2157) +++ isis-fish/trunk/src/main/java/fr/ifremer/isisfish/actions/SimulationAction.java 2009-04-30 12:18:41 UTC (rev 2158) @@ -23,11 +23,13 @@ import java.io.File; import java.io.FileInputStream; +import java.util.Collections; import java.util.Properties; import org.apache.commons.logging.Log; import org.apache.commons.logging.LogFactory; import org.codelutin.util.FileUtil; +import org.codelutin.util.ZipUtil; import org.codelutin.util.ApplicationConfig.Action.Step; import fr.ifremer.isisfish.IsisConfig; @@ -71,8 +73,12 @@ File region) throws Exception { Properties props = new Properties(); FileInputStream inStream = new FileInputStream(parameterFile); - props.load(inStream); - inStream.close(); + try { + props.load(inStream); + } + finally { + inStream.close(); + } SimulationParameter params = new SimulationParameter(); params.fromProperties(SimulationStorage.getSimulationDirectory(), @@ -162,11 +168,17 @@ SimulationStorage simulationStorage = launcher.getSimulationStorage(SimulationService.getService(), control); // zip + md5 creation - simulationStorage.createZip(simulationResultZip, true); - + //simulationStorage.createZip(simulationResultZip, true); // close all resources + //simulationStorage.getStorage().closeContext(); + + // FIXME more performant than simulationStorage.createZip + //ZipUtil.compressFiles(simulationResultZip, simulationStorage.getFile(), + // Collections.singletonList(new File(simulationStorage.getFile(), simulationStorage.getName())), true); + ZipUtil.compress(simulationResultZip, simulationStorage.getFile(), null, true); + simulationStorage.getStorage().closeContext(); - + // remove simulation simulationStorage.delete(false); 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 2009-04-29 15:04:54 UTC (rev 2157) +++ isis-fish/trunk/src/main/java/fr/ifremer/isisfish/datastore/SimulationInformation.java 2009-04-30 12:18:41 UTC (rev 2158) @@ -1,6 +1,5 @@ /* *##% - * Copyright (C) 2007 - * Ifremer, Code Lutin, Cédric Pineau, Benjamin Poussin + * Copyright (C) 2007 - 2009 Ifremer, Code Lutin * * This program is free software; you can redistribute it and/or * modify it under the terms of the GNU General Public License @@ -17,18 +16,6 @@ * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. *##%*/ -/* * - * SimulationInformation.java - * - * Created: 22 mars 07 11:01:01 - * - * @author poussin - * @version $Revision$ - * - * Last update: $Date$ - * by : $Author$ - */ - package fr.ifremer.isisfish.datastore; import static org.codelutin.i18n.I18n._; @@ -50,7 +37,6 @@ import org.apache.commons.logging.Log; import org.apache.commons.logging.LogFactory; - /** * Cette classe permet de conserver des informations sur le deroulement d'une * simulation. La plupart des informations sont automatiquement renseignees, @@ -58,6 +44,10 @@ * {@link #addInformation(String)} * * @author poussin + * @version $Revision$ + * + * Last update: $Date$ + * by : $Author$ */ public class SimulationInformation { @@ -84,7 +74,9 @@ this.file = file; if (file.exists()) { try { - info.load(new FileReader(file)); + FileReader reader = new FileReader(file); + info.load(reader); + reader.close(); } catch (IOException eee) { if (log.isWarnEnabled()) { log.warn(_("isisfish.error.read.simulation", file.getPath()), eee); @@ -93,7 +85,7 @@ } } - /* (non-Javadoc) + /* * @see java.lang.Object#toString() */ @Override @@ -131,7 +123,9 @@ protected void store() { try { - info.store(new FileWriter(file), "Simulation Information"); + FileWriter writer = new FileWriter(file); + info.store(writer, "Simulation Information"); + writer.close(); } catch (IOException eee) { if (log.isWarnEnabled()) { log.warn(_("isisfish.error.write.simulation", file.getPath()), eee); @@ -217,7 +211,7 @@ } } if (value == null) { - value = new Long(0); + value = Long.valueOf(0); } result.put(exportName, value); } 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 2009-04-29 15:04:54 UTC (rev 2157) +++ isis-fish/trunk/src/main/java/fr/ifremer/isisfish/simulator/launcher/SSHSimulatorLauncher.java 2009-04-30 12:18:41 UTC (rev 2158) @@ -23,6 +23,7 @@ import java.io.File; import java.io.FileInputStream; import java.io.IOException; +import java.io.InputStream; import java.io.StringWriter; import java.io.Writer; import java.rmi.RemoteException; @@ -36,10 +37,10 @@ import org.apache.commons.lang.StringUtils; import org.apache.commons.logging.Log; import org.apache.commons.logging.LogFactory; -import org.codelutin.topia.TopiaException; import org.codelutin.util.FileUtil; import org.codelutin.util.MD5; import org.codelutin.util.MD5InputStream; +import org.codelutin.util.ZipUtil; import com.jcraft.jsch.JSch; import com.jcraft.jsch.JSchException; @@ -184,6 +185,9 @@ public void simulationStarted() { try { semaphore.acquire(); + if (log.isDebugEnabled()) { + log.debug("Semaphore have now " + semaphore.availablePermits() + " available resources"); + } } catch (InterruptedException e) { if (log.isErrorEnabled()) { log.error("Semaphore aquiere has been interrupted", e); @@ -196,6 +200,9 @@ */ protected void simulationEnded() { semaphore.release(); + if (log.isDebugEnabled()) { + log.debug("Semaphore have now " + semaphore.availablePermits() + " available resources"); + } } /** @@ -203,7 +210,7 @@ */ @Override public void simulationStopRequest() { - semaphore.release(); + simulationEnded(); } /** @@ -346,7 +353,9 @@ // mais qu'elle a demandée a être arrêté simulationEnded(); - SimulationStorage.importZip(resultZipFile); + // FIXME too slow methods + //SimulationStorage.importZip(resultZipFile); + ZipUtil.uncompress(resultZipFile, SimulationStorage.getSimulationDirectory()); if (log.isDebugEnabled()) { log.debug("Simulation imported : " + resultZipFile.getAbsolutePath()); @@ -373,11 +382,11 @@ if (log.isDebugEnabled()) { log.debug(_("Error while downloading file : %s", e.getMessage())); } - } catch (TopiaException e) { + } /*catch (TopiaException e) { if (log.isErrorEnabled()) { log.error("Can't import result zip file", e); } - } + }*/ // INFORMATION file try { @@ -392,7 +401,13 @@ // on dit juste que la simulation a eu une demande // d'arret pour qu'elle s'arrete dans l'UI Properties infoProperties = new Properties(); - infoProperties.load(new FileInputStream(infoFile)); + InputStream isInfoFile = new FileInputStream(infoFile); + try { + infoProperties.load(isInfoFile); + } + finally { + isInfoFile.close(); + } if (!StringUtils.isEmpty(infoProperties .getProperty("exception"))) { synchronized (control) { @@ -649,7 +664,7 @@ String remoteFile = getRemoteResultZipPath(simulationId); SSHUtils.scpFrom(session, remoteFile, localFile); - + if (!StringUtils.isEmpty(md5sum)) { MD5InputStream in = new MD5InputStream(new FileInputStream(localFile)); while(in.read() != -1) {}