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

Java tutorial

Introduction

Here is the source code for com.nokia.s60tools.compatibilityanalyser.ui.wizards.LibraryFilesPage.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.io.FilenameFilter;
import java.lang.reflect.InvocationTargetException;
import java.util.ArrayList;
import java.util.Collections;
import java.util.Vector;

import org.eclipse.core.runtime.IProgressMonitor;
import org.eclipse.jface.dialogs.DialogPage;
import org.eclipse.jface.dialogs.MessageDialog;
import org.eclipse.jface.dialogs.ProgressMonitorDialog;
import org.eclipse.jface.operation.IRunnableWithProgress;
import org.eclipse.swt.SWT;
import org.eclipse.swt.events.ModifyEvent;
import org.eclipse.swt.events.ModifyListener;
import org.eclipse.swt.events.SelectionEvent;
import org.eclipse.swt.events.SelectionListener;
import org.eclipse.swt.graphics.Color;
import org.eclipse.swt.graphics.Font;
import org.eclipse.swt.layout.GridData;
import org.eclipse.swt.layout.GridLayout;
import org.eclipse.swt.widgets.Button;
import org.eclipse.swt.widgets.Combo;
import org.eclipse.swt.widgets.Composite;
import org.eclipse.swt.widgets.DirectoryDialog;
import org.eclipse.swt.widgets.Display;
import org.eclipse.swt.widgets.Group;
import org.eclipse.swt.widgets.Label;
import org.eclipse.swt.widgets.List;
import org.eclipse.swt.widgets.Shell;
import org.eclipse.swt.widgets.TabFolder;
import org.eclipse.swt.widgets.TabItem;
import org.eclipse.swt.widgets.Table;
import org.eclipse.swt.widgets.TableColumn;
import org.eclipse.swt.widgets.TableItem;
import org.eclipse.ui.IWorkbench;
import org.eclipse.ui.IWorkbenchWindow;
import org.eclipse.ui.PlatformUI;

import com.nokia.s60tools.compatibilityanalyser.data.LastUsedKnownissues;
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.resources.Messages;
import com.nokia.s60tools.compatibilityanalyser.ui.dialogs.ShowFilesListDialog;
import com.nokia.s60tools.compatibilityanalyser.utils.FileMethods;
import com.nokia.s60tools.compatibilityanalyser.utils.HelpContextIDs;
import com.nokia.s60tools.ui.wizards.S60ToolsWizardPage;

