stevel      2004/10/07 15:54:32

  Modified:    .        build.xml
  Added:       src/main/org/apache/tools/ant/taskdefs/condition
                        IsPingable.java
  Log:
  First of the Java1.5 extensions. Closest j2se has for detecting offline 
state, though I note J2ME and JavaWebStart have offline tests.
  Needs tests.
  
  Revision  Changes    Path
  1.1                  
ant/src/main/org/apache/tools/ant/taskdefs/condition/IsPingable.java
  
  Index: IsPingable.java
  ===================================================================
  /*
   * Copyright  2004 The Apache Software Foundation
   *
   *  Licensed under the Apache License, Version 2.0 (the "License");
   *  you may not use this file except in compliance with the License.
   *  You may obtain a copy of the License at
   *
   *      http://www.apache.org/licenses/LICENSE-2.0
   *
   *  Unless required by applicable law or agreed to in writing, software
   *  distributed under the License is distributed on an "AS IS" BASIS,
   *  WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
   *  See the License for the specific language governing permissions and
   *  limitations under the License.
   *
   */
  
  package org.apache.tools.ant.taskdefs.condition;
  
  import org.apache.tools.ant.ProjectComponent;
  import org.apache.tools.ant.BuildException;
  import org.apache.tools.ant.Project;
  
  import java.net.InetAddress;
  import java.net.UnknownHostException;
  import java.io.IOException;
  
  /**
   * Test for a host being reachable using ICMP "ping" packets.
   * Ping packets are very reliable for assessing reachability in a LAN or WAN,
   * but they do not get through any well-configured firewall.
   *
   * This condition turns unknown host exceptions into false conditions. This is
   * because on a laptop, DNS is one of the first services when the network 
goes; you
   * are implicitly offline.
   * Requires Java1.5+ to work
   * @since Ant1.7
   */
  public class IsPingable extends ProjectComponent implements Condition  {
  
      private String host;
      public static final int DEFAULT_TIMEOUT = 30;
      private int timeout=DEFAULT_TIMEOUT;
      public static final String ERROR_NO_HOSTNAME = "No hostname defined";
      public static final String ERROR_BAD_TIMEOUT = "Invalid timeout value";
      public static final String ERROR_UNKNOWN_HOST = "Unknown host:";
      public static final String ERROR_ON_NETWORK = "network error to ";
  
      /**
       * the host to ping
       * @param host
       */
      public void setHost(String host) {
          this.host = host;
      }
  
      /**
       * timeout for the reachability test -in seconds
       * @param timeout
       */
      public void setTimeout(int timeout) {
          this.timeout = timeout;
      }
  
      /**
       * Is this condition true?
       *
       * @return true if the condition is true
       * @throws org.apache.tools.ant.BuildException
       *          if an error occurs
       */
      public boolean eval() throws BuildException {
          if(host==null && host.length()==0) {
              throw new BuildException(ERROR_NO_HOSTNAME);
          }
          if(timeout<0) {
              throw new BuildException(ERROR_BAD_TIMEOUT);
          }
          try {
              InetAddress address=InetAddress.getByName(host);
              return address.isReachable(timeout*1000);
          } catch (UnknownHostException e) {
              log(ERROR_UNKNOWN_HOST+host,Project.MSG_VERBOSE);
              return false;
          } catch (IOException e) {
              log(ERROR_ON_NETWORK + host +": "+e.toString(),
                      Project.MSG_VERBOSE);
              return false;
          }
      }
  }
  
  
  
  1.431     +7 -0      ant/build.xml
  
  Index: build.xml
  ===================================================================
  RCS file: /home/cvs/ant/build.xml,v
  retrieving revision 1.430
  retrieving revision 1.431
  diff -u -r1.430 -r1.431
  --- build.xml 3 Oct 2004 14:06:52 -0000       1.430
  +++ build.xml 7 Oct 2004 22:54:32 -0000       1.431
  @@ -152,6 +152,12 @@
       </or>
     </selector>
   
  +  <selector id="needs.jdk1.5+">
  +    <or>
  +      <filename name="${ant.package}/taskdefs/condition/IsPingable*"/>
  +    </or>
  +  </selector>
  +  
     <!-- classes that should be present in Sun based JVMs, but not in
          Kaffe for example -->
     <selector id="needs.sun.tools">
  @@ -637,6 +643,7 @@
             <or>
               <selector refid="needs.jdk1.3+" unless="jdk1.3+"/>
               <selector refid="needs.jdk1.4+" unless="jdk1.4+"/>
  +            <selector refid="needs.jdk1.5+" unless="jdk1.5+"/>
               <selector refid="needs.sun.tools" unless="sun.tools.present"/>
               <selector refid="needs.sun.uue" unless="sunuue.present"/>
               <selector refid="needs.sun.b64" unless="base64.present"/>
  
  
  

---------------------------------------------------------------------
To unsubscribe, e-mail: [EMAIL PROTECTED]
For additional commands, e-mail: [EMAIL PROTECTED]

Reply via email to