    1   /* FetchStatusDecideRule
    2   *
    3   * $Id: FetchStatusDecideRule.java 4649 2006-09-25 17:16:55Z paul_jack $
    4   *
    5   * Created on Aug 11, 2006
    6   *
    7   * Copyright (C) 2006 Internet Archive.
    8   *
    9   * This file is part of the Heritrix web crawler (crawler.archive.org).
    10  *
    11  * Heritrix is free software; you can redistribute it and/or modify
    12  * it under the terms of the GNU Lesser Public License as published by
    13  * the Free Software Foundation; either version 2.1 of the License, or
    14  * any later version.
    15  *
    16  * Heritrix is distributed in the hope that it will be useful,
    17  * but WITHOUT ANY WARRANTY; without even the implied warranty of
    18  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
    19  * GNU Lesser Public License for more details.
    20  *
    21  * You should have received a copy of the GNU Lesser Public License
    22  * along with Heritrix; if not, write to the Free Software
    23  * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
    24  */
    25  package org.archive.crawler.deciderules;
    26
    27  import org.archive.crawler.datamodel.CrawlURI;
    28  import org.archive.crawler.settings.SimpleType;
    29
    30
    31
    32  /***
    33   * Rule applies the configured decision for any URI which has a
    34   * fetch status equal to the 'target-status' setting.
    35   *
    36   * @author gojomo
    37   */
    38  public class FetchStatusDecideRule extends PredicatedDecideRule {
    39
    40      private static final long serialVersionUID = 5820599300395594619L;
    41
    42      private static final String ATTR_TARGET_STATUS = "target-status";
    43
    44      /***
    45       * Default access so available to test code.
    46       */
    47      static final Integer DEFAULT_TARGET_STATUS = new Integer(0);
    48
    49      /***
    50       * Usual constructor.
    51       * @param name Name of this DecideRule.
    52       */
    53      public FetchStatusDecideRule(String name) {
    54          super(name);
    55          setDescription("FetchStatusDecideRule. Applies configured decision " +
    56              "to any URI that has a fetch status equal to the setting.");
    57          addElementToDefinition(new SimpleType(ATTR_TARGET_STATUS,
    58                  "Fetch status for which the configured decision will be" +
    59                  "applied.", DEFAULT_TARGET_STATUS));
    60      }
    61
    62      /***
    63       * Evaluate whether given object is over the threshold number of
    64       * hops.
    65       *
    66       * @param object
    67       * @return true if the mx-hops is exceeded
    68       */
    69      protected boolean evaluate(Object object) {
    70          try {
    71              CrawlURI curi = (CrawlURI)object;
    72              return curi.getFetchStatus() ==
    73                  (Integer)getUncheckedAttribute(curi,ATTR_TARGET_STATUS);
    74          } catch (ClassCastException e) {
    75              // if not CrawlURI, always disregard
    76              return false;
    77          }
    78      }
    79  }