insensa.optionfilechanger
Class CEqualBreaks

java.lang.Object
  extended by insensa.optionfilechanger.AbstractOptionFileChanger
      extended by insensa.optionfilechanger.CEqualBreaks
All Implemented Interfaces:
BreaksValues, OptionFileChanger, java.lang.Runnable

public class CEqualBreaks
extends AbstractOptionFileChanger
implements BreaksValues


Field Summary
private  CEqualBreaksValues breaksValues
           
private  java.lang.String description
           
static java.lang.String EQUAL_BREAKS
           
private static java.lang.String NUM_OF_CLASSES
           
private  int numOfClasses
           
 
Fields inherited from class insensa.optionfilechanger.AbstractOptionFileChanger
errorMessage, id, oldFileName, oldFilePath, oldRasterFile, processStatus, used, workerStatus, XML_ATTR_ID, XML_ATTR_OLD_NAME, XML_ATTR_OLD_PATH, XML_ATTR_USED, XML_ELEMENT_SOURCEFILE
 
Constructor Summary
CEqualBreaks()
           
 
Method Summary
 CEqualBreaksValues getEqualBreaksValues()
           
 java.util.List<java.lang.String> getInfoDependencies()
           
 int getNumOfClasses()
           
 org.jdom.Element getOptionElement()
          Creates a new Element object that contains all Information that should be saved in a configuration file.
 java.lang.String getOptionName()
          Returns the name of the OptionFileChanger.
 int getUsableCount()
           
 void setNumOfClasses(int numOfClasses)
           
 void setOptionAttributes(org.jdom.Element eOption)
          Sets all attributes that are saved in the configuration file.
 void write()
          This method will be executed from the ThreadPool
There are several steps that must be followed:
Get actual file
.
 
Methods inherited from class insensa.optionfilechanger.AbstractOptionFileChanger
checkApproval, getActualFile, getData, getErrorMessage, getId, getOldFileRelativeFilePath, getTemporaryFileName, isPublic, isUsed, run, saveRasterFile, setId, setOldRasterFile, setWorkerStatus, solveDependencies, toString
 
Methods inherited from class java.lang.Object
clone, equals, finalize, getClass, hashCode, notify, notifyAll, wait, wait, wait
 

Field Detail

EQUAL_BREAKS

public static final java.lang.String EQUAL_BREAKS
See Also:
Constant Field Values

breaksValues

private CEqualBreaksValues breaksValues

description

private java.lang.String description

numOfClasses

private int numOfClasses

NUM_OF_CLASSES

private static final java.lang.String NUM_OF_CLASSES
See Also:
Constant Field Values
Constructor Detail

CEqualBreaks

public CEqualBreaks()
Method Detail

getEqualBreaksValues

public CEqualBreaksValues getEqualBreaksValues()
Returns:

getInfoDependencies

public java.util.List<java.lang.String> getInfoDependencies()
Specified by:
getInfoDependencies in interface OptionFileChanger
Overrides:
getInfoDependencies in class AbstractOptionFileChanger
Returns:
See Also:
AbstractOptionFileChanger.getInfoDependencies()

getNumOfClasses

public int getNumOfClasses()
Specified by:
getNumOfClasses in interface BreaksValues
Returns:
See Also:
BreaksValues.getNumOfClasses()

getOptionElement

public org.jdom.Element getOptionElement()
Description copied from interface: OptionFileChanger
Creates a new Element object that contains all Information that should be saved in a configuration file.

The configuration file is a xml file that will be saved in the "infos" directory. jdom is used to generate the file. An Element will be represented as a XML Tag in the created file

First you have to create a new Element with the name of the optionFileChanger.
This name must be the same name as you defined in the extensions.xml file
If you inherited and defined the method getOptionName correctly, you can use this function to get the name.

Example:
 Element optionElement = new Element(this.getOptionName());
 
There are TWO attributes which should ALWAYS be saved, the status of the execution (Therefore the same boolean expression that should be used in the method isUsed) and the id of the current optionFileChanger.
Both variables (used and id) are defined in

Specified by:
getOptionElement in interface OptionFileChanger
Overrides:
getOptionElement in class AbstractOptionFileChanger
Returns:
Element with all contents that should be saved in the Configuration File AbstractOptionFileChanger.
The Integer variable id is used internally and just have to be saved and reloaded by the plugin.

Example: Assuming that used is the boolean expression
 optionElement.setAttribute("used",Boolean.toString(used));
 
Besides the used state, you can save what ever you want and it is possible to use the complex methods that jdom gives you. For example: creating subElements (child XML tags)

Note: It is strongly recommended that you define a final variable for every key you need.
The keys used here are also required in the method insensa.optionfilechanger.OptionFileChanger.setInfos and it can be fatal to use wrong keys
 private final string XML_ATTR_USED = "used";
 
See Also:
OptionFileChanger.getOptionElement()

getOptionName

public java.lang.String getOptionName()
Description copied from interface: OptionFileChanger
Returns the name of the OptionFileChanger.

This MUST be the same name as defined in the extensions.xml or in EOption

Specified by:
getOptionName in interface OptionFileChanger
Returns:
the name of the OptionFileChanger
See Also:
OptionFileChanger.getOptionName()

