|
|||||||||||
| PREV CLASS NEXT CLASS | FRAMES NO FRAMES | ||||||||||
| SUMMARY: NESTED | FIELD | CONSTR | METHOD | DETAIL: FIELD | CONSTR | METHOD | ||||||||||
java.lang.Object
|
+--uk.org.ogsadai.activity.Activity
|
+--uk.org.ogsadai.activity.files.AbstractFileActivity
|
+--uk.org.ogsadai.activity.files.FileWritingActivity
This activity allows writing to a file. The file may be a text file or a binary file. The available actions include deleting and replacing portions of the file, and appending and inserting text into the file. For information on this activity see the OGSA-DAI user doc: OGSA-DAI/doc/interaction/activities/files/fileWritingActivity.html
| Field Summary | |
static int |
APPENDIndicate that we wish to perform a append operation. |
private static java.lang.String |
COPYRIGHT_NOTICECopyright statement |
static int |
DELETEIndicate that we wish to perform a delete operation. |
static int |
INSERTIndicate that we wish to perform a insert operation. |
private static DAILogger |
LOGLogger object for logging in this class |
private int |
mActionThe action which will be performed on the file. |
private boolean |
mAlreadyReturnedBlankIndicates whether we've already returned a blank. |
private java.io.File |
mFileThe file to write to. |
private long |
mFileLengthThe length of the file to write to, before any writing takes place. |
private java.lang.String |
mFilenameThe filename of the file to write to. |
private BlockReader |
mInputThe output from another activity, from which to read text to write into the file. |
private java.lang.String |
mLengthThe number of bytes length over which the writing will occur. |
private InfiniteSet |
mMatchAn expression of the instances of matches of the regular expression to deal with. |
private boolean |
mMultilineAn indication of whether we are performing the action on a per-file or per-line basis. |
private java.lang.String |
mOffsetThe number of bytes offset from which the writing will occur. |
private boolean |
mOptimiseForTimeAn indication of whether we wish to aim for efficient use of time or efficent use of memory when performing edits on large files. |
private BlockWriter |
mOutputThe input to another activity, to which to write this activity's output. |
private java.io.RandomAccessFile |
mRaFileThe file to write to. |
private java.lang.String |
mRegexpThe regular expression to use to locate the part of the file to write to. |
private java.lang.String |
mStringThe string containing the text to write into the file. |
private int |
mTypeThe style we are using to indicate where the writing will occur. |
static int |
NONEIndicate that no action has been set. |
static int |
OFFSET_AND_LENGTHIndicate that we are identifying the text to modify using offset and/or length. |
static boolean |
PER_FILEIndicate that we wish to perform the action on a per-file basis. |
static boolean |
PER_LINEIndicate that we wish to perform the action on a per-line basis. |
static int |
REGEXPIndicate that we are identifying the text to modify using a regular expression. |
static int |
REPLACEIndicate that we wish to perform a replace operation. |
static java.lang.String |
SEQ_SEPARATORThe character used to separate items in a sequence in the match expression. |
static int |
STEP_SIZE_UPPER_LIMITThe upper limit on the step size which will be employed when reading and writing portions of files. |
| Fields inherited from class uk.org.ogsadai.activity.files.AbstractFileActivity |
mCredentials, mFileAccessProvider, mTopDir |
| Fields inherited from class uk.org.ogsadai.activity.Activity |
mContext, mExternalInputs, mExternalOutputs, mInternalInputs, mInternalOutputs |
| Constructor Summary | |
FileWritingActivity(org.w3c.dom.Element element) |
|
| Method Summary | |
private void |
append(java.io.RandomAccessFile raFile, java.lang.String string)Append a string to the end of a file, thereby extending its length. |
static int |
charAt(java.io.RandomAccessFile raFile, long pos)Returns the byte at a particular offset within a file. |
private void |
delete(java.io.RandomAccessFile raFile, long offset, long length)Delete a number of contiguous bytes from a file, starting at a particular offset. |
private void |
extractFromOrTextAttribute(org.w3c.dom.Element node)Reads the from or text attributes of the given XML element, and sets instance variables accordingly. |
private void |
extractOptimiseAttribute(org.w3c.dom.Element node)Sets the mOptimiseForTime instance variable depending on the contents of the optimiseSpeed attribute of the provided XML element. |
static java.lang.String |
getFileContents(java.io.RandomAccessFile raFile)Obtains the entire content of a file and returns it as a single string. |
private static java.lang.String |
getNextTenBytes(java.io.RandomAccessFile raFile)Return the 35 bytes from the provided file located after the current file pointer. |
private int |
getStepSize(long length)Returns the step size, for reading a chunk of data of total size length. |
private java.lang.String |
getStringInput()Returns the string used as the activity's input. |
void |
initialise()Gets the data resource accessor for the files data resource according to whether the users credentials permit this access. |
private void |
insert(java.io.RandomAccessFile raFile, long offset, java.lang.String string)Insert a string into a particular place in a file, causing the contents of the file after that place to be shifted away from the start of the file by an amount equal to the length of the string. |
private java.lang.String |
obtainInput()Obtains all the data available from the activity providing its output to this activity, and returns it as a single string. |
static void |
overwriteString(java.io.RandomAccessFile raFile, long offset, java.lang.String replacementString)Overwrite a sequence of bytes in a file with a replacement string. |
private int |
parseInt(java.lang.String intString)Helper method to parse strings into integers. |
private long |
parseLength(java.lang.String string, long fileLength, long offset)Parses a string containing a representation of the length of a sequence of bytes within a file. |
private void |
parseLocate(org.w3c.dom.Element node)Parse a locate element, extracting its contents and setting the instance variables of this object appropriately. |
private InfiniteSet |
parseMatch(java.lang.String list)Parses an expression of a collection of integers. |
private long |
parseOffset(java.lang.String string, long fileLength)Parses a string containing a representation of an offset within a file or a line. |
private void |
performAction(java.io.RandomAccessFile raFile, int type, long offset, long length, boolean perLine, java.lang.String string)Perform an action on a file. |
private void |
performPerFileOffsetAndLength(java.io.RandomAccessFile raFile, long fileLength)Perform a replacement of text within a file, on a per-file basis, locating the text based on a range of bytes uniquely defined by an offset and a length. |
private void |
performPerFileRegexp(java.io.RandomAccessFile raFile, long fileLength)Perform a replacement of text within a file, on a per-file basis, locating the text based on matches of a regular expression. |
private void |
performPerLineOffsetAndLength(java.io.RandomAccessFile raFile, long fileLength)Perform a replacement of text within a file, on a per-line basis, locating the text based on a range of bytes uniquely defined by an offset and a length. |
private void |
performPerLineRegexp(java.io.RandomAccessFile raFile, long fileLength)Perform a replacement of text within a file, on a per-line basis, locating the text based on matches of a regular expression. |
private java.lang.String |
performSubstitutions(java.lang.String string, AbstractMatcher matcher)Return a string equal to the provided string, but with group variables substituted with their actual value, in the context of a particular regular expression match. |
void |
processBlock()Performs an iteration of the processing of an activity. |
java.lang.String |
readLine(java.io.RandomAccessFile raFile)Read a line from the file |
private void |
replace(java.io.RandomAccessFile raFile, long offset, long length, java.lang.String string)Replace a sequence of contiguous bytes in a file with a string. |
private void |
replaceString(java.io.RandomAccessFile raFile, long offset, long length, java.lang.String replacementString)Replace a sequence of contiguous bytes in a file with a string. |
private java.lang.String |
replaceStringInString(java.lang.String hostString, int offset, int length, java.lang.String replacement)Replaces a substring within a string with another string. |
static void |
replaceWithLongerString(java.io.RandomAccessFile raFile, long offset, long length, java.lang.String replacementString, int step)Replace a sequence of contiguous bytes in a file with a replacement string, which is strictly longer than the sequence of bytes. |
static void |
replaceWithShorterString(java.io.RandomAccessFile raFile, long offset, long length, java.lang.String replacementString, int step)Replace a sequence of contiguous bytes in a file with a replacement string, which is strictly shorter than the sequence of bytes. |
| Methods inherited from class uk.org.ogsadai.activity.Activity |
cleanUp, connectsTo, createOutputPipe, getActivityConfiguration, getActivityName, getCause, getName, getObservableStatus, getProperties, getSession, getStatus, hasActivityConfiguration, hasProperties, process, processFirst, setActivityName, setCompleted, setError |
| Methods inherited from class java.lang.Object |
clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait |
| Field Detail |
private static final java.lang.String COPYRIGHT_NOTICE
private static final DAILogger LOG
public static final java.lang.String SEQ_SEPARATOR
public static final int STEP_SIZE_UPPER_LIMIT
public static final int NONE
public static final int DELETE
public static final int REPLACE
public static final int APPEND
public static final int INSERT
public static final int OFFSET_AND_LENGTH
public static final int REGEXP
public static final boolean PER_FILE
public static final boolean PER_LINE
private int mType
private java.lang.String mFilename
private java.io.File mFile
private java.io.RandomAccessFile mRaFile
private long mFileLength
private java.lang.String mOffset
private java.lang.String mLength
private java.lang.String mRegexp
private InfiniteSet mMatch
private boolean mMultiline
private boolean mOptimiseForTime
private int mAction
private BlockReader mInput
private BlockWriter mOutput
private java.lang.String mString
private boolean mAlreadyReturnedBlank
| Constructor Detail |
public FileWritingActivity(org.w3c.dom.Element element)
throws ActivitySpecificationException,
ActivityCreationException
| Method Detail |
private InfiniteSet parseMatch(java.lang.String list)
throws ActivitySpecificationException
The expression must be a comma-separated list of values. The values may be any of:
| Value | String | Represents |
|---|---|---|
| Single, positive integers | x | The integer x |
| Finite ranges of positive integers | x-y |
The interval [x, y], where x < y |
| Infinite ranges of positive integers | x- |
The interval [x, infinity) |
| Strictly increasing infinite sequences of positive integers | x1:x2:x3:... |
The infinite sequence (x1, x2, x3, ...), where x1 < x2 and x2 < x3 |
list - The comma-separated list of valuesActivitySpecificationException - If there was a syntax error in the list of values
private int parseInt(java.lang.String intString)
throws DAINumberFormatException
intString - String to parseDAINumberFormatException - If the string cannot be parsed into an integer.
private void parseLocate(org.w3c.dom.Element node)
throws ActivitySpecificationException
locate element, extracting its contents and setting the instance variables of this object appropriately.
node - The element to parseActivitySpecificationException - If there is a syntax error in the match expressionprivate void extractOptimiseAttribute(org.w3c.dom.Element node)
mOptimiseForTime instance variable depending on the contents of the optimiseSpeed attribute of the provided XML element. Iff the element does not contain this attribute, or contains the attribute with a boolean true value then the field is set to true.
node - The XML element
private void extractFromOrTextAttribute(org.w3c.dom.Element node)
throws ActivitySpecificationException
from or text attributes of the given XML element, and sets instance variables accordingly.
node - the XML elementActivitySpecificationException - If neither from nor text attributes were specified
private long parseOffset(java.lang.String string,
long fileLength)
throws DAINumberFormatException,
DAIOutOfBoundsException
start or end, representing the beginning and end of the file or the line, respectively.
string - The string to parsefileLength - The length of the file or the lineDAINumberFormatException - If the string did not contain an integer.DAIOutOfBoundsException - If the string contained an out of bounds integer.
private long parseLength(java.lang.String string,
long fileLength,
long offset)
throws DAINumberFormatException,
DAIOutOfBoundsException
toEnd, which represents the length from the given offset to the end of the file.
string - The string to parsefileLength - The total length of the fileoffset - The offset from which this length is considered to startDAINumberFormatException - If the string did not contain an integer.DAIOutOfBoundsException - If the string contained an out of bounds integer.
public void initialise()
throws ActivitySpecificationException,
ActivityExecutionException
AbstractFileActivityinitialise in class AbstractFileActivityActivitySpecificationException - If the user is not permitted to access the resource.ActivityExecutionException - If some internal problem occurs.Activity.initialise()public void processBlock()
ActivitysetCompleted method to indicate that processing is complete, or the setError method if an error occurs that will prevent the processing from completing.
processBlock in class Activity
private void performPerLineRegexp(java.io.RandomAccessFile raFile,
long fileLength)
throws NonIncreasingSequenceException,
MalformedRegexpPatternException,
MalformedReplacementStringException,
UnsupportedRegexpPatternFormatException,
java.io.IOException
raFile - The file to replace text withinfileLength - The length of the fileNonIncreasingSequenceException - If the match expression contained a sequence of integers which was not strictly increasingMalformedRegexpPatternException - If the regular expression contains a syntax error.MalformedReplacementStringException - If there was a syntax error in the stringUnsupportedRegexpPatternFormatException - If the regular expression is unsupported.java.io.IOException - If there's a problem accessing the file
private void performPerFileRegexp(java.io.RandomAccessFile raFile,
long fileLength)
throws NonIncreasingSequenceException,
MalformedRegexpPatternException,
MalformedReplacementStringException,
UnsupportedRegexpPatternFormatException,
java.io.IOException
raFile - The file to replace text withinfileLength - The length of the fileNonIncreasingSequenceException - If the match expression contained a sequence of integers which was not strictly increasingMalformedRegexpPatternException - If the regular expression contains a syntax error.MalformedReplacementStringException - If there was a syntax error in the stringUnsupportedRegexpPatternFormatException - If the regular expression is unsupported.java.io.IOException - If there's a problem accessing the file
private void performPerLineOffsetAndLength(java.io.RandomAccessFile raFile,
long fileLength)
throws ActivitySpecificationException,
java.io.IOException
raFile - The file to replace text withinfileLength - The length of the fileActivitySpecificationException - If the offset or length are invalid for the requested operation.java.io.IOException - If there's a problem accessing the file
private void performPerFileOffsetAndLength(java.io.RandomAccessFile raFile,
long fileLength)
throws ActivitySpecificationException,
java.io.IOException
raFile - The file to replace text withinfileLength - The length of the fileActivitySpecificationException - If the offset or length are invalid for the requested operation.java.io.IOException - If there's a problem accessing the file
private java.lang.String performSubstitutions(java.lang.String string,
AbstractMatcher matcher)
throws MalformedReplacementStringException
Groups are defined by bracketing in a regular expression, and are numbered from left-to-right. Group 0 denotes the entire regular expression. Groups may be referenced by group variables in a string, of the form $0, $1, etc. These may also be written ${0}, ${1}, etc., in order to disambiguate the end of the group variable and subsequent digits in the string.
Consider the following example:
Happy birthday!^H(.?)p+y (bi([rst])([a-z])hday)!Happy birthday!abirthdayrt$3$1$4$4y $2!ratty birthday!string - Text which may contain references to groups by referring to $nmatcher - The matcher object which has already found a matchMalformedReplacementStringException - If there was a syntax error in the string
private java.lang.String replaceStringInString(java.lang.String hostString,
int offset,
int length,
java.lang.String replacement)
hello with the string yes will result in the string hyeslo.
hostString - The string within which to replace the substringoffset - The offset of the substring to replace, within hostStringlength - The length of the substring to replacereplacement - The string with which to replace the substringprivate int getStepSize(long length)
length. This will depend on whether the user has chosen to optimise for minimal speed or for minimal memory usage.
length - The total length of the data chunk
private void performAction(java.io.RandomAccessFile raFile,
int type,
long offset,
long length,
boolean perLine,
java.lang.String string)
throws java.io.IOException
raFile - The file within which to perform the actiontype - The action to perform. One of DELETE, REPLACE, INSERT, APPENDoffset - The offset at which delete, replace and insert will operatelength - The length of the selection of bytes used by delete and replaceperLine - true indicates that this action is being executed on a per-line basis, throughout the file, false indicates that this action is being executed once for the entire file.string - The string used by replace, insert and appendjava.io.IOException - If there's a problem accessing the file
private void append(java.io.RandomAccessFile raFile,
java.lang.String string)
throws java.io.IOException
Semantically equivalent to calling method replace with arguments raFile, raFile.length(), 0, string.
raFile - The file to append tostring - The string to appendjava.io.IOException - If there's a problem accessing the file
private void insert(java.io.RandomAccessFile raFile,
long offset,
java.lang.String string)
throws java.io.IOException
Semantically equivalent to calling method replace with arguments raFile, offset, 0, string.
raFile - The file to insert the string intooffset - The offset at which to insert the stringstring - TThe string to insertjava.io.IOException - If there's a problem accessing the file
private void delete(java.io.RandomAccessFile raFile,
long offset,
long length)
throws java.io.IOException
offset + length) will be shifted towards the start of the file by an amount equal to length.
Semantically equivalent to calling method replace with arguments raFile, offset, length, "".
raFile - The file to delete the bytes fromoffset - The offset at which to start deleting byteslength - The number of bytes to deletejava.io.IOException - If there's a problem accessing the file
private void replace(java.io.RandomAccessFile raFile,
long offset,
long length,
java.lang.String string)
throws java.io.IOException
Semantically equivalent to calling method replaceString with arguments raFile, offset, length, string.
raFile - The file to replace bytes withinoffset - The offset of the start of the sequence of bytes to replacelength - The number of bytes to replacestring - The string to replace the bytes withjava.io.IOException - If there's a problem accessing the fileprivate java.lang.String getStringInput()
private java.lang.String obtainInput()
OutOfMemoryError since it reads all of the output from the previous activity into memory. Instead, this should be implemented in a streaming fashion.
private void replaceString(java.io.RandomAccessFile raFile,
long offset,
long length,
java.lang.String replacementString)
throws java.io.IOException
raFile - The file to replace bytes withinoffset - The offset of the start of the sequence of bytes to replacelength - The number of bytes to replacereplacementString - The string to replace the bytes withjava.io.IOException - If there's a problem accessing the file
public static void overwriteString(java.io.RandomAccessFile raFile,
long offset,
java.lang.String replacementString)
throws java.io.IOException
raFile - The file to overwrite bytes inoffset - The offset of the start of the bytes to overwritereplacementString - The string to overwrite the bytes withjava.io.IOException - If there's a problem accessing the file
public static void replaceWithLongerString(java.io.RandomAccessFile raFile,
long offset,
long length,
java.lang.String replacementString,
int step)
throws java.io.IOException
This is achieved by performing the following three operations:
raFile - The file within which to replace bytesoffset - The offset of the start of the bytes to replacelength - The number of bytes to replacereplacementString - The string to replace the bytes with, which must be longer than the number of bytes to replacestep - The number of bytes we shift at a timejava.io.IOException - If there's a problem accessing the file
public static void replaceWithShorterString(java.io.RandomAccessFile raFile,
long offset,
long length,
java.lang.String replacementString,
int step)
throws java.io.IOException
This is achieved by performing the following three operations:
raFile - The file within which to replace bytesoffset - The offset of the start of the bytes to replacelength - The number of bytes to replacereplacementString - The string to replace the bytes with, which must be shorter than the number of bytes to replacestep - The number of bytes we shift at a timejava.io.IOException - If there's a problem accessing the file
public static java.lang.String getFileContents(java.io.RandomAccessFile raFile)
throws java.io.IOException
raFile - The file to get the content ofjava.io.IOException - If there was a problem accessing the file
public java.lang.String readLine(java.io.RandomAccessFile raFile)
throws java.io.IOException
raFile - The filejava.io.IOException - If there was a problem accessing the file
public static int charAt(java.io.RandomAccessFile raFile,
long pos)
throws java.io.IOException
raFile - The filepos - The offset within the filejava.io.IOException - If there was a problem accessing the file
private static java.lang.String getNextTenBytes(java.io.RandomAccessFile raFile)
throws java.io.IOException
raFile - The file to read the bytes fromjava.io.IOException - If there were problems accessing the file
|
|||||||||||
| PREV CLASS NEXT CLASS | FRAMES NO FRAMES | ||||||||||
| SUMMARY: NESTED | FIELD | CONSTR | METHOD | DETAIL: FIELD | CONSTR | METHOD | ||||||||||