Changeset 2218 for trunk


Ignore:
Timestamp:
11/29/17 14:55:48 (7 years ago)
Author:
pharms
Message:
  • java doc issues removal
Location:
trunk
Files:
30 edited

Legend:

Unmodified
Added
Removed
  • trunk/autoquest-core-assertions/src/main/java/de/ugoe/cs/autoquest/assertions/TextEqualsAssertEventType.java

    r927 r2218  
    1818 
    1919/** 
    20  * </p> Event type for TextEquals assertions. </p> 
     20 * <p> Event type for TextEquals assertions. </p> 
    2121 *  
    2222 * @version 1.0 
  • trunk/autoquest-core-coverage/src/main/java/de/ugoe/cs/autoquest/coverage/CoverageCalculatorObserved.java

    r927 r2218  
    8181     *            sequences for which the coverage is calculated; must not be null 
    8282     * @param length 
    83      *            length of the subsequences for which the coverage is analyzed; must be >0 
     83     *            length of the subsequences for which the coverage is analyzed; must be &gt;0 
    8484     * @throws IllegalArgumentException 
    8585     *             thrown if observedSequences or sequences is null or length less than or equal to 
  • trunk/autoquest-core-coverage/src/main/java/de/ugoe/cs/autoquest/coverage/CoverageCalculatorProcess.java

    r927 r2218  
    8686     *            sequences for which the coverage is calculated; must not be null 
    8787     * @param length 
    88      *            length of the subsequences for which the coverage is analyzed; must be >0 
     88     *            length of the subsequences for which the coverage is analyzed; must be &gt;0 
    8989     * @throws IllegalArgumentException 
    9090     *             thrown if process or sequences is null or length less than or equal to 0 
  • trunk/autoquest-core-events/src/main/java/de/ugoe/cs/autoquest/eventcore/Event.java

    r1873 r2218  
    3030 * @version 1.0 
    3131 *  
    32  * @param <T> 
    33  *            Can be used to declare that events belong to a specific platform without subclassing. 
    3432 */ 
    3533public final class Event implements Serializable { 
     
    8684     * <p> 
    8785     * List of {@link IReplayable}s of type T that describes the replay of an event. The 
    88      * {@link IReplayable}s can be interpreted as <it>sub-events</it> on the platform level that 
     86     * {@link IReplayable}s can be interpreted as sub-events on the platform level that 
    8987     * make up the abstract event. 
    9088     * </p> 
  • trunk/autoquest-core-events/src/main/java/de/ugoe/cs/autoquest/eventcore/HierarchicalEventTargetTree.java

    r2156 r2218  
    2525/** 
    2626 * <p> 
    27  * This class provides the interfaces for GUI element trees. 
     27 * This class provides the interfaces for hierarchical event target trees. 
    2828 * </p> 
    2929 * <p> 
    30  * The GUIElementTree represents the hierarchical structure of the GUI elements "as it is" 
    31  * currently during a session. It may change during the session due to creation and destruction 
    32  * of GUI elements. The parameter T represents the id type of the GUI elements that are handled 
    33  * internally. 
     30 * The HierarchicalEventTargetTree represents the hierarchical structure of the event targets 
     31 * "as it is" currently during a session. It may change during the session due to creation and 
     32 * destruction of event targets. The parameter ID represents the id type of the event targets 
     33 * that are handled internally. The other type parameters specify the concrete target type. 
    3434 * </p> 
    3535 *  
     
    4444    /** 
    4545     * <p> 
    46      * Map of all GUI elements that are part of the tree for efficient searching. The keys of the 
    47      * map are the ids of the GUI elements. 
     46     * Map of all event targets that are part of the tree for efficient searching. The keys of the 
     47     * map are the ids of the event targets. 
    4848     * </p> 
    4949     */ 
     
    5252    /** 
    5353     * <p> 
    54      * Map of all GUI element specifications that are part of the tree for efficient searching. The 
    55      * keys of the map are the ids of the GUI elements. 
     54     * Map of all event target specifications that are part of the tree for efficient searching. The 
     55     * keys of the map are the ids of the event targets. 
    5656     * </p> 
    5757     */ 
     
    6060    /** 
    6161     * <p> 
    62      * Map of all children of GUI elements that are part of the tree. The keys of the map are the 
    63      * ids of the parent GUI elements. 
     62     * Map of all children of event targets that are part of the tree. The keys of the map are the 
     63     * ids of the parent event targets. 
    6464     * </p> 
    6565     */ 
     
    6868    /** 
    6969     * <p> 
    70      * Map of all parents of GUI elements that are part of the tree. The keys of the map are the 
    71      * ids of the child GUI elements. 
     70     * Map of all parents of event targets that are part of the tree. The keys of the map are the 
     71     * ids of the child event targets. 
    7272     * </p> 
    7373     */ 
     
    8383    /** 
    8484     * <p> 
    85      * the GUI element factory used in the model 
     85     * the event target factory used in the model 
    8686     * </p> 
    8787     */ 
     
    106106    /** 
    107107     * <p> 
    108      * Adds a new GUI element to the tree. 
     108     * Adds a new event target to the tree. 
    109109     * </p> 
    110110     *  
    111111     * @param eventTargetID 
    112      *            id of the GUI element to be created 
     112     *            id of the event target to be created 
    113113     * @param parentID 
    114      *            id of the parent GUI element  
     114     *            id of the parent event target  
    115115     * @param eventTargetSpec 
    116      *            the GUI element specification 
     116     *            the event target specification 
    117117     *             
    118      * @throws EventTargetModelException if the GUI element can not be added to the underlying GUI model 
     118     * @throws EventTargetModelException if the event target can not be added to the underlying GUI model 
    119119     */ 
    120120    public void add(ID               eventTargetID, 
     
    159159    /** 
    160160     * <p> 
    161      * Searches the tree for a GUI element with the specified id and returns its 
     161     * Searches the tree for a event target with the specified id and returns its 
    162162     * {@link IGUIElement} . 
    163163     * </p> 
     
    165165     * @param id 
    166166     *            id that is looked for 
    167      * @return {@link IGUIElementSpec} of the GUI element with the given id if found, null otherwise 
     167     * @return {@link IEventTargetSpec} of the event target with the given id if found, null otherwise 
    168168     */ 
    169169    public TARGET_TYPE find(ID id) { 
     
    173173    /** 
    174174     * <p> 
    175      * Returns the id of the provided {@link IGUIElement}. The comparison is performed using the 
    176      * equals method of the GUI element. 
     175     * Returns the id of the provided {@link IHierachicalEventTarget}. The comparison is performed using the 
     176     * equals method of the event target. 
    177177     * </p> 
    178178     *  
    179179     * @param eventTarget 
    180180     *            guiElement that is looked for 
    181      * @return the id of the GUI element, null if the GUI element can not be found 
     181     * @return the id of the event target, null if the event target can not be found 
    182182     */ 
    183183    public ID find(TARGET_TYPE eventTarget) { 
     
    193193    /** 
    194194     * <p> 
    195      * Removes a GUI element (defined by its id) from the tree. All children of the GUI element will be 
     195     * Removes a event target (defined by its id) from the tree. All children of the event target will be 
    196196     * removed recursively. 
    197197     * </p> 
    198198     *  
    199199     * @param id 
    200      *            id of the GUI element to be removed 
    201      * @return number of GUI elements that were removed 
     200     *            id of the event target to be removed 
     201     * @return number of event targets that were removed 
    202202     */ 
    203203    public int remove(ID id) { 
  • trunk/autoquest-core-events/src/main/java/de/ugoe/cs/autoquest/eventcore/IReplayable.java

    r927 r2218  
    2121/** 
    2222 * <p> 
    23  * This interface is used by {@link ReplayableEvent}to describe how events can 
     23 * This interface is used by replayable events to describe how events can 
    2424 * be replayed. It can be used to define a sequence of fine-grained platform 
    2525 * events that make up an abstract event. 
  • trunk/autoquest-core-events/src/main/java/de/ugoe/cs/autoquest/eventcore/gui/KeyInteractionCorrector.java

    r927 r2218  
    3030 * This class provides the functionality to sort and clean up all key interactions in a log. In 
    3131 * particular: 
     32 * </p> 
    3233 * <ol> 
    3334 * <li>In case a combination key (e.g., shift, alt, control) is held down, multiple 
     
    4849 * events for all combination keys.</li> 
    4950 * </ol> 
    50  * </p> 
    5151 *  
    5252 * @version 1.0 
  • trunk/autoquest-core-events/src/main/java/de/ugoe/cs/autoquest/eventcore/guimodel/GUIElementGroup.java

    r2146 r2218  
    4141     * </p> 
    4242     * 
    43      * @param groupName        the name of the GUI element group 
    44      * @param parent           the optional parent GUI element of the group 
    45      * @param eventTargetModel the GUI model to which the group will belong 
     43     * @param groupName  the name of the GUI element group 
     44     * @param parent     the optional parent GUI element of the group 
     45     * @param guiModel  the GUI model to which the group will belong 
    4646     */ 
    4747    public GUIElementGroup(String      groupName, 
  • trunk/autoquest-core-events/src/main/java/de/ugoe/cs/autoquest/eventcore/guimodel/GUIModel.java

    r2146 r2218  
    2222/** 
    2323 * <p> 
    24  * A GUI model is a tree of {@link IGUIElements} and represents a complete GUI of a software. It is 
     24 * A GUI model is a tree of {@link IGUIElement}s and represents a complete GUI of a software. It is 
    2525 * platform independent. It may have several root nodes, as some GUIs are made up of several Frames 
    2626 * being independent from each other. The GUI model is filled using the 
  • trunk/autoquest-core-events/src/main/java/de/ugoe/cs/autoquest/eventcore/guimodel/IGUIElement.java

    r2146 r2218  
    107107     * </p> 
    108108     *  
    109      * @param guiElement 
     109     * @param otherElement 
    110110     *            the GUI element to measure the distance for 
    111111     */ 
  • trunk/autoquest-core-tasktrees/src/main/java/de/ugoe/cs/autoquest/tasktrees/taskequality/TaskEquality.java

    r1887 r2218  
    1919 * A task equality denotes, how equal two tasks are. There are different equality levels 
    2020 * which are similar to the usual design levels of GUI design. These levels are 
     21 * </p> 
    2122 * <ul> 
    2223 *   <li>conceptual design: defines the concepts to be edited using a GUI</li> 
     
    2627 *       can be performed</li> 
    2728 * </ul> 
     29 * <p> 
    2830 * It is not possible to compare two tasks conceptually. But the other design levels can be 
    2931 * identified and compared. 
  • trunk/autoquest-core-tasktrees/src/main/java/de/ugoe/cs/autoquest/tasktrees/taskequality/TaskEqualityRuleManager.java

    r2161 r2218  
    9292     * @return as described 
    9393     *  
    94      * @throws IllegalStateException in the case, the {@link #init()} method was not called on the 
    95      *                               manager before a call to this method. 
     94     * @throws IllegalStateException in the case, the object is not correctly initialized 
    9695     */ 
    9796    public TaskEquality compare(ITask task1, ITask task2) 
     
    132131     * @return as described 
    133132     *  
    134      * @throws IllegalStateException in the case, the {@link #init()} method was not called on the 
    135      *                               manager before a call to this method. 
     133     * @throws IllegalStateException in the case, the object is not correctly initialized 
    136134     */ 
    137135    public boolean areAtLeastEqual(ITask task1, ITask task2, TaskEquality equalityLevel) { 
     
    168166     * @return as described 
    169167     *  
    170      * @throws IllegalStateException in the case, the {@link #init()} method was not called on the 
    171      *                               manager before a call to this method. 
     168     * @throws IllegalStateException in the case, the object is not correctly initialized 
    172169     */ 
    173170    public boolean areIdentical(ITask task1, ITask task2) { 
     
    197194     * @return as described 
    198195     *  
    199      * @throws IllegalStateException in the case, the {@link #init()} method was not called on the 
    200      *                               manager before a call to this method. 
     196     * @throws IllegalStateException in the case, the object is not correctly initialized 
    201197     */ 
    202198    public boolean areLexicallyEqual(ITask task1, ITask task2) { 
     
    226222     * @return as described 
    227223     *  
    228      * @throws IllegalStateException in the case, the {@link #init()} method was not called on the 
    229      *                               manager before a call to this method. 
     224     * @throws IllegalStateException in the case, the object is not correctly initialized 
    230225     */ 
    231226    public boolean areSyntacticallyEqual(ITask task1, ITask task2) { 
     
    255250     * @return as described 
    256251     *  
    257      * @throws IllegalStateException in the case, the {@link #init()} method was not called on the 
    258      *                               manager before a call to this method. 
     252     * @throws IllegalStateException in the case, the object is not correctly initialized 
    259253     */ 
    260254    public boolean areSemanticallyEqual(ITask task1, ITask task2) { 
     
    285279     * @return as described 
    286280     *  
    287      * @throws IllegalStateException in the case, the {@link #init()} method was not called on the 
    288      *                               manager before a call to this method. 
     281     * @throws IllegalStateException in the case, the object is not correctly initialized 
    289282     */ 
    290283    public TaskEquality compare(ITaskInstance instance1, ITaskInstance instance2) 
     
    325318     * @return as described 
    326319     *  
    327      * @throws IllegalStateException in the case, the {@link #init()} method was not called on the 
    328      *                               manager before a call to this method. 
     320     * @throws IllegalStateException in the case, the object is not correctly initialized 
    329321     */ 
    330322    public boolean areAtLeastEqual(ITaskInstance        instance1, 
     
    364356     * @return as described 
    365357     *  
    366      * @throws IllegalStateException in the case, the {@link #init()} method was not called on the 
    367      *                               manager before a call to this method. 
     358     * @throws IllegalStateException in the case, the object is not correctly initialized 
    368359     */ 
    369360    public boolean areIdentical(ITaskInstance instance1, ITaskInstance instance2) { 
     
    395386     * @return as described 
    396387     *  
    397      * @throws IllegalStateException in the case, the {@link #init()} method was not called on the 
    398      *                               manager before a call to this method. 
     388     * @throws IllegalStateException in the case, the object is not correctly initialized 
    399389     */ 
    400390    public boolean areLexicallyEqual(ITaskInstance instance1, ITaskInstance instance2) { 
     
    426416     * @return as described 
    427417     *  
    428      * @throws IllegalStateException in the case, the {@link #init()} method was not called on the 
    429      *                               manager before a call to this method. 
     418     * @throws IllegalStateException in the case, the object is not correctly initialized 
    430419     */ 
    431420    public boolean areSyntacticallyEqual(ITaskInstance instance1, ITaskInstance instance2) { 
     
    457446     * @return as described 
    458447     *  
    459      * @throws IllegalStateException in the case, the {@link #init()} method was not called on the 
    460      *                               manager before a call to this method. 
     448     * @throws IllegalStateException in the case, the object is not correctly initialized 
    461449     */ 
    462450    public boolean areSemanticallyEqual(ITaskInstance instance1, ITaskInstance instance2) { 
  • trunk/autoquest-core-tasktrees/src/main/java/de/ugoe/cs/autoquest/tasktrees/temporalrelation/TaskSymbolBucketedMap.java

    r2129 r2218  
    5454 * </p> 
    5555 *  
    56  * @see SymbolComparator 
     56 * @see TaskComparator 
    5757 *  
    5858 * @author Patrick Harms 
  • trunk/autoquest-core-tasktrees/src/main/java/de/ugoe/cs/autoquest/tasktrees/temporalrelation/TemporalRelationshipRuleManager.java

    r2132 r2218  
    4040 * </p> 
    4141 * <p>The class holds references to the appropriate {@link ITaskInstanceScopeRule}s and calls 
    42  * their {@link ITaskInstanceScopeRule#apply(ITask, ITaskBuilder, ITaskFactory, boolean)} 
     42 * their {@link ITaskInstanceScopeRule#apply(de.ugoe.cs.autoquest.tasktrees.treeifc.ITaskInstance)} 
    4343 * method for each task in the task tree it is needed for. The general behavior of this class is 
    4444 * the following: 
     45 * </p> 
    4546 * <ol> 
    4647 *   <li> 
     
    4950 *   </li> 
    5051 *   <li> 
    51  *     then the {@link #applyRules(ITask, ITaskBuilder, ITaskFactory, boolean)} 
     52 *     then the {@link #applyTaskDetectionRule(List, TaskEquality, int)} 
    5253 *     method is called for a so far unstructured task 
    5354 *   </li> 
     
    7778 *   </li> 
    7879 * </ol> 
     80 * <p> 
    7981 * Through this, all rules are tried to be applied at least once to the provided parent task and 
    8082 * all parent tasks created during the rule application. 
  • trunk/autoquest-core-tasktrees/src/main/java/de/ugoe/cs/autoquest/tasktrees/treeifc/ITaskBuilder.java

    r1766 r2218  
    252252     * @param oldChild the child to replace 
    253253     * @param newChild the replacement for the child 
    254      *  
    255      * @throws as described 
    256254     */ 
    257255    void replaceChild(ISelection parent, ITask oldChild, ITask newChild); 
  • trunk/autoquest-core-testgeneration/src/main/java/de/ugoe/cs/autoquest/testgeneration/DrawFromAllSequencesGenerator.java

    r927 r2218  
    8181     * Constructor. Creates a new DrawFromAllSequencesGenerator and ensures the validity of the 
    8282     * parameters: 
     83     * </p> 
    8384     * <ul> 
    8485     * <li>numSequences must at least be 1 
     
    8687     * <li>minLength must be less than or equal to maxLength 
    8788     * </ul> 
     89     * <p> 
    8890     * If one of these conditions is violated an {@link IllegalArgumentException} is thrown. 
    8991     * </p> 
  • trunk/autoquest-core-testgeneration/src/main/java/de/ugoe/cs/autoquest/testgeneration/HybridGenerator.java

    r927 r2218  
    7070     * <p> 
    7171     * Constructor. Creates a new HybridGenerator and ensures the validity of the parameters: 
     72     * </p> 
    7273     * <ul> 
    7374     * <li>numSequences must at least be 1 
    7475     * <li>length must be at least 1 
    7576     * </ul> 
     77     * <p> 
    7678     * If one of these conditions is violated an {@link IllegalArgumentException} is thrown. 
    7779     * </p> 
  • trunk/autoquest-core-testgeneration/src/main/java/de/ugoe/cs/autoquest/testgeneration/RandomWalkGenerator.java

    r2026 r2218  
    9090     * <p> 
    9191     * Constructor. Creates a new RandomWalkGenerator and ensures the validity of the parameters: 
     92     * </p> 
    9293     * <ul> 
    9394     * <li>numSequences must at least be 1 
     
    9697     * <li>maxIter must be greater than or equal to numSequences 
    9798     * </ul> 
     99     * <p> 
    98100     * If one of these conditions is violated an {@link IllegalArgumentException} is thrown. 
    99101     * </p> 
  • trunk/autoquest-core-usageprofiles/src/main/java/de/ugoe/cs/autoquest/usageprofiles/IStochasticProcess.java

    r2026 r2218  
    8989     * Generates a random sequence of events. The sequence starts with {@link Event#STARTEVENT} and 
    9090     * finishes with 
     91     * </p> 
    9192     * <ul> 
    9293     * <li>{@link Event#ENDEVENT} if validEnd==true.</li> 
     
    9596     * is reached and the final event of the sequence must not be {@link Event#ENDEVENT}.</li> 
    9697     * </ul> 
    97      * </p> 
    9898     *  
    9999     * @param maxLength 
  • trunk/autoquest-core-usageprofiles/src/main/java/de/ugoe/cs/autoquest/usageprofiles/InvertedHighOrderMarkovModel.java

    r2049 r2218  
    5858     * <p> 
    5959     * Calculates the probability of the next Event being symbol based on the order of the Markov 
    60      * model. The order is defined in the constructor {@link #HighOrderMarkovModel(int, Random)}. 
     60     * model. The order is defined in the constructor {@link #InvertedHighOrderMarkovModel(int, Random)}. 
    6161     * </p> 
    6262     *  
  • trunk/autoquest-core-usageprofiles/src/main/java/de/ugoe/cs/autoquest/usageprofiles/ModelFlattener.java

    r927 r2218  
    3030 * <p> 
    3131 * If possible, the normal high-order markov model should be used, as the Events may be broken by 
    32  * the flattener, as, e.g., the information {@link ReplayableEvent}s contain is not preserved. 
     32 * the flattener, as, e.g., the information replayable events contain is not preserved. 
    3333 * </p> 
    3434 *  
  • trunk/autoquest-core-usageprofiles/src/main/java/de/ugoe/cs/autoquest/usageprofiles/SymbolComparator.java

    r1282 r2218  
    3131     * symbols as equal. The method must be commutative and transitive, i.e., 
    3232     * <code>equals(symbol1, symbol2) == equals(symbol2, symbol1)</code> and 
    33      * <code>if (equals(symbol1, symbol2) && equals(symbol2, symbol3)) then 
     33     * <code>if (equals(symbol1, symbol2) &amp;&amp; equals(symbol2, symbol3)) then 
    3434     * equals(symbol1, symbol3)</code>. 
    3535     * </p> 
  • trunk/autoquest-core-usageprofiles/src/main/java/de/ugoe/cs/autoquest/usageprofiles/SymbolMap.java

    r1282 r2218  
    3737 * @author Patrick Harms 
    3838 *  
    39  * @param <T> 
     39 * @param <K> 
    4040 *            Type of the symbols that are stored 
    4141 * @param <V> 
     
    104104     * @param value  the value to associate to the symbol in this map 
    105105     *  
    106      * @return as described 
    107      *  
    108106     * @throws IllegalArgumentException if the provided symbol is null 
    109107     */ 
  • trunk/autoquest-core-usageprofiles/src/main/java/de/ugoe/cs/autoquest/usageprofiles/Trie.java

    r1282 r2218  
    2929/** 
    3030 * <p> 
    31  * This class implements a <it>trie</it>, i.e., a tree of sequences that represents the occurrence 
     31 * This class implements a trie, i.e., a tree of sequences that represents the occurrence 
    3232 * of subsequences up to a predefined length. This length is the trie order. 
    3333 * </p> 
  • trunk/autoquest-misc/src/main/java/de/ugoe/cs/autoquest/keyboardmaps/VirtualKey.java

    r1701 r2218  
    468468     * </p> 
    469469     *  
    470      * @param numberString 
     470     * @param string 
    471471     *            String representation of the virtual key 
    472472     * @return created VirtualKey 
  • trunk/autoquest-plugin-core/src/main/java/de/ugoe/cs/autoquest/plugin/PluginLoader.java

    r1100 r2218  
    132132         * Retrieves the classpath from a Jar file's MANIFEST. 
    133133         * </p> 
    134          *  
    135          * @throws IOException 
    136          * @throws FileNotFoundException 
    137134         */ 
    138135        protected String[] getClassPathFromJar(File jarFile) { 
  • trunk/autoquest-plugin-http/src/main/java/de/ugoe/cs/autoquest/plugin/http/HTTPLogParser.java

    r2211 r2218  
    3636import javax.xml.transform.stream.StreamSource; 
    3737 
    38 import org.xml.sax.SAXException; 
    39  
    4038import de.ugoe.cs.autoquest.eventcore.Event; 
    4139import de.ugoe.cs.autoquest.eventcore.IEventType; 
     
    135133     *            name and path of the log file 
    136134     * 
    137      * @throws SAXException in the case, the file could not be parsed 
     135     * @throws JAXBException in the case, the file could not be parsed 
    138136     */ 
    139137    public void parseFile(String filename) throws JAXBException { 
  • trunk/autoquest-ui-core/src/main/java/de/ugoe/cs/autoquest/commands/sequences/CMDsortKeyInteractions.java

    r927 r2218  
    3333 * Command to sort the key interactions in a sequence of events. An example, the sequence to write 
    3434 * the upper case D 
     35 * </p> 
    3536 * <ul> 
    3637 * <li>press shift key</li> 
     
    4041 * </ul> 
    4142 *  
     43 * <p> 
    4244 * is transformed to the sequence 
     45 * </p> 
    4346 *  
    4447 * <ul> 
     
    4952 * </ul> 
    5053 *  
     54 * <p> 
    5155 * in which the first pressed key (shift in this case) is always released last. The same is done for 
    5256 * the alt and the ctrl keys. 
    53  *  
    5457 * </p> 
    5558 *  
  • trunk/autoquest-ui-swt/src/main/java/de/ugoe/cs/autoquest/ui/swt/MainWindow.java

    r1495 r2218  
    7373     * Open the window. 
    7474     * </p> 
    75      *  
    76      * @wbp.parser.entryPoint 
    7775     */ 
    7876    public void open() { 
  • trunk/autoquest-ui-swt/src/main/java/de/ugoe/cs/autoquest/ui/swt/ShowTaskTreeDialog.java

    r2183 r2218  
    153153    /** 
    154154     * displays the dialog 
    155      * @param task  
    156155     */ 
    157156    public void open() { 
Note: See TracChangeset for help on using the changeset viewer.