]> gerrit.simantics Code Review - simantics/district.git/blobdiff - org.simantics.maps.server.ui/src/org/simantics/maps/server/ui/prefs/MapsServerPreferencePage.java
Elimination of compiler warnings.
[simantics/district.git] / org.simantics.maps.server.ui / src / org / simantics / maps / server / ui / prefs / MapsServerPreferencePage.java
index 548daf310fe663ab277a96f2185d6a40c888d6e3..8a1a6f91271f2bd2d54372f5724f5c68d99a59d3 100644 (file)
@@ -2,6 +2,9 @@ package org.simantics.maps.server.ui.prefs;
 
 import java.io.IOException;
 import java.net.URISyntaxException;
+import java.nio.file.Files;
+import java.nio.file.Path;
+import java.nio.file.Paths;
 import java.util.List;
 
 import org.eclipse.core.runtime.preferences.InstanceScope;
@@ -13,6 +16,8 @@ import org.eclipse.jface.preference.FieldEditorPreferencePage;
 import org.eclipse.jface.preference.FileFieldEditor;
 import org.eclipse.jface.preference.IPreferenceStore;
 import org.eclipse.jface.preference.IntegerFieldEditor;
+import org.eclipse.jface.util.IPropertyChangeListener;
+import org.eclipse.jface.util.PropertyChangeEvent;
 import org.eclipse.swt.SWT;
 import org.eclipse.swt.events.SelectionAdapter;
 import org.eclipse.swt.events.SelectionEvent;
@@ -26,7 +31,7 @@ import org.eclipse.ui.preferences.ScopedPreferenceStore;
 import org.simantics.district.maps.server.TileserverMapnik;
 import org.simantics.district.maps.server.TileserverMapnikInstance;
 import org.simantics.district.maps.server.prefs.MapsServerPreferences;
-import org.simantics.ui.workbench.e4.E4WorkbenchUtils;
+import org.simantics.maps.server.ui.TileserverMapnikStartJob;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 
@@ -36,6 +41,8 @@ public class MapsServerPreferencePage extends FieldEditorPreferencePage implemen
     
     private TileserverMapnik server;
 
+    private FileFieldEditor addNew;
+
     public MapsServerPreferencePage() {
         super(GRID);
         setDescription("Maps server preferences");
@@ -57,13 +64,33 @@ public class MapsServerPreferencePage extends FieldEditorPreferencePage implemen
 
     private void createServerStatusField(Composite parent) {
         Label label = new Label(parent, SWT.NONE);
+
+        Button b = new Button(parent, SWT.NONE);
+        updateWidgets(label, b);
+        b.addSelectionListener(new SelectionAdapter() {
+            
+            @Override
+            public void widgetSelected(SelectionEvent e) {
+                try {
+                    if (server.isRunning()) {
+                        server.stop();
+                        updateWidgets(label, b);
+                    } else {
+                        new TileserverMapnikStartJob().schedule();
+                    }
+                } catch (Exception ex) {
+                    LOGGER.error("Could not start/stop server", ex);
+                }
+            }
+        });
+    }
+    
+    private void updateWidgets(Label label, Button b) {
         String labelText = "";
         String buttonText = "";
         int labelColor = -1;
-        boolean running = false;
         try {
             if (server.isRunning()) {
-                running = true;
                 buttonText = "Stop";
                 labelText = "running";
                 labelColor = SWT.COLOR_DARK_GREEN;
@@ -79,24 +106,7 @@ public class MapsServerPreferencePage extends FieldEditorPreferencePage implemen
         label.setText("Tileserver is currently " + labelText);
         label.setForeground(getShell().getDisplay().getSystemColor(labelColor));
         
-        Button b = new Button(parent, SWT.NONE);
         b.setText(buttonText + " server");
-        b.addSelectionListener(new SelectionAdapter() {
-            
-            @Override
-            public void widgetSelected(SelectionEvent e) {
-                try {
-                    if (server.isRunning()) {
-                        server.stop();
-                    } else {
-                        server.start();
-                    }
-                    
-                } catch (Exception ex) {
-                    LOGGER.error("Could not start/stop server", ex);
-                }
-            }
-        });
     }
     
     private void createGeneralGroup() {
@@ -157,7 +167,8 @@ public class MapsServerPreferencePage extends FieldEditorPreferencePage implemen
                 namesAndValues[i] = nameAndValue;
             }
             
-            ComboFieldEditor selector = new ComboFieldEditor("Styles", "Tile Styles", namesAndValues, parent);
+            ComboFieldEditor selector = new ComboFieldEditor(MapsServerPreferences.P_CURRENT_TM2STYLE, "Tile Styles", namesAndValues, parent);
+            addField(selector);
         } catch (IOException e) {
             e.printStackTrace();
         }
@@ -170,7 +181,7 @@ public class MapsServerPreferencePage extends FieldEditorPreferencePage implemen
         
         createTilesField(tilesGroup);
         
-        GridLayoutFactory.fillDefaults().numColumns(2).equalWidth(false).extendedMargins(12, 12, 12, 12).spacing(5, 4).applyTo(tilesGroup);
+        GridLayoutFactory.fillDefaults().numColumns(3).equalWidth(false).extendedMargins(12, 12, 12, 12).spacing(5, 4).applyTo(tilesGroup);
     }
 
     private void createTilesField(Composite parent) {
@@ -186,15 +197,53 @@ public class MapsServerPreferencePage extends FieldEditorPreferencePage implemen
                 namesAndValues[i] = nameAndValue;
             }
             
-            ComboFieldEditor selector = new ComboFieldEditor("MBTiles", "MBTiles", namesAndValues, parent);
-            
+            ComboFieldEditor selector = new ComboFieldEditor(MapsServerPreferences.P_CURRENT_MBTILES, "MBTiles", namesAndValues, parent);
+            addField(selector);
             
-            FileFieldEditor addNew = new FileFieldEditor("add new", "Add new tiles", parent);
+            addNew = new FileFieldEditor("Add new tiles", "Add new tiles", parent);
+            addNew.setPropertyChangeListener(new IPropertyChangeListener() {
+                
+                @Override
+                public void propertyChange(PropertyChangeEvent event) {
+                    System.out.println(event);
+                }
+            });
             
         } catch (IOException e) {
             LOGGER.error("Could not create tiles field", e);
         }
     }
     
+    @Override
+    protected void performApply() {
+        // Upload new mbtiles file
+        String fileLocation = addNew.getStringValue();
+        if (fileLocation != null && !fileLocation.isEmpty()) {
+            Path p = Paths.get(fileLocation);
+            Path target = server.getDataDirectory().resolve(p.getFileName());
+            try {
+                Files.copy(p, target);
+            } catch (IOException e) {
+                String message = "Could not upload " + fileLocation + " to " + target.toAbsolutePath(); 
+                LOGGER.error(message, e);
+                setErrorMessage(message);
+            }
+        }
+        super.performApply();
+    }
+    
+    @Override
+    public boolean performOk() {
+        boolean success = super.performOk();
+        
+        try {
+            server.stop();
+            new TileserverMapnikStartJob().schedule();
+        } catch (Exception e) {
+            LOGGER.error("Could not restart tileserver-mapnik", e);
+        }
+        
+        return success;
+    }
 
 }