Skip to content

Commit 0457aa2

Browse files
committed
Merge pull request #203 from scijava/jogamp-versions
Make FileUtils.stripFilenameVersion support jogamp
2 parents 7ec75c5 + 3914efc commit 0457aa2

File tree

2 files changed

+51
-9
lines changed

2 files changed

+51
-9
lines changed

src/main/java/org/scijava/util/FileUtils.java

Lines changed: 39 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -70,6 +70,9 @@ public final class FileUtils {
7070
public static final String SHORTENER_SLASH = "/";
7171
public static final String SHORTENER_ELLIPSE = "...";
7272

73+
/** A regular expression to match filenames containing version information. */
74+
private static final Pattern VERSION_PATTERN = buildVersionPattern();
75+
7376
private FileUtils() {
7477
// prevent instantiation of utility class
7578
}
@@ -170,13 +173,8 @@ public static void writeFile(final File file, final byte[] bytes)
170173
}
171174
}
172175

173-
/** A regular expression to match filenames containing version information. */
174-
private final static Pattern versionPattern =
175-
Pattern
176-
.compile("(.+?)(-\\d+(\\.\\d+|\\d{7})+[a-z]?\\d?(-[A-Za-z0-9.]+?|\\.GA)*?)?((-(swing|swt|shaded|sources|javadoc|native|linux-x86|linux-x86_64|macosx-x86_64|windows-x86|windows-x86_64|android-arm|android-x86))?(\\.jar(-[a-z]*)?))");
177-
178176
public static String stripFilenameVersion(final String filename) {
179-
final Matcher matcher = versionPattern.matcher(filename);
177+
final Matcher matcher = VERSION_PATTERN.matcher(filename);
180178
if (!matcher.matches()) return filename;
181179
return matcher.group(1) + matcher.group(5);
182180
}
@@ -191,7 +189,7 @@ public static String stripFilenameVersion(final String filename) {
191189
public static File[] getAllVersions(final File directory,
192190
final String filename)
193191
{
194-
final Matcher matcher = versionPattern.matcher(filename);
192+
final Matcher matcher = VERSION_PATTERN.matcher(filename);
195193
if (!matcher.matches()) {
196194
final File file = new File(directory, filename);
197195
return file.exists() ? new File[] { file } : null;
@@ -203,7 +201,7 @@ public static File[] getAllVersions(final File directory,
203201
@Override
204202
public boolean accept(final File dir, final String name) {
205203
if (!name.startsWith(baseName)) return false;
206-
final Matcher matcher2 = versionPattern.matcher(name);
204+
final Matcher matcher2 = VERSION_PATTERN.matcher(name);
207205
return matcher2.matches() && baseName.equals(matcher2.group(1)) &&
208206
equals(classifier, matcher2.group(6));
209207
}
@@ -609,6 +607,38 @@ else if (protocol.equals("jar")) {
609607
return result;
610608
}
611609

610+
// -- Helper methods --
611+
612+
/** Builds the {@link #VERSION_PATTERN} constant. */
613+
private static Pattern buildVersionPattern() {
614+
final String version =
615+
"\\d+(\\.\\d+|\\d{7})+[a-z]?\\d?(-[A-Za-z0-9.]+?|\\.GA)*?";
616+
final String suffix = "\\.jar(-[a-z]*)?";
617+
return Pattern.compile("(.+?)(-" + version + ")?((-(" + classifiers() +
618+
"))?(" + suffix + "))");
619+
}
620+
621+
/** Helper method of {@link #buildVersionPattern()}. */
622+
private static String classifiers() {
623+
final String[] classifiers = {
624+
"swing",
625+
"swt",
626+
"shaded",
627+
"sources",
628+
"javadoc",
629+
"native",
630+
"(natives-)?(android|linux|macosx|solaris|windows)-" +
631+
"(aarch64|amd64|arm|armv6|armv6hf|i586|universal|x86|x86_64)",
632+
};
633+
final StringBuilder sb = new StringBuilder("(");
634+
for (final String classifier : classifiers) {
635+
if (sb.length() > 1) sb.append("|");
636+
sb.append(classifier);
637+
}
638+
sb.append(")");
639+
return sb.toString();
640+
}
641+
612642
// -- Deprecated methods --
613643

614644
/**
@@ -620,7 +650,7 @@ else if (protocol.equals("jar")) {
620650
*/
621651
@Deprecated
622652
public static Matcher matchVersionedFilename(final String filename) {
623-
return versionPattern.matcher(filename);
653+
return VERSION_PATTERN.matcher(filename);
624654
}
625655

626656
}

src/test/java/org/scijava/util/FileUtilsTest.java

Lines changed: 12 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -299,6 +299,18 @@ public void testStripVersionFromFilename() {
299299
assertEquals("jars/ffmpeg-android-x86.jar", FileUtils.stripFilenameVersion("jars/ffmpeg-2.6.1-0.11-android-x86.jar"));
300300
assertEquals("jars/ffmpeg-android-arm.jar", FileUtils.stripFilenameVersion("jars/ffmpeg-2.6.1-0.11-android-arm.jar"));
301301

302+
// Test the jogamp style of native binary .jars
303+
assertEquals("jars/jogl-all-natives-android-aarch64.jar", FileUtils.stripFilenameVersion("jars/jogl-all-2.3.0-natives-android-aarch64.jar"));
304+
assertEquals("jars/jogl-all-natives-android-armv6.jar", FileUtils.stripFilenameVersion("jars/jogl-all-2.3.0-natives-android-armv6.jar"));
305+
assertEquals("jars/jogl-all-natives-linux-amd64.jar", FileUtils.stripFilenameVersion("jars/jogl-all-2.3.0-natives-linux-amd64.jar"));
306+
assertEquals("jars/jogl-all-natives-linux-armv6.jar", FileUtils.stripFilenameVersion("jars/jogl-all-2.3.0-natives-linux-armv6.jar"));
307+
assertEquals("jars/jogl-all-natives-linux-armv6hf.jar", FileUtils.stripFilenameVersion("jars/jogl-all-2.3.0-natives-linux-armv6hf.jar"));
308+
assertEquals("jars/jogl-all-natives-linux-i586.jar", FileUtils.stripFilenameVersion("jars/jogl-all-2.3.0-natives-linux-i586.jar"));
309+
assertEquals("jars/jogl-all-natives-macosx-universal.jar", FileUtils.stripFilenameVersion("jars/jogl-all-2.3.0-natives-macosx-universal.jar"));
310+
assertEquals("jars/jogl-all-natives-solaris-amd64.jar", FileUtils.stripFilenameVersion("jars/jogl-all-2.3.0-natives-solaris-amd64.jar"));
311+
assertEquals("jars/jogl-all-natives-solaris-i586.jar", FileUtils.stripFilenameVersion("jars/jogl-all-2.3.0-natives-solaris-i586.jar"));
312+
assertEquals("jars/jogl-all-natives-windows-amd64.jar", FileUtils.stripFilenameVersion("jars/jogl-all-2.3.0-natives-windows-amd64.jar"));
313+
assertEquals("jars/jogl-all-natives-windows-i586.jar", FileUtils.stripFilenameVersion("jars/jogl-all-2.3.0-natives-windows-i586.jar"));
302314
}
303315

304316
@Test

0 commit comments

Comments
 (0)