From: <se...@us...> - 2008-05-12 18:25:17
|
Revision: 129 http://acmcontester.svn.sourceforge.net/acmcontester/?rev=129&view=rev Author: sem62 Date: 2008-05-12 11:23:49 -0700 (Mon, 12 May 2008) Log Message: ----------- Realized forcing termination of SCO. Modified Paths: -------------- webPlayer/src/1.jardesc webPlayer/src/UI/SelectionListener.java webPlayer/src/behaviour/Navigation.java webPlayer/src/player/AppletWithApiHandle.java webPlayer/src/player/AppletWithNavigationControlsHandler.java Modified: webPlayer/src/1.jardesc =================================================================== --- webPlayer/src/1.jardesc 2008-05-10 21:02:31 UTC (rev 128) +++ webPlayer/src/1.jardesc 2008-05-12 18:23:49 UTC (rev 129) @@ -1,6 +1,6 @@ <?xml version="1.0" encoding="WINDOWS-1251" standalone="no"?> <jardesc> - <jar path="E:/ACMContester/out/web/WebPlayer/player.jar"/> + <jar path="s:/WebPlayer/player.jar"/> <options buildIfNeeded="true" compress="true" descriptionLocation="/webPlayer/src/1.jardesc" exportErrors="true" exportWarnings="false" includeDirectoryEntries="false" overwrite="true" saveDescription="true" storeRefactorings="false" useSourceFolders="false"/> <storedRefactorings deprecationInfo="true" structuralOnly="false"/> <selectedProjects/> Modified: webPlayer/src/UI/SelectionListener.java =================================================================== --- webPlayer/src/UI/SelectionListener.java 2008-05-10 21:02:31 UTC (rev 128) +++ webPlayer/src/UI/SelectionListener.java 2008-05-12 18:23:49 UTC (rev 129) @@ -45,6 +45,6 @@ DefaultMutableTreeNode item = (DefaultMutableTreeNode)e.getNewLeadSelectionPath().getLastPathComponent(); Activity activity = (Activity)item.getUserObject(); - Navigation.choose(activity); + Navigation.choose(activity, true); } } Modified: webPlayer/src/behaviour/Navigation.java =================================================================== --- webPlayer/src/behaviour/Navigation.java 2008-05-10 21:02:31 UTC (rev 128) +++ webPlayer/src/behaviour/Navigation.java 2008-05-12 18:23:49 UTC (rev 129) @@ -6,7 +6,6 @@ import UI.SelectionListener; import javax.swing.*; -import javax.swing.Timer; import java.awt.event.ActionEvent; import data.DataModel; @@ -25,6 +24,8 @@ public static CmiElement request = new CmiElement(""); + private static final long TERMINATING_WAIT_INTERVAL = 10000; + public static String getValue(String element) { return request.value; } @@ -56,7 +57,7 @@ } public static void Start() { - choose(Activity.getRoot()); + choose(Activity.getRoot(), false); } public static Activity getChoice(Activity choice, @@ -73,7 +74,7 @@ if (recursive_selected_child) { if (choice.parent.sequencing.controlMode.forwardOnly) { return choice.parent.items.get(0); // if you can't choose - // anything and + // anything and } } @@ -147,21 +148,21 @@ return previousActivivty; } - public static void Next() { + public static void Next(boolean needWaitingForTrminating) { System.out.print("Next requested\n"); Activity current = GlobalStateInformation.getCurrentActivity(); Activity next = Navigation.getNext(current); - ShowItem(next); + ShowItem(next, needWaitingForTrminating); } - public static void Previous() { + public static void Previous(boolean needWaitingForTrminating) { System.out.print("Previous requested\n"); Activity current = GlobalStateInformation.getCurrentActivity(); Activity previous = Navigation.getPrevious(current); - ShowItem(previous); + ShowItem(previous, needWaitingForTrminating); } public static void Exit(boolean need_close_window) { @@ -177,19 +178,21 @@ return getPrevious(GlobalStateInformation.getCurrentActivity()) != null; } - public static void choose(Activity activity) { + public static void choose(Activity activity, + boolean needWaitingForTrminating) { Activity choice = Navigation.getChoice(activity, false); if (choice != null) { - Navigation.ShowItem(choice); + Navigation.ShowItem(choice, needWaitingForTrminating); } else { SelectionListener.SetTreeSelection(Player.itemToTreeNode .get(choice)); } } - public static void ShowItem(Activity activity) { - stopCurrentActivity(); + public static void ShowItem(Activity activity, + boolean needWaitingForTrminating) { + stopCurrentActivity(needWaitingForTrminating); if (activity == null) { Browser.Locate("chooseMsg.html"); @@ -264,15 +267,15 @@ activity.identifier).activityProgressInformation.EndAttemp(); } - public static void activityTerminated() { + public static void activityTerminated(boolean needWaitingForTrminating) { timeLimitTimer.stop(); Activity current = GlobalStateInformation.getCurrentActivity(); Activity target = Navigation.getTarget(current); - Navigation.ShowItem(target); + Navigation.ShowItem(target, needWaitingForTrminating); } - public static void stopCurrentActivity() { + public static void stopCurrentActivity(boolean needWaitingForTrminating) { timeLimitTimer.stop(); Browser.setTimeToLeftText(""); @@ -285,7 +288,31 @@ } } - Player.Terminate("internal"); + if (needWaitingForTrminating) { + if (AppletWithApiHandle.initialized) { + Thread thread = new Thread(new Runnable() { + public void run() { + Browser.Locate("chooseMsg.html"); + } + }); + + thread.start(); + + try { + System.out.println("Waiting for terminating SCO"); + synchronized (AppletWithApiHandle.terminateWaitingObject) { + AppletWithApiHandle.terminateWaitingObject + .wait(TERMINATING_WAIT_INTERVAL); + } + } catch (InterruptedException e1) { + // TODO Auto-generated catch block + e1.printStackTrace(); + } + } + } else { + // TODO need something + } + } public static void checkTimeLimit() { Modified: webPlayer/src/player/AppletWithApiHandle.java =================================================================== --- webPlayer/src/player/AppletWithApiHandle.java 2008-05-10 21:02:31 UTC (rev 128) +++ webPlayer/src/player/AppletWithApiHandle.java 2008-05-12 18:23:49 UTC (rev 129) @@ -18,6 +18,8 @@ private static final long serialVersionUID = 1L; public static boolean initialized = false; public static boolean terminated = false; + + public static Object terminateWaitingObject = new Object(); static public String Initialize(String parameter){ if (GlobalStateInformation.getCurrentActivity() == null){ @@ -87,12 +89,15 @@ if (!terminated){ DataModel.getInstance().getTrackingModelManager().getModelForActivity(current.identifier).activityProgressInformation.EndAttemp(); - if (!parameter.equals("internal")){ - Navigation.activityTerminated(); - } + Navigation.activityTerminated(false); initialized = false; terminated = true; + + synchronized (terminateWaitingObject) { + terminateWaitingObject.notifyAll(); + } + Communicator.getInstance().sendApiLogMessage(current.identifier, Communicator.API_TERMINATE, "", parameter, "true"); return "true"; } Modified: webPlayer/src/player/AppletWithNavigationControlsHandler.java =================================================================== --- webPlayer/src/player/AppletWithNavigationControlsHandler.java 2008-05-10 21:02:31 UTC (rev 128) +++ webPlayer/src/player/AppletWithNavigationControlsHandler.java 2008-05-12 18:23:49 UTC (rev 129) @@ -12,11 +12,11 @@ private static final long serialVersionUID = 1L; public static void Previous(){ - Navigation.Previous(); + Navigation.Previous(true); } public static void Next(){ - Navigation.Next(); + Navigation.Next(true); } public static void suspend(){ This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |