/*******************************************************************************
* Copyright (c) 2004-2008 Gabor Bergmann and Daniel Varro
* All rights reserved. This program and the accompanying materials
* are made available under the terms of the Eclipse Public License v1.0
* which accompanies this distribution, and is available at
* http://www.eclipse.org/legal/epl-v10.html
*
* Contributors:
* Gabor Bergmann - initial API and implementation
*******************************************************************************/
package org.eclipse.incquery.runtime.rete.network;
import java.util.Collection;
import java.util.LinkedList;
import java.util.List;
import org.eclipse.incquery.runtime.rete.index.GenericProjectionIndexer;
import org.eclipse.incquery.runtime.rete.index.ProjectionIndexer;
import org.eclipse.incquery.runtime.rete.tuple.Tuple;
import org.eclipse.incquery.runtime.rete.tuple.TupleMask;
/**
* Base implementation for a supplier node.
*
* @author Gabor Bergmann
*
*/
public abstract class StandardNode extends BaseNode implements Supplier {
protected List<Receiver> children = new LinkedList<Receiver>();
public StandardNode(ReteContainer reteContainer) {
super(reteContainer);
}
protected void propagateUpdate(Direction direction, Tuple updateElement) {
for (Receiver r : children)
reteContainer.sendUpdateInternal(r, direction, updateElement);
}
@Override
public void appendChild(Receiver receiver) {
children.add(receiver);
}
@Override
public void removeChild(Receiver receiver) {
children.remove(receiver);
}
@Override
public Collection<Receiver> getReceivers() {
return children;
}
@Override
public ProjectionIndexer constructIndex(TupleMask mask) {
final GenericProjectionIndexer indexer = new GenericProjectionIndexer(reteContainer, mask);
reteContainer.connectAndSynchronize(this, indexer);
return indexer;
}
}