/*******************************************************************************
* Copyright (c) 2005, 2012 eBay Inc.
* All rights reserved. This program and the accompanying materials
* are made available under the terms of the Eclipse Public License v1.0
* which accompanies this distribution, and is available at
* http://www.eclipse.org/legal/epl-v10.html
*
*******************************************************************************/
package org.eclipse.vjet.eclipse.codeassist.compliance;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import org.eclipse.vjet.dsf.jsnative.anno.BrowserType;
/**
* Stores all registered browsers keys.
* @see SupportedByAnnotationAcceptor
*/
public class PredefinedBrowsersPreferenceKeys {
private static final List<IBrowserKey> PREDEF_KEYS = new ArrayList<IBrowserKey>();
static final IBrowserKey MSIE_KEY;
static final IBrowserKey FF_KEY;
static final IBrowserKey OPERA_KEY;
static final IBrowserKey SAFARI_KEY;
private static final String MSIE = "Internet Explorer";
private static final Version MSIE_6X = new Version(6);
private static final Version MSIE_6XP = new Version(6, true);
private static final Version MSIE_7X = new Version(7);
private static final Version MSIE_7XP = new Version(7, true);
private static final Version MSIE_8X = new Version(8);
private static final Version MSIE_8XP = new Version(8, true);
private static final String FF = "Firefox/Mozilla";
private static final Version FF_1X = new Version(1);
private static final Version FF_1XP = new Version(1, true);
private static final Version FF_2X = new Version(2);
private static final Version FF_2XP = new Version(2, true);
private static final Version FF_3X = new Version(3);
private static final Version FF_3XP = new Version(3, true);
private static final String OPERA = "Opera";
private static final Version OPERA_7X = new Version(7);
private static final Version OPERA_7XP = new Version(7, true);
private static final Version OPERA_8X = new Version(8);
private static final Version OPERA_8XP = new Version(8, true);
private static final Version OPERA_9X = new Version(9);
private static final Version OPERA_9XP = new Version(9, true);
private static final String SAFARI = "Safari";
private static final Version SAFARI_3 = new Version(3);
private static final Version SAFARI_3P = new Version(3, true);
static {
MSIE_KEY = register(MSIE, new Version[] { MSIE_6X, MSIE_6XP, MSIE_7X,
MSIE_7XP, MSIE_8X, MSIE_8XP }, BrowserType.IE_6);
FF_KEY = register(FF, new Version[] { FF_1X, FF_1XP, FF_2X, FF_2XP,
FF_3X, FF_3XP }, BrowserType.FIREFOX_1);
OPERA_KEY = register(OPERA, new Version[] { OPERA_7X, OPERA_7XP,
OPERA_8X, OPERA_8XP, OPERA_9X, OPERA_9XP }, BrowserType.OPERA_7);
SAFARI_KEY = register(SAFARI, new Version[] { SAFARI_3, SAFARI_3P },
BrowserType.SAFARI_3);
}
public static IBrowserKey[] getPredefinedKeys() {
return PREDEF_KEYS.toArray(new IBrowserKey[] {});
}
private static class Version {
private static final String ABOVE = ".x and above";
private static final String ONLY = ".x only";
private static final Map<String, Version> vers = new HashMap<String, Version>();
int version;
boolean plus;
Version(int version) {
this(version, false);
}
Version(int version, boolean plus) {
this.version = version;
this.plus = plus;
vers.put(toString(), this);
}
public String toString() {
return version + (plus ? ABOVE : ONLY);
}
static int parseVersionNumber(String value) {
if (vers.containsKey(value)) {
Version ver = vers.get(value);
return ver.plus ? -ver.version : ver.version;
}
return 0;
}
}
public static interface IBrowserKey {
String getBrowser();
String[] getVersions();
String isTargetedBrowserPredefKey();
String takeTargetedBrowserVerPredefKey();
boolean sameAs(BrowserType type);
}
static int parseVersionNumber(String value) {
return Version.parseVersionNumber(value);
}
private static IBrowserKey register(final String browser,
final Version[] vers, final BrowserType type) {
IBrowserKey registeredKey = new IBrowserKey() {
public String getBrowser() {
return browser;
}
public String[] getVersions() {
String[] versions = new String[vers.length];
for (int iter = 0; iter < vers.length; iter++) {
versions[iter] = vers[iter].toString();
}
return versions;
}
public String isTargetedBrowserPredefKey() {
return "is_targeted_browser_" + browser;
}
public String takeTargetedBrowserVerPredefKey() {
return "take_targeted_browser_ver_" + browser;
}
public boolean sameAs(BrowserType typeToCompare) {
return type.getName().equals(typeToCompare.getName());
}
};
PREDEF_KEYS.add(registeredKey);
return registeredKey;
}
}