# Class VotCopyHandler

java.lang.Object
uk.ac.starlink.ttools.copy.VotCopyHandler

All Implemented Interfaces:
  `ContentHandler, LexicalHandler, uk.ac.starlink.votable.TableHandler`

public class VotCopyHandler extends Object implements ContentHandler, LexicalHandler, uk.ac.starlink.votable.TableHandler
SAX content handler which takes SAX events and converts them to an output stream in a VOTable-sensitive way. As far as is possible given the SAX model, each input SAX event is sent to the output unchanged apart from events within a DATA element, which are written in one of the VOTable encodings as selected by the user.

One exception to the rule is that, for implementation-specific reasons, FIELD elements with `datatype="bit"` are changed to have `datatype="boolean"` instead.

Since:
  18 Apr 2005
Author:
  Mark Taylor (Starlink)

## Constructor Summary

Constructors
Constructor
Description
`VotCopyHandler(boolean strict, uk.ac.starlink.votable.DataFormat format, uk.ac.starlink.votable.VOTableVersion version, boolean inline, boolean squashMagic, String base, boolean cache, uk.ac.starlink.table.StoragePolicy policy)`
Constructor.

## Method Summary

Modifier and Type
Method
Description
`void`
`characters(char[] ch, int start, int length)`
`void`
`comment(char[] ch, int start, int length)`
`void`
`endCDATA()`
`void`
`endDocument()`
`void`
`endDTD()`
`void`
`endElement(String namespaceURI, String localName, String qName)`
`void`
`endEntity(String name)`
`void`
`endPrefixMapping(String prefix)`
`void`
`endTable()`
`void`
`ignorableWhitespace(char[] ch, int start, int length)`
`void`
`processingInstruction(String target, String data)`
`void`
`rowData(Object[] row)`
`void`
`setDocumentLocator(Locator locator)`
`void`
`setOutput(Writer out)`
Sets the output stream for output.
`void`
`skippedEntity(String name)`
`void`
`startCDATA()`
`void`
`startDocument()`
`void`
`startDTD(String name, String publicId, String systemId)`
`void`
`startElement(String namespaceURI, String localName, String qName, Attributes atts)`
`void`
`startEntity(String name)`
`void`
`startPrefixMapping(String prefix, String uri)`
`void`
`startTable(uk.ac.starlink.table.StarTable meta)`
`void`
`writeDataElement(uk.ac.starlink.table.StarTable table)`
Outputs a DATA element representing a table to the destination stream according to the current settings.

### Methods inherited from class Object

`clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait`

### Methods inherited from interface ContentHandler

`declaration`

## Constructor Details

### VotCopyHandler

public VotCopyHandler(boolean strict, uk.ac.starlink.votable.DataFormat format, uk.ac.starlink.votable.VOTableVersion version, boolean inline, boolean squashMagic, String base, boolean cache, uk.ac.starlink.table.StoragePolicy policy)
Constructor. The copy can be done in either cached or streamed mode, determined by the `cache` parameter. In streamed mode, each row encountered in the input SAX stream is copied to the output stream as soon as it is encountered. In cached mode, the whole table is assembled first, and then written out at the end of the input. Streamed mode is more efficient, but may not be possible under some circumstances, e.g. for FITS output when the number of rows is not known in advance. If a streamed copy is attempted when it's not possible, it will fail with a `UnrepeatableSequenceException` (wrapped in a SAXException).

Parameters:
  `strict` - whether to effect strict interpretation of the VOTable standard
  `format` - encoding type for output DATA elements; may be null for DATA-less output
  `version` - VOTable standard version for output; may be null for unknown or indeterminate, in which case input version will be copied as far as possible
  `inline` - true for tables written inline, false for tables written to an href-referenced stream
  `squashMagic` - if true, any VALUES/null attributes are not passed through
  `base` - base table location; used to construct URIs for out-of-line table streams (only used if inline=false)
  `cache` - whether tables will be cached prior to writing
  `policy` - storage policy for cached tables

## Method Details

