org.eclipse.jet.internal.ui.launch.JETTransformMainTab.java Source code

Java tutorial

Introduction

Here is the source code for org.eclipse.jet.internal.ui.launch.JETTransformMainTab.java

Source

/**
 * <copyright>
 *
 * Copyright (c) 2006 IBM Corporation and others.
 * 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: 
 *   IBM - Initial API and implementation
 *
 * </copyright>
 *
 * $Id$
 */

package org.eclipse.jet.internal.ui.launch;

import org.eclipse.core.resources.IFile;
import org.eclipse.core.resources.IProject;
import org.eclipse.core.resources.IResource;
import org.eclipse.core.resources.ResourcesPlugin;
import org.eclipse.core.runtime.CoreException;
import org.eclipse.core.runtime.IAdaptable;
import org.eclipse.core.runtime.IPath;
import org.eclipse.core.runtime.IStatus;
import org.eclipse.core.runtime.Status;
import org.eclipse.debug.core.ILaunchConfiguration;
import org.eclipse.debug.core.ILaunchConfigurationWorkingCopy;
import org.eclipse.debug.ui.AbstractLaunchConfigurationTab;
import org.eclipse.jet.JET2Platform;
import org.eclipse.jet.internal.runtime.RuntimeLoggerContextExtender;
import org.eclipse.jet.internal.ui.l10n.Messages;
import org.eclipse.jet.transform.IJETBundleDescriptor;
import org.eclipse.jet.transform.JETLaunchConstants;
import org.eclipse.jet.ui.Activator;
import org.eclipse.jface.dialogs.Dialog;
import org.eclipse.jface.dialogs.IDialogConstants;
import org.eclipse.jface.resource.ImageDescriptor;
import org.eclipse.jface.viewers.ISelection;
import org.eclipse.jface.viewers.IStructuredSelection;
import org.eclipse.swt.SWT;
import org.eclipse.swt.accessibility.AccessibleAdapter;
import org.eclipse.swt.accessibility.AccessibleEvent;
import org.eclipse.swt.events.ModifyEvent;
import org.eclipse.swt.events.ModifyListener;
import org.eclipse.swt.events.SelectionAdapter;
import org.eclipse.swt.events.SelectionEvent;
import org.eclipse.swt.graphics.Image;
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.Group;
import org.eclipse.swt.widgets.Label;
import org.eclipse.swt.widgets.Shell;
import org.eclipse.swt.widgets.Text;
import org.eclipse.ui.PlatformUI;
import org.eclipse.ui.dialogs.ElementTreeSelectionDialog;
import org.eclipse.ui.dialogs.ISelectionStatusValidator;
import org.eclipse.ui.dialogs.SaveAsDialog;
import org.eclipse.ui.model.WorkbenchContentProvider;
import org.eclipse.ui.model.WorkbenchLabelProvider;

/**
 * Main tab for JET Launch Configuraitons
 *
 */
public class JETTransformMainTab extends AbstractLaunchConfigurationTab {

    private static final String EMPTY_STRING = ""; //$NON-NLS-1$

    // Adicionado por Daniel Lucrdio
    // Elementos de UI para configura?o do arquivo de mapeamento
    private Text mappingFileField;
    private Button mappingFileWorkspaceLocationButton;

    // input block controls
    private Text sourceField;
    private Button workspaceLocationButton;

    private final Listener fListener = new Listener();;

    private Image tabImage;
    private Combo transformCombo;
    private Text transformName;
    private Text transformDescription;
    private Combo logLevelCombo;
    private String[] logLevels;

    private class Listener extends SelectionAdapter implements ModifyListener {

        public void widgetSelected(SelectionEvent e) {
            setDirty(true);
            final Object source = e.getSource();
            if (source == transformCombo) {
                handleTransformSelection();
            }
            updateLaunchConfigurationDialog();
        }

        public void modifyText(ModifyEvent e) {
            setDirty(true);
            updateLaunchConfigurationDialog();
        }
    }

    /**
     * 
     */
    public JETTransformMainTab() {
        super();
    }

    private void handleTransformSelection() {
        String id = transformCombo.getText();
        final IJETBundleDescriptor descriptor = JET2Platform.getJETBundleManager().getDescriptor(id);
        transformName.setText(descriptor.getName());
        transformDescription.setText(descriptor.getDescription().trim());

    }

