/* * Copyright 2005 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. * 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.core.base; import org.drools.core.common.TupleSets; import org.drools.core.common.WorkingMemoryAction; import org.drools.core.phreak.StackEntry; import org.drools.core.reteoo.LeftTuple; import org.drools.core.reteoo.LeftTupleSink; import org.drools.core.reteoo.PathMemory; import org.drools.core.reteoo.QueryElementNode.QueryElementNodeMemory; import org.drools.core.rule.QueryImpl; import org.drools.core.util.index.TupleList; import org.kie.api.runtime.rule.Variable; import java.util.Arrays; import java.util.List; public final class DroolsQuery extends ArrayElements { private final String name; private InternalViewChangedEventListener resultsCollector; private QueryImpl query; private boolean open; private Variable[] vars; private TupleList resultInsertRightTupleList; private TupleList resultUpdateRightTupleList; private TupleList resultRetractRightTupleList; private WorkingMemoryAction action; private final TupleSets<LeftTuple> resultLeftTuples; private QueryElementNodeMemory qmem; private List<PathMemory> pmems; private StackEntry stackEntry; private LeftTupleSink sink; public DroolsQuery(final String name, final Object[] params, final InternalViewChangedEventListener resultsCollector, final boolean open, final StackEntry stackEntry, final List<PathMemory> pmems, final TupleSets<LeftTuple> resultLeftTuples, final QueryElementNodeMemory qmem, final LeftTupleSink sink) { setParameters(params); this.name = name; this.resultsCollector = resultsCollector; this.stackEntry = stackEntry; this.open = open; this.pmems = pmems; this.resultLeftTuples = resultLeftTuples; this.qmem = qmem; this.sink = sink; } public void setParameters(final Object[] params) { setElements( params ); // build the indexes to the Variables if ( params != null ) { vars = new Variable[params.length]; for ( int i = 0; i < params.length; i++ ) { if ( params[i] == Variable.v ) { vars[i] = Variable.v; params[i] = null; } } } } public String getName() { return this.name; } public Variable[] getVariables() { return this.vars; } public TupleSets<LeftTuple> getResultLeftTupleSets() { return resultLeftTuples; } public StackEntry getStackEntry() { return this.stackEntry; } public List<PathMemory> getRuleMemories() { return this.pmems; } public QueryElementNodeMemory getQueryNodeMemory() { return qmem; } public LeftTupleSink getLeftTupleSink() { return this.sink; } public void setQuery(QueryImpl query) { // this is set later, as we don't yet know which Query will match this DroolsQuery propagation this.query = query; } public QueryImpl getQuery() { return this.query; } public InternalViewChangedEventListener getQueryResultCollector() { return this.resultsCollector; } public boolean isOpen() { return open; } public TupleList getResultInsertRightTupleList() { return resultInsertRightTupleList; } public void setResultInsertRightTupleList(TupleList evaluateActionsRightTupleList) { this.resultInsertRightTupleList = evaluateActionsRightTupleList; } public TupleList getResultUpdateRightTupleList() { return resultUpdateRightTupleList; } public void setResultUpdateRightTupleList(TupleList insertUpdateRightTupleList) { this.resultUpdateRightTupleList = insertUpdateRightTupleList; } public TupleList getResultRetractRightTupleList() { return resultRetractRightTupleList; } public void setResultRetractRightTupleList(TupleList retractRightTupleList) { this.resultRetractRightTupleList = retractRightTupleList; } public WorkingMemoryAction getAction() { return action; } public void setAction(WorkingMemoryAction action) { this.action = action; } @Override public int hashCode() { final int prime = 31; int result = super.hashCode(); result = prime * result + ((name == null) ? 0 : name.hashCode()); result = prime * result + (open ? 1231 : 1237); result = prime * result + Arrays.hashCode( vars ); return result; } @Override public boolean equals(Object obj) { // DroolsQuery must be instance equals return this == obj; } @Override public String toString() { return "DroolsQuery [name=" + name + ", resultsCollector=" + resultsCollector + ", query=" + query + ", open=" + open + ", args=" + Arrays.toString( getElements() ) + ", vars=" + Arrays.toString( vars ) + "]"; } }