88import java .awt .event .WindowAdapter ;
99import java .awt .event .WindowEvent ;
1010import java .io .IOException ;
11- import java .util .ArrayList ;
12- import java .util .List ;
13- import java .util .UUID ;
11+ import java .util .*;
1412import java .util .concurrent .CountDownLatch ;
1513
1614import javax .swing .BorderFactory ;
@@ -50,14 +48,24 @@ public class LayoutServiceDemo implements DesktopStateListener {
5048 private Application application ;
5149
5250 private JSONArray serviceConfig = new JSONArray ();
53- private List <ExternalWindowObserver > observers = new ArrayList <>();
51+ private Map <String , LayoutFrame > childFrames = new HashMap ();
52+ private WindowAdapter childFrameCleanListener ;
5453
5554 LayoutServiceDemo () {
5655 try {
5756 this .createMainWindow ();
5857 this .launchOpenfin ();
58+
59+ this .childFrameCleanListener = new WindowAdapter () {
60+ @ Override
61+ public void windowClosed (WindowEvent e ) {
62+ super .windowClosed (e );
63+ LayoutFrame frame = (LayoutFrame ) e .getWindow ();
64+ childFrames .remove (frame .getWindowName ());
65+ }
66+ };
5967 }
60- catch (DesktopException | DesktopIOException | IOException | InterruptedException e ) {
68+ catch (Exception e ) {
6169 e .printStackTrace ();
6270 }
6371 }
@@ -70,12 +78,8 @@ void createMainWindow() {
7078 @ Override
7179 public void windowClosing (WindowEvent we ) {
7280 try {
73- observers .forEach ((o ) -> {
74- try {
75- o .dispose ();
76- } catch (DesktopException e ) {
77- e .printStackTrace ();
78- }
81+ childFrames .values ().forEach (frame -> {
82+ frame .cleanup ();
7983 });
8084 application .close ();
8185 Thread .sleep (2000 );
@@ -99,7 +103,7 @@ public void actionPerformed(ActionEvent e) {
99103 @ Override
100104 public void actionPerformed (ActionEvent e ) {
101105 try {
102- createJavaWindow (UUID . randomUUID (). toString () );
106+ createJavaWindow ();
103107 }
104108 catch (DesktopException e1 ) {
105109 e1 .printStackTrace ();
@@ -180,46 +184,11 @@ public void onError(Ack ack) {
180184 });
181185 }
182186
183- void createJavaWindow (String windowName ) throws DesktopException {
184- final JButton btnUndock = new JButton ("undock" );
185-
186- JFrame f = new JFrame ();
187- f .setDefaultCloseOperation (JFrame .DISPOSE_ON_CLOSE );
188- f .setPreferredSize (new Dimension (640 , 480 ));
189- JPanel pnl = new JPanel (new FlowLayout (FlowLayout .CENTER ));
190- pnl .add (btnUndock );
191- f .getContentPane ().add (pnl );
192- f .pack ();
193- f .setLocationRelativeTo (null );
194- f .setVisible (true );
195-
196- ExternalWindowObserver observer = new ExternalWindowObserver (this .desktopConnection .getPort (), appUuid , windowName , f , new AckListener () {
197- @ Override
198- public void onSuccess (Ack ack ) {
199- ExternalWindowObserver observer = (ExternalWindowObserver ) ack .getSource ();
200- observer .getDesktopConnection ().getChannel ().connect ("of-layouts-service-v1" ,
201- new AsyncCallback <ChannelClient >() {
202- @ Override
203- public void onSuccess (ChannelClient client ) {
204- btnUndock .addActionListener (new ActionListener () {
205- @ Override
206- public void actionPerformed (ActionEvent e ) {
207- JSONObject payload = new JSONObject ();
208- payload .put ("uuid" , appUuid );
209- payload .put ("name" , windowName );
210- client .dispatch ("UNDOCK-WINDOW" , payload , null );
211- }
212- });
213- }
214- });
215- }
216-
217- @ Override
218- public void onError (Ack ack ) {
219- System .out .println (windowName + ": unable to register external window, " + ack .getReason ());
220- }
221- });
222- this .observers .add (observer );
187+ void createJavaWindow () throws DesktopException {
188+ String windowName = UUID .randomUUID ().toString ();
189+ LayoutFrame frame = new LayoutFrame (this .desktopConnection , appUuid , windowName );
190+ this .childFrames .put (windowName , frame );
191+ frame .addWindowListener (this .childFrameCleanListener );
223192 }
224193
225194 void createOpenfinWindow () {
@@ -252,18 +221,6 @@ public void onReady() {
252221 this .application = Application .wrap (appUuid , this .desktopConnection );
253222 btnCreateOpenfinWindow .setEnabled (true );
254223 btnCreateJavaWindow .setEnabled (true );
255-
256- // createApplication(appUuid, appUuid, "about:blank", new AckListener() {
257- // @Override
258- // public void onSuccess(Ack ack) {
259- // }
260- //
261- // @Override
262- // public void onError(Ack ack) {
263- // System.out.println("error creating applicaton: " + ack.getReason());
264- // }
265- //
266- // });
267224 }
268225
269226 @ Override
0 commit comments