com.nokia.s60tools.compatibilityanalyser.ui.wizards.AnalysisWizard.java Source code

Java tutorial

Introduction

Here is the source code for com.nokia.s60tools.compatibilityanalyser.ui.wizards.AnalysisWizard.java

Source

/*
* Copyright (c) 2009 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.compatibilityanalyser.ui.wizards;

import java.io.File;
import java.util.ArrayList;
import java.util.List;

import javax.xml.parsers.ParserConfigurationException;

import org.eclipse.core.resources.IFile;
import org.eclipse.core.resources.IProject;
import org.eclipse.core.resources.ResourcesPlugin;
import org.eclipse.core.runtime.IPath;
import org.eclipse.core.runtime.Path;
import org.eclipse.jface.dialogs.MessageDialog;
import org.eclipse.jface.preference.IPreferenceStore;
import org.eclipse.jface.resource.ImageDescriptor;
import org.eclipse.jface.viewers.IStructuredSelection;
import org.eclipse.jface.wizard.IWizardPage;
import org.eclipse.swt.SWT;
import org.eclipse.swt.graphics.Font;
import org.eclipse.swt.widgets.Display;
import org.eclipse.swt.widgets.TableItem;
import org.eclipse.ui.IImportWizard;
import org.eclipse.ui.IWorkbench;

import com.nokia.carbide.cdt.builder.CarbideBuilderPlugin;
import com.nokia.carbide.cdt.builder.ICarbideBuildManager;
import com.nokia.carbide.cdt.builder.project.ICarbideBuildConfiguration;
import com.nokia.carbide.cdt.builder.project.ICarbideProjectModifier;
import com.nokia.carbide.cpp.sdk.core.ISymbianBuildContext;
import com.nokia.carbide.cpp.sdk.core.ISymbianSDK;
import com.nokia.s60tools.compatibilityanalyser.CompatibilityAnalyserPlugin;
import com.nokia.s60tools.compatibilityanalyser.data.LastUsedKnownissues;
import com.nokia.s60tools.compatibilityanalyser.data.ProductSdkData;
import com.nokia.s60tools.compatibilityanalyser.data.SavingUserData;
import com.nokia.s60tools.compatibilityanalyser.model.CompatibilityAnalyserEngine;
import com.nokia.s60tools.compatibilityanalyser.model.ParserEngine;
import com.nokia.s60tools.compatibilityanalyser.resources.ImageKeys;
import com.nokia.s60tools.compatibilityanalyser.resources.ImageResourceManager;
import com.nokia.s60tools.compatibilityanalyser.resources.Messages;
import com.nokia.s60tools.compatibilityanalyser.ui.actions.ProjectViewPopupAction;
import com.nokia.s60tools.compatibilityanalyser.ui.views.MainView;
import com.nokia.s60tools.compatibilityanalyser.utils.CompatibilityAnalyserUtils;
import com.nokia.s60tools.compatibilityanalyser.utils.FileMethods;
import com.nokia.s60tools.ui.UiUtils;
import com.nokia.s60tools.ui.wizards.S60ToolsWizard;

/**
 * Compatibility Analyser Wizard 
 */
public class AnalysisWizard extends S60ToolsWizard implements IImportWizard {

    private ProductSDKSelectionPage sdkPage;
    private HeaderFilesPage headersPage;
    //private PlatformHeadersPage platformHeadersPage;
    private LibraryFilesPage libsPage;
    private ReportFileInfoPage reportPage;
    private ConfigurationSaveDetails savePage;

    private CompatibilityAnalyserEngine engine;
    private ProductSdkData currentSdk;

    private boolean isOpenedFromConfigFile = false;
    private boolean isOpenedFromProject = false;
    private String configFilePath = null;
    private static final ImageDescriptor bannerImgDescriptor = UiUtils
            .getBannerImageDescriptor(ImageResourceManager.getImageDescriptor(ImageKeys.ANALYSER_WIZARD_BANNER));
    Font invalidFile_Font = new Font(Display.getCurrent(), "Tahoma", 8, SWT.ITALIC);

    public AnalysisWizard(CompatibilityAnalyserEngine engine) {
        super(bannerImgDescriptor);
        setWindowTitle(Messages.getString("AnalysisWizard.Title")); //$NON-NLS-1$
        this.engine = engine;
        currentSdk = engine.getCurrentSdkData();
        this.isOpenedFromConfigFile = currentSdk.isOpenedFromConfigFile;
        this.isOpenedFromProject = currentSdk.isOpenedFromProject;

        if (isOpenedFromConfigFile)
            configFilePath = currentSdk.configFileSysPath;
    }

