]> gerrit.simantics Code Review - simantics/platform.git/blob - bundles/org.simantics.fileimport.ui/src/org/simantics/fileimport/ui/ImportFileHandler.java
Externalize strings
[simantics/platform.git] / bundles / org.simantics.fileimport.ui / src / org / simantics / fileimport / ui / ImportFileHandler.java
1 package org.simantics.fileimport.ui;
2
3 import java.nio.file.Paths;
4 import java.util.Map;
5 import java.util.Optional;
6 import java.util.function.Consumer;
7
8 import javax.inject.Named;
9
10 import org.eclipse.core.runtime.IAdaptable;
11 import org.eclipse.e4.core.di.annotations.CanExecute;
12 import org.eclipse.e4.core.di.annotations.Execute;
13 import org.eclipse.e4.ui.services.IServiceConstants;
14 import org.eclipse.jface.viewers.ISelection;
15 import org.eclipse.jface.viewers.StructuredSelection;
16 import org.eclipse.swt.SWT;
17 import org.eclipse.swt.widgets.FileDialog;
18 import org.eclipse.swt.widgets.Shell;
19 import org.simantics.db.Resource;
20 import org.simantics.fileimport.FileImportService;
21 import org.slf4j.Logger;
22 import org.slf4j.LoggerFactory;
23
24 public class ImportFileHandler {
25
26     private static final Logger LOGGER = LoggerFactory.getLogger(ImportFileHandler.class);
27     
28     @CanExecute
29     public boolean canExecute() {
30         return !FileImportService.supportedExtensionsWithFilters().isEmpty();
31     }
32
33     @Execute
34     public void execute(@Named(IServiceConstants.ACTIVE_SELECTION) ISelection selection,
35                 @Named(IServiceConstants.ACTIVE_SHELL) Shell shell) {
36         Map<String, String> extensions = FileImportService.supportedExtensionsWithFilters();
37         String[] filterExtensions = (String[]) extensions.keySet().toArray(new String[extensions.keySet().size()]);
38         String[] filterNames = (String[]) extensions.values().toArray(new String[extensions.values().size()]);
39         
40         // Sanity check
41         for (int i = 0; i < filterExtensions.length; i++) {
42             String extension = filterExtensions[i];
43             if (!extension.startsWith("*.")) { //$NON-NLS-1$
44                 System.err.println("Invalid extension filter provied: " + extension); //$NON-NLS-1$
45             }
46         }
47
48         FileDialog dialog = new FileDialog(shell, SWT.OPEN);
49         dialog.setText(Messages.ImportFileHandler_ChooseFile);
50         dialog.setFilterExtensions(filterExtensions);
51         dialog.setFilterNames(filterNames);
52         final String fileName = dialog.open();
53         if (fileName == null)
54             return;
55         
56         Resource selectedResource = null;
57         try {
58                 if(selection instanceof StructuredSelection) {
59                         StructuredSelection structuredSelection = (StructuredSelection)selection;
60                         Object elem = structuredSelection.getFirstElement();
61                         IAdaptable a = (IAdaptable)elem;
62                         selectedResource = a.getAdapter(Resource.class);
63                 }
64         } catch(NullPointerException | ClassCastException npe) {
65                 LOGGER.warn("Failed to find selection, passing null to file importer", npe); //$NON-NLS-1$
66         }
67         
68         FileImportService.performFileImport(Paths.get(fileName), Optional.of(selectedResource), Optional.of((Consumer<Throwable>) t -> {
69             LOGGER.error("Could not import file " + fileName, t); //$NON-NLS-1$
70         }));
71     }
72 }