change transliterate library and implement log swing
git-svn-id: https://osmand.googlecode.com/svn/trunk@116 e29c36b1-1cfa-d876-8d93-3434fc2bb7b8
This commit is contained in:
parent
409f31bfcc
commit
dab9f436cf
13 changed files with 148 additions and 53 deletions
|
@ -5,6 +5,6 @@
|
|||
<classpathentry kind="lib" path="lib/bzip2-20090327.jar"/>
|
||||
<classpathentry kind="lib" path="lib/sqlitejdbc-v056.jar"/>
|
||||
<classpathentry kind="lib" path="lib/commons-logging-1.1.1.jar"/>
|
||||
<classpathentry kind="lib" path="lib/icu4j-4_4_1.jar" sourcepath="C:/Download/icu4j-4_4_1-src.jar"/>
|
||||
<classpathentry kind="lib" path="lib/junidecode-0.1.jar"/>
|
||||
<classpathentry kind="output" path="bin"/>
|
||||
</classpath>
|
||||
|
|
Binary file not shown.
BIN
DataExtractionOSM/lib/junidecode-0.1.jar
Normal file
BIN
DataExtractionOSM/lib/junidecode-0.1.jar
Normal file
Binary file not shown.
|
@ -1,8 +1,13 @@
|
|||
.level = SEVERE
|
||||
handlers=java.util.logging.ConsoleHandler
|
||||
handlers=java.util.logging.ConsoleHandler, java.util.logging.FileHandler
|
||||
|
||||
# Set the default logging level for the logger named com.mycompany
|
||||
com.osmand.level = ALL
|
||||
|
||||
java.util.logging.FileHandler.pattern=%h/Application Data/Osmand/osmand.log
|
||||
java.util.logging.FileHandler.formatter=java.util.logging.SimpleFormatter
|
||||
java.util.logging.FileHandler.append = false
|
||||
java.util.logging.FileHandler.limit = 100000
|
||||
|
||||
java.util.logging.ConsoleHandler.level=ALL
|
||||
java.util.logging.ConsoleHandler.formatter = java.util.logging.SimpleFormatter
|
|
@ -1,18 +1,43 @@
|
|||
package com.osmand;
|
||||
|
||||
import javax.swing.JOptionPane;
|
||||
|
||||
import org.apache.commons.logging.Log;
|
||||
|
||||
import com.osmand.swing.OsmExtractionUI;
|
||||
|
||||
public class ExceptionHandler {
|
||||
private static final Log log = LogUtil.getLog(ExceptionHandler.class);
|
||||
|
||||
public static void handle(Exception e){
|
||||
e.printStackTrace();
|
||||
log.error("Error occurred", e);
|
||||
public static void handle(Throwable e){
|
||||
handle("Error occurred", e);
|
||||
}
|
||||
|
||||
public static void handle(String msg, Exception e){
|
||||
e.printStackTrace();
|
||||
log.error(msg, e);
|
||||
public static void handle(String msg, Throwable e){
|
||||
if(e != null){
|
||||
log.error(msg, e);
|
||||
} else {
|
||||
log.error(msg);
|
||||
}
|
||||
if(e != null){
|
||||
e.printStackTrace();
|
||||
}
|
||||
if (OsmExtractionUI.MAIN_APP != null && OsmExtractionUI.MAIN_APP.getFrame() != null) {
|
||||
String text;
|
||||
String title;
|
||||
if (e != null) {
|
||||
text = e.getMessage();
|
||||
title = msg;
|
||||
} else {
|
||||
title = "Error occured";
|
||||
text = msg;
|
||||
}
|
||||
JOptionPane.showMessageDialog(OsmExtractionUI.MAIN_APP.getFrame(), text, title, JOptionPane.ERROR_MESSAGE);
|
||||
}
|
||||
}
|
||||
|
||||
public static void handle(String msg){
|
||||
handle(msg, null);
|
||||
}
|
||||
|
||||
}
|
||||
|
|
|
@ -30,10 +30,9 @@ public class ToDoConstants {
|
|||
|
||||
|
||||
// FIXME Bugs Android :
|
||||
// Investigate good transliterate
|
||||
// 6. Understand concept of application where to save/restore global setting.
|
||||
// (for example reset navigate to point, reset link map with location). It should be reset after user call exit.
|
||||
// Call ResourceManager.close when it is needed.
|
||||
// Call ResourceManager.close when it is needed (+).
|
||||
// 10. Notification is gone after clear all notifications
|
||||
|
||||
// Performance improvements Android :
|
||||
|
@ -41,8 +40,6 @@ public class ToDoConstants {
|
|||
|
||||
|
||||
// TODO SWING : in release 0.1
|
||||
// 5. Implement suppress warning for duplicate id (+)
|
||||
// 2. Configure file log & see log from file (add uncaught exception handling) (+)
|
||||
// 6. Implement renaming/deleting street/building/city (+)
|
||||
// 7. Implement saving bundle of tiles in different folder (+)
|
||||
|
||||
|
@ -70,4 +67,5 @@ public class ToDoConstants {
|
|||
|
||||
// DONE SWING
|
||||
// 8. Implement basic transliteration version
|
||||
// 2. Configure file log & see log from file (add uncaught exception handling)
|
||||
}
|
||||
|
|
|
@ -14,12 +14,13 @@ import java.util.ArrayList;
|
|||
import java.util.LinkedHashMap;
|
||||
import java.util.Map;
|
||||
|
||||
import net.sf.junidecode.Junidecode;
|
||||
|
||||
import org.apache.commons.logging.Log;
|
||||
import org.apache.commons.logging.LogFactory;
|
||||
import org.apache.tools.bzip2.CBZip2InputStream;
|
||||
import org.xml.sax.SAXException;
|
||||
|
||||
import com.ibm.icu.text.Transliterator;
|
||||
import com.osmand.Algoritms;
|
||||
import com.osmand.IProgress;
|
||||
import com.osmand.data.Amenity;
|
||||
|
@ -249,6 +250,7 @@ public class DataExtraction {
|
|||
progress.startTask("Loading file " + path, -1);
|
||||
}
|
||||
OsmBaseStorage storage = new OsmBaseStorage();
|
||||
storage.setSupressWarnings(DataExtractionSettings.getSettings().isSupressWarningsForDuplicatedId());
|
||||
if (addFilter != null) {
|
||||
storage.getFilters().add(addFilter);
|
||||
}
|
||||
|
@ -306,31 +308,32 @@ public class DataExtraction {
|
|||
// 7. Call data preparation to sort cities, calculate center location, assign id to objects
|
||||
country.doDataPreparation();
|
||||
// 8. Transliterate names to english
|
||||
Transliterator latin = Transliterator.getInstance("Any-Latin;NFD;[:Nonspacing Mark:] Remove;NFC");
|
||||
if(latin != null){
|
||||
convertEnglishName(country, latin);
|
||||
for(CityType c : CityType.values() ){
|
||||
for(City city : country.getCitiesByType(c)){
|
||||
convertEnglishName(city, latin);
|
||||
for(Street s : city.getStreets()){
|
||||
convertEnglishName(s, latin);
|
||||
for(Building b : s.getBuildings()){
|
||||
convertEnglishName(b, latin);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
for(Amenity a : country.getAmenityManager().getAllObjects()){
|
||||
convertEnglishName(a, latin);
|
||||
}
|
||||
}
|
||||
|
||||
convertEnglishName(country);
|
||||
for (CityType c : CityType.values()) {
|
||||
for (City city : country.getCitiesByType(c)) {
|
||||
convertEnglishName(city);
|
||||
for (Street s : city.getStreets()) {
|
||||
convertEnglishName(s);
|
||||
for (Building b : s.getBuildings()) {
|
||||
convertEnglishName(b);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
for (Amenity a : country.getAmenityManager().getAllObjects()) {
|
||||
convertEnglishName(a);
|
||||
}
|
||||
return country;
|
||||
}
|
||||
// icu4j example - icu is not good in transliteration russian names
|
||||
// Transliterator latin = Transliterator.getInstance("Any-Latin;NFD;[:Nonspacing Mark:] Remove;NFC");
|
||||
|
||||
private void convertEnglishName(MapObject o, Transliterator transliterator){
|
||||
private void convertEnglishName(MapObject o){
|
||||
String name = o.getName();
|
||||
if(name != null && o.getEnName() == null){
|
||||
o.setEnName(transliterator.transliterate(name));
|
||||
o.setEnName(Junidecode.unidecode(name));
|
||||
// o.setEnName(transliterator.transliterate(name));
|
||||
}
|
||||
}
|
||||
|
||||
|
|
|
@ -56,6 +56,7 @@ public class OsmBaseStorage extends DefaultHandler {
|
|||
protected InputStream inputStream;
|
||||
protected InputStream streamForProgress;
|
||||
protected List<IOsmStorageFilter> filters = new ArrayList<IOsmStorageFilter>();
|
||||
protected boolean supressWarnings = true;
|
||||
|
||||
|
||||
public synchronized void parseOSM(InputStream stream, IProgress progress, InputStream streamForProgress) throws IOException, SAXException {
|
||||
|
@ -89,6 +90,13 @@ public class OsmBaseStorage extends DefaultHandler {
|
|||
|
||||
}
|
||||
|
||||
public boolean isSupressWarnings() {
|
||||
return supressWarnings;
|
||||
}
|
||||
public void setSupressWarnings(boolean supressWarnings) {
|
||||
this.supressWarnings = supressWarnings;
|
||||
}
|
||||
|
||||
protected SAXParser saxParser;
|
||||
public SAXParser initSaxParser(){
|
||||
if(saxParser != null){
|
||||
|
@ -192,8 +200,8 @@ public class OsmBaseStorage extends DefaultHandler {
|
|||
if(currentParsedEntity != null){
|
||||
if(acceptEntityToLoad(currentParsedEntity)){
|
||||
Entity oldEntity = entities.put(currentParsedEntity.getId(), currentParsedEntity);
|
||||
if(oldEntity!= null){
|
||||
// throw new UnsupportedOperationException("Entity with id=" + oldEntity.getId() +" is duplicated in osm map");
|
||||
if(!supressWarnings && oldEntity!= null){
|
||||
throw new UnsupportedOperationException("Entity with id=" + oldEntity.getId() +" is duplicated in osm map");
|
||||
}
|
||||
} else {
|
||||
// System.gc();
|
||||
|
|
|
@ -21,7 +21,6 @@ import java.io.IOException;
|
|||
import java.io.OutputStream;
|
||||
import java.util.ArrayList;
|
||||
import java.util.Collection;
|
||||
import java.util.Enumeration;
|
||||
import java.util.List;
|
||||
import java.util.Map;
|
||||
import java.util.Stack;
|
||||
|
@ -30,7 +29,6 @@ import java.util.Map.Entry;
|
|||
import javax.xml.stream.XMLStreamException;
|
||||
import javax.xml.stream.XMLStreamWriter;
|
||||
|
||||
import com.ibm.icu.text.Transliterator;
|
||||
import com.osmand.Algoritms;
|
||||
import com.osmand.data.MapObject;
|
||||
import com.osmand.osm.Entity;
|
||||
|
@ -172,13 +170,17 @@ public class OsmStorageWriter {
|
|||
}
|
||||
}
|
||||
|
||||
public static void main(String[] args) {
|
||||
/*public static void main(String[] args) {
|
||||
|
||||
Transliterator inst = Transliterator.getInstance("Any-Latin;NFD;[:Nonspacing Mark:] Remove;NFC");
|
||||
// Transliterator inst = Transliterator.getInstance("Any-Latin;NFD;[:Nonspacing Mark:] Remove;NFKC");
|
||||
Transliterator inst = Transliterator.getInstance("Any-Latin;");
|
||||
Enumeration<String> e = Transliterator.getAvailableIDs();
|
||||
while(e.hasMoreElements()){
|
||||
System.out.println(e.nextElement());
|
||||
}
|
||||
System.out.println(inst.transliterate("Привет всемь жаваыфайу ы х й к ще цуккак у ваа"));
|
||||
}
|
||||
String str = "Привет Гомель жаль прощаться до скорой встречи когда ы ";
|
||||
System.out.println(Junidecode.unidecode(str));
|
||||
System.out.println(inst.transliterate(str));
|
||||
}*/
|
||||
}
|
||||
|
||||
|
|
|
@ -84,6 +84,14 @@ public class DataExtractionSettings {
|
|||
preferences.putBoolean("use_internet", b);
|
||||
}
|
||||
|
||||
public boolean isSupressWarningsForDuplicatedId(){
|
||||
return preferences.getBoolean("supress_duplicated_id", true);
|
||||
}
|
||||
|
||||
public void setSupressWarningsForDuplicatedId(boolean b){
|
||||
preferences.putBoolean("supress_duplicated_id", b);
|
||||
}
|
||||
|
||||
|
||||
String[] SUFFIXES = new String[] {"av.", "avenue", "просп.", "пер.", "пр.","заул.", "проспект", "переул.", "бул.", "бульвар", "тракт"};
|
||||
String[] DEFAUTL_SUFFIXES = new String[] {"str.", "street", "улица", "ул."};
|
||||
|
|
|
@ -32,6 +32,7 @@ public class OsmExtractionPreferencesDialog extends JDialog {
|
|||
private JTextField streetDefaultSuffixes;
|
||||
|
||||
private JCheckBox useInternet;
|
||||
private JCheckBox supressWarning;
|
||||
|
||||
public OsmExtractionPreferencesDialog(Component parent){
|
||||
super(JOptionPane.getFrameForComponent(parent), true);
|
||||
|
@ -41,7 +42,7 @@ public class OsmExtractionPreferencesDialog extends JDialog {
|
|||
}
|
||||
|
||||
public void showDialog(){
|
||||
setSize(600, 220);
|
||||
setSize(600, 250);
|
||||
double x = getParent().getBounds().getCenterX();
|
||||
double y = getParent().getBounds().getCenterY();
|
||||
setLocation((int) x - getWidth() / 2, (int) y - getHeight() / 2);
|
||||
|
@ -74,7 +75,7 @@ public class OsmExtractionPreferencesDialog extends JDialog {
|
|||
|
||||
private void createGeneralSection(JPanel root) {
|
||||
JPanel panel = new JPanel();
|
||||
panel.setLayout(new GridLayout(1, 1, 5, 5));
|
||||
panel.setLayout(new GridLayout(2, 1, 5, 5));
|
||||
panel.setBorder(BorderFactory.createTitledBorder("General"));
|
||||
root.add(panel);
|
||||
|
||||
|
@ -82,6 +83,11 @@ public class OsmExtractionPreferencesDialog extends JDialog {
|
|||
useInternet.setText("Use internet to download tiles");
|
||||
useInternet.setSelected(DataExtractionSettings.getSettings().useInternetToLoadImages());
|
||||
panel.add(useInternet);
|
||||
|
||||
supressWarning = new JCheckBox();
|
||||
supressWarning.setText("Supress warnings for duplicated id in osm file");
|
||||
supressWarning.setSelected(DataExtractionSettings.getSettings().isSupressWarningsForDuplicatedId());
|
||||
panel.add(supressWarning);
|
||||
panel.setMaximumSize(new Dimension(Short.MAX_VALUE, panel.getPreferredSize().height));
|
||||
|
||||
}
|
||||
|
@ -164,6 +170,9 @@ public class OsmExtractionPreferencesDialog extends JDialog {
|
|||
if(settings.useInternetToLoadImages() != useInternet.isSelected()){
|
||||
settings.setUseInterentToLoadImages(useInternet.isSelected());
|
||||
}
|
||||
if(settings.isSupressWarningsForDuplicatedId() != supressWarning.isSelected()){
|
||||
settings.setSupressWarningsForDuplicatedId (supressWarning.isSelected());
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
|
|
|
@ -12,6 +12,7 @@ import java.io.File;
|
|||
import java.io.FileOutputStream;
|
||||
import java.io.IOException;
|
||||
import java.io.OutputStream;
|
||||
import java.lang.Thread.UncaughtExceptionHandler;
|
||||
import java.lang.reflect.InvocationTargetException;
|
||||
import java.sql.SQLException;
|
||||
import java.util.ArrayList;
|
||||
|
@ -87,12 +88,25 @@ import com.osmand.swing.MapPanel.MapSelectionArea;
|
|||
|
||||
public class OsmExtractionUI implements IMapLocationListener {
|
||||
|
||||
private static final Log log = LogFactory.getLog(OsmExtractionUI.class);
|
||||
private static final Log log = LogFactory.getLog(OsmExtractionUI.class);
|
||||
public static final String LOG_PATH = System.getProperty("user.home")+"/Application Data/Osmand/osmand.log";
|
||||
public static OsmExtractionUI MAIN_APP;
|
||||
|
||||
public static void main(String[] args) {
|
||||
OsmExtractionUI ui = new OsmExtractionUI(null);
|
||||
ui.frame.setBounds(DataExtractionSettings.getSettings().getWindowBounds());
|
||||
ui.frame.setVisible(true);
|
||||
// first of all config log
|
||||
new File(LOG_PATH).getParentFile().mkdirs();
|
||||
final UncaughtExceptionHandler defaultHandler = Thread.getDefaultUncaughtExceptionHandler();
|
||||
Thread.setDefaultUncaughtExceptionHandler(new UncaughtExceptionHandler(){
|
||||
@Override
|
||||
public void uncaughtException(Thread t, Throwable e) {
|
||||
log.error("Error in thread " + t.getName(), e);
|
||||
defaultHandler.uncaughtException(t, e);
|
||||
}
|
||||
});
|
||||
|
||||
MAIN_APP = new OsmExtractionUI(null);
|
||||
MAIN_APP.frame.setBounds(DataExtractionSettings.getSettings().getWindowBounds());
|
||||
MAIN_APP.frame.setVisible(true);
|
||||
}
|
||||
|
||||
protected City selectedCity;
|
||||
|
@ -113,8 +127,7 @@ public class OsmExtractionUI implements IMapLocationListener {
|
|||
private JCheckBox normalizingStreets;
|
||||
private TreeModelListener treeModelListener;
|
||||
private JCheckBox loadingAllData;
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
public OsmExtractionUI(final Region r){
|
||||
|
@ -478,8 +491,28 @@ public class OsmExtractionUI implements IMapLocationListener {
|
|||
bar.add(menu);
|
||||
JMenuItem settings = new JMenuItem("Settings...");
|
||||
menu.add(settings);
|
||||
menu.addSeparator();
|
||||
JMenuItem openLogFile = new JMenuItem("Open log file...");
|
||||
menu.add(openLogFile);
|
||||
|
||||
|
||||
|
||||
openLogFile.addActionListener(new ActionListener() {
|
||||
@Override
|
||||
public void actionPerformed(ActionEvent e) {
|
||||
File file = new File(OsmExtractionUI.LOG_PATH);
|
||||
if (file != null && file.exists()) {
|
||||
try {
|
||||
Runtime.getRuntime().exec(new String[] { "notepad.exe", file.getAbsolutePath() }); //$NON-NLS-1$
|
||||
} catch (IOException es) {
|
||||
ExceptionHandler.handle("Failed to open log file ", es);
|
||||
}
|
||||
|
||||
} else {
|
||||
ExceptionHandler.handle("Log file is not found");
|
||||
}
|
||||
}
|
||||
});
|
||||
|
||||
|
||||
exitMenu.addActionListener(new ActionListener(){
|
||||
@Override
|
||||
|
@ -616,6 +649,10 @@ public class OsmExtractionUI implements IMapLocationListener {
|
|||
return fc;
|
||||
}
|
||||
|
||||
public JFrame getFrame() {
|
||||
return frame;
|
||||
}
|
||||
|
||||
public void loadCountry(final File f, final IOsmStorageFilter filter){
|
||||
try {
|
||||
final ProgressDialog dlg = new ProgressDialog(frame, "Loading osm file");
|
||||
|
@ -655,7 +692,7 @@ public class OsmExtractionUI implements IMapLocationListener {
|
|||
} catch (InterruptedException e1) {
|
||||
log.error("Interrupted", e1);
|
||||
} catch (InvocationTargetException e1) {
|
||||
log.error("Exception during operation", e1.getCause());
|
||||
ExceptionHandler.handle("Exception during operation", e1.getCause());
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -689,7 +726,7 @@ public class OsmExtractionUI implements IMapLocationListener {
|
|||
} catch (InterruptedException e1) {
|
||||
log.error("Interrupted", e1);
|
||||
} catch (InvocationTargetException e1) {
|
||||
log.error("Exception during operation", e1.getCause());
|
||||
ExceptionHandler.handle("Log file is not found", e1.getCause());
|
||||
}
|
||||
}
|
||||
|
||||
|
|
|
@ -1,7 +1,7 @@
|
|||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<classpath>
|
||||
<classpathentry kind="src" path="src"/>
|
||||
<classpathentry excluding="**/MapPanel*|com/osmand/LogUtil.java|com/osmand/osm/io/OSMStorageWriter.java|com/osmand/DataExtraction.java|com/osmand/swing/|com/osmand/data/preparation/DataExtraction.java|com/osmand/data/preparation/DataIndexBuilder.java|com/osmand/osm/io/OsmStorageWriter.java|test/" kind="src" path="use"/>
|
||||
<classpathentry excluding="**/MapPanel*|com/osmand/LogUtil.java|com/osmand/osm/io/OSMStorageWriter.java|com/osmand/DataExtraction.java|com/osmand/swing/|com/osmand/data/preparation/DataExtraction.java|com/osmand/data/preparation/DataIndexBuilder.java|com/osmand/osm/io/OsmStorageWriter.java|test/|com/osmand/ExceptionHandler.java" kind="src" path="use"/>
|
||||
<classpathentry kind="src" path="gen"/>
|
||||
<classpathentry kind="con" path="com.android.ide.eclipse.adt.ANDROID_FRAMEWORK"/>
|
||||
<classpathentry kind="lib" path="lib/bzip2-20090327.jar"/>
|
||||
|
|
Loading…
Reference in a new issue