insensa.optionfilechanger
Class CReplaceRasterFileValue

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

public class CReplaceRasterFileValue
extends AbstractOptionFileChanger

This is a normalization

Author:
dennis

Field Summary
private  java.lang.String description
           
private  java.lang.Float fFromValue
           
private  java.lang.Float fReplaceValue
           
private  java.lang.String fromValue
           
private  java.lang.Float fToValue
           
static java.lang.String REPLACE_VALUE
           
private  java.lang.String replaceValue
           
private  java.lang.String toValue
           
 
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
CReplaceRasterFileValue()
           
 
Method Summary
 java.lang.String getDescription()
           
private  float getFloatValue(java.lang.String value, float noDataValue, float minValue, float maxValue)
           
 java.lang.String getFromValue()
           
 java.util.List<java.lang.String> getInfoDependencies()
           
 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.
 java.lang.String getReplaceValue()
           
 java.lang.String getToValue()
           
 int getUsableCount()
           
 void setDescription(java.lang.String description)
           
 void setFromValue(java.lang.String fromValue)
           
 void setOptionAttributes(org.jdom.Element eOption)
          Sets all attributes that are saved in the configuration file.
 void setReplaceValue(java.lang.String replaceValue)
           
 void setToValue(java.lang.String toValue)
           
 java.lang.String toString()
           
 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
 
Methods inherited from class java.lang.Object
clone, equals, finalize, getClass, hashCode, notify, notifyAll, wait, wait, wait
 

Field Detail

description

private java.lang.String description

REPLACE_VALUE

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

fromValue

private java.lang.String fromValue

toValue

private java.lang.String toValue

replaceValue

private java.lang.String replaceValue

fFromValue

private java.lang.Float fFromValue

fToValue

private java.lang.Float fToValue

fReplaceValue

private java.lang.Float fReplaceValue
Constructor Detail

CReplaceRasterFileValue

public CReplaceRasterFileValue()
Method Detail

getDescription

public java.lang.String getDescription()
Returns:

getFloatValue

private float getFloatValue(java.lang.String value,
                            float noDataValue,
                            float minValue,
                            float maxValue)
Parameters:
value -
noDataValue -
minValue -
maxValue -
Returns:

getFromValue

public java.lang.String getFromValue()
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()

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

Returns:
the name of the OptionFileChanger
See Also:
OptionFileChanger.getOptionName()

getReplaceValue

public java.lang.String getReplaceValue()
Returns:

getToValue

public java.lang.String getToValue()
Returns:

getUsableCount

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

setDescription

public void setDescription(java.lang.String description)
Parameters:
description -

setFromValue

public void setFromValue(java.lang.String fromValue)
Parameters:
fromValue -

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)

setReplaceValue

public void setReplaceValue(java.lang.String replaceValue)
Parameters:
replaceValue -

setToValue

public void setToValue(java.lang.String toValue)
Parameters:
toValue -

toString

public java.lang.String toString()
Overrides:
toString in class AbstractOptionFileChanger
See Also:
AbstractOptionFileChanger.toString()

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
    .

    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()