martes, agosto 25, 2009

Embeber gráficas en una JSP. CEWOLF

Según la definición de la página oficial:
Cewolf consta de un servlet que se encarga del renderizado de las imágenes y de una librería de tags que traduce la definición incluida en una JSP en la etiqueta HTML <img> Ésta consulta al servlet de renderizado para la recuperación de la gráfica apropiada.


Los mejores puntos a favor:
  • Es software de licencia LGPL.
  • Puede ser ejecutado en cualquier servidor compatible con J2EE o contenedor servlets.
  • Defines el gráfico mediante XML.
  • Lo tuneas fácilmente extendiendo sus clases.
  • Gran cantidad de gráficas disponibles.


Cómo usamos CeWolf:
Por ejemplo, podríamos hacer una web que nos mostrara una gráfica de tarta de la distribución de errores.

1º Nos bajamos el paquete desde la página oficial. Contiene todos los jars necesarios.
2º Registramos el Servlet de CeWolf en web.xml


<servlet>
<servlet-name>CewolfServlet</servlet-name>
<servlet-class>de.laures.cewolf.CewolfRenderer</servlet-class>
</servlet>
<servlet-mapping>
<servlet-name>CewolfServlet</servlet-name>
<url-pattern>/cewolf/*</url-pattern>
</servlet-mapping>


3º Ahora por una parte, creamos un bean que implemente la interfaz que ofrece CeWolf (DatasetProducer) y que sea Serializable.


public class GraficoTarta implements DatasetProducer, Serializable{

public String getProducerId() {
// TODO Auto-generated method stub
return "graficoTarta";
}

public boolean hasExpired(Map arg0, Date arg1) {
// Poniendolo a true, se renderizará la imagen cada
// vez que actualicemos la página
return true;
}

public Object produceDataset(Map params) {
// Recogemos nuestro Mapa de parámetros, que ha sido
// rellenado en cualquier otra action y contiene los
// datos que queremos mostrar
Map mapProp = (Map) params.get("mapa");

// Del mapa sacamos los errores, pares
// (, )
HashMap hashErrores = (HashMap)
mapProp.get("errores");

DefaultPieDataset ds = new DefaultPieDataset();
Set categories = hashErrores.keySet();

for (Iterator it = categories.iterator(); it.hasNext();){
String key = it.next();
Integer numErrores = (Integer) hashErrores.get(key);
ds.setValue(key, numErrores);
}
return ds;
}
}

4º Para el ejemplo hemos implementado un servlet que hace de controlador en donde referenciamos el bean tomándolo del contexto. Además, en nuestro caso, estamos usando Spring como contendor de Beans, así que registramos el bean anterior en el applicationContext.xml.

Servlet:
WebApplicationContext _ctx = WebApplicationContextUtils.getWebApplicationContext(config.getServletContext());

reqHttpServletRequest.getSession().setAttribute("pvErroresStd",_ctx.getBean("erroresBean"));


applicationContext.xml:
<bean id="erroresBean" class="com.statistics.datasetproducers.GraficoTarta"/>


5º Por último, definimos en la JSP de salida la definición del gráfico

<jsp:useBean id="pvErroresStd" scope="session"
class=" com.statistics.datasetproducers.GraficoTarta"/>

<cewolf:chart id="pieChart" title="Tipos de Errores" type="pie">
<cewolf:gradientpaint>
<cewolf:point x="0" y="0" color="#FFFFFF" />
<cewolf:point x="300" y="0" color="#CCDDFF" />
</cewolf:gradientpaint>
<cewolf:data>
<cewolf:producer id="pvErroresStd">
<cewolf:param name="mapa" value="<%=mapa%>" />
</cewolf:producer>
</cewolf:data>
</cewolf:chart>
<cewolf:img chartid="pieChart" renderer="/cewolf" width="700" height="300"/>


¡Y ya esta! Ahora tenemos una aplicación J2EE que, dados unos datos genera su gráfico PieChart.

No hay comentarios: