package org.jactr.eclipse.runtime.ui.misc; /* * default logging */ import java.util.Collection; import javolution.util.FastList; import org.antlr.runtime.tree.CommonTree; import org.apache.commons.logging.Log; import org.apache.commons.logging.LogFactory; import org.eclipse.jface.viewers.ITreeContentProvider; import org.eclipse.jface.viewers.TreeViewer; import org.eclipse.jface.viewers.Viewer; import org.eclipse.swt.SWT; import org.eclipse.swt.layout.FillLayout; import org.eclipse.swt.widgets.Composite; import org.jactr.eclipse.runtime.session.ISession; import org.jactr.eclipse.ui.content.ACTRLabelProvider; import org.jactr.eclipse.ui.content.AbstractACTRContentProvider; import org.jactr.io.antlr3.builder.JACTRBuilder; import org.jactr.io.antlr3.misc.ASTSupport; public abstract class AbstractSimpleVerticalASTView extends AbstractSessionTimeViewPart { /** * Logger definition */ static private final transient Log LOGGER = LogFactory .getLog(AbstractSimpleVerticalASTView.class); private TreeViewer _treeViewer; private ASTSupport _astSupport = new ASTSupport(); private ACTRLabelProvider _labelProvider = new ACTRLabelProvider(); private ITreeContentProvider _contentProvider = new AbstractACTRContentProvider() { public void inputChanged( Viewer viewer, Object oldInput, Object newInput) { if (newInput instanceof CommonTree) setRoot((CommonTree) newInput); } }; public AbstractSimpleVerticalASTView() { super(true); } abstract protected void getAST(ISession session, String modelName, double time, boolean isPostConflictResolution, Collection<CommonTree> container); @Override protected void setData(ISession session, String modelName, double time, boolean isPostConflictResolution) { final FastList<CommonTree> trees = FastList.newInstance(); getAST(session, modelName, time, isPostConflictResolution, trees); if (trees.size() == 0) { noData(); FastList.recycle(trees); return; } /* * combine the asts */ CommonTree root = _astSupport.create(JACTRBuilder.MODEL, "data"); for (CommonTree tree : trees) root.addChild(tree); _treeViewer.setInput(root); } @Override protected void noData() { _treeViewer.setInput(_astSupport.create(JACTRBuilder.MODEL, "no data")); } @Override public void createPartControl(Composite parent) { Composite composite = new Composite(parent, SWT.NONE); composite.setLayout(new FillLayout()); _treeViewer = new TreeViewer(composite); _treeViewer.setAutoExpandLevel(4); _treeViewer.setContentProvider(_contentProvider); _treeViewer.setLabelProvider(_labelProvider); } @Override public void setFocus() { _treeViewer.getTree().setFocus(); } }