View Javadoc
1 /* 2 * Copyright (c) 2003 3 * Information Desire GmbH 4 * All rights reserved. 5 */ 6 package com.infodesire.infobit.render.velocity; 7 8 import com.infodesire.infobit.render.InfobitRenderer; 9 10 import java.io.InputStream; 11 import java.io.Reader; 12 import java.io.BufferedReader; 13 import java.io.Writer; 14 import java.io.PipedOutputStream; 15 import java.io.PipedInputStream; 16 import java.io.OutputStreamWriter; 17 import java.io.InputStreamReader; 18 19 import com.infodesire.infobit.InfobitManager; 20 import com.infodesire.infobit.InfobitException; 21 import com.infodesire.infobit.InfobitSecurityException; 22 23 import com.infodesire.infobit.data.Infobit; 24 import com.infodesire.infobit.data.Content; 25 import com.infodesire.infobit.data.Script; 26 import com.infodesire.infobit.data.Template; 27 import com.infodesire.infobit.data.BinaryContent; 28 import com.infodesire.infobit.data.PrimitiveContent; 29 import com.infodesire.infobit.data.TextContent; 30 31 import org.apache.velocity.VelocityContext; 32 import org.apache.velocity.context.Context; 33 import org.apache.velocity.app.Velocity; 34 import org.apache.velocity.app.VelocityEngine; 35 import org.apache.velocity.runtime.RuntimeConstants; 36 37 import java.util.Iterator; 38 import java.util.Properties; 39 import java.util.Map; 40 import java.util.HashMap; 41 42 import org.apache.commons.logging.Log; 43 import org.apache.commons.logging.LogFactory; 44 45 /*** 46 * render infobits in a way suitable for xml export 47 * 48 * @author konstantin 49 * @created August 21, 2003 50 * @version $Revision: 1.3 $ 51 */ 52 public class ExportVelocityRenderer extends VelocityRenderer { 53 54 private static Log _log = LogFactory.getLog(ExportVelocityRenderer.class); 55 56 private static HashMap _contentClassMap = new HashMap(); 57 58 59 /*** 60 * setup context for infobit rendering. this method is called by #inbfobit() 61 * directive it places following objects on context: 62 * <ul> 63 * <li> $infobit - infobit itself 64 * <li> $version - selected infobit version ( currently it's active 65 * version ) 66 * <li> $content - content belonging to this version 67 * <li> $linkname where linkname is name of script link - just a 68 * convenience ( may dissapear ) script names will be also available in 69 * template as $content.links.get("name of the link").name 70 * </ul> 71 * 72 * 73 * @param context velocity context to be augmented 74 * @param infobitName Description of Parameter 75 */ 76 public void setupContext(Context context, String infobitName) { 77 try { 78 Infobit ibit = _manager.getInfobit(infobitName); 79 if (ibit == null) { 80 // well, this shall not happen, since this method shall be called after 81 // resource manager loaded infobit template. 82 // log anyway, but do not bomb. 83 _log.error("did not found infobit: " + infobitName); 84 return; 85 } 86 context.put("infobit", ibit); 87 } catch (Exception ex) { 88 _log.error("exception occured while acquiring infobit params: " + infobitName, ex); 89 } 90 91 } 92 93 94 /*** 95 * not sure it's good here. just a noop 96 * 97 * @param writer Description of Parameter 98 * @param content Description of Parameter 99 */ 100 public void renderContent(Writer writer, Content content) { 101 } 102 103 104 /*** 105 * initialize itself and velocity with given properties. 106 * 107 * @param properties Description of Parameter 108 */ 109 public void init(Properties properties) { 110 _engine.setApplicationAttribute(VelocityRenderer.class.getName(), this); 111 super.init(properties); 112 } 113 114 115 /*** 116 * returns proper version of infobit content. currently we support only 117 * actual version, but later we may made it more advanced to be able to view 118 * preview versions / or from certain date. 119 * 120 * @param ibit Description of Parameter 121 * @return The InfobitContent value 122 * @exception InfobitException Description of Exception 123 * @exception InfobitSecurityException Description of Exception 124 */ 125 Content getInfobitContent(Infobit ibit) throws InfobitException, InfobitSecurityException { 126 return ibit.getActualVersion().getContent(); 127 } 128 129 130 /*** 131 * read content as stream out of infobit. this is callback for your template 132 * loader. we substitute proxy templates for images. for templates we will 133 * also tweak out context... 134 * 135 * @param name Description of Parameter 136 * @return Description of the Returned Value 137 */ 138 139 InputStream getTemplate(String name) { 140 try { 141 Infobit ibit = _manager.getInfobit(name); 142 if (ibit == null) { 143 _log.error("did not found infobit: " + name); 144 return null; 145 } 146 return AdvancedClasspathLoader.getResourceAsStream("com/infodesire/infobit/render/velocity/export.vm"); 147 } catch (Exception ex) { 148 _log.error("error retrieving template for: " + name, ex); 149 return null; 150 } 151 152 } 153 154 }

This page was automatically generated by Maven