This is an automated email from the ASF dual-hosted git repository.

billblough pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/axis-axis2-java-savan.git

commit 0d2a1590b0d761f6f9b8f4d97815f1eea1562863
Author: Hemapani Srinath Perera <hemap...@apache.org>
AuthorDate: Sat Jun 9 10:44:04 2007 +0000

    add client methods to AtomEventing Client
---
 .../java/org/apache/savan/atom/AtomConstants.java  |   4 +
 .../java/org/apache/savan/atom/AtomDataSource.java |  15 +-
 .../org/apache/savan/atom/AtomEventingClient.java  | 214 +++++++++++++++++----
 .../org/apache/savan/atom/AtomMessageReceiver.java |   5 +
 .../savan/atom/AtomSubscriptionProcessor.java      |   2 -
 .../java/org/apache/axis2/savan/atom/AtomTest.java |  36 ++--
 6 files changed, 216 insertions(+), 60 deletions(-)

diff --git 
a/modules/core/src/main/java/org/apache/savan/atom/AtomConstants.java 
b/modules/core/src/main/java/org/apache/savan/atom/AtomConstants.java
index 60feee7..fde0b88 100644
--- a/modules/core/src/main/java/org/apache/savan/atom/AtomConstants.java
+++ b/modules/core/src/main/java/org/apache/savan/atom/AtomConstants.java
@@ -1,6 +1,10 @@
 
 package org.apache.savan.atom;
 
+/**
+ * 
+ * @author Srinath Perera(hemap...@apache.org)
+ */
 public class AtomConstants {
        public static String ATOM_NAMESPACE = "http://www.w3.org/2005/Atom";;
        public static String ATOM_PREFIX = "atom";
diff --git 
a/modules/core/src/main/java/org/apache/savan/atom/AtomDataSource.java 
b/modules/core/src/main/java/org/apache/savan/atom/AtomDataSource.java
index 9cced07..f062cce 100644
--- a/modules/core/src/main/java/org/apache/savan/atom/AtomDataSource.java
+++ b/modules/core/src/main/java/org/apache/savan/atom/AtomDataSource.java
@@ -10,24 +10,24 @@ import java.sql.ResultSet;
 import java.sql.SQLException;
 import java.sql.Statement;
 import java.sql.Timestamp;
-import java.text.SimpleDateFormat;
 import java.util.Date;
 import java.util.Properties;
 
 import javax.xml.stream.XMLStreamException;
 import javax.xml.stream.XMLStreamReader;
 
-import org.apache.axiom.om.OMAbstractFactory;
-import org.apache.axiom.om.OMDocument;
 import org.apache.axiom.om.OMElement;
-import org.apache.axiom.om.OMFactory;
-import org.apache.axiom.om.OMNamespace;
 import org.apache.axiom.om.impl.builder.StAXBuilder;
 import org.apache.axiom.om.impl.builder.StAXOMBuilder;
 import org.apache.axiom.om.util.StAXUtils;
 import org.apache.axis2.context.MessageContext;
 import org.apache.savan.SavanException;
 
+/**
+ * This class interface between Derby and Savan atom implementation 
+ * @author Srinath Perera(hemap...@apache.org)
+ *
+ */
 public class AtomDataSource {
        public static final String SQL_CREATE_FEEDS = "CREATE TABLE FEEDS(id 
CHAR(250) NOT NULL, " +
                        "title CHAR(250), updated TIMESTAMP, author CHAR(250), 
PRIMARY KEY(id))";
@@ -182,9 +182,4 @@ public class AtomDataSource {
                        throw new SavanException(e);
                }
        }
-       
-       
-       
-       
-       
 }
diff --git 
a/modules/core/src/main/java/org/apache/savan/atom/AtomEventingClient.java 
b/modules/core/src/main/java/org/apache/savan/atom/AtomEventingClient.java
index 701f663..ca81043 100644
--- a/modules/core/src/main/java/org/apache/savan/atom/AtomEventingClient.java
+++ b/modules/core/src/main/java/org/apache/savan/atom/AtomEventingClient.java
@@ -1,16 +1,30 @@
 package org.apache.savan.atom;
 
