1. implement stopping thread
2. implement settings for swing git-svn-id: https://osmand.googlecode.com/svn/trunk@70 e29c36b1-1cfa-d876-8d93-3434fc2bb7b8
This commit is contained in:
parent
02663a32ee
commit
f934e9add1
6 changed files with 296 additions and 17 deletions
|
@ -45,15 +45,12 @@ public class ToDoConstants {
|
|||
|
||||
/// SWING version :
|
||||
// TODO :
|
||||
// 0. Create build.xml & build product for release purposes
|
||||
// 1. Add preferences dialog (use internet, Normalizing streets) !!!
|
||||
// 2. Predefine before file loading what should be extracted from osm (building, poi or roads) !
|
||||
// 3. Fix TODO in files (accept amenity - way)
|
||||
// 4. Interrupt thread when progress dialog is closed
|
||||
// 1. Predefine before file loading what should be extracted from osm (building, poi or roads) !
|
||||
// 2. Fix TODO in files (accept amenity - way)
|
||||
|
||||
// 5. download tiles without using dir tiles
|
||||
// 6. Config file log & see log from file
|
||||
// 7. Reinvent index mechanism (save in zip file with tile indexes, save city/town addresses separately, read partially !)
|
||||
// 8. Invent different file extensions for poi.index, address.index,...
|
||||
// 3. download tiles without using dir tiles
|
||||
// 4. Config file log & see log from file
|
||||
// 5. Reinvent index mechanism (save in zip file with tile indexes, save city/town addresses separately, read partially !)
|
||||
// 6. Invent different file extensions for poi.index, address.index,...
|
||||
|
||||
}
|
||||
|
|
|
@ -37,6 +37,7 @@ import com.osmand.osm.OSMSettings.OSMTagKey;
|
|||
import com.osmand.osm.io.IOsmStorageFilter;
|
||||
import com.osmand.osm.io.OsmBaseStorage;
|
||||
import com.osmand.osm.io.OsmStorageWriter;
|
||||
import com.osmand.swing.DataExtractionSettings;
|
||||
|
||||
|
||||
// TO implement
|
||||
|
@ -292,8 +293,7 @@ public class DataExtraction {
|
|||
country.registerCity(s);
|
||||
}
|
||||
}
|
||||
String[] SUFFIXES = new String[] {"просп.", "пер.", "пр.","заул.", "проспект", "переул.", "бул.", "бульвар"};
|
||||
String[] DEFAUTL_SUFFIXES = new String[] {"улица", "ул."};
|
||||
|
||||
|
||||
private int checkSuffix(String name, String suffix){
|
||||
int i = -1;
|
||||
|
@ -338,6 +338,8 @@ public class DataExtraction {
|
|||
|
||||
public void normalizingStreets(IProgress progress, Region region){
|
||||
progress.startTask("Normalizing name streets...", -1);
|
||||
String[] defaultSuffixes = DataExtractionSettings.getSettings().getDefaultSuffixesToNormalizeStreets();
|
||||
String[] suffixes = DataExtractionSettings.getSettings().getSuffixesToNormalizeStreets();
|
||||
for(CityType t : CityType.values()){
|
||||
for(City c : region.getCitiesByType(t)){
|
||||
ArrayList<Street> list = new ArrayList<Street>(c.getStreets());
|
||||
|
@ -345,7 +347,7 @@ public class DataExtraction {
|
|||
String name = s.getName();
|
||||
String newName = name.trim();
|
||||
boolean processed = newName.length() != name.length();
|
||||
for (String ch : DEFAUTL_SUFFIXES) {
|
||||
for (String ch : defaultSuffixes) {
|
||||
int ind = checkSuffix(newName, ch);
|
||||
if (ind != -1) {
|
||||
newName = cutSuffix(newName, ind, ch.length());
|
||||
|
@ -355,7 +357,7 @@ public class DataExtraction {
|
|||
}
|
||||
|
||||
if (!processed) {
|
||||
for (String ch : SUFFIXES) {
|
||||
for (String ch : suffixes) {
|
||||
int ind = checkSuffix(newName, ch);
|
||||
if (ind != -1) {
|
||||
newName = putSuffixToEnd(newName, ind, ch.length());
|
||||
|
|
|
@ -2,6 +2,8 @@ package com.osmand.swing;
|
|||
|
||||
import java.awt.Rectangle;
|
||||
import java.io.File;
|
||||
import java.util.ArrayList;
|
||||
import java.util.List;
|
||||
import java.util.prefs.Preferences;
|
||||
|
||||
import com.osmand.osm.LatLon;
|
||||
|
@ -72,10 +74,85 @@ public class DataExtractionSettings {
|
|||
preferences.putInt("window_height", r.height);
|
||||
}
|
||||
|
||||
|
||||
|
||||
public boolean useInternetToLoadImages(){
|
||||
// TODO save the property if needed
|
||||
return true;
|
||||
return preferences.getBoolean("use_internet", true);
|
||||
}
|
||||
|
||||
public void setUseInterentToLoadImages(boolean b){
|
||||
preferences.putBoolean("use_internet", b);
|
||||
}
|
||||
|
||||
|
||||
String[] SUFFIXES = new String[] {"av.", "avenue", "просп.", "пер.", "пр.","заул.", "проспект", "переул.", "бул.", "бульвар", "тракт"};
|
||||
String[] DEFAUTL_SUFFIXES = new String[] {"str.", "street", "улица", "ул."};
|
||||
public String[] getSuffixesToNormalizeStreets(){
|
||||
String s = preferences.get("suffixes_normalize_streets", null);
|
||||
if(s == null){
|
||||
return SUFFIXES;
|
||||
}
|
||||
List<String> l = new ArrayList<String>();
|
||||
int i = 0;
|
||||
int nextI = 0;
|
||||
while((nextI=s.indexOf(',',i)) >= 0){
|
||||
String t = s.substring(i, nextI).trim();
|
||||
if(t.length() > 0){
|
||||
l.add(t);
|
||||
}
|
||||
i = nextI + 1;
|
||||
}
|
||||
return l.toArray(new String[l.size()]);
|
||||
}
|
||||
|
||||
public String[] getDefaultSuffixesToNormalizeStreets(){
|
||||
String s = preferences.get("default_suffixes_normalize_streets", null);
|
||||
if(s == null){
|
||||
return DEFAUTL_SUFFIXES;
|
||||
}
|
||||
List<String> l = new ArrayList<String>();
|
||||
int i = 0;
|
||||
int nextI = 0;
|
||||
while((nextI=s.indexOf(',',i)) >= 0){
|
||||
String t = s.substring(i, nextI).trim();
|
||||
if(t.length() > 0){
|
||||
l.add(t);
|
||||
}
|
||||
i = nextI + 1;
|
||||
}
|
||||
return l.toArray(new String[l.size()]);
|
||||
}
|
||||
|
||||
public String getSuffixesToNormalizeStreetsString(){
|
||||
String s = preferences.get("suffixes_normalize_streets", null);
|
||||
if(s == null){
|
||||
StringBuilder b = new StringBuilder();
|
||||
for(String st : SUFFIXES){
|
||||
b.append(st).append(", ");
|
||||
}
|
||||
return b.toString();
|
||||
}
|
||||
return s;
|
||||
}
|
||||
|
||||
public String getDefaultSuffixesToNormalizeStreetsString(){
|
||||
String s = preferences.get("default_suffixes_normalize_streets", null);
|
||||
if(s == null){
|
||||
StringBuilder b = new StringBuilder();
|
||||
for(String st : DEFAUTL_SUFFIXES){
|
||||
b.append(st).append(", ");
|
||||
}
|
||||
return b.toString();
|
||||
}
|
||||
return s;
|
||||
}
|
||||
|
||||
public void setDefaultSuffixesToNormalizeStreets(String s){
|
||||
preferences.put("default_suffixes_normalize_streets", s);
|
||||
}
|
||||
|
||||
public void setSuffixesToNormalizeStreets(String s){
|
||||
preferences.put("suffixes_normalize_streets", s);
|
||||
}
|
||||
|
||||
}
|
||||
|
|
|
@ -0,0 +1,173 @@
|
|||
package com.osmand.swing;
|
||||
|
||||
import java.awt.Component;
|
||||
import java.awt.Dimension;
|
||||
import java.awt.FlowLayout;
|
||||
import java.awt.GridBagConstraints;
|
||||
import java.awt.GridBagLayout;
|
||||
import java.awt.GridLayout;
|
||||
import java.awt.event.ActionEvent;
|
||||
import java.awt.event.ActionListener;
|
||||
|
||||
import javax.swing.BorderFactory;
|
||||
import javax.swing.Box;
|
||||
import javax.swing.BoxLayout;
|
||||
import javax.swing.JButton;
|
||||
import javax.swing.JCheckBox;
|
||||
import javax.swing.JDialog;
|
||||
import javax.swing.JLabel;
|
||||
import javax.swing.JOptionPane;
|
||||
import javax.swing.JPanel;
|
||||
import javax.swing.JTextField;
|
||||
|
||||
public class OsmExtractionPreferencesDialog extends JDialog {
|
||||
|
||||
private static final long serialVersionUID = -4862884032977071296L;
|
||||
|
||||
private JButton okButton;
|
||||
private JButton cancelButton;
|
||||
|
||||
private JTextField streetSuffixes;
|
||||
|
||||
private JTextField streetDefaultSuffixes;
|
||||
|
||||
private JCheckBox useInternet;
|
||||
|
||||
public OsmExtractionPreferencesDialog(Component parent){
|
||||
super(JOptionPane.getFrameForComponent(parent), true);
|
||||
setTitle("Preferences");
|
||||
initDialog();
|
||||
|
||||
}
|
||||
|
||||
public void showDialog(){
|
||||
setSize(600, 220);
|
||||
double x = getParent().getBounds().getCenterX();
|
||||
double y = getParent().getBounds().getCenterY();
|
||||
setLocation((int) x - getWidth() / 2, (int) y - getHeight() / 2);
|
||||
setVisible(true);
|
||||
}
|
||||
|
||||
private void initDialog() {
|
||||
JPanel pane = new JPanel();
|
||||
pane.setLayout(new BoxLayout(pane, BoxLayout.Y_AXIS));
|
||||
pane.setBorder(BorderFactory.createEmptyBorder(10, 10, 5, 10));
|
||||
add(pane);
|
||||
|
||||
|
||||
createGeneralSection(pane);
|
||||
createNormalizingStreetSection(pane);
|
||||
pane.add(Box.createVerticalGlue());
|
||||
|
||||
FlowLayout l = new FlowLayout(FlowLayout.RIGHT);
|
||||
JPanel buttonsPane = new JPanel(l);
|
||||
okButton = new JButton("OK");
|
||||
buttonsPane.add(okButton);
|
||||
cancelButton = new JButton("Cancel");
|
||||
buttonsPane.add(cancelButton);
|
||||
|
||||
buttonsPane.setMaximumSize(new Dimension(Short.MAX_VALUE, (int) l.preferredLayoutSize(buttonsPane).getHeight()));
|
||||
pane.add(buttonsPane);
|
||||
|
||||
addListeners();
|
||||
}
|
||||
|
||||
private void createGeneralSection(JPanel root) {
|
||||
JPanel panel = new JPanel();
|
||||
panel.setLayout(new GridLayout(1, 1, 5, 5));
|
||||
panel.setBorder(BorderFactory.createTitledBorder("General"));
|
||||
root.add(panel);
|
||||
|
||||
useInternet = new JCheckBox();
|
||||
useInternet.setText("Use internet to download tiles");
|
||||
useInternet.setSelected(DataExtractionSettings.getSettings().useInternetToLoadImages());
|
||||
panel.add(useInternet);
|
||||
panel.setMaximumSize(new Dimension(Short.MAX_VALUE, panel.getPreferredSize().height));
|
||||
|
||||
}
|
||||
|
||||
private void createNormalizingStreetSection(JPanel root) {
|
||||
JPanel panel = new JPanel();
|
||||
GridBagLayout l = new GridBagLayout();
|
||||
panel.setLayout(l);
|
||||
panel.setBorder(BorderFactory.createTitledBorder("Normalizing streets"));
|
||||
root.add(panel);
|
||||
|
||||
JLabel label = new JLabel("Street name suffixes (av., avenue)");
|
||||
panel.add(label);
|
||||
GridBagConstraints constr = new GridBagConstraints();
|
||||
constr.anchor = GridBagConstraints.WEST;
|
||||
constr.ipadx = 5;
|
||||
constr.gridx = 0;
|
||||
constr.gridy = 0;
|
||||
l.setConstraints(label, constr);
|
||||
|
||||
streetSuffixes = new JTextField();
|
||||
streetSuffixes.setText(DataExtractionSettings.getSettings().getSuffixesToNormalizeStreetsString());
|
||||
panel.add(streetSuffixes);
|
||||
constr = new GridBagConstraints();
|
||||
constr.fill = GridBagConstraints.HORIZONTAL;
|
||||
constr.ipadx = 5;
|
||||
constr.gridx = 1;
|
||||
constr.gridy = 0;
|
||||
l.setConstraints(streetSuffixes, constr);
|
||||
|
||||
label = new JLabel("Street name default suffixes (str., street, rue)");
|
||||
panel.add(label);
|
||||
constr = new GridBagConstraints();
|
||||
constr.ipadx = 5;
|
||||
constr.gridx = 0;
|
||||
constr.gridy = 1;
|
||||
constr.anchor = GridBagConstraints.WEST;
|
||||
l.setConstraints(label, constr);
|
||||
|
||||
streetDefaultSuffixes = new JTextField();
|
||||
streetDefaultSuffixes.setText(DataExtractionSettings.getSettings().getDefaultSuffixesToNormalizeStreetsString());
|
||||
panel.add(streetDefaultSuffixes);
|
||||
constr = new GridBagConstraints();
|
||||
constr.weightx = 1;
|
||||
constr.fill = GridBagConstraints.HORIZONTAL;
|
||||
constr.ipadx = 5;
|
||||
constr.gridx = 1;
|
||||
constr.gridy = 1;
|
||||
l.setConstraints(streetDefaultSuffixes, constr);
|
||||
panel.setMaximumSize(new Dimension(Short.MAX_VALUE, panel.getPreferredSize().height));
|
||||
}
|
||||
|
||||
private void addListeners(){
|
||||
okButton.addActionListener(new ActionListener(){
|
||||
@Override
|
||||
public void actionPerformed(ActionEvent e) {
|
||||
saveProperties();
|
||||
setVisible(false);
|
||||
}
|
||||
|
||||
});
|
||||
cancelButton.addActionListener(new ActionListener(){
|
||||
@Override
|
||||
public void actionPerformed(ActionEvent e) {
|
||||
setVisible(false);
|
||||
}
|
||||
});
|
||||
|
||||
}
|
||||
|
||||
|
||||
public void saveProperties(){
|
||||
DataExtractionSettings settings = DataExtractionSettings.getSettings();
|
||||
if(!settings.getSuffixesToNormalizeStreetsString().equals(streetSuffixes.getText())){
|
||||
settings.setSuffixesToNormalizeStreets(streetSuffixes.getText());
|
||||
}
|
||||
if(!settings.getDefaultSuffixesToNormalizeStreetsString().equals(streetDefaultSuffixes.getText())){
|
||||
settings.setDefaultSuffixesToNormalizeStreets(streetDefaultSuffixes.getText());
|
||||
}
|
||||
if(settings.useInternetToLoadImages() != useInternet.isSelected()){
|
||||
settings.setUseInterentToLoadImages(useInternet.isSelected());
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
|
||||
|
||||
}
|
||||
|
|
@ -470,6 +470,13 @@ public class OsmExtractionUI implements IMapLocationListener {
|
|||
|
||||
bar.add(MapPanel.getMenuToChooseSource(mapPanel));
|
||||
|
||||
menu = new JMenu("Window");
|
||||
bar.add(menu);
|
||||
JMenuItem settings = new JMenuItem("Settings...");
|
||||
menu.add(settings);
|
||||
|
||||
|
||||
|
||||
exitMenu.addActionListener(new ActionListener(){
|
||||
@Override
|
||||
public void actionPerformed(ActionEvent e) {
|
||||
|
@ -483,6 +490,13 @@ public class OsmExtractionUI implements IMapLocationListener {
|
|||
setRegion(null, "Region");
|
||||
frame.setTitle("OsmAnd Map Creator");
|
||||
}
|
||||
});
|
||||
settings.addActionListener(new ActionListener(){
|
||||
@Override
|
||||
public void actionPerformed(ActionEvent e) {
|
||||
OsmExtractionPreferencesDialog dlg = new OsmExtractionPreferencesDialog(frame);
|
||||
dlg.showDialog();
|
||||
}
|
||||
|
||||
});
|
||||
specifyWorkingDir.addActionListener(new ActionListener(){
|
||||
|
|
|
@ -31,6 +31,7 @@ public class ProgressDialog extends JDialog implements IProgress {
|
|||
private static final float deltaToChange = 0.01f;
|
||||
private String taskName;
|
||||
private int deltaWork;
|
||||
private WorkerThread workerThread;
|
||||
|
||||
|
||||
public ProgressDialog(Component parent, String name){
|
||||
|
@ -43,10 +44,19 @@ public class ProgressDialog extends JDialog implements IProgress {
|
|||
return !isVisible();
|
||||
}
|
||||
|
||||
public Object run() throws InvocationTargetException, InterruptedException {
|
||||
@SuppressWarnings("deprecation")
|
||||
public Object run() throws InvocationTargetException, InterruptedException {
|
||||
result = null;
|
||||
new WorkerThread().start();
|
||||
workerThread = new WorkerThread();
|
||||
workerThread.start();
|
||||
setVisible(true);
|
||||
if(workerThread.checkIsLive()){
|
||||
// that's really bad solution unless we don't find any problems with that
|
||||
// means monitor objects & we continue to use because otherwise
|
||||
// we should protect all places where it is used regular checks that process is interrupted
|
||||
workerThread.stop();
|
||||
throw new InterruptedException();
|
||||
}
|
||||
if (exception != null) {
|
||||
throw exception;
|
||||
}
|
||||
|
@ -54,13 +64,19 @@ public class ProgressDialog extends JDialog implements IProgress {
|
|||
}
|
||||
|
||||
private class WorkerThread extends Thread {
|
||||
private boolean isLive = true;
|
||||
|
||||
|
||||
public boolean checkIsLive(){
|
||||
return isLive;
|
||||
}
|
||||
@Override
|
||||
public void run() {
|
||||
try {
|
||||
if (run != null) {
|
||||
run.run();
|
||||
}
|
||||
isLive = false;
|
||||
} catch (RuntimeException e) {
|
||||
exception = new InvocationTargetException(e);
|
||||
} finally {
|
||||
|
|
Loading…
Reference in a new issue