diff -r 000000000000 -r a02c979e8dfd 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 true if current settings have changed + * and false 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 true if the one wants forcibly + * open the SDK selection page instead of starting the default page. + * @return Returns true if current settings have changed + * and false 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 true if the one wants forcibly + * open the SDK selection page for setting new SDK selection. + * @param newSettings If this value is set to null the current settings are cloned as + * base for the new settings, the value is not null the given settings + * are added into active settings and used when wizard is opened. + * @param showDuplicateComponentInfo if set true all duplicate components are reported. + * @return Returns true if current settings have changed + * and false 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 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 true if current settings have changed + * and false if the settings are not changed. + * If settings are changed, it requires UI component refresh. + */ + private static boolean handleUserResponse( + Set 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 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(); + } + } + +}