001: /******************************************************************
002: * File: Remove.java
003: * Created by: Dave Reynolds
004: * Created on: 11-Apr-2003
005: *
006: * (c) Copyright 2003, 2004, 2005, 2006, 2007, 2008 Hewlett-Packard Development Company, LP
007: * [See end of file]
008: * $Id: Remove.java,v 1.14 2008/01/02 12:06:21 andy_seaborne Exp $
009: *****************************************************************/package com.hp.hpl.jena.reasoner.rulesys.builtins;
010:
011: import com.hp.hpl.jena.reasoner.TriplePattern;
012: import com.hp.hpl.jena.reasoner.rulesys.*;
013: import com.hp.hpl.jena.graph.*;
014:
015: /**
016: * Remove the body clause given by index arguments from the database.
017: *
018: * @author <a href="mailto:der@hplb.hpl.hp.com">Dave Reynolds</a>
019: * @version $Revision: 1.14 $ on $Date: 2008/01/02 12:06:21 $
020: */
021: public class Remove extends BaseBuiltin {
022:
023: /**
024: * Return a name for this builtin, normally this will be the name of the
025: * functor that will be used to invoke it.
026: */
027: public String getName() {
028: return "remove";
029: }
030:
031: /**
032: * This method is invoked when the builtin is called in a rule head.
033: * Such a use is only valid in a forward rule.
034: * @param args the array of argument values for the builtin, this is an array
035: * of Nodes.
036: * @param length the length of the argument list, may be less than the length of the args array
037: * for some rule engines
038: * @param context an execution context giving access to other relevant data
039: */
040: public void headAction(Node[] args, int length, RuleContext context) {
041: boolean ok = false;
042: for (int i = 0; i < length; i++) {
043: Node clauseN = getArg(i, args, context);
044: if (Util.isNumeric(clauseN)) {
045: int clauseIndex = Util.getIntValue(clauseN);
046: Object clause = context.getRule().getBodyElement(
047: clauseIndex);
048: if (clause instanceof TriplePattern) {
049: Triple t = context.getEnv().instantiate(
050: (TriplePattern) clause);
051: context.remove(t);
052: } else {
053: throw new BuiltinException(this , context,
054: "illegal triple to remove non-triple clause");
055: }
056: } else {
057: throw new BuiltinException(this , context,
058: "illegal arg to remove (" + clauseN
059: + "), must be an integer");
060: }
061: }
062: }
063:
064: /**
065: * Returns false if this builtin is non-monotonic. This includes non-monotonic checks like noValue
066: * and non-monotonic actions like remove/drop. A non-monotonic call in a head is assumed to
067: * be an action and makes the overall rule and ruleset non-monotonic.
068: * Most JenaRules are monotonic deductive closure rules in which this should be false.
069: */
070: public boolean isMonotonic() {
071: return false;
072: }
073: }
074:
075: /*
076: (c) Copyright 2003, 2004, 2005, 2006, 2007, 2008 Hewlett-Packard Development Company, LP
077: All rights reserved.
078:
079: Redistribution and use in source and binary forms, with or without
080: modification, are permitted provided that the following conditions
081: are met:
082:
083: 1. Redistributions of source code must retain the above copyright
084: notice, this list of conditions and the following disclaimer.
085:
086: 2. Redistributions in binary form must reproduce the above copyright
087: notice, this list of conditions and the following disclaimer in the
088: documentation and/or other materials provided with the distribution.
089:
090: 3. The name of the author may not be used to endorse or promote products
091: derived from this software without specific prior written permission.
092:
093: THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR
094: IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
095: OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
096: IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT,
097: INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
098: NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
099: DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
100: THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
101: (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
102: THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
103: */
|