1 package com.bonevich.erj.diagram;
2
3 import com.bonevich.erj.model.Relation;
4 import com.bonevich.erj.model.ForeignKey;
5 import com.bonevich.erj.ui.ErjFrame;
6 import com.bonevich.erj.app.Project;
7
8 import org.tigris.gef.base.LayerPerspective;
9 import org.tigris.gef.graph.GraphEvent;
10 import org.tigris.gef.graph.GraphModel;
11 import org.tigris.gef.presentation.Fig;
12
13 /***
14 * Overrides <code>LayerPerspective</code> since the latter
15 * has a bad implementation - relies too much on the Net example
16 * used in GEF - and <code>LayerPerspectiveMutable</code> does
17 * not do what I want it to do in terms of adding and removing
18 * model elements (nodes).
19 */
20 public class ERDiagramLayerPerspective extends LayerPerspective
21 {
22 //////////////////////////////////////////////////////////
23 // Attributes
24 private ERDiagramGraphModel _erdgm;
25
26 public ERDiagramLayerPerspective(String name, ERDiagramGraphModel mgm)
27 {
28 super(name, mgm);
29 _erdgm = mgm;
30 }
31
32 public GraphModel getGraphModel()
33 {
34 return getERDiagramGraphModel();
35 }
36
37 public void setGraphModel(GraphModel gm)
38 {
39 setERDiagramGraphModel((ERDiagramGraphModel)gm);
40 }
41
42 public ERDiagramGraphModel getERDiagramGraphModel()
43 {
44 return _erdgm;
45 }
46 public void setERDiagramGraphModel(ERDiagramGraphModel mgm)
47 {
48 super.setGraphModel(mgm);
49 _erdgm = mgm;
50 }
51
52 public void nodeAdded(GraphEvent ge)
53 {
54 super.nodeAdded(ge);
55 }
56
57 public void nodeRemoved(GraphEvent ge)
58 {
59 Object node = ge.getArg();
60 if (node instanceof Relation)
61 {
62 Fig f = presentationFor(node);
63 remove(f);
64 f.dispose();
65 }
66 }
67
68 public void edgeAdded(GraphEvent ge)
69 {
70 super.edgeAdded(ge);
71 }
72
73 public void edgeRemoved(GraphEvent ge)
74 {
75 Object edge = ge.getArg();
76 if (edge instanceof ForeignKey)
77 {
78 Fig f = presentationFor(edge);
79 remove(f);
80 f.dispose();
81 }
82 }
83
84 public void graphChanged(GraphEvent ge)
85 {
86 //System.err.println("(layer) graphChanged called!");
87 ErjFrame.getInstance().getApplication().getCurrentProject().markAsModified();
88 }
89
90 public void add(Fig f)
91 {
92 // we use the current Project tracked by the Project class
93 // cuz we are more than likely in the midst of loading a
94 // new project which has not been passed off to ErjFrame yet.
95 f.addPropertyChangeListener(ErjFrame.getInstance().getApplication().getCurrentProject());
96 super.add(f);
97 }
98
99 } /* end class ERDiagramLayerPerspective */
This page was automatically generated by Maven