package demo.blaze;

import java.io.IOException;
import java.util.Date;
import java.util.Timer;
import java.util.TimerTask;

import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

import y.base.Node;
import y.layout.BufferedLayouter;
import y.layout.LayoutGraph;
import y.layout.organic.SmartOrganicLayouter;
import y.layout.random.RandomLayouter;

import com.yworks.yfiles.server.graphml.flexio.binary.ExternalizableGraph;
import com.yworks.yfiles.server.graphml.flexio.data.StyledLayoutGraph;
import com.yworks.yfiles.server.graphml.support.GraphRoundtripSupport;

import flex.messaging.MessageBroker;
import flex.messaging.messages.AsyncMessage;

public class MessagingServlet extends HttpServlet {

	@Override
	protected void doGet(HttpServletRequest req, HttpServletResponse resp)
			throws ServletException, IOException {
		doPost(req, resp);
	}

	
	
	@Override
	protected void doPost(final HttpServletRequest req, HttpServletResponse resp)
			throws ServletException, IOException {
		
		final LayoutGraph g = new GraphRoundtripSupport().createRoundtripGraph();
		Node n = g.createNode();
		for( int i=0; i<10; i++ ) {
			Node nx = g.createNode();
			g.createEdge(n, nx);
		}
		
		Timer timer = new Timer();
		timer.schedule( new TimerTask() {
			public void run() {
				SmartOrganicLayouter layouter = new SmartOrganicLayouter();
				layouter.setMinimalNodeDistance(200);
				new BufferedLayouter(layouter).doLayout(g);
				ExternalizableGraph extGraph = new ExternalizableGraph();
				extGraph.setGraph(g);
				
				sendMessageToClients(extGraph);
			}
		}, 0, 3000);
	}
	

	public void sendMessageToClients(ExternalizableGraph extGraph) {
		AsyncMessage msg = new AsyncMessage();
		msg.setClientId("Java-Based-Producer-For-Messaging");
		msg.setTimestamp(new Date().getTime());
		msg.setMessageId("Java-Based-Producer-For-Messaging-ID");
		msg.setDestination("layoutDestination");
		msg.setBody(extGraph);
		msg.setHeader("sender", "From the server");
		MessageBroker.getMessageBroker(null).routeMessageToService(msg, null);
	}
	
	
}
