001: /* DecideRule
002: *
003: * $Id: DecideRule.java 5010 2007-03-16 15:50:55Z Gojomo $
004: *
005: * Created on Mar 3, 2005
006: *
007: * Copyright (C) 2005 Internet Archive.
008: *
009: * This file is part of the Heritrix web crawler (crawler.archive.org).
010: *
011: * Heritrix is free software; you can redistribute it and/or modify
012: * it under the terms of the GNU Lesser Public License as published by
013: * the Free Software Foundation; either version 2.1 of the License, or
014: * any later version.
015: *
016: * Heritrix is distributed in the hope that it will be useful,
017: * but WITHOUT ANY WARRANTY; without even the implied warranty of
018: * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
019: * GNU Lesser Public License for more details.
020: *
021: * You should have received a copy of the GNU Lesser Public License
022: * along with Heritrix; if not, write to the Free Software
023: * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
024: */
025: package org.archive.crawler.deciderules;
026:
027: import org.archive.crawler.framework.CrawlController;
028: import org.archive.crawler.settings.ModuleType;
029:
030: /**
031: * Interface for rules which, given an object to evaluate,
032: * respond with a decision: {@link DecideRule#ACCEPT},
033: * {@link DecideRule#REJECT}, or
034: * {@link DecideRule#PASS}.
035: *
036: * Rules return {@link #PASS} by default.
037: *
038: * @author gojomo
039: * @see org.archive.crawler.deciderules.DecideRuleSequence
040: */
041: public class DecideRule extends ModuleType {
042:
043: private static final long serialVersionUID = 3437522810581532520L;
044: // enumeration of 'actions'
045: public static final String ACCEPT = "ACCEPT".intern();
046: public static final String REJECT = "REJECT".intern();
047: public static final String PASS = "PASS".intern();
048:
049: /**
050: * Constructor.
051: * @param name Name of this rule.
052: */
053: public DecideRule(String name) {
054: super (name);
055: }
056:
057: /**
058: * Make decision on passed <code>object</code>.
059: * @param object Object to rule on.
060: * @return {@link #ACCEPT}, {@link #REJECT}, or {@link #PASS}.
061: */
062: public Object decisionFor(Object object) {
063: return PASS;
064: }
065:
066: /**
067: * If this rule is "one-way" -- can only return a single
068: * possible decision other than PASS -- return that
069: * decision. Otherwise return null. Most rules will be
070: * one-way.
071: * @param object
072: *
073: * @return the one decision other than PASS this rule might
074: * return, if there is only one
075: */
076: public Object singlePossibleNonPassDecision(Object object) {
077: // by default, don't assume one-way
078: return null;
079: }
080:
081: /**
082: * Respond to a settings update, refreshing any internal settings-derived
083: * state.
084: *
085: * This method gives implementors a chance to refresh internal state
086: * after a settings change. Normally new settings are picked up w/o
087: * the need of work on the part of settings' clients but some facilities
088: * -- for example, Surt classes need to sort submissions into
089: * common-prefix-coalesced collection of Surt prefixes, or,
090: * settings changes that alter external file or seeds/directives
091: * references -- need to be flagged so they can take
092: * compensatory action.
093: */
094: public void kickUpdate() {
095: // by default do nothing
096: }
097:
098: /**
099: * Get the controller object.
100: *
101: * @return the controller object.
102: */
103: public CrawlController getController() {
104: return getSettingsHandler().getOrder().getController();
105: }
106: }
|