import static java.lang.System.*; import java.util.*; /********************************************************************** * This class show how to implement bidirectional many-to-one * associations between classes C and D. */ public class Association { /****************************************************************** * Class C is the many side (maps to one d). */ public static class C { private D d; public D getD () { return d; } // getD public void setD (D d2) { out.println ("setD ( " + d2 + " )"); if (d != d2) { D d0 = d; d = d2; if (d0 != null) d0.removeC (this); if (d2 != null) d2.addC (this); } // if } // setD } // C class /****************************************************************** * Class D is the one side (maps to many c's). */ public static class D { private Set cs = new HashSet (); public void printSet () { for (C c : cs) { out.println ("c <- d = " + c + " , " + this); } // for } // printSet public void addC (C c) { out.println ("addD ( " + c + " )"); cs.add (c); c.setD (this); } // addC public void removeC (C c) { out.println ("removeC ( " + c + " )"); cs.remove (c); c.setD (null); } // removeC } // D class /****************************************************************** * Main method to test the association. */ public static void main (String [] args) { C c_1 = new C (); D d_1 = new D (); out.println ("------------------------"); out.println (" c_1 = " + c_1); out.println (" d_1 = " + d_1); out.println ("------------------------"); c_1.setD (d_1); out.println ( "c -> d = " + c_1 + " , " + c_1.getD ()); out.println ("------------------------"); d_1.printSet (); out.println ("------------------------"); D d_2 = new D (); out.println ("------------------------"); out.println (" d_2 = " + d_2); out.println ("------------------------"); c_1.setD (d_2); out.println ( "c -> d = " + c_1 + " , " + c_1.getD ()); out.println ("------------------------"); d_2.printSet (); out.println ("------------------------"); C c_2 = new C (); out.println ("------------------------"); out.println (" c_2 = " + c_2); out.println ("------------------------"); c_2.setD (d_2); out.println ( "c -> d = " + c_2 + " , " + c_2.getD ()); out.println ("------------------------"); d_2.printSet (); out.println ("------------------------"); } // main } // Association