⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 viewermodel.java

📁 检查Java程序漏洞
💻 JAVA
字号:
package net.sourceforge.pmd.util.viewer.model;

import net.sourceforge.pmd.TargetJDK1_4;
import net.sourceforge.pmd.ast.ASTCompilationUnit;
import net.sourceforge.pmd.ast.ParseException;
import net.sourceforge.pmd.ast.SimpleNode;
import net.sourceforge.pmd.jaxen.DocumentNavigator;
import org.jaxen.BaseXPath;
import org.jaxen.JaxenException;
import org.jaxen.XPath;

import java.io.StringReader;
import java.util.List;
import java.util.Vector;


/**
 * The model for the viewer gui
 *
 * <p>
 * This is the model part of MVC
 * </p>
 *
 * @author Boris Gruschko ( boris at gruschko.org )
 * @version $Id: ViewerModel.java,v 1.4 2004/04/12 17:35:09 tomcopeland Exp $
 */
public class ViewerModel
{
  private Vector     listeners;
  private SimpleNode rootNode;
  private List       evaluationResults;

  /**
   * constructs the model
   */
  public ViewerModel(  )
  {
    listeners = new Vector( 5 );
  }

  /**
   * Retrieves AST's root node
   *
   * @return AST's root node
   */
  public SimpleNode getRootNode(  )
  {
    return rootNode;
  }

  /**
   * commits source code to the model.
   *
   * <p>
   * all existing source will be replaced
   * </p>
   *
   * @param source source to be commited
   */
  public void commitSource( String source )
  {
    ASTCompilationUnit compilationUnit = new TargetJDK1_4().createParser(new StringReader( source )).CompilationUnit(  );
    rootNode = compilationUnit;
    fireViewerModelEvent(
      new ViewerModelEvent( this, ViewerModelEvent.CODE_RECOMPILED ) );
  }

  /**
   * determines wheteher the model has a compiled tree at it's disposal
   *
   * @return true if there is an AST, false otherwise
   */
  public boolean hasCompiledTree(  )
  {
    return rootNode != null;
  }

  /**
   * evaluates the given XPath expression against the current tree
   *
   * @param xPath XPath expression to be evaluated
   * @param evaluator object which requests the evaluation
   */
  public void evaluateXPathExpression( String xPath, Object evaluator )
    throws ParseException, JaxenException
  {
    XPath xpath = new BaseXPath( xPath, new DocumentNavigator(  ) );

    evaluationResults = xpath.selectNodes( rootNode );

    fireViewerModelEvent(
      new ViewerModelEvent(
        evaluator, ViewerModelEvent.PATH_EXPRESSION_EVALUATED ) );
  }

  /**
   * retrieves the results of last evaluation
   *
   * @return a list containing the nodes selected by the last XPath expression
   *         evaluation
   */
  public List getLastEvaluationResults(  )
  {
    return evaluationResults;
  }

  /**
   * selects the given node in the AST
   *
   * @param node node to be selected
   * @param selector object which requests the selection
   */
  public void selectNode( SimpleNode node, Object selector )
  {
    fireViewerModelEvent(
      new ViewerModelEvent( selector, ViewerModelEvent.NODE_SELECTED, node ) );
  }

  /**
   * appends the given fragment to the XPath expression
   *
   * @param pathFragment fragment to be added
   * @param appender object that is trying to append the fragment
   */
  public void appendToXPathExpression( String pathFragment, Object appender )
  {
    fireViewerModelEvent(
      new ViewerModelEvent(
        appender, ViewerModelEvent.PATH_EXPRESSION_APPENDED, pathFragment ) );
  }

  /**
   * adds a listener to the model
   *
   * @param l listener to be added
   */
  public void addViewerModelListener( ViewerModelListener l )
  {
    listeners.add( l );
  }

  /**
   * removes the lisetener from the model
   *
   * @param l listener to be removed
   */
  public void removeViewerModelListener( ViewerModelListener l )
  {
    listeners.remove( l );
  }

  /**
   * notifes all listener of a change in the model
   *
   * @param e change's reason
   */
  protected void fireViewerModelEvent( ViewerModelEvent e )
  {
    for ( int i = 0; i < listeners.size(  ); i++ )
    {
      ( (ViewerModelListener)listeners.elementAt( i ) ).viewerModelChanged( e );
    }
  }
}


/*
 * $Log: ViewerModel.java,v $ * Revision 1.4  2004/04/12 17:35:09  tomcopeland * Cleaned up imports *
 * Revision 1.3  2004/04/12 17:23:29  tomcopeland
 * Moving all explicit JavaParser creations over to a factory-ish sort of thing.  This makes the version of the parser explicit rather than assumed.
 *
 * Revision 1.2  2003/09/23 20:51:06  tomcopeland
 * Cleaned up imports
 *
 * Revision 1.1  2003/09/23 20:32:42  tomcopeland
 * Added Boris Gruschko's new AST/XPath viewer
 *
 * Revision 1.1  2003/09/24 01:33:03  bgr
 * moved to a new package
 *
 * Revision 1.3  2003/09/24 00:40:35  bgr
 * evaluation results browsing added
 *
 * Revision 1.2  2003/09/23 07:52:16  bgr
 * menus added
 *
 * Revision 1.1  2003/09/22 05:21:54  bgr
 * initial commit
 *
 */

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -