org.eclipse.wst.validation.internal.ui.DelegatingValidatorPreferencesDialog.java Source code

Java tutorial

Introduction

Here is the source code for org.eclipse.wst.validation.internal.ui.DelegatingValidatorPreferencesDialog.java

Source

/*******************************************************************************
 * Copyright (c) 2006, 2008 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 Corporation - initial API and implementation
 * David Schneider, david.schneider@unisys.com - [142500] WTP properties pages fonts don't follow Eclipse preferences
 *******************************************************************************/

package org.eclipse.wst.validation.internal.ui;

import java.util.Map;

import org.eclipse.jface.dialogs.Dialog;
import org.eclipse.jface.resource.JFaceResources;
import org.eclipse.jface.viewers.ComboViewer;
import org.eclipse.jface.viewers.ILabelProvider;
import org.eclipse.jface.viewers.ILabelProviderListener;
import org.eclipse.jface.viewers.ISelectionChangedListener;
import org.eclipse.jface.viewers.IStructuredContentProvider;
import org.eclipse.jface.viewers.IStructuredSelection;
import org.eclipse.jface.viewers.StructuredSelection;
import org.eclipse.jface.viewers.Viewer;
import org.eclipse.swt.SWT;
import org.eclipse.swt.graphics.Image;
import org.eclipse.swt.layout.GridData;
import org.eclipse.swt.layout.GridLayout;
import org.eclipse.swt.widgets.Combo;
import org.eclipse.swt.widgets.Composite;
import org.eclipse.swt.widgets.Control;
import org.eclipse.swt.widgets.Label;
import org.eclipse.swt.widgets.Shell;
import org.eclipse.wst.validation.internal.ValidatorMetaData;
import org.eclipse.wst.validation.internal.delegates.ValidatorDelegateDescriptor;
import org.eclipse.wst.validation.internal.delegates.ValidatorDelegatesRegistry;
import org.eclipse.wst.validation.ui.internal.ValUIMessages;

/**
 * Dialog used to allow the user to select a validator delegate from the list of
 * registered delegates for a given delegating validator.
 */
public class DelegatingValidatorPreferencesDialog extends Dialog {
    /**
     * The delegating validator's descriptor.
     */
    private ValidatorMetaData delegatingValidatorDescriptor;

    /**
     * The selected validator delegate ID.
     */
    private String delegateID;

    /**
     * Constructs the dialog on the given shell.
     * 
     * @param parentShell
     *          the dialog's parent. Must not be null.
     * @param targetID
     *          the delegating validator's id
     * 
     * @param delegateID
     *          the ID of the currently selected validator delegate.
     */
    public DelegatingValidatorPreferencesDialog(Shell parentShell, ValidatorMetaData vmd, String delegateID) {
        super(parentShell);

        delegatingValidatorDescriptor = vmd;
        this.delegateID = delegateID;
    }

    /*
     * (non-Javadoc)
     * 
     * @see org.eclipse.jface.dialogs.Dialog#createDialogArea(org.eclipse.swt.widgets.Composite)
     */
    protected Control createDialogArea(Composite parent) {
        super.createDialogArea(parent);

        getShell().setText(ValUIMessages.DelegatesDialogTitle);

        GridLayout layout = new GridLayout();
        parent.setLayout(layout);

        Label label = new Label(parent, SWT.NONE);
        GridData labelData = new GridData(SWT.FILL, SWT.CENTER, true, false);
        labelData.widthHint = 250;
        label.setLayoutData(labelData);
        label.setFont(JFaceResources.getFontRegistry().getBold(JFaceResources.DIALOG_FONT));
        String delegatingValidatorName = delegatingValidatorDescriptor.getValidatorDisplayName();
        label.setText(delegatingValidatorName);

        Label separator = new Label(parent, SWT.SEPARATOR | SWT.HORIZONTAL);
        GridData separatorData = new GridData(SWT.FILL, SWT.CENTER, true, false);
        separator.setLayoutData(separatorData);

        Composite group = new Composite(parent, SWT.NONE);
        GridData groupGridData = new GridData(SWT.FILL, SWT.CENTER, true, false);
        group.setLayoutData(groupGridData);
        GridLayout groupLayout = new GridLayout(2, false);
        group.setLayout(groupLayout);

        Label comboLabel = new Label(group, SWT.NONE);
        comboLabel.setLayoutData(new GridData());
        comboLabel.setText(ValUIMessages.DelegatesComboLabel);

        Combo combo = new Combo(group, SWT.READ_ONLY);
        GridData comboGridData = new GridData(SWT.FILL, SWT.CENTER, true, false);
        combo.setLayoutData(comboGridData);

        final ComboViewer comboViewer = new ComboViewer(combo);
        comboViewer.setContentProvider(new DelegatesContentProvider());
        comboViewer.setLabelProvider(new DelegatesLabelProvider());
        String targetID = delegatingValidatorDescriptor.getValidatorUniqueName();

        comboViewer.addSelectionChangedListener(new ISelectionChangedListener() {

            public void selectionChanged(org.eclipse.jface.viewers.SelectionChangedEvent event) {
                IStructuredSelection selection = (IStructuredSelection) comboViewer.getSelection();
                setDelegateID(((ValidatorDelegateDescriptor) selection.getFirstElement()).getId());
            }
        });

        comboViewer.setInput(targetID);

        ValidatorDelegateDescriptor selected = ValidatorDelegatesRegistry.getInstance().getDescriptor(targetID,
                delegateID);

        if (selected != null) {
            comboViewer.setSelection(new StructuredSelection(new Object[] { selected }));
        }

        Label endSeparator = new Label(parent, SWT.SEPARATOR | SWT.HORIZONTAL);
        GridData endSeparatorData = new GridData(SWT.FILL, SWT.CENTER, true, false);
        endSeparator.setLayoutData(endSeparatorData);
        Dialog.applyDialogFont(parent);

        return parent;
    }

