package org.limewire.ui.swing.shell;
import java.io.IOException;
import org.limewire.util.SystemUtils;
/** A registration in the Windows Registry that sets a program as the default viewer for a custom Web link protocol. */
public class WindowsProtocolShellAssociation extends WindowsAssociation {
private static final String HKCU = "HKEY_CURRENT_USER";
private final String protocol;
private final String name;
/**
* Make a new WindowsProtocolShellAssociation, specifying the program and protocol it will check for and set.
*
* @param protocol the protocol without punctuation
* @param name the common name of the protocol
*/
public WindowsProtocolShellAssociation(String executable, String protocol, String name) {
super(executable);
this.protocol = "Software\\Classes\\"+protocol;
this.name = name;
}
@Override
protected String get() throws IOException {
String command = SystemUtils.registryReadText(HKCU, protocol + "\\shell\\open\\command", "");
return parsePath(command);
}
public void register() {
/*
* Create the following Registry keys and values:
*
* Root Key Variable Value
* ------------------ ------------ ------------ ---------------------------------------------
* HKEY_CLASSES_ROOT protocol URL:name
* URL Protocol
* DefaultIcon executable,0
* shell
* open
* command executable "%1"
*/
SystemUtils.registryWriteText(HKCU, protocol,"","URL:" + name);
SystemUtils.registryWriteText(HKCU, protocol,"URL Protocol", "");
SystemUtils.registryWriteText(HKCU, protocol + "\\DefaultIcon","","\"" + executable + "\",0");
SystemUtils.registryWriteText(HKCU, protocol + "\\shell\\open\\command", "","\"" + executable + "\" \"%1\"");
}
public void unregister() {
SystemUtils.registryDelete(HKCU, protocol);
}
}