001    package com.hammurapi.render;
002    
003    import java.io.File;
004    import java.util.ArrayList;
005    import java.util.List;
006    import java.util.Locale;
007    import java.util.Map;
008    
009    import com.hammurapi.common.Context;
010    import com.hammurapi.common.IdentityManager;
011    
012    /**
013     * If profile is "outline" or "outline_http" this renderer also renders e<element id>.html with default profile
014     * and e<element id>_contents.html with contents or contents_http profile.
015     * @author Pavel Vlasov
016     *
017     */
018    public class MultiFileJxpRenderer implements MultiFileRenderer, RenderingConstants {
019            
020            private JxpRenderer renderer;
021            private Object source;
022    
023            public MultiFileJxpRenderer(Object obj) {
024                    this.renderer = new JxpRenderer(obj);
025                    this.source = obj;
026            }
027            
028            @Override
029            public List<File> render(File out, Map<String, Object> environment, Context context, String profile, Locale locale) throws RenderingException {
030                    List<File> ret = new ArrayList<File>();
031                    if (renderer.render(out, environment, context, profile, locale)) {
032                            ret.add(out);
033                            if (OUTLINE.equals(profile) || OUTLINE_HTTP.equals(profile)) {
034                                    IdentityManager<?> identityManager = context.lookup(IdentityManager.class);
035                                    Object id = identityManager.getIdentity(source);
036                                    File detailsOut = new File(out.getParentFile(), "e"+id+".html");
037                                    if (renderer.render(detailsOut, environment, context, null, locale)) {
038                                            ret.add(detailsOut);
039                                    }
040                                    boolean http = OUTLINE_HTTP.equals(profile);
041                                    File contentsOut = new File(out.getParentFile(), "e"+id+"_contents.html");
042                                    if (renderer.render(contentsOut, environment, context, http ? CONTENTS_HTTP : CONTENTS, locale)) {
043                                            ret.add(contentsOut);
044                                    }                               
045                            }               
046                    }               
047                    return ret;
048            }
049    
050    }