    /* (non-Javadoc)
     * @see org.eclipse.debug.ui.ILaunchConfigurationTab#createControl(org.eclipse.swt.widgets.Composite)
     */
    public void createControl(Composite parent) {
        Composite composite = new Composite(parent, SWT.NONE);
        GridLayout layout = new GridLayout();
        layout.verticalSpacing = 15;
        composite.setLayout(layout);
        composite.setLayoutData(new GridData(GridData.FILL_HORIZONTAL));

        createInputBlock(composite);
        // Adicionado por Daniel Lucrdio
        // Cria o peda?o da interface para configurar
        // o arquivo de mapeamento
        createMapFileBlock(composite);
        createTransformBlock(composite);
        createMessagesBlock(composite);

        setControl(composite);
        Dialog.applyDialogFont(composite);
    }

    private void createMessagesBlock(Composite composite) {
        Group group = new Group(composite, SWT.NONE);
        group.setText(Messages.JETTransformMainTab_DisplayMessage_Gropu);
        GridLayout layout = new GridLayout();
        layout.numColumns = 2;
        group.setLayout(layout);
        group.setLayoutData(new GridData(GridData.FILL_BOTH));

        createLogLevelsSection(group);
    }

    private void createLogLevelsSection(Group parent) {
        Label label = new Label(parent, SWT.NONE);
        label.setText(Messages.JETTransformMainTab_SeverityLabel);

        logLevelCombo = new Combo(parent, SWT.DROP_DOWN | SWT.READ_ONLY);
        logLevelCombo.setLayoutData(new GridData(GridData.FILL_HORIZONTAL));
        logLevelCombo.setItems(getLogLevels());
        logLevelCombo.addSelectionListener(fListener);
    }

    /**
     * @param composite
     */
    private void createTransformBlock(Composite parent) {
        Group group = new Group(parent, SWT.NONE);
        group.setText(Messages.JETTransformMainTab_TransformGroupLabel);
        GridLayout layout = new GridLayout();
        layout.numColumns = 2;
        group.setLayout(layout);
        group.setLayoutData(new GridData(GridData.FILL_BOTH));

        createTransformIdSection(group);
        createTransformNameSection(group);
        createTransformDescriptionSection(group);
    }

    private void createTransformDescriptionSection(Group parent) {
        Label label = new Label(parent, SWT.NONE);
        label.setText(Messages.JETTransformMainTab_DescriptionLabel);

        transformDescription = new Text(parent, SWT.BORDER | SWT.READ_ONLY | SWT.MULTI);
        GridData gd = new GridData(GridData.FILL_BOTH);
        gd.widthHint = 300;
        gd.heightHint = 40;
        transformDescription.setLayoutData(gd);
    }

    private void createTransformNameSection(Group parent) {
        Label label = new Label(parent, SWT.NONE);
        label.setText(Messages.JETTransformMainTab_NameLabel);

        transformName = new Text(parent, SWT.BORDER | SWT.READ_ONLY);
        GridData gd = new GridData(GridData.FILL_HORIZONTAL);
        gd.widthHint = 300;
        transformName.setLayoutData(gd);

    }

    private void createTransformIdSection(Group parent) {
        Label label = new Label(parent, SWT.NONE);
        label.setText(Messages.JETTransformMainTab_IdLabel);

        transformCombo = new Combo(parent, SWT.DROP_DOWN | SWT.READ_ONLY);
        transformCombo.setLayoutData(new GridData(GridData.FILL_HORIZONTAL));
        transformCombo.setItems(JET2Platform.getJETBundleManager().getAllTransformIds());
        transformCombo.addSelectionListener(fListener);
    }

    private void createInputBlock(Composite parent) {
        Group group = new Group(parent, SWT.NONE);
        group.setText(Messages.JETTransformMainTab_TransformInputGroup);
        GridLayout layout = new GridLayout();
        layout.numColumns = 1;
        group.setLayout(layout);
        group.setLayoutData(new GridData(GridData.FILL_HORIZONTAL));

        sourceField = new Text(group, SWT.BORDER);
        GridData gridData = new GridData(GridData.FILL_HORIZONTAL);
        gridData.widthHint = IDialogConstants.ENTRY_FIELD_WIDTH;
        sourceField.setLayoutData(gridData);
        sourceField.addModifyListener(fListener);
        final String accessibleName = group.getText().replaceFirst("(?<!&)&", ""); //$NON-NLS-1$ //$NON-NLS-2$
        sourceField.getAccessible().addAccessibleListener(new AccessibleAdapter() {

            public void getName(AccessibleEvent e) {
                e.result = accessibleName;
            }
        });

        Composite buttonComposite = new Composite(group, SWT.NONE);
        layout = new GridLayout();
        layout.marginHeight = 0;
        layout.marginWidth = 0;
        layout.numColumns = 3;
        gridData = new GridData(GridData.HORIZONTAL_ALIGN_END);
        buttonComposite.setLayout(layout);
        buttonComposite.setLayoutData(gridData);
        buttonComposite.setFont(parent.getFont());

        workspaceLocationButton = createPushButton(buttonComposite, Messages.JETTransformMainTab_BrowseButtonLabel,
                null);
        workspaceLocationButton.addSelectionListener(new SelectionAdapter() {
            public void widgetSelected(SelectionEvent e) {

                IResource resource = chooseResource(getShell());
                if (resource != null) {
                    sourceField.setText(resource.getFullPath().makeRelative().toString());
                }
            }
        });

    }

