diff --git a/src/main/java/fr/pasteur/ida/zellige/gui/controller/MainController.java b/src/main/java/fr/pasteur/ida/zellige/gui/controller/MainController.java index e09d4fcea675b0dd0507abb228036457c3670c00..3b1f07e25c08487128e6f443514043416e56f4b8 100644 --- a/src/main/java/fr/pasteur/ida/zellige/gui/controller/MainController.java +++ b/src/main/java/fr/pasteur/ida/zellige/gui/controller/MainController.java @@ -33,6 +33,7 @@ import fr.pasteur.ida.zellige.gui.LogAppender; import fr.pasteur.ida.zellige.gui.MainAppFrame; import fr.pasteur.ida.zellige.gui.exception.NoA3DStackException; import fr.pasteur.ida.zellige.gui.exception.NoInputException; +import fr.pasteur.ida.zellige.gui.exception.TimeLapseException; import fr.pasteur.ida.zellige.gui.model.ConstructionModel; import fr.pasteur.ida.zellige.gui.model.MainModel; import fr.pasteur.ida.zellige.gui.model.ProjectionModel; @@ -106,6 +107,7 @@ public class MainController< T extends RealType< T > & NativeType< T > > impleme alert.setTitle( "Error alert" ); alert.setHeaderText( exception.getMessage() ); alert.showAndWait(); + // throw new RuntimeException(exception); } @Override @@ -118,14 +120,18 @@ public class MainController< T extends RealType< T > & NativeType< T > > impleme activeDatasets.getSelectionModel().selectedItemProperty().addListener( ( observableValue, oldValue, newValue ) -> { + LOGGER.debug( "selectedItemProperty : old value = {}, new value = {} ", oldValue, newValue ); + if(newValue!= null && isValid( newValue )) + { - LOGGER.debug( "selectedItemProperty : old value = {}, new value = {} ", oldValue, newValue ); - - if ( newValue != null ) + setCurrentDataset( newValue ); + } + else { - setCurrentDataset( newValue ); + activeDatasets.getSelectionModel().selectLast(); } } ); + currentDataset.addListener( ( observableValue, dataset, t1 ) -> { if ( t1 != null ) @@ -186,7 +192,6 @@ public class MainController< T extends RealType< T > & NativeType< T > > impleme } } ); - // Update of the program status using LOG.INFO outputs LogAppender.logMsgProperty().addListener( ( observable, oldValue, newValue ) -> Platform.runLater( @@ -199,6 +204,9 @@ public class MainController< T extends RealType< T > & NativeType< T > > impleme LOGGER.debug( "Init Extraction" ); Dataset dataset = mainAppFrame.getImage().getActiveDataset(); + LOGGER.debug( dataset.getImgPlus().firstElement().getClass().toGenericString() ); + LOGGER.debug( "Function getFrames() :{}", dataset.getFrames() ); + LOGGER.debug( "Properties :{}", dataset.getImgPlus().getProperties() ); if ( dataset == null ) { showError( new NoInputException() ); @@ -208,52 +216,6 @@ public class MainController< T extends RealType< T > & NativeType< T > > impleme LOGGER.debug( "Init Extraction completed" ); } -/* LOG INFO -// long[] dims = new long[ currentDataset.numDimensions() ]; -// currentDataset.dimensions( dims ); -// mainAppFrame.getLogService().info( "Zellige received the image: " + currentDataset.getName() ); -// mainAppFrame.getLogService().info( "Size: " + Util.printInterval( currentDataset ) ); -// mainAppFrame.getLogService().info( "Type: " + currentDataset.firstElement().getClass().toGenericString() ); -// mainAppFrame.getLogService().info( "Dimensionality: " + currentDataset.numDimensions() + "D" ); -// for ( int d = 0; d < currentDataset.numDimensions(); d++ ) -// { -// mainAppFrame.getLogService().info( " - dimension " + d + ": [" + currentDataset.axis( d ).type() + "], 1 unit = " + currentDataset.averageScale( d ) + " " + currentDataset.axis( d ).unit() ); -// } -// // Fixed parameters -// String filter = "GaussianBlur"; -// double filterParameter = 2; -// // End of fixed parameters. -// int connexity = 4; -// -// double startingOsSize1 = constructionController.getSt1(); -// int overlap1 = constructionController.getR1(); -// double connexityRate1 = constructionController.getC1(); -// double startingOsSize2 = constructionController.getSt2(); -// int overlap2 = constructionController.getR2(); -// double connexityRate2 = constructionController.getC2(); -// double surfaceMinSizeFactor = constructionController.getSurfaceSize(); -// int delta = projectionController.getDelta(); -// String method = projectionController.getMethod(); -// /* Print parameters.*/ - -/* mainAppFrame.getLogService().info( "Input : " + currentDataset.getName() ); -// mainAppFrame.getLogService().info( "filter : " + filter ); -// mainAppFrame.getLogService().info( "filterParameter : " + filterParameter ); -// mainAppFrame.getLogService().info( "amplitude : " + getAmplitude() ); -// mainAppFrame.getLogService().info( "threshold : " + getOtsu() ); -// mainAppFrame.getLogService().info( "connexity : " + connexity ); -// mainAppFrame.getLogService().info( "islandSize : " + getIsland() ); -// mainAppFrame.getLogService().info( "sigmaXY : " + getSigmaXY() ); -// mainAppFrame.getLogService().info( "sigmaZ : " + getSigmaZ() ); -// mainAppFrame.getLogService().info( "startingOsSize1 : " + startingOsSize1 ); -// mainAppFrame.getLogService().info( "overlap1 : " + overlap1 ); -// mainAppFrame.getLogService().info( "connexityRate1 : " + connexityRate1 ); -// mainAppFrame.getLogService().info( "startingOsSize2 : " + startingOsSize2 ); -// mainAppFrame.getLogService().info( "overlap2 : " + overlap2 ); -// mainAppFrame.getLogService().info( "connexityRate2 : " + connexityRate2 ); -// mainAppFrame.getLogService().info( "surfaceMinimumSizeFactor : " + surfaceMinSizeFactor ); -// mainAppFrame.getLogService().info( "delta : " + delta + "\n" ); -// /* End of Print parameters.*/ public void run2() { @@ -274,7 +236,6 @@ public class MainController< T extends RealType< T > & NativeType< T > > impleme selectionController.getSelectionModel().runPixelSelection(); } LOGGER.debug( "###########################################---NEW RUN---###########################################" ); -// ZelligeParameters.serialize( new ZelligeParameters( model ) ); } private void runPretreatment( Dataset dataset ) @@ -292,7 +253,9 @@ public class MainController< T extends RealType< T > & NativeType< T > > impleme { LOGGER.debug( "Datasets displayed successfully" ); ObservableList< Dataset > list = FXCollections.observableArrayList( displayTask.getValue() ); + list.add( null ); activeDatasets.setItems( list ); + LOGGER.debug( "item selected : list size = " + list.size() ); if ( list.isEmpty() ) { @@ -307,21 +270,11 @@ public class MainController< T extends RealType< T > & NativeType< T > > impleme @SuppressWarnings( "unchecked" ) public void setCurrentDataset( Dataset dataset ) { - if ( dataset != currentDataset.getValue() ) - { - if ( dataset.numDimensions() != 3 ) - { - LOGGER.debug( "show error!!!" ); - showError( new NoA3DStackException() ); - } - else - { currentDataset.setValue( dataset ); Img< T > input = ( ImgPlus< T > ) dataset.getImgPlus(); constructionController.getConstructionModel().setInput( input ); constructionController.getConstructionModel().setFactory( input.factory() ); - } - } + } public void computeClassifiedImages() @@ -419,6 +372,26 @@ public class MainController< T extends RealType< T > & NativeType< T > > impleme projectionController.setParameters( parameters ); } - + private boolean isValid(Dataset dataset) + { + int numZ = ( int ) dataset.getDepth(); + int numFrames = ( int ) dataset.getFrames(); + LOGGER.debug( "NUmber of dimensions: {}", dataset.numDimensions() ); + LOGGER.debug( "NUmber of channels: {}", dataset.getChannels() ); + LOGGER.debug( "Number of frames: {}", dataset.getFrames() ); + if ( numFrames > 1 ) + { + LOGGER.debug( "TimeLapseException" ); + showError( new TimeLapseException() ); + return false; + } + if ( numZ == 1 ) + { + LOGGER.debug( "NoA3DStackException" ); + showError( new NoA3DStackException() ); + return false; + } + return true; + } } diff --git a/src/main/java/fr/pasteur/ida/zellige/gui/exception/TimeLapseException.java b/src/main/java/fr/pasteur/ida/zellige/gui/exception/TimeLapseException.java new file mode 100644 index 0000000000000000000000000000000000000000..b416a10781467174cbb40cd02fb783a2afa5b5b0 --- /dev/null +++ b/src/main/java/fr/pasteur/ida/zellige/gui/exception/TimeLapseException.java @@ -0,0 +1,11 @@ +package fr.pasteur.ida.zellige.gui.exception; + +public class TimeLapseException extends Exception +{ + + @Override + public String getMessage() + { + return "Zellige doesn't handle time-lapse images for now !"; + } +}