package org.apache.interop.smgr;
import javax.swing.SwingUtilities;
import javax.swing.WindowConstants;
import org.apache.interop.smgr.SubsciberInfoJPanel;
import org.apache.interop.smgr.BackberryJPanel;
import org.apache.ws.addressing.EndpointReference;
import org.apache.ws.addressing.XmlBeansEndpointReference;
import org.apache.ws.addressing.v2004_08_10.AddressingConstants;
import org.apache.ws.muws.interop.client.FaultException;
import org.apache.ws.muws.interop.client.ResourceStub;
import org.apache.ws.muws.interop.client.ServiceStub;
import org.apache.ws.util.XmlBeanUtils;
import org.apache.ws.util.soap.Envelope;
import org.apache.xmlbeans.XmlException;
import org.apache.xmlbeans.XmlObject;
import org.apache.xmlbeans.impl.values.XmlAnyTypeImpl;
import org.oasisOpen.docs.wsdm.x2004.x12.muws.wsdmMuwsPart1.ManagementEventType;
import org.oasisOpen.docs.wsdm.x2004.x12.muws.wsdmMuwsPart1.impl.ManagementEventTypeImpl;
import org.oasisOpen.docs.wsn.x2004.x06.wsnWSBaseNotification12Draft01.NotificationMessageHolderType;
import org.oasisOpen.docs.wsn.x2004.x06.wsnWSBaseNotification12Draft01.NotifyDocument;
import org.oasisOpen.docs.wsrf.x2004.x06.wsrfWSResourceProperties12Draft01.ResourcePropertyValueChangeNotificationType.NewValue;
import org.oasisOpen.docs.wsrf.x2004.x06.wsrfWSResourceProperties12Draft01.impl.ResourcePropertyValueChangeNotificationTypeImpl;
import org.xmlsoap.schemas.soap.envelope.Body;
import org.xmlsoap.schemas.soap.envelope.EnvelopeDocument;
import java.awt.Color;
import java.awt.FlowLayout;
import java.awt.BorderLayout;
import java.io.IOException;
import java.util.regex.Matcher;
import java.util.regex.Pattern;
import javax.swing.JSplitPane;
import javax.xml.namespace.QName;
/**
* This code was generated using CloudGarden's Jigloo
* SWT/Swing GUI Builder, which is free for non-commercial
* use. If Jigloo is being used commercially (ie, by a corporation,
* company or business for any purpose whatever) then you
* should purchase a license for each developer using Jigloo.
* Please visit www.cloudgarden.com for details.
* Use of Jigloo implies acceptance of these licensing terms.
* *************************************
* A COMMERCIAL LICENSE HAS NOT BEEN PURCHASED
* for this machine, so Jigloo or this code cannot be used legally
* for any corporate or commercial purpose.
* *************************************
*/
public class BlackBerryApp extends javax.swing.JFrame implements ConnectionListener,MessageListener {
private SubsciberInfoJPanel subsciberInfoJPanel;
private JSplitPane jSplitPaneParts;
private BackberryJPanel backberryJPanel;
private NotificationListener m_listener;
private ResourceStub m_resource;
private StringBuffer m_buffer=new StringBuffer();
private MessageWorker m_messageWorker;
/**
* Auto-generated main method to display this JFrame
*/
public static void main(String[] args) {
BlackBerryApp inst = new BlackBerryApp();
inst.setVisible(true);
}
public BlackBerryApp() {
super();
initGUI();
subsciberInfoJPanel.setConnectionListener(this);
}
private void initGUI() {
try {
this.setSize(400, 350);
setDefaultCloseOperation(WindowConstants.DISPOSE_ON_CLOSE);
this.setTitle("SMgr");
{
jSplitPaneParts = new JSplitPane();
this.getContentPane().add(jSplitPaneParts, BorderLayout.CENTER);
jSplitPaneParts.setOrientation(JSplitPane.VERTICAL_SPLIT);
jSplitPaneParts.setDividerLocation(110);
jSplitPaneParts.setPreferredSize(new java.awt.Dimension(392, 319));
{
subsciberInfoJPanel = new SubsciberInfoJPanel();
jSplitPaneParts.add(subsciberInfoJPanel, JSplitPane.LEFT);
FlowLayout subsciberInfoJPanelLayout = new FlowLayout();
subsciberInfoJPanel.setResourceUrl("http://192.168.2.171:4400/ettk/wsdm/services/ADMSubscribePort");
subsciberInfoJPanel.setNotificationLister("http://192.168.2.120:8003/bogasendpoint");
subsciberInfoJPanelLayout.setAlignment(FlowLayout.LEFT);
subsciberInfoJPanel.setLayout(subsciberInfoJPanelLayout);
}
{
backberryJPanel = new BackberryJPanel();
jSplitPaneParts.add(backberryJPanel, JSplitPane.RIGHT);
}
}
} catch (Exception e) {
e.printStackTrace();
}
}
/* (non-Javadoc)
* @see org.apache.interop.smgr.ConnectionListener#onConnect()
*/
public void onConnect() {
try {
startListener();
// Subscribe
m_resource = new ResourceStub( getEpr(subsciberInfoJPanel.getResourceUrl(),null) );
EndpointReference response = m_resource.subscribe(subsciberInfoJPanel.getNotificationLister(),new QName(subsciberInfoJPanel.getTopicNamespace(),subsciberInfoJPanel.getTopicName()));
} catch (XmlException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (FaultException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
backberryJPanel.startTimer();
}
/* (non-Javadoc)
* @see org.apache.interop.smgr.ConnectionListener#onDisconnect()
*/
public void onDisconnect() {
backberryJPanel.stopTimer();
backberryJPanel.setColor(Color.WHITE,0f);
m_resource = null;
m_messageWorker.stop();
m_listener.stop();
}
private EndpointReference getEpr(String URL, String Rid) throws XmlException{
XmlBeansEndpointReference x=new XmlBeansEndpointReference(URL,AddressingConstants.NSURI_ADDRESSING_SCHEMA);
if(Rid!=null)
x.setReferenceProperties(new XmlObject[]{(XmlObject)XmlObject.Factory.parse("<svr:ResourceIdentifier xmlns:svr=\"http://wsdmdemo.org/service/weather-client-config\">"+Rid+"</svr:ResourceIdentifier>")});
return x;
}
public void startListener() throws IOException{
m_messageWorker=new MessageWorker(this,m_buffer);
m_listener=new NotificationListener(8002,600000,m_buffer);
m_listener.setCloseSocketAfterNotification(false);
m_messageWorker.start();
m_listener.start();
}
/* (non-Javadoc)
* @see org.apache.interop.smgr.MessageListener#onMessage(java.lang.String)
*/
public void onMessage(String messageText) {
// TODO Auto-generated method stub
System.err.println(messageText);
final String colorName=getColorFromMessage(messageText);
System.err.println("CHanging to "+colorName);
SwingUtilities.invokeLater(new Runnable(){
public void run() {
backberryJPanel.setColor(colorName2Color(colorName),0.5f);
}});
}
/**
* @param messageText
* @return
*/
private String getColorFromMessage1(String messageText) {
try {
EnvelopeDocument ed=(org.xmlsoap.schemas.soap.envelope.EnvelopeDocument)XmlObject.Factory.parse(messageText);
org.xmlsoap.schemas.soap.envelope.Envelope env = ed.getEnvelope();
Body body = env.getBody();
XmlObject[] arryStuff = XmlBeanUtils.getChildElements(body);
if(arryStuff.length==0)
return "Black";
NotifyDocument.Notify ele = (NotifyDocument.Notify) arryStuff[0];
NotificationMessageHolderType noteMess = ele.getNotificationMessageArray(0);
XmlAnyTypeImpl mess = (XmlAnyTypeImpl)noteMess.getMessage();
ManagementEventTypeImpl manEvt = (ManagementEventTypeImpl)XmlBeanUtils.getChildElements(mess)[0];
//manEvt.get
ResourcePropertyValueChangeNotificationTypeImpl propChngEvt = (ResourcePropertyValueChangeNotificationTypeImpl)XmlBeanUtils.getChildElements(manEvt)[0];
NewValue newValue = propChngEvt.getNewValue();
// XmlObject complience = (XmlObject)XmlBeanUtils.getChildElements(newValue)[0];
} catch (Exception e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
return "Black";
}
/**
* @param messageText
* @return
*/
public String getColorFromMessage(String messageText) {
//<bbry:Compliance xmlns=\"http://pda.rim\">Red<
int posStartColor=0;
int posCompliance = messageText.toLowerCase().indexOf("bbry:compliance");
if(posCompliance<0)
return "Black";
int posCompliance1 = messageText.toLowerCase().indexOf("bbry:compliance",posCompliance+1);
if(posCompliance1<0)
return "Black";
int posCompliance2 = messageText.toLowerCase().indexOf("bbry:compliance",posCompliance1+1);
if(posCompliance2<0){
posStartColor=posCompliance;
//return "Black";
} else {
posStartColor=posCompliance2;
}
while(messageText.charAt(posStartColor)!='>' && posStartColor<messageText.length()){
System.out.println(messageText.charAt(posStartColor));
posStartColor++;
}
if(posStartColor==messageText.length())
return "Black";
int posEndColor=posStartColor+1;
while(messageText.charAt(posEndColor)!='<' && posEndColor<messageText.length()){
System.out.println(messageText.charAt(posEndColor));
posEndColor++;
}
if(posEndColor==messageText.length())
return "Black";
String color=messageText.substring(posStartColor+1,posEndColor);
return color;
}
private Color colorName2Color(String colorName){
if(colorName.toLowerCase().equals("yellow")){
return Color.YELLOW;
}
if(colorName.toLowerCase().equals("green")){
return Color.GREEN;
}
if(colorName.toLowerCase().equals("red")){
return Color.RED;
}
if(colorName.toLowerCase().equals("blue")){
return Color.BLUE;
}
return Color.BLACK;
}
}