/** * 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.Sink; import org.drools.rule.ContextEntry; /** * This handler is used as a base class for all {@link org.drools.reteoo.compiled.NetworkHandler}s used for * generating a compiled network. It provides methods to return the variable type and names used for storing * refernces to different {@link org.drools.common.NetworkNode}s and variable names for {@link ClassFieldReader}s. * * @author <a href="mailto:stampy88@yahoo.com">dave sinclair</a> */ abstract class AbstractCompilerHandler extends NetworkHandlerAdaptor { protected static final String NEWLINE = "\n"; private static final String MAP_VARIABLE_NAME_SUFFIX = "ToNodeId"; protected Class<?> getVariableType(AlphaNode alphaNode) { // for alphas, we use the constraint of the alpha for the declaration return alphaNode.getConstraint().getClass(); } protected Class<?> getVariableType(Sink sink) { return sink.getClass(); } protected String getVariableName(AlphaNode alphaNode) { Class<?> variableType = getVariableType(alphaNode); return getVariableName(variableType, alphaNode.getId()); } protected String getContextVariableName(AlphaNode alphaNode) { Class<?> variableType = ContextEntry.class; return getVariableName(variableType, alphaNode.getId()); } protected String getVariableName(Sink sink) { Class<?> variableType = getVariableType(sink); return getVariableName(variableType, sink.getId()); } protected String getVariableName(ClassFieldReader fieldReader) { return fieldReader.getFieldName() + MAP_VARIABLE_NAME_SUFFIX; } /** * Returns a variable name based on the simple name of the specified class appended with the specified * nodeId. * * @param clazz class whose simple name is lowercased and user as the prefix of the variable name * @param nodeId id of {@link org.drools.common.NetworkNode} * @return variable name * @see Class#getSimpleName() */ private String getVariableName(Class clazz, int nodeId) { String type = clazz.getSimpleName(); return Character.toLowerCase(type.charAt(0)) + type.substring(1) + nodeId; } }