blob: 3104db49fc5dbdfa057db6a735d9d323b7a82f3f [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.Map;
import java.util.TooManyListenersException;
import javax.xml.transform.Transformer;
import javax.xml.transform.TransformerFactory;
import org.apache.commons.logging.Log;
import org.apache.commons.logging.LogFactory;
import org.apache.xalan.processor.TransformerFactoryImpl;
import org.apache.xalan.trace.TraceManager;
import org.apache.xalan.transformer.TransformerImpl;
import org.eclipse.wst.xsl.debugger.AbstractDebugger;
import org.eclipse.wst.xsl.debugger.Variable;
public class XalanDebugger extends AbstractDebugger
{
private static final Log log = LogFactory.getLog(XalanDebugger.class);
private XalanTraceListener currentTraceListener;
public void setTransformerFactory(TransformerFactory factory)
{
TransformerFactoryImpl tfi = (TransformerFactoryImpl) factory;
tfi.setAttribute(TransformerFactoryImpl.FEATURE_SOURCE_LOCATION, Boolean.TRUE);
tfi.setAttribute(TransformerFactoryImpl.FEATURE_OPTIMIZE, Boolean.FALSE);
}
public void addTransformer(Transformer transformer, Map locations)
{
TransformerImpl transformerImpl = (TransformerImpl) transformer;
TraceManager trMgr = transformerImpl.getTraceManager();
try
{
// XalanPrintTraceListener printer = new XalanPrintTraceListener(new PrintWriter(System.err));
// printer.m_traceElements = true;
// printer.m_traceSelection = true;
// printer.m_traceTemplates = true;
// trMgr.addTraceListener(printer);
XalanTraceListener traceListener = new XalanTraceListener(this);
trMgr.addTraceListener(traceListener);
}
catch (TooManyListenersException e)
{
// ignore
}
}
public Variable getVariable(int id)
{
return currentTraceListener.getVariable(id);
}
void setCurrentTraceListener(XalanTraceListener currentTraceListener)
{
log.debug("Setting new XalanTraceListener");
this.currentTraceListener = currentTraceListener;
}
}