001    /*
002     @license.text@ 
003     */
004    package biz.hammurapi.metrics;
005    
006    import java.util.Collection;
007    import java.util.Iterator;
008    
009    import org.w3c.dom.DOMException;
010    import org.w3c.dom.Document;
011    import org.w3c.dom.Element;
012    
013    import biz.hammurapi.metrics.Metric.Measurement;
014    import biz.hammurapi.render.RenderRequest;
015    import biz.hammurapi.render.RenderingException;
016    import biz.hammurapi.render.dom.AbstractRenderer;
017    import biz.hammurapi.render.dom.DomRenderer;
018    
019    
020    /**
021     * @author Pavel Vlasov
022     * @version $Revision: 1.8 $
023     */
024    public class MetricRenderer extends AbstractRenderer implements DomRenderer {
025                
026        public MetricRenderer(RenderRequest request) {
027            super(request);
028        }
029        
030        public MetricRenderer(RenderRequest request, String profile) {
031            super(request, profile);
032        }
033        
034        public Element render(Document document) throws RenderingException {
035            Element ret=document.createElement("metric");
036            Metric m=(Metric) request.getRenderee();
037            
038            toDom(ret, m);
039            return ret;
040            }
041    
042            /**
043             * @param document
044             * @param holder
045             * @param m
046             * @throws RenderingException
047             * @throws RenderingException
048             */
049            private void toDom(Element holder, Metric m) throws RenderingException {
050                    holder.setAttribute("name", m.getName());
051            holder.setAttribute("avg", String.valueOf(m.getAvg()));
052            holder.setAttribute("min", String.valueOf(m.getMin()));
053                    holder.setAttribute("max", String.valueOf(m.getMax()));
054                    
055            holder.setAttribute("total", String.valueOf(m.getTotal()));
056            holder.setAttribute("number", String.valueOf(m.getNumber()));
057                    holder.setAttribute("deviation", String.valueOf(m.getDeviation()));
058            
059            Collection measurements = m.getMeasurements();
060                    if (measurements!=null) {
061                    Iterator it=measurements.iterator();
062                    while (it.hasNext()) {
063                            Measurement ms=(Measurement) it.next();
064                            Element me = holder.getOwnerDocument().createElement("measurement");
065                                    holder.appendChild(me);
066                                    renderMeasurement(ms, me);                              
067                    }
068            }
069            }
070    
071            /**
072             * @param ms
073             * @param me
074             * @throws RenderingException
075             * @throws 
076             * @throws RenderingException
077             * @throws DOMException
078             */
079            protected void renderMeasurement(Measurement ms, Element me) throws RenderingException {
080                    me.setAttribute("value", String.valueOf(ms.getValue()));
081                    me.setAttribute("time", String.valueOf(ms.getTime()));
082            }
083    
084    }