/*
* SK's Minecraft Launcher
* Copyright (C) 2010-2014 Albert Pham <http://www.sk89q.com> and contributors
* Please see LICENSE.txt for license information.
*/
package com.skcraft.launcher.bootstrap;
import lombok.Getter;
import lombok.extern.java.Log;
import java.io.File;
import java.io.FileFilter;
import java.util.regex.Matcher;
import java.util.regex.Pattern;
@Log
public class LauncherBinary implements Comparable<LauncherBinary> {
public static final Pattern PATTERN = Pattern.compile("^([0-9]+)\\.jar(\\.pack)?$");
@Getter
private final File path;
private final long time;
private final boolean packed;
public LauncherBinary(File path) {
this.path = path;
String name = path.getName();
Matcher m = PATTERN.matcher(name);
if (!m.matches()) {
throw new IllegalArgumentException("Invalid filename: " + path);
}
time = Long.parseLong(m.group(1));
packed = m.group(2) != null;
}
public File getExecutableJar() throws PackedJarException {
if (packed) {
log.warning("Launcher binary " + path.getAbsolutePath() + " is a pack200 file, which is " +
"no longer supported.");
throw new PackedJarException("Cannot unpack .jar.pack files!");
} else {
return path;
}
}
@Override
public int compareTo(LauncherBinary o) {
if (time > o.time) {
return -1;
} else if (time < o.time) {
return 1;
} else {
if (packed && !o.packed) {
return 1;
} else if (!packed && o.packed) {
return -1;
} else {
return 0;
}
}
}
public void remove() {
path.delete();
}
public static class Filter implements FileFilter {
@Override
public boolean accept(File file) {
return file.isFile() && LauncherBinary.PATTERN.matcher(file.getName()).matches();
}
}
public static class PackedJarException extends Exception {
public PackedJarException(String message) {
super(message);
}
}
}