eu.artist.postmigration.nfrvt.search.run.ui.PatternSettingsTab.java Source code

Java tutorial

Introduction

Here is the source code for eu.artist.postmigration.nfrvt.search.run.ui.PatternSettingsTab.java

Source

/*
 * Copyright (c) 2013, 2015 Vienna University of Technology.
 * 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
 * 
 * Contributors:
 * Philip Langer - initial API and implementation
 * Tanja Mayerhofer - implementation
 */
package eu.artist.postmigration.nfrvt.search.run.ui;

import java.net.URL;

import org.eclipse.core.runtime.CoreException;
import org.eclipse.debug.core.ILaunchConfiguration;
import org.eclipse.debug.core.ILaunchConfigurationWorkingCopy;
import org.eclipse.debug.ui.AbstractLaunchConfigurationTab;
import org.eclipse.jface.resource.ImageDescriptor;
import org.eclipse.swt.SWT;
import org.eclipse.swt.events.ModifyEvent;
import org.eclipse.swt.events.ModifyListener;
import org.eclipse.swt.graphics.Image;
import org.eclipse.swt.layout.GridData;
import org.eclipse.swt.layout.GridLayout;
import org.eclipse.swt.widgets.Composite;
import org.eclipse.swt.widgets.Group;
import org.eclipse.swt.widgets.Label;
import org.eclipse.swt.widgets.Text;

import eu.artist.postmigration.nfrvt.search.MigrationExplorerActivator;

public class PatternSettingsTab extends AbstractLaunchConfigurationTab {

    protected ModifyListener updateModification = new ModifyListener() {
        @Override
        public void modifyText(ModifyEvent e) {
            setErrorMessage(null);
            setMessage(null);
            updateLaunchConfigurationDialog();
        }
    };

    protected String name = "Pattern Settings";
    protected Text fixedScalingMinimum;
    protected Text fixedScalingMaximum;

    protected Text autoScalingMinimumMinimum;
    protected Text autoScalingMinimumMaximum;
    protected Text autoScalingMaximumMinimum;
    protected Text autoScalingMaximumMaximum;

    protected Text speedUpInstance;
    protected Text speedUpCache;

    protected Text pricingCache;
    protected Text pricingInstance;

    @Override
    public void createControl(Composite parent) {
        Composite composite = new Composite(parent, SWT.NONE);
        composite.setLayoutData(new GridData(GridData.FILL_BOTH | GridData.GRAB_VERTICAL));

        GridLayout layout = new GridLayout();
        layout.verticalSpacing = 8;
        composite.setLayout(layout);

        createMainControls(composite);
        setControl(composite);
    }

