/* * Copyright (c) 2014 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.io.csv.ui; import org.eclipse.jface.layout.GridDataFactory; import org.eclipse.jface.viewers.ISelectionChangedListener; import org.eclipse.jface.viewers.SelectionChangedEvent; import org.eclipse.jface.viewers.Viewer; import org.eclipse.jface.viewers.ViewerFilter; import org.eclipse.swt.SWT; import org.eclipse.swt.layout.GridLayout; import org.eclipse.swt.widgets.Button; import org.eclipse.swt.widgets.Composite; import org.eclipse.swt.widgets.Label; import org.eclipse.ui.PlatformUI; import eu.esdihumboldt.hale.common.core.io.Value; import eu.esdihumboldt.hale.common.instance.io.InstanceWriter; import eu.esdihumboldt.hale.common.instance.model.DataSet; import eu.esdihumboldt.hale.common.instance.model.TypeFilter; import eu.esdihumboldt.hale.common.schema.model.TypeDefinition; import eu.esdihumboldt.hale.io.csv.InstanceTableIOConstants; import eu.esdihumboldt.hale.ui.common.definition.selector.TypeDefinitionSelector; import eu.esdihumboldt.hale.ui.io.IOWizard; import eu.esdihumboldt.hale.ui.io.config.AbstractConfigurationPage; import eu.esdihumboldt.hale.ui.service.instance.InstanceService; /** * Configuration page for exporting of instances * * @author Patrick Lieb */ public class InstanceExportConfigurationPage extends AbstractConfigurationPage<InstanceWriter, IOWizard<InstanceWriter>> { private Button solveNestedProperties; private TypeDefinitionSelector typeSelector; private Composite page; private final ViewerFilter validTypesToSelect = new ViewerFilter() { @Override public boolean select(Viewer viewer, Object parentElement, Object element) { if (!(element instanceof TypeDefinition)) return false; InstanceService ins = PlatformUI.getWorkbench().getService(InstanceService.class); // select all source type which has at least one instance if (!ins.getInstances(DataSet.SOURCE).select(new TypeFilter((TypeDefinition) element)) .isEmpty()) { return true; } // select all type which has at least one transformed instance if (!ins.getInstances(DataSet.TRANSFORMED) .select(new TypeFilter((TypeDefinition) element)).isEmpty()) { return true; } return false; } }; /** * */ public InstanceExportConfigurationPage() { super("xlsInstanceExport.configPage"); setTitle("Additonal Export Options"); setDescription("Select if nested properties should be solved and a type"); } /** * @see eu.esdihumboldt.hale.ui.io.config.AbstractConfigurationPage#enable() */ @Override public void enable() { // not required } /** * @see eu.esdihumboldt.hale.ui.io.config.AbstractConfigurationPage#disable() */ @Override public void disable() { // not required } /** * @see eu.esdihumboldt.hale.ui.io.IOWizardPage#updateConfiguration(eu.esdihumboldt.hale.common.core.io.IOProvider) */ @Override public boolean updateConfiguration(InstanceWriter provider) { provider.setParameter(InstanceTableIOConstants.SOLVE_NESTED_PROPERTIES, Value.of(solveNestedProperties.getSelection())); provider.setParameter(InstanceTableIOConstants.EXPORT_TYPE, Value.of(typeSelector.getSelectedObject().getName().toString())); return true; } /** * @see eu.esdihumboldt.hale.ui.HaleWizardPage#createContent(org.eclipse.swt.widgets.Composite) */ @Override protected void createContent(Composite page) { this.page = page; page.setLayout(new GridLayout(1, false)); solveNestedProperties = new Button(page, SWT.CHECK); solveNestedProperties.setText("Solve nested properties"); solveNestedProperties.setSelection(true); final Label label = new Label(page, SWT.NONE); label.setText("Choose your Type you want to export:"); page.pack(); // wait for selected type setPageComplete(false); } @Override protected void onShowPage(boolean firstShow) { if (firstShow) { ViewerFilter[] filters = { validTypesToSelect }; typeSelector = new TypeDefinitionSelector(page, "Select the corresponding schema type", getWizard().getProvider().getTargetSchema(), filters); typeSelector.getControl().setLayoutData( GridDataFactory.fillDefaults().grab(true, false).span(1, 1).create()); typeSelector.addSelectionChangedListener(new ISelectionChangedListener() { @Override public void selectionChanged(SelectionChangedEvent event) { setPageComplete(!(event.getSelection().isEmpty())); if (typeSelector.getSelectedObject() != null) { // TypeDefinition type = // typeSelector.getSelectedObject(); // label.getParent().layout(); page.layout(); page.pack(); } } }); } page.layout(); page.pack(); } }