    /**
     * Provides contents for the delegate validators combo box.
     */
    private final class DelegatesContentProvider implements IStructuredContentProvider {
        public void dispose() {
        }

        /*
         * (non-Javadoc)
         * 
         * @see org.eclipse.jface.viewers.IStructuredContentProvider#getElements(java.lang.Object)
         */
        public Object[] getElements(Object inputElement) {
            String targetID = (String) inputElement;
            Map delegatesByID = ValidatorDelegatesRegistry.getInstance().getDelegateDescriptors(targetID);

            if (delegatesByID == null) {
                return new Object[] {};
            }

            return delegatesByID.values().toArray();
        }

        /*
         * (non-Javadoc)
         * 
         * @see org.eclipse.jface.viewers.IContentProvider#inputChanged(org.eclipse.jface.viewers.Viewer,
         *      java.lang.Object, java.lang.Object)
         */
        public void inputChanged(Viewer viewer, Object oldInput, Object newInput) {
        }
    }

    /**
     * Provides the labels/images for the delegate validator combo box
     * 
     * @author vbaciul
     * 
     */
    private final class DelegatesLabelProvider implements ILabelProvider {
        /*
         * (non-Javadoc)
         * 
         * @see org.eclipse.jface.viewers.IBaseLabelProvider#addListener(org.eclipse.jface.viewers.ILabelProviderListener)
         */
        public void addListener(ILabelProviderListener listener) {
        }

        /*
         * (non-Javadoc)
         * 
         * @see org.eclipse.jface.viewers.IBaseLabelProvider#dispose()
         */
        public void dispose() {
        }

        /*
         * (non-Javadoc)
         * 
         * @see org.eclipse.jface.viewers.ILabelProvider#getImage(java.lang.Object)
         */
        public Image getImage(Object element) {
            return null;
        }

        /*
         * (non-Javadoc)
         * 
         * @see org.eclipse.jface.viewers.ILabelProvider#getText(java.lang.Object)
         */
        public String getText(Object element) {
            return ((ValidatorDelegateDescriptor) element).getName();
        }

        /*
         * (non-Javadoc)
         * 
         * @see org.eclipse.jface.viewers.IBaseLabelProvider#isLabelProperty(java.lang.Object,
         *      java.lang.String)
         */
        public boolean isLabelProperty(Object element, String property) {
            return false;
        }

        /*
         * (non-Javadoc)
         * 
         * @see org.eclipse.jface.viewers.IBaseLabelProvider#removeListener(org.eclipse.jface.viewers.ILabelProviderListener)
         */
        public void removeListener(ILabelProviderListener listener) {
        }
    }

    /*
     * Provides the ID of the currently selected validator delegate ID.
     */
    public String getDelegateID() {
        return delegateID;
    }

    /**
     * Sets the currently selected validator delegate ID.
     * 
     * @param delegateID
     */
    private void setDelegateID(String delegateID) {
        this.delegateID = delegateID;
    }
}