Temperature SPOT - Part 6
Posted by mriem on August 29, 2007 at 8:00 PM PDT
The JSF component needs to be able to render, so you have to either deliver the renderer inline with the component or write a separate renderer. The code below describes the separate renderer.
package com.manorrock.jsf.sunspot.temperature;
import java.io.DataInputStream;
import java.io.IOException;
import java.io.PrintStream;
import java.net.InetAddress;
import java.net.InetSocketAddress;
import java.net.Socket;
import java.net.SocketAddress;
import java.net.SocketTimeoutException;
import java.net.UnknownHostException;
import java.text.MessageFormat;
import java.util.ResourceBundle;
import javax.faces.component.UIComponent;
import javax.faces.context.FacesContext;
import javax.faces.context.ResponseWriter;
import javax.faces.render.Renderer;
/**
* The JSF SunSPOT temperature renderer.
*
* @author Manfred Riem (mriem@manorrock.com)
*/
public class TemperatureRenderer extends Renderer {
/**
* Stores the bundle we use to get for rendering.
*/
private ResourceBundle bundle = ResourceBundle.getBundle("com.manorrock.jsf.sunspot.temperature.Bundle");
/**
* Encode end.
*/
public void encodeEnd(FacesContext context, UIComponent component) throws IOException {
ResponseWriter writer = context.getResponseWriter();
String value = null;
TemperatureComponent temperatureComponent = (TemperatureComponent) component;
String sunspotId = "";
if (temperatureComponent.getAttributes().get("sunspotId") != null) {
sunspotId = (String) temperatureComponent.getAttributes().get("sunspotId");
}
else if (temperatureComponent.getValueBinding("sunspotId") != null) {
sunspotId = (String) temperatureComponent.getValueBinding("sunspotId").getValue(context);
}
else {
value = "Set sunspotId please";
}
if (value == null) {
synchronized(context) {
try {
InetAddress address = InetAddress.getByName("localhost");
int port = 8888;
SocketAddress sockaddress = new InetSocketAddress(address, port);
Socket socket = new Socket();
int timeout = 2000;
socket.connect(sockaddress, timeout);
PrintStream printer = new PrintStream(socket.getOutputStream());
printer.println(sunspotId);
printer.flush();
DataInputStream dataIn = new DataInputStream(socket.getInputStream());
value = dataIn.readLine();
} catch (UnknownHostException e) {
e.printStackTrace();
value = e.getMessage();
} catch (SocketTimeoutException e) {
e.printStackTrace();
value = e.getMessage();
} catch (IOException e) {
e.printStackTrace();
value = e.getMessage();
}
}
}
String html = MessageFormat.format(
bundle.getString("temperature.text.renderer"),
new Object[] { component.getClientId(context), value });
writer.write(html);
}
}
The last entry will be about some remaining bits and pieces.
Related Topics >>
Blog Links >>
- Login or register to post comments
- Printer-friendly version
- mriem's blog
- 509 reads





