Package uk.ac.starlink.datanode.nodes
Class ZipArchiveDataNode
java.lang.Object
uk.ac.starlink.datanode.nodes.DefaultDataNode
uk.ac.starlink.datanode.nodes.ZipArchiveDataNode
- All Implemented Interfaces:
DataNode
- Direct Known Subclasses:
ZipFileDataNode
,ZipStreamDataNode
DataNode representing a Zip archive.
This abstract class embodies the common functionality required by
its subclasses
ZipFileDataNode
and ZipStreamDataNode
.- Author:
- Mark Taylor (Starlink)
-
Constructor Summary
ConstructorsModifierConstructorDescriptionprotected
ZipArchiveDataNode
(uk.ac.starlink.util.DataSource datsrc) Constructs a ZipArchiveDataNode. -
Method Summary
Modifier and TypeMethodDescriptionboolean
TheDefaultDataNode
implementation of this method returnsfalse
.TheDefaultDataNode
implementation of this method throwsUnsupportedOperationException
(DefaultDataNode.allowsChildren()
is false).protected abstract Iterator
getChildIteratorAtLevel
(String level, DataNode parent) Returns an iterator over the DataNodes at a given level in the hierarchy of this archive.protected abstract List
Returns a list of all theZipEntry
objects in this zip archive.protected List
getEntriesAtLevel
(String level) Returns all the ZipEntry objects in this archive at a given level in the hierarchy.getName()
Gets the name of this object.Returns the string "ZIP".Returns a short sentence indicating what kind of node this is.Returns a default separator string.static boolean
isMagic
(byte[] magic) Tests whether the presented byte array looks like the start of a Zip archive.Methods inherited from class uk.ac.starlink.datanode.nodes.DefaultDataNode
beep, configureDetail, getChildMaker, getCreator, getDataObject, getDescription, getIcon, getLabel, getParentObject, getPathElement, hasDataObject, makeChild, makeErrorChild, registerDataObject, setChildMaker, setCreator, setDescription, setIconID, setLabel, setName, setParentObject, toString
-
Constructor Details
-
ZipArchiveDataNode
Constructs a ZipArchiveDataNode.- Parameters:
datsrc
- a data source corresponding to the archive; this is used for checking the magic number to see whether it looks like a zip archive or not- Throws:
NoSuchDataException
-
-
Method Details
-
getEntries
Returns a list of all theZipEntry
objects in this zip archive.- Returns:
- a List of all the
ZipEntry
objects which make up this zip archive. - Throws:
IOException
-
getChildIteratorAtLevel
protected abstract Iterator getChildIteratorAtLevel(String level, DataNode parent) throws IOException Returns an iterator over the DataNodes at a given level in the hierarchy of this archive. The iterator creates DataNodes for each ZipEntry in this archive whose name begins with the supplied stringlevel
.- Parameters:
level
- the required starting substring of the name of all ZipEntries to be represented in the resultparent
- the DataNode whose children the resulting nodes will be- Returns:
- an Iterator over
DataNode
objects corresponding to the ZipEntry objects specified bylevel
- Throws:
IOException
-
isMagic
public static boolean isMagic(byte[] magic) Tests whether the presented byte array looks like the start of a Zip archive.- Parameters:
magic
- a byte array containing the first few bytes of a source which might be a zip- Returns:
- true iff
magic
represents the magic number of a zip archive
-
getName
Description copied from interface:DataNode
Gets the name of this object. This is an intrinsic property of the object.- Specified by:
getName
in interfaceDataNode
- Overrides:
getName
in classDefaultDataNode
- Returns:
- the name of the object
-
getPathSeparator
Description copied from class:DefaultDataNode
Returns a default separator string.- Specified by:
getPathSeparator
in interfaceDataNode
- Overrides:
getPathSeparator
in classDefaultDataNode
- Returns:
- "."
-
getNodeTLA
Returns the string "ZIP".- Specified by:
getNodeTLA
in interfaceDataNode
- Overrides:
getNodeTLA
in classDefaultDataNode
- Returns:
- "ZIP"
-
getNodeType
Description copied from interface:DataNode
Returns a short sentence indicating what kind of node this is. The return value should be just a few words. As a rough guideline it should indicate what the implementing class is.- Specified by:
getNodeType
in interfaceDataNode
- Overrides:
getNodeType
in classDefaultDataNode
- Returns:
- a short description of the type of this
DataNode
-
allowsChildren
public boolean allowsChildren()Description copied from class:DefaultDataNode
TheDefaultDataNode
implementation of this method returnsfalse
.- Specified by:
allowsChildren
in interfaceDataNode
- Overrides:
allowsChildren
in classDefaultDataNode
- Returns:
true
if the node is of a type which can have child nodes,false
otherwise
-
getChildIterator
Description copied from class:DefaultDataNode
TheDefaultDataNode
implementation of this method throwsUnsupportedOperationException
(DefaultDataNode.allowsChildren()
is false).- Specified by:
getChildIterator
in interfaceDataNode
- Overrides:
getChildIterator
in classDefaultDataNode
- Returns:
- an
Iterator
over the children. Each object iterated over should be aDataNode
. Behaviour is undefined if this method is called on an object for whichallowsChildren
returnsfalse
.
-
getEntriesAtLevel
Returns all the ZipEntry objects in this archive at a given level in the hierarchy. The selected entries are all those whose name starts with the supplied stringlevel
.- Parameters:
level
- the required starting substring of the name of all ZipEntries to be returned- Returns:
- a list of all the
ZipEntry
objects at the givenlevel
- Throws:
IOException
-