org.eclipse.titan.designer.properties.pages.LinkerLibrariesOptionsPage.java Source code

Java tutorial

Introduction

Here is the source code for org.eclipse.titan.designer.properties.pages.LinkerLibrariesOptionsPage.java

Source

/******************************************************************************
 * Copyright (c) 2000-2016 Ericsson Telecom AB
 * All rights reserved. This program and the accompanying materials
 * are made available under the terms of the Eclipse Public License v1.0
 * which accompanies this distribution, and is available at
 * http://www.eclipse.org/legal/epl-v10.html
 ******************************************************************************/
package org.eclipse.titan.designer.properties.pages;

import org.eclipse.core.resources.IProject;
import org.eclipse.core.runtime.CoreException;
import org.eclipse.core.runtime.QualifiedName;
import org.eclipse.jface.preference.PreferenceStore;
import org.eclipse.swt.SWT;
import org.eclipse.swt.layout.GridData;
import org.eclipse.swt.layout.GridLayout;
import org.eclipse.swt.widgets.Button;
import org.eclipse.swt.widgets.Composite;
import org.eclipse.titan.common.logging.ErrorReporter;
import org.eclipse.titan.designer.properties.data.LinkerLibrariesOptionsData;
import org.eclipse.titan.designer.properties.data.ListConverter;
import org.eclipse.titan.designer.properties.data.ProjectBuildPropertyData;

/**
 * @author Kristof Szabados
 * */
public final class LinkerLibrariesOptionsPage implements IOptionsPage {
    private final IProject project;

    private Composite mainComposite;
    private MyFileListControl objects;
    private MyListControl libraries;
    private MyFolderListControl librarySearchPath;
    private Button disablePredefinedExtrnalDirs;

    public LinkerLibrariesOptionsPage(final IProject project) {
        this.project = project;
    }

    @Override
    public void dispose() {
        if (mainComposite != null) {
            mainComposite.dispose();
            mainComposite = null;

            objects.dispose();
            libraries.dispose();
            librarySearchPath.dispose();
            disablePredefinedExtrnalDirs.dispose();
        }
    }

    @Override
    public Composite createContents(final Composite parent) {
        if (mainComposite != null) {
            return mainComposite;
        }

        mainComposite = new Composite(parent, SWT.NONE);
        mainComposite.setLayout(new GridLayout());
        mainComposite.setLayoutData(new GridData(SWT.FILL, SWT.BEGINNING, true, false));

        objects = new MyFileListControl(mainComposite, project.getLocation().toOSString(),
                "additional object files ", "object");
        libraries = new MyListControl(mainComposite, "Libraries (-l)", "library");
        librarySearchPath = new MyFolderListControl(mainComposite, project.getLocation().toOSString(),
                "Library search path (-L)", "search path");

        disablePredefinedExtrnalDirs = new Button(mainComposite, SWT.CHECK);
        disablePredefinedExtrnalDirs.setText("Disable the entries of predefined libraries");
        disablePredefinedExtrnalDirs.setToolTipText("Right now the OPENSSL_DIR and XMLDIR entries.\n"
                + " Please note that these folders are mandatory for the proper operation of TITAN.");

        return mainComposite;
    }

    @Override
    public void setEnabled(final boolean enabled) {
        if (mainComposite == null) {
            return;
        }

        objects.setEnabled(enabled);
        libraries.setEnabled(enabled);
        librarySearchPath.setEnabled(enabled);
        disablePredefinedExtrnalDirs.setEnabled(enabled);
    }

    @Override
    public void copyPropertyStore(final IProject project, final PreferenceStore tempStorage) {
        String temp = null;
        for (int i = 0; i < LinkerLibrariesOptionsData.PROPERTIES.length; i++) {
            try {
                temp = project.getPersistentProperty(new QualifiedName(ProjectBuildPropertyData.QUALIFIER,
                        LinkerLibrariesOptionsData.PROPERTIES[i]));
                if (temp != null) {
                    tempStorage.setValue(LinkerLibrariesOptionsData.PROPERTIES[i], temp);
                }
            } catch (CoreException ce) {
                ErrorReporter.logExceptionStackTrace(ce);
            }
        }
    }

