/*
* Copyright 2015 Red Hat, Inc. and/or its affiliates.
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
*
* 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.compiler.phreak;
import org.drools.core.common.InternalFactHandle;
import org.drools.core.common.InternalWorkingMemory;
import org.drools.core.common.PhreakPropagationContext;
import org.drools.core.common.TupleSets;
import org.drools.core.reteoo.LeftTuple;
import org.drools.core.reteoo.LeftTupleSink;
import org.drools.core.reteoo.SegmentMemory;
public class LeftBuilder {
/**
*
*/
private InternalWorkingMemory wm;
private LeftTupleSink sink;
private TupleSets<LeftTuple> leftTuples;
private Scenario scenario;
public LeftBuilder(Scenario scenario) {
this.scenario = scenario;
this.wm = scenario.getWorkingMemory();
this.sink = scenario.getBetaNode();
this.leftTuples = scenario.getLeftTuples();
}
public LeftBuilder insert(Object... objects) {
for ( Object object : objects ) {
InternalFactHandle fh = (InternalFactHandle) wm.insert( object );
LeftTuple leftTuple = sink.createLeftTuple( fh, sink, true );
leftTuple.setPropagationContext( new PhreakPropagationContext() );
leftTuples.addInsert( leftTuple );
}
return this;
}
public LeftBuilder update(Object... objects) {
for ( Object object : objects ) {
InternalFactHandle fh = (InternalFactHandle) wm.getFactHandle( object );
LeftTuple leftTuple = fh.getFirstLeftTuple();
leftTuple.setPropagationContext( new PhreakPropagationContext() );
leftTuples.addUpdate( leftTuple );
}
return this;
}
public LeftBuilder delete(Object... objects) {
for ( Object object : objects ) {
InternalFactHandle fh = (InternalFactHandle) wm.getFactHandle( object );
LeftTuple leftTuple = fh.getFirstLeftTuple();
leftTuple.setPropagationContext( new PhreakPropagationContext() );
leftTuples.addDelete( leftTuple );
}
return this;
}
TupleSets<LeftTuple> get() {
return this.leftTuples;
}
public RightBuilder right() {
return new RightBuilder( scenario );
}
public StagedBuilder result() {
StagedBuilder stagedBuilder = new StagedBuilder( scenario, null );
scenario.setExpectedResultBuilder( stagedBuilder );
return stagedBuilder;
}
public StagedBuilder preStaged(SegmentMemory sm) {
StagedBuilder stagedBuilder = new StagedBuilder( scenario, sm );
scenario.addPreStagedBuilder( stagedBuilder );
return stagedBuilder;
}
public StagedBuilder postStaged(SegmentMemory sm) {
StagedBuilder stagedBuilder = new StagedBuilder( scenario, sm );
scenario.addPostStagedBuilder( stagedBuilder );
return stagedBuilder;
}
public Scenario run() {
return this.scenario.run();
}
}