package com.yworks.yfiles.server.graphml.experimental;

import com.yworks.yfiles.server.graphml.demo.servlets.LoadGraphMLServlet;
import com.yworks.yfiles.server.graphml.support.Graph2DRoundtripSupport;
import com.yworks.yfiles.server.graphml.support.ServletRoundtripSupport;
import y.io.graphml.graph2d.Graph2DGraphMLHandler;
import y.layout.LayoutGraph;
import y.util.Maps;
import y.view.GenericNodeRealizer;
import y.view.ShapeNodeRealizer;

/**
 * This Servlet uses {@link com.yworks.yfiles.server.graphml.experimental.SWFNodeSerializer}s to send
 * node layouts to the client.
 */
public class LoadSwfGraphServlet extends LoadGraphMLServlet {

  protected ServletRoundtripSupport createRoundtripSupport() {
    Graph2DRoundtripSupport support = new Graph2DRoundtripSupport() {

      public LayoutGraph createRoundtripGraph() {
        LayoutGraph graph = super.createRoundtripGraph();
        graph.addDataProvider(SWFNodeSerializer.NODE_2_SWF_CACHE_DPKEY, Maps.createHashedDataMap());
        return graph;
      }

      protected void configureHandler(Graph2DGraphMLHandler handler) {
        super.configureHandler(handler);
        SWFNodeSerializer shapeSwfNodeSerializer = new SWFNodeSerializer( ShapeNodeRealizer.class );
        SWFNodeSerializer gnrSwfNodeSerializer = new SWFNodeSerializer( GenericNodeRealizer.class );
        handler.addNodeRealizerSerializer(shapeSwfNodeSerializer);
        handler.addNodeRealizerSerializer(gnrSwfNodeSerializer);
      }
    };
    
    return support;
  }
}
