//---------------------------------------------------------------------------- // COMPONENT NAME: LPEX Editor // // © Copyright IBM Corporation 2005, 2008 // All Rights Reserved. // // DESCRIPTION: // ClockCommand - sample user-defined command (clock) //---------------------------------------------------------------------------- package com.ibm.lpex.samples; import com.ibm.lpex.core.LpexCommand; import com.ibm.lpex.core.LpexView; /** * Sample command <b>clock</b> - time the execution of an editor command. * Note that the (wall clock) time displayed is approximate at best, and it * might well reflect more of the Java class loading, memory management, garbage * collection, and JIT progress than any actual LPEX command execution time. * This command cannot replace a real tracing utility. * * <p>Here is the ClockCommand * <a href="doc-files/ClockCommand.java.html">source code</a>.</p> * * <p>To run this sample: * <ul> * <li>Define this user command via an editor preference page, where available, * or from the editor command line: * <pre>set commandClass.clock com.ibm.lpex.samples.ClockCommand</pre></li> * <li>Run it from the editor command line, for example: * <pre>clock parse all</pre></li> * </ul></p> * * @see com.ibm.lpex.samples All the samples */ public class ClockCommand implements LpexCommand { /** * Runs this command. * Displays the approximate time used to run an editor command. * It times the execution of the command specified in the parameters * followed by the <b>screenShow view</b> command. * * @param lpexView the document view in which the command was issued * @param parameters the editor command to run */ public boolean doCommand(LpexView lpexView, String parameters) { if (lpexView != null) { if ("?".equals(parameters.trim())) // command help { lpexView.doCommand("set messageText Syntax: clock [<editor command>]"); return true; } // clear message line lpexView.doCommand("set messageText"); // time the command (-as- use JDK 1.5's System.nanoTime()?!) long start = System.currentTimeMillis(); // ms since 1/1/1970 00:00:00 UTC lpexView.doCommand(parameters); lpexView.doCommand("screenShow view"); // include view's screen refresh long end = System.currentTimeMillis(); // keep any new message String msg = lpexView.query("messageText"); if (msg == null) { msg = ""; } // remove any extra timing of clocking ourselves :-) else if (msg.startsWith("[")) { int i = msg.indexOf("ms] "); if (i > 0) { msg = msg.substring(i + "ms] ".length()); } } // display result lpexView.doCommand("set messageText [" + (end-start) + "ms] " + msg); } return true; } }