You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@tuscany.apache.org by js...@apache.org on 2007/06/20 02:59:05 UTC

svn commit: r548879 - in /incubator/tuscany/java/sca: demos/alert-aggregator/src/main/java/org/apache/tuscany/sca/demos/aggregator/ demos/bigbank-account/ demos/bigbank-account/src/main/java/bigbank/account/feed/ demos/bigbank-account/src/main/resource...

Author: jsdelfino
Date: Tue Jun 19 17:59:04 2007
New Revision: 548879

URL: http://svn.apache.org/viewvc?view=rev&rev=548879
Log:
Pass the feed URI to the Feed.get() method, to allow a feed producer to extract business data out of it, and return that URI in the feed itself. Added a feed binding to the Bigbank demo, allowing a client to the customer account report as a feed.

Added:
    incubator/tuscany/java/sca/demos/bigbank-account/src/main/java/bigbank/account/feed/
    incubator/tuscany/java/sca/demos/bigbank-account/src/main/java/bigbank/account/feed/AccountFeedImpl.java   (with props)
Modified:
    incubator/tuscany/java/sca/demos/alert-aggregator/src/main/java/org/apache/tuscany/sca/demos/aggregator/AlertsFeedServiceImpl.java
    incubator/tuscany/java/sca/demos/bigbank-account/pom.xml
    incubator/tuscany/java/sca/demos/bigbank-account/src/main/resources/BigBank.composite
    incubator/tuscany/java/sca/modules/binding-feed/src/main/java/org/apache/tuscany/sca/binding/feed/Feed.java
    incubator/tuscany/java/sca/modules/binding-feed/src/main/java/org/apache/tuscany/sca/binding/feed/provider/FeedBindingInvoker.java
    incubator/tuscany/java/sca/modules/binding-feed/src/main/java/org/apache/tuscany/sca/binding/feed/provider/FeedBindingListener.java
    incubator/tuscany/java/sca/modules/binding-feed/src/main/java/org/apache/tuscany/sca/binding/feed/provider/FeedServiceBindingProvider.java
    incubator/tuscany/java/sca/samples/feed-aggregator/src/main/java/feed/AggregatorImpl.java

Modified: incubator/tuscany/java/sca/demos/alert-aggregator/src/main/java/org/apache/tuscany/sca/demos/aggregator/AlertsFeedServiceImpl.java
URL: http://svn.apache.org/viewvc/incubator/tuscany/java/sca/demos/alert-aggregator/src/main/java/org/apache/tuscany/sca/demos/aggregator/AlertsFeedServiceImpl.java?view=diff&rev=548879&r1=548878&r2=548879
==============================================================================
--- incubator/tuscany/java/sca/demos/alert-aggregator/src/main/java/org/apache/tuscany/sca/demos/aggregator/AlertsFeedServiceImpl.java (original)
+++ incubator/tuscany/java/sca/demos/alert-aggregator/src/main/java/org/apache/tuscany/sca/demos/aggregator/AlertsFeedServiceImpl.java Tue Jun 19 17:59:04 2007
@@ -21,26 +21,19 @@
 
 import java.text.DateFormat;
 import java.util.ArrayList;
-import java.util.Date;
 import java.util.List;
 
-import org.apache.tuscany.sca.demos.aggregator.types.ConfigType;
-import org.apache.tuscany.sca.demos.aggregator.types.SourceType;
-import org.apache.tuscany.sca.demos.aggregator.types.TypesFactory;
-import org.apache.tuscany.sca.demos.aggregator.types.AlertsType;
+import org.apache.tuscany.sca.binding.feed.Feed;
 import org.apache.tuscany.sca.demos.aggregator.types.AlertType;
-import org.apache.tuscany.sca.demos.aggregator.types.impl.AlertsTypeImpl;
-
-import org.osoa.sca.annotations.Service;
+import org.apache.tuscany.sca.demos.aggregator.types.AlertsType;
 import org.osoa.sca.annotations.Reference;
+import org.osoa.sca.annotations.Service;
 
 import com.sun.syndication.feed.synd.SyndEntry;
 import com.sun.syndication.feed.synd.SyndEntryImpl;
 import com.sun.syndication.feed.synd.SyndFeed;
 import com.sun.syndication.feed.synd.SyndFeedImpl;
 
-import org.apache.tuscany.sca.binding.feed.Feed;
-
 /**
  * Read all new alerts from the specified sources
  *
@@ -63,14 +56,14 @@
      * 
      * @return the structure containing alerts 
      */    
