ccs.cpc.impl
Class ResultWrapperVFile

java.lang.Object
  extended by ccs.cpc.VFile
      extended by ccs.cpc.impl.ResultWrapperVFile

 class ResultWrapperVFile
extends VFile

Wraps a VFile which is in a result set. (The root VFile of a ResultsVDevice is a ResultsVFile; the ResultsVFile stores a list of ResultWrapperVFiles, each of which wraps an arbitrary VFile.) The wrapper delegates all of its VFile behaviour to the wrapped VFile inside it, but has extra API which is used to manage the result set. In particular, the wrapper makes it possible to distinguish two references to the same VFile within a result set; this ensures that tracking will work correctly. Only ResultsVFiles should ever create these. Synchronisation is handled by the owning ResultsVFile. All API which isn't part of VFile is reserved for ResultsVFile.


Nested Class Summary
 
Nested classes/interfaces inherited from class ccs.cpc.VFile
VFile.BasicRSSorter, VFile.ExtnSorter, VFile.NameSorter
 
Field Summary
 
Fields inherited from class ccs.cpc.VFile
hitpoints, isSelected
 
Constructor Summary
ResultWrapperVFile(ResultsVFile resultsVFile, VFile vf, int refcount, ResultWrapperVFile prev)
          Ctor.
 
Method Summary
 void acceptReal(java.lang.String leafname, ccs.utils.SwappingBuffer data)
          Directories: copy this data into yourself, creating a VFile for it.
 boolean contains(java.lang.String leafname)
          Directories: have you a file called this?
(package private)  void decRefcount()
           
 VFile getContainee(java.lang.String leafname)
          Directories: you contain this, we'd like it.
 VFile[] getContents()
          Directories: your contents please.
 VFileMeta getMetadata()
          Return metadata for yourself, if available.
(package private)  ResultWrapperVFile getNext()
           
(package private)  VFile getPayload()
           
(package private)  ResultWrapperVFile getPrev()
           
(package private)  int getRefcount()
           
 long getSize()
          Files: return your size, if known, else -1L.
 VFile getTrackingParent()
          Return your parent folder for tracking purposes.
 boolean isExist()
          Does this file still exist?
(package private)  boolean isUnreferenced()
           
 boolean isWritable()
          whether this vfile can be updated (i.e. virtualised).
 void mkdir(java.lang.String leafname)
          Directories: create this subdir.
 ccs.utils.SwappingBuffer realiseAsBuffer()
          For leaf nodes, put your data into a SwappingBuffer.
 java.io.File realiseAsFile()
          For leaf nodes: turn this VFile into a disk File.
 void rename(VFile bratvf, java.lang.String newname)
          Directories: rename the attached VFile to the name given.
(package private)  void unlink()
           
 void virtualiseFromFile(java.io.File f, boolean maybeChanged)
          For leaf nodes, your contents becomes the contents of the supplied physical file (which is usually an updated form of the result of a realise() earlier).
 void virtualiseFromWad(byte[] wad, boolean maybeChanged)
          For leaf nodes, your contents become the contents of the supplied wad.
 void wipe(VFile bratvf)
          Directories: wipe this VFile and its contents from the face of the world.
 
Methods inherited from class ccs.cpc.VFile
acceptVirtual, createRealiseMonitor, disposeRealiseMonitor, equals, fsanitise, getDecoratedName, getDevice, getDisplayName, getID, getName, getParent, getPath, hashCode, hasInternalSeparator, isDir, isRealiseInstant, normaliseName, postrecursionHook, prerecursionHook, toString
 
Methods inherited from class java.lang.Object
clone, finalize, getClass, notify, notifyAll, wait, wait, wait
 

Constructor Detail

ResultWrapperVFile

ResultWrapperVFile(ResultsVFile resultsVFile,
                   VFile vf,
                   int refcount,
                   ResultWrapperVFile prev)
Ctor.

Parameters:
resultsVFile - The result set this wrapper belongs to.
vf - The VFile this wraps. NB. a wrapper can wrap another wrapper, and so on ad infinitum; any such "inner wrappers" tunnel straight through to the real VFile at the end and effectively don't exist.
refcount - The resultsVFile maintains a mapping between decorated names and the (wrappers around each of the) VFiles that they name. Each wrapper maintains a count of how many entries in the result set's entry list refer to the specified name; a mapping is deleted when the ref count reaches zero.
Method Detail

getRefcount

int getRefcount()

decRefcount

void decRefcount()

isUnreferenced

boolean isUnreferenced()

getNext

ResultWrapperVFile getNext()

getPrev

ResultWrapperVFile getPrev()

unlink

void unlink()

getPayload

VFile getPayload()

getTrackingParent

public VFile getTrackingParent()
Description copied from class: VFile
Return your parent folder for tracking purposes. For result sets; everyone else can use the default.

