package org.simantics.fileimport.ui; import java.nio.file.Paths; import java.util.Map; import java.util.Optional; import javax.inject.Named; import org.eclipse.e4.core.di.annotations.CanExecute; import org.eclipse.e4.core.di.annotations.Execute; import org.eclipse.e4.ui.services.IServiceConstants; import org.eclipse.swt.SWT; import org.eclipse.swt.widgets.FileDialog; import org.eclipse.swt.widgets.Shell; import org.simantics.fileimport.FileImportService; public class ImportFileHandler { @CanExecute public boolean canExecute() { return !FileImportService.supportedExtensionsWithFilters().isEmpty(); } @Execute public void execute(@Named(IServiceConstants.ACTIVE_SHELL) Shell shell) { Map extensions = FileImportService.supportedExtensionsWithFilters(); String[] filterExtensions = (String[]) extensions.keySet().toArray(new String[extensions.keySet().size()]); String[] filterNames = (String[]) extensions.values().toArray(new String[extensions.values().size()]); // Sanity check for (int i = 0; i < filterExtensions.length; i++) { String extension = filterExtensions[i]; if (!extension.startsWith("*.")) { System.err.println("Invalid extension filter provied: " + extension); } } FileDialog dialog = new FileDialog(shell, SWT.OPEN); dialog.setText("Choose File"); dialog.setFilterExtensions(filterExtensions); dialog.setFilterNames(filterNames); final String fileName = dialog.open(); if (fileName == null) return; FileImportService.performFileImport(Paths.get(fileName), Optional.empty()); } }