001 package com.hammurapi.render;
002
003 import java.io.File;
004 import java.io.FileOutputStream;
005 import java.io.FileWriter;
006 import java.io.IOException;
007 import java.util.Locale;
008 import java.util.Map;
009
010 import com.hammurapi.common.Context;
011
012 /**
013 * Adapter to make FileRenderer from InlineRenderer
014 * @author Pavel Vlasov
015 *
016 */
017 public class FileRendererAdapter implements FileRenderer {
018
019 private Object renderer;
020
021 /**
022 * Constructs FileRenderer from WriterRenderer.
023 * @param writerRenderer
024 */
025 public FileRendererAdapter(WriterRenderer writerRenderer) {
026 this.renderer = writerRenderer;
027 }
028
029 /**
030 * Constructs FileRenderer from WriterRenderer.
031 * @param writerRenderer
032 */
033 public FileRendererAdapter(OutputStreamRenderer osRenderer) {
034 this.renderer = osRenderer;
035 }
036
037 @Override
038 public boolean render(
039 File out,
040 Map<String, Object> environment,
041 Context context,
042 String profile,
043 Locale locale) throws RenderingException {
044
045 if (renderer instanceof WriterRenderer) {
046 try {
047 FileWriter w = new FileWriter(out);
048 try {
049 return ((WriterRenderer) renderer).render(w, environment, context, profile, locale, out.getParentFile());
050 } finally {
051 w.close();
052 }
053 } catch (IOException e) {
054 throw new RenderingException(e);
055 }
056 }
057
058 try {
059 FileOutputStream os = new FileOutputStream(out);
060 try {
061 return ((OutputStreamRenderer) renderer).render(os, environment, context, profile, locale, out.getParentFile());
062 } finally {
063 os.close();
064 }
065 } catch (IOException e) {
066 throw new RenderingException(e);
067 }
068
069 }
070
071 }