001: /*
002: * Copyright 2005 JBoss Inc
003: *
004: * Licensed under the Apache License, Version 2.0 (the "License");
005: * you may not use this file except in compliance with the License.
006: * You may obtain a copy of the License at
007: *
008: * http://www.apache.org/licenses/LICENSE-2.0
009: *
010: * Unless required by applicable law or agreed to in writing, software
011: * distributed under the License is distributed on an "AS IS" BASIS,
012: * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
013: * See the License for the specific language governing permissions and
014: * limitations under the License.
015: */
016:
017: package org.drools.spi;
018:
019: import org.drools.WorkingMemory;
020: import org.drools.common.InternalFactHandle;
021: import org.drools.rule.Declaration;
022:
023: /**
024: * Accumulator
025: *
026: * Created: 04/06/2006
027: * @author <a href="mailto:tirelli@post.com">Edson Tirelli</a>
028: *
029: * @version $Id: Accumulator.java 13464 2007-07-13 22:15:50Z tirelli $
030: */
031: public interface Accumulator extends Invoker {
032:
033: /**
034: * Creates and return a context object for each working memory instance
035: *
036: * @return
037: */
038: public Object createWorkingMemoryContext();
039:
040: /**
041: * Creates the context object for an accumulator session.
042: * The context is passed as a parameter to every subsequent accumulator
043: * method call in the same session.
044: *
045: * @return
046: */
047: public Object createContext();
048:
049: /**
050: * Executes the initialization block of code
051: *
052: * @param leftTuple tuple causing the rule fire
053: * @param declarations previous declarations
054: * @param workingMemory
055: * @throws Exception
056: */
057: public void init(Object workingMemoryContext, Object context,
058: Tuple leftTuple, Declaration[] declarations,
059: WorkingMemory workingMemory) throws Exception;
060:
061: /**
062: * Executes the accumulate (action) code for the given fact handle
063: *
064: * @param leftTuple
065: * @param handle
066: * @param declarations
067: * @param innerDeclarations
068: * @param workingMemory
069: * @throws Exception
070: */
071: public void accumulate(Object workingMemoryContext, Object context,
072: Tuple leftTuple, InternalFactHandle handle,
073: Declaration[] declarations,
074: Declaration[] innerDeclarations, WorkingMemory workingMemory)
075: throws Exception;
076:
077: /**
078: * Returns true if this accumulator supports operation reversal
079: *
080: * @return
081: */
082: public boolean supportsReverse();
083:
084: /**
085: * Reverses the accumulate action for the given fact handle
086: *
087: * @param context
088: * @param leftTuple
089: * @param handle
090: * @param declarations
091: * @param innerDeclarations
092: * @param workingMemory
093: * @throws Exception
094: */
095: public void reverse(Object workingMemoryContext, Object context,
096: Tuple leftTuple, InternalFactHandle handle,
097: Declaration[] declarations,
098: Declaration[] innerDeclarations, WorkingMemory workingMemory)
099: throws Exception;
100:
101: /**
102: * Gets the result of the accummulation
103: *
104: * @param leftTuple
105: * @param declarations
106: * @param workingMemory
107: * @return
108: * @throws Exception
109: */
110: public Object getResult(Object workingMemoryContext,
111: Object context, Tuple leftTuple,
112: Declaration[] declarations, WorkingMemory workingMemory)
113: throws Exception;
114:
115: }
|