/*******************************************************************************
 * Copyright (c) 2004-2008 Akos Horvath, Gergely Varro 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:
 *    Akos Horvath, Gergely Varro - initial API and implementation
 *******************************************************************************/

 package org.eclipse.viatra2.gtasm.patternmatcher.impl.patternmatcher.internal.callgraph;

import java.util.List;

import org.eclipse.viatra2.gtasmmodel.gtasm.metamodel.asm.terms.GTPatternCall;
import org.eclipse.viatra2.gtasmmodel.gtasm.metamodel.asm.terms.Term;
import org.eclipse.viatra2.gtasmmodel.gtasm.metamodel.gt.GTPattern;

public abstract class OddLevelNode extends CallGraphNode {
    private EvenLevelNode parent;
    private GTPattern pattern;
    private List<Term> actualParameters;
    private GTPatternCall patternCall;

    OddLevelNode(EvenLevelNode parent, GTPattern pattern) {
        this(parent,pattern,null);
    }
    
    OddLevelNode(EvenLevelNode parent, GTPatternCall call) {
    	this(parent,call.getCalledPattern(),call.getActualParameters());
    	patternCall = call;
    }
    
    OddLevelNode(EvenLevelNode parent, GTPattern pattern, List<Term> parameters) {
        super();
        this.parent = parent;
        this.pattern = pattern;
        this.actualParameters = (parameters != null && parameters.size() > 0 ? parameters : null);
    }
    
    public GTPattern getPattern() {
        return pattern;
    }
    
    public GTPatternCall getPatternCall() {
        return patternCall;
    }
    
    public List<Term> getActualParameters() {
    	return actualParameters;
    }
    
    public EvenLevelNode getParent() {
    	return parent;
    }
}