    @Override
    public boolean evaluatePropertyStore(final IProject project, final PreferenceStore tempStorage) {
        String actualValue = null;
        String copyValue = null;
        boolean result = false;
        for (int i = 0; i < LinkerLibrariesOptionsData.PROPERTIES.length; i++) {
            try {
                actualValue = project.getPersistentProperty(new QualifiedName(ProjectBuildPropertyData.QUALIFIER,
                        LinkerLibrariesOptionsData.PROPERTIES[i]));
                copyValue = tempStorage.getString(LinkerLibrariesOptionsData.PROPERTIES[i]);
                result |= ((actualValue != null && !actualValue.equals(copyValue))
                        || (actualValue == null && copyValue == null));
            } catch (CoreException e) {
                ErrorReporter.logExceptionStackTrace(e);
                result = true;
            }
        }

        return result;
    }

    @Override
    public void performDefaults() {
        if (mainComposite == null) {
            return;
        }

        objects.setEnabled(true);
        objects.setValues(new String[] {});

        libraries.setEnabled(true);
        libraries.setValues(new String[] {});

        librarySearchPath.setEnabled(true);
        librarySearchPath.setValues(new String[] {});

        disablePredefinedExtrnalDirs.setEnabled(true);
        disablePredefinedExtrnalDirs.setSelection(false);
    }

    @Override
    public boolean checkProperties(final ProjectBuildPropertyPage page) {
        return true;
    }

    @Override
    public void loadProperties(final IProject project) {
        try {
            String temp = project.getPersistentProperty(new QualifiedName(ProjectBuildPropertyData.QUALIFIER,
                    LinkerLibrariesOptionsData.ADDITIONAL_OBJECTS_PROPERTY));
            objects.setValues(ListConverter.convertToList(temp));

            temp = project.getPersistentProperty(new QualifiedName(ProjectBuildPropertyData.QUALIFIER,
                    LinkerLibrariesOptionsData.LINKER_LIBRARIES_PROPERTY));
            libraries.setValues(ListConverter.convertToList(temp));

            temp = project.getPersistentProperty(new QualifiedName(ProjectBuildPropertyData.QUALIFIER,
                    LinkerLibrariesOptionsData.LINKER_LIBRARY_SEARCH_PATH_PROPERTY));
            librarySearchPath.setValues(ListConverter.convertToList(temp));

            temp = project.getPersistentProperty(new QualifiedName(ProjectBuildPropertyData.QUALIFIER,
                    LinkerLibrariesOptionsData.DISABLE_EXTERNAL_DIRS_PROPERTY));
            disablePredefinedExtrnalDirs.setSelection("true".equals(temp) ? true : false);
        } catch (CoreException e) {
            objects.setValues(new String[] {});
            libraries.setValues(new String[] {});
            librarySearchPath.setValues(new String[] {});
            disablePredefinedExtrnalDirs.setEnabled(false);
        }
    }

    @Override
    public boolean saveProperties(final IProject project) {
        try {
            QualifiedName qualifiedName = new QualifiedName(ProjectBuildPropertyData.QUALIFIER,
                    LinkerLibrariesOptionsData.ADDITIONAL_OBJECTS_PROPERTY);
            String newValue = ListConverter.convertFromList(objects.getValues());
            String oldValue = project.getPersistentProperty(qualifiedName);
            if (newValue != null && !newValue.equals(oldValue)) {
                project.setPersistentProperty(qualifiedName, newValue);
            }

            qualifiedName = new QualifiedName(ProjectBuildPropertyData.QUALIFIER,
                    LinkerLibrariesOptionsData.LINKER_LIBRARIES_PROPERTY);
            newValue = ListConverter.convertFromList(libraries.getValues());
            oldValue = project.getPersistentProperty(qualifiedName);
            if (newValue != null && !newValue.equals(oldValue)) {
                project.setPersistentProperty(qualifiedName, newValue);
            }

            qualifiedName = new QualifiedName(ProjectBuildPropertyData.QUALIFIER,
                    LinkerLibrariesOptionsData.LINKER_LIBRARY_SEARCH_PATH_PROPERTY);
            newValue = ListConverter.convertFromList(librarySearchPath.getValues());
            oldValue = project.getPersistentProperty(qualifiedName);
            if (newValue != null && !newValue.equals(oldValue)) {
                project.setPersistentProperty(qualifiedName, newValue);
            }

            qualifiedName = new QualifiedName(ProjectBuildPropertyData.QUALIFIER,
                    LinkerLibrariesOptionsData.DISABLE_EXTERNAL_DIRS_PROPERTY);
            newValue = disablePredefinedExtrnalDirs.getSelection() ? "true" : "false";
            oldValue = project.getPersistentProperty(qualifiedName);
            if (!newValue.equals(oldValue)) {
                project.setPersistentProperty(qualifiedName, newValue);
            }
        } catch (CoreException e) {
            ErrorReporter.logExceptionStackTrace(e);
            return false;
        }

        return true;
    }
}