public abstract class _Private_MarkupCallback
extends java.lang.Object
Customers who want to inject markup into their Ion documents will need to
extend _Private_MarkupCallback
, implement _Private_CallbackBuilder
to build new
instances, and pass an instance of their _Private_CallbackBuilder
into
IonTextWriterBuilder#setCallbackBuilder(_Private_CallbackBuilder)
or
IonTextWriterBuilder#withCallbackBuilder(_Private_CallbackBuilder)
Note: It is only necessary for subclasses to implement methods they're using to inject markup.
When all method are called, they are called with (at least) an
IonType
that represents either the type of data being written or the
container type that the writer is writing, or currently inside.
before/afterFieldName and before/afterEachAnnotation get, respectively, the
field name and annotation that is being written. Methods can use
myAppendable
access the output stream.
Here are some example call patterns, using the following syntax to show where calls will be executed (whitespace is used to increase readability):
<methodName TYPE>
Input:
{ cookies:"Chocolate Chip" }Output:
<beforeData STRUCT>{<afterStepIn STRUCT> <beforeFieldName STRING "cookies"> cookies <afterFieldName STRING "cookies">:<beforeData STRING> "Chocolate Chip" <afterData STRING> <beforeStepOut STRUCT>}<afterData STRUCT>
Input:
anno1::anno2::{ fname:"John", lname:"Smith", age:32.785 }Output:
<beforeAnnotations STRUCT> <beforeEachAnnotation STRUCT "anno1">anno1<afterEachAnnotation STRUCT "anno1">:: <beforeEachAnnotation STRUCT "anno2">anno2<afterEachAnnotation STRUCT "anno2">:: <afterAnnotations STRUCT> <beforeData STRUCT>{<afterStepIn STRUCT> <beforeFieldName STRING "fname">fname<afterFieldName STRING "fname">:<beforeData STRING>"John"<afterData STRING><beforeSeparator STRUCT>,<afterSeparator STRUCT> <beforeFieldName STRING "lname">lname<afterFieldName STRING "lname">:<beforeData STRING>"Smith"<afterData STRING><beforeSeparator STRUCT>,<afterSeparator STRUCT> <beforeFieldName DECIMAL "age">age<afterFieldName DECIMAL "age">:<beforeData DECIMAL>32.785<afterData DECIMAL> <beforeStepOut STRUCT>}<afterData STRUCT>
Input:
(where (field (this) result) (== (field (curr) majorVersionString) "1.0"))Output:
<beforeData SEXP>(<afterStepIn SEXP> <beforeData SYMBOL>where<afterData SYMBOL><beforeSeparator SEXP> <afterSeparator SEXP> <beforeData SEXP>(<afterStepIn SEXP> <beforeData SYMBOL>field<afterData SYMBOL><beforeSeparator SEXP> <afterSeparator SEXP> <beforeData SEXP>(<afterStepIn SEXP> <beforeData SYMBOL>this<afterData SYMBOL> <beforeStepOut SEXP>)<afterData SEXP><beforeSeparator SEXP> <afterSeparator SEXP> <beforeData SYMBOL>result<afterData SYMBOL> <beforeStepOut SEXP>)<afterData SEXP><beforeSeparator SEXP> <afterSeparator SEXP> <beforeData SEXP>(<afterStepIn SEXP> <beforeData SYMBOL>==<afterData SYMBOL><beforeSeparator SEXP> <afterSeparator SEXP> <beforeData SEXP>(<afterStepIn SEXP> <beforeData SYMBOL>field<afterData SYMBOL><beforeSeparator SEXP> <afterSeparator SEXP> <beforeData SEXP>(<afterStepIn SEXP> <beforeData SYMBOL>curr<afterData SYMBOL> <beforeStepOut SEXP>)<afterData SEXP><beforeSeparator SEXP> <afterSeparator SEXP> <beforeData SYMBOL>majorVersionString<afterData SYMBOL> <beforeStepOut SEXP>)<afterData SEXP><beforeSeparator SEXP> <afterSeparator SEXP> <beforeData STRING>"1.0"<afterData STRING> <beforeStepOut SEXP>)<afterData SEXP> <beforeStepOut SEXP>)<afterData SEXP>
Input:
1 5 "Cheesecake" 3.2 true null 'baby tigers' 47e1Output:
<beforeData INT>1<afterData INT><beforeSeparator DATAGRAM> <afterSeparator DATAGRAM> <beforeData INT>5<afterData INT><beforeSeparator DATAGRAM> <afterSeparator DATAGRAM> <beforeData STRING>"Cheesecake"<afterData STRING><beforeSeparator DATAGRAM> <afterSeparator DATAGRAM> <beforeData DECIMAL>3.2<afterData DECIMAL><beforeSeparator DATAGRAM> <afterSeparator DATAGRAM> <beforeData BOOL>true<afterData BOOL><beforeSeparator DATAGRAM> <afterSeparator DATAGRAM> <beforeData NULL>null<afterData NULL><beforeSeparator DATAGRAM> <afterSeparator DATAGRAM> <beforeData SYMBOL>'baby tigers'<afterData SYMBOL><beforeSeparator DATAGRAM> <afterSeparator DATAGRAM> <beforeData FLOAT>470.0e0<afterData FLOAT>
Input:
[true, 3.4, 3d6, 2.3e8, "string", '''multi-''' '''string''',Symbol, 'qSymbol', {{"clob data"}}, {{YmxvYiBkYXRh}}, 1970-06-06, null.struct]Output:
<beforeData LIST>[<afterStepIn LIST> <beforeData BOOL>true<afterData BOOL><beforeSeparator LIST>,<afterSeparator LIST> <beforeData DECIMAL>3.4<afterData DECIMAL><beforeSeparator LIST>,<afterSeparator LIST> <beforeData DECIMAL>3d6<afterData DECIMAL><beforeSeparator LIST>,<afterSeparator LIST> <beforeData FLOAT>2.3E8<afterData FLOAT><beforeSeparator LIST>,<afterSeparator LIST> <beforeData STRING>"string"<afterData STRING><beforeSeparator LIST>,<afterSeparator LIST> <beforeData STRING>"multi-string"<afterData STRING><beforeSeparator LIST>,<afterSeparator LIST> <beforeData SYMBOL>Symbol<afterData SYMBOL><beforeSeparator LIST>,<afterSeparator LIST> <beforeData SYMBOL>qSymbol<afterData SYMBOL><beforeSeparator LIST>,<afterSeparator LIST> <beforeData CLOB>{{"clob data"}}<afterData CLOB><beforeSeparator LIST>,<afterSeparator LIST> <beforeData BLOB>{{YmxvYiBkYXRh}}<afterData BLOB><beforeSeparator LIST>,<afterSeparator LIST> <beforeData TIMESTAMP>1970-06-06<afterData TIMESTAMP><beforeSeparator LIST>,<afterSeparator LIST> <beforeData NULL>null.struct<afterData NULL> <beforeStepOut LIST>]<afterData LIST>
Constructor and Description |
---|
_Private_MarkupCallback(_Private_FastAppendable appendable) |
Modifier and Type | Method and Description |
---|---|
void |
afterAnnotations(IonType iType)
Callback to be executed after annotations are written.
|
void |
afterEachAnnotation(IonType iType,
SymbolToken annotation)
Callback to be executed after each annotation is written.
|
void |
afterFieldName(IonType iType,
SymbolToken name)
Callback to be executed after a field name is written.
|
void |
afterSeparator(IonType containerType)
Callback to be executed after a separator has been written.
|
void |
afterStepIn(IonType containerType)
Callback to be executed after the opening delimiter of a container is
written.
|
void |
afterValue(IonType iType)
Callback to be executed after an Ion value is written.
|
void |
beforeAnnotations(IonType iType)
Callback to be executed before annotations are written.
|
void |
beforeEachAnnotation(IonType iType,
SymbolToken annotation)
Callback to be executed before each annotation is written.
|
void |
beforeFieldName(IonType iType,
SymbolToken name)
Callback to be executed before a field name is written.
|
void |
beforeSeparator(IonType containerType)
Callback to be executed before a separator is written.
|
void |
beforeStepOut(IonType containerType)
Callback to be executed before the closing delimiter of a container is
written.
|
void |
beforeValue(IonType iType)
Callback to be executed before an Ion value is written.
|
_Private_FastAppendable |
getAppendable()
Gets the
_Private_FastAppendable that IonWriter will use to write its
output. |
public _Private_MarkupCallback(_Private_FastAppendable appendable)
public final _Private_FastAppendable getAppendable()
_Private_FastAppendable
that IonWriter will use to write its
output.public void beforeValue(IonType iType) throws java.io.IOException
afterStepIn(IonType)
.iType
- The type of data that will be written.java.io.IOException
public void afterValue(IonType iType) throws java.io.IOException
beforeStepOut(IonType)
.iType
- The type of data that was written.java.io.IOException
public void beforeFieldName(IonType iType, SymbolToken name) throws java.io.IOException
iType
- The type of data in the field name's corresponding value.name
- The field name that is being written.java.io.IOException
public void afterFieldName(IonType iType, SymbolToken name) throws java.io.IOException
iType
- The type of data in the field name's corresponding value.name
- The field name that is being written.java.io.IOException
public void afterStepIn(IonType containerType) throws java.io.IOException
beforeValue(IonType)
.containerType
- The type of container that was just stepped into.java.io.IOException
public void beforeStepOut(IonType containerType) throws java.io.IOException
afterValue(IonType)
.containerType
- The type of container that is about to be stepped out of.java.io.IOException
public void beforeSeparator(IonType containerType) throws java.io.IOException
containerType
- The type of container the writer is currently in. When writing
top-level values, the type is DATAGRAM.java.io.IOException
public void afterSeparator(IonType containerType) throws java.io.IOException
containerType
- The type of container the writer is currently in. When writing
top-level values, the type is DATAGRAM.java.io.IOException
public void beforeAnnotations(IonType iType) throws java.io.IOException
iType
- The type of the data whose annotations are being written.java.io.IOException
public void afterAnnotations(IonType iType) throws java.io.IOException
iType
- The type of the data whose annotations are being written.java.io.IOException
public void beforeEachAnnotation(IonType iType, SymbolToken annotation) throws java.io.IOException
iType
- The type of the data whose annotation is being written.annotation
- The annotation that is being written.java.io.IOException
public void afterEachAnnotation(IonType iType, SymbolToken annotation) throws java.io.IOException
iType
- The type of the data whose annotation is being written.annotation
- The annotation that is being written.java.io.IOException