    public void init(IWorkbench workbench, IStructuredSelection selection) {
    }

    @Override
    public void addPages() {
        sdkPage = new ProductSDKSelectionPage(engine);
        addPage(sdkPage);

        headersPage = new HeaderFilesPage(engine);
        addPage(headersPage);

        //platformHeadersPage = new PlatformHeadersPage(engine);
        //addPage(platformHeadersPage);

        libsPage = new LibraryFilesPage(engine);
        addPage(libsPage);

        reportPage = new ReportFileInfoPage(engine);
        addPage(reportPage);

        savePage = new ConfigurationSaveDetails(engine);

        if (!engine.getCurrentSdkData().isOpenedFromConfigFile)
            addPage(savePage);

        this.getShell().setSize(600, 710);
        this.getShell().setLocation(430, 0);
    }

    public boolean canFinish() {
        boolean status = sdkPage.canFinish();
        if (sdkPage.headersButton.getSelection())
            status = status && headersPage.canFinish();
        if (sdkPage.libsButton.getSelection())
            status = status && libsPage.canFinish();

        status = status && reportPage.canFinish();

        if (!currentSdk.isOpenedFromConfigFile)
            status = status && savePage.canFinish();

        return status;
    }

    private List<ISymbianBuildContext> getSDKConfigurations(ISymbianSDK selectedSDK) {
        return selectedSDK.getFilteredBuildConfigurations();
    }

    /**
     * This method fetches the next page of the wizard based on the current page.
     * If any of the fields from next page depend on the fields of current page,
     * such fields will be handled here.
     */
    public IWizardPage getNextPage(IWizardPage page) {
        if (!engine.getCurrentSdkData().isOpenedFromConfigFile)
            savePage.fileText.setText(sdkPage.selectedSDK.getUniqueId() + "_" + sdkPage.profileCombo.getText() + "."
                    + ConfigurationSaveDetails.CONFIGEXTN);

        if (this.getContainer().getCurrentPage() == sdkPage) {
            if (currentSdk.isOpenedFromProject && sdkPage.headersButton.getSelection()) {
                IProject prj = CarbideBuilderPlugin.getProjectInContext();
                ICarbideBuildManager mngr = CarbideBuilderPlugin.getBuildManager();
                ICarbideProjectModifier modifier = mngr.getProjectModifier(prj);

                ICarbideBuildConfiguration origConf = mngr.getProjectInfo(prj).getDefaultConfiguration();

                if (!modifier.getDefaultConfiguration().getSDK().getUniqueId()
                        .equals(sdkPage.selectedSDK.getUniqueId())) {
                    ICarbideBuildConfiguration configTobeSet = null;

                    List<ISymbianBuildContext> all = getSDKConfigurations(sdkPage.selectedSDK);
                    if (all != null && all.size() > 0) {
                        configTobeSet = modifier.createNewConfiguration(all.get(0), true);
                        configTobeSet.saveConfiguration(false);

                        modifier.setDefaultConfiguration(configTobeSet);
                        modifier.saveChanges();

                        ArrayList<String> usrIncList = new ArrayList<String>();
                        ArrayList<String> sysIncList = new ArrayList<String>();

                        ProjectViewPopupAction.getIncludesFromThisProject(mngr.getProjectInfo(prj), usrIncList,
                                sysIncList);

                        modifier.setDefaultConfiguration(origConf);
                        modifier.saveChanges();

                        currentSdk.currentIncludes = sysIncList.toArray(new String[0]);
                    }

                }
            }
            engine.getCurrentSdkData().productSdkVersion = sdkPage.versionCombo.getText();

            if (sdkPage.headersButton.getSelection()) {
                return headersPage;
            }
            if (sdkPage.libsButton.getSelection()) {
                ISymbianSDK sdk = sdkPage.selectedSDK;
                String[] items = CompatibilityAnalyserUtils.getPlatformList(sdk);
                if (items != null) {
                    libsPage.buildTarget_list.setItems(items);

                    //When wizard is opened using configuration file, select the previous used targets.
                    String[] current_platforms = engine.getCurrentSdkData().libsTargetPlat;
                    ArrayList<Integer> platform_indices = new ArrayList<Integer>();
                    if (current_platforms != null) {
                        for (String s : current_platforms) {
                            int index = libsPage.buildTarget_list.indexOf(s.toLowerCase());
                            if (index != -1)
                                platform_indices.add(index);
                        }

                        int[] indices_to_be_selected = new int[platform_indices.size()];
                        for (int i = 0; i < indices_to_be_selected.length; i++) {
                            indices_to_be_selected[i] = platform_indices.get(i).intValue();
                        }
                        libsPage.buildTarget_list.select(indices_to_be_selected);
                    } else {
                        int i = libsPage.buildTarget_list.indexOf(ProductSdkData.DEFAULT_TARGET_PLATFORM); //$NON-NLS-1$

                        if (i != -1)
                            libsPage.buildTarget_list.setSelection(i);
                        else
                            libsPage.buildTarget_list.setSelection(0);
                    }
                    libsPage.selectedPlatform = libsPage.buildTarget_list.getSelection();
                }
                libsPage.releaseRoot = sdk.getReleaseRoot().toString();
                return libsPage;
            }
        } else if (this.getContainer().getCurrentPage() == headersPage) {
            if (sdkPage.libsButton.getSelection()) {
                String[] items = CompatibilityAnalyserUtils.getPlatformList(sdkPage.selectedSDK);

                if (items != null) {
                    libsPage.buildTarget_list.setItems(items);

                    String[] current_platforms = engine.getCurrentSdkData().libsTargetPlat;

                    ArrayList<Integer> platform_indices = new ArrayList<Integer>();

                    if (current_platforms != null) {
                        for (String s : current_platforms) {
                            int index = libsPage.buildTarget_list.indexOf(s);
                            if (index != -1)
                                platform_indices.add(index);
                        }

                        for (int i = 0; i < platform_indices.size(); i++) {
                            libsPage.buildTarget_list.select(platform_indices.get(i));
                        }
                    } else {
                        int i = libsPage.buildTarget_list.indexOf(ProductSdkData.DEFAULT_TARGET_PLATFORM);

                        if (i != -1)
                            libsPage.buildTarget_list.setSelection(i);
                        else
                            libsPage.buildTarget_list.setSelection(0);
                    }

                    libsPage.selectedPlatform = libsPage.buildTarget_list.getSelection();
                }

                libsPage.releaseRoot = sdkPage.selectedSDK.getReleaseRoot().toString();

                return libsPage;
            } else
                return reportPage;
        } else if (this.getContainer().getCurrentPage() == libsPage) {
            return reportPage;
        }

        else if (this.getContainer().getCurrentPage() == reportPage
                && !engine.getCurrentSdkData().isOpenedFromConfigFile) {
            return savePage;
        }

        return null;
    }

