All Downloads are FREE. Search and download functionalities are using the official Maven repository.

com.bigdata.rdf.sparql.ast.TermNode Maven / Gradle / Ivy

package com.bigdata.rdf.sparql.ast;

import java.util.Map;

import com.bigdata.bop.BOp;
import com.bigdata.bop.IConstant;
import com.bigdata.bop.IValueExpression;
import com.bigdata.bop.IVariableOrConstant;
import com.bigdata.rdf.internal.IV;
import com.bigdata.rdf.model.BigdataValue;

/**
 * Used to represent a variable or constant in the AST (a term in a statement
 * pattern for example). Unlike {@link FunctionNode}s, a {@link TermNode} models
 * the {@link IValueExpression} directly as its sole child argument. This
 * facilitates various rewrite patterns in which variables are renamed, etc.
 * 
 * @author mikepersonick
 */
public abstract class TermNode extends ValueExpressionNode {

    /**
	 * 
	 */
	private static final long serialVersionUID = 2050144811725774174L;

    /**
     * Constructor required for {@link com.bigdata.bop.BOpUtility#deepCopy(FilterNode)}.
     */
    public TermNode(TermNode op) {
        super(op);
    }
    
    /**
     * Required shallow copy constructor.
     */
	public TermNode(final BOp[] args, final Map anns) {
		
		super(args, anns);
		
	}

	/**
	 * Strengthen the return type.
	 */
	@Override
	public IVariableOrConstant getValueExpression() {
		
		return (IVariableOrConstant) get(0);
		
	}

    /**
     * Operation is not supported (could be modeled by changing args[0] if we
     * still want to do this).
     */
    @Override
    public void setValueExpression(IValueExpression ve) {

        throw new UnsupportedOperationException();
        
    }

    /**
     * NOP.
     */
    @Override
    final public void invalidate() {
        // NOP
    }

    final public BigdataValue getValue() {
	
    	final IVariableOrConstant val = getValueExpression();
    	
    	if (val != null && val instanceof IConstant) {
    		
    		final IV iv = val.get();
    		
    		if (iv.hasValue()) {
    			
    			return iv.getValue();
    			
    		}
    		
    	}
    	
    	return null;

    }

	@Override
	public String toString(int i) {
		return toShortString();
	}
    
}




© 2015 - 2025 Weber Informatics LLC | Privacy Policy