@Override public void run(){
  amIActive=true;
  String inputHeader=null;
  String outputHeader=null;
  double SMALL_NUM=0.0001d;
  if (args.length <= 0) {
    showFeedback("Plugin parameters have not been set.");
    return;
  }
  inputHeader=args[0];
  outputHeader=args[1];
  SMALL_NUM=Double.parseDouble(args[2]);
  if ((inputHeader == null) || (outputHeader == null)) {
    showFeedback("One or more of the input parameters have not been set properly.");
    return;
  }
  try {
    updateProgress("Initializing: ",-1);
    int row_n, col_n;
    int row, col;
    double z_n;
    long k=0;
    GridCell gc=null;
    double z;
    int[] Dy={-1,0,1,1,1,0,-1,-1};
    int[] Dx={1,1,1,0,-1,-1,-1,0};
    int progress=0;
    int oldProgress;
    WhiteboxRaster image=new WhiteboxRaster(inputHeader,"r");
    int rows=image.getNumberRows();
    int rowsLessOne=rows - 1;
    int cols=image.getNumberColumns();
    int numCells=0;
    String preferredPalette=image.getPreferredPalette();
    double noData=image.getNoDataValue();
    double[][] output=new double[rows][cols];
    double[][] input=new double[rows + 2][cols + 2];
    for (row=0; row < rows + 2; row++) {
      input[row][0]=noData;
      input[row][cols + 1]=noData;
    }
    for (col=0; col < cols + 2; col++) {
      input[0][col]=noData;
      input[rows + 1][col]=noData;
    }
    double[] data;
    for (row=0; row < rows; row++) {
      data=image.getRowValues(row);
      for (col=0; col < cols; col++) {
        output[row][col]=-999;
        input[row + 1][col + 1]=data[col];
      }
    }
    image.close();
    updateProgress("Loop 1: ",-1);
    int numCellsTotal=rows * cols;
    int numSolvedCells=0;
    PriorityQueue<GridCell> queue=new PriorityQueue<>((2 * rows + 2 * cols) * 2);
    oldProgress=-1;
    for (row=0; row < rows; row++) {
      for (col=0; col < cols; col++) {
        z=input[row + 1][col + 1];
        if (z != noData) {
          numCells++;
          for (int i=0; i < 8; i++) {
            row_n=row + Dy[i];
            col_n=col + Dx[i];
            z_n=input[row_n + 1][col_n + 1];
            if (z_n == noData) {
              gc=new GridCell(row,col,z);
              queue.add(gc);
              output[row][col]=z;
              numCellsTotal++;
              break;
            }
          }
        }
 else {
          numSolvedCells++;
          output[row][col]=noData;
        }
      }
      progress=(int)(100f * row / rowsLessOne);
      if (progress > oldProgress) {
        updateProgress(progress);
        oldProgress=progress;
        if (myHost.isRequestForOperationCancelSet()) {
          myHost.showFeedback("Operation cancelled");
          return;
        }
      }
    }
    updateProgress("Loop 2: ",0);
    oldProgress=(int)(100f * numSolvedCells / numCellsTotal);
    do {
      gc=queue.poll();
      row=gc.row;
      col=gc.col;
      z=gc.z;
      for (int i=0; i < 8; i++) {
        row_n=row + Dy[i];
        col_n=col + Dx[i];
        z_n=input[row_n + 1][col_n + 1];
        if ((z_n != noData) && (output[row_n][col_n] == -999)) {
          if (z_n <= z) {
            z_n=z + SMALL_NUM;
          }
          output[row_n][col_n]=z_n;
          numSolvedCells++;
          gc=new GridCell(row_n,col_n,z_n);
          queue.add(gc);
        }
      }
      progress=(int)(100f * numSolvedCells / numCellsTotal);
      if ((progress - oldProgress) == 1) {
        updateProgress(progress);
        oldProgress=progress;
        if (myHost.isRequestForOperationCancelSet()) {
          myHost.showFeedback("Operation cancelled");
          return;
        }
      }
    }
 while (queue.isEmpty() == false);
    updateProgress("Saving Data: ",0);
    WhiteboxRaster outputFile=new WhiteboxRaster(outputHeader,"rw",inputHeader,WhiteboxRaster.DataType.DOUBLE,-999);
    outputFile.setPreferredPalette(preferredPalette);
    oldProgress=-1;
    for (row=0; row < rows; row++) {
      outputFile.setRowValues(row,output[row]);
      progress=(int)(100f * row / rowsLessOne);
      if (progress > oldProgress) {
        updateProgress(progress);
        oldProgress=progress;
        if (myHost.isRequestForOperationCancelSet()) {
          myHost.showFeedback("Operation cancelled");
          return;
        }
      }
    }
    outputFile.addMetadataEntry("Created by the " + getDescriptiveName() + " tool.");
    outputFile.addMetadataEntry("Created on " + new Date());
    outputFile.close();
    returnData(outputHeader);
  }
 catch (  OutOfMemoryError oe) {
    myHost.showFeedback("An out-of-memory error has occurred during operation.");
  }
catch (  Exception e) {
    myHost.showFeedback("An error has occurred during operation. See log file for details.");
    myHost.logException("Error in " + getDescriptiveName(),e);
  }
 finally {
    updateProgress("Progress: ",0);
    amIActive=false;
    myHost.pluginComplete();
  }
}

