You are viewing a plain text version of this content. The canonical link for it is here.
Posted to users@camel.apache.org by Blair <bl...@gmail.com> on 2011/07/27 10:05:14 UTC

Google Visualization API wire protocol from camel - how to do it!

Ok, in the project I've been on, we have managed to do some pretty awesome
stuff with camel, so I'd like to spend some time posting about some of the
cool things we have done - with some example code.

This is exposing a database as a google data source so that you can use
google charts.... Its also shows why camel is made of so _very_ much win...

Google's visualization kits make for some very pretty interactive eye candy,
however we need to expose some views in a way that they can talk to it.

The online instructions talk about setting up servlets, war files etc,
however, we have the awesome power of camel, so we just don't need that at
all... we do need jetty and visualization-datasource 
so add

        <dependency>
            <groupId>org.apache.camel</groupId>
            <artifactId>camel-jetty</artifactId>
            <version>${camel.version}</version>
        </dependency>

and

        <dependency>
            <groupId>com.google.visualization</groupId>
            <artifactId>visualization-datasource</artifactId>
            <version>1.0.2</version>
        </dependency>

to your pom file....

Here is our RouteBuilder (minus security, checks for which table, filters to
keep a user to see only their data etc) - the point being that it is trivial
example.

Make sure that the database setup so that the username and password only
have read only access to the things you want to share, and you are ready to
go.

@Component
public class ReportServices extends RouteBuilder {
	
	// Values come from jdbc.properties via Spring property-placeholder
	@Value("${jdbc.url}") private String url;
	@Value("${jdbc.username}") private String username;
	@Value("${jdbc.password}") private String password;

    final Processor visualizationProcessor = new Processor() {
			public void process(Exchange exchange) throws Exception {
				HttpMessage in = (HttpMessage) exchange.getIn();
				DataSourceHelper.executeDataSourceServletFlow(in.getRequest(),
in.getResponse(), tableGenerator, false);
			}
    };

    final DataTableGenerator tableGenerator = new DataTableGenerator() {
        public Capabilities getCapabilities() {
            return Capabilities.SQL;
        }

        public DataTable generateDataTable(Query query, HttpServletRequest
request) throws DataSourceException {
            SqlDatabaseDescription db = new SqlDatabaseDescription(
                url, username, password, request.getParameter("table"));
            return SqlDataSourceHelper.executeQuery(query, db);
        }
    };

	@Override
	public void configure() throws Exception {
	
from("jetty:http://0.0.0.0/Reports").process(visualizationProcessor).stop();
	}

}

And we are done :)

Camel for the win again!


--
View this message in context: http://camel.465427.n5.nabble.com/Google-Visualization-API-wire-protocol-from-camel-how-to-do-it-tp4637916p4637916.html
Sent from the Camel - Users mailing list archive at Nabble.com.

Re: Google Visualization API wire protocol from camel - how to do it!

Posted by Claus Ibsen <cl...@gmail.com>.
Hi Blair

This is very cool. If you have the time then a blog entry how to do
this, with maybe a screenshot of the google charts as eye candy would
be awesome. We can then add a link to it from the Camel articles page.
And help spread the word on twitter etc.


On Wed, Jul 27, 2011 at 10:05 AM, Blair <bl...@gmail.com> wrote:
> Ok, in the project I've been on, we have managed to do some pretty awesome
> stuff with camel, so I'd like to spend some time posting about some of the
> cool things we have done - with some example code.
>
> This is exposing a database as a google data source so that you can use
> google charts.... Its also shows why camel is made of so _very_ much win...
>
> Google's visualization kits make for some very pretty interactive eye candy,
> however we need to expose some views in a way that they can talk to it.
>
> The online instructions talk about setting up servlets, war files etc,
> however, we have the awesome power of camel, so we just don't need that at
> all... we do need jetty and visualization-datasource
> so add
>
>        <dependency>
>            <groupId>org.apache.camel</groupId>
>            <artifactId>camel-jetty</artifactId>
>            <version>${camel.version}</version>
>        </dependency>
>
> and
>
>        <dependency>
>            <groupId>com.google.visualization</groupId>
>            <artifactId>visualization-datasource</artifactId>
>            <version>1.0.2</version>
>        </dependency>
>
> to your pom file....
>
> Here is our RouteBuilder (minus security, checks for which table, filters to
> keep a user to see only their data etc) - the point being that it is trivial
> example.
>
> Make sure that the database setup so that the username and password only
> have read only access to the things you want to share, and you are ready to
> go.
>
> @Component
> public class ReportServices extends RouteBuilder {
>
>        // Values come from jdbc.properties via Spring property-placeholder
>        @Value("${jdbc.url}") private String url;
>        @Value("${jdbc.username}") private String username;
>        @Value("${jdbc.password}") private String password;
>
>    final Processor visualizationProcessor = new Processor() {
>                        public void process(Exchange exchange) throws Exception {
>                                HttpMessage in = (HttpMessage) exchange.getIn();
>                                DataSourceHelper.executeDataSourceServletFlow(in.getRequest(),
> in.getResponse(), tableGenerator, false);
>                        }
>    };
>
>    final DataTableGenerator tableGenerator = new DataTableGenerator() {
>        public Capabilities getCapabilities() {
>            return Capabilities.SQL;
>        }
>
>        public DataTable generateDataTable(Query query, HttpServletRequest
> request) throws DataSourceException {
>            SqlDatabaseDescription db = new SqlDatabaseDescription(
>                url, username, password, request.getParameter("table"));
>            return SqlDataSourceHelper.executeQuery(query, db);
>        }
>    };
>
>        @Override
>        public void configure() throws Exception {
>
> from("jetty:http://0.0.0.0/Reports").process(visualizationProcessor).stop();
>        }
>
> }
>
> And we are done :)
>
> Camel for the win again!
>
>
> --
> View this message in context: http://camel.465427.n5.nabble.com/Google-Visualization-API-wire-protocol-from-camel-how-to-do-it-tp4637916p4637916.html
> Sent from the Camel - Users mailing list archive at Nabble.com.
>



-- 
Claus Ibsen
-----------------
FuseSource
Email: cibsen@fusesource.com
Web: http://fusesource.com
Twitter: davsclaus, fusenews
Blog: http://davsclaus.blogspot.com/
Author of Camel in Action: http://www.manning.com/ibsen/