com.nokia.s60tools.compatibilityanalyser.ui.editors.ComptAnalyserLauncher.java Source code

Java tutorial

Introduction

Here is the source code for com.nokia.s60tools.compatibilityanalyser.ui.editors.ComptAnalyserLauncher.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.editors;

import java.io.File;
import java.io.IOException;
import java.util.Vector;

import javax.xml.parsers.DocumentBuilderFactory;
import javax.xml.parsers.ParserConfigurationException;

import org.eclipse.core.runtime.IPath;
import org.eclipse.core.runtime.IStatus;
import org.eclipse.core.runtime.Status;
import org.eclipse.jface.dialogs.ErrorDialog;
import org.eclipse.jface.dialogs.MessageDialog;
import org.eclipse.jface.preference.IPreferenceStore;
import org.eclipse.jface.wizard.WizardDialog;
import org.eclipse.swt.widgets.Display;
import org.eclipse.ui.IEditorLauncher;
import org.w3c.dom.Document;
import org.xml.sax.SAXException;

import com.nokia.carbide.cpp.sdk.core.ISymbianSDK;
import com.nokia.s60tools.compatibilityanalyser.CompatibilityAnalyserPlugin;
import com.nokia.s60tools.compatibilityanalyser.data.BaselineProfile;
import com.nokia.s60tools.compatibilityanalyser.data.ProductSdkData;
import com.nokia.s60tools.compatibilityanalyser.data.ToolChain;
import com.nokia.s60tools.compatibilityanalyser.model.CompatibilityAnalyserEngine;
import com.nokia.s60tools.compatibilityanalyser.model.ParserEngine;
import com.nokia.s60tools.compatibilityanalyser.ui.views.MainView;
import com.nokia.s60tools.compatibilityanalyser.ui.wizards.AnalysisWizard;
import com.nokia.s60tools.compatibilityanalyser.ui.wizards.CompatibilityAnalyserPreferencesConstants;
import com.nokia.s60tools.compatibilityanalyser.utils.BaselineProfileUtils;
import com.nokia.s60tools.compatibilityanalyser.utils.FileMethods;

/**
 * This launches CompatibilityAnalysis process directly, using the configuration
 * from given file. It does not launch the wizard.
 *
 */
public class ComptAnalyserLauncher implements IEditorLauncher {

    private CompatibilityAnalyserEngine engine;

    public void open(IPath file) {

        try {
            Document document = DocumentBuilderFactory.newInstance().newDocumentBuilder()
                    .parse(new File(file.toString()));
            engine = ParserEngine.parseTheConfiguration(document);

            String status = validateGivenData(engine);

            if (status != null) {
                boolean query = MessageDialog.openQuestion(Display.getCurrent().getActiveShell(),
                        "Compatibility Analyser",
                        "Invalid Configuration: " + status + "\n Do you want to edit the Configuration file?");

                if (query) {
                    engine.getCurrentSdkData().isOpenedFromConfigFile = true;
                    engine.getCurrentSdkData().configFileSysPath = file.toString();

                    Runnable showWizardRunnable = new Runnable() {
                        public void run() {
                            WizardDialog wizDialog;
                            AnalysisWizard wiz = new AnalysisWizard(engine);
                            wiz.setNeedsProgressMonitor(true);
                            wizDialog = new WizardDialog(Display.getCurrent().getActiveShell(), wiz);
                            wizDialog.create();
                            //wizDialog.getShell().setSize(550, 680);
                            wizDialog.addPageChangedListener(wiz);
                            wizDialog.open();
                        }
                    };

                    Display.getDefault().asyncExec(showWizardRunnable);
                }
                //MessageDialog.openError(Display.getCurrent().getActiveShell(), "Compatibility Analyser", "Invalid Configuration: " + status);
                return;
            }
            runStaticAnalysis(engine);
        } catch (SAXException e) {
            Status status = new Status(IStatus.ERROR, "Compatibiliy Analyser", 0, e.getMessage(), null);
            ErrorDialog.openError(Display.getCurrent().getActiveShell(), "Compatibiliy Analyser",
                    "Unable to read the configuration", status);
        } catch (IOException e) {
            MessageDialog.openError(Display.getCurrent().getActiveShell(), "Compatibility Analyser",
                    "Unable to read the configuration from " + file.toString());
        } catch (ParserConfigurationException e) {
            Status status = new Status(IStatus.ERROR, "Compatibiliy Analyser", 0, e.getMessage(), null);
            ErrorDialog.openError(Display.getCurrent().getActiveShell(), "Compatibiliy Analyser",
                    "Unable to read the configuration", status);
        }
    }