-    public SyndFeed get() {
+    public SyndFeed get(String uri) {
         
         // Create a new Feed
         SyndFeed feed = new SyndFeedImpl();
         feed.setTitle("Apache Tuscant Feed Aggregator");
         feed.setDescription("A sample showing an SCA application to aggregate various types of feeds");
         feed.setAuthor("Apache Tuscany");
-        feed.setLink("http://incubator.apache.org/tuscany");
+        feed.setLink(uri);
  
         // Aggregate entries from feed1 and feed2
         List<SyndEntry> entries = new ArrayList<SyndEntry>();

Modified: incubator/tuscany/java/sca/demos/bigbank-account/pom.xml
URL: http://svn.apache.org/viewvc/incubator/tuscany/java/sca/demos/bigbank-account/pom.xml?view=diff&rev=548879&r1=548878&r2=548879
==============================================================================
--- incubator/tuscany/java/sca/demos/bigbank-account/pom.xml (original)
+++ incubator/tuscany/java/sca/demos/bigbank-account/pom.xml Tue Jun 19 17:59:04 2007
@@ -45,6 +45,12 @@
 
         <dependency>
             <groupId>org.apache.tuscany.sca</groupId>
+            <artifactId>tuscany-binding-feed</artifactId>
+            <version>1.0-incubating-SNAPSHOT</version>
+        </dependency>
+
+        <dependency>
+            <groupId>org.apache.tuscany.sca</groupId>
             <artifactId>tuscany-implementation-java-runtime</artifactId>
             <version>1.0-incubating-SNAPSHOT</version>
             <scope>runtime</scope>

Added: incubator/tuscany/java/sca/demos/bigbank-account/src/main/java/bigbank/account/feed/AccountFeedImpl.java
URL: http://svn.apache.org/viewvc/incubator/tuscany/java/sca/demos/bigbank-account/src/main/java/bigbank/account/feed/AccountFeedImpl.java?view=auto&rev=548879
==============================================================================
--- incubator/tuscany/java/sca/demos/bigbank-account/src/main/java/bigbank/account/feed/AccountFeedImpl.java (added)
+++ incubator/tuscany/java/sca/demos/bigbank-account/src/main/java/bigbank/account/feed/AccountFeedImpl.java Tue Jun 19 17:59:04 2007
@@ -0,0 +1,68 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ * 
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ * 
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.    
+ */
+package bigbank.account.feed;
+
+import org.apache.tuscany.sca.binding.feed.Feed;
+import org.osoa.sca.annotations.Reference;
+import org.osoa.sca.annotations.Service;
+
+import bigbank.account.AccountService;
+
+import com.sun.syndication.feed.synd.SyndContent;
+import com.sun.syndication.feed.synd.SyndContentImpl;
+import com.sun.syndication.feed.synd.SyndEntry;
+import com.sun.syndication.feed.synd.SyndEntryImpl;
+import com.sun.syndication.feed.synd.SyndFeed;
+import com.sun.syndication.feed.synd.SyndFeedImpl;
+
+/**
+ * @version $$Rev$$ $$Date$$
+ */
+
+@Service(Feed.class)
+public class AccountFeedImpl implements Feed {
+
+    @Reference
+    protected AccountService accountService;
+    
+    @SuppressWarnings("unchecked")
+    public SyndFeed get(String uri) {
+        
+        // Get the account report for the specified customer ID
+        String customerID = uri.substring(uri.lastIndexOf('/')+1);
+        double balance = accountService.getAccountReport(customerID); 
+        String value = Double.toString(balance);
+        
+        // Create a new Feed
+        SyndFeed feed = new SyndFeedImpl();
+        feed.setTitle("Account Report Feed");
+        feed.setDescription("A sample Account Report feed");
+        feed.setAuthor("anonymous");
+        feed.setLink(uri);
+        
+        SyndEntry entry = new SyndEntryImpl();
+        entry.setAuthor("anonymous");
+        SyndContent content = new SyndContentImpl();
+        content.setValue(value);
+        entry.setDescription(content);
+        feed.getEntries().add(entry);
+
+        return feed;
+    }
+}

Propchange: incubator/tuscany/java/sca/demos/bigbank-account/src/main/java/bigbank/account/feed/AccountFeedImpl.java
------------------------------------------------------------------------------
    svn:eol-style = native

Propchange: incubator/tuscany/java/sca/demos/bigbank-account/src/main/java/bigbank/account/feed/AccountFeedImpl.java
------------------------------------------------------------------------------
    svn:keywords = Rev Date

Modified: incubator/tuscany/java/sca/demos/bigbank-account/src/main/resources/BigBank.composite
URL: http://svn.apache.org/viewvc/incubator/tuscany/java/sca/demos/bigbank-account/src/main/resources/BigBank.composite?view=diff&rev=548879&r1=548878&r2=548879
==============================================================================
--- incubator/tuscany/java/sca/demos/bigbank-account/src/main/resources/BigBank.composite (original)
+++ incubator/tuscany/java/sca/demos/bigbank-account/src/main/resources/BigBank.composite Tue Jun 19 17:59:04 2007
@@ -14,20 +14,30 @@
         <binding.jsonrpc/>
     </service>
 
+   	<service name="AccountWebResources" promote="WebResourceComponent">
+   		<binding.resource uri="/"/>
+   	</service>
+
+   	<service name="AccountFeed" promote="AccountFeedComponent">
+   		<binding.atom uri="/feed/*"/>
+   	</service>
+
     <component name="AccountServiceComponent">
         <implementation.java class="bigbank.account.AccountServiceImpl"/>
         <reference name="accountDataService" target="AccountDataServiceComponent"/>
         <property name="currency">EURO</property>
     </component>
 
+    <component name="AccountFeedComponent">
+        <implementation.java class="bigbank.account.feed.AccountFeedImpl"/>
+        <reference name="accountService" target="AccountServiceComponent"/>
+    </component>
+
     <component name="AccountDataServiceComponent">
         <implementation.composite name="bb:AccountData"/>
     </component>
 
     <component name="WebResourceComponent">
-    	<service name="Resource">
-    		<binding.resource uri="/"/>
-    	</service>
         <implementation.resource location="web"/>
     </component>
 

Modified: incubator/tuscany/java/sca/modules/binding-feed/src/main/java/org/apache/tuscany/sca/binding/feed/Feed.java
URL: http://svn.apache.org/viewvc/incubator/tuscany/java/sca/modules/binding-feed/src/main/java/org/apache/tuscany/sca/binding/feed/Feed.java?view=diff&rev=548879&r1=548878&r2=548879
==============================================================================
--- incubator/tuscany/java/sca/modules/binding-feed/src/main/java/org/apache/tuscany/sca/binding/feed/Feed.java (original)
+++ incubator/tuscany/java/sca/modules/binding-feed/src/main/java/org/apache/tuscany/sca/binding/feed/Feed.java Tue Jun 19 17:59:04 2007
@@ -32,5 +32,11 @@
 @Remotable
 public interface Feed {
 
-    SyndFeed get();
+    /**
+     * Get an RSS or Atom feed.
+     * 
+     * @param uri the uri of the feed
+     * @return the RSS or Atom feed
+     */
+    SyndFeed get(String uri);
 }

Modified: incubator/tuscany/java/sca/modules/binding-feed/src/main/java/org/apache/tuscany/sca/binding/feed/provider/FeedBindingInvoker.java
URL: http://svn.apache.org/viewvc/incubator/tuscany/java/sca/modules/binding-feed/src/main/java/org/apache/tuscany/sca/binding/feed/provider/FeedBindingInvoker.java?view=diff&rev=548879&r1=548878&r2=548879
==============================================================================
--- incubator/tuscany/java/sca/modules/binding-feed/src/main/java/org/apache/tuscany/sca/binding/feed/provider/FeedBindingInvoker.java (original)
+++ incubator/tuscany/java/sca/modules/binding-feed/src/main/java/org/apache/tuscany/sca/binding/feed/provider/FeedBindingInvoker.java Tue Jun 19 17:59:04 2007
@@ -20,6 +20,7 @@
 
 import java.io.IOException;
 import java.net.MalformedURLException;
+import java.net.URI;
 import java.net.URL;
 
 import org.apache.tuscany.sca.invocation.Invoker;
@@ -43,11 +44,22 @@
 
     public Message invoke(Message msg) {
         try {
-            URL feedUrl = new URL(uri);
+            URL feedURL;
+            Object[] args = msg.getBody();
+            if (args[0] != null) {
+                URI arg = URI.create((String)args[0]);
+                if (arg.isAbsolute()) {
+                    feedURL = arg.toURL();
+                } else {
+                    feedURL = new URL(uri + "/" + arg.toString());
+                }
+            } else {
+                feedURL = new URL(uri);
+            }
 
             // Read the configured feed into a Feed object
             SyndFeedInput input = new SyndFeedInput();
-            SyndFeed feed = input.build(new XmlReader(feedUrl));
+            SyndFeed feed = input.build(new XmlReader(feedURL));
             msg.setBody(feed);
 
             System.out.println(">>> FeedBindingInvoker (" + feed.getFeedType() + ") " + uri);

Modified: incubator/tuscany/java/sca/modules/binding-feed/src/main/java/org/apache/tuscany/sca/binding/feed/provider/FeedBindingListener.java
URL: http://svn.apache.org/viewvc/incubator/tuscany/java/sca/modules/binding-feed/src/main/java/org/apache/tuscany/sca/binding/feed/provider/FeedBindingListener.java?view=diff&rev=548879&r1=548878&r2=548879
==============================================================================
--- incubator/tuscany/java/sca/modules/binding-feed/src/main/java/org/apache/tuscany/sca/binding/feed/provider/FeedBindingListener.java (original)
+++ incubator/tuscany/java/sca/modules/binding-feed/src/main/java/org/apache/tuscany/sca/binding/feed/provider/FeedBindingListener.java Tue Jun 19 17:59:04 2007
@@ -70,7 +70,8 @@
 
         // Assuming that the service provided by this binding implements the Feed
         // service interface, get the Feed from the service
-        SyndFeed syndFeed = ((Feed)serviceInstance).get();
+        String uri = request.getRequestURL().toString();
+        SyndFeed syndFeed = ((Feed)serviceInstance).get(uri);
         syndFeed.setFeedType(requestFeedType);
 
         // Write the Feed to the servlet output

Modified: incubator/tuscany/java/sca/modules/binding-feed/src/main/java/org/apache/tuscany/sca/binding/feed/provider/FeedServiceBindingProvider.java
URL: http://svn.apache.org/viewvc/incubator/tuscany/java/sca/modules/binding-feed/src/main/java/org/apache/tuscany/sca/binding/feed/provider/FeedServiceBindingProvider.java?view=diff&rev=548879&r1=548878&r2=548879
==============================================================================
--- incubator/tuscany/java/sca/modules/binding-feed/src/main/java/org/apache/tuscany/sca/binding/feed/provider/FeedServiceBindingProvider.java (original)
+++ incubator/tuscany/java/sca/modules/binding-feed/src/main/java/org/apache/tuscany/sca/binding/feed/provider/FeedServiceBindingProvider.java Tue Jun 19 17:59:04 2007
@@ -33,12 +33,11 @@
  */
 public class FeedServiceBindingProvider implements ServiceBindingProvider {
 
-    public static final String SERVICE_MAPPING_PREFIX = "/";
-
     private RuntimeComponent component;
     private RuntimeComponentService service;
     private FeedBinding binding;
     private ServletHost servletHost;
+    private String uri;
 
     public FeedServiceBindingProvider(RuntimeComponent component,
                                       RuntimeComponentService service,
@@ -48,6 +47,10 @@
         this.service = service;
         this.binding = binding;
         this.servletHost = servletHost;
+        uri = binding.getURI();
+        if (uri == null) {
+            uri = "/" + component.getName();
+        }
     }
 
     public InterfaceContract getBindingInterfaceContract() {
@@ -61,18 +64,10 @@
         FeedBindingListener servlet =
             new FeedBindingListener(binding.getName(), aClass, instance, binding.getFeedType());
 
-        String uri = binding.getURI();
-        if (uri == null) {
-            uri = SERVICE_MAPPING_PREFIX + binding.getName();
-        }
         servletHost.addServletMapping(uri, servlet);
     }
 
     public void stop() {
-        String uri = binding.getURI();
-        if (uri == null) {
-            uri = SERVICE_MAPPING_PREFIX + binding.getName();
-        }
         servletHost.removeServletMapping(uri);
     }
 

Modified: incubator/tuscany/java/sca/samples/feed-aggregator/src/main/java/feed/AggregatorImpl.java
URL: http://svn.apache.org/viewvc/incubator/tuscany/java/sca/samples/feed-aggregator/src/main/java/feed/AggregatorImpl.java?view=diff&rev=548879&r1=548878&r2=548879
==============================================================================
--- incubator/tuscany/java/sca/samples/feed-aggregator/src/main/java/feed/AggregatorImpl.java (original)
+++ incubator/tuscany/java/sca/samples/feed-aggregator/src/main/java/feed/AggregatorImpl.java Tue Jun 19 17:59:04 2007
@@ -50,23 +50,21 @@
     public String feedDescription = "Anonymous Aggregated Feed";
     @Property
     public String feedAuthor = "anonymous";
-    @Property
-    public String feedLink = "http://incubator.apache.org/tuscany";
 
     @SuppressWarnings("unchecked")
-    public SyndFeed get() {
+    public SyndFeed get(String uri) {
         
         // Create a new Feed
         SyndFeed feed = new SyndFeedImpl();
         feed.setTitle(feedTitle);
         feed.setDescription(feedDescription);
         feed.setAuthor(feedAuthor);
-        feed.setLink(feedLink);
+        feed.setLink(uri);
 
         // Aggregate entries from feed1 and feed2
         List<SyndEntry> entries = new ArrayList<SyndEntry>();
-        entries.addAll(feed1.get().getEntries());
-        entries.addAll(feed2.get().getEntries());
+        entries.addAll(feed1.get(null).getEntries());
+        entries.addAll(feed2.get(null).getEntries());
 
         // Sort entries by published date
         if (sort != null)



---------------------------------------------------------------------
To unsubscribe, e-mail: tuscany-commits-unsubscribe@ws.apache.org
For additional commands, e-mail: tuscany-commits-help@ws.apache.org