001 package stringtransformers; 002 003 import cs101.io.connection.*; 004 import cs101.io.Console; 005 import java.awt.*; 006 import java.awt.event.*; 007 008 public final class TVConnectManager { 009 010 public static MouseListener getListener( final StringTransformer who ) 011 { 012 // Console.println ("TVCM: Creating listener for "+ who); 013 return new MouseAdapter () { 014 public void mouseClicked( MouseEvent me ) 015 { 016 // Console.println( "TVCM ST MA: mouse clicked " + who ); 017 018 TVConnectManager.selectTarget ( who ); 019 } 020 }; 021 } 022 023 public static MouseListener getListener( final OutputAcceptor who ) 024 { 025 // Console.println ("TVCM: Creating listener for an OutputAcceptor " + who); 026 return new MouseAdapter () { 027 public void mouseClicked( MouseEvent me ) 028 { 029 // Console.println( "TVCM OA MA: mouse clicked " + who ); 030 031 TVConnectManager.selectFromTarget ( who ); 032 } 033 }; 034 } 035 036 public static MouseListener getListener( final InputAcceptor who ) 037 { 038 // Console.println ("TVCM: Creating listener for an InputAcceptor " + who); 039 return new MouseAdapter () { 040 public void mouseClicked( MouseEvent me ) 041 { 042 // Console.println( "TVCM IA MA: mouse clicked " + who ); 043 044 TVConnectManager.selectToTarget ( who ); 045 } 046 }; 047 } 048 049 private static OutputAcceptor fromTarget; 050 private static long fromTargetSelectTime; 051 052 private static void selectFromTarget( OutputAcceptor which ) 053 { 054 TVConnectManager.fromTarget = which; 055 TVConnectManager.fromTargetSelectTime = 056 System.currentTimeMillis(); 057 058 Console.println ("TVCM: selected a From target: " + which); 059 } 060 061 private static void selectTarget( StringTransformer which ) 062 { 063 if ( ( TVConnectManager.fromTarget == null ) 064 || ( TVConnectManager.fromTarget == which ) 065 || ( TVConnectManager.fromTargetIsStale() ) ) 066 { 067 TVConnectManager.selectFromTarget( which ); 068 } 069 else 070 { 071 TVConnectManager.selectToTarget( which ); 072 } 073 } 074 075 private static void selectToTarget( InputAcceptor which ) 076 { 077 Console.println( "TVCM: selecting To target: " + which ); 078 079 if ( TVConnectManager.fromTarget == null ) 080 { 081 Console.println( "TVCM: From target is null; punting To selection"); 082 } 083 if ( TVConnectManager.fromTarget == which ) 084 { 085 Console.println( "TVCM: From (" + TVConnectManager.fromTarget + 086 ") and To (" + which + 087 ") targets are same; punting To selection"); 088 } 089 if ( TVConnectManager.fromTargetIsStale() ) 090 { 091 Console.println( "TVCM: From target (" + TVConnectManager.fromTarget 092 + ") is stale (" 093 + ( System.currentTimeMillis() - 094 TVConnectManager.fromTargetSelectTime ) 095 + "); punting To selection"); 096 } 097 098 try 099 { 100 if ( isConnectable( TVConnectManager.fromTarget, which ) 101 && ( ! TVConnectManager.fromTargetIsStale() )) 102 { 103 Console.println ("TVCM: selected a To target (" + 104 which + ")....attempting connect from " + 105 TVConnectManager.fromTarget); 106 107 new StringConnector( TVConnectManager.fromTarget, 108 which ); 109 Console.println ("TVCM: connected "+ TVConnectManager.fromTarget + " to " + which); 110 } 111 else 112 { 113 System.err.println ( "TV: Ignoring mouse release in " + which ); 114 } 115 } 116 catch (ConnectionRejectedException e) 117 { 118 Console.println ("TVCM: rejected connection from "+ TVConnectManager.fromTarget + " to " + which); 119 } 120 TVConnectManager.fromTarget = null; 121 Console.println(""); 122 } 123 124 private static final boolean isConnectable( Object from, Object to ) 125 { 126 return ( ( from != null ) 127 && ( to != null ) 128 && ( from instanceof OutputAcceptor ) 129 && ( to instanceof InputAcceptor ) 130 && ( from != to ) ); 131 } 132 133 private static boolean fromTargetIsStale() 134 { 135 return ( ( System.currentTimeMillis() 136 - TVConnectManager.fromTargetSelectTime ) 137 >= 10000 ); 138 } 139 140 private TVConnectManager(){} 141 } 142