]> gerrit.simantics Code Review - simantics/district.git/blob - org.simantics.maps.server.ui/src/org/simantics/maps/server/ui/prefs/MapsServerPreferencePage.java
Final push of district changes
[simantics/district.git] / org.simantics.maps.server.ui / src / org / simantics / maps / server / ui / prefs / MapsServerPreferencePage.java
1 package org.simantics.maps.server.ui.prefs;
2
3 import java.io.IOException;
4 import java.net.URISyntaxException;
5 import java.util.List;
6
7 import org.eclipse.core.runtime.preferences.InstanceScope;
8 import org.eclipse.jface.layout.GridDataFactory;
9 import org.eclipse.jface.layout.GridLayoutFactory;
10 import org.eclipse.jface.preference.BooleanFieldEditor;
11 import org.eclipse.jface.preference.ComboFieldEditor;
12 import org.eclipse.jface.preference.FieldEditorPreferencePage;
13 import org.eclipse.jface.preference.FileFieldEditor;
14 import org.eclipse.jface.preference.IPreferenceStore;
15 import org.eclipse.jface.preference.IntegerFieldEditor;
16 import org.eclipse.swt.SWT;
17 import org.eclipse.swt.events.SelectionAdapter;
18 import org.eclipse.swt.events.SelectionEvent;
19 import org.eclipse.swt.widgets.Button;
20 import org.eclipse.swt.widgets.Composite;
21 import org.eclipse.swt.widgets.Group;
22 import org.eclipse.swt.widgets.Label;
23 import org.eclipse.ui.IWorkbench;
24 import org.eclipse.ui.IWorkbenchPreferencePage;
25 import org.eclipse.ui.preferences.ScopedPreferenceStore;
26 import org.simantics.district.maps.server.TileserverMapnik;
27 import org.simantics.district.maps.server.TileserverMapnikInstance;
28 import org.simantics.district.maps.server.prefs.MapsServerPreferences;
29 import org.simantics.ui.workbench.e4.E4WorkbenchUtils;
30 import org.slf4j.Logger;
31 import org.slf4j.LoggerFactory;
32
33 public class MapsServerPreferencePage extends FieldEditorPreferencePage implements IWorkbenchPreferencePage {
34
35     private static final Logger LOGGER = LoggerFactory.getLogger(MapsServerPreferencePage.class);
36     
37     private TileserverMapnik server;
38
39     public MapsServerPreferencePage() {
40         super(GRID);
41         setDescription("Maps server preferences");
42     }
43     
44     @Override
45     public void init(IWorkbench workbench) {
46         try {
47             server = TileserverMapnikInstance.get();
48         } catch (IOException | URISyntaxException e) {
49             LOGGER.error("Could not initialize " + getClass(), e);
50         }
51     }
52
53     @Override
54     protected IPreferenceStore doGetPreferenceStore() {
55         return new ScopedPreferenceStore(InstanceScope.INSTANCE, MapsServerPreferences.P_NODE);
56     }
57
58     private void createServerStatusField(Composite parent) {
59         Label label = new Label(parent, SWT.NONE);
60         String labelText = "";
61         String buttonText = "";
62         int labelColor = -1;
63         boolean running = false;
64         try {
65             if (server.isRunning()) {
66                 running = true;
67                 buttonText = "Stop";
68                 labelText = "running";
69                 labelColor = SWT.COLOR_DARK_GREEN;
70             } else {
71                 labelText = "stopped";
72                 buttonText = "Start";
73             }
74         } catch (IOException | InterruptedException e) {
75             LOGGER.error("Could not create server status field!", e);
76             labelText = "unknown";
77             labelColor = SWT.COLOR_DARK_RED;
78         }
79         label.setText("Tileserver is currently " + labelText);
80         label.setForeground(getShell().getDisplay().getSystemColor(labelColor));
81         
82         Button b = new Button(parent, SWT.NONE);
83         b.setText(buttonText + " server");
84         b.addSelectionListener(new SelectionAdapter() {
85             
86             @Override
87             public void widgetSelected(SelectionEvent e) {
88                 try {
89                     if (server.isRunning()) {
90                         server.stop();
91                     } else {
92                         server.start();
93                     }
94                     
95                 } catch (Exception ex) {
96                     LOGGER.error("Could not start/stop server", ex);
97                 }
98             }
99         });
100     }
101     
102     private void createGeneralGroup() {
103         Group serverGroup = new Group(getFieldEditorParent(), SWT.NONE);
104         serverGroup.setText("General");
105         GridDataFactory.fillDefaults().grab(true, false).span(2, 1).applyTo(serverGroup);
106         
107         createServerStatusField(serverGroup);
108
109         IntegerFieldEditor port = new IntegerFieldEditor(MapsServerPreferences.P_DEFAULT_PORT, "Tileserver port", serverGroup);
110         addField(port);
111
112         BooleanFieldEditor automatically = new BooleanFieldEditor(MapsServerPreferences.P_START_AUTOMATICALLY, "Start tileserver automatically", serverGroup);
113         addField(automatically);
114         
115         Button openInExplorer = new Button(serverGroup, SWT.NONE);
116         openInExplorer.setText("Open server folder");
117         openInExplorer.addSelectionListener(new SelectionAdapter() {
118             
119             @Override
120             public void widgetSelected(SelectionEvent e) {
121 //                E4WorkbenchUtils.showInSystemExplorer("");
122             }
123         });
124         
125         GridLayoutFactory.fillDefaults().numColumns(2).equalWidth(false).extendedMargins(12, 12, 12, 12).spacing(5, 4).applyTo(serverGroup);
126     }
127     
128     @Override
129     protected void createFieldEditors() {
130         createGeneralGroup();
131         
132         createStylesGroup();
133         
134         createTilesGroup();
135     }
136
137     private void createStylesGroup() {
138         Group stylesGroup = new Group(getFieldEditorParent(), SWT.NONE);
139         stylesGroup.setText("Styles");
140         GridDataFactory.fillDefaults().grab(true, false).span(2, 1).applyTo(stylesGroup);
141         
142         createTM2StylesField(stylesGroup);
143         
144         GridLayoutFactory.fillDefaults().numColumns(2).equalWidth(false).extendedMargins(12, 12, 12, 12).spacing(5, 4).applyTo(stylesGroup);
145     }
146     
147     private void createTM2StylesField(Composite parent) {
148         try {
149             List<String> styles = server.listStyles();
150             
151             String[][] namesAndValues = new String[styles.size()][];
152             for (int i = 0; i < styles.size(); i++) {
153                 String style = styles.get(i);
154                 String[] nameAndValue = new String[2];
155                 nameAndValue[0] = style;
156                 nameAndValue[1] = style;
157                 namesAndValues[i] = nameAndValue;
158             }
159             
160             ComboFieldEditor selector = new ComboFieldEditor("Styles", "Tile Styles", namesAndValues, parent);
161         } catch (IOException e) {
162             e.printStackTrace();
163         }
164     }
165     
166     private void createTilesGroup() {
167         Group tilesGroup = new Group(getFieldEditorParent(), SWT.NONE);
168         tilesGroup.setText("MBTiles");
169         GridDataFactory.fillDefaults().grab(true, false).span(2, 1).applyTo(tilesGroup);
170         
171         createTilesField(tilesGroup);
172         
173         GridLayoutFactory.fillDefaults().numColumns(2).equalWidth(false).extendedMargins(12, 12, 12, 12).spacing(5, 4).applyTo(tilesGroup);
174     }
175
176     private void createTilesField(Composite parent) {
177         try {
178             List<String> tiles = server.availableMBTiles();
179             
180             String[][] namesAndValues = new String[tiles.size()][];
181             for (int i = 0; i < tiles.size(); i++) {
182                 String style = tiles.get(i);
183                 String[] nameAndValue = new String[2];
184                 nameAndValue[0] = style;
185                 nameAndValue[1] = style;
186                 namesAndValues[i] = nameAndValue;
187             }
188             
189             ComboFieldEditor selector = new ComboFieldEditor("MBTiles", "MBTiles", namesAndValues, parent);
190             
191             
192             FileFieldEditor addNew = new FileFieldEditor("add new", "Add new tiles", parent);
193             
194         } catch (IOException e) {
195             LOGGER.error("Could not create tiles field", e);
196         }
197     }
198     
199
200 }