r3684 - trunk/src/main/java/fr/ifremer/isisfish/simulator/launcher
Author: echatellier Date: 2012-04-24 18:27:53 +0200 (Tue, 24 Apr 2012) New Revision: 3684 Url: http://forge.codelutin.com/repositories/revision/isis-fish/3684 Log: Fix synchronized code on jobs Modified: trunk/src/main/java/fr/ifremer/isisfish/simulator/launcher/SimulationServiceTableModel.java Modified: trunk/src/main/java/fr/ifremer/isisfish/simulator/launcher/SimulationServiceTableModel.java =================================================================== --- trunk/src/main/java/fr/ifremer/isisfish/simulator/launcher/SimulationServiceTableModel.java 2012-04-24 11:50:00 UTC (rev 3683) +++ trunk/src/main/java/fr/ifremer/isisfish/simulator/launcher/SimulationServiceTableModel.java 2012-04-24 16:27:53 UTC (rev 3684) @@ -122,14 +122,9 @@ synchronized (jobs) { int index = jobs.indexOf(job); if (index >= 0) { - - // fire before, because of multithreaded update, - // get value at will get arrayindexoutofboundexception - // because fire and remove are not atomic - fireTableRowsDeleted(index, index); - jobs.remove(index); jobIds.remove(id); + fireTableRowsDeleted(index, index); } } } @@ -214,66 +209,68 @@ */ public Object getValueAt(int rowIndex, int columnIndex) { - SimulationJob job = jobs.get(rowIndex); - SimulationControl control = job.getItem().getControl(); - String id = control.getId(); - SimulationParameter param = job.getItem().getParameter(); - Object result = ""; - if (log.isTraceEnabled()) { - log.trace("Update table model : " + "id = " + control.getId() - + ", " + "control.getProgress() = " + control.getProgress() - + ", " + "control.getProgressMax() = " - + control.getProgressMax() + ", " + "control.getDate() = " - + control.getStep()); - } + synchronized (jobs) { + SimulationJob job = jobs.get(rowIndex); + SimulationControl control = job.getItem().getControl(); + String id = control.getId(); + SimulationParameter param = job.getItem().getParameter(); - switch (columnIndex) { - case 0: - result = id; - break; - case 1: - if (param.getUseSimulationPlan()) { - int number = param.getSimulationPlanNumber(); - if (number >= 0) { - result = number; - } + if (log.isTraceEnabled()) { + log.trace("Update table model : " + "id = " + control.getId() + + ", " + "control.getProgress() = " + control.getProgress() + + ", " + "control.getProgressMax() = " + + control.getProgressMax() + ", " + "control.getDate() = " + + control.getStep()); } - break; - case 2: - if (job.getLauncher() == null) { + + switch (columnIndex) { + case 0: + result = id; + break; + case 1: if (param.getUseSimulationPlan()) { - result = _("isisfish.queue.masterplan"); + int number = param.getSimulationPlanNumber(); + if (number >= 0) { + result = number; + } + } + break; + case 2: + if (job.getLauncher() == null) { + if (param.getUseSimulationPlan()) { + result = _("isisfish.queue.masterplan"); + } else { + result = _("isisfish.queue.notstarted"); + } } else { - result = _("isisfish.queue.notstarted"); + result = job.getLauncher().toString(); } - } else { - result = job.getLauncher().toString(); + break; + case 3: + if (control.isStopSimulationRequest()) { + result = _("isisfish.launch.stop"); + } else { + result = control.getText(); + } + break; + case 4: + JProgressBar pb = getProgressBar(job); + pb.setMaximum((int) control.getProgressMax()); + pb.setValue((int) control.getProgress()); + + // progress can be used for other things + TimeStep step = control.getStep(); + if (step != null) { + pb.setString(step.getMonth() + "/" + step.getYear()); + } + else { + pb.setString(""); + } + result = pb; + break; } - break; - case 3: - if (control.isStopSimulationRequest()) { - result = _("isisfish.launch.stop"); - } else { - result = control.getText(); - } - break; - case 4: - JProgressBar pb = getProgressBar(job); - pb.setMaximum((int) control.getProgressMax()); - pb.setValue((int) control.getProgress()); - - // progress can be used for other things - TimeStep step = control.getStep(); - if (step != null) { - pb.setString(step.getMonth() + "/" + step.getYear()); - } - else { - pb.setString(""); - } - result = pb; - break; } return result; }
participants (1)
-
echatellier@users.forge.codelutin.com