FileDocCategorySizeDatePackage
JDK15Platform.javaAPI DocGlassfish v2 API6901Tue May 22 16:54:34 BST 2007oracle.toplink.essentials.internal.helper

JDK15Platform

public class JDK15Platform extends Object implements JDKPlatform
INTERNAL: Implements operations specific to JDK 1.5

Fields Summary
protected static Hashtable
patternCache
PERF: The regular expression compiled Pattern objects are cached to avoid recompilation on every usage.
Constructors Summary
Methods Summary
public intconformLike(java.lang.Object left, java.lang.Object right)
INTERNAL: An implementation of in memory queries with Like which uses the JDK 1.4 regular expression framework.


                          
          
        if ((left == null) && (right == null)) {
            return JavaPlatform.TRUE;
        } else if ((left == null) || (right == null)) {
            return JavaPlatform.FALSE;
        }
        if (left instanceof String && right instanceof String) {
            // PERF: First check the pattern cache for the pattern.
            // Note that the original string is the key, to avoid having to translate it first.
            Pattern pattern = (Pattern)patternCache.get(right);
            if (pattern == null) {
                // Bug 3936427 - Replace regular expression reserved characters with escaped version of those characters
                // For instance replace ? with \?
                String convertedRight = ((String)right).replaceAll("\\?", "\\\\?");
                convertedRight = convertedRight.replaceAll("\\*", "\\\\*");
                convertedRight = convertedRight.replaceAll("\\.", "\\\\.");
                convertedRight = convertedRight.replaceAll("\\[", "\\\\[");
                convertedRight = convertedRight.replaceAll("\\)", "\\\\)");
                convertedRight = convertedRight.replaceAll("\\(", "\\\\(");
                convertedRight = convertedRight.replaceAll("\\{", "\\\\{");
                convertedRight = convertedRight.replaceAll("\\+", "\\\\+");
                convertedRight = convertedRight.replaceAll("\\^", "\\\\^");
                convertedRight = convertedRight.replaceAll("\\|", "\\\\|");

                // regular expressions to substitute SQL wildcards with regex wildcards
                // replace "%" which is not preceded by "\" with ".*"
                convertedRight = convertedRight.replaceAll("([^\\\\])%", "$1.*");

                // replace "_" which is not preceded by "\" with ".
                convertedRight = convertedRight.replaceAll("([^\\\\])_", "$1.");

                // deal with wildcards at the beginning of a line.
                convertedRight = convertedRight.replaceAll("^%", ".*");
                convertedRight = convertedRight.replaceAll("^_", ".");

                // replace "\%" with "%"
                convertedRight = convertedRight.replaceAll("\\\\%", "%");

                // replace "\_" with "_"
                convertedRight = convertedRight.replaceAll("\\\\_", "_");

                pattern = Pattern.compile(convertedRight);
                // Ensure cache does not grow beyond 100.
                if (patternCache.size() > 100) {
                    patternCache.remove(patternCache.keySet().iterator().next());
                }
                patternCache.put(right, pattern);
            }
            boolean match = pattern.matcher((String)left).matches();
            if (match) {
                return JavaPlatform.TRUE;
            } else {
                return JavaPlatform.FALSE;
            }
        }
        return JavaPlatform.UNDEFINED;
    
public java.util.MapgetQueryCacheMap()
INTERNAL Get the Map to store the query cache in

        return new java.util.concurrent.ConcurrentHashMap();
    
public longgetTimeInMillis(java.util.Calendar calendar)
INTERNAL: Get the milliseconds from a Calendar. In JDK 1.4, this can be accessed directly from the calendar.

        return calendar.getTimeInMillis();
    
public voidsetExceptionCause(java.lang.Throwable exception, java.lang.Throwable cause)
INTERNAL: Use API first available in JDK 1.4 to set the cause of an exception.

        if (exception.getCause() == null) {
            exception.initCause(cause);
        }
    
public voidsetTimeInMillis(java.util.Calendar calendar, long millis)
INTERNAL: Set the milliseconds for a Calendar. In JDK 1.4, this can be set directly in the calendar.

        calendar.setTimeInMillis(millis);
    
public booleanshouldPrintInternalException()
INTERNAL return a boolean which determines where TopLink should include the TopLink-stored Internal exception in it's stack trace. For JDK 1.4 VMs with exception chaining the Internal exception can be redundant and confusing.

return
boolean will return false since JDK 1.4 does supports exception chaining

        return false;