    // Criado por Daniel Lucrdio
    // Cria o trecho da tela para configurar o arquivo
    // de mapeamento
    private void createMapFileBlock(Composite parent) {
        Group group = new Group(parent, SWT.NONE);
        group.setText("Mapping file");
        GridLayout layout = new GridLayout();
        layout.numColumns = 1;
        group.setLayout(layout);
        group.setLayoutData(new GridData(GridData.FILL_HORIZONTAL));

        mappingFileField = new Text(group, SWT.BORDER);
        GridData gridData = new GridData(GridData.FILL_HORIZONTAL);
        gridData.widthHint = IDialogConstants.ENTRY_FIELD_WIDTH;
        mappingFileField.setLayoutData(gridData);
        mappingFileField.addModifyListener(fListener);
        final String accessibleName = group.getText().replaceFirst("(?<!&)&", ""); //$NON-NLS-1$ //$NON-NLS-2$
        mappingFileField.getAccessible().addAccessibleListener(new AccessibleAdapter() {

            public void getName(AccessibleEvent e) {
                e.result = accessibleName;
            }
        });

        Composite buttonComposite = new Composite(group, SWT.NONE);
        layout = new GridLayout();
        layout.marginHeight = 0;
        layout.marginWidth = 0;
        layout.numColumns = 3;
        gridData = new GridData(GridData.HORIZONTAL_ALIGN_END);
        buttonComposite.setLayout(layout);
        buttonComposite.setLayoutData(gridData);
        buttonComposite.setFont(parent.getFont());

        mappingFileWorkspaceLocationButton = createPushButton(buttonComposite,
                Messages.JETTransformMainTab_BrowseButtonLabel, null);
        mappingFileWorkspaceLocationButton.addSelectionListener(new SelectionAdapter() {
            public void widgetSelected(SelectionEvent e) {

                IPath mappingFile = chooseOrCreateResource(getShell());
                if (mappingFile != null) {
                    mappingFileField.setText(mappingFile.makeRelative().toString());
                }
            }
        });

    }

    private static IResource chooseResource(Shell shell) {
        IResource resource = null;
        ElementTreeSelectionDialog dialog = new ElementTreeSelectionDialog(shell, new WorkbenchLabelProvider(),
                new WorkbenchContentProvider());

        dialog.setInput(ResourcesPlugin.getWorkspace().getRoot());
        dialog.setAllowMultiple(false);
        dialog.setTitle(Messages.JETTransformMainTab_SelectResourceDialogTitle);
        dialog.setMessage(Messages.JETTransformMainTab_SelectResourceDialogTitle);
        dialog.setValidator(new ISelectionStatusValidator() {
            public IStatus validate(Object[] selection) {
                if (selection.length > 0)
                    return new Status(IStatus.OK, Activator.getDefault().getBundle().getSymbolicName(), IStatus.OK,
                            "", null); //$NON-NLS-1$

                return new Status(IStatus.ERROR, Activator.getDefault().getBundle().getSymbolicName(),
                        IStatus.ERROR, "", null); //$NON-NLS-1$
            }
        });
        if (dialog.open() == ElementTreeSelectionDialog.OK) {
            resource = (IResource) dialog.getFirstResult();
        }
        return resource;
    }

    // Criado por Daniel Lucrdio
    // Cria uma janela para o usurio escolher ou criar um novo arquivo
    private static IPath chooseOrCreateResource(Shell shell) {
        SaveAsDialog dialog = new SaveAsDialog(shell);

        int result = dialog.open();
        if (result == SaveAsDialog.OK)
            return dialog.getResult();
        return null;
    }

    /* (non-Javadoc)
     * @see org.eclipse.debug.ui.ILaunchConfigurationTab#getName()
     */
    public String getName() {
        return Messages.LaunchWizard_MainTab_Name;
    }