    protected void createMainControls(Composite parent) {
        Group scalingGroup = new Group(parent, SWT.SHADOW_NONE);
        scalingGroup.setLayoutData(new GridData(GridData.FILL_HORIZONTAL | GridData.GRAB_HORIZONTAL));
        { // block to avoid name collisions
            GridLayout layout = new GridLayout(1, false);
            layout.marginTop = 0;
            layout.marginLeft = 0;
            layout.marginRight = 0;
            layout.marginBottom = 0;
            layout.verticalSpacing = 0;
            layout.horizontalSpacing = 0;
            scalingGroup.setLayout(layout);
        }
        scalingGroup.setText("Scaling");

        Composite scaling = new Composite(scalingGroup, SWT.NONE);
        scaling.setLayoutData(new GridData(SWT.FILL, SWT.FILL, true, false));
        scaling.setLayout(new GridLayout(4, false));

        {
            Label fixedScalingLabel = new Label(scaling, SWT.LEFT);
            fixedScalingLabel.setText("FixedScaling:");
            fixedScalingLabel.setLayoutData(new GridData(SWT.DEFAULT, SWT.DEFAULT));

            fixedScalingMinimum = new Text(scaling, SWT.LEFT | SWT.BORDER);
            fixedScalingMinimum.setLayoutData(new GridData(SWT.FILL, SWT.DEFAULT, true, false));
            //         fixedScalingMinimum.addVerifyListener(integerVerification);
            fixedScalingMinimum.addModifyListener(updateModification);

            Label dashLabel = new Label(scaling, SWT.LEFT);
            dashLabel.setText("-");
            dashLabel.setLayoutData(new GridData(SWT.DEFAULT, SWT.DEFAULT));

            fixedScalingMaximum = new Text(scaling, SWT.LEFT | SWT.BORDER);
            fixedScalingMaximum.setLayoutData(new GridData(SWT.FILL, SWT.DEFAULT, true, false));
            //         fixedScalingMaximum.addVerifyListener(integerVerification);
            fixedScalingMaximum.addModifyListener(updateModification);
        }
        {
            Label autoScalingLabel = new Label(scaling, SWT.LEFT);
            autoScalingLabel.setText("AutoScaling:");
            autoScalingLabel.setLayoutData(new GridData(SWT.DEFAULT, SWT.DEFAULT));

            {
                Composite minimum = new Composite(scaling, SWT.NONE);
                minimum.setLayoutData(new GridData(SWT.FILL, SWT.FILL, true, false));
                minimum.setLayout(new GridLayout(3, false));

                autoScalingMinimumMinimum = new Text(minimum, SWT.BEGINNING | SWT.BORDER);
                autoScalingMinimumMinimum.setLayoutData(new GridData(SWT.FILL, SWT.DEFAULT, true, false));
                //            autoScalingMinimumMinimum.addVerifyListener(integerVerification);
                autoScalingMinimumMinimum.addModifyListener(updateModification);

                Label dashLabel = new Label(minimum, SWT.LEFT);
                dashLabel.setText("-");
                dashLabel.setLayoutData(new GridData(SWT.DEFAULT, SWT.DEFAULT));

                autoScalingMinimumMaximum = new Text(minimum, SWT.BEGINNING | SWT.BORDER);
                autoScalingMinimumMaximum.setLayoutData(new GridData(SWT.FILL, SWT.DEFAULT, true, false));
                //            autoScalingMinimumMaximum.addVerifyListener(integerVerification);
                autoScalingMinimumMaximum.addModifyListener(updateModification);
            }

            Label dashLabel = new Label(scaling, SWT.LEFT);
            dashLabel.setText("-");
            dashLabel.setLayoutData(new GridData(SWT.DEFAULT, SWT.DEFAULT));

            {
                Composite minimum = new Composite(scaling, SWT.NONE);
                minimum.setLayoutData(new GridData(SWT.FILL, SWT.FILL, true, false));
                minimum.setLayout(new GridLayout(3, false));

                autoScalingMaximumMinimum = new Text(minimum, SWT.BEGINNING | SWT.BORDER);
                autoScalingMaximumMinimum.setLayoutData(new GridData(SWT.FILL, SWT.DEFAULT, true, false));
                //            autoScalingMaximumMinimum.addVerifyListener(integerVerification);
                autoScalingMaximumMinimum.addModifyListener(updateModification);

                Label dashMaxLabel = new Label(minimum, SWT.LEFT);
                dashMaxLabel.setText("-");
                dashMaxLabel.setLayoutData(new GridData(SWT.DEFAULT, SWT.DEFAULT));

                autoScalingMaximumMaximum = new Text(minimum, SWT.BEGINNING | SWT.BORDER);
                autoScalingMaximumMaximum.setLayoutData(new GridData(SWT.FILL, SWT.DEFAULT, true, false));
                //            autoScalingMaximumMaximum.addVerifyListener(integerVerification);
                autoScalingMaximumMaximum.addModifyListener(updateModification);
            }
        }

        Group speedUpGroup = new Group(parent, SWT.SHADOW_NONE);
        speedUpGroup.setLayoutData(new GridData(GridData.FILL_HORIZONTAL | GridData.GRAB_HORIZONTAL));
        { // block to avoid name collisions
            GridLayout layout = new GridLayout(1, false);
            layout.marginTop = 0;
            layout.marginLeft = 0;
            layout.marginRight = 0;
            layout.marginBottom = 0;
            layout.verticalSpacing = 0;
            layout.horizontalSpacing = 0;
            speedUpGroup.setLayout(layout);
        }
        speedUpGroup.setText("SpeedUp");

        Composite speedUp = new Composite(speedUpGroup, SWT.NONE);
        speedUp.setLayoutData(new GridData(SWT.FILL, SWT.FILL, true, false));
        speedUp.setLayout(new GridLayout(2, false));
        {
            Label cacheSpeedUpLabel = new Label(speedUp, SWT.LEFT);
            cacheSpeedUpLabel.setText("Default Cache SpeedUp:");
            cacheSpeedUpLabel.setLayoutData(new GridData(SWT.DEFAULT, SWT.DEFAULT));

            speedUpCache = new Text(speedUp, SWT.BEGINNING | SWT.BORDER);
            speedUpCache.setLayoutData(new GridData(SWT.FILL, SWT.DEFAULT, true, false));
            //         speedUpCache.addVerifyListener(doubleVerification);
            speedUpCache.addModifyListener(updateModification);
        }
        {
            Label instanceSpeedUpLabel = new Label(speedUp, SWT.LEFT);
            instanceSpeedUpLabel.setText("Default Instance SpeedUp:");
            instanceSpeedUpLabel.setLayoutData(new GridData(SWT.DEFAULT, SWT.DEFAULT));

            speedUpInstance = new Text(speedUp, SWT.BEGINNING | SWT.BORDER);
            speedUpInstance.setLayoutData(new GridData(SWT.FILL, SWT.DEFAULT, true, false));
            //         speedUpInstance.addVerifyListener(doubleVerification);
            speedUpInstance.addModifyListener(updateModification);
        }

        Group pricingGroup = new Group(parent, SWT.SHADOW_NONE);
        pricingGroup.setLayoutData(new GridData(GridData.FILL_HORIZONTAL | GridData.GRAB_HORIZONTAL));
        { // block to avoid name collisions
            GridLayout layout = new GridLayout(1, false);
            layout.marginTop = 0;
            layout.marginLeft = 0;
            layout.marginRight = 0;
            layout.marginBottom = 0;
            layout.verticalSpacing = 0;
            layout.horizontalSpacing = 0;
            pricingGroup.setLayout(layout);
        }
        pricingGroup.setText("Pricing");

        Composite pricing = new Composite(pricingGroup, SWT.NONE);
        pricing.setLayoutData(new GridData(SWT.FILL, SWT.FILL, true, false));
        pricing.setLayout(new GridLayout(2, false));
        {
            Label cacheCostLabel = new Label(pricing, SWT.LEFT);
            cacheCostLabel.setText("Estimated Cache Cost per Time Unit:");
            cacheCostLabel.setLayoutData(new GridData(SWT.DEFAULT, SWT.DEFAULT));

            pricingCache = new Text(pricing, SWT.BEGINNING | SWT.BORDER);
            pricingCache.setLayoutData(new GridData(SWT.FILL, SWT.DEFAULT, true, false));
            //         pricingCache.addVerifyListener(doubleVerification);
            pricingCache.addModifyListener(updateModification);
        }
        {
            Label instanceCostLabel = new Label(pricing, SWT.LEFT);
            instanceCostLabel.setText("Estimated Instance Cost per Time Unit:");
            instanceCostLabel.setLayoutData(new GridData(SWT.DEFAULT, SWT.DEFAULT));

            pricingInstance = new Text(pricing, SWT.BEGINNING | SWT.BORDER);
            pricingInstance.setLayoutData(new GridData(SWT.FILL, SWT.DEFAULT, true, false));
            //         pricingInstance.addVerifyListener(doubleVerification);
            pricingInstance.addModifyListener(updateModification);
        }
    }