getUsableCount

public int getUsableCount()
Specified by:
getUsableCount in interface OptionFileChanger
Returns:
maximum number of unused objects that can be appended to a file
See Also:
OptionFileChanger.getUsableCount()

setNumOfClasses

public void setNumOfClasses(int numOfClasses)
Specified by:
setNumOfClasses in interface BreaksValues
See Also:
BreaksValues.setNumOfClasses(int)

setOptionAttributes

public void setOptionAttributes(org.jdom.Element eOption)
                         throws java.io.IOException
Description copied from interface: OptionFileChanger
Sets all attributes that are saved in the configuration file.

This method is the counterpart of getOptionElement.

Specified by:
setOptionAttributes in interface OptionFileChanger
Overrides:
setOptionAttributes in class AbstractOptionFileChanger
Parameters:
eOption - the jdom.Element which holds the attributes
Throws:
java.io.IOException - eOption holds all information that was saved.
The information that should ALWAYS stored in the configuration is the status of the execution and the id of the optionFileChanger
Example:
 
 Attribute attrUsed = element.getAttribute(XML_ATTR_USED);
 Attribute attrID = element.getAttribute(XML_ATTR_ID);
 if(attrUsed==null || attrID==null)
 throw new IOException("one ore more necessary attributes cannot be found");
 try
 {
 used=attrUsed.getBooleanValue();
 id=attrID.getIntegerValue();
 }catch (DataConversionException e)
 {
 throw new IOException(e);
 }
 
 
See Also:
OptionFileChanger.setOptionAttributes(org.jdom.Element)

write

public void write()
           throws java.io.IOException,
                  org.jdom.JDOMException,
                  CRasterFileException
Description copied from interface: OptionFileChanger
This method will be executed from the ThreadPool
There are several steps that must be followed:
  1. Get actual file
    .

    Specified by:
    write in interface OptionFileChanger
    Throws:
    java.io.IOException
    org.jdom.JDOMException
    CRasterFileException - AbstractOptionFileChanger.getActualFile()
  2. Solve dependencies
    AbstractOptionFileChanger.solveDependencies(CRasterFileInformation)
  3. Start process
  4. Create temporary file of type CRasterFileInformation
  5. Save the file under the correct filename
  6. End process


Example:
In this Example, we want to create a file as a copy of the old with every value that is <= 0.0 replace by a variable float value 0.5.

First we have to get the actual raster file. This could be the previously defined oldRasterFile but also an other file that just lies in the oldRasterFile defined as targetFile.
 CRasterFileInformation actualRasterFile = getActualRasterFile()
 
In the next step it is important to be sure that all dependencies previously defined in getInfoDependencies are available. the easiest way is to use the method AbstractOptionFileChanger.solveDependencies(CRasterFileInformation)
 solveDependencies(actualRasterFile);
 
Lets assume we need the InfoReader minMaxValues.
 CMinMaxValues minMaxValues = (CMinMaxValues)actualRasterFile.getInfoReader(EInfo.minMaxValue.toString());
 if(minMaxValues==null)
 throw new IOException("Can't solve minMaxValues")
 
If a WorkerStatus was defined we can tell it that the progress began.
 if(workerStatus!=null)
 {
 workerStatus.setProgressName("Starting replace zero");
 workerStatus.startProcess();
 }
 
Next we need to create a new temporary file as a copy of the old file with a new name
 String tmpName = getTemporaryFileName(actualRasterFile);
 CRasterFileInformation tmpRasterFile = new CRasterFileInformation(tmpName,actualRasterFile,false,false,false);
 int dataType = actualRasterFile.getBand().getDataType();
 tmpRasterFile.createNewFile(actualRasterFile, dataType, actualRasterFile.getNoDataValue());
 
 see CRasterFileInformation#CRasterFileInformation(String, CRasterFileInformation, boolean, boolean, boolean)
 and
 CRasterFile.createNewFile(insensa.CRasterFile, int, double)
 for more information
 
Now we can get Excess to the gdal functions to create the data.

Create and Write Data:
 Band band = actualRasterFile.getBand();
 Dataset tmpDataset = tmpRasterFile.getDataset();
 int xSize = band.GetXSize();
 int ySize = band.getYSize();
 float steps = 100.0F/ySize;
 float[] fData= new float[xSize];
 float readData;
 for(int i=0;i < ySize;i++)
 {
 band.ReadRaster(0,i,xSize,1,fData);
 for(int j=0;j < fData.length;j++)
 {
 readData=fData[j];
 if(readData==actualRasterFile.getNoDataValue())
 {
 }
 else
 {
 if(readData <=0.0f)
 fData[j]=0.5f;
 }
 }
 processStatus+=steps;
 if(workerStatus!=null)
 workerStatus.refreshPercentage(processStatus);
 tmpDataset.GetRasterBand(1).WriteRaster(0,i,xSize,1,fData);
 }
 tmpDataset.FlushCache();
 band.FlushCache();
 tmpDataset=null;
 band=null;
 
 
At least it is necessary to save the temporary file and set the execution status:
 saveRasterFile(tmpRasterFile, actualRasterFile);
 used=true;
 
See Also:
OptionFileChanger.write()