<style> /* Shared Styles */ .event-sequence-grid, .event-sequence-list { font-family: sans-serif; } .event-sequence-grid table, table.event-sequence-list { border-collapse: collapse; } .event-sequence-list td, .event-sequence-grid td { line-height: 1; padding: 2px 10px 2px 10px; white-space: nowrap; text-align: center; } /* Grid-only styles */ .event-sequence-grid .content-cell { border: 1px solid black; } .event-sequence-grid .row-header { text-align: left; } .event-sequence-grid .column-header > div { width: 10px; -moz-transform: perspective(999px) /* Helps with the font distortion */ translate(20px, 0px) rotate(-45deg); -moz-transform-origin: left bottom; -ms-transform: translate(21px, 0px) rotate(-45deg); -ms-transform-origin: left bottom; -webkit-transform: translate(21px, 2px) rotate(-45deg); -webkit-transform-origin: left bottom; -o-transform: translate(21px, 0px) rotate(-45deg); -o-transform-origin: left bottom; } .event-sequence-grid .column-header span { border-bottom: 1px solid black; } /* Floating column styles */ .event-sequence-grid .wrapper { position: relative; width: 100%; overflow: hidden; } .event-sequence-grid .floating-col { display: inline-block; position: absolute; overflow: hidden; border-right: 1px solid black; z-index: 1; } .event-sequence-grid .inner-wrapper { position: relative; } .event-sequence-grid .hidden-spacer { position: relative; display: inline-block; } .event-sequence-grid .table-body { overflow-x: scroll; } .event-sequence-grid .table-body table { position: relative; display: inline-block; } .event-sequence-grid .floating-col td { background-color: white; border: 1px solid black; } .event-sequence-grid .floating-col td.first { } /* List-only styles */ table.event-sequence-list { margin-top: 20px; } .event-sequence-list td { border: 1px solid black; } </style> <h1>Event sequence generated by Umple from simple_multiple_class_multiple_sm.ump</h1> <p>Note that the sequence of events is randomly generated. Subsequential event generation will likely yield different results.</p> <h2>Class SimpleFirst state machine sm11</h2> <div class="event-sequence-grid"> <div id="wrapper0" class="wrapper"> <div class="floating-col"> <table> <tr> <td class="row-header first">States</td> </tr> <tr> <td class="row-header" data-parent="">s111</td> </tr> <tr> <td class="row-header" data-parent="">s112</td> </tr> </table> </div> <div class="table-body"> <div class="inner-wrapper"> <table> <tr> <td class="column-header"><div><span>START</span></div></td> <td class="column-header"><div><span>1. ev111</span></div></td> </tr> <tr> <td class="content-cell" data-parent="">X</td> <td class="content-cell"> </td> </tr> <tr> <td class="content-cell" data-parent=""> </td> <td class="content-cell">X</td> </tr> </table> </div> </div> </div> </div> <table class="event-sequence-list"> <tr> <td class="column-header">Event<br>Number</td> <td class="column-header">Event</td> <td class="column-header">Next State</td> </tr> <tr> <td class="">START</td> <td class="">-</td> <td class="">s111</td> </tr> <tr> <td class="">1</td> <td class="">ev111</td> <td class="">s112</td> </tr> </table> <p>Event sequence ending reason: Visited all states</p> <h2>Class SimpleFirst state machine sm12</h2> <div class="event-sequence-grid"> <div id="wrapper1" class="wrapper"> <div class="floating-col"> <table> <tr> <td class="row-header first">States</td> </tr> <tr> <td class="row-header" data-parent="">s121</td> </tr> <tr> <td class="row-header" data-parent="">s122</td> </tr> </table> </div> <div class="table-body"> <div class="inner-wrapper"> <table> <tr> <td class="column-header"><div><span>START</span></div></td> <td class="column-header"><div><span>1. ev121</span></div></td> </tr> <tr> <td class="content-cell" data-parent="">X</td> <td class="content-cell"> </td> </tr> <tr> <td class="content-cell" data-parent=""> </td> <td class="content-cell">X</td> </tr> </table> </div> </div> </div> </div> <table class="event-sequence-list"> <tr> <td class="column-header">Event<br>Number</td> <td class="column-header">Event</td> <td class="column-header">Next State</td> </tr> <tr> <td class="">START</td> <td class="">-</td> <td class="">s121</td> </tr> <tr> <td class="">1</td> <td class="">ev121</td> <td class="">s122</td> </tr> </table> <p>Event sequence ending reason: Visited all states</p> <h2>Class SimpleSecond state machine sm21</h2> <div class="event-sequence-grid"> <div id="wrapper2" class="wrapper"> <div class="floating-col"> <table> <tr> <td class="row-header first">States</td> </tr> <tr> <td class="row-header" data-parent="">s211</td> </tr> <tr> <td class="row-header" data-parent="">s212</td> </tr> </table> </div> <div class="table-body"> <div class="inner-wrapper"> <table> <tr> <td class="column-header"><div><span>START</span></div></td> <td class="column-header"><div><span>1. ev211</span></div></td> </tr> <tr> <td class="content-cell" data-parent="">X</td> <td class="content-cell"> </td> </tr> <tr> <td class="content-cell" data-parent=""> </td> <td class="content-cell">X</td> </tr> </table> </div> </div> </div> </div> <table class="event-sequence-list"> <tr> <td class="column-header">Event<br>Number</td> <td class="column-header">Event</td> <td class="column-header">Next State</td> </tr> <tr> <td class="">START</td> <td class="">-</td> <td class="">s211</td> </tr> <tr> <td class="">1</td> <td class="">ev211</td> <td class="">s212</td> </tr> </table> <p>Event sequence ending reason: Visited all states</p> <h2>Class SimpleSecond state machine sm22</h2> <div class="event-sequence-grid"> <div id="wrapper3" class="wrapper"> <div class="floating-col"> <table> <tr> <td class="row-header first">States</td> </tr> <tr> <td class="row-header" data-parent="">s221</td> </tr> <tr> <td class="row-header" data-parent="">s222</td> </tr> </table> </div> <div class="table-body"> <div class="inner-wrapper"> <table> <tr> <td class="column-header"><div><span>START</span></div></td> <td class="column-header"><div><span>1. ev221</span></div></td> </tr> <tr> <td class="content-cell" data-parent="">X</td> <td class="content-cell"> </td> </tr> <tr> <td class="content-cell" data-parent=""> </td> <td class="content-cell">X</td> </tr> </table> </div> </div> </div> </div> <table class="event-sequence-list"> <tr> <td class="column-header">Event<br>Number</td> <td class="column-header">Event</td> <td class="column-header">Next State</td> </tr> <tr> <td class="">START</td> <td class="">-</td> <td class="">s221</td> </tr> <tr> <td class="">1</td> <td class="">ev221</td> <td class="">s222</td> </tr> </table> <p>Event sequence ending reason: Visited all states</p> <script> function formatEventSequence(wrapper) { if(wrapper === undefined || wrapper.innerHTML === "") { return; } // Calculate spacer height due to slanted names var longest = 0; var last = 0; var columnHeaders = wrapper .getElementsByClassName("column-header"); for(var i = 0; i < columnHeaders.length; i++) { var innerSpan = columnHeaders[i].firstChild.firstChild; if(longest < innerSpan.offsetWidth) longest = innerSpan.offsetWidth; if(i == columnHeaders.length - 1) last = innerSpan.offsetWidth; } var spacerHeight = longest * Math.cos(45 * (Math.PI / 180)); var lastLabelWidth = last * Math.sin(45 * (Math.PI / 180)); // Get the various elements var tableBody = wrapper.getElementsByClassName("table-body")[0]; var floatingCol = wrapper.getElementsByClassName('floating-col')[0]; var innerWrapper = wrapper.getElementsByClassName("inner-wrapper")[0]; var actualTable = innerWrapper.getElementsByTagName('table')[0] // give the inner elements the header space for the slanted headers tableBody.style.height = tableBody.offsetHeight + spacerHeight +'px'; // Make the inner wrapper long enough to hold the scrollable contents innerWrapper.style.width = floatingCol.offsetWidth + actualTable.offsetWidth + lastLabelWidth + 'px'; // Move the elements down so the headers show actualTable.style.top = spacerHeight + 'px'; floatingCol.style.top = spacerHeight - 1 + 'px'; // Move the table body over to accommodate the floating header column innerWrapper.getElementsByTagName('table')[0].style.left = floatingCol.offsetWidth - 6 + 'px'; }; var wrapperIndex = 0; while(true) { var wrapper = document.getElementById("wrapper" + wrapperIndex); if(wrapper === null) { break; } wrapperIndex++; formatEventSequence(wrapper); } </script> <style> /* Shared Styles */ .event-sequence-grid, .event-sequence-list { font-family: sans-serif; } .event-sequence-grid table, table.event-sequence-list { border-collapse: collapse; } .event-sequence-list td, .event-sequence-grid td { line-height: 1; padding: 2px 10px 2px 10px; white-space: nowrap; text-align: center; } /* Grid-only styles */ .event-sequence-grid .content-cell { border: 1px solid black; } .event-sequence-grid .row-header { text-align: left; } .event-sequence-grid .column-header > div { width: 10px; -moz-transform: perspective(999px) /* Helps with the font distortion */ translate(20px, 0px) rotate(-45deg); -moz-transform-origin: left bottom; -ms-transform: translate(21px, 0px) rotate(-45deg); -ms-transform-origin: left bottom; -webkit-transform: translate(21px, 2px) rotate(-45deg); -webkit-transform-origin: left bottom; -o-transform: translate(21px, 0px) rotate(-45deg); -o-transform-origin: left bottom; } .event-sequence-grid .column-header span { border-bottom: 1px solid black; } /* Floating column styles */ .event-sequence-grid .wrapper { position: relative; width: 100%; overflow: hidden; } .event-sequence-grid .floating-col { display: inline-block; position: absolute; overflow: hidden; border-right: 1px solid black; z-index: 1; } .event-sequence-grid .inner-wrapper { position: relative; } .event-sequence-grid .hidden-spacer { position: relative; display: inline-block; } .event-sequence-grid .table-body { overflow-x: scroll; } .event-sequence-grid .table-body table { position: relative; display: inline-block; } .event-sequence-grid .floating-col td { background-color: white; border: 1px solid black; } .event-sequence-grid .floating-col td.first { } /* List-only styles */ table.event-sequence-list { margin-top: 20px; } .event-sequence-list td { border: 1px solid black; } </style> <h1>Event sequence generated by Umple from simple_multiple_class.ump</h1> <p>Note that the sequence of events is randomly generated. Subsequential event generation will likely yield different results.</p> <h2>Class SimpleFirst state machine sm1</h2> <div class="event-sequence-grid"> <div id="wrapper0" class="wrapper"> <div class="floating-col"> <table> <tr> <td class="row-header first">States</td> </tr> <tr> <td class="row-header" data-parent="">s11</td> </tr> <tr> <td class="row-header" data-parent="">s12</td> </tr> </table> </div> <div class="table-body"> <div class="inner-wrapper"> <table> <tr> <td class="column-header"><div><span>START</span></div></td> <td class="column-header"><div><span>1. ev11</span></div></td> </tr> <tr> <td class="content-cell" data-parent="">X</td> <td class="content-cell"> </td> </tr> <tr> <td class="content-cell" data-parent=""> </td> <td class="content-cell">X</td> </tr> </table> </div> </div> </div> </div> <table class="event-sequence-list"> <tr> <td class="column-header">Event<br>Number</td> <td class="column-header">Event</td> <td class="column-header">Next State</td> </tr> <tr> <td class="">START</td> <td class="">-</td> <td class="">s11</td> </tr> <tr> <td class="">1</td> <td class="">ev11</td> <td class="">s12</td> </tr> </table> <p>Event sequence ending reason: Visited all states</p> <h2>Class SimpleSecond state machine sm2</h2> <div class="event-sequence-grid"> <div id="wrapper1" class="wrapper"> <div class="floating-col"> <table> <tr> <td class="row-header first">States</td> </tr> <tr> <td class="row-header" data-parent="">s21</td> </tr> <tr> <td class="row-header" data-parent="">s22</td> </tr> </table> </div> <div class="table-body"> <div class="inner-wrapper"> <table> <tr> <td class="column-header"><div><span>START</span></div></td> <td class="column-header"><div><span>1. ev21</span></div></td> </tr> <tr> <td class="content-cell" data-parent="">X</td> <td class="content-cell"> </td> </tr> <tr> <td class="content-cell" data-parent=""> </td> <td class="content-cell">X</td> </tr> </table> </div> </div> </div> </div> <table class="event-sequence-list"> <tr> <td class="column-header">Event<br>Number</td> <td class="column-header">Event</td> <td class="column-header">Next State</td> </tr> <tr> <td class="">START</td> <td class="">-</td> <td class="">s21</td> </tr> <tr> <td class="">1</td> <td class="">ev21</td> <td class="">s22</td> </tr> </table> <p>Event sequence ending reason: Visited all states</p> <script> function formatEventSequence(wrapper) { if(wrapper === undefined || wrapper.innerHTML === "") { return; } // Calculate spacer height due to slanted names var longest = 0; var last = 0; var columnHeaders = wrapper .getElementsByClassName("column-header"); for(var i = 0; i < columnHeaders.length; i++) { var innerSpan = columnHeaders[i].firstChild.firstChild; if(longest < innerSpan.offsetWidth) longest = innerSpan.offsetWidth; if(i == columnHeaders.length - 1) last = innerSpan.offsetWidth; } var spacerHeight = longest * Math.cos(45 * (Math.PI / 180)); var lastLabelWidth = last * Math.sin(45 * (Math.PI / 180)); // Get the various elements var tableBody = wrapper.getElementsByClassName("table-body")[0]; var floatingCol = wrapper.getElementsByClassName('floating-col')[0]; var innerWrapper = wrapper.getElementsByClassName("inner-wrapper")[0]; var actualTable = innerWrapper.getElementsByTagName('table')[0] // give the inner elements the header space for the slanted headers tableBody.style.height = tableBody.offsetHeight + spacerHeight +'px'; // Make the inner wrapper long enough to hold the scrollable contents innerWrapper.style.width = floatingCol.offsetWidth + actualTable.offsetWidth + lastLabelWidth + 'px'; // Move the elements down so the headers show actualTable.style.top = spacerHeight + 'px'; floatingCol.style.top = spacerHeight - 1 + 'px'; // Move the table body over to accommodate the floating header column innerWrapper.getElementsByTagName('table')[0].style.left = floatingCol.offsetWidth - 6 + 'px'; }; var wrapperIndex = 0; while(true) { var wrapper = document.getElementById("wrapper" + wrapperIndex); if(wrapper === null) { break; } wrapperIndex++; formatEventSequence(wrapper); } </script> <style> /* Shared Styles */ .event-sequence-grid, .event-sequence-list { font-family: sans-serif; } .event-sequence-grid table, table.event-sequence-list { border-collapse: collapse; } .event-sequence-list td, .event-sequence-grid td { line-height: 1; padding: 2px 10px 2px 10px; white-space: nowrap; text-align: center; } /* Grid-only styles */ .event-sequence-grid .content-cell { border: 1px solid black; } .event-sequence-grid .row-header { text-align: left; } .event-sequence-grid .column-header > div { width: 10px; -moz-transform: perspective(999px) /* Helps with the font distortion */ translate(20px, 0px) rotate(-45deg); -moz-transform-origin: left bottom; -ms-transform: translate(21px, 0px) rotate(-45deg); -ms-transform-origin: left bottom; -webkit-transform: translate(21px, 2px) rotate(-45deg); -webkit-transform-origin: left bottom; -o-transform: translate(21px, 0px) rotate(-45deg); -o-transform-origin: left bottom; } .event-sequence-grid .column-header span { border-bottom: 1px solid black; } /* Floating column styles */ .event-sequence-grid .wrapper { position: relative; width: 100%; overflow: hidden; } .event-sequence-grid .floating-col { display: inline-block; position: absolute; overflow: hidden; border-right: 1px solid black; z-index: 1; } .event-sequence-grid .inner-wrapper { position: relative; } .event-sequence-grid .hidden-spacer { position: relative; display: inline-block; } .event-sequence-grid .table-body { overflow-x: scroll; } .event-sequence-grid .table-body table { position: relative; display: inline-block; } .event-sequence-grid .floating-col td { background-color: white; border: 1px solid black; } .event-sequence-grid .floating-col td.first { } /* List-only styles */ table.event-sequence-list { margin-top: 20px; } .event-sequence-list td { border: 1px solid black; } </style> <h1>Event sequence generated by Umple from guarded_transition_counter_hit.ump</h1> <p>Note that the sequence of events is randomly generated. Subsequential event generation will likely yield different results.</p> <h2>Class GuardedTransitionCounterHit state machine sm</h2> <div class="event-sequence-grid"> <div id="wrapper0" class="wrapper"> <div class="floating-col"> <table> <tr> <td class="row-header first">States</td> </tr> <tr> <td class="row-header" data-parent="">s1</td> </tr> <tr> <td class="row-header" data-parent="">s2</td> </tr> <tr> <td class="row-header" data-parent="">s3</td> </tr> <tr> <td class="row-header" data-parent="">s4</td> </tr> </table> </div> <div class="table-body"> <div class="inner-wrapper"> <table> <tr> <td class="column-header"><div><span>START</span></div></td> <td class="column-header"><div><span>1. ev2</span></div></td> <td class="column-header"><div><span>2. ev1</span></div></td> <td class="column-header"><div><span>3. ev1 [getGuard()]</span></div></td> <td class="column-header"><div><span>4. ev1</span></div></td> <td class="column-header"><div><span>5. ev1 [getGuard()]</span></div></td> <td class="column-header"><div><span>6. ev1</span></div></td> <td class="column-header"><div><span>7. ev1 [getGuard()]</span></div></td> <td class="column-header"><div><span>8. ev1</span></div></td> <td class="column-header"><div><span>9. ev1 [getGuard()]</span></div></td> <td class="column-header"><div><span>10. ev1</span></div></td> </tr> <tr> <td class="content-cell" data-parent="">X</td> <td class="content-cell"> </td> <td class="content-cell">X</td> <td class="content-cell"> </td> <td class="content-cell">X</td> <td class="content-cell"> </td> <td class="content-cell">X</td> <td class="content-cell"> </td> <td class="content-cell">X</td> <td class="content-cell"> </td> <td class="content-cell">X</td> </tr> <tr> <td class="content-cell" data-parent=""> </td> <td class="content-cell"> </td> <td class="content-cell"> </td> <td class="content-cell">X</td> <td class="content-cell"> </td> <td class="content-cell">X</td> <td class="content-cell"> </td> <td class="content-cell">X</td> <td class="content-cell"> </td> <td class="content-cell">X</td> <td class="content-cell"> </td> </tr> <tr> <td class="content-cell" data-parent=""> </td> <td class="content-cell"> </td> <td class="content-cell"> </td> <td class="content-cell"> </td> <td class="content-cell"> </td> <td class="content-cell"> </td> <td class="content-cell"> </td> <td class="content-cell"> </td> <td class="content-cell"> </td> <td class="content-cell"> </td> <td class="content-cell"> </td> </tr> <tr> <td class="content-cell" data-parent=""> </td> <td class="content-cell">X</td> <td class="content-cell"> </td> <td class="content-cell"> </td> <td class="content-cell"> </td> <td class="content-cell"> </td> <td class="content-cell"> </td> <td class="content-cell"> </td> <td class="content-cell"> </td> <td class="content-cell"> </td> <td class="content-cell"> </td> </tr> </table> </div> </div> </div> </div> <table class="event-sequence-list"> <tr> <td class="column-header">Event<br>Number</td> <td class="column-header">Event</td> <td class="column-header">Next State</td> </tr> <tr> <td class="">START</td> <td class="">-</td> <td class="">s1</td> </tr> <tr> <td class="">1</td> <td class="">ev2</td> <td class="">s4</td> </tr> <tr> <td class="">2</td> <td class="">ev1</td> <td class="">s1</td> </tr> <tr> <td class="">3</td> <td class="">ev1 [getGuard()]</td> <td class="">s2</td> </tr> <tr> <td class="">4</td> <td class="">ev1</td> <td class="">s1</td> </tr> <tr> <td class="">5</td> <td class="">ev1 [getGuard()]</td> <td class="">s2</td> </tr> <tr> <td class="">6</td> <td class="">ev1</td> <td class="">s1</td> </tr> <tr> <td class="">7</td> <td class="">ev1 [getGuard()]</td> <td class="">s2</td> </tr> <tr> <td class="">8</td> <td class="">ev1</td> <td class="">s1</td> </tr> <tr> <td class="">9</td> <td class="">ev1 [getGuard()]</td> <td class="">s2</td> </tr> <tr> <td class="">10</td> <td class="">ev1</td> <td class="">s1</td> </tr> </table> <p>Event sequence ending reason: Hit arbitrary counter</p> <script> function formatEventSequence(wrapper) { if(wrapper === undefined || wrapper.innerHTML === "") { return; } // Calculate spacer height due to slanted names var longest = 0; var last = 0; var columnHeaders = wrapper .getElementsByClassName("column-header"); for(var i = 0; i < columnHeaders.length; i++) { var innerSpan = columnHeaders[i].firstChild.firstChild; if(longest < innerSpan.offsetWidth) longest = innerSpan.offsetWidth; if(i == columnHeaders.length - 1) last = innerSpan.offsetWidth; } var spacerHeight = longest * Math.cos(45 * (Math.PI / 180)); var lastLabelWidth = last * Math.sin(45 * (Math.PI / 180)); // Get the various elements var tableBody = wrapper.getElementsByClassName("table-body")[0]; var floatingCol = wrapper.getElementsByClassName('floating-col')[0]; var innerWrapper = wrapper.getElementsByClassName("inner-wrapper")[0]; var actualTable = innerWrapper.getElementsByTagName('table')[0] // give the inner elements the header space for the slanted headers tableBody.style.height = tableBody.offsetHeight + spacerHeight +'px'; // Make the inner wrapper long enough to hold the scrollable contents innerWrapper.style.width = floatingCol.offsetWidth + actualTable.offsetWidth + lastLabelWidth + 'px'; // Move the elements down so the headers show actualTable.style.top = spacerHeight + 'px'; floatingCol.style.top = spacerHeight - 1 + 'px'; // Move the table body over to accommodate the floating header column innerWrapper.getElementsByTagName('table')[0].style.left = floatingCol.offsetWidth - 6 + 'px'; }; var wrapperIndex = 0; while(true) { var wrapper = document.getElementById("wrapper" + wrapperIndex); if(wrapper === null) { break; } wrapperIndex++; formatEventSequence(wrapper); } </script> <style> /* Shared Styles */ .event-sequence-grid, .event-sequence-list { font-family: sans-serif; } .event-sequence-grid table, table.event-sequence-list { border-collapse: collapse; } .event-sequence-list td, .event-sequence-grid td { line-height: 1; padding: 2px 10px 2px 10px; white-space: nowrap; text-align: center; } /* Grid-only styles */ .event-sequence-grid .content-cell { border: 1px solid black; } .event-sequence-grid .row-header { text-align: left; } .event-sequence-grid .column-header > div { width: 10px; -moz-transform: perspective(999px) /* Helps with the font distortion */ translate(20px, 0px) rotate(-45deg); -moz-transform-origin: left bottom; -ms-transform: translate(21px, 0px) rotate(-45deg); -ms-transform-origin: left bottom; -webkit-transform: translate(21px, 2px) rotate(-45deg); -webkit-transform-origin: left bottom; -o-transform: translate(21px, 0px) rotate(-45deg); -o-transform-origin: left bottom; } .event-sequence-grid .column-header span { border-bottom: 1px solid black; } /* Floating column styles */ .event-sequence-grid .wrapper { position: relative; width: 100%; overflow: hidden; } .event-sequence-grid .floating-col { display: inline-block; position: absolute; overflow: hidden; border-right: 1px solid black; z-index: 1; } .event-sequence-grid .inner-wrapper { position: relative; } .event-sequence-grid .hidden-spacer { position: relative; display: inline-block; } .event-sequence-grid .table-body { overflow-x: scroll; } .event-sequence-grid .table-body table { position: relative; display: inline-block; } .event-sequence-grid .floating-col td { background-color: white; border: 1px solid black; } .event-sequence-grid .floating-col td.first { } /* List-only styles */ table.event-sequence-list { margin-top: 20px; } .event-sequence-list td { border: 1px solid black; } </style> <h1>Event sequence generated by Umple from counter_hit.ump</h1> <p>Note that the sequence of events is randomly generated. Subsequential event generation will likely yield different results.</p> <h2>Class HitCounter state machine sm</h2> <div class="event-sequence-grid"> <div id="wrapper0" class="wrapper"> <div class="floating-col"> <table> <tr> <td class="row-header first">States</td> </tr> <tr> <td class="row-header" data-parent="">s1</td> </tr> <tr> <td class="row-header" data-parent="">s2</td> </tr> <tr> <td class="row-header" data-parent="">s3</td> </tr> <tr> <td class="row-header" data-parent="">s4</td> </tr> </table> </div> <div class="table-body"> <div class="inner-wrapper"> <table> <tr> <td class="column-header"><div><span>START</span></div></td> <td class="column-header"><div><span>1. ev3</span></div></td> <td class="column-header"><div><span>2. ev2</span></div></td> <td class="column-header"><div><span>3. ev2</span></div></td> <td class="column-header"><div><span>4. ev3</span></div></td> <td class="column-header"><div><span>5. ev1</span></div></td> <td class="column-header"><div><span>6. ev2</span></div></td> <td class="column-header"><div><span>7. ev2</span></div></td> <td class="column-header"><div><span>8. ev1</span></div></td> <td class="column-header"><div><span>9. ev2</span></div></td> <td class="column-header"><div><span>10. ev1</span></div></td> <td class="column-header"><div><span>11. ev2</span></div></td> <td class="column-header"><div><span>12. ev3</span></div></td> <td class="column-header"><div><span>13. ev2</span></div></td> <td class="column-header"><div><span>14. ev2</span></div></td> </tr> <tr> <td class="content-cell" data-parent="">X</td> <td class="content-cell"> </td> <td class="content-cell"> </td> <td class="content-cell"> </td> <td class="content-cell"> </td> <td class="content-cell">X</td> <td class="content-cell"> </td> <td class="content-cell"> </td> <td class="content-cell">X</td> <td class="content-cell"> </td> <td class="content-cell">X</td> <td class="content-cell"> </td> <td class="content-cell"> </td> <td class="content-cell"> </td> <td class="content-cell"> </td> </tr> <tr> <td class="content-cell" data-parent=""> </td> <td class="content-cell"> </td> <td class="content-cell">X</td> <td class="content-cell">X</td> <td class="content-cell"> </td> <td class="content-cell"> </td> <td class="content-cell">X</td> <td class="content-cell">X</td> <td class="content-cell"> </td> <td class="content-cell">X</td> <td class="content-cell"> </td> <td class="content-cell">X</td> <td class="content-cell"> </td> <td class="content-cell">X</td> <td class="content-cell">X</td> </tr> <tr> <td class="content-cell" data-parent=""> </td> <td class="content-cell">X</td> <td class="content-cell"> </td> <td class="content-cell"> </td> <td class="content-cell">X</td> <td class="content-cell"> </td> <td class="content-cell"> </td> <td class="content-cell"> </td> <td class="content-cell"> </td> <td class="content-cell"> </td> <td class="content-cell"> </td> <td class="content-cell"> </td> <td class="content-cell">X</td> <td class="content-cell"> </td> <td class="content-cell"> </td> </tr> <tr> <td class="content-cell" data-parent=""> </td> <td class="content-cell"> </td> <td class="content-cell"> </td> <td class="content-cell"> </td> <td class="content-cell"> </td> <td class="content-cell"> </td> <td class="content-cell"> </td> <td class="content-cell"> </td> <td class="content-cell"> </td> <td class="content-cell"> </td> <td class="content-cell"> </td> <td class="content-cell"> </td> <td class="content-cell"> </td> <td class="content-cell"> </td> <td class="content-cell"> </td> </tr> </table> </div> </div> </div> </div> <table class="event-sequence-list"> <tr> <td class="column-header">Event<br>Number</td> <td class="column-header">Event</td> <td class="column-header">Next State</td> </tr> <tr> <td class="">START</td> <td class="">-</td> <td class="">s1</td> </tr> <tr> <td class="">1</td> <td class="">ev3</td> <td class="">s3</td> </tr> <tr> <td class="">2</td> <td class="">ev2</td> <td class="">s2</td> </tr> <tr> <td class="">3</td> <td class="">ev2</td> <td class="">s2</td> </tr> <tr> <td class="">4</td> <td class="">ev3</td> <td class="">s3</td> </tr> <tr> <td class="">5</td> <td class="">ev1</td> <td class="">s1</td> </tr> <tr> <td class="">6</td> <td class="">ev2</td> <td class="">s2</td> </tr> <tr> <td class="">7</td> <td class="">ev2</td> <td class="">s2</td> </tr> <tr> <td class="">8</td> <td class="">ev1</td> <td class="">s1</td> </tr> <tr> <td class="">9</td> <td class="">ev2</td> <td class="">s2</td> </tr> <tr> <td class="">10</td> <td class="">ev1</td> <td class="">s1</td> </tr> <tr> <td class="">11</td> <td class="">ev2</td> <td class="">s2</td> </tr> <tr> <td class="">12</td> <td class="">ev3</td> <td class="">s3</td> </tr> <tr> <td class="">13</td> <td class="">ev2</td> <td class="">s2</td> </tr> <tr> <td class="">14</td> <td class="">ev2</td> <td class="">s2</td> </tr> </table> <p>Event sequence ending reason: Hit arbitrary counter</p> <script> function formatEventSequence(wrapper) { if(wrapper === undefined || wrapper.innerHTML === "") { return; } // Calculate spacer height due to slanted names var longest = 0; var last = 0; var columnHeaders = wrapper .getElementsByClassName("column-header"); for(var i = 0; i < columnHeaders.length; i++) { var innerSpan = columnHeaders[i].firstChild.firstChild; if(longest < innerSpan.offsetWidth) longest = innerSpan.offsetWidth; if(i == columnHeaders.length - 1) last = innerSpan.offsetWidth; } var spacerHeight = longest * Math.cos(45 * (Math.PI / 180)); var lastLabelWidth = last * Math.sin(45 * (Math.PI / 180)); // Get the various elements var tableBody = wrapper.getElementsByClassName("table-body")[0]; var floatingCol = wrapper.getElementsByClassName('floating-col')[0]; var innerWrapper = wrapper.getElementsByClassName("inner-wrapper")[0]; var actualTable = innerWrapper.getElementsByTagName('table')[0] // give the inner elements the header space for the slanted headers tableBody.style.height = tableBody.offsetHeight + spacerHeight +'px'; // Make the inner wrapper long enough to hold the scrollable contents innerWrapper.style.width = floatingCol.offsetWidth + actualTable.offsetWidth + lastLabelWidth + 'px'; // Move the elements down so the headers show actualTable.style.top = spacerHeight + 'px'; floatingCol.style.top = spacerHeight - 1 + 'px'; // Move the table body over to accommodate the floating header column innerWrapper.getElementsByTagName('table')[0].style.left = floatingCol.offsetWidth - 6 + 'px'; }; var wrapperIndex = 0; while(true) { var wrapper = document.getElementById("wrapper" + wrapperIndex); if(wrapper === null) { break; } wrapperIndex++; formatEventSequence(wrapper); } </script> <style> /* Shared Styles */ .event-sequence-grid, .event-sequence-list { font-family: sans-serif; } .event-sequence-grid table, table.event-sequence-list { border-collapse: collapse; } .event-sequence-list td, .event-sequence-grid td { line-height: 1; padding: 2px 10px 2px 10px; white-space: nowrap; text-align: center; } /* Grid-only styles */ .event-sequence-grid .content-cell { border: 1px solid black; } .event-sequence-grid .row-header { text-align: left; } .event-sequence-grid .column-header > div { width: 10px; -moz-transform: perspective(999px) /* Helps with the font distortion */ translate(20px, 0px) rotate(-45deg); -moz-transform-origin: left bottom; -ms-transform: translate(21px, 0px) rotate(-45deg); -ms-transform-origin: left bottom; -webkit-transform: translate(21px, 2px) rotate(-45deg); -webkit-transform-origin: left bottom; -o-transform: translate(21px, 0px) rotate(-45deg); -o-transform-origin: left bottom; } .event-sequence-grid .column-header span { border-bottom: 1px solid black; } /* Floating column styles */ .event-sequence-grid .wrapper { position: relative; width: 100%; overflow: hidden; } .event-sequence-grid .floating-col { display: inline-block; position: absolute; overflow: hidden; border-right: 1px solid black; z-index: 1; } .event-sequence-grid .inner-wrapper { position: relative; } .event-sequence-grid .hidden-spacer { position: relative; display: inline-block; } .event-sequence-grid .table-body { overflow-x: scroll; } .event-sequence-grid .table-body table { position: relative; display: inline-block; } .event-sequence-grid .floating-col td { background-color: white; border: 1px solid black; } .event-sequence-grid .floating-col td.first { } /* List-only styles */ table.event-sequence-list { margin-top: 20px; } .event-sequence-list td { border: 1px solid black; } </style> <h1>Event sequence generated by Umple from auto_transition.ump</h1> <p>Note that the sequence of events is randomly generated. Subsequential event generation will likely yield different results.</p> <h2>Class AutoTransition state machine sm</h2> <div class="event-sequence-grid"> <div id="wrapper0" class="wrapper"> <div class="floating-col"> <table> <tr> <td class="row-header first">States</td> </tr> <tr> <td class="row-header" data-parent="">s1</td> </tr> <tr> <td class="row-header" data-parent="">s2</td> </tr> <tr> <td class="row-header" data-parent="">s3</td> </tr> <tr> <td class="row-header" data-parent="">s4</td> </tr> <tr> <td class="row-header" data-parent="">s5</td> </tr> </table> </div> <div class="table-body"> <div class="inner-wrapper"> <table> <tr> <td class="column-header"><div><span>START</span></div></td> <td class="column-header"><div><span>1. (auto)</span></div></td> <td class="column-header"><div><span>2. ev1</span></div></td> <td class="column-header"><div><span>3. ev1</span></div></td> <td class="column-header"><div><span>4. ev1</span></div></td> </tr> <tr> <td class="content-cell" data-parent="">X</td> <td class="content-cell"> </td> <td class="content-cell"> </td> <td class="content-cell"> </td> <td class="content-cell"> </td> </tr> <tr> <td class="content-cell" data-parent=""> </td> <td class="content-cell">X</td> <td class="content-cell"> </td> <td class="content-cell"> </td> <td class="content-cell"> </td> </tr> <tr> <td class="content-cell" data-parent=""> </td> <td class="content-cell"> </td> <td class="content-cell">X</td> <td class="content-cell"> </td> <td class="content-cell"> </td> </tr> <tr> <td class="content-cell" data-parent=""> </td> <td class="content-cell"> </td> <td class="content-cell"> </td> <td class="content-cell">X</td> <td class="content-cell"> </td> </tr> <tr> <td class="content-cell" data-parent=""> </td> <td class="content-cell"> </td> <td class="content-cell"> </td> <td class="content-cell"> </td> <td class="content-cell">X</td> </tr> </table> </div> </div> </div> </div> <table class="event-sequence-list"> <tr> <td class="column-header">Event<br>Number</td> <td class="column-header">Event</td> <td class="column-header">Next State</td> </tr> <tr> <td class="">START</td> <td class="">-</td> <td class="">s1</td> </tr> <tr> <td class="">1</td> <td class="">(auto)</td> <td class="">s2</td> </tr> <tr> <td class="">2</td> <td class="">ev1</td> <td class="">s3</td> </tr> <tr> <td class="">3</td> <td class="">ev1</td> <td class="">s4</td> </tr> <tr> <td class="">4</td> <td class="">ev1</td> <td class="">s5</td> </tr> </table> <p>Event sequence ending reason: Visited all states</p> <script> function formatEventSequence(wrapper) { if(wrapper === undefined || wrapper.innerHTML === "") { return; } // Calculate spacer height due to slanted names var longest = 0; var last = 0; var columnHeaders = wrapper .getElementsByClassName("column-header"); for(var i = 0; i < columnHeaders.length; i++) { var innerSpan = columnHeaders[i].firstChild.firstChild; if(longest < innerSpan.offsetWidth) longest = innerSpan.offsetWidth; if(i == columnHeaders.length - 1) last = innerSpan.offsetWidth; } var spacerHeight = longest * Math.cos(45 * (Math.PI / 180)); var lastLabelWidth = last * Math.sin(45 * (Math.PI / 180)); // Get the various elements var tableBody = wrapper.getElementsByClassName("table-body")[0]; var floatingCol = wrapper.getElementsByClassName('floating-col')[0]; var innerWrapper = wrapper.getElementsByClassName("inner-wrapper")[0]; var actualTable = innerWrapper.getElementsByTagName('table')[0] // give the inner elements the header space for the slanted headers tableBody.style.height = tableBody.offsetHeight + spacerHeight +'px'; // Make the inner wrapper long enough to hold the scrollable contents innerWrapper.style.width = floatingCol.offsetWidth + actualTable.offsetWidth + lastLabelWidth + 'px'; // Move the elements down so the headers show actualTable.style.top = spacerHeight + 'px'; floatingCol.style.top = spacerHeight - 1 + 'px'; // Move the table body over to accommodate the floating header column innerWrapper.getElementsByTagName('table')[0].style.left = floatingCol.offsetWidth - 6 + 'px'; }; var wrapperIndex = 0; while(true) { var wrapper = document.getElementById("wrapper" + wrapperIndex); if(wrapper === null) { break; } wrapperIndex++; formatEventSequence(wrapper); } </script> <style> /* Shared Styles */ .event-sequence-grid, .event-sequence-list { font-family: sans-serif; } .event-sequence-grid table, table.event-sequence-list { border-collapse: collapse; } .event-sequence-list td, .event-sequence-grid td { line-height: 1; padding: 2px 10px 2px 10px; white-space: nowrap; text-align: center; } /* Grid-only styles */ .event-sequence-grid .content-cell { border: 1px solid black; } .event-sequence-grid .row-header { text-align: left; } .event-sequence-grid .column-header > div { width: 10px; -moz-transform: perspective(999px) /* Helps with the font distortion */ translate(20px, 0px) rotate(-45deg); -moz-transform-origin: left bottom; -ms-transform: translate(21px, 0px) rotate(-45deg); -ms-transform-origin: left bottom; -webkit-transform: translate(21px, 2px) rotate(-45deg); -webkit-transform-origin: left bottom; -o-transform: translate(21px, 0px) rotate(-45deg); -o-transform-origin: left bottom; } .event-sequence-grid .column-header span { border-bottom: 1px solid black; } /* Floating column styles */ .event-sequence-grid .wrapper { position: relative; width: 100%; overflow: hidden; } .event-sequence-grid .floating-col { display: inline-block; position: absolute; overflow: hidden; border-right: 1px solid black; z-index: 1; } .event-sequence-grid .inner-wrapper { position: relative; } .event-sequence-grid .hidden-spacer { position: relative; display: inline-block; } .event-sequence-grid .table-body { overflow-x: scroll; } .event-sequence-grid .table-body table { position: relative; display: inline-block; } .event-sequence-grid .floating-col td { background-color: white; border: 1px solid black; } .event-sequence-grid .floating-col td.first { } /* List-only styles */ table.event-sequence-list { margin-top: 20px; } .event-sequence-list td { border: 1px solid black; } </style> <h1>Event sequence generated by Umple from guarded_timed_transition.ump</h1> <p>Note that the sequence of events is randomly generated. Subsequential event generation will likely yield different results.</p> <h2>Class GuardedTimedTransition state machine sm</h2> <div class="event-sequence-grid"> <div id="wrapper0" class="wrapper"> <div class="floating-col"> <table> <tr> <td class="row-header first">States</td> </tr> <tr> <td class="row-header" data-parent="">s1</td> </tr> <tr> <td class="row-header" data-parent="">s2</td> </tr> <tr> <td class="row-header" data-parent="">s3</td> </tr> <tr> <td class="row-header" data-parent="">s4</td> </tr> <tr> <td class="row-header" data-parent="">s5</td> </tr> </table> </div> <div class="table-body"> <div class="inner-wrapper"> <table> <tr> <td class="column-header"><div><span>START</span></div></td> <td class="column-header"><div><span>1. after(5) [getGuard()]</span></div></td> <td class="column-header"><div><span>2. ev1</span></div></td> <td class="column-header"><div><span>3. ev1</span></div></td> <td class="column-header"><div><span>4. ev1</span></div></td> </tr> <tr> <td class="content-cell" data-parent="">X</td> <td class="content-cell"> </td> <td class="content-cell"> </td> <td class="content-cell"> </td> <td class="content-cell"> </td> </tr> <tr> <td class="content-cell" data-parent=""> </td> <td class="content-cell">X</td> <td class="content-cell"> </td> <td class="content-cell"> </td> <td class="content-cell"> </td> </tr> <tr> <td class="content-cell" data-parent=""> </td> <td class="content-cell"> </td> <td class="content-cell">X</td> <td class="content-cell"> </td> <td class="content-cell"> </td> </tr> <tr> <td class="content-cell" data-parent=""> </td> <td class="content-cell"> </td> <td class="content-cell"> </td> <td class="content-cell">X</td> <td class="content-cell"> </td> </tr> <tr> <td class="content-cell" data-parent=""> </td> <td class="content-cell"> </td> <td class="content-cell"> </td> <td class="content-cell"> </td> <td class="content-cell">X</td> </tr> </table> </div> </div> </div> </div> <table class="event-sequence-list"> <tr> <td class="column-header">Event<br>Number</td> <td class="column-header">Event</td> <td class="column-header">Next State</td> </tr> <tr> <td class="">START</td> <td class="">-</td> <td class="">s1</td> </tr> <tr> <td class="">1</td> <td class="">after(5) [getGuard()]</td> <td class="">s2</td> </tr> <tr> <td class="">2</td> <td class="">ev1</td> <td class="">s3</td> </tr> <tr> <td class="">3</td> <td class="">ev1</td> <td class="">s4</td> </tr> <tr> <td class="">4</td> <td class="">ev1</td> <td class="">s5</td> </tr> </table> <p>Event sequence ending reason: Visited all states</p> <script> function formatEventSequence(wrapper) { if(wrapper === undefined || wrapper.innerHTML === "") { return; } // Calculate spacer height due to slanted names var longest = 0; var last = 0; var columnHeaders = wrapper .getElementsByClassName("column-header"); for(var i = 0; i < columnHeaders.length; i++) { var innerSpan = columnHeaders[i].firstChild.firstChild; if(longest < innerSpan.offsetWidth) longest = innerSpan.offsetWidth; if(i == columnHeaders.length - 1) last = innerSpan.offsetWidth; } var spacerHeight = longest * Math.cos(45 * (Math.PI / 180)); var lastLabelWidth = last * Math.sin(45 * (Math.PI / 180)); // Get the various elements var tableBody = wrapper.getElementsByClassName("table-body")[0]; var floatingCol = wrapper.getElementsByClassName('floating-col')[0]; var innerWrapper = wrapper.getElementsByClassName("inner-wrapper")[0]; var actualTable = innerWrapper.getElementsByTagName('table')[0] // give the inner elements the header space for the slanted headers tableBody.style.height = tableBody.offsetHeight + spacerHeight +'px'; // Make the inner wrapper long enough to hold the scrollable contents innerWrapper.style.width = floatingCol.offsetWidth + actualTable.offsetWidth + lastLabelWidth + 'px'; // Move the elements down so the headers show actualTable.style.top = spacerHeight + 'px'; floatingCol.style.top = spacerHeight - 1 + 'px'; // Move the table body over to accommodate the floating header column innerWrapper.getElementsByTagName('table')[0].style.left = floatingCol.offsetWidth - 6 + 'px'; }; var wrapperIndex = 0; while(true) { var wrapper = document.getElementById("wrapper" + wrapperIndex); if(wrapper === null) { break; } wrapperIndex++; formatEventSequence(wrapper); } </script> <style> /* Shared Styles */ .event-sequence-grid, .event-sequence-list { font-family: sans-serif; } .event-sequence-grid table, table.event-sequence-list { border-collapse: collapse; } .event-sequence-list td, .event-sequence-grid td { line-height: 1; padding: 2px 10px 2px 10px; white-space: nowrap; text-align: center; } /* Grid-only styles */ .event-sequence-grid .content-cell { border: 1px solid black; } .event-sequence-grid .row-header { text-align: left; } .event-sequence-grid .column-header > div { width: 10px; -moz-transform: perspective(999px) /* Helps with the font distortion */ translate(20px, 0px) rotate(-45deg); -moz-transform-origin: left bottom; -ms-transform: translate(21px, 0px) rotate(-45deg); -ms-transform-origin: left bottom; -webkit-transform: translate(21px, 2px) rotate(-45deg); -webkit-transform-origin: left bottom; -o-transform: translate(21px, 0px) rotate(-45deg); -o-transform-origin: left bottom; } .event-sequence-grid .column-header span { border-bottom: 1px solid black; } /* Floating column styles */ .event-sequence-grid .wrapper { position: relative; width: 100%; overflow: hidden; } .event-sequence-grid .floating-col { display: inline-block; position: absolute; overflow: hidden; border-right: 1px solid black; z-index: 1; } .event-sequence-grid .inner-wrapper { position: relative; } .event-sequence-grid .hidden-spacer { position: relative; display: inline-block; } .event-sequence-grid .table-body { overflow-x: scroll; } .event-sequence-grid .table-body table { position: relative; display: inline-block; } .event-sequence-grid .floating-col td { background-color: white; border: 1px solid black; } .event-sequence-grid .floating-col td.first { } /* List-only styles */ table.event-sequence-list { margin-top: 20px; } .event-sequence-list td { border: 1px solid black; } </style> <h1>Event sequence generated by Umple from no_state_machine.ump</h1> <p>No State machines found in this model</p> <style> /* Shared Styles */ .event-sequence-grid, .event-sequence-list { font-family: sans-serif; } .event-sequence-grid table, table.event-sequence-list { border-collapse: collapse; } .event-sequence-list td, .event-sequence-grid td { line-height: 1; padding: 2px 10px 2px 10px; white-space: nowrap; text-align: center; } /* Grid-only styles */ .event-sequence-grid .content-cell { border: 1px solid black; } .event-sequence-grid .row-header { text-align: left; } .event-sequence-grid .column-header > div { width: 10px; -moz-transform: perspective(999px) /* Helps with the font distortion */ translate(20px, 0px) rotate(-45deg); -moz-transform-origin: left bottom; -ms-transform: translate(21px, 0px) rotate(-45deg); -ms-transform-origin: left bottom; -webkit-transform: translate(21px, 2px) rotate(-45deg); -webkit-transform-origin: left bottom; -o-transform: translate(21px, 0px) rotate(-45deg); -o-transform-origin: left bottom; } .event-sequence-grid .column-header span { border-bottom: 1px solid black; } /* Floating column styles */ .event-sequence-grid .wrapper { position: relative; width: 100%; overflow: hidden; } .event-sequence-grid .floating-col { display: inline-block; position: absolute; overflow: hidden; border-right: 1px solid black; z-index: 1; } .event-sequence-grid .inner-wrapper { position: relative; } .event-sequence-grid .hidden-spacer { position: relative; display: inline-block; } .event-sequence-grid .table-body { overflow-x: scroll; } .event-sequence-grid .table-body table { position: relative; display: inline-block; } .event-sequence-grid .floating-col td { background-color: white; border: 1px solid black; } .event-sequence-grid .floating-col td.first { } /* List-only styles */ table.event-sequence-list { margin-top: 20px; } .event-sequence-list td { border: 1px solid black; } </style> <h1>Event sequence generated by Umple from guarded_transition_end_reached.ump</h1> <p>Note that the sequence of events is randomly generated. Subsequential event generation will likely yield different results.</p> <h2>Class GuardedTransitionEndState state machine sm</h2> <div class="event-sequence-grid"> <div id="wrapper0" class="wrapper"> <div class="floating-col"> <table> <tr> <td class="row-header first">States</td> </tr> <tr> <td class="row-header" data-parent="">s1</td> </tr> <tr> <td class="row-header" data-parent="">s2</td> </tr> <tr> <td class="row-header" data-parent="">endState</td> </tr> <tr> <td class="row-header" data-parent="">s4</td> </tr> </table> </div> <div class="table-body"> <div class="inner-wrapper"> <table> <tr> <td class="column-header"><div><span>START</span></div></td> <td class="column-header"><div><span>1. ev1 [getGuard()]</span></div></td> <td class="column-header"><div><span>2. ev1</span></div></td> <td class="column-header"><div><span>3. ev1 [!getGuard()]</span></div></td> </tr> <tr> <td class="content-cell" data-parent="">X</td> <td class="content-cell"> </td> <td class="content-cell">X</td> <td class="content-cell"> </td> </tr> <tr> <td class="content-cell" data-parent=""> </td> <td class="content-cell">X</td> <td class="content-cell"> </td> <td class="content-cell"> </td> </tr> <tr> <td class="content-cell" data-parent=""> </td> <td class="content-cell"> </td> <td class="content-cell"> </td> <td class="content-cell">X</td> </tr> <tr> <td class="content-cell" data-parent=""> </td> <td class="content-cell"> </td> <td class="content-cell"> </td> <td class="content-cell"> </td> </tr> </table> </div> </div> </div> </div> <table class="event-sequence-list"> <tr> <td class="column-header">Event<br>Number</td> <td class="column-header">Event</td> <td class="column-header">Next State</td> </tr> <tr> <td class="">START</td> <td class="">-</td> <td class="">s1</td> </tr> <tr> <td class="">1</td> <td class="">ev1 [getGuard()]</td> <td class="">s2</td> </tr> <tr> <td class="">2</td> <td class="">ev1</td> <td class="">s1</td> </tr> <tr> <td class="">3</td> <td class="">ev1 [!getGuard()]</td> <td class="">endState</td> </tr> </table> <p>Event sequence ending reason: Reached an end-state</p> <script> function formatEventSequence(wrapper) { if(wrapper === undefined || wrapper.innerHTML === "") { return; } // Calculate spacer height due to slanted names var longest = 0; var last = 0; var columnHeaders = wrapper .getElementsByClassName("column-header"); for(var i = 0; i < columnHeaders.length; i++) { var innerSpan = columnHeaders[i].firstChild.firstChild; if(longest < innerSpan.offsetWidth) longest = innerSpan.offsetWidth; if(i == columnHeaders.length - 1) last = innerSpan.offsetWidth; } var spacerHeight = longest * Math.cos(45 * (Math.PI / 180)); var lastLabelWidth = last * Math.sin(45 * (Math.PI / 180)); // Get the various elements var tableBody = wrapper.getElementsByClassName("table-body")[0]; var floatingCol = wrapper.getElementsByClassName('floating-col')[0]; var innerWrapper = wrapper.getElementsByClassName("inner-wrapper")[0]; var actualTable = innerWrapper.getElementsByTagName('table')[0] // give the inner elements the header space for the slanted headers tableBody.style.height = tableBody.offsetHeight + spacerHeight +'px'; // Make the inner wrapper long enough to hold the scrollable contents innerWrapper.style.width = floatingCol.offsetWidth + actualTable.offsetWidth + lastLabelWidth + 'px'; // Move the elements down so the headers show actualTable.style.top = spacerHeight + 'px'; floatingCol.style.top = spacerHeight - 1 + 'px'; // Move the table body over to accommodate the floating header column innerWrapper.getElementsByTagName('table')[0].style.left = floatingCol.offsetWidth - 6 + 'px'; }; var wrapperIndex = 0; while(true) { var wrapper = document.getElementById("wrapper" + wrapperIndex); if(wrapper === null) { break; } wrapperIndex++; formatEventSequence(wrapper); } </script> <style> /* Shared Styles */ .event-sequence-grid, .event-sequence-list { font-family: sans-serif; } .event-sequence-grid table, table.event-sequence-list { border-collapse: collapse; } .event-sequence-list td, .event-sequence-grid td { line-height: 1; padding: 2px 10px 2px 10px; white-space: nowrap; text-align: center; } /* Grid-only styles */ .event-sequence-grid .content-cell { border: 1px solid black; } .event-sequence-grid .row-header { text-align: left; } .event-sequence-grid .column-header > div { width: 10px; -moz-transform: perspective(999px) /* Helps with the font distortion */ translate(20px, 0px) rotate(-45deg); -moz-transform-origin: left bottom; -ms-transform: translate(21px, 0px) rotate(-45deg); -ms-transform-origin: left bottom; -webkit-transform: translate(21px, 2px) rotate(-45deg); -webkit-transform-origin: left bottom; -o-transform: translate(21px, 0px) rotate(-45deg); -o-transform-origin: left bottom; } .event-sequence-grid .column-header span { border-bottom: 1px solid black; } /* Floating column styles */ .event-sequence-grid .wrapper { position: relative; width: 100%; overflow: hidden; } .event-sequence-grid .floating-col { display: inline-block; position: absolute; overflow: hidden; border-right: 1px solid black; z-index: 1; } .event-sequence-grid .inner-wrapper { position: relative; } .event-sequence-grid .hidden-spacer { position: relative; display: inline-block; } .event-sequence-grid .table-body { overflow-x: scroll; } .event-sequence-grid .table-body table { position: relative; display: inline-block; } .event-sequence-grid .floating-col td { background-color: white; border: 1px solid black; } .event-sequence-grid .floating-col td.first { } /* List-only styles */ table.event-sequence-list { margin-top: 20px; } .event-sequence-list td { border: 1px solid black; } </style> <h1>Event sequence generated by Umple from guarded_auto_transition.ump</h1> <p>Note that the sequence of events is randomly generated. Subsequential event generation will likely yield different results.</p> <h2>Class GuardedTimedTransition state machine sm</h2> <div class="event-sequence-grid"> <div id="wrapper0" class="wrapper"> <div class="floating-col"> <table> <tr> <td class="row-header first">States</td> </tr> <tr> <td class="row-header" data-parent="">s1</td> </tr> <tr> <td class="row-header" data-parent="">s2</td> </tr> <tr> <td class="row-header" data-parent="">s3</td> </tr> <tr> <td class="row-header" data-parent="">s4</td> </tr> <tr> <td class="row-header" data-parent="">s5</td> </tr> </table> </div> <div class="table-body"> <div class="inner-wrapper"> <table> <tr> <td class="column-header"><div><span>START</span></div></td> <td class="column-header"><div><span>1. (auto) [getGuard()]</span></div></td> <td class="column-header"><div><span>2. ev1</span></div></td> <td class="column-header"><div><span>3. ev1</span></div></td> <td class="column-header"><div><span>4. ev1</span></div></td> </tr> <tr> <td class="content-cell" data-parent="">X</td> <td class="content-cell"> </td> <td class="content-cell"> </td> <td class="content-cell"> </td> <td class="content-cell"> </td> </tr> <tr> <td class="content-cell" data-parent=""> </td> <td class="content-cell">X</td> <td class="content-cell"> </td> <td class="content-cell"> </td> <td class="content-cell"> </td> </tr> <tr> <td class="content-cell" data-parent=""> </td> <td class="content-cell"> </td> <td class="content-cell">X</td> <td class="content-cell"> </td> <td class="content-cell"> </td> </tr> <tr> <td class="content-cell" data-parent=""> </td> <td class="content-cell"> </td> <td class="content-cell"> </td> <td class="content-cell">X</td> <td class="content-cell"> </td> </tr> <tr> <td class="content-cell" data-parent=""> </td> <td class="content-cell"> </td> <td class="content-cell"> </td> <td class="content-cell"> </td> <td class="content-cell">X</td> </tr> </table> </div> </div> </div> </div> <table class="event-sequence-list"> <tr> <td class="column-header">Event<br>Number</td> <td class="column-header">Event</td> <td class="column-header">Next State</td> </tr> <tr> <td class="">START</td> <td class="">-</td> <td class="">s1</td> </tr> <tr> <td class="">1</td> <td class="">(auto) [getGuard()]</td> <td class="">s2</td> </tr> <tr> <td class="">2</td> <td class="">ev1</td> <td class="">s3</td> </tr> <tr> <td class="">3</td> <td class="">ev1</td> <td class="">s4</td> </tr> <tr> <td class="">4</td> <td class="">ev1</td> <td class="">s5</td> </tr> </table> <p>Event sequence ending reason: Visited all states</p> <script> function formatEventSequence(wrapper) { if(wrapper === undefined || wrapper.innerHTML === "") { return; } // Calculate spacer height due to slanted names var longest = 0; var last = 0; var columnHeaders = wrapper .getElementsByClassName("column-header"); for(var i = 0; i < columnHeaders.length; i++) { var innerSpan = columnHeaders[i].firstChild.firstChild; if(longest < innerSpan.offsetWidth) longest = innerSpan.offsetWidth; if(i == columnHeaders.length - 1) last = innerSpan.offsetWidth; } var spacerHeight = longest * Math.cos(45 * (Math.PI / 180)); var lastLabelWidth = last * Math.sin(45 * (Math.PI / 180)); // Get the various elements var tableBody = wrapper.getElementsByClassName("table-body")[0]; var floatingCol = wrapper.getElementsByClassName('floating-col')[0]; var innerWrapper = wrapper.getElementsByClassName("inner-wrapper")[0]; var actualTable = innerWrapper.getElementsByTagName('table')[0] // give the inner elements the header space for the slanted headers tableBody.style.height = tableBody.offsetHeight + spacerHeight +'px'; // Make the inner wrapper long enough to hold the scrollable contents innerWrapper.style.width = floatingCol.offsetWidth + actualTable.offsetWidth + lastLabelWidth + 'px'; // Move the elements down so the headers show actualTable.style.top = spacerHeight + 'px'; floatingCol.style.top = spacerHeight - 1 + 'px'; // Move the table body over to accommodate the floating header column innerWrapper.getElementsByTagName('table')[0].style.left = floatingCol.offsetWidth - 6 + 'px'; }; var wrapperIndex = 0; while(true) { var wrapper = document.getElementById("wrapper" + wrapperIndex); if(wrapper === null) { break; } wrapperIndex++; formatEventSequence(wrapper); } </script> <style> /* Shared Styles */ .event-sequence-grid, .event-sequence-list { font-family: sans-serif; } .event-sequence-grid table, table.event-sequence-list { border-collapse: collapse; } .event-sequence-list td, .event-sequence-grid td { line-height: 1; padding: 2px 10px 2px 10px; white-space: nowrap; text-align: center; } /* Grid-only styles */ .event-sequence-grid .content-cell { border: 1px solid black; } .event-sequence-grid .row-header { text-align: left; } .event-sequence-grid .column-header > div { width: 10px; -moz-transform: perspective(999px) /* Helps with the font distortion */ translate(20px, 0px) rotate(-45deg); -moz-transform-origin: left bottom; -ms-transform: translate(21px, 0px) rotate(-45deg); -ms-transform-origin: left bottom; -webkit-transform: translate(21px, 2px) rotate(-45deg); -webkit-transform-origin: left bottom; -o-transform: translate(21px, 0px) rotate(-45deg); -o-transform-origin: left bottom; } .event-sequence-grid .column-header span { border-bottom: 1px solid black; } /* Floating column styles */ .event-sequence-grid .wrapper { position: relative; width: 100%; overflow: hidden; } .event-sequence-grid .floating-col { display: inline-block; position: absolute; overflow: hidden; border-right: 1px solid black; z-index: 1; } .event-sequence-grid .inner-wrapper { position: relative; } .event-sequence-grid .hidden-spacer { position: relative; display: inline-block; } .event-sequence-grid .table-body { overflow-x: scroll; } .event-sequence-grid .table-body table { position: relative; display: inline-block; } .event-sequence-grid .floating-col td { background-color: white; border: 1px solid black; } .event-sequence-grid .floating-col td.first { } /* List-only styles */ table.event-sequence-list { margin-top: 20px; } .event-sequence-list td { border: 1px solid black; } </style> <h1>Event sequence generated by Umple from multiple_sm_one_transitionless.ump</h1> <p>Note that the sequence of events is randomly generated. Subsequential event generation will likely yield different results.</p> <h2>Class MultipleSmOneTransitionless state machine sm1</h2> <div id="wrapper0" class="wrapper"></div><p>No transitions found in state machine</p> <h2>Class MultipleSmOneTransitionless state machine sm2</h2> <div class="event-sequence-grid"> <div id="wrapper1" class="wrapper"> <div class="floating-col"> <table> <tr> <td class="row-header first">States</td> </tr> <tr> <td class="row-header" data-parent="">s2</td> </tr> <tr> <td class="row-header" data-parent="">s3</td> </tr> </table> </div> <div class="table-body"> <div class="inner-wrapper"> <table> <tr> <td class="column-header"><div><span>START</span></div></td> <td class="column-header"><div><span>1. ev1</span></div></td> </tr> <tr> <td class="content-cell" data-parent="">X</td> <td class="content-cell"> </td> </tr> <tr> <td class="content-cell" data-parent=""> </td> <td class="content-cell">X</td> </tr> </table> </div> </div> </div> </div> <table class="event-sequence-list"> <tr> <td class="column-header">Event<br>Number</td> <td class="column-header">Event</td> <td class="column-header">Next State</td> </tr> <tr> <td class="">START</td> <td class="">-</td> <td class="">s2</td> </tr> <tr> <td class="">1</td> <td class="">ev1</td> <td class="">s3</td> </tr> </table> <p>Event sequence ending reason: Visited all states</p> <script> function formatEventSequence(wrapper) { if(wrapper === undefined || wrapper.innerHTML === "") { return; } // Calculate spacer height due to slanted names var longest = 0; var last = 0; var columnHeaders = wrapper .getElementsByClassName("column-header"); for(var i = 0; i < columnHeaders.length; i++) { var innerSpan = columnHeaders[i].firstChild.firstChild; if(longest < innerSpan.offsetWidth) longest = innerSpan.offsetWidth; if(i == columnHeaders.length - 1) last = innerSpan.offsetWidth; } var spacerHeight = longest * Math.cos(45 * (Math.PI / 180)); var lastLabelWidth = last * Math.sin(45 * (Math.PI / 180)); // Get the various elements var tableBody = wrapper.getElementsByClassName("table-body")[0]; var floatingCol = wrapper.getElementsByClassName('floating-col')[0]; var innerWrapper = wrapper.getElementsByClassName("inner-wrapper")[0]; var actualTable = innerWrapper.getElementsByTagName('table')[0] // give the inner elements the header space for the slanted headers tableBody.style.height = tableBody.offsetHeight + spacerHeight +'px'; // Make the inner wrapper long enough to hold the scrollable contents innerWrapper.style.width = floatingCol.offsetWidth + actualTable.offsetWidth + lastLabelWidth + 'px'; // Move the elements down so the headers show actualTable.style.top = spacerHeight + 'px'; floatingCol.style.top = spacerHeight - 1 + 'px'; // Move the table body over to accommodate the floating header column innerWrapper.getElementsByTagName('table')[0].style.left = floatingCol.offsetWidth - 6 + 'px'; }; var wrapperIndex = 0; while(true) { var wrapper = document.getElementById("wrapper" + wrapperIndex); if(wrapper === null) { break; } wrapperIndex++; formatEventSequence(wrapper); } </script> <style> /* Shared Styles */ .event-sequence-grid, .event-sequence-list { font-family: sans-serif; } .event-sequence-grid table, table.event-sequence-list { border-collapse: collapse; } .event-sequence-list td, .event-sequence-grid td { line-height: 1; padding: 2px 10px 2px 10px; white-space: nowrap; text-align: center; } /* Grid-only styles */ .event-sequence-grid .content-cell { border: 1px solid black; } .event-sequence-grid .row-header { text-align: left; } .event-sequence-grid .column-header > div { width: 10px; -moz-transform: perspective(999px) /* Helps with the font distortion */ translate(20px, 0px) rotate(-45deg); -moz-transform-origin: left bottom; -ms-transform: translate(21px, 0px) rotate(-45deg); -ms-transform-origin: left bottom; -webkit-transform: translate(21px, 2px) rotate(-45deg); -webkit-transform-origin: left bottom; -o-transform: translate(21px, 0px) rotate(-45deg); -o-transform-origin: left bottom; } .event-sequence-grid .column-header span { border-bottom: 1px solid black; } /* Floating column styles */ .event-sequence-grid .wrapper { position: relative; width: 100%; overflow: hidden; } .event-sequence-grid .floating-col { display: inline-block; position: absolute; overflow: hidden; border-right: 1px solid black; z-index: 1; } .event-sequence-grid .inner-wrapper { position: relative; } .event-sequence-grid .hidden-spacer { position: relative; display: inline-block; } .event-sequence-grid .table-body { overflow-x: scroll; } .event-sequence-grid .table-body table { position: relative; display: inline-block; } .event-sequence-grid .floating-col td { background-color: white; border: 1px solid black; } .event-sequence-grid .floating-col td.first { } /* List-only styles */ table.event-sequence-list { margin-top: 20px; } .event-sequence-list td { border: 1px solid black; } </style> <h1>Event sequence generated by Umple from no_transitions.ump</h1> <p>Note that the sequence of events is randomly generated. Subsequential event generation will likely yield different results.</p> <h2>Class NoTransitions state machine sm</h2> <div id="wrapper0" class="wrapper"></div><p>No transitions found in state machine</p> <script> function formatEventSequence(wrapper) { if(wrapper === undefined || wrapper.innerHTML === "") { return; } // Calculate spacer height due to slanted names var longest = 0; var last = 0; var columnHeaders = wrapper .getElementsByClassName("column-header"); for(var i = 0; i < columnHeaders.length; i++) { var innerSpan = columnHeaders[i].firstChild.firstChild; if(longest < innerSpan.offsetWidth) longest = innerSpan.offsetWidth; if(i == columnHeaders.length - 1) last = innerSpan.offsetWidth; } var spacerHeight = longest * Math.cos(45 * (Math.PI / 180)); var lastLabelWidth = last * Math.sin(45 * (Math.PI / 180)); // Get the various elements var tableBody = wrapper.getElementsByClassName("table-body")[0]; var floatingCol = wrapper.getElementsByClassName('floating-col')[0]; var innerWrapper = wrapper.getElementsByClassName("inner-wrapper")[0]; var actualTable = innerWrapper.getElementsByTagName('table')[0] // give the inner elements the header space for the slanted headers tableBody.style.height = tableBody.offsetHeight + spacerHeight +'px'; // Make the inner wrapper long enough to hold the scrollable contents innerWrapper.style.width = floatingCol.offsetWidth + actualTable.offsetWidth + lastLabelWidth + 'px'; // Move the elements down so the headers show actualTable.style.top = spacerHeight + 'px'; floatingCol.style.top = spacerHeight - 1 + 'px'; // Move the table body over to accommodate the floating header column innerWrapper.getElementsByTagName('table')[0].style.left = floatingCol.offsetWidth - 6 + 'px'; }; var wrapperIndex = 0; while(true) { var wrapper = document.getElementById("wrapper" + wrapperIndex); if(wrapper === null) { break; } wrapperIndex++; formatEventSequence(wrapper); } </script> <style> /* Shared Styles */ .event-sequence-grid, .event-sequence-list { font-family: sans-serif; } .event-sequence-grid table, table.event-sequence-list { border-collapse: collapse; } .event-sequence-list td, .event-sequence-grid td { line-height: 1; padding: 2px 10px 2px 10px; white-space: nowrap; text-align: center; } /* Grid-only styles */ .event-sequence-grid .content-cell { border: 1px solid black; } .event-sequence-grid .row-header { text-align: left; } .event-sequence-grid .column-header > div { width: 10px; -moz-transform: perspective(999px) /* Helps with the font distortion */ translate(20px, 0px) rotate(-45deg); -moz-transform-origin: left bottom; -ms-transform: translate(21px, 0px) rotate(-45deg); -ms-transform-origin: left bottom; -webkit-transform: translate(21px, 2px) rotate(-45deg); -webkit-transform-origin: left bottom; -o-transform: translate(21px, 0px) rotate(-45deg); -o-transform-origin: left bottom; } .event-sequence-grid .column-header span { border-bottom: 1px solid black; } /* Floating column styles */ .event-sequence-grid .wrapper { position: relative; width: 100%; overflow: hidden; } .event-sequence-grid .floating-col { display: inline-block; position: absolute; overflow: hidden; border-right: 1px solid black; z-index: 1; } .event-sequence-grid .inner-wrapper { position: relative; } .event-sequence-grid .hidden-spacer { position: relative; display: inline-block; } .event-sequence-grid .table-body { overflow-x: scroll; } .event-sequence-grid .table-body table { position: relative; display: inline-block; } .event-sequence-grid .floating-col td { background-color: white; border: 1px solid black; } .event-sequence-grid .floating-col td.first { } /* List-only styles */ table.event-sequence-list { margin-top: 20px; } .event-sequence-list td { border: 1px solid black; } </style> <h1>Event sequence generated by Umple from guarded_transition_all_visited.ump</h1> <p>Note that the sequence of events is randomly generated. Subsequential event generation will likely yield different results.</p> <h2>Class GuardedTransitionAllVisited state machine sm</h2> <div class="event-sequence-grid"> <div id="wrapper0" class="wrapper"> <div class="floating-col"> <table> <tr> <td class="row-header first">States</td> </tr> <tr> <td class="row-header" data-parent="">s1</td> </tr> <tr> <td class="row-header" data-parent="">s2</td> </tr> <tr> <td class="row-header" data-parent="">s3</td> </tr> </table> </div> <div class="table-body"> <div class="inner-wrapper"> <table> <tr> <td class="column-header"><div><span>START</span></div></td> <td class="column-header"><div><span>1. ev1 [getGuard()]</span></div></td> <td class="column-header"><div><span>2. ev1</span></div></td> <td class="column-header"><div><span>3. ev1 [!getGuard()]</span></div></td> </tr> <tr> <td class="content-cell" data-parent="">X</td> <td class="content-cell"> </td> <td class="content-cell">X</td> <td class="content-cell"> </td> </tr> <tr> <td class="content-cell" data-parent=""> </td> <td class="content-cell">X</td> <td class="content-cell"> </td> <td class="content-cell"> </td> </tr> <tr> <td class="content-cell" data-parent=""> </td> <td class="content-cell"> </td> <td class="content-cell"> </td> <td class="content-cell">X</td> </tr> </table> </div> </div> </div> </div> <table class="event-sequence-list"> <tr> <td class="column-header">Event<br>Number</td> <td class="column-header">Event</td> <td class="column-header">Next State</td> </tr> <tr> <td class="">START</td> <td class="">-</td> <td class="">s1</td> </tr> <tr> <td class="">1</td> <td class="">ev1 [getGuard()]</td> <td class="">s2</td> </tr> <tr> <td class="">2</td> <td class="">ev1</td> <td class="">s1</td> </tr> <tr> <td class="">3</td> <td class="">ev1 [!getGuard()]</td> <td class="">s3</td> </tr> </table> <p>Event sequence ending reason: Visited all states</p> <script> function formatEventSequence(wrapper) { if(wrapper === undefined || wrapper.innerHTML === "") { return; } // Calculate spacer height due to slanted names var longest = 0; var last = 0; var columnHeaders = wrapper .getElementsByClassName("column-header"); for(var i = 0; i < columnHeaders.length; i++) { var innerSpan = columnHeaders[i].firstChild.firstChild; if(longest < innerSpan.offsetWidth) longest = innerSpan.offsetWidth; if(i == columnHeaders.length - 1) last = innerSpan.offsetWidth; } var spacerHeight = longest * Math.cos(45 * (Math.PI / 180)); var lastLabelWidth = last * Math.sin(45 * (Math.PI / 180)); // Get the various elements var tableBody = wrapper.getElementsByClassName("table-body")[0]; var floatingCol = wrapper.getElementsByClassName('floating-col')[0]; var innerWrapper = wrapper.getElementsByClassName("inner-wrapper")[0]; var actualTable = innerWrapper.getElementsByTagName('table')[0] // give the inner elements the header space for the slanted headers tableBody.style.height = tableBody.offsetHeight + spacerHeight +'px'; // Make the inner wrapper long enough to hold the scrollable contents innerWrapper.style.width = floatingCol.offsetWidth + actualTable.offsetWidth + lastLabelWidth + 'px'; // Move the elements down so the headers show actualTable.style.top = spacerHeight + 'px'; floatingCol.style.top = spacerHeight - 1 + 'px'; // Move the table body over to accommodate the floating header column innerWrapper.getElementsByTagName('table')[0].style.left = floatingCol.offsetWidth - 6 + 'px'; }; var wrapperIndex = 0; while(true) { var wrapper = document.getElementById("wrapper" + wrapperIndex); if(wrapper === null) { break; } wrapperIndex++; formatEventSequence(wrapper); } </script> <style> /* Shared Styles */ .event-sequence-grid, .event-sequence-list { font-family: sans-serif; } .event-sequence-grid table, table.event-sequence-list { border-collapse: collapse; } .event-sequence-list td, .event-sequence-grid td { line-height: 1; padding: 2px 10px 2px 10px; white-space: nowrap; text-align: center; } /* Grid-only styles */ .event-sequence-grid .content-cell { border: 1px solid black; } .event-sequence-grid .row-header { text-align: left; } .event-sequence-grid .column-header > div { width: 10px; -moz-transform: perspective(999px) /* Helps with the font distortion */ translate(20px, 0px) rotate(-45deg); -moz-transform-origin: left bottom; -ms-transform: translate(21px, 0px) rotate(-45deg); -ms-transform-origin: left bottom; -webkit-transform: translate(21px, 2px) rotate(-45deg); -webkit-transform-origin: left bottom; -o-transform: translate(21px, 0px) rotate(-45deg); -o-transform-origin: left bottom; } .event-sequence-grid .column-header span { border-bottom: 1px solid black; } /* Floating column styles */ .event-sequence-grid .wrapper { position: relative; width: 100%; overflow: hidden; } .event-sequence-grid .floating-col { display: inline-block; position: absolute; overflow: hidden; border-right: 1px solid black; z-index: 1; } .event-sequence-grid .inner-wrapper { position: relative; } .event-sequence-grid .hidden-spacer { position: relative; display: inline-block; } .event-sequence-grid .table-body { overflow-x: scroll; } .event-sequence-grid .table-body table { position: relative; display: inline-block; } .event-sequence-grid .floating-col td { background-color: white; border: 1px solid black; } .event-sequence-grid .floating-col td.first { } /* List-only styles */ table.event-sequence-list { margin-top: 20px; } .event-sequence-list td { border: 1px solid black; } </style> <h1>Event sequence generated by Umple from simple.ump</h1> <p>Note that the sequence of events is randomly generated. Subsequential event generation will likely yield different results.</p> <h2>Class ReallySimpleStateMachine state machine sm</h2> <div class="event-sequence-grid"> <div id="wrapper0" class="wrapper"> <div class="floating-col"> <table> <tr> <td class="row-header first">States</td> </tr> <tr> <td class="row-header" data-parent="">s1</td> </tr> <tr> <td class="row-header" data-parent="">s2</td> </tr> </table> </div> <div class="table-body"> <div class="inner-wrapper"> <table> <tr> <td class="column-header"><div><span>START</span></div></td> <td class="column-header"><div><span>1. ev1</span></div></td> </tr> <tr> <td class="content-cell" data-parent="">X</td> <td class="content-cell"> </td> </tr> <tr> <td class="content-cell" data-parent=""> </td> <td class="content-cell">X</td> </tr> </table> </div> </div> </div> </div> <table class="event-sequence-list"> <tr> <td class="column-header">Event<br>Number</td> <td class="column-header">Event</td> <td class="column-header">Next State</td> </tr> <tr> <td class="">START</td> <td class="">-</td> <td class="">s1</td> </tr> <tr> <td class="">1</td> <td class="">ev1</td> <td class="">s2</td> </tr> </table> <p>Event sequence ending reason: Visited all states</p> <script> function formatEventSequence(wrapper) { if(wrapper === undefined || wrapper.innerHTML === "") { return; } // Calculate spacer height due to slanted names var longest = 0; var last = 0; var columnHeaders = wrapper .getElementsByClassName("column-header"); for(var i = 0; i < columnHeaders.length; i++) { var innerSpan = columnHeaders[i].firstChild.firstChild; if(longest < innerSpan.offsetWidth) longest = innerSpan.offsetWidth; if(i == columnHeaders.length - 1) last = innerSpan.offsetWidth; } var spacerHeight = longest * Math.cos(45 * (Math.PI / 180)); var lastLabelWidth = last * Math.sin(45 * (Math.PI / 180)); // Get the various elements var tableBody = wrapper.getElementsByClassName("table-body")[0]; var floatingCol = wrapper.getElementsByClassName('floating-col')[0]; var innerWrapper = wrapper.getElementsByClassName("inner-wrapper")[0]; var actualTable = innerWrapper.getElementsByTagName('table')[0] // give the inner elements the header space for the slanted headers tableBody.style.height = tableBody.offsetHeight + spacerHeight +'px'; // Make the inner wrapper long enough to hold the scrollable contents innerWrapper.style.width = floatingCol.offsetWidth + actualTable.offsetWidth + lastLabelWidth + 'px'; // Move the elements down so the headers show actualTable.style.top = spacerHeight + 'px'; floatingCol.style.top = spacerHeight - 1 + 'px'; // Move the table body over to accommodate the floating header column innerWrapper.getElementsByTagName('table')[0].style.left = floatingCol.offsetWidth - 6 + 'px'; }; var wrapperIndex = 0; while(true) { var wrapper = document.getElementById("wrapper" + wrapperIndex); if(wrapper === null) { break; } wrapperIndex++; formatEventSequence(wrapper); } </script> <style> /* Shared Styles */ .event-sequence-grid, .event-sequence-list { font-family: sans-serif; } .event-sequence-grid table, table.event-sequence-list { border-collapse: collapse; } .event-sequence-list td, .event-sequence-grid td { line-height: 1; padding: 2px 10px 2px 10px; white-space: nowrap; text-align: center; } /* Grid-only styles */ .event-sequence-grid .content-cell { border: 1px solid black; } .event-sequence-grid .row-header { text-align: left; } .event-sequence-grid .column-header > div { width: 10px; -moz-transform: perspective(999px) /* Helps with the font distortion */ translate(20px, 0px) rotate(-45deg); -moz-transform-origin: left bottom; -ms-transform: translate(21px, 0px) rotate(-45deg); -ms-transform-origin: left bottom; -webkit-transform: translate(21px, 2px) rotate(-45deg); -webkit-transform-origin: left bottom; -o-transform: translate(21px, 0px) rotate(-45deg); -o-transform-origin: left bottom; } .event-sequence-grid .column-header span { border-bottom: 1px solid black; } /* Floating column styles */ .event-sequence-grid .wrapper { position: relative; width: 100%; overflow: hidden; } .event-sequence-grid .floating-col { display: inline-block; position: absolute; overflow: hidden; border-right: 1px solid black; z-index: 1; } .event-sequence-grid .inner-wrapper { position: relative; } .event-sequence-grid .hidden-spacer { position: relative; display: inline-block; } .event-sequence-grid .table-body { overflow-x: scroll; } .event-sequence-grid .table-body table { position: relative; display: inline-block; } .event-sequence-grid .floating-col td { background-color: white; border: 1px solid black; } .event-sequence-grid .floating-col td.first { } /* List-only styles */ table.event-sequence-list { margin-top: 20px; } .event-sequence-list td { border: 1px solid black; } </style> <h1>Event sequence generated by Umple from nested_end_state_reached.ump</h1> <p>Note that the sequence of events is randomly generated. Subsequential event generation will likely yield different results.</p> <h2>Class EventSeqTestEndState state machine sm</h2> <div class="event-sequence-grid"> <div id="wrapper0" class="wrapper"> <div class="floating-col"> <table> <tr> <td class="row-header first">States</td> </tr> <tr> <td class="row-header" data-parent="">super1</td> </tr> <tr> <td class="row-header" data-parent="0">- s1</td> </tr> <tr> <td class="row-header" data-parent="0">- sidestate</td> </tr> <tr> <td class="row-header" data-parent="0">- s2</td> </tr> <tr> <td class="row-header" data-parent="0">- s3</td> </tr> <tr> <td class="row-header" data-parent="">superend</td> </tr> <tr> <td class="row-header" data-parent="5">- endstate</td> </tr> </table> </div> <div class="table-body"> <div class="inner-wrapper"> <table> <tr> <td class="column-header"><div><span>START</span></div></td> <td class="column-header"><div><span>1. ev1</span></div></td> <td class="column-header"><div><span>2. ev2</span></div></td> <td class="column-header"><div><span>3. ev2</span></div></td> <td class="column-header"><div><span>4. ev2</span></div></td> <td class="column-header"><div><span>5. ev4</span></div></td> </tr> <tr> <td class="content-cell" data-parent=""> </td> <td class="content-cell"> </td> <td class="content-cell"> </td> <td class="content-cell"> </td> <td class="content-cell"> </td> <td class="content-cell"> </td> </tr> <tr> <td class="content-cell" data-parent="0">X</td> <td class="content-cell"> </td> <td class="content-cell"> </td> <td class="content-cell"> </td> <td class="content-cell"> </td> <td class="content-cell"> </td> </tr> <tr> <td class="content-cell" data-parent="0"> </td> <td class="content-cell"> </td> <td class="content-cell"> </td> <td class="content-cell"> </td> <td class="content-cell"> </td> <td class="content-cell"> </td> </tr> <tr> <td class="content-cell" data-parent="0"> </td> <td class="content-cell">X</td> <td class="content-cell"> </td> <td class="content-cell">X</td> <td class="content-cell"> </td> <td class="content-cell"> </td> </tr> <tr> <td class="content-cell" data-parent="0"> </td> <td class="content-cell"> </td> <td class="content-cell">X</td> <td class="content-cell"> </td> <td class="content-cell">X</td> <td class="content-cell"> </td> </tr> <tr> <td class="content-cell" data-parent=""> </td> <td class="content-cell"> </td> <td class="content-cell"> </td> <td class="content-cell"> </td> <td class="content-cell"> </td> <td class="content-cell"> </td> </tr> <tr> <td class="content-cell" data-parent="5"> </td> <td class="content-cell"> </td> <td class="content-cell"> </td> <td class="content-cell"> </td> <td class="content-cell"> </td> <td class="content-cell">X</td> </tr> </table> </div> </div> </div> </div> <table class="event-sequence-list"> <tr> <td class="column-header">Event<br>Number</td> <td class="column-header">Event</td> <td class="column-header">Next State</td> </tr> <tr> <td class="">START</td> <td class="">-</td> <td class="">super1.s1</td> </tr> <tr> <td class="">1</td> <td class="">ev1</td> <td class="">super1.s2</td> </tr> <tr> <td class="">2</td> <td class="">ev2</td> <td class="">super1.s3</td> </tr> <tr> <td class="">3</td> <td class="">ev2</td> <td class="">super1.s2</td> </tr> <tr> <td class="">4</td> <td class="">ev2</td> <td class="">super1.s3</td> </tr> <tr> <td class="">5</td> <td class="">ev4</td> <td class="">superend.endstate</td> </tr> </table> <p>Event sequence ending reason: Reached an end-state</p> <script> function formatEventSequence(wrapper) { if(wrapper === undefined || wrapper.innerHTML === "") { return; } // Calculate spacer height due to slanted names var longest = 0; var last = 0; var columnHeaders = wrapper .getElementsByClassName("column-header"); for(var i = 0; i < columnHeaders.length; i++) { var innerSpan = columnHeaders[i].firstChild.firstChild; if(longest < innerSpan.offsetWidth) longest = innerSpan.offsetWidth; if(i == columnHeaders.length - 1) last = innerSpan.offsetWidth; } var spacerHeight = longest * Math.cos(45 * (Math.PI / 180)); var lastLabelWidth = last * Math.sin(45 * (Math.PI / 180)); // Get the various elements var tableBody = wrapper.getElementsByClassName("table-body")[0]; var floatingCol = wrapper.getElementsByClassName('floating-col')[0]; var innerWrapper = wrapper.getElementsByClassName("inner-wrapper")[0]; var actualTable = innerWrapper.getElementsByTagName('table')[0] // give the inner elements the header space for the slanted headers tableBody.style.height = tableBody.offsetHeight + spacerHeight +'px'; // Make the inner wrapper long enough to hold the scrollable contents innerWrapper.style.width = floatingCol.offsetWidth + actualTable.offsetWidth + lastLabelWidth + 'px'; // Move the elements down so the headers show actualTable.style.top = spacerHeight + 'px'; floatingCol.style.top = spacerHeight - 1 + 'px'; // Move the table body over to accommodate the floating header column innerWrapper.getElementsByTagName('table')[0].style.left = floatingCol.offsetWidth - 6 + 'px'; }; var wrapperIndex = 0; while(true) { var wrapper = document.getElementById("wrapper" + wrapperIndex); if(wrapper === null) { break; } wrapperIndex++; formatEventSequence(wrapper); } </script> <style> /* Shared Styles */ .event-sequence-grid, .event-sequence-list { font-family: sans-serif; } .event-sequence-grid table, table.event-sequence-list { border-collapse: collapse; } .event-sequence-list td, .event-sequence-grid td { line-height: 1; padding: 2px 10px 2px 10px; white-space: nowrap; text-align: center; } /* Grid-only styles */ .event-sequence-grid .content-cell { border: 1px solid black; } .event-sequence-grid .row-header { text-align: left; } .event-sequence-grid .column-header > div { width: 10px; -moz-transform: perspective(999px) /* Helps with the font distortion */ translate(20px, 0px) rotate(-45deg); -moz-transform-origin: left bottom; -ms-transform: translate(21px, 0px) rotate(-45deg); -ms-transform-origin: left bottom; -webkit-transform: translate(21px, 2px) rotate(-45deg); -webkit-transform-origin: left bottom; -o-transform: translate(21px, 0px) rotate(-45deg); -o-transform-origin: left bottom; } .event-sequence-grid .column-header span { border-bottom: 1px solid black; } /* Floating column styles */ .event-sequence-grid .wrapper { position: relative; width: 100%; overflow: hidden; } .event-sequence-grid .floating-col { display: inline-block; position: absolute; overflow: hidden; border-right: 1px solid black; z-index: 1; } .event-sequence-grid .inner-wrapper { position: relative; } .event-sequence-grid .hidden-spacer { position: relative; display: inline-block; } .event-sequence-grid .table-body { overflow-x: scroll; } .event-sequence-grid .table-body table { position: relative; display: inline-block; } .event-sequence-grid .floating-col td { background-color: white; border: 1px solid black; } .event-sequence-grid .floating-col td.first { } /* List-only styles */ table.event-sequence-list { margin-top: 20px; } .event-sequence-list td { border: 1px solid black; } </style> <h1>Event sequence generated by Umple from end_state_reached.ump</h1> <p>Note that the sequence of events is randomly generated. Subsequential event generation will likely yield different results.</p> <h2>Class EventSeqTestEndState state machine sm</h2> <div class="event-sequence-grid"> <div id="wrapper0" class="wrapper"> <div class="floating-col"> <table> <tr> <td class="row-header first">States</td> </tr> <tr> <td class="row-header" data-parent="">s1</td> </tr> <tr> <td class="row-header" data-parent="">sidestate</td> </tr> <tr> <td class="row-header" data-parent="">s2</td> </tr> <tr> <td class="row-header" data-parent="">s3</td> </tr> <tr> <td class="row-header" data-parent="">endstate</td> </tr> </table> </div> <div class="table-body"> <div class="inner-wrapper"> <table> <tr> <td class="column-header"><div><span>START</span></div></td> <td class="column-header"><div><span>1. ev1</span></div></td> <td class="column-header"><div><span>2. ev2</span></div></td> <td class="column-header"><div><span>3. ev2</span></div></td> <td class="column-header"><div><span>4. ev2</span></div></td> <td class="column-header"><div><span>5. ev4</span></div></td> </tr> <tr> <td class="content-cell" data-parent="">X</td> <td class="content-cell"> </td> <td class="content-cell"> </td> <td class="content-cell"> </td> <td class="content-cell"> </td> <td class="content-cell"> </td> </tr> <tr> <td class="content-cell" data-parent=""> </td> <td class="content-cell"> </td> <td class="content-cell"> </td> <td class="content-cell"> </td> <td class="content-cell"> </td> <td class="content-cell"> </td> </tr> <tr> <td class="content-cell" data-parent=""> </td> <td class="content-cell">X</td> <td class="content-cell"> </td> <td class="content-cell">X</td> <td class="content-cell"> </td> <td class="content-cell"> </td> </tr> <tr> <td class="content-cell" data-parent=""> </td> <td class="content-cell"> </td> <td class="content-cell">X</td> <td class="content-cell"> </td> <td class="content-cell">X</td> <td class="content-cell"> </td> </tr> <tr> <td class="content-cell" data-parent=""> </td> <td class="content-cell"> </td> <td class="content-cell"> </td> <td class="content-cell"> </td> <td class="content-cell"> </td> <td class="content-cell">X</td> </tr> </table> </div> </div> </div> </div> <table class="event-sequence-list"> <tr> <td class="column-header">Event<br>Number</td> <td class="column-header">Event</td> <td class="column-header">Next State</td> </tr> <tr> <td class="">START</td> <td class="">-</td> <td class="">s1</td> </tr> <tr> <td class="">1</td> <td class="">ev1</td> <td class="">s2</td> </tr> <tr> <td class="">2</td> <td class="">ev2</td> <td class="">s3</td> </tr> <tr> <td class="">3</td> <td class="">ev2</td> <td class="">s2</td> </tr> <tr> <td class="">4</td> <td class="">ev2</td> <td class="">s3</td> </tr> <tr> <td class="">5</td> <td class="">ev4</td> <td class="">endstate</td> </tr> </table> <p>Event sequence ending reason: Reached an end-state</p> <script> function formatEventSequence(wrapper) { if(wrapper === undefined || wrapper.innerHTML === "") { return; } // Calculate spacer height due to slanted names var longest = 0; var last = 0; var columnHeaders = wrapper .getElementsByClassName("column-header"); for(var i = 0; i < columnHeaders.length; i++) { var innerSpan = columnHeaders[i].firstChild.firstChild; if(longest < innerSpan.offsetWidth) longest = innerSpan.offsetWidth; if(i == columnHeaders.length - 1) last = innerSpan.offsetWidth; } var spacerHeight = longest * Math.cos(45 * (Math.PI / 180)); var lastLabelWidth = last * Math.sin(45 * (Math.PI / 180)); // Get the various elements var tableBody = wrapper.getElementsByClassName("table-body")[0]; var floatingCol = wrapper.getElementsByClassName('floating-col')[0]; var innerWrapper = wrapper.getElementsByClassName("inner-wrapper")[0]; var actualTable = innerWrapper.getElementsByTagName('table')[0] // give the inner elements the header space for the slanted headers tableBody.style.height = tableBody.offsetHeight + spacerHeight +'px'; // Make the inner wrapper long enough to hold the scrollable contents innerWrapper.style.width = floatingCol.offsetWidth + actualTable.offsetWidth + lastLabelWidth + 'px'; // Move the elements down so the headers show actualTable.style.top = spacerHeight + 'px'; floatingCol.style.top = spacerHeight - 1 + 'px'; // Move the table body over to accommodate the floating header column innerWrapper.getElementsByTagName('table')[0].style.left = floatingCol.offsetWidth - 6 + 'px'; }; var wrapperIndex = 0; while(true) { var wrapper = document.getElementById("wrapper" + wrapperIndex); if(wrapper === null) { break; } wrapperIndex++; formatEventSequence(wrapper); } </script> <style> /* Shared Styles */ .event-sequence-grid, .event-sequence-list { font-family: sans-serif; } .event-sequence-grid table, table.event-sequence-list { border-collapse: collapse; } .event-sequence-list td, .event-sequence-grid td { line-height: 1; padding: 2px 10px 2px 10px; white-space: nowrap; text-align: center; } /* Grid-only styles */ .event-sequence-grid .content-cell { border: 1px solid black; } .event-sequence-grid .row-header { text-align: left; } .event-sequence-grid .column-header > div { width: 10px; -moz-transform: perspective(999px) /* Helps with the font distortion */ translate(20px, 0px) rotate(-45deg); -moz-transform-origin: left bottom; -ms-transform: translate(21px, 0px) rotate(-45deg); -ms-transform-origin: left bottom; -webkit-transform: translate(21px, 2px) rotate(-45deg); -webkit-transform-origin: left bottom; -o-transform: translate(21px, 0px) rotate(-45deg); -o-transform-origin: left bottom; } .event-sequence-grid .column-header span { border-bottom: 1px solid black; } /* Floating column styles */ .event-sequence-grid .wrapper { position: relative; width: 100%; overflow: hidden; } .event-sequence-grid .floating-col { display: inline-block; position: absolute; overflow: hidden; border-right: 1px solid black; z-index: 1; } .event-sequence-grid .inner-wrapper { position: relative; } .event-sequence-grid .hidden-spacer { position: relative; display: inline-block; } .event-sequence-grid .table-body { overflow-x: scroll; } .event-sequence-grid .table-body table { position: relative; display: inline-block; } .event-sequence-grid .floating-col td { background-color: white; border: 1px solid black; } .event-sequence-grid .floating-col td.first { } /* List-only styles */ table.event-sequence-list { margin-top: 20px; } .event-sequence-list td { border: 1px solid black; } </style> <h1>Event sequence generated by Umple from nested_all_states_visited.ump</h1> <p>Note that the sequence of events is randomly generated. Subsequential event generation will likely yield different results.</p> <h2>Class EventSeqAllVisited state machine sm</h2> <div class="event-sequence-grid"> <div id="wrapper0" class="wrapper"> <div class="floating-col"> <table> <tr> <td class="row-header first">States</td> </tr> <tr> <td class="row-header" data-parent="">supersuper</td> </tr> <tr> <td class="row-header" data-parent="0">- hub</td> </tr> <tr> <td class="row-header" data-parent="1">- - s1</td> </tr> <tr> <td class="row-header" data-parent="0">- leaves</td> </tr> <tr> <td class="row-header" data-parent="3">- - s2</td> </tr> <tr> <td class="row-header" data-parent="3">- - s3</td> </tr> <tr> <td class="row-header" data-parent="3">- - s4</td> </tr> </table> </div> <div class="table-body"> <div class="inner-wrapper"> <table> <tr> <td class="column-header"><div><span>START</span></div></td> <td class="column-header"><div><span>1. ev4</span></div></td> <td class="column-header"><div><span>2. ev1</span></div></td> <td class="column-header"><div><span>3. ev4</span></div></td> <td class="column-header"><div><span>4. ev1</span></div></td> <td class="column-header"><div><span>5. ev2</span></div></td> <td class="column-header"><div><span>6. ev1</span></div></td> <td class="column-header"><div><span>7. ev3</span></div></td> </tr> <tr> <td class="content-cell" data-parent=""> </td> <td class="content-cell"> </td> <td class="content-cell"> </td> <td class="content-cell"> </td> <td class="content-cell"> </td> <td class="content-cell"> </td> <td class="content-cell"> </td> <td class="content-cell"> </td> </tr> <tr> <td class="content-cell" data-parent="0"> </td> <td class="content-cell"> </td> <td class="content-cell"> </td> <td class="content-cell"> </td> <td class="content-cell"> </td> <td class="content-cell"> </td> <td class="content-cell"> </td> <td class="content-cell"> </td> </tr> <tr> <td class="content-cell" data-parent="1">X</td> <td class="content-cell"> </td> <td class="content-cell">X</td> <td class="content-cell"> </td> <td class="content-cell">X</td> <td class="content-cell"> </td> <td class="content-cell">X</td> <td class="content-cell"> </td> </tr> <tr> <td class="content-cell" data-parent="0"> </td> <td class="content-cell"> </td> <td class="content-cell"> </td> <td class="content-cell"> </td> <td class="content-cell"> </td> <td class="content-cell"> </td> <td class="content-cell"> </td> <td class="content-cell"> </td> </tr> <tr> <td class="content-cell" data-parent="3"> </td> <td class="content-cell"> </td> <td class="content-cell"> </td> <td class="content-cell"> </td> <td class="content-cell"> </td> <td class="content-cell">X</td> <td class="content-cell"> </td> <td class="content-cell"> </td> </tr> <tr> <td class="content-cell" data-parent="3"> </td> <td class="content-cell"> </td> <td class="content-cell"> </td> <td class="content-cell"> </td> <td class="content-cell"> </td> <td class="content-cell"> </td> <td class="content-cell"> </td> <td class="content-cell">X</td> </tr> <tr> <td class="content-cell" data-parent="3"> </td> <td class="content-cell">X</td> <td class="content-cell"> </td> <td class="content-cell">X</td> <td class="content-cell"> </td> <td class="content-cell"> </td> <td class="content-cell"> </td> <td class="content-cell"> </td> </tr> </table> </div> </div> </div> </div> <table class="event-sequence-list"> <tr> <td class="column-header">Event<br>Number</td> <td class="column-header">Event</td> <td class="column-header">Next State</td> </tr> <tr> <td class="">START</td> <td class="">-</td> <td class="">supersuper.hub.s1</td> </tr> <tr> <td class="">1</td> <td class="">ev4</td> <td class="">supersuper.leaves.s4</td> </tr> <tr> <td class="">2</td> <td class="">ev1</td> <td class="">supersuper.hub.s1</td> </tr> <tr> <td class="">3</td> <td class="">ev4</td> <td class="">supersuper.leaves.s4</td> </tr> <tr> <td class="">4</td> <td class="">ev1</td> <td class="">supersuper.hub.s1</td> </tr> <tr> <td class="">5</td> <td class="">ev2</td> <td class="">supersuper.leaves.s2</td> </tr> <tr> <td class="">6</td> <td class="">ev1</td> <td class="">supersuper.hub.s1</td> </tr> <tr> <td class="">7</td> <td class="">ev3</td> <td class="">supersuper.leaves.s3</td> </tr> </table> <p>Event sequence ending reason: Visited all states</p> <script> function formatEventSequence(wrapper) { if(wrapper === undefined || wrapper.innerHTML === "") { return; } // Calculate spacer height due to slanted names var longest = 0; var last = 0; var columnHeaders = wrapper .getElementsByClassName("column-header"); for(var i = 0; i < columnHeaders.length; i++) { var innerSpan = columnHeaders[i].firstChild.firstChild; if(longest < innerSpan.offsetWidth) longest = innerSpan.offsetWidth; if(i == columnHeaders.length - 1) last = innerSpan.offsetWidth; } var spacerHeight = longest * Math.cos(45 * (Math.PI / 180)); var lastLabelWidth = last * Math.sin(45 * (Math.PI / 180)); // Get the various elements var tableBody = wrapper.getElementsByClassName("table-body")[0]; var floatingCol = wrapper.getElementsByClassName('floating-col')[0]; var innerWrapper = wrapper.getElementsByClassName("inner-wrapper")[0]; var actualTable = innerWrapper.getElementsByTagName('table')[0] // give the inner elements the header space for the slanted headers tableBody.style.height = tableBody.offsetHeight + spacerHeight +'px'; // Make the inner wrapper long enough to hold the scrollable contents innerWrapper.style.width = floatingCol.offsetWidth + actualTable.offsetWidth + lastLabelWidth + 'px'; // Move the elements down so the headers show actualTable.style.top = spacerHeight + 'px'; floatingCol.style.top = spacerHeight - 1 + 'px'; // Move the table body over to accommodate the floating header column innerWrapper.getElementsByTagName('table')[0].style.left = floatingCol.offsetWidth - 6 + 'px'; }; var wrapperIndex = 0; while(true) { var wrapper = document.getElementById("wrapper" + wrapperIndex); if(wrapper === null) { break; } wrapperIndex++; formatEventSequence(wrapper); } </script> <style> /* Shared Styles */ .event-sequence-grid, .event-sequence-list { font-family: sans-serif; } .event-sequence-grid table, table.event-sequence-list { border-collapse: collapse; } .event-sequence-list td, .event-sequence-grid td { line-height: 1; padding: 2px 10px 2px 10px; white-space: nowrap; text-align: center; } /* Grid-only styles */ .event-sequence-grid .content-cell { border: 1px solid black; } .event-sequence-grid .row-header { text-align: left; } .event-sequence-grid .column-header > div { width: 10px; -moz-transform: perspective(999px) /* Helps with the font distortion */ translate(20px, 0px) rotate(-45deg); -moz-transform-origin: left bottom; -ms-transform: translate(21px, 0px) rotate(-45deg); -ms-transform-origin: left bottom; -webkit-transform: translate(21px, 2px) rotate(-45deg); -webkit-transform-origin: left bottom; -o-transform: translate(21px, 0px) rotate(-45deg); -o-transform-origin: left bottom; } .event-sequence-grid .column-header span { border-bottom: 1px solid black; } /* Floating column styles */ .event-sequence-grid .wrapper { position: relative; width: 100%; overflow: hidden; } .event-sequence-grid .floating-col { display: inline-block; position: absolute; overflow: hidden; border-right: 1px solid black; z-index: 1; } .event-sequence-grid .inner-wrapper { position: relative; } .event-sequence-grid .hidden-spacer { position: relative; display: inline-block; } .event-sequence-grid .table-body { overflow-x: scroll; } .event-sequence-grid .table-body table { position: relative; display: inline-block; } .event-sequence-grid .floating-col td { background-color: white; border: 1px solid black; } .event-sequence-grid .floating-col td.first { } /* List-only styles */ table.event-sequence-list { margin-top: 20px; } .event-sequence-list td { border: 1px solid black; } </style> <h1>Event sequence generated by Umple from simple_nested.ump</h1> <p>Note that the sequence of events is randomly generated. Subsequential event generation will likely yield different results.</p> <h2>Class ReallySimpleNestedStateMachine state machine sm</h2> <div class="event-sequence-grid"> <div id="wrapper0" class="wrapper"> <div class="floating-col"> <table> <tr> <td class="row-header first">States</td> </tr> <tr> <td class="row-header" data-parent="">s1</td> </tr> <tr> <td class="row-header" data-parent="0">- s11</td> </tr> <tr> <td class="row-header" data-parent="0">- s12</td> </tr> <tr> <td class="row-header" data-parent="">s2</td> </tr> <tr> <td class="row-header" data-parent="3">- s21</td> </tr> <tr> <td class="row-header" data-parent="3">- s22</td> </tr> </table> </div> <div class="table-body"> <div class="inner-wrapper"> <table> <tr> <td class="column-header"><div><span>START</span></div></td> <td class="column-header"><div><span>1. ev1</span></div></td> <td class="column-header"><div><span>2. ev1</span></div></td> <td class="column-header"><div><span>3. ev1</span></div></td> </tr> <tr> <td class="content-cell" data-parent=""> </td> <td class="content-cell"> </td> <td class="content-cell"> </td> <td class="content-cell"> </td> </tr> <tr> <td class="content-cell" data-parent="0">X</td> <td class="content-cell"> </td> <td class="content-cell"> </td> <td class="content-cell"> </td> </tr> <tr> <td class="content-cell" data-parent="0"> </td> <td class="content-cell">X</td> <td class="content-cell"> </td> <td class="content-cell"> </td> </tr> <tr> <td class="content-cell" data-parent=""> </td> <td class="content-cell"> </td> <td class="content-cell"> </td> <td class="content-cell"> </td> </tr> <tr> <td class="content-cell" data-parent="3"> </td> <td class="content-cell"> </td> <td class="content-cell">X</td> <td class="content-cell"> </td> </tr> <tr> <td class="content-cell" data-parent="3"> </td> <td class="content-cell"> </td> <td class="content-cell"> </td> <td class="content-cell">X</td> </tr> </table> </div> </div> </div> </div> <table class="event-sequence-list"> <tr> <td class="column-header">Event<br>Number</td> <td class="column-header">Event</td> <td class="column-header">Next State</td> </tr> <tr> <td class="">START</td> <td class="">-</td> <td class="">s1.s11</td> </tr> <tr> <td class="">1</td> <td class="">ev1</td> <td class="">s1.s12</td> </tr> <tr> <td class="">2</td> <td class="">ev1</td> <td class="">s2.s21</td> </tr> <tr> <td class="">3</td> <td class="">ev1</td> <td class="">s2.s22</td> </tr> </table> <p>Event sequence ending reason: Visited all states</p> <script> function formatEventSequence(wrapper) { if(wrapper === undefined || wrapper.innerHTML === "") { return; } // Calculate spacer height due to slanted names var longest = 0; var last = 0; var columnHeaders = wrapper .getElementsByClassName("column-header"); for(var i = 0; i < columnHeaders.length; i++) { var innerSpan = columnHeaders[i].firstChild.firstChild; if(longest < innerSpan.offsetWidth) longest = innerSpan.offsetWidth; if(i == columnHeaders.length - 1) last = innerSpan.offsetWidth; } var spacerHeight = longest * Math.cos(45 * (Math.PI / 180)); var lastLabelWidth = last * Math.sin(45 * (Math.PI / 180)); // Get the various elements var tableBody = wrapper.getElementsByClassName("table-body")[0]; var floatingCol = wrapper.getElementsByClassName('floating-col')[0]; var innerWrapper = wrapper.getElementsByClassName("inner-wrapper")[0]; var actualTable = innerWrapper.getElementsByTagName('table')[0] // give the inner elements the header space for the slanted headers tableBody.style.height = tableBody.offsetHeight + spacerHeight +'px'; // Make the inner wrapper long enough to hold the scrollable contents innerWrapper.style.width = floatingCol.offsetWidth + actualTable.offsetWidth + lastLabelWidth + 'px'; // Move the elements down so the headers show actualTable.style.top = spacerHeight + 'px'; floatingCol.style.top = spacerHeight - 1 + 'px'; // Move the table body over to accommodate the floating header column innerWrapper.getElementsByTagName('table')[0].style.left = floatingCol.offsetWidth - 6 + 'px'; }; var wrapperIndex = 0; while(true) { var wrapper = document.getElementById("wrapper" + wrapperIndex); if(wrapper === null) { break; } wrapperIndex++; formatEventSequence(wrapper); } </script> <style> /* Shared Styles */ .event-sequence-grid, .event-sequence-list { font-family: sans-serif; } .event-sequence-grid table, table.event-sequence-list { border-collapse: collapse; } .event-sequence-list td, .event-sequence-grid td { line-height: 1; padding: 2px 10px 2px 10px; white-space: nowrap; text-align: center; } /* Grid-only styles */ .event-sequence-grid .content-cell { border: 1px solid black; } .event-sequence-grid .row-header { text-align: left; } .event-sequence-grid .column-header > div { width: 10px; -moz-transform: perspective(999px) /* Helps with the font distortion */ translate(20px, 0px) rotate(-45deg); -moz-transform-origin: left bottom; -ms-transform: translate(21px, 0px) rotate(-45deg); -ms-transform-origin: left bottom; -webkit-transform: translate(21px, 2px) rotate(-45deg); -webkit-transform-origin: left bottom; -o-transform: translate(21px, 0px) rotate(-45deg); -o-transform-origin: left bottom; } .event-sequence-grid .column-header span { border-bottom: 1px solid black; } /* Floating column styles */ .event-sequence-grid .wrapper { position: relative; width: 100%; overflow: hidden; } .event-sequence-grid .floating-col { display: inline-block; position: absolute; overflow: hidden; border-right: 1px solid black; z-index: 1; } .event-sequence-grid .inner-wrapper { position: relative; } .event-sequence-grid .hidden-spacer { position: relative; display: inline-block; } .event-sequence-grid .table-body { overflow-x: scroll; } .event-sequence-grid .table-body table { position: relative; display: inline-block; } .event-sequence-grid .floating-col td { background-color: white; border: 1px solid black; } .event-sequence-grid .floating-col td.first { } /* List-only styles */ table.event-sequence-list { margin-top: 20px; } .event-sequence-list td { border: 1px solid black; } </style> <h1>Event sequence generated by Umple from nested_counter_hit.ump</h1> <p>Note that the sequence of events is randomly generated. Subsequential event generation will likely yield different results.</p> <h2>Class NestedCounterHit state machine sm</h2> <div class="event-sequence-grid"> <div id="wrapper0" class="wrapper"> <div class="floating-col"> <table> <tr> <td class="row-header first">States</td> </tr> <tr> <td class="row-header" data-parent="">ss1</td> </tr> <tr> <td class="row-header" data-parent="0">- s1</td> </tr> <tr> <td class="row-header" data-parent="0">- s2</td> </tr> <tr> <td class="row-header" data-parent="">ss2</td> </tr> <tr> <td class="row-header" data-parent="3">- s3</td> </tr> <tr> <td class="row-header" data-parent="3">- s4</td> </tr> </table> </div> <div class="table-body"> <div class="inner-wrapper"> <table> <tr> <td class="column-header"><div><span>START</span></div></td> <td class="column-header"><div><span>1. ev2</span></div></td> <td class="column-header"><div><span>2. ev2</span></div></td> <td class="column-header"><div><span>3. ev1</span></div></td> <td class="column-header"><div><span>4. ev4</span></div></td> <td class="column-header"><div><span>5. ev2</span></div></td> <td class="column-header"><div><span>6. ev2</span></div></td> <td class="column-header"><div><span>7. ev3</span></div></td> <td class="column-header"><div><span>8. ev1</span></div></td> <td class="column-header"><div><span>9. ev1</span></div></td> <td class="column-header"><div><span>10. ev1</span></div></td> <td class="column-header"><div><span>11. ev4</span></div></td> <td class="column-header"><div><span>12. ev1</span></div></td> <td class="column-header"><div><span>13. ev1</span></div></td> <td class="column-header"><div><span>14. ev3</span></div></td> <td class="column-header"><div><span>15. ev5</span></div></td> <td class="column-header"><div><span>16. ev1</span></div></td> <td class="column-header"><div><span>17. ev1</span></div></td> <td class="column-header"><div><span>18. ev3</span></div></td> </tr> <tr> <td class="content-cell" data-parent=""> </td> <td class="content-cell"> </td> <td class="content-cell"> </td> <td class="content-cell"> </td> <td class="content-cell"> </td> <td class="content-cell"> </td> <td class="content-cell"> </td> <td class="content-cell"> </td> <td class="content-cell"> </td> <td class="content-cell"> </td> <td class="content-cell"> </td> <td class="content-cell"> </td> <td class="content-cell"> </td> <td class="content-cell"> </td> <td class="content-cell"> </td> <td class="content-cell"> </td> <td class="content-cell"> </td> <td class="content-cell"> </td> <td class="content-cell"> </td> </tr> <tr> <td class="content-cell" data-parent="0">X</td> <td class="content-cell"> </td> <td class="content-cell"> </td> <td class="content-cell">X</td> <td class="content-cell"> </td> <td class="content-cell"> </td> <td class="content-cell"> </td> <td class="content-cell"> </td> <td class="content-cell">X</td> <td class="content-cell">X</td> <td class="content-cell">X</td> <td class="content-cell"> </td> <td class="content-cell">X</td> <td class="content-cell">X</td> <td class="content-cell"> </td> <td class="content-cell">X</td> <td class="content-cell">X</td> <td class="content-cell">X</td> <td class="content-cell"> </td> </tr> <tr> <td class="content-cell" data-parent="0"> </td> <td class="content-cell">X</td> <td class="content-cell">X</td> <td class="content-cell"> </td> <td class="content-cell"> </td> <td class="content-cell">X</td> <td class="content-cell">X</td> <td class="content-cell"> </td> <td class="content-cell"> </td> <td class="content-cell"> </td> <td class="content-cell"> </td> <td class="content-cell"> </td> <td class="content-cell"> </td> <td class="content-cell"> </td> <td class="content-cell"> </td> <td class="content-cell"> </td> <td class="content-cell"> </td> <td class="content-cell"> </td> <td class="content-cell"> </td> </tr> <tr> <td class="content-cell" data-parent=""> </td> <td class="content-cell"> </td> <td class="content-cell"> </td> <td class="content-cell"> </td> <td class="content-cell"> </td> <td class="content-cell"> </td> <td class="content-cell"> </td> <td class="content-cell"> </td> <td class="content-cell"> </td> <td class="content-cell"> </td> <td class="content-cell"> </td> <td class="content-cell"> </td> <td class="content-cell"> </td> <td class="content-cell"> </td> <td class="content-cell"> </td> <td class="content-cell"> </td> <td class="content-cell"> </td> <td class="content-cell"> </td> <td class="content-cell"> </td> </tr> <tr> <td class="content-cell" data-parent="3"> </td> <td class="content-cell"> </td> <td class="content-cell"> </td> <td class="content-cell"> </td> <td class="content-cell">X</td> <td class="content-cell"> </td> <td class="content-cell"> </td> <td class="content-cell">X</td> <td class="content-cell"> </td> <td class="content-cell"> </td> <td class="content-cell"> </td> <td class="content-cell">X</td> <td class="content-cell"> </td> <td class="content-cell"> </td> <td class="content-cell">X</td> <td class="content-cell"> </td> <td class="content-cell"> </td> <td class="content-cell"> </td> <td class="content-cell">X</td> </tr> <tr> <td class="content-cell" data-parent="3"> </td> <td class="content-cell"> </td> <td class="content-cell"> </td> <td class="content-cell"> </td> <td class="content-cell"> </td> <td class="content-cell"> </td> <td class="content-cell"> </td> <td class="content-cell"> </td> <td class="content-cell"> </td> <td class="content-cell"> </td> <td class="content-cell"> </td> <td class="content-cell"> </td> <td class="content-cell"> </td> <td class="content-cell"> </td> <td class="content-cell"> </td> <td class="content-cell"> </td> <td class="content-cell"> </td> <td class="content-cell"> </td> <td class="content-cell"> </td> </tr> </table> </div> </div> </div> </div> <table class="event-sequence-list"> <tr> <td class="column-header">Event<br>Number</td> <td class="column-header">Event</td> <td class="column-header">Next State</td> </tr> <tr> <td class="">START</td> <td class="">-</td> <td class="">ss1.s1</td> </tr> <tr> <td class="">1</td> <td class="">ev2</td> <td class="">ss1.s2</td> </tr> <tr> <td class="">2</td> <td class="">ev2</td> <td class="">ss1.s2</td> </tr> <tr> <td class="">3</td> <td class="">ev1</td> <td class="">ss1.s1</td> </tr> <tr> <td class="">4</td> <td class="">ev4</td> <td class="">ss2.s3</td> </tr> <tr> <td class="">5</td> <td class="">ev2</td> <td class="">ss1.s2</td> </tr> <tr> <td class="">6</td> <td class="">ev2</td> <td class="">ss1.s2</td> </tr> <tr> <td class="">7</td> <td class="">ev3</td> <td class="">ss2.s3</td> </tr> <tr> <td class="">8</td> <td class="">ev1</td> <td class="">ss1.s1</td> </tr> <tr> <td class="">9</td> <td class="">ev1</td> <td class="">ss1.s1</td> </tr> <tr> <td class="">10</td> <td class="">ev1</td> <td class="">ss1.s1</td> </tr> <tr> <td class="">11</td> <td class="">ev4</td> <td class="">ss2.s3</td> </tr> <tr> <td class="">12</td> <td class="">ev1</td> <td class="">ss1.s1</td> </tr> <tr> <td class="">13</td> <td class="">ev1</td> <td class="">ss1.s1</td> </tr> <tr> <td class="">14</td> <td class="">ev3</td> <td class="">ss2.s3</td> </tr> <tr> <td class="">15</td> <td class="">ev5</td> <td class="">ss1.s1</td> </tr> <tr> <td class="">16</td> <td class="">ev1</td> <td class="">ss1.s1</td> </tr> <tr> <td class="">17</td> <td class="">ev1</td> <td class="">ss1.s1</td> </tr> <tr> <td class="">18</td> <td class="">ev3</td> <td class="">ss2.s3</td> </tr> </table> <p>Event sequence ending reason: Hit arbitrary counter</p> <script> function formatEventSequence(wrapper) { if(wrapper === undefined || wrapper.innerHTML === "") { return; } // Calculate spacer height due to slanted names var longest = 0; var last = 0; var columnHeaders = wrapper .getElementsByClassName("column-header"); for(var i = 0; i < columnHeaders.length; i++) { var innerSpan = columnHeaders[i].firstChild.firstChild; if(longest < innerSpan.offsetWidth) longest = innerSpan.offsetWidth; if(i == columnHeaders.length - 1) last = innerSpan.offsetWidth; } var spacerHeight = longest * Math.cos(45 * (Math.PI / 180)); var lastLabelWidth = last * Math.sin(45 * (Math.PI / 180)); // Get the various elements var tableBody = wrapper.getElementsByClassName("table-body")[0]; var floatingCol = wrapper.getElementsByClassName('floating-col')[0]; var innerWrapper = wrapper.getElementsByClassName("inner-wrapper")[0]; var actualTable = innerWrapper.getElementsByTagName('table')[0] // give the inner elements the header space for the slanted headers tableBody.style.height = tableBody.offsetHeight + spacerHeight +'px'; // Make the inner wrapper long enough to hold the scrollable contents innerWrapper.style.width = floatingCol.offsetWidth + actualTable.offsetWidth + lastLabelWidth + 'px'; // Move the elements down so the headers show actualTable.style.top = spacerHeight + 'px'; floatingCol.style.top = spacerHeight - 1 + 'px'; // Move the table body over to accommodate the floating header column innerWrapper.getElementsByTagName('table')[0].style.left = floatingCol.offsetWidth - 6 + 'px'; }; var wrapperIndex = 0; while(true) { var wrapper = document.getElementById("wrapper" + wrapperIndex); if(wrapper === null) { break; } wrapperIndex++; formatEventSequence(wrapper); } </script> <style> /* Shared Styles */ .event-sequence-grid, .event-sequence-list { font-family: sans-serif; } .event-sequence-grid table, table.event-sequence-list { border-collapse: collapse; } .event-sequence-list td, .event-sequence-grid td { line-height: 1; padding: 2px 10px 2px 10px; white-space: nowrap; text-align: center; } /* Grid-only styles */ .event-sequence-grid .content-cell { border: 1px solid black; } .event-sequence-grid .row-header { text-align: left; } .event-sequence-grid .column-header > div { width: 10px; -moz-transform: perspective(999px) /* Helps with the font distortion */ translate(20px, 0px) rotate(-45deg); -moz-transform-origin: left bottom; -ms-transform: translate(21px, 0px) rotate(-45deg); -ms-transform-origin: left bottom; -webkit-transform: translate(21px, 2px) rotate(-45deg); -webkit-transform-origin: left bottom; -o-transform: translate(21px, 0px) rotate(-45deg); -o-transform-origin: left bottom; } .event-sequence-grid .column-header span { border-bottom: 1px solid black; } /* Floating column styles */ .event-sequence-grid .wrapper { position: relative; width: 100%; overflow: hidden; } .event-sequence-grid .floating-col { display: inline-block; position: absolute; overflow: hidden; border-right: 1px solid black; z-index: 1; } .event-sequence-grid .inner-wrapper { position: relative; } .event-sequence-grid .hidden-spacer { position: relative; display: inline-block; } .event-sequence-grid .table-body { overflow-x: scroll; } .event-sequence-grid .table-body table { position: relative; display: inline-block; } .event-sequence-grid .floating-col td { background-color: white; border: 1px solid black; } .event-sequence-grid .floating-col td.first { } /* List-only styles */ table.event-sequence-list { margin-top: 20px; } .event-sequence-list td { border: 1px solid black; } </style> <h1>Event sequence generated by Umple from all_states_visited.ump</h1> <p>Note that the sequence of events is randomly generated. Subsequential event generation will likely yield different results.</p> <h2>Class EventSeqAllVisited state machine sm</h2> <div class="event-sequence-grid"> <div id="wrapper0" class="wrapper"> <div class="floating-col"> <table> <tr> <td class="row-header first">States</td> </tr> <tr> <td class="row-header" data-parent="">s1</td> </tr> <tr> <td class="row-header" data-parent="">s2</td> </tr> <tr> <td class="row-header" data-parent="">s3</td> </tr> <tr> <td class="row-header" data-parent="">s4</td> </tr> </table> </div> <div class="table-body"> <div class="inner-wrapper"> <table> <tr> <td class="column-header"><div><span>START</span></div></td> <td class="column-header"><div><span>1. ev4</span></div></td> <td class="column-header"><div><span>2. ev1</span></div></td> <td class="column-header"><div><span>3. ev2</span></div></td> <td class="column-header"><div><span>4. ev1</span></div></td> <td class="column-header"><div><span>5. ev3</span></div></td> </tr> <tr> <td class="content-cell" data-parent="">X</td> <td class="content-cell"> </td> <td class="content-cell">X</td> <td class="content-cell"> </td> <td class="content-cell">X</td> <td class="content-cell"> </td> </tr> <tr> <td class="content-cell" data-parent=""> </td> <td class="content-cell"> </td> <td class="content-cell"> </td> <td class="content-cell">X</td> <td class="content-cell"> </td> <td class="content-cell"> </td> </tr> <tr> <td class="content-cell" data-parent=""> </td> <td class="content-cell"> </td> <td class="content-cell"> </td> <td class="content-cell"> </td> <td class="content-cell"> </td> <td class="content-cell">X</td> </tr> <tr> <td class="content-cell" data-parent=""> </td> <td class="content-cell">X</td> <td class="content-cell"> </td> <td class="content-cell"> </td> <td class="content-cell"> </td> <td class="content-cell"> </td> </tr> </table> </div> </div> </div> </div> <table class="event-sequence-list"> <tr> <td class="column-header">Event<br>Number</td> <td class="column-header">Event</td> <td class="column-header">Next State</td> </tr> <tr> <td class="">START</td> <td class="">-</td> <td class="">s1</td> </tr> <tr> <td class="">1</td> <td class="">ev4</td> <td class="">s4</td> </tr> <tr> <td class="">2</td> <td class="">ev1</td> <td class="">s1</td> </tr> <tr> <td class="">3</td> <td class="">ev2</td> <td class="">s2</td> </tr> <tr> <td class="">4</td> <td class="">ev1</td> <td class="">s1</td> </tr> <tr> <td class="">5</td> <td class="">ev3</td> <td class="">s3</td> </tr> </table> <p>Event sequence ending reason: Visited all states</p> <script> function formatEventSequence(wrapper) { if(wrapper === undefined || wrapper.innerHTML === "") { return; } // Calculate spacer height due to slanted names var longest = 0; var last = 0; var columnHeaders = wrapper .getElementsByClassName("column-header"); for(var i = 0; i < columnHeaders.length; i++) { var innerSpan = columnHeaders[i].firstChild.firstChild; if(longest < innerSpan.offsetWidth) longest = innerSpan.offsetWidth; if(i == columnHeaders.length - 1) last = innerSpan.offsetWidth; } var spacerHeight = longest * Math.cos(45 * (Math.PI / 180)); var lastLabelWidth = last * Math.sin(45 * (Math.PI / 180)); // Get the various elements var tableBody = wrapper.getElementsByClassName("table-body")[0]; var floatingCol = wrapper.getElementsByClassName('floating-col')[0]; var innerWrapper = wrapper.getElementsByClassName("inner-wrapper")[0]; var actualTable = innerWrapper.getElementsByTagName('table')[0] // give the inner elements the header space for the slanted headers tableBody.style.height = tableBody.offsetHeight + spacerHeight +'px'; // Make the inner wrapper long enough to hold the scrollable contents innerWrapper.style.width = floatingCol.offsetWidth + actualTable.offsetWidth + lastLabelWidth + 'px'; // Move the elements down so the headers show actualTable.style.top = spacerHeight + 'px'; floatingCol.style.top = spacerHeight - 1 + 'px'; // Move the table body over to accommodate the floating header column innerWrapper.getElementsByTagName('table')[0].style.left = floatingCol.offsetWidth - 6 + 'px'; }; var wrapperIndex = 0; while(true) { var wrapper = document.getElementById("wrapper" + wrapperIndex); if(wrapper === null) { break; } wrapperIndex++; formatEventSequence(wrapper); } </script> <style> /* Shared Styles */ .event-sequence-grid, .event-sequence-list { font-family: sans-serif; } .event-sequence-grid table, table.event-sequence-list { border-collapse: collapse; } .event-sequence-list td, .event-sequence-grid td { line-height: 1; padding: 2px 10px 2px 10px; white-space: nowrap; text-align: center; } /* Grid-only styles */ .event-sequence-grid .content-cell { border: 1px solid black; } .event-sequence-grid .row-header { text-align: left; } .event-sequence-grid .column-header > div { width: 10px; -moz-transform: perspective(999px) /* Helps with the font distortion */ translate(20px, 0px) rotate(-45deg); -moz-transform-origin: left bottom; -ms-transform: translate(21px, 0px) rotate(-45deg); -ms-transform-origin: left bottom; -webkit-transform: translate(21px, 2px) rotate(-45deg); -webkit-transform-origin: left bottom; -o-transform: translate(21px, 0px) rotate(-45deg); -o-transform-origin: left bottom; } .event-sequence-grid .column-header span { border-bottom: 1px solid black; } /* Floating column styles */ .event-sequence-grid .wrapper { position: relative; width: 100%; overflow: hidden; } .event-sequence-grid .floating-col { display: inline-block; position: absolute; overflow: hidden; border-right: 1px solid black; z-index: 1; } .event-sequence-grid .inner-wrapper { position: relative; } .event-sequence-grid .hidden-spacer { position: relative; display: inline-block; } .event-sequence-grid .table-body { overflow-x: scroll; } .event-sequence-grid .table-body table { position: relative; display: inline-block; } .event-sequence-grid .floating-col td { background-color: white; border: 1px solid black; } .event-sequence-grid .floating-col td.first { } /* List-only styles */ table.event-sequence-list { margin-top: 20px; } .event-sequence-list td { border: 1px solid black; } </style> <h1>Event sequence generated by Umple from timed_transition.ump</h1> <p>Note that the sequence of events is randomly generated. Subsequential event generation will likely yield different results.</p> <h2>Class TimedTransition state machine sm</h2> <div class="event-sequence-grid"> <div id="wrapper0" class="wrapper"> <div class="floating-col"> <table> <tr> <td class="row-header first">States</td> </tr> <tr> <td class="row-header" data-parent="">s1</td> </tr> <tr> <td class="row-header" data-parent="">s2</td> </tr> <tr> <td class="row-header" data-parent="">s3</td> </tr> <tr> <td class="row-header" data-parent="">s4</td> </tr> <tr> <td class="row-header" data-parent="">s5</td> </tr> </table> </div> <div class="table-body"> <div class="inner-wrapper"> <table> <tr> <td class="column-header"><div><span>START</span></div></td> <td class="column-header"><div><span>1. after(5)</span></div></td> <td class="column-header"><div><span>2. ev1</span></div></td> <td class="column-header"><div><span>3. ev1</span></div></td> <td class="column-header"><div><span>4. ev1</span></div></td> </tr> <tr> <td class="content-cell" data-parent="">X</td> <td class="content-cell"> </td> <td class="content-cell"> </td> <td class="content-cell"> </td> <td class="content-cell"> </td> </tr> <tr> <td class="content-cell" data-parent=""> </td> <td class="content-cell">X</td> <td class="content-cell"> </td> <td class="content-cell"> </td> <td class="content-cell"> </td> </tr> <tr> <td class="content-cell" data-parent=""> </td> <td class="content-cell"> </td> <td class="content-cell">X</td> <td class="content-cell"> </td> <td class="content-cell"> </td> </tr> <tr> <td class="content-cell" data-parent=""> </td> <td class="content-cell"> </td> <td class="content-cell"> </td> <td class="content-cell">X</td> <td class="content-cell"> </td> </tr> <tr> <td class="content-cell" data-parent=""> </td> <td class="content-cell"> </td> <td class="content-cell"> </td> <td class="content-cell"> </td> <td class="content-cell">X</td> </tr> </table> </div> </div> </div> </div> <table class="event-sequence-list"> <tr> <td class="column-header">Event<br>Number</td> <td class="column-header">Event</td> <td class="column-header">Next State</td> </tr> <tr> <td class="">START</td> <td class="">-</td> <td class="">s1</td> </tr> <tr> <td class="">1</td> <td class="">after(5)</td> <td class="">s2</td> </tr> <tr> <td class="">2</td> <td class="">ev1</td> <td class="">s3</td> </tr> <tr> <td class="">3</td> <td class="">ev1</td> <td class="">s4</td> </tr> <tr> <td class="">4</td> <td class="">ev1</td> <td class="">s5</td> </tr> </table> <p>Event sequence ending reason: Visited all states</p> <script> function formatEventSequence(wrapper) { if(wrapper === undefined || wrapper.innerHTML === "") { return; } // Calculate spacer height due to slanted names var longest = 0; var last = 0; var columnHeaders = wrapper .getElementsByClassName("column-header"); for(var i = 0; i < columnHeaders.length; i++) { var innerSpan = columnHeaders[i].firstChild.firstChild; if(longest < innerSpan.offsetWidth) longest = innerSpan.offsetWidth; if(i == columnHeaders.length - 1) last = innerSpan.offsetWidth; } var spacerHeight = longest * Math.cos(45 * (Math.PI / 180)); var lastLabelWidth = last * Math.sin(45 * (Math.PI / 180)); // Get the various elements var tableBody = wrapper.getElementsByClassName("table-body")[0]; var floatingCol = wrapper.getElementsByClassName('floating-col')[0]; var innerWrapper = wrapper.getElementsByClassName("inner-wrapper")[0]; var actualTable = innerWrapper.getElementsByTagName('table')[0] // give the inner elements the header space for the slanted headers tableBody.style.height = tableBody.offsetHeight + spacerHeight +'px'; // Make the inner wrapper long enough to hold the scrollable contents innerWrapper.style.width = floatingCol.offsetWidth + actualTable.offsetWidth + lastLabelWidth + 'px'; // Move the elements down so the headers show actualTable.style.top = spacerHeight + 'px'; floatingCol.style.top = spacerHeight - 1 + 'px'; // Move the table body over to accommodate the floating header column innerWrapper.getElementsByTagName('table')[0].style.left = floatingCol.offsetWidth - 6 + 'px'; }; var wrapperIndex = 0; while(true) { var wrapper = document.getElementById("wrapper" + wrapperIndex); if(wrapper === null) { break; } wrapperIndex++; formatEventSequence(wrapper); } </script>