diff options
Diffstat (limited to 'systemtap/org.eclipse.linuxtools.callgraph.core/src/org/eclipse/linuxtools/internal/callgraph/core/SystemTapParser.java')
-rw-r--r-- | systemtap/org.eclipse.linuxtools.callgraph.core/src/org/eclipse/linuxtools/internal/callgraph/core/SystemTapParser.java | 610 |
1 files changed, 305 insertions, 305 deletions
diff --git a/systemtap/org.eclipse.linuxtools.callgraph.core/src/org/eclipse/linuxtools/internal/callgraph/core/SystemTapParser.java b/systemtap/org.eclipse.linuxtools.callgraph.core/src/org/eclipse/linuxtools/internal/callgraph/core/SystemTapParser.java index 7356689d6a..e558a220a0 100644 --- a/systemtap/org.eclipse.linuxtools.callgraph.core/src/org/eclipse/linuxtools/internal/callgraph/core/SystemTapParser.java +++ b/systemtap/org.eclipse.linuxtools.callgraph.core/src/org/eclipse/linuxtools/internal/callgraph/core/SystemTapParser.java @@ -22,309 +22,309 @@ import org.eclipse.core.runtime.Status; import org.eclipse.core.runtime.jobs.Job; public abstract class SystemTapParser extends Job { - protected IProgressMonitor monitor; - protected String sourcePath; - protected String viewID; - protected SystemTapView view; - protected boolean realTime = false; - protected Object data; - protected Object internalData; - private String secondaryID = ""; //$NON-NLS-1$ - - public boolean done; - - public SystemTapParser() { - super("Parsing data"); //$NON-NLS-1$ - this.sourcePath = PluginConstants.getDefaultIOPath(); - this.viewID = null; - initialize(); - done = false; - - //PURELY FOR TESTING - if (monitor == null){ - monitor = new NullProgressMonitor(); - } - } - - - public SystemTapParser(String name, String filePath) { - super(name); - // BY DEFAULT READ/WRITE FROM HERE - if (filePath != null) { - this.sourcePath = filePath; - } else { - this.sourcePath = PluginConstants.getDefaultIOPath(); - } - this.viewID = null; - initialize(); - } - - - /** - * Initialize will be called in the constructors for this class. Use this - * method to initialize variables. - */ - protected abstract void initialize(); - - - /** - * Implement this method to execute parsing. The return from - * executeParsing() will be the return value of the run command. - * - * SystemTapParser will call executeParsing() within its run method. (i.e. - * will execute in a separate, non-UI thread) - * - * @return - */ - public abstract IStatus nonRealTimeParsing(); - - - /** - * Implement this method if your parser is to execute in realtime. This method - * will be called as part of a while loop in a separate Job. Use the setInternalData - * method to initialize some data object for use in realTimeParsing. The default - * setInternalMethod method will set internalData to a BufferedReader - * <br> <br> - * After the isDone flag is set to true, the realTimeParsing() method will - * be run one more time to catch any stragglers. - */ - public abstract IStatus realTimeParsing(); - - - /** - * Cleans names of form 'name").return', returning just the name - * - * @param name - */ - protected String cleanFunctionName(String name) { - return name.split("\"")[0]; //$NON-NLS-1$ - } - - /** - * Checks for quotations and brackets in the function name - * - * @param name - */ - protected boolean isFunctionNameClean(String name) { - if (name.contains("\"") || name.contains(")")) //$NON-NLS-1$ //$NON-NLS-2$ - return false; - return true; - } - - /** - * Creates a popup error dialog in a separate UI thread. Dialog title is - * 'Unexpected symbol,' name is 'ParseError' and body is the specified - * message. - * - * @param message - */ - protected void parsingError(String message) { - SystemTapUIErrorMessages mess = new SystemTapUIErrorMessages( - Messages.getString("SystemTapParser.ParseErr"), //$NON-NLS-1$ - Messages.getString("SystemTapParser.ErrSymbol"), //$NON-NLS-1$ - message); - mess.schedule(); - } - - /** - * Load the specified viewID by creating a StapUIJob. Does not return until the StapUIJob has. - * Returns true if the makeView was successful, false otherwise. - */ - private boolean makeView() { - // Create a UIJob to handle the rest - if (viewID != null && viewID.length() > 0) { - try { - StapUIJob uijob = new StapUIJob( - Messages.getString("StapGraphParser.JobName"), this, viewID); //$NON-NLS-1$ - uijob.schedule(); - uijob.join(); - view = uijob.getViewer(); - return true; - } catch (InterruptedException e) { - e.printStackTrace(); - } - } - return false; - } - - @Override - protected IStatus run(IProgressMonitor monitor) { - // Generate real-time job - IStatus returnStatus = Status.CANCEL_STATUS; - this.monitor = monitor; - if (this.monitor == null) { - this.monitor = new NullProgressMonitor(); - } - - makeView(); - if (realTime) { - try { - setInternalData(); - while (!done){ - returnStatus = realTimeParsing(); - if (monitor.isCanceled() || returnStatus == Status.CANCEL_STATUS) { - done = true; - return Status.CANCEL_STATUS; - } - - Thread.sleep(500); - } - if (!monitor.isCanceled()) returnStatus = realTimeParsing(); - done = true; - return returnStatus; - } catch (InterruptedException e) { - SystemTapUIErrorMessages m = new SystemTapUIErrorMessages( - Messages.getString("SystemTapParser.InternalData"), //$NON-NLS-1$ - Messages.getString("SystemTapParser.FailedToSetData"), //$NON-NLS-1$ - Messages.getString("SystemTapParser.FailedToSetDataMessage")); //$NON-NLS-1$ - m.schedule(); - return Status.CANCEL_STATUS; - } catch (FileNotFoundException e) { - SystemTapUIErrorMessages m = new SystemTapUIErrorMessages( - Messages.getString("SystemTapParser.InternalData"), //$NON-NLS-1$ - Messages.getString("SystemTapParser.FailedToSetData"), //$NON-NLS-1$ - Messages.getString("SystemTapParser.FailedToSetDataMessage")); //$NON-NLS-1$ - m.schedule(); - return Status.CANCEL_STATUS; - } - } else { - returnStatus = nonRealTimeParsing(); - if (!returnStatus.isOK()){ - return returnStatus; - } - - setData(this); - return returnStatus; - } - - } - - /** - * For easier JUnit testing only. Allows public access to run method without - * scheduling an extra job. - * - * @param m - * @return - */ - public IStatus testRun(IProgressMonitor m, boolean realTime) { - try { - internalData = new BufferedReader(new FileReader(new File( - sourcePath))); - if (realTime) { - return realTimeParsing(); - } else { - return nonRealTimeParsing(); - } - } catch (FileNotFoundException e) { - e.printStackTrace(); - } - return Status.CANCEL_STATUS; - } - - - /** - * @return the Data object - */ - public Object getData() { - return data; - } - - /** - * Generic method for setting the internalData object. This will be called - * by a real-time-parser immediately before its main polling loop. By default, - * this method will attempt to create a bufferedReader around File(filePath) - * @throws FileNotFoundException - */ - protected void setInternalData() throws FileNotFoundException { - File file = new File(sourcePath); - internalData = new BufferedReader(new FileReader(file)); - } - - /** - * Gets the file to read from - * - * @return - */ - public String getFile() { - return sourcePath; - } - - /** - * Sets the file to read from - * - * @param source - */ - public void setSourcePath(String source) { - this.sourcePath = source; - } - - /** - * Will terminate the parser at the next opportunity (~once every 0.5s)s - * - * @param val - */ - public void setDone(boolean val) { - done = val; - } - - public void setMonitor(IProgressMonitor m) { - this.monitor = m; - } - - /** - * Set whether or not this parser runs in real time. If viewID has already - * been set, this will also attempt to open the view. - */ - public void setRealTime(boolean val) { - realTime = val; - - } - - /** - * Set the viewID to use for this parser -- see the callgraph.core view - * extension point. If realTime is set to true, this will also attempt to - * open the view. - */ - public void setViewID(String value) { - viewID = value; - } - - /** - * Called at the end of a non-realtime run. - * Feel free to override this method if using non-realtime functions. - * The setData method will be called after executeParsing() is run. - * The getData() method will be used by the SystemTapView to get the - * data associated with this parser. - * <br><br> - * Alternatively, you can cast the parser within SystemTapView to your - * own parser class and access its data structures that way. - */ - public void setData(Object obj) { - data = obj; - } - - /** - * Sends a message to cancel the job. Job may not terminate immediately. - */ - public void cancelJob() { - done = true; - } - - public boolean isDone() { - return done; - } - - public void setKillButtonEnabled(boolean val) { - if (view != null) { - view.setKillButtonEnabled(val); - } - } - - public void setSecondaryID(String secondaryID) { - this.secondaryID = secondaryID; - } - - public String getSecondaryID() { - return secondaryID; - } + protected IProgressMonitor monitor; + protected String sourcePath; + protected String viewID; + protected SystemTapView view; + protected boolean realTime = false; + protected Object data; + protected Object internalData; + private String secondaryID = ""; //$NON-NLS-1$ + + public boolean done; + + public SystemTapParser() { + super("Parsing data"); //$NON-NLS-1$ + this.sourcePath = PluginConstants.getDefaultIOPath(); + this.viewID = null; + initialize(); + done = false; + + //PURELY FOR TESTING + if (monitor == null){ + monitor = new NullProgressMonitor(); + } + } + + + public SystemTapParser(String name, String filePath) { + super(name); + // BY DEFAULT READ/WRITE FROM HERE + if (filePath != null) { + this.sourcePath = filePath; + } else { + this.sourcePath = PluginConstants.getDefaultIOPath(); + } + this.viewID = null; + initialize(); + } + + + /** + * Initialize will be called in the constructors for this class. Use this + * method to initialize variables. + */ + protected abstract void initialize(); + + + /** + * Implement this method to execute parsing. The return from + * executeParsing() will be the return value of the run command. + * + * SystemTapParser will call executeParsing() within its run method. (i.e. + * will execute in a separate, non-UI thread) + * + * @return + */ + public abstract IStatus nonRealTimeParsing(); + + + /** + * Implement this method if your parser is to execute in realtime. This method + * will be called as part of a while loop in a separate Job. Use the setInternalData + * method to initialize some data object for use in realTimeParsing. The default + * setInternalMethod method will set internalData to a BufferedReader + * <br> <br> + * After the isDone flag is set to true, the realTimeParsing() method will + * be run one more time to catch any stragglers. + */ + public abstract IStatus realTimeParsing(); + + + /** + * Cleans names of form 'name").return', returning just the name + * + * @param name + */ + protected String cleanFunctionName(String name) { + return name.split("\"")[0]; //$NON-NLS-1$ + } + + /** + * Checks for quotations and brackets in the function name + * + * @param name + */ + protected boolean isFunctionNameClean(String name) { + if (name.contains("\"") || name.contains(")")) //$NON-NLS-1$ //$NON-NLS-2$ + return false; + return true; + } + + /** + * Creates a popup error dialog in a separate UI thread. Dialog title is + * 'Unexpected symbol,' name is 'ParseError' and body is the specified + * message. + * + * @param message + */ + protected void parsingError(String message) { + SystemTapUIErrorMessages mess = new SystemTapUIErrorMessages( + Messages.getString("SystemTapParser.ParseErr"), //$NON-NLS-1$ + Messages.getString("SystemTapParser.ErrSymbol"), //$NON-NLS-1$ + message); + mess.schedule(); + } + + /** + * Load the specified viewID by creating a StapUIJob. Does not return until the StapUIJob has. + * Returns true if the makeView was successful, false otherwise. + */ + private boolean makeView() { + // Create a UIJob to handle the rest + if (viewID != null && viewID.length() > 0) { + try { + StapUIJob uijob = new StapUIJob( + Messages.getString("StapGraphParser.JobName"), this, viewID); //$NON-NLS-1$ + uijob.schedule(); + uijob.join(); + view = uijob.getViewer(); + return true; + } catch (InterruptedException e) { + e.printStackTrace(); + } + } + return false; + } + + @Override + protected IStatus run(IProgressMonitor monitor) { + // Generate real-time job + IStatus returnStatus = Status.CANCEL_STATUS; + this.monitor = monitor; + if (this.monitor == null) { + this.monitor = new NullProgressMonitor(); + } + + makeView(); + if (realTime) { + try { + setInternalData(); + while (!done){ + returnStatus = realTimeParsing(); + if (monitor.isCanceled() || returnStatus == Status.CANCEL_STATUS) { + done = true; + return Status.CANCEL_STATUS; + } + + Thread.sleep(500); + } + if (!monitor.isCanceled()) returnStatus = realTimeParsing(); + done = true; + return returnStatus; + } catch (InterruptedException e) { + SystemTapUIErrorMessages m = new SystemTapUIErrorMessages( + Messages.getString("SystemTapParser.InternalData"), //$NON-NLS-1$ + Messages.getString("SystemTapParser.FailedToSetData"), //$NON-NLS-1$ + Messages.getString("SystemTapParser.FailedToSetDataMessage")); //$NON-NLS-1$ + m.schedule(); + return Status.CANCEL_STATUS; + } catch (FileNotFoundException e) { + SystemTapUIErrorMessages m = new SystemTapUIErrorMessages( + Messages.getString("SystemTapParser.InternalData"), //$NON-NLS-1$ + Messages.getString("SystemTapParser.FailedToSetData"), //$NON-NLS-1$ + Messages.getString("SystemTapParser.FailedToSetDataMessage")); //$NON-NLS-1$ + m.schedule(); + return Status.CANCEL_STATUS; + } + } else { + returnStatus = nonRealTimeParsing(); + if (!returnStatus.isOK()){ + return returnStatus; + } + + setData(this); + return returnStatus; + } + + } + + /** + * For easier JUnit testing only. Allows public access to run method without + * scheduling an extra job. + * + * @param m + * @return + */ + public IStatus testRun(IProgressMonitor m, boolean realTime) { + try { + internalData = new BufferedReader(new FileReader(new File( + sourcePath))); + if (realTime) { + return realTimeParsing(); + } else { + return nonRealTimeParsing(); + } + } catch (FileNotFoundException e) { + e.printStackTrace(); + } + return Status.CANCEL_STATUS; + } + + + /** + * @return the Data object + */ + public Object getData() { + return data; + } + + /** + * Generic method for setting the internalData object. This will be called + * by a real-time-parser immediately before its main polling loop. By default, + * this method will attempt to create a bufferedReader around File(filePath) + * @throws FileNotFoundException + */ + protected void setInternalData() throws FileNotFoundException { + File file = new File(sourcePath); + internalData = new BufferedReader(new FileReader(file)); + } + + /** + * Gets the file to read from + * + * @return + */ + public String getFile() { + return sourcePath; + } + + /** + * Sets the file to read from + * + * @param source + */ + public void setSourcePath(String source) { + this.sourcePath = source; + } + + /** + * Will terminate the parser at the next opportunity (~once every 0.5s)s + * + * @param val + */ + public void setDone(boolean val) { + done = val; + } + + public void setMonitor(IProgressMonitor m) { + this.monitor = m; + } + + /** + * Set whether or not this parser runs in real time. If viewID has already + * been set, this will also attempt to open the view. + */ + public void setRealTime(boolean val) { + realTime = val; + + } + + /** + * Set the viewID to use for this parser -- see the callgraph.core view + * extension point. If realTime is set to true, this will also attempt to + * open the view. + */ + public void setViewID(String value) { + viewID = value; + } + + /** + * Called at the end of a non-realtime run. + * Feel free to override this method if using non-realtime functions. + * The setData method will be called after executeParsing() is run. + * The getData() method will be used by the SystemTapView to get the + * data associated with this parser. + * <br><br> + * Alternatively, you can cast the parser within SystemTapView to your + * own parser class and access its data structures that way. + */ + public void setData(Object obj) { + data = obj; + } + + /** + * Sends a message to cancel the job. Job may not terminate immediately. + */ + public void cancelJob() { + done = true; + } + + public boolean isDone() { + return done; + } + + public void setKillButtonEnabled(boolean val) { + if (view != null) { + view.setKillButtonEnabled(val); + } + } + + public void setSecondaryID(String secondaryID) { + this.secondaryID = secondaryID; + } + + public String getSecondaryID() { + return secondaryID; + } } |