felix-commits mailing list archives

Site index · List index
Message view « Date » · « Thread »
Top « Date » · « Thread »
From don...@apache.org
Subject svn commit: r587926 - in /felix/sandbox/donsez/bunny: ./ src/main/java/org/apache/felix/sandbox/bunny/impl/ src/main/java/org/apache/felix/sandbox/rest/ src/site/
Date Wed, 24 Oct 2007 16:43:49 GMT
Author: donsez
Date: Wed Oct 24 09:43:47 2007
New Revision: 587926

URL: http://svn.apache.org/viewvc?rev=587926&view=rev
Log:
add a service org.osgi.service.event.EventHandler to send/post events to the bunny 

Modified:
    felix/sandbox/donsez/bunny/pom.xml
    felix/sandbox/donsez/bunny/src/main/java/org/apache/felix/sandbox/bunny/impl/BunnyServiceActivator.java
    felix/sandbox/donsez/bunny/src/main/java/org/apache/felix/sandbox/bunny/impl/BunnyServiceModelImpl.java
    felix/sandbox/donsez/bunny/src/main/java/org/apache/felix/sandbox/rest/RESTFulClient.java
    felix/sandbox/donsez/bunny/src/site/script.txt

Modified: felix/sandbox/donsez/bunny/pom.xml
URL: http://svn.apache.org/viewvc/felix/sandbox/donsez/bunny/pom.xml?rev=587926&r1=587925&r2=587926&view=diff
==============================================================================
--- felix/sandbox/donsez/bunny/pom.xml (original)
+++ felix/sandbox/donsez/bunny/pom.xml Wed Oct 24 09:43:47 2007
@@ -65,7 +65,7 @@
           	<!-- docs in http://cwiki.apache.org/FELIX/bundle-plugin-for-maven-bnd.html
and http://cwiki.apache.org/FELIX/osgi-plugin-for-maven-2.html -->
           	
             <Private-Package>${pom.artifactId}.impl,${pom.artifactId}.activator,org.apache.felix.sandbox.rest</Private-Package>
-            <Import-Package>org.osgi.framework,org.osgi.service.cm,org.apache.felix.shell,javax.xml.parsers,
org.w3c.dom, org.xml.sax, javax.xml.transform, javax.xml.transform.dom, javax.xml.transform.stream</Import-Package>
+            <Import-Package>org.osgi.framework,org.osgi.service.cm,org.osgi.service.event,org.apache.felix.shell,javax.xml.parsers,
org.w3c.dom, org.xml.sax, javax.xml.transform, javax.xml.transform.dom, javax.xml.transform.stream</Import-Package>
             <Export-Package>${pom.artifactId}.model</Export-Package>
 
             <Bundle-Activator>${pom.artifactId}.activator.Activator</Bundle-Activator>

Modified: felix/sandbox/donsez/bunny/src/main/java/org/apache/felix/sandbox/bunny/impl/BunnyServiceActivator.java
URL: http://svn.apache.org/viewvc/felix/sandbox/donsez/bunny/src/main/java/org/apache/felix/sandbox/bunny/impl/BunnyServiceActivator.java?rev=587926&r1=587925&r2=587926&view=diff
==============================================================================
--- felix/sandbox/donsez/bunny/src/main/java/org/apache/felix/sandbox/bunny/impl/BunnyServiceActivator.java
(original)
+++ felix/sandbox/donsez/bunny/src/main/java/org/apache/felix/sandbox/bunny/impl/BunnyServiceActivator.java
Wed Oct 24 09:43:47 2007
@@ -27,41 +27,122 @@
 import org.osgi.framework.ServiceRegistration;
 import org.osgi.service.cm.ConfigurationException;
 import org.osgi.service.cm.ManagedService;
+import org.osgi.service.event.Event;
+import org.osgi.service.event.EventConstants;
+import org.osgi.service.event.EventHandler;
 
 
 /**
  * this class provides an activator to instanciate a bunny service
+ * and registers services (ManagedService, EventHandler)
  * @author <a href="mailto:dev@felix.apache.org">Felix Project Team</a>
  */
