Java tutorial
/** * Copyright (C) 2010 Regis Montoya (aka r3gis - www.r3gis.fr) * This file is part of CSipSimple. * * CSipSimple is free software: you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * CSipSimple is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with CSipSimple. If not, see <http://www.gnu.org/licenses/>. */ package com.csipsimple.models; import java.io.File; import java.io.Serializable; import java.net.URI; import org.json.JSONException; import org.json.JSONObject; import com.csipsimple.utils.Log; import android.os.Parcel; import android.os.Parcelable; /** * Parcelable/Serializable class to store information of a dynamic library (.so) stored on the network * @author r3gis3r * */ public class RemoteLibInfo implements Parcelable, Serializable { private static final String THIS_FILE = "RemoteLib"; private static final long serialVersionUID = -5622422102685917690L; public int PrimaryKey = -1; private String fileName; private File filePath; private URI uri; private String version; //Blabla private String id; private String label; private String changelog; private String description; public RemoteLibInfo(Parcel in) { readFromParcel(in); } /** * Constructor from json object (retrieved on the web) * @param library * @throws JSONException if json is not well formated or doesn't contains everything we want */ public RemoteLibInfo(JSONObject library) throws JSONException { JSONObject latestVersion; latestVersion = library.getJSONArray("versions").getJSONObject(0); changelog = latestVersion.getString("changelog"); version = latestVersion.getString("version"); uri = URI.create(latestVersion.getString("download_url")); description = library.getString("description"); label = library.getString("label"); id = library.getString("id"); } @Override public int describeContents() { return 0; } public void readFromParcel(Parcel in) { PrimaryKey = in.readInt(); fileName = in.readString(); filePath = new File(in.readString()); uri = URI.create(in.readString()); version = in.readString(); label = in.readString(); changelog = in.readString(); description = in.readString(); id = in.readString(); } @Override public void writeToParcel(Parcel arg0, int arg1) { arg0.writeInt(PrimaryKey); arg0.writeString(fileName); arg0.writeString(filePath.getAbsolutePath()); arg0.writeString(uri.toString()); arg0.writeString(version); arg0.writeString(label); arg0.writeString(changelog); arg0.writeString(description); arg0.writeString(id); } public static final Parcelable.Creator<RemoteLibInfo> CREATOR = new Parcelable.Creator<RemoteLibInfo>() { public RemoteLibInfo createFromParcel(Parcel in) { return new RemoteLibInfo(in); } public RemoteLibInfo[] newArray(int size) { return new RemoteLibInfo[size]; } }; // Setters/Getters /** * Set the library file name * @param fileName the library file name : the name the library has to be saved to */ public void setFileName(String aFileName) { fileName = aFileName; } /** * Get the library file name * @return the library file name : the name the library has to be saved to */ public String getFileName() { return fileName; } /** * Set the file path to save the library to * @param filePath the filePath to save the library to */ public void setFilePath(File aFilePath) { this.filePath = aFilePath; } /** * Get the file path to save the library to * @param filePath the filePath to save the library to */ public File getFilePath() { return filePath; } /** * Get the uri from where it the library has to be downloaded * @return the library uri */ public URI getDownloadUri() { return uri; } /** * Get the library id * @return the library id (internal use) */ public String getId() { return id; } /** * Get the library version * @return the library version string, should be formated like that : \d.\d{2}-\d{2} */ public String getVersion() { return version; } /** * Test whether this lib is more up to date than an other version of the lib * @param oldLibVersion the other version to compare to * @return true if our lib is more up to date */ public boolean isMoreUpToDateThan(String oldLibVersion) { if (oldLibVersion.equalsIgnoreCase("0.01-00")) { //FORCE SINCE WE MADE A PRIMARY BAD COMMIT return true; } //Speed up things if version is the same if (version.equalsIgnoreCase(oldLibVersion)) { return false; } //Else do a real comparaison parsing versions String[] split_master_old = oldLibVersion.split("\\."); String[] split_master = version.split("\\."); try { Log.d(THIS_FILE, "We have " + split_master_old.length); int int_master_old = Integer.decode(split_master_old[0]); int int_master = Integer.decode(split_master[0]); if (int_master > int_master_old) { return true; } if (int_master < int_master_old) { return false; } String[] split_build_old = split_master_old[1].split("-"); String[] split_build = split_master[1].split("-"); int int_vers_old = Integer.decode(split_build_old[0]); int int_vers = Integer.decode(split_build[0]); if (int_vers > int_vers_old) { return true; } if (int_vers < int_vers_old) { return false; } int int_build_old = Integer.decode(split_build_old[1]); int int_build = Integer.decode(split_build[1]); if (int_build > int_build_old) { return true; } if (int_build < int_build_old) { return false; } } catch (NumberFormatException e) { return true; } catch (Exception e) { Log.w(THIS_FILE, "Error while trying to decode versions", e); return true; } return false; } }