Feed Aggregator Sample
======================================
This sample demonstrates using the Feed binding to aggregate ATOM and RSS
feeds and publish a new aggregated feed.

The README in the samples directory (the directory above this) provides 
general instructions about building and running samples. Take a look there 
first. 

If you run the sample using ant, navigate to this sample directory and do:

ant run

OR if you don't have ant, on Windows do

java -cp ..\..\lib\tuscany-sca-manifest.jar;target\sample-feed-aggregator.jar launch.LaunchFeedServer

and on *nix do

java -cp ../../lib/tuscany-sca-manifest.jar:target/sample-feed-aggregator.jar launch.LaunchFeedServer

You should see the following output on the screen.

run:
    [java] Added Servlet mapping: http://localhost:8083/rssAggregator
    [java] Added Servlet mapping: http://localhost:8083/atomAggregator/*
    [java] Sample Feed server started (press enter to shutdown)

    [java] To read the aggregated feeds, point your Web browser to the following addresses:
    [java] http://localhost:8083/atomAggregator
    [java] http://localhost:8083/atomAggregator/atomsvc (for the Atom service document)
    [java] http://localhost:8083/rssAggregator
     
As this point the aggregated Feeds are exposed by a web server started
automatically by the SCA runtime. You can later stop the server by pressing enter.

Now that the server is started you can point your Web browser to each URL of the
aggregated feeds to see the information in your browser. These URLs are:

http://localhost:8083/atomAggregator
http://localhost:8083/atomAggregator/atomsvc 
http://localhost:8083/rssAggregator

** Please note that if your browser is not configured correctly to receive
feed information, you will be prompted to open each file that contains the feed
information in XML.

Sample Overview
---------------
The sample provides a single component exposing a Web resource.

web-resource/
  src/
    main/
      java/
        feed/
          AggregatorImpl.java             - implementation of the Feed
                                            aggregator component
          Sort.java                       - utility interface 
          SortImpl.java                   - implementation of the Sort component
        launch
          LaunchFeedServer.java           - starts the SCA Runtime and 
                                            publishes the aggregated feeds
      resources/
        FeedAggregator.composite          - the SCA assembly for this sample
  feed-aggregator.png                     - a pictorial representation of the 
                                            sample .composite file
  build.xml                               - the Ant build file
  pom.xml                                 - the Maven build file 
  
  
Details of how this sample works
--------------------------------
1. AggregatorImpl is used to implement the two main components here (RSSAggregator & AtomAggregator).
2. AggregatorImpl directly implements the Tuscany Atom Collection interface. It is a component 
   that provides an Atom feed to respond (see tuscany/modules/binding-atom-abdera) 
3. The AggregatorImpl component is not explicitly configured using nested <service> element nor its 
   implementation class is annotated with @Service annotation. Instead, the Tuscany Atom Collection interface 
   defines its services using @Remotable annotation.

Building And Running The Sample Using Ant
-----------------------------------------
With the binary distribution the sample can be built and run using Ant using the 
following commands

cd feed-aggregator
ant compile
ant run

You should see the following output from the run target.

run:
    [java] Added Servlet mapping: http://localhost:8083/rssAggregator
    [java] Added Servlet mapping: http://localhost:8083/atomAggregator/*
    [java] Sample Feed server started (press enter to shutdown)

    [java] To read the aggregated feeds, point your Web browser to the following addresses:
    [java] http://localhost:8083/atomAggregator
    [java] http://localhost:8083/atomAggregator/atomsvc (for the Atom service document)
    [java] http://localhost:8083/rssAggregator
     
 
Building The Sample Using Maven 
-------------------------------------------
With either the binary or source distributions the sample can be built using
Maven as follows.

cd feed-aggregator
mvn

