/**
* Copyright 2010 JBoss Inc
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
package org.drools.reteoo.compiled;
import org.drools.base.ClassFieldReader;
import org.drools.reteoo.AlphaNode;
import org.drools.reteoo.BetaNode;
import org.drools.reteoo.LeftInputAdapterNode;
import org.drools.reteoo.ObjectTypeNode;
/**
* Receive notification of the logical parts of the RETE-OO network.
* todo: finish documenting
* @author <a href="mailto:stampy88@yahoo.com">dave sinclair</a>
*/
public interface NetworkHandler {
/**
* Receive notification of the beginning of an {@link org.drools.reteoo.ObjectTypeNode}
*
* <p>The Network parser will invoke this method only once, before any other event callback.</p>
*
* @param objectTypeNode the object type node
* @see #endObjectTypeNode(org.drools.reteoo.ObjectTypeNode)
*/
void startObjectTypeNode(ObjectTypeNode objectTypeNode);
/**
* Receive notification of the a non-hashed {@link org.drools.reteoo.AlphaNode}.
*
* <p>The Parser will invoke this method at the beginning of every non-hashed Alpha in the Network;
* there will be a corresponding endNonHashedAlphaNode() event for every startNonHashedAlphaNode() event.
* All of the node's decendants will be reported, in order, before the corresponding endNonHashedAlphaNode()
* event.</p>
*
* @param alphaNode non-hashed AlphaNode
* @see #endNonHashedAlphaNode
*/
void startNonHashedAlphaNode(AlphaNode alphaNode);
/**
* Receive notification of the end of a non-hashed {@link org.drools.reteoo.AlphaNode}.
*
* <p>The parser will invoke this method at the end of every alpha in the network; there will be a corresponding
* {@link #startNonHashedAlphaNode(org.drools.reteoo.AlphaNode)} event for every endNonHashedAlphaNode event.</p>
*
* @param alphaNode non-hashed AlphaNode
*/
void endNonHashedAlphaNode(AlphaNode alphaNode);
void startBetaNode(BetaNode betaNode);
void endBetaNode(BetaNode betaNode);
void startLeftInputAdapterNode(LeftInputAdapterNode leftInputAdapterNode);
void endLeftInputAdapterNode(LeftInputAdapterNode leftInputAdapterNode);
/**
* Receive notification of the a group of hashed {@link org.drools.reteoo.AlphaNode}s.
*
* <p>The Parser will invoke this method at the beginning of every groups of hashed Alphas in the Network;
* there will be a corresponding {@link #endHashedAlphaNodes} event for every startHashedAlphaNodes() event.
*
* The actual alpha nodes will be reported via the {@link #startHashedAlphaNode} method, along with all of the
* node's decendants, in order, before the corresponding {@link #endHashedAlphaNode}
* event.</p>
*
* @param hashedFieldReader field reader that is used to access the hashed attribute
* @see #endHashedAlphaNodes
* @see #startHashedAlphaNode
*/
void startHashedAlphaNodes(ClassFieldReader hashedFieldReader);
void endHashedAlphaNodes(ClassFieldReader hashedFieldReader);
void startHashedAlphaNode(AlphaNode hashedAlpha, Object hashedValue);
void endHashedAlphaNode(AlphaNode hashedAlpha, Object hashedValue);
void endObjectTypeNode(ObjectTypeNode objectTypeNode);
}