eu.esdihumboldt.hale.ui.io.target.URLTarget.java Source code

Java tutorial

Introduction

Here is the source code for eu.esdihumboldt.hale.ui.io.target.URLTarget.java

Source

/*
 * Copyright (c) 2015 Data Harmonisation Panel
 * 
 * All rights reserved. This program and the accompanying materials are made
 * available under the terms of the GNU Lesser General Public License as
 * published by the Free Software Foundation, either version 3 of the License,
 * or (at your option) any later version.
 * 
 * You should have received a copy of the GNU Lesser General Public License
 * along with this distribution. If not, see <http://www.gnu.org/licenses/>.
 * 
 * Contributors:
 *     Data Harmonisation Panel <http://www.dhpanel.eu>
 */

package eu.esdihumboldt.hale.ui.io.target;

import java.io.IOException;
import java.io.OutputStream;
import java.net.URI;
import java.util.Set;

import org.eclipse.core.runtime.content.IContentType;
import org.eclipse.jface.layout.GridLayoutFactory;
import org.eclipse.jface.preference.FieldEditor;
import org.eclipse.jface.util.IPropertyChangeListener;
import org.eclipse.jface.util.PropertyChangeEvent;
import org.eclipse.jface.viewers.ArrayContentProvider;
import org.eclipse.jface.viewers.ComboViewer;
import org.eclipse.jface.viewers.ISelection;
import org.eclipse.jface.viewers.ISelectionChangedListener;
import org.eclipse.jface.viewers.IStructuredSelection;
import org.eclipse.jface.viewers.LabelProvider;
import org.eclipse.jface.viewers.SelectionChangedEvent;
import org.eclipse.jface.viewers.StructuredSelection;
import org.eclipse.swt.SWT;
import org.eclipse.swt.layout.GridData;
import org.eclipse.swt.layout.GridLayout;
import org.eclipse.swt.widgets.Composite;
import org.eclipse.swt.widgets.Label;

import eu.esdihumboldt.hale.common.core.io.ExportProvider;
import eu.esdihumboldt.hale.common.core.io.supplier.LocatableOutputSupplier;

/**
 * Target selector for an URL/URI.
 * 
 * @author Simon Templer
 */
public class URLTarget extends AbstractTarget<ExportProvider> {

    private URLTargetURIFieldEditor targetURL;
    private ComboViewer types;

    /**
     * @see eu.esdihumboldt.hale.ui.io.ExportTarget#createControls(org.eclipse.swt.widgets.Composite)
     */
    @Override
    public void createControls(Composite parent) {
        parent.setLayout(new GridLayout(3, false));

        // source file
        targetURL = new URLTargetURIFieldEditor("targetURL", "Target URL", parent) {

            @Override
            protected void onHistorySelected(URI location) {
                updateState();
            }

        };
        targetURL.setPage(getPage());

        targetURL.setPropertyChangeListener(new IPropertyChangeListener() {

            @Override
            public void propertyChange(PropertyChangeEvent event) {
                if (event.getProperty().equals(FieldEditor.IS_VALID)) {
                    getPage().setMessage(null);
                    updateState();
                } else if (event.getProperty().equals(FieldEditor.VALUE)) {
                    getPage().setMessage(null);
                    updateState();
                }
            }
        });

        // content type selection

        // label
        Label typesLabel = new Label(parent, SWT.NONE);
        typesLabel.setText("Content type");

        // types combo
        Composite group = new Composite(parent, SWT.NONE);
        group.setLayoutData(new GridData(SWT.FILL, SWT.FILL, true, false, 2, 1));
        group.setLayout(GridLayoutFactory.fillDefaults().numColumns(2).create());

        types = new ComboViewer(group, SWT.DROP_DOWN | SWT.READ_ONLY);
        types.getControl().setLayoutData(new GridData(SWT.FILL, SWT.CENTER, true, false));
        types.setContentProvider(ArrayContentProvider.getInstance());
        types.setLabelProvider(new LabelProvider() {

            @Override
            public String getText(Object element) {
                if (element instanceof IContentType) {
                    return ((IContentType) element).getName();
                }
                return super.getText(element);
            }

        });

        // process selection changes
        types.addSelectionChangedListener(new ISelectionChangedListener() {

            @Override
            public void selectionChanged(SelectionChangedEvent event) {
                // update content type
                ISelection sel = event.getSelection();
                if (sel.isEmpty() || !(sel instanceof IStructuredSelection)) {
                    setContentType(null);
                } else {
                    setContentType((IContentType) ((IStructuredSelection) sel).getFirstElement());
                }
            }
        });
    }

    /**
     * Update the page state.
     */
    protected void updateState() {
        setValid(targetURL.isValid());
    }

    @Override
    public void onShowPage(boolean firstShow) {
        super.onShowPage(firstShow);

        targetURL.updateHistory();

        IContentType contentType = getWizard().getProvider().getContentType();
        Set<IContentType> supportedTypes = getAllowedContentTypes();
        types.setInput(supportedTypes);
        if (supportedTypes.size() == 1) {
            types.setSelection(new StructuredSelection(supportedTypes.iterator().next()));
        } else if (contentType != null) {
            types.setSelection(new StructuredSelection(contentType));
        }
    }

    @Override
    public boolean updateConfiguration(ExportProvider provider) {
        if (targetURL.isValid()) {
            final URI url = targetURL.getURI(true);
            provider.setTarget(new LocatableOutputSupplier<OutputStream>() {

                @Override
                public OutputStream getOutput() throws IOException {
                    return null;
                }

                @Override
                public URI getLocation() {
                    return url;
                }
            });

            return true;
        }
        return false;
    }

}