    @Override
    public boolean isValid(ILaunchConfiguration launchConfig) {
        Integer fixedScalingMin = getFixedScalingMinimum();
        Integer fixedScalingMax = getFixedScalingMaximum();

        Integer autoScalingMinMin = getAutoScalingMinimumMinimum();
        Integer autoScalingMinMax = getAutoScalingMinimumMaximum();
        Integer autoScalingMaxMin = getAutoScalingMaximumMinimum();
        Integer autoScalingMaxMax = getAutoScalingMaximumMaximum();

        Double speedUpCache = getSpeedUpCache();
        Double speedUpInstance = getSpeedUpInstance();

        Double pricingCache = getPricingCache();
        Double pricingInstance = getPricingInstance();

        if (fixedScalingMin == null || fixedScalingMin < 2) {
            setErrorMessage("Provide a valid minimum for fixed scaling (>= 2).");
            return false;
        } else if (fixedScalingMax == null || fixedScalingMax <= fixedScalingMin) {
            setErrorMessage("Provide a valid maximum for fixed scaling (> minScaling).");
            return false;
        } else if (autoScalingMinMin == null || autoScalingMinMin < 1) {
            setErrorMessage("Provide a valid minimum minimum for auto scaling (>= 1).");
            return false;
        } else if (autoScalingMinMax == null || autoScalingMinMax <= autoScalingMinMin) {
            setErrorMessage("Provide a valid minimum maximum for auto scaling (> minScaling).");
            return false;
        } else if (autoScalingMaxMin == null || autoScalingMaxMin <= 1) {
            setErrorMessage("Provide a valid maximum minimum for auto scaling (> 1).");
            return false;
        } else if (autoScalingMaxMax == null || autoScalingMaxMax <= autoScalingMaxMin) {
            setErrorMessage("Provide a valid maximum maximum for auto scaling (> minScaling).");
            return false;
        } else if (speedUpCache == null || speedUpCache <= 0.0) {
            setErrorMessage("Provide a valid speedup for caching (> 0.0).");
            return false;
        } else if (speedUpInstance == null || speedUpInstance <= 0.0) {
            setErrorMessage("Provide a valid speedup for instances (> 0.0).");
            return false;
        } else if (pricingCache == null || pricingCache <= 0.0) {
            setErrorMessage("Provide a valid pricing for caching (> 0.0).");
            return false;
        } else if (pricingInstance == null || pricingInstance <= 0.0) {
            setErrorMessage("Provide a valid pricing for instances (> 0.0).");
            return false;
        } else {
            setErrorMessage(null);
            setMessage(null);
            return super.isValid(launchConfig);
        }
    }

