1   /****************************************************************************
2    **
3    ** This file is part of yFiles-2.6. 
4    ** 
5    ** yWorks proprietary/confidential. Use is subject to license terms.
6    **
7    ** Redistribution of this file or of an unauthorized byte-code version
8    ** of this file is strictly forbidden.
9    **
10   ** Copyright (c) 2000-2008 by yWorks GmbH, Vor dem Kreuzberg 28, 
11   ** 72070 Tuebingen, Germany. All rights reserved.
12   **
13   ***************************************************************************/
14  package demo.view.ports;
15  
16  import java.io.IOException;
17  
18  import y.base.YCursor;
19  import y.io.gml.DefaultEncoderFactory;
20  import y.io.gml.GMLEncoder;
21  import y.io.gml.NodeObjectEncoder;
22  import y.io.gml.NodeRealizerObjectEncoder;
23  import y.io.gml.ObjectEncoder;
24  import y.view.Port;
25  
26  
27  /**
28   * This class implements the y.io.gml.EncoderFactory interface by creating
29   * a GML Encoder, that is capable of encoding Graphs with FixedPortsNodeRealizer
30   * nodes.
31   */
32  public class EncoderFactory extends DefaultEncoderFactory
33  {
34    public ObjectEncoder createNodeEncoder(ObjectEncoder graphEncoder)
35    {
36      ObjectEncoder nre =
37        new FixedPortsNodeRealizerEncoder(new NodeRealizerObjectEncoder());
38      ObjectEncoder nodeEncoder = new NodeObjectEncoder(nre, null);
39      return nodeEncoder;
40    }
41    
42    private static final class FixedPortsNodeRealizerEncoder implements ObjectEncoder{
43      
44      private ObjectEncoder delegate;
45      
46      FixedPortsNodeRealizerEncoder(ObjectEncoder delegate){
47        this.delegate = delegate;
48      }
49      
50      public void encode(Object item, GMLEncoder encoder) throws IOException
51      {
52        if (delegate != null){
53          delegate.encode(item, encoder);
54        }
55        if (item instanceof FixedPortsNodeRealizer){
56          FixedPortsNodeRealizer fpnr = (FixedPortsNodeRealizer) item;
57          encoder.addAttribute("paintingPorts", fpnr.isPaintingPorts());
58          encoder.beginSection("PortCandidates");
59          for (YCursor c = fpnr.getPortCandidates().cursor(); c.ok(); c.next()){
60            Port p = (Port) c.current();
61            encoder.beginSection("point");
62            encoder.addAttribute("x",(float)p.getOffsetX());
63            encoder.addAttribute("y",(float)p.getOffsetY());
64            encoder.endSection(); //point
65          }
66          encoder.endSection();
67        }
68      }
69      
70    }
71  }
72  
73