super(url);
logger.info("Parsing locator " + url);
if (!url.startsWith("bd://"))
throw new InvalidLocatorException("Locator must start with bd:// (" + url + ")");
Scanner scan = new Scanner(url.substring(5));
scan.useDelimiter("[\\.:&]");
try {
while (scan.hasNext()) {
String name = scan.next();
if (scan.hasNext()) {
if (name.equals("JAR")) {
scan.useDelimiter("[:]");
String temp = scan.next();
jar = Integer.parseInt(temp.substring(0, 5));
isJarItem = true;
if (temp.length() > 5)
pathSegments = temp.substring(5);
} else if (name.equals("SOUND")) {
sound = scan.nextInt(16);
isSoundItem = true;
} else if (name.equals("PLAYLIST")) {
playList = scan.nextInt();
isPlayItem = true;
parsePlaylist(scan);
} else if (name.length() == 32)
disc = name;
else if (name.length() <= 4)
titleNum = Integer.parseInt(name, 16);
else
throw new InvalidLocatorException("Invalid identifier (" + url + ")");
} else {
throw new InvalidLocatorException("Missing value (" + url + ")");
}
}
} catch (InputMismatchException ex) {
throw new InvalidLocatorException("Failed to parse value (" + url + ")");
} catch (NumberFormatException ex) {
throw new InvalidLocatorException("Failed to parse value (" + url + ")");
}
}