mirror of
https://bitbucket.org/wisemapping/wisemapping-open-source.git
synced 2024-11-25 15:37:56 +01:00
Merge branch 'develop' into feature/WISE-16-remove_user
This commit is contained in:
commit
71bba1c5ab
@ -119,16 +119,6 @@
|
|||||||
<version>${org.springframework.version}</version>
|
<version>${org.springframework.version}</version>
|
||||||
<scope>compile</scope>
|
<scope>compile</scope>
|
||||||
</dependency>
|
</dependency>
|
||||||
<dependency>
|
|
||||||
<groupId>javax.xml.bind</groupId>
|
|
||||||
<artifactId>jaxb-api</artifactId>
|
|
||||||
<version>2.0</version>
|
|
||||||
</dependency>
|
|
||||||
<dependency>
|
|
||||||
<groupId>javax.xml.bind</groupId>
|
|
||||||
<artifactId>jsr173_api</artifactId>
|
|
||||||
<version>1.0</version>
|
|
||||||
</dependency>
|
|
||||||
<dependency>
|
<dependency>
|
||||||
<groupId>org.apache.xmlgraphics</groupId>
|
<groupId>org.apache.xmlgraphics</groupId>
|
||||||
<artifactId>fop</artifactId>
|
<artifactId>fop</artifactId>
|
||||||
@ -188,12 +178,6 @@
|
|||||||
<version>${org.springframework.version}</version>
|
<version>${org.springframework.version}</version>
|
||||||
<scope>runtime</scope>
|
<scope>runtime</scope>
|
||||||
</dependency>
|
</dependency>
|
||||||
<dependency>
|
|
||||||
<groupId>javax.transaction</groupId>
|
|
||||||
<artifactId>jta</artifactId>
|
|
||||||
<version>1.0.1B</version>
|
|
||||||
<scope>runtime</scope>
|
|
||||||
</dependency>
|
|
||||||
<dependency>
|
<dependency>
|
||||||
<groupId>org.springframework</groupId>
|
<groupId>org.springframework</groupId>
|
||||||
<artifactId>spring-jdbc</artifactId>
|
<artifactId>spring-jdbc</artifactId>
|
||||||
@ -236,21 +220,15 @@
|
|||||||
<version>1.7</version>
|
<version>1.7</version>
|
||||||
</dependency>
|
</dependency>
|
||||||
<dependency>
|
<dependency>
|
||||||
<groupId>javax.servlet</groupId>
|
<groupId>javax</groupId>
|
||||||
<artifactId>servlet-api</artifactId>
|
<artifactId>javaee-api</artifactId>
|
||||||
<version>2.4</version>
|
<version>6.0</version>
|
||||||
<scope>provided</scope>
|
<scope>provided</scope>
|
||||||
</dependency>
|
</dependency>
|
||||||
<dependency>
|
|
||||||
<groupId>javax.servlet</groupId>
|
|
||||||
<artifactId>jstl</artifactId>
|
|
||||||
<version>1.2</version>
|
|
||||||
</dependency>
|
|
||||||
<dependency>
|
<dependency>
|
||||||
<groupId>javax.mail</groupId>
|
<groupId>javax.mail</groupId>
|
||||||
<artifactId>mail</artifactId>
|
<artifactId>mail</artifactId>
|
||||||
<version>1.4</version>
|
<version>1.4</version>
|
||||||
<scope>compile</scope>
|
|
||||||
</dependency>
|
</dependency>
|
||||||
<dependency>
|
<dependency>
|
||||||
<groupId>mysql</groupId>
|
<groupId>mysql</groupId>
|
||||||
@ -323,8 +301,49 @@
|
|||||||
<artifactId>swagger-springmvc</artifactId>
|
<artifactId>swagger-springmvc</artifactId>
|
||||||
<version>0.6.6</version>
|
<version>0.6.6</version>
|
||||||
</dependency>
|
</dependency>
|
||||||
|
<dependency>
|
||||||
|
<groupId>com.wordnik</groupId>
|
||||||
|
<artifactId>swagger-annotations_2.9.1</artifactId>
|
||||||
|
<version>1.2.0</version>
|
||||||
|
</dependency>
|
||||||
|
|
||||||
</dependencies>
|
</dependencies>
|
||||||
<profiles>
|
<profiles>
|
||||||
|
<profile>
|
||||||
|
<id>coverage</id>
|
||||||
|
<build>
|
||||||
|
<plugins>
|
||||||
|
<plugin>
|
||||||
|
<groupId>org.jacoco</groupId>
|
||||||
|
<artifactId>jacoco-maven-plugin</artifactId>
|
||||||
|
<version>0.6.4.201312101107</version>
|
||||||
|
<executions>
|
||||||
|
<!--
|
||||||
|
Prepares the property pointing to the JaCoCo runtime agent which
|
||||||
|
is passed as VM argument when Maven the Surefire plugin is executed.
|
||||||
|
-->
|
||||||
|
<execution>
|
||||||
|
<id>pre-unit-test</id>
|
||||||
|
<goals>
|
||||||
|
<goal>prepare-agent</goal>
|
||||||
|
</goals>
|
||||||
|
</execution>
|
||||||
|
<!--
|
||||||
|
Ensures that the code coverage report for unit tests is created after
|
||||||
|
unit tests have been run.
|
||||||
|
-->
|
||||||
|
<execution>
|
||||||
|
<id>post-unit-test</id>
|
||||||
|
<phase>test</phase>
|
||||||
|
<goals>
|
||||||
|
<goal>report</goal>
|
||||||
|
</goals>
|
||||||
|
</execution>
|
||||||
|
</executions>
|
||||||
|
</plugin>
|
||||||
|
</plugins>
|
||||||
|
</build>
|
||||||
|
</profile>
|
||||||
<profile>
|
<profile>
|
||||||
<id>hsqldb</id>
|
<id>hsqldb</id>
|
||||||
<activation>
|
<activation>
|
||||||
@ -511,34 +530,7 @@
|
|||||||
<groupId>org.apache.maven.plugins</groupId>
|
<groupId>org.apache.maven.plugins</groupId>
|
||||||
<artifactId>maven-surefire-plugin</artifactId>
|
<artifactId>maven-surefire-plugin</artifactId>
|
||||||
</plugin>
|
</plugin>
|
||||||
<plugin>
|
|
||||||
<groupId>org.jacoco</groupId>
|
|
||||||
<artifactId>jacoco-maven-plugin</artifactId>
|
|
||||||
<version>0.6.4.201312101107</version>
|
|
||||||
<executions>
|
|
||||||
<!--
|
|
||||||
Prepares the property pointing to the JaCoCo runtime agent which
|
|
||||||
is passed as VM argument when Maven the Surefire plugin is executed.
|
|
||||||
-->
|
|
||||||
<execution>
|
|
||||||
<id>pre-unit-test</id>
|
|
||||||
<goals>
|
|
||||||
<goal>prepare-agent</goal>
|
|
||||||
</goals>
|
|
||||||
</execution>
|
|
||||||
<!--
|
|
||||||
Ensures that the code coverage report for unit tests is created after
|
|
||||||
unit tests have been run.
|
|
||||||
-->
|
|
||||||
<execution>
|
|
||||||
<id>post-unit-test</id>
|
|
||||||
<phase>test</phase>
|
|
||||||
<goals>
|
|
||||||
<goal>report</goal>
|
|
||||||
</goals>
|
|
||||||
</execution>
|
|
||||||
</executions>
|
|
||||||
</plugin>
|
|
||||||
<plugin>
|
<plugin>
|
||||||
<groupId>org.apache.tomcat.maven</groupId>
|
<groupId>org.apache.tomcat.maven</groupId>
|
||||||
<artifactId>tomcat7-maven-plugin</artifactId>
|
<artifactId>tomcat7-maven-plugin</artifactId>
|
||||||
@ -557,7 +549,7 @@
|
|||||||
<plugin>
|
<plugin>
|
||||||
<groupId>org.eclipse.jetty</groupId>
|
<groupId>org.eclipse.jetty</groupId>
|
||||||
<artifactId>jetty-maven-plugin</artifactId>
|
<artifactId>jetty-maven-plugin</artifactId>
|
||||||
<version>9.1.0.v20131115</version>
|
<version>9.1.1.v20140108</version>
|
||||||
<configuration>
|
<configuration>
|
||||||
<stopKey>foo</stopKey>
|
<stopKey>foo</stopKey>
|
||||||
<stopPort>9999</stopPort>
|
<stopPort>9999</stopPort>
|
||||||
|
@ -47,7 +47,7 @@ public class SupportedUserAgent implements Serializable {
|
|||||||
|
|
||||||
boolean result = browser == Browser.FIREFOX && majorVersion >= 10;
|
boolean result = browser == Browser.FIREFOX && majorVersion >= 10;
|
||||||
result = result || browser == Browser.FIREFOX2 && majorVersion >= 17;
|
result = result || browser == Browser.FIREFOX2 && majorVersion >= 17;
|
||||||
result = result || browser == Browser.IE8 || browser == Browser.IE9;
|
result = result || browser == Browser.IE8 || browser == Browser.IE9 || browser == Browser.IE11 ;
|
||||||
result = result || browser == Browser.IE && majorVersion >= 8;
|
result = result || browser == Browser.IE && majorVersion >= 8;
|
||||||
result = result || browser == Browser.OPERA10 && majorVersion >= 11;
|
result = result || browser == Browser.OPERA10 && majorVersion >= 11;
|
||||||
result = result || browser == Browser.CHROME && majorVersion >= 18;
|
result = result || browser == Browser.CHROME && majorVersion >= 18;
|
||||||
|
@ -104,8 +104,6 @@ class LockManagerImpl implements LockManager {
|
|||||||
}
|
}
|
||||||
|
|
||||||
private void unlock(int mapId) {
|
private void unlock(int mapId) {
|
||||||
System.out.println("Unlocking:"+mapId);
|
|
||||||
|
|
||||||
logger.debug("Unlock map id:" + mapId);
|
logger.debug("Unlock map id:" + mapId);
|
||||||
lockInfoByMapId.remove(mapId);
|
lockInfoByMapId.remove(mapId);
|
||||||
}
|
}
|
||||||
|
@ -44,309 +44,308 @@ import java.util.regex.Pattern;
|
|||||||
|
|
||||||
/**
|
/**
|
||||||
* Enum constants for most common browsers, including e-mail clients and bots.
|
* Enum constants for most common browsers, including e-mail clients and bots.
|
||||||
|
*
|
||||||
* @author harald
|
* @author harald
|
||||||
*
|
|
||||||
*/
|
*/
|
||||||
|
|
||||||
public enum Browser {
|
public enum Browser {
|
||||||
|
|
||||||
OPERA( Manufacturer.OPERA, null, 1, "Opera", new String[] { "Opera" }, null, BrowserType.WEB_BROWSER, RenderingEngine.PRESTO, "Opera\\/(([\\d]+)\\.([\\w]+))"), // before MSIE
|
OPERA(Manufacturer.OPERA, null, 1, "Opera", new String[]{"Opera"}, null, BrowserType.WEB_BROWSER, RenderingEngine.PRESTO, "Opera\\/(([\\d]+)\\.([\\w]+))"), // before MSIE
|
||||||
OPERA_MINI( Manufacturer.OPERA, Browser.OPERA, 20, "Opera Mini", new String[] { "Opera Mini"}, null, BrowserType.MOBILE_BROWSER, RenderingEngine.PRESTO, null), // Opera for mobile devices
|
OPERA_MINI(Manufacturer.OPERA, Browser.OPERA, 20, "Opera Mini", new String[]{"Opera Mini"}, null, BrowserType.MOBILE_BROWSER, RenderingEngine.PRESTO, null), // Opera for mobile devices
|
||||||
/**
|
/**
|
||||||
* For some strange reason Opera uses 9.80 in the user-agent string.
|
* For some strange reason Opera uses 9.80 in the user-agent string.
|
||||||
*/
|
*/
|
||||||
OPERA10( Manufacturer.OPERA, Browser.OPERA, 10, "Opera 10", new String[] { "Opera/9.8" }, null, BrowserType.WEB_BROWSER, RenderingEngine.PRESTO, "Version\\/(([\\d]+)\\.([\\w]+))"),
|
OPERA10(Manufacturer.OPERA, Browser.OPERA, 10, "Opera 10", new String[]{"Opera/9.8"}, null, BrowserType.WEB_BROWSER, RenderingEngine.PRESTO, "Version\\/(([\\d]+)\\.([\\w]+))"),
|
||||||
OPERA9( Manufacturer.OPERA, Browser.OPERA, 5, "Opera 9", new String[] { "Opera/9" }, null, BrowserType.WEB_BROWSER, RenderingEngine.PRESTO, null),
|
OPERA9(Manufacturer.OPERA, Browser.OPERA, 5, "Opera 9", new String[]{"Opera/9"}, null, BrowserType.WEB_BROWSER, RenderingEngine.PRESTO, null),
|
||||||
KONQUEROR( Manufacturer.OTHER, null, 1, "Konqueror", new String[] { "Konqueror"}, null, BrowserType.WEB_BROWSER, RenderingEngine.KHTML, "Konqueror\\/(([0-9]+)\\.?([\\w]+)?(-[\\w]+)?)" ),
|
KONQUEROR(Manufacturer.OTHER, null, 1, "Konqueror", new String[]{"Konqueror"}, null, BrowserType.WEB_BROWSER, RenderingEngine.KHTML, "Konqueror\\/(([0-9]+)\\.?([\\w]+)?(-[\\w]+)?)"),
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Outlook email client
|
* Outlook email client
|
||||||
*/
|
*/
|
||||||
OUTLOOK( Manufacturer.MICROSOFT, null, 100, "Outlook", new String[] {"MSOffice"}, null, BrowserType.EMAIL_CLIENT, RenderingEngine.WORD, "MSOffice (([0-9]+))"), // before IE7
|
OUTLOOK(Manufacturer.MICROSOFT, null, 100, "Outlook", new String[]{"MSOffice"}, null, BrowserType.EMAIL_CLIENT, RenderingEngine.WORD, "MSOffice (([0-9]+))"), // before IE7
|
||||||
/**
|
/**
|
||||||
* Microsoft Outlook 2007 identifies itself as MSIE7 but uses the html rendering engine of Word 2007.
|
* Microsoft Outlook 2007 identifies itself as MSIE7 but uses the html rendering engine of Word 2007.
|
||||||
* Example user agent: Mozilla/4.0 (compatible; MSIE 7.0; Windows NT 6.0; SLCC1; .NET CLR 2.0.50727; .NET CLR 3.0.04506; .NET CLR 1.1.4322; MSOffice 12)
|
* Example user agent: Mozilla/4.0 (compatible; MSIE 7.0; Windows NT 6.0; SLCC1; .NET CLR 2.0.50727; .NET CLR 3.0.04506; .NET CLR 1.1.4322; MSOffice 12)
|
||||||
*/
|
*/
|
||||||
OUTLOOK2007( Manufacturer.MICROSOFT, Browser.OUTLOOK, 107, "Outlook 2007", new String[] {"MSOffice 12"}, null, BrowserType.EMAIL_CLIENT, RenderingEngine.WORD, null), // before IE7
|
OUTLOOK2007(Manufacturer.MICROSOFT, Browser.OUTLOOK, 107, "Outlook 2007", new String[]{"MSOffice 12"}, null, BrowserType.EMAIL_CLIENT, RenderingEngine.WORD, null), // before IE7
|
||||||
/**
|
/**
|
||||||
* Outlook 2010 is still using the rendering engine of Word. http://www.fixoutlook.org
|
* Outlook 2010 is still using the rendering engine of Word. http://www.fixoutlook.org
|
||||||
*/
|
*/
|
||||||
OUTLOOK2010( Manufacturer.MICROSOFT, Browser.OUTLOOK, 108, "Outlook 2010", new String[] {"MSOffice 14"}, null, BrowserType.EMAIL_CLIENT, RenderingEngine.WORD, null), // before IE7
|
OUTLOOK2010(Manufacturer.MICROSOFT, Browser.OUTLOOK, 108, "Outlook 2010", new String[]{"MSOffice 14"}, null, BrowserType.EMAIL_CLIENT, RenderingEngine.WORD, null), // before IE7
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Family of Internet Explorer browsers
|
* Family of Internet Explorer browsers
|
||||||
*/
|
*/
|
||||||
IE( Manufacturer.MICROSOFT, null, 1, "Internet Explorer", new String[] { "MSIE"}, null, BrowserType.WEB_BROWSER, RenderingEngine.TRIDENT, "MSIE (([\\d]+)\\.([\\w]+))" ), // before Mozilla
|
IE11(Manufacturer.MICROSOFT, null, 1, "Internet Explorer", new String[]{") like Gecko"}, null, BrowserType.WEB_BROWSER, RenderingEngine.TRIDENT, "Mozilla/5.0 (([\\d]+)\\.([\\w]+))"), // before Mozilla
|
||||||
/**
|
|
||||||
* Since version 7 Outlook Express is identifying itself. By detecting Outlook Express we can not
|
|
||||||
* identify the Internet Explorer version which is probably used for the rendering.
|
|
||||||
* Obviously this product is now called Windows Live Mail Desktop or just Windows Live Mail.
|
|
||||||
*/
|
|
||||||
OUTLOOK_EXPRESS7( Manufacturer.MICROSOFT, Browser.IE, 110, "Windows Live Mail", new String[] {"Outlook-Express/7.0"}, null, BrowserType.EMAIL_CLIENT, RenderingEngine.TRIDENT, null), // before IE7, previously known as Outlook Express. First released in 2006, offered with different name later
|
|
||||||
/**
|
|
||||||
* Since 2007 the mobile edition of Internet Explorer identifies itself as IEMobile in the user-agent.
|
|
||||||
* If previous versions have to be detected, use the operating system information as well.
|
|
||||||
*/
|
|
||||||
IEMOBILE7( Manufacturer.MICROSOFT, Browser.IE, 121, "IE Mobile 7", new String[] { "IEMobile 7" }, null, BrowserType.MOBILE_BROWSER, RenderingEngine.TRIDENT, null), // before MSIE strings
|
|
||||||
IEMOBILE6( Manufacturer.MICROSOFT, Browser.IE, 120, "IE Mobile 6", new String[] { "IEMobile 6" }, null, BrowserType.MOBILE_BROWSER, RenderingEngine.TRIDENT, null), // before MSIE
|
|
||||||
IE9( Manufacturer.MICROSOFT, Browser.IE, 90, "Internet Explorer 9", new String[] { "MSIE 9" }, null, BrowserType.WEB_BROWSER, RenderingEngine.TRIDENT, null ), // before MSIE
|
|
||||||
IE8( Manufacturer.MICROSOFT, Browser.IE, 80, "Internet Explorer 8", new String[] { "MSIE 8" }, null, BrowserType.WEB_BROWSER, RenderingEngine.TRIDENT, null ), // before MSIE
|
|
||||||
IE7( Manufacturer.MICROSOFT, Browser.IE, 70, "Internet Explorer 7", new String[] { "MSIE 7" }, null, BrowserType.WEB_BROWSER, RenderingEngine.TRIDENT, null), // before MSIE
|
|
||||||
IE6( Manufacturer.MICROSOFT, Browser.IE, 60, "Internet Explorer 6", new String[] { "MSIE 6" }, null, BrowserType.WEB_BROWSER, RenderingEngine.TRIDENT, null ), // before MSIE
|
|
||||||
IE5_5( Manufacturer.MICROSOFT, Browser.IE, 55, "Internet Explorer 5.5", new String[] { "MSIE 5.5" }, null, BrowserType.WEB_BROWSER, RenderingEngine.TRIDENT, null), // before MSIE
|
|
||||||
IE5( Manufacturer.MICROSOFT, Browser.IE, 50, "Internet Explorer 5", new String[] { "MSIE 5" }, null, BrowserType.WEB_BROWSER, RenderingEngine.TRIDENT, null ), // before MSIE
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Google Chrome browser
|
* Family of Internet Explorer browsers
|
||||||
*/
|
*/
|
||||||
CHROME( Manufacturer.GOOGLE, null, 1, "Chrome", new String[] { "Chrome" }, null, BrowserType.WEB_BROWSER, RenderingEngine.WEBKIT, "Chrome\\/(([0-9]+)\\.?([\\w]+)?(\\.[\\w]+)?(\\.[\\w]+)?)" ), // before Mozilla
|
IE(Manufacturer.MICROSOFT, null, 1, "Internet Explorer", new String[]{"MSIE"}, null, BrowserType.WEB_BROWSER, RenderingEngine.TRIDENT, "MSIE (([\\d]+)\\.([\\w]+))"), // before Mozilla
|
||||||
CHROME10( Manufacturer.GOOGLE, Browser.CHROME, 15, "Chrome 10", new String[] { "Chrome/10" }, null, BrowserType.WEB_BROWSER, RenderingEngine.WEBKIT, null ), // before Mozilla
|
/**
|
||||||
CHROME9( Manufacturer.GOOGLE, Browser.CHROME, 10, "Chrome 9", new String[] { "Chrome/9" }, null, BrowserType.WEB_BROWSER, RenderingEngine.WEBKIT, null ), // before Mozilla
|
* Since version 7 Outlook Express is identifying itself. By detecting Outlook Express we can not
|
||||||
CHROME8( Manufacturer.GOOGLE, Browser.CHROME, 5, "Chrome 8", new String[] { "Chrome/8" }, null, BrowserType.WEB_BROWSER, RenderingEngine.WEBKIT, null ), // before Mozilla
|
* identify the Internet Explorer version which is probably used for the rendering.
|
||||||
|
* Obviously this product is now called Windows Live Mail Desktop or just Windows Live Mail.
|
||||||
|
*/
|
||||||
|
OUTLOOK_EXPRESS7(Manufacturer.MICROSOFT, Browser.IE, 110, "Windows Live Mail", new String[]{"Outlook-Express/7.0"}, null, BrowserType.EMAIL_CLIENT, RenderingEngine.TRIDENT, null), // before IE7, previously known as Outlook Express. First released in 2006, offered with different name later
|
||||||
|
/**
|
||||||
|
* Since 2007 the mobile edition of Internet Explorer identifies itself as IEMobile in the user-agent.
|
||||||
|
* If previous versions have to be detected, use the operating system information as well.
|
||||||
|
*/
|
||||||
|
IEMOBILE7(Manufacturer.MICROSOFT, Browser.IE, 121, "IE Mobile 7", new String[]{"IEMobile 7"}, null, BrowserType.MOBILE_BROWSER, RenderingEngine.TRIDENT, null), // before MSIE strings
|
||||||
|
IEMOBILE6(Manufacturer.MICROSOFT, Browser.IE, 120, "IE Mobile 6", new String[]{"IEMobile 6"}, null, BrowserType.MOBILE_BROWSER, RenderingEngine.TRIDENT, null), // before MSIE
|
||||||
|
IE9(Manufacturer.MICROSOFT, Browser.IE, 90, "Internet Explorer 9", new String[]{"MSIE 9"}, null, BrowserType.WEB_BROWSER, RenderingEngine.TRIDENT, null), // before MSIE
|
||||||
|
IE8(Manufacturer.MICROSOFT, Browser.IE, 80, "Internet Explorer 8", new String[]{"MSIE 8"}, null, BrowserType.WEB_BROWSER, RenderingEngine.TRIDENT, null), // before MSIE
|
||||||
|
IE7(Manufacturer.MICROSOFT, Browser.IE, 70, "Internet Explorer 7", new String[]{"MSIE 7"}, null, BrowserType.WEB_BROWSER, RenderingEngine.TRIDENT, null), // before MSIE
|
||||||
|
IE6(Manufacturer.MICROSOFT, Browser.IE, 60, "Internet Explorer 6", new String[]{"MSIE 6"}, null, BrowserType.WEB_BROWSER, RenderingEngine.TRIDENT, null), // before MSIE
|
||||||
|
IE5_5(Manufacturer.MICROSOFT, Browser.IE, 55, "Internet Explorer 5.5", new String[]{"MSIE 5.5"}, null, BrowserType.WEB_BROWSER, RenderingEngine.TRIDENT, null), // before MSIE
|
||||||
|
IE5(Manufacturer.MICROSOFT, Browser.IE, 50, "Internet Explorer 5", new String[]{"MSIE 5"}, null, BrowserType.WEB_BROWSER, RenderingEngine.TRIDENT, null), // before MSIE
|
||||||
|
|
||||||
OMNIWEB( Manufacturer.OTHER, null, 2, "Omniweb", new String[] { "OmniWeb" }, null, BrowserType.WEB_BROWSER, RenderingEngine.WEBKIT, null), //
|
/**
|
||||||
|
* Google Chrome browser
|
||||||
|
*/
|
||||||
|
CHROME(Manufacturer.GOOGLE, null, 1, "Chrome", new String[]{"Chrome"}, null, BrowserType.WEB_BROWSER, RenderingEngine.WEBKIT, "Chrome\\/(([0-9]+)\\.?([\\w]+)?(\\.[\\w]+)?(\\.[\\w]+)?)"), // before Mozilla
|
||||||
|
CHROME10(Manufacturer.GOOGLE, Browser.CHROME, 15, "Chrome 10", new String[]{"Chrome/10"}, null, BrowserType.WEB_BROWSER, RenderingEngine.WEBKIT, null), // before Mozilla
|
||||||
|
CHROME9(Manufacturer.GOOGLE, Browser.CHROME, 10, "Chrome 9", new String[]{"Chrome/9"}, null, BrowserType.WEB_BROWSER, RenderingEngine.WEBKIT, null), // before Mozilla
|
||||||
|
CHROME8(Manufacturer.GOOGLE, Browser.CHROME, 5, "Chrome 8", new String[]{"Chrome/8"}, null, BrowserType.WEB_BROWSER, RenderingEngine.WEBKIT, null), // before Mozilla
|
||||||
|
|
||||||
SAFARI( Manufacturer.APPLE, null, 1, "Safari", new String[] { "Safari" }, null, BrowserType.WEB_BROWSER, RenderingEngine.WEBKIT, "Version\\/(([0-9]+)\\.?([\\w]+)?(\\.[\\w]+)?)" ), // before AppleWebKit
|
OMNIWEB(Manufacturer.OTHER, null, 2, "Omniweb", new String[]{"OmniWeb"}, null, BrowserType.WEB_BROWSER, RenderingEngine.WEBKIT, null), //
|
||||||
SAFARI5( Manufacturer.APPLE, Browser.SAFARI, 3, "Safari 5", new String[] { "Version/5" }, null, BrowserType.WEB_BROWSER, RenderingEngine.WEBKIT, null ), // before AppleWebKit
|
|
||||||
MOBILE_SAFARI( Manufacturer.APPLE, Browser.SAFARI, 2, "Mobile Safari", new String[] { "Mobile Safari","Mobile/" }, null, BrowserType.MOBILE_BROWSER, RenderingEngine.WEBKIT, null ), // before Safari
|
|
||||||
SAFARI4( Manufacturer.APPLE, Browser.SAFARI, 4, "Safari 4", new String[] { "Version/4" }, null, BrowserType.WEB_BROWSER, RenderingEngine.WEBKIT, null ), // before AppleWebKit
|
|
||||||
|
|
||||||
APPLE_MAIL( Manufacturer.APPLE, null, 50, "Apple Mail", new String[] { "AppleWebKit" }, null, BrowserType.EMAIL_CLIENT, RenderingEngine.WEBKIT, null), // Microsoft Entrourage/Outlook 2010 also only identifies itself as AppleWebKit
|
|
||||||
LOTUS_NOTES( Manufacturer.OTHER, null, 3, "Lotus Notes", new String[] { "Lotus-Notes" }, null, BrowserType.EMAIL_CLIENT, RenderingEngine.OTHER, "Lotus-Notes\\/(([\\d]+)\\.([\\w]+))"), // before Mozilla
|
|
||||||
|
|
||||||
/*
|
SAFARI(Manufacturer.APPLE, null, 1, "Safari", new String[]{"Safari"}, null, BrowserType.WEB_BROWSER, RenderingEngine.WEBKIT, "Version\\/(([0-9]+)\\.?([\\w]+)?(\\.[\\w]+)?)"), // before AppleWebKit
|
||||||
* Thunderbird email client, based on the same Gecko engine Firefox is using.
|
SAFARI5(Manufacturer.APPLE, Browser.SAFARI, 3, "Safari 5", new String[]{"Version/5"}, null, BrowserType.WEB_BROWSER, RenderingEngine.WEBKIT, null), // before AppleWebKit
|
||||||
*/
|
MOBILE_SAFARI(Manufacturer.APPLE, Browser.SAFARI, 2, "Mobile Safari", new String[]{"Mobile Safari", "Mobile/"}, null, BrowserType.MOBILE_BROWSER, RenderingEngine.WEBKIT, null), // before Safari
|
||||||
THUNDERBIRD( Manufacturer.MOZILLA, null, 110, "Thunderbird", new String[] { "Thunderbird" }, null, BrowserType.EMAIL_CLIENT, RenderingEngine.GECKO, "Thunderbird\\/(([0-9]+)\\.?([\\w]+)?(\\.[\\w]+)?(\\.[\\w]+)?)" ), // using Gecko Engine
|
SAFARI4(Manufacturer.APPLE, Browser.SAFARI, 4, "Safari 4", new String[]{"Version/4"}, null, BrowserType.WEB_BROWSER, RenderingEngine.WEBKIT, null), // before AppleWebKit
|
||||||
THUNDERBIRD3( Manufacturer.MOZILLA, Browser.THUNDERBIRD, 130, "Thunderbird 3", new String[] { "Thunderbird/3" }, null, BrowserType.EMAIL_CLIENT, RenderingEngine.GECKO, null ), // using Gecko Engine
|
|
||||||
THUNDERBIRD2( Manufacturer.MOZILLA, Browser.THUNDERBIRD, 120, "Thunderbird 2", new String[] { "Thunderbird/2" }, null, BrowserType.EMAIL_CLIENT, RenderingEngine.GECKO, null ), // using Gecko Engine
|
|
||||||
|
|
||||||
CAMINO( Manufacturer.OTHER, null, 5, "Camino", new String[] { "Camino" }, null, BrowserType.WEB_BROWSER, RenderingEngine.GECKO, "Camino\\/(([0-9]+)\\.?([\\w]+)?(\\.[\\w]+)?)" ), // using Gecko Engine
|
APPLE_MAIL(Manufacturer.APPLE, null, 50, "Apple Mail", new String[]{"AppleWebKit"}, null, BrowserType.EMAIL_CLIENT, RenderingEngine.WEBKIT, null), // Microsoft Entrourage/Outlook 2010 also only identifies itself as AppleWebKit
|
||||||
CAMINO2( Manufacturer.OTHER, Browser.CAMINO, 17, "Camino 2", new String[] { "Camino/2" }, null, BrowserType.WEB_BROWSER, RenderingEngine.GECKO, null ), // using Gecko Engine
|
LOTUS_NOTES(Manufacturer.OTHER, null, 3, "Lotus Notes", new String[]{"Lotus-Notes"}, null, BrowserType.EMAIL_CLIENT, RenderingEngine.OTHER, "Lotus-Notes\\/(([\\d]+)\\.([\\w]+))"), // before Mozilla
|
||||||
FLOCK( Manufacturer.OTHER, null, 4, "Flock", new String[]{"Flock"}, null, BrowserType.WEB_BROWSER, RenderingEngine.GECKO, "Flock\\/(([0-9]+)\\.?([\\w]+)?(\\.[\\w]+)?)"),
|
|
||||||
|
|
||||||
FIREFOX( Manufacturer.MOZILLA, null, 10, "Firefox", new String[] { "Firefox" }, null, BrowserType.WEB_BROWSER, RenderingEngine.GECKO, "Firefox\\/(([0-9]+)\\.?([\\w]+)?(\\.[\\w]+)?(\\.[\\w]+)?)"), // using Gecko Engine
|
|
||||||
FIREFOX3MOBILE( Manufacturer.MOZILLA, Browser.FIREFOX, 31, "Firefox 3 Mobile", new String[] { "Firefox/3.5 Maemo" }, null, BrowserType.MOBILE_BROWSER, RenderingEngine.GECKO, null ), // using Gecko Engine
|
|
||||||
FIREFOX4( Manufacturer.MOZILLA, Browser.FIREFOX, 40, "Firefox 4", new String[] { "Firefox/4" }, null, BrowserType.WEB_BROWSER, RenderingEngine.GECKO, null ), // using Gecko Engine
|
|
||||||
FIREFOX3( Manufacturer.MOZILLA, Browser.FIREFOX, 30, "Firefox 3", new String[] { "Firefox/3" }, null, BrowserType.WEB_BROWSER, RenderingEngine.GECKO, null ), // using Gecko Engine
|
|
||||||
FIREFOX2( Manufacturer.MOZILLA, Browser.FIREFOX, 20, "Firefox 2", new String[] { "Firefox/2" }, null, BrowserType.WEB_BROWSER, RenderingEngine.GECKO, null ), // using Gecko Engine
|
|
||||||
FIREFOX1_5( Manufacturer.MOZILLA, Browser.FIREFOX, 15, "Firefox 1.5", new String[] { "Firefox/1.5" }, null, BrowserType.WEB_BROWSER, RenderingEngine.GECKO, null ), // using Gecko Engine
|
|
||||||
|
|
||||||
SEAMONKEY( Manufacturer.OTHER, null, 15, "SeaMonkey", new String[]{"SeaMonkey"}, null, BrowserType.WEB_BROWSER, RenderingEngine.GECKO, "SeaMonkey\\/(([0-9]+)\\.?([\\w]+)?(\\.[\\w]+)?)"), // using Gecko Engine
|
|
||||||
|
|
||||||
BOT( Manufacturer.OTHER, null,12, "Robot/Spider", new String[]{"Mediapartners-Google","Googlebot","bot", "spider", "crawler", "Feedfetcher", "Slurp", "Twiceler", "Nutch", "BecomeBot"}, null, BrowserType.ROBOT, RenderingEngine.OTHER, null),
|
|
||||||
|
|
||||||
MOZILLA( Manufacturer.MOZILLA, null, 1, "Mozilla", new String[] { "Mozilla", "Moozilla" }, null, BrowserType.WEB_BROWSER, RenderingEngine.OTHER, null), // rest of the mozilla browsers
|
|
||||||
|
|
||||||
CFNETWORK( Manufacturer.OTHER, null, 6, "CFNetwork", new String[] { "CFNetwork" }, null, BrowserType.UNKNOWN, RenderingEngine.OTHER, null ), // Mac OS X cocoa library
|
|
||||||
|
|
||||||
EUDORA( Manufacturer.OTHER, null, 7, "Eudora", new String[] { "Eudora", "EUDORA" }, null, BrowserType.EMAIL_CLIENT, RenderingEngine.OTHER, null ), // email client by Qualcomm
|
|
||||||
|
|
||||||
POCOMAIL( Manufacturer.OTHER, null, 8, "PocoMail", new String[] { "PocoMail" }, null, BrowserType.EMAIL_CLIENT, RenderingEngine.OTHER, null ),
|
|
||||||
|
|
||||||
THEBAT( Manufacturer.OTHER, null, 9, "The Bat!", new String[]{"The Bat"}, null, BrowserType.EMAIL_CLIENT, RenderingEngine.OTHER, null), // Email Client
|
|
||||||
|
|
||||||
NETFRONT( Manufacturer.OTHER, null, 10, "NetFront", new String[]{"NetFront"}, null, BrowserType.MOBILE_BROWSER, RenderingEngine.OTHER, null), // mobile device browser
|
|
||||||
|
|
||||||
EVOLUTION( Manufacturer.OTHER, null, 11, "Evolution", new String[]{"CamelHttpStream"}, null, BrowserType.EMAIL_CLIENT, RenderingEngine.OTHER, null), // http://www.go-evolution.org/Camel.Stream
|
|
||||||
|
|
||||||
LYNX( Manufacturer.OTHER, null, 13, "Lynx", new String[]{"Lynx"}, null, BrowserType.TEXT_BROWSER, RenderingEngine.OTHER, "Lynx\\/(([0-9]+)\\.([\\d]+)\\.?([\\w-+]+)?\\.?([\\w-+]+)?)"),
|
|
||||||
|
|
||||||
DOWNLOAD( Manufacturer.OTHER, null, 16, "Downloading Tool", new String[]{"cURL","wget"}, null, BrowserType.TEXT_BROWSER, RenderingEngine.OTHER, null),
|
|
||||||
|
|
||||||
UNKNOWN( Manufacturer.OTHER, null, 14, "Unknown", new String[0], null, BrowserType.UNKNOWN, RenderingEngine.OTHER, null );
|
|
||||||
|
|
||||||
|
|
||||||
private final short id;
|
|
||||||
private final String name;
|
|
||||||
private final String[] aliases;
|
|
||||||
private final String[] excludeList; // don't match when these values are in the agent-string
|
|
||||||
private final BrowserType browserType;
|
|
||||||
private final Manufacturer manufacturer;
|
|
||||||
private final RenderingEngine renderingEngine;
|
|
||||||
private final Browser parent;
|
|
||||||
private List<Browser> children;
|
|
||||||
private Pattern versionRegEx;
|
|
||||||
|
|
||||||
private Browser(Manufacturer manufacturer, Browser parent, int versionId, String name, String[] aliases, String[] exclude, BrowserType browserType, RenderingEngine renderingEngine, String versionRegexString) {
|
|
||||||
this.id = (short) ( ( manufacturer.getId() << 8) + (byte) versionId);
|
|
||||||
this.name = name;
|
|
||||||
this.parent = parent;
|
|
||||||
this.children = new ArrayList<Browser>();
|
|
||||||
if (this.parent != null) {
|
|
||||||
this.parent.children.add(this);
|
|
||||||
}
|
|
||||||
this.aliases = aliases;
|
|
||||||
this.excludeList = exclude;
|
|
||||||
this.browserType = browserType;
|
|
||||||
this.manufacturer = manufacturer;
|
|
||||||
this.renderingEngine = renderingEngine;
|
|
||||||
if (versionRegexString != null) {
|
|
||||||
this.versionRegEx = Pattern.compile(versionRegexString);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
public short getId() {
|
|
||||||
return id;
|
|
||||||
}
|
|
||||||
|
|
||||||
public String getName() {
|
/*
|
||||||
return name;
|
* Thunderbird email client, based on the same Gecko engine Firefox is using.
|
||||||
}
|
*/
|
||||||
|
THUNDERBIRD(Manufacturer.MOZILLA, null, 110, "Thunderbird", new String[]{"Thunderbird"}, null, BrowserType.EMAIL_CLIENT, RenderingEngine.GECKO, "Thunderbird\\/(([0-9]+)\\.?([\\w]+)?(\\.[\\w]+)?(\\.[\\w]+)?)"), // using Gecko Engine
|
||||||
private Pattern getVersionRegEx() {
|
THUNDERBIRD3(Manufacturer.MOZILLA, Browser.THUNDERBIRD, 130, "Thunderbird 3", new String[]{"Thunderbird/3"}, null, BrowserType.EMAIL_CLIENT, RenderingEngine.GECKO, null), // using Gecko Engine
|
||||||
if (this.versionRegEx == null) {
|
THUNDERBIRD2(Manufacturer.MOZILLA, Browser.THUNDERBIRD, 120, "Thunderbird 2", new String[]{"Thunderbird/2"}, null, BrowserType.EMAIL_CLIENT, RenderingEngine.GECKO, null), // using Gecko Engine
|
||||||
if (this.getGroup() != this)
|
|
||||||
return this.getGroup().getVersionRegEx();
|
|
||||||
else
|
|
||||||
return null;
|
|
||||||
}
|
|
||||||
return this.versionRegEx;
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Detects the detailed version information of the browser. Depends on the userAgent to be available.
|
|
||||||
* Returns null if it can not detect the version information.
|
|
||||||
* @return Version
|
|
||||||
*/
|
|
||||||
public Version getVersion(String userAgentString) {
|
|
||||||
Pattern pattern = this.getVersionRegEx();
|
|
||||||
if (userAgentString != null && pattern != null) {
|
|
||||||
Matcher matcher = pattern.matcher(userAgentString);
|
|
||||||
if (matcher.find()) {
|
|
||||||
String fullVersionString = matcher.group(1);
|
|
||||||
String majorVersion = matcher.group(2);
|
|
||||||
String minorVersion = "0";
|
|
||||||
if (matcher.groupCount() > 2) // usually but not always there is a minor version
|
|
||||||
minorVersion = matcher.group(3);
|
|
||||||
return new Version (fullVersionString,majorVersion,minorVersion);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
return null;
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* @return the browserType
|
|
||||||
*/
|
|
||||||
public BrowserType getBrowserType() {
|
|
||||||
return browserType;
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
CAMINO(Manufacturer.OTHER, null, 5, "Camino", new String[]{"Camino"}, null, BrowserType.WEB_BROWSER, RenderingEngine.GECKO, "Camino\\/(([0-9]+)\\.?([\\w]+)?(\\.[\\w]+)?)"), // using Gecko Engine
|
||||||
* @return the manufacturer
|
CAMINO2(Manufacturer.OTHER, Browser.CAMINO, 17, "Camino 2", new String[]{"Camino/2"}, null, BrowserType.WEB_BROWSER, RenderingEngine.GECKO, null), // using Gecko Engine
|
||||||
*/
|
FLOCK(Manufacturer.OTHER, null, 4, "Flock", new String[]{"Flock"}, null, BrowserType.WEB_BROWSER, RenderingEngine.GECKO, "Flock\\/(([0-9]+)\\.?([\\w]+)?(\\.[\\w]+)?)"),
|
||||||
public Manufacturer getManufacturer() {
|
|
||||||
return manufacturer;
|
FIREFOX(Manufacturer.MOZILLA, null, 10, "Firefox", new String[]{"Firefox"}, null, BrowserType.WEB_BROWSER, RenderingEngine.GECKO, "Firefox\\/(([0-9]+)\\.?([\\w]+)?(\\.[\\w]+)?(\\.[\\w]+)?)"), // using Gecko Engine
|
||||||
}
|
FIREFOX3MOBILE(Manufacturer.MOZILLA, Browser.FIREFOX, 31, "Firefox 3 Mobile", new String[]{"Firefox/3.5 Maemo"}, null, BrowserType.MOBILE_BROWSER, RenderingEngine.GECKO, null), // using Gecko Engine
|
||||||
|
FIREFOX4(Manufacturer.MOZILLA, Browser.FIREFOX, 40, "Firefox 4", new String[]{"Firefox/4"}, null, BrowserType.WEB_BROWSER, RenderingEngine.GECKO, null), // using Gecko Engine
|
||||||
/**
|
FIREFOX3(Manufacturer.MOZILLA, Browser.FIREFOX, 30, "Firefox 3", new String[]{"Firefox/3"}, null, BrowserType.WEB_BROWSER, RenderingEngine.GECKO, null), // using Gecko Engine
|
||||||
* @return the rendering engine
|
FIREFOX2(Manufacturer.MOZILLA, Browser.FIREFOX, 20, "Firefox 2", new String[]{"Firefox/2"}, null, BrowserType.WEB_BROWSER, RenderingEngine.GECKO, null), // using Gecko Engine
|
||||||
*/
|
FIREFOX1_5(Manufacturer.MOZILLA, Browser.FIREFOX, 15, "Firefox 1.5", new String[]{"Firefox/1.5"}, null, BrowserType.WEB_BROWSER, RenderingEngine.GECKO, null), // using Gecko Engine
|
||||||
public RenderingEngine getRenderingEngine() {
|
|
||||||
return renderingEngine;
|
SEAMONKEY(Manufacturer.OTHER, null, 15, "SeaMonkey", new String[]{"SeaMonkey"}, null, BrowserType.WEB_BROWSER, RenderingEngine.GECKO, "SeaMonkey\\/(([0-9]+)\\.?([\\w]+)?(\\.[\\w]+)?)"), // using Gecko Engine
|
||||||
}
|
|
||||||
|
BOT(Manufacturer.OTHER, null, 12, "Robot/Spider", new String[]{"Mediapartners-Google", "Googlebot", "bot", "spider", "crawler", "Feedfetcher", "Slurp", "Twiceler", "Nutch", "BecomeBot"}, null, BrowserType.ROBOT, RenderingEngine.OTHER, null),
|
||||||
|
|
||||||
|
MOZILLA(Manufacturer.MOZILLA, null, 1, "Mozilla", new String[]{"Mozilla", "Moozilla"}, null, BrowserType.WEB_BROWSER, RenderingEngine.OTHER, null), // rest of the mozilla browsers
|
||||||
|
|
||||||
|
CFNETWORK(Manufacturer.OTHER, null, 6, "CFNetwork", new String[]{"CFNetwork"}, null, BrowserType.UNKNOWN, RenderingEngine.OTHER, null), // Mac OS X cocoa library
|
||||||
|
|
||||||
|
EUDORA(Manufacturer.OTHER, null, 7, "Eudora", new String[]{"Eudora", "EUDORA"}, null, BrowserType.EMAIL_CLIENT, RenderingEngine.OTHER, null), // email client by Qualcomm
|
||||||
|
|
||||||
|
POCOMAIL(Manufacturer.OTHER, null, 8, "PocoMail", new String[]{"PocoMail"}, null, BrowserType.EMAIL_CLIENT, RenderingEngine.OTHER, null),
|
||||||
|
|
||||||
|
THEBAT(Manufacturer.OTHER, null, 9, "The Bat!", new String[]{"The Bat"}, null, BrowserType.EMAIL_CLIENT, RenderingEngine.OTHER, null), // Email Client
|
||||||
|
|
||||||
|
NETFRONT(Manufacturer.OTHER, null, 10, "NetFront", new String[]{"NetFront"}, null, BrowserType.MOBILE_BROWSER, RenderingEngine.OTHER, null), // mobile device browser
|
||||||
|
|
||||||
|
EVOLUTION(Manufacturer.OTHER, null, 11, "Evolution", new String[]{"CamelHttpStream"}, null, BrowserType.EMAIL_CLIENT, RenderingEngine.OTHER, null), // http://www.go-evolution.org/Camel.Stream
|
||||||
|
|
||||||
|
LYNX(Manufacturer.OTHER, null, 13, "Lynx", new String[]{"Lynx"}, null, BrowserType.TEXT_BROWSER, RenderingEngine.OTHER, "Lynx\\/(([0-9]+)\\.([\\d]+)\\.?([\\w-+]+)?\\.?([\\w-+]+)?)"),
|
||||||
|
|
||||||
|
DOWNLOAD(Manufacturer.OTHER, null, 16, "Downloading Tool", new String[]{"cURL", "wget"}, null, BrowserType.TEXT_BROWSER, RenderingEngine.OTHER, null),
|
||||||
|
|
||||||
|
UNKNOWN(Manufacturer.OTHER, null, 14, "Unknown", new String[0], null, BrowserType.UNKNOWN, RenderingEngine.OTHER, null);
|
||||||
|
private final short id;
|
||||||
|
private final String name;
|
||||||
|
private final String[] aliases;
|
||||||
|
private final String[] excludeList; // don't match when these values are in the agent-string
|
||||||
|
private final BrowserType browserType;
|
||||||
|
private final Manufacturer manufacturer;
|
||||||
|
private final RenderingEngine renderingEngine;
|
||||||
|
private final Browser parent;
|
||||||
|
private List<Browser> children;
|
||||||
|
private Pattern versionRegEx;
|
||||||
|
|
||||||
|
private Browser(Manufacturer manufacturer, Browser parent, int versionId, String name, String[] aliases, String[] exclude, BrowserType browserType, RenderingEngine renderingEngine, String versionRegexString) {
|
||||||
|
this.id = (short) ((manufacturer.getId() << 8) + (byte) versionId);
|
||||||
|
this.name = name;
|
||||||
|
this.parent = parent;
|
||||||
|
this.children = new ArrayList<>();
|
||||||
|
if (this.parent != null) {
|
||||||
|
this.parent.children.add(this);
|
||||||
|
}
|
||||||
|
this.aliases = aliases;
|
||||||
|
this.excludeList = exclude;
|
||||||
|
this.browserType = browserType;
|
||||||
|
this.manufacturer = manufacturer;
|
||||||
|
this.renderingEngine = renderingEngine;
|
||||||
|
if (versionRegexString != null) {
|
||||||
|
this.versionRegEx = Pattern.compile(versionRegexString);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Iterates over all Browsers to compare the browser signature with
|
||||||
|
* the user agent string. If no match can be found Browser.UNKNOWN will
|
||||||
|
* be returned.
|
||||||
|
*
|
||||||
|
* @param agentString
|
||||||
|
* @return Browser
|
||||||
|
*/
|
||||||
|
public static Browser parseUserAgentString(String agentString) {
|
||||||
|
for (Browser browser : Browser.values()) {
|
||||||
|
// only check top level objects
|
||||||
|
if (browser.parent == null) {
|
||||||
|
Browser match = browser.checkUserAgent(agentString);
|
||||||
|
if (match != null) {
|
||||||
|
return match; // either current operatingSystem or a child object
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return Browser.UNKNOWN;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Returns the enum constant of this type with the specified id.
|
||||||
|
* Throws IllegalArgumentException if the value does not exist.
|
||||||
|
*
|
||||||
|
* @param id
|
||||||
|
* @return
|
||||||
|
*/
|
||||||
|
public static Browser valueOf(short id) {
|
||||||
|
for (Browser browser : Browser.values()) {
|
||||||
|
if (browser.getId() == id)
|
||||||
|
return browser;
|
||||||
|
}
|
||||||
|
|
||||||
|
// same behavior as standard valueOf(string) method
|
||||||
|
throw new IllegalArgumentException(
|
||||||
|
"No enum const for id " + id);
|
||||||
|
}
|
||||||
|
|
||||||
|
public short getId() {
|
||||||
|
return id;
|
||||||
|
}
|
||||||
|
|
||||||
|
public String getName() {
|
||||||
|
return name;
|
||||||
|
}
|
||||||
|
|
||||||
|
private Pattern getVersionRegEx() {
|
||||||
|
if (this.versionRegEx == null) {
|
||||||
|
if (this.getGroup() != this)
|
||||||
|
return this.getGroup().getVersionRegEx();
|
||||||
|
else
|
||||||
|
return null;
|
||||||
|
}
|
||||||
|
return this.versionRegEx;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Detects the detailed version information of the browser. Depends on the userAgent to be available.
|
||||||
|
* Returns null if it can not detect the version information.
|
||||||
|
*
|
||||||
|
* @return Version
|
||||||
|
*/
|
||||||
|
public Version getVersion(String userAgentString) {
|
||||||
|
Pattern pattern = this.getVersionRegEx();
|
||||||
|
if (userAgentString != null && pattern != null) {
|
||||||
|
Matcher matcher = pattern.matcher(userAgentString);
|
||||||
|
if (matcher.find()) {
|
||||||
|
String fullVersionString = matcher.group(1);
|
||||||
|
String majorVersion = matcher.group(2);
|
||||||
|
String minorVersion = "0";
|
||||||
|
if (matcher.groupCount() > 2) // usually but not always there is a minor version
|
||||||
|
minorVersion = matcher.group(3);
|
||||||
|
return new Version(fullVersionString, majorVersion, minorVersion);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return null;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @return the browserType
|
||||||
|
*/
|
||||||
|
public BrowserType getBrowserType() {
|
||||||
|
return browserType;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @return the manufacturer
|
||||||
|
*/
|
||||||
|
public Manufacturer getManufacturer() {
|
||||||
|
return manufacturer;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @return the rendering engine
|
||||||
|
*/
|
||||||
|
public RenderingEngine getRenderingEngine() {
|
||||||
|
return renderingEngine;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @return top level browser family
|
||||||
|
*/
|
||||||
|
public Browser getGroup() {
|
||||||
|
if (this.parent != null) {
|
||||||
|
return parent.getGroup();
|
||||||
|
}
|
||||||
|
return this;
|
||||||
|
}
|
||||||
|
|
||||||
|
/*
|
||||||
|
* Checks if the given user-agent string matches to the browser.
|
||||||
|
* Only checks for one specific browser.
|
||||||
|
*/
|
||||||
|
public boolean isInUserAgentString(String agentString) {
|
||||||
|
for (String alias : aliases) {
|
||||||
|
if (agentString.toLowerCase().indexOf(alias.toLowerCase()) != -1)
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Checks if the given user-agent does not contain one of the tokens which should not match.
|
||||||
|
* In most cases there are no excluding tokens, so the impact should be small.
|
||||||
|
*
|
||||||
|
* @param agentString
|
||||||
|
* @return
|
||||||
|
*/
|
||||||
|
private boolean containsExcludeToken(String agentString) {
|
||||||
|
if (excludeList != null) {
|
||||||
|
for (String exclude : excludeList) {
|
||||||
|
if (agentString.toLowerCase().indexOf(exclude.toLowerCase()) != -1)
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
|
private Browser checkUserAgent(String agentString) {
|
||||||
|
if (this.isInUserAgentString(agentString)) {
|
||||||
|
if (this.children.size() > 0) {
|
||||||
|
for (Browser childBrowser : this.children) {
|
||||||
|
Browser match = childBrowser.checkUserAgent(agentString);
|
||||||
|
if (match != null) {
|
||||||
|
return match;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
// if children didn't match we continue checking the current to prevent false positives
|
||||||
|
if (!this.containsExcludeToken(agentString)) {
|
||||||
|
return this;
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
|
return null;
|
||||||
|
}
|
||||||
|
|
||||||
/**
|
|
||||||
* @return top level browser family
|
|
||||||
*/
|
|
||||||
public Browser getGroup() {
|
|
||||||
if (this.parent != null) {
|
|
||||||
return parent.getGroup();
|
|
||||||
}
|
|
||||||
return this;
|
|
||||||
}
|
|
||||||
|
|
||||||
/*
|
|
||||||
* Checks if the given user-agent string matches to the browser.
|
|
||||||
* Only checks for one specific browser.
|
|
||||||
*/
|
|
||||||
public boolean isInUserAgentString(String agentString)
|
|
||||||
{
|
|
||||||
for (String alias : aliases)
|
|
||||||
{
|
|
||||||
if (agentString.toLowerCase().indexOf(alias.toLowerCase()) != -1)
|
|
||||||
return true;
|
|
||||||
}
|
|
||||||
return false;
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Checks if the given user-agent does not contain one of the tokens which should not match.
|
|
||||||
* In most cases there are no excluding tokens, so the impact should be small.
|
|
||||||
* @param agentString
|
|
||||||
* @return
|
|
||||||
*/
|
|
||||||
private boolean containsExcludeToken(String agentString)
|
|
||||||
{
|
|
||||||
if (excludeList != null) {
|
|
||||||
for (String exclude : excludeList) {
|
|
||||||
if (agentString.toLowerCase().indexOf(exclude.toLowerCase()) != -1)
|
|
||||||
return true;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
return false;
|
|
||||||
}
|
|
||||||
|
|
||||||
private Browser checkUserAgent(String agentString) {
|
|
||||||
if (this.isInUserAgentString(agentString)) {
|
|
||||||
if (this.children.size() > 0) {
|
|
||||||
for (Browser childBrowser : this.children) {
|
|
||||||
Browser match = childBrowser.checkUserAgent(agentString);
|
|
||||||
if (match != null) {
|
|
||||||
return match;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
// if children didn't match we continue checking the current to prevent false positives
|
|
||||||
if (!this.containsExcludeToken(agentString)) {
|
|
||||||
return this;
|
|
||||||
}
|
|
||||||
|
|
||||||
}
|
|
||||||
return null;
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Iterates over all Browsers to compare the browser signature with
|
|
||||||
* the user agent string. If no match can be found Browser.UNKNOWN will
|
|
||||||
* be returned.
|
|
||||||
* @param agentString
|
|
||||||
* @return Browser
|
|
||||||
*/
|
|
||||||
public static Browser parseUserAgentString(String agentString)
|
|
||||||
{
|
|
||||||
for (Browser browser : Browser.values())
|
|
||||||
{
|
|
||||||
// only check top level objects
|
|
||||||
if (browser.parent == null) {
|
|
||||||
Browser match = browser.checkUserAgent(agentString);
|
|
||||||
if (match != null) {
|
|
||||||
return match; // either current operatingSystem or a child object
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
return Browser.UNKNOWN;
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Returns the enum constant of this type with the specified id.
|
|
||||||
* Throws IllegalArgumentException if the value does not exist.
|
|
||||||
* @param id
|
|
||||||
* @return
|
|
||||||
*/
|
|
||||||
public static Browser valueOf(short id)
|
|
||||||
{
|
|
||||||
for (Browser browser : Browser.values())
|
|
||||||
{
|
|
||||||
if (browser.getId() == id)
|
|
||||||
return browser;
|
|
||||||
}
|
|
||||||
|
|
||||||
// same behavior as standard valueOf(string) method
|
|
||||||
throw new IllegalArgumentException(
|
|
||||||
"No enum const for id " + id);
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
}
|
}
|
||||||
|
@ -151,19 +151,18 @@ public class MindmapController {
|
|||||||
final Locale locale = LocaleContextHolder.getLocale();
|
final Locale locale = LocaleContextHolder.getLocale();
|
||||||
|
|
||||||
// Is the mindmap locked ?.
|
// Is the mindmap locked ?.
|
||||||
|
boolean isLocked = false;
|
||||||
boolean readOnlyMode = !requiresLock || !mindmap.hasPermissions(collaborator, CollaborationRole.EDITOR);
|
boolean readOnlyMode = !requiresLock || !mindmap.hasPermissions(collaborator, CollaborationRole.EDITOR);
|
||||||
if (!readOnlyMode) {
|
if (!readOnlyMode) {
|
||||||
final LockManager lockManager = this.mindmapService.getLockManager();
|
final LockManager lockManager = this.mindmapService.getLockManager();
|
||||||
if (lockManager.isLocked(mindmap) && !lockManager.isLockedBy(mindmap, collaborator)) {
|
if (lockManager.isLocked(mindmap) && !lockManager.isLockedBy(mindmap, collaborator)) {
|
||||||
readOnlyMode = true;
|
readOnlyMode = true;
|
||||||
model.addAttribute("mindmapLocked", true);
|
|
||||||
} else {
|
} else {
|
||||||
model.addAttribute("lockTimestamp", mindmap.getLastModificationTime().getTimeInMillis());
|
model.addAttribute("lockTimestamp", mindmap.getLastModificationTime().getTimeInMillis());
|
||||||
model.addAttribute(LOCK_SESSION_ATTRIBUTE, lockManager.generateSession());
|
model.addAttribute(LOCK_SESSION_ATTRIBUTE, lockManager.generateSession());
|
||||||
}
|
}
|
||||||
model.addAttribute("lockInfo", lockManager.getLockInfo(mindmap));
|
model.addAttribute("lockInfo", lockManager.getLockInfo(mindmap));
|
||||||
}
|
}
|
||||||
|
|
||||||
// Set render attributes ...
|
// Set render attributes ...
|
||||||
model.addAttribute("mindmap", mindmapBean);
|
model.addAttribute("mindmap", mindmapBean);
|
||||||
|
|
||||||
@ -171,6 +170,9 @@ public class MindmapController {
|
|||||||
model.addAttribute("locale", locale.toString().toLowerCase());
|
model.addAttribute("locale", locale.toString().toLowerCase());
|
||||||
model.addAttribute("principal", collaborator);
|
model.addAttribute("principal", collaborator);
|
||||||
model.addAttribute("readOnlyMode", readOnlyMode);
|
model.addAttribute("readOnlyMode", readOnlyMode);
|
||||||
|
model.addAttribute("memoryPersistence", false);
|
||||||
|
model.addAttribute("mindmapLocked", isLocked);
|
||||||
|
|
||||||
return "mindmapEditor";
|
return "mindmapEditor";
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -238,7 +238,8 @@ TUTORIAL.FONT_STYLE=Styles
|
|||||||
TUTORIAL.FONT_TYPE=Type
|
TUTORIAL.FONT_TYPE=Type
|
||||||
TUTORIAL.SAMPLE_NOTE=This is a simple note !.
|
TUTORIAL.SAMPLE_NOTE=This is a simple note !.
|
||||||
SUPPORT=Support
|
SUPPORT=Support
|
||||||
FEEDBACK=Feedback
|
FEEDBACK=Got Feedback ?
|
||||||
|
REPORT_BUG=Raise An Issue
|
||||||
CONTACT_US=Contact Us
|
CONTACT_US=Contact Us
|
||||||
|
|
||||||
#Pending for translation ...
|
#Pending for translation ...
|
||||||
|
@ -236,7 +236,9 @@ TUTORIAL.FONT_STYLE=Estilos
|
|||||||
TUTORIAL.FONT_TYPE=Tipos de Fuente
|
TUTORIAL.FONT_TYPE=Tipos de Fuente
|
||||||
TUTORIAL.SAMPLE_NOTE=Esto es una Nota !
|
TUTORIAL.SAMPLE_NOTE=Esto es una Nota !
|
||||||
SUPPORT=Ayuda
|
SUPPORT=Ayuda
|
||||||
FEEDBACK=Feedback
|
FEEDBACK=Tenes Feedback ?
|
||||||
|
REPORT_BUG=Reportar Problema
|
||||||
|
|
||||||
CONTACT_US=Contáctenos
|
CONTACT_US=Contáctenos
|
||||||
|
|
||||||
|
|
||||||
|
@ -1,19 +1,35 @@
|
|||||||
<%@ taglib prefix="spring" uri="http://www.springframework.org/tags" %>
|
<%@ taglib prefix="spring" uri="http://www.springframework.org/tags" %>
|
||||||
<%@taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c" %>
|
<%@taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c" %>
|
||||||
|
<div id="footerContainer">
|
||||||
|
<script type="text/javascript" src="https://wisemapping.atlassian.net/s/d41d8cd98f00b204e9800998ecf8427e/en_US-f1g0rh-1988229788/6211/26/1.4.5/_/download/batch/com.atlassian.jira.collector.plugin.jira-issue-collector-plugin:issuecollector/com.atlassian.jira.collector.plugin.jira-issue-collector-plugin:issuecollector.js?collectorId=a47981d6"></script>
|
||||||
|
<script type="text/javascript" src="https://wisemapping.atlassian.net/s/d41d8cd98f00b204e9800998ecf8427e/en_US-f1g0rh-1988229788/6211/26/1.4.5/_/download/batch/com.atlassian.jira.collector.plugin.jira-issue-collector-plugin:issuecollector/com.atlassian.jira.collector.plugin.jira-issue-collector-plugin:issuecollector.js?collectorId=703b9822"></script>
|
||||||
|
|
||||||
<div id="footerContainer" class="row">
|
<script type="text/javascript">
|
||||||
<div class="span1 offset3">
|
window.ATL_JQ_PAGE_PROPS = $.extend(window.ATL_JQ_PAGE_PROPS, {
|
||||||
<a href="https://twitter.com/share" class="twitter-share-button" data-via="wisemapping"
|
"a47981d6": {
|
||||||
data-related="wisemapping">Tweet</a>
|
triggerFunction: function(showCollectorDialog) {
|
||||||
<script>!function (d, s, id) {
|
//Requries that jQuery is available!
|
||||||
var js, fjs = d.getElementsByTagName(s)[0];
|
jQuery("#feedbackBtn").click(function(e) {
|
||||||
if (!d.getElementById(id)) {
|
e.preventDefault();
|
||||||
js = d.createElement(s);
|
showCollectorDialog();
|
||||||
js.id = id;
|
});
|
||||||
js.src = "//platform.twitter.com/widgets.js";
|
}
|
||||||
fjs.parentNode.insertBefore(js, fjs);
|
},
|
||||||
|
"703b9822":{
|
||||||
|
triggerFunction: function(showCollectorDialog) {
|
||||||
|
//Requries that jQuery is available!
|
||||||
|
jQuery("#reportIssueBtn").click(function(e) {
|
||||||
|
e.preventDefault();
|
||||||
|
showCollectorDialog();
|
||||||
|
});
|
||||||
}
|
}
|
||||||
}(document, "script", "twitter-wjs");</script>
|
}
|
||||||
|
});
|
||||||
|
</script>
|
||||||
|
|
||||||
|
<div class="span1 offset3">
|
||||||
|
<a href="https://twitter.com/share" class="twitter-share-button" data-url="http://www.wisemapping.com" data-text="Check out this site" data-via="wisemapping" data-related="wisemapping">Tweet</a>
|
||||||
|
<script>!function(d,s,id){var js,fjs=d.getElementsByTagName(s)[0],p=/^http:/.test(d.location)?'http':'https';if(!d.getElementById(id)){js=d.createElement(s);js.id=id;js.src=p+'://platform.twitter.com/widgets.js';fjs.parentNode.insertBefore(js,fjs);}}(document, 'script', 'twitter-wjs');</script>
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
<div class="span1">
|
<div class="span1">
|
||||||
@ -35,10 +51,10 @@
|
|||||||
</div>
|
</div>
|
||||||
<div class="span4">
|
<div class="span4">
|
||||||
<p style="text-align: center;">
|
<p style="text-align: center;">
|
||||||
<a href="https://groups.google.com/d/forum/wisemapping-support"><spring:message code="SUPPORT"/></a> |
|
<a href="" id="feedbackBtn"><spring:message code="FEEDBACK"/></a> |
|
||||||
<a href="mailto:feedback@wisemapping.com"><spring:message code="FEEDBACK"/></a> |
|
<a href="" id="reportIssueBtn"><spring:message code="REPORT_BUG"/></a> |
|
||||||
<a href="mailto:dev@wisemapping.com"><spring:message code="CONTACT_US"/></a> |
|
<a href="mailto:team@wisemapping.com"><spring:message code="CONTACT_US"/></a> |
|
||||||
<a href="http://www.wisemapping.org/license"><spring:message code="LICENSE"/></a><br/>
|
<a href="https://wisemapping.atlassian.net/wiki/display/WS/License "><spring:message code="LICENSE"/></a><br/>
|
||||||
<a href="http://www.wisemapping.org/"><spring:message code="COPYRIGHT"/></a>
|
<a href="http://www.wisemapping.org/"><spring:message code="COPYRIGHT"/></a>
|
||||||
</p>
|
</p>
|
||||||
|
|
||||||
@ -62,4 +78,4 @@
|
|||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
<%@ include file="/jsp/googleAnalytics.jsf" %>
|
<%@ include file="/jsp/googleAnalytics.jsf" %>
|
@ -1,7 +1,7 @@
|
|||||||
|
<%@taglib uri="http://java.sun.com/jsp/jstl/functions" prefix="fn" %>
|
||||||
<%@taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c"%>
|
<%@taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c"%>
|
||||||
<%@taglib prefix="spring" uri="http://www.springframework.org/tags" %>
|
<%@taglib prefix="spring" uri="http://www.springframework.org/tags" %>
|
||||||
<%@taglib prefix="form" uri="http://www.springframework.org/tags/form" %>
|
<%@taglib prefix="form" uri="http://www.springframework.org/tags/form" %>
|
||||||
<%@taglib prefix="fn" uri="http://java.sun.com/jsp/jstl/functions" %>
|
|
||||||
<%
|
<%
|
||||||
request.setAttribute("principal", com.wisemapping.security.Utils.getUser());
|
request.setAttribute("principal", com.wisemapping.security.Utils.getUser());
|
||||||
%>
|
%>
|
||||||
|
@ -49,6 +49,9 @@ public class UserAgentTest {
|
|||||||
final SupportedUserAgent mediapartners = SupportedUserAgent.create("Mediapartners-Google/2.1");
|
final SupportedUserAgent mediapartners = SupportedUserAgent.create("Mediapartners-Google/2.1");
|
||||||
Assert.assertEquals(mediapartners.isBrowserSupported(), true);
|
Assert.assertEquals(mediapartners.isBrowserSupported(), true);
|
||||||
|
|
||||||
|
final SupportedUserAgent ie11 = SupportedUserAgent.create("Mozilla/5.0 (Windows NT 6.3; Trident/7.0; rv:11.0) like Gecko");
|
||||||
|
Assert.assertEquals(ie11.isBrowserSupported(), true);
|
||||||
|
|
||||||
final SupportedUserAgent firefox20 = SupportedUserAgent.create("Mozilla/5.0 (Windows NT 6.1; WOW64; rv:20.0) Gecko/20121215 Firefox/20.0 AppEngine-Google; (+http://code.google.com/appengine; appid: slubuntuk)");
|
final SupportedUserAgent firefox20 = SupportedUserAgent.create("Mozilla/5.0 (Windows NT 6.1; WOW64; rv:20.0) Gecko/20121215 Firefox/20.0 AppEngine-Google; (+http://code.google.com/appengine; appid: slubuntuk)");
|
||||||
Assert.assertEquals(firefox20.isBrowserSupported(), true);
|
Assert.assertEquals(firefox20.isBrowserSupported(), true);
|
||||||
}
|
}
|
||||||
|
Loading…
Reference in New Issue
Block a user