+import java.io.ByteArrayInputStream;
+import java.io.ByteArrayOutputStream;
+import java.io.IOException;
+import java.io.OutputStream;
 import java.util.Calendar;
 import java.util.Iterator;
 
 import javax.xml.namespace.QName;
+import javax.xml.stream.XMLStreamException;
 
 import org.apache.axiom.om.OMAbstractFactory;
 import org.apache.axiom.om.OMElement;
+import org.apache.axiom.om.impl.builder.StAXOMBuilder;
 import org.apache.axis2.AxisFault;
 import org.apache.axis2.addressing.AddressingConstants;
 import org.apache.axis2.addressing.EndpointReference;
+import org.apache.axis2.client.Options;
 import org.apache.axis2.client.ServiceClient;
+import org.apache.commons.httpclient.HttpClient;
+import org.apache.commons.httpclient.methods.GetMethod;
+import org.apache.commons.httpclient.methods.PostMethod;
+import org.apache.commons.httpclient.methods.RequestEntity;
+import org.apache.http.HttpStatus;
+import org.apache.savan.SavanException;
+import org.apache.savan.eventing.EventingConstants;
 import org.apache.savan.filters.XPathBasedFilter;
 import org.apache.savan.util.CommonUtil;
 import org.apache.xmlbeans.XmlException;
@@ -21,74 +35,202 @@ import com.wso2.eventing.atom.FilterType;
 import com.wso2.eventing.atom.CreateFeedDocument.CreateFeed;
 import com.wso2.eventing.atom.CreateFeedResponseDocument.CreateFeedResponse;
 
