package ecologylab.serialization.serializers.stringformats; import java.io.BufferedWriter; import java.io.File; import java.io.FileWriter; import java.io.IOException; import java.io.OutputStream; import java.io.PrintStream; import java.io.UnsupportedEncodingException; import ecologylab.serialization.SIMPLTranslationException; import ecologylab.serialization.TranslationContext; import ecologylab.serialization.TranslationContextPool; import ecologylab.serialization.XMLTools; import ecologylab.serialization.serializers.FormatSerializer; public abstract class StringSerializer extends FormatSerializer { @Override public void serialize(Object object, OutputStream outputStream, TranslationContext translationContext) throws SIMPLTranslationException { // serialize(object, (Appendable) new PrintStream(outputStream), translationContext); try { serialize(object, (Appendable) new PrintStream(outputStream, true, "utf-8"), translationContext); } catch (UnsupportedEncodingException e) { // TODO Auto-generated catch block e.printStackTrace(); } } @Override public void serialize(Object object, File outputFile, TranslationContext translationContext) throws SIMPLTranslationException { try { XMLTools.createParentDirs(outputFile); if (outputFile.getParentFile() != null) translationContext.setBaseDirFile(outputFile.getParentFile()); BufferedWriter bufferedWriter = new BufferedWriter(new FileWriter(outputFile)); serialize(object, bufferedWriter, translationContext); bufferedWriter.close(); } catch (IOException e) { throw new SIMPLTranslationException("IO Exception: ", e); } } /** * * @param object * @return * @throws SIMPLTranslationException * @throws IOException */ public StringBuilder serialize(Object object) throws SIMPLTranslationException { TranslationContext translationContext = TranslationContextPool.get().acquire(); StringBuilder sb = serialize(object, translationContext); TranslationContextPool.get().release(translationContext); return sb; } /** * * @param object * @param translationContext * @return * @throws SIMPLTranslationException * @throws IOException */ public StringBuilder serialize(Object object, TranslationContext translationContext) throws SIMPLTranslationException { final StringBuilder sb = new StringBuilder(); serialize(object, sb, translationContext); return sb; } /** * * @param object * @param stringBuilder * @param translationContext * @throws SIMPLTranslationException * @throws IOException */ public void serialize(Object object, final StringBuilder stringBuilder, TranslationContext translationContext) throws SIMPLTranslationException { OutputStream outputStream = new OutputStream() { @Override public void write(int b) throws IOException { stringBuilder.append((char) b); } }; serialize(object, (Appendable) new PrintStream(outputStream), translationContext); } /** * All methods will eventually call this method which is overridden by derived classes * * @param object * @param appendable * @param translationContext * @throws SIMPLTranslationException * @throws IOException */ public abstract void serialize(Object object, Appendable appendable, TranslationContext translationContext) throws SIMPLTranslationException; }