package org.limewire.ui.swing.shell; import java.io.IOException; abstract class WindowsAssociation implements ShellAssociation { /** Path to the native executable currently running */ protected final String executable; protected WindowsAssociation(String executable) { this.executable = executable; } public boolean isAvailable() { try { return "".equals(get()); } catch (IOException readFailed) { return false; } } public boolean isRegistered() { try { return executable.equals(get()); } catch (IOException readFailed) { return false; } } protected abstract String get() throws IOException; /** * Parses the path from a Windows Registry value. * * Registry values look like this: * * <pre> * "C:\Program Files\Program\Program.exe" "%1" * C:\PROGRA~1\Program\Program.exe %1 * </pre> * * Additional information comes after the path. * If the path at the start contains spaces, it will be in quotes. * This method gets it either way. * * @param value A text value from the Windows Registry that contains a path * @return The path */ protected static String parsePath(String value) { if ("".equals(value)) return ""; int begin, end; if (value.startsWith("\"")) { begin = 1; end = value.indexOf("\"", begin); } else { begin = 0; end = value.indexOf(" "); } if (end == -1) return value; return value.substring(begin, end); } }