    public boolean performFinish() {
        engine = new CompatibilityAnalyserEngine();
        currentSdk = new ProductSdkData();

        currentSdk.productSdkName = sdkPage.sdkNameCombo.getText();
        currentSdk.productSdkVersion = sdkPage.versionCombo.getText();
        currentSdk.epocRoot = sdkPage.epocDirectory.getText();

        if (!currentSdk.epocRoot.endsWith("\\"))
            currentSdk.epocRoot = currentSdk.epocRoot + "\\";

        SavingUserData userData = new SavingUserData();

        IPreferenceStore prefStore = CompatibilityAnalyserPlugin.getCompatabilityAnalyserPrefStore();

        if (prefStore.getBoolean(CompatibilityAnalyserPreferencesConstants.DEFAULT_TOOLS)) {
            currentSdk.useDefaultCoreTools = true;
            currentSdk.useLocalCoreTools = false;
            currentSdk.useSdkCoreTools = false;
            currentSdk.useWebServerCoreTools = false;
        } else if (prefStore.getBoolean(CompatibilityAnalyserPreferencesConstants.LOCAL_TOOLS)) {
            currentSdk.useDefaultCoreTools = false;
            currentSdk.useLocalCoreTools = true;
            currentSdk.useSdkCoreTools = false;
            currentSdk.useWebServerCoreTools = false;
            currentSdk.coreToolsPath = prefStore
                    .getString(CompatibilityAnalyserPreferencesConstants.LOCAL_TOOLS_PATH);
        } else if (prefStore.getBoolean(CompatibilityAnalyserPreferencesConstants.SDK_TOOLS)) {
            currentSdk.useDefaultCoreTools = false;
            currentSdk.useLocalCoreTools = false;
            currentSdk.useSdkCoreTools = true;
            currentSdk.useWebServerCoreTools = false;
            currentSdk.coreToolsPath = prefStore
                    .getString(CompatibilityAnalyserPreferencesConstants.SDK_TOOLS_PATH);
        } else if (prefStore.getBoolean(CompatibilityAnalyserPreferencesConstants.WEB_TOOLS)) {
            currentSdk.useDefaultCoreTools = false;
            currentSdk.useLocalCoreTools = false;
            currentSdk.useSdkCoreTools = false;
            currentSdk.useWebServerCoreTools = true;
            currentSdk.urlPathofCoreTools = prefStore
                    .getString(CompatibilityAnalyserPreferencesConstants.CORETOOLS_URL);
        }

        ISymbianSDK selectedSdk = sdkPage.selectedSDK;

        if (selectedSdk.getSDKVersion().toString().equalsIgnoreCase(Messages.getString("AnalysisWizard.13"))) { //$NON-NLS-1$
            userData.saveSDKNameAndVersion(selectedSdk.getUniqueId(), sdkPage.versionCombo.getText());
        }
        if (sdkPage.headersButton.getSelection()) {
            engine.setHeaderAnalysis(true);

            if (headersPage.defaultRootDir.getSelection()) {
                String s = FileMethods.appendPathSeparator(sdkPage.epocDirectory.getText());
                String[] defIncPath = { s + Messages.getString("AnalysisWizard.epoc32Include") };
                currentSdk.currentHeaderDir = defIncPath;
            } else {

                currentSdk.currentHeaderDir = headersPage.getSelectedHdrPaths();
                currentSdk.defaultHeaderDir = false;
                LastUsedKnownissues saveData = new LastUsedKnownissues();
                saveData.saveValues(LastUsedKnownissues.ValueTypes.CURRENT_HEADERS, currentSdk.currentHeaderDir);
            }
            if (!headersPage.allFiles.getSelection()) {
                currentSdk.analyseAll = false;
                int size = headersPage.filesList.getItemCount();
                ArrayList<String> validFiles = new ArrayList<String>();
                ArrayList<String> currentFiles = new ArrayList<String>();

                for (int i = 0; i < size; i++) {
                    TableItem item = headersPage.filesList.getItem(i);
                    if (!item.getForeground().equals(headersPage.invalidColor)) {
                        currentFiles.add(item.getText(0));
                        if (item.getText(1).equalsIgnoreCase("")) //$NON-NLS-1$
                            validFiles.add(item.getText(0));
                        else
                            validFiles.add(item.getText(1));
                    }
                }
                currentSdk.currentFiles = currentFiles.toArray(new String[0]);
                currentSdk.HeaderFilesList = validFiles.toArray(new String[0]);
            }
            if (!headersPage.allTypes.getSelection()) {
                currentSdk.allTypes = false;
                if (headersPage.hType.getSelection())
                    currentSdk.hTypes = true;
                if (headersPage.hrhType.getSelection())
                    currentSdk.hrhTypes = true;
                if (headersPage.rsgType.getSelection())
                    currentSdk.rsgTypes = true;
                if (headersPage.mbgType.getSelection())
                    currentSdk.mbgTypes = true;
                if (headersPage.hppType.getSelection())
                    currentSdk.hppTypes = true;
                if (headersPage.panType.getSelection())
                    currentSdk.panTypes = true;
            }
            if (headersPage.allFiles.getSelection() && !headersPage.useRecursive.getSelection()) {
                currentSdk.useRecursive = false;
            }
            prefStore.setValue(CompatibilityAnalyserPreferencesConstants.USERECURSION_LAST_SELECTION,
                    headersPage.useRecursive.getSelection());

            if (headersPage.currentSdkData.usePlatformData) {
                currentSdk.usePlatformData = true;
            }

            if (!isOpenedFromProject)
                prefStore.setValue(CompatibilityAnalyserPreferencesConstants.USEPLATFORMDATA_LAST_SELECTION,
                        headersPage.currentSdkData.usePlatformData);

            if (headersPage.currentSdkData.currentIncludes != null
                    && headersPage.currentSdkData.currentIncludes.length > 0) {
                currentSdk.currentIncludes = headersPage.currentSdkData.currentIncludes;
            }

            currentSdk.forcedHeaders = headersPage.currentSdkData.forcedHeaders;

            currentSdk.replaceSet = headersPage.replaceSet;
        }
        if (sdkPage.libsButton.getSelection()) {
            engine.setLibraryAnalysis(true);

            if (libsPage.buildtarget_radioBtn.getSelection()) {
                currentSdk.platfromSelection = true;
                currentSdk.default_platfrom_selection = false;
                currentSdk.selected_library_dirs = false;
                currentSdk.libsTargetPlat = libsPage.selectedPlatform;
                currentSdk.currentLibsDir = new String[currentSdk.libsTargetPlat.length];
                currentSdk.currentDllDir = new String[currentSdk.libsTargetPlat.length];

                for (int i = 0; i < currentSdk.libsTargetPlat.length; i++) {
                    currentSdk.currentLibsDir[i] = CompatibilityAnalyserEngine
                            .getLibsPathFromPlatform(sdkPage.selectedSDK, libsPage.selectedPlatform[i]);
                    currentSdk.currentDllDir[i] = CompatibilityAnalyserEngine
                            .getDllPathFromPlatform(sdkPage.selectedSDK, libsPage.selectedPlatform[i]);
                }
            } else if (libsPage.userDirs_radioBtn.getSelection()) {
                currentSdk.platfromSelection = false;
                currentSdk.selected_library_dirs = true;
                currentSdk.default_platfrom_selection = false;

                currentSdk.currentLibsDir = libsPage.getSelectedDSOPaths();
                currentSdk.currentDllDir = libsPage.getSelectedDLLPaths();
                LastUsedKnownissues saveData = new LastUsedKnownissues();
                saveData.saveValues(LastUsedKnownissues.ValueTypes.LIBRARY_DIRECTORIES, currentSdk.currentLibsDir);
                saveData.saveValues(LastUsedKnownissues.ValueTypes.DLL_DIRECTORIES, currentSdk.currentDllDir);
            }

            if (!libsPage.analyseAllFiles_radioBtn.getSelection()) {
                currentSdk.analyzeAllLibs = false;
                int size = libsPage.dsoFiles_list.getItemCount();

                currentSdk.libraryFilesList = new String[size];
                for (int i = 0; i < size; i++)
                    currentSdk.libraryFilesList[i] = libsPage.dsoFiles_list.getItem(i).getText();
            }
            currentSdk.toolChain = libsPage.selectedToolChain.getName();
            currentSdk.toolChainPath = libsPage.selectedToolChain.getToolChainPath();

        }
        currentSdk.reportName = reportPage.fileName.getText();
        currentSdk.reportPath = reportPage.pathCombo.getText();
        userData.saveValue(SavingUserData.ValueTypes.REPORT_PATH, currentSdk.reportPath);

        currentSdk.filterNeeded = reportPage.yes.getSelection();
        prefStore.setValue(CompatibilityAnalyserPreferencesConstants.FILTER_REPORTS_LAST_SELECTION,
                reportPage.yes.getSelection());
        engine.setCurrentSdkData(currentSdk);
        engine.setBaselineProfile(sdkPage.profileCombo.getText());
        userData.saveValue(SavingUserData.ValueTypes.PROFILENAME, sdkPage.profileCombo.getText());
        prefStore.setValue(CompatibilityAnalyserPreferencesConstants.LAST_USED_BASELINE_PROFILE,
                sdkPage.profileCombo.getText());

        if (isOpenedFromConfigFile) {
            try {
                ParserEngine.saveSettingsToFile(engine, configFilePath);
            } catch (ParserConfigurationException e) {
                MessageDialog.openError(Display.getCurrent().getActiveShell(), "Compatibility Analyser",
                        "Error in saving the configuration " + e.getMessage());
            }
            return true;
        }
        if (!isOpenedFromConfigFile && savePage.isSavingNeeded()) {
            currentSdk.container = savePage.getContainerName();
            currentSdk.configName = savePage.getFileName();

            if (currentSdk.configName != null && !currentSdk.configName.endsWith(".comptanalyser"))
                currentSdk.configName += ".comptanalyser";

            try {
                if (currentSdk.container.length() > 0 && currentSdk.configName.length() > 0) {
                    IPath path = new Path(
                            FileMethods.appendPathSeparator(currentSdk.container) + currentSdk.configName);
                    IFile file = ResourcesPlugin.getWorkspace().getRoot().getFile(path);

                    ParserEngine.saveSettingsToFile(engine, file.getLocation().toString());
                }
            } catch (ParserConfigurationException e) {
                MessageDialog.openError(Display.getCurrent().getActiveShell(), "Compatibility Analyser",
                        "Error in saving the configuration " + e.getMessage());
            }
        }

        String currentDateTime = FileMethods.getDateTime();
        FileMethods.createFolder(
                FileMethods.convertForwardToBackwardSlashes(CompatibilityAnalyserPlugin.stateLocation.toString())
                        + File.separator + currentDateTime);
        currentSdk.setconfigfolder(
                FileMethods.convertForwardToBackwardSlashes(CompatibilityAnalyserPlugin.stateLocation.toString())
                        + File.separator + currentDateTime);

        MainView mainView = MainView.showAndReturnYourself();
        if (mainView != null)
            mainView.startAnalysis(engine);

        return true;
    }

}