srcanaapps/depexplorer/com.nokia.s60tools.appdep/src/com/nokia/s60tools/appdep/ui/wizards/WizardUtils.java
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/srcanaapps/depexplorer/com.nokia.s60tools.appdep/src/com/nokia/s60tools/appdep/ui/wizards/WizardUtils.java Sat Jan 09 10:04:11 2010 +0530
@@ -0,0 +1,234 @@
+/*
+* Copyright (c) 2006 Nokia Corporation and/or its subsidiary(-ies).
+* All rights reserved.
+* This component and the accompanying materials are made available
+* under the terms of "Eclipse Public License v1.0"
+* which accompanies this distribution, and is available
+* at the URL "http://www.eclipse.org/legal/epl-v10.html".
+*
+* Initial Contributors:
+* Nokia Corporation - initial contribution.
+*
+* Contributors:
+*
+* Description:
+*
+*/
+
+
+package com.nokia.s60tools.appdep.ui.wizards;
+
+import java.util.Set;
+
+import org.eclipse.core.runtime.jobs.Job;
+import org.eclipse.jface.wizard.WizardDialog;
+import org.eclipse.swt.SWT;
+import org.eclipse.swt.widgets.Shell;
+
+import com.nokia.s60tools.appdep.core.AppDepSettings;
+import com.nokia.s60tools.appdep.core.CacheDataLoadProcessManager;
+import com.nokia.s60tools.appdep.core.job.GenerateCacheJob;
+import com.nokia.s60tools.appdep.resources.Messages;
+import com.nokia.s60tools.appdep.ui.dialogs.AppDepMessageBox;
+import com.nokia.s60tools.appdep.util.AppDepConsole;
+import com.nokia.s60tools.ui.S60ToolsUIConstants;
+import com.nokia.s60tools.util.console.IConsolePrintUtility;
+import com.nokia.s60tools.util.debug.DbgUtility;
+
+/**
+ * This class contains wizard related static
+ * utility methods.
+ */
+public class WizardUtils {
+
+ /**
+ * Only one instance of the wizard dialog can be active.
+ * Using this static member to make it sure.
+ */
+ static WizardDialog wizDialog = null;
+
+ /**
+ * Invokes wizard for selection of currently used
+ * SDK and target platform. Selection of the the wizard page to be
+ * opened is made based on the settings that are currently in effect.
+ * By default shows all the duplicate components are reported if encountered.
+ * @param sh Parent shell for the wizard.
+ * @return Returns <code>true</code> if current settings have changed
+ * and <code>false</code> if the settings are not changed.
+ * If settings are changed, it requires UI component refresh.
+ */
+ public static boolean invokeSDKAndTargetPlatformSelectionWizard(Shell sh) {
+ return invokeSDKAndTargetPlatformSelectionWizard(sh, false, null, true);
+ }
+
+ /**
+ * Invokes wizard for selection of currently used
+ * SDK and target platform.
+ * By default shows all the duplicate components are reported if encountered.
+ * @param sh Parent shell for the wizard.
+ * @param openSDKSelectionPage Set to <code>true</code> if the one wants forcibly
+ * open the SDK selection page instead of starting the default page.
+ * @return Returns <code>true</code> if current settings have changed
+ * and <code>false</code> if the settings are not changed.
+ * If settings are changed, it requires UI component refresh.
+ */
+ public static boolean invokeSDKAndTargetPlatformSelectionWizard(Shell sh,
+ boolean openSDKSelectionPage) {
+ return invokeSDKAndTargetPlatformSelectionWizard(sh, openSDKSelectionPage, null, true);
+ }
+
+ /**
+ * Invokes wizard for selection of currently used
+ * SDK and target platform.
+ * @param sh Parent shell for the wizard.
+ * @param selectNewSDK Set to <code>true</code> if the one wants forcibly
+ * open the SDK selection page for setting new SDK selection.
+ * @param newSettings If this value is set to <code>null</code> the current settings are cloned as
+ * base for the new settings, the value is not <code>null</code> the given settings
+ * are added into active settings and used when wizard is opened.
+ * @param showDuplicateComponentInfo if set <code>true</code> all duplicate components are reported.
+ * @return Returns <code>true</code> if current settings have changed
+ * and <code>false</code> if the settings are not changed.
+ * If settings are changed, it requires UI component refresh.
+ */
+ public static boolean invokeSDKAndTargetPlatformSelectionWizard(Shell sh,
+ boolean selectNewSDK,
+ AppDepSettings newSettings,
+ boolean showDuplicateComponentInfo) {
+
+ // Closing possibly existing wizard dialog
+ // forcibly before invoking another one.
+ if(wizDialog != null){
+ wizDialog.close();
+ }
+
+ Set<String> previousTargetPlatformsSet = AppDepSettings.getActiveSettings().getBuildDirsAsSet();
+ AppDepSettings currentSettings = null;
+
+ if(newSettings != null){
+ // Given settings act as a base for new user selections.
+ AppDepSettings.setAsNewActiveInstance(newSettings);
+ currentSettings = newSettings;
+ }
+ else{
+ // The clone of current settings acts as a base for new user selections.
+ currentSettings = AppDepSettings.cloneAndAddAsNewActiveInstance();
+ }
+ if(selectNewSDK){
+ //Set explicitly mode to not be SIS mode because user wants to select new SDK.
+ AppDepSettings.getActiveSettings().setIsInSISFileAnalysisMode(false);
+ }
+
+ // Creating wizard
+ SelectSDKWizard wiz = new SelectSDKWizard(currentSettings,
+ selectNewSDK,
+ showDuplicateComponentInfo);
+ wizDialog = new AppDepWizardDialog(sh, wiz);
+
+ wizDialog.create();
+ wizDialog.getShell().setSize(S60ToolsUIConstants.WIZARD_DEFAULT_WIDTH,
+ S60ToolsUIConstants.WIZARD_DEFAULT_HEIGHT);
+ wizDialog.addPageChangedListener(wiz);
+
+ // Showing wizard to user
+ int userResponse = wizDialog.open();
+
+ // Making sure that static instance is null for next users
+ wizDialog = null;
+
+ return handleUserResponse(previousTargetPlatformsSet, userResponse);
+ }
+
+ /**
+ * Checks the user response and triggers actions based on the response.
+ * @param previousTargetPlatformsSet Previously selected target platform set.
+ * @param userResponse User response to check.
+ * @return Returns <code>true</code> if current settings have changed
+ * and <code>false</code> if the settings are not changed.
+ * If settings are changed, it requires UI component refresh.
+ */
+ private static boolean handleUserResponse(
+ Set<String> previousTargetPlatformsSet, int userResponse) {
+ // Handling user response
+ if(userResponse == ISelectSDKWizard.FINISH_COMPONENT_SELECTED){
+ // Wizard was finished normally and user accepted the new settings.
+ // There are no more reasons to preserve old settings.
+ AppDepSettings.removePreviousInstances();
+ // Comparing previous settings against latest settings
+ AppDepSettings latestSettings = AppDepSettings.getActiveSettings();
+ Set<String> currentTargetPlatformsSet = latestSettings.getBuildDirsAsSet();
+
+ DbgUtility.println(DbgUtility.PRIORITY_OPERATION, "User selection after wizard closes:"); //$NON-NLS-1$
+ DbgUtility.println(DbgUtility.PRIORITY_OPERATION, "\t currentTargetPlatformsSet: " + currentTargetPlatformsSet.toString()); //$NON-NLS-1$
+ DbgUtility.println(DbgUtility.PRIORITY_OPERATION, "\t currentlyAnalyzedComponentName: " + latestSettings.getCurrentlyAnalyzedComponentName()); //$NON-NLS-1$
+
+ boolean isCacheUpdated = latestSettings.isCacheUpdated();
+ if(
+ !currentTargetPlatformsSet.equals(previousTargetPlatformsSet)
+ ||
+ isCacheUpdated
+ ){
+ // Reloading cache and refreshing existing view with new information
+ try {
+ CacheDataLoadProcessManager.runCacheLoadProcess(latestSettings, isCacheUpdated);
+ } catch (Exception e) {
+ e.printStackTrace();
+ // Cache reload failed
+ String targetPlatformStr = latestSettings.getCurrentlyUsedTargetsAsString();
+ String msg = Messages.getString("GeneralMessages.CacheDataReload_Failed_For_Msg") //$NON-NLS-1$
+ + " '" + targetPlatformStr + "'. " //$NON-NLS-1$ //$NON-NLS-2$
+ + Messages.getString("GenerateCacheJob.See_Console_Log_Msg"); //$NON-NLS-1$
+
+ AppDepMessageBox msgBox = new AppDepMessageBox(msg, SWT.ICON_ERROR | SWT.OK);
+ msgBox.open();
+ }
+ }
+ return true;
+ }
+ else if(userResponse == ISelectSDKWizard.FINISH_CACHE_CREATION){
+ triggerCacheGenerationJobAndRestoreSettings();
+ return false;
+ }
+ else if(userResponse == ISelectSDKWizard.CANCEL){
+ restorePreviousActiveSettings();
+ return false;
+ }
+ else{
+ AppDepConsole.getInstance().println(Messages.getString("WizardUtils.Unexpected_Wizard_Exit_Status"), //$NON-NLS-1$
+ IConsolePrintUtility.MSG_ERROR);
+ restorePreviousActiveSettings();
+ return false;
+ }
+ }
+
+ /**
+ * Triggers cache generation job and restores previous settings.
+ */
+ private static void triggerCacheGenerationJobAndRestoreSettings() {
+ // Cache generation uses the settings set by the user.
+ // Getting a local copy of currently active settings...
+ AppDepSettings localSettings
+ = (AppDepSettings) AppDepSettings.getActiveSettings().clone();
+ //... and passing it to cache generate job object
+ Job jb = new GenerateCacheJob(Messages.getString("GeneralMessages.CacheGeneration_Job_Title_Text"), localSettings); //$NON-NLS-1$
+
+ // We do not want cache generation to block other
+ // jobs and therefore using the lowest priority
+ jb.setPriority(Job.DECORATE);
+ jb.schedule();
+
+ // It is now safe to restore original settings, because cache generation uses
+ // its own copy of settings.
+ restorePreviousActiveSettings();
+ }
+
+ /**
+ * Restores the previously active global application settings.
+ */
+ private static void restorePreviousActiveSettings() {
+ if(AppDepSettings.hasPreviousActiveInstance()){
+ AppDepSettings.restorePreviousActiveInstance();
+ }
+ }
+
+}