public class LibraryFilesPage extends S60ToolsWizardPage
        implements SelectionListener, ModifyListener, FeedbackHandler {

    private Composite composite;
    private Group dirGroup;

    //Select default build target
    private Button default_build_target_radioBtn;

    //Select build target
    Button buildtarget_radioBtn;
    Button userDirs_radioBtn;
    List buildTarget_list;

    //or Select directory
    private TabFolder dllPaths_Folder;
    private TabItem dsoPaths_tab;
    private TabItem dllDir_tab;
    Table userDsoPath_list;
    Table userDllPath_list;
    private Button addDllDir_Btn;
    private Button removeDllDir_Btn;
    private Button removeAllDllDir_Btn;
    private Button addDsoDir_Btn;
    private Button removeDsoDir_Btn;
    private Button removeAllDsoDir_Btn;

    //Analyse all files radio button
    Button analyseAllFiles_radioBtn;
    //Analyse only selected files radio button
    private Button analyseSelected_radioBtn;

    //List to add dso files
    Table dsoFiles_list;

    //Add, Remove, Remove all, Remove non existing buttons
    private Button addDso_Btn;
    private Button removeDso_Btn;
    private Button removeAllDso_Btn;
    private Button removeNonExistingDso_Btn;

    //Drop down for tool chain selection
    private Combo toolChain_dropdown;

    //Dialog to select the dso files
    private ShowFilesListDialog addDialog;

    //Invalid dso files in the list will shown in red color
    Font invalidFile_Font = new Font(Display.getCurrent(), "Tahoma", 8, SWT.ITALIC);
    Color invalidColor = new Color(Display.getDefault(), 255, 0, 0);

    ToolChain selectedToolChain;
    private Vector<ToolChain> toolChains;
    private ArrayList<String> filesNamesList;
    String[] selectedPlatform;
    String releaseRoot;
    private String absolutePath;
    private ProductSdkData currentSdk;
    private int invalidLibsCount;

    private ArrayList<String> displayFiles;
    private ArrayList<String> children;
    private ArrayList<String> subChildren;
    boolean isMonitorCancelled;
    protected String[] allLibsPaths;

    public LibraryFilesPage(CompatibilityAnalyserEngine engine) {
        super(Messages.getString("LibraryFilesPage.WindowTitle")); //$NON-NLS-1$
        setTitle(Messages.getString("LibraryFilesPage.PageTitle")); //$NON-NLS-1$

        setDescription(Messages.getString("LibraryFilesPage.Descreption")); //$NON-NLS-1$
        setPageComplete(false);
        currentSdk = engine.getCurrentSdkData();
    }

    public void recalculateButtonStates() {
    }

    @Override
    public void setInitialFocus() {
    }

    /**
     * Constructs the UI elements of the page on given composite
     */
    public void createControl(Composite parent) {

        composite = new Composite(parent, SWT.NULL);
        composite.setLayout(new GridLayout(1, false));

        createRootPathGroup();
        createLibrariesSelection();

        Label toolChainLabel = new Label(composite, SWT.NONE);
        toolChainLabel.setText(Messages.getString("LibraryFilesPage.SelectToolChains")); //$NON-NLS-1$

        toolChain_dropdown = new Combo(composite, SWT.BORDER | SWT.DROP_DOWN);
        GridData gd = new GridData(GridData.FILL_HORIZONTAL);
        gd.horizontalSpan = 2;
        toolChain_dropdown.setLayoutData(gd);
        toolChain_dropdown.setEnabled(true);

        toolChains = CompatibilityAnalyserEngine.getToolChains();
        int size = toolChains.size();

        if (size > 0) {
            for (int i = 0; i < size; i++) {
                ToolChain t = toolChains.elementAt(i);
                toolChain_dropdown.add(t.getDescription(), i);
            }
            toolChain_dropdown.select(0);
            selectedToolChain = toolChains.elementAt(0);
        }

        if (currentSdk.toolChain != null) {
            int index = -1;
            for (int i = 0; i < toolChains.size(); i++) {
                if (toolChains.elementAt(i).getName().equals(currentSdk.toolChain)) {
                    index = i;
                    break;
                }
            }
            if (index != -1) {
                toolChain_dropdown.select(index);
                selectedToolChain = toolChains.elementAt(index);
            } else {
                toolChain_dropdown.setText(currentSdk.toolChain);
            }
        }
        toolChain_dropdown.addModifyListener(this);

        //For the first time disable the dso/dll path tabs
        GridData data2 = (GridData) dllPaths_Folder.getLayoutData();
        data2.exclude = !userDirs_radioBtn.getSelection();
        dllPaths_Folder.setVisible(userDirs_radioBtn.getSelection());

        GridData data3 = (GridData) buildTarget_list.getLayoutData();
        data3.exclude = !buildtarget_radioBtn.getSelection();
        buildTarget_list.setVisible(buildtarget_radioBtn.getSelection());

        setHelp();
        setControl(composite);
    }

    /**
     * Checks the values provided by user for various fields and validates them
     * If any invalid values are given, this sets an error message and return false.
     * Otherwise it return true
     */
    public boolean canFlipToNextPage() {
        this.setErrorMessage(null);
        this.setMessage(null);

        if (buildtarget_radioBtn.getSelection() && buildTarget_list.getItemCount() == 0) {
            this.setErrorMessage(Messages.getString("LibraryFilesPage.40")); //$NON-NLS-1$
            return false;
        }
        if (analyseSelected_radioBtn.getSelection()) {
            addDso_Btn
                    .setEnabled(default_build_target_radioBtn.getSelection() || buildtarget_radioBtn.getSelection()
                            || (userDirs_radioBtn.getSelection() && userDsoPath_list.getItemCount() != 0));

            if (analyseSelected_radioBtn.getSelection() && dsoFiles_list.getItemCount() > 0)
                validateFileSet();

            if (dsoFiles_list.getItemCount() == 0) {
                removeDso_Btn.setEnabled(false);
                removeAllDso_Btn.setEnabled(false);
                removeNonExistingDso_Btn.setEnabled(false);
                this.setErrorMessage(Messages.getString("LibraryFilesPage.NoLibsSelected")); //$NON-NLS-1$
                return false;
            } else if (dsoFiles_list.getItemCount() > 0) {
                removeDso_Btn.setEnabled(true);
                removeAllDso_Btn.setEnabled(true);

                if (invalidLibsCount > 0) {
                    removeNonExistingDso_Btn.setEnabled(true);

                    if (invalidLibsCount == dsoFiles_list.getItemCount()) {
                        this.setErrorMessage(
                                "None of the selected Libraries exist in the provided header directories."); //$NON-NLS-1$
                        return false;
                    } else if (invalidLibsCount > 0)
                        this.setMessage(
                                "Files shown in Red color do not exist in any of the selected directories \n So they will not be analysed.", //$NON-NLS-1$
                                DialogPage.WARNING); //)
                } else
                    removeNonExistingDso_Btn.setEnabled(false);
            }
            if (userDirs_radioBtn.getSelection() && userDsoPath_list.getItemCount() == 0) {
                this.setErrorMessage(Messages.getString("LibraryFilesPage.RootDirisNull")); //$NON-NLS-1$
                return false;
            }
            if (userDirs_radioBtn.getSelection() && userDllPath_list.getItemCount() == 0) {
                this.setErrorMessage(Messages.getString("LibraryFilesPage.DllRootDirisNull")); //$NON-NLS-1$
                return false;
            }
            if (userDirs_radioBtn.getSelection() && getSelectedDSOPaths().length == 0) {
                this.setErrorMessage("Provided DSO paths are invalid. Please provide valid paths.");
                return false;
            }
            if (userDirs_radioBtn.getSelection() && getSelectedDLLPaths().length == 0) {
                this.setErrorMessage("Provided DLL paths are invalid. Please provide valid paths.");
                return false;
            }
        } else if (analyseAllFiles_radioBtn.getSelection() && userDirs_radioBtn.getSelection()
                && userDsoPath_list.getItemCount() == 0) {
            setErrorMessage(Messages.getString("LibraryFilesPage.RootDirisNull"));
            return false;
        } else if (analyseAllFiles_radioBtn.getSelection() && userDirs_radioBtn.getSelection()
                && userDllPath_list.getItemCount() == 0) {
            setErrorMessage(Messages.getString("LibraryFilesPage.DllRootDirisNull"));
            return false;
        } else if (analyseAllFiles_radioBtn.getSelection() && userDirs_radioBtn.getSelection()
                && getSelectedDSOPaths().length == 0) {
            setErrorMessage("Provided DSO paths are invalid. Please provide valid paths.");
            return false;
        } else if (analyseAllFiles_radioBtn.getSelection() && userDirs_radioBtn.getSelection()
                && getSelectedDLLPaths().length == 0) {
            setErrorMessage("Provided DLL paths are invalid. Please provide valid paths.");
            return false;
        }

        if (toolChain_dropdown.getItemCount() == 0) {
            this.setErrorMessage(Messages.getString("LibraryFilesPage.NoToolchains")); //$NON-NLS-1$
            return false;
        } else if (toolChain_dropdown.indexOf(toolChain_dropdown.getText()) == -1) {
            this.setErrorMessage("Given ToolChain is not installed.");
            return false;
        }

        return true;
    }

    private void createRootPathGroup() {
        dirGroup = new Group(composite, SWT.NONE);
        dirGroup.setLayout(new GridLayout(1, false));
        dirGroup.setLayoutData(new GridData(GridData.FILL_HORIZONTAL));
        dirGroup.setText(Messages.getString("LibraryFilesPage.RootDirOfLibs")); //$NON-NLS-1$

        default_build_target_radioBtn = new Button(dirGroup, SWT.RADIO);
        default_build_target_radioBtn.setText(Messages.getString("LibraryFilesPage.DefaultBuildTarget")); //$NON-NLS-1$
        default_build_target_radioBtn.setToolTipText(Messages.getString("LibraryFilesPage.tooltip_default_target")); //$NON-NLS-1$
        default_build_target_radioBtn.setSelection(currentSdk.default_platfrom_selection);
        default_build_target_radioBtn.setLayoutData(new GridData(GridData.FILL_HORIZONTAL));
        default_build_target_radioBtn.addSelectionListener(this);

        buildtarget_radioBtn = new Button(dirGroup, SWT.RADIO);
        buildtarget_radioBtn.setText(Messages.getString("LibraryFilesPage.SelectBuildTarget")); //$NON-NLS-1$
        buildtarget_radioBtn.setToolTipText(Messages.getString("LibraryFilesPage.tooltip_target")); //$NON-NLS-1$
        buildtarget_radioBtn.setSelection(currentSdk.platfromSelection);
        buildtarget_radioBtn.setLayoutData(new GridData(GridData.FILL_HORIZONTAL));

        buildTarget_list = new List(dirGroup, SWT.MULTI | SWT.BORDER | SWT.V_SCROLL);
        GridData listGD = new GridData(GridData.FILL_HORIZONTAL);
        listGD.heightHint = 50;
        //buildTarget_list.setEnabled(currentSdk.platfromSelection);
        buildTarget_list.setLayoutData(listGD);
        buildTarget_list.addSelectionListener(this);

        userDirs_radioBtn = new Button(dirGroup, SWT.RADIO);
        userDirs_radioBtn.setText(Messages.getString("LibraryFilesPage.AddFilesBelowDirectory")); //$NON-NLS-1$
        userDirs_radioBtn.setToolTipText(Messages.getString("LibraryFilesPage.tooltip_UserDirectory")); //$NON-NLS-1$
        userDirs_radioBtn.setSelection(currentSdk.selected_library_dirs);
        userDirs_radioBtn.setLayoutData(new GridData(GridData.FILL_HORIZONTAL));
        userDirs_radioBtn.addSelectionListener(this);

        dllPaths_Folder = new TabFolder(dirGroup, SWT.NONE);
        dllPaths_Folder.setLayout(new GridLayout(2, false));
        dllPaths_Folder.setLayoutData(new GridData(GridData.FILL_HORIZONTAL));

        dsoPaths_tab = new TabItem(dllPaths_Folder, SWT.NONE);
        dsoPaths_tab.setText("DSO Paths");

        Composite dsoComposite = new Composite(dllPaths_Folder, SWT.NONE);
        dsoComposite.setLayout(new GridLayout(2, false));
        dsoComposite.setLayoutData(new GridData(GridData.FILL_HORIZONTAL));

        userDsoPath_list = new Table(dsoComposite, SWT.BORDER | SWT.MULTI | SWT.FULL_SELECTION);
        GridData comboGD = new GridData(GridData.FILL_HORIZONTAL);
        comboGD.verticalSpan = 4;
        comboGD.heightHint = 100;

        TableColumn dsoColumn = new TableColumn(userDsoPath_list, SWT.FULL_SELECTION);
        dsoColumn.setText("DSO Paths");

        LastUsedKnownissues data = new LastUsedKnownissues();
        String[] lastUsedDsoDirs = data.getPreviousValues(LastUsedKnownissues.ValueTypes.LIBRARY_DIRECTORIES);

        if (lastUsedDsoDirs != null) {
            for (String path : lastUsedDsoDirs) {
                TableItem item = new TableItem(userDsoPath_list, SWT.NONE);
                item.setText(0, path);

                if (!(new File(path).exists())) {
                    changeColorFont(item);
                }
            }
            userDsoPath_list.select(0);
        }

        if (currentSdk.selected_library_dirs) {
            if (currentSdk.currentLibsDir != null) {
                userDsoPath_list.removeAll();
                for (String path : currentSdk.currentLibsDir) {
                    TableItem item = new TableItem(userDsoPath_list, SWT.NONE);
                    item.setText(0, path);
                    if (!(new File(path).exists())) {
                        changeColorFont(item);
                    }
                }
                userDsoPath_list.select(0);
            }
        }
        userDsoPath_list.setLayoutData(comboGD);
        dsoColumn.setWidth(300);

        GridData btnData1 = new GridData(GridData.VERTICAL_ALIGN_END);
        btnData1.widthHint = 100;

        addDsoDir_Btn = new Button(dsoComposite, SWT.PUSH);
        addDsoDir_Btn.setText(Messages.getString("LibraryFilesPage.Browse")); //$NON-NLS-1$
        addDsoDir_Btn.setLayoutData(btnData1);
        addDsoDir_Btn.addSelectionListener(this);

        removeDsoDir_Btn = new Button(dsoComposite, SWT.PUSH);
        removeDsoDir_Btn.setText("Remove");
        removeDsoDir_Btn.setEnabled(userDirs_radioBtn.getSelection());
        removeDsoDir_Btn.setLayoutData(btnData1);
        removeDsoDir_Btn.addSelectionListener(this);

        removeAllDsoDir_Btn = new Button(dsoComposite, SWT.PUSH);
        removeAllDsoDir_Btn.setText("Remove all");
        removeAllDsoDir_Btn.setEnabled(userDirs_radioBtn.getSelection());
        removeAllDsoDir_Btn.setLayoutData(btnData1);
        removeAllDsoDir_Btn.addSelectionListener(this);

        dsoPaths_tab.setControl(dsoComposite);

        dllDir_tab = new TabItem(dllPaths_Folder, SWT.NONE);
        dllDir_tab.setText("DLL Paths");

        Composite dllComposite = new Composite(dllPaths_Folder, SWT.NONE);
        dllComposite.setLayout(new GridLayout(2, false));
        dllComposite.setLayoutData(new GridData(GridData.FILL_HORIZONTAL));

        userDllPath_list = new Table(dllComposite, SWT.BORDER | SWT.MULTI | SWT.FULL_SELECTION);
        GridData dllGD = new GridData(GridData.FILL_HORIZONTAL);
        dllGD.verticalSpan = 4;
        dllGD.heightHint = 100;

        TableColumn dllColumn = new TableColumn(userDllPath_list, SWT.FULL_SELECTION);
        dllColumn.setText("DLL Paths");

        dllPaths_Folder.pack();

        String[] lastUsedDllDirs = data.getPreviousValues(LastUsedKnownissues.ValueTypes.DLL_DIRECTORIES);

        if (lastUsedDllDirs != null) {
            for (String path : lastUsedDllDirs) {
                TableItem item = new TableItem(userDllPath_list, SWT.NONE);
                item.setText(0, path);
                if (!(new File(path).exists())) {
                    changeColorFont(item);
                }
            }
            userDllPath_list.select(0);
        }
        if (currentSdk.selected_library_dirs) {
            if (currentSdk.currentDllDir != null) {
                userDllPath_list.removeAll();
                for (String path : currentSdk.currentDllDir) {
                    TableItem item = new TableItem(userDllPath_list, SWT.NONE);
                    item.setText(0, path);
                    if (!(new File(path).exists())) {
                        changeColorFont(item);
                    }
                }
                userDllPath_list.select(0);
            }
        }

        dllColumn.setWidth(300);

        userDllPath_list.setLayoutData(dllGD);

        GridData btnData2 = new GridData(GridData.HORIZONTAL_ALIGN_END);
        btnData2.widthHint = 100;

        addDllDir_Btn = new Button(dllComposite, SWT.PUSH);
        addDllDir_Btn.setText(Messages.getString("LibraryFilesPage.Browse")); //$NON-NLS-1$
        addDllDir_Btn.setLayoutData(btnData2);
        addDllDir_Btn.addSelectionListener(this);

        removeDllDir_Btn = new Button(dllComposite, SWT.PUSH);
        removeDllDir_Btn.setText("Remove");
        removeDllDir_Btn.setEnabled(userDirs_radioBtn.getSelection());
        removeDllDir_Btn.setLayoutData(btnData2);
        removeDllDir_Btn.addSelectionListener(this);

        removeAllDllDir_Btn = new Button(dllComposite, SWT.PUSH);
        removeAllDllDir_Btn.setText("Remove all");
        removeAllDllDir_Btn.setEnabled(userDirs_radioBtn.getSelection());
        removeAllDllDir_Btn.setLayoutData(btnData2);
        removeAllDllDir_Btn.addSelectionListener(this);

        //dsoColumn.pack();
        //dllColumn.pack();
        //dsoColumn.setWidth(300);
        //dllColumn.setWidth(300);
        userDllPath_list.pack();
        userDsoPath_list.pack();
        dsoComposite.pack();
        dllComposite.pack();

        dllDir_tab.setControl(dllComposite);

    }

    private void createLibrariesSelection() {
        Group grp = new Group(composite, SWT.NONE);
        grp.setLayout(new GridLayout(2, false));
        grp.setLayoutData(new GridData(GridData.FILL_HORIZONTAL));
        grp.setText(Messages.getString("LibraryFilesPage.GrpName_LibrarySelection")); //$NON-NLS-1$

        analyseAllFiles_radioBtn = new Button(grp, SWT.RADIO);
        GridData buttonGD = new GridData(GridData.FILL_HORIZONTAL);
        buttonGD.horizontalSpan = 2;
        analyseAllFiles_radioBtn.setText(Messages.getString("LibraryFilesPage.name_allfiles")); //$NON-NLS-1$
        analyseAllFiles_radioBtn.setToolTipText(Messages.getString("LibraryFilesPage.tooltip_allfiles")); //$NON-NLS-1$
        analyseAllFiles_radioBtn.setSelection(currentSdk.analyzeAllLibs);
        analyseAllFiles_radioBtn.setLayoutData(buttonGD);

        analyseSelected_radioBtn = new Button(grp, SWT.RADIO);
        analyseSelected_radioBtn.setText(Messages.getString("LibraryFilesPage.18")); //$NON-NLS-1$
        analyseSelected_radioBtn.setToolTipText(Messages.getString("LibraryFilesPage.19")); //$NON-NLS-1$
        analyseSelected_radioBtn.setSelection(!currentSdk.analyzeAllLibs);
        buttonGD = new GridData(GridData.FILL_HORIZONTAL);
        buttonGD.horizontalSpan = 2;
        analyseSelected_radioBtn.setLayoutData(buttonGD);
        analyseSelected_radioBtn.addSelectionListener(this);

        dsoFiles_list = new Table(grp, SWT.MULTI | SWT.BORDER | SWT.V_SCROLL);
        GridData listGD = new GridData(
                GridData.FILL_BOTH | GridData.HORIZONTAL_ALIGN_FILL | GridData.VERTICAL_ALIGN_FILL);
        listGD.verticalSpan = 4;
        listGD.heightHint = 100;
        dsoFiles_list.setEnabled(analyseSelected_radioBtn.getSelection());
        dsoFiles_list.setLayoutData(listGD);

        if (currentSdk.libraryFilesList != null) {
            for (String s : currentSdk.libraryFilesList) {
                TableItem item = new TableItem(dsoFiles_list, SWT.NONE);
                item.setText(s);
            }
        }

        addDso_Btn = new Button(grp, SWT.PUSH);
        listGD = new GridData(GridData.HORIZONTAL_ALIGN_FILL | GridData.VERTICAL_ALIGN_BEGINNING);
        addDso_Btn.setText(Messages.getString("LibraryFilesPage.Add")); //$NON-NLS-1$
        addDso_Btn.setLayoutData(listGD);
        addDso_Btn.setEnabled(analyseSelected_radioBtn.getSelection());
        addDso_Btn.addSelectionListener(this);

        removeDso_Btn = new Button(grp, SWT.PUSH);
        listGD = new GridData(GridData.HORIZONTAL_ALIGN_FILL | GridData.VERTICAL_ALIGN_BEGINNING);
        removeDso_Btn.setText(Messages.getString("LibraryFilesPage.Remove")); //$NON-NLS-1$
        removeDso_Btn.setLayoutData(listGD);
        removeDso_Btn.setEnabled(analyseSelected_radioBtn.getSelection() && dsoFiles_list.getItemCount() > 0);
        removeDso_Btn.addSelectionListener(this);

        removeAllDso_Btn = new Button(grp, SWT.PUSH);
        listGD = new GridData(GridData.HORIZONTAL_ALIGN_FILL | GridData.VERTICAL_ALIGN_BEGINNING);
        removeAllDso_Btn.setText(Messages.getString("LibraryFilesPage.RemoveAll")); //$NON-NLS-1$
        removeAllDso_Btn.setLayoutData(listGD);
        removeAllDso_Btn.setEnabled(analyseSelected_radioBtn.getSelection() && dsoFiles_list.getItemCount() > 0);
        removeAllDso_Btn.addSelectionListener(this);

        removeNonExistingDso_Btn = new Button(grp, SWT.PUSH);
        listGD = new GridData(GridData.HORIZONTAL_ALIGN_FILL | GridData.VERTICAL_ALIGN_BEGINNING);
        removeNonExistingDso_Btn.setText("Remove non-existing"); //$NON-NLS-1$
        removeNonExistingDso_Btn.setLayoutData(listGD);
        removeNonExistingDso_Btn.setEnabled(false);
        removeNonExistingDso_Btn.addSelectionListener(this);
    }

    public void widgetDefaultSelected(SelectionEvent e) {
    }

    public void widgetSelected(SelectionEvent e) {
        if (e.widget == userDirs_radioBtn || e.widget == default_build_target_radioBtn) {
            removeDsoDir_Btn.setEnabled(userDirs_radioBtn.getSelection() && userDsoPath_list.getItemCount() != 0);
            removeAllDsoDir_Btn
                    .setEnabled(userDirs_radioBtn.getSelection() && userDsoPath_list.getItemCount() != 0);

            removeDllDir_Btn.setEnabled(userDirs_radioBtn.getSelection() && userDllPath_list.getItemCount() != 0);
            removeAllDllDir_Btn
                    .setEnabled(userDirs_radioBtn.getSelection() && userDllPath_list.getItemCount() != 0);

            GridData data = (GridData) buildTarget_list.getLayoutData();
            data.exclude = !buildtarget_radioBtn.getSelection();
            buildTarget_list.setVisible(buildtarget_radioBtn.getSelection());

            GridData data2 = (GridData) dllPaths_Folder.getLayoutData();
            data2.exclude = !userDirs_radioBtn.getSelection();
            dllPaths_Folder.setVisible(userDirs_radioBtn.getSelection());

            composite.getParent().setSize(composite.getParent().getSize().x + 1, composite.getParent().getSize().y);

            this.getContainer().updateButtons();
        } else if (e.widget == addDsoDir_Btn) {
            DirectoryDialog dirDialog = new DirectoryDialog(this.getShell());
            dirDialog.setFilterPath(releaseRoot);
            String newDir = dirDialog.open();
            if (newDir != null) {
                new TableItem(userDsoPath_list, SWT.NONE).setText(0, newDir);
                userDsoPath_list.select(0);
            }
            removeDsoDir_Btn.setEnabled(userDsoPath_list.getItemCount() != 0);
            removeAllDsoDir_Btn.setEnabled(userDsoPath_list.getItemCount() != 0);
            this.getContainer().updateButtons();
        } else if (e.widget == addDllDir_Btn) {
            DirectoryDialog dirDialog = new DirectoryDialog(this.getShell());
            dirDialog.setFilterPath(releaseRoot);
            String newDir = dirDialog.open();
            if (newDir != null) {
                new TableItem(userDllPath_list, SWT.NONE).setText(0, newDir);
                userDllPath_list.select(0);
            }
            removeDllDir_Btn.setEnabled(userDllPath_list.getItemCount() != 0);
            removeAllDllDir_Btn.setEnabled(userDllPath_list.getItemCount() != 0);
            this.getContainer().updateButtons();
        } else if (e.widget == buildTarget_list) {
            selectedPlatform = buildTarget_list.getSelection();
        }
        if (e.widget == analyseSelected_radioBtn) {
            dsoFiles_list.setEnabled(analyseSelected_radioBtn.getSelection());
            addDso_Btn.setEnabled(analyseSelected_radioBtn.getSelection() && userDsoPath_list.getItemCount() != 0);
            removeDso_Btn
                    .setEnabled(analyseSelected_radioBtn.getSelection() && userDsoPath_list.getItemCount() != 0);
            removeAllDso_Btn
                    .setEnabled(analyseSelected_radioBtn.getSelection() && userDsoPath_list.getItemCount() != 0);
            removeNonExistingDso_Btn
                    .setEnabled(analyseSelected_radioBtn.getSelection() && userDsoPath_list.getItemCount() != 0);
            this.getContainer().updateButtons();
        }
        if (e.widget == addDso_Btn) {
            filesNamesList = new ArrayList<String>();
            displayFiles = new ArrayList<String>();
            children = new ArrayList<String>();
            subChildren = new ArrayList<String>();
            isMonitorCancelled = false;

            if (userDirs_radioBtn.getSelection() && userDsoPath_list.getItemCount() == 1) {
                absolutePath = userDsoPath_list.getItem(0).getText(0);
                absolutePath = FileMethods.convertForwardToBackwardSlashes(absolutePath);

                addDialog = new ShowFilesListDialog(Display.getCurrent().getActiveShell(), dsoFiles_list, this,
                        absolutePath, false);

                IRunnableWithProgress op = new IRunnableWithProgress() {
                    public void run(IProgressMonitor monitor) {
                        try {
                            monitor.beginTask("Getting files from " + absolutePath, 10);
                            getFiles(absolutePath, monitor);
                            monitor.worked(5);
                            getFilesFromSubDirs(absolutePath, monitor);
                            monitor.done();
                        } catch (Exception e1) {
                            e1.printStackTrace();
                        }
                    }
                };
                try {
                    IWorkbench wb = PlatformUI.getWorkbench();
                    IWorkbenchWindow win = wb.getActiveWorkbenchWindow();
                    Shell shell = win != null ? win.getShell() : null;
                    ProgressMonitorDialog progDlg = new ProgressMonitorDialog(shell);
                    progDlg.run(true, true, op);
                    progDlg.setBlockOnOpen(true);
                } catch (InvocationTargetException err) {
                    err.printStackTrace();
                } catch (InterruptedException err) {
                    err.printStackTrace();
                }

            } else if (userDirs_radioBtn.getSelection() && userDsoPath_list.getItemCount() > 1) {
                addDialog = new ShowFilesListDialog(Display.getCurrent().getActiveShell(), dsoFiles_list, this, "",
                        false);

                String[] paths = new String[userDsoPath_list.getItems().length];
                for (int i = 0; i < userDsoPath_list.getItems().length; i++)
                    paths[i] = userDsoPath_list.getItem(i).getText(0);
                allLibsPaths = paths;

                IRunnableWithProgress op = new IRunnableWithProgress() {
                    public void run(IProgressMonitor monitor) {
                        try {
                            int i = 1;
                            for (String path : allLibsPaths) {
                                absolutePath = FileMethods.convertForwardToBackwardSlashes(path);
                                monitor.beginTask("Getting files from " + absolutePath, allLibsPaths.length);
                                getFiles(absolutePath, monitor);
                                getFilesFromSubDirs(absolutePath, monitor);
                                monitor.worked(i++);
                            }
                            monitor.done();

                        } catch (Exception e1) {
                            e1.printStackTrace();
                        }
                    }
                };

                try {
                    IWorkbench wb = PlatformUI.getWorkbench();
                    IWorkbenchWindow win = wb.getActiveWorkbenchWindow();
                    Shell shell = win != null ? win.getShell() : null;
                    ProgressMonitorDialog progDlg = new ProgressMonitorDialog(shell);
                    progDlg.run(true, true, op);
                    progDlg.setBlockOnOpen(true);
                } catch (InvocationTargetException err) {
                    err.printStackTrace();
                } catch (InterruptedException err) {
                    err.printStackTrace();
                }
            } else if (buildtarget_radioBtn.getSelection()) {
                if (releaseRoot != null) {
                    addDialog = new ShowFilesListDialog(Display.getCurrent().getActiveShell(), dsoFiles_list, this,
                            "", false);
                    String[] paths = new String[buildTarget_list.getSelectionCount()];

                    for (int i = 0; i < buildTarget_list.getSelectionCount(); i++) {
                        paths[i] = FileMethods.appendPathSeparator(releaseRoot) + buildTarget_list.getSelection()[i]
                                + File.separator + Messages.getString("LibraryFilesPage.lib"); //$NON-NLS-1$ //$NON-NLS-2$;
                    }

                    allLibsPaths = paths;

                    IRunnableWithProgress op = new IRunnableWithProgress() {
                        public void run(IProgressMonitor monitor) {
                            try {
                                int i = 1;
                                for (String path : allLibsPaths) {
                                    absolutePath = FileMethods.convertForwardToBackwardSlashes(path);
                                    monitor.beginTask("Getting files from " + absolutePath, allLibsPaths.length);
                                    getFiles(absolutePath, monitor);
                                    getFilesFromSubDirs(absolutePath, monitor);
                                    monitor.worked(i++);
                                }
                                monitor.done();

                            } catch (Exception e1) {
                                e1.printStackTrace();
                            }
                        }
                    };

                    try {
                        IWorkbench wb = PlatformUI.getWorkbench();
                        IWorkbenchWindow win = wb.getActiveWorkbenchWindow();
                        Shell shell = win != null ? win.getShell() : null;
                        ProgressMonitorDialog progDlg = new ProgressMonitorDialog(shell);
                        progDlg.run(true, true, op);
                        progDlg.setBlockOnOpen(true);
                    } catch (InvocationTargetException err) {
                        err.printStackTrace();
                    } catch (InterruptedException err) {
                        err.printStackTrace();
                    }
                }

            } else if (default_build_target_radioBtn.getSelection()) {
                String buildTarget = CompatibilityAnalyserEngine.getDefaultBuildPlatform(releaseRoot,
                        currentSdk.productSdkVersion);

                absolutePath = FileMethods.appendPathSeparator(releaseRoot) + buildTarget + File.separator
                        + Messages.getString("LibraryFilesPage.lib"); //$NON-NLS-1$ //$NON-NLS-2$
                absolutePath = FileMethods.convertForwardToBackwardSlashes(absolutePath);
                addDialog = new ShowFilesListDialog(Display.getCurrent().getActiveShell(), dsoFiles_list, this,
                        absolutePath, false);

                IRunnableWithProgress op = new IRunnableWithProgress() {
                    public void run(IProgressMonitor monitor) {
                        try {
                            monitor.beginTask("Getting files from " + absolutePath, 10);
                            getFiles(absolutePath, monitor);
                            monitor.worked(5);
                            getFilesFromSubDirs(absolutePath, monitor);
                            monitor.done();
                        } catch (Exception e1) {
                            e1.printStackTrace();
                        }
                    }
                };
                try {
                    IWorkbench wb = PlatformUI.getWorkbench();
                    IWorkbenchWindow win = wb.getActiveWorkbenchWindow();
                    Shell shell = win != null ? win.getShell() : null;
                    ProgressMonitorDialog progDlg = new ProgressMonitorDialog(shell);
                    progDlg.run(true, true, op);
                    progDlg.setBlockOnOpen(true);
                } catch (InvocationTargetException err) {
                    err.printStackTrace();
                } catch (InterruptedException err) {
                    err.printStackTrace();
                }

            }

            if (!isMonitorCancelled) {
                if (filesNamesList.size() != dsoFiles_list.getItemCount())
                    for (String name : filesNamesList) {
                        if (!isPreviouslySelected(name))
                            displayFiles.add(name);
                        else {
                            if (subChildren.contains(name))
                                subChildren.remove(name);
                            if (children.contains(name))
                                children.remove(name);
                        }
                    }
                Collections.sort(displayFiles);
                addDialog.children = children;
                addDialog.subChildren = subChildren;

                if (displayFiles.size() == 0 && filesNamesList.size() != 0) {
                    Runnable showMessageRunnable = new Runnable() {
                        public void run() {
                            MessageDialog.openInformation(Display.getCurrent().getActiveShell(),
                                    Messages.getString("HeaderFilesPage.CompatibilityAnalyser"), //$NON-NLS-1$
                                    "All libraries in the root directory are already selected"); //$NON-NLS-1$
                        }
                    };
                    Display.getDefault().asyncExec(showMessageRunnable);
                } else if (filesNamesList.size() == 0) {
                    Runnable showMessageRunnable = new Runnable() {
                        public void run() {
                            MessageDialog.openInformation(Display.getCurrent().getActiveShell(),
                                    Messages.getString("HeaderFilesPage.CompatibilityAnalyser"), //$NON-NLS-1$
                                    "No libraries exist under the given directory path"); //$NON-NLS-1$
                        }
                    };
                    Display.getDefault().asyncExec(showMessageRunnable);
                } else {
                    addDialog.open();
                    addDialog.filesList.setItems(displayFiles.toArray(new String[displayFiles.size()]));
                    addDialog.filesList.select(0);
                    addDialog.fileNamesList = addDialog.filesList.getItems();
                }

            }
            this.getContainer().updateButtons();
        } else if (e.widget == removeDso_Btn) {
            dsoFiles_list.remove(dsoFiles_list.getSelectionIndices());
            dsoFiles_list.select(0);
            this.getContainer().updateButtons();
        } else if (e.widget == removeAllDso_Btn) {
            dsoFiles_list.removeAll();
            this.getContainer().updateButtons();
        } else if (e.widget == removeNonExistingDso_Btn) {
            int[] invalidIndices = new int[invalidLibsCount];
            int j = 0;

            for (int i = 0; i < dsoFiles_list.getItemCount(); i++) {
                System.out.println("Item Color is " + dsoFiles_list.getItem(i).getForeground()
                        + " And InvalidColor is " + invalidColor);
                if (dsoFiles_list.getItem(i).getForeground().equals(invalidColor)) {
                    invalidIndices[j] = i;
                    j++;
                }
            }
            dsoFiles_list.remove(invalidIndices);
            invalidLibsCount = 0;

            this.getContainer().updateButtons();
        } else if (e.widget == removeDsoDir_Btn) {
            userDsoPath_list.remove(userDsoPath_list.getSelectionIndices());
            userDsoPath_list.select(0);
            removeDsoDir_Btn.setEnabled(userDsoPath_list.getItemCount() != 0);
            removeAllDsoDir_Btn.setEnabled(userDsoPath_list.getItemCount() != 0);
            this.getContainer().updateButtons();
        } else if (e.widget == removeAllDsoDir_Btn) {
            userDsoPath_list.removeAll();
            removeDsoDir_Btn.setEnabled(userDsoPath_list.getItemCount() != 0);
            removeAllDsoDir_Btn.setEnabled(userDsoPath_list.getItemCount() != 0);
            this.getContainer().updateButtons();
        } else if (e.widget == removeDllDir_Btn) {
            userDllPath_list.remove(userDllPath_list.getSelectionIndices());
            userDllPath_list.select(0);
            removeDllDir_Btn.setEnabled(userDllPath_list.getItemCount() != 0);
            removeAllDllDir_Btn.setEnabled(userDllPath_list.getItemCount() != 0);
            this.getContainer().updateButtons();
        } else if (e.widget == removeAllDllDir_Btn) {
            userDllPath_list.removeAll();
            removeDllDir_Btn.setEnabled(userDllPath_list.getItemCount() != 0);
            removeAllDllDir_Btn.setEnabled(userDllPath_list.getItemCount() != 0);
            this.getContainer().updateButtons();
        }
    }

    public void getFiles(String path, IProgressMonitor monitor) {
        if (path == null || path.length() == 0)
            return;

        File rootDir = new File(path);

        if (rootDir.isDirectory()) {
            String[] fileNames = rootDir.list(new FilenameFilter() {

                public boolean accept(File file, String name) {
                    File temp = new File(FileMethods.appendPathSeparator(file.getAbsolutePath()) + name);

                    if (temp.isFile() && name.endsWith(".dso") && !name.contains("{") && !name.contains("}"))
                        return true;
                    return false;
                }

            });

            if (fileNames == null)
                return;

            for (String name : fileNames) {
                if (monitor != null && monitor.isCanceled()) {
                    isMonitorCancelled = true;
                    filesNamesList.clear();
                    displayFiles.clear();
                    children.clear();
                    subChildren.clear();
                    monitor.done();
                    return;
                }

                if (!filesNamesList.contains(name.toLowerCase()))
                    filesNamesList.add(name.toLowerCase());

                if (path.equalsIgnoreCase(absolutePath))
                    children.add(name.toLowerCase());
                else
                    subChildren.add(name.toLowerCase());
            }
        }
        return;
    }

    private void getFilesFromSubDirs(String path, IProgressMonitor monitor) {
        File rootDir = new File(path);

        if (rootDir.isDirectory()) {
            String[] dirNames = rootDir.list(new FilenameFilter() {

                public boolean accept(File file, String name) {
                    File temp = new File(FileMethods.appendPathSeparator(file.getAbsolutePath()) + name);
                    if (temp.isDirectory())
                        return true;

                    return false;
                }

            });

            if (dirNames != null) {
                for (String name : dirNames) {
                    getFiles(FileMethods.appendPathSeparator(path) + name, monitor);
                    if (monitor != null && monitor.isCanceled()) {
                        isMonitorCancelled = true;
                        filesNamesList.clear();
                        displayFiles.clear();
                        children.clear();
                        subChildren.clear();
                        monitor.done();
                        return;
                    }
                }
                for (String name : dirNames) {
                    getFilesFromSubDirs(FileMethods.appendPathSeparator(path) + name, monitor);
                }
            }
        }
    }

    private boolean isPreviouslySelected(String fileName) {
        for (TableItem s : dsoFiles_list.getItems()) {
            if (s.getText().equalsIgnoreCase(fileName))
                return true;
        }
        return false;
    }

    private void validateFileSet() {
        invalidLibsCount = 0;

        if (userDirs_radioBtn.getSelection()) {
            if (userDsoPath_list.getItemCount() == 0) {
                if (analyseSelected_radioBtn.getSelection() && dsoFiles_list.getItemCount() > 0) {
                    for (TableItem item : dsoFiles_list.getItems()) {
                        changeColorFont(item);
                        invalidLibsCount++;
                    }
                }
            } else if (userDsoPath_list.getItemCount() > 0) {
                if (analyseSelected_radioBtn.getSelection() && dsoFiles_list.getItemCount() > 0) {
                    filesNamesList = new ArrayList<String>();
                    children = new ArrayList<String>();
                    subChildren = new ArrayList<String>();

                    for (TableItem s : userDsoPath_list.getItems()) {
                        getFiles(s.getText(0), null);
                        //if(useRecursive.getSelection())
                        getFilesFromSubDirs(s.getText(0), null);
                    }

                    for (TableItem item : dsoFiles_list.getItems()) {
                        if (!filesNamesList.contains(item.getText(0).toLowerCase())) {
                            changeColorFont(item);
                            invalidLibsCount++;
                        } else {
                            item.setForeground(null);
                            item.setFont(null);
                        }
                    }
                }
            }
        } else if (buildtarget_radioBtn.getSelection()) {
            if (analyseSelected_radioBtn.getSelection() && dsoFiles_list.getItemCount() > 0) {
                String path = FileMethods.appendPathSeparator(releaseRoot)
                        + Messages.getString("LibraryFilesPage.armv5") + File.separator //$NON-NLS-1$
                        + Messages.getString("LibraryFilesPage.lib"); //$NON-NLS-1$
                path = FileMethods.convertForwardToBackwardSlashes(path);

                filesNamesList = new ArrayList<String>();
                subChildren = new ArrayList<String>();
                children = new ArrayList<String>();

                getFiles(path, null);
                getFilesFromSubDirs(path, null);

                for (TableItem item : dsoFiles_list.getItems()) {
                    if (!filesNamesList.contains(item.getText(0).toLowerCase())) {
                        changeColorFont(item);
                        invalidLibsCount++;
                    } else {
                        item.setForeground(null);
                        item.setFont(null);
                    }
                }
            }
        } else if (default_build_target_radioBtn.getSelection()) {
            if (analyseSelected_radioBtn.getSelection() && dsoFiles_list.getItemCount() > 0
                    && currentSdk.productSdkVersion != null) {
                String buildTarget = CompatibilityAnalyserEngine.getDefaultBuildPlatform(releaseRoot,
                        currentSdk.productSdkVersion);
                String libs_Path = FileMethods.appendPathSeparator(releaseRoot) + buildTarget + File.separator
                        + Messages.getString("LibraryFilesPage.lib");
                libs_Path = FileMethods.convertForwardToBackwardSlashes(libs_Path);

                filesNamesList = new ArrayList<String>();
                subChildren = new ArrayList<String>();
                children = new ArrayList<String>();

                getFiles(libs_Path, null);
                getFilesFromSubDirs(libs_Path, null);

                for (TableItem item : dsoFiles_list.getItems()) {
                    if (!filesNamesList.contains(item.getText(0).toLowerCase())) {
                        changeColorFont(item);
                        invalidLibsCount++;
                    } else {
                        item.setForeground(null);
                        item.setFont(null);
                    }
                }
            }
        }

    }

    public void modifyText(ModifyEvent e) {
        if (e.widget == toolChain_dropdown) {
            int index = toolChain_dropdown.getSelectionIndex();
            if (index != -1)
                selectedToolChain = toolChains.elementAt(index);
        }
        this.getContainer().updateButtons();

    }

    private void changeColorFont(TableItem item) {
        item.setForeground(invalidColor);
        item.setFont(invalidFile_Font);
    }

    public boolean canFinish() {
        return this.canFlipToNextPage();
    }

    public void UpdatePage() {
        this.getContainer().updateButtons();
    }

    public String[] getSelectedDSOPaths() {
        ArrayList<String> paths = new ArrayList<String>();
        for (TableItem item : userDsoPath_list.getItems())
            if (!item.getForeground().equals(invalidColor))
                paths.add(item.getText(0));

        return paths.toArray(new String[0]);
    }

    public String[] getSelectedDLLPaths() {
        ArrayList<String> paths = new ArrayList<String>();
        for (TableItem item : userDllPath_list.getItems())
            if (!item.getForeground().equals(invalidColor))
                paths.add(item.getText(0));

        return paths.toArray(new String[0]);
    }

    public void UpdateFilesList() {
    }

    public void setHelp() {
        PlatformUI.getWorkbench().getHelpSystem().setHelp(userDirs_radioBtn, HelpContextIDs.LIBRARIES_PAGE);
        PlatformUI.getWorkbench().getHelpSystem().setHelp(userDsoPath_list, HelpContextIDs.LIBRARIES_PAGE);
        PlatformUI.getWorkbench().getHelpSystem().setHelp(dsoFiles_list, HelpContextIDs.LIBRARIES_PAGE);
        PlatformUI.getWorkbench().getHelpSystem().setHelp(analyseSelected_radioBtn, HelpContextIDs.LIBRARIES_PAGE);
        PlatformUI.getWorkbench().getHelpSystem().setHelp(buildtarget_radioBtn, HelpContextIDs.LIBRARIES_PAGE);
        PlatformUI.getWorkbench().getHelpSystem().setHelp(buildTarget_list, HelpContextIDs.LIBRARIES_PAGE);
        PlatformUI.getWorkbench().getHelpSystem().setHelp(toolChain_dropdown, HelpContextIDs.LIBRARIES_PAGE);
        PlatformUI.getWorkbench().getHelpSystem().setHelp(analyseAllFiles_radioBtn, HelpContextIDs.LIBRARIES_PAGE);
    }

}