View Javadoc

    1   /*
    2    * $Id: DefaultGroovyStaticMethods.java 2726 2005-08-20 19:51:14Z glaforge $
    3    *
    4    * Copyright 2003 (C) James Strachan and Bob Mcwhirter. All Rights Reserved.
    5    *
    6    * Redistribution and use of this software and associated documentation
    7    * ("Software"), with or without modification, are permitted provided that the
    8    * following conditions are met:
    9    *  1. Redistributions of source code must retain copyright statements and
    10   * notices. Redistributions must also contain a copy of this document.
    11   *  2. Redistributions in binary form must reproduce the above copyright
    12   * notice, this list of conditions and the following disclaimer in the
    13   * documentation and/or other materials provided with the distribution.
    14   *  3. The name "groovy" must not be used to endorse or promote products
    15   * derived from this Software without prior written permission of The Codehaus.
    16   * For written permission, please contact info@codehaus.org.
    17   *  4. Products derived from this Software may not be called "groovy" nor may
    18   * "groovy" appear in their names without prior written permission of The
    19   * Codehaus. "groovy" is a registered trademark of The Codehaus.
    20   *  5. Due credit should be given to The Codehaus - http://groovy.codehaus.org/
    21   *
    22   * THIS SOFTWARE IS PROVIDED BY THE CODEHAUS AND CONTRIBUTORS ``AS IS'' AND ANY
    23   * EXPRESSED OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
    24   * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
    25   * DISCLAIMED. IN NO EVENT SHALL THE CODEHAUS OR ITS CONTRIBUTORS BE LIABLE FOR
    26   * ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
    27   * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
    28   * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
    29   * CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
    30   * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
    31   * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH
    32   * DAMAGE.
    33   *
    34   */
    35  package org.codehaus.groovy.runtime;
    36
    37  import groovy.lang.Closure;
    38
    39  import java.util.regex.Matcher;
    40
    41  /***
    42   * This class defines all the new static groovy methods which appear on normal JDK
    43   * classes inside the Groovy environment. Static methods are used with the
    44   * first parameter as the destination class.
    45   *
    46   * @author Guillaume Laforge
    47   * @author Dierk Koenig
    48   * @version $Revision: 2726 $
    49   */
    50  public class DefaultGroovyStaticMethods {
    51
    52      /***
    53       * Start a Thread with the given closure as a Runnable instance.
    54       *
    55       * @param closure the Runnable closure
    56       * @return the started thread
    57       */
    58      public static Thread start(Thread self, Closure closure) {
    59          Thread thread = new Thread(closure);
    60          thread.start();
    61          return thread;
    62      }
    63
    64      /***
    65       * Start a daemon Thread with the given closure as a Runnable instance.
    66       *
    67       * @param closure the Runnable closure
    68       * @return the started thread
    69       */
    70      public static Thread startDaemon(Thread self, Closure closure) {
    71          Thread thread = new Thread(closure);
    72          thread.setDaemon(true);
    73          thread.start();
    74          return thread;
    75      }
    76
    77      /***
    78       * Get the last hidden matcher that system used to do a match.
    79       *
    80       * @param matcher
    81       * @return the last regex matcher
    82       */
    83      public static Matcher getLastMatcher(Matcher matcher) {
    84          return RegexSupport.getLastMatcher();
    85      }
    86
    87      /***
    88       * Sleep for so many milliseconds, even if interrupted.
    89       * @param object receiver
    90       * @param milliseconds the number of milliseconds to sleep
    91       */
    92      public static void sleep(Object object, long milliseconds){
    93          sleepImpl(object, milliseconds);
    94      }
    95
    96      protected static void sleepImpl(Object object, long millis) {
    97          long start = System.currentTimeMillis();
    98          try {
    99              Thread.sleep(millis);
    100         } catch (InterruptedException e) {
    101             long slept = System.currentTimeMillis() - start;
    102             long rest  = millis - slept;
    103             if (rest > 0) sleepImpl(object, rest);    // recursion to sleep the rest
    104         }
    105     }
    106
    107     /***
    108      * Sleep for so many milliseconds
    109      * @param object receiver
    110      * @param milliseconds the number of milliseconds to sleep
    111      * @param onInterrupt interrupt handler, InterruptedException is passed to the Closure
    112      */
    113     public static void sleep(Object object, long milliseconds, Closure onInterrupt){
    114         try {
    115             Thread.sleep(milliseconds);
    116         } catch (InterruptedException e) {
    117             onInterrupt.call(e);
    118         }
    119     }
    120 }