Class FileParameter
- java.lang.Object
-
- All Implemented Interfaces:
java.lang.Cloneable
,HasTypeConstraints
,Typeable
,FileOrURLAccessor
,Changeable
,Debuggable
,DebugListener
,Derivable
,ModelErrorHandler
,MoMLExportable
,Moveable
,Nameable
,Settable
,ValueListener
- Direct Known Subclasses:
DefaultModelAttribute
,JSAccessor.ActionableAttribute
,LiveLink
public class FileParameter extends StringParameter implements FileOrURLAccessor
This is an attribute that specifies a file or URL. The value of this attribute, accessed by getExpression(), is a string that names a file or URL, possibly containing references to variables defined in scope using the syntax $ID, ${ID} or $(ID). The value returned by getToken() is the name of the file with such references resolved.
If this attribute contains a parameter named allowFiles with value false, then when a file browser is used to select a file, that file browser will be set to not show files (only directories will be shown). If this attribute contains a parameter named allowDirectories with value true, then the file browser will permit the user to select directories (the default behavior is that when a directory is selected, that directory is opened and its contained files and directories are listed).
If the model containing this attribute has been saved to a MoML file, then the file name can be given relative to the directory containing that MoML file. If the model has not been saved to a file, then the classpath is used for identifying relative file names.
Files can be given relative to a base, where the base is the URI of the first container above this one that has a URIAttribute. Normally, this URI specifies the file or URL containing the model definition. Thus, files that are referred to here can be kept in the same directory as the model, or in a related directory, and can moved together with the model.
The following special file names are understood:
- System.in: Standard input.
- System.out: Standard output.
Note, however, that these file names cannot be converted to URLs using the asURL() method. A file name can also contain the following strings that start with "$", which get substituted with the appropriate values.
Predefined values String Description Property $CWD
The current working directory user.dir
$HOME
The user's home directory user.home
$PTII
The home directory of the Ptolemy II installation ptolemy.ptII.dir
$TMPDIR
The temporary directory java.io.tmpdir
$USERNAME
The user's account name user.name
The above properties are normally set when a Ptolemy II application starts.
If a file name begins with the reference "$CLASSPATH", then when the file is opened for reading, the openForReading() method will search for the file relative to the classpath (using the getResource() method of the current class loader). This will only work for a file that exists, and thus the openForWriting() method will not understand the "$CLASSPATH" string; this makes sense since the classpath typically has several directories, and it would not be obvious where to create the file. The asURL() method also recognizes the "$CLASSPATH" string, but not the asFile() method (which is typically used when accessing a file for writing). NOTE: If the container of this parameter also contains a variable named CLASSPATH, then the value of that variable is used instead of the Java classpath.
- Since:
- Ptolemy II 4.0
- Version:
- $Id$
- Author:
- Edward A. Lee
- See Also:
URIAttribute
- Pt.AcceptedRating:
- Yellow (cxh)
- Pt.ProposedRating:
- Green (eal)
-
-
Nested Class Summary
-
Nested classes/interfaces inherited from class ptolemy.data.expr.Variable
Variable.CircularDependencyError, Variable.VariableScope
-
Nested classes/interfaces inherited from class ptolemy.kernel.util.NamedObj
NamedObj.ContainedObjectsIterator
-
Nested classes/interfaces inherited from interface ptolemy.kernel.util.Settable
Settable.Visibility
-
-
Field Summary
-
Fields inherited from class ptolemy.data.expr.Variable
_currentExpression, _needsEvaluation, _parserScope, _parseTreeValid, _suppressVariableSubstitution, _valueListeners
-
Fields inherited from class ptolemy.kernel.util.NamedObj
_changeListeners, _changeLock, _changeRequests, _debugging, _debugListeners, _deferChangeRequests, _elementName, _isPersistent, _verbose, _workspace, ATTRIBUTES, CLASSNAME, COMPLETE, CONTENTS, DEEP, FULLNAME, LINKS
-
Fields inherited from interface ptolemy.kernel.util.Settable
EXPERT, FULL, NONE, NOT_EDITABLE
-
-
Constructor Summary
Constructors Constructor Description FileParameter(NamedObj container, java.lang.String name)
Construct an attribute with the given name contained by the specified container.FileParameter(NamedObj container, java.lang.String name, boolean isOutput)
Construct an attribute with the given name contained by the specified container.
-
Method Summary
All Methods Instance Methods Concrete Methods Modifier and Type Method Description java.io.File
asFile()
Return the file as a File object.java.net.URL
asURL()
Return the file as a URL.java.lang.Object
clone(Workspace workspace)
Clone the attribute into the specified workspace.void
close()
Close the file.java.net.URI
getBaseDirectory()
Return the directory to use as the base for relative file or URL names.boolean
isOutput()
Return whether the file is to be written to.java.io.BufferedReader
openForReading()
Open the file or URL for reading.java.io.Writer
openForWriting()
Open the file for writing.java.io.Writer
openForWriting(boolean append)
Open the file for writing or appending.void
setBaseDirectory(java.net.URI directory)
Set the directory to use as the base for relative file or URL names.-
Methods inherited from class ptolemy.data.expr.StringParameter
stringValue
-
Methods inherited from class ptolemy.data.expr.Parameter
addChoice, exportMoML, getChoices, removeAllChoices, removeChoice
-
Methods inherited from class ptolemy.data.expr.Variable
_description, _evaluate, _getCurrentExpression, _notifyValueListeners, _parseIfNecessary, _propagate, _propagateToValueListeners, _propagateValue, _setToken, _setTokenAndNotify, addValueListener, attributeChanged, getDeclaredType, getExpression, getFreeIdentifiers, getParserScope, getScope, getScope, getToken, getType, getTypeTerm, getValueAsString, getVariable, getVisibility, invalidate, isKnown, isLazy, isStringMode, isSuppressVariableSubstitution, isTypeAcceptable, removeValueListener, reset, setContainer, setExpression, setLazy, setName, setParseTreeEvaluator, setStringMode, setSuppressVariableSubstitution, setToken, setToken, setTypeAtLeast, setTypeAtLeast, setTypeAtMost, setTypeEquals, setTypeSameAs, setUnknown, setValueListenerAsWeakDependency, setVisibility, stringRepresentation, toString, typeConstraintList, typeConstraints, validate, valueChanged
-
Methods inherited from class ptolemy.kernel.util.AbstractSettableAttribute
getDefaultExpression
-
Methods inherited from class ptolemy.kernel.util.Attribute
_checkContainer, _getContainedObject, _propagateExistence, getContainer, moveDown, moveToFirst, moveToIndex, moveToLast, moveUp, updateContent
-
Methods inherited from class ptolemy.kernel.util.NamedObj
_addAttribute, _adjustOverride, _attachText, _cloneFixAttributeFields, _containedDecorators, _copyChangeRequestList, _debug, _debug, _debug, _debug, _debug, _executeChangeRequests, _exportMoMLContents, _getIndentPrefix, _isMoMLSuppressed, _markContentsDerived, _notifyHierarchyListenersAfterChange, _notifyHierarchyListenersBeforeChange, _removeAttribute, _splitName, _stripNumericSuffix, _validateSettables, addChangeListener, addDebugListener, addHierarchyListener, attributeDeleted, attributeList, attributeList, attributeTypeChanged, clone, containedObjectsIterator, decorators, deepContains, depthInHierarchy, description, description, event, executeChangeRequests, exportMoML, exportMoML, exportMoML, exportMoML, exportMoMLPlain, getAttribute, getAttribute, getAttributes, getChangeListeners, getClassName, getDecoratorAttribute, getDecoratorAttributes, getDerivedLevel, getDerivedList, getDisplayName, getElementName, getFullName, getModelErrorHandler, getName, getName, getPrototypeList, getSource, handleModelError, isDeferringChangeRequests, isOverridden, isPersistent, lazyContainedObjectsIterator, message, notifyOfNameChange, propagateExistence, propagateValue, propagateValues, removeAttribute, removeChangeListener, removeDebugListener, removeHierarchyListener, requestChange, setClassName, setDeferringChangeRequests, setDerivedLevel, setDisplayName, setModelErrorHandler, setPersistent, setSource, sortContainedObjects, toplevel, uniqueName, validateSettables, workspace
-
Methods inherited from class java.lang.Object
equals, finalize, getClass, hashCode, notify, notifyAll, wait, wait, wait
-
Methods inherited from interface ptolemy.kernel.util.Nameable
description, getContainer, getFullName, getName, getName, setName
-
Methods inherited from interface ptolemy.kernel.util.Settable
addValueListener, getDefaultExpression, getDisplayName, getExpression, getValueAsString, getVisibility, removeValueListener, setExpression, setVisibility, validate
-
-
-
-
Constructor Detail
-
FileParameter
public FileParameter(NamedObj container, java.lang.String name) throws IllegalActionException, NameDuplicationException
Construct an attribute with the given name contained by the specified container. The container argument must not be null, or a NullPointerException will be thrown. This attribute will use the workspace of the container for synchronization and version counts. If the name argument is null, then the name is set to the empty string. Increment the version of the workspace.- Parameters:
container
- The container.name
- The name of this attribute.- Throws:
IllegalActionException
- If the attribute is not of an acceptable class for the container, or if the name contains a period.NameDuplicationException
- If the name coincides with an attribute already in the container.
-
FileParameter
public FileParameter(NamedObj container, java.lang.String name, boolean isOutput) throws IllegalActionException, NameDuplicationException
Construct an attribute with the given name contained by the specified container. The container argument must not be null, or a NullPointerException will be thrown. This attribute will use the workspace of the container for synchronization and version counts. If the name argument is null, then the name is set to the empty string. Increment the version of the workspace.- Parameters:
container
- The container.name
- The name of this attribute.isOutput
- Whether the file is to be written to.- Throws:
IllegalActionException
- If the attribute is not of an acceptable class for the container, or if the name contains a period.NameDuplicationException
- If the name coincides with an attribute already in the container.
-
-
Method Detail
-
asFile
public java.io.File asFile() throws IllegalActionException
Return the file as a File object. This method first attempts to directly use the file name to construct the File. If the resulting File is not absolute, then it attempts to resolve it relative to the base directory returned by getBaseDirectory(). If there is no such base URI, then it simply returns the relative File object.The file need not exist for this method to succeed. Thus, this method can be used to determine whether a file with a given name exists, prior to calling openForWriting(). A typical usage looks like this:
FileParameter fileParameter; ... File file = fileParameter.asFile(); if (file.exists()) { ... Ask the user if it's OK to overwrite... ... Throw an exception if not... } // The following will overwrite an existing file. Writer writer = new PrintWriter(fileParameter.openForWriting());
If the name begins with "$CLASSPATH", then search for the file relative to the classpath. If the name begins with $CLASSPATH and a file is not found in the CLASSPATH, then the value of $PTII is substituted in a returned. If this is not done, then the File that is created would have $CLASSPATH or xxxxxxCLASSPATHxxxxxx in the file pathname, which is unlikely to be useful.
- Specified by:
asFile
in interfaceFileOrURLAccessor
- Returns:
- A File, or null if no file name has been specified.
- Throws:
IllegalActionException
- If a parse error occurs reading the file name.- See Also:
getBaseDirectory()
-
asURL
public java.net.URL asURL() throws IllegalActionException
Return the file as a URL. If the file name is relative, then it is interpreted as being relative to the directory returned by getBaseDirectory(). If the name begins with "$CLASSPATH", then search for the file relative to the classpath. If no file is found, then it throws an exception.- Specified by:
asURL
in interfaceFileOrURLAccessor
- Returns:
- A URL, or null if no file name or URL has been specified.
- Throws:
IllegalActionException
- If the file cannot be read, or if the file cannot be represented as a URL (e.g. System.in), or the name specification cannot be parsed.
-
clone
public java.lang.Object clone(Workspace workspace) throws java.lang.CloneNotSupportedException
Clone the attribute into the specified workspace. The resulting object has no base directory name nor any reference to any open stream.
-
close
public void close() throws IllegalActionException
Close the file. If it has not been opened using openForReading() or openForWriting(), then do nothing. Also, if the file is System.in or System.out, then do not close it (it does not make sense to close these files).- Specified by:
close
in interfaceFileOrURLAccessor
- Throws:
IllegalActionException
- If the file or URL cannot be closed.
-
getBaseDirectory
public java.net.URI getBaseDirectory()
Return the directory to use as the base for relative file or URL names. If setBaseDirectory() has been called, then that directory is returned. Otherwise, the directory containing the file returned by URIAttribute.getModelURI() is returned, which is the URI of the first container above this attribute in the hierarchy that has a URIAttribute, or null if there none.- Specified by:
getBaseDirectory
in interfaceFileOrURLAccessor
- Returns:
- A directory name, or null if there is none.
- See Also:
setBaseDirectory(URI)
,URIAttribute.getModelURI(NamedObj)
-
isOutput
public boolean isOutput()
Return whether the file is to be written to.- Returns:
- True if the file is to be written and false otherwise.
-
openForReading
public java.io.BufferedReader openForReading() throws IllegalActionException
Open the file or URL for reading. If the name begins with "$CLASSPATH", then search for the file relative to the classpath. If the name is relative, then it is relative to the directory returned by getBaseDirectory(). This method will first close any previously opened file, whether it was opened for reading or writing.- Specified by:
openForReading
in interfaceFileOrURLAccessor
- Returns:
- A buffered reader.
- Throws:
IllegalActionException
- If the file or URL cannot be opened.- See Also:
getBaseDirectory()
-
openForWriting
public java.io.Writer openForWriting() throws IllegalActionException
Open the file for writing. If the file does not exist, then create it. If the file name is not absolute, the it is assumed to be relative to the base directory returned by getBaseDirectory(). If permitted, this method will return a Writer that will simply overwrite the contents of the file. It is up to the user of this method to check whether this is OK (by first calling asFile() and calling exists() on the returned value). This method will first close any previously opened file, whether it was opened for reading or writing.- Specified by:
openForWriting
in interfaceFileOrURLAccessor
- Returns:
- A writer, or null if no file name has been specified.
- Throws:
IllegalActionException
- If the file cannot be opened or created.- See Also:
getBaseDirectory()
,asFile()
-
openForWriting
public java.io.Writer openForWriting(boolean append) throws IllegalActionException
Open the file for writing or appending. If the file does not exist, then create it. If the file name is not absolute, the it is assumed to be relative to the base directory returned by getBaseDirectory(). If permitted, this method will return a Writer that will simply overwrite the contents of the file. It is up to the user of this method to check whether this is OK (by first calling asFile() and calling exists() on the returned value). This method will first close any previously opened file, whether it was opened for reading or writing.- Specified by:
openForWriting
in interfaceFileOrURLAccessor
- Parameters:
append
- If true, then append to the file rather than overwriting.- Returns:
- A writer, or null if no file name has been specified.
- Throws:
IllegalActionException
- If the file cannot be opened or created.- See Also:
getBaseDirectory()
,asFile()
-
setBaseDirectory
public void setBaseDirectory(java.net.URI directory)
Set the directory to use as the base for relative file or URL names.- Specified by:
setBaseDirectory
in interfaceFileOrURLAccessor
- Parameters:
directory
- The base directory.- See Also:
getBaseDirectory()
,URIAttribute.getModelURI(NamedObj)
-
-