/* * Copyright (c) 2012 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.schema.presets; import java.io.InputStream; import java.net.URI; import org.eclipse.core.runtime.content.IContentType; import org.eclipse.jface.layout.GridDataFactory; import org.eclipse.jface.layout.GridLayoutFactory; import org.eclipse.jface.viewers.ComboViewer; import org.eclipse.jface.viewers.ISelectionChangedListener; import org.eclipse.jface.viewers.SelectionChangedEvent; import org.eclipse.swt.SWT; import org.eclipse.swt.widgets.Composite; import org.eclipse.swt.widgets.Label; import eu.esdihumboldt.hale.common.core.io.HaleIO; import eu.esdihumboldt.hale.common.core.io.supplier.LocatableInputSupplier; import eu.esdihumboldt.hale.common.schema.io.SchemaReader; import eu.esdihumboldt.hale.common.schema.presets.extension.SchemaPreset; import eu.esdihumboldt.hale.ui.io.ImportSource; import eu.esdihumboldt.hale.ui.io.source.AbstractProviderSource; import eu.esdihumboldt.hale.ui.schema.presets.internal.SchemaPresetSelector; /** * TODO Type description * * @author Simon Templer */ public class PresetsSource extends AbstractProviderSource<SchemaReader> { private SchemaPresetSelector selector; private Label description; /** * @see AbstractProviderSource#getSource() */ @Override protected LocatableInputSupplier<? extends InputStream> getSource() { if (selector != null && selector.getSelectedObject() != null) { return selector.getSelectedObject().getLocation(); } return null; } /** * @see AbstractProviderSource#isValidSource() */ @Override protected boolean isValidSource() { return selector.getSelectedObject() != null; } /** * @see AbstractProviderSource#updateContentType() */ @Override protected void updateContentType() { LocatableInputSupplier<? extends InputStream> source = getSource(); IContentType contentType = null; if (source != null) { URI loc = source.getLocation(); String filename = null; if (loc != null) { filename = loc.getPath(); } contentType = HaleIO.findContentType(SchemaReader.class, source, filename); } getConfiguration().setContentType(contentType); super.updateContentType(); } /** * @see ImportSource#createControls(Composite) */ @Override public void createControls(Composite parent) { GridLayoutFactory parentLayout = GridLayoutFactory.swtDefaults().numColumns(2) .equalWidth(false); parentLayout.applyTo(parent); GridDataFactory labelData = GridDataFactory// .swtDefaults()// .align(SWT.BEGINNING, SWT.CENTER); GridDataFactory controlData = GridDataFactory// .swtDefaults()// .align(SWT.FILL, SWT.CENTER)// .grab(true, false); // preset label Label label = new Label(parent, SWT.NONE); label.setText("Select preset:"); labelData.applyTo(label); // preset selector selector = new SchemaPresetSelector(parent); selector.addSelectionChangedListener(new ISelectionChangedListener() { @Override public void selectionChanged(SelectionChangedEvent event) { if (description != null) { SchemaPreset schema = selector.getSelectedObject(); if (schema != null && schema.getDescription() != null) { description.setText(schema.getDescription()); } else { description.setText(""); } } updateState(true); } }); controlData.applyTo(selector.getControl()); // skipper Composite empty = new Composite(parent, SWT.NONE); GridDataFactory.swtDefaults().hint(1, 1).applyTo(empty); // description label description = new Label(parent, SWT.WRAP); GridDataFactory.fillDefaults().grab(true, true).applyTo(description); // preset label label = new Label(parent, SWT.NONE); label.setText("Import as"); labelData.applyTo(label); // create provider combo ComboViewer providers = createProviders(parent); controlData.applyTo(providers.getControl()); // prevent selector appearing very small parent.pack(); // initial state update updateState(true); } }