PoiFileList.java :  » UnTagged » yozi » com » robert » maps » kml » Android Open Source

Android Open Source » UnTagged » yozi 
yozi » com » robert » maps » kml » PoiFileList.java
package com.robert.maps.kml;

import java.io.File;
import java.io.IOException;
import java.util.concurrent.ExecutorService;
import java.util.concurrent.Executors;

import javax.xml.parsers.ParserConfigurationException;
import javax.xml.parsers.SAXParser;
import javax.xml.parsers.SAXParserFactory;

import org.openintents.filemanager.FileManagerActivity;
import org.openintents.filemanager.util.FileUtils;
import org.xml.sax.SAXException;

import android.app.Activity;
import android.app.Dialog;
import android.app.ProgressDialog;
import android.content.Intent;
import android.content.SharedPreferences;
import android.database.Cursor;
import android.net.Uri;
import android.os.Bundle;
import android.view.View;
import android.view.View.OnClickListener;
import android.widget.Button;
import android.widget.EditText;
import android.widget.SimpleCursorAdapter;
import android.widget.Spinner;
import android.widget.Toast;

import com.yozi.R;
import com.robert.maps.kml.XMLparser.GpxPoiParser;
import com.robert.maps.kml.XMLparser.KmlPoiParser;
import com.robert.maps.utils.Ut;

import java.util.Collection;
import java.util.Collections;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Comparator;

import java.io.*;
import com.yozi.*;

import android.app.*;
import android.os.*;
import android.util.*;
import android.widget.*;

public class PoiFileList extends ListActivity {

  List<File> files = null;
  String[] filenames = null;
  String[] filepaths = null;

  private ProgressDialog dlgWait;
  protected ExecutorService mThreadPool = Executors.newFixedThreadPool(2);
  private PoiManager mPoiManager;
  final Handler mHandler = new Handler();


  @Override
  protected void onCreate(Bundle savedInstanceState) 
  {
    super.onCreate(savedInstanceState);

    if (mPoiManager == null)
      mPoiManager = new PoiManager(this);

  
    final ProgressDialog pd = new ProgressDialog(this); 
    pd.setIndeterminate(true);
    pd.setMessage("Scanning SD card"); 
    pd.show(); 
    new Thread(new Runnable() 
    { 
      public void run() 
      { 
                try
                {
                      File startingDirectory= new File("/sdcard/");

                      files = FileListing.getFileListing(startingDirectory);

                        Collections.sort(files, new Comparator()
                        {
                            @Override
                            public int compare(Object o1, Object o2)
                            {
                          return ((File) o1).getName().compareToIgnoreCase(((File) o2).getName());
                            }
                        });
              
                  int i = 0, n = 0;
                      for(File file : files )
                    {
                    String name = file.getName();

                    if (FileUtils.getExtension(file.getName()).equalsIgnoreCase(".kml") ||
                      FileUtils.getExtension(file.getName()).equalsIgnoreCase(".wpt") ||
                      FileUtils.getExtension(file.getName()).equalsIgnoreCase(".gpx") && name.charAt(0) != '.')
                    {
                      n++;
                    }
                    }

                  filenames = new String[n];
                  filepaths = new String[n];

                      for(File file : files )
                    {
                    String name = file.getName();

                    if (FileUtils.getExtension(file.getName()).equalsIgnoreCase(".kml") ||
                      FileUtils.getExtension(file.getName()).equalsIgnoreCase(".wpt") ||
                      FileUtils.getExtension(file.getName()).equalsIgnoreCase(".gpx") && name.charAt(0) != '.')
                    {
                      filenames[i] = name;
                      filepaths[i] = file.getPath();
                      i++;
                    }
                    }

                }
                catch(Exception e)
                {
                }



        pd.dismiss(); 

        mHandler.post(mUpdateResults);


      } 
    }).start(); 


  }

    final Runnable mUpdateResults = new Runnable() 
    {
        public void run() 
        {
        setListAdapter(new ArrayAdapter<String>(PoiFileList.this,
                android.R.layout.simple_list_item_1, filenames));

        getListView().setTextFilterEnabled(true);
        }
    };


  @Override
  protected void onDestroy() 
  {
    mPoiManager.FreeDatabases();
    super.onDestroy();
  }

  @Override
  protected Dialog onCreateDialog(int id) 
  {
    switch (id) 
    {
        case R.id.dialog_wait: 
        {
          dlgWait = new ProgressDialog(this);
          dlgWait.setMessage("Please wait...");
          dlgWait.setIndeterminate(true);
          dlgWait.setCancelable(false);
          return dlgWait;
        }
    }
    return null;
  }