@ Override public void run ( ) { amIActive = true ; String inputHeader = null ; String outputHeader = null ; double SMALL_NUM = 0.0001d ; if ( args . length <= 0 ) { showFeedback ( "Plugin parameters have not been set." ) ; return ; } inputHeader = args [ 0 ] ; outputHeader = args [ 1 ] ; SMALL_NUM = Double . parseDouble ( args [ 2 ] ) ; if ( ( inputHeader == null ) || ( outputHeader == null ) ) { showFeedback ( "One or more of the input parameters have not been set properly." ) ; return ; } try { updateProgress ( "Initializing: " , - 1 ) ; int row_n , col_n ; int row , col ; double z_n ; long k = 0 ; GridCell gc = null ; double z ; int [ ] Dy = { - 1 , 0 , 1 , 1 , 1 , 0 , - 1 , - 1 } ; int [ ] Dx = { 1 , 1 , 1 , 0 , - 1 , - 1 , - 1 , 0 } ; int progress = 0 ; int oldProgress ; WhiteboxRaster image = new WhiteboxRaster ( inputHeader , "r" ) ; int rows = image . getNumberRows ( ) ; int rowsLessOne = rows - 1 ; int cols = image . getNumberColumns ( ) ; int numCells = 0 ; String preferredPalette = image . getPreferredPalette ( ) ; double noData = image . getNoDataValue ( ) ; double [ ] [ ] output = new double [ rows ] [ cols ] ; double [ ] [ ] input = new double [ rows + 2 ] [ cols + 2 ] ; for ( row = 0 ; row < rows + 2 ; row ++ ) { input [ row ] [ 0 ] = noData ; input [ row ] [ cols + 1 ] = noData ; } for ( col = 0 ; col < cols + 2 ; col ++ ) { input [ 0 ] [ col ] = noData ; input [ rows + 1 ] [ col ] = noData ; } double [ ] data ; for ( row = 0 ; row < rows ; row ++ ) { data = image . getRowValues ( row ) ; for ( col = 0 ; col < cols ; col ++ ) { output [ row ] [ col ] = - 999 ; input [ row + 1 ] [ col + 1 ] = data [ col ] ; } } image . close ( ) ; updateProgress ( "Loop 1: " , - 1 ) ; int numCellsTotal = rows * cols ; int numSolvedCells = 0 ; PriorityQueue < GridCell > queue = new PriorityQueue < > ( ( 2 * rows + 2 * cols ) * 2 ) ; oldProgress = - 1 ; for ( row = 0 ; row < rows ; row ++ ) { for ( col = 0 ; col < cols ; col ++ ) { z = input [ row + 1 ] [ col + 1 ] ; if ( z != noData ) { numCells ++ ; for ( int i = 0 ; i < 8 ; i ++ ) { row_n = row + Dy [ i ] ; col_n = col + Dx [ i ] ; z_n = input [ row_n + 1 ] [ col_n + 1 ] ; if ( z_n == noData ) { gc = new GridCell ( row , col , z ) ; queue . add ( gc ) ; output [ row ] [ col ] = z ; numCellsTotal ++ ; break ; } } } else { numSolvedCells ++ ; output [ row ] [ col ] = noData ; } } progress = ( int ) ( 100f * row / rowsLessOne ) ; if ( progress > oldProgress ) { updateProgress ( progress ) ; oldProgress = progress ; if ( myHost . isRequestForOperationCancelSet ( ) ) { myHost . showFeedback ( "Operation cancelled" ) ; return ; } } } updateProgress ( "Loop 2: " , 0 ) ; oldProgress = ( int ) ( 100f * numSolvedCells / numCellsTotal ) ; do { gc = queue . poll ( ) ; row = gc . row ; col = gc . col ; z = gc . z ; for ( int i = 0 ; i < 8 ; i ++ ) { row_n = row + Dy [ i ] ; col_n = col + Dx [ i ] ; z_n = input [ row_n + 1 ] [ col_n + 1 ] ; if ( ( z_n != noData ) && ( output [ row_n ] [ col_n ] == - 999 ) ) { if ( z_n <= z ) { z_n = z + SMALL_NUM ; } output [ row_n ] [ col_n ] = z_n ; numSolvedCells ++ ; gc = new GridCell ( row_n , col_n , z_n ) ; queue . add ( gc ) ; } } progress = ( int ) ( 100f * numSolvedCells / numCellsTotal ) ; if ( ( progress - oldProgress ) == 1 ) { updateProgress ( progress ) ; oldProgress = progress ; if ( myHost . isRequestForOperationCancelSet ( ) ) { myHost . showFeedback ( "Operation cancelled" ) ; return ; } } } while ( queue . isEmpty ( ) == false ) ; updateProgress ( "Saving Data: " , 0 ) ; WhiteboxRaster outputFile = new WhiteboxRaster ( outputHeader , "rw" , inputHeader , WhiteboxRaster . DataType . DOUBLE , - 999 ) ; outputFile . setPreferredPalette ( preferredPalette ) ; oldProgress = - 1 ; for ( row = 0 ; row < rows ; row ++ ) { outputFile . setRowValues ( row , output [ row ] ) ; progress = ( int ) ( 100f * row / rowsLessOne ) ; if ( progress > oldProgress ) { updateProgress ( progress ) ; oldProgress = progress ; if ( myHost . isRequestForOperationCancelSet ( ) ) { myHost . showFeedback ( "Operation cancelled" ) ; return ; } } } outputFile . addMetadataEntry ( "Created by the " + getDescriptiveName ( ) + " tool." ) ; outputFile . addMetadataEntry ( "Created on " + new Date ( ) ) ; outputFile . close ( ) ; returnData ( outputHeader ) ; } catch ( OutOfMemoryError oe ) { myHost . showFeedback ( "An out-of-memory error has occurred during operation." ) ; } catch ( Exception e ) { myHost . showFeedback ( "An error has occurred during operation. See log file for details." ) ; myHost . logException ( "Error in " + getDescriptiveName ( ) , e ) ; } finally { updateProgress ( "Progress: " , 0 ) ; amIActive = false ; myHost . pluginComplete ( ) ; } }
used to execute this plugin tool .