    /* (non-Javadoc)
     * @see org.eclipse.debug.ui.ILaunchConfigurationTab#initializeFrom(org.eclipse.debug.core.ILaunchConfiguration)
     */
    public void initializeFrom(ILaunchConfiguration configuration) {
        try {
            final String id = configuration.getAttribute(JETLaunchConstants.ID, EMPTY_STRING);
            transformCombo.setText(id);
            final IJETBundleDescriptor descriptor = JET2Platform.getJETBundleManager().getDescriptor(id);
            if (descriptor != null) {
                transformName.setText(descriptor.getName());
                transformDescription.setText(descriptor.getDescription().trim());
            }
        } catch (CoreException e) {
            transformCombo.setText(EMPTY_STRING);
        }
        try {
            sourceField.setText(configuration.getAttribute(JETLaunchConstants.SOURCE, EMPTY_STRING));
        } catch (CoreException e) {
            sourceField.setText(EMPTY_STRING);
        }

        // Adicionado por Daniel Lucrdio
        // Inicializa os dados do form com a configura?o do arquivo de mapeamento
        try {
            mappingFileField.setText(configuration.getAttribute(JETLaunchConstants.MAPPING_FILE, EMPTY_STRING));
        } catch (CoreException e) {
            mappingFileField.setText(EMPTY_STRING);
        }

        int level;
        try {
            level = configuration.getAttribute(JETLaunchConstants.LOG_FILTER_LEVEL,
                    RuntimeLoggerContextExtender.INFO_LEVEL);
        } catch (CoreException e) {
            level = RuntimeLoggerContextExtender.INFO_LEVEL;
        }
        logLevelCombo.setText(getLogLevelText(level));
    }

    private String[] getLogLevels() {
        if (logLevels == null) {
            logLevels = new String[] { Messages.JETTransformMainTab_ErrorSeverity,
                    Messages.JETTransformMainTab_WarningSeverity, Messages.JETTransformMainTab_InformationSeverity,
                    Messages.JETTransformMainTab_TraceSeverity, Messages.JETTransformMainTab_DebugSeverity, };
        }
        return logLevels;
    }

    private int getLogLevelFromIndex(int selectionIndex) {
        // list is from highest (5) to lowest (1)
        return getLogLevels().length - selectionIndex;
    }

    private String getLogLevelText(int logLevel) {
        // log levels list are from highest (5) to lowest (1)
        return getLogLevels()[getLogLevels().length - logLevel];
    }

    /*
     * (non-Javadoc)
     * 
     * @see org.eclipse.debug.ui.ILaunchConfigurationTab#performApply(org.eclipse.debug.core.ILaunchConfigurationWorkingCopy)
     */
    public void performApply(ILaunchConfigurationWorkingCopy configuration) {
        configuration.setAttribute(JETLaunchConstants.ID, transformCombo.getText());

        configuration.setAttribute(JETLaunchConstants.SOURCE, sourceField.getText());

        // Adicionado por Daniel Lucrdio
        // Configura o arquivo de mapeamento
        configuration.setAttribute(JETLaunchConstants.MAPPING_FILE, mappingFileField.getText());

        configuration.setAttribute(JETLaunchConstants.LOG_FILTER_LEVEL,
                getLogLevelFromIndex(logLevelCombo.getSelectionIndex()));

    }

    /* (non-Javadoc)
     * @see org.eclipse.debug.ui.ILaunchConfigurationTab#setDefaults(org.eclipse.debug.core.ILaunchConfigurationWorkingCopy)
     */
    public void setDefaults(ILaunchConfigurationWorkingCopy configuration) {
        ISelection selection = PlatformUI.getWorkbench().getActiveWorkbenchWindow().getActivePage().getSelection();

        IFile resource = null;
        String id = null;

        if (selection instanceof IStructuredSelection) {
            IStructuredSelection iss = (IStructuredSelection) selection;
            Object firstElement = iss.getFirstElement();
            if (firstElement instanceof IFile) {
                resource = (IFile) firstElement;
            } else if (firstElement instanceof IAdaptable) {
                resource = (IFile) ((IAdaptable) firstElement).getAdapter(IFile.class);
            }
        }
        if (resource != null) {
            configuration.setAttribute(JETLaunchConstants.SOURCE, resource.getFullPath().makeRelative().toString());

            final IProject project = resource.getProject();
            final IJETBundleDescriptor descriptor = JET2Platform.getProjectDescription(project.getName());
            if (descriptor != null) {
                id = descriptor.getId();
                configuration.setAttribute(JETLaunchConstants.ID, id);

            }
        }
        configuration.setAttribute(JETLaunchConstants.LOG_FILTER_LEVEL, RuntimeLoggerContextExtender.INFO_LEVEL);

        configuration.rename(LaunchShortcut.generateLaunchName(id, resource));
    }

    public Image getImage() {
        if (tabImage == null) {
            ImageDescriptor imageDescriptor = Activator.getImageDescriptor("icons/JET2LaunchIcon.gif"); //$NON-NLS-1$
            tabImage = imageDescriptor.createImage();
        }
        return tabImage;
    }

    public void dispose() {
        if (tabImage != null) {
            tabImage.dispose();
        }
        super.dispose();
    }

}