]> gerrit.simantics Code Review - simantics/platform.git/blobdiff - 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
index ff6ab675b97aede9223155f42b56488e931b7e77..1bdcd15757985cd2ef14366630fc6499414f4aa0 100644 (file)
@@ -1,49 +1,72 @@
-\r
-package org.simantics.fileimport.ui;\r
-\r
-import java.nio.file.Paths;\r
-import java.util.Map;\r
-import java.util.Optional;\r
-\r
-import javax.inject.Named;\r
-\r
-import org.eclipse.e4.core.di.annotations.CanExecute;\r
-import org.eclipse.e4.core.di.annotations.Execute;\r
-import org.eclipse.e4.ui.services.IServiceConstants;\r
-import org.eclipse.swt.SWT;\r
-import org.eclipse.swt.widgets.FileDialog;\r
-import org.eclipse.swt.widgets.Shell;\r
-import org.simantics.fileimport.FileImportService;\r
-\r
-public class ImportFileHandler {\r
-\r
-    @CanExecute\r
-    public boolean canExecute() {\r
-        return !FileImportService.supportedExtensionsWithFilters().isEmpty();\r
-    }\r
-\r
-    @Execute\r
-    public void execute(@Named(IServiceConstants.ACTIVE_SHELL) Shell shell) {\r
-\r
-        Map<String, String> extensions = FileImportService.supportedExtensionsWithFilters();\r
-        String[] filterExtensions = (String[]) extensions.keySet().toArray(new String[extensions.keySet().size()]);\r
-        String[] filterNames = (String[]) extensions.values().toArray(new String[extensions.values().size()]);\r
-        \r
-        // Sanity check\r
-        for (int i = 0; i < filterExtensions.length; i++) {\r
-            String extension = filterExtensions[i];\r
-            if (!extension.startsWith("*.")) {\r
-                System.err.println("Invalid extension filter provied: " + extension);\r
-            }\r
-        }\r
-\r
-        FileDialog dialog = new FileDialog(shell, SWT.OPEN);\r
-        dialog.setText("Choose File");\r
-        dialog.setFilterExtensions(filterExtensions);\r
-        dialog.setFilterNames(filterNames);\r
-        final String fileName = dialog.open();\r
-        if (fileName == null)\r
-            return;\r
-        FileImportService.performFileImport(Paths.get(fileName), Optional.empty());\r
-    }\r
+package org.simantics.fileimport.ui;
+
+import java.nio.file.Paths;
+import java.util.Map;
+import java.util.Optional;
+import java.util.function.Consumer;
+
+import javax.inject.Named;
+
+import org.eclipse.core.runtime.IAdaptable;
+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.jface.viewers.ISelection;
+import org.eclipse.jface.viewers.StructuredSelection;
+import org.eclipse.swt.SWT;
+import org.eclipse.swt.widgets.FileDialog;
+import org.eclipse.swt.widgets.Shell;
+import org.simantics.db.Resource;
+import org.simantics.fileimport.FileImportService;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+
+public class ImportFileHandler {
+
+    private static final Logger LOGGER = LoggerFactory.getLogger(ImportFileHandler.class);
+    
+    @CanExecute
+    public boolean canExecute() {
+        return !FileImportService.supportedExtensionsWithFilters().isEmpty();
+    }
+
+    @Execute
+    public void execute(@Named(IServiceConstants.ACTIVE_SELECTION) ISelection selection,
+               @Named(IServiceConstants.ACTIVE_SHELL) Shell shell) {
+        Map<String, String> 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("*.")) { //$NON-NLS-1$
+                System.err.println("Invalid extension filter provied: " + extension); //$NON-NLS-1$
+            }
+        }
+
+        FileDialog dialog = new FileDialog(shell, SWT.OPEN);
+        dialog.setText(Messages.ImportFileHandler_ChooseFile);
+        dialog.setFilterExtensions(filterExtensions);
+        dialog.setFilterNames(filterNames);
+        final String fileName = dialog.open();
+        if (fileName == null)
+            return;
+        
+        Resource selectedResource = null;
+        try {
+               if(selection instanceof StructuredSelection) {
+                       StructuredSelection structuredSelection = (StructuredSelection)selection;
+                       Object elem = structuredSelection.getFirstElement();
+                       IAdaptable a = (IAdaptable)elem;
+                       selectedResource = a.getAdapter(Resource.class);
+               }
+        } catch(NullPointerException | ClassCastException npe) {
+               LOGGER.warn("Failed to find selection, passing null to file importer", npe); //$NON-NLS-1$
+        }
+        
+        FileImportService.performFileImport(Paths.get(fileName), Optional.of(selectedResource), Optional.of((Consumer<Throwable>) t -> {
+            LOGGER.error("Could not import file " + fileName, t); //$NON-NLS-1$
+        }));
+    }
 }
\ No newline at end of file