    /*
     * This method starts the analysis with given configuration
     */
    private void runStaticAnalysis(CompatibilityAnalyserEngine engine) {
        ProductSdkData currentSdk = engine.getCurrentSdkData();

        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);
        }

        MainView mainView = MainView.showAndReturnYourself();

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

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

    }

    /*
     * This method validated given static analysis data.
     * The method returns an error if mandatory parameters are missing/invalid.
     */
    private String validateGivenData(CompatibilityAnalyserEngine engine) {
        if (engine == null)
            return "Invalid Data.";

        ProductSdkData inputData = engine.getCurrentSdkData();

        String profile = engine.getBaselineProfile();

        if (profile == null || profile.equals("")) {
            return "Invalid Baseline Profile";
        } else {
            Object obj = BaselineProfileUtils.getBaselineProfileData(profile);

            if (obj == null || !(obj instanceof BaselineProfile))
                return "Given Baseline Profile does not exist.";
        }
        if (inputData.productSdkName == null || inputData.productSdkVersion == null
                || !isValidPath(inputData.epocRoot)) {
            return "Invalid Current SDK Data.";
        }

        if (!engine.isHeaderAnalysisChecked() && !engine.isLibraryAnalysisChecked()) {
            return "Analysis type is not provided.";
        } else {
            ISymbianSDK[] loadedSdks = CompatibilityAnalyserPlugin.fetchLoadedSdkList().toArray(new ISymbianSDK[0]);
            boolean sdkIsLoaded = false;

            for (ISymbianSDK sdk : loadedSdks) {
                if (inputData.productSdkName.equalsIgnoreCase(sdk.getUniqueId())) {
                    sdkIsLoaded = true;
                    break;
                }
            }

            if (!sdkIsLoaded)
                return "Given SDK is currently uninstalled.";
        }

        if (engine.isHeaderAnalysisChecked()) {

            if (!inputData.defaultHeaderDir
                    && (inputData.currentHeaderDir == null || inputData.currentHeaderDir.length <= 0)) {
                return "Current header directory paths not given.";
            } else if (inputData.currentHeaderDir != null) {
                String invalidPath = null;
                for (String s : inputData.currentHeaderDir) {
                    if (!isValidPath(s)) {
                        invalidPath = s;
                        break;
                    }
                }

                if (invalidPath != null)
                    return "Provided header directory path " + invalidPath + " is invalid.";
            }

            if (!inputData.analyseAll
                    && (inputData.HeaderFilesList == null || inputData.HeaderFilesList.length <= 0)) {
                return "Header files not provided for analysis.";
            }

        }

        if (engine.isLibraryAnalysisChecked()) {

            if (inputData.platfromSelection && inputData.libsTargetPlat == null)
                return "Target Platform is not provided.";

            if (inputData.selected_library_dirs) {
                if (inputData.currentLibsDir == null || inputData.currentLibsDir.length <= 0)
                    return "Current Library directory paths are not provided.";

                else if (inputData.currentLibsDir != null) {
                    String invalidPath = null;
                    for (String s : inputData.currentLibsDir) {
                        if (!isValidPath(s)) {
                            invalidPath = s;
                            break;
                        }
                    }

                    if (invalidPath != null)
                        return "Provided Library Path " + invalidPath + " is invalid.";
                }

                if (inputData.currentDllDir == null || inputData.currentDllDir.length <= 0)
                    return "Current DLL directory paths are not provided.";

                else if (inputData.currentDllDir != null) {
                    String invalidPath = null;
                    for (String s : inputData.currentDllDir) {
                        if (!isValidPath(s)) {
                            invalidPath = s;
                            break;
                        }
                    }

                    if (invalidPath != null)
                        return "Provided DLL Path " + invalidPath + " is invalid.";
                }
            }

            if (!inputData.analyzeAllLibs && inputData.libraryFilesList == null)
                return "Libraries not provided for analysis.";

            if (inputData.toolChain == null || inputData.toolChainPath == null)
                return "Invalid ToolChain.";

            Vector<ToolChain> toolChains = CompatibilityAnalyserEngine.getToolChains();

            int index = -1;
            for (int i = 0; i < toolChains.size(); i++) {
                if (toolChains.elementAt(i).getName().equals(inputData.toolChain)) {
                    index = i;
                    break;
                }
            }
            if (index == -1)
                return "Provided ToolChain is not installed.";

        }
        return null;
    }

    private boolean isValidPath(String path) {
        File file = new File(path);

        if (!file.exists())
            return false;
        else if (!file.isDirectory())
            return false;

        return true;
    }
}