+/**
+ * This class take provide client interface for Savan atom support
+ * 
+ * @author Srinath Perera(hemap...@apache.org)
+ * 
+ */
 public class AtomEventingClient {
        private ServiceClient serviceClient = null;
+
        private EndpointReference feedEpr;
-       
-       public AtomEventingClient(ServiceClient serviceClient){
+
+       public AtomEventingClient(ServiceClient serviceClient) {
                this.serviceClient = serviceClient;
        }
-       
-       public CreateFeedResponse createFeed(String title,String author) throws 
AxisFault{
-               return createFeed(title, author,null,null);
+
+       public CreateFeedResponse createFeed(String title, String author)
+                       throws AxisFault {
+               return createFeed(title, author, null, null);
        }
-       public CreateFeedResponse createFeed(String title,String 
author,Calendar expiredTime,String xpathFilter) throws AxisFault{
+
+       public CreateFeedResponse createFeed(String title, String author,
+                       Calendar expiredTime, String xpathFilter) throws 
AxisFault {
                try {
-                       
serviceClient.getOptions().setAction(AtomConstants.Actions.Subscribe);
-                       
-                       CreateFeedDocument createFeedDocument = 
CreateFeedDocument.Factory.newInstance();
+                       serviceClient.getOptions().setAction(
+                                       AtomConstants.Actions.Subscribe);
+
+                       CreateFeedDocument createFeedDocument = 
CreateFeedDocument.Factory
+                                       .newInstance();
                        CreateFeed createFeed = 
createFeedDocument.addNewCreateFeed();
-                       
+
                        createFeed.setAuthor(author);
                        createFeed.setTitle(title);
-                       
-                       if(expiredTime != null){
-                               createFeed.setExpires(expiredTime);     
+
+                       if (expiredTime != null) {
+                               createFeed.setExpires(expiredTime);
                        }
-                       if(xpathFilter != null){
+                       if (xpathFilter != null) {
                                FilterType filter = createFeed.addNewFilter();
                                
filter.setDialect(XPathBasedFilter.XPATH_BASED_FILTER);
                                filter.setStringValue(xpathFilter);
                        }
-                       
+
                        OMElement request = CommonUtil.toOM(createFeedDocument);
                        request.build();
                        OMElement element = serviceClient.sendReceive(request);
-                       CreateFeedResponseDocument createFeedResponseDocument = 
CreateFeedResponseDocument.Factory.parse(element.getXMLStreamReader());
+                       CreateFeedResponseDocument createFeedResponseDocument = 
CreateFeedResponseDocument.Factory
+                                       .parse(element.getXMLStreamReader());
                        System.out.println(createFeedDocument.xmlText());
 
-                       //read epr for subscription from response and store it
-                       OMElement responseAsOM = 
CommonUtil.toOM(createFeedResponseDocument);
-                       OMElement eprAsOM = 
responseAsOM.getFirstChildWithName(new 
QName(AtomConstants.ATOM_MSG_NAMESPACE,"SubscriptionManager"));
-                       
+                       // read epr for subscription from response and store it
+                       OMElement responseAsOM = CommonUtil
+                                       .toOM(createFeedResponseDocument);
+                       OMElement eprAsOM = 
responseAsOM.getFirstChildWithName(new QName(
+                                       AtomConstants.ATOM_MSG_NAMESPACE, 
"SubscriptionManager"));
+
                        feedEpr = new 
EndpointReference(eprAsOM.getFirstElement().getText());
-                       OMElement referanceParameters = 
eprAsOM.getFirstChildWithName(new 
QName(eprAsOM.getFirstElement().getNamespace().getNamespaceURI(),
-                                       
AddressingConstants.EPR_REFERENCE_PARAMETERS));
+                       OMElement referanceParameters = eprAsOM
+                                       .getFirstChildWithName(new 
QName(eprAsOM.getFirstElement()
+                                                       
.getNamespace().getNamespaceURI(),
+                                                       
AddressingConstants.EPR_REFERENCE_PARAMETERS));
                        Iterator refparams = 
referanceParameters.getChildElements();
-                       while(refparams.hasNext()){
-                               
feedEpr.addReferenceParameter((OMElement)refparams.next());     
+                       while (refparams.hasNext()) {
+                               feedEpr.addReferenceParameter((OMElement) 
refparams.next());
                        }
-                       
+
                        return 
createFeedResponseDocument.getCreateFeedResponse();
                } catch (XmlException e) {
                        throw new AxisFault(e);
-               } 
+               }
        }
-       
-       public void deleteFeed(EndpointReference epr)throws AxisFault{
+
+       public void deleteFeed(EndpointReference epr) throws AxisFault {
                
serviceClient.getOptions().setAction(AtomConstants.Actions.Unsubscribe);
                serviceClient.getOptions().setTo(epr);
-               
-               OMElement request = 
OMAbstractFactory.getOMFactory().createOMElement(new 
QName(AtomConstants.ATOM_MSG_NAMESPACE,"DeleteFeed"));
+
+               OMElement request = 
OMAbstractFactory.getOMFactory().createOMElement(
+                               new QName(AtomConstants.ATOM_MSG_NAMESPACE, 
"DeleteFeed"));
                serviceClient.sendReceive(request);
        }
-       
-       
-       public void deleteFeed()throws AxisFault{
-               if(feedEpr != null){
+
+       public void deleteFeed() throws AxisFault {
+               if (feedEpr != null) {
                        deleteFeed(feedEpr);
-               }else{
-                       throw new AxisFault("No feed epr alreday stored, you 
must have create a feed using same AtomEventingClient Object");
+               } else {
+                       throw new AxisFault(
+                                       "No feed epr alreday stored, you must 
have create a feed using same AtomEventingClient Object");
                }
        }
+
+       public OMElement fetchFeed(String url) throws SavanException {
+               // Create an instance of HttpClient.
+               HttpClient client = new HttpClient();
+
+               // Create a method instance.
+               GetMethod method = new GetMethod(url);
+
+               try {
+                       // Execute the method.
+                       int statusCode = client.executeMethod(method);
+
+                       if (statusCode != HttpStatus.SC_OK) {
+                               throw new SavanException("Method failed: " + 
method.getStatusLine());
+                       }
+
+                       // Read the response body.
+                       byte[] responseBody = method.getResponseBody();
+
+                       StAXOMBuilder builder = new StAXOMBuilder(new 
ByteArrayInputStream(
+                                       responseBody));
+                       return builder.getDocumentElement();
+               } catch (IOException e) {
+                       throw new SavanException(e);
+               } catch (XMLStreamException e) {
+                       throw new SavanException(e);
+               } finally {
+                       // Release the connection.
+                       method.releaseConnection();
+               }
+       }
+
+       public void publishWithREST(String serviceurl, final OMElement 
content,String topic)
+                       throws SavanException {
+               // Create an instance of HttpClient.
+               HttpClient client = new HttpClient();
+
+               StringBuffer queryUrl = new StringBuffer(serviceurl);
+               
+               if(!serviceurl.endsWith("/")){
+                       queryUrl.append("/");
+               }
+               queryUrl.append("publish");
+               if(topic != null ){
+                       
queryUrl.append("?").append(EventingConstants.ElementNames.Topic).append("=").append(topic);
    
+               }
+               PostMethod method = new PostMethod(queryUrl.toString());
+               // Request content will be retrieved directly
+               // from the input stream
+               try {
+                       ByteArrayOutputStream out = new ByteArrayOutputStream();
+                       content.serialize(out);
+                       out.flush();
+                       final byte[] data = out.toByteArray();
+
+                       RequestEntity entity = new RequestEntity() {
+
+                               public void writeRequest(OutputStream outstream)
+                                               throws IOException {
+                                       outstream.write(data);
+                               }
+
+                               public boolean isRepeatable() {
+                                       return false;
+                               }
+
+                               public String getContentType() {
+                                       return "text/xml";
+                               }
+
+                               public long getContentLength() {
+                                       return data.length;
+                               }
+
+                       };
+                       method.setRequestEntity(entity);
+
+                       // Execute the method.
+                       int statusCode = client.executeMethod(method);
+
+                       if (statusCode != HttpStatus.SC_OK && statusCode != 
HttpStatus.SC_ACCEPTED) {
+                               throw new SavanException("Method failed: " + 
method.getStatusLine());
+                       }
+
+               } catch (IOException e) {
+                       throw new SavanException(e);
+               } catch (XMLStreamException e) {
+                       throw new SavanException(e);
+               } finally {
+                       // Release the connection.
+                       method.releaseConnection();
+               }
+       }
+       
+       public void publishWithSOAP(String serviceurl, final OMElement 
content,String topic) throws SavanException{
+               try {
+                       Options options = serviceClient.getOptions();
+                       EndpointReference to = new 
EndpointReference(serviceurl);
+                       if(topic != null){
+                               to.addReferenceParameter(new 
QName(EventingConstants.EXTENDED_EVENTING_NAMESPACE,
+                                               
EventingConstants.ElementNames.Topic), topic);
+                       }
+                       options.setAction(EventingConstants.Actions.Publish);
+                       serviceClient.fireAndForget(content);
+               } catch (AxisFault e) {
+                       throw new SavanException(e);
+               }
+       }
+       
+
 }
diff --git 
a/modules/core/src/main/java/org/apache/savan/atom/AtomMessageReceiver.java 
b/modules/core/src/main/java/org/apache/savan/atom/AtomMessageReceiver.java
index 8d817fb..c9c4001 100644
--- a/modules/core/src/main/java/org/apache/savan/atom/AtomMessageReceiver.java
+++ b/modules/core/src/main/java/org/apache/savan/atom/AtomMessageReceiver.java
@@ -31,6 +31,11 @@ import org.apache.axis2.util.MessageContextBuilder;
 import org.apache.savan.storage.SubscriberStore;
 import org.apache.savan.util.CommonUtil;
 
+/**
+ * Handle the HTTP GET requests for feeds
+ * @author Srinath Perera(hemap...@apache.org)
+ */
+
 public class AtomMessageReceiver implements MessageReceiver{
        
        public static final String ATOM_NAME = "atom";
diff --git 
a/modules/core/src/main/java/org/apache/savan/atom/AtomSubscriptionProcessor.java
 
b/modules/core/src/main/java/org/apache/savan/atom/AtomSubscriptionProcessor.java
index a87c6f0..8105462 100644
--- 
a/modules/core/src/main/java/org/apache/savan/atom/AtomSubscriptionProcessor.java
+++ 
b/modules/core/src/main/java/org/apache/savan/atom/AtomSubscriptionProcessor.java
@@ -30,7 +30,6 @@ import org.apache.axiom.soap.SOAPBody;
 import org.apache.axiom.soap.SOAPEnvelope;
 import org.apache.axiom.soap.SOAPHeader;
 import org.apache.axis2.AxisFault;
-import org.apache.axis2.context.ConfigurationContext;
 import org.apache.axis2.context.ServiceContext;
 import org.apache.savan.SavanConstants;
 import org.apache.savan.SavanException;
@@ -39,7 +38,6 @@ import org.apache.savan.configuration.ConfigurationManager;
 import org.apache.savan.configuration.Protocol;
 import org.apache.savan.filters.Filter;
 import org.apache.savan.filters.XPathBasedFilter;
-import org.apache.savan.storage.SubscriberStore;
 import org.apache.savan.subscribers.Subscriber;
 import org.apache.savan.subscription.ExpirationBean;
 import org.apache.savan.subscription.SubscriptionProcessor;
diff --git 
a/modules/core/src/test/java/org/apache/axis2/savan/atom/AtomTest.java 
b/modules/core/src/test/java/org/apache/axis2/savan/atom/AtomTest.java
index bad3eb8..995b547 100644
--- a/modules/core/src/test/java/org/apache/axis2/savan/atom/AtomTest.java
+++ b/modules/core/src/test/java/org/apache/axis2/savan/atom/AtomTest.java
@@ -28,6 +28,7 @@ import org.apache.axiom.om.OMAbstractFactory;
 import org.apache.axiom.om.OMElement;
 import org.apache.axiom.om.OMFactory;
 import org.apache.axiom.om.OMNamespace;
+import org.apache.axiom.om.OMOutputFormat;
 import org.apache.axis2.AxisFault;
 import org.apache.axis2.addressing.EndpointReference;
 import org.apache.axis2.client.Options;
@@ -137,22 +138,31 @@ public class AtomTest extends UtilServerBasedTestCase  {
                CreateFeedResponse createFeedResponse = 
atomEventingClient.createFeed("test Title","Srinath Perera");
                
                options.setAction("http://wso2.com/eventing/dummyMethod";);
-               serviceClient.fireAndForget(getDummyMethodRequestElement ());
+               serviceClient.fireAndForget(getDummyMethodRequestElement (0));
                
-               options.setAction(EventingConstants.Actions.Publish);
-               serviceClient.fireAndForget(getDummyMethodRequestElement ());
+//             options.setAction(EventingConstants.Actions.Publish);
+//             serviceClient.fireAndForget(getDummyMethodRequestElement ());
                
+               atomEventingClient.publishWithSOAP(toAddress, 
getDummyMethodRequestElement (1), null);
+               atomEventingClient.publishWithREST(toAddress, 
getDummyMethodRequestElement (2), null);
                //Thread.sleep(1000*10*1000);
                
-               int i = 0;
-               while(i<1){
+//             int i = 0;
+//             while(i<1){
                        System.out.println(createFeedResponse.getFeedUrl());
-                       URL url = new URL(createFeedResponse.getFeedUrl());
-                       System.out.println(readFromStream(url.openStream()));
-                       Thread.sleep(1000*10);  
-                       i++;
-               }
+                       OMElement feedAsXml = 
atomEventingClient.fetchFeed(createFeedResponse.getFeedUrl());
+                       feedAsXml.serialize(System.out,new OMOutputFormat());
+                       
+//                     URL url = new URL(createFeedResponse.getFeedUrl());
+//                     System.out.println(readFromStream(url.openStream()));
+//                     Thread.sleep(1000*10);  
+//                     i++;
+//             }
 //             
+               feedAsXml = 
atomEventingClient.fetchFeed(createFeedResponse.getFeedUrl());
+               feedAsXml.serialize(System.out,new OMOutputFormat());   
+                       
+                       
                atomEventingClient.deleteFeed();
                
                
@@ -272,10 +282,12 @@ public class AtomTest extends UtilServerBasedTestCase  {
                System.out.println("Status of the subscriber '" + ID +"' is" + 
statusValue);
        }
        
-       private OMElement getDummyMethodRequestElement() {
+       private OMElement getDummyMethodRequestElement(int i) {
                OMFactory fac = OMAbstractFactory.getOMFactory();
                OMNamespace namespace = 
fac.createOMNamespace(applicationNamespaceName,"ns1");
-               return fac.createOMElement(dummyMethod, namespace);
+               OMElement de =  fac.createOMElement(dummyMethod, namespace);
+               de.setText(String.valueOf(i));
+               return de;
        }
     
        public static String readFromStream(InputStream in) throws Exception{

Reply via email to