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    }