insensa.optionfilechanger
Class TemplateCut
java.lang.Object
insensa.optionfilechanger.AbstractOptionFileChanger
insensa.optionfilechanger.TemplateCut
- All Implemented Interfaces:
- OptionFileChanger, java.lang.Runnable
public class TemplateCut
- extends AbstractOptionFileChanger
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 |
Methods inherited from class insensa.optionfilechanger.AbstractOptionFileChanger |
checkApproval, getActualFile, getData, getErrorMessage, getId, getInfoDependencies, 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 |
TEMPLATE_CUT
public static final java.lang.String TEMPLATE_CUT
- See Also:
- Constant Field Values
TEMPLATE_FILE
private java.lang.String TEMPLATE_FILE
TEMPLATE_VALUES
private java.lang.String TEMPLATE_VALUES
TEMPLATE_VALUE
private java.lang.String TEMPLATE_VALUE
VALUE
private java.lang.String VALUE
FILE_OUTPUT_PATH
private java.lang.String FILE_OUTPUT_PATH
FILE_OUTPUT_NAME
private java.lang.String FILE_OUTPUT_NAME
FILE_FULL_PATH
private java.lang.String FILE_FULL_PATH
templateFile
private CRasterFileInformation templateFile
templateValues
private java.util.List<java.lang.Float> templateValues
TemplateCut
public TemplateCut()
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()
getTemplateFile
public CRasterFileInformation getTemplateFile()
- Returns:
getTemplateValues
public java.util.List<java.lang.Float> getTemplateValues()
- Returns:
getUsableCount
public int getUsableCount()
- Returns:
- maximum number of unused objects that can be appended to a file
- See Also:
OptionFileChanger.getUsableCount()
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)
setTemplateFile
public void setTemplateFile(CRasterFileInformation templateFile)
- Parameters:
templateFile
-
setTemplateValues
public void setTemplateValues(java.util.List<java.lang.Float> templateValues)
- Parameters:
templateValues
-
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:
- Get actual file
.
- Throws:
java.io.IOException
org.jdom.JDOMException
CRasterFileException
- AbstractOptionFileChanger.getActualFile()
-
Solve dependencies
AbstractOptionFileChanger.solveDependencies(CRasterFileInformation)
- Start process
- Create temporary file of
type CRasterFileInformation
- Save the file under the
correct filename
- 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()