View Javadoc

1   package net.sf.mmapps.applications.developer.modules.appview;
2   
3   import java.awt.*;
4   import java.awt.geom.Rectangle2D;
5   
6   import net.sf.mmapps.modules.config.*;
7   
8   import com.touchgraph.graphlayout.*;
9   
10  /***
11    *  @author   Kees Jongenburger
12    *  @version  1.21  $Id: MMBaseNode.java,v 1.1.1.1 2004/02/06 08:44:07 keesj Exp $
13    */
14  public class MMBaseNode extends Node {
15      NodeManagerConfiguration config;
16      FontMetrics fontMetrics = null;
17      Dimension dim;
18      boolean drawFields = false;
19  
20      Font font;
21      FontMetrics fm;
22  
23      public MMBaseNode(NodeManagerConfiguration nodeManagerConfiguration) {
24          super(
25              nodeManagerConfiguration.getName(),
26              Node.TYPE_ELLIPSE,
27              javax.swing.plaf.metal.MetalLookAndFeel.getControl(),
28              nodeManagerConfiguration.getName());
29          this.config = nodeManagerConfiguration;
30          font = new Font("Courrier", Font.BOLD, 10);
31      }
32  
33      public void paint(Graphics g, TGPanel tgPanel) {
34          if (drawFields) {
35              draw((int) drawx, (int) drawy - getHeight() / 2, g);
36          } else {
37              super.paint(g, tgPanel);
38          }
39      }
40  
41      public int getWidth() {
42          if (dim != null && drawFields)
43              return dim.width;
44          return super.getWidth();
45      }
46      public int getHeight() {
47          if (dim != null && drawFields)
48              return dim.height;
49          return super.getHeight();
50      }
51  
52      public void showFields(boolean show) {
53          drawFields = show;
54      }
55  
56      public void draw(int x, int y, Graphics g) {
57          Font font = g.getFont();
58          g.setFont(font);
59          int myWidth = 100;
60  
61          String data = config.getName() + " extends " + config.getExtends();
62          if (config.getExtends().equals("object")) {
63              data = config.getName();
64          }
65  
66          if (fm == null) {
67              fm = g.getFontMetrics();
68          }
69          Rectangle2D rect = fm.getStringBounds(data, g);
70          int textWidth = (int) rect.getWidth();
71          if (textWidth > myWidth) {
72              x -= (textWidth - myWidth) / 2;
73              myWidth = textWidth;
74          }
75  
76          int textHeight = fm.getHeight();
77  
78          g.setColor(Color.white);
79          g.fillRect(x, y, myWidth, 2 + (textHeight + 2) * (1 + config.getFieldConfigurations().size()));
80          g.setColor(Color.black);
81          g.drawRect(x, y, myWidth, 2 + (textHeight + 2) * (1 + config.getFieldConfigurations().size()));
82  
83          y += textHeight + 2;
84          if (config.getName().equals("object")) {
85              g.drawString(config.getName(), x, y);
86          } else {
87              g.drawString(data, x, y);
88          }
89          g.drawLine(x, y + 1, x + myWidth, y + 1);
90          FieldConfigurations fieldConfigurations = config.getFieldConfigurations();
91          for (int i = 0; i < fieldConfigurations.size(); i++) {
92              FieldConfiguration fieldConfiguration = fieldConfigurations.getFieldConfiguration(i);
93              Rectangle2D r = fm.getStringBounds(fieldConfiguration.getName(), g);
94              int w = (int) rect.getWidth();
95              if (w > myWidth) {
96                  myWidth = w;
97              }
98              y += textHeight + 2;
99              String fieldType = fieldConfiguration.getType();
100             if (fieldType.equals("STRING")) {
101                 g.setColor(Color.black);
102             } else if (fieldType.equals("INTEGER")) {
103                 g.setColor(Color.blue);
104             } else if (fieldType.equals("XML")) {
105                 g.setColor(Color.cyan);
106             } else if (fieldType.equals("BYTE")) {
107                 g.setColor(Color.orange);
108             } else if (fieldType.equals("NODE")) {
109                 g.setColor(Color.magenta);
110             } else {
111                 g.setColor(Color.green);
112             }
113             g.drawString(fieldConfiguration.getName(), x, y);
114 
115         }
116 
117         g.setFont(font);
118         dim = new Dimension(myWidth, 2 + (textHeight + 2) * (1 + config.getFieldConfigurations().size()));
119     }
120 }