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 }