    protected Integer getInteger(String text) {
        try {
            return Integer.parseInt(text);
        } catch (NumberFormatException e) {
            return null;
        }
    }

    public Integer getFixedScalingMinimum() {
        return getInteger(fixedScalingMinimum.getText().trim());
    }

    public Integer getFixedScalingMaximum() {
        return getInteger(fixedScalingMaximum.getText().trim());
    }

    public Integer getAutoScalingMinimumMinimum() {
        return getInteger(autoScalingMinimumMinimum.getText().trim());
    }

    public Integer getAutoScalingMinimumMaximum() {
        return getInteger(autoScalingMinimumMaximum.getText().trim());
    }

    public Integer getAutoScalingMaximumMinimum() {
        return getInteger(autoScalingMaximumMinimum.getText().trim());
    }

    public Integer getAutoScalingMaximumMaximum() {
        return getInteger(autoScalingMaximumMaximum.getText().trim());
    }

    protected Double getDouble(String text) {
        try {
            return Double.parseDouble(text);
        } catch (NumberFormatException e) {
            return null;
        }
    }

    public Double getSpeedUpCache() {
        return getDouble(speedUpCache.getText().trim());
    }

    public Double getSpeedUpInstance() {
        return getDouble(speedUpInstance.getText().trim());
    }

    public Double getPricingCache() {
        return getDouble(pricingCache.getText().trim());
    }

    public Double getPricingInstance() {
        return getDouble(pricingInstance.getText().trim());
    }

    @Override
    public void performApply(ILaunchConfigurationWorkingCopy configuration) {
        configuration.setAttribute(MigrationExplorerActivator.ATT_PATTERN_FIXED_MIN, "" + getFixedScalingMinimum());
        configuration.setAttribute(MigrationExplorerActivator.ATT_PATTERN_FIXED_MAX, "" + getFixedScalingMaximum());
        configuration.setAttribute(MigrationExplorerActivator.ATT_PATTERN_AUTO_MIN_MIN,
                "" + getAutoScalingMinimumMinimum());
        configuration.setAttribute(MigrationExplorerActivator.ATT_PATTERN_AUTO_MIN_MAX,
                "" + getAutoScalingMinimumMaximum());
        configuration.setAttribute(MigrationExplorerActivator.ATT_PATTERN_AUTO_MAX_MIN,
                "" + getAutoScalingMaximumMinimum());
        configuration.setAttribute(MigrationExplorerActivator.ATT_PATTERN_AUTO_MAX_MAX,
                "" + getAutoScalingMaximumMaximum());
        configuration.setAttribute(MigrationExplorerActivator.ATT_PATTERN_SPEEDUP_CACHE, "" + getSpeedUpCache());
        configuration.setAttribute(MigrationExplorerActivator.ATT_PATTERN_SPEEDUP_INSTANCE,
                "" + getSpeedUpInstance());
        configuration.setAttribute(MigrationExplorerActivator.ATT_PATTERN_PRICE_CACHE, "" + getPricingCache());
        configuration.setAttribute(MigrationExplorerActivator.ATT_PATTERN_PRICE_INSTANCE,
                "" + getPricingInstance());
    }

    @Override
    public String getName() {
        return this.name;
    }

