protected static class PluginManagerImpl {
public PluginInfo getPluginInfo(Plugin plugin) throws PluginNotFoundException {
BrowserPlugin plug = null;
PluginInfo.PlayerPluginWrapperType pwt = PluginInfo.PlayerPluginWrapperType.Native;
PluginVersion pv = new PluginVersion();
if (plugin.equals(Plugin.Native) || plugin.equals(Plugin.WinMediaPlayer)) {
switch (plugin) {
case WinMediaPlayer:
boolean found = false;
MimeType mt = MimeType.getMimeType("application/x-ms-wmp");
if (mt != null) { // firefox plugin present...
found = true;
pwt = PluginInfo.PlayerPluginWrapperType.WMPForFirefox;
} else { // firefox plugin not found check for generic..
mt = MimeType.getMimeType("application/x-mplayer2");
if (mt != null) {
try {
plug = mt.getEnabledPlugin(); // who's got the mime ? (WMP / VLC)
if (plug.getName().contains("Windows Media Player")) {
found = true;
}
} catch (PluginNotFoundException ex) {
}
}
}
if (found) {
updateWMPVersion(pv);
plug = mt.getEnabledPlugin();
if (plug.getFileName().toLowerCase().contains("totem")
|| plug.getDescription().toLowerCase().contains("totem")) {
pwt = PluginInfo.PlayerPluginWrapperType.Totem;
}
} else {
throw new PluginNotFoundException(plugin);
}
break;
case Native:
if (isHTML5CompliantClient()) {
pv = PluginVersion.get(5, 0, 0);
} else {
throw new PluginNotFoundException(plugin);
}
}
return new PluginInfo(plugin, pv, pwt);
}
PluginMimeTypes pt = PluginMimeTypes.none;
switch (plugin) {
case DivXPlayer:
pt = PluginMimeTypes.divx;
break;
case FlashPlayer:
pt = PluginMimeTypes.flash;
break;
case QuickTimePlayer:
pt = PluginMimeTypes.quicktime;
break;
case VLCPlayer:
pt = PluginMimeTypes.vlc;
break;
}
MimeType mt = MimeType.getMimeType(pt.mime);
if (mt != null) { // plugin present...
try {
String desc = mt.getEnabledPlugin().getDescription();
String name = mt.getEnabledPlugin().getName();
if (name.toLowerCase().contains(pt.whois)) { // who has it?
RegExp.RegexResult res = RegExp.getRegExp(pt.regex, "").exec(pt.versionInName ? name : desc);
pv = new PluginVersion(Integer.parseInt(res.getMatch(1)),
Integer.parseInt(res.getMatch(2)), res.getMatch(3) != null ? Integer.parseInt(res.getMatch(4)) : 0);
if (mt.getEnabledPlugin().getFileName().toLowerCase().contains("totem")
|| desc.toLowerCase().contains("totem")) {
pwt = PluginInfo.PlayerPluginWrapperType.Totem;
}