package com.fasterxml.jackson.dataformat.javaprop.impl;
import java.io.*;
import java.util.Map;
import java.util.Properties;
import com.fasterxml.jackson.core.*;
import com.fasterxml.jackson.core.io.IOContext;
import com.fasterxml.jackson.dataformat.javaprop.JavaPropsGenerator;
public class PropertiesBackedGenerator extends JavaPropsGenerator
{
/*
/**********************************************************
/* Configuration
/**********************************************************
*/
Underlying Properties
that we will update with logical properties written out. /**
* Underlying {@link Properties} that we will update with logical
* properties written out.
*/
final protected Map<String, Object> _content;
/*
/**********************************************************
/* Life-cycle
/**********************************************************
*/
@SuppressWarnings("unchecked")
public PropertiesBackedGenerator(IOContext ctxt, Map<?,?> content,
int stdFeatures, ObjectCodec codec)
{
super(ctxt, stdFeatures, codec);
_content = (Map<String, Object>) content;
// Since this is not physically encoding properties, should NOT try
// to attempt writing headers. Easy way is to just fake we already did it
_headerChecked = true;
}
@SuppressWarnings("unchecked")
@Deprecated // since 2.10
public PropertiesBackedGenerator(IOContext ctxt, Properties props,
int stdFeatures, ObjectCodec codec)
{
super(ctxt, stdFeatures, codec);
_content = (Map<String, Object>)(Map<?,?>) props;
// Since this is not physically encoding properties, should NOT try
// to attempt writing headers. Easy way is to just fake we already did it
_headerChecked = true;
}
/*
/**********************************************************
/* Overridden methods, configuration
/**********************************************************
*/
@Override
public Object getOutputTarget() {
return _content;
}
/*
/**********************************************************
/* Overridden methods: low-level I/O
/**********************************************************
*/
@Override
public void close() throws IOException { }
@Override
public void flush() throws IOException { }
/*
/**********************************************************
/* Implementations for methods from base class
/**********************************************************
*/
@Override
protected void _releaseBuffers() { }
@Override
protected void _appendFieldName(StringBuilder path, String name) {
// No escaping should be applied
path.append(name);
}
/*
/**********************************************************
/* Internal methods; escaping writes
/**********************************************************
*/
@Override
protected void _writeEscapedEntry(char[] text, int offset, int len) throws IOException {
_writeEscapedEntry(new String(text, offset, len));
}
@Override
protected void _writeEscapedEntry(String value) throws IOException
{
_content.put(_basePath.toString(), value);
}
@Override
protected void _writeUnescapedEntry(String value) throws IOException
{
_content.put(_basePath.toString(), value);
}
/*
/**********************************************************
/* Internal methods; raw writes
/**********************************************************
*/
/* 02-Jun-2016, tatu: no way to support raw writes, so two things we
* could do instead: throw exception, or just quietly ignore. Typically
* I favor throwing exception, but here it's probably better to simply
* ignore.
*/
@Override
protected void _writeRaw(char c) throws IOException
{
}
@Override
protected void _writeRaw(String text) throws IOException
{
}
@Override
protected void _writeRaw(StringBuilder text) throws IOException
{
}
@Override
protected void _writeRaw(char[] text, int offset, int len) throws IOException
{
}
protected void _writeRawLong(String text) throws IOException
{
}
protected void _writeRawLong(StringBuilder text) throws IOException
{
}
}