-public class BunnyServiceActivator extends BunnyServiceModelImpl implements ManagedService
{
+public class BunnyServiceActivator extends BunnyServiceModelImpl implements ManagedService,
EventHandler {
 
 	private ServiceRegistration serviceRegistration;
 	
+	private String servicePid=null;
+	private String[] eventTopics=null;
+	private String[] servicesClasses=new String[]{
+			BunnyServiceModel.class.getName(),
+			ManagedService.class.getName(),
+			EventHandler.class.getName()
+		};
+
+	private Dictionary getRegistrationProperties() {
+		Dictionary registrationProperties=new Hashtable();
+		registrationProperties.put(Constants.OBJECTCLASS, servicesClasses);
+		registrationProperties.put(Constants.SERVICE_PID, servicePid);
+		registrationProperties.put(EventConstants.EVENT_TOPIC, eventTopics);
+		return registrationProperties;
+	}
+	
 	public void start(BundleContext bundleContext) throws Exception {
+
+		servicePid=bundleContext.getBundle().getSymbolicName();
+		eventTopics=new String[]{
+				bundleContext.getBundle().getSymbolicName().replace('.', '/')/* +"/*" */	
+		};
 		
-		Dictionary registrationProperties=new Hashtable();
-		registrationProperties.put(Constants.SERVICE_PID, bundleContext.getBundle().getSymbolicName());
 		
-		serviceRegistration=bundleContext.registerService(new String[]{BunnyServiceModel.class.getName(),ManagedService.class.getName()},
+		serviceRegistration=bundleContext.registerService(
+				servicesClasses,
 				this,
-				registrationProperties);
+				getRegistrationProperties()
+		);
 	}
 
 	public void stop(BundleContext bundleContext) throws Exception {
 		if(serviceRegistration!=null) serviceRegistration.unregister();
 	}
 
-	public void updated(Dictionary conigurationProperties) throws ConfigurationException {
+	public void updated(Dictionary configurationProperties) throws ConfigurationException {
 //		try {
 		configure(
-				(String) conigurationProperties.get("serialNumber"),
-				(String) conigurationProperties.get("token"),
-				(String) conigurationProperties.get("voice")
+				(String) configurationProperties.get("serialNumber"),
+				(String) configurationProperties.get("token"),
+				(String) configurationProperties.get("voice")
 			);
+		
+		Object topic=configurationProperties.get("eventtopic");
+		if(topic!=null) {
+			if (topic instanceof String[]) {
+				eventTopics=(String[])topic;
+				serviceRegistration.setProperties(getRegistrationProperties());
+			}
+		} else {
+			ConfigurationException configurationException= new ConfigurationException("eventtopic","must
be a String[]");
+			throw configurationException;	
+		}
+		
 //		} catch (Exception e) {
 //			ConfigurationException configurationException= new ConfigurationException();
 //			throw configurationException;
 //		}
+	}
+
+	public void handleEvent(Event event) {
+		
+		String name;
+		Object value=null;
+		
+		long newLeftEarPosition=leftEarPosition;
+		long newRightEarPosition=rightEarPosition;
+		String textToSpeech=null;
+		String chor=null;
+		String voice=null;
+		
+		name="posleft";
+		value=event.getProperty(name);
+		if(value!=null && value instanceof Long) {
+			newLeftEarPosition=((Long)value).longValue();			
+		}
+		
+		name="posright";
+		value=event.getProperty(name);
+		if(value!=null && value instanceof Long) {
+			newRightEarPosition=((Long)value).longValue();			
+		}
+
+		name="tts";
+		value=event.getProperty(name);
+		if(value!=null && value instanceof String) {
+			textToSpeech=(String)value;			
+		}
+		
+		name="voice";
+		value=event.getProperty(name);
+		if(value!=null && value instanceof String) {
+			voice=(String)value;			
+		}
+
+		name="chor";
+		value=event.getProperty(name);
+		if(value!=null && value instanceof String) {
+			chor=(String)value;			
+		}
+		
+		this.play(newLeftEarPosition, newRightEarPosition, textToSpeech, chor, voice);
 	}
 
 }

Modified: felix/sandbox/donsez/bunny/src/main/java/org/apache/felix/sandbox/bunny/impl/BunnyServiceModelImpl.java
URL: http://svn.apache.org/viewvc/felix/sandbox/donsez/bunny/src/main/java/org/apache/felix/sandbox/bunny/impl/BunnyServiceModelImpl.java?rev=587926&r1=587925&r2=587926&view=diff
==============================================================================
--- felix/sandbox/donsez/bunny/src/main/java/org/apache/felix/sandbox/bunny/impl/BunnyServiceModelImpl.java
(original)
+++ felix/sandbox/donsez/bunny/src/main/java/org/apache/felix/sandbox/bunny/impl/BunnyServiceModelImpl.java
Wed Oct 24 09:43:47 2007
@@ -38,9 +38,11 @@
 
 public class BunnyServiceModelImpl implements BunnyServiceModel {
 
-	private long rightEarPosition = 0;
+	private static String baseUrlString = "http://api.nabaztag.com/vl/FR/api.jsp?";
+	
+	protected long rightEarPosition = 0;
 
-	private long leftEarPosition = 0;
+	protected long leftEarPosition = 0;
 
 	private String key = "0";
 
@@ -82,7 +84,7 @@
 	public void play(long newLeftEarPosition, long newRightEarPosition,
 			String textToSpeech, String chor, String voice) {
 
-		String urlString = "http://api.nabaztag.com/vl/FR/api.jsp?";
+		String urlString = baseUrlString;
 
 		Map parameters=new HashMap();
 		parameters.put("key",key);
@@ -128,7 +130,7 @@
 	public void sendRawURL(String encodedExtraURLParameters) {
 		Object[] arguments = new Object[3];
 
-		String urlString = "http://api.nabaztag.com/vl/FR/api.jsp?";
+		String urlString = baseUrlString;
 		urlString += encodedExtraURLParameters;
 
 		Map parameters=new HashMap();
@@ -141,7 +143,6 @@
 
 	public void getEarPositions() {
 
-		String urlString = "http://api.nabaztag.com/vl/FR/api.jsp?";
 
 		Map parameters=new HashMap();
 		parameters.put("key",key);
@@ -151,7 +152,7 @@
 		
 		parameters.put("ears","ok"); // send the ears position
 
-		Document document=RESTFulClient.invoke(urlString,parameters);
+		Document document=RESTFulClient.invoke(baseUrlString,parameters);
 		if(document!=null) {
 			NodeList nodeList;
 			nodeList=document.getElementsByTagName("leftposition");

Modified: felix/sandbox/donsez/bunny/src/main/java/org/apache/felix/sandbox/rest/RESTFulClient.java
URL: http://svn.apache.org/viewvc/felix/sandbox/donsez/bunny/src/main/java/org/apache/felix/sandbox/rest/RESTFulClient.java?rev=587926&r1=587925&r2=587926&view=diff
==============================================================================
--- felix/sandbox/donsez/bunny/src/main/java/org/apache/felix/sandbox/rest/RESTFulClient.java
(original)
+++ felix/sandbox/donsez/bunny/src/main/java/org/apache/felix/sandbox/rest/RESTFulClient.java
Wed Oct 24 09:43:47 2007
@@ -22,6 +22,7 @@
 import java.io.IOException;
 import java.io.InputStream;
 import java.io.InputStreamReader;
+import java.io.PrintStream;
 import java.io.StringWriter;
 import java.net.HttpURLConnection;
 import java.net.MalformedURLException;
@@ -34,7 +35,6 @@
 import javax.xml.parsers.DocumentBuilderFactory;
 import javax.xml.parsers.ParserConfigurationException;
 import javax.xml.transform.Transformer;
-import javax.xml.transform.TransformerConfigurationException;
 import javax.xml.transform.TransformerException;
 import javax.xml.transform.TransformerFactory;
 import javax.xml.transform.dom.DOMSource;
@@ -51,7 +51,9 @@
 public class RESTFulClient {
 
 	private static boolean trace=true;
-
+	
+	private static PrintStream out=System.out;
+	
 	/**
 	 * @return the trace
 	 */
@@ -75,7 +77,7 @@
 			}
 		}
 		if (trace)
-			System.out.println("Bunny Request:" + urlString);
+			out.println("Bunny Request:" + urlString);
 
 		URL url;
 		try {
@@ -94,26 +96,26 @@
 			int length = httpURLConnection.getContentLength();
 			if (length == -1) {
 				if (trace)
-					System.out.print("Response (length=unknown):");
+					out.print("Response (length=unknown):");
 				BufferedReader br = new BufferedReader(
 						new InputStreamReader(in));
 				String line;
 				while ((line = br.readLine()) != null) {
 					if (trace)
-						System.out.println(line);
+						out.println(line);
 				}
 				br.close();
 
 			} else {
 				if (trace)
-					System.out.print("Response (length=" + length + "):");
+					out.print("Response (length=" + length + "):");
 
 				for (; length != 0; --length) {
 					if (trace)
-						System.out.print((char) in.read());
+						out.print((char) in.read());
 				}
 				if (trace)
-					System.out.println();
+					out.println();
 				in.close();
 			}
 
@@ -131,27 +133,49 @@
 				urlString += '&' + URLEncoder.encode(key.toString()) + '=' + URLEncoder.encode(value.toString());
 			}
 		}
-		
+
 		if (trace)
-			System.out.println("Request:" + urlString);
+			out.println("Request:" + urlString);
+		
+		URL url=null;
+		try {
+			url = new URL(urlString);
+		} catch (MalformedURLException e) {
+			out.println(e);
+			return null;
+		}
 
-		DocumentBuilderFactory dbf = DocumentBuilderFactory.newInstance();
-		DocumentBuilder db=null;
 		try {
-			db = dbf.newDocumentBuilder();
-			// Read the entire document into memory
-			Document document = db.parse(urlString);
-			if (trace)
-				System.out.println("Bunny Response:" + toText(document));
-			return document;
+			HttpURLConnection httpURLConnection = (HttpURLConnection) url.openConnection();
+			httpURLConnection.connect();
+			InputStream in = httpURLConnection.getInputStream();
+			int length = httpURLConnection.getContentLength();
+			int responseCode=httpURLConnection.getResponseCode();
+			if((responseCode/100)!=2) {
+				if(trace) out.println("Response: code="+responseCode+ " message: "+httpURLConnection.getResponseMessage());
+				return null;
+			}
+			
+			if (responseCode==HttpURLConnection.HTTP_NO_CONTENT) {
+				if(trace) out.println("Response: no content");
+				return null;
+			} else {
+				DocumentBuilderFactory dbf = DocumentBuilderFactory.newInstance();
+				DocumentBuilder db=null;
+				db = dbf.newDocumentBuilder();			
+				Document document = db.parse(in);
+				if (trace)
+					out.println("Response:" + toText(document));
+				return document;
+			}
 		} catch (ParserConfigurationException e) {
-			e.printStackTrace(System.err);
+			out.println(e);
 		} catch (SAXException e) {
-			System.err.println(e);
+			out.println(e);
 		} catch (IOException e) {
-			System.err.println(e);
+			out.println(e);
 		} catch (TransformerException e) {
-			System.err.println(e);
+			out.println(e);
 		}
 		return null;
 	}
@@ -167,9 +191,23 @@
 		DOMSource domSource = new DOMSource(document);
         StringWriter writer = new StringWriter();
         StreamResult result = new StreamResult(writer);
-        TransformerFactory tf = TransformerFactory.newInstance();
-        Transformer transformer = tf.newTransformer();
+        TransformerFactory transformerFactory = TransformerFactory.newInstance();
+        Transformer transformer = transformerFactory.newTransformer();
         transformer.transform(domSource, result);
         return writer.toString();
+	}
+
+	/**
+	 * @return the out
+	 */
+	public static synchronized final PrintStream getOut() {
+		return out;
+	}
+
+	/**
+	 * @param out the out to set
+	 */
+	public static synchronized final void setOut(PrintStream out) {
+		RESTFulClient.out = out;
 	}
 }

Modified: felix/sandbox/donsez/bunny/src/site/script.txt
URL: http://svn.apache.org/viewvc/felix/sandbox/donsez/bunny/src/site/script.txt?rev=587926&r1=587925&r2=587926&view=diff
==============================================================================
--- felix/sandbox/donsez/bunny/src/site/script.txt (original)
+++ felix/sandbox/donsez/bunny/src/site/script.txt Wed Oct 24 09:43:47 2007
@@ -29,6 +29,14 @@
 
 bunny issleeping 
 
+
+# with EventAdmin (event.topics is org/apache/felix/sandbox/bunny)
+obr install "Event Admin"
+start eventadmincmd/eventadmincmd.jar
+eventadmin subscribe org/apache/felix/sandbox/bunny
+eventadmin send org/apache/felix/sandbox/bunny voice=aaron22s&tts=hello+world+the+sun+shines+today+but+the+weather+may+be+cloudy+this+afternoon
+
+
 # send actions with the raw sub-command
 bunny raw action=2
 bunny raw action=3



Mime
View raw message