/* * Copyright (c) 2013 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.instance.exportconfig; import java.util.Set; import org.eclipse.core.runtime.content.IContentType; import org.eclipse.jface.dialogs.DialogPage; import org.eclipse.jface.layout.GridDataFactory; 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.events.ModifyEvent; import org.eclipse.swt.events.ModifyListener; 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 org.eclipse.swt.widgets.Text; import org.eclipse.ui.PlatformUI; import eu.esdihumboldt.hale.common.core.io.Value; import eu.esdihumboldt.hale.common.core.io.project.model.IOConfiguration; import eu.esdihumboldt.hale.common.instance.io.InstanceWriter; import eu.esdihumboldt.hale.ui.io.ExportConfigurations; import eu.esdihumboldt.hale.ui.io.config.AbstractConfigurationPage; import eu.esdihumboldt.hale.ui.service.project.ProjectService; /** * Save configuration for exporting instances * * @author Patrick Lieb */ public class SaveConfigurationInstanceExportPage extends AbstractConfigurationPage<InstanceWriter, SaveConfigurationInstanceExportWizard> implements ExportConfigurations { private Text name; private Text description; private ComboViewer fileFormats; /** * Default Constructor */ public SaveConfigurationInstanceExportPage() { super("instancExport.Namepage"); setTitle("Custom export configuration settings"); setDescription("Configure the export configuration"); } @Override public boolean updateConfiguration(InstanceWriter provider) { getWizard().setConfigurationName(name.getText()); // set additional information to the provider provider.setParameter(PARAM_CONFIGURATION_DESCRIPTION, Value.of(description.getText())); return true; } @Override protected void createContent(Composite page) { // set grid layout with two columns page.setLayout(new GridLayout(2, false)); // create name text field Label labelName = new Label(page, SWT.NONE); labelName.setText("Name:"); labelName.setLayoutData(GridDataFactory.swtDefaults().align(SWT.END, SWT.CENTER).create()); name = new Text(page, SWT.BORDER | SWT.SINGLE); // add listener to set page complete if name is inserted name.addModifyListener(new ModifyListener() { @Override public void modifyText(ModifyEvent e) { update(); } }); name.setLayoutData(GridDataFactory.swtDefaults().align(SWT.FILL, SWT.BEGINNING) .grab(true, false).create()); // create description text field Label labelDesc = new Label(page, SWT.NONE); labelDesc.setText("Description:"); labelDesc.setLayoutData(GridDataFactory.swtDefaults().align(SWT.END, SWT.CENTER).create()); description = new Text(page, SWT.MULTI | SWT.BORDER | SWT.WRAP | SWT.V_SCROLL); // add listener to set page complete if description is inserted description.addModifyListener(new ModifyListener() { @Override public void modifyText(ModifyEvent e) { update(); } }); GridData data = GridDataFactory.swtDefaults().align(SWT.FILL, SWT.BEGINNING) .grab(true, false).create(); data.heightHint = 75; description.setLayoutData(data); // create viewer for possible content types Label labelConf = new Label(page, SWT.NONE); labelConf.setText("Format:"); labelConf.setLayoutData(GridDataFactory.swtDefaults().align(SWT.END, SWT.CENTER).create()); fileFormats = new ComboViewer(page, SWT.DROP_DOWN | SWT.READ_ONLY | SWT.BORDER); data = GridDataFactory.fillDefaults().grab(true, false).create(); // adapt viewer to size of current font fileFormats.getControl().setLayoutData(data); fileFormats.setContentProvider(ArrayContentProvider.getInstance()); fileFormats.setLabelProvider(new LabelProvider() { @Override public String getText(Object element) { if (element instanceof IContentType) { return ((IContentType) element).getName(); } return super.getText(element); } }); // process current selection ISelection selection = fileFormats.getSelection(); setPageComplete(!selection.isEmpty()); // process selection changes fileFormats.addSelectionChangedListener(new ISelectionChangedListener() { @Override public void selectionChanged(SelectionChangedEvent event) { ISelection selection = event.getSelection(); updateContentType(selection); update(); } }); update(); } @Override public void enable() { // do nothing } @Override public void disable() { // do nothing } @Override protected void onShowPage(boolean firstShow) { super.onShowPage(firstShow); Set<IContentType> contentTypes = getWizard().getProviderFactory().getSupportedTypes(); // content types are not available when the page is created, so it has // to be set here fileFormats.setInput(contentTypes); fileFormats.setSelection(new StructuredSelection(contentTypes.iterator().next()), true); updateContentType(fileFormats.getSelection()); } // set content type selected in configuration list viewer to the wizard private void updateContentType(ISelection selection) { IContentType type = (IContentType) ((IStructuredSelection) selection).getFirstElement(); getWizard().setContentType(type); } /** * Update the page state. */ protected void update() { if (fileFormats.getSelection().isEmpty()) { setErrorMessage("Please select a format"); setPageComplete(false); return; } String confName = name.getText(); if (confName == null || confName.isEmpty()) { setErrorMessage("Please provide a name for the preset to easily identify it"); setPageComplete(false); return; } setErrorMessage(null); // configuration with that name already present? ProjectService ps = PlatformUI.getWorkbench().getService(ProjectService.class); IOConfiguration conf = ps.getExportConfiguration(confName); if (conf == null) { setMessage(null); } else { setMessage("Overrides an existing configuration with the same name", DialogPage.WARNING); } setPageComplete(true); } }