  @Override
  protected void onListItemClick(ListView l, View v, int position, long id) 
  {
    super.onListItemClick(l, v, position, id);

    final int i = position;

    Log.d("FILELIST", filepaths[position]);

    File file = new File(filepaths[position]);

    if(!file.exists()){
      Toast.makeText(this, "No such file", Toast.LENGTH_LONG).show();
      return;
    }

    showDialog(R.id.dialog_wait);

    this.mThreadPool.execute(new Runnable() 
    {
      public void run() 
      {
        int CategoryId = 0;
        File file = new File(filepaths[i]);

        SAXParserFactory fac = SAXParserFactory.newInstance();
        SAXParser parser = null;
        try 
        {
          parser = fac.newSAXParser();
        } catch (ParserConfigurationException e) 
        {
          // TODO Auto-generated catch block
          e.printStackTrace();
        } catch (SAXException e) 
        {
          // TODO Auto-generated catch block
          e.printStackTrace();
        }

        if(parser != null)
        {
          mPoiManager.beginTransaction();
          Ut.dd("Start parsing file " + file.getName());
          try {
            if(FileUtils.getExtension(file.getName()).equalsIgnoreCase(".kml"))
              parser.parse(file, new KmlPoiParser(mPoiManager, CategoryId));
            else if(FileUtils.getExtension(file.getName()).equalsIgnoreCase(".gpx"))
              parser.parse(file, new GpxPoiParser(mPoiManager, CategoryId));
            else if(FileUtils.getExtension(file.getName()).equalsIgnoreCase(".wpt"))
            {
              String converted = wpt2kml(filepaths[i]);
              File f = new File(converted);
              parser.parse(f, new KmlPoiParser(mPoiManager, CategoryId));
              f.delete();
            }  

            mPoiManager.commitTransaction();
          } catch (SAXException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
            mPoiManager.rollbackTransaction();
          } catch (IOException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
            mPoiManager.rollbackTransaction();
          }
          Ut.dd("Pois commited");
        }

        dlgWait.dismiss();
        PoiFileList.this.finish();
      };
    });

  }

//-----------------------------------------------------------
 private static final char ESCAPE = '\\';
 private static final char QUOTE = '"';
 private static final char SEPARATOR = ',';

private String field(StringBuffer field, int begin, int end) {
     if (begin < 0) {
         return field.substring(0, end);
     } else {
         return field.substring(begin, end);
     }
 }


 private static char escape(char c) {
     switch (c) {
     case 'n':
         return '\n';
     case 't':
         return '\t';
     case 'r':
         return '\r';
     default:
         return c;
     }
 }

 private String[] parseLine(final String line) {
     int length = line.length();

     // Check here if the last character is an escape character so
     // that we don't need to check in the main loop.
     if (line.charAt(length - 1) == ESCAPE) {
         throw new IllegalArgumentException
             (": last character is an escape character\n" + line);
     }

     // The set of parsed fields.
     List result = new ArrayList();

     // The characters between seperators.
     StringBuffer buf = new StringBuffer(length);
     // Marks the begining of the field relative to buf, -1
     // indicates the beginning of buf.
     int begin = -1;
     // Marks the end of the field relative to buf.
     int end = 0;

     // Indicates whether or not we're in a quoted string.
     boolean quote = false;

     for (int i = 0; i < length; i++) {
         char c = line.charAt(i);
         if (quote) {
             switch (c) {
             case QUOTE:
                 quote = false;
                 break;
             case ESCAPE:
                 buf.append(escape(line.charAt(++i)));
                 break;
             default:
                 buf.append(c);
                 break;
             }

             end = buf.length();
         } else {
             switch (c) {
             case SEPARATOR:
                 result.add(field(buf, begin, end));
                 buf = new StringBuffer(length);
                 begin = -1;
                 end = 0;
                 break;
             case ESCAPE:
                 if (begin < 0) { begin = buf.length(); }
                 buf.append(escape(line.charAt(++i)));
                 end = buf.length();
                 break;
             case QUOTE:
                 if (begin < 0) { begin = buf.length(); }
                 quote = true;
                 end = buf.length();
                 break;
             default:
                 if (begin < 0 &&
                     !Character.isWhitespace(c)) {
                     begin = buf.length();
                 }
                 buf.append(c);
                 if (!Character.isWhitespace(c)) { end = buf.length(); }
                 break;
             }
         }
     }

     if (quote) {
         throw new IllegalArgumentException
             ("unterminated string\n" + line);
     } else {
         result.add(field(buf, begin, end));
     }

     String[] fields = new String[result.size()];
     result.toArray(fields);
     return fields;
 }

  String wpt2kml(String file)
  {
    String filename = file.replaceAll(".wpt", ".kml");
    
    System.out.println(filename);
    
    try
    {
      FileWriter fw = new FileWriter(filename);
      BufferedWriter writer = new BufferedWriter(fw);
      
      writer.write("<kml xmlns=\"http://www.opengis.net/kml/2.2\" xmlns:gx=\"http://www.google.com/kml/ext/2.2\" xmlns:kml=\"http://www.opengis.net/kml/2.2\" xmlns:atom=\"http://www.w3.org/2005/Atom\">\r\n");
      writer.write("<Document>\r\n");
      writer.write("<name>points</name>\r\n");

      FileInputStream ifs = new FileInputStream(file);
        DataInputStream ids = new DataInputStream(ifs);
  
        BufferedReader reader = new BufferedReader(new InputStreamReader(ids));
        String line = null;

      // OziExplorer Waypoint File Version 1.1
      reader.readLine();
      // WGS 84
      reader.readLine();
      // Reserved 2
      reader.readLine();
      // garmin
      reader.readLine();

        while ((line = reader.readLine()) != null)   
      {
        String[] fields = parseLine(line);
        
          writer.write("<Placemark>\r\n");

          writer.write("<name>");

          writer.write(fields[1]);

          writer.write("</name>\r\n");

          writer.write("<Point>\r\n");

          writer.write("<coordinates>");
          writer.write(fields[3]);
          writer.write(",");
          writer.write(fields[2]);
          writer.write(",0.0");
          writer.write("</coordinates>\r\n");

          writer.write("</Point>\r\n");
      
          writer.write("</Placemark>\r\n");
        }
      writer.write("</Document>\r\n");
      writer.write("</kml>\r\n");
  
        ids.close();
        writer.close();    
    }
    catch(Exception e)
    {
      
    }
    
    return filename;
  }
  
//-----------------------------------------------------------

}
java2s.com  | Contact Us | Privacy Policy
Copyright 2009 - 12 Demo Source and Support. All rights reserved.
All other trademarks are property of their respective owners.