View Javadoc

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  }