2011-05-07 22:56:11 +02:00
|
|
|
package net.osmand;
|
|
|
|
|
2011-08-28 20:32:25 +02:00
|
|
|
import java.io.BufferedInputStream;
|
|
|
|
import java.io.BufferedReader;
|
2011-05-07 22:56:11 +02:00
|
|
|
import java.io.Closeable;
|
|
|
|
import java.io.File;
|
2011-08-28 20:32:25 +02:00
|
|
|
import java.io.FileInputStream;
|
2011-05-07 22:56:11 +02:00
|
|
|
import java.io.IOException;
|
|
|
|
import java.io.InputStream;
|
2011-08-28 20:32:25 +02:00
|
|
|
import java.io.InputStreamReader;
|
2011-05-07 22:56:11 +02:00
|
|
|
import java.io.OutputStream;
|
2011-08-28 20:32:25 +02:00
|
|
|
import java.io.UnsupportedEncodingException;
|
|
|
|
import java.net.HttpURLConnection;
|
|
|
|
import java.net.URL;
|
|
|
|
import java.net.URLEncoder;
|
|
|
|
import java.util.zip.GZIPOutputStream;
|
2011-05-07 22:56:11 +02:00
|
|
|
|
|
|
|
import net.osmand.LogUtil;
|
|
|
|
|
|
|
|
import org.apache.commons.logging.Log;
|
|
|
|
|
|
|
|
/**
|
|
|
|
* Basic algorithms that are not in jdk
|
|
|
|
*/
|
|
|
|
public class Algoritms {
|
|
|
|
private static final int BUFFER_SIZE = 1024;
|
|
|
|
private static final Log log = LogUtil.getLog(Algoritms.class);
|
|
|
|
|
|
|
|
public static boolean isEmpty(String s){
|
|
|
|
return s == null || s.length() == 0;
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
public static String capitalizeFirstLetterAndLowercase(String s) {
|
|
|
|
if (s != null && s.length() > 1) {
|
|
|
|
// not very efficient algorithm
|
|
|
|
return Character.toUpperCase(s.charAt(0)) + s.substring(1).toLowerCase();
|
|
|
|
} else {
|
|
|
|
return s;
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
public static boolean objectEquals(Object a, Object b){
|
|
|
|
if(a == null){
|
|
|
|
return b == null;
|
|
|
|
} else {
|
|
|
|
return a.equals(b);
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
public static int extractFirstIntegerNumber(String s) {
|
|
|
|
int i = 0;
|
|
|
|
for (int k = 0; k < s.length(); k++) {
|
|
|
|
if (Character.isDigit(s.charAt(k))) {
|
|
|
|
i = i * 10 + (s.charAt(k) - '0');
|
|
|
|
} else {
|
|
|
|
break;
|
|
|
|
}
|
|
|
|
}
|
|
|
|
return i;
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
public static void streamCopy(InputStream in, OutputStream out) throws IOException{
|
|
|
|
byte[] b = new byte[BUFFER_SIZE];
|
|
|
|
int read;
|
|
|
|
while ((read = in.read(b)) != -1) {
|
|
|
|
out.write(b, 0, read);
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
2011-06-24 00:44:16 +02:00
|
|
|
public static void oneByteStreamCopy(InputStream in, OutputStream out) throws IOException{
|
|
|
|
int read;
|
|
|
|
while ((read = in.read()) != -1) {
|
|
|
|
out.write(read);
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
2011-05-07 22:56:11 +02:00
|
|
|
public static void closeStream(Closeable stream){
|
|
|
|
try {
|
|
|
|
if(stream != null){
|
|
|
|
stream.close();
|
|
|
|
}
|
|
|
|
} catch(IOException e){
|
|
|
|
log.warn("Closing stream warn", e); //$NON-NLS-1$
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
public static void updateAllExistingImgTilesToOsmandFormat(File f){
|
|
|
|
if(f.isDirectory()){
|
|
|
|
for(File c : f.listFiles()){
|
|
|
|
updateAllExistingImgTilesToOsmandFormat(c);
|
|
|
|
}
|
|
|
|
} else if(f.getName().endsWith(".png") || f.getName().endsWith(".jpg")){ //$NON-NLS-1$ //$NON-NLS-2$
|
|
|
|
f.renameTo(new File(f.getAbsolutePath() + ".tile")); //$NON-NLS-1$
|
|
|
|
} else if(f.getName().endsWith(".andnav2")) { //$NON-NLS-1$
|
|
|
|
f.renameTo(new File(f.getAbsolutePath().substring(0, f.getAbsolutePath().length() - ".andnav2".length()) + ".tile")); //$NON-NLS-1$ //$NON-NLS-2$
|
|
|
|
}
|
|
|
|
|
|
|
|
}
|
|
|
|
|
2011-06-26 22:01:22 +02:00
|
|
|
public static boolean removeAllFiles(File f) {
|
|
|
|
if (f.isDirectory()) {
|
|
|
|
boolean deleted = true;
|
|
|
|
for (File c : f.listFiles()) {
|
2011-05-07 22:56:11 +02:00
|
|
|
deleted &= removeAllFiles(c);
|
|
|
|
}
|
|
|
|
return f.delete();
|
|
|
|
} else {
|
|
|
|
return f.delete();
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
public static long parseLongFromBytes(byte[] bytes, int offset) {
|
|
|
|
long o= 0xff & bytes[offset + 7];
|
|
|
|
o = o << 8 | (0xff & bytes[offset + 6]);
|
|
|
|
o = o << 8 | (0xff & bytes[offset + 5]);
|
|
|
|
o = o << 8 | (0xff & bytes[offset + 4]);
|
|
|
|
o = o << 8 | (0xff & bytes[offset + 3]);
|
|
|
|
o = o << 8 | (0xff & bytes[offset + 2]);
|
|
|
|
o = o << 8 | (0xff & bytes[offset + 1]);
|
|
|
|
o = o << 8 | (0xff & bytes[offset + 0]);
|
|
|
|
return o;
|
|
|
|
}
|
|
|
|
|
|
|
|
public static void putLongToBytes(byte[] bytes, int offset, long l){
|
|
|
|
bytes[offset] = (byte) (l & 0xff);
|
|
|
|
l >>= 8;
|
|
|
|
bytes[offset + 1] = (byte) (l & 0xff);
|
|
|
|
l >>= 8;
|
|
|
|
bytes[offset + 2] = (byte) (l & 0xff);
|
|
|
|
l >>= 8;
|
|
|
|
bytes[offset + 3] = (byte) (l & 0xff);
|
|
|
|
l >>= 8;
|
|
|
|
bytes[offset + 4] = (byte) (l & 0xff);
|
|
|
|
l >>= 8;
|
|
|
|
bytes[offset + 5] = (byte) (l & 0xff);
|
|
|
|
l >>= 8;
|
|
|
|
bytes[offset + 6] = (byte) (l & 0xff);
|
|
|
|
l >>= 8;
|
|
|
|
bytes[offset + 7] = (byte) (l & 0xff);
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
public static int parseIntFromBytes(byte[] bytes, int offset) {
|
|
|
|
int o = (0xff & bytes[offset + 3]) << 24;
|
|
|
|
o |= (0xff & bytes[offset + 2]) << 16;
|
|
|
|
o |= (0xff & bytes[offset + 1]) << 8;
|
|
|
|
o |= (0xff & bytes[offset + 0]);
|
|
|
|
return o;
|
|
|
|
}
|
|
|
|
|
|
|
|
public static void putIntToBytes(byte[] bytes, int offset, int l){
|
|
|
|
bytes[offset] = (byte) (l & 0xff);
|
|
|
|
l >>= 8;
|
|
|
|
bytes[offset + 1] = (byte) (l & 0xff);
|
|
|
|
l >>= 8;
|
|
|
|
bytes[offset + 2] = (byte) (l & 0xff);
|
|
|
|
l >>= 8;
|
|
|
|
bytes[offset + 3] = (byte) (l & 0xff);
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
public static void writeLongInt(OutputStream stream, long l) throws IOException {
|
|
|
|
stream.write((int) (l & 0xff));
|
|
|
|
l >>= 8;
|
|
|
|
stream.write((int) (l & 0xff));
|
|
|
|
l >>= 8;
|
|
|
|
stream.write((int) (l & 0xff));
|
|
|
|
l >>= 8;
|
|
|
|
stream.write((int) (l & 0xff));
|
|
|
|
l >>= 8;
|
|
|
|
stream.write((int) (l & 0xff));
|
|
|
|
l >>= 8;
|
|
|
|
stream.write((int) (l & 0xff));
|
|
|
|
l >>= 8;
|
|
|
|
stream.write((int) (l & 0xff));
|
|
|
|
l >>= 8;
|
|
|
|
stream.write((int) (l & 0xff));
|
|
|
|
}
|
|
|
|
|
|
|
|
public static void writeInt(OutputStream stream, int l) throws IOException {
|
|
|
|
stream.write(l & 0xff);
|
|
|
|
l >>= 8;
|
|
|
|
stream.write(l & 0xff);
|
|
|
|
l >>= 8;
|
|
|
|
stream.write(l & 0xff);
|
|
|
|
l >>= 8;
|
|
|
|
stream.write(l & 0xff);
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
public static void writeSmallInt(OutputStream stream, int l) throws IOException {
|
|
|
|
stream.write(l & 0xff);
|
|
|
|
l >>= 8;
|
|
|
|
stream.write(l & 0xff);
|
|
|
|
l >>= 8;
|
|
|
|
}
|
|
|
|
|
|
|
|
public static int parseSmallIntFromBytes(byte[] bytes, int offset) {
|
|
|
|
int s = (0xff & bytes[offset + 1]) << 8;
|
|
|
|
s |= (0xff & bytes[offset + 0]);
|
|
|
|
return s;
|
|
|
|
}
|
|
|
|
|
|
|
|
public static void putSmallIntBytes(byte[] bytes, int offset, int s){
|
|
|
|
bytes[offset] = (byte) (s & 0xff);
|
|
|
|
s >>= 8;
|
|
|
|
bytes[offset + 1] = (byte) (s & 0xff);
|
|
|
|
s >>= 8;
|
|
|
|
}
|
2011-07-20 01:12:31 +02:00
|
|
|
|
|
|
|
public static boolean containsDigit(String name) {
|
|
|
|
for (int i = 0; i < name.length(); i++) {
|
|
|
|
if (Character.isDigit(name.charAt(i))) {
|
|
|
|
return true;
|
|
|
|
}
|
|
|
|
}
|
|
|
|
return false;
|
|
|
|
}
|
2011-08-28 20:32:25 +02:00
|
|
|
|
|
|
|
private static final String BOUNDARY = "CowMooCowMooCowCowCow"; //$NON-NLS-1$
|
|
|
|
public static String uploadFile(String urlText, File fileToUpload, String formName, boolean gzip){
|
|
|
|
URL url;
|
|
|
|
try {
|
|
|
|
log.info("Start uploading file to " + urlText + " " +fileToUpload.getName());
|
|
|
|
url = new URL(urlText);
|
|
|
|
HttpURLConnection conn = (HttpURLConnection) url.openConnection();
|
|
|
|
conn.setDoInput(true);
|
|
|
|
conn.setDoOutput(true);
|
|
|
|
conn.setRequestMethod("POST");
|
|
|
|
|
|
|
|
conn.setRequestProperty("Content-Type", "multipart/form-data; boundary=" + BOUNDARY); //$NON-NLS-1$ //$NON-NLS-2$
|
|
|
|
conn.setRequestProperty("User-Agent", "Osmand"); //$NON-NLS-1$ //$NON-NLS-2$
|
|
|
|
|
|
|
|
OutputStream ous = conn.getOutputStream();
|
|
|
|
ous.write(("--" + BOUNDARY+"\r\n").getBytes());
|
|
|
|
ous.write(("content-disposition: form-data; name=\""+formName+"\"; filename=\"" + fileToUpload.getName() + "\"\r\n").getBytes()); //$NON-NLS-1$ //$NON-NLS-2$
|
|
|
|
ous.write(("Content-Type: application/octet-stream\r\n\r\n").getBytes()); //$NON-NLS-1$
|
|
|
|
InputStream fis = new FileInputStream(fileToUpload);
|
|
|
|
BufferedInputStream bis = new BufferedInputStream(fis, 20 * 1024);
|
|
|
|
ous.flush();
|
|
|
|
if(gzip){
|
|
|
|
GZIPOutputStream gous = new GZIPOutputStream(ous, 1024);
|
|
|
|
Algoritms.streamCopy(bis, gous);
|
|
|
|
gous.flush();
|
|
|
|
gous.finish();
|
|
|
|
} else {
|
|
|
|
Algoritms.streamCopy(bis, ous);
|
|
|
|
}
|
|
|
|
|
|
|
|
ous.write(("\r\n--" + BOUNDARY + "--\r\n").getBytes()); //$NON-NLS-1$ //$NON-NLS-2$
|
|
|
|
ous.flush();
|
|
|
|
Algoritms.closeStream(bis);
|
|
|
|
Algoritms.closeStream(ous);
|
|
|
|
|
|
|
|
log.info("Finish uploading file " + fileToUpload.getName());
|
|
|
|
log.info("Response code and message : " + conn.getResponseCode() + " " + conn.getResponseMessage());
|
|
|
|
if(conn.getResponseCode() != 200){
|
|
|
|
return conn.getResponseMessage();
|
|
|
|
}
|
|
|
|
InputStream is = conn.getInputStream();
|
|
|
|
StringBuilder responseBody = new StringBuilder();
|
|
|
|
if (is != null) {
|
|
|
|
BufferedReader in = new BufferedReader(new InputStreamReader(is, "UTF-8")); //$NON-NLS-1$
|
|
|
|
String s;
|
|
|
|
boolean first = true;
|
|
|
|
while ((s = in.readLine()) != null) {
|
|
|
|
if(first){
|
|
|
|
first = false;
|
|
|
|
} else {
|
|
|
|
responseBody.append("\n"); //$NON-NLS-1$
|
|
|
|
}
|
|
|
|
responseBody.append(s);
|
|
|
|
|
|
|
|
}
|
|
|
|
is.close();
|
|
|
|
}
|
|
|
|
String response = responseBody.toString();
|
|
|
|
log.info("Response : " + response);
|
|
|
|
if(response.startsWith("OK")){
|
|
|
|
return null;
|
|
|
|
}
|
|
|
|
return response;
|
|
|
|
} catch (IOException e) {
|
|
|
|
log.error(e.getMessage(), e);
|
|
|
|
return e.getMessage();
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
private final static String URL_TO_UPLOAD_GPX = "http://download.osmand.net/upload_gpx.php";
|
|
|
|
public static void main(String[] args) throws UnsupportedEncodingException {
|
|
|
|
File file = new File("/home/victor/projects/OsmAnd/git/config/site/welcome.msg");
|
|
|
|
String url = URL_TO_UPLOAD_GPX + "?author=" + URLEncoder.encode("222", "UTF-8") + "&wd="
|
|
|
|
+ URLEncoder.encode("222", "UTF-8") + "&file="
|
|
|
|
+ URLEncoder.encode(file.getName(), "UTF-8");
|
|
|
|
Algoritms.uploadFile(url, file, "filename", true);
|
|
|
|
}
|
2011-05-07 22:56:11 +02:00
|
|
|
}
|