### setOutput

public void setOutput(Writer out)
Sets the output stream for output. By default output is written to standard output using the platform's default encoding.

Parameters:
  `out` - output writer

### startTable

public void startTable(uk.ac.starlink.table.StarTable meta) throws SAXException

Specified by:
  `startTable` in interface `uk.ac.starlink.votable.TableHandler`
Throws:
  `SAXException`

### rowData

public void rowData(Object[] row) throws SAXException

Specified by:
  `rowData` in interface `uk.ac.starlink.votable.TableHandler`
Throws:
  `SAXException`

### endTable

public void endTable() throws SAXException

Specified by:
  `endTable` in interface `uk.ac.starlink.votable.TableHandler`
Throws:
  `SAXException`

### setDocumentLocator

public void setDocumentLocator(Locator locator)

Specified by:
  `setDocumentLocator` in interface `ContentHandler`

### startDocument

public void startDocument() throws SAXException

Specified by:
  `startDocument` in interface `ContentHandler`
Throws:
  `SAXException`

### endDocument

public void endDocument() throws SAXException

Specified by:
  `endDocument` in interface `ContentHandler`
Throws:
  `SAXException`

### startElement

public void startElement(String namespaceURI, String localName, String qName, Attributes atts) throws SAXException

Specified by:
  `startElement` in interface `ContentHandler`
Throws:
  `SAXException`

### endElement

public void endElement(String namespaceURI, String localName, String qName) throws SAXException

Specified by:
  `endElement` in interface `ContentHandler`
Throws:
  `SAXException`

### characters

public void characters(char[] ch, int start, int length) throws SAXException

Specified by:
  `characters` in interface `ContentHandler`
Throws:
  `SAXException`

### ignorableWhitespace

public void ignorableWhitespace(char[] ch, int start, int length) throws SAXException

Specified by:
  `ignorableWhitespace` in interface `ContentHandler`
Throws:
  `SAXException`

### startPrefixMapping

public void startPrefixMapping(String prefix, String uri) throws SAXException

Specified by:
  `startPrefixMapping` in interface `ContentHandler`
Throws:
  `SAXException`

### endPrefixMapping

public void endPrefixMapping(String prefix) throws SAXException

Specified by:
  `endPrefixMapping` in interface `ContentHandler`
Throws:
  `SAXException`

### skippedEntity

public void skippedEntity(String name) throws SAXException

Specified by:
  `skippedEntity` in interface `ContentHandler`
Throws:
  `SAXException`

### processingInstruction

public void processingInstruction(String target, String data) throws SAXException

Specified by:
  `processingInstruction` in interface `ContentHandler`
Throws:
  `SAXException`

### comment

public void comment(char[] ch, int start, int length) throws SAXException

Specified by:
  `comment` in interface `LexicalHandler`
Throws:
  `SAXException`

### startCDATA

public void startCDATA() throws SAXException

Specified by:
  `startCDATA` in interface `LexicalHandler`
Throws:
  `SAXException`

### endCDATA

public void endCDATA() throws SAXException

Specified by:
  `endCDATA` in interface `LexicalHandler`
Throws:
  `SAXException`

### startDTD

public void startDTD(String name, String publicId, String systemId) throws SAXException

Specified by:
  `startDTD` in interface `LexicalHandler`
Throws:
  `SAXException`

### endDTD

public void endDTD() throws SAXException

Specified by:
  `endDTD` in interface `LexicalHandler`
Throws:
  `SAXException`

### startEntity

public void startEntity(String name) throws SAXException

Specified by:
  `startEntity` in interface `LexicalHandler`
Throws:
  `SAXException`

### endEntity

public void endEntity(String name) throws SAXException

Specified by:
  `endEntity` in interface `LexicalHandler`
Throws:
  `SAXException`

### writeDataElement

public void writeDataElement(uk.ac.starlink.table.StarTable table) throws IOException
Outputs a DATA element representing a table to the destination stream according to the current settings.

Parameters:
  `table` - table to write
Throws:
  `IOException`