diff --git a/src/mustic/gui/ClassificationImage.java b/src/mustic/gui/ClassificationImage.java index 45ef0592e98febed69e3d2bd85e845ad9d8b9073..a739962ed5b5019785625fe6201c2652a6b2f63e 100644 --- a/src/mustic/gui/ClassificationImage.java +++ b/src/mustic/gui/ClassificationImage.java @@ -1,101 +1,103 @@ -package mustic.gui; - -import java.lang.management.ManagementFactory; -import java.util.ArrayList; - -import javax.swing.ImageIcon; -import javax.swing.WindowConstants; - -import jcl.Classification; -import jcl.data.attribute.AttributeMultiDimSequence; -import jcl.learning.methods.multistrategy.samarah4.comm.ClassificationSAM4; -import mustic.gui.panels.ImageResultPanel; -import mustic.io.ImageData; -import mustic.models.gui.ClassificationModel; -import mustic.models.gui.panels.ResultPanel; -import net.infonode.tabbedpanel.Tab; -import net.infonode.tabbedpanel.TabbedPanel; - -public class ClassificationImage extends ClassificationModel { - /** */ - private static final long serialVersionUID = 1L; - - - /** */ - public ArrayList results = new ArrayList(); - - /** - * - * @param aRawImage - * @param data - * @param title - */ - public ClassificationImage(DataSession session, String title) { - super(session, title, false); - } - - public ClassificationImage(DataSession session, String title, boolean justData) { - super(session, title, justData); - } - - /** - * - */ - @Override - public void addResult(Classification result, String title) { - this.addResult(result, title, this.tabbedPane); - } - - @Override - synchronized public void addResult(Classification result, String title, - TabbedPanel pane) { - ResultPanel rpanel = null; - if (data instanceof ImageData) { - rpanel = new ImageResultPanel(session, result, this, ((ImageData) data)); - } else { - rpanel = new ResultPanel(result, this); - } - rpanel.setName(title); - resultPanels.add(rpanel); - - Tab t1 = ClassificationModel.createTab(title, new ImageIcon(getClass() - .getResource("/icons/actions/document-open-result.png")), //$NON-NLS-1$ - rpanel, true); - - pane.addTab(t1); - t1.setSelected(true); - } - - @Override - public void doOperationAfterClassification(Classification result) { - if (!result.isHybrid() && !(result instanceof ClassificationSAM4)) { - if (result.getTimeExec() != 0) - result.setTimeExec(ManagementFactory.getThreadMXBean() - .getCurrentThreadCpuTime()); - this.results.add(result); - this.addResult(result, Messages.getString("ClassificationImage.1") + ResultPanel.nbResult++); //$NON-NLS-1$ - ResultPanel irp = (ResultPanel) this.tabbedPane.getTabAt( - this.tabbedPane.getTabCount() - 1).getContentComponent(); - irp.historique.addInfosln(Messages.getString("ClassificationImage.2")); //$NON-NLS-1$ - if (result.getData().getOneDataObject().getAttribute(0) instanceof AttributeMultiDimSequence) { - irp.historique.addInfosln(Messages.getString("ClassificationImage.3")); //$NON-NLS-1$ - if (result.getData().getDataFilesName().size() > 0) { - irp.historique.addInfosln(result.getData().getDataFilesName().get(0)); - } - } else - irp.historique.addInfosln(Messages.getString("ClassificationImage.4") //$NON-NLS-1$ - + result.getData().getDataName() + "\n"); //$NON-NLS-1$ - - if (result.getLearningMethod() != null) - irp.historique.addInfosln(result.getLearningMethod() - .getParameters().toString()); - - if (result.getTimeExec() != 0) { - long exec = result.getTimeExec(); - irp.historique.addInfosln(Messages.getString("ClassificationImage.6") //$NON-NLS-1$ - + (exec / 1.0E9) + "s"); //$NON-NLS-1$ - } - } - } - -} +package mustic.gui; + +import java.lang.management.ManagementFactory; +import java.text.SimpleDateFormat; +import java.util.ArrayList; +import java.util.Date; +import java.util.Iterator; + +import javax.swing.ImageIcon; +import javax.swing.WindowConstants; + +import jcl.Classification; +import jcl.data.attribute.AttributeMultiDimSequence; +import jcl.learning.methods.multistrategy.samarah4.comm.ClassificationSAM4; +import mustic.gui.panels.ImageResultPanel; +import mustic.io.ImageData; +import mustic.models.gui.ClassificationModel; +import mustic.models.gui.panels.ResultPanel; +import net.infonode.tabbedpanel.Tab; +import net.infonode.tabbedpanel.TabbedPanel; + +public class ClassificationImage extends ClassificationModel { + /** */ + private static final long serialVersionUID = 1L; + + + /** */ + public ArrayList results = new ArrayList(); + + /** + * + * @param aRawImage + * @param data + * @param title + */ + public ClassificationImage(DataSession session, String title) { + super(session, title, false); + } + + public ClassificationImage(DataSession session, String title, boolean justData) { + super(session, title, justData); + } + + @Override + public void addResult(Classification result, String title) { + this.addResult(result, title, this.tabbedPane); + } + + @Override + synchronized public void addResult(Classification result, String title, + TabbedPanel pane) { + ResultPanel rpanel = null; + if (data instanceof ImageData) { + rpanel = new ImageResultPanel(session, result, this, ((ImageData) data)); + } else { + rpanel = new ResultPanel(result, this); + } + rpanel.setName(title); + resultPanels.add(rpanel); + Tab t1 = ClassificationModel.createTab(title, new ImageIcon(getClass() + .getResource("/icons/actions/document-open-result.png")), //$NON-NLS-1$ + rpanel, true); + pane.addTab(t1); + t1.setSelected(true); + } + + @Override + public void doOperationAfterClassification(Classification result) { + // Monitoring the operation status + result.setStatus("Step "+ (result.getProgressableList().size()+1) + "/" + (result.getProgressableList().size()+1) + " : Displaying"); + + if (!result.isHybrid() && !(result instanceof ClassificationSAM4)) { + if (result.getTimeExec() != 0) + result.setTimeExec(ManagementFactory.getThreadMXBean() + .getCurrentThreadCpuTime()); + this.results.add(result); + this.addResult(result, Messages.getString("ClassificationImage.1") + ResultPanel.nbResult++); //$NON-NLS-1$ + ResultPanel irp = (ResultPanel) this.tabbedPane.getTabAt( + this.tabbedPane.getTabCount() - 1).getContentComponent(); + irp.historique.addInfosln(Messages.getString("ClassificationImage.2")); //$NON-NLS-1$ + if (result.getData().getOneDataObject().getAttribute(0) instanceof AttributeMultiDimSequence) { + irp.historique.addInfosln(Messages.getString("ClassificationImage.3")); //$NON-NLS-1$ + if (result.getData().getDataFilesName().size() > 0) { + irp.historique.addInfosln(result.getData().getDataFilesName().get(0)); + } + } else + irp.historique.addInfosln(Messages.getString("ClassificationImage.4") //$NON-NLS-1$ + + result.getData().getDataName() + "\n"); //$NON-NLS-1$ + + if (result.getLearningMethod() != null) + irp.historique.addInfosln(result.getLearningMethod() + .getParameters().toString()); + + if (result.getTimeExec() != 0) { + long exec = result.getTimeExec(); + irp.historique.addInfosln(Messages.getString("ClassificationImage.6") //$NON-NLS-1$ + + (exec / 1.0E9) + "s"); //$NON-NLS-1$ + } + + } + } + +} diff --git a/src/mustic/gui/MainFrame.java b/src/mustic/gui/MainFrame.java index 6e5d608b86310b486f33fa6ba4ab10881da43463..1caecfb37365d5f443533208153c1895991d64f3 100644 --- a/src/mustic/gui/MainFrame.java +++ b/src/mustic/gui/MainFrame.java @@ -3967,7 +3967,7 @@ public class MainFrame extends JFrame { true); - t = new ClassificationThread(classif, classificationImage.getProgressBar(), + t = new ClassificationThread(classif, classificationImage.getProgressBar(),classificationImage.getStatusBar(), classificationImage, null, false, null); t.start(); try { diff --git a/src/mustic/gui/panels/ImageResultPanel.java b/src/mustic/gui/panels/ImageResultPanel.java index 34cae5f83fc740c366144eb65614a052ed19656f..45c59a544e86f7c2afca1944722e7483b756998e 100644 --- a/src/mustic/gui/panels/ImageResultPanel.java +++ b/src/mustic/gui/panels/ImageResultPanel.java @@ -4,6 +4,8 @@ import java.awt.*; import java.awt.event.*; import java.awt.image.*; import java.io.*; +import java.text.SimpleDateFormat; +import java.util.Date; import java.util.Observable; import java.util.Observer; import java.util.Vector; @@ -201,7 +203,6 @@ public class ImageResultPanel extends ResultPanel implements TreeSelectionListen imgData.getHeight(), result.getClusterMap(false), this.result.getClusters()); this.classPanel.addTreeSelectionListener(this); - if (imgData.getRawImages() != null && imgData.getRawImages().size() > 0) { this.viewer = new ClusteringImageViewer(new GDALPyramidImageViewer( imgData.getRawImages().get(0), true), this.clusterMap); diff --git a/src/mustic/gui/panels/classifier/ClassifierPanel.java b/src/mustic/gui/panels/classifier/ClassifierPanel.java index 5d1af0625759c7720f6d823ad996ab91ce4146de..6d4c6d96afba58de3fb1a0d4f4ff6bc29cbd0f64 100644 --- a/src/mustic/gui/panels/classifier/ClassifierPanel.java +++ b/src/mustic/gui/panels/classifier/ClassifierPanel.java @@ -695,8 +695,7 @@ public class ClassifierPanel extends JPanel { if (this.timeCheckBox.isSelected()) { classification.setTimeExec(1); } - - new ClassificationThread(classification, classificationImage.getProgressBar(), + new ClassificationThread(classification, classificationImage.getProgressBar(),classificationImage.getStatusBar(), classificationImage, this.rmiServer, false, null).start(); try { dataSession.associatedFrame.setMaximum(true); @@ -717,6 +716,7 @@ public class ClassifierPanel extends JPanel { // On lance le thread de classif new ClassificationThread(classification, ((ClassificationModel) this.container_).getProgressBar(), + ((ClassificationModel) this.container_).getStatusBar(), (ClassificationModel) this.container_, this.rmiServer, false, null).start(); } diff --git a/src/mustic/gui/panels/data/DataConstructPanel.java b/src/mustic/gui/panels/data/DataConstructPanel.java index 7ae9411f32358d98078491622d55ad1e0fa783a2..91ae32a6b23bafae36816ac5d2efc332f7e30400 100644 --- a/src/mustic/gui/panels/data/DataConstructPanel.java +++ b/src/mustic/gui/panels/data/DataConstructPanel.java @@ -124,32 +124,37 @@ public class DataConstructPanel extends JPanel implements ToUpdateObject { } private void generateData() { - ImageData data = null; - - if (sourcePanel.isSequenceMaskSelected() && sample instanceof ImageSampler - && imageSessions != null) { - List maskSequence = new ArrayList(); - boolean containsAtLeastOne = false; - for (ImageSession session : imageSessions) { - Mask m = session.getRawImage().getMask(); - maskSequence.add(m); - if (m != null) { - containsAtLeastOne = true; + new Thread() { + @Override + public void run() { + ImageData data = null; + + if (sourcePanel.isSequenceMaskSelected() && sample instanceof ImageSampler + && imageSessions != null) { + List maskSequence = new ArrayList(); + boolean containsAtLeastOne = false; + for (ImageSession session : imageSessions) { + Mask m = session.getRawImage().getMask(); + maskSequence.add(m); + if (m != null) { + containsAtLeastOne = true; + } + } + if (containsAtLeastOne) { + ((ImageSampler) sample).setMaskSequence(maskSequence); + } } + if (filesPaths.size() > 1) { + data = new ImageData(sample, filesPaths); + } else { + data = new ImageData(sample, filesPaths.get(0)); + } + MainFrame.getInstance().createDataSession(data); + + DataConstructFrame.getInstance().updateDataConstructPanel(); + DataConstructFrame.getInstance().dispose(); } - if (containsAtLeastOne) { - ((ImageSampler) sample).setMaskSequence(maskSequence); - } - } - if (filesPaths.size() > 1) { - data = new ImageData(sample, filesPaths); - } else { - data = new ImageData(sample, filesPaths.get(0)); - } - MainFrame.getInstance().createDataSession(data); - - DataConstructFrame.getInstance().updateDataConstructPanel(); - DataConstructFrame.getInstance().dispose(); + }.start(); } public void updateSamplingSelectionPanel() { diff --git a/src/mustic/gui/panels/data/DataPanel.java b/src/mustic/gui/panels/data/DataPanel.java index fe30b59a406ee700d008bae9878e44874cc7f1b7..f2381317eb574f31487faf807f10cdf8802c9a68 100755 --- a/src/mustic/gui/panels/data/DataPanel.java +++ b/src/mustic/gui/panels/data/DataPanel.java @@ -137,7 +137,8 @@ public class DataPanel extends JPanel implements ChangeListener { this.data = _data; JPanel container = buildBody(); - JScrollPane sp = new JScrollPane(container); +// JScrollPane sp = new JScrollPane(container); + JPanel sp = container;//no scroll bars for better visibility JPanel dataPane = new JPanel(new BorderLayout()); // dataPane.setSize(700, 500); dataPane.setPreferredSize(new Dimension(700,500)); diff --git a/src/mustic/io/ImageData.java b/src/mustic/io/ImageData.java index 1beb4af41f07af2996888f1e6483ef9ed5aa0eb0..d6a519e2fbb19150b536ce5985f8714eda5af50c 100644 --- a/src/mustic/io/ImageData.java +++ b/src/mustic/io/ImageData.java @@ -13,6 +13,7 @@ import jcl.data.sampling.Sampler; import jcl.utils.exceptions.MethodNotImplementedException; import mustic.gui.ImageSession; import mustic.gui.MainFrame; +import mustic.models.thread.ProgressThreadJCL; import mustic.utils.jclAdapters.ImageSampler; /** @@ -108,7 +109,7 @@ public class ImageData extends SimpleData implements Serializable { // Pierre if (MainFrame.DEBUG_MODE == true) - System.out.println(" JJJ Création de dataObject[] à partir d'une image " + this.hashCode()); + System.out.println(" Création de dataObject[] à partir d'une image " + this.hashCode()); // double[][][] buffer = image.getData();//image.load(0, 0, // image.getWidth(), image.getHeight()); @@ -225,7 +226,7 @@ public class ImageData extends SimpleData implements Serializable { /** *

- * Construcor from an already built set of DataObject of a sampler, + * Constructor from an already built set of DataObject of a sampler, * the path is only used to gather the image informations *

* @@ -240,9 +241,7 @@ public class ImageData extends SimpleData implements Serializable { if (MainFrame.DEBUG_MODE) { System.out.println(">> ImageData(Sampler,String) <<"); } - - MainFrame.getProgressStatus().setMessage("loading sampler..."); - + this.rawImages.add(path); long startTime = System.currentTimeMillis(); @@ -269,7 +268,8 @@ public class ImageData extends SimpleData implements Serializable { dimensions[0] = rawImages.get(0).width; dimensions[1] = rawImages.get(0).height; -// new ProgressThreadJCL(sampler, MainFrame.getProgressBar(), MainFrame.getProgressStatus()).start(); + new ProgressThreadJCL(sampler, MainFrame.getProgressBar(), MainFrame.getProgressStatus()).start(); + if (mask != null) { currentView = sampler.getDataObjects(mask); } else { @@ -294,7 +294,7 @@ public class ImageData extends SimpleData implements Serializable { /** *

- * Construcor from an already built set of DataObject of a sampler, + * Constructor from an already built set of DataObject of a sampler, * the path is only used to gather the image informations *

* @@ -322,6 +322,7 @@ public class ImageData extends SimpleData implements Serializable { * a mask to apply to the sampler */ public ImageData(Sampler sampler, Vector images, Mask mask) { + for(RawImage s : images) { this.rawImages.add(s); } diff --git a/src/mustic/models/gui/ClassificationFrame.java b/src/mustic/models/gui/ClassificationFrame.java index 407a8011e230d48e4879694980a218bd5760eac2..9fe84aa4a2e14c4744471c2c3caa1b86392d6303 100755 --- a/src/mustic/models/gui/ClassificationFrame.java +++ b/src/mustic/models/gui/ClassificationFrame.java @@ -44,7 +44,6 @@ public class ClassificationFrame extends ClassificationModel { ResultPanel rp = new ResultPanel(result, this); rp.setName(name); resultPanels.add(rp); - Tab tabResult = ClassificationModel.createTab( result.getName(), new ImageIcon(getClass().getResource( diff --git a/src/mustic/models/gui/ClassificationModel.java b/src/mustic/models/gui/ClassificationModel.java index 8e7dc7517fa67b90594e58b56ec897f3dc1209b3..cfb43daffb4fb91284c40faf90fa3ae4d19d616e 100644 --- a/src/mustic/models/gui/ClassificationModel.java +++ b/src/mustic/models/gui/ClassificationModel.java @@ -33,6 +33,7 @@ import mustic.models.gui.panels.HybridClassificationMonitor; import mustic.models.gui.panels.MaclawClassificationMonitor; import mustic.models.gui.panels.ResultPanel; import mustic.models.gui.widgets.ClassificationManager; +import mustic.utils.tools.ProgressStatus; import net.infonode.tabbedpanel.Tab; import net.infonode.tabbedpanel.TabDragEvent; import net.infonode.tabbedpanel.TabEvent; @@ -289,6 +290,10 @@ public abstract class ClassificationModel extends JPanel { public JProgressBar getProgressBar() { return MainFrame.getProgressBar(); } + + public ProgressStatus getStatusBar() { + return MainFrame.getProgressStatus(); + } /** *

diff --git a/src/mustic/models/gui/panels/ClassifierPanel.java b/src/mustic/models/gui/panels/ClassifierPanel.java index 014994465846ae97b8e67f32a2f47b418dbe0f46..9e9b1e8f58e577d165a1c6894e4e30bd5944ae1e 100755 --- a/src/mustic/models/gui/panels/ClassifierPanel.java +++ b/src/mustic/models/gui/panels/ClassifierPanel.java @@ -534,7 +534,7 @@ public class ClassifierPanel extends JPanel { System.out.println("DEBUT CLASSIF"); /* On lance le thread de classification */ new ClassificationThread(classification, - this.container_.getProgressBar(), this.container_, + this.container_.getProgressBar(),this.container_.getStatusBar(), this.container_, this.rmiServer, false, null).start(); } diff --git a/src/mustic/models/thread/ClassificationThread.java b/src/mustic/models/thread/ClassificationThread.java index b6c049dbc73f0a5e9e541012a056c3f2beca4ef0..de4eb5abdad60f18ffee894d7eb193f6a4dea3a8 100755 --- a/src/mustic/models/thread/ClassificationThread.java +++ b/src/mustic/models/thread/ClassificationThread.java @@ -8,8 +8,10 @@ import jcl.Classification; import jcl.clustering.constraints.Constraint; import jcl.jcld.RmiServer; import jcl.learning.IterativeClassification; +import jcl.learning.LearningMethod; import jcl.learning.methods.multistrategy.samarah4.comm.ClassificationSAM4; import mustic.models.gui.ClassificationModel; +import mustic.utils.tools.ProgressStatus; /** *

@@ -28,6 +30,9 @@ public class ClassificationThread extends Thread { /** Barre d'avancement de la classification */ private JProgressBar progressBar_; + + /** Etat d'avancement de la classification */ + private ProgressStatus statusBar_; /** Server Rmi ou deporte le calcul */ private RmiServer rmiServer_; @@ -55,6 +60,13 @@ public class ClassificationThread extends Thread { * @param constraints * constraints used for the new iteration */ + public ClassificationThread(Classification classification, + JProgressBar progressBar, ProgressStatus statusBar, ClassificationModel container, + RmiServer rmiServer, boolean newIterationMode, Vector constraints) { + this(classification, progressBar, container, rmiServer, newIterationMode, constraints); + this.statusBar_ = statusBar; + } + public ClassificationThread(Classification classification, JProgressBar progressBar, ClassificationModel container, RmiServer rmiServer, boolean newIterationMode, Vector constraints) { @@ -69,11 +81,10 @@ public class ClassificationThread extends Thread { @Override public void run() { /* Si on a une barre de progression on monitore la classification */ - - if (this.rmiServer_ != null && !this.rmiServer_.useRmi()) - if (this.progressBar_ != null) - new ProgressThreadJCL(this.classification_.getLearningMethod(), - this.progressBar_).start(); + if (this.rmiServer_ != null && !this.rmiServer_.useRmi()) && + this.progressBar_ != null && this.statusBar_ != null) { + new ProgressThreadJCL(this.classification_, this.progressBar_,this.statusBar_).start(); + } /* teste si le calcul est a faire avec rmi */ if ((this.rmiServer_ != null) && (this.rmiServer_.useRmi())) { diff --git a/src/mustic/models/thread/ProgressThreadJCL.java b/src/mustic/models/thread/ProgressThreadJCL.java index 40a2b26e60d57780f6c4313d4688fa9cee1ec215..bce86f94e3047cf5d7705532ac4599a7bad9ef0e 100755 --- a/src/mustic/models/thread/ProgressThreadJCL.java +++ b/src/mustic/models/thread/ProgressThreadJCL.java @@ -1,5 +1,7 @@ package mustic.models.thread; +import java.util.Date; + import javax.swing.JProgressBar; import jcl.utils.Progressable; @@ -63,11 +65,13 @@ public class ProgressThreadJCL extends Thread { { while (prog != 100) { prog = this.p.getProgress(); -// status = this.p.getStatus(); + status = this.p.getStatus(); +// long time = new Date().getTime(); +// System.out.println("prog:"+prog+" status:"+status+" time : "+time); this.b.setValue(prog); MainFrame.getProgressStatus().setMessage(status); try { - sleep(1000); + sleep(200); } catch (Exception ex) { ex.printStackTrace(); System.exit(1); @@ -82,7 +86,7 @@ public class ProgressThreadJCL extends Thread { prog = this.p.getProgress(); this.b.setValue(prog); try { - sleep(1000); + sleep(200); } catch (Exception ex) { ex.printStackTrace(); System.exit(1); diff --git a/src/mustic/utils/image/reader/GDALImageReaderWrapper.java b/src/mustic/utils/image/reader/GDALImageReaderWrapper.java index 2be8f90bd7507f36a8f34fb8b41a24b4852e57d6..e5e107dd0ab34f14f5289c6de732c6c372d00c46 100644 --- a/src/mustic/utils/image/reader/GDALImageReaderWrapper.java +++ b/src/mustic/utils/image/reader/GDALImageReaderWrapper.java @@ -1,12 +1,17 @@ package mustic.utils.image.reader; +import javax.swing.SwingWorker; + import org.gdal.gdal.Band; import org.gdal.gdal.Dataset; +import org.gdal.gdal.ProgressCallback; import org.gdal.gdal.gdal; import org.gdal.gdalconst.gdalconst; import jcl.utils.exceptions.MethodNotImplementedException; +import mustic.gui.MainFrame; +import mustic.utils.tools.ProgressPropertyChangeListener; /** * Reader tool used to access to the data using the gdal library @@ -291,7 +296,7 @@ public class GDALImageReaderWrapper extends ReaderWrapper { } - /* + /** * Generates overviews if * @param filePath * The image file path @@ -310,12 +315,74 @@ public class GDALImageReaderWrapper extends ReaderWrapper { // the factor is the different (just tested for the first band) if ((dataSet.GetRasterBand(1).GetOverviewCount() != overViewIDList.length) || ((dataSet.GetRasterBand(1).GetOverview(0).getXSize() - dataSet.getRasterXSize()/2) > 1)) { - dataSet.BuildOverviews(overViewIDList); - + //Layers are generated in a background process using Swingworker. + //A progress bar is incremented to display loading progress + ImgLoadTask task = new ImgLoadTask(dataSet, overViewIDList); + task.addPropertyChangeListener(new ProgressPropertyChangeListener()); + task.execute(); + task.get(); } } } + /** + * SwingWorker which generates pyramids layers in a background process + * and updates a progress bar + * + * @author Jean-Noël BALANCHE + * + */ + static class ImgLoadTask extends SwingWorker + { + + private int[] overViewIDList = null; + private Dataset dataSet = null; + private int layer = 1; + + /** + * task to generate pyramide layers in a background process + * + * @param dataSet the dataset where to put the layers + * @param overViewIDList list of layers to generate + */ + public ImgLoadTask(Dataset dataSet, int[] overViewIDList) { + //initialize + this.dataSet = dataSet; + this.overViewIDList = overViewIDList; + } + + @Override + public Void doInBackground() throws Exception { + System.out.println("Nb layers to generate : " + overViewIDList.length); + MainFrame.getProgressStatus().setMessage("Generating overview "+layer+" of "+overViewIDList.length); + dataSet.BuildOverviews(overViewIDList,new ProgressCallback(){ + @Override + public int run(double dfComplete, String message) + { + /* If BuildOverviews is calling ProgressCallback.run() for each layer : */ +// double totalProgress = layer*100/overViewIDList.length+dfComplete*100/overViewIDList.length; +// setProgress((int) Math.min(totalProgress,100)); +// if(dfComplete*100>=100) { +// layer++; +// MainFrame.getProgressStatus().setMessage("Generating overview "+layer+" of "+overViewIDList.length); +// } + + /* If BuildOverviews is calling ProgressCallback.run() only one time :*/ + MainFrame.getProgressStatus().setMessage("Generating overview "+layer+" of "+overViewIDList.length); + setProgress((int) (100 * dfComplete)); + if(dfComplete*100>=layer*100/overViewIDList.length && dfComplete*100<100) { + layer++; + MainFrame.getProgressStatus().setMessage("Generating overview "+layer+" of "+overViewIDList.length); + } + + return 1; + } + }); + return null; + } + + } + public static void main(String[] args) { String path = "/home/baptiste/Data/malaoui/evi_2013_2014.tif"; diff --git a/src/mustic/utils/jclAdapters/ImageSampler.java b/src/mustic/utils/jclAdapters/ImageSampler.java index 8b9cc4b88bf80dbc512240bbfe3ec3bf656c7b34..db0780c46dd8379bac9016b1f76cce9277e3cad3 100644 --- a/src/mustic/utils/jclAdapters/ImageSampler.java +++ b/src/mustic/utils/jclAdapters/ImageSampler.java @@ -64,7 +64,7 @@ public class ImageSampler extends Sampler { private double progressM = 100; - private String status = null; + private String status = "Sampling"; /** * Constructor from a sequence of images @@ -206,7 +206,7 @@ public class ImageSampler extends Sampler { if (mandatoriesIndexes != null && mandatoriesIndexes.length > sizeByCount) { throw new IndexOutOfBoundsException("The number of mandatory pixels" - + " is bigger than the expeted sample size"); + + " is bigger than the expected sample size"); } updateRAMAvailable(false); if (getReaders().size() > 1) { @@ -249,12 +249,13 @@ public class ImageSampler extends Sampler { } /** - * Return the sampling from a single image + * Return the sampling from a single image and monitor the progress bar and status accordingly + * * @return the sample */ private List getDataFromOneImage() { + setStatus("Sampling ..."); List result = new ArrayList(sizeByCount); - setStatus("loading sampler..."); int index = 0; int x = 0; int y = 0; @@ -279,8 +280,7 @@ public class ImageSampler extends Sampler { } resetProgress(); - int jalon = sizeByCount/10; - + int jalon = sizeByCount/100; for(int i = 0; i < sizeByCount ; i++) { index = getIndex(i); x = (index) % imageWidth; @@ -297,7 +297,7 @@ public class ImageSampler extends Sampler { if(i == jalon) { - jalon+=sizeByCount/10; + jalon+=sizeByCount/100; incProgress(); } } @@ -317,6 +317,7 @@ public class ImageSampler extends Sampler { * @return the sample */ private List getDataFromOneImage(final Mask mask, int mandatoryPixelCount) { + System.out.println("getDataFromOneImage(final Mask mask, int mandatoryPixelCount)"); List result = new ArrayList(sizeByCount); setStatus("loading sampler..."); int x = 0; @@ -1265,7 +1266,7 @@ public class ImageSampler extends Sampler { @Override public void incProgress() { - this.progress+=progressM/10; + this.progress+=progressM/100; }