    @Override
    public void setDefaults(ILaunchConfigurationWorkingCopy configuration) {
        configuration.setAttribute(MigrationExplorerActivator.ATT_PATTERN_FIXED_MIN, "2");
        configuration.setAttribute(MigrationExplorerActivator.ATT_PATTERN_FIXED_MAX, "5");
        configuration.setAttribute(MigrationExplorerActivator.ATT_PATTERN_AUTO_MIN_MIN, "1");
        configuration.setAttribute(MigrationExplorerActivator.ATT_PATTERN_AUTO_MIN_MAX, "5");
        configuration.setAttribute(MigrationExplorerActivator.ATT_PATTERN_AUTO_MAX_MIN, "3");
        configuration.setAttribute(MigrationExplorerActivator.ATT_PATTERN_AUTO_MAX_MAX, "7");
        configuration.setAttribute(MigrationExplorerActivator.ATT_PATTERN_SPEEDUP_CACHE, "1.0");
        configuration.setAttribute(MigrationExplorerActivator.ATT_PATTERN_SPEEDUP_INSTANCE, "0.9");
        configuration.setAttribute(MigrationExplorerActivator.ATT_PATTERN_PRICE_CACHE, "0.0015");
        configuration.setAttribute(MigrationExplorerActivator.ATT_PATTERN_PRICE_INSTANCE, " 0.0010");
    }

    @Override
    public void initializeFrom(ILaunchConfiguration configuration) {
        String fixedScalingMin = "";
        String fixedScalingMax = "";
        String autoScalingMinMin = "";
        String autoScalingMinMax = "";
        String autoScalingMaxMin = "";
        String autoScalingMaxMax = "";

        String defaultSpeedUpCache = "";
        String defaultSpeedUpInstance = "";

        String priceCache = "";
        String priceInstance = "";

        try {
            fixedScalingMin = configuration.getAttribute(MigrationExplorerActivator.ATT_PATTERN_FIXED_MIN, "");
            fixedScalingMax = configuration.getAttribute(MigrationExplorerActivator.ATT_PATTERN_FIXED_MAX, "");
            autoScalingMinMin = configuration.getAttribute(MigrationExplorerActivator.ATT_PATTERN_AUTO_MIN_MIN, "");
            autoScalingMinMax = configuration.getAttribute(MigrationExplorerActivator.ATT_PATTERN_AUTO_MIN_MAX, "");
            autoScalingMaxMin = configuration.getAttribute(MigrationExplorerActivator.ATT_PATTERN_AUTO_MAX_MIN, "");
            autoScalingMaxMax = configuration.getAttribute(MigrationExplorerActivator.ATT_PATTERN_AUTO_MAX_MAX, "");

            defaultSpeedUpCache = configuration.getAttribute(MigrationExplorerActivator.ATT_PATTERN_SPEEDUP_CACHE,
                    "");
            defaultSpeedUpInstance = configuration
                    .getAttribute(MigrationExplorerActivator.ATT_PATTERN_SPEEDUP_INSTANCE, "");

            priceCache = configuration.getAttribute(MigrationExplorerActivator.ATT_PATTERN_PRICE_CACHE, "");
            priceInstance = configuration.getAttribute(MigrationExplorerActivator.ATT_PATTERN_PRICE_INSTANCE, "");
        } catch (CoreException e) {
        }

        fixedScalingMaximum.setText(fixedScalingMax);
        fixedScalingMinimum.setText(fixedScalingMin);
        autoScalingMinimumMinimum.setText(autoScalingMinMin);
        autoScalingMinimumMaximum.setText(autoScalingMinMax);
        autoScalingMaximumMinimum.setText(autoScalingMaxMin);
        autoScalingMaximumMaximum.setText(autoScalingMaxMax);

        speedUpCache.setText(defaultSpeedUpCache);
        speedUpInstance.setText(defaultSpeedUpInstance);

        pricingCache.setText(priceCache);
        pricingInstance.setText(priceInstance);
    }

    @Override
    public Image getImage() {
        URL imgUrl = MigrationExplorerActivator.getDefault().getBundle().getEntry("icons/PatternSettings.gif");
        if (imgUrl != null) {
            ImageDescriptor id = null;
            Image result = MigrationExplorerActivator.getDefault().getImageRegistry().get(imgUrl.toExternalForm());
            if (result == null) {
                id = ImageDescriptor.createFromURL(imgUrl);
                if (id != null) {
                    result = id.createImage();
                    MigrationExplorerActivator.getDefault().getImageRegistry().put(imgUrl.toExternalForm(), result);
                }
            }
            return result;
        }
        return null;
    }

}