Overrides:
getTrackingParent in class VFile

acceptReal

public void acceptReal(java.lang.String leafname,
                       ccs.utils.SwappingBuffer data)
                throws java.io.IOException
Description copied from class: VFile
Directories: copy this data into yourself, creating a VFile for it. This is the basis for moving / copying. Implementations should tolerate (and strip out) any terminal separator character.

Specified by:
acceptReal in class VFile
Throws:
java.io.IOException

contains

public boolean contains(java.lang.String leafname)
                 throws java.io.IOException
Description copied from class: VFile
Directories: have you a file called this? Directory with final separator.

Specified by:
contains in class VFile
Throws:
java.io.IOException

getContainee

public VFile getContainee(java.lang.String leafname)
                   throws java.io.IOException
Description copied from class: VFile
Directories: you contain this, we'd like it. Directory with final separator.

Specified by:
getContainee in class VFile
Throws:
java.io.IOException

getContents

public VFile[] getContents()
                    throws java.io.IOException
Description copied from class: VFile
Directories: your contents please.

Specified by:
getContents in class VFile
Throws:
java.io.IOException

getMetadata

public VFileMeta getMetadata()
                      throws java.io.IOException
Description copied from class: VFile
Return metadata for yourself, if available. Else null.

Specified by:
getMetadata in class VFile
Throws:
java.io.IOException

getSize

public long getSize()
             throws java.io.IOException
Description copied from class: VFile
Files: return your size, if known, else -1L. This is part of what you need to return for getMetadata - hopefully this is slightly lighter weight.

Specified by:
getSize in class VFile
Throws:
java.io.IOException

isExist

public boolean isExist()
                throws java.io.IOException
Description copied from class: VFile
Does this file still exist?

Specified by:
isExist in class VFile
Throws:
java.io.IOException

isWritable

public boolean isWritable()
                   throws java.io.IOException
Description copied from class: VFile
whether this vfile can be updated (i.e. virtualised).

Specified by:
isWritable in class VFile
Throws:
java.io.IOException

mkdir

public void mkdir(java.lang.String leafname)
           throws java.io.IOException
Description copied from class: VFile
Directories: create this subdir. The name may or may not have a terminal separator.

Specified by:
mkdir in class VFile
Throws:
java.io.IOException

realiseAsBuffer

public ccs.utils.SwappingBuffer realiseAsBuffer()
                                         throws java.io.IOException
Description copied from class: VFile
For leaf nodes, put your data into a SwappingBuffer. The preferred method of access to data.

Specified by:
realiseAsBuffer in class VFile
Throws:
java.io.IOException

realiseAsFile

public java.io.File realiseAsFile()
                           throws java.io.IOException
Description copied from class: VFile
For leaf nodes: turn this VFile into a disk File. This should only be used where a file is really necessary (e.g. external viewers). For all other uses, prefer realiseAsBuffer to suppress redundant copies. This is an identity operation for DiskVFiles.

Specified by:
realiseAsFile in class VFile
Throws:
java.io.IOException

rename

public void rename(VFile bratvf,
                   java.lang.String newname)
            throws java.io.IOException,
                   ccs.LoseException,
                   ccs.ArghException
Description copied from class: VFile
Directories: rename the attached VFile to the name given. The VFile might be a folder. The name may or may not have a terminal separator; implementations should tolerate any combination. (Folder with / without, file with / without).

Specified by:
rename in class VFile
Throws:
java.io.IOException
ccs.LoseException
ccs.ArghException

virtualiseFromFile

public void virtualiseFromFile(java.io.File f,
                               boolean maybeChanged)
                        throws java.io.IOException
Description copied from class: VFile
For leaf nodes, your contents becomes the contents of the supplied physical file (which is usually an updated form of the result of a realise() earlier). any copy other than yourself must vanish. maybeChanged is true if the operation for which it was realise might have changed it - if false no update is necessary. A NOP for DiskVFiles, an update() and FileKill for ArchVFiles.

Specified by:
virtualiseFromFile in class VFile
Throws:
java.io.IOException

virtualiseFromWad

public void virtualiseFromWad(byte[] wad,
                              boolean maybeChanged)
                       throws java.io.IOException
Description copied from class: VFile
For leaf nodes, your contents become the contents of the supplied wad. See virtualiseFromFile.

Specified by:
virtualiseFromWad in class VFile
Throws:
java.io.IOException

wipe

public void wipe(VFile bratvf)
          throws java.io.IOException,
                 ccs.LoseException,
                 ccs.ArghException
Description copied from class: VFile
Directories: wipe this VFile and its contents from the face of the world. It never existed. If the VFile is a directory, it must be empty.

Specified by:
wipe in class VFile
Throws:
java.io.IOException
ccs.LoseException
ccs.ArghException