Back to project page android-sqlite-asset-helper.
The source code is released under:
Apache License
If you think the Android project android-sqlite-asset-helper listed in this page is inappropriate, such as containing malicious code/tools or violating the copyright, please email info at java2s dot com, thanks.
package com.readystatesoftware.sqliteasset; //from w ww. jav a2 s .com import android.util.Log; import java.util.Comparator; import java.util.regex.Matcher; import java.util.regex.Pattern; import com.readystatesoftware.sqliteasset.SQLiteAssetHelper.SQLiteAssetException; /** * Compare paths by their upgrade version numbers, instead of using * alphanumeric comparison on plain file names. This prevents the upgrade * scripts from being applied out of order when they first move to double-, * triple-, etc. digits. * <p> * For example, this fixes an upgrade that would apply 2 different upgrade * files from version 9 to 11 (<code>..._updated_9_10</code> and * <code>..._updated_10_11</code>) from using the <em>incorrect</em> * alphanumeric order of <code>10_11</code> before <code>9_10</code>. * </p> */ class VersionComparator implements Comparator<String> { private static final String TAG = SQLiteAssetHelper.class.getSimpleName(); private Pattern pattern = Pattern .compile(".*_upgrade_([0-9]+)-([0-9]+).*"); /** * Compares the two specified upgrade script strings to determine their * relative ordering considering their two version numbers. Assumes all * database names used are the same, as this function only compares the * two version numbers. * * @param file0 * an upgrade script file name * @param file1 * a second upgrade script file name to compare with file0 * @return an integer < 0 if file0 should be applied before file1, 0 if * they are equal (though that shouldn't happen), and > 0 if * file0 should be applied after file1. * * @exception SQLiteAssetException * thrown if the strings are not in the correct upgrade * script format of: * <code>databasename_fromVersionInteger_toVersionInteger</code> */ @Override public int compare(String file0, String file1) { Matcher m0 = pattern.matcher(file0); Matcher m1 = pattern.matcher(file1); if (!m0.matches()) { Log.w(TAG, "could not parse upgrade script file: " + file0); throw new SQLiteAssetException("Invalid upgrade script file"); } if (!m1.matches()) { Log.w(TAG, "could not parse upgrade script file: " + file1); throw new SQLiteAssetException("Invalid upgrade script file"); } int v0_from = Integer.valueOf(m0.group(1)); int v1_from = Integer.valueOf(m1.group(1)); int v0_to = Integer.valueOf(m0.group(2)); int v1_to = Integer.valueOf(m1.group(2)); if (v0_from == v1_from) { // 'from' versions match for both; check 'to' version next if (v0_to == v1_to) { return 0; } return v0_to < v1_to ? -1 : 1; } return v0_from < v1_from ? -1 : 1; } }