blob: 3f464fbd78116bd06f00f52d52f5ac1a53b9950c [file] [log] [blame]
/*******************************************************************************
* Copyright (c) 2007 Chase Technology Ltd - http://www.chasetechnology.co.uk
* 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:
* Doug Satchwell (Chase Technology Ltd) - initial API and implementation
*******************************************************************************/
package org.eclipse.wst.xsl.xalan.debugger;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import java.util.Vector;
import org.apache.commons.logging.Log;
import org.apache.commons.logging.LogFactory;
import org.apache.xalan.templates.ElemVariable;
import org.apache.xalan.templates.StylesheetRoot;
import org.apache.xalan.trace.TracerEvent;
import org.apache.xpath.VariableStack;
import org.eclipse.wst.xsl.debugger.Variable;
public class XalanRootStyleFrame extends XalanStyleFrame
{
private static final Log log = LogFactory.getLog(XalanRootStyleFrame.class);
private Map variables;
private ArrayList globals;
public XalanRootStyleFrame(TracerEvent event)
{
super(null, event);
fillGlobals(event);
}
protected List getGlobals()
{
return globals;
}
private void fillGlobals(TracerEvent event)
{
VariableStack vs = event.m_processor.getXPathContext().getVarStack();
StylesheetRoot sr = event.m_styleNode.getStylesheetRoot();
Vector vars = sr.getVariablesAndParamsComposed();
variables = new HashMap(vars.size());
globals = new ArrayList(vars.size());
int i = vars.size();
while (--i >= 0)
{
ElemVariable variable = (ElemVariable) vars.elementAt(i);
XalanVariable xvar = new XalanVariable(this,vs,Variable.GLOBAL_SCOPE,i,variable);
addVariable(xvar);
globals.add(xvar);
}
}
public Variable getVariable(int id)
{
// log.debug("Getting variable with id "+id+" from variables "+variables.size());
return (Variable)variables.get(new Integer(id));
}
public void addVariable(XalanVariable xvar)
{
// log.debug("Adding variable index="+xvar.getSlotNumber()+" val="+xvar);
// variables.add(xvar.getSlotNumber(),xvar);
log.debug("Adding variable id="+xvar.getId());
variables.put(new Integer(xvar.getId()),xvar);
}
}